From a1ebc651ab830a381e8960029145b557990342d6 Mon Sep 17 00:00:00 2001 From: xuwx1 <2530900445@qq.com> Date: Thu, 11 Dec 2025 13:57:18 +0800 Subject: [PATCH] updata lightx2v --- .gitignore | 30 + .pre-commit-config.yaml | 22 + LICENSE | 201 + README.md | 295 +- app/README.md | 13 + app/gradio_demo.py | 1442 +++ app/gradio_demo_zh.py | 1442 +++ app/run_gradio.sh | 181 + app/run_gradio_win.bat | 196 + assets/figs/offload/fig1_en.png | Bin 0 -> 28359 bytes assets/figs/offload/fig1_zh.png | Bin 0 -> 32161 bytes assets/figs/offload/fig2_en.png | Bin 0 -> 21698 bytes assets/figs/offload/fig2_zh.png | Bin 0 -> 23017 bytes assets/figs/offload/fig3_en.png | Bin 0 -> 25025 bytes assets/figs/offload/fig3_zh.png | Bin 0 -> 25706 bytes assets/figs/offload/fig4_en.png | Bin 0 -> 46194 bytes assets/figs/offload/fig4_zh.png | Bin 0 -> 44789 bytes assets/figs/offload/fig5_en.png | Bin 0 -> 28465 bytes assets/figs/offload/fig5_zh.png | Bin 0 -> 53596 bytes assets/figs/portabl_windows/pic1.png | Bin 0 -> 377591 bytes assets/figs/portabl_windows/pic_gradio_en.png | Bin 0 -> 290512 bytes assets/figs/portabl_windows/pic_gradio_zh.png | Bin 0 -> 265559 bytes assets/figs/step_distill/fig_01.png | Bin 0 -> 370168 bytes assets/img_lightx2v.png | Bin 0 -> 1055022 bytes assets/inputs/audio/multi_person/config.json | 12 + .../multi_person/config_multi_template.json | 12 + .../multi_person/config_single_template.json | 8 + assets/inputs/audio/multi_person/p1.mp3 | Bin 0 -> 621967 bytes assets/inputs/audio/multi_person/p1_mask.png | Bin 0 -> 3854 bytes assets/inputs/audio/multi_person/p2.mp3 | Bin 0 -> 621967 bytes assets/inputs/audio/multi_person/p2_mask.png | Bin 0 -> 3856 bytes .../inputs/audio/multi_person/seko_input.png | Bin 0 -> 583852 bytes assets/inputs/audio/seko_input.mp3 | Bin 0 -> 361787 bytes assets/inputs/audio/seko_input.png | Bin 0 -> 504390 bytes .../imgs/flf2v_input_first_frame-fs8.png | Bin 0 -> 469575 bytes .../imgs/flf2v_input_last_frame-fs8.png | Bin 0 -> 409871 bytes assets/inputs/imgs/girl.png | Bin 0 -> 248908 bytes assets/inputs/imgs/img_0.jpg | Bin 0 -> 250628 bytes assets/inputs/imgs/img_1.jpg | Bin 0 -> 410321 bytes assets/inputs/imgs/img_2.jpg | Bin 0 -> 36300 bytes assets/inputs/imgs/snake.png | Bin 0 -> 445894 bytes configs/attentions/wan_i2v_flash.json | 13 + configs/attentions/wan_i2v_nbhd_480p.json | 17 + configs/attentions/wan_i2v_nbhd_720p.json | 17 + configs/attentions/wan_i2v_radial.json | 13 + configs/attentions/wan_i2v_sage.json | 13 + configs/attentions/wan_i2v_svg.json | 13 + configs/attentions/wan_i2v_svg2.json | 13 + configs/attentions/wan_t2v_sparge.json | 16 + configs/bench/lightx2v_1.json | 13 + configs/bench/lightx2v_2.json | 13 + configs/bench/lightx2v_3.json | 16 + configs/bench/lightx2v_3_distill.json | 22 + configs/bench/lightx2v_4.json | 35 + configs/bench/lightx2v_5.json | 19 + configs/bench/lightx2v_5_distill.json | 25 + configs/bench/lightx2v_6.json | 19 + configs/bench/lightx2v_6_distill.json | 25 + configs/caching/adacache/wan_i2v_ada.json | 15 + configs/caching/adacache/wan_t2v_ada.json | 15 + .../caching/custom/wan_i2v_custom_480p.json | 21 + .../caching/custom/wan_i2v_custom_720p.json | 32 + .../caching/custom/wan_t2v_custom_14b.json | 33 + .../caching/custom/wan_t2v_custom_1_3b.json | 33 + configs/caching/dualblock/wan_t2v_1_3b.json | 17 + .../caching/dynamicblock/wan_t2v_1_3b.json | 17 + configs/caching/firstblock/wan_t2v_1_3b.json | 17 + .../wan_i2v_dist_cfg_ulysses_mag_480p.json | 109 + .../caching/magcache/wan_i2v_mag_480p.json | 104 + .../wan_i2v_mag_calibration_480p.json | 104 + .../wan_t2v_dist_cfg_ulysses_mag_1_3b.json | 130 + .../caching/magcache/wan_t2v_mag_1_3b.json | 125 + .../wan_t2v_mag_calibration_1_3b.json | 125 + .../taylorseer/wan_t2v_taylorseer.json | 15 + .../caching/teacache/wan_i2v_tea_480p.json | 32 + .../caching/teacache/wan_i2v_tea_720p.json | 32 + .../teacache/wan_t2v_1_3b_tea_480p.json | 33 + .../caching/teacache/wan_ti2v_tea_720p.json | 25 + configs/causvid/wan_i2v_causvid.json | 29 + configs/causvid/wan_t2v_causvid.json | 29 + configs/changing_resolution/wan_i2v.json | 20 + configs/changing_resolution/wan_i2v_U.json | 22 + configs/changing_resolution/wan_t2v.json | 21 + configs/changing_resolution/wan_t2v_U.json | 23 + .../wan_t2v_U_teacache.json | 42 + configs/deploy/wan_i2v.json | 30 + configs/deploy/wan_t2v.json | 31 + configs/dist_infer/wan22_moe_i2v_cfg.json | 25 + .../dist_infer/wan22_moe_i2v_cfg_ulysses.json | 25 + configs/dist_infer/wan22_moe_i2v_ulysses.json | 26 + configs/dist_infer/wan22_moe_t2v_cfg.json | 24 + .../dist_infer/wan22_moe_t2v_cfg_ulysses.json | 26 + configs/dist_infer/wan22_moe_t2v_ulysses.json | 25 + configs/dist_infer/wan22_ti2v_i2v_cfg.json | 25 + .../wan22_ti2v_i2v_cfg_ulysses.json | 27 + .../dist_infer/wan22_ti2v_i2v_ulysses.json | 26 + configs/dist_infer/wan22_ti2v_t2v_cfg.json | 24 + .../wan22_ti2v_t2v_cfg_ulysses.json | 26 + .../dist_infer/wan22_ti2v_t2v_ulysses.json | 25 + .../dist_infer/wan_i2v_dist_cfg_ulysses.json | 18 + configs/dist_infer/wan_i2v_dist_ring.json | 17 + configs/dist_infer/wan_i2v_dist_ulysses.json | 17 + configs/dist_infer/wan_t2v_dist_cfg.json | 17 + configs/dist_infer/wan_t2v_dist_cfg_ring.json | 19 + .../dist_infer/wan_t2v_dist_cfg_ulysses.json | 19 + configs/dist_infer/wan_t2v_dist_ring.json | 18 + configs/dist_infer/wan_t2v_dist_ulysses.json | 18 + .../distill/wan_i2v_distill_4step_cfg.json | 19 + .../wan_i2v_distill_4step_cfg_4090.json | 29 + .../wan_i2v_distill_4step_cfg_4090_lora.json | 35 + .../wan_i2v_distill_4step_cfg_lora.json | 20 + .../distill/wan_t2v_distill_4step_cfg.json | 20 + .../wan_t2v_distill_4step_cfg_4090.json | 30 + .../wan_t2v_distill_4step_cfg_dynamic.json | 22 + .../wan_t2v_distill_4step_cfg_lora.json | 21 + .../wan_t2v_distill_4step_cfg_lora_4090.json | 36 + .../4090/hy15_t2v_480p_bf16.json | 18 + .../4090/hy15_t2v_480p_bf16_dist.json | 16 + .../4090/hy15_t2v_480p_fp8.json | 24 + .../5090/hy15_t2v_480p_bf16.json | 18 + .../5090/hy15_t2v_480p_bf16_dist.json | 22 + .../5090/hy15_t2v_480p_fp8.json | 19 + .../cache/hy_15_i2v_480p_magcache.json | 17 + .../hy_15_i2v_480p_magcache_calibration.json | 13 + .../cache/hy_15_i2v_480p_teacache.json | 20 + .../cache/hy_15_i2v_720p_teacache.json | 20 + .../cache/hy_15_t2v_480p_teacache.json | 20 + .../cache/hy_15_t2v_720p_teacache.json | 20 + ...5_i2v_480p_int8_offload_dist_fp8_comm.json | 23 + .../hunyuan_video_i2v_480p.json | 11 + .../hunyuan_video_i2v_720p.json | 11 + .../hunyuan_video_i2v_720p_cfg_distilled.json | 11 + .../hunyuan_video_t2v_480p.json | 12 + .../hunyuan_video_t2v_480p_distill.json | 19 + .../hunyuan_video_t2v_720p.json | 12 + .../lightae/hy15_t2v_480p_bf16.json | 14 + .../offload/hy15_t2v_480p_bf16.json | 18 + .../quant/hy15_t2v_480p_fp8.json | 15 + .../hunyuan_video_15/vsr/hy15_i2v_480p.json | 19 + .../matrix_game2/matrix_game2_gta_drive.json | 72 + .../matrix_game2_gta_drive_streaming.json | 72 + .../matrix_game2/matrix_game2_templerun.json | 65 + .../matrix_game2_templerun_streaming.json | 72 + .../matrix_game2/matrix_game2_universal.json | 72 + .../matrix_game2_universal_streaming.json | 72 + configs/model_pipeline.json | 179 + .../block/qwen_image_i2i_2509_block.json | 66 + .../offload/block/qwen_image_i2i_block.json | 66 + .../offload/block/qwen_image_t2i_block.json | 86 + configs/offload/block/wan_i2v_block.json | 23 + configs/offload/block/wan_t2v_1_3b.json | 17 + configs/offload/block/wan_t2v_block.json | 24 + .../disk/wan_i2v_phase_lazy_load_480p.json | 28 + .../disk/wan_i2v_phase_lazy_load_720p.json | 30 + configs/offload/phase/wan_i2v_phase.json | 24 + configs/offload/phase/wan_t2v_phase.json | 25 + configs/quantization/gguf/wan_i2v_q4_k.json | 16 + configs/quantization/wan_i2v.json | 16 + configs/quantization/wan_i2v_q8f.json | 19 + configs/quantization/wan_i2v_torchao.json | 19 + configs/qwen_image/qwen_image_i2i.json | 64 + configs/qwen_image/qwen_image_i2i_2509.json | 64 + .../qwen_image/qwen_image_i2i_2509_quant.json | 67 + configs/qwen_image/qwen_image_i2i_lora.json | 70 + configs/qwen_image/qwen_image_t2i.json | 85 + .../seko_talk/5090/seko_talk_5090_bf16.json | 23 + .../seko_talk/5090/seko_talk_5090_int8.json | 29 + .../5090/seko_talk_5090_int8_8gpu.json | 34 + .../seko_talk/A800/seko_talk_A800_int8.json | 22 + .../A800/seko_talk_A800_int8_dist_2gpu.json | 26 + .../A800/seko_talk_A800_int8_dist_4gpu.json | 26 + .../A800/seko_talk_A800_int8_dist_8gpu.json | 26 + .../seko_talk/L40s/1gpu/seko_talk_bf16.json | 23 + .../seko_talk/L40s/1gpu/seko_talk_fp8.json | 27 + .../seko_talk/L40s/2gpu/seko_talk_bf16.json | 25 + .../seko_talk/L40s/2gpu/seko_talk_fp8.json | 31 + .../seko_talk/L40s/4gpu/seko_talk_bf16.json | 25 + .../seko_talk/L40s/4gpu/seko_talk_fp8.json | 31 + .../seko_talk/L40s/8gpu/seko_talk_bf16.json | 25 + .../seko_talk/L40s/8gpu/seko_talk_fp8.json | 31 + configs/seko_talk/mlu/seko_talk_bf16.json | 18 + configs/seko_talk/mlu/seko_talk_int8.json | 29 + .../seko_talk/mlu/seko_talk_int8_dist.json | 33 + configs/seko_talk/multi_person/01_base.json | 16 + .../seko_talk/multi_person/02_base_fp8.json | 22 + configs/seko_talk/multi_person/03_dist.json | 20 + .../seko_talk/multi_person/04_dist_fp8.json | 26 + .../multi_person/15_base_compile.json | 27 + configs/seko_talk/seko_talk_01_base.json | 16 + configs/seko_talk/seko_talk_02_fp8.json | 24 + configs/seko_talk/seko_talk_03_dist.json | 20 + configs/seko_talk/seko_talk_04_fp8_dist.json | 26 + .../seko_talk_05_offload_fp8_4090.json | 32 + .../seko_talk_05_offload_fp8_4090_dist.json | 36 + .../seko_talk_06_offload_fp8_H100.json | 30 + .../seko_talk/seko_talk_07_dist_offload.json | 28 + configs/seko_talk/seko_talk_08_5B_base.json | 31 + .../seko_talk_09_base_fixed_min_area.json | 16 + .../seko_talk_10_fp8_dist_fixed_min_area.json | 26 + .../seko_talk_11_fp8_dist_fixed_shape.json | 30 + ...talk_12_fp8_dist_fixed_shape_8gpus_1s.json | 31 + ...8_dist_bucket_shape_8gpus_5s_realtime.json | 62 + ...8_dist_bucket_shape_8gpus_1s_realtime.json | 63 + .../seko_talk/seko_talk_15_base_compile.json | 59 + .../seko_talk_16_fp8_dist_compile.json | 71 + configs/seko_talk/seko_talk_17_base_vsr.json | 25 + configs/seko_talk/seko_talk_22_nbhd_attn.json | 16 + .../seko_talk_23_fp8_dist_nbhd_attn.json | 28 + ...ko_talk_24_fp8_dist_compile_nbhd_attn.json | 74 + .../seko_talk_25_int8_dist_fp8_comm.json | 40 + configs/seko_talk/seko_talk_28_f2v.json | 24 + configs/self_forcing/wan_t2v_sf.json | 26 + .../sparse_attn/spas_sage_attn/wan_i2v.json | 13 + .../sparse_attn/spas_sage_attn/wan_t2v.json | 14 + .../video_frame_interpolation/wan_t2v.json | 19 + configs/volcengine_voices_list.json | 4727 ++++++++++ configs/wan/wan_flf2v.json | 13 + configs/wan/wan_i2v.json | 13 + configs/wan/wan_t2v.json | 14 + configs/wan/wan_t2v_enhancer.json | 19 + configs/wan/wan_vace.json | 13 + configs/wan22/wan_animate.json | 18 + configs/wan22/wan_animate_4090.json | 25 + configs/wan22/wan_animate_lora.json | 24 + configs/wan22/wan_animate_replace.json | 18 + configs/wan22/wan_animate_replace_4090.json | 25 + configs/wan22/wan_distill_moe_flf2v.json | 28 + configs/wan22/wan_distill_moe_flf2v_fp8.json | 32 + configs/wan22/wan_distill_moe_flf2v_int8.json | 32 + .../wan_distill_moe_flf2v_with_lora.json | 40 + configs/wan22/wan_moe_flf2v.json | 21 + configs/wan22/wan_moe_i2v.json | 20 + configs/wan22/wan_moe_i2v_4090.json | 27 + configs/wan22/wan_moe_i2v_audio.json | 38 + configs/wan22/wan_moe_i2v_distill.json | 28 + configs/wan22/wan_moe_i2v_distill_4090.json | 32 + configs/wan22/wan_moe_i2v_distill_5090.json | 32 + configs/wan22/wan_moe_i2v_distill_quant.json | 32 + .../wan22/wan_moe_i2v_distill_with_lora.json | 40 + configs/wan22/wan_moe_t2v.json | 21 + configs/wan22/wan_moe_t2v_distill.json | 34 + configs/wan22/wan_ti2v_i2v.json | 25 + configs/wan22/wan_ti2v_i2v_4090.json | 26 + configs/wan22/wan_ti2v_t2v.json | 24 + configs/wan22/wan_ti2v_t2v_4090.json | 25 + dockerfiles/Dockerfile | 105 + dockerfiles/Dockerfile_5090 | 105 + dockerfiles/Dockerfile_cambricon_mlu590 | 31 + dockerfiles/Dockerfile_cu124 | 76 + dockerfiles/Dockerfile_deploy | 32 + docs/EN/.readthedocs.yaml | 17 + docs/EN/Makefile | 20 + docs/EN/make.bat | 35 + docs/EN/source/conf.py | 128 + .../EN/source/deploy_guides/deploy_comfyui.md | 25 + docs/EN/source/deploy_guides/deploy_gradio.md | 240 + .../deploy_guides/deploy_local_windows.md | 127 + .../EN/source/deploy_guides/deploy_service.md | 88 + .../source/deploy_guides/for_low_latency.md | 41 + .../source/deploy_guides/for_low_resource.md | 219 + docs/EN/source/deploy_guides/lora_deploy.md | 214 + docs/EN/source/getting_started/benchmark.md | 3 + .../getting_started/benchmark_source.md | 149 + .../source/getting_started/model_structure.md | 573 ++ docs/EN/source/getting_started/quickstart.md | 349 + docs/EN/source/index.rst | 67 + docs/EN/source/method_tutorials/attention.md | 35 + .../autoregressive_distill.md | 53 + docs/EN/source/method_tutorials/cache.md | 3 + .../source/method_tutorials/cache_source.md | 139 + .../method_tutorials/changing_resolution.md | 66 + docs/EN/source/method_tutorials/offload.md | 177 + docs/EN/source/method_tutorials/parallel.md | 53 + .../source/method_tutorials/quantization.md | 158 + .../source/method_tutorials/step_distill.md | 183 + .../video_frame_interpolation.md | 246 + docs/PAPERS_ZH_CN/.readthedocs.yaml | 17 + docs/PAPERS_ZH_CN/Makefile | 20 + docs/PAPERS_ZH_CN/make.bat | 35 + docs/PAPERS_ZH_CN/source/conf.py | 122 + docs/PAPERS_ZH_CN/source/index.rst | 53 + docs/PAPERS_ZH_CN/source/papers/RL.md | 3 + docs/PAPERS_ZH_CN/source/papers/attention.md | 113 + .../source/papers/autoregressive.md | 3 + docs/PAPERS_ZH_CN/source/papers/cache.md | 3 + .../source/papers/changing_resolution.md | 3 + .../source/papers/generation_basics.md | 3 + docs/PAPERS_ZH_CN/source/papers/models.md | 276 + docs/PAPERS_ZH_CN/source/papers/offload.md | 3 + docs/PAPERS_ZH_CN/source/papers/parallel.md | 3 + .../source/papers/prompt_enhance.md | 3 + .../source/papers/quantization.md | 3 + .../source/papers/step_distill.md | 3 + docs/PAPERS_ZH_CN/source/papers/vae.md | 3 + docs/ZH_CN/.readthedocs.yaml | 17 + docs/ZH_CN/Makefile | 20 + docs/ZH_CN/make.bat | 35 + docs/ZH_CN/source/conf.py | 128 + .../source/deploy_guides/deploy_comfyui.md | 25 + .../source/deploy_guides/deploy_gradio.md | 241 + .../deploy_guides/deploy_local_windows.md | 129 + .../source/deploy_guides/deploy_service.md | 88 + .../source/deploy_guides/for_low_latency.md | 42 + .../source/deploy_guides/for_low_resource.md | 223 + .../ZH_CN/source/deploy_guides/lora_deploy.md | 213 + .../ZH_CN/source/getting_started/benchmark.md | 3 + .../getting_started/benchmark_source.md | 149 + .../source/getting_started/model_structure.md | 571 ++ .../source/getting_started/quickstart.md | 352 + docs/ZH_CN/source/index.rst | 68 + .../source/method_tutorials/attention.md | 35 + .../autoregressive_distill.md | 53 + docs/ZH_CN/source/method_tutorials/cache.md | 3 + .../source/method_tutorials/cache_source.md | 139 + .../method_tutorials/changing_resolution.md | 68 + docs/ZH_CN/source/method_tutorials/offload.md | 177 + .../ZH_CN/source/method_tutorials/parallel.md | 55 + .../source/method_tutorials/quantization.md | 158 + .../source/method_tutorials/step_distill.md | 183 + .../video_frame_interpolation.md | 246 + examples/README.md | 284 + examples/README_zh.md | 284 + examples/hunyuan_video/hunyuan_i2v.py | 63 + examples/hunyuan_video/hunyuan_t2v.py | 60 + examples/hunyuan_video/hunyuan_t2v_distill.py | 55 + examples/wan/wan_animate.py | 72 + examples/wan/wan_flf2v.py | 55 + examples/wan/wan_i2v.py | 56 + examples/wan/wan_i2v_distilled.py | 57 + examples/wan/wan_i2v_with_distill_loras.py | 62 + examples/wan/wan_t2v.py | 39 + examples/wan/wan_vace.py | 52 + lightx2v/__init__.py | 18 + lightx2v/common/__init__.py | 0 lightx2v/common/modules/__init__.py | 0 lightx2v/common/modules/weight_module.py | 175 + lightx2v/common/offload/manager.py | 133 + lightx2v/common/ops/__init__.py | 6 + lightx2v/common/ops/attn/__init__.py | 10 + lightx2v/common/ops/attn/flash_attn.py | 89 + lightx2v/common/ops/attn/nbhd_attn.py | 196 + lightx2v/common/ops/attn/radial_attn.py | 185 + lightx2v/common/ops/attn/ring_attn.py | 179 + lightx2v/common/ops/attn/sage_attn.py | 83 + lightx2v/common/ops/attn/spassage_attn.py | 76 + lightx2v/common/ops/attn/svg2_attn.py | 355 + lightx2v/common/ops/attn/svg2_attn_utils.py | 1359 +++ lightx2v/common/ops/attn/svg_attn.py | 409 + lightx2v/common/ops/attn/template.py | 35 + lightx2v/common/ops/attn/torch_sdpa.py | 39 + lightx2v/common/ops/attn/ulysses_attn.py | 415 + lightx2v/common/ops/attn/utils/all2all.py | 89 + lightx2v/common/ops/attn/utils/ring_comm.py | 46 + lightx2v/common/ops/conv/__init__.py | 2 + lightx2v/common/ops/conv/conv2d.py | 61 + lightx2v/common/ops/conv/conv3d.py | 94 + lightx2v/common/ops/embedding/__init__.py | 1 + .../common/ops/embedding/embedding_weight.py | 72 + lightx2v/common/ops/mm/__init__.py | 1 + lightx2v/common/ops/mm/mm_weight.py | 1325 +++ lightx2v/common/ops/norm/__init__.py | 2 + lightx2v/common/ops/norm/layer_norm_weight.py | 220 + lightx2v/common/ops/norm/rms_norm_weight.py | 204 + lightx2v/common/ops/norm/triton_ops.py | 900 ++ lightx2v/common/ops/tensor/__init__.py | 1 + lightx2v/common/ops/tensor/tensor.py | 110 + .../transformer_infer/transformer_infer.py | 46 + lightx2v/deploy/__init__.py | 0 lightx2v/deploy/common/__init__.py | 0 lightx2v/deploy/common/aliyun.py | 81 + lightx2v/deploy/common/audio_separator.py | 376 + lightx2v/deploy/common/face_detector.py | 277 + lightx2v/deploy/common/pipeline.py | 167 + lightx2v/deploy/common/podcasts.py | 696 ++ lightx2v/deploy/common/utils.py | 253 + lightx2v/deploy/common/va_controller.py | 202 + lightx2v/deploy/common/va_reader.py | 274 + lightx2v/deploy/common/va_reader_omni.py | 508 ++ lightx2v/deploy/common/va_recorder.py | 657 ++ lightx2v/deploy/common/va_recorder_x264.py | 321 + lightx2v/deploy/common/video_recorder.py | 422 + lightx2v/deploy/common/volcengine_tts.py | 241 + lightx2v/deploy/data_manager/__init__.py | 248 + .../deploy/data_manager/local_data_manager.py | 120 + .../deploy/data_manager/s3_data_manager.py | 254 + lightx2v/deploy/queue_manager/__init__.py | 25 + .../queue_manager/local_queue_manager.py | 113 + .../queue_manager/rabbitmq_queue_manager.py | 124 + lightx2v/deploy/server/__init__.py | 0 lightx2v/deploy/server/__main__.py | 1490 ++++ lightx2v/deploy/server/auth.py | 205 + lightx2v/deploy/server/frontend/.gitignore | 24 + lightx2v/deploy/server/frontend/README.md | 5 + lightx2v/deploy/server/frontend/index.html | 133 + .../deploy/server/frontend/package-lock.json | 2143 +++++ lightx2v/deploy/server/frontend/package.json | 26 + .../deploy/server/frontend/public/cover.png | Bin 0 -> 1235899 bytes .../deploy/server/frontend/public/female.svg | 3 + .../deploy/server/frontend/public/logo.svg | 1 + .../server/frontend/public/logo_black.png | Bin 0 -> 30640 bytes .../server/frontend/public/logo_black.svg | 1 + .../deploy/server/frontend/public/male.svg | 3 + .../deploy/server/frontend/public/robots.txt | 3 + .../deploy/server/frontend/public/sitemap.xml | 14 + .../deploy/server/frontend/public/vite.svg | 1 + lightx2v/deploy/server/frontend/src/App.vue | 125 + .../server/frontend/src/components/Alert.vue | 311 + .../src/components/AudioPreviewTest.vue | 67 + .../frontend/src/components/Confirm.vue | 70 + .../frontend/src/components/DropdownMenu.vue | 96 + .../src/components/FloatingParticles.vue | 73 + .../frontend/src/components/Generate.vue | 3517 ++++++++ .../frontend/src/components/Inspirations.vue | 289 + .../frontend/src/components/LeftBar.vue | 56 + .../frontend/src/components/Loading.vue | 15 + .../frontend/src/components/LoginCard.vue | 124 + .../frontend/src/components/MediaTemplate.vue | 466 + .../frontend/src/components/ModelDropdown.vue | 57 + .../frontend/src/components/Projects.vue | 609 ++ .../src/components/PromptTemplate.vue | 123 + .../frontend/src/components/SiteFooter.vue | 38 + .../frontend/src/components/TaskCarousel.vue | 497 ++ .../frontend/src/components/TaskDetails.vue | 1154 +++ .../src/components/TemplateDetails.vue | 335 + .../src/components/TemplateDisplay.vue | 294 + .../server/frontend/src/components/TopBar.vue | 106 + .../frontend/src/components/VoiceSelector.vue | 233 + .../src/components/VoiceTtsHistoryPanel.vue | 308 + .../frontend/src/components/Voice_tts.vue | 2511 ++++++ .../server/frontend/src/locales/en.json | 651 ++ .../server/frontend/src/locales/zh.json | 696 ++ lightx2v/deploy/server/frontend/src/main.js | 20 + .../server/frontend/src/router/index.js | 144 + lightx2v/deploy/server/frontend/src/style.css | 2540 ++++++ .../deploy/server/frontend/src/utils/i18n.js | 62 + .../deploy/server/frontend/src/utils/other.js | 7839 +++++++++++++++++ .../deploy/server/frontend/src/views/404.vue | 56 + .../server/frontend/src/views/Layout.vue | 85 + .../server/frontend/src/views/Login.vue | 108 + .../frontend/src/views/PodcastGenerate.vue | 3893 ++++++++ .../server/frontend/src/views/Share.vue | 511 ++ .../deploy/server/frontend/vite.config.js | 8 + lightx2v/deploy/server/metrics.py | 65 + lightx2v/deploy/server/monitor.py | 375 + lightx2v/deploy/server/redis_client.py | 247 + lightx2v/deploy/server/redis_monitor.py | 166 + lightx2v/deploy/server/static/assets | 1 + .../deploy/server/static/icon/logoblack.png | Bin 0 -> 10616 bytes .../deploy/server/static/icon/seko_logo.svg | 9 + .../server/static/icon/seko_logo_nobg.png | Bin 0 -> 11540 bytes .../server/static/icon/seko_logo_white.svg | 9 + lightx2v/deploy/server/static/index.html | 1 + lightx2v/deploy/server/static/index_old.html | 1124 +++ lightx2v/deploy/task_manager/__init__.py | 313 + .../deploy/task_manager/local_task_manager.py | 476 + .../deploy/task_manager/sql_task_manager.py | 1112 +++ lightx2v/deploy/worker/__init__.py | 0 lightx2v/deploy/worker/__main__.py | 370 + lightx2v/deploy/worker/hub.py | 498 ++ lightx2v/infer.py | 146 + lightx2v/models/__init__.py | 0 lightx2v/models/input_encoders/__init__.py | 0 lightx2v/models/input_encoders/hf/__init__.py | 0 .../input_encoders/hf/animate/__init__.py | 0 .../input_encoders/hf/animate/face_encoder.py | 171 + .../hf/animate/motion_encoder.py | 300 + .../hf/hunyuan15/byt5/__init__.py | 0 .../hf/hunyuan15/byt5/format_prompt.py | 68 + .../input_encoders/hf/hunyuan15/byt5/model.py | 369 + .../hf/hunyuan15/qwen25/__init__.py | 0 .../hf/hunyuan15/qwen25/model.py | 641 ++ .../hf/hunyuan15/siglip/__init__.py | 0 .../hf/hunyuan15/siglip/model.py | 303 + lightx2v/models/input_encoders/hf/q_linear.py | 312 + .../qwen25_vlforconditionalgeneration.py | 190 + .../hf/seko_audio/audio_adapter.py | 311 + .../hf/seko_audio/audio_encoder.py | 40 + .../input_encoders/hf/vace/vace_processor.py | 173 + .../hf/wan/matrix_game2/__init__.py | 0 .../hf/wan/matrix_game2/clip.py | 332 + .../hf/wan/matrix_game2/conditions.py | 203 + .../hf/wan/matrix_game2/tokenizers.py | 75 + .../input_encoders/hf/wan/t5/__init__.py | 0 .../models/input_encoders/hf/wan/t5/model.py | 849 ++ .../input_encoders/hf/wan/t5/tokenizer.py | 81 + .../hf/wan/xlm_roberta/__init__.py | 0 .../hf/wan/xlm_roberta/model.py | 473 + lightx2v/models/networks/__init__.py | 0 .../models/networks/hunyuan_video/__init__.py | 0 .../hunyuan_video/infer/attn_no_pad.py | 129 + .../infer/feature_caching/__init__.py | 0 .../feature_caching/transformer_infer.py | 229 + .../networks/hunyuan_video/infer/module_io.py | 27 + .../hunyuan_video/infer/offload/__init__.py | 0 .../infer/offload/transformer_infer.py | 34 + .../hunyuan_video/infer/post_infer.py | 39 + .../networks/hunyuan_video/infer/pre_infer.py | 240 + .../hunyuan_video/infer/transformer_infer.py | 265 + .../hunyuan_video/infer/triton_ops.py | 902 ++ .../models/networks/hunyuan_video/model.py | 279 + .../hunyuan_video/weights/post_weights.py | 7 + .../hunyuan_video/weights/pre_weights.py | 147 + .../weights/transformer_weights.py | 390 + .../qwen_image/infer/offload/__init__.py | 0 .../infer/offload/transformer_infer.py | 50 + .../networks/qwen_image/infer/post_infer.py | 19 + .../networks/qwen_image/infer/pre_infer.py | 188 + .../qwen_image/infer/transformer_infer.py | 224 + .../networks/qwen_image/lora_adapter.py | 90 + lightx2v/models/networks/qwen_image/model.py | 383 + .../qwen_image/weights/post_weights.py | 49 + .../qwen_image/weights/pre_weights.py | 40 + .../qwen_image/weights/transformer_weights.py | 323 + lightx2v/models/networks/wan/animate_model.py | 22 + lightx2v/models/networks/wan/audio_model.py | 164 + lightx2v/models/networks/wan/causvid_model.py | 58 + lightx2v/models/networks/wan/distill_model.py | 35 + .../networks/wan/infer/animate/pre_infer.py | 31 + .../wan/infer/animate/transformer_infer.py | 74 + .../networks/wan/infer/audio/post_infer.py | 21 + .../networks/wan/infer/audio/pre_infer.py | 124 + .../wan/infer/audio/transformer_infer.py | 96 + .../networks/wan/infer/causvid/__init__.py | 0 .../wan/infer/causvid/transformer_infer.py | 222 + .../wan/infer/feature_caching/__init__.py | 0 .../feature_caching/transformer_infer.py | 1104 +++ .../wan/infer/matrix_game2/posemb_layers.py | 291 + .../wan/infer/matrix_game2/pre_infer.py | 98 + .../infer/matrix_game2/transformer_infer.py | 672 ++ .../models/networks/wan/infer/module_io.py | 21 + .../networks/wan/infer/offload/__init__.py | 0 .../wan/infer/offload/transformer_infer.py | 154 + .../models/networks/wan/infer/post_infer.py | 31 + .../models/networks/wan/infer/pre_infer.py | 124 + .../wan/infer/self_forcing/__init__.py | 0 .../wan/infer/self_forcing/pre_infer.py | 114 + .../infer/self_forcing/transformer_infer.py | 358 + .../networks/wan/infer/transformer_infer.py | 321 + .../models/networks/wan/infer/triton_ops.py | 902 ++ lightx2v/models/networks/wan/infer/utils.py | 239 + .../wan/infer/vace/transformer_infer.py | 38 + lightx2v/models/networks/wan/lora_adapter.py | 131 + .../models/networks/wan/matrix_game2_model.py | 48 + lightx2v/models/networks/wan/model.py | 505 ++ lightx2v/models/networks/wan/sf_model.py | 53 + lightx2v/models/networks/wan/vace_model.py | 55 + .../weights/animate/transformer_weights.py | 127 + .../wan/weights/audio/transformer_weights.py | 161 + .../wan/weights/matrix_game2/pre_weights.py | 50 + .../matrix_game2/transformer_weights.py | 244 + .../networks/wan/weights/post_weights.py | 7 + .../networks/wan/weights/pre_weights.py | 80 + .../wan/weights/transformer_weights.py | 578 ++ .../wan/weights/vace/transformer_weights.py | 76 + lightx2v/models/runners/__init__.py | 0 lightx2v/models/runners/base_runner.py | 169 + lightx2v/models/runners/default_runner.py | 419 + .../hunyuan_video_15_distill_runner.py | 18 + .../hunyuan_video/hunyuan_video_15_runner.py | 550 ++ .../runners/qwen_image/qwen_image_runner.py | 273 + .../models/runners/vsr/utils/TCDecoder.py | 326 + lightx2v/models/runners/vsr/utils/utils.py | 156 + lightx2v/models/runners/vsr/vsr_wrapper.py | 162 + .../models/runners/vsr/vsr_wrapper_hy15.py | 152 + lightx2v/models/runners/wan/__init__.py | 0 .../models/runners/wan/wan_animate_runner.py | 418 + .../models/runners/wan/wan_audio_runner.py | 923 ++ .../models/runners/wan/wan_distill_runner.py | 200 + .../runners/wan/wan_matrix_game2_runner.py | 327 + lightx2v/models/runners/wan/wan_runner.py | 638 ++ lightx2v/models/runners/wan/wan_sf_runner.py | 175 + .../models/runners/wan/wan_vace_runner.py | 192 + lightx2v/models/schedulers/__init__.py | 0 .../schedulers/hunyuan_video/__init__.py | 0 .../hunyuan_video/feature_caching/__init__.py | 0 .../feature_caching/scheduler.py | 9 + .../schedulers/hunyuan_video/posemb_layers.py | 283 + .../schedulers/hunyuan_video/scheduler.py | 216 + .../hunyuan_video/step_distill/scheduler.py | 33 + .../models/schedulers/qwen_image/scheduler.py | 235 + lightx2v/models/schedulers/scheduler.py | 22 + .../models/schedulers/wan/audio/scheduler.py | 127 + .../wan/changing_resolution/scheduler.py | 94 + .../wan/feature_caching/scheduler.py | 18 + lightx2v/models/schedulers/wan/scheduler.py | 434 + .../schedulers/wan/self_forcing/scheduler.py | 105 + .../schedulers/wan/step_distill/scheduler.py | 76 + lightx2v/models/vfi/rife/model/loss.py | 130 + .../vfi/rife/model/pytorch_msssim/__init__.py | 204 + lightx2v/models/vfi/rife/model/warplayer.py | 17 + .../models/vfi/rife/rife_comfyui_wrapper.py | 138 + .../models/vfi/rife/train_log/IFNet_HDv3.py | 214 + .../models/vfi/rife/train_log/RIFE_HDv3.py | 85 + lightx2v/models/vfi/rife/train_log/refine.py | 113 + lightx2v/models/video_encoders/__init__.py | 0 lightx2v/models/video_encoders/hf/__init__.py | 0 .../hf/hunyuanvideo15/__init__.py | 0 .../hf/hunyuanvideo15/hunyuanvideo_15_vae.py | 910 ++ .../hf/hunyuanvideo15/lighttae_hy15.py | 17 + .../video_encoders/hf/qwen_image/__init__.py | 0 .../video_encoders/hf/qwen_image/vae.py | 140 + lightx2v/models/video_encoders/hf/tae.py | 304 + .../models/video_encoders/hf/vid_recon.py | 94 + .../models/video_encoders/hf/wan/__init__.py | 0 lightx2v/models/video_encoders/hf/wan/vae.py | 1457 +++ .../models/video_encoders/hf/wan/vae_2_2.py | 1045 +++ .../models/video_encoders/hf/wan/vae_sf.py | 348 + .../models/video_encoders/hf/wan/vae_tiny.py | 216 + lightx2v/pipeline.py | 360 + lightx2v/server/README.md | 438 + lightx2v/server/__init__.py | 0 lightx2v/server/__main__.py | 28 + lightx2v/server/api/__init__.py | 7 + lightx2v/server/api/deps.py | 54 + lightx2v/server/api/files.py | 69 + lightx2v/server/api/router.py | 25 + lightx2v/server/api/server.py | 125 + lightx2v/server/api/service_routes.py | 18 + lightx2v/server/api/tasks/__init__.py | 9 + lightx2v/server/api/tasks/common.py | 147 + lightx2v/server/api/tasks/image.py | 97 + lightx2v/server/api/tasks/video.py | 109 + lightx2v/server/config.py | 63 + lightx2v/server/main.py | 59 + lightx2v/server/media/__init__.py | 13 + lightx2v/server/media/audio.py | 74 + lightx2v/server/media/base.py | 86 + lightx2v/server/media/image.py | 68 + lightx2v/server/metrics/__init__.py | 6 + lightx2v/server/metrics/metrics.py | 361 + lightx2v/server/metrics/monitor.py | 22 + lightx2v/server/schema.py | 73 + lightx2v/server/services/__init__.py | 11 + lightx2v/server/services/distributed_utils.py | 141 + lightx2v/server/services/file_service.py | 153 + .../server/services/generation/__init__.py | 9 + lightx2v/server/services/generation/base.py | 146 + lightx2v/server/services/generation/image.py | 66 + lightx2v/server/services/generation/video.py | 22 + .../server/services/inference/__init__.py | 7 + lightx2v/server/services/inference/service.py | 81 + lightx2v/server/services/inference/worker.py | 128 + lightx2v/server/task_manager.py | 215 + lightx2v/utils/__init__.py | 0 lightx2v/utils/async_io.py | 83 + lightx2v/utils/custom_compiler.py | 187 + lightx2v/utils/envs.py | 49 + lightx2v/utils/generate_task_id.py | 49 + lightx2v/utils/ggml_tensor.py | 628 ++ lightx2v/utils/global_paras.py | 1 + lightx2v/utils/input_info.py | 230 + lightx2v/utils/lockable_dict.py | 177 + lightx2v/utils/memory_profiler.py | 29 + lightx2v/utils/print_atten_score.py | 76 + lightx2v/utils/profiler.py | 200 + lightx2v/utils/prompt_enhancer.py | 78 + lightx2v/utils/quant_utils.py | 219 + lightx2v/utils/registry_factory.py | 71 + lightx2v/utils/service_utils.py | 146 + lightx2v/utils/set_config.py | 115 + lightx2v/utils/utils.py | 486 + lightx2v_kernel/CMakeLists.txt | 103 + lightx2v_kernel/LICENSE | 201 + lightx2v_kernel/README.md | 56 + lightx2v_kernel/cmake/utils.cmake | 21 + lightx2v_kernel/csrc/common_extension.cc | 51 + .../csrc/gemm/mxfp4_quant_kernels_sm120.cu | 324 + .../gemm/mxfp4_scaled_mm_kernels_sm120.cu | 323 + .../mxfp6_mxfp8_scaled_mm_kernels_sm120.cu | 324 + .../csrc/gemm/mxfp6_quant_kernels_sm120.cu | 348 + .../csrc/gemm/mxfp8_quant_kernels_sm120.cu | 315 + .../gemm/mxfp8_scaled_mm_kernels_sm120.cu | 325 + .../csrc/gemm/nvfp4_quant_kernels_sm120.cu | 387 + .../gemm/nvfp4_scaled_mm_kernels_sm120.cu | 323 + .../en_US/mx_formats_quantization_basics.md | 35 + .../docs/en_US/nvfp4_quantization_basics.md | 80 + ...17\345\214\226\345\237\272\347\241\200.md" | 35 + ...17\345\214\226\345\237\272\347\241\200.md" | 80 + lightx2v_kernel/include/lightx2v_kernel_ops.h | 92 + lightx2v_kernel/include/utils.h | 348 + lightx2v_kernel/pyproject.toml | 39 + .../python/lightx2v_kernel/__init__.py | 15 + .../python/lightx2v_kernel/gemm.py | 115 + .../python/lightx2v_kernel/utils.py | 157 + .../python/lightx2v_kernel/version.py | 1 + .../test/mxfp4_mxfp4/test_bench.py | 121 + .../test/mxfp4_mxfp4/test_bench3_bias.py | 94 + .../test/mxfp4_mxfp4/test_mxfp4_quant.py | 52 + lightx2v_kernel/test/mxfp6_mxfp8/test.py | 29 + .../test/mxfp6_mxfp8/test_bench.py | 121 + .../test/mxfp6_mxfp8/test_bench3_bias.py | 94 + .../test/mxfp6_mxfp8/test_fake_quant.py | 181 + .../test/mxfp6_mxfp8/test_mm_tflops.py | 115 + .../test/mxfp6_mxfp8/test_mxfp6_quant.py | 51 + .../test/mxfp6_mxfp8/test_quant_mem_utils.py | 158 + .../test/mxfp8_mxfp8/test_bench.py | 121 + .../test/mxfp8_mxfp8/test_bench3_bias.py | 94 + .../test/mxfp8_mxfp8/test_mm_tflops.py | 115 + .../test/mxfp8_mxfp8/test_mxfp8_quant.py | 51 + .../test/mxfp8_mxfp8/test_quant_mem_utils.py | 158 + .../test/nvfp4_nvfp4/fake_quant.py | 55 + .../test/nvfp4_nvfp4/test_bench1.py | 142 + .../test/nvfp4_nvfp4/test_bench2.py | 126 + .../test/nvfp4_nvfp4/test_bench3_bias.py | 94 + .../test/nvfp4_nvfp4/test_mm_tflops.py | 114 + .../test/nvfp4_nvfp4/test_quant_mem_utils.py | 160 + lightx2v_platform/__init__.py | 1 + lightx2v_platform/base/__init__.py | 7 + lightx2v_platform/base/base.py | 33 + lightx2v_platform/base/cambricon_mlu.py | 27 + lightx2v_platform/base/dcu.py | 55 + lightx2v_platform/base/global_var.py | 1 + lightx2v_platform/base/metax.py | 7 + lightx2v_platform/base/nvidia.py | 36 + lightx2v_platform/ops/__init__.py | 12 + lightx2v_platform/ops/attn/__init__.py | 0 .../ops/attn/cambricon_mlu/__init__.py | 2 + .../ops/attn/cambricon_mlu/flash_attn.py | 42 + .../ops/attn/cambricon_mlu/sage_attn.py | 31 + lightx2v_platform/ops/attn/dcu/__init__.py | 1 + lightx2v_platform/ops/attn/dcu/flash_attn.py | 146 + lightx2v_platform/ops/attn/template.py | 32 + lightx2v_platform/ops/mm/__init__.py | 0 .../ops/mm/cambricon_mlu/__init__.py | 1 + .../ops/mm/cambricon_mlu/mm_weight.py | 37 + .../ops/mm/cambricon_mlu/q_linear.py | 47 + lightx2v_platform/ops/mm/template.py | 466 + lightx2v_platform/ops/norm/__init__.py | 0 lightx2v_platform/ops/rope/__init__.py | 0 lightx2v_platform/registry_factory.py | 58 + lightx2v_platform/set_ai_device.py | 15 + lightx2v_platform/test/test_device.py | 11 + pyproject.toml | 114 + requirements-docs.txt | 7 + requirements.txt | 40 + requirements_animate.txt | 8 + requirements_win.txt | 18 + save_results/.gitkeep | 0 scripts/base/base.sh | 53 + scripts/bench/run_lightx2v_1.sh | 40 + scripts/bench/run_lightx2v_2.sh | 40 + scripts/bench/run_lightx2v_3.sh | 40 + scripts/bench/run_lightx2v_3_distill.sh | 40 + scripts/bench/run_lightx2v_4.sh | 40 + scripts/bench/run_lightx2v_5.sh | 40 + scripts/bench/run_lightx2v_5_distill.sh | 40 + scripts/bench/run_lightx2v_6.sh | 40 + scripts/bench/run_lightx2v_6_distill.sh | 40 + scripts/cache/readme.md | 11 + .../cache/run_wan_i2v_dist_cfg_ulysses_mag.sh | 20 + scripts/cache/run_wan_i2v_mag.sh | 20 + scripts/cache/run_wan_i2v_mag_calibration.sh | 20 + scripts/cache/run_wan_i2v_tea.sh | 20 + .../cache/run_wan_t2v_dist_cfg_ulysses_mag.sh | 19 + scripts/cache/run_wan_t2v_mag.sh | 19 + scripts/cache/run_wan_t2v_mag_calibration.sh | 19 + scripts/cache/run_wan_t2v_tea.sh | 19 + .../run_wan_i2v_changing_resolution.sh | 20 + .../run_wan_t2v_changing_resolution.sh | 19 + scripts/dist_infer/run_wan22_moe_i2v_cfg.sh | 20 + .../run_wan22_moe_i2v_cfg_ulysses.sh | 20 + .../dist_infer/run_wan22_moe_i2v_ulysses.sh | 20 + scripts/dist_infer/run_wan22_moe_t2v_cfg.sh | 19 + .../run_wan22_moe_t2v_cfg_ulysses.sh | 19 + .../dist_infer/run_wan22_moe_t2v_ulysses.sh | 19 + scripts/dist_infer/run_wan22_ti2v_i2v_cfg.sh | 20 + .../run_wan22_ti2v_i2v_cfg_ulysses.sh | 20 + .../dist_infer/run_wan22_ti2v_i2v_ulysses.sh | 20 + scripts/dist_infer/run_wan22_ti2v_t2v_cfg.sh | 19 + .../run_wan22_ti2v_t2v_cfg_ulysses.sh | 19 + .../dist_infer/run_wan22_ti2v_t2v_ulysses.sh | 19 + .../run_wan_i2v_dist_cfg_ulysses.sh | 20 + .../dist_infer/run_wan_i2v_dist_ulysses.sh | 20 + scripts/dist_infer/run_wan_t2v_dist_cfg.sh | 19 + .../run_wan_t2v_dist_cfg_ulysses.sh | 19 + .../dist_infer/run_wan_t2v_dist_ulysses.sh | 19 + scripts/hunyuan_video_15/README.md | 103 + scripts/hunyuan_video_15/run_hy15_i2v_480p.sh | 21 + .../hunyuan_video_15/run_hy15_i2v_480p_vsr.sh | 21 + scripts/hunyuan_video_15/run_hy15_i2v_720p.sh | 21 + scripts/hunyuan_video_15/run_hy15_t2v_480p.sh | 20 + .../run_hy15_t2v_480p_distill.sh | 20 + scripts/hunyuan_video_15/run_hy15_t2v_720p.sh | 20 + .../run_matrix_game2_gta_drive.sh | 20 + .../run_matrix_game2_gta_drive_streaming.sh | 20 + .../run_matrix_game2_templerun.sh | 20 + .../run_matrix_game2_templerun_streaming.sh | 20 + .../run_matrix_game2_universal.sh | 20 + .../run_matrix_game2_universal_streaming.sh | 20 + .../gguf/run_wan_i2v_gguf_q4_k.sh | 21 + scripts/quantization/readme.md | 11 + .../quantization/run_wan_i2v_quantization.sh | 20 + scripts/qwen_image/qwen_image_i2i.sh | 21 + scripts/qwen_image/qwen_image_i2i_2509.sh | 21 + .../qwen_image/qwen_image_i2i_2509_block.sh | 21 + scripts/qwen_image/qwen_image_i2i_block.sh | 21 + scripts/qwen_image/qwen_image_i2i_lora.sh | 22 + scripts/qwen_image/qwen_image_t2i.sh | 20 + scripts/qwen_image/qwen_image_t2i_block.sh | 20 + scripts/seko_talk/multi_person/01_base.sh | 21 + scripts/seko_talk/multi_person/03_dist.sh | 21 + scripts/seko_talk/run_seko_talk_01_base.sh | 21 + scripts/seko_talk/run_seko_talk_02_fp8.sh | 21 + scripts/seko_talk/run_seko_talk_03_dist.sh | 21 + .../seko_talk/run_seko_talk_04_fp8_dist.sh | 21 + .../run_seko_talk_05_offload_fp8_4090.sh | 21 + .../run_seko_talk_06_offload_fp8_H100.sh | 21 + .../run_seko_talk_07_dist_offload.sh | 21 + scripts/seko_talk/run_seko_talk_08_5B_base.sh | 21 + .../run_seko_talk_09_base_fixed_min_area.sh | 21 + ...un_seko_talk_10_fp8_dist_fixed_min_area.sh | 21 + .../run_seko_talk_11_fp8_dist_fixed_shape.sh | 21 + ...o_talk_12_fp8_dist_fixed_shape_8gpus_1s.sh | 21 + ...fp8_dist_bucket_shape_8gpus_5s_realtime.sh | 21 + ...fp8_dist_bucket_shape_8gpus_1s_realtime.sh | 21 + .../run_seko_talk_15_base_compile.sh | 21 + .../run_seko_talk_16_fp8_dist_compile.sh | 21 + scripts/seko_talk/run_seko_talk_17_vsr.sh | 21 + .../seko_talk/run_seko_talk_18_5090_base.sh | 21 + .../run_seko_talk_19_A800_int8_dist.sh | 21 + .../seko_talk/run_seko_talk_20_A800_int8.sh | 22 + .../seko_talk/run_seko_talk_21_5090_int8.sh | 22 + .../run_seko_talk_21_5090_int8_dist.sh | 21 + .../seko_talk/run_seko_talk_22_nbhd_attn.sh | 21 + .../run_seko_talk_23_fp8_dist_nbhd_attn.sh | 21 + ...seko_talk_24_fp8_dist_compile_nbhd_attn.sh | 21 + .../seko_talk/run_seko_talk_25_mlu_bf16.sh | 22 + .../seko_talk/run_seko_talk_26_mlu_int8.sh | 22 + .../run_seko_talk_27_mlu_int8_dist.sh | 22 + scripts/seko_talk/run_seko_talk_28_f2v.sh | 20 + scripts/self_forcing/run_wan_t2v_sf.sh | 20 + scripts/server/check_status.py | 13 + scripts/server/post.py | 17 + scripts/server/post_enhancer.py | 17 + scripts/server/post_i2v.py | 27 + scripts/server/post_multi_servers.py | 148 + scripts/server/post_multi_servers_i2v.py | 40 + scripts/server/post_multi_servers_t2v.py | 166 + scripts/server/post_vbench_i2v.py | 68 + scripts/server/readme.md | 1 + scripts/server/start_multi_servers.sh | 19 + scripts/server/start_server.sh | 21 + scripts/server/start_server_i2i.sh | 26 + scripts/server/start_server_t2i.sh | 28 + scripts/server/stop_running_task.py | 5 + .../sparse_attn/spas_sage_attn/run_wan_i2v.sh | 20 + .../sparse_attn/spas_sage_attn/run_wan_t2v.sh | 19 + .../run_wan_t2v_video_frame_interpolation.sh | 21 + scripts/wan/run_wan_flf2v.sh | 21 + scripts/wan/run_wan_i2v.sh | 20 + scripts/wan/run_wan_i2v_causvid.sh | 20 + scripts/wan/run_wan_i2v_distill_4step_cfg.sh | 20 + .../wan/run_wan_i2v_distill_4step_cfg_lora.sh | 20 + scripts/wan/run_wan_i2v_lazy_load.sh | 34 + scripts/wan/run_wan_i2v_nbhd_attn_480p.sh | 20 + scripts/wan/run_wan_i2v_nbhd_attn_720p.sh | 20 + scripts/wan/run_wan_t2v.sh | 19 + scripts/wan/run_wan_t2v_causvid.sh | 19 + scripts/wan/run_wan_t2v_distill_4step_cfg.sh | 20 + .../run_wan_t2v_distill_4step_cfg_dynamic.sh | 20 + .../wan/run_wan_t2v_distill_4step_cfg_lora.sh | 20 + scripts/wan/run_wan_vace.sh | 20 + scripts/wan22/run_wan22_animate.sh | 33 + scripts/wan22/run_wan22_animate_lora.sh | 33 + scripts/wan22/run_wan22_animate_replace.sh | 39 + scripts/wan22/run_wan22_distill_moe_flf2v.sh | 22 + scripts/wan22/run_wan22_moe_flf2v.sh | 21 + scripts/wan22/run_wan22_moe_i2v.sh | 20 + scripts/wan22/run_wan22_moe_i2v_distill.sh | 20 + scripts/wan22/run_wan22_moe_t2v.sh | 19 + scripts/wan22/run_wan22_moe_t2v_distill.sh | 19 + scripts/wan22/run_wan22_ti2v_i2v.sh | 20 + scripts/wan22/run_wan22_ti2v_t2v.sh | 19 + scripts/win/run_wan_i2v.bat | 53 + scripts/win/run_wan_t2v.bat | 52 + setup_vae.py | 86 + test_cases/run_matrix_game2_gta_drive.sh | 20 + test_cases/run_qwen_image_i2i_2509.sh | 21 + test_cases/run_seko_talk_01_base.sh | 24 + test_cases/run_wan_i2v.sh | 20 + test_cases/run_wan_i2v_offload.sh | 20 + test_cases/run_wan_t2v.sh | 19 + test_cases/run_wan_t2v_dist_cfg_ulysses.sh | 19 + test_cases/run_wan_t2v_sf.sh | 20 + tools/convert/converter.py | 883 ++ tools/convert/lora_loader.py | 448 + tools/convert/quant/__init__.py | 1 + tools/convert/quant/quant.py | 141 + tools/convert/quant_adapter.py | 75 + tools/convert/readme.md | 445 + tools/convert/readme_zh.md | 438 + tools/convert/seko_talk_converter.py | 452 + tools/download_rife.py | 133 + tools/extract/convert_vigen_to_x2v_lora.py | 144 + tools/extract/lora_extractor.py | 456 + tools/extract/lora_merger.py | 418 + tools/preprocess/UserGuider.md | 70 + tools/preprocess/__init__.py | 3 + tools/preprocess/human_visualization.py | 1337 +++ tools/preprocess/pose2d.py | 414 + tools/preprocess/pose2d_utils.py | 1117 +++ tools/preprocess/preprocess_data.py | 88 + tools/preprocess/process_pipepline.py | 355 + tools/preprocess/retarget_pose.py | 850 ++ tools/preprocess/sam_utils.py | 146 + tools/preprocess/utils.py | 219 + tools/preprocess/video_predictor.py | 131 + 907 files changed, 127963 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 .pre-commit-config.yaml create mode 100644 LICENSE create mode 100644 app/README.md create mode 100644 app/gradio_demo.py create mode 100644 app/gradio_demo_zh.py create mode 100644 app/run_gradio.sh create mode 100644 app/run_gradio_win.bat create mode 100644 assets/figs/offload/fig1_en.png create mode 100644 assets/figs/offload/fig1_zh.png create mode 100644 assets/figs/offload/fig2_en.png create mode 100644 assets/figs/offload/fig2_zh.png create mode 100644 assets/figs/offload/fig3_en.png create mode 100644 assets/figs/offload/fig3_zh.png create mode 100644 assets/figs/offload/fig4_en.png create mode 100644 assets/figs/offload/fig4_zh.png create mode 100644 assets/figs/offload/fig5_en.png create mode 100644 assets/figs/offload/fig5_zh.png create mode 100644 assets/figs/portabl_windows/pic1.png create mode 100644 assets/figs/portabl_windows/pic_gradio_en.png create mode 100644 assets/figs/portabl_windows/pic_gradio_zh.png create mode 100644 assets/figs/step_distill/fig_01.png create mode 100644 assets/img_lightx2v.png create mode 100644 assets/inputs/audio/multi_person/config.json create mode 100644 assets/inputs/audio/multi_person/config_multi_template.json create mode 100644 assets/inputs/audio/multi_person/config_single_template.json create mode 100644 assets/inputs/audio/multi_person/p1.mp3 create mode 100644 assets/inputs/audio/multi_person/p1_mask.png create mode 100644 assets/inputs/audio/multi_person/p2.mp3 create mode 100644 assets/inputs/audio/multi_person/p2_mask.png create mode 100644 assets/inputs/audio/multi_person/seko_input.png create mode 100644 assets/inputs/audio/seko_input.mp3 create mode 100644 assets/inputs/audio/seko_input.png create mode 100644 assets/inputs/imgs/flf2v_input_first_frame-fs8.png create mode 100644 assets/inputs/imgs/flf2v_input_last_frame-fs8.png create mode 100644 assets/inputs/imgs/girl.png create mode 100644 assets/inputs/imgs/img_0.jpg create mode 100644 assets/inputs/imgs/img_1.jpg create mode 100644 assets/inputs/imgs/img_2.jpg create mode 100644 assets/inputs/imgs/snake.png create mode 100644 configs/attentions/wan_i2v_flash.json create mode 100644 configs/attentions/wan_i2v_nbhd_480p.json create mode 100644 configs/attentions/wan_i2v_nbhd_720p.json create mode 100644 configs/attentions/wan_i2v_radial.json create mode 100644 configs/attentions/wan_i2v_sage.json create mode 100644 configs/attentions/wan_i2v_svg.json create mode 100644 configs/attentions/wan_i2v_svg2.json create mode 100644 configs/attentions/wan_t2v_sparge.json create mode 100644 configs/bench/lightx2v_1.json create mode 100644 configs/bench/lightx2v_2.json create mode 100644 configs/bench/lightx2v_3.json create mode 100644 configs/bench/lightx2v_3_distill.json create mode 100644 configs/bench/lightx2v_4.json create mode 100644 configs/bench/lightx2v_5.json create mode 100644 configs/bench/lightx2v_5_distill.json create mode 100644 configs/bench/lightx2v_6.json create mode 100644 configs/bench/lightx2v_6_distill.json create mode 100644 configs/caching/adacache/wan_i2v_ada.json create mode 100644 configs/caching/adacache/wan_t2v_ada.json create mode 100644 configs/caching/custom/wan_i2v_custom_480p.json create mode 100644 configs/caching/custom/wan_i2v_custom_720p.json create mode 100644 configs/caching/custom/wan_t2v_custom_14b.json create mode 100644 configs/caching/custom/wan_t2v_custom_1_3b.json create mode 100644 configs/caching/dualblock/wan_t2v_1_3b.json create mode 100644 configs/caching/dynamicblock/wan_t2v_1_3b.json create mode 100644 configs/caching/firstblock/wan_t2v_1_3b.json create mode 100644 configs/caching/magcache/wan_i2v_dist_cfg_ulysses_mag_480p.json create mode 100644 configs/caching/magcache/wan_i2v_mag_480p.json create mode 100644 configs/caching/magcache/wan_i2v_mag_calibration_480p.json create mode 100644 configs/caching/magcache/wan_t2v_dist_cfg_ulysses_mag_1_3b.json create mode 100644 configs/caching/magcache/wan_t2v_mag_1_3b.json create mode 100644 configs/caching/magcache/wan_t2v_mag_calibration_1_3b.json create mode 100644 configs/caching/taylorseer/wan_t2v_taylorseer.json create mode 100644 configs/caching/teacache/wan_i2v_tea_480p.json create mode 100644 configs/caching/teacache/wan_i2v_tea_720p.json create mode 100644 configs/caching/teacache/wan_t2v_1_3b_tea_480p.json create mode 100644 configs/caching/teacache/wan_ti2v_tea_720p.json create mode 100644 configs/causvid/wan_i2v_causvid.json create mode 100644 configs/causvid/wan_t2v_causvid.json create mode 100644 configs/changing_resolution/wan_i2v.json create mode 100644 configs/changing_resolution/wan_i2v_U.json create mode 100644 configs/changing_resolution/wan_t2v.json create mode 100644 configs/changing_resolution/wan_t2v_U.json create mode 100644 configs/changing_resolution/wan_t2v_U_teacache.json create mode 100644 configs/deploy/wan_i2v.json create mode 100644 configs/deploy/wan_t2v.json create mode 100644 configs/dist_infer/wan22_moe_i2v_cfg.json create mode 100644 configs/dist_infer/wan22_moe_i2v_cfg_ulysses.json create mode 100644 configs/dist_infer/wan22_moe_i2v_ulysses.json create mode 100644 configs/dist_infer/wan22_moe_t2v_cfg.json create mode 100644 configs/dist_infer/wan22_moe_t2v_cfg_ulysses.json create mode 100644 configs/dist_infer/wan22_moe_t2v_ulysses.json create mode 100644 configs/dist_infer/wan22_ti2v_i2v_cfg.json create mode 100644 configs/dist_infer/wan22_ti2v_i2v_cfg_ulysses.json create mode 100644 configs/dist_infer/wan22_ti2v_i2v_ulysses.json create mode 100644 configs/dist_infer/wan22_ti2v_t2v_cfg.json create mode 100644 configs/dist_infer/wan22_ti2v_t2v_cfg_ulysses.json create mode 100644 configs/dist_infer/wan22_ti2v_t2v_ulysses.json create mode 100644 configs/dist_infer/wan_i2v_dist_cfg_ulysses.json create mode 100644 configs/dist_infer/wan_i2v_dist_ring.json create mode 100644 configs/dist_infer/wan_i2v_dist_ulysses.json create mode 100644 configs/dist_infer/wan_t2v_dist_cfg.json create mode 100644 configs/dist_infer/wan_t2v_dist_cfg_ring.json create mode 100644 configs/dist_infer/wan_t2v_dist_cfg_ulysses.json create mode 100644 configs/dist_infer/wan_t2v_dist_ring.json create mode 100644 configs/dist_infer/wan_t2v_dist_ulysses.json create mode 100644 configs/distill/wan_i2v_distill_4step_cfg.json create mode 100644 configs/distill/wan_i2v_distill_4step_cfg_4090.json create mode 100644 configs/distill/wan_i2v_distill_4step_cfg_4090_lora.json create mode 100644 configs/distill/wan_i2v_distill_4step_cfg_lora.json create mode 100644 configs/distill/wan_t2v_distill_4step_cfg.json create mode 100644 configs/distill/wan_t2v_distill_4step_cfg_4090.json create mode 100644 configs/distill/wan_t2v_distill_4step_cfg_dynamic.json create mode 100644 configs/distill/wan_t2v_distill_4step_cfg_lora.json create mode 100644 configs/distill/wan_t2v_distill_4step_cfg_lora_4090.json create mode 100644 configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16.json create mode 100644 configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16_dist.json create mode 100644 configs/hunyuan_video_15/4090/hy15_t2v_480p_fp8.json create mode 100644 configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16.json create mode 100644 configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16_dist.json create mode 100644 configs/hunyuan_video_15/5090/hy15_t2v_480p_fp8.json create mode 100644 configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache.json create mode 100644 configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache_calibration.json create mode 100644 configs/hunyuan_video_15/cache/hy_15_i2v_480p_teacache.json create mode 100644 configs/hunyuan_video_15/cache/hy_15_i2v_720p_teacache.json create mode 100644 configs/hunyuan_video_15/cache/hy_15_t2v_480p_teacache.json create mode 100644 configs/hunyuan_video_15/cache/hy_15_t2v_720p_teacache.json create mode 100644 configs/hunyuan_video_15/fp8comm/hy15_i2v_480p_int8_offload_dist_fp8_comm.json create mode 100644 configs/hunyuan_video_15/hunyuan_video_i2v_480p.json create mode 100644 configs/hunyuan_video_15/hunyuan_video_i2v_720p.json create mode 100644 configs/hunyuan_video_15/hunyuan_video_i2v_720p_cfg_distilled.json create mode 100644 configs/hunyuan_video_15/hunyuan_video_t2v_480p.json create mode 100644 configs/hunyuan_video_15/hunyuan_video_t2v_480p_distill.json create mode 100644 configs/hunyuan_video_15/hunyuan_video_t2v_720p.json create mode 100644 configs/hunyuan_video_15/lightae/hy15_t2v_480p_bf16.json create mode 100644 configs/hunyuan_video_15/offload/hy15_t2v_480p_bf16.json create mode 100644 configs/hunyuan_video_15/quant/hy15_t2v_480p_fp8.json create mode 100644 configs/hunyuan_video_15/vsr/hy15_i2v_480p.json create mode 100644 configs/matrix_game2/matrix_game2_gta_drive.json create mode 100644 configs/matrix_game2/matrix_game2_gta_drive_streaming.json create mode 100644 configs/matrix_game2/matrix_game2_templerun.json create mode 100644 configs/matrix_game2/matrix_game2_templerun_streaming.json create mode 100644 configs/matrix_game2/matrix_game2_universal.json create mode 100644 configs/matrix_game2/matrix_game2_universal_streaming.json create mode 100644 configs/model_pipeline.json create mode 100644 configs/offload/block/qwen_image_i2i_2509_block.json create mode 100644 configs/offload/block/qwen_image_i2i_block.json create mode 100644 configs/offload/block/qwen_image_t2i_block.json create mode 100644 configs/offload/block/wan_i2v_block.json create mode 100644 configs/offload/block/wan_t2v_1_3b.json create mode 100644 configs/offload/block/wan_t2v_block.json create mode 100644 configs/offload/disk/wan_i2v_phase_lazy_load_480p.json create mode 100644 configs/offload/disk/wan_i2v_phase_lazy_load_720p.json create mode 100644 configs/offload/phase/wan_i2v_phase.json create mode 100644 configs/offload/phase/wan_t2v_phase.json create mode 100644 configs/quantization/gguf/wan_i2v_q4_k.json create mode 100644 configs/quantization/wan_i2v.json create mode 100644 configs/quantization/wan_i2v_q8f.json create mode 100644 configs/quantization/wan_i2v_torchao.json create mode 100644 configs/qwen_image/qwen_image_i2i.json create mode 100644 configs/qwen_image/qwen_image_i2i_2509.json create mode 100644 configs/qwen_image/qwen_image_i2i_2509_quant.json create mode 100644 configs/qwen_image/qwen_image_i2i_lora.json create mode 100644 configs/qwen_image/qwen_image_t2i.json create mode 100644 configs/seko_talk/5090/seko_talk_5090_bf16.json create mode 100644 configs/seko_talk/5090/seko_talk_5090_int8.json create mode 100644 configs/seko_talk/5090/seko_talk_5090_int8_8gpu.json create mode 100644 configs/seko_talk/A800/seko_talk_A800_int8.json create mode 100644 configs/seko_talk/A800/seko_talk_A800_int8_dist_2gpu.json create mode 100644 configs/seko_talk/A800/seko_talk_A800_int8_dist_4gpu.json create mode 100644 configs/seko_talk/A800/seko_talk_A800_int8_dist_8gpu.json create mode 100644 configs/seko_talk/L40s/1gpu/seko_talk_bf16.json create mode 100644 configs/seko_talk/L40s/1gpu/seko_talk_fp8.json create mode 100644 configs/seko_talk/L40s/2gpu/seko_talk_bf16.json create mode 100644 configs/seko_talk/L40s/2gpu/seko_talk_fp8.json create mode 100644 configs/seko_talk/L40s/4gpu/seko_talk_bf16.json create mode 100644 configs/seko_talk/L40s/4gpu/seko_talk_fp8.json create mode 100644 configs/seko_talk/L40s/8gpu/seko_talk_bf16.json create mode 100644 configs/seko_talk/L40s/8gpu/seko_talk_fp8.json create mode 100644 configs/seko_talk/mlu/seko_talk_bf16.json create mode 100644 configs/seko_talk/mlu/seko_talk_int8.json create mode 100644 configs/seko_talk/mlu/seko_talk_int8_dist.json create mode 100644 configs/seko_talk/multi_person/01_base.json create mode 100644 configs/seko_talk/multi_person/02_base_fp8.json create mode 100644 configs/seko_talk/multi_person/03_dist.json create mode 100644 configs/seko_talk/multi_person/04_dist_fp8.json create mode 100644 configs/seko_talk/multi_person/15_base_compile.json create mode 100644 configs/seko_talk/seko_talk_01_base.json create mode 100644 configs/seko_talk/seko_talk_02_fp8.json create mode 100644 configs/seko_talk/seko_talk_03_dist.json create mode 100644 configs/seko_talk/seko_talk_04_fp8_dist.json create mode 100644 configs/seko_talk/seko_talk_05_offload_fp8_4090.json create mode 100644 configs/seko_talk/seko_talk_05_offload_fp8_4090_dist.json create mode 100644 configs/seko_talk/seko_talk_06_offload_fp8_H100.json create mode 100644 configs/seko_talk/seko_talk_07_dist_offload.json create mode 100644 configs/seko_talk/seko_talk_08_5B_base.json create mode 100644 configs/seko_talk/seko_talk_09_base_fixed_min_area.json create mode 100644 configs/seko_talk/seko_talk_10_fp8_dist_fixed_min_area.json create mode 100644 configs/seko_talk/seko_talk_11_fp8_dist_fixed_shape.json create mode 100644 configs/seko_talk/seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.json create mode 100644 configs/seko_talk/seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.json create mode 100644 configs/seko_talk/seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.json create mode 100644 configs/seko_talk/seko_talk_15_base_compile.json create mode 100644 configs/seko_talk/seko_talk_16_fp8_dist_compile.json create mode 100644 configs/seko_talk/seko_talk_17_base_vsr.json create mode 100644 configs/seko_talk/seko_talk_22_nbhd_attn.json create mode 100644 configs/seko_talk/seko_talk_23_fp8_dist_nbhd_attn.json create mode 100644 configs/seko_talk/seko_talk_24_fp8_dist_compile_nbhd_attn.json create mode 100644 configs/seko_talk/seko_talk_25_int8_dist_fp8_comm.json create mode 100644 configs/seko_talk/seko_talk_28_f2v.json create mode 100644 configs/self_forcing/wan_t2v_sf.json create mode 100644 configs/sparse_attn/spas_sage_attn/wan_i2v.json create mode 100644 configs/sparse_attn/spas_sage_attn/wan_t2v.json create mode 100644 configs/video_frame_interpolation/wan_t2v.json create mode 100644 configs/volcengine_voices_list.json create mode 100644 configs/wan/wan_flf2v.json create mode 100644 configs/wan/wan_i2v.json create mode 100644 configs/wan/wan_t2v.json create mode 100644 configs/wan/wan_t2v_enhancer.json create mode 100644 configs/wan/wan_vace.json create mode 100644 configs/wan22/wan_animate.json create mode 100644 configs/wan22/wan_animate_4090.json create mode 100644 configs/wan22/wan_animate_lora.json create mode 100644 configs/wan22/wan_animate_replace.json create mode 100644 configs/wan22/wan_animate_replace_4090.json create mode 100644 configs/wan22/wan_distill_moe_flf2v.json create mode 100644 configs/wan22/wan_distill_moe_flf2v_fp8.json create mode 100644 configs/wan22/wan_distill_moe_flf2v_int8.json create mode 100644 configs/wan22/wan_distill_moe_flf2v_with_lora.json create mode 100644 configs/wan22/wan_moe_flf2v.json create mode 100644 configs/wan22/wan_moe_i2v.json create mode 100644 configs/wan22/wan_moe_i2v_4090.json create mode 100644 configs/wan22/wan_moe_i2v_audio.json create mode 100644 configs/wan22/wan_moe_i2v_distill.json create mode 100644 configs/wan22/wan_moe_i2v_distill_4090.json create mode 100644 configs/wan22/wan_moe_i2v_distill_5090.json create mode 100644 configs/wan22/wan_moe_i2v_distill_quant.json create mode 100644 configs/wan22/wan_moe_i2v_distill_with_lora.json create mode 100644 configs/wan22/wan_moe_t2v.json create mode 100644 configs/wan22/wan_moe_t2v_distill.json create mode 100644 configs/wan22/wan_ti2v_i2v.json create mode 100644 configs/wan22/wan_ti2v_i2v_4090.json create mode 100644 configs/wan22/wan_ti2v_t2v.json create mode 100644 configs/wan22/wan_ti2v_t2v_4090.json create mode 100644 dockerfiles/Dockerfile create mode 100644 dockerfiles/Dockerfile_5090 create mode 100644 dockerfiles/Dockerfile_cambricon_mlu590 create mode 100644 dockerfiles/Dockerfile_cu124 create mode 100644 dockerfiles/Dockerfile_deploy create mode 100644 docs/EN/.readthedocs.yaml create mode 100644 docs/EN/Makefile create mode 100644 docs/EN/make.bat create mode 100644 docs/EN/source/conf.py create mode 100644 docs/EN/source/deploy_guides/deploy_comfyui.md create mode 100644 docs/EN/source/deploy_guides/deploy_gradio.md create mode 100644 docs/EN/source/deploy_guides/deploy_local_windows.md create mode 100644 docs/EN/source/deploy_guides/deploy_service.md create mode 100644 docs/EN/source/deploy_guides/for_low_latency.md create mode 100644 docs/EN/source/deploy_guides/for_low_resource.md create mode 100644 docs/EN/source/deploy_guides/lora_deploy.md create mode 100644 docs/EN/source/getting_started/benchmark.md create mode 100644 docs/EN/source/getting_started/benchmark_source.md create mode 100644 docs/EN/source/getting_started/model_structure.md create mode 100644 docs/EN/source/getting_started/quickstart.md create mode 100644 docs/EN/source/index.rst create mode 100644 docs/EN/source/method_tutorials/attention.md create mode 100644 docs/EN/source/method_tutorials/autoregressive_distill.md create mode 100644 docs/EN/source/method_tutorials/cache.md create mode 100644 docs/EN/source/method_tutorials/cache_source.md create mode 100644 docs/EN/source/method_tutorials/changing_resolution.md create mode 100644 docs/EN/source/method_tutorials/offload.md create mode 100644 docs/EN/source/method_tutorials/parallel.md create mode 100644 docs/EN/source/method_tutorials/quantization.md create mode 100644 docs/EN/source/method_tutorials/step_distill.md create mode 100644 docs/EN/source/method_tutorials/video_frame_interpolation.md create mode 100644 docs/PAPERS_ZH_CN/.readthedocs.yaml create mode 100644 docs/PAPERS_ZH_CN/Makefile create mode 100644 docs/PAPERS_ZH_CN/make.bat create mode 100644 docs/PAPERS_ZH_CN/source/conf.py create mode 100644 docs/PAPERS_ZH_CN/source/index.rst create mode 100644 docs/PAPERS_ZH_CN/source/papers/RL.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/attention.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/autoregressive.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/cache.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/changing_resolution.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/generation_basics.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/models.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/offload.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/parallel.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/prompt_enhance.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/quantization.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/step_distill.md create mode 100644 docs/PAPERS_ZH_CN/source/papers/vae.md create mode 100644 docs/ZH_CN/.readthedocs.yaml create mode 100644 docs/ZH_CN/Makefile create mode 100644 docs/ZH_CN/make.bat create mode 100644 docs/ZH_CN/source/conf.py create mode 100644 docs/ZH_CN/source/deploy_guides/deploy_comfyui.md create mode 100644 docs/ZH_CN/source/deploy_guides/deploy_gradio.md create mode 100644 docs/ZH_CN/source/deploy_guides/deploy_local_windows.md create mode 100644 docs/ZH_CN/source/deploy_guides/deploy_service.md create mode 100644 docs/ZH_CN/source/deploy_guides/for_low_latency.md create mode 100644 docs/ZH_CN/source/deploy_guides/for_low_resource.md create mode 100644 docs/ZH_CN/source/deploy_guides/lora_deploy.md create mode 100644 docs/ZH_CN/source/getting_started/benchmark.md create mode 100644 docs/ZH_CN/source/getting_started/benchmark_source.md create mode 100644 docs/ZH_CN/source/getting_started/model_structure.md create mode 100644 docs/ZH_CN/source/getting_started/quickstart.md create mode 100644 docs/ZH_CN/source/index.rst create mode 100644 docs/ZH_CN/source/method_tutorials/attention.md create mode 100644 docs/ZH_CN/source/method_tutorials/autoregressive_distill.md create mode 100644 docs/ZH_CN/source/method_tutorials/cache.md create mode 100644 docs/ZH_CN/source/method_tutorials/cache_source.md create mode 100644 docs/ZH_CN/source/method_tutorials/changing_resolution.md create mode 100644 docs/ZH_CN/source/method_tutorials/offload.md create mode 100644 docs/ZH_CN/source/method_tutorials/parallel.md create mode 100644 docs/ZH_CN/source/method_tutorials/quantization.md create mode 100644 docs/ZH_CN/source/method_tutorials/step_distill.md create mode 100644 docs/ZH_CN/source/method_tutorials/video_frame_interpolation.md create mode 100644 examples/README.md create mode 100644 examples/README_zh.md create mode 100644 examples/hunyuan_video/hunyuan_i2v.py create mode 100644 examples/hunyuan_video/hunyuan_t2v.py create mode 100644 examples/hunyuan_video/hunyuan_t2v_distill.py create mode 100644 examples/wan/wan_animate.py create mode 100644 examples/wan/wan_flf2v.py create mode 100644 examples/wan/wan_i2v.py create mode 100644 examples/wan/wan_i2v_distilled.py create mode 100644 examples/wan/wan_i2v_with_distill_loras.py create mode 100644 examples/wan/wan_t2v.py create mode 100644 examples/wan/wan_vace.py create mode 100644 lightx2v/__init__.py create mode 100644 lightx2v/common/__init__.py create mode 100644 lightx2v/common/modules/__init__.py create mode 100644 lightx2v/common/modules/weight_module.py create mode 100644 lightx2v/common/offload/manager.py create mode 100644 lightx2v/common/ops/__init__.py create mode 100644 lightx2v/common/ops/attn/__init__.py create mode 100644 lightx2v/common/ops/attn/flash_attn.py create mode 100644 lightx2v/common/ops/attn/nbhd_attn.py create mode 100644 lightx2v/common/ops/attn/radial_attn.py create mode 100644 lightx2v/common/ops/attn/ring_attn.py create mode 100644 lightx2v/common/ops/attn/sage_attn.py create mode 100644 lightx2v/common/ops/attn/spassage_attn.py create mode 100644 lightx2v/common/ops/attn/svg2_attn.py create mode 100644 lightx2v/common/ops/attn/svg2_attn_utils.py create mode 100644 lightx2v/common/ops/attn/svg_attn.py create mode 100644 lightx2v/common/ops/attn/template.py create mode 100644 lightx2v/common/ops/attn/torch_sdpa.py create mode 100644 lightx2v/common/ops/attn/ulysses_attn.py create mode 100644 lightx2v/common/ops/attn/utils/all2all.py create mode 100644 lightx2v/common/ops/attn/utils/ring_comm.py create mode 100644 lightx2v/common/ops/conv/__init__.py create mode 100644 lightx2v/common/ops/conv/conv2d.py create mode 100644 lightx2v/common/ops/conv/conv3d.py create mode 100644 lightx2v/common/ops/embedding/__init__.py create mode 100644 lightx2v/common/ops/embedding/embedding_weight.py create mode 100644 lightx2v/common/ops/mm/__init__.py create mode 100644 lightx2v/common/ops/mm/mm_weight.py create mode 100644 lightx2v/common/ops/norm/__init__.py create mode 100644 lightx2v/common/ops/norm/layer_norm_weight.py create mode 100644 lightx2v/common/ops/norm/rms_norm_weight.py create mode 100644 lightx2v/common/ops/norm/triton_ops.py create mode 100644 lightx2v/common/ops/tensor/__init__.py create mode 100644 lightx2v/common/ops/tensor/tensor.py create mode 100644 lightx2v/common/transformer_infer/transformer_infer.py create mode 100644 lightx2v/deploy/__init__.py create mode 100644 lightx2v/deploy/common/__init__.py create mode 100644 lightx2v/deploy/common/aliyun.py create mode 100644 lightx2v/deploy/common/audio_separator.py create mode 100644 lightx2v/deploy/common/face_detector.py create mode 100644 lightx2v/deploy/common/pipeline.py create mode 100644 lightx2v/deploy/common/podcasts.py create mode 100644 lightx2v/deploy/common/utils.py create mode 100644 lightx2v/deploy/common/va_controller.py create mode 100644 lightx2v/deploy/common/va_reader.py create mode 100644 lightx2v/deploy/common/va_reader_omni.py create mode 100644 lightx2v/deploy/common/va_recorder.py create mode 100644 lightx2v/deploy/common/va_recorder_x264.py create mode 100644 lightx2v/deploy/common/video_recorder.py create mode 100644 lightx2v/deploy/common/volcengine_tts.py create mode 100644 lightx2v/deploy/data_manager/__init__.py create mode 100644 lightx2v/deploy/data_manager/local_data_manager.py create mode 100644 lightx2v/deploy/data_manager/s3_data_manager.py create mode 100644 lightx2v/deploy/queue_manager/__init__.py create mode 100644 lightx2v/deploy/queue_manager/local_queue_manager.py create mode 100644 lightx2v/deploy/queue_manager/rabbitmq_queue_manager.py create mode 100644 lightx2v/deploy/server/__init__.py create mode 100644 lightx2v/deploy/server/__main__.py create mode 100644 lightx2v/deploy/server/auth.py create mode 100644 lightx2v/deploy/server/frontend/.gitignore create mode 100644 lightx2v/deploy/server/frontend/README.md create mode 100644 lightx2v/deploy/server/frontend/index.html create mode 100644 lightx2v/deploy/server/frontend/package-lock.json create mode 100644 lightx2v/deploy/server/frontend/package.json create mode 100644 lightx2v/deploy/server/frontend/public/cover.png create mode 100644 lightx2v/deploy/server/frontend/public/female.svg create mode 100644 lightx2v/deploy/server/frontend/public/logo.svg create mode 100644 lightx2v/deploy/server/frontend/public/logo_black.png create mode 100644 lightx2v/deploy/server/frontend/public/logo_black.svg create mode 100644 lightx2v/deploy/server/frontend/public/male.svg create mode 100644 lightx2v/deploy/server/frontend/public/robots.txt create mode 100644 lightx2v/deploy/server/frontend/public/sitemap.xml create mode 100644 lightx2v/deploy/server/frontend/public/vite.svg create mode 100644 lightx2v/deploy/server/frontend/src/App.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Alert.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/AudioPreviewTest.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Confirm.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/DropdownMenu.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/FloatingParticles.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Generate.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Inspirations.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/LeftBar.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Loading.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/LoginCard.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/MediaTemplate.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/ModelDropdown.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Projects.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/PromptTemplate.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/SiteFooter.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/TaskCarousel.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/TaskDetails.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/TemplateDetails.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/TemplateDisplay.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/TopBar.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/VoiceSelector.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/VoiceTtsHistoryPanel.vue create mode 100644 lightx2v/deploy/server/frontend/src/components/Voice_tts.vue create mode 100644 lightx2v/deploy/server/frontend/src/locales/en.json create mode 100644 lightx2v/deploy/server/frontend/src/locales/zh.json create mode 100644 lightx2v/deploy/server/frontend/src/main.js create mode 100644 lightx2v/deploy/server/frontend/src/router/index.js create mode 100644 lightx2v/deploy/server/frontend/src/style.css create mode 100644 lightx2v/deploy/server/frontend/src/utils/i18n.js create mode 100644 lightx2v/deploy/server/frontend/src/utils/other.js create mode 100644 lightx2v/deploy/server/frontend/src/views/404.vue create mode 100644 lightx2v/deploy/server/frontend/src/views/Layout.vue create mode 100644 lightx2v/deploy/server/frontend/src/views/Login.vue create mode 100644 lightx2v/deploy/server/frontend/src/views/PodcastGenerate.vue create mode 100644 lightx2v/deploy/server/frontend/src/views/Share.vue create mode 100644 lightx2v/deploy/server/frontend/vite.config.js create mode 100644 lightx2v/deploy/server/metrics.py create mode 100644 lightx2v/deploy/server/monitor.py create mode 100644 lightx2v/deploy/server/redis_client.py create mode 100644 lightx2v/deploy/server/redis_monitor.py create mode 120000 lightx2v/deploy/server/static/assets create mode 100644 lightx2v/deploy/server/static/icon/logoblack.png create mode 100644 lightx2v/deploy/server/static/icon/seko_logo.svg create mode 100644 lightx2v/deploy/server/static/icon/seko_logo_nobg.png create mode 100644 lightx2v/deploy/server/static/icon/seko_logo_white.svg create mode 120000 lightx2v/deploy/server/static/index.html create mode 100644 lightx2v/deploy/server/static/index_old.html create mode 100644 lightx2v/deploy/task_manager/__init__.py create mode 100644 lightx2v/deploy/task_manager/local_task_manager.py create mode 100644 lightx2v/deploy/task_manager/sql_task_manager.py create mode 100644 lightx2v/deploy/worker/__init__.py create mode 100644 lightx2v/deploy/worker/__main__.py create mode 100644 lightx2v/deploy/worker/hub.py create mode 100644 lightx2v/infer.py create mode 100644 lightx2v/models/__init__.py create mode 100644 lightx2v/models/input_encoders/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/animate/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/animate/face_encoder.py create mode 100644 lightx2v/models/input_encoders/hf/animate/motion_encoder.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/byt5/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/byt5/format_prompt.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/byt5/model.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/qwen25/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/qwen25/model.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/siglip/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/hunyuan15/siglip/model.py create mode 100644 lightx2v/models/input_encoders/hf/q_linear.py create mode 100644 lightx2v/models/input_encoders/hf/qwen25/qwen25_vlforconditionalgeneration.py create mode 100644 lightx2v/models/input_encoders/hf/seko_audio/audio_adapter.py create mode 100644 lightx2v/models/input_encoders/hf/seko_audio/audio_encoder.py create mode 100644 lightx2v/models/input_encoders/hf/vace/vace_processor.py create mode 100644 lightx2v/models/input_encoders/hf/wan/matrix_game2/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/wan/matrix_game2/clip.py create mode 100644 lightx2v/models/input_encoders/hf/wan/matrix_game2/conditions.py create mode 100644 lightx2v/models/input_encoders/hf/wan/matrix_game2/tokenizers.py create mode 100644 lightx2v/models/input_encoders/hf/wan/t5/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/wan/t5/model.py create mode 100644 lightx2v/models/input_encoders/hf/wan/t5/tokenizer.py create mode 100644 lightx2v/models/input_encoders/hf/wan/xlm_roberta/__init__.py create mode 100644 lightx2v/models/input_encoders/hf/wan/xlm_roberta/model.py create mode 100644 lightx2v/models/networks/__init__.py create mode 100644 lightx2v/models/networks/hunyuan_video/__init__.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/attn_no_pad.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/feature_caching/__init__.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/feature_caching/transformer_infer.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/module_io.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/offload/__init__.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/offload/transformer_infer.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/post_infer.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/pre_infer.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/transformer_infer.py create mode 100644 lightx2v/models/networks/hunyuan_video/infer/triton_ops.py create mode 100644 lightx2v/models/networks/hunyuan_video/model.py create mode 100644 lightx2v/models/networks/hunyuan_video/weights/post_weights.py create mode 100644 lightx2v/models/networks/hunyuan_video/weights/pre_weights.py create mode 100644 lightx2v/models/networks/hunyuan_video/weights/transformer_weights.py create mode 100644 lightx2v/models/networks/qwen_image/infer/offload/__init__.py create mode 100644 lightx2v/models/networks/qwen_image/infer/offload/transformer_infer.py create mode 100644 lightx2v/models/networks/qwen_image/infer/post_infer.py create mode 100644 lightx2v/models/networks/qwen_image/infer/pre_infer.py create mode 100644 lightx2v/models/networks/qwen_image/infer/transformer_infer.py create mode 100644 lightx2v/models/networks/qwen_image/lora_adapter.py create mode 100644 lightx2v/models/networks/qwen_image/model.py create mode 100644 lightx2v/models/networks/qwen_image/weights/post_weights.py create mode 100644 lightx2v/models/networks/qwen_image/weights/pre_weights.py create mode 100644 lightx2v/models/networks/qwen_image/weights/transformer_weights.py create mode 100644 lightx2v/models/networks/wan/animate_model.py create mode 100644 lightx2v/models/networks/wan/audio_model.py create mode 100644 lightx2v/models/networks/wan/causvid_model.py create mode 100644 lightx2v/models/networks/wan/distill_model.py create mode 100644 lightx2v/models/networks/wan/infer/animate/pre_infer.py create mode 100644 lightx2v/models/networks/wan/infer/animate/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/audio/post_infer.py create mode 100644 lightx2v/models/networks/wan/infer/audio/pre_infer.py create mode 100644 lightx2v/models/networks/wan/infer/audio/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/causvid/__init__.py create mode 100644 lightx2v/models/networks/wan/infer/causvid/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/feature_caching/__init__.py create mode 100644 lightx2v/models/networks/wan/infer/feature_caching/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/matrix_game2/posemb_layers.py create mode 100644 lightx2v/models/networks/wan/infer/matrix_game2/pre_infer.py create mode 100644 lightx2v/models/networks/wan/infer/matrix_game2/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/module_io.py create mode 100644 lightx2v/models/networks/wan/infer/offload/__init__.py create mode 100644 lightx2v/models/networks/wan/infer/offload/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/post_infer.py create mode 100644 lightx2v/models/networks/wan/infer/pre_infer.py create mode 100644 lightx2v/models/networks/wan/infer/self_forcing/__init__.py create mode 100644 lightx2v/models/networks/wan/infer/self_forcing/pre_infer.py create mode 100644 lightx2v/models/networks/wan/infer/self_forcing/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/infer/triton_ops.py create mode 100644 lightx2v/models/networks/wan/infer/utils.py create mode 100644 lightx2v/models/networks/wan/infer/vace/transformer_infer.py create mode 100644 lightx2v/models/networks/wan/lora_adapter.py create mode 100644 lightx2v/models/networks/wan/matrix_game2_model.py create mode 100644 lightx2v/models/networks/wan/model.py create mode 100644 lightx2v/models/networks/wan/sf_model.py create mode 100644 lightx2v/models/networks/wan/vace_model.py create mode 100644 lightx2v/models/networks/wan/weights/animate/transformer_weights.py create mode 100644 lightx2v/models/networks/wan/weights/audio/transformer_weights.py create mode 100644 lightx2v/models/networks/wan/weights/matrix_game2/pre_weights.py create mode 100644 lightx2v/models/networks/wan/weights/matrix_game2/transformer_weights.py create mode 100644 lightx2v/models/networks/wan/weights/post_weights.py create mode 100644 lightx2v/models/networks/wan/weights/pre_weights.py create mode 100644 lightx2v/models/networks/wan/weights/transformer_weights.py create mode 100644 lightx2v/models/networks/wan/weights/vace/transformer_weights.py create mode 100644 lightx2v/models/runners/__init__.py create mode 100644 lightx2v/models/runners/base_runner.py create mode 100644 lightx2v/models/runners/default_runner.py create mode 100644 lightx2v/models/runners/hunyuan_video/hunyuan_video_15_distill_runner.py create mode 100644 lightx2v/models/runners/hunyuan_video/hunyuan_video_15_runner.py create mode 100644 lightx2v/models/runners/qwen_image/qwen_image_runner.py create mode 100644 lightx2v/models/runners/vsr/utils/TCDecoder.py create mode 100644 lightx2v/models/runners/vsr/utils/utils.py create mode 100644 lightx2v/models/runners/vsr/vsr_wrapper.py create mode 100644 lightx2v/models/runners/vsr/vsr_wrapper_hy15.py create mode 100644 lightx2v/models/runners/wan/__init__.py create mode 100644 lightx2v/models/runners/wan/wan_animate_runner.py create mode 100644 lightx2v/models/runners/wan/wan_audio_runner.py create mode 100644 lightx2v/models/runners/wan/wan_distill_runner.py create mode 100644 lightx2v/models/runners/wan/wan_matrix_game2_runner.py create mode 100644 lightx2v/models/runners/wan/wan_runner.py create mode 100644 lightx2v/models/runners/wan/wan_sf_runner.py create mode 100644 lightx2v/models/runners/wan/wan_vace_runner.py create mode 100644 lightx2v/models/schedulers/__init__.py create mode 100644 lightx2v/models/schedulers/hunyuan_video/__init__.py create mode 100644 lightx2v/models/schedulers/hunyuan_video/feature_caching/__init__.py create mode 100644 lightx2v/models/schedulers/hunyuan_video/feature_caching/scheduler.py create mode 100644 lightx2v/models/schedulers/hunyuan_video/posemb_layers.py create mode 100644 lightx2v/models/schedulers/hunyuan_video/scheduler.py create mode 100644 lightx2v/models/schedulers/hunyuan_video/step_distill/scheduler.py create mode 100644 lightx2v/models/schedulers/qwen_image/scheduler.py create mode 100644 lightx2v/models/schedulers/scheduler.py create mode 100644 lightx2v/models/schedulers/wan/audio/scheduler.py create mode 100644 lightx2v/models/schedulers/wan/changing_resolution/scheduler.py create mode 100644 lightx2v/models/schedulers/wan/feature_caching/scheduler.py create mode 100644 lightx2v/models/schedulers/wan/scheduler.py create mode 100644 lightx2v/models/schedulers/wan/self_forcing/scheduler.py create mode 100644 lightx2v/models/schedulers/wan/step_distill/scheduler.py create mode 100644 lightx2v/models/vfi/rife/model/loss.py create mode 100644 lightx2v/models/vfi/rife/model/pytorch_msssim/__init__.py create mode 100644 lightx2v/models/vfi/rife/model/warplayer.py create mode 100644 lightx2v/models/vfi/rife/rife_comfyui_wrapper.py create mode 100644 lightx2v/models/vfi/rife/train_log/IFNet_HDv3.py create mode 100644 lightx2v/models/vfi/rife/train_log/RIFE_HDv3.py create mode 100644 lightx2v/models/vfi/rife/train_log/refine.py create mode 100644 lightx2v/models/video_encoders/__init__.py create mode 100644 lightx2v/models/video_encoders/hf/__init__.py create mode 100644 lightx2v/models/video_encoders/hf/hunyuanvideo15/__init__.py create mode 100644 lightx2v/models/video_encoders/hf/hunyuanvideo15/hunyuanvideo_15_vae.py create mode 100644 lightx2v/models/video_encoders/hf/hunyuanvideo15/lighttae_hy15.py create mode 100644 lightx2v/models/video_encoders/hf/qwen_image/__init__.py create mode 100644 lightx2v/models/video_encoders/hf/qwen_image/vae.py create mode 100644 lightx2v/models/video_encoders/hf/tae.py create mode 100644 lightx2v/models/video_encoders/hf/vid_recon.py create mode 100644 lightx2v/models/video_encoders/hf/wan/__init__.py create mode 100644 lightx2v/models/video_encoders/hf/wan/vae.py create mode 100644 lightx2v/models/video_encoders/hf/wan/vae_2_2.py create mode 100644 lightx2v/models/video_encoders/hf/wan/vae_sf.py create mode 100644 lightx2v/models/video_encoders/hf/wan/vae_tiny.py create mode 100644 lightx2v/pipeline.py create mode 100644 lightx2v/server/README.md create mode 100644 lightx2v/server/__init__.py create mode 100644 lightx2v/server/__main__.py create mode 100644 lightx2v/server/api/__init__.py create mode 100644 lightx2v/server/api/deps.py create mode 100644 lightx2v/server/api/files.py create mode 100644 lightx2v/server/api/router.py create mode 100644 lightx2v/server/api/server.py create mode 100644 lightx2v/server/api/service_routes.py create mode 100644 lightx2v/server/api/tasks/__init__.py create mode 100644 lightx2v/server/api/tasks/common.py create mode 100644 lightx2v/server/api/tasks/image.py create mode 100644 lightx2v/server/api/tasks/video.py create mode 100644 lightx2v/server/config.py create mode 100644 lightx2v/server/main.py create mode 100644 lightx2v/server/media/__init__.py create mode 100644 lightx2v/server/media/audio.py create mode 100644 lightx2v/server/media/base.py create mode 100644 lightx2v/server/media/image.py create mode 100644 lightx2v/server/metrics/__init__.py create mode 100644 lightx2v/server/metrics/metrics.py create mode 100644 lightx2v/server/metrics/monitor.py create mode 100644 lightx2v/server/schema.py create mode 100644 lightx2v/server/services/__init__.py create mode 100644 lightx2v/server/services/distributed_utils.py create mode 100644 lightx2v/server/services/file_service.py create mode 100644 lightx2v/server/services/generation/__init__.py create mode 100644 lightx2v/server/services/generation/base.py create mode 100644 lightx2v/server/services/generation/image.py create mode 100644 lightx2v/server/services/generation/video.py create mode 100644 lightx2v/server/services/inference/__init__.py create mode 100644 lightx2v/server/services/inference/service.py create mode 100644 lightx2v/server/services/inference/worker.py create mode 100644 lightx2v/server/task_manager.py create mode 100644 lightx2v/utils/__init__.py create mode 100644 lightx2v/utils/async_io.py create mode 100644 lightx2v/utils/custom_compiler.py create mode 100644 lightx2v/utils/envs.py create mode 100644 lightx2v/utils/generate_task_id.py create mode 100644 lightx2v/utils/ggml_tensor.py create mode 100644 lightx2v/utils/global_paras.py create mode 100644 lightx2v/utils/input_info.py create mode 100644 lightx2v/utils/lockable_dict.py create mode 100644 lightx2v/utils/memory_profiler.py create mode 100644 lightx2v/utils/print_atten_score.py create mode 100644 lightx2v/utils/profiler.py create mode 100644 lightx2v/utils/prompt_enhancer.py create mode 100644 lightx2v/utils/quant_utils.py create mode 100644 lightx2v/utils/registry_factory.py create mode 100644 lightx2v/utils/service_utils.py create mode 100644 lightx2v/utils/set_config.py create mode 100644 lightx2v/utils/utils.py create mode 100644 lightx2v_kernel/CMakeLists.txt create mode 100644 lightx2v_kernel/LICENSE create mode 100644 lightx2v_kernel/README.md create mode 100644 lightx2v_kernel/cmake/utils.cmake create mode 100644 lightx2v_kernel/csrc/common_extension.cc create mode 100644 lightx2v_kernel/csrc/gemm/mxfp4_quant_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/mxfp4_scaled_mm_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/mxfp6_mxfp8_scaled_mm_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/mxfp6_quant_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/mxfp8_quant_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/mxfp8_scaled_mm_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/nvfp4_quant_kernels_sm120.cu create mode 100644 lightx2v_kernel/csrc/gemm/nvfp4_scaled_mm_kernels_sm120.cu create mode 100644 lightx2v_kernel/docs/en_US/mx_formats_quantization_basics.md create mode 100644 lightx2v_kernel/docs/en_US/nvfp4_quantization_basics.md create mode 100644 "lightx2v_kernel/docs/zh_CN/mx_formats\351\207\217\345\214\226\345\237\272\347\241\200.md" create mode 100644 "lightx2v_kernel/docs/zh_CN/nvfp4\351\207\217\345\214\226\345\237\272\347\241\200.md" create mode 100644 lightx2v_kernel/include/lightx2v_kernel_ops.h create mode 100644 lightx2v_kernel/include/utils.h create mode 100644 lightx2v_kernel/pyproject.toml create mode 100644 lightx2v_kernel/python/lightx2v_kernel/__init__.py create mode 100644 lightx2v_kernel/python/lightx2v_kernel/gemm.py create mode 100644 lightx2v_kernel/python/lightx2v_kernel/utils.py create mode 100644 lightx2v_kernel/python/lightx2v_kernel/version.py create mode 100644 lightx2v_kernel/test/mxfp4_mxfp4/test_bench.py create mode 100644 lightx2v_kernel/test/mxfp4_mxfp4/test_bench3_bias.py create mode 100644 lightx2v_kernel/test/mxfp4_mxfp4/test_mxfp4_quant.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test_bench.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test_bench3_bias.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test_fake_quant.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test_mm_tflops.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test_mxfp6_quant.py create mode 100644 lightx2v_kernel/test/mxfp6_mxfp8/test_quant_mem_utils.py create mode 100644 lightx2v_kernel/test/mxfp8_mxfp8/test_bench.py create mode 100644 lightx2v_kernel/test/mxfp8_mxfp8/test_bench3_bias.py create mode 100644 lightx2v_kernel/test/mxfp8_mxfp8/test_mm_tflops.py create mode 100644 lightx2v_kernel/test/mxfp8_mxfp8/test_mxfp8_quant.py create mode 100644 lightx2v_kernel/test/mxfp8_mxfp8/test_quant_mem_utils.py create mode 100644 lightx2v_kernel/test/nvfp4_nvfp4/fake_quant.py create mode 100644 lightx2v_kernel/test/nvfp4_nvfp4/test_bench1.py create mode 100644 lightx2v_kernel/test/nvfp4_nvfp4/test_bench2.py create mode 100644 lightx2v_kernel/test/nvfp4_nvfp4/test_bench3_bias.py create mode 100644 lightx2v_kernel/test/nvfp4_nvfp4/test_mm_tflops.py create mode 100644 lightx2v_kernel/test/nvfp4_nvfp4/test_quant_mem_utils.py create mode 100644 lightx2v_platform/__init__.py create mode 100644 lightx2v_platform/base/__init__.py create mode 100644 lightx2v_platform/base/base.py create mode 100644 lightx2v_platform/base/cambricon_mlu.py create mode 100644 lightx2v_platform/base/dcu.py create mode 100644 lightx2v_platform/base/global_var.py create mode 100644 lightx2v_platform/base/metax.py create mode 100644 lightx2v_platform/base/nvidia.py create mode 100644 lightx2v_platform/ops/__init__.py create mode 100644 lightx2v_platform/ops/attn/__init__.py create mode 100644 lightx2v_platform/ops/attn/cambricon_mlu/__init__.py create mode 100644 lightx2v_platform/ops/attn/cambricon_mlu/flash_attn.py create mode 100644 lightx2v_platform/ops/attn/cambricon_mlu/sage_attn.py create mode 100644 lightx2v_platform/ops/attn/dcu/__init__.py create mode 100644 lightx2v_platform/ops/attn/dcu/flash_attn.py create mode 100644 lightx2v_platform/ops/attn/template.py create mode 100644 lightx2v_platform/ops/mm/__init__.py create mode 100644 lightx2v_platform/ops/mm/cambricon_mlu/__init__.py create mode 100644 lightx2v_platform/ops/mm/cambricon_mlu/mm_weight.py create mode 100644 lightx2v_platform/ops/mm/cambricon_mlu/q_linear.py create mode 100644 lightx2v_platform/ops/mm/template.py create mode 100644 lightx2v_platform/ops/norm/__init__.py create mode 100644 lightx2v_platform/ops/rope/__init__.py create mode 100644 lightx2v_platform/registry_factory.py create mode 100644 lightx2v_platform/set_ai_device.py create mode 100644 lightx2v_platform/test/test_device.py create mode 100644 pyproject.toml create mode 100644 requirements-docs.txt create mode 100644 requirements.txt create mode 100644 requirements_animate.txt create mode 100644 requirements_win.txt create mode 100644 save_results/.gitkeep create mode 100644 scripts/base/base.sh create mode 100644 scripts/bench/run_lightx2v_1.sh create mode 100644 scripts/bench/run_lightx2v_2.sh create mode 100644 scripts/bench/run_lightx2v_3.sh create mode 100644 scripts/bench/run_lightx2v_3_distill.sh create mode 100644 scripts/bench/run_lightx2v_4.sh create mode 100644 scripts/bench/run_lightx2v_5.sh create mode 100644 scripts/bench/run_lightx2v_5_distill.sh create mode 100644 scripts/bench/run_lightx2v_6.sh create mode 100644 scripts/bench/run_lightx2v_6_distill.sh create mode 100644 scripts/cache/readme.md create mode 100644 scripts/cache/run_wan_i2v_dist_cfg_ulysses_mag.sh create mode 100644 scripts/cache/run_wan_i2v_mag.sh create mode 100644 scripts/cache/run_wan_i2v_mag_calibration.sh create mode 100644 scripts/cache/run_wan_i2v_tea.sh create mode 100644 scripts/cache/run_wan_t2v_dist_cfg_ulysses_mag.sh create mode 100644 scripts/cache/run_wan_t2v_mag.sh create mode 100644 scripts/cache/run_wan_t2v_mag_calibration.sh create mode 100644 scripts/cache/run_wan_t2v_tea.sh create mode 100644 scripts/changing_resolution/run_wan_i2v_changing_resolution.sh create mode 100644 scripts/changing_resolution/run_wan_t2v_changing_resolution.sh create mode 100644 scripts/dist_infer/run_wan22_moe_i2v_cfg.sh create mode 100644 scripts/dist_infer/run_wan22_moe_i2v_cfg_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_moe_i2v_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_moe_t2v_cfg.sh create mode 100644 scripts/dist_infer/run_wan22_moe_t2v_cfg_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_moe_t2v_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_ti2v_i2v_cfg.sh create mode 100644 scripts/dist_infer/run_wan22_ti2v_i2v_cfg_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_ti2v_i2v_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_ti2v_t2v_cfg.sh create mode 100644 scripts/dist_infer/run_wan22_ti2v_t2v_cfg_ulysses.sh create mode 100644 scripts/dist_infer/run_wan22_ti2v_t2v_ulysses.sh create mode 100644 scripts/dist_infer/run_wan_i2v_dist_cfg_ulysses.sh create mode 100644 scripts/dist_infer/run_wan_i2v_dist_ulysses.sh create mode 100644 scripts/dist_infer/run_wan_t2v_dist_cfg.sh create mode 100644 scripts/dist_infer/run_wan_t2v_dist_cfg_ulysses.sh create mode 100644 scripts/dist_infer/run_wan_t2v_dist_ulysses.sh create mode 100644 scripts/hunyuan_video_15/README.md create mode 100644 scripts/hunyuan_video_15/run_hy15_i2v_480p.sh create mode 100644 scripts/hunyuan_video_15/run_hy15_i2v_480p_vsr.sh create mode 100644 scripts/hunyuan_video_15/run_hy15_i2v_720p.sh create mode 100644 scripts/hunyuan_video_15/run_hy15_t2v_480p.sh create mode 100644 scripts/hunyuan_video_15/run_hy15_t2v_480p_distill.sh create mode 100644 scripts/hunyuan_video_15/run_hy15_t2v_720p.sh create mode 100644 scripts/matrix_game2/run_matrix_game2_gta_drive.sh create mode 100644 scripts/matrix_game2/run_matrix_game2_gta_drive_streaming.sh create mode 100644 scripts/matrix_game2/run_matrix_game2_templerun.sh create mode 100644 scripts/matrix_game2/run_matrix_game2_templerun_streaming.sh create mode 100644 scripts/matrix_game2/run_matrix_game2_universal.sh create mode 100644 scripts/matrix_game2/run_matrix_game2_universal_streaming.sh create mode 100644 scripts/quantization/gguf/run_wan_i2v_gguf_q4_k.sh create mode 100644 scripts/quantization/readme.md create mode 100644 scripts/quantization/run_wan_i2v_quantization.sh create mode 100644 scripts/qwen_image/qwen_image_i2i.sh create mode 100644 scripts/qwen_image/qwen_image_i2i_2509.sh create mode 100644 scripts/qwen_image/qwen_image_i2i_2509_block.sh create mode 100644 scripts/qwen_image/qwen_image_i2i_block.sh create mode 100644 scripts/qwen_image/qwen_image_i2i_lora.sh create mode 100644 scripts/qwen_image/qwen_image_t2i.sh create mode 100644 scripts/qwen_image/qwen_image_t2i_block.sh create mode 100644 scripts/seko_talk/multi_person/01_base.sh create mode 100644 scripts/seko_talk/multi_person/03_dist.sh create mode 100644 scripts/seko_talk/run_seko_talk_01_base.sh create mode 100644 scripts/seko_talk/run_seko_talk_02_fp8.sh create mode 100644 scripts/seko_talk/run_seko_talk_03_dist.sh create mode 100644 scripts/seko_talk/run_seko_talk_04_fp8_dist.sh create mode 100644 scripts/seko_talk/run_seko_talk_05_offload_fp8_4090.sh create mode 100644 scripts/seko_talk/run_seko_talk_06_offload_fp8_H100.sh create mode 100644 scripts/seko_talk/run_seko_talk_07_dist_offload.sh create mode 100644 scripts/seko_talk/run_seko_talk_08_5B_base.sh create mode 100644 scripts/seko_talk/run_seko_talk_09_base_fixed_min_area.sh create mode 100644 scripts/seko_talk/run_seko_talk_10_fp8_dist_fixed_min_area.sh create mode 100644 scripts/seko_talk/run_seko_talk_11_fp8_dist_fixed_shape.sh create mode 100644 scripts/seko_talk/run_seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.sh create mode 100644 scripts/seko_talk/run_seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.sh create mode 100644 scripts/seko_talk/run_seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.sh create mode 100644 scripts/seko_talk/run_seko_talk_15_base_compile.sh create mode 100644 scripts/seko_talk/run_seko_talk_16_fp8_dist_compile.sh create mode 100644 scripts/seko_talk/run_seko_talk_17_vsr.sh create mode 100644 scripts/seko_talk/run_seko_talk_18_5090_base.sh create mode 100644 scripts/seko_talk/run_seko_talk_19_A800_int8_dist.sh create mode 100644 scripts/seko_talk/run_seko_talk_20_A800_int8.sh create mode 100644 scripts/seko_talk/run_seko_talk_21_5090_int8.sh create mode 100644 scripts/seko_talk/run_seko_talk_21_5090_int8_dist.sh create mode 100644 scripts/seko_talk/run_seko_talk_22_nbhd_attn.sh create mode 100644 scripts/seko_talk/run_seko_talk_23_fp8_dist_nbhd_attn.sh create mode 100644 scripts/seko_talk/run_seko_talk_24_fp8_dist_compile_nbhd_attn.sh create mode 100644 scripts/seko_talk/run_seko_talk_25_mlu_bf16.sh create mode 100644 scripts/seko_talk/run_seko_talk_26_mlu_int8.sh create mode 100644 scripts/seko_talk/run_seko_talk_27_mlu_int8_dist.sh create mode 100644 scripts/seko_talk/run_seko_talk_28_f2v.sh create mode 100644 scripts/self_forcing/run_wan_t2v_sf.sh create mode 100644 scripts/server/check_status.py create mode 100644 scripts/server/post.py create mode 100644 scripts/server/post_enhancer.py create mode 100644 scripts/server/post_i2v.py create mode 100644 scripts/server/post_multi_servers.py create mode 100644 scripts/server/post_multi_servers_i2v.py create mode 100644 scripts/server/post_multi_servers_t2v.py create mode 100644 scripts/server/post_vbench_i2v.py create mode 100644 scripts/server/readme.md create mode 100644 scripts/server/start_multi_servers.sh create mode 100644 scripts/server/start_server.sh create mode 100644 scripts/server/start_server_i2i.sh create mode 100644 scripts/server/start_server_t2i.sh create mode 100644 scripts/server/stop_running_task.py create mode 100644 scripts/sparse_attn/spas_sage_attn/run_wan_i2v.sh create mode 100644 scripts/sparse_attn/spas_sage_attn/run_wan_t2v.sh create mode 100644 scripts/video_frame_interpolation/run_wan_t2v_video_frame_interpolation.sh create mode 100644 scripts/wan/run_wan_flf2v.sh create mode 100644 scripts/wan/run_wan_i2v.sh create mode 100644 scripts/wan/run_wan_i2v_causvid.sh create mode 100644 scripts/wan/run_wan_i2v_distill_4step_cfg.sh create mode 100644 scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh create mode 100644 scripts/wan/run_wan_i2v_lazy_load.sh create mode 100644 scripts/wan/run_wan_i2v_nbhd_attn_480p.sh create mode 100644 scripts/wan/run_wan_i2v_nbhd_attn_720p.sh create mode 100644 scripts/wan/run_wan_t2v.sh create mode 100644 scripts/wan/run_wan_t2v_causvid.sh create mode 100644 scripts/wan/run_wan_t2v_distill_4step_cfg.sh create mode 100644 scripts/wan/run_wan_t2v_distill_4step_cfg_dynamic.sh create mode 100644 scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh create mode 100644 scripts/wan/run_wan_vace.sh create mode 100644 scripts/wan22/run_wan22_animate.sh create mode 100644 scripts/wan22/run_wan22_animate_lora.sh create mode 100644 scripts/wan22/run_wan22_animate_replace.sh create mode 100644 scripts/wan22/run_wan22_distill_moe_flf2v.sh create mode 100644 scripts/wan22/run_wan22_moe_flf2v.sh create mode 100644 scripts/wan22/run_wan22_moe_i2v.sh create mode 100644 scripts/wan22/run_wan22_moe_i2v_distill.sh create mode 100644 scripts/wan22/run_wan22_moe_t2v.sh create mode 100644 scripts/wan22/run_wan22_moe_t2v_distill.sh create mode 100644 scripts/wan22/run_wan22_ti2v_i2v.sh create mode 100644 scripts/wan22/run_wan22_ti2v_t2v.sh create mode 100644 scripts/win/run_wan_i2v.bat create mode 100644 scripts/win/run_wan_t2v.bat create mode 100644 setup_vae.py create mode 100644 test_cases/run_matrix_game2_gta_drive.sh create mode 100644 test_cases/run_qwen_image_i2i_2509.sh create mode 100644 test_cases/run_seko_talk_01_base.sh create mode 100644 test_cases/run_wan_i2v.sh create mode 100644 test_cases/run_wan_i2v_offload.sh create mode 100644 test_cases/run_wan_t2v.sh create mode 100644 test_cases/run_wan_t2v_dist_cfg_ulysses.sh create mode 100644 test_cases/run_wan_t2v_sf.sh create mode 100644 tools/convert/converter.py create mode 100644 tools/convert/lora_loader.py create mode 100644 tools/convert/quant/__init__.py create mode 100644 tools/convert/quant/quant.py create mode 100644 tools/convert/quant_adapter.py create mode 100644 tools/convert/readme.md create mode 100644 tools/convert/readme_zh.md create mode 100644 tools/convert/seko_talk_converter.py create mode 100644 tools/download_rife.py create mode 100644 tools/extract/convert_vigen_to_x2v_lora.py create mode 100644 tools/extract/lora_extractor.py create mode 100644 tools/extract/lora_merger.py create mode 100644 tools/preprocess/UserGuider.md create mode 100644 tools/preprocess/__init__.py create mode 100644 tools/preprocess/human_visualization.py create mode 100644 tools/preprocess/pose2d.py create mode 100644 tools/preprocess/pose2d_utils.py create mode 100644 tools/preprocess/preprocess_data.py create mode 100644 tools/preprocess/process_pipepline.py create mode 100644 tools/preprocess/retarget_pose.py create mode 100644 tools/preprocess/sam_utils.py create mode 100644 tools/preprocess/utils.py create mode 100644 tools/preprocess/video_predictor.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..77b7ba2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +*.pth +*.pt +*.onnx +*.pk +*.model +*.zip +*.tar +*.pyc +*.log +*.o +*.so +*.a +*.exe +*.out +.idea +**.DS_Store** +**/__pycache__/** +**.swp +.vscode/ +.env +.log +*.pid +*.ipynb* +*.mp4 +build/ +dist/ +.cache/ +server_cache/ +app/.gradio/ +*.pkl diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..bdb356a --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,22 @@ +# Follow https://verdantfox.com/blog/how-to-use-git-pre-commit-hooks-the-hard-way-and-the-easy-way +repos: + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.0 + hooks: + - id: ruff + args: [--fix, --respect-gitignore, --config=pyproject.toml] + - id: ruff-format + args: [--config=pyproject.toml] + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-toml + - id: check-added-large-files + args: ['--maxkb=3000'] # Allow files up to 3MB + - id: check-case-conflict + - id: check-merge-conflict + - id: debug-statements diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 6b94e24..35408da 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,295 @@ -# LightX2V +
+

⚡️ LightX2V:
轻量级视频生成推理框架

+logo + +[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/ModelTC/lightx2v) +[![Doc](https://img.shields.io/badge/docs-English-99cc2)](https://lightx2v-en.readthedocs.io/en/latest) +[![Doc](https://img.shields.io/badge/文档-中文-99cc2)](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest) +[![Papers](https://img.shields.io/badge/论文集-中文-99cc2)](https://lightx2v-papers-zhcn.readthedocs.io/zh-cn/latest) +[![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat&logo=docker&logoColor=white)](https://hub.docker.com/r/lightx2v/lightx2v/tags) + +**\[ [English](README.md) | 中文 \]** + +
+ +-------------------------------------------------------------------------------- + +**LightX2V** 是一个先进的轻量级视频生成推理框架,专为提供高效、高性能的视频合成解决方案而设计。该统一平台集成了多种前沿的视频生成技术,支持文本生成视频(T2V)和图像生成视频(I2V)等多样化生成任务。**X2V 表示将不同的输入模态(X,如文本或图像)转换为视频输出(V)**。 + +> 🌐 **立即在线体验!** 无需安装即可体验 LightX2V:**[LightX2V 在线服务](https://x2v.light-ai.top/login)** - 免费、轻量、快速的AI数字人视频生成平台。 + +## :fire: 最新动态 + +- **2025年12月4日:** 🚀 支持 GGUF 格式模型推理,以及在寒武纪 MLU590、MetaX C500 硬件上的部署。 + +- **2025年11月24日:** 🚀 我们发布了HunyuanVideo-1.5的4步蒸馏模型!这些模型支持**超快速4步推理**,无需CFG配置,相比标准50步推理可实现约**25倍加速**。现已提供基础版本和FP8量化版本:[Hy1.5-Distill-Models](https://huggingface.co/lightx2v/Hy1.5-Distill-Models)。 + +- **2025年11月21日:** 🚀 我们Day0支持了[HunyuanVideo-1.5](https://huggingface.co/tencent/HunyuanVideo-1.5)的视频生成模型,同样GPU数量,LightX2V可带来约2倍以上的速度提升,并支持更低显存GPU部署(如24G RTX4090)。支持CFG并行/Ulysses并行,高效Offload,TeaCache/MagCache等技术。同时支持沐曦,寒武纪等国产芯片部署。我们很快将在我们的[HuggingFace主页](https://huggingface.co/lightx2v)更新更多模型,包括步数蒸馏,VAE蒸馏等相关模型。量化模型和轻量VAE模型现已可用:[Hy1.5-Quantized-Models](https://huggingface.co/lightx2v/Hy1.5-Quantized-Models)用于量化推理,[HunyuanVideo-1.5轻量TAE](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaehy1_5.safetensors)用于快速VAE解码。使用教程参考[这里](https://github.com/ModelTC/LightX2V/tree/main/scripts/hunyuan_video_15),或查看[示例目录](https://github.com/ModelTC/LightX2V/tree/main/examples)获取代码示例。 + + +## 🏆 性能测试数据 (更新于 2025.12.01) + +### 📊 推理框架之间性能对比 (H100) + +| Framework | GPUs | Step Time | Speedup | +|-----------|---------|---------|---------| +| Diffusers | 1 | 9.77s/it | 1x | +| xDiT | 1 | 8.93s/it | 1.1x | +| FastVideo | 1 | 7.35s/it | 1.3x | +| SGL-Diffusion | 1 | 6.13s/it | 1.6x | +| **LightX2V** | 1 | **5.18s/it** | **1.9x** 🚀 | +| FastVideo | 8 | 2.94s/it | 1x | +| xDiT | 8 | 2.70s/it | 1.1x | +| SGL-Diffusion | 8 | 1.19s/it | 2.5x | +| **LightX2V** | 8 | **0.75s/it** | **3.9x** 🚀 | + +### 📊 推理框架之间性能对比 (RTX 4090D) + +| Framework | GPUs | Step Time | Speedup | +|-----------|---------|---------|---------| +| Diffusers | 1 | 30.50s/it | 1x | +| FastVideo | 1 | 22.66s/it | 1.3x | +| xDiT | 1 | OOM | OOM | +| SGL-Diffusion | 1 | OOM | OOM | +| **LightX2V** | 1 | **20.26s/it** | **1.5x** 🚀 | +| FastVideo | 8 | 15.48s/it | 1x | +| xDiT | 8 | OOM | OOM | +| SGL-Diffusion | 8 | OOM | OOM | +| **LightX2V** | 8 | **4.75s/it** | **3.3x** 🚀 | + +### 📊 LightX2V不同配置之间性能对比 + +| Framework | GPU | Configuration | Step Time | Speedup | +|-----------|-----|---------------|-----------|---------------| +| **LightX2V** | H100 | 8 GPUs + cfg | 0.75s/it | 1x | +| **LightX2V** | H100 | 8 GPUs + no cfg | 0.39s/it | 1.9x | +| **LightX2V** | H100 | **8 GPUs + no cfg + fp8** | **0.35s/it** | **2.1x** 🚀 | +| **LightX2V** | 4090D | 8 GPUs + cfg | 4.75s/it | 1x | +| **LightX2V** | 4090D | 8 GPUs + no cfg | 3.13s/it | 1.5x | +| **LightX2V** | 4090D | **8 GPUs + no cfg + fp8** | **2.35s/it** | **2.0x** 🚀 | + +**注意**: 所有以上性能数据均在 Wan2.1-I2V-14B-480P(40 steps, 81 frames) 上测试。此外,我们[HuggingFace 主页](https://huggingface.co/lightx2v)还提供了4步蒸馏模型。 + + +## 💡 快速开始 + + +详细使用说明请参考我们的文档:**[英文文档](https://lightx2v-en.readthedocs.io/en/latest/) | [中文文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/)** + +**我们强烈推荐使用 Docker 环境,这是最简单快捷的环境安装方式。具体参考:文档中的快速入门章节。** + +### 从 Git 安装 +```bash +pip install -v git+https://github.com/ModelTC/LightX2V.git +``` + +### 从源码构建 +```bash +git clone https://github.com/ModelTC/LightX2V.git +cd LightX2V +uv pip install -v . # pip install -v . +``` + +### (可选)安装注意力/量化算子 +注意力算子安装说明请参考我们的文档:**[英文文档](https://lightx2v-en.readthedocs.io/en/latest/getting_started/quickstart.html#step-4-install-attention-operators) | [中文文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/getting_started/quickstart.html#id9)** + +### 使用示例 +```python +# examples/wan/wan_i2v.py +""" +Wan2.2 image-to-video generation example. +This example demonstrates how to use LightX2V with Wan2.2 model for I2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for Wan2.2 I2V task +# For wan2.1, use model_cls="wan2.1" +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe", + task="i2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="configs/wan22/wan_moe_i2v.json" +# ) + +# Enable offloading to significantly reduce VRAM usage with minimal speed impact +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", # For Wan models, supports both "block" and "phase" + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Create generator manually with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=40, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=[3.5, 3.5], # For wan2.1, guidance_scale is a scalar (e.g., 5.0) + sample_shift=5.0, +) + +# Generation parameters +seed = 42 +prompt = "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +image_path="/path/to/img_0.jpg" +save_result_path = "/path/to/save_results/output.mp4" + +# Generate video +pipe.generate( + seed=seed, + image_path=image_path, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) + +``` + +> 💡 **更多示例**: 更多使用案例,包括量化、卸载、缓存等进阶配置,请参考 [examples 目录](https://github.com/ModelTC/LightX2V/tree/main/examples)。 + +## 🤖 支持的模型生态 + +### 官方开源模型 +- ✅ [HunyuanVideo-1.5](https://huggingface.co/tencent/HunyuanVideo-1.5) +- ✅ [Wan2.1 & Wan2.2](https://huggingface.co/Wan-AI/) +- ✅ [Qwen-Image](https://huggingface.co/Qwen/Qwen-Image) +- ✅ [Qwen-Image-Edit](https://huggingface.co/spaces/Qwen/Qwen-Image-Edit) +- ✅ [Qwen-Image-Edit-2509](https://huggingface.co/Qwen/Qwen-Image-Edit-2509) + +### 量化模型和蒸馏模型/Lora (**🚀 推荐:4步推理**) +- ✅ [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- ✅ [Wan2.2-Distill-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) +- ✅ [Wan2.1-Distill-Loras](https://huggingface.co/lightx2v/Wan2.1-Distill-Loras) +- ✅ [Wan2.2-Distill-Loras](https://huggingface.co/lightx2v/Wan2.2-Distill-Loras) + +### 轻量级自编码器模型(**🚀 推荐:推理快速 + 内存占用低**) +- ✅ [Autoencoders](https://huggingface.co/lightx2v/Autoencoders) + +### 自回归模型 +- ✅ [Wan2.1-T2V-CausVid](https://huggingface.co/lightx2v/Wan2.1-T2V-14B-CausVid) +- ✅ [Self-Forcing](https://github.com/guandeh17/Self-Forcing) +- ✅ [Matrix-Game-2.0](https://huggingface.co/Skywork/Matrix-Game-2.0) + +🔔 可以关注我们的[HuggingFace主页](https://huggingface.co/lightx2v),及时获取我们团队的模型。 + +💡 参考[模型结构文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/getting_started/model_structure.html)快速上手 LightX2V + +## 🚀 前端展示 + +我们提供了多种前端界面部署方式: + +- **🎨 Gradio界面**: 简洁易用的Web界面,适合快速体验和原型开发 + - 📖 [Gradio部署文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_gradio.html) +- **🎯 ComfyUI界面**: 强大的节点式工作流界面,支持复杂的视频生成任务 + - 📖 [ComfyUI部署文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_comfyui.html) +- **🚀 Windows一键部署**: 专为Windows用户设计的便捷部署方案,支持自动环境配置和智能参数优化 + - 📖 [Windows一键部署文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_local_windows.html) + +**💡 推荐方案**: +- **首次使用**: 建议选择Windows一键部署方案 +- **高级用户**: 推荐使用ComfyUI界面获得更多自定义选项 +- **快速体验**: Gradio界面提供最直观的操作体验 + +## 🚀 核心特性 + +### 🎯 **极致性能优化** +- **🔥 SOTA推理速度**: 通过步数蒸馏和系统优化实现**20倍**极速加速(单GPU) +- **⚡️ 革命性4步蒸馏**: 将原始40-50步推理压缩至仅需4步,且无需CFG配置 +- **🛠️ 先进算子支持**: 集成顶尖算子,包括[Sage Attention](https://github.com/thu-ml/SageAttention)、[Flash Attention](https://github.com/Dao-AILab/flash-attention)、[Radial Attention](https://github.com/mit-han-lab/radial-attention)、[q8-kernel](https://github.com/KONAKONA666/q8_kernels)、[sgl-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel)、[vllm](https://github.com/vllm-project/vllm) + +### 💾 **资源高效部署** +- **💡 突破硬件限制**: **仅需8GB显存 + 16GB内存**即可运行14B模型生成480P/720P视频 +- **🔧 智能参数卸载**: 先进的磁盘-CPU-GPU三级卸载架构,支持阶段/块级别的精细化管理 +- **⚙️ 全面量化支持**: 支持`w8a8-int8`、`w8a8-fp8`、`w4a4-nvfp4`等多种量化策略 + +### 🎨 **丰富功能生态** +- **📈 智能特征缓存**: 智能缓存机制,消除冗余计算,提升效率 +- **🔄 并行推理加速**: 多GPU并行处理,显著提升性能表现 +- **📱 灵活部署选择**: 支持Gradio、服务化部署、ComfyUI等多种部署方式 +- **🎛️ 动态分辨率推理**: 自适应分辨率调整,优化生成质量 +- **🎞️ 视频帧插值**: 基于RIFE的帧插值技术,实现流畅的帧率提升 + + +## 📚 技术文档 + +### 📖 **方法教程** +- [模型量化](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/quantization.html) - 量化策略全面指南 +- [特征缓存](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/cache.html) - 智能缓存机制详解 +- [注意力机制](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/attention.html) - 前沿注意力算子 +- [参数卸载](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/offload.html) - 三级存储架构 +- [并行推理](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/parallel.html) - 多GPU加速策略 +- [变分辨率推理](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/changing_resolution.html) - U型分辨率策略 +- [步数蒸馏](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/step_distill.html) - 4步推理技术 +- [视频帧插值](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/video_frame_interpolation.html) - 基于RIFE的帧插值技术 + +### 🛠️ **部署指南** +- [低资源场景部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/for_low_resource.html) - 优化的8GB显存解决方案 +- [低延迟场景部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/for_low_latency.html) - 极速推理优化 +- [Gradio部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_gradio.html) - Web界面搭建 +- [服务化部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_service.html) - 生产级API服务部署 +- [Lora模型部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/lora_deploy.html) - Lora灵活部署 + +## 🧾 代码贡献指南 + +我们通过自动化的预提交钩子来保证代码质量,确保项目代码格式的一致性。 + +> [!TIP] +> **安装说明:** +> +> 1. 安装必要的依赖: +> ```shell +> pip install ruff pre-commit +> ``` +> +> 2. 提交前运行: +> ```shell +> pre-commit run --all-files +> ``` + +感谢您为LightX2V的改进做出贡献! + +## 🤝 致谢 + +我们向所有启发和促进LightX2V开发的模型仓库和研究社区表示诚挚的感谢。此框架基于开源社区的集体努力而构建。 + +## 🌟 Star 历史 + +[![Star History Chart](https://api.star-history.com/svg?repos=ModelTC/lightx2v&type=Timeline)](https://star-history.com/#ModelTC/lightx2v&Timeline) + +## ✏️ 引用 + +如果您发现LightX2V对您的研究有用,请考虑引用我们的工作: + +```bibtex +@misc{lightx2v, + author = {LightX2V Contributors}, + title = {LightX2V: Light Video Generation Inference Framework}, + year = {2025}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/ModelTC/lightx2v}}, +} +``` + +## 📞 联系与支持 + +如有任何问题、建议或需要支持,欢迎通过以下方式联系我们: +- 🐛 [GitHub Issues](https://github.com/ModelTC/lightx2v/issues) - 错误报告和功能请求 + +--- + +
+由 LightX2V 团队用 ❤️ 构建 +
diff --git a/app/README.md b/app/README.md new file mode 100644 index 0000000..2be884b --- /dev/null +++ b/app/README.md @@ -0,0 +1,13 @@ +# Gradio Demo + +Please refer our gradio deployment doc: + +[English doc: Gradio Deployment](https://lightx2v-en.readthedocs.io/en/latest/deploy_guides/deploy_gradio.html) + +[中文文档: Gradio 部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_gradio.html) + +## 🚀 Quick Start (快速开始) + +For Windows users, we provide a convenient one-click deployment solution with automatic environment configuration and intelligent parameter optimization. Please refer to the [One-Click Gradio Launch](https://lightx2v-en.readthedocs.io/en/latest/deploy_guides/deploy_local_windows.html) section for detailed instructions. + +对于Windows用户,我们提供了便捷的一键部署方式,支持自动环境配置和智能参数优化。详细操作请参考[一键启动Gradio](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_local_windows.html)章节。 diff --git a/app/gradio_demo.py b/app/gradio_demo.py new file mode 100644 index 0000000..448ec33 --- /dev/null +++ b/app/gradio_demo.py @@ -0,0 +1,1442 @@ +import argparse +import gc +import glob +import importlib.util +import json +import os + +os.environ["PROFILING_DEBUG_LEVEL"] = "2" +os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True" +os.environ["DTYPE"] = "BF16" +import random +from datetime import datetime + +import gradio as gr +import psutil +import torch +from loguru import logger + +from lightx2v.utils.input_info import set_input_info +from lightx2v.utils.set_config import get_default_config + +try: + from flashinfer.rope import apply_rope_with_cos_sin_cache_inplace +except ImportError: + apply_rope_with_cos_sin_cache_inplace = None + + +logger.add( + "inference_logs.log", + rotation="100 MB", + encoding="utf-8", + enqueue=True, + backtrace=True, + diagnose=True, +) + +MAX_NUMPY_SEED = 2**32 - 1 + + +def scan_model_path_contents(model_path): + """Scan model_path directory and return available files and subdirectories""" + if not model_path or not os.path.exists(model_path): + return {"dirs": [], "files": [], "safetensors_dirs": [], "pth_files": []} + + dirs = [] + files = [] + safetensors_dirs = [] + pth_files = [] + + try: + for item in os.listdir(model_path): + item_path = os.path.join(model_path, item) + if os.path.isdir(item_path): + dirs.append(item) + # Check if directory contains safetensors files + if glob.glob(os.path.join(item_path, "*.safetensors")): + safetensors_dirs.append(item) + elif os.path.isfile(item_path): + files.append(item) + if item.endswith(".pth"): + pth_files.append(item) + except Exception as e: + logger.warning(f"Failed to scan directory: {e}") + + return { + "dirs": sorted(dirs), + "files": sorted(files), + "safetensors_dirs": sorted(safetensors_dirs), + "pth_files": sorted(pth_files), + } + + +def get_dit_choices(model_path, model_type="wan2.1"): + """Get Diffusion model options (filtered by model type)""" + contents = scan_model_path_contents(model_path) + excluded_keywords = ["vae", "tae", "clip", "t5", "high_noise", "low_noise"] + fp8_supported = is_fp8_supported_gpu() + + if model_type == "wan2.1": + # wan2.1: filter files/dirs containing wan2.1 or Wan2.1 + def is_valid(name): + name_lower = name.lower() + if "wan2.1" not in name_lower: + return False + if not fp8_supported and "fp8" in name_lower: + return False + return not any(kw in name_lower for kw in excluded_keywords) + else: + # wan2.2: filter files/dirs containing wan2.2 or Wan2.2 + def is_valid(name): + name_lower = name.lower() + if "wan2.2" not in name_lower: + return False + if not fp8_supported and "fp8" in name_lower: + return False + return not any(kw in name_lower for kw in excluded_keywords) + + # Filter matching directories and files + dir_choices = [d for d in contents["dirs"] if is_valid(d)] + file_choices = [f for f in contents["files"] if is_valid(f)] + choices = dir_choices + file_choices + return choices if choices else [""] + + +def get_high_noise_choices(model_path): + """Get high noise model options (files/dirs containing high_noise)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + def is_valid(name): + name_lower = name.lower() + if not fp8_supported and "fp8" in name_lower: + return False + return "high_noise" in name_lower or "high-noise" in name_lower + + dir_choices = [d for d in contents["dirs"] if is_valid(d)] + file_choices = [f for f in contents["files"] if is_valid(f)] + choices = dir_choices + file_choices + return choices if choices else [""] + + +def get_low_noise_choices(model_path): + """Get low noise model options (files/dirs containing low_noise)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + def is_valid(name): + name_lower = name.lower() + if not fp8_supported and "fp8" in name_lower: + return False + return "low_noise" in name_lower or "low-noise" in name_lower + + dir_choices = [d for d in contents["dirs"] if is_valid(d)] + file_choices = [f for f in contents["files"] if is_valid(f)] + choices = dir_choices + file_choices + return choices if choices else [""] + + +def get_t5_choices(model_path): + """Get T5 model options (.pth or .safetensors files containing t5 keyword)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + # Filter from .pth files + pth_choices = [f for f in contents["pth_files"] if "t5" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # Filter from .safetensors files + safetensors_choices = [f for f in contents["files"] if f.endswith(".safetensors") and "t5" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # Filter from directories containing safetensors + safetensors_dir_choices = [d for d in contents["safetensors_dirs"] if "t5" in d.lower() and (fp8_supported or "fp8" not in d.lower())] + + choices = pth_choices + safetensors_choices + safetensors_dir_choices + return choices if choices else [""] + + +def get_clip_choices(model_path): + """Get CLIP model options (.pth or .safetensors files containing clip keyword)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + # Filter from .pth files + pth_choices = [f for f in contents["pth_files"] if "clip" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # Filter from .safetensors files + safetensors_choices = [f for f in contents["files"] if f.endswith(".safetensors") and "clip" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # Filter from directories containing safetensors + safetensors_dir_choices = [d for d in contents["safetensors_dirs"] if "clip" in d.lower() and (fp8_supported or "fp8" not in d.lower())] + + choices = pth_choices + safetensors_choices + safetensors_dir_choices + return choices if choices else [""] + + +def get_vae_choices(model_path): + """Get VAE model options (.pth or .safetensors files containing vae/VAE/tae keyword)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + # Filter from .pth files + pth_choices = [f for f in contents["pth_files"] if any(kw in f.lower() for kw in ["vae", "tae"]) and (fp8_supported or "fp8" not in f.lower())] + + # Filter from .safetensors files + safetensors_choices = [f for f in contents["files"] if f.endswith(".safetensors") and any(kw in f.lower() for kw in ["vae", "tae"]) and (fp8_supported or "fp8" not in f.lower())] + + # Filter from directories containing safetensors + safetensors_dir_choices = [d for d in contents["safetensors_dirs"] if any(kw in d.lower() for kw in ["vae", "tae"]) and (fp8_supported or "fp8" not in d.lower())] + + choices = pth_choices + safetensors_choices + safetensors_dir_choices + return choices if choices else [""] + + +def detect_quant_scheme(model_name): + """Automatically detect quantization scheme from model name + - If model name contains "int8" → "int8" + - If model name contains "fp8" and device supports → "fp8" + - Otherwise return None (no quantization) + """ + if not model_name: + return None + name_lower = model_name.lower() + if "int8" in name_lower: + return "int8" + elif "fp8" in name_lower: + if is_fp8_supported_gpu(): + return "fp8" + else: + # Device doesn't support fp8, return None (use default precision) + return None + return None + + +def update_model_path_options(model_path, model_type="wan2.1"): + """Update all model path selectors when model_path or model_type changes""" + dit_choices = get_dit_choices(model_path, model_type) + high_noise_choices = get_high_noise_choices(model_path) + low_noise_choices = get_low_noise_choices(model_path) + t5_choices = get_t5_choices(model_path) + clip_choices = get_clip_choices(model_path) + vae_choices = get_vae_choices(model_path) + + return ( + gr.update(choices=dit_choices, value=dit_choices[0] if dit_choices else ""), + gr.update(choices=high_noise_choices, value=high_noise_choices[0] if high_noise_choices else ""), + gr.update(choices=low_noise_choices, value=low_noise_choices[0] if low_noise_choices else ""), + gr.update(choices=t5_choices, value=t5_choices[0] if t5_choices else ""), + gr.update(choices=clip_choices, value=clip_choices[0] if clip_choices else ""), + gr.update(choices=vae_choices, value=vae_choices[0] if vae_choices else ""), + ) + + +def generate_random_seed(): + return random.randint(0, MAX_NUMPY_SEED) + + +def is_module_installed(module_name): + try: + spec = importlib.util.find_spec(module_name) + return spec is not None + except ModuleNotFoundError: + return False + + +def get_available_quant_ops(): + available_ops = [] + + vllm_installed = is_module_installed("vllm") + if vllm_installed: + available_ops.append(("vllm", True)) + else: + available_ops.append(("vllm", False)) + + sgl_installed = is_module_installed("sgl_kernel") + if sgl_installed: + available_ops.append(("sgl", True)) + else: + available_ops.append(("sgl", False)) + + q8f_installed = is_module_installed("q8_kernels") + if q8f_installed: + available_ops.append(("q8f", True)) + else: + available_ops.append(("q8f", False)) + + return available_ops + + +def get_available_attn_ops(): + available_ops = [] + + vllm_installed = is_module_installed("flash_attn") + if vllm_installed: + available_ops.append(("flash_attn2", True)) + else: + available_ops.append(("flash_attn2", False)) + + sgl_installed = is_module_installed("flash_attn_interface") + if sgl_installed: + available_ops.append(("flash_attn3", True)) + else: + available_ops.append(("flash_attn3", False)) + + sage_installed = is_module_installed("sageattention") + if sage_installed: + available_ops.append(("sage_attn2", True)) + else: + available_ops.append(("sage_attn2", False)) + + sage3_installed = is_module_installed("sageattn3") + if sage3_installed: + available_ops.append(("sage_attn3", True)) + else: + available_ops.append(("sage_attn3", False)) + + torch_installed = is_module_installed("torch") + if torch_installed: + available_ops.append(("torch_sdpa", True)) + else: + available_ops.append(("torch_sdpa", False)) + + return available_ops + + +def get_gpu_memory(gpu_idx=0): + if not torch.cuda.is_available(): + return 0 + try: + with torch.cuda.device(gpu_idx): + memory_info = torch.cuda.mem_get_info() + total_memory = memory_info[1] / (1024**3) # Convert bytes to GB + return total_memory + except Exception as e: + logger.warning(f"Failed to get GPU memory: {e}") + return 0 + + +def get_cpu_memory(): + available_bytes = psutil.virtual_memory().available + return available_bytes / 1024**3 + + +def cleanup_memory(): + gc.collect() + + if torch.cuda.is_available(): + torch.cuda.empty_cache() + torch.cuda.synchronize() + + try: + import psutil + + if hasattr(psutil, "virtual_memory"): + if os.name == "posix": + try: + os.system("sync") + except: # noqa + pass + except: # noqa + pass + + +def generate_unique_filename(output_dir): + os.makedirs(output_dir, exist_ok=True) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + return os.path.join(output_dir, f"{timestamp}.mp4") + + +def is_fp8_supported_gpu(): + if not torch.cuda.is_available(): + return False + compute_capability = torch.cuda.get_device_capability(0) + major, minor = compute_capability + return (major == 8 and minor == 9) or (major >= 9) + + +def is_ada_architecture_gpu(): + if not torch.cuda.is_available(): + return False + try: + gpu_name = torch.cuda.get_device_name(0).upper() + ada_keywords = ["RTX 40", "RTX40", "4090", "4080", "4070", "4060"] + return any(keyword in gpu_name for keyword in ada_keywords) + except Exception as e: + logger.warning(f"Failed to get GPU name: {e}") + return False + + +def get_quantization_options(model_path): + """Get quantization options dynamically based on model_path""" + import os + + # Check subdirectories + subdirs = ["original", "fp8", "int8"] + has_subdirs = {subdir: os.path.exists(os.path.join(model_path, subdir)) for subdir in subdirs} + + # Check original files in root directory + t5_bf16_exists = os.path.exists(os.path.join(model_path, "models_t5_umt5-xxl-enc-bf16.pth")) + clip_fp16_exists = os.path.exists(os.path.join(model_path, "models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth")) + + # Generate options + def get_choices(has_subdirs, original_type, fp8_type, int8_type, fallback_type, has_original_file=False): + choices = [] + if has_subdirs["original"]: + choices.append(original_type) + if has_subdirs["fp8"]: + choices.append(fp8_type) + if has_subdirs["int8"]: + choices.append(int8_type) + + # If no subdirectories but original file exists, add original type + if has_original_file: + if not choices or "original" not in choices: + choices.append(original_type) + + # If no options at all, use default value + if not choices: + choices = [fallback_type] + + return choices, choices[0] + + # DIT options + dit_choices, dit_default = get_choices(has_subdirs, "bf16", "fp8", "int8", "bf16") + + # T5 options - check if original file exists + t5_choices, t5_default = get_choices(has_subdirs, "bf16", "fp8", "int8", "bf16", t5_bf16_exists) + + # CLIP options - check if original file exists + clip_choices, clip_default = get_choices(has_subdirs, "fp16", "fp8", "int8", "fp16", clip_fp16_exists) + + return {"dit_choices": dit_choices, "dit_default": dit_default, "t5_choices": t5_choices, "t5_default": t5_default, "clip_choices": clip_choices, "clip_default": clip_default} + + +def determine_model_cls(model_type, dit_name, high_noise_name): + """Determine model_cls based on model type and file name""" + # Determine file name to check + if model_type == "wan2.1": + check_name = dit_name.lower() if dit_name else "" + is_distill = "4step" in check_name + return "wan2.1_distill" if is_distill else "wan2.1" + else: + # wan2.2 + check_name = high_noise_name.lower() if high_noise_name else "" + is_distill = "4step" in check_name + return "wan2.2_moe_distill" if is_distill else "wan2.2_moe" + + +global_runner = None +current_config = None +cur_dit_path = None +cur_t5_path = None +cur_clip_path = None + +available_quant_ops = get_available_quant_ops() +quant_op_choices = [] +for op_name, is_installed in available_quant_ops: + status_text = "✅ Installed" if is_installed else "❌ Not Installed" + display_text = f"{op_name} ({status_text})" + quant_op_choices.append((op_name, display_text)) + +available_attn_ops = get_available_attn_ops() +# Priority order +attn_priority = ["sage_attn3", "sage_attn2", "flash_attn3", "flash_attn2", "torch_sdpa"] +# Sort by priority, installed ones first, uninstalled ones last +attn_op_choices = [] +attn_op_dict = dict(available_attn_ops) + +# Add installed ones first (by priority) +for op_name in attn_priority: + if op_name in attn_op_dict and attn_op_dict[op_name]: + status_text = "✅ Installed" + display_text = f"{op_name} ({status_text})" + attn_op_choices.append((op_name, display_text)) + +# Add uninstalled ones (by priority) +for op_name in attn_priority: + if op_name in attn_op_dict and not attn_op_dict[op_name]: + status_text = "❌ Not Installed" + display_text = f"{op_name} ({status_text})" + attn_op_choices.append((op_name, display_text)) + +# Add other operators not in priority list (installed ones first) +other_ops = [(op_name, is_installed) for op_name, is_installed in available_attn_ops if op_name not in attn_priority] +for op_name, is_installed in sorted(other_ops, key=lambda x: not x[1]): # Installed ones first + status_text = "✅ Installed" if is_installed else "❌ Not Installed" + display_text = f"{op_name} ({status_text})" + attn_op_choices.append((op_name, display_text)) + + +def run_inference( + prompt, + negative_prompt, + save_result_path, + infer_steps, + num_frames, + resolution, + seed, + sample_shift, + enable_cfg, + cfg_scale, + fps, + use_tiling_vae, + lazy_load, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + model_path_input, + model_type_input, + task_type_input, + dit_path_input, + high_noise_path_input, + low_noise_path_input, + t5_path_input, + clip_path_input, + vae_path_input, + image_path=None, +): + cleanup_memory() + + quant_op = quant_op.split("(")[0].strip() + attention_type = attention_type.split("(")[0].strip() + + global global_runner, current_config, model_path, model_cls + global cur_dit_path, cur_t5_path, cur_clip_path + + task = task_type_input + model_cls = determine_model_cls(model_type_input, dit_path_input, high_noise_path_input) + logger.info(f"Auto-determined model_cls: {model_cls} (Model type: {model_type_input})") + + if model_type_input == "wan2.1": + dit_quant_detected = detect_quant_scheme(dit_path_input) + else: + dit_quant_detected = detect_quant_scheme(high_noise_path_input) + t5_quant_detected = detect_quant_scheme(t5_path_input) + clip_quant_detected = detect_quant_scheme(clip_path_input) + logger.info(f"Auto-detected quantization scheme - DIT: {dit_quant_detected}, T5: {t5_quant_detected}, CLIP: {clip_quant_detected}") + + if model_path_input and model_path_input.strip(): + model_path = model_path_input.strip() + + if os.path.exists(os.path.join(model_path, "config.json")): + with open(os.path.join(model_path, "config.json"), "r") as f: + model_config = json.load(f) + else: + model_config = {} + + save_result_path = generate_unique_filename(output_dir) + + is_dit_quant = dit_quant_detected != "bf16" + is_t5_quant = t5_quant_detected != "bf16" + is_clip_quant = clip_quant_detected != "fp16" + + dit_quantized_ckpt = None + dit_original_ckpt = None + high_noise_quantized_ckpt = None + low_noise_quantized_ckpt = None + high_noise_original_ckpt = None + low_noise_original_ckpt = None + + if is_dit_quant: + dit_quant_scheme = f"{dit_quant_detected}-{quant_op}" + if "wan2.1" in model_cls: + dit_quantized_ckpt = os.path.join(model_path, dit_path_input) + else: + high_noise_quantized_ckpt = os.path.join(model_path, high_noise_path_input) + low_noise_quantized_ckpt = os.path.join(model_path, low_noise_path_input) + else: + dit_quantized_ckpt = "Default" + if "wan2.1" in model_cls: + dit_original_ckpt = os.path.join(model_path, dit_path_input) + else: + high_noise_original_ckpt = os.path.join(model_path, high_noise_path_input) + low_noise_original_ckpt = os.path.join(model_path, low_noise_path_input) + + # Use frontend-selected T5 path + if is_t5_quant: + t5_quantized_ckpt = os.path.join(model_path, t5_path_input) + t5_quant_scheme = f"{t5_quant_detected}-{quant_op}" + t5_original_ckpt = None + else: + t5_quantized_ckpt = None + t5_quant_scheme = None + t5_original_ckpt = os.path.join(model_path, t5_path_input) + + # Use frontend-selected CLIP path + if is_clip_quant: + clip_quantized_ckpt = os.path.join(model_path, clip_path_input) + clip_quant_scheme = f"{clip_quant_detected}-{quant_op}" + clip_original_ckpt = None + else: + clip_quantized_ckpt = None + clip_quant_scheme = None + clip_original_ckpt = os.path.join(model_path, clip_path_input) + + if model_type_input == "wan2.1": + current_dit_path = dit_path_input + else: + current_dit_path = f"{high_noise_path_input}|{low_noise_path_input}" if high_noise_path_input and low_noise_path_input else None + + current_t5_path = t5_path_input + current_clip_path = clip_path_input + + needs_reinit = ( + lazy_load + or unload_modules + or global_runner is None + or current_config is None + or cur_dit_path is None + or cur_dit_path != current_dit_path + or cur_t5_path is None + or cur_t5_path != current_t5_path + or cur_clip_path is None + or cur_clip_path != current_clip_path + ) + + if cfg_scale == 1: + enable_cfg = False + else: + enable_cfg = True + + vae_name_lower = vae_path_input.lower() if vae_path_input else "" + use_tae = "tae" in vae_name_lower or "lighttae" in vae_name_lower + use_lightvae = "lightvae" in vae_name_lower + need_scaled = "lighttae" in vae_name_lower + + logger.info(f"VAE configuration - use_tae: {use_tae}, use_lightvae: {use_lightvae}, need_scaled: {need_scaled} (VAE: {vae_path_input})") + + config_graio = { + "infer_steps": infer_steps, + "target_video_length": num_frames, + "target_width": int(resolution.split("x")[0]), + "target_height": int(resolution.split("x")[1]), + "self_attn_1_type": attention_type, + "cross_attn_1_type": attention_type, + "cross_attn_2_type": attention_type, + "enable_cfg": enable_cfg, + "sample_guide_scale": cfg_scale, + "sample_shift": sample_shift, + "fps": fps, + "feature_caching": "NoCaching", + "do_mm_calib": False, + "parallel_attn_type": None, + "parallel_vae": False, + "max_area": False, + "vae_stride": (4, 8, 8), + "patch_size": (1, 2, 2), + "lora_path": None, + "strength_model": 1.0, + "use_prompt_enhancer": False, + "text_len": 512, + "denoising_step_list": [1000, 750, 500, 250], + "cpu_offload": True if "wan2.2" in model_cls else cpu_offload, + "offload_granularity": "phase" if "wan2.2" in model_cls else offload_granularity, + "t5_cpu_offload": t5_cpu_offload, + "clip_cpu_offload": clip_cpu_offload, + "vae_cpu_offload": vae_cpu_offload, + "dit_quantized": is_dit_quant, + "dit_quant_scheme": dit_quant_scheme, + "dit_quantized_ckpt": dit_quantized_ckpt, + "dit_original_ckpt": dit_original_ckpt, + "high_noise_quantized_ckpt": high_noise_quantized_ckpt, + "low_noise_quantized_ckpt": low_noise_quantized_ckpt, + "high_noise_original_ckpt": high_noise_original_ckpt, + "low_noise_original_ckpt": low_noise_original_ckpt, + "t5_original_ckpt": t5_original_ckpt, + "t5_quantized": is_t5_quant, + "t5_quantized_ckpt": t5_quantized_ckpt, + "t5_quant_scheme": t5_quant_scheme, + "clip_original_ckpt": clip_original_ckpt, + "clip_quantized": is_clip_quant, + "clip_quantized_ckpt": clip_quantized_ckpt, + "clip_quant_scheme": clip_quant_scheme, + "vae_path": os.path.join(model_path, vae_path_input), + "use_tiling_vae": use_tiling_vae, + "use_tae": use_tae, + "use_lightvae": use_lightvae, + "need_scaled": need_scaled, + "lazy_load": lazy_load, + "rope_chunk": rope_chunk, + "rope_chunk_size": rope_chunk_size, + "clean_cuda_cache": clean_cuda_cache, + "unload_modules": unload_modules, + "seq_parallel": False, + "warm_up_cpu_buffers": False, + "boundary_step_index": 2, + "boundary": 0.900, + "use_image_encoder": False if "wan2.2" in model_cls else True, + "rope_type": "flashinfer" if apply_rope_with_cos_sin_cache_inplace else "torch", + } + + args = argparse.Namespace( + model_cls=model_cls, + seed=seed, + task=task, + model_path=model_path, + prompt_enhancer=None, + prompt=prompt, + negative_prompt=negative_prompt, + image_path=image_path, + save_result_path=save_result_path, + return_result_tensor=False, + ) + + config = get_default_config() + config.update({k: v for k, v in vars(args).items()}) + config.update(model_config) + config.update(config_graio) + + logger.info(f"Using model: {model_path}") + logger.info(f"Inference configuration:\n{json.dumps(config, indent=4, ensure_ascii=False)}") + + # Initialize or reuse the runner + runner = global_runner + if needs_reinit: + if runner is not None: + del runner + torch.cuda.empty_cache() + gc.collect() + + from lightx2v.infer import init_runner # noqa + + runner = init_runner(config) + input_info = set_input_info(args) + + current_config = config + cur_dit_path = current_dit_path + cur_t5_path = current_t5_path + cur_clip_path = current_clip_path + + if not lazy_load: + global_runner = runner + else: + runner.config = config + + runner.run_pipeline(input_info) + cleanup_memory() + + return save_result_path + + +def handle_lazy_load_change(lazy_load_enabled): + """Handle lazy_load checkbox change to automatically enable unload_modules""" + return gr.update(value=lazy_load_enabled) + + +def auto_configure(resolution): + """Auto-configure inference options based on machine configuration and resolution""" + default_config = { + "lazy_load_val": False, + "rope_chunk_val": False, + "rope_chunk_size_val": 100, + "clean_cuda_cache_val": False, + "cpu_offload_val": False, + "offload_granularity_val": "block", + "t5_cpu_offload_val": False, + "clip_cpu_offload_val": False, + "vae_cpu_offload_val": False, + "unload_modules_val": False, + "attention_type_val": attn_op_choices[0][1], + "quant_op_val": quant_op_choices[0][1], + "use_tiling_vae_val": False, + } + + gpu_memory = round(get_gpu_memory()) + cpu_memory = round(get_cpu_memory()) + + attn_priority = ["sage_attn3", "sage_attn2", "flash_attn3", "flash_attn2", "torch_sdpa"] + + if is_ada_architecture_gpu(): + quant_op_priority = ["q8f", "vllm", "sgl"] + else: + quant_op_priority = ["vllm", "sgl", "q8f"] + + for op in attn_priority: + if dict(available_attn_ops).get(op): + default_config["attention_type_val"] = dict(attn_op_choices)[op] + break + + for op in quant_op_priority: + if dict(available_quant_ops).get(op): + default_config["quant_op_val"] = dict(quant_op_choices)[op] + break + + if resolution in [ + "1280x720", + "720x1280", + "1280x544", + "544x1280", + "1104x832", + "832x1104", + "960x960", + ]: + res = "720p" + elif resolution in [ + "960x544", + "544x960", + ]: + res = "540p" + else: + res = "480p" + + if res == "720p": + gpu_rules = [ + (80, {}), + (40, {"cpu_offload_val": False, "t5_cpu_offload_val": True, "vae_cpu_offload_val": True, "clip_cpu_offload_val": True}), + (32, {"cpu_offload_val": True, "t5_cpu_offload_val": False, "vae_cpu_offload_val": False, "clip_cpu_offload_val": False}), + ( + 24, + { + "cpu_offload_val": True, + "use_tiling_vae_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + }, + ), + ( + 16, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + "rope_chunk_val": True, + "rope_chunk_size_val": 100, + }, + ), + ( + 8, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + "rope_chunk_val": True, + "rope_chunk_size_val": 100, + "clean_cuda_cache_val": True, + }, + ), + ] + + else: + gpu_rules = [ + (80, {}), + (40, {"cpu_offload_val": False, "t5_cpu_offload_val": True, "vae_cpu_offload_val": True, "clip_cpu_offload_val": True}), + (32, {"cpu_offload_val": True, "t5_cpu_offload_val": False, "vae_cpu_offload_val": False, "clip_cpu_offload_val": False}), + ( + 24, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + }, + ), + ( + 16, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + }, + ), + ( + 8, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + }, + ), + ] + + cpu_rules = [ + (128, {}), + (64, {}), + (32, {"unload_modules_val": True}), + ( + 16, + { + "lazy_load_val": True, + "unload_modules_val": True, + }, + ), + ] + + for threshold, updates in gpu_rules: + if gpu_memory >= threshold: + default_config.update(updates) + break + + for threshold, updates in cpu_rules: + if cpu_memory >= threshold: + default_config.update(updates) + break + + return ( + gr.update(value=default_config["lazy_load_val"]), + gr.update(value=default_config["rope_chunk_val"]), + gr.update(value=default_config["rope_chunk_size_val"]), + gr.update(value=default_config["clean_cuda_cache_val"]), + gr.update(value=default_config["cpu_offload_val"]), + gr.update(value=default_config["offload_granularity_val"]), + gr.update(value=default_config["t5_cpu_offload_val"]), + gr.update(value=default_config["clip_cpu_offload_val"]), + gr.update(value=default_config["vae_cpu_offload_val"]), + gr.update(value=default_config["unload_modules_val"]), + gr.update(value=default_config["attention_type_val"]), + gr.update(value=default_config["quant_op_val"]), + gr.update(value=default_config["use_tiling_vae_val"]), + ) + + +css = """ + .main-content { max-width: 1600px; margin: auto; padding: 20px; } + .warning { color: #ff6b6b; font-weight: bold; } + + /* Model configuration area styles */ + .model-config { + margin-bottom: 20px !important; + border: 1px solid #e0e0e0; + border-radius: 12px; + padding: 15px; + background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); + } + + /* Input parameters area styles */ + .input-params { + margin-bottom: 20px !important; + border: 1px solid #e0e0e0; + border-radius: 12px; + padding: 15px; + background: linear-gradient(135deg, #fff5f5 0%, #ffeef0 100%); + } + + /* Output video area styles */ + .output-video { + border: 1px solid #e0e0e0; + border-radius: 12px; + padding: 20px; + background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%); + min-height: 400px; + } + + /* Generate button styles */ + .generate-btn { + width: 100%; + margin-top: 20px; + padding: 15px 30px !important; + font-size: 18px !important; + font-weight: bold !important; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important; + border: none !important; + border-radius: 10px !important; + box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4) !important; + transition: all 0.3s ease !important; + } + .generate-btn:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6) !important; + } + + /* Accordion header styles */ + .model-config .gr-accordion-header, + .input-params .gr-accordion-header, + .output-video .gr-accordion-header { + font-size: 20px !important; + font-weight: bold !important; + padding: 15px !important; + } + + /* Optimize spacing */ + .gr-row { + margin-bottom: 15px; + } + + /* Video player styles */ + .output-video video { + border-radius: 10px; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); + } + """ + + +def main(): + with gr.Blocks(title="Lightx2v (Lightweight Video Inference and Generation Engine)") as demo: + gr.Markdown(f"# 🎬 LightX2V Video Generator") + gr.HTML(f"") + # Main layout: left and right columns + with gr.Row(): + # Left: configuration and input area + with gr.Column(scale=5): + # Model configuration area + with gr.Accordion("🗂️ Model Configuration", open=True, elem_classes=["model-config"]): + # FP8 support notice + if not is_fp8_supported_gpu(): + gr.Markdown("⚠️ **Your device does not support FP8 inference**. Models containing FP8 have been automatically hidden.") + + # Hidden state components + model_path_input = gr.Textbox(value=model_path, visible=False) + + # Model type + Task type + with gr.Row(): + model_type_input = gr.Radio( + label="Model Type", + choices=["wan2.1", "wan2.2"], + value="wan2.1", + info="wan2.2 requires separate high noise and low noise models", + ) + task_type_input = gr.Radio( + label="Task Type", + choices=["i2v", "t2v"], + value="i2v", + info="i2v: Image-to-video, t2v: Text-to-video", + ) + + # wan2.1: Diffusion model (single row) + with gr.Row() as wan21_row: + dit_path_input = gr.Dropdown( + label="🎨 Diffusion Model", + choices=get_dit_choices(model_path, "wan2.1"), + value=get_dit_choices(model_path, "wan2.1")[0] if get_dit_choices(model_path, "wan2.1") else "", + allow_custom_value=True, + visible=True, + ) + + # wan2.2 specific: high noise model + low noise model (hidden by default) + with gr.Row(visible=False) as wan22_row: + high_noise_path_input = gr.Dropdown( + label="🔊 High Noise Model", + choices=get_high_noise_choices(model_path), + value=get_high_noise_choices(model_path)[0] if get_high_noise_choices(model_path) else "", + allow_custom_value=True, + ) + low_noise_path_input = gr.Dropdown( + label="🔇 Low Noise Model", + choices=get_low_noise_choices(model_path), + value=get_low_noise_choices(model_path)[0] if get_low_noise_choices(model_path) else "", + allow_custom_value=True, + ) + + # Text encoder (single row) + with gr.Row(): + t5_path_input = gr.Dropdown( + label="📝 Text Encoder", + choices=get_t5_choices(model_path), + value=get_t5_choices(model_path)[0] if get_t5_choices(model_path) else "", + allow_custom_value=True, + ) + + # Image encoder + VAE decoder + with gr.Row(): + clip_path_input = gr.Dropdown( + label="🖼️ Image Encoder", + choices=get_clip_choices(model_path), + value=get_clip_choices(model_path)[0] if get_clip_choices(model_path) else "", + allow_custom_value=True, + ) + vae_path_input = gr.Dropdown( + label="🎞️ VAE Decoder", + choices=get_vae_choices(model_path), + value=get_vae_choices(model_path)[0] if get_vae_choices(model_path) else "", + allow_custom_value=True, + ) + + # Attention operator and quantization matrix multiplication operator + with gr.Row(): + attention_type = gr.Dropdown( + label="⚡ Attention Operator", + choices=[op[1] for op in attn_op_choices], + value=attn_op_choices[0][1] if attn_op_choices else "", + info="Use appropriate attention operators to accelerate inference", + ) + quant_op = gr.Dropdown( + label="Quantization Matmul Operator", + choices=[op[1] for op in quant_op_choices], + value=quant_op_choices[0][1], + info="Select quantization matrix multiplication operator to accelerate inference", + interactive=True, + ) + + # Determine if model is distill version + def is_distill_model(model_type, dit_path, high_noise_path): + """Determine if model is distill version based on model type and path""" + if model_type == "wan2.1": + check_name = dit_path.lower() if dit_path else "" + else: + check_name = high_noise_path.lower() if high_noise_path else "" + return "4step" in check_name + + # Model type change event + def on_model_type_change(model_type, model_path_val): + if model_type == "wan2.2": + return gr.update(visible=False), gr.update(visible=True), gr.update() + else: + # Update wan2.1 Diffusion model options + dit_choices = get_dit_choices(model_path_val, "wan2.1") + return ( + gr.update(visible=True), + gr.update(visible=False), + gr.update(choices=dit_choices, value=dit_choices[0] if dit_choices else ""), + ) + + model_type_input.change( + fn=on_model_type_change, + inputs=[model_type_input, model_path_input], + outputs=[wan21_row, wan22_row, dit_path_input], + ) + + # Input parameters area + with gr.Accordion("📥 Input Parameters", open=True, elem_classes=["input-params"]): + # Image input (shown for i2v) + with gr.Row(visible=True) as image_input_row: + image_path = gr.Image( + label="Input Image", + type="filepath", + height=300, + interactive=True, + ) + + # Task type change event + def on_task_type_change(task_type): + return gr.update(visible=(task_type == "i2v")) + + task_type_input.change( + fn=on_task_type_change, + inputs=[task_type_input], + outputs=[image_input_row], + ) + + with gr.Row(): + with gr.Column(): + prompt = gr.Textbox( + label="Prompt", + lines=3, + placeholder="Describe the video content...", + max_lines=5, + ) + with gr.Column(): + negative_prompt = gr.Textbox( + label="Negative Prompt", + lines=3, + placeholder="What you don't want to appear in the video...", + max_lines=5, + value="Camera shake, bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards", + ) + with gr.Column(): + resolution = gr.Dropdown( + choices=[ + # 720p + ("1280x720 (16:9, 720p)", "1280x720"), + ("720x1280 (9:16, 720p)", "720x1280"), + ("1280x544 (21:9, 720p)", "1280x544"), + ("544x1280 (9:21, 720p)", "544x1280"), + ("1104x832 (4:3, 720p)", "1104x832"), + ("832x1104 (3:4, 720p)", "832x1104"), + ("960x960 (1:1, 720p)", "960x960"), + # 480p + ("960x544 (16:9, 540p)", "960x544"), + ("544x960 (9:16, 540p)", "544x960"), + ("832x480 (16:9, 480p)", "832x480"), + ("480x832 (9:16, 480p)", "480x832"), + ("832x624 (4:3, 480p)", "832x624"), + ("624x832 (3:4, 480p)", "624x832"), + ("720x720 (1:1, 480p)", "720x720"), + ("512x512 (1:1, 480p)", "512x512"), + ], + value="832x480", + label="Maximum Resolution", + ) + + with gr.Column(scale=9): + seed = gr.Slider( + label="Random Seed", + minimum=0, + maximum=MAX_NUMPY_SEED, + step=1, + value=generate_random_seed(), + ) + with gr.Column(): + default_dit = get_dit_choices(model_path, "wan2.1")[0] if get_dit_choices(model_path, "wan2.1") else "" + default_high_noise = get_high_noise_choices(model_path)[0] if get_high_noise_choices(model_path) else "" + default_is_distill = is_distill_model("wan2.1", default_dit, default_high_noise) + + if default_is_distill: + infer_steps = gr.Slider( + label="Inference Steps", + minimum=1, + maximum=100, + step=1, + value=4, + info="Distill model inference steps default to 4.", + ) + else: + infer_steps = gr.Slider( + label="Inference Steps", + minimum=1, + maximum=100, + step=1, + value=40, + info="Number of inference steps for video generation. Increasing steps may improve quality but reduce speed.", + ) + + # Dynamically update inference steps when model path changes + def update_infer_steps(model_type, dit_path, high_noise_path): + is_distill = is_distill_model(model_type, dit_path, high_noise_path) + if is_distill: + return gr.update(minimum=1, maximum=100, value=4, interactive=True) + else: + return gr.update(minimum=1, maximum=100, value=40, interactive=True) + + # Listen to model path changes + dit_path_input.change( + fn=lambda mt, dp, hnp: update_infer_steps(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[infer_steps], + ) + high_noise_path_input.change( + fn=lambda mt, dp, hnp: update_infer_steps(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[infer_steps], + ) + model_type_input.change( + fn=lambda mt, dp, hnp: update_infer_steps(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[infer_steps], + ) + + # Set default CFG based on model class + # CFG scale factor: default to 1 for distill, otherwise 5 + default_cfg_scale = 1 if default_is_distill else 5 + # enable_cfg is not exposed to frontend, automatically set based on cfg_scale + # If cfg_scale == 1, then enable_cfg = False, otherwise enable_cfg = True + default_enable_cfg = False if default_cfg_scale == 1 else True + enable_cfg = gr.Checkbox( + label="Enable Classifier-Free Guidance", + value=default_enable_cfg, + visible=False, # Hidden, not exposed to frontend + ) + + with gr.Row(): + sample_shift = gr.Slider( + label="Distribution Shift", + value=5, + minimum=0, + maximum=10, + step=1, + info="Controls the degree of distribution shift for samples. Larger values indicate more significant shifts.", + ) + cfg_scale = gr.Slider( + label="CFG Scale Factor", + minimum=1, + maximum=10, + step=1, + value=default_cfg_scale, + info="Controls the influence strength of the prompt. Higher values give more influence to the prompt. When value is 1, CFG is automatically disabled.", + ) + + # Update enable_cfg based on cfg_scale + def update_enable_cfg(cfg_scale_val): + """Automatically set enable_cfg based on cfg_scale value""" + if cfg_scale_val == 1: + return gr.update(value=False) + else: + return gr.update(value=True) + + # Dynamically update CFG scale factor and enable_cfg when model path changes + def update_cfg_scale(model_type, dit_path, high_noise_path): + is_distill = is_distill_model(model_type, dit_path, high_noise_path) + if is_distill: + new_cfg_scale = 1 + else: + new_cfg_scale = 5 + new_enable_cfg = False if new_cfg_scale == 1 else True + return gr.update(value=new_cfg_scale), gr.update(value=new_enable_cfg) + + dit_path_input.change( + fn=lambda mt, dp, hnp: update_cfg_scale(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[cfg_scale, enable_cfg], + ) + high_noise_path_input.change( + fn=lambda mt, dp, hnp: update_cfg_scale(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[cfg_scale, enable_cfg], + ) + model_type_input.change( + fn=lambda mt, dp, hnp: update_cfg_scale(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[cfg_scale, enable_cfg], + ) + + cfg_scale.change( + fn=update_enable_cfg, + inputs=[cfg_scale], + outputs=[enable_cfg], + ) + + with gr.Row(): + fps = gr.Slider( + label="Frames Per Second (FPS)", + minimum=8, + maximum=30, + step=1, + value=16, + info="Frames per second of the video. Higher FPS results in smoother videos.", + ) + num_frames = gr.Slider( + label="Total Frames", + minimum=16, + maximum=120, + step=1, + value=81, + info="Total number of frames in the video. More frames result in longer videos.", + ) + + save_result_path = gr.Textbox( + label="Output Video Path", + value=generate_unique_filename(output_dir), + info="Must include .mp4 extension. If left blank or using the default value, a unique filename will be automatically generated.", + visible=False, # Hide output path, auto-generated + ) + + with gr.Column(scale=4): + with gr.Accordion("📤 Generated Video", open=True, elem_classes=["output-video"]): + output_video = gr.Video( + label="", + height=600, + autoplay=True, + show_label=False, + ) + + infer_btn = gr.Button("🎬 Generate Video", variant="primary", size="lg", elem_classes=["generate-btn"]) + + rope_chunk = gr.Checkbox(label="Chunked Rotary Position Embedding", value=False, visible=False) + rope_chunk_size = gr.Slider(label="Rotary Embedding Chunk Size", value=100, minimum=100, maximum=10000, step=100, visible=False) + unload_modules = gr.Checkbox(label="Unload Modules", value=False, visible=False) + clean_cuda_cache = gr.Checkbox(label="Clean CUDA Memory Cache", value=False, visible=False) + cpu_offload = gr.Checkbox(label="CPU Offloading", value=False, visible=False) + lazy_load = gr.Checkbox(label="Enable Lazy Loading", value=False, visible=False) + offload_granularity = gr.Dropdown(label="Dit Offload Granularity", choices=["block", "phase"], value="phase", visible=False) + t5_cpu_offload = gr.Checkbox(label="T5 CPU Offloading", value=False, visible=False) + clip_cpu_offload = gr.Checkbox(label="CLIP CPU Offloading", value=False, visible=False) + vae_cpu_offload = gr.Checkbox(label="VAE CPU Offloading", value=False, visible=False) + use_tiling_vae = gr.Checkbox(label="VAE Tiling Inference", value=False, visible=False) + + resolution.change( + fn=auto_configure, + inputs=[resolution], + outputs=[ + lazy_load, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + use_tiling_vae, + ], + ) + + demo.load( + fn=lambda res: auto_configure(res), + inputs=[resolution], + outputs=[ + lazy_load, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + use_tiling_vae, + ], + ) + + infer_btn.click( + fn=run_inference, + inputs=[ + prompt, + negative_prompt, + save_result_path, + infer_steps, + num_frames, + resolution, + seed, + sample_shift, + enable_cfg, + cfg_scale, + fps, + use_tiling_vae, + lazy_load, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + model_path_input, + model_type_input, + task_type_input, + dit_path_input, + high_noise_path_input, + low_noise_path_input, + t5_path_input, + clip_path_input, + vae_path_input, + image_path, + ], + outputs=output_video, + ) + + demo.launch(share=True, server_port=args.server_port, server_name=args.server_name, inbrowser=True, allowed_paths=[output_dir]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Lightweight Video Generation") + parser.add_argument("--model_path", type=str, required=True, help="Model folder path") + parser.add_argument("--server_port", type=int, default=7862, help="Server port") + parser.add_argument("--server_name", type=str, default="0.0.0.0", help="Server IP") + parser.add_argument("--output_dir", type=str, default="./outputs", help="Output video save directory") + args = parser.parse_args() + + global model_path, model_cls, output_dir + model_path = args.model_path + model_cls = "wan2.1" + output_dir = args.output_dir + + main() diff --git a/app/gradio_demo_zh.py b/app/gradio_demo_zh.py new file mode 100644 index 0000000..229409f --- /dev/null +++ b/app/gradio_demo_zh.py @@ -0,0 +1,1442 @@ +import argparse +import gc +import glob +import importlib.util +import json +import os + +os.environ["PROFILING_DEBUG_LEVEL"] = "2" +os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True" +os.environ["DTYPE"] = "BF16" +import random +from datetime import datetime + +import gradio as gr +import psutil +import torch +from loguru import logger + +from lightx2v.utils.input_info import set_input_info +from lightx2v.utils.set_config import get_default_config + +try: + from flashinfer.rope import apply_rope_with_cos_sin_cache_inplace +except ImportError: + apply_rope_with_cos_sin_cache_inplace = None + + +logger.add( + "inference_logs.log", + rotation="100 MB", + encoding="utf-8", + enqueue=True, + backtrace=True, + diagnose=True, +) + +MAX_NUMPY_SEED = 2**32 - 1 + + +def scan_model_path_contents(model_path): + """扫描 model_path 目录,返回可用的文件和子目录""" + if not model_path or not os.path.exists(model_path): + return {"dirs": [], "files": [], "safetensors_dirs": [], "pth_files": []} + + dirs = [] + files = [] + safetensors_dirs = [] + pth_files = [] + + try: + for item in os.listdir(model_path): + item_path = os.path.join(model_path, item) + if os.path.isdir(item_path): + dirs.append(item) + # 检查目录是否包含 safetensors 文件 + if glob.glob(os.path.join(item_path, "*.safetensors")): + safetensors_dirs.append(item) + elif os.path.isfile(item_path): + files.append(item) + if item.endswith(".pth"): + pth_files.append(item) + except Exception as e: + logger.warning(f"扫描目录失败: {e}") + + return { + "dirs": sorted(dirs), + "files": sorted(files), + "safetensors_dirs": sorted(safetensors_dirs), + "pth_files": sorted(pth_files), + } + + +def get_dit_choices(model_path, model_type="wan2.1"): + """获取 Diffusion 模型可选项(根据模型类型筛选)""" + contents = scan_model_path_contents(model_path) + excluded_keywords = ["vae", "tae", "clip", "t5", "high_noise", "low_noise"] + fp8_supported = is_fp8_supported_gpu() + + if model_type == "wan2.1": + # wan2.1: 筛选包含 wan2.1 或 Wan2.1 的文件/目录 + def is_valid(name): + name_lower = name.lower() + if "wan2.1" not in name_lower: + return False + if not fp8_supported and "fp8" in name_lower: + return False + return not any(kw in name_lower for kw in excluded_keywords) + else: + # wan2.2: 筛选包含 wan2.2 或 Wan2.2 的文件/目录 + def is_valid(name): + name_lower = name.lower() + if "wan2.2" not in name_lower: + return False + if not fp8_supported and "fp8" in name_lower: + return False + return not any(kw in name_lower for kw in excluded_keywords) + + # 筛选符合条件的目录和文件 + dir_choices = [d for d in contents["dirs"] if is_valid(d)] + file_choices = [f for f in contents["files"] if is_valid(f)] + choices = dir_choices + file_choices + return choices if choices else [""] + + +def get_high_noise_choices(model_path): + """获取高噪模型可选项(包含 high_noise 的文件/目录)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + def is_valid(name): + name_lower = name.lower() + if not fp8_supported and "fp8" in name_lower: + return False + return "high_noise" in name_lower or "high-noise" in name_lower + + dir_choices = [d for d in contents["dirs"] if is_valid(d)] + file_choices = [f for f in contents["files"] if is_valid(f)] + choices = dir_choices + file_choices + return choices if choices else [""] + + +def get_low_noise_choices(model_path): + """获取低噪模型可选项(包含 low_noise 的文件/目录)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + def is_valid(name): + name_lower = name.lower() + if not fp8_supported and "fp8" in name_lower: + return False + return "low_noise" in name_lower or "low-noise" in name_lower + + dir_choices = [d for d in contents["dirs"] if is_valid(d)] + file_choices = [f for f in contents["files"] if is_valid(f)] + choices = dir_choices + file_choices + return choices if choices else [""] + + +def get_t5_choices(model_path): + """获取 T5 模型可选项(.pth 或 .safetensors 文件,包含 t5 关键字)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + # 从 .pth 文件中筛选 + pth_choices = [f for f in contents["pth_files"] if "t5" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # 从 .safetensors 文件中筛选 + safetensors_choices = [f for f in contents["files"] if f.endswith(".safetensors") and "t5" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # 从包含 safetensors 的目录中筛选 + safetensors_dir_choices = [d for d in contents["safetensors_dirs"] if "t5" in d.lower() and (fp8_supported or "fp8" not in d.lower())] + + choices = pth_choices + safetensors_choices + safetensors_dir_choices + return choices if choices else [""] + + +def get_clip_choices(model_path): + """获取 CLIP 模型可选项(.pth 或 .safetensors 文件,包含 clip 关键字)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + # 从 .pth 文件中筛选 + pth_choices = [f for f in contents["pth_files"] if "clip" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # 从 .safetensors 文件中筛选 + safetensors_choices = [f for f in contents["files"] if f.endswith(".safetensors") and "clip" in f.lower() and (fp8_supported or "fp8" not in f.lower())] + + # 从包含 safetensors 的目录中筛选 + safetensors_dir_choices = [d for d in contents["safetensors_dirs"] if "clip" in d.lower() and (fp8_supported or "fp8" not in d.lower())] + + choices = pth_choices + safetensors_choices + safetensors_dir_choices + return choices if choices else [""] + + +def get_vae_choices(model_path): + """获取 VAE 模型可选项(.pth 或 .safetensors 文件,包含 vae/VAE/tae 关键字)""" + contents = scan_model_path_contents(model_path) + fp8_supported = is_fp8_supported_gpu() + + # 从 .pth 文件中筛选 + pth_choices = [f for f in contents["pth_files"] if any(kw in f.lower() for kw in ["vae", "tae"]) and (fp8_supported or "fp8" not in f.lower())] + + # 从 .safetensors 文件中筛选 + safetensors_choices = [f for f in contents["files"] if f.endswith(".safetensors") and any(kw in f.lower() for kw in ["vae", "tae"]) and (fp8_supported or "fp8" not in f.lower())] + + # 从包含 safetensors 的目录中筛选 + safetensors_dir_choices = [d for d in contents["safetensors_dirs"] if any(kw in d.lower() for kw in ["vae", "tae"]) and (fp8_supported or "fp8" not in d.lower())] + + choices = pth_choices + safetensors_choices + safetensors_dir_choices + return choices if choices else [""] + + +def detect_quant_scheme(model_name): + """根据模型名字自动检测量化精度 + - 如果模型名字包含 "int8" → "int8" + - 如果模型名字包含 "fp8" 且设备支持 → "fp8" + - 否则返回 None(表示不使用量化) + """ + if not model_name: + return None + name_lower = model_name.lower() + if "int8" in name_lower: + return "int8" + elif "fp8" in name_lower: + if is_fp8_supported_gpu(): + return "fp8" + else: + # 设备不支持fp8,返回None(使用默认精度) + return None + return None + + +def update_model_path_options(model_path, model_type="wan2.1"): + """当 model_path 或 model_type 改变时,更新所有模型路径选择器""" + dit_choices = get_dit_choices(model_path, model_type) + high_noise_choices = get_high_noise_choices(model_path) + low_noise_choices = get_low_noise_choices(model_path) + t5_choices = get_t5_choices(model_path) + clip_choices = get_clip_choices(model_path) + vae_choices = get_vae_choices(model_path) + + return ( + gr.update(choices=dit_choices, value=dit_choices[0] if dit_choices else ""), + gr.update(choices=high_noise_choices, value=high_noise_choices[0] if high_noise_choices else ""), + gr.update(choices=low_noise_choices, value=low_noise_choices[0] if low_noise_choices else ""), + gr.update(choices=t5_choices, value=t5_choices[0] if t5_choices else ""), + gr.update(choices=clip_choices, value=clip_choices[0] if clip_choices else ""), + gr.update(choices=vae_choices, value=vae_choices[0] if vae_choices else ""), + ) + + +def generate_random_seed(): + return random.randint(0, MAX_NUMPY_SEED) + + +def is_module_installed(module_name): + try: + spec = importlib.util.find_spec(module_name) + return spec is not None + except ModuleNotFoundError: + return False + + +def get_available_quant_ops(): + available_ops = [] + + vllm_installed = is_module_installed("vllm") + if vllm_installed: + available_ops.append(("vllm", True)) + else: + available_ops.append(("vllm", False)) + + sgl_installed = is_module_installed("sgl_kernel") + if sgl_installed: + available_ops.append(("sgl", True)) + else: + available_ops.append(("sgl", False)) + + q8f_installed = is_module_installed("q8_kernels") + if q8f_installed: + available_ops.append(("q8f", True)) + else: + available_ops.append(("q8f", False)) + + return available_ops + + +def get_available_attn_ops(): + available_ops = [] + + vllm_installed = is_module_installed("flash_attn") + if vllm_installed: + available_ops.append(("flash_attn2", True)) + else: + available_ops.append(("flash_attn2", False)) + + sgl_installed = is_module_installed("flash_attn_interface") + if sgl_installed: + available_ops.append(("flash_attn3", True)) + else: + available_ops.append(("flash_attn3", False)) + + sage_installed = is_module_installed("sageattention") + if sage_installed: + available_ops.append(("sage_attn2", True)) + else: + available_ops.append(("sage_attn2", False)) + + sage3_installed = is_module_installed("sageattn3") + if sage3_installed: + available_ops.append(("sage_attn3", True)) + else: + available_ops.append(("sage_attn3", False)) + + torch_installed = is_module_installed("torch") + if torch_installed: + available_ops.append(("torch_sdpa", True)) + else: + available_ops.append(("torch_sdpa", False)) + + return available_ops + + +def get_gpu_memory(gpu_idx=0): + if not torch.cuda.is_available(): + return 0 + try: + with torch.cuda.device(gpu_idx): + memory_info = torch.cuda.mem_get_info() + total_memory = memory_info[1] / (1024**3) # Convert bytes to GB + return total_memory + except Exception as e: + logger.warning(f"获取GPU内存失败: {e}") + return 0 + + +def get_cpu_memory(): + available_bytes = psutil.virtual_memory().available + return available_bytes / 1024**3 + + +def cleanup_memory(): + gc.collect() + + if torch.cuda.is_available(): + torch.cuda.empty_cache() + torch.cuda.synchronize() + + try: + import psutil + + if hasattr(psutil, "virtual_memory"): + if os.name == "posix": + try: + os.system("sync") + except: # noqa + pass + except: # noqa + pass + + +def generate_unique_filename(output_dir): + os.makedirs(output_dir, exist_ok=True) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + return os.path.join(output_dir, f"{timestamp}.mp4") + + +def is_fp8_supported_gpu(): + if not torch.cuda.is_available(): + return False + compute_capability = torch.cuda.get_device_capability(0) + major, minor = compute_capability + return (major == 8 and minor == 9) or (major >= 9) + + +def is_ada_architecture_gpu(): + if not torch.cuda.is_available(): + return False + try: + gpu_name = torch.cuda.get_device_name(0).upper() + ada_keywords = ["RTX 40", "RTX40", "4090", "4080", "4070", "4060"] + return any(keyword in gpu_name for keyword in ada_keywords) + except Exception as e: + logger.warning(f"Failed to get GPU name: {e}") + return False + + +def get_quantization_options(model_path): + """根据model_path动态获取量化选项""" + import os + + # 检查子目录 + subdirs = ["original", "fp8", "int8"] + has_subdirs = {subdir: os.path.exists(os.path.join(model_path, subdir)) for subdir in subdirs} + + # 检查根目录下的原始文件 + t5_bf16_exists = os.path.exists(os.path.join(model_path, "models_t5_umt5-xxl-enc-bf16.pth")) + clip_fp16_exists = os.path.exists(os.path.join(model_path, "models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth")) + + # 生成选项 + def get_choices(has_subdirs, original_type, fp8_type, int8_type, fallback_type, has_original_file=False): + choices = [] + if has_subdirs["original"]: + choices.append(original_type) + if has_subdirs["fp8"]: + choices.append(fp8_type) + if has_subdirs["int8"]: + choices.append(int8_type) + + # 如果没有子目录但有原始文件,添加原始类型 + if has_original_file: + if not choices or "original" not in choices: + choices.append(original_type) + + # 如果没有任何选项,使用默认值 + if not choices: + choices = [fallback_type] + + return choices, choices[0] + + # DIT选项 + dit_choices, dit_default = get_choices(has_subdirs, "bf16", "fp8", "int8", "bf16") + + # T5选项 - 检查是否有原始文件 + t5_choices, t5_default = get_choices(has_subdirs, "bf16", "fp8", "int8", "bf16", t5_bf16_exists) + + # CLIP选项 - 检查是否有原始文件 + clip_choices, clip_default = get_choices(has_subdirs, "fp16", "fp8", "int8", "fp16", clip_fp16_exists) + + return {"dit_choices": dit_choices, "dit_default": dit_default, "t5_choices": t5_choices, "t5_default": t5_default, "clip_choices": clip_choices, "clip_default": clip_default} + + +def determine_model_cls(model_type, dit_name, high_noise_name): + """根据模型类型和文件名确定 model_cls""" + # 确定要检查的文件名 + if model_type == "wan2.1": + check_name = dit_name.lower() if dit_name else "" + is_distill = "4step" in check_name + return "wan2.1_distill" if is_distill else "wan2.1" + else: + # wan2.2 + check_name = high_noise_name.lower() if high_noise_name else "" + is_distill = "4step" in check_name + return "wan2.2_moe_distill" if is_distill else "wan2.2_moe" + + +global_runner = None +current_config = None +cur_dit_path = None +cur_t5_path = None +cur_clip_path = None + +available_quant_ops = get_available_quant_ops() +quant_op_choices = [] +for op_name, is_installed in available_quant_ops: + status_text = "✅ 已安装" if is_installed else "❌ 未安装" + display_text = f"{op_name} ({status_text})" + quant_op_choices.append((op_name, display_text)) + +available_attn_ops = get_available_attn_ops() +# 优先级顺序 +attn_priority = ["sage_attn2", "flash_attn3", "flash_attn2", "torch_sdpa"] +# 按优先级排序,已安装的在前,未安装的在后 +attn_op_choices = [] +attn_op_dict = dict(available_attn_ops) + +# 先添加已安装的(按优先级) +for op_name in attn_priority: + if op_name in attn_op_dict and attn_op_dict[op_name]: + status_text = "✅ 已安装" + display_text = f"{op_name} ({status_text})" + attn_op_choices.append((op_name, display_text)) + +# 再添加未安装的(按优先级) +for op_name in attn_priority: + if op_name in attn_op_dict and not attn_op_dict[op_name]: + status_text = "❌ 未安装" + display_text = f"{op_name} ({status_text})" + attn_op_choices.append((op_name, display_text)) + +# 添加其他不在优先级列表中的算子(已安装的在前) +other_ops = [(op_name, is_installed) for op_name, is_installed in available_attn_ops if op_name not in attn_priority] +for op_name, is_installed in sorted(other_ops, key=lambda x: not x[1]): # 已安装的在前 + status_text = "✅ 已安装" if is_installed else "❌ 未安装" + display_text = f"{op_name} ({status_text})" + attn_op_choices.append((op_name, display_text)) + + +def run_inference( + prompt, + negative_prompt, + save_result_path, + infer_steps, + num_frames, + resolution, + seed, + sample_shift, + enable_cfg, + cfg_scale, + fps, + use_tiling_vae, + lazy_load, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + model_path_input, + model_type_input, + task_type_input, + dit_path_input, + high_noise_path_input, + low_noise_path_input, + t5_path_input, + clip_path_input, + vae_path_input, + image_path=None, +): + cleanup_memory() + + quant_op = quant_op.split("(")[0].strip() + attention_type = attention_type.split("(")[0].strip() + + global global_runner, current_config, model_path, model_cls + global cur_dit_path, cur_t5_path, cur_clip_path + + task = task_type_input + model_cls = determine_model_cls(model_type_input, dit_path_input, high_noise_path_input) + logger.info(f"自动确定 model_cls: {model_cls} (模型类型: {model_type_input})") + + if model_type_input == "wan2.1": + dit_quant_detected = detect_quant_scheme(dit_path_input) + else: + dit_quant_detected = detect_quant_scheme(high_noise_path_input) + t5_quant_detected = detect_quant_scheme(t5_path_input) + clip_quant_detected = detect_quant_scheme(clip_path_input) + logger.info(f"自动检测量化精度 - DIT: {dit_quant_detected}, T5: {t5_quant_detected}, CLIP: {clip_quant_detected}") + + if model_path_input and model_path_input.strip(): + model_path = model_path_input.strip() + + if os.path.exists(os.path.join(model_path, "config.json")): + with open(os.path.join(model_path, "config.json"), "r") as f: + model_config = json.load(f) + else: + model_config = {} + + save_result_path = generate_unique_filename(output_dir) + + is_dit_quant = dit_quant_detected != "bf16" + is_t5_quant = t5_quant_detected != "bf16" + is_clip_quant = clip_quant_detected != "fp16" + + dit_quantized_ckpt = None + dit_original_ckpt = None + high_noise_quantized_ckpt = None + low_noise_quantized_ckpt = None + high_noise_original_ckpt = None + low_noise_original_ckpt = None + + if is_dit_quant: + dit_quant_scheme = f"{dit_quant_detected}-{quant_op}" + if "wan2.1" in model_cls: + dit_quantized_ckpt = os.path.join(model_path, dit_path_input) + else: + high_noise_quantized_ckpt = os.path.join(model_path, high_noise_path_input) + low_noise_quantized_ckpt = os.path.join(model_path, low_noise_path_input) + else: + dit_quantized_ckpt = "Default" + if "wan2.1" in model_cls: + dit_original_ckpt = os.path.join(model_path, dit_path_input) + else: + high_noise_original_ckpt = os.path.join(model_path, high_noise_path_input) + low_noise_original_ckpt = os.path.join(model_path, low_noise_path_input) + + # 使用前端选择的 T5 路径 + if is_t5_quant: + t5_quantized_ckpt = os.path.join(model_path, t5_path_input) + t5_quant_scheme = f"{t5_quant_detected}-{quant_op}" + t5_original_ckpt = None + else: + t5_quantized_ckpt = None + t5_quant_scheme = None + t5_original_ckpt = os.path.join(model_path, t5_path_input) + + # 使用前端选择的 CLIP 路径 + if is_clip_quant: + clip_quantized_ckpt = os.path.join(model_path, clip_path_input) + clip_quant_scheme = f"{clip_quant_detected}-{quant_op}" + clip_original_ckpt = None + else: + clip_quantized_ckpt = None + clip_quant_scheme = None + clip_original_ckpt = os.path.join(model_path, clip_path_input) + + if model_type_input == "wan2.1": + current_dit_path = dit_path_input + else: + current_dit_path = f"{high_noise_path_input}|{low_noise_path_input}" if high_noise_path_input and low_noise_path_input else None + + current_t5_path = t5_path_input + current_clip_path = clip_path_input + + needs_reinit = ( + lazy_load + or unload_modules + or global_runner is None + or current_config is None + or cur_dit_path is None + or cur_dit_path != current_dit_path + or cur_t5_path is None + or cur_t5_path != current_t5_path + or cur_clip_path is None + or cur_clip_path != current_clip_path + ) + + if cfg_scale == 1: + enable_cfg = False + else: + enable_cfg = True + + vae_name_lower = vae_path_input.lower() if vae_path_input else "" + use_tae = "tae" in vae_name_lower or "lighttae" in vae_name_lower + use_lightvae = "lightvae" in vae_name_lower + need_scaled = "lighttae" in vae_name_lower + + logger.info(f"VAE 配置 - use_tae: {use_tae}, use_lightvae: {use_lightvae}, need_scaled: {need_scaled} (VAE: {vae_path_input})") + + config_graio = { + "infer_steps": infer_steps, + "target_video_length": num_frames, + "target_width": int(resolution.split("x")[0]), + "target_height": int(resolution.split("x")[1]), + "self_attn_1_type": attention_type, + "cross_attn_1_type": attention_type, + "cross_attn_2_type": attention_type, + "enable_cfg": enable_cfg, + "sample_guide_scale": cfg_scale, + "sample_shift": sample_shift, + "fps": fps, + "feature_caching": "NoCaching", + "do_mm_calib": False, + "parallel_attn_type": None, + "parallel_vae": False, + "max_area": False, + "vae_stride": (4, 8, 8), + "patch_size": (1, 2, 2), + "lora_path": None, + "strength_model": 1.0, + "use_prompt_enhancer": False, + "text_len": 512, + "denoising_step_list": [1000, 750, 500, 250], + "cpu_offload": True if "wan2.2" in model_cls else cpu_offload, + "offload_granularity": "phase" if "wan2.2" in model_cls else offload_granularity, + "t5_cpu_offload": t5_cpu_offload, + "clip_cpu_offload": clip_cpu_offload, + "vae_cpu_offload": vae_cpu_offload, + "dit_quantized": is_dit_quant, + "dit_quant_scheme": dit_quant_scheme, + "dit_quantized_ckpt": dit_quantized_ckpt, + "dit_original_ckpt": dit_original_ckpt, + "high_noise_quantized_ckpt": high_noise_quantized_ckpt, + "low_noise_quantized_ckpt": low_noise_quantized_ckpt, + "high_noise_original_ckpt": high_noise_original_ckpt, + "low_noise_original_ckpt": low_noise_original_ckpt, + "t5_original_ckpt": t5_original_ckpt, + "t5_quantized": is_t5_quant, + "t5_quantized_ckpt": t5_quantized_ckpt, + "t5_quant_scheme": t5_quant_scheme, + "clip_original_ckpt": clip_original_ckpt, + "clip_quantized": is_clip_quant, + "clip_quantized_ckpt": clip_quantized_ckpt, + "clip_quant_scheme": clip_quant_scheme, + "vae_path": os.path.join(model_path, vae_path_input), + "use_tiling_vae": use_tiling_vae, + "use_tae": use_tae, + "use_lightvae": use_lightvae, + "need_scaled": need_scaled, + "lazy_load": lazy_load, + "rope_chunk": rope_chunk, + "rope_chunk_size": rope_chunk_size, + "clean_cuda_cache": clean_cuda_cache, + "unload_modules": unload_modules, + "seq_parallel": False, + "warm_up_cpu_buffers": False, + "boundary_step_index": 2, + "boundary": 0.900, + "use_image_encoder": False if "wan2.2" in model_cls else True, + "rope_type": "flashinfer" if apply_rope_with_cos_sin_cache_inplace else "torch", + } + + args = argparse.Namespace( + model_cls=model_cls, + seed=seed, + task=task, + model_path=model_path, + prompt_enhancer=None, + prompt=prompt, + negative_prompt=negative_prompt, + image_path=image_path, + save_result_path=save_result_path, + return_result_tensor=False, + ) + + config = get_default_config() + config.update({k: v for k, v in vars(args).items()}) + config.update(model_config) + config.update(config_graio) + + logger.info(f"使用模型: {model_path}") + logger.info(f"推理配置:\n{json.dumps(config, indent=4, ensure_ascii=False)}") + + # Initialize or reuse the runner + runner = global_runner + if needs_reinit: + if runner is not None: + del runner + torch.cuda.empty_cache() + gc.collect() + + from lightx2v.infer import init_runner # noqa + + runner = init_runner(config) + input_info = set_input_info(args) + + current_config = config + cur_dit_path = current_dit_path + cur_t5_path = current_t5_path + cur_clip_path = current_clip_path + + if not lazy_load: + global_runner = runner + else: + runner.config = config + + runner.run_pipeline(input_info) + cleanup_memory() + + return save_result_path + + +def handle_lazy_load_change(lazy_load_enabled): + """Handle lazy_load checkbox change to automatically enable unload_modules""" + return gr.update(value=lazy_load_enabled) + + +def auto_configure(resolution): + """根据机器配置和分辨率自动设置推理选项""" + default_config = { + "lazy_load_val": False, + "rope_chunk_val": False, + "rope_chunk_size_val": 100, + "clean_cuda_cache_val": False, + "cpu_offload_val": False, + "offload_granularity_val": "block", + "t5_cpu_offload_val": False, + "clip_cpu_offload_val": False, + "vae_cpu_offload_val": False, + "unload_modules_val": False, + "attention_type_val": attn_op_choices[0][1], + "quant_op_val": quant_op_choices[0][1], + "use_tiling_vae_val": False, + } + + gpu_memory = round(get_gpu_memory()) + cpu_memory = round(get_cpu_memory()) + + attn_priority = ["sage_attn3", "sage_attn2", "flash_attn3", "flash_attn2", "torch_sdpa"] + + if is_ada_architecture_gpu(): + quant_op_priority = ["q8f", "vllm", "sgl"] + else: + quant_op_priority = ["vllm", "sgl", "q8f"] + + for op in attn_priority: + if dict(available_attn_ops).get(op): + default_config["attention_type_val"] = dict(attn_op_choices)[op] + break + + for op in quant_op_priority: + if dict(available_quant_ops).get(op): + default_config["quant_op_val"] = dict(quant_op_choices)[op] + break + + if resolution in [ + "1280x720", + "720x1280", + "1280x544", + "544x1280", + "1104x832", + "832x1104", + "960x960", + ]: + res = "720p" + elif resolution in [ + "960x544", + "544x960", + ]: + res = "540p" + else: + res = "480p" + + if res == "720p": + gpu_rules = [ + (80, {}), + (40, {"cpu_offload_val": False, "t5_cpu_offload_val": True, "vae_cpu_offload_val": True, "clip_cpu_offload_val": True}), + (32, {"cpu_offload_val": True, "t5_cpu_offload_val": False, "vae_cpu_offload_val": False, "clip_cpu_offload_val": False}), + ( + 24, + { + "cpu_offload_val": True, + "use_tiling_vae_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + }, + ), + ( + 16, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + "rope_chunk_val": True, + "rope_chunk_size_val": 100, + }, + ), + ( + 8, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + "rope_chunk_val": True, + "rope_chunk_size_val": 100, + "clean_cuda_cache_val": True, + }, + ), + ] + + else: + gpu_rules = [ + (80, {}), + (40, {"cpu_offload_val": False, "t5_cpu_offload_val": True, "vae_cpu_offload_val": True, "clip_cpu_offload_val": True}), + (32, {"cpu_offload_val": True, "t5_cpu_offload_val": False, "vae_cpu_offload_val": False, "clip_cpu_offload_val": False}), + ( + 24, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + }, + ), + ( + 16, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + }, + ), + ( + 8, + { + "cpu_offload_val": True, + "t5_cpu_offload_val": True, + "vae_cpu_offload_val": True, + "clip_cpu_offload_val": True, + "use_tiling_vae_val": True, + "offload_granularity_val": "phase", + }, + ), + ] + + cpu_rules = [ + (128, {}), + (64, {}), + (32, {"unload_modules_val": True}), + ( + 16, + { + "lazy_load_val": True, + "unload_modules_val": True, + }, + ), + ] + + for threshold, updates in gpu_rules: + if gpu_memory >= threshold: + default_config.update(updates) + break + + for threshold, updates in cpu_rules: + if cpu_memory >= threshold: + default_config.update(updates) + break + + return ( + gr.update(value=default_config["lazy_load_val"]), + gr.update(value=default_config["rope_chunk_val"]), + gr.update(value=default_config["rope_chunk_size_val"]), + gr.update(value=default_config["clean_cuda_cache_val"]), + gr.update(value=default_config["cpu_offload_val"]), + gr.update(value=default_config["offload_granularity_val"]), + gr.update(value=default_config["t5_cpu_offload_val"]), + gr.update(value=default_config["clip_cpu_offload_val"]), + gr.update(value=default_config["vae_cpu_offload_val"]), + gr.update(value=default_config["unload_modules_val"]), + gr.update(value=default_config["attention_type_val"]), + gr.update(value=default_config["quant_op_val"]), + gr.update(value=default_config["use_tiling_vae_val"]), + ) + + +css = """ + .main-content { max-width: 1600px; margin: auto; padding: 20px; } + .warning { color: #ff6b6b; font-weight: bold; } + + /* 模型配置区域样式 */ + .model-config { + margin-bottom: 20px !important; + border: 1px solid #e0e0e0; + border-radius: 12px; + padding: 15px; + background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); + } + + /* 输入参数区域样式 */ + .input-params { + margin-bottom: 20px !important; + border: 1px solid #e0e0e0; + border-radius: 12px; + padding: 15px; + background: linear-gradient(135deg, #fff5f5 0%, #ffeef0 100%); + } + + /* 输出视频区域样式 */ + .output-video { + border: 1px solid #e0e0e0; + border-radius: 12px; + padding: 20px; + background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%); + min-height: 400px; + } + + /* 生成按钮样式 */ + .generate-btn { + width: 100%; + margin-top: 20px; + padding: 15px 30px !important; + font-size: 18px !important; + font-weight: bold !important; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important; + border: none !important; + border-radius: 10px !important; + box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4) !important; + transition: all 0.3s ease !important; + } + .generate-btn:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6) !important; + } + + /* Accordion 标题样式 */ + .model-config .gr-accordion-header, + .input-params .gr-accordion-header, + .output-video .gr-accordion-header { + font-size: 20px !important; + font-weight: bold !important; + padding: 15px !important; + } + + /* 优化间距 */ + .gr-row { + margin-bottom: 15px; + } + + /* 视频播放器样式 */ + .output-video video { + border-radius: 10px; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); + } + """ + + +def main(): + with gr.Blocks(title="Lightx2v (轻量级视频推理和生成引擎)") as demo: + gr.Markdown(f"# 🎬 LightX2V 视频生成器") + gr.HTML(f"") + # 主布局:左右分栏 + with gr.Row(): + # 左侧:配置和输入区域 + with gr.Column(scale=5): + # 模型配置区域 + with gr.Accordion("🗂️ 模型配置", open=True, elem_classes=["model-config"]): + # FP8 支持提示 + if not is_fp8_supported_gpu(): + gr.Markdown("⚠️ **您的设备不支持fp8推理**,已自动隐藏包含fp8的模型选项。") + + # 隐藏的状态组件 + model_path_input = gr.Textbox(value=model_path, visible=False) + + # 模型类型 + 任务类型 + with gr.Row(): + model_type_input = gr.Radio( + label="模型类型", + choices=["wan2.1", "wan2.2"], + value="wan2.1", + info="wan2.2 需要分别指定高噪模型和低噪模型", + ) + task_type_input = gr.Radio( + label="任务类型", + choices=["i2v", "t2v"], + value="i2v", + info="i2v: 图生视频, t2v: 文生视频", + ) + + # wan2.1:Diffusion模型(单独一行) + with gr.Row() as wan21_row: + dit_path_input = gr.Dropdown( + label="🎨 Diffusion模型", + choices=get_dit_choices(model_path, "wan2.1"), + value=get_dit_choices(model_path, "wan2.1")[0] if get_dit_choices(model_path, "wan2.1") else "", + allow_custom_value=True, + visible=True, + ) + + # wan2.2 专用:高噪模型 + 低噪模型(默认隐藏) + with gr.Row(visible=False) as wan22_row: + high_noise_path_input = gr.Dropdown( + label="🔊 高噪模型", + choices=get_high_noise_choices(model_path), + value=get_high_noise_choices(model_path)[0] if get_high_noise_choices(model_path) else "", + allow_custom_value=True, + ) + low_noise_path_input = gr.Dropdown( + label="🔇 低噪模型", + choices=get_low_noise_choices(model_path), + value=get_low_noise_choices(model_path)[0] if get_low_noise_choices(model_path) else "", + allow_custom_value=True, + ) + + # 文本编码器(单独一行) + with gr.Row(): + t5_path_input = gr.Dropdown( + label="📝 文本编码器", + choices=get_t5_choices(model_path), + value=get_t5_choices(model_path)[0] if get_t5_choices(model_path) else "", + allow_custom_value=True, + ) + + # 图像编码器 + VAE解码器 + with gr.Row(): + clip_path_input = gr.Dropdown( + label="🖼️ 图像编码器", + choices=get_clip_choices(model_path), + value=get_clip_choices(model_path)[0] if get_clip_choices(model_path) else "", + allow_custom_value=True, + ) + vae_path_input = gr.Dropdown( + label="🎞️ VAE解码器", + choices=get_vae_choices(model_path), + value=get_vae_choices(model_path)[0] if get_vae_choices(model_path) else "", + allow_custom_value=True, + ) + + # 注意力算子和量化矩阵乘法算子 + with gr.Row(): + attention_type = gr.Dropdown( + label="⚡ 注意力算子", + choices=[op[1] for op in attn_op_choices], + value=attn_op_choices[0][1] if attn_op_choices else "", + info="使用适当的注意力算子加速推理", + ) + quant_op = gr.Dropdown( + label="量化矩阵乘法算子", + choices=[op[1] for op in quant_op_choices], + value=quant_op_choices[0][1], + info="选择量化矩阵乘法算子以加速推理", + interactive=True, + ) + + # 判断模型是否是 distill 版本 + def is_distill_model(model_type, dit_path, high_noise_path): + """根据模型类型和路径判断是否是 distill 版本""" + if model_type == "wan2.1": + check_name = dit_path.lower() if dit_path else "" + else: + check_name = high_noise_path.lower() if high_noise_path else "" + return "4step" in check_name + + # 模型类型切换事件 + def on_model_type_change(model_type, model_path_val): + if model_type == "wan2.2": + return gr.update(visible=False), gr.update(visible=True), gr.update() + else: + # 更新 wan2.1 的 Diffusion 模型选项 + dit_choices = get_dit_choices(model_path_val, "wan2.1") + return ( + gr.update(visible=True), + gr.update(visible=False), + gr.update(choices=dit_choices, value=dit_choices[0] if dit_choices else ""), + ) + + model_type_input.change( + fn=on_model_type_change, + inputs=[model_type_input, model_path_input], + outputs=[wan21_row, wan22_row, dit_path_input], + ) + + # 输入参数区域 + with gr.Accordion("📥 输入参数", open=True, elem_classes=["input-params"]): + # 图片输入(i2v 时显示) + with gr.Row(visible=True) as image_input_row: + image_path = gr.Image( + label="输入图像", + type="filepath", + height=300, + interactive=True, + ) + + # 任务类型切换事件 + def on_task_type_change(task_type): + return gr.update(visible=(task_type == "i2v")) + + task_type_input.change( + fn=on_task_type_change, + inputs=[task_type_input], + outputs=[image_input_row], + ) + + with gr.Row(): + with gr.Column(): + prompt = gr.Textbox( + label="提示词", + lines=3, + placeholder="描述视频内容...", + max_lines=5, + ) + with gr.Column(): + negative_prompt = gr.Textbox( + label="负向提示词", + lines=3, + placeholder="不希望出现在视频中的内容...", + max_lines=5, + value="镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + ) + with gr.Column(): + resolution = gr.Dropdown( + choices=[ + # 720p + ("1280x720 (16:9, 720p)", "1280x720"), + ("720x1280 (9:16, 720p)", "720x1280"), + ("1280x544 (21:9, 720p)", "1280x544"), + ("544x1280 (9:21, 720p)", "544x1280"), + ("1104x832 (4:3, 720p)", "1104x832"), + ("832x1104 (3:4, 720p)", "832x1104"), + ("960x960 (1:1, 720p)", "960x960"), + # 480p + ("960x544 (16:9, 540p)", "960x544"), + ("544x960 (9:16, 540p)", "544x960"), + ("832x480 (16:9, 480p)", "832x480"), + ("480x832 (9:16, 480p)", "480x832"), + ("832x624 (4:3, 480p)", "832x624"), + ("624x832 (3:4, 480p)", "624x832"), + ("720x720 (1:1, 480p)", "720x720"), + ("512x512 (1:1, 480p)", "512x512"), + ], + value="832x480", + label="最大分辨率", + ) + + with gr.Column(scale=9): + seed = gr.Slider( + label="随机种子", + minimum=0, + maximum=MAX_NUMPY_SEED, + step=1, + value=generate_random_seed(), + ) + with gr.Column(): + default_dit = get_dit_choices(model_path, "wan2.1")[0] if get_dit_choices(model_path, "wan2.1") else "" + default_high_noise = get_high_noise_choices(model_path)[0] if get_high_noise_choices(model_path) else "" + default_is_distill = is_distill_model("wan2.1", default_dit, default_high_noise) + + if default_is_distill: + infer_steps = gr.Slider( + label="推理步数", + minimum=1, + maximum=100, + step=1, + value=4, + info="蒸馏模型推理步数默认为4。", + ) + else: + infer_steps = gr.Slider( + label="推理步数", + minimum=1, + maximum=100, + step=1, + value=40, + info="视频生成的推理步数。增加步数可能提高质量但降低速度。", + ) + + # 当模型路径改变时,动态更新推理步数 + def update_infer_steps(model_type, dit_path, high_noise_path): + is_distill = is_distill_model(model_type, dit_path, high_noise_path) + if is_distill: + return gr.update(minimum=1, maximum=100, value=4, interactive=True) + else: + return gr.update(minimum=1, maximum=100, value=40, interactive=True) + + # 监听模型路径变化 + dit_path_input.change( + fn=lambda mt, dp, hnp: update_infer_steps(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[infer_steps], + ) + high_noise_path_input.change( + fn=lambda mt, dp, hnp: update_infer_steps(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[infer_steps], + ) + model_type_input.change( + fn=lambda mt, dp, hnp: update_infer_steps(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[infer_steps], + ) + + # 根据模型类别设置默认CFG + # CFG缩放因子:distill 时默认为 1,否则默认为 5 + default_cfg_scale = 1 if default_is_distill else 5 + # enable_cfg 不暴露到前端,根据 cfg_scale 自动设置 + # 如果 cfg_scale == 1,则 enable_cfg = False,否则 enable_cfg = True + default_enable_cfg = False if default_cfg_scale == 1 else True + enable_cfg = gr.Checkbox( + label="启用无分类器引导", + value=default_enable_cfg, + visible=False, # 隐藏,不暴露到前端 + ) + + with gr.Row(): + sample_shift = gr.Slider( + label="分布偏移", + value=5, + minimum=0, + maximum=10, + step=1, + info="控制样本分布偏移的程度。值越大表示偏移越明显。", + ) + cfg_scale = gr.Slider( + label="CFG缩放因子", + minimum=1, + maximum=10, + step=1, + value=default_cfg_scale, + info="控制提示词的影响强度。值越高,提示词的影响越大。当值为1时,自动禁用CFG。", + ) + + # 根据 cfg_scale 更新 enable_cfg + def update_enable_cfg(cfg_scale_val): + """根据 cfg_scale 的值自动设置 enable_cfg""" + if cfg_scale_val == 1: + return gr.update(value=False) + else: + return gr.update(value=True) + + # 当模型路径改变时,动态更新 CFG 缩放因子和 enable_cfg + def update_cfg_scale(model_type, dit_path, high_noise_path): + is_distill = is_distill_model(model_type, dit_path, high_noise_path) + if is_distill: + new_cfg_scale = 1 + else: + new_cfg_scale = 5 + new_enable_cfg = False if new_cfg_scale == 1 else True + return gr.update(value=new_cfg_scale), gr.update(value=new_enable_cfg) + + dit_path_input.change( + fn=lambda mt, dp, hnp: update_cfg_scale(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[cfg_scale, enable_cfg], + ) + high_noise_path_input.change( + fn=lambda mt, dp, hnp: update_cfg_scale(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[cfg_scale, enable_cfg], + ) + model_type_input.change( + fn=lambda mt, dp, hnp: update_cfg_scale(mt, dp, hnp), + inputs=[model_type_input, dit_path_input, high_noise_path_input], + outputs=[cfg_scale, enable_cfg], + ) + + cfg_scale.change( + fn=update_enable_cfg, + inputs=[cfg_scale], + outputs=[enable_cfg], + ) + + with gr.Row(): + fps = gr.Slider( + label="每秒帧数(FPS)", + minimum=8, + maximum=30, + step=1, + value=16, + info="视频的每秒帧数。较高的FPS会产生更流畅的视频。", + ) + num_frames = gr.Slider( + label="总帧数", + minimum=16, + maximum=120, + step=1, + value=81, + info="视频中的总帧数。更多帧数会产生更长的视频。", + ) + + save_result_path = gr.Textbox( + label="输出视频路径", + value=generate_unique_filename(output_dir), + info="必须包含.mp4扩展名。如果留空或使用默认值,将自动生成唯一文件名。", + visible=False, # 隐藏输出路径,自动生成 + ) + + with gr.Column(scale=4): + with gr.Accordion("📤 生成的视频", open=True, elem_classes=["output-video"]): + output_video = gr.Video( + label="", + height=600, + autoplay=True, + show_label=False, + ) + + infer_btn = gr.Button("🎬 生成视频", variant="primary", size="lg", elem_classes=["generate-btn"]) + + rope_chunk = gr.Checkbox(label="分块旋转位置编码", value=False, visible=False) + rope_chunk_size = gr.Slider(label="旋转编码块大小", value=100, minimum=100, maximum=10000, step=100, visible=False) + unload_modules = gr.Checkbox(label="卸载模块", value=False, visible=False) + clean_cuda_cache = gr.Checkbox(label="清理CUDA内存缓存", value=False, visible=False) + cpu_offload = gr.Checkbox(label="CPU卸载", value=False, visible=False) + lazy_load = gr.Checkbox(label="启用延迟加载", value=False, visible=False) + offload_granularity = gr.Dropdown(label="Dit卸载粒度", choices=["block", "phase"], value="phase", visible=False) + t5_cpu_offload = gr.Checkbox(label="T5 CPU卸载", value=False, visible=False) + clip_cpu_offload = gr.Checkbox(label="CLIP CPU卸载", value=False, visible=False) + vae_cpu_offload = gr.Checkbox(label="VAE CPU卸载", value=False, visible=False) + use_tiling_vae = gr.Checkbox(label="VAE分块推理", value=False, visible=False) + + resolution.change( + fn=auto_configure, + inputs=[resolution], + outputs=[ + lazy_load, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + use_tiling_vae, + ], + ) + + demo.load( + fn=lambda res: auto_configure(res), + inputs=[resolution], + outputs=[ + lazy_load, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + use_tiling_vae, + ], + ) + + infer_btn.click( + fn=run_inference, + inputs=[ + prompt, + negative_prompt, + save_result_path, + infer_steps, + num_frames, + resolution, + seed, + sample_shift, + enable_cfg, + cfg_scale, + fps, + use_tiling_vae, + lazy_load, + cpu_offload, + offload_granularity, + t5_cpu_offload, + clip_cpu_offload, + vae_cpu_offload, + unload_modules, + attention_type, + quant_op, + rope_chunk, + rope_chunk_size, + clean_cuda_cache, + model_path_input, + model_type_input, + task_type_input, + dit_path_input, + high_noise_path_input, + low_noise_path_input, + t5_path_input, + clip_path_input, + vae_path_input, + image_path, + ], + outputs=output_video, + ) + + demo.launch(share=True, server_port=args.server_port, server_name=args.server_name, inbrowser=True, allowed_paths=[output_dir]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="轻量级视频生成") + parser.add_argument("--model_path", type=str, required=True, help="模型文件夹路径") + parser.add_argument("--server_port", type=int, default=7862, help="服务器端口") + parser.add_argument("--server_name", type=str, default="0.0.0.0", help="服务器IP") + parser.add_argument("--output_dir", type=str, default="./outputs", help="输出视频保存目录") + args = parser.parse_args() + + global model_path, model_cls, output_dir + model_path = args.model_path + model_cls = "wan2.1" + output_dir = args.output_dir + + main() diff --git a/app/run_gradio.sh b/app/run_gradio.sh new file mode 100644 index 0000000..f5dbcc5 --- /dev/null +++ b/app/run_gradio.sh @@ -0,0 +1,181 @@ +#!/bin/bash + +# Lightx2v Gradio Demo Startup Script +# Supports both Image-to-Video (i2v) and Text-to-Video (t2v) modes + +# ==================== Configuration Area ==================== +# ⚠️ Important: Please modify the following paths according to your actual environment + +# 🚨 Storage Performance Tips 🚨 +# 💾 Strongly recommend storing model files on SSD solid-state drives! +# 📈 SSD can significantly improve model loading speed and inference performance +# 🐌 Using mechanical hard drives (HDD) may cause slow model loading and affect overall experience + + +# Lightx2v project root directory path +# Example: /home/user/lightx2v or /data/video_gen/lightx2v +lightx2v_path=/data/video_gen/lightx2v_debug/LightX2V + +# Model path configuration +# Example: /path/to/Wan2.1-I2V-14B-720P-Lightx2v +model_path=/models/ + +# Server configuration +server_name="0.0.0.0" +server_port=8033 + +# Output directory configuration +output_dir="./outputs" + +# GPU configuration +gpu_id=0 + +# ==================== Environment Variables Setup ==================== +export CUDA_VISIBLE_DEVICES=$gpu_id +export CUDA_LAUNCH_BLOCKING=1 +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH +export PROFILING_DEBUG_LEVEL=2 +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +# ==================== Parameter Parsing ==================== +# Default interface language +lang="zh" + +# 解析命令行参数 +while [[ $# -gt 0 ]]; do + case $1 in + --lang) + lang="$2" + shift 2 + ;; + --port) + server_port="$2" + shift 2 + ;; + --gpu) + gpu_id="$2" + export CUDA_VISIBLE_DEVICES=$gpu_id + shift 2 + ;; + --output_dir) + output_dir="$2" + shift 2 + ;; + --model_path) + model_path="$2" + shift 2 + ;; + --help) + echo "🎬 Lightx2v Gradio Demo Startup Script" + echo "==========================================" + echo "Usage: $0 [options]" + echo "" + echo "📋 Available options:" + echo " --lang zh|en Interface language (default: zh)" + echo " zh: Chinese interface" + echo " en: English interface" + echo " --port PORT Server port (default: 8032)" + echo " --gpu GPU_ID GPU device ID (default: 0)" + echo " --model_path PATH Model path (default: configured in script)" + echo " --output_dir DIR Output video save directory (default: ./outputs)" + echo " --help Show this help message" + echo "" + echo "📝 Notes:" + echo " - Task type (i2v/t2v) and model type are selected in the web UI" + echo " - Model class is auto-detected based on selected diffusion model" + echo " - Edit script to configure model paths before first use" + echo " - Ensure required Python dependencies are installed" + echo " - Recommended to use GPU with 8GB+ VRAM" + echo " - 🚨 Strongly recommend storing models on SSD for better performance" + exit 0 + ;; + *) + echo "Unknown parameter: $1" + echo "Use --help to see help information" + exit 1 + ;; + esac +done + +# ==================== Parameter Validation ==================== +if [[ "$lang" != "zh" && "$lang" != "en" ]]; then + echo "Error: Language must be 'zh' or 'en'" + exit 1 +fi + +# Check if model path exists +if [[ ! -d "$model_path" ]]; then + echo "❌ Error: Model path does not exist" + echo "📁 Path: $model_path" + echo "🔧 Solutions:" + echo " 1. Check model path configuration in script" + echo " 2. Ensure model files are properly downloaded" + echo " 3. Verify path permissions are correct" + echo " 4. 💾 Recommend storing models on SSD for faster loading" + exit 1 +fi + +# Select demo file based on language +if [[ "$lang" == "zh" ]]; then + demo_file="gradio_demo_zh.py" + echo "🌏 Using Chinese interface" +else + demo_file="gradio_demo.py" + echo "🌏 Using English interface" +fi + +# Check if demo file exists +if [[ ! -f "$demo_file" ]]; then + echo "❌ Error: Demo file does not exist" + echo "📄 File: $demo_file" + echo "🔧 Solutions:" + echo " 1. Ensure script is run in the correct directory" + echo " 2. Check if file has been renamed or moved" + echo " 3. Re-clone or download project files" + exit 1 +fi + +# ==================== System Information Display ==================== +echo "==========================================" +echo "🚀 Lightx2v Gradio Demo Starting..." +echo "==========================================" +echo "📁 Project path: $lightx2v_path" +echo "🤖 Model path: $model_path" +echo "🌏 Interface language: $lang" +echo "🖥️ GPU device: $gpu_id" +echo "🌐 Server address: $server_name:$server_port" +echo "📁 Output directory: $output_dir" +echo "📝 Note: Task type and model class are selected in web UI" +echo "==========================================" + +# Display system resource information +echo "💻 System resource information:" +free -h | grep -E "Mem|Swap" +echo "" + +# Display GPU information +if command -v nvidia-smi &> /dev/null; then + echo "🎮 GPU information:" + nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader,nounits | head -1 + echo "" +fi + +# ==================== Start Demo ==================== +echo "🎬 Starting Gradio demo..." +echo "📱 Please access in browser: http://$server_name:$server_port" +echo "⏹️ Press Ctrl+C to stop service" +echo "🔄 First startup may take several minutes to load resources..." +echo "==========================================" + +# Start Python demo +python $demo_file \ + --model_path "$model_path" \ + --server_name "$server_name" \ + --server_port "$server_port" \ + --output_dir "$output_dir" + +# Display final system resource usage +echo "" +echo "==========================================" +echo "📊 Final system resource usage:" +free -h | grep -E "Mem|Swap" diff --git a/app/run_gradio_win.bat b/app/run_gradio_win.bat new file mode 100644 index 0000000..7ea43cd --- /dev/null +++ b/app/run_gradio_win.bat @@ -0,0 +1,196 @@ +@echo off +chcp 65001 >nul +echo 🎬 LightX2V Gradio Windows Startup Script +echo ========================================== + +REM ==================== Configuration Area ==================== +REM ⚠️ Important: Please modify the following paths according to your actual environment + +REM 🚨 Storage Performance Tips 🚨 +REM 💾 Strongly recommend storing model files on SSD solid-state drives! +REM 📈 SSD can significantly improve model loading speed and inference performance +REM 🐌 Using mechanical hard drives (HDD) may cause slow model loading and affect overall experience + +REM LightX2V project root directory path +REM Example: D:\LightX2V +set lightx2v_path=/path/to/LightX2V + +REM Model path configuration +REM Model root directory path +REM Example: D:\models\LightX2V +set model_path=/path/to/LightX2V + +REM Server configuration +set server_name=127.0.0.1 +set server_port=8032 + +REM Output directory configuration +set output_dir=./outputs + +REM GPU configuration +set gpu_id=0 + +REM ==================== Environment Variables Setup ==================== +set CUDA_VISIBLE_DEVICES=%gpu_id% +set PYTHONPATH=%lightx2v_path%;%PYTHONPATH% +set PROFILING_DEBUG_LEVEL=2 +set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +REM ==================== Parameter Parsing ==================== +REM Default interface language +set lang=zh + +REM Parse command line arguments +:parse_args +if "%1"=="" goto :end_parse +if "%1"=="--lang" ( + set lang=%2 + shift + shift + goto :parse_args +) +if "%1"=="--port" ( + set server_port=%2 + shift + shift + goto :parse_args +) +if "%1"=="--gpu" ( + set gpu_id=%2 + set CUDA_VISIBLE_DEVICES=%gpu_id% + shift + shift + goto :parse_args +) +if "%1"=="--output_dir" ( + set output_dir=%2 + shift + shift + goto :parse_args +) +if "%1"=="--help" ( + echo 🎬 LightX2V Gradio Windows Startup Script + echo ========================================== + echo Usage: %0 [options] + echo. + echo 📋 Available options: + echo --lang zh^|en Interface language (default: zh) + echo zh: Chinese interface + echo en: English interface + echo --port PORT Server port (default: 8032) + echo --gpu GPU_ID GPU device ID (default: 0) + echo --output_dir OUTPUT_DIR + echo Output video save directory (default: ./outputs) + echo --help Show this help message + echo. + echo 🚀 Usage examples: + echo %0 # Default startup + echo %0 --lang zh --port 8032 # Start with specified parameters + echo %0 --lang en --port 7860 # English interface + echo %0 --gpu 1 --port 8032 # Use GPU 1 + echo %0 --output_dir ./custom_output # Use custom output directory + echo. + echo 📝 Notes: + echo - Edit script to configure model path before first use + echo - Ensure required Python dependencies are installed + echo - Recommended to use GPU with 8GB+ VRAM + echo - 🚨 Strongly recommend storing models on SSD for better performance + pause + exit /b 0 +) +echo Unknown parameter: %1 +echo Use --help to see help information +pause +exit /b 1 + +:end_parse + +REM ==================== Parameter Validation ==================== +if "%lang%"=="zh" goto :valid_lang +if "%lang%"=="en" goto :valid_lang +echo Error: Language must be 'zh' or 'en' +pause +exit /b 1 + +:valid_lang + +REM Check if model path exists +if not exist "%model_path%" ( + echo ❌ Error: Model path does not exist + echo 📁 Path: %model_path% + echo 🔧 Solutions: + echo 1. Check model path configuration in script + echo 2. Ensure model files are properly downloaded + echo 3. Verify path permissions are correct + echo 4. 💾 Recommend storing models on SSD for faster loading + pause + exit /b 1 +) + +REM Select demo file based on language +if "%lang%"=="zh" ( + set demo_file=gradio_demo_zh.py + echo 🌏 Using Chinese interface +) else ( + set demo_file=gradio_demo.py + echo 🌏 Using English interface +) + +REM Check if demo file exists +if not exist "%demo_file%" ( + echo ❌ Error: Demo file does not exist + echo 📄 File: %demo_file% + echo 🔧 Solutions: + echo 1. Ensure script is run in the correct directory + echo 2. Check if file has been renamed or moved + echo 3. Re-clone or download project files + pause + exit /b 1 +) + +REM ==================== System Information Display ==================== +echo ========================================== +echo 🚀 LightX2V Gradio Starting... +echo ========================================== +echo 📁 Project path: %lightx2v_path% +echo 🤖 Model path: %model_path% +echo 🌏 Interface language: %lang% +echo 🖥️ GPU device: %gpu_id% +echo 🌐 Server address: %server_name%:%server_port% +echo 📁 Output directory: %output_dir% +echo ========================================== + +REM Display system resource information +echo 💻 System resource information: +wmic OS get TotalVisibleMemorySize,FreePhysicalMemory /format:table + +REM Display GPU information +nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader,nounits 2>nul +if errorlevel 1 ( + echo 🎮 GPU information: Unable to get GPU info +) else ( + echo 🎮 GPU information: + nvidia-smi --query-gpu=name,memory.total,memory.free --format=csv,noheader,nounits +) + +REM ==================== Start Demo ==================== +echo 🎬 Starting Gradio demo... +echo 📱 Please access in browser: http://%server_name%:%server_port% +echo ⏹️ Press Ctrl+C to stop service +echo 🔄 First startup may take several minutes to load resources... +echo ========================================== + +REM Start Python demo +python %demo_file% ^ + --model_path "%model_path%" ^ + --server_name %server_name% ^ + --server_port %server_port% ^ + --output_dir "%output_dir%" + +REM Display final system resource usage +echo. +echo ========================================== +echo 📊 Final system resource usage: +wmic OS get TotalVisibleMemorySize,FreePhysicalMemory /format:table + +pause diff --git a/assets/figs/offload/fig1_en.png b/assets/figs/offload/fig1_en.png new file mode 100644 index 0000000000000000000000000000000000000000..acee7c1fa89bf9f8564dd47a844e8553480be9fe GIT binary patch literal 28359 zcmdSB2UJtr_AeaeSWyrWf>aMGAV?@;=tTulsz?7qbF zOH?2c=?OKID4~T&FCo-#<30D>d;jl^H@^Qj-WczFV@S5iUTd$p=2~m6Ie%;ZcJwV1 z{o_XkkAgs;<2P^U-Ufm8Lx4a1!v}$1uoWZ5z-6EBZT+jDvJPPe@Z~qxE5=tqpo#>} zt$PQ6??)cpxZ?`~aW(G!?IZcTyAJ|+!*1$cu?TXQ%{qd!w+vhJ@~W~ub=0u3@6G#$6QQ<904TC{rxU% z@1pRZ7Yjj@M_B_z1hLNZ+m#c*ziZK~i0OQ{S!$J+N zK=Ro@zumv~`1l1kQdgzxGi6F^a$09*GJMcACk&woQRIQ{3tn-8 zoq}H2hCNTeALj9!CLTjLk%qjtgug2q5Yhe9&A5Sc;|1q2-~85Pg)$<;1yRqrwQ!bNVj0WZ z*!wUIh`z9)78jPcwOL8Cqh+X*B(P~y?Rm!|t``6ELu-M9?6)ERoEkHZCyINzI*Dx6 z1KTIf)h~Bsk8y~t>sZrI8eeC$sNPl-sn|K=0KZcowAhnaKlFI>=;{3v47d`cEGKd( zivIN)194u`G=W~~?)c*|TFbB0FC$xJE{LW!A_N)$?P+D4I8i<1ZKzBO^(Cbu;Vs73 zO)!!ndM#~jy|{PyZ;T4$t8zBi3<5g=gFn*gV@0qe}z)|xQA%p4MI=4`}) z^VP*`x^56q*XcM;o#QRYR*}HrSK*7Xj(%}h2xBMDM&u#A)*5l+rb`_ZIytdnMymAG zjGeO-GT(i8u9HQYomyVAQCsC{8CvxZ?*!!v?mg!8TX=UdC|pJ&LcD{~>(>O`e(O2> zGH1B>Yfe*GX~1O@!n5xC^s&&Y{7}sRd(iapf3zJN*D}*vtbVJ_?q46jh>Ai#x+&o${wk9mJV&luo`LE zkHtV;LVE+C_?3G~P@9pG*DpDCTvBtdX;DWu&{^Rj3wQ82Hko%!?k&ckAWt*iCQV}9A2*HnUR%t)EtCV~E-F`0}KHpwo zuxh{T`_1yN9|XVxD#ALq4p5&+cOA5N3V-^v@&Dt^)6RV*cM|y_u++)UoSZV;SWLjo z!Vgf9*u#AFha6rOPoe3h$KzT-Hno0k>B>H%7C#$Uqi(%Lmb1g7KR`2FR2?Bes7kW~ z)K9p|@`I%JdI77w))@Q1kt#lv1Hw(cN}XTtlz_O<#eY1l>pI^<4muexDBQ@O_QxtF z0TGI5_3?b&p*ocr;2!uh#@8&%zwb^dbNDh-?c{PV@msPCMz`8?@I#;Dgh;@^y;;G+ z^I9006gkJy4u+Vpj*yNJ<%-b1K0o7*JsFHD0ZYojZH~p*Ks#f_V;M*LTMzIrZyY() zb+C)**G2r-r#vKVvW~Xxt+w!q1EaeJj#vaUfbAwg9V=Mlc;s5%pWkbL2g{g!<*DPW9&AjOgUm1L*d1Sx*-bw1P zMg4Oh8sqI#Om-Pr=I~*bk4ePVgb?`|x*yZ&Sc|Y7C84q$FDTyAx3dl6y!pkZJ_ydN z(38mPLht~aW4~FC+5P9g{rxyEB|9Nr9~hVF_@9*zTL{Lyw=wGjAC_%7Rc{*2?E3>+ z`yBes_A7^14`-!f(*fR0plpRP3PyDIuH-ys*- z{R~)vms$>;@H+^s)`uKLpKuo6xs{r^f7eSY&`3_3J(N(psvxv=PdegO5m($0Alk+u zYO3l(=apZT3v*4xmob$gJY0vm+H{2S4|uf+S1KU7hz~#GEN+2c)x_artX7$kJY2bH zdy@To)iXzRI1BXp#_m|0f5qPX8NVJDgq_le{(bGu+VF!@S(M=v;@Ad%(wDr)={r*$ zp>1pdCvEX~?aAg9hi1{!Q^5G-B5%Ny0UIO^9|2mdQdlE4D=WYBt_9OL1;FBR#d?d+ z)E~cMMC|%S@W^Su2yfq9AJbr9DhWQLw5%rF6`!3=_B_Qzm z(YxEdRpk7yE0@03E-p^mor%d$&_d)NIAwMwW&rg**GUtjr(kRIEjHmrtD$ai#8DQb zM%8{ch^wMrT+CIOxC)A4eP(fc0dhZu8ss839ySeR9I}zeAVz3!byt-JC|Jml;IYm9;{BJ~$AF9%os`X}L0uR37M0FOm@{xm2|Fv)n zKgIqO61~O=)+_h`hcA8LziQOKzb*lG#=Uix32(}4X{1k|Q=DpkL_;siluCz5#4Ybj zIs}+kz-}h#2(5M#2ZX?~&$2w~Ki7QK#h-C__=>ai+y|RUpPfmc0`ggY(R|8z*HM0bbYO&_n|JSD?*JNUUB@D-P(YC zl!tJ9x=N-AbLH+l+na6EVh^2zeoa(20b!l(1A7G(guAXsTmhykeLqJe$6;Xm`n4O$ zL*yT+Jjp#;x$oCj^}oKU=(O@wDokEFJkW8S!#oR5o16bx3@b#|e%hy`KACr%PP=_8 zOYIqS!%$nv9Na~0n`Tir*?Nxoef@>Z--s?vHl8)_5j=J!%v-i2-$CgjzTGdEVAg<< zR5gY|YP94b+vpCWOPPmH<5;ykS=nSFW%I3;E zo1pQ*lAo^Vo9+#JP?T2t6#C#gp>LGfOn4g$Z~25P0cZT$hunzH1x_E~W+DF1IUWYA zToaPc{~&-$qgc?%3CnM}a*=5Y8CBL<(#8Xy?!px1Awo?O^dFL^x3gNVI8(*~W)2?e z`Z*m5g>mmSk(Sl<%Pzdh&zL$aRq) zd;RNu`5x%iB@BazHn?QG&#NuYq2GaRz)Jh^_4rXDdVgH2Uqv*`B8y8<`$F%w{MbKq zQgQtsb@bYa!`%1j=C+T#b^&yFnt zow~$D)N8Z&XC+M{S}@M=kb%?3yJ{jz0;nDNcxu%8_b<4%Ot=E%Qm>J{j?krin#X*t z0P0v=>-|svuY8hYDVy^I!uGr1yRf_8AAzpy*-ssz=My^Q(q^=~a_u{`#HRNab<}4N)*J?-G=nF9T_zCyv(+`l~Mdjf~*EY?TfyW*2 zI`*=_!x^yUvh)u_-gW3mv2a`#RaoL14i?d9;Pe}OO_f%(z0X20(A+5}Z0)9Y-6Yk? zVFWN?&@STLhqciAHuqttT*K)lPHAc+SXK97`r{r2Qq@6&IH+jQ_or(yJ(2LPms~lr z*kCh-@(WL)2YDYl%PZXx>Kt@$fC$?Wa%(nHOQ9CnHR8mZNKxt9YKgr7*1^cfpu{%J zF68oz9;FJtaoV+#D`ziSZr+mkjVfT2i~QVu-%A)V{e}|PYN9@yRMs%J;WP+{Pzi{j z$mLl#TTKc7c3Nlp=FP~2mF{tx%afhw&|F;xA*N^#lfd2#$q*TJN&$g0w4ft>XwN$PnCj=0tn>kEa4imUwigSUY3rDA(+NO@^U@8bcw;%{rizMU7IZm*NHy)j?j`YwDv zWU3yzlJaRJkT%ls;wG>&MmMZcJ<=ggKtavf+jMTC%ctSc<@VBRq_K^!`dZ|Ur#B_> zeBW_EY(G>Z-;#U$Yt3?pIz@pbe2I_z$FZ_zYBTTLB0J~m=C#b^ z7+2E7w!R;t`2F}UyH7``i<8`x=9)c-PX{Im$93&9$znSFFkfSJumoS2rdI!p{CGmh zKEUAV$lc%;K)K69K8_b;cvGjpn_YCM$Jy_f;L&9N#L?sRyrja{KIT*znur!#l^Ot3 zjMlW{2ckZ4cqJ+i>Aeek&~j5UtFrrZe%EGyy}eRRiG3Zk6jt+C`fapa1iO_&PJek! ze=98dFI1t@H^h~UY*lgRIQYEsDZKC?UD42CIlbRVWIT8pYY+NkF0P&n z+b^tUj^cROO43%yTEJn@tokX<*`&Gk2&)mUk(GK4^Vl?wP%3U z7pQ`+*jR`W0s#vlE)}NYIW5QJV?D8aLMwf_i`k37yscV z{52c@j%WW8YcKZwjcq~CYP zU1NpvBk-*wl2z9E4sp++exL@%6YQzw^b-%A9|6{ygDMc#rYD4yhoq0!iv$|)1?&u2Z|{`(xu{F#>%n7OS#WfDyZ$n;n3We8g~x*e*6FE`!5au-IcwK>E9Id z-?@3pqp##9Cm3P`*z!QzDtAkD|G7t?%VPg%$_3D2TB&46c{1 z9kEmCXD?&_E{?nxGuQHa8*-K&NKh%K?T>l{S_M~jivTV!u;V_=KN{C6{HIP{l(40^ zxy{3<646}bsE*J!hu6wM>Hwf6H38I}F+J3+a{~D*A3M}M4DOrBM*=Z<()$frMeNi< z>P2CU-MEBzQgbZ0|Mq|NI(a={^(rS#qG9*p6`QgjV0XFDbq+>>o1)Hb<~_#$lhOv_ z(SCNH!lT>9EFEXegE*3?-35>CBzzWXb}q~KdhiH!07OmY`sb$(ZZApYSt!pN@Xu}g7-3KtMnkgHxe^pap{f5oImhrB#NUcWv8Gn^Myf8%Pb`D*z6 zCh=Id$wxb+#StC<-j^@VDv4qn?zg;l3wBorr@fd{=>MO|`iI`DNOE0tTi%711=C-&xe3cks*=Aqu5?4|iDctE|{psi4{5MooQ47dPNUS9*){p8xUA zJK98?x27vol<9WykXYzK(pTLQEP#7h4c10`{`n7#We;pYKJaiJLvs4L-sV0t&Go+l z0XoCReAsq-6rl!VCxQ-j5p$7$gBrk6beY8xi?gyrmr&e6O!3O#Uqo368g)=RkJ z1~=m0eE%Ip{kH*3HSx9`OTX*xdXR|L8U9J#dIbwz1jV??Se2v(d{sGjtB#pE7aj^~ zzBPD&li$ctsNj?86X+9Y0RX!EQJV9!c+tr_43Kp6m1h<2igXLKbVp4_S@Qp>i2;GqA$hHRO$l{4*Kn<;Gugw zhdCP=XpS2;p}|55_G0ydfv=9A{ClYzd3~$`aKo~{9d63!9&gb9I$rzlM0(dgIgN&Ak;0L#1JvH*y-IGD#{HfPyoq^d`6I>fr#B~1dI{>6oQxDU{G4J$x z$2JO>h`|por3Bj(a?cLrdh7;{?I`3*9j!VIw&)kHF3$%eIa9A6pOzp^xdY_OIJ2YjVrJ)0?b({q^xv)g%XZLdMq~ z{L-m#wsF`6Q+f+&{84ZMNqosLH2Y(Dew6DM02BB(QCFyY4?3`PJYIYuZ@RoJIegFs zRrM|8sh(%!s&jY=0kJw$xK_3P#s6YVsL|B~%>vlDk#{H4Hhp&+s!^B94xRWH@+!~( zl_28AIUP>EBFlcjoiRJb-XD`Xxw{};J+EaiS?!ux0Jp6a^;Is?<)6yMkEH^_{LVK$0e~#j%cuk%9XqB+zKRP?{t9#KHvsd$AkW4-hs%lko_;|)RCNaC5Z3hQ zG;4lsi8)X`rNk>S3nDjM6KeQ3oP+U<|4Qr+Apq+Dx4vm!d`3LbqIb_MWu|W1LAOAy zB9q#?`s@H_!IAeu+0Jen3K0@s*8%k9>c8eje*YfQ@g{@W94EdYS;=R6_uf9glWAXH zOdgokyMNWI(Ba}#xKl{ON#^A0Y7o>b9j^K0w|`ScDOBPMPB+lzypd*JBiP&0Xq&mmn?01X^Q?Jr8`nJzPzl->D4<7M~i+>1P zDKZ@SM@ahD&VQW*py(N8wKGL2PivTEb=1PuegBQM2aLAo;uqB0*?>``fLYI8-|~-F zUa>epJyYcL6WJQZ8p+|0*x_tCOt+hgsA~{h-TzyW2D-@njlj`h z*Sb@HU`FCqiV)=yKXd9=AK&&CTVr=7gOB#|0RB>%G+pVVAA@XFyJX3A=EGlyxES{G6b3lr&C9A)=l;Sh%U}tXnakwbJ)%E`}%uir6DT1;4C*fP!V!eL=XT;6x=c@lpM8r^xE5q zXW9x(-l8^qXU}59OrM1-rnh7>^$Gc(e0vA@@>N{Z5%Yh{ixFMw3z6`eMWPVpQUoj7 zTmpSc*?wVdr3a&hw$G2_9u1|tEz3F72c^T|_@&GOW1(^dh;Ji+Ak8s)WpNjUx!7OK$mM+wsp{x4anrj59h|r2wG;hvt;skY;{LoWX_coe0sKIUw8( zC}jlwP#3Z3PHIxr5>5uUw;Lg2m;E1YoLH(_cv|$8B(OY2WLjrb#7AX>?itrD7M|76 zyh-sguaRZtf7mmmJymB%l{<@*tOYYjqW!7`8KE6)O&+)wa2CYq$T2 zH^{TqIlh0<0pTe=$MJ&nhE!uEUZMG7$S)^eMJo|yW|y7#%`tc)*_?H;oaVJHK8K-f z>6L+LQ#UY*qUMF7Mi?k@0)Q;M!cJiCTRCmfFj`t8;hVFwwv@#;sj*5Yl~Z-4@}kZY zw_2o}en`_I!GE z&7;VMMEK&pKO?7Lm#c3(cJQJD8aiGD-N1$EGqj3Ff=o+eHDs%cE3A+t)&PC3l8AQ= z&hlo7V{*czEUavV6zb!%3EwtG*KJj_UoQVa;-$bO`|)4sa~9X>NG5+H>y6SpEJMNc z6-(r7JR#<`CVKV5L3XI6mLSUEvglBeyZUuZ2xGya1zx9+)aT_@v~<~lR!q)RFD?DD z+{sXi=)W+#FLH`jY7`!za~YUA*inQBV#!Ansu{%o-CW{)LUE^UYWB_w2J7J&_lFG6 z`jZRYZi#o~D~#}r;Yj5xCR#6pY*6GL`~i`nl?P^{Flt=J8E=~jlE>;jz}F=%j^oP7 znis10HvL23TY`occ}bISmG;$BGS+1!Fl=VM_8USi1YI~nmVwt;4SQ$$cs8;~Zd&W1 zB1|@3O}3oEaF~X7z&50inuMvcvwN{_pTL;Fa`jROioT`d@FQSMgP!U{z*|jMkS(B+ z^R29AXJnJ=5o~E{^g+Xkc9Pht=n$cy5-LX-ramaZBH2vcU9N-kThB~mO~`DO zwe3nZs?2; zO9+X59*)Q#pRF^wkfe-)I%nBjXOE7fktc`dt1IaD-bBqNZ!D-yu)4x#dmqgua+h6yGVv_h6`txKoRxF&f(O?JTW= zBmLbrNYeP4y+mI-Gq_AagBy#&u*{#I&l~Nrmh(8V85fpZIgNmeENLxoCOO8Yru2g? z=}@%VD-#cTy^3`r4V7A;s-O5uzl8TfyLNRU?R4w>#|7aj+k?;oE8+yzqulscq7NbB zK~7Tmf+W*wRh2oGc452!DI?1Vag*v^TpA;;%%AwjE$T&a?{`v7z>>>?BBds#zH};A zEgQb6uc?75ikWd`Oa`@3c<>$!RsqfsKY9#FI=BX7mqA%*;i=|5; zL!gm}tT@ARmbfBH%P9nJ8gr>r!*`})O2|yTNQ{>Ll{BfymC(tsoVaX7S8%Hr#J1vO zd6YR!&B7HGZ}TE&4N=-9Y;tEW`_&e{NvVBsQfJlBOwhw^r^47xeBL}rv?1j)ZpEZD zE_R(^8j&sv045l*tfi?7_8(jgXd{=yyt`${{C1wN<^Y2cP^bw1I4*AC(2I>R2y(u8 zWAr<}2d1_RtZWI{3N^1YapR30tYjSLQGQCAS8^n&3W_0O2E65(Dkj2?Vw#~NITQou zSl^X;_3qX!1A5Fvm{!{L58WNA<2La3p$wQaBA zceb70Mg}XHcb>q#F;IR1dBHSxTM*+W%+?qQtXJmgxBqazr6;uay7E}2fp164s>E=h zQLM*_DIwC^ogSY|b2kl3!9Y87wR1XCX2m9nEH0|wW=%sBfAuvN`{JU>jTM+E)VcbNSO!W4|L4xQ zr8=5oqF$OcbUN0;>FZhW9myZIy1_y*IEL?%vE)S)7Fe&u*rpe?nP!}^sK$-uRrYh! znzMdWUGL@_`e)O^Wb4#qfX0qSrsJNOJz8abc`Aq&N8;m-zMV7INsnQjOTeX6jD)ti zpLGOM!ldO=;8`ZDye7|$126xjTAo z*d`P|Qs=7b_wv#OwmY#-xfI#g|Mx=$A*5-(z-iYzU;qIn@)2m z+=%-kKPrjzT}Ztb5LD_fcW5zXPzt}HGOgO4Qq&-MoTNaCqO3F{0@m*;9%m?NK874D zj1w2lL${Z_Fs~^(;D_f&+-hsawV~&5uRPvVj;da2h{&o`I{e@g=3Z{dgu(<53wD9# z`$#A~XVT4Sf2Y5^M;oAFH;u1ya~UW?5vo9%{IYi`jSHl553V1Ncibj z@ZdiEh!oN7Q9ec%4R_xD!_uf9sev194k28U-D2%#RlvKASMw$hrG`7%W&pSV|FtHi zsvpnaSEh~V_wHAtd2v5e8BG)I$yXa^-oW^mITf&cpkZwqg7qc1VWyrZVd47)0 z>1&DP)u7jLv71uuL$2vL7EXAI2GntCDrKmg+$ujQRYdIP9O)RBxLqsO7Yr+wDCvZ~ zD}~qm0CT?;+no<%L~&YSNFvpFd~(`zFIOCyQKawHbOHMM*uWC}f?t+c zcG0|~h-2)4cfBJ|=e2DIz&|Y|NQ;rct<&-eVdJdN+f9oqW5a+M9{R=%!gE!<(MUGa z+*N$HG`4PBXlm}Rj&V0}2-NJDPauJry2imqGurW25|&rX$$88P-<7Q zS*hhaXW_C+-dXC1VaDiq7;)EB`lZr|DJG)t`cL(oz)}6oz$utSLdfL-*QO4Mb~)zv}xf%T+$z>^|CP@ z_&H}<7|UzhvS#m~SOwZ2&60gNkL*9Ulkk~~MVA`!_)#OZ6_GdYZ{VWzvM8h+p1h=l zD%#~D^lyT%xtSTV*X^+e938B%xE~?Hh3Sc;ELzTM6XCw{DNEb(BDSuMWK4VVT++oKyGj)1ixz_S4FR}Zf{?XVM#mA4)xwDiPt=hcU z3?26VY0Wk;7jl=8;~n}&amtbCAW+twYcw=c$YCcd%H|`^#SgNJ%2!*=YN;&Puxn<< zM(pmjiX}~K(dJZWLN7Z@3R(BZ=0!a%2vTxPYivurqqF}^$~@Gh-;9PQz%Sw@(TmYG zm>&E*yoAY4A)cOZXk}~ZJ(f+HWZ(_m&^1ZasO9-e2S~r03BDh#SkW29d{^$!hZ#bw zBvJ)YAIoY(X5gZ`tf-sCzlUC$yA#{jx(P}rXe(nq~VY;X60@OA( z3O$;gx$R%!SDvervE}xOTq}`&bpl{cal#Mr(Unjh!=@L=49B3)MKi?ESZT3DQjykP zUSFTHTs>(@O*G^bBJ-M-79DSS{l{9-q*XeKV(>;Iq1}JD`f5Vfd`)zHj<@fk#&ALO zY|^*!<%Cx>PRCep-vAN&kos&_*jaPw9M({&=?^VoG+q}NB(Q-sUJ7Z5^VF&~VOq{y z8iN)QFBTDb&1#qE8oJmW_0oi)m9Vv~CAPZuYg%z?!D5L`g_FAp`dvCEnpN9FU?^#u zTS~+$kD4b=q2~03F*JNM>)fa_7QFm|)bEx(H}vC!NrJ!OtZL~g!H+x79W?{8V4UoR z6WMn4i*$EeX^pClR4WrIZuEtUY!C@iOnBx8d$%uuSLZ#+6Qzc-c zKE44FW(x+8-`?Xt{U~&C>4u|n2B%WNHfH|QxNK^CShJr0>FxFduQ)M1u5$FKCWYqB zQ%s^F(K(iN=5_xfu0DDRP?1T!KDuT-ylG3Ly?@Rcm^ovL`2M`1OvBj};=5YF|L$nr zob7Xct2BAz0*!87yM*i)U&}~9qgH325&&>gFZV{{#Zc7jWRs$3!h*mu`*f#vb*aL` zFbzkK9v4k;f@X(t*k2xY3gBT2&l@eQj|m`&7P``8+&N}8Bh>x{X%3+}Qu!xKX81vU1R9SVx`prmy@Te4hQd1N zJnYo#6<^z@ z??)E^%{@p~DVpxF!f<>Me>B8@Ta-WkfFNc2irfTganfaF;A%qBMu~f;Q!7a}@2>N> zzpyBF*)T(HUNRn|gmUQn?6QPRq}fGou5E?-IN3UoyijwFy>|Q4Jv=*?f2l4!hc7$C zWVHHSt+q+$kX2C0-ooq5Bnu0>OO8H&&1KY^F0Db#3~d({G#|~LJi&4lwm#OoydAq7 zkUn2E`MTdy*9+$vT~r}6Tn;!XM<`y$4aS!lO4%xy)H&_|8ONkPc{yH2Ww^MHsW05t zv%Dy4ON+Sj?!}hF;c}mP78-xnAYogjw(3U+b1}-S#1y+aEm;MH#K`Wl(^n)VN0a!o z>ZBW1J$5s)annT%7lb?{Z>GTZl!7B?&yiU1YKj*;DF>S+=3urC*O+N_Ohb;fH5Ww8 z)|fCpwQR5W=XP4Vh=&A1m2Q;ZB=CaD^<4xL1_9xvUxIlKEgM z&UH+JG_0=@25b3qKdmUvv+SjZJk%wB9UcDneZ}>x@ z207r(*Jl~$?XT+=HWsQ>P2Q0yMQ$vII^DrEhuEiMHv$ltRizoZK5Ja|yuRG*IO|M& zgRYwvdh=dbl#12rl!qo1E{yo8+N4;}<9HD@RZK9MZN~Fu+j;8yc2wP}1!re`V~+;T z42?T~ZB3yrh(>!rV^$f}qT6rRh-i?Kd`eIJP~1^ z+s4XG01WdCkN|Ie-)4-Ez3;9X;73no1v*e4x5~Qmm4{Bq43&O*yT>L-HF9^}qh5h( zpZ*88K)#xYUg^E~LaRcIu*P>b+`rw$DSg4ZGYO;E_^i_psL=BjXL0();4K%UQ{R|L z^E<`FUnB(q5umM|-!p0iQ4cRJNd{-|XS`0GSBf~^-7f$JQ0|Reob;uNgs>8q-<+Dn z9AgN5nCTUdP^eB;_IE?#dF6Aymm#8&jm{lYxBua7(Z?L~WP20n=6MeFe1B%u&&)9P4ivW{J8Jq zy~lXcOei3Bfw>2Lta3f(Y0ghNZzUrMT&M`C=6+7(keHbW zajPb^Jy8q#h|T3^R@`BKFfC3Wy64-?NRBE}ghDJILKFRZw|eYbR>xLP(;wy=i}P-E&yz*FW2)= zSx)AY<9~F@x*5-;{K>-ik6O zOc#KprLXNTuddd;%8;z$oyx1QM=;Q(%!k(vmMtS11W>8`Ox9xp(D!tm(qBY79Z7(s z1_E^n{O`GJIKj#Y_s;(!12%nfHX%-A&EM&9e{$yVvonXCY~YK51X_T&3*d%OtGG{% zoVapASCn*7RZG*A=|yqnkI>Q#DF&liVvF5Qs?W|unZO&r2@OHsrW?@rgSt2|S-}CV zC7CPbyM49z={i(pnf7vxvt2(3v<*6} zTt~^*$}OhaGCA6}qb_&#TWh5DPGP`N(5K-~IMAm!m7P|}s!>t$kZ!}H78b-S%=|lt zzVM(4uxd4dwKScUh({POlT#=i8pT;;pja0HZ9Wvv$#$Dy*K=K}dBwc)A>NkA2vzDqT)C(V-*?|zF&du#v$|3Eg z#XVu#0AY0WwW`)r`-U`Jb3z={UA$qTEiB4|AaPFSYgU zl^FO{?Emin<-Wem8cwWE$6jlFVxgx@zs%u2Xj(?-Ll4;3_Piv|SM&aMp&p)tPw_JNpd+}ck0Y7rp|b#?_Vb*Q=QIpEwgzzy_d z^q1cIN@^r$*S`3sG{j3F0{xdL6)^m<^ z(AlM>2HVMr_&e#~hT5ei>jnugLThVq>|xLYfPe`?j6FRh`mkZ?!>mbN=_NUWCuWUE z^(VSwMjUH8)_eIVL?_j|9~)QDq?t1T#3Zm%41IFJ^` z;0qyCyEs_U0_@cN)fA->9&RLdM3bRrl(?jjU+-j=3Ig=4KN zjbe?sKstoIIyz%T5E9yvK`Axat!E85{_Evr$_rN~TN+L3@ zwY1m@v%R}<23YdhW5z!0jFmi*DGYe_y~hU4f6`^se(gpl&3kHv_`*jnMe^`7spiZ5 z4*db*S%W}^=gt<`HnL+MQ}Fl0&!*3h)_2rTFGJ*l77ZzV%K=6{wyw4Y6M*?Kc*DKG zL{*2pc?hc>3dXMS0rP!2&>?<(K+;az>JUht*P)>^$LSZ(`81%1|B>$ef6I^V#PcZF z>z$vSI~TWi=6Az4vS{qAl~j_3#2yux@ri@m=#cOu9mMEzHcE6cO22YUoyIn);|G1Z z54aTXjsOf`A4F%!Xrd_ltA4?Va>y7!BTv8X6DJu zCU~iaX%eeI-)EzKC9N~GzyPS z+RBvUW@pMh_*UPuZL)K9=sl|E$98Hd02^xWQAOY1{rqfY$yhYmYIY%M^??i46@6K3 zE5mR1^zLg>+`{n6YI%;9i%mAbb!VhuO1(8le;Q6{8Qq;@bZ#b#En+z=cLe*ISO9qlcL4d(N`v9;T#yKH#ytV}s9sRR^k~usm zjf8s5Qq`^5Qfr5#9hRe}q!(gxX65U(@^nSnn09bIBy8cim?zdkLRogPm+uYpH9WeY zQQ~~xJPK|$&4(GNHd9v+0~Q{jIv&7F#8%=({K7VSQ>v!IWdS09Nnpd`1e2!dP7({> z$V_n?+P-H{De!PHD9GnMPvL1#Xun2?i=8RX{8pR|-vJJS`(p;M zEyj1WQdHs%6+w$*g^IQPh)k@|=1&(*&|M$}8xRDb zJiaxKpub`s|7MtzLT>ONbAZD$($&A{Qd9^H&}|SUA38=x8s9PzEQ;Uf=>i0 zjwj@wLhwnJi;?Vl!yU?cBFTA-X!=_H9z*-xLHd6At0t-wNtMgI;SDZV!)sWawr(uh zZ3`x%J%nYdy}=G++!Vt}ht1bnmnmPW+wv}M+jiW2%-mQh%}J^re2`&fdqh)V;sAU zv(>J{Wz^dl754pyo}>Z3y1?(4tN`0|7S7Sm$G~CdrxkS@ll^}5>sB`>r7>_vaeJ%d z5IM~8PQ8}bXGG#-+D(0I8KHJUf}tmeFq0|O4b59g#6+1^$2i0p?&vZlC&C55y$PmE z;dc57$y2I9#|+Fh(aBf0W63H8^fen#nA0YFbTK?&rg40B()Zw#G{D;z_#Gi0GF-l6 zP#Z>Cb$lMapilE^uwQAl_O2Lh`?(ZB$tn+9+#oT>@Vr_hMS-j}ne^-b9k0TkptkFI`?PI2Nn5`?!-t8`=0i#{tg1l)OWh z+(K+Dp$Nm?g>gAatA8*gA6x>{PYxkXo4n26kSuZd&G-TxGXre26gpX|9ldui!JnR~ ziS=f+vKn&=;bI_p^}U5R`7vkPle)9W)Sk-2v6jWWr{1o7;@7S!8b zijB3H>nVla{B?S=&7#r1F?E%A(Ez8P2eQXl_oa)Esd&B2i;j{&yPJ$ml4IdKS#x(h z%K@@Gecpl#gaFc`<(>Mf&LE%@>R^f8vrn&K3d{5E@z-EYNSjMz&3l7Mh>wQV(gAcQdWxUU> ziI6nGfD}Q(>|sQW5M5FM7KB7l2uT3ZS}SR)z>`GK`#@?R7u9O^&*Fv64#{Im4OV3?S0m zdv(JoR5mVqy~ubch6mIp3|RJdmF*P@#n55t^-7cejsdd~8{-we+)w5eW#RTxgcju1 zUj9iyHW$l+wt=*-TjneIp1;zi_K3rN0C-*Hn|nl;{>*LPwAfx;33_Lq`Q1l}O~_=*9SnUHCn_ee{;Bz>(yD%-xtV;78A~ao&}62MO&WA$=>_ARbIPgt zeG2h#m`A%Dz=`+bi+f2u4NeuV@(J*I$$!Ov=^+btY{3m%}d9vMO zyLS}^&sd)7G~MF}sQXvmg-K+*?m!#6S-1i3Z8@F#fLs0N`=_%9;ta3L#~cBMnmTJUW^j(ZDFr<=LAh?!`uZzGM+&4C3CX|{A@!b zSnXtw?2RGDc%rE{D!YS>HpDOj%LL;$-`J^ZO<#U#vVIfbg~P79!S-^{*7E13<0yB) zmw%=rACzDROv<`pQ$Q+ECiGxjD-b$XMiVEnT8}IdKi|lZIko(~)HcQ(-}*)%0yn6p za|Uu-D^;38sG@fA?0eCJqd@|wAM$|Cn5EbPfLjFBTxkq5-RhbCw>7N`?Bi?jE_Zj9inZrka076=cMpJ! zIYy>$N1BA6&qbjl{q_L2-SCMT&d^OHw z(8A|PYQh8JJ7g^Ik{S{6?#_3*kWuS-Ia5Z6oN2$qR;L>sxt2MDW&pfeds|se#>XYP6To1teS)b&SH)`|QqXW6t(f(Dui8tvbQ-*imm3 z73FH??91J^o|Clz9hd;`X~|q~bgUk|>TYi>0FLd-IEw*ZsKcCcTeRfkv^>Y z8jKGZAs-Z$_^1HcU8Uz#LOb3oCu}?>2sRo4wt**y-R4RbqOB8GzEAj=a&NKJ?PxKZ zKrX{Thpf3G|4~MZT7qC()vThsWWT56aYK}MYeCEAxfHOszKbD3>;UjssBFx=Ja|#3 z=Gq3mPjx`15enIR3y*E(Lo>vjj|TJ?MbI9g<{Jn#yk=e^K-^kvTEAJ>-0;M_W!8H; z5I0LQ`d)0_zVrVycjnlU)Lc3ZaTpa?~X%AbHPSan(P;!!Zmyr zReDUV53_?nXuC%lf}m(VltSE$j(jJCZV6qob6JEC)HgS4hSZi?9q5^L7Y;<{SWeo* z+O*fFmXdo25(9n%XmYJua5XHvDnj4Lm|O0b)$GD`@vXH`s#T<3K7{J!N4y7Fo*nOIn@kE|k}t-D(C{kuXP?Cw@50=hxGNxnMSzpGw){WZC>f zm$L2w8MHR6y%QGclt?Qx>T6&7=vQ}=i?<9IPDN(qELI?H)Nx@E-l$Ru)paScGo7qS z2fNE8$OeYMJ~=hW$V{*HF0ku=mNtyAsCgEkvu`|W=DSyWP{HAt-g~bIPceS&CBu~b zv$i}icB);0<}D|n^jRS+0%xd;)~|)?y#;(;)fFFTeT(!>0+tcjEn91 zXxL-@>RHYSO05jKJhWjfpgqWzG$hu{N4yy-5M?~(4Szx|etp-$W=3Js+J~|(mGu1! z=VO+351G0!3rnhdLKDQ08X6zs(pD=6TtaE%O`4V78p_V}opVq&2%lEd8kcT2Xy?SO ztjx60i*9Zovs05G?Q9qt ztb{0XLOS~UO7u$DLi?q~A5=R=Q^;_j=a{4SY$^2Su$=H?Y+9I-6&Ej=U$m&{9T&5d?5$1x4KPgq8q=e zEEi6g-Ndj=L4H8VL^Zmd(DemB(S2&Oqd(Pe@S-DZX%(g1=3MJ&{?gZs3=G5reNRpN zT0N89A~4f(uuN=7SWzofy)t{nw1f4fz|uOcwmXVk*|zaAIEj#0XpJgGC(89;?pGYLXpoq9uQck>Jky<|xOgo|gs7i| z^YXZ#+g=o=PObMjTOu98*_uR*nIxqKUC_+T0D$yK7h zcgX>DmKq6&6aFA^L}YUN2{@ zugtCCkI(qOy1wGw7f?$PmdLUd|K>#iiun+SSi`j-$(*B8HOdtGyBO=#yMz7|6Z&|H zm&=N_NVKU#cakBBh7X?5g&G{(p7F}%so26SK^6QTa|R95IwNNZb00Bfm7D3L>~@et zK27f6(-0}L$ZhKPr)-~Ot9`>Sw$;#Ty)Hk@)Gn%-HXhT`aHeNMlYs0Tz$|t^=j;$_ zu!vt7H*$B-Gt;#5hXBDMOI3aZ#PUy|=-3+7!MP4$3*uPbbbA?rRU1WK)|L19-@c`1S+B6=BFcC{k)i zLXn+Rc&^oU#Hxzr@OebbSm5yQ z2~$HhDRjH->7l;=U+td)5TpQZ>1SN1OST#GQ^rtG#&=L>uikBpOJRU!t{ZlGdi&?c zy~u#ib~xchUgpD}Nep|~#uam<)rCBpP=%$e=x=9JTR}>-5^(@OapG6)q0so0hM~rY zpsKm^{}I&dB5Ke%Q)kzjm~l`_Ps z#8lcP&l$YD6;-yWqq9Bqr1=1`32${Kb@^$r#CY|r({sk#SZ@gpc4fx+J7 zlUS0eC$BI%SbI>#yXv;Mh9Km@;^T!7lnKy(jT}-H1K}s;UllyK!FnQdqDp!u{AvUPMUsK(D1_uot@? z&hqNFQ_es?w{W_`snSYe*2HKb=mHBJhcLlH}xKW(UpF*X6>xR0HqKv2AuZ*sR1EoHrLA@9Z?i_ zk2jQzffg3cr_EJcvgykO%PFiHz8iV-g_t|ltkHaru{EwH@0Fwx!i({Wq0seHeaGua zgL{>8dY)U1JAU%0NDW-TH7GFZT!#B7s(sUh&WF~IIUvfPMg$~dp=>SmIv zeC-mMN)Oh`;aQO`;Fwllc*Cd)bva$dD}s%iHG0Xqb_o*Q;9#Dj-1(7Y=~@p?%7V{T z!3J3O?r5OJ)N0G7iajb#y40uY_yz#}8pHg2|RXm+y9(DtyCzRpYo z(%a~oR)qQiH`y3UGD1_{j-1>=3>2+LY#aMsjFrqp#LwKY=o3PUprZWgPrcki#`U1R zBIStAKHWgpL^aFH8Sa+}1>_q;Q_U@fJNEZ*C6oTq-lVyQ$;{V@ferLmJWSOyg9i z)(PAstHk#$G`>n3uFzA~!k~NS8^<(rLj9+z+mNEQDhFPY0ELp6FdJtJ9J+!^r@@WH zdXJDk=Xpk~8`BLqx9o@3o;B0UPmCXekx)=}a&d7x{%+%jxM5=1q~0bsdR~ac`5GuU zEu7~|^ZV*>H^7a!DGgJFMsdFT&PGfN_f#5dEpN!R_TCi?&79@698CfjE_@UA9WXMNdMz-N6$^ zCbD7&ooy}r{2d-a|Y6sB6=t=1= zudXCrk9dxmO)@g3ImlL`%_jDYkPV1OC=L*mxDh&{jA<`hT39y8h7!fGn6E2+Yqnk( zFIy_hBejW;4=vBAG&d*uzDKh%yJD}7X{5H2ALS`tm(z&9n~+AIFW@`D7>F{4*SYes z_YlP$UK7RZgpNb-lOHUS#q91!k=Bk|4TinUf3m~Ti{5vt$&TZ6y|VQf>8PEAtRN%- z;`u2a@@n%M;ZJ%l^B_1p+vkS6>)@Hl&_N&yjDsE6^(J9kJbIM&qo>)e@R8O^20KQm z#B))#KfHO(t{8FH^@a-;4UM0Oc>$McopF2%-)A3a}jd@JpiSzC||rAh>kKqi@fn0JN6xj-gIuDMIJ*L z0%*?y$OXm&WZ;gX2ViBFfL@6OTIA_3_`iS-$M?Vfud4F2eT{!Lnv!JS3D7gE5@&WR zrYY(Z$AZvX_p{bc&;d1^BrQ`29Da7+LP9B&NBCde?I8Zk!lNpIV>{jr94Vn zqap+1PNr{vC0Fbr#-(^w<*3iTt7#jZM9)P;qDuTNeg>u8)Dtx?%e;Ez+8t|4d&ahp{MAI80-5P{b zxS#)>5MEHb$bCituczO<&F~;z1Q1jq~zn z#>Eu^xSoZV{9@yfn<{deyNIV$bcDbIr~1w1l;i6_hx}>0-&r)U{JiL3Byu$z>CD)J zf;xw)+=pHNv2)&%{sMT7*{R$emqY)!zc6j7k+;I&G@!dgapj5~fk71N|dRfxhRw#%k%04LS zUyOOyX(CL|yz-+D(L?<^;`=KP$zP{5TT4_{5YYq6!HzTp1I@oEA?}mN4*V~dC`}-6 z>ek!w@^OgW!e#~c_2)#8kd*o5^XMaR1q1j7nN`Nzg_byDfGdBp?yB_e`xlzIJ8a31 z{O)AyQ2i4*qWH7lOBDUp;39JFOJ`mDB>+r|Ysz*O{hwdGmZJU@a-j1Y^&7tfRt+^# zgF67d%^j8~57%JFwMBv$B2A2Sc|ocTpUQPE*i|oX0d(gZH|vt%wS{KF|6{E!_(qId zvwS{lC{%QMO+NYT0J|Puev~cak;STdj`*IRg?J+%-VB@aRgupzvIJpk4S5C>Zjq@> zpU*PEm%Tsx0nD6GL79ys?Bql>cq|BBT-$^k3$O=}TuwLc5nn}qu6>hVH+u6K6 zM|XSKXBOz*lG3~>4+dWXV}ZNUrBf5`(anWwnfpjCD=Xc>7(1X#5;2xNZ|XAn_44*o z19J9i&%6wVr7pZ!c}1i47IL8b!L7xK_8Nbx^d{L*L8JitlFgh;N-lB(NAdxb;dj|l z|1+Z*K0WP=U4uI;jU4?BfctozZ;6Ffbz1fNB_QT=Bblk=O5C7PP02s_n%{5yU75%U z`OG+oZ`j1!{_tM62*Sx9yhLwHnn>_U;_iEK4^isDYp*SwT!-C zDfqVE%dJUkraaEg>vWW+5M%|?0s=IuFr*S(@QDJ9@tUU{k_E_e_|fDTAv5&>+V_U= zhu90l4R~Pv_Gw`^vhRrh<5Z2?^vXA}W0%J7Y-jDFD+L==qYfMP3_eu7mT8b~M7aQD zb1YFjQsGW>tP7yKovnK-<%{{Ye{unA+1QlumY&_ z)=>!P)_wsm!$}}(1NnWTxr(c)+&7B{b5@|c?pw^ zx|%a*+ym8akaF7bqgD;3y2dH5u(jz$ z@MG+c&IMSY5$uei4=+wMWPZwD=r~aNN7kWQE_VsQS{d{S@HaDO=lBd)oC=&WI@K~R z?A~=B7Ir%!H%q(df}2cUwwzv9V79q!4{)MQ5wb!zf(tK%t=M)2p{h^MfeB!e!;^|@ zAeWO3=_Z4YXgJmR_q1__y*P67YS>4&V@5Y`#j=xgcgzfrZYeJQo*#8NeD{C7fd#-naN+v37}^{0XICY zPip6}A#}3H@0X+a9ziFJH8~Smc^=$e`@94;mkl-`Zv8h)FdN?+#yld;@750%URoJe zlwQJffdce4j&Ql%bOF%>%C}jDf6_&fTC{qZ?7*s$%Fsn0t-Hx{wy&{T2XdMenYfjk z1Hc>MacgJfP_%bGgTZY1b71Wfd$!0bNc%aQy52Y@;;L&^Uy!9ltzW*@&nIuUv+fwF z$RkcfzzA(C8B?#F7gb(1r7)^egDL7u^+u$n)fXlY&&#vLl3#56(b`(3!oO{%PGaVz zYx@e2ItHbfl?IF439Z|bz9}De+7IbGd+mr`t7dl7hODLF=A;MK4sO`9wq=qZeP=!L zZG}Z0FpE<1UoZpvvWZ}I((|G4QVQXf`}uyrTRJm%nI_=b#}1xujjOZ)bz^7w+_#A{ zjRItiyed?=XEafgXSkYLuoBTS7IdAdSifWA@C&2G6)!~BPoJV9E*W|ssYY#GFA4za zctmr;GO9eS(rjli7%9n13>`XddlK{gB~z&c`!(e(;BKk(EXL`3nlDH`->JMLHKF`r zt$sZ$3`UK?@8^JQHiDO9afo=_+t-}IWKk(1ZiBIRK z+3ZnWHP@1Oh2TRqx2~;!FetPLuj>20{?9AXOy!8{J@ZrXTbVJKN@E5dVIvQIy(dTO zZKVT-F--*y|8)u~>P2GsKIhI!n!Oy?po?PskYOL~5bfyNcuV@>NnT=(t(8vIGFUl` za+>%U9Fq!(MNUq8gZgdX0$y+7Q!CS~-#sS|KNp-xT(pYCsA;LryZhybGCwJBcLU@Z zxEhz0;!+pQ=g)0Q=CO!RJNq8WB5m)dZ3cb{Q0C0}rTlIZ=fU*F%*0Hm1Y0F}u_37E znOw%UjA!?QnUI_%fA~&!X8H_*g=j#pU5^gRHuz8bP4NA< z(-eSz|J^tXRIU&N87;p}gW*-BR5iZjT0#$Ru+Tqe!gU;tb51I-=qRxln z>Mai-@P(KMBFkADN5JOr>)k$&LL(Qe;ec~S4n3!@1McnI>Qr*{+C(MdOuXL*>YPkunP4M`775>Bp(y zV=7$+QO{cW%y?ugX6+h5V6k@|@8T($yY6SHdQtr4Tf}7s2e&_?dXn|+OssqPON8KQ zP#_)a0iBsNqpy?$>Q|mEZBk7D{pA5Bq0DVs@5nu~t#YR(ARByo)0VBCID37~`bu3GQ;uKTRy@6<#dE35kfQng*7 zl@0K1#Uyg(&2BWO%YQ-fqWzk&KcUt=H}pBEN!$kyMo_RAwSD%>d9W4o;%a;#IPX-e zgHh#!#rp}@-)eE1qoNNzj z=oxft*aI|O1Nul)dy_=w{a`%ldH33JYnQ!^Wn`oQ0|3$L`4R6C4eUr_uEt=*F)tJ7 zo(8aWt7kejs=I2&v`-*TKc_|ZfMS%?7cP|ZWwqiEdmV%Ci>_Xq|n^#%@gEFX>j)ZDqCqO~tL zZTm*0)Ffuuq~uPg!cm{VZV&U7Q(5-c0<7Zay4BGdpNt7@)c7*7XzM)kGek1&9Mef6 zD9cB#-*dw~npLxT2{yFGv8jH7tP|z`-MbK;mS>UA+I6qa>V4+7`dHUz8PI*gSjIy` z?<95-eB|gpZ9GXv6h~BZ2fyHOrwp@zkmar%-WqxT+p;&kOm(O(*uAW_v8;*(RRfLE z#Gs$Th{IUPcm=pjYY6+Qy8<+JZWUaqgPq~}1K5ifj#pMcP<)vbCcl~FZk`0c0V!;6 z-Tny`FC{>FjwqXdV%=T4~I1X1gQYZAgb%GGDJzN<+tJM9m-Y4xvP6D$jF=^B| za{hSK&eXiqV~4>}FA7CfpN}YM3ef^>+?kbMQ|^C%D_*YEuSGPC@HGK7Y0q};!yW!O zZTdGt@De#{={=H-H?|7j4D4>tbu{+|_arDXK1pM%uqy^Wf}_W^!9L>;^Ob4AfDhfE zQ4ohH5wu)dPiQm+(PAJr|i1!ag<|;iFDohar zRS`h{+uDy%Bfmnhexa8AWBWTOLzkJx)v&fwpe^M91x8o^{TbZd54pxB72!APNer1{ zi;bydR;0HiQFEqhWe_MXU{-49sr%Un(;Ja%uK#ExJ6{RAtOlYz|L3xn{x20a?hZ?< zA82F#U9TPSPuA40lEoR^`&vYmZ}()`cJ=k0RH|oxgq`Yv1;P7X`8b^cQQ^CGnOOdt etvGszv#lU;=+Wvg|9uay+Q2{{{(9ce4gxgq9teccxOUmVGQe@EW?!YW6`YH*JKK~OzRyELeNV~H zGcgBuU%uCAeo)-XjER2%g+GC9p&F(AV9)uRRa% zxp`#h`KQobyPlEsC(<~M<3Tz3)wt?>Z>tF+2|k`%ZJN54W|3RFqP4QL%8oTNQ3)g~sP3;ny}$m`%Nxx8bMms# zN0mMKV;Xw3J9*!p-d`}JF=vAnyYD!6BM#rJ%6q$)m?IrMdjR+=L*#$F&2P=3z*84c zf5CSFp9=@20nCCxy3c;SZ1msaWw+->I@1T;BbCbEwMZ~Ng?%tquDZA2jGgQ)PAB z%{s~65s!kRZYfFT_bRi=XkEr&sZ(Qw@AuNh$%kEk%XOJ z9z6xHa?GH41eU%zN|Ozt%DPV=*2Sg03F43KZA;>d7w@uWjF#1PIJpWgaJ2-l!$#3&PcEmmbj zlDjG?Fs#1G(WM4eT=+SmYSlbPevv znApZs!>kDuf?ThjD0+YmVN(=NLa%?Keb{mG6l?m671%*t$Kr;~H@`+9@c!D;j7L$- z#R9Ci4!nAc+Pc^IHq$*fRYP&?vN<)U;xV|$R$UI(MmE7;v`p{j{Q+h}M$pRAE86lWNy1uN;lFlP1 z_GsGA=d#&SC>=F6EmvQ>*Gmn)$*8ES`MLNGxqJy_hNQ;!oXSm6yZVJXYm&aNx45WK zKMJxh4>R{lD*CEEv)SyWE9g!dpp2eeahr+PWDAcJK-h~07qf^@5v21IN7GKp$k-$2 zmUc;Qe3^_qq&Xfi^Qm9PyN=EHx>Enq+nnmZ+9;Cisxxy`D)!XO?2=&m#$|0vVacBK zf}UbWlb)49^2q1wxO*&(kH}BwSnNT9p2o(lmm}`>*L$ZE#qM!-K6iu%ZH`RT-sG5Z zX=b669Z#4~c$j=21s-n*)8Cph_;$kL#N$?_iv7d~9n#o@eKmm}a4dm?+%Z zwWl-g8I#P;O+CNsu4+0?`y+Y0r59F1ov%1c_W;Cpz4mEcVlC|h* zfTTraV6!4Vaw;q0c4X-P5~I}?bf;P9kMa?3zVH@fN9xc(@mBCg;20(q#bwkei4fjuL&D+Nj$*n4x`6^8T2iboQ$6U7JC1i zDYy7Ir_M5|_C1Si77{qc$Dj4^mQ@0tY~-u1zi15IOgMShW$vQ>*+Qo(_9bk|A58g8 z*1@IOZtK41Swx!3TUqF87&43OM0W509!8klQl%o>Z71>?K-YV%K+vya%We?PV zbJ^=-&^H?Z7yHHdG^2keO5F>LUr~a>Tkk_^zXJz=X5vzBa6LSihRf%qN-s4tGtg z#c{*4p8Rhs$~T{r^W-a)pI}(KaL;5efIENlTgcBBc&nNBLi_TFFz`->g4<5t-6l7~ zF!`*%;Gwp8mrA{!{`Yv?^XXd0d6gpjDmC#(-;dY7t*+wv8_U%zX}1flRRel`BtQNG ztZiVn3i(E0s}^I>dGE1UG8}RNyi^}(6_u}db=>xXQ`uiLPGG}4%mn>KF@IP2Zrnw% z$!Qf_L_mGKX|^m`e(^yZ(mo_bIB}^Oo8F|iw;aU{zEO8t|sPIs8^i5lxO-HB&UE?p1RPPi7j8ZW2|PSTviJjKX_(LHp2 zF-656S4+*RiR_-3x=(YLGldT2K9`MkL!Fy`^~PYquPJ`_d9RhVzpW)N_A$>H;{nK2SYP+t;dZZ}Z3z zex09RN*jgk6kpvYR*XJsof=vVSnY8VX|%q7$nEgQ7ZR(}3oM6>f5_dr+riMga_Z$% z%ss#`Y%OG=B>In_d?ycREM|SrCX{&&C`)^GXO|ugw{>VaAmU)Mhhn9^*lA@YDGl8n zOtG7|9<);PIB*i`l`66EZmB0$g1+JVRfTJc^T?{1*W^6B$@o%KZakuQx7v4Wm5|GG zfCnGJGC?)JU;pC5m-rmfX|VT0RU}7D?(dI}*pGN+I>dAAZ?E&Wuz(Rz4~Qt?W;to%FgY<%0g; zE1l{N>xiwWbZ;HF^$gPlU`p$6vOeM58bfX_^{~r>Em<{e{ggCcnt;d;!?3g@{*iTd zWJ@`ml0-f}qNAWodoN((n&Q*c+3NJ@={%oPY2~0zibwiDtJg=7i{@c&BRd`57syyg zsH;6{Qzc|Wf+s_J>eHxiY0vBHkQF)6EQ3HU-*|$5&^lK!Zt3S&zMiagq!Es|E9B%- zF+t*zK;$XF*2|=zHLYdcIX45%9Y$_>)h^_V^%syoUIJSo-r#pDSIxeqiK2$I5tGJ= z9|VwW-0qR}hF0O{II5J0iuU?fECij#9j@;_Kf&yHpXelgJG^@$&!#4j{_LGnXXRB~ z8(-$B{E^*@e|p(vDERjMW?X#b3S;c?L@9SdyzZ(|$a=h|@L8FlrBh&KZ7!!o*|csW zW3Pa2oRq_Y)t~Mr$6&WemzBKRlw;w7!iIi{fB0JQQ~GGV?+bX!Wapu!+bD+^)2fAe zLq-?3N`A@b+Xwdn6xKK_jXBfav9iv392aprGw$5UQu73E-zPCcK+ggK^YvC?%)yh; zu&tSJGU;nbdPSN+YQ_la}Yw&k@?veU|Md@XG~+W|tOUQ~)7`ntk) z3+#?fJ4^c%d;vW7$@)2YgIXV0i1QWCOP_-%!~G3{AXvOvpWETmiLQg z43v7050_s6vv)Wc2m%J}+5hPAHWTVR^ehvtV7P&n=g71wF4!rv9)#DKtN*c1fwsNA zG|`ltjTHH12Rp3ZZobQukv7@@dufus=&yVo$HoW<% zS%YueuCyQ1GCgla)7)pJKIvoC_eZlG>~A`1oU}4jm@*lbML#InX3d_$n3+-w!;sjU zhP%2`X`0v4rJ?O#0}ZLS8|-DExS>OF-ob}`V%(JE?UVym?&+!29eSWVyg+bLu>Ec3 zh@z>aXkt2&Mdm|PLt;=`X@X2R^9-|Ua7FPKLKgD(<=99O#wzmkCn)yki)&9+gO@Ln zvLq=cm0n#(d@*u+GQB^jq$V0hZPOPAVJWhykmWLfM!|1cW391|BAwF`cvL2go`kN-Z0xahGcPrN zqb&?iYP@Uk`#wuy!yrK2Dp8%OhBpKDdypClC(0_R&M2vJRf&?#@R#ogQu!7 z_GgsWw+6ABNy7aK{R%`B8<%dg&6RC**KzyX(!*OR;eOL=Vv(0fF2#_kwW_}&f^mu> zUJ}8=PU97A0|y(AwjyeZqly&%HsimbSlhDQ%hVMr?ieof6zL-t?|D!RdB0X$AtQN7 z5$51YusyV_Fd>~al*^u*s~sPus+#^m>B|X9Pd`&^8k{z>xx9I3Q%FyeE)VS1<_BXB z4&bqXc5Ry*$-!Ow7Wrbg&~8B}W_MiT+)`t*y5}B_l33pWq&VNzeBZju)X_vcIm4MF zCvDj-MXQx66{rEF(JM$xeU4!o>LdTZ^eT^em(g_BqQma82|_hgnRJ%XNM+H){3PtB6WEDCcCM{sI%$ce)JqGrs0djeHKj zgB4vh5sIF_|J3@la2N_!ay2s8R?PfrzN^9a+z}h=n9q7y3;D0g3u|^MC1Z2*py}xN zf0@v;p0kyk^Fhl@nvc0CQ-008=*oeOwE6We*6A!(=|tX1&ohjTELI;0XWpH*EW|bAXA7)=U1v3-0Z1s3wf@k2sng6LxhQG1aK;P!8U>bgAhS++mZA#huz z8VfX!bbkx%llQ3`cSl<)<#c3<};YI*4=M|#-*NKd}O|KC!p|K;N&aT}NLhLX6p z5Y+v{s}-nw920ac&y{e}TDZPJlFaX4IkAxMuq7zaZL%ejOh&0YWYWKM;nA1F`eqYDkw>?8#%dBkru0ZT)dI$a#BPRc+(R|?1Al@2)c#>ZA< z(p`pUl~{2x_^6k&Ue~8(6e4$GaLtP%pK7!ShOlA40ej0^U=5={Hlk-^<>}S?aUO}4 z{LRyQJiHh_7VQS$k{DTAAL6liy!!z=z`yubD^hG$WQXXp`A73lUrdm7u+kh7t9xN9 z&B9plj#ahbVJq&x&$mz6bUa&>-Flo%gr>j!1(u+ayJ6rP$CNiFXnc|$rI5$-22_oc z=66WxA)FIC%u3v~k2w8F3*SDPA-HGZlV?VOe|YlDY!_(PlT zzF*UqhDt+?yIrjwJvH3n*@eE>Q#$BE?J?p>siKHO48F`b(a$RW9sZhr{~OwZzD!}e z9`L%94D>{;XPhjwKd$AGf-Rb={>kib4<{%4>K)-vTG_S$E_dS>Hz?`xXK>ak|K%gNL66}*AXUE1bqOMT;71s(2es8v`_O$_9oiZMOK5_W=|G98LZ5C)|C zZ(+a5w~cBmFl1|5WUq!kXn)d}Cc014si=BNk5M8ssa}jGUK}+nzivv`8Ja*5h+ZmKmGx4UZ*c&N~(u>!uX^1yr(4+CDd6o9{{$qi_8O?}qLEx>(f$x_@`T;ju&MpDmVqPV+7B2n}eD zqEH|tI*Jaz?E>ndrmh6Lo-rBn<-cIqRg3 z9XDEbi`c&b3KC$Y!H)AQI-jh|{g;OCdOh*jUef9Su;l7XP5k@QKC!??g#kN$%M;wj zNCa@?KSebjTs4EYSo|TVnbg4x{pyE7Jzt%E2QUV3w3VtfRD2r9XPXivL$;nR)ow2D zigd}}b(&A{B|sS7nS}tn-u+W)+sFPzts?-nLfzi;z(Ejq9R12>OwEp3cU9?$;%sd%fsOfai;3;| z1wiVrmtW9l;nuo!_3WWf4J1ZjsawkoQP%q29mSJPp}_8@hHk>neL+V{G6$X22hwwaX>IWYW{5L(NN%Nd? zzgyc`5+#jPBXCJ5Mi||ZRWM`#jx-^W01p9hqJ{2sMdOA7dws0BaQeEEvbO7zyWPcf z4&^M0^x6FJuK!tZDops~1dDbnD5lw;74|ArFu*wqbq!Z6Ha(hxsWHv} zJl5CFW~v-s7a>^5Zf8A!U|}aOZwqozQUSccV#T^o8KSnnJ#_n|;KN1U{s;357{#XM z7b@GF-n#h)bC@I*`HJtB5WiU|&8Y1}GW*I7oa7KM_V#lz68E!&@-q6{ApHlvN@%t_ z4EDx-w7M)xnaz2WDk5CLwoVcDdXVcJrF5uKaaMNaQl(_n1hMt9LOOo}?q7M2?fk@o z2b}zihmMX_${icCANwhvsa}P$zfrXith1;RJ?a``cs##$WWnfuS z!isi45MkkRY%40sCioR@%km^cwg(nZw$oshN1E-{bK2?<*7AsSR0Zt!k~g z!{to(i>3T~xO&l~6P)Pid6)ht!rLs=_W&@Mo&Wr%neZZf1oghb!k$0I6vxgcwfNRg zM+wzdwe-`W>Z6XD=U9grPzzBPR%V2xe#J-5KG~Gh0TKxKXzcHb0(-c-4(B^KKhc#2>(D~)>z%&E z4zRz++z3{rsu9E3rvJ+L{6~px^P|p-Ivs5M95AD(94W1@vHDVk+1#4HagYhwb3#So z(B!#@;aL|$*x3XBR#qOwY9^%-KHHZvqh4!{`ejO*Te`+cnoAE4-saXTNy3CiQEZR> zR1)QIEhG4K>@RWORv17=th0~W&0|KEm&L@na3jqDdj6|+Wab9-v(07E-SfnK4Qmpx zm?12sG6a?DrU&F!uKzo&)5aDNmVP7GDOWgZ3APkMqhPIuY8@y;g-GY9Z?EU9PF44x zSS5UR|F;5FWj3xT#@DTR%YQmtR(bSlx`+xY|6Tz9hm)RwM_vT4Kq}Yno+e;ewBZaNyWIej8>SZu{y9T`Qhv&Ed9Gm@Dbz-0x{$y_F{{oF> z|Bq|s|Mc*wRy2>yB|_51fi{mEAP0S3mzQvZ2Goo4+Mmwr@BygkG@A#yVm1i+Y0I$m zpxl}?W)N9$CBR>M6+txHTv`nyi-b&(x*da-;(2x3!hO7VRDitqdCta6Pl7;Ih&H!Z z{~8&usrb2-v-yNJD^wQ)cze2qV=DjnguXwD3H-)QFrb<3#;6QIk7gb3&ay%S4Q>3( zL|*k81Jtn%m_S`wQ%+@Zg47GPvOtuz@*3)fL%8g{eooxjn=Y7HFvkkoyJcCVdCG*@ z?p}~C6P_%0rtw1zhB4%teto#ue-1*YzoXobV;JhyX2Q!+`N_8-)Ke2$K5d4i9U0>D z^6+XlW2EPjB&*Z6-)HlIy^FA{cR9M2111khvLeZCXNY3u$55KHZjN~TyE&4JkNH4m z{^!iyy&QtlE33B^nZ>t@KernUy2fkACL;o~2J9t(hPqG~;B53}Mm6(v7r(~Uc7)aR zMg+#W7x7wn#od(lp742_q3uArgFDiOh?3`m1-H2=MB745#Mz5)Y0yD7K2%dgD$Y!tf-7)6hcuq zh-4)2w$z;QRa4*jr&gs;L*qG36~`Ij>naV7ptaqQ0OwD{N;hy>uxgZ^uXxGis@2e& zoTUL+k)BR&+IdNeJzmzTNlJ(FSz|R=Z$2PoO)I*A(oa$}>cb}Yo{itSvG{m6Xt;MH zai{0yffdSIGCV~xG3nf1E0e(3B4*SN#eR=U)8!NT?dKGpkjW zz86GS12?0E!G)wKCFMcKSv;ue z#bAK*Lx-d^61&N;H%=+1M{#)7Hs2Ph+v6?l18ZBYq(!7`=_x=cO8UP2xv4?wpJox()HEMDX^)g9j8TomEiK4*QLr zV8=CLUKQt6S#Y)c3%Zt#=j82x&dD!fX$7g_+KR{Qta?!dUL9%I6UMuO*`+=#(ocJO z(m?|g+;|PWv^SmI^L3;k>!(wy$}26Om?*w%5p|_e+b?S~uQsXA77R64&U^nQ1G!;X z>sIZMR3*9DLReq~o;CDyT>`s!XE{SHU4#j-f`k(VpQ|<`nxSHwmF3Lw4HcGagYk-TN~uXl(EM8~Q{9;4|-=}}o-zES-*QqDtSC7cVd6u>Y$ z?&!ec@#I_s+JTs>a1k zRG$NPLBuYNn|U*=dVx}DMU3HrxW3r*QK(Mzy7h*AN~C)e)jY4Dt0elFKky1BU86+g@{n=HIS<$1X8hqo*19=!1ZkMWJH<_h^G8+VsD?{209UmtkmnPIu$F0c8>w1`wHc{pesJB%URReF zr=pqkcQe+n35T(&l zPGHrl(_RfMRlY(9C6T_sPADXoESzV!N3d=sk?Orh&CDf1onpXo_py(xtbuj!&*WFD znr|{%Em*_Krx4D>C{)277g@1dZLb=7KRNpR@{#hvluGjJ;X9XyrqfiW9rv$2ih-s% zTG#v;q@(B0cJme$8OyAFG;t7OJl?@>tolyr=*Bue{i!*c?|sVES|B%6mGL+YcH9gov3D;zAZ6JDn+_0-SbmLrWYVYD?+-~zmbLggBIG#sU?M`YDTz?zGq+Bto!LMrFM>eHuFG#V zeMqT~b0)a#2{TE=ruV7T>iWNYsu_GiAJXe4hzAbE$-AjipCzbt2VxpcA`?YQeE6&j zNiXahkfXJ3Q_5?pDmj@g^O+hRqQzKzs^+_M%b9@WD(DCV_P)#r48(wEX*wM*3iD8} z*ireU)!|(IKP3nYo+_e`O}p&p8jv%H*3Ag|Sy^+D;?$KFEq-Igj(DW5aE;gEfpc|N zP)2%EJ<$`DX(KFaRAymnI7z)+emziFr;f40S>sG2eu@P=sO6X3v_<@=x~ZGGru!OE z3F$-WwKUCa+MW$#o;y)2Sr&y1jyi@8K@}GYfZU?1Zj3jaA7728MIii5^mW#Ek)Ofz z;yCoIkW>lo20?&$`w|~oBzF`)*tFY@Z(1&YL(s9ZX2dsgaFqAWF{o*9xXBs5Tjl*#m>5Z!$)KgRQ<4B)J@xNFN@|A0?*9!-O`w3lPV$HeW9})l~Wj zN0sI26CDb3J>{vQ6b~JO7_2RGEyjkhqD8G))h$Ei?I>#{wnq5QYIIHO($sMi@(qA$ zgCr_)11{iA`@l(yA59uavm=n(oduc4&=ireIv-(@p|iP7moBZ!UegCN<{g*rK7SZ= z-xU+9iBSF8JmTrNmi+N;#fL9^ZuYOFd@SPT=+pDlCiQ%ulpv)>Qzkz4Xd4#&e$Iim z^nrseqSikyS&mIgE%#_Nr^K22VQ{ZkoQ2pzUJDM5>p|VBp8VO@Vk!3PxF1N8*9&!V z!L%c?$8srySe7~av*d2&?oT7c{zubZV5Xwfy|12_Xuwwm%sgkU=0FnOG_(hIUv@jyMStT4`l53h zaIWbCkaW%uB1h4yxKVhQ#WZ71B?KNI49fX{1>%b@c;Fed7AXbREmHgQh3{IsrhqZ% zjxg^^O+rG|^>JQ%8x2p=h064hW&pn$gln-s2~`OiYV8)bTS+SqU{vRp?0t~bp}Ri% ze*0R^vT8{4NWNx{l4A(Rm!VMC6A4^PfVL-P3a|-kTw>$KQ$Jl57APo~Pl@~4AX@+T zbd(*kpcEqC)c!an^fTp?Kzl*m-E*fH2UqN(DYF{OV1_!zoO`!^SWa700Gi5@=y()T zxDvp12C@l3xt~7=k>ANhRH=;)C=PTA_q!+gC%-zismSV%7|>sLZ6$!SW36+_EQqZ@ zLSFgmc&5o4Jp6r|lCqlP6IkR^Ns*}F_tAXT_WN6e^#GZubBT;KsY}4DEfTq|mN}n2 zu{HkhZxC2o0_l=2OnN{E)h8$|LU`e7SBfV-IoEtZgfOKgZ~J9wLhr@OQ;JBtPa(8r zx$&F=)#V4wGW8Wny6*O7^U5VheF@6Mr@7jeWm2KFKv!=?lZ6J>$KIT;Y7au+PdR#I zZkf=)>IxRn*=v}i%@MEMkgAa=n74G%?)MX-$D%itzO89AvpdiAhK!?{1WBqD=ddm? z`OFaJVay6#4wq{~50^DSd#gdE7ehw3+#XxJo+_WUOiF@&-+D?lqD%KDB6=+*@!FY#n``H0fYi^zW6K+HNu-;v zao#q1D8u_9K5e-1t75r;W(c3@DqF1l_>OvH3A{A@F1V;4$0iNLZl03wDJJeX+X!UF zCh*hcwD;KYHyzb125m7GnS!J*iR2hba6)O_W{@NdvpJPqyiy$ibjcdzXGA}R`ig~) z@m=2UtMZ5Uis2;!^Wx#nNMv7!i=)__vn6$&6q_tkl2R#0Fl?Ra%ZdgZssN=`mU>f) zISf;d)95>eHUb)WvGr>=eH|py2@)hl4y%UK?H|MhCxz(vr6U+Nr3OJ;E^F48@d?*% z%vjm!&aXG=t@&&m^AmSrw}S)9t1Oa^fss0lsGeT!bNzq z!ff+9Wj=@H0-I*|bgbcgYBQN$J`SOa&0*15_kXm)VkJi^B#KN@!8JDKT%X=S4N zj!tPFLV)>~C62R{6%bTPLwrsoLmiQD@ko%@Dz!EMFU(*=SkxD8yX}xm^@JYm!5P zSKEZcPIsh}zBnI}03*c>IZhCBC?kd#N@{^EGxTmFnDT06kDU&&^C7weHO2F^b1jJ` zoL(qi#B^LoW(xk6XbooL%;Mqvk#cAwRL_#Gtb8O)ezc-vj`bS3RPU@P#Smf}I;EPsh zP<2~_b>Z{km_j}WBO;yb1Mr`|6Dq;uKd=w(u0H$VzbplLoqN(Tw~f!i{)n#Z{oc{p zSq`j~)W9|hX8Ry@Tmj{G)WsVbqDDtMPiRYGRUC~UkctVb@qO|7QA5pW4TNs~4f^aQ zf?+c{I*U21>zJhf3gYV!dx&&5WgJkp^FGntCN>a;DCu}d{0*-ev4yIeqGd|Sd=xvs z(XikGl+7myGg$*3NspB432lc_w9IXgTmS=bq&;L#dxa_LB0(utJvn-NX*3tn5QI^! z!eC|7>&2KoaDv^?258XFh-1?S6Jo-%qc+v zrk`1t%Qfy+X0?l;KO1)Oy%3J8%zJG-KK*PK)`cZfRGKqiTt_~d@R(W6yD`%~vJVnT zEGQb@=+m>a|JgE+e`T#%vCuQa*fI=euS(z)J1p=FwP1*)nK0o_L~vw)lA$wdMxg*b zA?SXIZkYqsTQv9kVL@ElmLKe5tFNiw{gaFK9HXh#d11mKlJq)Q*n&|2$Z48Bv1(-V zTvK{%-Z|lP;zYt3h9sh(#@S}3OMP}Jf>kDYaK*E*z{los6*1);s;aqewbClha|l7u zSk~{S2dpt-78F>KhnX6Bx&G#a&l`j&Rx`V@cKC{Z6KO{3LM%{N@Sg=^%)(OP?PJYD zoiwcq^~4Dcx3%RGOwH!#J0f1|bfmDZik{C7KZHuMOI%-MWTr?&<(C4C$XVvkBlw52 zgyr1tPC+)vsO5nsAURD@2RJ-J#2X54TqdxtpU{))WMG_vlNzS!c@XBUBn)sT5UF4`(*xH9 zBZ%)8-O{MeQ!H=D-qmsU!sKUNLuwn zZQpG|vA(WI?MpmHVumi1v{+fIIKKBu&O6GiSHb$$ou6xeg&>Ce9?QCkF6lva^bzE@ zc6%Xi@1)^t7qdZrZ$y=L!Y2ct{>-$wvOicw=G#)18OneJw9|eiQDtz9LfpH;a7UEG>e!wL|KcHH9+5S)Z!U4IJ^U>E(4B6RBNOjFFNEbc1624)3xvQ+& z+or~PV6GVR9ee%|>GUC<^3i=2C|5uUnr24OGkML#p+gw!_#X60NRb(Ib4xu`MRl}N)qQhQ#W4{%_ld6u$+cZN1C`n19@A(D*!9|t z*#Lu9#L)E4w<=r@2inc_AgOHCN=mm!95=Y7_jE{=mUy z$UH@`SVt2@jKsD?U^H(vLQIjUvwFn$Z+o{`ud!zwQLE=@*1Oli8cnZO!b$xNdb%1w zOmvzqgas4hr5EsNL727TptStgs)U(SYQ!Q^#=`IkCc8x`dW2Q#ts~%(Uiav}0#0w8 zT>QtTf4W}3--fNd{gkyoS7!8?mdIj`k8kElV}+O^9v zPA%KW@w7_EC0J|bE~K!T5(|}XKR|w}>&<8rh+_byY1Tx4aPv*nH9PZE`DXO1NZYe} zYke+&4>%2=ghhT|7iE+2i|z)iFlIQ(H$^3G<_2J#2YfrUNc)EutAdA7n?AbfJsZGv zLEg10?Q_wvnMNY}-8n4NJ|Swt`IVQ0Mnq=2Oh>`0n5omTTut*RLlshues3R^V2)P;zFw=vQoc1I;(rRN-vPjsc1Dj0YB>Yv9SIy5MRF{vVjITI#?1iC9x|BntF#M!C zE(fs7Q3{TUq)WBWN%gR^%{y0CUwa6$3!s84=FuHOOq%+~RDD?zJ* z3?IrdU!`Mp*sm_NO`OXOH^h&^OR-lHJUgEI4qFs1Q1 zb5(iwD(*QZE9zYY%q^!1F5b z>XlvH!UBVjv`3uyw&y4;oCUIRY@oU#u~qlg2Dm$`!G8Wb5a?YHNh;XBmU(CV`2YK( z4!W*V%XxPrqyL`VpzURmX5~!v?{3cJ7jruD(yxyZylUKY8#U(t)z{uqp#F4WK~Auz zSbVG|=!r6H&IEQ!4q5U{WH%weix`skaz7mNV#shrF8n5LXZD>eO+MY z0XTScQPbVrEa&XHZBw)u|H(T6m%oZ~6@#T}rwUA!gi`W*so zhVMH&F=lgh6&ym?2kN^U^Xy4hX7n8(7C#V4)80l7u-%+5mcs&DdeT!db??vloYBSx z0vyi3A@96?hH6rv`O0g3f&U2)GGnXz;1(4`E#%S4b%wd6!{}D zaJlLEkEXls>bxf$ksuK3cit{9%S0UGBr3)%y7OK2^~WC0+zUsWpD#<4WbOhji1I+? z>#z$lU}Z(^8#r@&CCMAVnsb-zn^&{-J$-8@h_(-)`GU^G`IW7x@P1SG0n&23H{QLx zq5V5*s~Nks3q;$^d*Un!^6)MzOLjR*^z^Djp&xY+zu=4&IXLTsVs)e-fI%7j#-+ z`?vsGJ(=6XJJm7Z0c-F7HNW&tMo9z(2llS$duLl+8;=+^w9p4A&btDy-M$;37H1*+ z{0D-L|A_D4dDPVv?qrxoi5aIgyneWGA=vypGZw-G|LYCnddGQvc9;M84-VY3xGOBco(xpQYskF0P0zE|01wY`ERC6b4Hw55m1I14~J0epeaMLkEkHV ziikwwrkX^zIaf5}}`_)x4r z{621(MG5yv9m9;RSKbpSCpqystycdw-)UrhrZTMyLc%U4&0j=a2^ zTCVGeKlLJx@)p zi2?iyC`T3G5oYA?uIHz#I_cMEghAaO50x_fglB z7$8giIQx=-?pbl<##Fs92z2@sK-SY|u6O&7`Ve@xbhG!4Q6$_cn-k}~HlJ)}hjB-B zdvrAtK5mWIQ9sf6Mt;0mUVlf(3DcQ9UY~F}!VX%azCFf5Vh88}Zy-+2JTThDj5k4{ zCv*jYqG62m{&J{X!e)!6(>e|PyDTcM2Z;q;AD*wSIPjxOQcHad0M``g!Gy8Ubxid8 zT;^meg!70sQpX+%zu^_JF+@ZrjPpjX2r1mo-o=0JFZQgg{?W7@Pv&?!_(mhptsQe4 zW1qyCV6UVq!@ps@6H1#g2r4$0gkYTK3rGJDFg>rL`=bwPDi8n|g%R)S12s{uKtDb? z&cgKC_Ot^*U?hjZEh(TyEcNj?ygvC!*nLc8&HJDxiaX5$d*J9A8 zMe5Eu_;wlAcRTSW;=J&&QZG9Qw)Zg%BnFL_yy-pV6EuG&T`O;mmqa!H2EON^APG9n z1=#~o?ZrzAgQFF?DVvt`>Y{#@P|^4EP0}Kz5Ye^(qke{b!=T+ z|7yra6g_k%jLUpa22jE19C3?_!_z*fj47^$`vWZo0-h+dOh@)2IM>d*%H<|_$$t5= zyc6WQrSmiE=akw-E9`YH9l}-bwv=U@npmuNPU_8nEdZL|1t{Qm@34p^Pcmt_*pNk) zWK(k*mOi4ci$?3;TA_R8f8r$g4!DTqRzQ%1zs!T$M7(dT2e4+(Onmn zzBg03m|wta#3*}{jh{WKa#UJh9#Y{wHrZFHzgePhM`L8g%GIa`0ls6l0v7-1rWrP4 zh*-y=)bTHB#Ne&qA8zU{?iJw&88Phrqxe#`)={395DpjALwPD&%Gj_mnpAm+r zW=;^7nn0eBI1LK=#&8gyIo)Kmw<6Wg6{=7CV(roH(d4ndkVZO@J<5; z%+v|aVpI0gfXE^3p-BCQk8lKZe@+;uC!Q~S#DAjlcxpL!oLsRSM5IBv3}|S%i#>wg zN3J3wmj7xV0&d;z#g<#WSDfkw8Wrtho6!i=MZX9Z9+-KwCw;1?YM_ooC% zYUsT83G+D*DbvOf)~&$Fn&lYp!Mm*n&-^#TCB@@_DKxDbC%p=g=g0hMBRwQN_;uVm zr7oQ_S>xH=%3=SYMMQcVL-7mqv>K9^W?scQc3g!wgb4s@;qeTuKlg2{W*xIV6g>UB zb}qS&nw?F;R4*S(QMq2(%K+xZG~91CO>~6!5T7k5S;bRw!L{@vXgrd6F$X*!u?6}P zyp5#Qk7fvYFZ$ZLZGhiW$4ao*O$@Py98kZ?eN&4Z@*n04vc0etz96a3~X)><}_#m#-4= zm2XdasG!5O@i==4;O2(=h*yPp9BR=Fi>#$MtQ_m@Q?KE&SFkjHwO=!NP9NlM5xMwt zz|@_pQ0j}>rONeO7}D1>aLgT?Tip+QQNY#BBh4=Pi2{`&xsb!GL(gK5BF5W+K~fPn z5EvlMdef{o2^i>ehW$LEk~xp=i7}GUx+>O}9`c7YCp)b6&SbW+UmB}7SNZjaLVd)w z87(5bBO@9!M}crz-xS`0KI!lV!h~-Cn&h3tLt>Dkv`abr!*7H{*WUroG0y+;n%U{3iT+kfeT9ddU**&1(p{>6h zU%?w36?*SGwCEVS16|i}GY&8A({L~pHuF}qrm^5&i~gm|Vz(O}1;3el&DA3TU$Lol zrFN5lI2f4cBN3ct27R&oxm7uIHE*0Z$LH%{7CF$D6K)pl#44y`6&RA7Zv6pT!3}m<`K4kRGryIZE`d z^_f!Y3E_tB&E=WH&}4rkRS?fcK0fVBzha zd+2oGB0c?_d)McQ@#ImU;MwF0)U)~Rgw}Xt!9w-==JT?mKeK=@2zf5V0+B}H4eg?-6h}N5o;7Lst@wKyz0mc5<9pGtx~}~6jSZk{;AS$O zT;y8QlB*&&n+}eoM>Odz>wwyT>xH1xLM;5Se_cSjFP(u#s$EX^{6E?|@2IA>bk6A)Be~bpe*}z(Y|V)XzLFbS zoe#d{Uh{w{OArrUxJtpS)jt{ZrxtLyi+7w}a=MCAC|jA@j(npW%-tJ-B#&-|1+Ry- z;LozP@$Kk7Icbjvf5d-~E$A!tiXaV?#Gn6Z|L9H-fOU&ssN|( zUxNw#86f$;K@R`Z{WybfM+sM@BkqkE`kNOXk?t4OLi2PUdO1NXgHpgig8AiwL01*% z@6r{9s(EtLej(5=`KK_~(6+s31g6;ep}G!vX7#`_KI{2A<#68IgTSRL7pqT5$Hhd9 zA67Nw3qc$H&&U7nm`t8AB^KGF?~p$LmA~{md9}PEn-vo2^0oAc^sMyFXu0N=EIVPp z5FDVQ9y|>=N*QLUyeoZY|5*}%e!Sagb3$bXt^K4l^v3G( zsXKXHrs~ET)i3FDNg0rZjmAe&AEL!Zp4PthBXqsYFx2s>!{-hmkKjpxpDfpSsg)94 zQu^Ov$or9@0NCfj2g9gDwY-u`FX_I(sps(E@s)x9^O>d7^^+Glvgo~O%7aG8fy7_S z`zTHFK}(-jVX5KH+XbLRnKV9lrGTsH%$fYNWQ*NN?c7o?{Un zzrJ~(avW_(t@{SsoUYO+JYolKJQ1Pb6getJjPu!w{jf6$cZs_}(X7A^V+SA-IP9f0 zBXsYrXUXnR@YTWn)hFy-yW^qBp&%ee)fwqpuB*8w8`@-)}_HRzs=(*8Va zu~>(4xrYx**as9q+d1AWYhUc3HavK?lKZ8090BNKJPX-JxebB`Fa}blIO8fzPJ_%) zi25LJ|5-Z_63DEJx!2yL^R-Hj*J2QzW##HmeDtpN68qeB|5Y#bX2S=9LZ*z9(mAP~ zz%f%pGhNPiF|*sGe)BTLSV`;=K<->veCQJi%l<~Dqm&PiW=^M${(K+8c{lvf9G{20 zwBG8C5tuU(>ik?6cZ0UNh}(&4v0p9iOB8cIUJ-J2&%_H!jl_wF#JECeq3z9^<6knS zq;7Ai;fp~ld>&5=fb8ZoY@M3hn_n_xCQ2mECB89#J`3Mo{IFvy>zSiofxG;Es`Y~R zSyRUeU>Du)Hnnh#*I;f7)GItA!C!s0Vhnd?6;zN_;ecucB1(y2^B*%PIb4EURjB|j z5ElnCK>5=&xsFJ0Ma2WE;5k;H55;*6houCsd!b(a?^6eUgocpt6S6W%MRWqw>yt?S|-o0yqv)! zUx%;Eq#Qeous+@1r46c+xXJJBcO^=3!^>jj16M@z706;PAY9(o!4L}aN>#lu();NB zNav6?WEYSai_C{x<+?}T8#K(5#@ynt`9(`40NIwQN|v+;@2NHG%j*$GT>N;*w)PHq zWUE6aS*c7uc)3(swP@dtjKUl6q%RyGHJO5#(Qo+MM^!;<0^3K&DkG+NxL0{eO)62$ z=tYoDq;{`-KH)4XI$jJAPf_okkBy>w=%22)dQsLu~=RpueUncb=kYOb+Z&nCuT{f}=76K}(m+L8A}y%B&k%OZOo>sf@Z{U^eXO zR6T-JuG{Mr&{S`ojP+}BeUcar#6E@NlJ|m7$L-6TtzBeCJ&gbf`mp(3mpY%uH#RfC zNU3dV*OBpgrBz^DBIyIjBiQ{g3jju$M7oocYSR>S$aKroO`y#$psbqtY8R-N7mPOP z`-nDa_GTr&m(Y6v$-AVY+VQ(gT>mD(aMJkX*n1$YMH0T|RIs zqu7<~@96(csZ);&K7E}4Sfmu_p30FN1(YRM{SS&o8`nDRiYHDajmIm;2Ly+sRvBY> zh2Ho&J0AUl6=5*}ZoGvK+4{*~FQp*8UQB%@2{fFRdw9;m?4gcD{aP3@Mm%srR{Poe zr>~}Y135(z8t=>=NeV?im*LVG6OtZGY8gxll+kY&ecqugg6X-M;sWnx$)@5Vy>7v! zaP2H=QGHO!xM6vpbwKuQW7+NZfe-*+VN&<}OkF^UC!Au5OzFUnz8o(ea!NmAS`CtB z8P^!?BU`}~P)D6Ae39BG+m98uE`Rl@VDnoOq65FGGCeG^#$V7!tXSiskOHn?=Py4N z(*MX~6bT_Dq#a?Gk*4tXwm405zTZEgnJ%~Bk{M+0MeL^9~CXvh-F>`+$ zRNq&h=}8kS6_>E4M<#t+JBSM(5jNrfMz<`2F`=mPj27~T)kx`;iN{u1574FfKZMbY zIGj@M-+Aup=|T58Y6jhgZ%Z`IXNf^?sd&3e)4XJ>l2Vgby(5l4O^Wx zczeZ+9JO}T*=Eu{|9)&_gz4*|)XG?imvl>J-qvGvRDPo#>5s*+Zrr9&$H{U%&bxD# zl+8F6@;&hcyMsW$gkj%@DLG(&Y|>~!%i~G8?K+klV;{Tg-+9yC3|51zRQcOs`49E1 zBI3>0>qeM$bjk?)CZk1(OW$T>UYTzoQE=@$eWM`w($0wk2<{yCwBKMKrh5xowL-KY zhy*)*q$k7%iq$R0<(QPazS}IN1IE9{)B7DAEYULiS$eXpsC%)d=0-lfD*C|CjGer` z{1!c)LKvyKl(txa>?UaXI}cL6o~9}%)n2;S(s^jR44}w>@x)vP5Y0g1$tqip!H7| zd%omC&82qU$b?#a`Bs=dyN%_mt)-lz{@M6S2p-9uBQ<%$`OSE{gGNGnQe^}XQKwBDeVR{sm33k~wRI+qCjK5|V_E&U!<% z#zJ>I@<)Nt)0#7;z`3G%x9NmpBXVK&O#YXt11O9!eCGCb`R}4*zp1<3z8eE-Sd}gU z7qy%Uwl1FadL4JO*Q^V-N9(6qL?VOhpjBd_d~n&_JIPeY`l*ZZDe2}yrj8^tbSGpj z!^qHR)TO6J65N*GTD__Objyr@lAJ<{Al7URF2gk}e{C+>LsdtPII&g}RJX(?p*!k8h<$H}cV^v5%Q2 z%<82~VA-y$(K_v&lK)(e^mYh4t$mgBNw~mlII8gi=9a@xx66J6RA#%=8_{e8-a?}& zbMo$3U;RS2T@0K7@-tSHcQ_(lGAC`sqcx1k)*++gAxo*}^%7l2J^DvaDd^Hr)joyh zCU)6|e>_I_H>*-fS)W&vchl|9A0ssCSytBl*ytZW^dU~Vubq0xU07-3NS7I%Tls8- z?5U98uQxmAv>V&o>z_z?)i?A#XjLX})-pSbp7gw&!+gZfI2#y!o7J>VgrpUZx8Kn{ zk$(-{R$kN?@FAd(nd*`$@v~UtA$YA=C#(<8kWw(z7jmQIrpe9uCvU%tfDw(i-c!3* zoMkq|F1Qs^ZEszjLU!NcaPDDbAzvqnnFiWyYHDVh=RhhpVEpZCMAdLHkTAn@q{_`i zyzdohV$53|_w<;M`s7q76ETV11>RX4cUjF`VpLJ9gFA2Eu$z5A6AO=TTDOLJ5y7=1 zMEjs^FT`3&ZcIytJlwA%K(Jqu60Zfv1g@VIiIf;u0DVHU0l-= zSdCL1xZex}NJ-IFaNdH*{JB+}zh!b$(9GoL1kjTYOAm&M17*f0t2t2ziYr-@bC*hZ zs0B-bF2N(#T2*E5s=#CI40b_z_Y`8+2Je>3Z>Kk^l}9QGy^fW1J2iuwv-cP5tXa?z zBmt2}Hi-c&-ro3lkeXX`m)D$Mgk4+v7MP~cxfi2I!j1xy;{cyHMaRrfu#P{EiV*Yl zEs=rwF~6qn(R~aUESlYz0?)=j~X1~pdXpj$jNi{}I zek`fIh2Cp?a zSbJx>Eqe(!;{o=bc5@Vbz*BuXuuJO*&el>41Xg%efnSkaR)HV(t142i$WS=A_5mBZ zl^-;Kk{xu~wfB<92@5hbhU=UIJ zKIILupHCy7M+U)ct5^s}qiekzDyS3h;hVL_R&B@Z$!`-Bb$ZuI{}4HJyl*|cD8mgN zo5=|??~-<><#CY?F==57b7oNLg9YDnZcgci)KvxcA*C476gp*@wWKixjSxLj-+1Vi#=c7!i*G6cjIHZ9JST&WDLz zu2wu`G)MC~?#}a;8M8-%cEuxI>h#(`2*i19OIUi zIwKW#tjxW|d!f8xjE33rvjp3D!u#4gqa&*_){k$fyeP!=sph-J;4I62NjL)MhTRT= zyO=1d0w0FY5rlve8>ir~NByx>JY7vQ=DGYa_W_@#pwL!z%~fiUr>7>?x*ZI$CGOa& zP!YT%e9qk|uffCX8r3p3HN^{!pHM z8@`$D>ea>;$uYf&9UqHy=n&##{?(&6CD}$jbv)7_rBp8CSL6j}I8U!KBuB9f58r@J zajDb4f3bUA2)kSlOYAFKwMwAMtY#}V#ZYSsx3n~c%gZhadeJQ=mme$t}^&u@Zw8k{lG(A!?H5P93 zS^ZwDb?Y}7?&i`z8|00MGp;E|9ow+HR#=S6nz zePQO=f`if6DFKmDQ?w|m~KQ_FD56gH{JY=^&e^+1mC#xGb@a1be%FlnJ zkM96Zwq?uVB`&0q zKHdBJN$E4~r6Gsyq-y-fb4EF!X7+7h8WL0Q5Zm&llZ*aGFw}h!Cei=N?<`C&NBw{)2>f<)3~| z17O1Us*R8emSA!4Kl=Qc%~k=Zx6|K%%A8_5cc~Hbgmpzc&AXd*W$InP{NJwtev_Th z$1Pab>LAkrknoDsUGEBVHZ*uMlD>{}zkE(zK0oBBG}!C;uxn%2@c-4_QbjV=@ag>= z*>SJ&Am&y((5vPa6lMijr%2*$;&BK4$wH>{lL!Dh`T6|`SSU1auSZWi%epJ-{@t0i zTwOyCwF6c!cJ`(t(v5n&J2&{dtKh%oqV=brsQVQ6cf$}N4RVbh--7L@? zD_n_%ox6vpp;)_DZ@Bta+*F~mN9({2x;7~FebvyHjAhjv)f|9W z{(eh>>c4m=o7GCIXkHhUyOwQR+ThY$C-s?re`WB5f_0Q~%Jhh9BxBVN*YAN7P@cxw z-7=t5jTW+ach&5e?m2k2gkx4&W!Mer$eh4fNhxvbX2Om}BIMkSxkCQJ@McZ9(K&r|LwaWy`PO=;&AJX$tekzV#`<|>8T(3qhP9q!0;z#9L!kgB+my6rKx$+~cf-7Q|K2#6hP*(yF zC4H2oDUF)FnC?0_SoO8Frz{w-aaSO!6S=6v|Mcur62~fEy^>u_Emms&aysOe&x&H% zUTs%_bKv8omE@gqmo&}Nq{zuNTfcX;uC04-!6cSYc{Yv#b8osC*yH#%7LQtHAtr=v ze%a~u=P08flhm1Gje2XV@rr5Mz;hP_+{EiBDmHzH76Fk){Y!sIxdK#}^Rw{Jd>KC9 z*Ari=ho)h#%5)Q9+4n_S_=23R-%?13;MekyJ90J}kI~VCQMD(VqnlO4%6{esLDI0- z09Tt|s~vc=kE=1R;LqAmzKG{~I4j2CF7w3@!7NcdK?QV|ewp~?d;pgXk zv^HkDq)!xeU)Jq|ff;Yek;gsb^_LqMas<1fPcQ+dN3yaesI@4D$oy%4X=Epi7VnrqTpa(J(|FId6 zO-{};d!{mCRqhMi5Mxh>xO#G54p5XS*k5iNp0o2xBY0gp{X5%{;da8!*Nvi(_dVj4 zQ4aMnhuyU>X)$(f;c5x|aejdSco5&&swA?(?_;IEAJg5=8U!6<06hd1ugG;6&Hnq! zbqw{}yF)zeg=Eh6Y66w!*gFM&51QAYjTg9lQIuur*^~!pXh>JaWY(8j^xvp` zs8Ac^GYGRXdEK{1`hdS6{J8m$?VS-$>;8;rXH8=QUN$Y+3Lh9LMu4RVYvBKwCqvg{gw29A(QeJ@1>igA0TUA`KS341b ztMM$MZnHoeJXgNxY_4GMO062hdEDeVFPzXC`;O@zKk5<=clHU#Ri?y;m2X7 zvH4@$Pe+v$zRVtMY@tQ-Uah^8gTN?Kl61%ke}gL-X)^D1X}9ckxzr6T#{cRDvFmpK zx4wNh0guFjGu^+eBb5p7%YTV=%JfV)nMPs@t#NAYdOK$lRnr@r0y*m?zs1?gwvS%# znaGiv@0{#^G{mSpbVPbsm+aW9-Q}-#*k>b8Z`OEHrNHiRUfixz`Y|2}?upNmUK=a& zt~l$tHf0;vB-FQDi#FUj(!9k8qhrmveW~|Nt)_zP{mG3LCBtT=>m?j1adL3!R47G@ zhAImrrsF;pW>=XL$-_#dN$y-v!7E`e`3aKBI#Ih@%Wn{2DN|qI~owsoKp3q z5UkgifFaDbIi@qI_CTzHyn6^sNMuaVe{<2CQJLxW$NNlsHX%sVF!h39W^pj{6*xM2 zd29-^g#>)aU#f-@akA+q;T{XoxFu(h{#KYF=T7smrdk4dZT`_IlBCnRa z_ttuq;R>tv-IwL*)-mEn){#~UP7Jnrdj&}$|1gX;@Mf5Nx)|quz0`Z zM@INcX0R9RoWKk1J%K01CFbNR?NZtlWNEn-`7Cof00o5y(#(pe=1cdE)cr znXIiV+mMX@n3Tjj2XeUEy7n?qebvJ)ZXFNLC9^_3&S?Q|79X<0_?U1jZp!X;qMyd> zlfO4y_Z;MX!)S35|5GVK!$ZtO2Av&ZDlYG3JF%s$*|0Lo{yGt#KG-9`_735j*09w# zY{R=FP1@jNIZy3i+V3$$TKYAYc}3C#e0qw>f0-Er3As#=8E!J-K0)MGX!_?bk7$Ry9WS z+on!$(~H-m00@v8=Nk7`OXB9bYA771AjjLN_av?&S0qu_rrW&Gnfsz;mi8|2l7|aZ z@GH?-V^XRT#OysW-q|M^IJa?vgxXm{d`TC$Q=2CIH9A81_X)X+(29#cM+P-k`ZLmV zX{S3|>pOVOYl$A?SKZXa(%g}MiYB#Xkcar8?8kmpqI5T;(1jVH+5wVP5k^7yg6-N1*Y zB9zv~{M{BjV@2eP;?%xHA;B&<%joKfz*4Tof9T5eZ$WL8=6YWi9F zq5&P#Z$p&F%EgjnNE@ppvpcKTR1uh0)blA9lU)YK8EYPHeg@IY+&%)h{AKVCt+Uds zDi&JK^H+-^k6Rofjob%fFUilN92)i<0iOuDHu;0c;hD*}IJ+}sR6$w8TATx-ydWD%2d$_Sq@Q>KAz;+jAn|IbvGo@*cIo=yoqb65w>P@8#$XeHD!{1rrwnf9@96y5F}z2)%dw*F9wHB5Xsc8X zSoUeWg+V{D(29f{Zx5cmpg>d+w@M1zU1b5na26GBG4#S-KUqh1|IR*q3mp#FiesG3 zK}zk_LZ;Qc(itwg`bU3>3@Z>O`U?@ezgz_tTA;Lr=U})2YXHOJ@g6i{cEttKQ{dEs z0#cL9ben79qo1P|9t!}j)|=KZdPPS(vmyU8CoBEi2+{w)2-yp7c8X|xu-mB+ehzI!dh65+ z1h)X*h<#x|QW)?LJ&y|fC}js^mI8m%oIqSK@b@1p@O@ZvYg@wb>CcduOGj9D(FGgb KD7tF#i(5?wM&g^ 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 literal 0 HcmV?d00001 diff --git a/assets/figs/offload/fig2_zh.png b/assets/figs/offload/fig2_zh.png new file mode 100644 index 0000000000000000000000000000000000000000..bdabf44507c69b6ff099734e4d8eadf70edcf1f2 GIT binary patch literal 23017 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 WS1(;N?Sb&jCI=&<_umUoF8LSl1&2Za literal 0 HcmV?d00001 diff --git a/assets/figs/offload/fig3_en.png b/assets/figs/offload/fig3_en.png new file mode 100644 index 0000000000000000000000000000000000000000..585c27930d499615d1809d5586c1f0f71554fc35 GIT binary patch literal 25025 zcmeFZcT`hf*DeZDqEdpObOl-2t{{fNdvq- z=knmW8wCYp)9DXot8>;13JS|-n)g+nc$wjA=t^v!dMs?%^&21?9$Z8oBR^O@@iWNU zKhsv?oOh*nKSyG0MCIb8fnt^cU5-lzVRj`%s~c+l3Fk?F`z|hLW7!YFA&|=GAmp?8X1;p0W+76JL<_Ex0=jb<4ZEXS|c>wqEo4 zA%@*LTwJ&T872<=WgN`H2E4?S&~%19owlux*7 z$?kOA?(a|BEpeX-0%iD4;CPp_(jp&bCi(kRZeh55jRA{tfZJ;`Ot>^LEdSB-cl8;7 zaK|VfBrc{4iF%n#sKanO@EMEwnl2ah0fOQO^a5cSgV1hV+iOZ&}Zr}d2C@-H5 za~{=jBA3@a5Uh27?(u5fbUq$-#GV=TUB0n= z4pr-HT<4D{cq$|JdR<${FkidBn%g^)5dkvr2FpGkXm!(H=N$swG z2Qju4^HZE_`T>5_F}*$CPIt2T!S{_frn+1K9&{4pD=3nI|2wpqWa*Qi<2go%z}fF3ORcvZ(?Z#qLnkz(#bvCf?aFQ1za0egp5d~|!mCVG z=uclSN{D1RXEI=^a81had@JkcZxX5G5nYzc9TE9l`B#l09$3HTT6d8$=jmDt9vLU1 zM*6GCaQmCU0&v_G_5P#Pmo2z=lC>0&XA+x8_#sF%o^McL0Yh}eyp)$`Ghklm$0%4k zqofWkb~Y!KtX6X353&&nN?nq+#!{pd*!X|DCOT#-lKuWkCsnJVWYWczuMyGyUj|qG z78mZ(Aif^-J1d0SU-|nu^ZiD)z8dg|=%mY^I9C3fH>Cm&yTi=Gj+Zo)#vGpN4qpDD zl(3VGxs0}I`H;#04p_RExt6>TlnvqsI|@HGZ)2v~O~<$WCVteqMJOEdcSH1QL@K22 zwqum-lvetjcT;xmCAr~#N3c2kMv;vQ&hfYEa>=r7g6BwWE$_r(&A{%tySZkoB$wy4 z5*#+o`_MeV>>(Q@q3>EZnoNwj0{13{f%QUpJV#Rfd5pnV&Vr?QU!ao`5`-BG?>Y>1 ztYTeoLBE4V#!{Dp+9c)AYCf0gZAv81>qFW|@2y{?DifGcsn!Orp?(}TWY_RDRTeg$ zUtM1#rJ^5v$vbzgi)KUf*2Zv>IP7#A-gUv34rd%rpByhg74^}6IBoj5uTD`uoerhF zY*L`Tf#~1HYE@LIdN6shZ;Q>RAbq*NqcK9@;@H?&ECudzE{GHSoOfY>(r1YomOKA} z7i%M%+{SvSu0W9f7NcA!FDT2Zb{MgH#fB^?4oA8T6)0Jcy#XTFt1|%#d&$9!56wx< zTF!dLiBZ7#b$`W~eOmV{uli9@QIYuU?&?sUiOc?q`c(<=@l-_y{`S@Ox>9J4|Q9klN+nL`RO@Vnd9K#&;Lnr zWjLc(f!l}Ot+XpEi!)F=^D(9ISI{S;w=UB7{TDfGbVW7a&npMlu&kBU<$5&f^Cjz25fe?XD-IeqPfZM2!u?f8rz1`lw)dLjBMY&yR4h(2!TeP_({SW%(t4&cbd&n z9e=JLr}7`p1VHBl0`iJGPv%U9%{k}IC3zMD{925}UnWdzo?Ls{b(_DO_ozLUsiXJN z3|ixY7C+_*N5wvGIs})ozF5zGd-9G5+GB&CkXTd!~1*b%gy6JVl3JAGQT`iHhU|u6~*EfW)bTZn=IX|GmX!F2i+A6nPUx5)e5Lj`3G&5&7mH+9AzY z)*`Xq90Jnk#$h73xIUtP8kgpH4bHti_cA~Ke67~)Kg}VCMwHi55*)+95_a19CxN~@{F6T!y_fAoJe{=v^jy$aukhmLgxW~#b>MXxEMqrEcm-y67V7eUM$yWDNR#l8k>u?Db9IJ?_Un zO5?vEfJgKJ9+9$fqTkBC9m|U{`*>D1`^a9(+AQmcc#m&uaC+@b?oSh*N z&a)BZ^rH$WKw2|+&s1&|ql_R8M*5+_6r0MwBg9u4c|8WZRV4j@G_t=Ww}#^c(J#F4 z^eoF7KDZ2DUy36&74-&$949A4e#U*6mo2z%$OZS`JinAymZI15XV78vU@=K)+P376 zOjs6~n@qaT(b`ZkCp~H#F5VSOYL+adJ3PNC?M#T>3zS@@@>sf!ti?#kN5iWtj>E;FpMpl6IFBu5iWPJ1D}>EA_aW`cb!(rkXEpdXLv43&=6+u>VU8YK$nPHex6l__jr_Ar&!0SkqBrpg)U=Y(@tGn1Rbho_2 zY?Vm+@geH`B*Qe?e-23}b>GP=r>U8S>xz`cO21Rd^Ffg0WJ@)!k%4#VWtYx(#Vv~W zTy?yh=f_+5-xLNcElHnU%YjA4B63cyXDY57^aicWFYpc%J`>@ISJr|(;z4H@Kgni2 z_PyS%060HK*YG)J8(ueb@jsVdGoH$7JGtq6x^jYxk<4!QBuryb-2L1 z2Vw@-JFyER21-`2zO7^;q>%OX+E4L<@>OQG-yBw|5Mq;hsSCHWrDxXnJ8f1fyPNXfVM}=Fkjgi5+Muvn+*i@%)mH%81f?H-!h-GpRawy+sJKbq+m7Ep{?TF%88X z9U1IE$+JsS$8KJ+dp&rHPdrP~4H-tt-MuU;B{MCfIAWn>41^~|&aY^~S4w8Ket)c` z!;0!>dYuOm;u$xzCE+qh>C3vg-Mr9e@$1d$RMPNRZlHb@*Ri!iwzJi4h7kIqYu$TY z$LuqSw_@yDknMA)dDC8&Me8pdv}O(auj0i2EZ_c@f#$#8Af>F?X1ok$f3Q7oKU!>a z`1_n-e3a+L)MP)D(_uJY2Y^R0b??6P7WhALoT{#Hcg$)UX+IjNaI-b8aGn3ONQ*Zt zFf;8q%&I>c5_dkuvK%blt?4Vu<~ODF+nJ;N_i$EG%`|_YA{ENyoTs_8iGty#9to%L zHE0*)N`nsuLaO~g;*8i|1n)XYC(V>$jo%Rp8Q*^|!N5}^jWa(}Xc2&!nTy7V~6 zoh2A(D4Zo(Da^J?3^d$rGYX{+M5_M;t%MD=z;Bj>8jcwHI+ok_XVBnNR3Us7-d5gS z8~f{wD zlN#g7_+N>8+V4hqk@Y~14qG*1Yt2q(l(eQr#Kf64Ufh*~sU_ zD85Y|cH!;=q`&lnk@@^yzG>A5!?J5*p6O{$`Ox%r zgPKXf4xR^c97L>(y@SY)xRJB#`~>fjUzj>UsXerzcmC)Hlqj^7fz6FN0gmopZZp}rO|+lR4b5ZJ z^fQr^fqK^ki)waTikNt)7E+R?t22em9?yVRdl>78E#6HIqkm@+F8=W!V&mlvpnyJg zSBHP!5&sp&<8(isePPZXn9$)G@4uH9tdJO$W&b3J#bqBEtdbhA?F*Q32P7z>ijDXw^B>I&VToRtX|{P#{qb(7>~Q1i6gM!? zAM2$6*x`;x(<7yd7xe!>Vtnel$8@!~n{k=r^UG*jAjS%>8|Fh}yA<{&u$(q&Fa8yc zua?U_%g>IH^II>*#Qp#>tBln?OjIBFohr1HweA97hd8@k8s4W?eYaRtx z3B6A7);VsI4Uf7mc2Olg{hhT}V>wF_Z4q5p6<5!}=0QrHd$7vFIX$poBr3w%kY!}4Q}{-pC+!UsM@1>(M?P!IF5c+<$*`uX}e7CTJ zS*U>+N-)W9`;A12(nj^p2ZwyQo`X=AP8@OJ+OtPZCf@*a*8mZb1h75czH4j+J_RHjU-@J( z)9$4d*m>*Eh&gN?{fO0CRvu8CynAs2tVjRj0lnS%H@3t1rY#OXgO5L45@P*gIeXby z-7-+!oJ2#60|7AFv#r1&)=;B;Q>vCQ*N3w)lECKeS9xt(6b)KWA7br?9d%^vUri_(ZH` zUf5Z4nlx0d-e-6}slrS8jt5WgOXA94`f8YKNqdC-lW=R{2f)>vx*eHHUK6P}cC$`_t!>%0@2*`PrnMnl z1Hr5q+fM_RmbX`-3w;i^cn|tqawouAg$3doUEK^2v^*;Z6k9?1h=G>cJ6S31yFV8d zs6LT?8oI}i>6OUbM6-$l^vGX|`;@LwP{46?Kj`*bxJ~Ch^egdeB6-a=b5VX#CPaR( zqFblicWUQD=gc`huY0qPzs{sl|7@~VIvh=r(#gL8aZh(-kX}?CX3x^?l3X;0QDCUt z7Z(;-n`y5*fR=36SRm!SFS*C1>pA7uK89vyDiX8PSIx?Hp(kE^U;aE!-2OtyYQ3dp zK6NBoGZiYBFJ-?io2v7eIeNJ6nAlReIu@O$WKFS}6h^u4w^r1ekrpZY%D=OH4vzAL zTH+ojk)Cv?nKvCQ9BCM#4C@cD{>aiEpD8zTiNdhnu;zHK$onl!O)!xVvdeB#QThWm zlFUQM6ThUwaoCn3`OhrM)U!Xaq5GU`dkQYishOytt6Ao(+V_ds?aC``0|Thk-E(bA zg29kIKe^A68Z^UL^2UiWX}pd+jy*gNIhq0WFJ~qtP5}(|kJmM;rl(Aiug|K<^!MYV z?i2Z%tqA8^k~PEC3wM{7(oj>j+BZ=FN4T&~`VDD&^RVZyuQ@$=2>s>n06?q!%RLg@ zj!RsmixWGOcbts)hNV(EmlnU@b@<>v&?Vi#$?Y>TTVAkZo{91&q%Ai=jyI1g>-K6k zbTSitUiq}jO&J_rjCie!-W5!6ezW~UK_P1D6G{^A%= z%ut-1$f<8DCvBkZ#*6t{6%MVUa)e846{v2l>?GFSpUw%?A+i*pH4ar^x89}yr1^t* z;@%OE8y-g+#tk#UKj#QfN@ zFc*bV#^Ih&yA#}tiw*|61{eG}TW9xvC6RyjaH*MJ=t{#-+MPP)u;R^oSW;FicVg{+ z_sK;6%}}=wo_^|-3pCRvvpzFl=PO^v2b4vS{HEaDwP@XNnzG>zk zi%+A$+SLBpNrAO0Id5Ly0OFQ7ykUW07(g^sD}J;acg-TE_JQB;r|$hToED0j(4DL% zpG!YO{0Fic?{<_1+fBbMO7oD-C`Pm21!A@i^mre2B8@o0LG(`hQU$xi;i&}=);Z?f z`UgDj$BFQZc-hiy^dW#8sA*oanwtv-8Z zUe=nXBjUdlcCW5P7e9|>u;JE-jPHC8lw7Ad{)_<=^sEF^a0F$bvTA*{)AJ}?qDpf) z0?s3Kr7W~_U(I+o6QAnb%Nt}$WXY<@nK3=z^s{A}JUN}df!Oe^sXC_bk51iDLGCo( zeL)|HUU(|YWC}8^+lMPdotsrlwCn_jdZYg}G=7n!gAUuir-r73LVs@Oco<@LsC$X8 zaI*Ix_!%lc4iL_W?#)Ktj8vOb4ROfqPajYtq?}J0MX$@AK;2ec^%kd;tI(M|9e1%5 z^PGZ#yZVa1c?)bVl2UsLj9QO@mfyWt9RT)5h40LA(9mzDQ|pfdMdJ6`byJ{}1FFQZ z4Bl_w(cwaxj+{Vl`mxLv%M!iSL-5#O{vV3V|MZQ2uR6m7Am2=z{{OP`|IM1&&ugk? zo&1gVfhkw)aLx0-=%jQ#(Dq>$0A=0)m3Z-e|03Vl##?WqGfoI=*1`-?i;5>L_T7mJ zHG>=wv%Qx{09ZU4t_)77^8cRbu}1gH-)JS;+8ixA={Y_%wQ?u)8UNolxp@8mx@#Tt z%!N!G&aClmubYhY0q|HqiiNG;E9wikTl4I4UG?_Y(Yg8Jb`dRb#fHjq`0cKxui??9 z4#OD?T#|(KZO8F4;XJb%S^PxBFT+0Q_jREKPParV#irNcmhl5J8lR!4&N!(|pn00k zqAPtFKUGt;X*u8a^^_-B-bp&~Gp`%FxR+4_fXIkgv(wS!)i|CdPl z{bWK->y%K!mD!Avrre zhE1arw_`LeA=`<1m3lrWm+KPD_9}-jd7Q=@pY6+aNg@hZGquSi9`|xW1K7VXt38Op z2wV?Tn34E;hi%%ag{Et-(UDXmi&cysx3h^V0qnna!xn8O++ZD6Ku?LY8z2_?SRh-4 zgh7oHS#KF2*Y$sfxc>I*+x|X1E?NV`j@8l;Hg08yp`RQksmyS!1aCY#91L`zg@Li= z%?K(TX!=a3@_rHV@7Q2PwwWt!miJ3VPr}LX4)M`bTam8`ciNE~=x;8U|7@_5Wl}QFYLCB@Q@&j$h;e$` zP>$(~n)%jwxq%dLpeNtYVSiWU=$*!*RRxwdY0&}8q+U_z#z;}xX2K3-&1uCe2hSgH z{+V5NZ3!jIG_lIP#knzJ0CG#lFUe&YS8~0Zl~jchq|GVYTF8o? zs`PM3H!n$(wXqI0XAjK>xoeh0paO}b6eX6Gp@36y=GT%|O4gzdGxI{HKNc$M%Iuf- z-N=mZ>(8Q%;{_{D@*6}(#Kv7QD>|^+nWN1CQAlb{t+wiT&1d8dUnm(q9^@_PZFartp&)`Jrj<((Bf+110 zHEWTmP`(ZC`pJH-sm*tZ7z-Ecxgb<0Q=Hw!FRL%L3S)Po&Wt63Ec1El6+R1I;(hZo zlc!$CjE1;>&Pd9QS<0J&Ywap2W6!RM>aAVP7$v|V>x1GP>i{b5K=sld)2BEs{I6-s zZzfzzI2=Y=uqcmtQKdC|m~X7tcRzJC19wvuzdC{>y_20tW0+ETqe#8?{SMQTdH~;b zjex>-IOQ0Ke00V@aQCyxW3l%zo^rFeb)d^x@&+jALYIF}*Ey4%HspjeCld=Dmuq%h zNmKz<1jF>)`i1v8#jjWf7`_(rv_-ve`P`!5-YYQ7n5D}&7LL?%x*A%y83&^K^EEeO zDQ*goA*`l}_CDjV3w}#eP(syUNyl|v2r&J2qz;jSkgO-2s3{;qK{ z+l9TQam(9L#-cA006LGZUUDqZ-#151tk2f|clHUZAaut044g^|LT4UN_xE z`?4Y1;!f(OA3FQtxcYGrpQWSMW?k~`CxkX!q>zqT;qttsjpL{5O(}mOnBrt>1%nJH z^#MGoJB`ucV2Omvz1gi4U)A6*$pdMxfg}$crh5j1&w^N2O2Lt+y*R8 zmDVnF%V5}@1&9{CGhrE_JYLEq6;b;JXK;egO12tLZQ({zub=hE@0l2~Zn&h`%tC5Z&z5rzI<(9~5^zpa)U&c}k%MlMXtDZ}nq z%jbfy_yPg3KX-2f!8OYgXgF*=?$SSC0KV`}luMUs_rr z>5dIpk1bhGW=Hu?aDvBbq_(d@bTFy$L2C6gnhJ<`8Pc3nKPq2- z@Df1ahWl%OS=m@_pd+$bq_xhcv7HRzx@_Nrav{{eY-~Wq?K_=g2{|P^3W^l($qg9R z>4zTcXCUbglVK!!g>Nd!zW^rfr&1AwCoGbqnFOSS1Mk3ubpLQ0fIKfjA`z`Ln$(Ol zG1@asnAxt^3Y)s1shXL~V1&Rq+juzUXf{7o>hpPpjxFPFx5RHK^Q<|X5Ntg?Jr&_8 z2vUP@B#msvYv=%^#71e&eDTb%wwaXzzR0ZA3AnrVZNO>@Mrdtt{o6AjaTaPQF0i$V zPQC=LXR0>da{o=T@Mne)B<0$|TC?lKZF|0@u(FiTTEN`~8h9O(<2C7fYcCg>jdKB2 zjHzWRlCGhl%nc!nFf>uZ^r{!K-6=$ zfCcRI1!oHW(w{h#R=wuS*VEe^f`1B;)rMy2nN#GCCLaIF6S#cZdT3iqVHmq-SeK-V zh%9*J2r%s(cf^ZcLtREzT5tK4(`+UW7f;NF`;=*1X`TzlOF2y#eMzZZv9P^T-%K%M zd>G2e!Zy_}dH*w`^7ITSAol^j3HT2aUflk&UAt^JjkUG!fXpd_-%rE2W6*p3Pfe5M zX`5sh_iw_*rY8b_i^^Et|7_>g_J5L&ZAs+1xRAw)Yfyyr9 zlAy>Nmgv)bc>2lHTc`o#xWd0ad3uYpx=u~IqJJ;Zr%3|mnpU+0!d^h@* z*wDM{;j~tdY+vfRuWECHO9DqB{>EszH5o~bbLz3xZ2eKj7Ke6`FL|orCkN*cwb{xS zZnS}WMTjv=$nXK9%H{tu6^Xbl`e!*NFn9@i^E17j6}qxSp?*?*uz zVYCv5Hi560eoddM4OBMop^?8J@5`PN8iF=wQ}t}{>VSZ%w_(KMmTN>&qDi?^LY>*K zmz_r>2@E^vJr9PWoi7{(b+nKDrXg3DqSy)OaE5yq&$d#l$d!Qny4ZKf$)fCXW~=W{ zry_W@K%A0Y)CjlJCFiW@ndQ6vM^NxA> zbdHMBg&J|2h$xWl7ohjTQyCdp^qvUlQDW*z>mxNpLSYZXH&O}8M+ce=Dj`oy zOei9r(#ULBCUHp-N)>wHsgdN4t}c;687IJ}7%}P>n+1nWtb>c*c?Qb%po#`W%k08H zNR0Rx^KOGDr*DOqDrD_*H;0*Z0JUU1dZ3-3nGGY0RYt-&t+|`aaz2M?U=qeCIJHJ{ z;d!3zW0Z=ZqVATpI!6!!fms0{XU~u3^jqw%L}S)pdszhym}VMcPZ%jo2WrPfy!k4r z5JLJBTHaOO7xZ`K^=BJ+aZE1O5ohGWg)zEyBUVR+N@EKGx~UNHcULz<5LtRhF*kPE zLbh~BM5%|TAPOTpoFt}OQ5&umK~-ksn4`Nc(<`z5rzdkJaYL-wJZd$rM_@IJYtMWo zg|PrF$el|vX48ef1-c*;Bd(O8<+*NusHJq4S}h{LZ)i={dDu$T%-IW9xCq{Q=5{6s zp{t706vKrK9L<>P0MRXr_7A^y4RhJzXG@{5E^MKILc1|D(}y}($vRM`q?+goY8jj|Ef1VmO)Wnp5G|04TrdWQGI z2ZLDHQqCdi-p5@Hp-iPzx2(s2Ldr&-1?R2EiTGu?B8n2hjP0Aro0bO1IJw^n(gX$= zt+$K%-^nwwT)QsL7?dv+vf4Fb1r5#_v6@h|NSl5QT>>562$L!?fCQ2*SabciWz;W| zdR5&_W^Z2PUzuBL6sQ$^H-hvCPnQTNac*2xUbP7B?%>$SZZiZQOa1`ZlssJcct129#+`+XjZ zlqlJysN#{-+OhZDOk?UwBl)+cdIU(xh(PzgQA5}l%^szz?1|R{SY@{ zZGA6<5%TcrW`Mx2_*^TIj z{3*}xQ`}c!dc~J>YhLL=KP%)JG4B=}31)h0oy!G`y&>W|mwuul?sqaa+axZH2>G(Q6o_Z^fU9p7#RKxtO^(2PMezHL98X|7q?=iF zJZ<4qmRY$VcXNV{1LbE%VI5YKQ5cEWbn1=}&&`@91a-3^A`t@-z?NPH#Bfih7T++= zt&}=`0R)UiNV?Ttbv69(>4TMzzO{VB@L0bQ4>63m^kDE;eT-1p4JS;A$_R@0qA|wv z=Jl{$644w8TPrk0jflv-_jD10Aw{`cKk(MjAZRsxwcaJ6ExfI02t%Mt@<3| zfde+J7Pc|s0%b`3qm^TDUy<;}s1#ye0ha6hxf!X2;B!J>ep4*{lD>$(fHUB{$DmVq z!&zK(Hw$t;{OJhkXi>?$x;V0%X?-;E_>~;#&bd=R7&5nx6lca!4BG(pF}tBL#9GI4 zq6NL^mf_zc^`*eP&R>PcaVN2x7ni8ms<;Adww{6J5Xx-I4vKsF+4`ZBnT-}NdL;Jk z!(gR#IUDGDMh|NqsyHx1yGNSgY_Ne8Fi2If?<3Y$CXApp2i|SYil=e+BlPI9`T-)= z2qZ^PIPds1BB*=($0_X>E)>yUJn~j|;`LPMIz~drx=)Aw zCbQh&KeyV9RJgxhz#)qgu9hSF1r_OT8Op7xCedK>Fwy}#_gcmNPK&i5#w=V4Lqo*v zB+n&A6fg2+=8}5B-yG!j-<-(i73Jbx4-ffI!vfWp=7F3Ly_|dlNvFJx??fD(UbG(l*HoinF>o{N070_tzIP*A=`2pPnXBOX{F8vwv;6xk0 z1DOg z&27pxPt`zSNLZl5QjueJkT6Un z0ReczrlA0l#`DjZg5l>aJH!^yA8%vsWMrjnomb(0Mqc$7xLKkjCtm9fPR`w$ybmlW zO2vvx9|eray6V<9j;e~9N`@jl5K>IAZ<1eHP)!E5pJ66CvIHAh*6(CKA2WM}?HdRM z(yv>+?eTlz#^&eNjBsjp>xpEQaII?sU4>1)2q)!|ru_wl!!BY!|EbHgG)vZ(t`CX} ze9ak&#FOxYFeD6cFD@Xly}n2-L8af0ZKBwx$WH#*wtGi`9&k!k5!TD^)iB)aTRG-k z^Y0kgaYcyyco@fO52ei(&qnt2lYiZJ{qI@;mbdS&lr@(DF&Ksnqm`!tpPhZzu|3g5 zVKviF+uj>`%yrVDNIzgW{T;x03&~p#|G*~Rrx!Pe6tTg?)Zr)}@-TTVI?m&{-%cWF z#f0V5tJ!bg<5V&KEfu2mdTwDnoo)`}6zfz$95V6ERjOH= ztdf%RYp6|BHODq4VZD@c7@Tf!IVOMxtdKi{PgkU=1!acQJ~S9y6Nzz1a2_!Q5Uk%7>ka@t zSYg!bn&)T2{H09&aEASnab=mIP*)cNN#H`G;1dMyW>J`}qDU@vhIrWV zZV7R0Bl_b6o@53hUsG3AB%6(_pqEGwt7MNTzR-;PVJW^yNw`Tq-gmuXXOAgdjZA6d z+2*Itvn1t|T!vCQ-oIDkJodXK#aq!FC%33xalynHhb|B=^oT6nlro3=5kSf)M7@BdZ&`~1{#%fzou0x}zxvaF z^XoF;!r+7FrLUgON^QU+c1sv0RfaAsAqJ&;{aZd<+VR}{K=lZAVJW)vZoY?^U8q}w zPf5$&)-G8dtw=j_JSC54{-|jE-C;gbh%XPIN0tSnUsf4~?vf(u2u3IeQr>-@NSZ>Y zD7eOWR=>nZP@+BLUqdGwR!foR7LtA}9*+k+Jn@_KULK1p&_o?#uCnqA2lI;@oqGu8 zW?C(}YJvuEz(9Y#l^#m)9ef{_=+s$auoEopsNIpG%B*}*!R%O}?&cE90Tm3EK_E3;r*sYiO zY57yC?syNV&D_E>@|=gRUTf}fvLnKX7jd6sr6;=U!rB6JbiC4i57wPE;;%gGn_Nlu zpwof8hg>3eJ17}^F(>Ed_I<9ca8zl$_q;LVrVKj=52&6+*wtmlB_t#`LlCNRejv(%URFkzB?lSm;jP47S6sii3YgrVKLn7q zsrlh{kb3n|?pFa9M(SHHZbFFcbc`HdQh3_F6-O#>{}+J~>=03l{x+D?$j@X@!@GxZ28L29yPcl5x;!n$IHwuU~-6p^!X z6J_0okcqZN`Kwt(dk%;a(%q=5fa9Bo$vnGH)6=Z8IbX-ZC~9){Z+EtyCWSO@sP^sp z27S*Mo!ex_ZTRg-?@)zsq^6o-4|Qt^0P$Wr^1%-}1t(?jb-N-|?LUs^>XyNb(vBq4 zea%bO1Jh5ME-Pgx^=aJQIEtYWyRbS&8MzfrF8g8+K3(?xS#Uti6malV_+gj)PKTL; zwE*3xOa22)N|g>*wVz1~@T;1h!9_s0Vm*QU93G+IyZb{ZA8lpeN*pxYGv>PeJiqRk zgawbP)ROVe<;PdQjyqKen|hAg>{vHOH&sz%!r<1XI;V-~ltKUBI{N=V6~h0QTT$9N z*i&0G!$fPP5sPxun!r)GhfU_U;^Bm_g7?Wu%(~yATqYUitt-1U=&S?cc2O<}IhFg5X*;m6RmZt* zs_bcQRGv)s144`LGcp_9W-*DL4SW5w)1#kx$q`(A3G42e_W;?Y9?^L5d6g#&kZX^g z87;I_Ehytyo2rpZaA`aj;@loBst4$`R|miR^4?hh)KWdC{TF+oJmBjbs<+z+Gl#ri zj^_g*s-*nElc>T8V#!8k zs8ekU`Xs@&mJhM+mb7XwOub=T|5D!0pcan9Oqt%Esk)c@ERR!~BU=tW`p@~D^uNcB zu4Z~5+e6sQVi@ZVohLq)RL{WeH%gUs%gGkLq?SLT+QUkCmF4Qkx;LlnE9gFb3#hni z@4a1T_VKuBa!(IXPA+bu7U8>fo`=*xg8CA}8f9o!Krddt zd>LeZfALnN(r$OHOoqRkBXICyv_u5{SGW=iac`{>mP$H7*>6M)XL3DLtVGw%qEHVY z0mM}x3F*}=<+%6e*k*vHh+WIu?V=mcpTFnz+~TADZbzXI=*?72zgI!U+1M1lyPuDI zIN0#8O1cBizN0_<<9f8TezKC3lvI*q52Q>*X63GTPuYW8S#-~ftXdRh0m6SWGe7|R z-97GY$-Jl=BI#=V`g9BRtF1Ce1B%<52x9MRzjB)my?{^t2idnjtWG+ZCwM{; zk9~UV$NL3!y>v+1TcX<2=-CB#T?#lDgXs@hoG3xJPGl3x@fcCOk zH5T-LpfsAY-#Njk^_dd?c0W%V_oIPKsy8 zXP@GW85SdK2L5z%nPnI301dL2m3F4s?U7bRNd$RwTKLmP_x|;g#qh^rtLEe;!9ET) z)97RTck>LcNJIw@u?{VcKN#`-uo}(dHB5-@_RFxnhT=`M0WGYpIl{&Af!^e?@^rC{ z7Cb=?{WOMM3|?=kD*x1T5)GAHb?NR9o>)>(BWCjV&p{z5QBT*eciY(k3C-?L={sFeP{mQ%w-Znlw9Kmul4AiNi9Bdi|8T_!&>40M#gWasmKmv;%(gyt~9 z&N_a*M(;>hCnhm+g4?4;kFY_O*lt#mxK99Xpxy}LI0 zcuB+S`b}*SFTU-b=DkPQ%U!65t!eO>NanqO=#7_b;Haw;6w!WUIRKN#?numlJcqMIqLa} z>5^3QrQ2meh0f5Xx_Cz7jH=VxPh7kk0}zT!J_9yU)CnAhPakw1yf*URViVOXcRU!D zyXmZFqN=&@oXQ0*iLwp!=c5LvzCm6o`EJ5D3y24ConZ}&#_gKv|1Zg z{F*jK+YZ9N7%c$FYKs2k&45U@9&#-WRZW_nwmc*D0Gn!4*yKv28?J5@(ogDP-NE>p z(se;Xc0Hyp6P}N|ME*7DnSjVlX#oNzyZd_MQ@-@})Xq8WF9Cl08$YJ&7LQx%Kz7XX z_q{FR)#@!vF{0!8~)|Psem$Llns$7_+jx6yEVN%40~@gAWU&H2>inur69@U)*;@~N>va* zUhS_~Of=z_(rHGv*UmAsk+WKX1VNdn_s{nL@%*=*w7Up=w)GAZS?8-k)FJ-+*#I{T zBzP^%ANs{4u5ux=E`i#7hDEWjNx{k%TG(ws6z_B^WnW4njl3i&T*bHt0iam>7W!j^ zj~m_9)kzA2QwN^@&&GW;CmZTV6M4=3qJSK#QJTpz$@-U5(r#2hO*9>Fa zpRVse_v>}vzx$8-&(A-f&vAav^E}SuINtB$eRjk_0ye-2!A7rusH^h|l1|S0&p*4T z2<@PdG>MY{qkms>z4kotUUU1!+Xn^?p;GI3p#H7?e28`GfiKg@t5RATacT3vc0yZ#|A;vWPGei6j)6kCIX2O4~>E1*c+i_QDnT_$^0z? zH*|xMwF};H;3f$$I174OZHzW4*XHDfl*0d3ofP?{dM!X;{~A^O!OEqpokFfiL`gQl zmHIBtv#JuCH2^SeOolboqCJJs3d2TwGyD)2=+y3Bs{s_f6e%Uo*IM4sSjisQKx5)y-9hB1m5+@cN zeS-98sp$B)x${1%o1l2S-*6+=1|#qYdS0h_I=cZqd}6`Xl zNG1+abgZS>=ed7x(nIRkOkds%`i(GgKkuDRlt(eR^~MUo+HCDbBlpmt<(biE#4W_{*}6dgwK$ zqSU45r!LJIs_(CEt?Z1X;b4(N*&tDVh|~{P=Nz=2pwQSqupq4_*YKxOlfyXUvX3$^ zC-iH0r^&iQWZIj4v*s9bWi-u-*O2Hs=^-UKw>1l9T*(skY-}qM6e`W{AGn5Ebafqj znir7Ia*7>?+jzA&$>YMhrICi|ok@=*e7VQEZf5GD(u!Aj16KTl;eqRVQ!nkBe`ghD zTLtsHtebsp1%bF7{=^@0o~b(H%a^uwB?G*L$woS0E#DRoEIKlgVB5k`ncN^)O>LCyX1GEI!6bT|pNs5h30d#a5>&E{;7x3D z09MDx!D#chw^Kn;-LCZBOsMn;#O;=NiycUN&Qw>Y!tvm>PD{>k(u2M0hwE*niu!f5 z``2u8b5IUC!r!S`*vsqLkaxxQ=h2h%Y~Rh`1T^I_a5>hano;0}APg=v)K#Ss0X#hU$&}if0)SibzkP0%JqwmTDEi zgAIocx(4a-BZo3~O*Y`?cnI>(ix4QM_myqAqvW{d!XiU3W`_3k!uVM(#HKq9V4m#3 zo{?-TE4*V~?K3nK)&={|g%{>I^=qBFKZcUCA*?$mJz=~|n@QtO{by;Y+l5w_cZd0y zjCcJRS9})p&KXZJSY0&@#Va>Z!itR*i4j=5J>k5tO|=lh|z zoZkN$V7xuzyh3BuW%lKn29rwl4)AX)EtM}ed7$H@)f5YihS1u|_oC{DHS`xF#K9sE zOm!>g)Zmr(5Bt=(Pgih(MN9onfw=lj4FW#M>Z+&GcZg(ZtIx&v?XB{oh<7(_GkiV! zkkv!cqQbki?n`^u1;~(U^k@k|$35O@D2islR=xei(xD7-OfXq{eMtQ@R%l#rU>>g2o|A=3|^ACT;P(A8()B0zYCNM^sUMX5Z8)I4gEmVAFYQv1=AHeO;oT2I)8 z`iuAT#b$@e(dAEkApY7>pcnI}S#fG)%vy!7l+y5wx&hy~&b3^We{^-|S90ar7f%f~ zM?c5Qq*Q@3$Z46ciBUDBBV20G)A3UCT2GQv1heqf z7{>0ouWCnCc5<~7oKw);cwsAs)Av~xB?5>`EPP*jpY?5*_$BG;vfE`G>+aD1N2Fqp zZ^p`)hs*u)OcVEm8IfNy9c=N2YnHwUl7Kv+ZW9la?_E{5LQWae{VfQ4A4g$(VM zfH>v1y^AOpI4ofI?WsXedeoGa8Maj31em}5RlZ*IWYqh@v-MTk<9d|mC+D;-*!vI= zSi2r&DwrfN(e^7PQ~mtSRd_ZTOg!G-v#a)&1y#Q=-%2T60rl5=2k76r#>+>Sefsow zI=0x{_&IC)>Mm+~c_8G1XTTe)9fDXs4|L)CPDBL0TZiNQVa*i>{yTDYXu(5eo|Y{k z0&}B1@IfAVQ3Q|k%lA_+kY6g?BsgO3)Rty~IY$K0<8ThnTud4r{aS02;S)CVbaJEe z7&U)lixJ0_XFOjV&?oJG zVghryaertTJ3Rj^;3CAuSP*X0_8XYypN`%2t4oKr6PkzaxXr zO|IPgdi3obL+_ylvuN#w8(zU^n472Pp)M)$wMoOZ+Dmt`vk;TMeBQwe!qGX z@P+lJ^+s+Gx175D1NKBP_2%vf=0wC1p#?ALk8mJa9IydUJ4;s6n}x(;-m5}Mgq0V^-mu<4y&h?B}dD@={b7kZpS@P zwBAl|l{&|}F`C|Lu~+mCu20xKbwSN5^$JIgfbLT24*!^<{Dnc@LFnj_ zTejRIf1km`XdV)?_48km6CP2Y`#vj|maVPDf4R8YA3hz%_;J&C2O~I9Sq$YKkjbi# zwgH=YKcr^)QA`gYQc6sYc0Da;6?e$Sw|@NSNJz4k|Jl+#)Jc)ci+`-%Skc}tHxr?V z_E}im`g2fotNDI93#?vJ@ytT|;N0(_DYkcIbZ9=Z+8F+OBQl? zW*GFYzN4TFB5olwHM_vUz;rpHC)+@|{FI>%S?gYYZYK(M@7T#J#$Z8s3O`px!lZ1E z&)`>C&d)G><3l{p3Yqtu4bZgRjHxT$c6et``vj8xL|q{HvDxrR{9I)s_FDACu1ZnE z1pwzef^n#wc~4EoRkv;uQLsl}+rcd(dP{)B@4J&g>V}^KghG_~6EPjqt(3H_mSivp za!wr<@vR7uNu{VCUHtiQB}U{*ji5D69_@#Jjp%kg+mlDjUXbxM7c*MJY5q3W+I8%I zPT0}&QI*XY>(jps2=p*{E%_lY0mS4gZAVn@`uVpTiIv%DOapH$G)31K__YJ|9kO6B zr05s42e#E?Q?}jpYl)cG61#+i&FntdIO)Cqps9(60oRBM{bPn_TfOd6P4a37eQ5K< zz`rT}gEy$}OY}zx1_1py_jyV9d}u$J*u>ial|x2L&i(?4dS)y1YF**_{~ezpcM@<+ zs$kIW?JXcjCDk#vr`bOhr*h@Ifc$s~yodkqCr9GNiliY*>ZV<8Z&gGZw+l3ZK5%59 zP*0OEF_N$FfNI%R-z~rXsCJ_NYEyRB`u3!|e-Jm1Z2V^8KMS)N)D$vRAB1RQZcuGU zrx`$rTo7bLkUlm|prv?pMQ$$-f6b04;-S5k1hP?tXguu8zh(J}%-ONLV;OZ)@SXEYqI`cM4)89) zsK>u_ynt%y|CA^EAF^c6PhyD8zwJ_+W)n(jU#`qQW$lSJ;Rw!AH!qq+*8ob-na+hu zs@+H9vjBgV8+{g+$&QQeci7tPXibb(0w{Wayi5wxA+QuOaqSxfLx7Bwrz>c+zV`NM zN8BmK(M6yi$BFjlS5F`JYyq$6j#*+Njh$bg*fprJ2 zWH6}bG4Mq7?zYOb&-ZBkywqX$B&`cz zi$%j-sb(2zv~-+Ft(73wYt+)x~Ge~z&}mKbPyknnZLfa7Z}nS%MMeORVcjbSe9dz2q< zz{$(V&JSgvzk`~jx~?j(y5W>&0I^BWW^s}hTWhYPqu|z6TWdV+q>QD<14 z+7qG*hIB`ubeS;taEjz9P-p< zXKaw;+9R~Z)SJfwq~`PRfWFLfc*Wk~nQh>^>S@X%rHP3=usp<~&-K|IbM$CfckEbL z^#aC{W_T+DoV$1Q4V)2peocwQ1bNDe%`Jd+z;Nwfc4=PkeXObJ>hfZpn^;c{+B`WF zR_zT~v&rY|fg|~WsCpy764mFYF?DD^3(I>RDsfx0YHX%fH6@9Z(h&ze#t9Nth;nK>PymroCm3rPTaC2ev-G=vuE1Xu+qk~R*TwJ@kIoxc5@F^LgElleu@ zN2pETgFMo+`Z3Rb3FY;X%`?C<$WZ=?iR;;=T-8hAE<{kjJVy|lch`!+54-$RDq*<- z`T>5Z&R&flBf2mH)Q-3*fo+SF5#)MOo2hvNaI!X~{qexs#{XPhIPZ+owy1l!#yY zUg|5)Bj2(%msHLYQQh z)ykqzHQb+B-gl$?<9=+HofaSj=`GY40#)OmM$I0)19)9BK!mby50&RT?k6swTr{5@ zQ^O_#sQQ7^8)gN4_YP*%@f=J55L)wBSNX|535yLd;OW8tulD1WqK=u#GquVI|Gg_f z<;^)3W6sQ)Gc$(;E9_)vKhM6OyI$A*?06F+oinE{ zo?>ERI-`3}%Z!QXusajeq2iOrfp_>GXE9z51(@k*GQs;U5rKoF9=8o|Gci>rv+O$` z1CE&=-?I&1VmkYs@pq`xujBy}lPg_U>$XLx(@G9YJ)gDh4$JvMhpVZa+Ivje=guD$ z{A}XMY@#P2S~#iu<>~o54JWx*p-)Y|9%s|I_AHL%QSJc36hrEHK8~`(PZ8hfn{`W{ z7r+19L~mSEACIU1-Z!49sK~fkjaA9W2#7+fuT^^>Y01CwGpeK>{( zc=>wk7VHq?@aR8>qdKr0+BEAYvAjTqm(JY4Z{01?W=j_V=OT;_U%>tu1h!4?^mpKQ zVQhP`BE=&WKYczn;}qi}U-zqZK3u^7|1pK1aApWb?%X**SWHYu4*kFEQ2(tLqWL<6 zTp(cR7cnt0NG#6Fo!)8LDa=s|>B~OG^t1(#o0L3gyE3^@ZDy~JxEj*nXcyI%gJaui zaHSO9@q?aK|MQhh!J|R6We<(4E@l<>8VwrJ*kig@XC7wF^zcaQ>HEz79XuYNvL=6v z5`&^61NA1HD$^lbcd$k}({$^>?*a#Z$SHaI4~p6bohRyiJoh%{J$o~+dG4%EDV9d; z0uxF%QYC&OKRuy-xp})5VTgAOnZjha3wK=io6b&BTdgO5WQ9Bwt>qtX3|blq>{B5G zDnPraI*j;Q5?-=#_*V2~3{%=kLT-dF zs`sJ8g%tpI*a0#BQnH|PMe|UIBk_#Te_+(z+4B9aXH9EtWsy_QME!=nnXlcua|od z;bBxs2+pexj6lcGOH*IuhC{o#D$MOz{d3~$yx(>AI zHJX!~YA|X;96>;<>%0~34d3h>e@PBpf3+Gbnj1JNK1A2 zC|bBxZ@bJq3SsvpYqZL(XE~p49ld1@D45WpjTZv@AK2N#YcH4T@2o-xA-onyeKd7y z&1%Inj*tM}p9LY$irlm4Kwhx4awkl;mbf zK~h=pxbQ_cRjZ4@l(`ui$rR4CeK$=&9;B5cy+uqh02aS_xbw4l1@*&A&lU(b!A5>R9C1 zQr)Lo&i-by`zSYvp(zgNvmO%8X{Bu1krIJyS&A&xtGb9}EYTjzR#mU5e zCS3LzXUMaIm6?Ojs;HJ7l980{cA^dH9QW78xMTCXW$Y!U;D8=P9>D(0EK zLLL5k-YV!Q-oC>l<_}IW@*xTrj^qdzbiGaHocy7 z)$qBdrlH_HBD){EE&Kg&Ix?Dyv;@V!DMz%RRIjTRtF!Zr$Fg&ZE3EW~g%}79Xs#ZU z4ZXdB)T;Gz`zW6BA?448udVOJ&5)MO9P+{qvK|NBLURn_^v9{7w_$=5W|b zldf`tIHqV!9tVfTECUO*Yx`@b<3>v*>AOg}gITX__Kjcm*}yV5Kb1RTBlr+WJc~rT zQ5G7oQ$nqvknS_v*{LnN?^9*M$1CI__J!6mq6i^T9z{bBYV(*f=*=a65?iUQ7Oe@`GNzM_Jy*tSq1@|9mb$QcH`fV@ z`={L7JzajZG2uVt56!+ip2$8yvwQ;Y%p3I zHB?UOM7tD5*!Nnez}^p?vf!XTH9yY#VYa;gHjtC-ChS~0`?V9rYu;f|dU-0>3j@|* zgJP>$gJEd1_$u?>-xyP{&?*@e$Afg#1+5j2+O-_mSxtB_6IZsdM^uII?loA>=TS>Vkr*5hL2QV{g_r@ z{}$y|x-IgxiTbJGef_%32S0GjytH5G;DhjzX_xMmMJuoKF%5Dly8~S3qjtXwSha2~ z79{7=UKV!~I`?36s;;ag=7v4vprABO?)Tv_siuwYHVLSQo~?L&WGdPo^rXC#(CGlVAM zEE)kA%+1D$Ei8Q>TivRsW+yU)MDHe`ODL|+qNYOMN}h~Y;(YF}Jlq>8H^8Rv+1Bx? z1%K*PUy!eM^#!8dEy_)W;c~x^9exRV>ck91X3Ka<7R5K_^EJGs6M5`*nJhDBhq)P1 zzq#x?7FD|Z@(gbos6-Y_r{F!%*&nPOC412=m1RoI=v_l=ro|JCMb%;lm=e6(Y;EVCjr&&qpZTF!LOQ0Miz z*R2MEcWEha2W}WNFBNTG%yQatTG{1=zAJ~L9&JyQb(hP^F6tl6JTet*5q`c{6Ddf$ zp;JqpKUlPfnKG66u}75Mfmk+YYA~CwP>A~6s$$RF*DJ!ec0jQ$^H&cQYp4`Hc{I0n zu)0>Z6ui+ThV7GJBLB@y^V{vP5wJQ42|*9hFl?7zv!PoHa(O+$=H+%ktIHzegJHoG4@JXJyFq#}R?uueNML z&PDAGty1)?WY;TP?znTY8Gck^gX9VZ0@zzFB&qM-k3|)wXh}sKq|z29H@G~Icc{n@ zN-};>`bJcET)1gg+BU1@cA3Yd=GhWKCFT zY9U(~nL8rKZI3dgR;9cm%1*ZET#@VKU_C_=JQ;7tg4ou`pMW&}$ zfcWurpuj#nyu(nV@o$v8r1Zqs6 zsWIGyQHI@@A3)35(~<(e_8>!$oUIu2FOKM+18Dl3#szcDu>D@CxhLUig=c)#4o1xE zhv4HO8g60HoELXA#t&A%3-3D&DA5M54b-kH>Xu1TbnPckP*c!j>ENAx-e}>_2?&T|?fBM@E6$0!&vVlUX-cc?R9{g6mnI<6c$mH}_s zrjWb%tP8OaLT2C!)-0S5YyBxtW9z+9E2i}x%SSr*`G`sl&cl#<<|2o04F8+UMIWaG5j~Pi#DC5Ydv}{bQ)Ju2qWS z0S*Al^6##4t;_QC-CpvG@~E^vTK6g$J-s_`dnou%IXZP3xzbHG=5p{a5Kl2Y=WcpG z!_2NNq0k_qI_jjEr|NdATD(kH7Hr7cb>J-_NMp7&FCoipD)$9ybJe;6?`fJ?FP$UF zJZXdMDNm$Imvcz>2`s^m@0j{5gz^XWbrv4f%fbuZ$k_vV&N6pUg#a5+@}GOb?(Wjb z8kM=awSZU^Y4zPJ(=Q_n-B_)cZ@vxF_W$U}Fa6T#3n(f$F+S zZTq->?MP+6+A!$R`2)Co;^Fbo*VR?H=bu&rDV#S zm}=!n5C@9@7nKZOd)uE-shJCGP9;lHX%f=2eFcu^`EG3C>-jU1qz!1G*TwHoc1djY zY{KyKbylD4u4Q38MNCCDynd+!M8|HnDW!mmCtVuh#i=^^j-CAWMonp?INx}}=AwGk zT0;WfR=L^N2vEYd`!Qqk(K~Ny_VhJcOhXN;m|HQ8vQB}`Pe-I%J6eTgDy|lwYU;~; zb0%6K5nGvfYrN6ab7`puvnm8XAxyrFStF;A>CxXV?q+DUy45bU!~ zLbx{^8^B5Zt&qF(Y68ivQ0SlaUap&J+v?Nc5XCnYvQxOKnm&GliRlMVqFf`*OV)6v zc>@)=6cnNHJ9>0U#t=N-Kv)}~?dgO}g~D&ch*^nt;+AMGN7*kT<{;UFJxxiAk+8sQ zSyYFM=!i!qr+dO%8w74#=JzUc1HW=~KH$TS&*Le6>+`oB>C44(^Y9P|QJDbglHG>o_+siZ*i zMDQn%JX%g^tnK+DcHFhMD9!7wtJ+q-6PlfBVXLE+1!dpETyrX${BQa@U*|lj>SwOz zKd=+(5-n5-vGo?y@Q@s~Bqd0XlvWw-Txvus;2q1b*a8(}sr0NRPPqQ&hrJ*EHw*p4 z4mMCw{MO#ZhTc#k&x_I1@Cov@5H(WqV4xIE@kRKXfW<0bR=|Inv|_d!d0TRGTZkKa zuco%h#HjltEDu^1JuA0bFL8Cf>QT+(v|W2t(lkvS$(h#qWsdw2&Sn+GL7k1gIU6OO zr+r5v&!0D}<-J@2?MFPVtY__@B$`vwe|lD38L_k;f#)HJ*6~dw9!B_{br|vK^zV$i zJIMuorvf(cYxO}H`=9j=_j698nmM9@>3AyKa~|nlAX>RQa5w+3`%>!da4(k2J8PPd zP%R$+u?c>?ZF>^Y{&K-~4yT?b?kLIDKJKvaW2KSR7tt5ua?oT5Mhw>0JC>92EvmVunnig@NnDeR3k3)n%7{4 zN3KfB;F;R$;Fa+*$KjM6z!I76Uj)8xU*}z_)jRUp9=9>yg9Gq~M}}eADNHFp%pmNJ zJ|>Qm*6{4ljVz|HE@4d3g)rc2Ohq@GMddlP-yMav8R6jRZOI|Ufe!5c1F6M^Et5t! zw}$k7L;J4rsCfYA%5jCWxwC^Mttv+KW5T$~d^^j1kr<@N#ByXUTeOb}c&NyU5u6ti zXfhb7Pk~f37d@anZZsZ91vlEXIF{r{6qdq6dHvu2DdPxnyv;yMziNJ&iOtYTZ8JY_ zk`j~Do*iq~l#?+7vd9SnUpBEzIaf2v!TzRDy{b3s2DYb<7r6Yb2WXb+H@r8BfFycZ z#5+^#ZA_|m+Qw4P;r!A>sn=3C;c-1d>|%DveBwr31B8J#_oo3fYWrlL)Y@pzsnyMk zZYBoC3nhFBwXYV=2CRNGrZ0%iy-*1_^=X6LNoUb#9LLOMx?_^&Rx{r1R(*KgD%BY@ zvhw5_)G|Cu=2Yuo1mjHjX-yb$q$uW1aO(&Hj7}C$D5*I5*1$y{!D(;mAR)c_lvuB; z9CX3Gp&z$5%Fmd(_3{F4kP2?9b+>xj(~nu4*9(_ksmsu9^epQ^nz(U> zb|ZEu3b)R`0=~n9lT&sUee&_sKD#xi6{l9ixhE*YHA|TpiRzMsFzMOEX{tkuJ*R(` zVJl$0OdrlPGc=ZoX%r~!fS3OrD*fMp)c+SAayQAT?Gy;;d*$v3ddF&_}MJa~ z>x*-rKM#OlZ0YahswLLOYrS^#QlvXBlO#`4w$o9p`c%E9)duDCXo;z)1yriBKwVf) zLVO`fR*nx?NSl*+r3rq~qKlD9^f>{a?=Q~`hrchD-G1}*`oDF_`}heRnGd9x44j)i z()V+>gq+LUQvTvBRB+6TFXunpc>urthXL6xl<-2R2?%Fj%GVm><r|z5UBH>=TrGcMiMw;j#(v?rtie4(ULG8MK*><- zB@<=0Pe5)FGfCr=BmIO2rZDZpE<{eGwpU`Gp+a=j z@0NKi&o68y9AEz%afddU;g@H7k70dTPjjk%V}b)uXfvxk&XMckbLhMiOv!FI{w&5e zJ3&W%mW^10Gt#GTf$30q^Y(a#19h+%9eM~CP1jt5cJ;J-&HQHF;8{6879t1_04OR;`h!C4M%D!!SPKl|Xn*fIiZAcm50jI~ z>&=t!)nD1Q^~kGc9dUG>513ZX-1k0-L1LwZ89uJ}oQAScF!{YA9vc7S+1zsyt0r{a zpFieK5ap6%HAh~(&a3Pv-4etGEW|hbU^6ez>CbbnPh8E5+QTQl>pN|{Cs(C6OEu44 zK-??N4Sy6qT<&Da4A-DmYv?COkqgS#jj9TgL8{FgP=o;?C&URwDl0$!OI8!FbV{1~ zTI!S{RoBxyQz+dO)J&nsih|it?yMlv72+5+Dmc6^AU7o!K&n^fWM!k)6L9(fdQaX+ zM>nAW0J>>42vHtv$-sE~`kYgU6shP@dC&IvWMjNTK(B%Ef`DT|=oz<^V9XOb+dy34 zrFhT>)GR?SMMK;;M^14y&!F?pt%H0Ud??oo?BaNvmwTk6J{}HF?4ora6evXT8wTkJ zR4`P4;u0^a!FzZ+L%tt~Kx3yHUht}gcV#$s9CGxK|8gnDR|gR;t0REI5f(E)M^2^; zc8TR>AN*mZ%iRR{Ok=T}K(oKt?M>eG-(ngnH`n8h4U(hx=Wy|2xiBN;UonrKy}cYU zRKO4A-~D=`uWvvY7q@B>lL1eLH^K|ypAl{j7MpyEj?wedj`s7WPAhf~EBY8#x|m6u zHq|Ni0BvRvd9a~(!^d&CR^)Us^*>+jxSuEhZw(Sp2BpR=lT`rsBR}1J z9tA?VqtZ~ms{vC;g;*!3wcC@tfy$*nnv$F;h*u31{Rj7u3N)UNOTS%haY-3mn87V` z{`s5)lMs#6GE2J3a7izMpb8^-Do|_L$qH$so=b!t}=%jH=HJ69X159(9e}1us$-QA;S| z_=3ReDsfCEr|$4PYvcZr(0?4tOY&u;#)&}bd{!l9#b#3Yl7j)4>UOiV#I`-o7 zrDo(6x2s{RUT7HPuWPn@AaecXp8%c~qwreR#f$Ca(5cN>g-m#{LFanFz1010o|TbF zq+779HN_Tq5dMoy+S177;djLz77j{;r=O6Fo@T5xw z2ynI!qboHQQM==dnR^uN^2RiI$Ie18dje}8_^J>&?4{h&j7Mb7#u8!aBEm5x6rngj zQ|o1I3S%BdL7ZEui)0t0f}Lo z=58V!9JLaI@FI@4dzDAB4PX1TbnWQBlf~;NYG9=A)#oprtd4c9IH(%3O+3g~#>*$+`e=)tgPDZple`}xzni2L zt^MiG(24jzTonmhzZfM6VryQ}k*7)S2vFeJTm>jC;OF?^*3-bt{mcI+5AW;28&^>^ zZu*;fyY(+*L4^F)61b~$mC zzGOXk1HIRqF|=I)WWo7=IJyHCGCYcWCh7|3d(w;DdeT;0D|4Hipa8n-Gu|ArW1yD- zU%?!!Er<$sCiLZaZjpv9>7pMgZfsC6koC`T>&*j2^-NhW`(EuU*ZwV=YIj5bT(>X{ zRDPWW+DWKTKJ77m{I}1BTMjN1<>dFY{Z#Ae4?>)7vdy^9gVwAXQnc-F$a{qBfIiIF z%}6?R#uy#612*=cFZkflGt^+>G&&f6*MCGfIDbANy}Opp@?GRRZ}U#2mB8CHi8shT zC2NwoR?t0h1CpyJT;zxF7ne+&v;!%|Ko=&F+}(lFYyBi_V-fuRtG8sX=*PN%ysK}D zl{^eN5ibZn)a?~2CSIyfo(Yhhs*v+`n;1yG`2dbI(oo;v!X*iv)n`@yZAF|6z<%zd z11&!WI+HsfA_N`ONZJ=$i@1j(Aok7Xqz$Db8~${0tpJXPDwB}8(Rs`?p>RCWv&w-S z=;HzZJy%gsZeucS3?Z2h+W?J94sWLBEV4KqAE^nH!xQ=>^ZKAiUm8Bw4Rgr*fhde8 zJ`&n4jc+)qSZhr}F6a<8Du*2-wgQ0eB@XIROWD~scn~OEo=M6bK)K8xuhim;7`-#J zwZ^F;c5wRC<-W6M+UN3|>VhZ_TS|ZP&a0};wPj&$D(1A@iflCuEQ z*}_myAY0ng4R4e0{Dh=YzE#gIm%Q-H?Q6zf8Kx$r^JT6E#Z6#kYz)PXWx{J-X&=g; zbGQ`xZK$EhF}r^0qv~~^@zm?SlQzxCTMH~-GKz9M`!#ct+Sprng{(1d$Ol& zH0+c2wt??sWB|{RuP(=&kIS8aw@^qm`-=rQdPAqIg$rgoc1A^sw(t>Y$OVpEH|Sd( zl3rk&FSVbvup$WQ;atkv&D6A2W#27CIz<*-KIb@*alE!vyJaYe3zG2i)i@Rxz}Bxd z1q&FG#lFzi?NUOf1L4(aR(m0AusnXvRU@!MzI{Uh`^HIsbLcpAOc_33A7ZKzC>6L& zaphIrzVsvi?Vw7r8Ww;w%dL}d`02Q9+IKJk{2+|O+QDBty#E*Ly|pGnE?>3ZrAnP_ z2=P!{5q0X|IuYpf`)$zYK6}_l&vQD%B;4VazOu2A6Jpv+-tuO{WthI2qY0ny9aryh z+jsNNCD!a^4v)W228Tu}>?p1oD{UEq6-qen`?t7+dp8cTVvVEJr5{;uRz#s#H9Jwg zJbAph@{krlvK{hEnPE+;0@`4pBAq$%m7ifaf~LW{v^8s*@XIzBKUstPH46g@D9RhG z$FBGe>t%aBd(GmQ)9!d`pyrm&p>y#rmu2epl4qONEY^w ztXqn9a)p>i8Qk+JpmXp*jL#oU?R%|o(>!?RPSi(ASKzx?Uyk+_+p zmQR^H(Q6!;dsViWJgDfdQrTytW3HhETJT)33$whtd9FQ!)Jv_vE2rr$&~KH18{}~H zlTMd(vRR%Mo@O{~N@-%m40XCXe>vgCtEvcr;EBM4J%Tj>D0&2n+ZrWx@~f*Ze&{6qSuedGX+~#{0UcQ$cX3hEv4O9fXm!hVU0X+VwDvC$s85ERf@m zRSI=4UA;b@#CN~)1)yk$Z;sMo6ZA;R#;>?SH+1Md)Sp%skG|z!W#w=^R`9`FGIj^$ zLqYE}`Gk+2VVS&!cTfzd;|od%69#iP!@>!IY52;)8fB98=u)tagH8ofUrkgN_tK_= zrGd0_)_{55kLqAodN!UX{sf_%L%DG2W1SeZC*Do!d7H5F!jf1|Cp*E1y{vf1`i(KC zDX*c1pjxTpo8DG~l@5xdRgjmu4}tYxQ)Q2@1~-5INMr%;wi6i>{+x>#C?6>y>m{&RIZ1bKJpxN1=)!XhJgTT;#0h|%jZ4&%W z7}n&4A7OA0kHjhh;a#IDK$`PZHT;4*`*oBXtYE6>f~1uNLKK^~=C18um{V_KMX(6o zTku2s2#;y4*8p3pU?_Gkn*&alu&*;b(;u)=0tva1q*L}(cW4m>0 zY|q=)v`>|(Cl5pnComGKr!+&qRs)-CT_xKXo_KKZXNF!87^0inzKN?@DWpmy&%J0d$^C9?D*_n(U zfRN}86_XLG%PR;7bL`Gy(Ez6SR285EVnWKKBFWRp^U|$>6^8H2*PdWXw}fo3HR&gcF*<*A&N zx1>Ij_p?dyg0j&JUf>)N5XJ9QEz|QiRMWmzo#eQRd^B7(7Rl+(85or}(>=6eNMKX# z(>9Zk&fjdQU#%y zN@XwhD8}Xg5*AON0e&4g;6ACZ`L~Zg@zDPvff4hKrMh~C`Ya<@-n*&`oOZSC)JXd) z=tk3h8(*rL6_7>`Etqy*(!iOXE=S&sG7DZPWU72#d(9=*=G(ZfKxI|&$}^T~+LUNw zil~RvsdJM3oWMuVg2`->hCTpnZ$W0eb?3Pa5Z@%*PSq47+ju_Wa6Vp;pUiZT9e5+w z=8Dw^K1iFMdDclq?hBBk{ckT@eUNTDRe5-2QOGKDTnqNCWKrnp%cGTteXdx&y6{j( zpmK0XwDt5|ZGl5d!oV9Wm6{c|)F`i@Mb`l?;403|N?8D`)O%?eFih8V$TgDs&q|)^c?Xi5Nw! zK~K7@@n2%o7WLl~ZQZSV2J?sYy~nCVr0we}RPzdyauVvCzrWN=ohL4he9n@ntzpQs zjoU?={_F=N7^oPa?Mhh(iW{ZIkg`Prz)Ol3rMs|fzqH|5L*-+42BSMRuW42m(EEAm z1Q486)hcs@znz2rZ6^I+avVGS;n*FPxWi&xCPA$jVt9~=?-Z)Gtn*v?2`_WCv;FFi zJB=7?)xjyr={cY=PuuPnn!F?#esig!x~xh@V4};ltz}I)D`xJC&%wuk*4O@WQ@{6Qy+49=tNy3f z`3L1zpEJ*th;9lJu4lthZ(j60Yqa_2rrV<=G<>Q<#n<4Djb+w^H~xY>TpXQGHyd*6 z#p|2ZM?~3{Qr}#A`3mX}m)x-4n@r+U+kVZQC&{ds(i!(^??Dn90h-)sgtLOFbaa;bG{Bc4EKI;`WHuuce5*s~HvwarhFbq=u7oLVpZYS3Bd zI%S?a6~A3{MKv4%io{7^79}l2hhAHO?b#swonQMjc&iga2fdOu48o_~m*ur860Kof zegT_=CdgzfriED5fL@Sy&5v$0?0gM$r4L%J38NMSF8(v{v3wcs+2<+d)*Z@k^;$95 zf>PgFwihzTiK9e@n%TItw@6Ghg#~Pp2(GA8iqVTbYi`{H)@Xux_<2uNL{(5_kt&;e zLRKY0GU?-DwEr8RjjwZKYcg<}e#MLj8WO2RpJsI5kRlcMI&Hl2z5dIpyD({sGFPjA z(JQ)q{_LbW%;iH@M}5fLpHR!SHT8z*PWtGg2IWz)1(4Yx6ZrEJGr3#sMsdvy^mJwi|n!Rxtca5 zhMx;n1g-76{^LIDZiTYF|NcmF?3xVT=|pKDhYEMs;4JGcvYt;*F38C=p7f+mAHG`r9_oIOZ3 zyVZb+{X73LTH7rN>5GN!nxVH7z6rXVyGRK7aPdU^cvnwi4#R;aidZdY?VYHF;55#p z(8cZ?l+k}E2QN=_6KZTcfX;Uq`n*>e$G--gorcmcv%!@>QY&I0+%N?uTz`xS)%4)?Fsv~ds+JvTkX3(tq|X= z=!gHrD9)3|ZnfCFigb=|YuDNnEc2>hX^R~Em+9)sRK?IhJ6_G!PSAK|bTIb!PNjn* z&nT~pTjY`+QG@8u7f;tM6@p)QeSweK`N&eBvRd{Z%Q*B=`ySF-FaL~lUEKd@ps9ZL zlhCsfCpMvO{w4Ll7Z1G;y@g$csI{{yrRQETw~PE~o)#_HSw!gFH}N>YWGqS4R&xJ! zfi4M9&&QXDwJZl%<4D*z*0&74yU7zIU$Kv?nK}UkUcvp?=kGO)HT}=sI8H9x(X*CP zPP=3u=AcYh@>w(fXPGu*G`?U}2-)4t(jNq!Or8w<4s0$?Yll7c;Z#xQufB; zj;}>a7qGV?BvJ5|=wG9}()OBmje^AGYlBm;1VVuZ^~mIbuO3m}DUs`?4Z0_Fd^@aj z)Yc=%vUUz6Q3RBRBT%G7-mHFS7-omLQXxC2efGz}1zf)Dn1}wla5Z*f#ubvEx*F`F z{`x&w^7DE9>vU}ZYS&2Bh<64;AWacM+(G*v^e zbDP!IsA~7y8q{8s|~{J5@!iW%Gj%7dGzf*{phW zOM-hg$97h*Mgf=FQQ8tyEpTh-a2Q|bZh!eS7~l@7R{(CamS<;%_L%M}1zjjMeg$=| zkle<BVe9al07*!mey@0aJBV8*DtaZz?vgMQPWl8GylA0UEEQN%1#+ghTW?k>y zHY}Qp%wCPIz=etRb{;&n;pspLYQ%%w1=c;HnfH=6M)P8OBn%Hk(LE4ks_#tld|(A7 z+qlTJkZ0#gQTqlPGic={adLZQq8uNY=qofrq+~9*MECzIRm?gP9IBFb38NL4oO)?$ z2r6Ir)WnG0CX1bu+NKn){HQe9J$f9#}o9xT^( z%sU_;_|(CiA^;5|`L`@0L3MsQo8Z}3K`I?nIuOrZ$Y({UdDutPEEV)mZrpoF&Hc10 z8y{%)zT~k_gHH(38ApQbNEG$IVQ9dk;>S)tn0iE={`SoQiFHMlUMG-7VlNCFp5IBj zmLT4#v;Sr1x#>n&=cl&x4eT|U$(e=@V&ts~G8ztWTJmOgClYB2H>foRod7chGehBq za+8NobS7;y>mLj=O*Ln*kn}-GG{b-8=H6#VyEa)j7yq!SMMzv;>V|Qf z+;y9*>yfk>dih+N;1XquCsh8;jX}f)XYjUYz~y=$WI^E8cckMv_kBn_R6(YMhqL^H)=#A9|P(!mK2dli(J!aEmaN z47y@P0bA?kA-CD~99G5lzSAomlDZedmY2dZ=WsMrJA;tC)CKi2F#z9NxthFj5&7AA zXGU${Y5}<^v0r7UK=vOu9PsJ4MX*UmAFo<@U;3ZfR5b+Y2kw%(D#6uO7gl=n1nCp# z^xqgw=8+Vcsa%t2esERj5{EqhlWZ|0H`wWx1Hx4Z^w=9m^pWgZNV2inOkd89j$#5bp^;r|r*$5K0WR1O|rT8dE(u+YsdGw#qjq6&8(tMJ} zz>wJ?BdOM&hI5nu#dYBYFs(*BxR@gns?mYux}trLZ2!AK6{yMFq^Y|ym`SeYGBjz2 z`yZF!0^W-AYXfojg2aBm2(x3RBBXaLp~)*$2*6b*x#ozNt38?ss!yD|*Qtu|Z)-}D zZob}YEO1WpyN&fSZsXl6{8{P;gBD?jy9YzUHhMuN73*P0zL}oDiW-e3IJ;5a^zC0jX*)i8Y9ho>@Rm|OtDg{BJo~# zRvYD~=K3okjzzH7EeJ<97TJvPgfIv9d-Qk2e^ti4M}k`#lwrBrxNTp4?tI^O#MVf% z|H;28;K@qC=%KiB&_icdr>`~rN-K|-0k89`Lh=qdxrJwtaPR*gW%U0HmHz^;&EUU4 zC{;CFye`MQT!B>Ud2Kbw#m#u)2&cOTdgqAZip%JO6ttA(s|ytgY?AX~-@Z(4hg6() z`U~VpUHH$YX*r#itrqJrO z*lr(Sb}zIr9mj#PQiq(k==fUQ$1X3W(QQ%X}nr~B#ylE`!dPU_+Hc1l;y;&aA<%6>9iXp#3 z$>a@EBq%B?4@5>&L1gzI4R$-pbJ?*bJF-0|ld#X+oXB9!)Vig6GHlg_ zzNs4MfIL!KgW^+UIg6C+(N6B&{2jHZjCCEj!R0&>qn(AYo)!=w?4_;-T=a@!aRj(W ztvj$ofkyyNOlSOLHNgQT<}20xU{e~C$Yl$aluoU4u*nV@u^nC)c6LYA;h?%KQNE;P z01YS#D?Q@={QwqZ$T-f~iN!_WL#lSPM7 zobnBTg1@Ogjk8{LQ?T4s_K%7kcfox#{`hx{#PQV0H`+n%sul>YfPvbaz1IBOTWP_S zsFTO+vyr0fZ?Vs)fiQp<>V^rqoVtbW$8OB3+nEUM9WLKtSLSpo!zGX%#xqzR={(mA>eg$mIO8wX3aM2d zt{timIK*W*zjV~*QiK6lYl$?QcW?>l!bIBzJZCH)XQ+hNvSB zI@gH~Qm*EpH+S47PcS_^&RDVy`;3r1?Ds*BC^C^W$=kB-5fNYc&?hE?Q&E=8CYz*U zm=Nyh*zoj^;7VZhclm{^qMU}GAm-sL7R8(t39#h1`29CWtbcw>29VmyE_}n{l?O#9Eh)bho1hm{r4=2V^ar9>A0nq zN?%0HzZ(@zK zh=toX@77*1j|hWQX7_2EUZ8ro{@%i;1lLxKeD7Mn)z>Ls8`)d+UrPCXRh$Fy^u@WDpYe$X`qzrMU3 zW3bU%4V7jkd3L8*wZz>Fvj6X3n(qKzBkuFykG#2V*GS;+8RfPY9k%TUsd zskNvZd;u7F^RdS1E%?9V1`s`7{6FC3N?0tMoJ0BMdZBiieP|UK+sj- z*&m;ZF9j!%8{FcG1o-z7BE|>;n_p}8Ic5xY=##_HDI(NQ_r#^gx7_j$$i*Iycx3+@ zl-|fAH_Y9x&f9hiKu+-f@xZpDznwck2T$*(Pb3@9Ab>_>x=&ZQ=)8@~J5ZVeHrX2* zQ`=woo_A$!aiy$p@@K&hvhbhEji>;M5YS@7Tr~rV4ng7Q)HT~@!3m91Uios>i|_j5 zuL}>jTmk$Y&~;(aoPJWVkHZHD+?IS{D5*4H%jZ*C&%>CE+zZsHiAi-D_Qk46e3hiJ zZ3dh^jr8c7zFYw}jL;f8)`*jyArA*OA|2CKL)Q77gE!UopNs>}&Y%wh#D9I$Pd{D? zVx%t3!L84`ceoCC39rIRWtbINRG=ZWzni)axMSsT0d8^pPwr8cX@21Ns;TJh$*VL} z0toWrmf98CpI_+Ame7rO#r$P2VjZvVc{kR{{r14ck8wpyK)>x(b4?em!`iJ{huiP9 z-D^61DB;VXug!UPl|Bx`xf<~VmotnfHTBCDoOAccg9O*wi<$@&c+L@8rZ3FAl6YQK7J#~X6!=?ipCSj;% z74@yI}GvX5zx>JDsj?M$+Dc30$&UgiLn3!?#y&Dc(W z+l<~ziwN#V?EfMBOdtGU!IyLCk*P+Bb~w*+SPES;06W9@O=o5 zl|L{pFd>WoZ3}IM*DqpWcN<(I-YS(S<*g;<`fWB+#=gwjeSqVbbyun^m#N6N8i1_1 zYP<|?3n~G#--lyqRymvur0Cge2C+A)k*EpFiQMQSZiO@liL}8FmTtEG)=5@t3Xh&T zmS-T=OxPf&hD58;7NOX(L3r4XeYv`ZLsUA6<`{M0PHbh7tr#SgaOkpIn_ja0at~8s zQ<*Q`mLK~1cdK+A&;Qogbw@RweR;LTJ(?ln@~TBFz{= zlfVpu0-=aXZweBm7(}Eu%@9J57@9;xN{k60(h1FdaejOD?C?k7mS``vtjF;F>GQUr+ictYAa&-EjfF{h z{UT7Afh?CRg=qc~cIB6_`>Mv~Qg)IBtE4C&*e=QOgh? zEx}TV?FLJ+ZuDJAGLVG4hUVX+U-25+%sXR0SNh7v!q^~mGgtDJwA6AJcO5-uI^^5% zIP`l0C==Tw6?}DBC{hj8I3bW)G>}40Jna0X3~iRCFbW+IgAQpKY&l>n(i zhnuv(Y)gbIbg^~S&opE-Nn+?>UJ^l8P*bq(dXQ=cIx>>diM?h!XFPS(p1&*K>P`*l z8EZL;UbKvONEzejsLb+OoG@$_|FzE3F|98iTu^R=NpZOsL`Qz+yo`!Y>87^nU_-Wb z(WwRxq0tT#vu4gSc(}VMUVf&>8ZdHA z8C@GgZ4o7(AcWl7WMO<&zw;q!{;XUaW;(pQZ2$J5gyEueGFDH#$a8As)62rK^CZUm z_ees}tWEJplROxoR4+?z_(!g1cd~2M zAj#S|0BHSPA8O~aY+t_Er-Zq^`eZL7ft3TPK(AVki6k!H)<@zw3(dKGp7;Pi{dG_^ z`?qV~TzUv@NEQk^E4=|*O(6?eM4aw`5C_~#+O7W_91qPsZ0rPO2OO9EZ&_?W#8uYgVR0bmKIEBvpef@Z~R>Y2OT^M zLGj7lsXfRf@`|MZ+J83)a=AlcMgdKnQU;LquL4=;m(t8h!Om0g?ne}wdAXxj)e#=y zFs@KLGiG_nwW5#aMuZ;1Wp^^=yVU?T!_z9SNhscq5lUvIX(cQ7RhV)0VT+~2!XEoP zwT!}yapE8GefYMi{VI6T}g=Yt;bSY?$ zB{c-08^3Ai2_?SEKR&JUV#4q_&54-o@cL2vhU~5RNsXFOjbjN8TIl6d<0~JORx5ht zQ%7A6df;bm&>12Gyar77zzK{~O~J_?(inYuCj9oct)=c9KfW25MAAL0eVU{Ls+Y|T zWz-U(inwG^jieq@h!-ws`<~j-Hxe(r zV@KN?* zBZkeJ9RA?Xw#(f-REbgoZRh%_@y8dx#wAwO9vy|aIDb-*H*=O}p=R!}5@czl8_qGN zkmnndp-K*A3}RqIZm9{i+qYBxT0rlj+(bx@O-=z?Fg?0NdTgw(6YGxQ!ts9i}sDdtIh~ zf*hcpsPDh%=IHo=(A<+R#`496G#W4Uv(PlBlc4qBs^a=>h9PPpJlbLQY~26 zx$4Hi%!OsEbgy|5DFE#0+RJ*5&Z^QykZlGDP1Vd}g+IL|0m4KUi7D z17VMK)uXWwYtP-*ST%HToNCC6k?V>^cuA-fh4H^y zqa~?ZtD7;6>fzEth;Dy3v~TqLr=ejM<)LH!N-0NY(~X>iywvI^0`+R6Rn8 z4RTKI&PXKAx=DV;oBh1w&-uz{KoT1Kox^ug`l$nv#V4CGtsO10bkB-Ne7)coqW86Y zgGY0UL`)#)j$f+QHnPVW{C&-qi}$D4ea~!T2QFy)%)d9t;vK|u9|~EBkGq|>SNc$I zeYld-wiQQw#MR18YPiO;8I`C$1VW+sdq%3=uhv46S0n8mKitBfmF5J?FuJ^wKY-4d zSy}B4TML7-!y67Y-|8byuR5ecevaK)Cam2i40V0)z-5Za2iV7D82>F51m7wU@s3(q6C#^$HSpj$L~bb-3+Na zfo1r-`~TH%01tH~`$N{n?*NvqhkOn+JK|l-P}-Bn-hwcxq{wF2Y~NZB-=o zeYiVvMLPQ{PHaeY<6v=Cx#IbesXL&)G8na_dc^rBl-B3>uFd>u)zFrWyW+RCA-4qKPy+U&L`;a?7XI5rwQgUddfX|QY>VJ9;Y zp4!=xtuKGeHZSHz--vG4)1I%4kO-fcY zGSMh%VQLnU%^)>&bPcgd`RD0sli?v|AsD@K6%KY)6DC%nPLX3gT$M8jY!>MiEywO% zW)Q!f^1*iM#FF)&HEur+FaD}c!h@|y$^sfX5m_3o1>3J(E@TTS7P`QUq%71a-xQ}X zgU9_vgcY1ArNzz%@Axq%t#i}AHsTtscA1#nfF1Q$a`d7!-kz#c-4dS5cD_jqU(4ib zG3=>}MVo~hhjWs!xEv&-yznMV8`i}`v2FDS?N8JsZ@5ZI0S?n0SGmWLuAhbMNvY5_ z#R=Ijlc0_&SG~ESr}nWn#*73ZG>dUaK3TLggD_S{Y~)4q_IkCuNp`IZ`;Ur7kXk;b z*IUrVCh)Qs#fP{d?elBCo!%NnE2EUe#d#QS}ib4OVFY5=30yKu$Rt= zwWjvyKLO2)b|!p9A#TqAj6M<0%f9?^*i)Eg7oIV_nr=%zX>Z8amCD1{X*EmKOxMld zPMJ?%%H(u)RoA&YXFhE7*DenW7i;NX9i~gM3w2(HIX7dYD6DHk>3< zIjdUh+imriRz9>amzk=o-s8~1lftySLdJ=#Sog({3NHzLSQ7g5TqQGwLB~nuv{(cy zCv~n5vw7|G>D3as6&;4Xiun9y>N|!(_8iA8$B<4rw(qWP`82~Q8Wxz7b6JD%?p5_>D|>w)G`Q8xEqF0Epa?ob>DG@M(gLBlFILE-9OR}vmCW% z-X8eFC~6v?NwaP~cd26h32lqR+V&jGLA-MgGFIXVVro4EeoS-ogxLm2Y z?IkMQ)#Wy3&U8+pcuD3mhFv;z&)_J4P^x}^Ua9v`_}f9`_hD(lzaqSuR2;?G4ahKfm->W0G)M2d8}qUfnlXpC~Z1 z9l$+zY*hViVy8}rbFaIS>Zd;Ew*2#ulH3FpcF(K>BlL=UA^ss8Q#+8P{41~Raln&J z4ZyS|7Tda5ckWgW0r4bd5}$i18KXmzVK3J<#7GUOc5%vzF<LEVyTTvmlkm zUfFG&CBWQbN&?dZ#%4#`uK(5AQ1f9P{4=|=%D7Ge7sv8#KEA8rBEN`-ch32*pCXF; zKMU?I4Bueg-zGo(CdP8yo^3bYtX3Ga-UU{z7x)h5`K9Jk*yMK?kY2QO5%qN2WunNs12eLJiASIL2_^iF^*z;_R8Ku(WQ zyWQjmokUc%d#Alcj#e})x+>zEDCG&jw{bR^;u7?uGcGr8HceZ%Y_VMZ&a6NHq&D*c z8~C&Df*9lvNUkCmH~vASk*zIB08dGcb?QGe4lXRlvF zm&E{`9xc4oC;THZ_6iS#aIaAguc+OTGMIKSq#VG8O~XGl%SWJM+L8GeeNj=Zw-l@f z5GLt+Yp^n@ElE?hc%Z~Jn(;2XegP`}1o zr?YjAnH$R^`mVk?Xk_Lz5=Tx~_b-)qoCsM}w=6G^??!IT$ab5R6`kDO%e+^8%EWr@Rcg??B1H=cuW9sLboJrh66HPrIW)ToOnI# zAVP)5?S|}9UxErj#T3Tf76R>p_7+ad5HeVuLbf@NZ+>^Sc+{H4QpW(RN8-+X{)xPo;PVsTd>%!Lpmr+>Kc|tHH;3H9Gd5n0_PpLO;ZmS+#<;$gYU*>%)k46BhAXS1 zX(;E7HJAalB4G6B3c|+%vTH=6GnmMK4VL7X9&%niW7iwN@lk@^`?H=81xu21)sQI_ z)$@~!GjM(LAdRs7;Fm5|%+P826Y3zZ@$}5fBc& zwiX23Y}Bt`oQNX3a1}M}$zl~pGUN{g8@6Q| z74e(=_k;@L(KTI5b9b;ZK{ zo3ouGUaislr{OC<==tAD0~r}5k58V4M#n|`euX@VD%uqng+yndIP&-{#X$}39+aHb z^|tj95jqScJHU~l3;yEp!Pu;SEBO|uSo8!G1C_748QWk>(Ww?UitoB8%voPtLHnay zc*<2)yrgxIsF|A7{DECZds;y>Wu6H8bGVG3Oq{=<6yGTJ$uh_8_17uikiVRN`RHC) zk;5xMA3pR4?Md%3%)zT_bB${Do_<9Zx^?^6cErNd3G{b^6ChmM@%n>U;ql5HT-jgY zTKUQ+N-oIK@_X{zb}EunqB33tTk8p!r(Ljh_4;Xu2SHtrFl?k&k{MA%!K(1&syVrO zlg@Il(<&7g^oqcBfo5A>Z%4Xyq0&(|e+(cxj#*&b5lxCp37o943 zN`+{q4e+&Hq0@1bxClE7Zb^^;Z1mz4(4M#qm18iHXA%VP*vb#_{x#*<4f25{U2X_6 z*7c2iWvz%+tya>71cI;HE$E%yn;onMlMqoaT*q#lAgPGb9`bIwkmR0V z+4Fc`%7q4$n%p8~P#zz$Y|pm6#~TAw6=Me9E~yAVJ>1>cYM*mlGZ%+xjJj)kAIfd z9W3qaMJ`{RRH2Nzg_Er`_Li&WMJ1=p=gLA*B?_2skZjAT^Bx0k;^ zXph;c97j<$%O2zK5a!opqB9r+1G5#WZSVTkR}1>d|7aZ?wAYy2|B~vWc2V9DegbX= zcWk_UGU4|O`EEGHIU<+A!8TMFynIK=O%J4ZM_RA}IfOu41^)w|JN}Qhod3N1;@^11 zzQDT^wLhLE6 fAA7`@`~7FNfxBBXs;6tg&v%#@Ss*BeS0n!ev9@z^ literal 0 HcmV?d00001 diff --git a/assets/figs/offload/fig4_en.png b/assets/figs/offload/fig4_en.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc2a32c3a132c7ae2c174dd9de5f1852c0d933e GIT binary patch literal 46194 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 literal 0 HcmV?d00001 diff --git a/assets/figs/offload/fig5_en.png b/assets/figs/offload/fig5_en.png new file mode 100644 index 0000000000000000000000000000000000000000..489e20f5b6a9574689a125cf7fecf7dbd82336de GIT binary patch literal 28465 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�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

v{e=YMzaXK8-mx`^0g=7>GPgs1Mn}< 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 literal 0 HcmV?d00001 diff --git a/assets/figs/offload/fig5_zh.png b/assets/figs/offload/fig5_zh.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd30e007d973774b799c47ed83c1bcfce28dc27 GIT binary patch literal 53596 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

Ixp6PX%_Dc&1rY}v67U35 zbAdcJgo~K{xonNLnoAty3u9H}IV~(yn5@=0DoP_ZMsb9tld!YZ*AXo84|J#3=g+C4 zooEnh*Zu6ellrRNRaxFixU^B+VL9fC(#03yU@xa^RoqwC^L2>tuVyR>@4pmhDvN(; z;&9ONV`&Rlu}Z4B?tIV3=Mwo{xSjih;{L!43$z|^{n>r%r4O>xJHcUd;o>=Ho>cG> zEwVj^&fw)g&YNUGv#veW-v&<(YTg73a&F~NCUfhP`>4>pD1Q#_Iy)4mu}dr%mVMavDpEEvfk1^1DfpjZ!v1Vr z>4(vKhZgc7VFP|a2*&4!s;XBge-$Z1ReueOD?U;K7vI}?ntZy*0pprX!!v^4LG%Jz zswe3S1l{|rj}!+OusvhAr_{RUh>;yCW-#MM?af_fd`6$(6lCN-c2!#Q=fb_+Bad%? z_kT6LHmQGNwBL0QEq{>P(xBfV*tL7~KJ@N5$FdB6vljZ9RcZ8bc_^paeN=jdr>9fY z&eX5B>I};P-EUlJ&>K>xIa5DU?%y{KszEi9tLjGIoXU2hnz&;KqmmIn84^gkQny~y zTcXZ~h?)m@KRBC|Vr!=n_~iu1ru}K7F8A7Aus1?mI>p|oK}~X0>Ze(^4Pm$Wl16Ic za3~X67tgiNF(_FGXN|s1Nz>1tKYc{Gh=#rUTIfrqM-uz1Z{wd+1~u^5$4qtc*yFDO zPPk(~vBz9ijF-RYR^7bIWhm45{Z@s2n?2#GsX?B!b#sFxdfB45! zLEMA8toZv3p=;&N7d4r}yS_O^n0zh?izmVr_vD`U>!q0Dq)nlC@G}0dC{j;F?cn(F z>oYno9&YU@zBWBR^uUQq8=_?{=?{&cSvRTPf*9p3sShPo;(H*j-;B@#4}rk~S224h zr@xgZS^7dWEK9@G9I@TVg}C5vvK%-$wOxxP-FAzmkwgZ&CU}@Z3DV86*Q%DE%n4GXR{Chq3?wSt!S&n~rCS5F?cednU)V!25c=mi!?2RC_YuzjSP z+(u8YtMLw%d5*kG`NSGjhDfYcP^Ut>!S+VWNmzVtD66G8R36$aA{>VO;`D+Iji<SAO;cU0FIua#VEHE+@;tgKMG6xJ^5!GULg_~t*!a}bV3Ad znlK+xdg!66g`bpgM(9OOeW^l`ujL4*fnO|vipK8KO7*%yQnEzbyFb;@ZHE#-HKqdJ z1_@fVr83;@I%gU3ch2R^o5)PWVdP|enVR7;Vd z28Mzz3bKy-H-e=zH@zz8^u#!phZ0E6gV~^1-@`xV+CdJmzFQnjlCx?Ge`~+CeD%4O zVg_&u+$;p3ZK!Va0#}bMBl7YLlLtBR#^157$l%aTetoi3Fp(-5-{J}ZdE_MaD)9J& z6*q0hn-7a2O|+zxF~yBLZ|69YB3@Bf<8!qHvhX(|ET7tSFSQlEh))IkFWYmMK(Zhl zt1E%Ft_Thwj@s})D~KorqO~;o6Rit_5kYN_9@$q&tOysAR=UbD>d@oy-@h$uM<0s! z(7lRUlV7V}nw|O~akVREPI3M`NcG4}5(X+?Z_mNT(9N!-`MxyPD!hEehrD!z!-9=w6?vjox{x z2|n#X=!vy6VG|a%RO<*acpYXmUo4(I(RQx9KmPCtc6>0eTlQ>(Ywq!Tt9VBKZEY)W zgMZ8Hy{Q4_R}g^Mn580jy7HDL`rM$1R8C%A&Y!t?I<*lZ&u-&rP(T zEW+`uC`;6a1v%+OXZZPINGA!cn1mTHLFt>QKeg!fiMQC93VRoM6dJxmc=BYi_5`h%b6uzRLnnPXM*3nFJ{4bquR{otUx(Qq4c`x` zWHAYOVzGuHm_kQNljDrg_bdElrUgwdNfdQE#$&HS`HW8Z!;l+4=;F*!m|m0dT^uY6 zU$mC%9t$)Q;!+9hppx=n7fORtxcQH_BW4QO*v$2brM0CxIAO_kq+2DQu}x4<{Ndfr zTeaBhBCWy`+FM$YJnx)i0LY(i*8qfkKJZm`P~72)q~KKxYgZ#bC=QD0q!3ti453TC zV?X5H{I88$MF6Hao-&T&z(o$ntls%1elYW`u7~r@cXJ$I#5tmI-!1O2cW&dGu26lb zIr(;Cj%x`7k8f;8nuPG+@fB;*t0RHYfF9`z92k9Y*}sG}dBQnp%575$)7 z7%`t1hKmJD$w6p;?zi?+3`ivQy!OxK#Sf}gstp3wR_chwajE%-$;lx2=0q&z?#H1G z6Srs^g2o%e&F)XGFJIgcen>l9{=|R@9ZqQ!f4m~wo>SVHw>&6Wb*71yGA+_Cwi!1o zU^+01_G#ha_Pg;ag0G??Oq%MvmDbB|O1-Wo#(RR^*G&NX{nCl~_L&$RxWhAjXp*s| z8V_6(HlM4HgAfLTvFU%fqu9OiaN{(SHKDYJeg@ zG08LxVC$=Wb$PR%OHe#|DPKLbUBpGq1^L!BeD^E-PSO_{mlBLqU9SPINjeMBNiUKBY6|}Z)d#b|6{i>@X`?_3NWeFDlhIYOGaA4eMI5_0e?o=`p_Hs z4x~QOPgEG*Ks@1CyNy_=5!1F`f*D&izz%R_;n3NJCsU>MB+4}5rAzKSd{cn+p{ zL6_(@O3g(Ln{5pg!ID3}{->$jGU^v^5fUsJV6dv_<@s80;Bk^ocv9HA5@w+}i8NsP zE|~*Qvxvvh*@e6qVHG3OQ5IfYp0f@|>#ynprxA-=QjGzGfGjFPw*(-z5hk|blyD&z zCF|5CW(s9?t_%Ej3JXuAunNU6f^1~`FT)>~%T^Q#WmGGQ&okC)(|}75j-6Fe@M{Ud zszP&&`Qx||(rM0oZ{up24l(bt@IWQ`T2gK5vpM#^7zt%mi)2lJMyKIy)o=FG<}~Ic zeJ#Zbhbj;H5@X!qc13P$Lq>Wh=8S#H_|GE>ApOMs4F%VKA4-@T*}Y9awcV`9;QOKG zLfJ%0)1iSG$`S@%&NHmWS3rKA6-GCG-By(ayCw95xmaZCgxnM)?~&{@_Uo4Z^bf?L zo^{0IMI3s4i`C+th(b77@b9@?3Y+A*mUtBqA@>0{Acj(tSiZ@5){9AyNyy*5v$y^m^61-(qDn1R{4f zyWW0S-lh1i{4r_iM}jbxPXk6ai=~`v8@m=LYp4SGRR1|(QY4ap=HkBG)|S~4aW%Do z{^Yl>R0}%}cV17>fb$_Ah8CjGEK2Ei|Q(W%|oa?hPO2Wm6)<6u3;malflTDFwn&EYp=Y z^tsU*7cJf7V(3^;ZaP_HT4PI(bqmv3(Ra?(bG=woeIYhW*|=6=qZTXD)dv7yhzUae z60@DrQ@=WVs;1RmI9GB1U&^+ow#`A$SqVJgzDOA^*_lAv^R{`bSlLzHUNy43Op%c# zpc?Obd(jB!Lf1PQ3Zq7&SR#R{8{Pg=dTMpX!PRloP=U$>^|US5e2+qi8g*!g<^~*v zg(rr!iaAn|=DuHdSpS|@l12D}Xzwi&hj*u4#2D2qRgI@ zn#}({TfG?cKVMXtPa4FcE>gqRpTH5J-rh_PL2R$*?gcQ;($C=vg7R(ztlLbLC8FL( zcjW-Pf~weE$P)8mpYNUTRR z_GqLYzsOg^iFK{Sm-MJ{763tV{a}iY{B-{7!ni60vI0OZLI~Ppbrh7DNBViaWfTdB z=^>`+ef|9W8 zBOM3>59uW;**!-jjv$5-8i{kPTm}#)N@fiA36IjmDns(}bIZ8&ByW*lUqpcTbxlie}@rRUim(cA0&R#R_KUMQ?#R2Lql~`?& zBWCmiI&{z)z6i70_RL+hY=-^x1EFM0X>P8#zctbTH9&RK#hD9{c84Fl2tn8Jg7W;{ z6tT*`t^8}Z`OvUFU;gc?Kw}Q3KH(cuqD(cEQwq-Ad=F}+hfQ17$9b>GNpT5sNpK(- zz;RCM8xiMNF%QqtnDVEx>n(KGactD_NUK^qv<57^x#vH35-y+Zu`v0o`Qx|E*`@~d zgFC+6+J6t`ypR`U_=go)6`WST%ZJx+Ct1KotF#Yb>vRw{1!$}d-1ZPc*a&KnmsSh< zweXJZNkq=%ClyoIZj#mT4`JgT^Ye`i*IB^dGQXu=AMfyGXKXCFz2TMSW^f`;DygFZ z4^pV*ChXQ3#awwySMG zaNm@2x*2Wxh>GskGjY>_o?RDOeVy?4v-U&;cWELicYq=LItwkRXi}#~wDz)lweaBA zQGo`Rdp&!h^Yb?6^mipx-sMvg261U`!*#RcN8lz6s;c*FIvV{QO6TG~un>6#{P43p zi%*vhl9xnzlBlkTC#+Brb9?+OQ7zJuUlTiIZ(AExa4eC3El2?aowfmfDj%RWq`)0Qf~p z?Y-KR+{2wW4@ArgU)}xt=UtMSR-lH-m;fDGHgscp`r^2HOp|<)qL_=k^A`C`cX?qw&OeF`HQ2d|jTy}Q+qW$fuCW$?*p|s! z3rXiM?|irSzi1p_F1fVM;?C1%7#a+|o5jMGm_VAVrciB$E2+sgi5nKQ^n0jcoD7dG zXW%p09Ji|TeG{bf+vZR1y4`mnJmSFxtHCGu^j~HhU8tlFofi!U={3x7MMW6n%MdPt z4J{L78yJv^_;o^DZsCJ-13dlr8T#0?7^aJ8&j|O!XI$MV2+eLc4rCwnj9?lOXwT# z>)!^-5OIdN1Zjz{cx3Qt9w1mM(-`phU(|1*qZeAM%gdo*Uid5KqE;XcT34?80LB%6 zpS4g@nRKyd_(Mmrmr@Fe_evh~zp;v2Jm%g;q zW&z_>MJGm2JO?U2q)>7bog}8uJ(BkHQfl^r{Y*+#aATM}CSCWPQgzeai6gnNUFy{N9JOyPxRehobu#VOCuV-06%i}a zx0*Ch9hnclSZo&z(mVJIVPe2IwI7dNio72JwuyUQ#aI(BO>2VZ&8*9u;L>U~HG2Acn=a-==Cio5E7`5a`f*?P z`{KZ0?{Q33xBj|UYOj?_#YL7~^K*T3?~I%)pvr5%;o0@N6j@x!wNAzU25~ zmKN*?aS>NmR#FLfCUNT5UV{_xED%2P$-ijn>)v^aS_!VdQU= zk^J6_g7X*^lC;4T+)v5ZUxsC&sn8wO9|pQQmm-l|EuoCrkdQ}_z>q{v2^iF?dVLT{ zlYeT!<)%X!md1oa7cr>+SL2#q)(!WqtP0MfC^Dfoc^?c0=P!EWf3iva=l9LyNr1HG z1^v~0KyXQbyA&5WtU&Yxa`&Mvo}_qPa`COir$L*rI+|IEIN>?|r^@KyP9A^_m%r$j zt_~tA^0U33R!dXC9(euBdb{d@EG2T(e+tl0%Z8_@n5G*v5t8YP$DB-Yqa%61EB&HN zMSvLTMxeTxEv+eTg^LVPVtQQdmKVG@^4cmyv|_I^&Hy)Rn(eyVaX7{q{feo>4O%dacU>pO8TzM8jE z*VZwed&rx1!sBryup|Ih<$!Goq!^oQnmCdMIdv>V>W-OOt}f1941E8dR3TSQasb7@ z{Pt#^Z)Oy?lngZg!UR6d_;GgL>j-;JQmOk%M}K_1gu7vIss(NLIZMTF>oBerrrTWE zmWR0{(&lHG=wIaJcjb@o|JAfb-zc#fr$sQDX&7qLHd4E4?QYa-jh_z06O%l&KAra+ZZ$QAerEGVy(rVg-HgME=SzF zibw#E^*_Wx4U%RmCXhHnVLN1ONyz}^nlPb%Bf2>gtB2oiIIlU`Pg&med41UaXHPn| zJ(PXFVe`>abF1L(ov=?&de?()N7qh9JqWU28xGoWHWq*6Jg7S?kk#<+*K`B3|NQNR z!m2W%qlwjIJ*I`H%w7hwt(Yw>9Ap0faUvoa~>x-AAFG;K+=?@|zvWNY9 zT?3mm8Z2AeEEM@fp9G?{y<~Z$`Q1h&-grg_fi&wlT_{FSkHOOI9Y6wXrC*0%FurU# zM=#bsIjxJh<#@V&$T?zD5WVp1lR}D`Ihh8Z7H6-Li&R5@7nI}D^wLRnzBJ$85vm0C zj`dhiW8rpa#TZjnv;ej@qnqo3#4020wudFE5AY%8RBUgXBFr;Zc?q;h@Jvk29}Tn? zW*5ftXYy1in0F~^VpZ>xSGVWxEbV&7y$7rUGw;J)JK{+@2B~cy7}2k~+Eylvzd4(| zR+Cn4Ih6@nWA`%kKu$A(`|4&;glrJ_kvinu;7hxzYgn#?Jw*x2#al}ErHvP-g)f=g zo`p zl=n~-9sl~LRzE+z-As+snGjD~;fyPS@oHouKo%;hcwxggJ@-KbCQz~5K@aXL+#j}% ze3bFHmxRHy^Rc1iSYABxFnF|0;e?4qs1J) zUrotM=1`j-54jY`N>XAl_xM$m*u~@jVw*6KK6*1URh4;+9(}SVWSb~7BQo&K&Alu> ztFNktpH#REL3@~S#C8Rzvg-9caw~DXc3~P3&r6!O`hV$&!aaP z!PY?3CVkW}LEgh` ztgI_IhE?zLqf$<%G)yK0{fyZru|VC~l}d_HiT>h{&Y9AD>E@QiWP$lXs^qztI| zQ1f!_&4YJIN1{fWk1&Cn*&2U;3}%$iQ6W$EH>(*zUYjiS^sthm3jIG3rgOLn&Spv| z3FVT5`F?#kBBvKvsdiI#D;X`i=Ecxx?8m-gnRICj2IbVvr;8{22;}_#FclQ=KTOqE z46ve`zs3C$e6&)>y8hEqhuG-9qY}p69$G3=F!>~~+M%dF`E!(SebW)VJrt2#y8Z zM^y#Z1o5l(F`~I*NCPe{SVayU&yT2QT{oH!)62s_nkH&7wd2{kCoyOYn)1M0Mowh? z3*5zCRI}AF=u*$j*C+Fd1KDtI#W6)+_!AyMt)S(fpTGV7LvHCt-eTms5`K3YdCS+A zg%=|R*Auf}v;pEMsqimIwR6};N~an>CA}SkN=&mV{Ugjs(-aXGa;_L(iNEFl>9;Bx z)sMQ)mu7}iB1d7C{)@dM$`K4La}3#Ug;I(ohq0*XCk|5j6!FJWYVD_Q&&0jIL69LE z-E|^UUl~9QMK$#7RqYTz&SQ5#0GxSoM-X8?X12os%NA66y?Rm1zas`%Y>@4PwCmx# zZ(>o5`{&R-1#ee_WFxDU?)w48gLcB(5q3D{EInVj{q*-Fujg`k(xD9KhCu%J%yyB| z`kqg+E#S0Y3paunVEMGv8*WZSIFGv%kwQVGzZ7#mivM@Lle7>B&Oq;t| z=f6TXP_xrKR2Hz&-PWyKBaja$+HX>UGbM)aU)Cc^PUNJ{bCjJ& z@7S3<9ntH!J)TdE&SpHiG`D+0M)TBWG)lD1o!7?ur9~FEcnN}kKCc*BQ9J}wP;~sj zczL{xM&quUfTv?2^MM?{p4=_ z9;X%K=Om~bmRx~vg^;}h!;gm=1S3QK{&}n&)1?+2vRwK3220H zkW~B}6*#ZMysc}@o5n5c9!{NrECVpIzsfE$rp2UT*p%(GFLQye_^+n}l$J^=I;jz=#3Sm1Rhd*jI zbV!^o&IJ3lL?>8CRaCatDOGZ24(BRA@c9%?r}y`&m(f4V57|UjK`l>B^kl!Dd_9Kz zMu)iPpqzB$efF{k9eUc8j(;?h3)XXy7yLNVOofF{GDJ^*$HIensKI~%4)9|>U5doQ z9cn!s?}~(R$EEZv61y7@9+DtcU5iMhoq3#D+ub=M+b}xFu&Z+4Z^~8Hkt`B&&HH&P zDM!U95olpVXY<%fdcN99x4~?*-5;^;&A_;ThZ;=B1c|g^EnP&!ad+&wC8;#Ike4y{ zZOG~i5_(dAw4SK6=n4IXZX}=N=4NiQ@)b>+sZ?WCO+(Y|v#oNY0ItBls_Zo9MYVqD z&{g7v`*XFuxOUgEy^jD`AEWTrT`bB8*b>T4$UDCz7P0&42!^n~8U@e_+n#L&U4r78 z>DY%YmzaLty#xH>lw;2(LT)fb)XPy8sk0Y0>*)$UC(^mOHDlrGe)MAj?&1L?x@Szv zUItV(pJN32d7E_v+AeTjj%f_J?~*S}j+1kaoenK4FllDe>wilhX@BNCq|_Q)+<&`u zMyVmc*27;&VHwYx$XMXjGeKo_TFX}&`JM9p);3Jz_XMf3ezFEy_@Y|a4Y<=D+{F}K z_X0GGbw);9wM0aaNUa-tA+qH7fT+$jQ>-Olq2zho{=QT%=n*FPP%&gp!dzQi{P6)y zm6>v`grMqA3V7@!0N$W6rg%>qC6 z2W-^b#V=DZA#_A9`cw$Pi{4tQG`BOLN2Igv?do$PVpF328=H^YkF8*i>c#CJ)M=8Z zCs*uC>6GB)fFi*n#96ByqglQd==uUwkzlAz{N6;Bv3_|#SW!cdvij@uLT6X@3EF$*BcdX z)5zmWcjxaynq~MUsYwm=u(%HT8#`BcF`A;()2D`$=tSp$2OuPgBLXxqa?>qtjp1|OAaQ<8N1t#<)<{^p14|Ce-_~udA zV8ESDJct0_$gw@!tHOQ><9Yk+ji~atAo}lVNZatM*_~O(PB_QqigRnc6g{H14_sN` zgJb9llYSHdFLfXFSR!aYGtx963b+a2k$TdACp4w#fR=?-^38*I@MW4t$Y<)rn{+=} zZdZI8&BQ!=v^7VI330g<#0^U^weG9BcaJ)G)DG@lZ=@wUv4SK_JBB&xf!|quUe}D-tTFY^_3YXTJ{HvB8909d-KeR6 ze89xG+6z++PoeN2@52z}{vwENeaytDiMHgW0EYv6LQj8El;P#&&#x;+qYdq26NdeK zKWJb-O<%I6b@9#O%Z2_HVM}dURuQN(85#XMuTLZI2_K^zRG(}g3;cizGYhDN^v44q z`>vUw)>n!Q454-Gu23#k;r+x9=h<~}8F!cl;yUtE-RDdDP|=Q^cR#XHz;=SQOt@v4c%{BOS<2k4xPNeC4p$7f9~JAOP}ME<77+6`FL|gl=Z1V3&w1zxub{04+LTP{ zg~`E0Il{_-C1BvgHGqd$x+;d$n@6mw! zf_P>UYXMaSu2%+G@L`52DQm4_#Jnz9kbxswNB_Lk!aJU~>@{18apN;mv?5qXQf<8w zV*!A_M1uf|4J(jZt+kDfq1Tv(){RY2SlTVxjhZ#_&upowH0Z1+>TN0Y2ngpD@uN~t z%0v}__j;enp(sUQ;ztiuB=Ukf3&5KUJmx3oEDF9b_}ml#G+uLxJnl9-+-6W74#}&d zI3Ns1L^%oZcbC^;h3;NBX z#+WO}Z@Uk*D5d8TxQXOA&vhn6;4Z>aZpfrOH1bV46a1r|jm_~b#fz7dYz~i3*W%VV z1s#G9*ND~>mGl=2l!;;}jY~=l*v!FIY<(U^tcFzL=`gg9NScb&xQLM1uS*C3e!@`% z*&lwE?Zqa&h2Rha&U3C808Wa+EV1zrZWT_-kNjF>6Z|_zCOiMwe|Q*7Vx0`1&OpSr?UCrhRQX* zKrU*YA>#%e7IH%?71wb)?OoK{H6^7K!;*M1FP6xL*3o+0RI|RWI(;(P3m3D$X#>?I z_kRD5dLGvPPxOK|g999k3TCex9eA?zJjk0;ex`xz2~djA@3D=Bz200morNfB6FE*t zQTQ9KB^dB&K zd6{u=-mySY9QQr2{phzb(h^kwxB%Ht@S=9yy%xRKti?x1{qyIf3slcxXiY)_W#n*3 z_u~GG-kRuNr_L!K(<4o@Fdmg3mCgcFE$Y*9hgfFlKHl4EkN7&YKwZD1c(08qH1|Gr z!pHQSvyP>RINvf#rr|aG`oV-<&ich)bxpJy=tq~V8gI8*tyzYM|3`8(h+982P?;~q z2$b3hy77a^T9NP+_xQSlM7`I|)vmHKDlr>xrigqnu1|%K4Kl zqU*wxMjTG!AgUo~OkmKTHv@prU0p2K7I~_wLE(D5hF-UpVTXB* z$a39A)!&e^2jIqUSKm$h&pO<@cdsP3d~LraiG#9}KT)B#Omgz#~4~B~?7632by}=gulYa&6 zP>d2!P^rLoBYH&E#tMK73Vj7Y1)L{;MM}>Gx?KEK<)#0hKg(61%Xa`%i52jdycWu$ zY_KS&Cu$yO720;aqq-^7W)YKKf0>FimI^E|peRN4JjV!}7T!oeRP!Iy42L4D_F5%a zHr8Yte!Vi{4u}D1Aj(F)m|MsNSctsE!6D2VJ6xc7FQRYG!VpS$n0RmNhpJEMPuQ&g zeXn#w(Ri_(yqTVHUpP2W;j=}t+VpLdw&&l|18)XgqP6&*c z;e}opHOG~4Q8=|D4L7SK$3+fum)TX)lr2hiP1>2I4!t_k7Xgh0siS9dENyPJmNiRV z>X^B1WktPF^C(kued6U^tXYkU4*+S;Bc#kDg58IMYR4&EB;YujAWe~odhn^eaN z+GuC(>C5reYBy^%ZAq#JN!J|c6Ynq)eeRov+ip)`PELgkjN)x(P0qSH#(-wrm*sXQSN3ZY zD)3Ep>)(I>{(a2!>NPiy&Efk;E#(&<@|nM_e!ST8p~Cj~_vxn1=f=;^?OJ>suQqC2 zdYqX-ZD@6Pjw`mLBKl&TcR)aC^JPX$TFR=cQAdfe@4PZ?TTQ19`7-x9THEASg2VX7 zv3yiAD$R?U$vQvIz{cO{mC^N^A}Y)#hez9WuOH>l?d{CXme)G!i{lvNab}F;xYB=I zkYkx*(KCz7o|K>@$855H6q$%E^(_2U*UyZumHUNpGN0=C4W6`LT6RtV4z^2u9|D!3 z*~OUG<0cH|o(aI2!{;B@XZyJ~B*YMDr=IQhyWOmPTGEc!t;NVe|W|nKF6N!L7x$uWE~(@9IaM4O8Zl59ez$*ljew z@bmY7;gEt=l;;f{9cROpE13$Mnd+~>Rz2PY)K1Sbw^46I~ zScWWbOZMuBiE$Vbe}kR!Oi8?iHCZouv0G=9Yo?X`@>GM%&Sh*E{bVkGXi-^Pt2~|s zFrlwb^yl@#rsjkH%U+m|Xq6A-3xXO${~BzE=Tn58P*K0VSNDnC*wXU7w3-Oi^G~8O zw2464`Hwmjkcpoi4`EAl`1nC)SN7HW4%4T_y2MTx1T6J$m~W*ox)8415CfP$#lmj@ z3ZK{fVct;)V2F)U&5HxX72mG%JH0g8)Z54pyR=55iLEDQQM z%#~I0h4u`WUCXtuy)S=cf4nr9k&As1KEZAKF6;9c_p6R@8J~lvpL^xo*t|HMnpJCN zbHgMD$zCXN$7O|6es?=6vHePn13E^>TMVG)>VewRCd23BAm+jPd;7shEcYAz|ICDc zFWlYWyQpN{%*N*bda?#fUr5=9~<2jIut6gW`>A$l}W^DAt`H^asAt36`@0qkK`>_t-U)e7$e<@Q>R-5XO;Nq=B4P8s# zq*nI6_cv-VeFVT5!*@X{+dEV?>0z0kIB)1ih!l8PzxbT=A6(+3RD#Su zQF*|DQ)Tc>^v+Ok?v#{=l+?O5PYNo1OFs=-Y5=VnDo$#iELtq-F|e!nyPC8c^>e2~ zrt2w2YyqXS9vgf2kBJ)fGhs#ZO5&+m9KMKDC_z1PmfJj?^mKXZw;pg4m$m2=z z8xGl7S^d|R7?(J?^u=g6u3Za9?CYj=S}eU5)aqZU9%SbyxKx4(P%eUO>0-zIe(I!$zrn(AxL%ZJUqF~M$;%~@ z9?D4#4r`zBDnQ`@51F7aw29(Hd8h?62BJX3sn;lP+UJLWE>PG5%U&98IbJ!KZn6q+ z7oB4TXS`8iGtN`S6I}eWS88Q@w+z~C2@#ho;RmQXU! zOXqBMb;2KZRQA5viwddP6c|{&nl1i_|8>k3saSU`aDnvovt43UA|}&@yF3quI=ds9882grNHwDs;>h*d7?;pCC9>6vm=gaJY|UKL zRjSbP{L2>ZSxo2Dc8$sIg7=XhIG_2*b>gt@d@)YT?0b>OtJoCeefXeg z$}Bfv7YhV|-`5)jlLE+zy7I*qZsyRPs2Uta$^6gdlC~PXEoUyK_DEKjtbP-S1#;5C zrvu11m+kPUrU5Cw(LYsRX>NSXS2uJbx)C6uU^2)69aO3PIiTL*DHAqgrbpKDby5|k)$NUDu^rhR$ zhit3@7dB*U{D$1*85AD#QwxWNed}7k5DQi%9W0vY*-CKOVM}dMItdf6G25i|$4}?} z?WiY@x0gAtmaaPVqssqK+VUx7^yA$`w*A+tXpiH?n9m;if8ibco*(4w!|ct1+)BRm zZCvu+H{g3eU3EvwS2Ff(a_v?3-ka||=xa0OWXk2g#WrtkPWR=^=Z<{z;C{LnXxEo> z?_39v1lz;>yPa7@mi;|A02F6PWEjfw|`F! z=uae}&|93kYhwl!gF$jcC)OI9lDS{3@TlKEAPK&^1V0$5&WDpbnr@em)$a=eWx{7o`TeTLSF*ZSt}O6}yNo{;(f zVd|`-ntsFnk4TpcHbSI6Ocw?+T=8NqEdY?YK?!MLeT9$oo8uq$Utb&I&)Q7!Gxv6sAG}2f!KeAi18A;Sy)1l+1l{>9wn|HX4)kC~4S>1p(a!B}u5XO|L^F4RXu zCaG4~K|4ShqqDCR_1CcY z19EUFtkQ`==kD{9ot>j%o4933Z|bG2P~JGimk_QI298S3WHbQvJAno9pfOdYNa;{7IcUH zjo_c{9-ZR1Nq7SqWFw+h)I6JWN39$+meEVN$d>mlWaigqVg^C_rbD_Yji5Sr4|hl^ zc4iZmpF@mU=au0N_^e?{c05CdP!gJn&%o`lCp;@nI2D_QbA3s5awkzvcwIO21%OJT(jmfZj?w?)3;BDw8qr08Kg%}U*lf{1`GE$1 zmP12V=XEdjbzd8C6cL_b@rSuG>0+dKQIU^{;kPrYy-iGBSmaxpQGhEkP$MFLhUcS| zTQRV&SgyE}7HgzgJbB0}8C=tFY!H-ysOk4*Awh002wwQ4@rUt!6f!R}u2CGH@;j1W z2WQ(t*KR`$K=s&X6E=?uvlLZ;g86#}Y~eG)jTKZtxu9#Rna|evol~+eusZ2XD1W#? z<*!ugE4lV$ZQf~Y8dt#4kmmZ1+T61jVpKR4Tyce(9|p%m)zM;ESC3DI|50b{z?41v zt*N?DzxU-BkIZsr0u1ibQ19?n?$YbpQF>1B>IeyCiaqM^+1+S(Y%=$07)`F~3YG!m z^csSRMQBQaXpMe(u6ppEM-dztxNj`whqqOr#NYHOift+Q*NAy_2eK4f*rnxD$WhQq z_Ht)h|Haksi7&HqM#Z@`qKRDe*;KYrTNo2X!w~ATsdE!`I4QI0Fam*GjBy{;5xk%S zs;P8*Scu{=7YZ8)quVPU6udauft^(5KY;3CItxnePCi}F7jE`QNTT9^(MJ8*RuNM} zx`Io2rUeNtqBKZ=eGYX-4awJr);w$JsH{QPoA;dFG=G?=n zx?QF6e>7_?hCwRp8Sc{GiU{$~sPH@6?!PzNN2Y&KU#$0?4w-B{%)Wdn?d|0mJcANs zdRZ}Ge=DR|VegOW-rP5^l^tXkilWjtAg#i?nQj7~l z5GpHihjypv<{uIFtcU+I>V|LGa&svSHihK;7wK<+tFPqX z^dL%Br(nWk#~4i1!N$;yR}VuR$RA8*NrIB7p4j1{KH}+#W2Mn2&0)x?h%q1hycApM zAY+D4;dB?F9(a9HKpRzSiZoBZ^r;CU?y{e@`P}6&A?q}za;hE{u~gnpD)4P}m;sN0 zR^WkCJ-|8WOA8Z(T*L2lM5#S07Bd52Kza$>D)=jAN9qu*Sir&$mt=xq=6L*=sVaJ& zC;JtB7_FlBU71wu6tx|vvTlx3N?f<8bgxxmZP6RoHxVlgK4W8eBunvEwVgsbCi=1C z1D6_OuIx5!mA8RS7>jr^PqGuub=E*)+1mBSU!8xT+^rrb?kwhgpu8e`*}H*dKJ z{FX|rD{zD>(UZ+an99;|;P)=PN2WsRLdGRO5x);?b{Bvvm%FuTf*>}`rC<$~s zs{yDq!jSJ@8O1+vy!a8M!;t?>dI#j4eVkf<|gH zMtq#pa;npWde!AHZXcec}*h7)GY-cR9faUifktA zQCQtSN~f3#0h3e+q!XUdk|Cdx;7J@UOFNZ%;Kk80qgjJORTJ6@<2X2b-2TPj#Lsng z^@@&(H_x{(kUA(xI7?v8!-r*(H1qXDV5ayjb3I!X%%gT14)wdLau3=BCn9Uhn3h6! zXWke_UG;06IK44!9{+DE{bzeU_f2v;P+}!(bT8pql=iN9Q*IcQ98tvS-<#`tP_M@t z-x}@ecFN`STBt-?+2-}lU}KJ}%1xDAx~moUx92n>vX|rSOR-zV^F@EXNs;LM3ncvs zmuRh(qFMf!47Ss=H=#RM`?BXLQ2^M$ihtvWSej(Jc=XlQh@}yg^<- zY#IP6gCwj^M3@@(Edmzr7oxh!i8{^CQ_#_}NFA|bzh9<%c%qb|db-;pU8u}yS zQ?>i!f(9|#c?6U*Oix~2iGG`1g3c!V$UG^xdr){-gy{Iyr@lUEo)29nhXbn|AL63A z_*5`>Q{ij;J#&J6zAO}LY1WbU0(fUK2~XpL-~tb_e>IzGwSuG853i5da|uS1MX>fo zh!Jl>a-`E#A3Ddp$|lI~w&i@;5T+|R9kPpYEUc|vwQgq_>!G`9m-Iv?qq0#_w-IF5 za9OyMo>%?(KGQsc*@_(#~zdBi?lP`dum`4}8otq{0bUJdal_S!|Ylz4=Sy zgU!ER$j+F+#C~{(#p7r#F+28K!DpK~W!!Cd@6P-=&i{aXizs;2OfiYirpm-@HjLW? zy2O4o082UW-g-yw_e-oebh7JiPtjan&B(zVb6|JiqW0D@6)0SvIiBCe)B&T?cr};bJ;50OAoAZ%}azxD$5+h zZw9EtXb3HyLmEGaSI-{Pw{sQrkBDe?&F2VR<`VCfR}=q!m$*FL2)gg6{!T&oQXQA` zN#XbQ``YhKHRC;PvA%~deDHqgQ@LKAsa9|OJ>^S|r%k%xcui(CQ2fVirF#Lve;(6; zBDy$v0Sy3E?bRf-o+gJ*c3&cWtVJo`1MJIE3W8KU>ckBN-IelecUKXF!<)@1^0b9C z%pdKNb%4?1mfFf2eZJEB)tm-Ke9TB8JD`rN&3s`82!RtXN3fsoCJCpqd9?S+Wpr-Xi`} zwF(dE^;x|g`mL7+pTFMXQlLohYEGP8Se=@e@#?zW$?G;31DL#aw;r%ozGL;dFp9Iy z)gqiQKensH>U~}?ZB@JbP(-BPvKMXi?|3}uYLfXE_n~qE94x^k2-$T)YHR2gCmvht z3iXVlp(q4hq!#pA{*7v-!=H4>IK(|Z;V6KZ^3oYOCgJ@GdWhF0TNym_Gv8BT^~O9l zp`;a2p)QcAq>@k769P*xt2!OUxR-%!{5DvwB^?E#lMfu5uyq4Qk?uYrLnkVdBl)Ku zo}!q6;d0Z!=9IuLR1q_0y6snxVda&tUOj4rhmlRuAY0tD5{rAxGWWAiM~7}HusF|- zTI%NtezlaJ4X4&j@Ju!hv;`!iR8&-eX_y)c6@4_j9ZWn$@4R?%qBO|KR$>)0cIC!T z&tXWa`4mdayT`rn4tvrXle*rKz)TOL(FtWH5=9=XoGpB6kftX4H0|@|`lab5MHc6F z=hLr#_&tT)R?n`pRR2P-X}3Jb%?M_EjhzUrQSZqSUp+&^yODz*9ZMbqBt*EG2W7%6 z*N~vsh?SnaMpNtFqO#tgt|dt8D-g@xE@8DHyH2@ zGzuz5SpmLy=*FJc<>MCi&o`shv6)7=&nEQd^Vn2Eh~yriw}`W?_;I!LHSpd)|= zangQOiGw!NphYQl8jOd)-ZWbFS1P2MjHhKnEO(k%C7H{6(eSD)oC-qt$#${r!))w~ zFAb`h+{^#v^EZr90(@Gwv|_J{#;J_e~RRd^L70K*?Wy_Lu6< z>+6~wS~Aor8X}FiYbpn$TR&lWefBTvMcsW3P2$tZxU0~JDhghh6Ad1N&H1X%+n^e$ zB89Fo<-XuCxMT!FE{fj%-uag&CnGTD`DNdHt~vYPpPc;sXFoO$sxFU}x8qz+@;VKs z5elCx7Ks8e8boBLyuXt9aj?Llr%3s*TQv)7Z{6z#I!&u;TW}4(+jfv7kMzJD>VW+Xgz_-^Ip9@bego> zoTx2FLXsDqCh2H-C7FcR-264G7P_j9pqBO&lS>UDho$>jBGO-L*=Uz(RYB0yuC-G# z+_x$ADF=2Ul~vD90m+M;$P>mR18Y*f7hInYB)<(VPNL6YZ-P7RSiz8}-sw z#YTnVX^?ChM>oribBeHOvo|KxCp!-8)lG?~=X}e#e4hbuc6cmhiCH$fWZmv708=EtZ9N$+F$2mQz)2gr{K|`pY4gS2Fj! zg&b8mZ-|#bXt{ZLs7A&{L%e@4Co6`IAt1YCNO@&Y5s@n=96eDlp8pf3bdb2(`W|Kr z1r$XrBY%3^GMk}|x|@71k+X?{z*i6eWOq^QG1C+4?!CzPl{GCBJ3LZY6l)NU7*#K8 zE4}W^0-@IS_haCiXW%CVi%dm1J7aCGIn@UZgAAyfi;ifzu6sKTPSvRJMY(UTj8t zdp}(`U6v8Z)G{1dPf6&6xVX67@C)lSd{9O1YQD-MI%;ZPL+})zT%I*5(Myh&&d$5h z+}t?ZOVqRMg8@Ds&;tp4(fRovF0!W?9*|+){GX0%F4G5LvfF50Cpf z9m(>oF-cwu8fT1ng7N!EyBfQ-J3;AF{=EH!ZX~qu^To#3`}cg48}Q-imb`1cssy%- zF}mg~%h4JpN5k9EL!ZLEJ#KyP2YE!y-eU8c7u0^7J9Rw5acnl_Y_!pyLvCvugA)UE zBGWl5uYfC{tbnvv8iT=#urgxw8Yh1vXy2w1pVyTeD?>!ytI!6gf=C+C>a4>2-QWS= z!0g`x-2p1#GNC$V-0XFxmtZE`eC?Ir^=!_YYok`He`!w;mlUPUBJ-=#rNyYH<(mF4 zTHgHGXzA~pJb0D)DJ>fKoCnW$;(f9-n603e8@Z?+L`aVbquso1KJnP`Q5hLHc})5C zd5(57`k_3zn}BXhMa$W5H^C?Z5dKYyKEIgokwX=E+0k+4yWeTt1xPrU-E;O9#vje0eb%P2IT-eoTE!Rw_5K-upR?R;mSdl5x|4KOS67t)VJ_3u!%Ruowf&Gl;)L;arI~r zdE0jS9w@?YiLTLdz^W2u*x=!euhciQ0xKC9q$7k{M&)F660B1Dt{KwdsN%QkyBXp3 zmlw-D4`I7>lA;^iuv1dM_XI6fAmbOp`Gb-dD+?tUBeil%1!0fiH-OL1&+IUZ{L;I~ z`mZqL3lrPTCDg_H6_g4$JlYz#_Q)0%*&4mPElj*`f00%YSuEE)l?+nRt?*y$jRxH8 zmy#U{_phq=$9630^dj$|N4h)0@{<*2P@S$T9}*r@xmE?Ew?WO3C-l7VaBw^uzF+-! z_kxh5Y^gNJV0_=^B{mydIjAz(NhDnn&P8BVhh}izg}Dkx9niY)rRp~}dNnbXXuM9# z=*tep>|QGQWSd+a3z``4HLp+vVptW6ah={W@;(e-(E8KY8t~(jfU}YbdeYXz$~!1d zf-05=B*bS~VryBsSzG^3EdII5~xyU176f^EOB1O;$O`frW0>rE)iX!1`&rBUU) z+Ugss4P^L6p|z?$YUvtMer+i!X<{4x_p0~*?TMqt@!jRx7V&G_@+mKrTn@Dmb1E^S z*I)*7@Lsia`huqT#I%ZuethnHz!6@Of3+vfByo%@S5Zk(u`>z9$hxEq-r^0}OuL?G z>D=Dn;RI4o#t#ni5GNBnP)E`rDN6f!Qxhz*h}d*g96^z>f=U8;p(7NWAv#oAy#^Kp zHv}Q=*+2~J!jfpH1oB=j+_+W+P7+3F+24Y#Z*|GGt z324*$sdp~*KjJTLb%+JoEGhM%B?s~1ng2=OFi zmE;SZy8WjH{%gtou+RRmT~)br^P;qqA9AYiB=X#lF!}Fa1Wt|B|E&EuU+=DMQ|g~f zD;GnJn-9QuBp-q{x0L)3zU1D&zda_R%dOCQC}=ZjrDy}T#R{sbjh!zw5KaBzicl~% zZtynKpU9yq}HiX!#SJ=(}-+fO_%v3Jo>$nZnCw#oj6)Td?mX=scCdwW6Q~K^#gFT@2&1p zhCb&{V1O_w^Xwt|o^)(Inp31N8sIj2!h&hM4pW%S7i~1OZ+vnL%9_3_vm&`*METNb z>#ZSHJjliI-(hn6_3Hwe16*GMS9JW(59j|LXsN5sZ}#1We`Cr*K;PFa-nJ6{ur0hiX*Gm?ap^Yli^>TWh15{9F|0;aVp~q;tDC6H z2)X%P(|pfZubm#&*_%^n+^UG_t$c^Eu|^eBA%}33P$rlpii|%+nD!g9Ad_k+L7>1x z;^oWbN$A?>uoXG+_X^IM=C@vHCp^rcD`KvOP3MB)i}cm7A|NOK^k{L&@a3z~7eAMW z6a|tWT~GA<`gXB{I2E94(5%C-PbBwM8;~G*pIOv3q@wBkptfNd0{aF|gOkQ);SWoP z`#qpHpI}$1#PN@ZkW6p`Vfev;UMi+U1yQ*}^D%W!IiMr-i>FvYpa+G{-N2Rp-nYrc z#mUJbngPBF1KM_`WfA@bjs{%2J zvijd6C-%yh&{zaJ`lpU5A^vO>o9|dLFiDP*D6FxvEMaZ-wv1Y1G2PLRf~?AG=P!(@lS$ z?N(5XWyhjLY^%G+sDtB8lPj=osBSDU9x>gDPGg~AV zG!`j?<WxE1b;RB`T&mJ=G`LCpFy-SN#Ti#3JUKaXV z0|S#P0jQD1ua2(oIR^JEKAeFn1`d;$Kz?7$!;|{ynH8@UVvDI%pgLqwNtND(H*zIZ zddZ)U1uxAyCR>K}CT+$5O3s70Yq)w_UU<(1X(j77qt{ew=@Nde$|ou-qm}szG28EU zwV_N+lsEDf4mZjYK3jC0(eF{#Fe+w=X&;5@ek{~NfcD#@f9pv44wSX>Ky`~NLi^$h z*B#Q=PV4bH)b7N_rsRjkW|3F8wW+SB!7g(a)-3ay<@)2JKkiB8u(AI>?Umq}JUKb( zHeq#NN@{!a;-7H9)PkJ4_+_jkfx67e(Vqoku{n=UW2?YMG;?nB! zBK^^nB5!SHZKr&d7$<$cfN?>R{<6{gmDk5uGgK9E=jFV^5BV%q%Z?}>* z>mc96P~)(1Y500uYI_68ug#^u^RZL8_zVzWv7xY^&q2O zAHD@>#JZxO0+qJL z(P)?^HHl!-OViGF<$FMg+7kLi6pwxX815^7Cz9J(nI!^rN=7{QVb6I4($l_2eGddlzPP01hRl zP`zX{akNM@L_~2pobl@HtnO^{^4YLv!IW?b3c*ajG_Dh=UCFQ2??wW;SrZPp2j-TT zW!V;D;{kJ|H9@eScbU-uQTs)2az#n!(o8!l!}ZRq)pyarK5rhtrOIk=Uesg5u3T<} zz{8lF4Gt{#H$QxM)g>e4bvC_z|Gsi^Mp-5UXOPob@4{KUg=F%`l$l0ez(A`}6HYyK z)!Vx8V^hO?WWqaebD4zqRcixoF+k*#^}uaNAH;#@41cgIuEM9P+U`1S|KcrLzb6hE z!b3=YG+yv4_^e@fotsPf`KK&SvUzEScphd4m1 z_r3b|O^Kkfwz7L<;wS7uF!R^>Cm*)EQg;+~2bKJt)j&pWFoRkbSom-ZkRC(O_HiCH zw4aU_>KWA4Z56lLd;&LssgVVh2OuYSFv&X&86k#-mmN$33qtTa3jT>R=|(p;wFBIL z$kqT+0IE^AD^AAD6++Ei+Y6=!gAPcDbEB3^$=O-nBgSoP6yZ82UH#y683p&>T4Gfo zLwf~e5g;sah!&G>@-lG8-Z0SNzaERdSpQA~&XJN}QqSya^8-SWZ{N>q_QzJLm`uWhJ3F$ql~6^2H356pP_Ue>fJeTMOY!cDzc*@=W6Td~Onv8%o z81~LzpT*sztCpVnukFK|nUJ~t8X(Qjm0Kioo^&pyy9J6<+Tw4QC3i=4Rbwl95p?s%5}Wd*)p zCU`%}Z(d7wRc}G0_7(om&i*@tk{89T)GfXtgzw^)d8f=)4^2;3O%77iUb>c3!Rva# zlfw^*oE4m4&%sXl{{AHsE|qvBl-k$8V{LQ5Q>0Exe=GpmyOdbg43W zzh=9DxtglFWTT%LjsftI(LAZq7Qw)ng67aJ`rqjsHzF@paUmmVP%(T`si8vxNdna9 zG@3@?;*el_3vm>g)^d9hJ6y)CeRtSJgFE=??>&wc5GdJW1LH#(hUCLh9+{yr9GJ;1 zkwPs~kn{sDKMQw&%OH6{o-&B^yf^TRCB5|CVUCRPb;2|IQ480f#rypdOn1tu_`~(n z`aaYoS}M=T`>f61p%l#7kyW464<(qav@11u7In6d+2`ERNgFTkqXF(vxieNW{01Ai zf_*6>wrTD;2;IJwyxUF(Mg|keSB9eN|GO)+*C{v?^9Y5pUC7cRjvxDkPizYxdrZ3Z zo)+PUpX77M8=C)Vl8R7jljosyD-$#JlkuHqU1k0NVSss^eLhHkTb~>GboZ~F8!^rD z9CNv9_JY`dnmAZ6`P6^*a;kOp@m5FbCFqHX`uOOdBDYYVdz5eT4)$1rTto&jCe^tK z`aW;?&0z{lehBI6{y{C7Enjh7QR@X_4RrZ7%cU=-lgPr@hz=F zv=_`uU)=A&A(WQN(Xw)|tDA2-%Z1AdiR?j;A#0tk7cJW9@K8~J?q@kkF@;b=FG%1k zAg{T3Q{&A&Z&19TB)VjM4K~?BtMR6phS_sXt`%=B_>+BTc}!=(cP^2>@Rt1L?2T{) zp;X3(CFJcjyXhy_K=*7gTU@DG7T#Xl%h?}&y$TrE)is}`p5BxqLv+O`Bb*SFi7L$UTcMt00B(s-}@dSas)9dmnDg9|jGfP9-Ogf_b57H(YoL}UQ248>Na z`kl2OK7F!hsa(HL_z2dE^U}N;d}7u8&3N~x>6wycque+(a#d-be4sWTZ9g(8^d@PT zT;9C-+2eDv*j#zbiH%@}(&E9TjPJurL(83EB^!34e<}!mF6qbD7SKinli6tCx4?4| zqW1Zo;MIxnD_zP7fFTex$o%>6(Jxv#1E&_(krUl7X|G>qWDaygYirMhk@EUNB1zXH zo8?&co&`ZmrM-Ydl8yp#V*g23vE%%q2goi}1thbP^fEJI)w>=y2rPccF@W|6b&ZRH z1Pw%~&DuLgj`07N6Gwh`P zSHg-!r29?pGcGIHhT`gfM<@^h?30^X7}Bo;4t8tpO2tVq*$8NW()eIKf;~vv8$+O~ zax3UZ1T?T+p>ScbJxfAO*YiACDAo}^*JFSAv6h3SAlpjz0=|G)0WlZ9$a7vrwbp$a zon0h>4eQ(6&)-tjFUB|Gtf^7~jZhpm77hL>YFEW+mO7lz&2kCh!ms1wEZ0vyy*31UKE5Wq;^X7@ zObVX^omR_Zo^XD$X_@36R=gunMo^Do7z@Yuz_#7XrAc&SBF7bA4wV2hWv+_54f7PR6&G|ZFV&$*-Z?UQz1|ELvk zqSuQvVlx3(KG#Xs>i&qf*Wm>nPgr|-c!&=%!PeS<4~YCB-8V(KwjX9Wo^l3;kmLWp z*Fg7PpZRP5!&UurRgdhlj};*#H{S4N>|%?kTf|*Ih}JDn=8qLp{PPfn^%y4CPWd~o zkXSWHH1qZq6TIUW?^~WG(?|$EJrXROT7~RmO)G}n&nD+I`WgFc=-+XkfMV=`i(N~L z_xX#b2a4w#8_TJmtGBlQ-5Zxn$vwD*l@c&i!BJr_YrJR>l)0Us<0Y<)stDVMN+Vhn z(IpjBxzD|D2CfjBYNM(Ag_#d%BmM`IZ*vdZBwAF4I%K^({S`WHCHx&;j#bd?r|?cC zL#{DbUh`RR|N8f@k%_-js#PXkT zT-ei{=~JkP#Q37;>NV<>9&6>$mhk z9xQCo<0)aF1PY^VqntP{N1q&x+`aZ)Cv=jhNW^Oc0vg9i;O7H?%6 z>kq4m{{%Tp{@!;EB7*LR4wQpLjUMwz%>p?uO%@z>moy%=DEQ5tk;w3Vo{)@%YD`9> z%099SF04eOO35%7^$rPo<@-sn-H|drHibD~LUr}Wm3G;Dj>4=wcEuynIDkc+Lk{_o zCIX9PQXHbvHVsg}%iqr8M8_#*voXbsOiSvt84`TbxGmVIP+2^v`n@WyxG5j#Ox-pW zh?ljveXgs0*xRYDer2MX0sJ7H9vcYHftS$*K3XWn&Zr`_R>Tx6sS}2HPzkK zKcqzXhI~y8;n{mcFv}z#qX#v2-wA?Ef!Lb(C_{?;1XoIr3jAv6QjQuQy&26G2Zj{i zqF{o+yY4K1Aho)8al}+baKd@UdNNJ! z&dny1Bk4s*zEgKs=aTTo69w{Ck35p1d<1~ zhpBVKJLA&~p$|YaKGG0scEx~WrCz^{d+nC>uY3!5&)IS)o^D#w!7IFF{Lzl2dhj7fcg>V=aMr0Inji9nSXgK zL<$ebn5+m+Wt!}QdrBCDZR9iHHJ^`7o4*Ug3^Xv)>k2omPuncapPfC;ReY-ggQ9zl z?v9)KxUv=7^KEu-NyhnpXi8bmd>+fq{xi16^HKgi1Wi=^j9o-#TtURdaZ@~SC9cyh z#8rhgdEj~meO1gz@POshl~2R}Sl;E}@$h<(=GK;!O@;8GBg&LS^-QiwnbwK!~A${|pBzY#2`rRJU>Sd~eg>ml~vLP2A1af&FE5m)T@k`}Sgbf0p} z6q=gR=vr!>eQ$y4cFK*-@4B$5?R3I|&=PwW-KMg8zOMOsanTqFw#U6AZVVi(W3qFf zgM8WSib?v}Z7FldK8j77~v@dzKC7v0g1TNIKYNy;jK689HbWtgp z`|ast-?%WA!_rcVD%6@bDdyWbJ$&5h0JuL9ibNI=uC}CDir`JHG z*P;>6liioz$F~!Ge!zKa)RD4D?!`Vyeauj4lc8Q^Fr$?mAW|3Q0f3?^=)(TO*BI1E@22!d2DtT;}P>#J;jtPhQgcEZA6hqce5Hu~0#v zyw<_hM9tWo~rGkynt79S?V^Ha_t_nYS_T$O;IGlyqsVlg_$JU(ySYs$(5``=7 zHdv>a($3HErBF0MPh9KwdlH3vy$IRh=-$8$*Hbn{3t1wB zCuHOSuD5T?ye|If?WDHmLuXoW4XntACgZ9fznD8^~rm(v<_b+TC;Hjjk zH<~$nBtW3=t`G5&kf?0D>8jP|=}DiCc13CNPD);)sKFhH2Qzcpz1m^JOb*Ui-$aMa z&?s>$N)u4H}*2wxiYU>WP>H9n4 zGW;H;Qqd;1z_>N(c6u5SK^?cFbN6Y-l!D4ngxy^q_q1$O5fzE1-ei{YS=maHxBn$= z=jV@l4k+xRzTt$LSPe!qx0 zuJRot|Fe?q6!Op6EuR~`(M>Vr)<~|yq zWRvS9`*?csdUh-k=Kx%Dg>wIx;i}@5PY6D zrQ7SiDR@%`BVc5-(p)Xk{L0r**X8$G0l5QF`XG8UnRrj>6LrVNf?ifO8kNA`h#hA1 zIQwBqi#v8Kj6$_~)wc|Wd}dhvA7nCSow#}#b>FV4THNs?Vs`Okt963i-NCnl0O-z_2j^sGNT_Ysx5 zkk~nwt|FP$d&V>aX%H20?*+}kbO7R1)e+JmWs)?NaiWDxZ&5G#Pw;%cB@5nlq4D(J z#G^68W<6#RmHwaF$7I;UXFr7jgC=I&pxCg98oZ9m?*kKr6T#3C^6WfX?Uw{T(2^R} zO0FpJPx>oy;Bg<7syEy2r=dXB_ed6A1H#$4<;Gt3S4N)nJeRG503iO?*%bvOg_!Q@x+;PaB|*;-!!uvMW%)l zTu6(JeDQC1@sirFqbX92aXv?+MjpTPdR_-sC>C79o;)3Gwy&zzzMr2iCBkZ)<_Z(4 z^>X)eY_**9n%oo}&&W?7FGSEkRq~4H*XYnyvk(3W#_Tr9C}!`@*K;!Hn8}sTtn*yzl*j07Oa<^dz$>;pDxX z;4T{QjO1CCWO0TY*dQa3#JYR+WgvlWi#);qrg1{xvaW5HLB zIvUjKh`J&~c|aQi4s5~#1CBn02PXDX*m?|8La1q0MZo0v_sWdAk0Xh5_aZx<3C`?X z-(==xf1Pst)H89qqA^a?T%jEGC`iF!iGqooG%VMB*l<#m2V=#lO^Ouu0QDL{A5JFh z;}GgqCH2j$&{90X$SLQdIr1 znLb7<_SwvAU8lJjp!a_%#@^2V6(@s8*;TpsKtVxKQA$GMj`ufk7s0UnNNJMYCoOe6 zUN0!o&-c{+?A^rM&X(DwF82P(v4g)|TNMm^`7ZY9CDrMv;Glfwzu zm2Jlet4b=9W7XvNAiLbp>t_1(to7v;Q`U0Dpj@^F(98GZ(tRY8e^Wza{J7?tKJms z*?G>=cQ~>IOdZNA>M7x=YG5?N;30?uDbp=W3Yok#y$k6!w}q_{eP1DOAN*)NT3A?D zz8*O*xMoi)86zZ6^z85NZGBtDrC+@>YimY!lHX_}?-d|UrEn@dH+2Q3!ZOgtzQ&C$ zrL#ZLjRULhV<$$f?f%a!gcjYqMvcvkr?wXNU1Rs%T^6Rk9rfCpxK_1$R=nwJnhw+& zeHN$-m7C$vKmBDHrUFRqoZn8}?GJGG^YrtB%1GP^v+)+k>lOa}yK$Z;nU|`1c-YP- zr{DjkbLr7%bA!ck(&LkI(Rr%eiZl``DT5Jssc{ySt#DOUM`#mnIvDv#E^QA%yZuaH zql1~^&ggH5y8Yy75bI>tQu~}os!Dp zlCTsVt5|^mNU@XShG-~Y%XO4VLpe@#Z-f2G4pL5NREj^uP{+YWZpB8Abl>WsReK)Q z=@bO?Ap%42nbS9&M)O{1#4ikX{dBmxstMOAhv|eH&&=-}hv8M!;59IPBrr<{zznYM z^mO+4E~vN&Zyk+|jgiQK!9;XiS6ap;D*;eT#R<|m#mY#Ry)0OiDA{qRladBTVXLv{ zh?Jp}fghikA9m^$ma-F(%&m!_Y_1SbXm{9%t>Kp7_Y1K4)hsF4qo5%}DI5TyVHzhQh*L)$Aj zxI=+N#$>wQiez^NB(**8WPy=*Xv=F2LYICs8M4<3enZBF(O{Gs)PV63E6wSo6w0`v z#0Vv2u0(F!Meh_2{^srj54C&{jw^IIQ6)qA#;I@?0Tj@onWf}%fI$tQ70kyvt``^m z(}>|azg4tj(hE+0PwY8Z_@q=|CA}l?UWU`L4d@xp^8h_|!Y-R5!T{r0HGD5=SOH5dLn|9~BE}3ZR7YYi0L_AGAEZinG7x%c?4xe?^on-`6 z+};`rl79TBPGy~E5SI;;$;i#)f#%5l+1nZVu|2L5=$LClj81nge6Kn9F%Z81b7bsJ zyc+-Ye9vA3sOu*VlSGjjdm0>+`}y1pIK&b!<_8-&z2NkD38bIEc(EP}J+jXB$mF{k z2L86T+5C8=kUX`q?#ZG{=3Ptwp_YHMO*x79%@#|cUwrFb)t7x%j?7KMnvUh@`X^0S z5uOjB=D#|h5#hYyux=Du^% zbSpVMUroOuxDd{8)~)ezx5^m>kpgo*kBkTCk#vfO;m|y%1BXE68%QR@Ub$VKdd4>a z{$lJ%Yu+hM?qDb)?J*#d3aw?fu(r@?&fuSENf2Bk^Ir97PAJ-OL?=fwMSUm&*mcS! zJ+C`8xIdOcaxf1CJnd@tw|Iuc-FY2AY^9PT-xWA8ulmMmObEhqvTm8>ef&LzfvQn4 z^sBeocQy1ZtsOZ?4hBr*E$ns>`qocFab+4BWo2dj-T`6mDu&b3eA7*_gTyhRK@rcz za?->y_?{L&u9xEAi0x}^c=$qi`P}zb(`pmdn=O9pNUr zB_j&XbmpivSsT9?3!bbd@h)NwjqnEPZR%?fPfQXPUJcB3ozECPRet{Ut3(W^p}jv7 zvFiUtpTu} zgBJ&2x%ggB{Y=p~~dt z|Hsr@#x?!FVc$|Zn!)H0Mvat4K#0YD5C?Z`?$ z!>3gClgJE&C+)KH`k21fhROiRc1_p^!Tektw{SMKOQqUjaO!X<d+n}YzAUh!MXLdic``+x23bG?*t$JxznNTBfBkM^c2{lASnz7O5O0H65uI(=wZ^lcLlZE|nbWGi{ z$V(u|npy`hQ+67H9Vj4tkm}8QaQ6DOwPkNrtN3%V-95h2kJIgE7&&+2_^RJM$mMY6 ze(#wbxWqIww!qhFGcWq+Z(C*eKd9cnL3?=Q7yP>QVxa0(3@x!ird$+cAnI1F0BP_kt?MKyw3Qyy zvdRGZ>~Ry;4liBmXSGuD%rq4h{Tks6QD9tvaNFPZlXWoaTaAI$<(`<6&v*4h6)7wi zd$SLwGQ~pCHn>RJDC$o#=;}_sI;6mKWjF{c0Dx@L!)4R#yd>YNPY;g)fmRALqVa_M za0$Z+)TX(gLuIw2p$+yBp`^jvmQ22?ra5(#3PT1U#UQ+DIi9->168-H445PF-yC?O;xDfgE+qeNUxjEZo( zF6M1uSpBNL>MjAb3#7~pV3hRTeLQf;(3qS>qm zAm*O3avJ-StsGWYRzdLOQP~vnhzMui&Bj>*4(ZbW3iZXE!=3(PE8yaeF@M#9tY584 z02^_euDD>~F#8eoRygU5MI!!hl0%6s3?*VlyV7|0afx;+eXew}!KbJ|<%Hl_@w4g! zPfM;0o9V9l4h!>E0>g~-mNuQKubreF+1u6W-ltQJB~`EAUFyB}mT+FD(7aiRlhOu( zXm>>ax(v3?iubpXD%vo|s_$_O>IrsNUA3nD0zV}>{F@6UJow7REyLQhIA-@?P7EWy z?|URE8l)}n%`7zndYfbXe9JuMVS+@yPnJIMLSgqeCT~tS*diW zZ{hqrl#{u`+1|=+oaOX!soq3ND|gXu`n5R)R&2pKYmwzI%am#E%_zmeFQF-xVT;S! z{Mp|V3N5lGqb^rAyoq2{vR z+i!$UGLwT;*Mu8?ZFdRTjkYz-rZ@j>*|vQ5Ud~IIsXPdbj>b-6Ld=YN~FC7&gpT$kEqqTnt4iCsc^)~0!=}5 zQDk(qbxh>%7oT?KPCox|w;gX?3-aHcXq*7Nqq9)Lf2s`<{q7M?vGL2u#{I4b8jRlI zP`V>wlDb-My;vI`zo=4niT!+kD4g}_%4)4`$aBr{T6%dl!i9qj@%p0@SIYc+W^K1j zVF5rJmly4c@d1p#d>?kXJ6~(sz&?iQMlQ_)TP!iHq=v6nWk3F}2@>P`)TEhKXBSi3vzSA4|DDm_hL&xPgJ}Z_W|0fNX|MOTP#(A28N+SZC%Z4d%5bh&c@CT-1>~t=5>HII)~{YDkAejzds9x-)rm-7kH#e?S`Ke+M&lA< zIXn{59(?|sQn@$-&~bIMm-);8H-lv0?L?u1X`W1=pY`@lW6BH>6!xl~@sGM3D#sl6 z$uvb6g%)e^$jDh((U9|sf?88gmeLT_=lkS>-Gz*uh`VF|Tg;vxbT8;*8xzKz$W-m| zsa{8vQr!!KJE%Z)d>UQ1da^gEWO{%5W!`y>Jn^LK&-Q^FOnfEPso}rp{C8}1aj;1z z!ZkqBVOGL)SX(>Ju+=cW5Q`2cODNhwuByPSY2%3kX!s+vV?dEO3&VA#Auc>`7^s-m zR(z24)SsexRVLhz`e_jznE?Z0VWL;BhQ zWD^CsALc%zZBfQ}B?mu2<&T4-i-Tb|fy-X_TGapSi6Is zI4^nDcX3f=I#LIKd^kbj52l|Ex8Y(aT;uTRD;$FIY+68=l}Xda&)J_OIv%uo=oED);IsWmO2w5ll#y^rK>_tB zGIqH!{_jy{Q&Q5J1KV~9-D1qBLSnM0vtm)NMWm%)DFT1I! zKYcvuaH1tIJ?l0Zn9%i$=_RgFYIV1W^gDCCTyTj#K+E6kQP?*9kl>Yn9aXo zd{t_jA}+*Z@KMW3%uP#t3gdvx)v`(&DXJ}wL~lwN=wZS1Ysir^J5%FaD&PmL&n9kzS&Q0Dg^Lg-f(Cj3ZiA2>~^#to-W*dZ|unJefu4q9ESa^`S0JG{$sBTPjCtYAo)*|Iyzd` z_h#lf?Z2fsZkxYx>BWs0m-f6w5staH8P_Cd(Z5-@o!GAxaYv3SW=Z^S8x?|GNf0Ab z@fzc>1|pa8Wk9s0gY;}IwPh2buELaU_kncZ_X+uS`6*v>VV2?KDX?F4S1Imk+~0yL zO3%DA_lc7NMvS>6zDi397VzpJU1U3nlG5)?y9(D=4hY(?^YzJllOIvO}`(a|9v zUvC-`=2A1>r&hBrg&DeWM)Fj{h<93--7Y-m%TL>POnuC5J$JF_3hd&h7g)K+xggk- zy|2)2?wFjfFW&_zP*%0o1jyva4j03S;^{co$Pcc;xpKTKS&}frjc<8;Qi4v4?e08v zwmkm~W7brm)0qAtL}$s^CHsetHP4l<&Kpm=$!3_IvCE{6ghV=(l8pxH?(#)?*GHNT zTB2_oJAQbSf6(=SWiZI-5na5jt6PlUBiK(Cz{UCb(s|xeA(y^X#z)AF<8j;}F4bdF z0{ z71JB|H%7G}i11|we;>=WnD}5v2mPP4l07k$84R29>ZvqR(i8p+Tcl$}_C2*wNvK>t zKFpf+Rq1fR%TdLT8iDGSEjh+h677!~C1Hn}Je~HbMCjb?wm9zOsx>*4yn=La z%_y+vyW~}iW|6AI+|egXHUkyEn=f@wdH0|X32w8ey)-X&iw);*uV%NBmkQQGI6e7O zJ0GrJ!*k1pazrHIpPP+sPs`LOo{#tg~{+nUu=xWf`6eg9t@x%UE!&z)$ zE~YGQup$BNO{6p=dEDO7#w^Q^H?V<##O#q?+D1M3sr!izEl3dNxYck2LQx*o8n?pj z>-YZcDt!l0JcQDVX*w}MvB&7Igi`0%$7S|yEhSs4{wHtw$(wMEL!+Zj^pX`(;b@yj zFyn^oI$N$pI2lSFJOUNr=GN@>h}jyasxJ2JD6>;W)i-0nYaNSBg}LD{C^Q_VtdW@P zho#iRiqMd=%dD+(*u06JHvi7|c{BO&+xkz++<#hs4)2|3Xvz9^>q7BDP{C*ujK)Aw z7U;u4L_-i|8T~%CZm04B?ztw%$X%fd@X93L7pI5@^YsL>lasGIzZ z2&nbN#m)B*nT+7-zI{B9B7(M2u`|AA?xy^#WfdclaJ2{ZNn&Ko1>Fr(&Rv!+EIflT#*rO==8{aUU$5-DQLdy1+0|UCaCDfu` zk#wv&E}_RIw(S)C5lpW=k6+E_txZk2>8XCZtU)tI{a(88-UNR=4k+6)!GcYHa^mK$ zsJI2arK3rZiKuH!ECl!|?rV^j!M$FEN63S%(Qoxrt6D!i>xHiA#~q}VUWQ#h>@U{7 zSI5wNBxrs+C|?e#F2$Hv{$$nBWOR!S?g*{XG;JFVEE>{!ukhhZ%G1j&qsoLQ+vU#+ zU{lUyd^_Q?Fa*8d0kKl1H8V*;>=0K#&5rhKW-;70u9IGS(!O1M4DFKqXIJ?YZxr97gpv;0W4mzU7rt1{e1{K!=R`Lmv z+wj^i>ZG3Vy4)yQh>ISAMVGa=#-EM;F!F`8?taWZed4L`t!rM8f>LK|8<)pj<}H(C zKpR27Ik;$Ey^{lv?iNZ!Ds%HVC251@100ep0kaU860YsMa3f!%xr6N+*xS(C(4GZI zyCd7`mLxJTSKcQ_1CZM-cJn|9T33d}_=UkqD7$lP*V6jod3cmHAZGiug0kAcqq!=37H27r_K#MJPW|M zQ(W9gH2>lsz8!JxKRHaVW5ng(!-h8MD{{;{3;RE}x+yv7=s4Ah>Ni(zQCXuI-cRhf z+(f!pMw0F@jWG_oWMHDmxjyW+iUJvxZdgMAIF4)@s3d~IY1Hl+wW;5=T|a-!)P6T) zHfnyEOXc&!Z|NVc-HBNGY=Y5^v8f=s7$i=s>k(FTLVHMyT z-!}Py<7Q28l?`;uocdo0T4cD62=BtF4-0=K8MZPeTTjOKoULH@ zk%ERLZ9&<{&PBZrG?&6t31th4`O^Ouxc@Cp(luUVs4m);KA4Rn1W6N{bS*+*AAi$1 zt7l@ccdfVTH=E{5EzyWl(AG1vWaCciNi1%o50++}@8@=#R{!WDJAp;rF=x-oxO-G$ z%w7{K{_ek(FwcZ^VZ9xC`)1(!t4C)1=%r#_vl<5|Q|RiwCRM7s`s4?~*3#SYZ&?qV zw(tDdsdx>w^=>EF;=$HnFfA{#k-834hi0iPtJm=dZjQ_p~z%9ed!Sy+;I#BU#+ z=##6SJ+$q{a#%qTbGRz>X=VHT)~)axQZ>s9bmWI|UQ#-7^SdwP+>sv9FpZtvJw$Q$ zzUqI(TAnB)c~4gWj~0acLXpt}kCgKPs&Uxi%z4rzU6ToFABqeDn)tNC#98?~k7wxzQGM{$50L@5r_4-^Nj&3-wg<;Y}r})twt}!Zv z#Vuq7(fi|=2+KK)1^RJ(q7v4#Ut19ACwPOU!8ApMgM)~7KSBlvaeT5lII~IN92Sss zzZhg_oc@Yn&ubeiwnKZ#G3j=Bz_-{ZQgSeKRcHZt24IRy!H0(V6lKZ6(oIba+NEmy z_Hcv!2|BE*rIqiFg27%fWQ@qxPq=LZzV1IojLC^n)J%^^3$qssS%{JR%X#bX@g4VH z&dyb#I6x06ql(s5b7V*infbqmqD_@L#noVi4WezMH0(^*fH}nt)=WA&VZlnYQL366 z!XuI0M(mU$$H-wW!;Po3Qmvi4@{D*Bv#vHZ9@BsxmGU zS}uCtlV1gZ@``RRVn^(Lp?>-v_#%8u>1mhm>0XRX(NBq3xtCDI*K5zSTn`KtP*YyJ z@jm!B8E^H_zpv;bZ;`UlKkFc+!JtO6ds8WLu;0@Kp^`rLbT_bQ;nm z5#)gQvT%kWOy)DJ=+qq@;-qT^fZ}r4<6yO`AOx{aw7)kVW&A2}Yfek^mBX}xY|pXk z6a`?cKvS(Ydd40h3eiVM#eiY6eFt{8UO*vV?8Qt?yKpet1y}oR*K?ZDD4e~zA8$y| zOr5>a1@8D~pLoqiBkH;a#i-|Gy$0lLpZ!n(?TP>WL#Fx=PDOzfb7h@>Q94YNFHGN# zqAPz$Nw=egeiTdpTNwM1NEz_0bFhj4$x928v6-}7)8&sfFIDt(vIF@#0G?|iJY?Zt zCh#laU?4h?9M1M(RE6ecsxNHj;eZ+nE2H#sSbqf0d=bpgjQYOkv2;X&Am1IPzFf>D z@o#S4_NFbM!+0H?1A_3of1HFG=6MsAnYT`wMKA=9gs7t`A2$c)Kc2vraEH5OpshA6f zdSDK8laDK&J&IX3_IhP~^u(vcrjxA|#R|rUFCAWj!8CMix@jDX5dp7rZN} zSPBN$5%q#7cM{aGgaJrwNEVswJ%dkC8nv%i)x#kFo1jo7h|r`#VSr>4vNA`7g1N4gq20 z^)6(La{Tva_N~x`dMY09DwBRp}np-CaP%LrbAB^rPy2^69I!)Qak zm_bhCE~Lf8N8Aj|45Wpk^bP<&tHsvf(2$MYmb)#S`|KhU(KJGznZ`T)-?g`#J`=+g5dA>11`?euTg9Sz3y zKT^w0@nVw!sVD%)4`y+~wlOgQ&BcP6sT>N+s#6sbR=hKtY9VeNC1wf?S#h4*&%XRp+8=f&8= zr(T8EYO)VXPxrDXo<^G-81r9Rc6eAiKjeaU0~=yjO;rRXcNjR>TH{rmk=i4pr8nDx;GFU>hOSfv2q8!H`vAjWda0C0h|X z!U3FM@DczEktDfU=Z^(rFL8-J)m<;8Mrg4!0c$K(IqpWr`yueY4o9a{g>@Iwr31; zsajUL`9C(}M-5fi$E=l|8d3D+D8<>GzcrTQ154aV3MVL`FI>0ngX!v?E3=fQbG6^@ zbbaDI^1dRUIlehaQgpiE?hd*&^&!q2?ogD&VC=p?xeA7pl@U#$8}5%CtO9_?KgbKf zI!pW;J1P-IY~k!;k6^8WAdR7XQKvl+hEfLu$vl}2z=DvAQUj0(hfzg&f&l8W=s&T^ z88pbRoealT-hjm%vFz#T`5o8e@ozs&v0m}+pc}N*ww4EeKJ$Zr|9NxL)epb4@d&+WkFi>nqb$^$tjwno~B!W1I9dCA2JsG6%NFoYe`t26rJsW+@s zE>rJ?D9&%cjjW7+kB8J=)>J!G25y4+;jkepsw91p$o-|1mjE}c zikYTgZ?Q-tf>jE+g7G^T`fed{V30vi?Kef{$-1B5Lu`;Q7HpU&RBr}U?01wK@7RSQ zQwN+19^gcRAt5l+zzBZb`hUZTHbDX)lwh>p+`uOy~TfnG^w|>zTSG^|8hJ8pnW+dZE#s2n`V;s{jzB_`UeJN z^OiBjDRzm9%7r)-9m)AgCCYKrOu^@vHFiT{z-r~rKO?|LAGY0#gyPs{UNb|H^0316~(vxW!2YAdO7l%G|zeMaQDrI%8h+HF)>W1-f0u` zAgP4qp*rc_Jr)uZRMLrVm)K{u-5yQsmVK0#g85M@NJt=+*}d5x-el9qECH%WqD957 zGEF6fHnvn*N5+vXbq^rUc$<&EAEBlVwI_&VbxbK>Vh4lqq20kDE>b?Q0BjOK{P$mq zAxle3Zv2l-j7V;kr`#=o1sW6NckpnHj7{>QoG%s%G#2Oc!nx@0tHV`Rnd+#;;a4le z-PJNSZy!V*)bVuBLdT~Rs%M5$uFJ-Gr4+u;=zPexoXFTDoR&E$hGHYW|jbK zhAtAh?CJm(uW;Tsk1`MYJ|D^qvap+Jn6Sv#9H#B|0=j69Xmqg&%G0DC#}o?4$$~!w zgZC&xVwi4+a`*yU1?>#uWJTVs5b(hv;2R0*gb9fWFO4@oxk5p_K@Y!3SMk0@_eNj!7x!eO{S9)i~?ay&EszZUs*zk^lQy1O4k z+91^naf0Tlu#*{^WT#-cKzYUwgk6G5I(Wvm)PnYHlCOSLXAPzNF1gg2alLxgG-w+& zqv0v>P{03urn~se^Qt!W()McYmGccj_h5fWw`A(%K)*a0R;m@AeGjn*BLE#8R57u(c9e@Wses?Fs_#AZcJOi z&`L=2zdZGze}BDqNec*Q;g*&IuoTYsY;1i*7%8>(j4F(BflL0FW>bE$V{ZF5PCQ6B zDp-=-xJbPXIz`tPb!PXIY~F(=7vFVD3J^%~y&s(w{(1m9NYT9eBqxEb)Yf<07DCXi zWD6hj4Ds&}EOhcQ#;3PvWLY(nM=ioJ*S-JFulEh!$AYdPSB5CJWqfUojY`8J?5%=9 z6KDW=QiW}GsSa9moTjr_r>cMoR!yoV>hoE;(jst1X~u^v0L^YVsc*zG`;*;!Y4;16 z!xu%oX$$D9f2VhM-x>NP68sC8(;kkG4>7+-%XN;&DJRZBQZf)XyAoZyV4@G}oLyq_ zBR;|x3FXB5b+pLhQQ4nD7$5R$*S+r^v?S$JnW|m&iV&gqHJ?LZ-MNM9zwU1JM;YGz zIn@8Q@yXR34`$fkoS-4<_wVn^{+*9FAcGEadu5Y=2sb46BiO330Kts0ni?(yY+j;B zxsITXi3ca-g|(%gS^XyVT`wRpu-}=k({aS;-{m4T^SDlDZz-;e@_aFG;7De-VX)ZnH4OV73htZW)1tV z<_hft5LOOE#o~%D!!5881M^vh@PEc#U53u;M98@JSK+Moj#r0l&$@{5U#aimS2TJoBLr6^@sSy<=u%ahX94db4b0Y(C;i67j@93)>Pa};SwEv;%0|i zmmg7l>n=FZwDf*SzlV}-em0#RzUYCVl@>>>Z=_do6LM2QjW#=*KY@H7H5@}GNS_9s zABlxujQn=3RP?%XT&**AFIYF}6xS`6su9iTNcVo0e{JJREC}3d_Z{aO5_0}Vb@rqw z7frhcS3+ZaxK5jKPQ}eyxCT-%N$YzBh*0d>@bcV8F%A=1+y5BMDN|5>)J9b|4RMj_E&X8uT_4P zfa>=!1T2e1mR1BQjd5UAhM9qHJ+qVuHo06Qov7B65>=N@(Z3(6i#Mu0%4@6Qigr4& z6K~QmYj+a2g9oFc+PrwnXCw;`hd~}cHY5Zas#1iD5HK245An-H2suy?;d5x>#Mok! z;VW~5cA8j&bsI7<2Scs9z2a)>=h9tC^`>A7Jd)Wd0#d(tdLA|H4#p`i`8P7%tz~Zc zUsJ0Tw!cex%e{Ha*wwac7LJm}hR`KHpP7%!ER6Pzj*gbKHS?i{eJ6INBU@^5|DjIz zhn40nwW+f5CiZvYEi1}uCp%{54S1VCJRX70Y^@1#qV3fd@uUnujKWBL62Uy4o1ec8 z_dFKQCa-5r^YilZdZ#!z!fE64g7Q_!$7<<*oVBA(4j~XQirB5A!~ZGH-#VdB!ouBy zxQr~KCx9eUl`7_?Luvu&{*LBXlKe(`J4}uM#$Ed#Tb>gO>0-5kD4wH;1Ycx;`>C@H zAydx9>5r?LLcvx4gdy@>5^;_~g|;4!3X@E<7!0n& ziH68AP&FX4vhhH@+~kTVdQ~(sJizTpDNP(co9Z9ZTZYz8BBO=LJgo}0C^jjOd(|e| zG9u8I7hPb~;6?iip%j-g1S9|w@ln8MT!&)_5wu~rcwGL`HlQ5+LONkqpe0HijsTU% zJVI7=AZFd{UJO+=alLL5h|L5D4=``iT*aK1y9_Ao6a-+p)8pM{n_tOW$Dcyxw^^d#QV= zlRWAmh}7_z?l~o6%RvJ-{cQP#$Ndf7CUW95*@~ftTJF(7P zZmK6gRi$472Rx?(J)F$df*-B_y%R^o92}~m4-QI*Ry2gczA}a0 zpE16rtaoWD5P7YM>H*U!hYy!W5)?Z=qD1vr^)Lg%Bgx~!rI|-1$4Xvdlba{JW-KVs zsTZEhO>N|TY@W_#TfJG(EZ>A-A!iKl;DF8ubb%VEId-b(;+D~R&lrsCKg)Jq@;S^h zZ|*r=3F7w=NNs_c7h{+`il1@!jNM^O^?TFNPt9vaU+EJjF;wCEE38etZck!V z(hQ#dSo_K6ySlpDlY^&~vGs}A-}IFsn&Y9wFyU5I0(23h(Ni4TRs8$*CMULdCq$P% z20xF*UC~LWqz0w46mM*yn#=i)JP}f!LN24kI6>!RpR4kzYQ>oQ%;;UbMm~398TUhy z>It-3v52BtVKc}gWizq@v9)lQ;jc9$cu-qwqo8;6>IL@R`&L&u)M_L&X#gEaIh*F! zucIfoB)vKMqw3!)6{o-KBGS3w9iPyh84Go)UUJK?5u=x`)pfztOlIla59PIg< z1PnvzI^Kz!_q;LN11}%$yUV;zrLh_jX{~a4L_zS_oC5D`5~{p#rc1`^t7maJ{;Q7* zN%))0OZQ6ysV5&82cLqH<}Dle=;pcDkbp*U$I=iSDzM3_u`lsbA0LrgT=fsYfe~MI zKndqVVxB+bz-5$(2C(ljDm-kOm|iHNqr2{BaoCREIZxPu`XQ8mUwr{uslYJWlA@0j zst1h|4(?UxPi6gNV9mzM;(Gg>l#BXY{+@ux&qf16AYPtWR@OkSJwr(@+eDbGkZ{9X zNyzkCOUJ-oC5siiImM#NgbR$0n6Y?( zfXADKk|1`0`&?DCNoum}#sUP>AAG*W-Hp z9FV1p1r(F8qaTimA(KVb#Z(x`sD(oz_o9&|GnKiD05>|*pOP3^-i(RQ)`ULMl9BR^ zFok2!X7~C4ednLFKW`&c_wY1ee~w@Hi03?U;!FZqlmh(MuwvvVw;#)mxI`1E3Q!J~ zM~B$9cy~YiR){1j6`sxC@e0$F52*>x&Tw#tFfeU^yhaVkNO=ex6paLqA;IQQJ1#ra zaKw>(z?a=O>EiJVMJ@0*hhl!kdoBJ= zVYXABJjKCAHi!tH%I{btkH4XR=TK1{3se&89kbZbTx#oZnnMhmR_33=eU>}-8>Z>@ z%1y65_3zNiUU0Hz_mnyI!kdp_Par#i%4XhIt(n;-A$6gTiu>jS!O%P#U`- z3~L(<(H};n(m;1CA#O!vX=l`*$UzT?@fr&G-TR=Y;jhk-0X<-cdR@(s`$f5)SIs$a z&XZ48e834)f@6&Nm*8%e%=s=Oj5(C$oyTg~O*@=Nzx4Q2g*{{u&&p7~Z!5oFXa z%yoO+sN?MkpQRfoS6t@*duDdfJ#D2h$;;xP)-qLSF#X1hwbY;W|MOQfAT-s1|LC%= zyt9h`g=I!p8w|a}_0U?Es+fu$I1tZ(aOhr~DI|!PQ2rMXOVF$w#3NinE#JsFpq@BPbAN z2F6anjeGY`1<3`8l_!}#WWE1cFOecOE;l}2HG(kQI0Au2t|=#pPR)N8Ql`hj>YVB< z3dPy>%t4dvd`Wzh9F3^{)X8GDi9_CxUJGIM!_5yu*jD{Ox6gly!bCtQvzXt zwk|Dz7+J4;_(BjA@)mi{)mAI=Z7+J+my-phT_xQ@KoOe@))mvj7>YUb0~WB{w~gy- zsv~50=pi!QW1 zvHPoFtN2elyGd~gap~PaFX1Q}gGtW#U#dV6148J8OXZJqAwVVQFlkXi$Rtmc!>fjX zumG+BjID6T$=p(xN3ptYcX>8bz zk9BT19-@hokd(xNJL?l$tS+}lO&2S9KZ-`|i%~oqH9iwM;xRc^wC&4g4t|8jt2eLY zw{aW0w?%HCx+F|3Qyfo`Iayk%KWWW-v%GDAyiHhX;mUhl2_W@RVjTPrQ<21JX_!%p zxr#TRFdws1%`@$_DNS-}*jO(FZ9oTG6v?w~kp%dbE9bT`h5IsO2 zZgY7z+%vet{D@3Au{f`?M!pb#R!{ow&~bd#>xbwBPH`gB4IJVb=K#rSk8c_REv~0| zv8D{mv_2s%u6z4!jwvlr{TCB)P?c3Ar-KR`I0Tu+5($P*n3Fp5+EZz3lb#7KK%WbH zo40ee@_swu*_u>%QHR;4zl_Mm!MM+im$~{>+F|gPy0lzyKxn=;+bCMY{4jAmjB*sr zvVPA{H}(zQ#9SKY0x%e{=n^+=7rUDXt7QnBth4|FZ0;5yU}Z=}wE~M8YZrAcKFEqV z-C8L3_RyUpBvJ%3$#VUB+{Ak?mNE$ZiI2c-gv?B{YPvLP%*<0d_RvSD7^=_>L;9eV zZeO4vN%8DV%w#MyhK=gaeVV7|v8>1oXy!)Hit;m7i)qYf+s<^g9zX2FkhL!H}T@1eOcwo!c9_d_bY2x19xZj z^8K#LN%JiJ%i2*~`k#f*Y15|w5W$i5^hfHirMGl*PVkx|A=6^9;+a|d@eCTnmx^0Z zP0EZrxxgB)cm1%zRkfCojgOvW1mqKU-S8$7pTM*~0ZkD89OojJFt zH>;$7xiG88xbLP=nM??)Qy!vN!JsjydT2~%I|3$H#R7vJQuRus8w?1fqO*DUx%A!U z*2kaz?ZXH)uKH%1>XDr`%K!RzQ6s!$e#-C1cLZ6Fs>T1bmv zL8{mfxii~%XR@&bWa8ex*T3ytJY&91u;>ip>989Bgefcrj3wF9uGq^_2Q4DKtWF#D1fi1(Pa7}l|r>5&^`KvY5ePn zPYFL?iaL(HuKf18e{YD9vkF|UBQHtu7QkljU_80tvw&5~;5RJz#5e0U(yI~EIi1h* zeA;{aM^Py8XWsa~s#=r#`!7CM3Z&APTpo8vtuOCSA13@yR<4*teq+@Y+CCPa63pz& z6Z1sWaA9+2JV-~n7MkuU-AGDQWs%o=;r)95k8k)>Gb55rXHQL)vzpqJR zrePi(PV5hyoGm6F-6C@U|3qL3VnoCYLP*6F-e4s>s@|IrFsjL5kL$P-?B@-%$v?nv zycN@-xK^-XY(p@F4L&Q)XJ0fNSz~8VA;>@R!(Y>9O>ius%fNk41J*n zadOHHQZnF}^!-PJtooenYdIc{c2)ACZG;{WQ0WE7yhv3I!QSP5Bx6*fGqBh}n}kr| z#msPdNLGX9E}lxKx1Z&<_?!N3GdPC%3-l;CCfp#L znoL49Hmd^rO`%I7*(e&J=W0^YpPBX*;US+Br7L|gDqP=YFjJERNM76#C@ZV4KXcf< zzZf4|7&l;`Tb2l=ZX+R9G|jr}D+-5xeWH1LG~GsC4@UrnF`myUJ$*4uHTK`xKOVI* z{8C5%ZN7W_Q{-qB`k#Ti+%GQ#SLN59+fhu}r-XFCoG_bC0f;fkjSbB{!h z(x+_#eRb><2G?Pp2cx;ANBZVv?Fa33`!5dWG7m1hPuLVt?uMA)n@*Q<)mgh^?|SO5 zSE*qbD`;`Ot_Cfe*f0HoNe`aZfEM<~JJhr8fInO5CtcnTS?_l8SK8tlC#rc>i_xA= z*D8my!DvY}k+NtV0&_eot_=-XA5TTES|5gB*R2Pa*YGuJ*LyA_Gyg}gpJRV@;m>VX zZTD)s>#9-vY8t$o8N34sXBI#uxnx1^yxuq(H!2qH23EhX5_U-(YH(K%(JJ=XG0C9u z1O1tS6JTO{72%y9`a&)ZOW;aRZi@QjFWtjNp+4^qWKBtv0Qzi&aH}mUcZoQ(JTEq~ zp@4*wy~m6j9J7p%GO$x;vvnp%h(MvZ5!eLC1aK+9el6(YH=~r(=i7Zo8bq-Kj68Oj z%Yxh9!QsgBW67W8H~lmSk(qg&=6_0|F+m9mlRMqgmp>F<2;beiNrg9`#tI06>b0O^ zlYHqW1dt9O`Fm-4q;&u*W6XbvPAK6HROF#M+xPDpa(ec%v4)j=M_?I?TZ6Cf9>8jy z)nYzc|6I$~;3}e8N4w%GG^fSQ)Awor4^L+q*7O_haoW)gM)#=ENJ#ev0})0e9n#$h z(mlEaX$A^NN{EyQ(%nc(H>i|Ip8e0cuJdNQuKo6Ad!GAw?)-eWt@|0zVf`deFTRAZ zC4|8D4YK_NE>F8wNq{Q5tvb<|JY!rI=#|rkINZBZWANt3e@VSh5 zzVu`HOxK;q`ulKKi?4UnN59?_Nd6rrk(YpkI;IVOOY&6VqHNVVv&!Z~Xqyus_EvyL zy-#y56eJ8GMt*cfoc8yGaVLT_kl69Lga?Et-7B=Q}6j%Ej&oTr>NRsk? ztb-3WBVu3`>IA1#I_|a3A%D4+jj*woKL@uy6zr(3P&^;wMUOR6q=V%M+B$8&vHnId zs*A@?{Cld#-ovR4OayC$JlXFHf471vjxF8O(Y^^@JVHh)Zh-jZu9uwK7rM@eYU=9T zog)oruNG~c@yo-Y>OejsJ-H&dq^cujl+(*m=-2hz-D`30teLa8r2?JueI;wgbwG{U z4@a(eMyW8Ys#3(?(L6zhhn@}l%T0z7zgNG4>;|sdPXiARb(g*}&{*aHS~q((vW;_) zbad)Qgs-hQ$(4~EcSvwtBFgEt;Mb{wM6}dcrKW|sqazC_CXh~|J7~eqKjf?Q#Gb#z zRH3e6!N1XD#$}V1pDO?!<7gHs7HuVCH%p+WwqMok72{J0Ge^g9(-dips0r_1{yVnJ z9a4UiWNc|5_s9^I99Ry5oJ3I%zZ`uy)57cv9nr9(r2j*Q(Mys*gl%G}mOtEMh^5$Q zKa2P{D=2K4ll&wGBHApRMEEHN^W0D;;ZMwNf?hPP^uCSm>=KIER7E09EMt;1W_pw- zFnXt;TD5|<(BL~l09(zG-eBM6-gfMLA0vNJY;P_)&3P*SL;7!V#Yc(cgl}#Dbp#dV z+Y_u2-cQ7oD{sH0^_p7oz?VOi6ok*>X=w9Rl*ER2E(;}iu@v|O;5e4FyQ&jAN0o}~ zM@a%3l{wiB?CL5Xj&E;Q3B}u1Pjwt~{|5d2O7izuHps8)_TW~!tMqn+Qt%P>dM_?s z2gb+4Pgwxwc1r%sHat39Z`?4y(|<#9Rj}_2`cl#OX=10qr=n}}K#2DIo6-ku$gnVn z1U?ecOK%6}Q(*ym#EJV6R>VD_VlCs(EI=vQ$f~0&^AI!jPH*VJ)J(8>%RuwYjuR;2 zuXSB(Wd)gGMDVp3&$HZ|__(<1lZu=ZFi*X*6JHrpUfp**U01Z9kB4mbxu8lBfu-io z@NhRCLRCjcP-$^LY<>fq3*Dwurx{|$>a8nX@&xa^sRnk{JeF`Mt84*gNh0SbVvxMs z7-3G8$DKF`gaH$Pq)%xt@eaX&2wLRTR+9RkrO7#5i114WMa)jhAbACm z*eO7c;yqzlWTJLcZm2lTQw z#*LHQx5r4uflVkiQC@!WkV_9v*5!9N2RSCq_JbU|NNdtQF79n3*!}T9#qd^g=0V=A z9a7LxoqkALb_T|UmL1xOWbQ&UqO`5kpV(S9cK0g&SS^&IWzi#&>U zaV8nhyX*L`U$+M6Q~dp&eGd4*Ompgw5%v}xHO7@dSo;-(^ptq-z_Ai@yv#yWR?!T6 zK~@{HN&t4B=lFk!7+8d~6Z!-==aUo6c9a97saVnyVnluAPSj0}E`|XQlPbf~u{y^8 zi2ng%`JQ$&Zj+K7=yAGaCGUhz7wDJAWo2eUoyo(t3$g2%zu1hF1ZRE6AjYYj>M_#$ zbh|y2G1ORsecwq*mI`okX5+lUQ2zYpTNRryVsyxx zsl5Ax`sTuO|FqdiC@}8(&S?x&AcHea zk1|j*^V|?(voBEs?>x^mDNjCsv;O!?(O~nJ3~bK_h1<2~q2JGaurh=I4Ip|`+HJ$Y z(?CtpSX(_)m$;U9Bb!umS^LYLSU0=$E@5cxo9uRJKj)NHho*TEikCD<2G0*f6echZ z5|@fzNZi&gj&L9|0=k9#fEisRsjNjartmyJ9I1CqW#??{YZ+fY9sl-@)|M;S@cjwFgLUt99QZkUbz=Nl(DC@q1# z$GSoRdji^oT|1;SLJi6eSuUr`LGAn|m&&#Vm>u{YFNin3ZC@iNPy)R>*p zBiu?G^PxJzug25WKq+^4E+Qk!8>IN&r=Q!fucr^Lw_+@%LpU zFt1k`hG*_B$l>m-QwSY?w#0+(=DUd z`pwYQ&%vaN1L+xj%@+k@(}QY6^%CZ^4Z7H|Tie?8+rE#glLj5p-{8SW!r zK1mKbc=gjtwlXLJciof3r`F&`IOTw6z$6x7+D{Z)dqyO1(pUI|)@%d2uiT#q<`r5! zG1u0S~35L-{xswYHt>*pv}kz^h{wXsdXSyBkJ|^CfR^WWDz&$q!Jb0 zkrWfk1jSQ9GvJ%3h+q>E28nuG3l8GR@N^u$T=6<9@nVNv4UeghSz#z#!Z7F$7HZ!y zJIkq{cGB18ZYUxjc>b!QCeTXzaKy-HGY4Ev%Z(OI2QrZh`)(j92}f@6k#G!fA_ZNo z!gcrzPU z_dVkUW!#gozb{5cMvRfn$9TH&wXgr43%cGON2@ZuregJQ#gR6098n>wfJdQl#SKz- z_4UXoJ}oWH*RB%gCBB!08MBF%@5}!RtV!FmWYce$ND5xrWaBs_6K_zT78}lJ8Ro6T zh#hTCUxhzIs?|+OWevDStAE74n&TZJ%)C{6fYhvzp7{;#y`6hJx(} zNcTE=HFn%^=^i=36#T9evQC-6VN{mW9jcPj(iA}Y+V_;4qnxm=;&>xPz`%?VH5 z^^N}csqVx3TuxzOlkaYmE&CL~QBVs;MyaPz#4Ns8TdMm8;)uL-DixRgqcxB4qJ}31 z3jz@@Y6wiOmnz1Y5^TuGZ-GkXmjp6hH7*I{%5q$0h9;Z)CVVKm`e&LX6fYGYAG1H6 zv{sXsN4T7p+WmBsl6712$0wRlqmh?Azrk&|wk5g;DyQ&?;2BTTyW|2>ce0%75kA3SByE^uW5BD8P`aC(7h2S z%Pr@3HKiy?)5hX!5JBM#?#1B}Tj1_Eardm^4o2SE+SMcqd>q&<9)OD%Wz6q^{D=XI z$!wjmD=T}YXM>oE(P^9l%`PWTX~~jJ0z{+h+mU5ul9phX-BB#CB7+1!}m;*C`_}fj^H-v*!oBJJWbJylrL(j^1w@ z4s*BeWR-Od@@&PGA=LP?&3KQ?)X(S-aO1P0g`?-y_{m6Ko#^d9Su7~~$Q~-CWzJH^ z-k#>ewG%>CXK9tHVP+n&}kT4|{ctOC4Q_uvoUI5Sqw4wf*W zW|hbo?eil;!I5G0gZL#MkS5Ta3qDXXeo{blLeYLiS1^?cbPo^EOOu_j!=sq0N__^% zpjTTW=G^Sllq9WhErIkDhGZo}`fL4v_&)cE3#=lwEvkU*-M}(5gV63!zlsO27~pj5 zL-{Kxwy^BznrDi?2Z_6aO{wJ5WSWXlu;+W3nm;Q>fSsTx1Ey8RJ^Qt%0avoqZcJwf zs(<69W2)}3|7$5POob7hzB|?9k|`R%@|rVsAHi{rjp(h8;vWQ<`b->6Y~Rx5G8S|*pa^{j94oG$s{^nu~Ic2 zNDLUB^7TsP-<|DV`)9u4NIoj|b_KJyB>F!0vczGimyO0xy{CNn$jGWuQc)A(NJwC9 zc@~BG#f2Foz-`|$(B}W*dL?=g-#1Uj?T+f??Y|kVg*nJe`KNfsaaY9@ePSd>}Ka`IK>le6Zji1ar z-WOkfm#^M_l!0{+-%XUj_YCh=er|JZlh~BUdGo(QW4t4J_sk;|qfn#Qb5)I&Z2Zk) zv!ID5WQrDQm_9P~gA^ujqQ5&ByIS%@BwoIK&%)Xf5MfYGc^ye;?GgqCJdn9Ecz#25 zOs0PMQXi+(UJ6;WYdJdRmKt#4YL|zJ2qbH=b6V%^OC+LLX<%R8OaE!u-+xX`^0&zw zgOQZmO93UW*F$H^0tU+!NN7iZyWVFo4t-IpEfzti-dDSo*i7}psC(g98z6Ree zYmXguc1t5Iu#UB!Iu>Pf&6}-nLw!|eo$nb{HCaWJ3{{`(QiIU|SRhcl5Z4k&%8f;# zm{Ug?;r(5=`fCGwz;Gsa_hLrm^Hihce!%4wUQ})k{s#d<327Po)8L&QkxgN@qx~gp zo`ypV*hxk5qo6!3CD+xJco@2Czs-$AS-acUL0*x%0+QH)+AX{?&%C($8>Nv)A5o;y zAM;(FX^o7cZ8Is`eChK^XN%MPXG~9p09P^QH=l_cTSK~U4ibvwy1#(czY=!=Ku`?0 z6LvJ~*VNhM+f)@P{YVsHdz$fe{w}*y(p}ZD_ukK$qAO7KW#l|5YJB0?n;<4dJrGxZ z&)pZPhm)quuBc7Rh5wzlyljM>RyY6-chbC-HsN%olln7e$lUdhvSNRM;wPJ+cn9ih zWNks=X)k3RP0}TL5@i&BJo5`q0vqev;0#6I;-NAdgQl*ZdTQjpty$R&W@NdWTTp;o zV4$9PuxY>>b%c3fNhgGlL(@Nc5K4VCV^DK;e8F%mqp9J8a(CFzE1|$(_x}`RA15Lh z2-DPDB{wKxQ7^^dAK8Ek3(1+lOKfv z;{&xs1o6~kggETZrfp8{Iy(^{Bz{t5?Ad@5!>NHZs&SJ6*o8QTn?aSLVPhmMH~JP z?4Tl(?)7VN##S8=OOb#xPRQNtyJ8~0vI*QAlxqPJg%0D+`4K&x zG0*4_`igq0Jjd_%M=%tPQPG5*X^Qqby-;HmF8a#XX4}zB<9w0(z$|4^3>P=GlW{Y~&0)MtFTsZWzoo&AcC9 z$Pz9@?;Z$_w?D+BI$EW9dM2Y#RcA`IagCIe{4dGd1jL{I-23BF)*3&^5wTxOGrYY@ zNj9Tv9;-*_XTQzsn^~_(4uQV{zwL!~Q*Yq%wZSD%KA$pk+-HD%=E?c%b@deJ8{&Vb zLyMugTn^jo{kU2F`KEX5xKrUVRHNAHM1~}WOh!bU!}6;QR$(RkLO%dTKHI;oSb!mP zMq$v@MW;_kmY`3JIF!|-rshAGO7c4F#{DL2(^9> zudoovm-eJBthgAzJEP>-1%=uvMwK0XgEsDlA$Nr+ySrIAKcb045Q91{VHsf=++mlS zKLhSh+78{!{$Wl#{$dOV(>hHDhv+rJ;UsV1cTxR}>+k7etZCOTTrRdo`|fnm*so8o zebK71Px9DvJU>r>G(I_pDwk<`&BW*V>vKxNTlbUD!`vfkS66|Q+`vw`zaPm~^?g5s zZuNl+5abhyZW2RMShOd0axhV1F5W)HuYuF?cL#K8ofV~YB1g5!}Y$vjI}teA}C z0t_Z_Y&6z0XpOc*%yW)MVXC>g#h1uZV(ME6T9wB`Tg>6z5PFh)`bE8wBUF3c3p0M6 zy4E7u(Kyob-z$6U_&6kIs(#e();OHr;XazN&x5J09>~;sY4$!eaw21jPKXu4l3L<0 z@d~SQ{jw&mFi+&;ksT%CLDCvLs;_4_Yw?$0^8%0xCPQRfkGL#7ZnZFe_7*op9Y# z)10|t%r;T3l1z-6EQV)%cuWD6IE+&KlEj3C^o>_?WE%veAP{LYcb!OnTIc*ScY?}V`7c|wv;RUhf}OtnoAcE&>#DM6T=P;{sx_NZK>fHF5fJz) zCm;oOaf07uwTjoc#kU_ID|*!|!7U>*ah2BiNSqX8iNj5a*@8>w_2$uc2@}Q{vbR&S z1WlMg#cmm71=)ufD2zgoe3dcl*jv4~)S9;7HM&1cBwa=Hs12(lCz{pO8(M=;$+NxkuRVCaN?L_&`%K4h6<3xfZFWSAsItv5@6 zz}y1kYpEKNMM8x^&Jffci9AHA>_mareGJ6!e}8Xb?57=zd_`fUW5B+;I}xuzD5^Te zCYUN$I%bkHm6eKCLBhN#DK^xx5)65!bn3sC^UDH#Z?^n*zJ6)kMTg8XMRb+X6OPjt zp>zMp<-}{Bcl~ovUDebceC&F!M!@%l|WJOtDeYh31RVqs|)AlQsPv4%{ z?#i?*_+Kno$aAvO*`hV7p%{!E;Ff_%AHpibz4x#M!Gx}Wmv4e+^~%SXLVrpH&o3MwdW8dNau%e=#x7<7=*iFwTlS`K8 zbAWzG%M;ztOfo;7@X^sp1%fnih#7zRy!I|FU76D6o=3=xO9>ICtvV_jQ7Toxea?g5 zJ0s9j>R>m8G{57ZkpXF#mgP5Tb!N{!evodrK|)31RH-N@G4Y>zi7P2ht}tU(S~2JB zlN-Sj{8t-~Cd2s$k{M0Jq$QcLsQ(qNO-^|pddxhKrZ6~el1cTW*ktVWKVS-*BtBhS zbog<$6CQ^A)>EvI<}$C*tzJ9PdnsD)s1$~und#c_L+Jy5giy^9>MTD1t=2gR5_w6Z z)vI5E&jQlp3Hvd~jp3m^{!0o1)+=Y*oLy8_#@}OAm}&_FkG$Zu2qJFX3zHS=fx;$B z*>ekg`N#I!vh97MPu*-dv79k?Ej@r_pK{PZ_|l)nyCAb4Nkmc^xfTD#%M*2I|F%qR z=23r-5OmN_tx&ET+`w!y{L~%;-{eEmt1xv(U4vXnb(lwr16e%(_H=L4+aL=8u|3m6 zzgs`V1w(o9R>w+ka6!%(p6(aFHrd*w<{7TnTPv5^g%uTZ+?UixTU$r=E93>}N%Ghf zJrffKlYFE6w>dO-KfAg(a7$TU ze$l#D%-BU*DSW^dMGXA0D}jK+cFav^{O?!8KV9SVe}YE;Gh z?`$SU(Ul=5v`6~97MB7Oso9n(ktBf5;uGH7)^9CQ>D;8DO1)K!qMJ?15xJ) z^yIDUp$j$Uzqj~lEMGW(@KW7B-B70s$S&BO{N7xR=UTc(*S+v=$f*bEv{tL$ z#98~mr>w5!uDRENi`kp@^81v_w<#uE?uA}Q2q8_#^i-gxLK;!zL%dJJ%(wJ(78xt! z0z1Wb5n-^V7xAh%j43==6k}$4wV^jpC(}^#(7aR0DlRnA&Vzog~3WPWt(3 zo8>HWxyH7xws!?gsNQ!mJoPzRSzTRa0lSDRel@OUJKV+nc&XBwkPxob+A8Pn-?A(c ztn=VlH)4{oWBKzBTI=HL5&kIsa%(4tlZ9E-jPYi@?y`su^V)$|d#Qj)%jUdYqU;7} zYRt0acd8@nnB%i zB*Ob09fl{K{0YfJM`BtabAI@4NVEwc;WNZxh@CFbdbM-nVDY9{`qm5!`VYuo5B|iT!pWY)5u1 zfl2`SA$s>WKw#{d6oPOefqs@esxUGFzmXH?z^51t(Sx5PLu0^{??lk;%m*saW1&IPoAeqg#TtKT1d%yWx2S5#&q|sx2A0`qCR|#0I}mz~y9J>hwLL zC#G~IWO{U2-lfOo`L}`No2Y6bM&xNYBx;BprhnwPA1>d(c)oUED$tSD7JVNH+V}G9)kyz zRUM-8f>sS8jhzudUVX}_rDE1#J5z z*@g3~pE2N0VbBKrkLE{2nG*JcGSDZc1U}ExRdnLTg5d&pf8Ecd2xqKgfapTs>mKq_Wl}Ly{gp6{a+l;JZ*+&B~y??;lS)$s*I{ zkl2l>k=+WZnc2Bn#sr*56GM0NL$4EwKlgPO!M+#0f4LO6mGd*&8@TNH5 zNvlND$^AYt)m52@M#~j-9b7Fd!diYN-=8$+btrI|!lj6n4nN#GTKsh^A`Knvnjg^E zUY+%?|Kzzv^2&JKlu%V(4#^7BYNCntXqrnw&Lke*Ydw zlc4lrRmgX#$&uB{*RHWo$Mz{5|0~`pu3M3OhUb|)BA^41Q$8cwp&JQPCS-CbmBDt; ze>J)od+=O-`D%KtQ&865;b`70ixQ=u$xfhJvoIQ?D@s9akr#T|oLxW2BlY5^q76l{ z!y`rvsKAL_OhFGv!097r9R$;W)R{PSFcU)uNQfaBMB~w5^ZOhb|Fm1o*v2a+`e%#7 zR82x|-pD62QUBU8IQ4*0;+LFHa155u1%uwX8iZEl0zK|}u?`a~8B;l7%sdn_Xbk%I z2j&oo>C0i+oJ=@K$6XgCX$j<757}O9&I}D&gHUm>TC}j_Hf2=+{&RZ`Pf0tcJ1#9i>tl7vrR@V^IM{mJgk zH9A^5I3u~g8JnVrfR+QiUYlyQ%P_SBu_^7-_(J0c^4{d_Vn;t)lMCIVX!-foW*|AK zFlo&=4il+#_zeF8aJ+b?KEA{J&XX;*;@1^pu!f~_aB$Ao%l$v&1!%}ffUm7|#N%e8 zu)4?yQ&50?!b5|z->(oSSfJCJS7!3y{hqyk8v%M{f)`>0>=AtWbMM~M^6AH9w!3Vh z^WFtw(;|?=8%6Iaol@_W4~N8F5&^O2>o6(k$-b`0|!l`r8AxlvyMUI$k~O_;rAO& z=Q8y1a2xE9bRja;17CSt-^au3j>3WIa8xEb4_y&tc?iCin1=H+4DzVeWEj!~aaAU} zn5GoPr>;%lKbC z&5pXwqwucrjz!^(A@8pzi?K}3hu61h+dpdp_qba$*JO6)(fx8hd&e@cHcvDuQFTIX zn1nOUOq7+A^8-#*{BH;*^i?m(6O`+#F${96oT(;=V8h7VLQBB2;PazDC0s&Hu^iS@ z;{{Cq3515T^VaXLCDF+%i6X+{#v$>?t0a2y)3CyT&Hbs8$S0(m)|*ToK+&R-iXaLB zm|2<8HxDpF5D8e+T~65Ryz>TLkOY^@roW$UdoB+U6MWyav8$o%G(X+JYp7soYg;Cv z?E4%`NmoaNWtdSB7_Q&4YM`&55qRnD16a>xOe2V^<-+Zqsxr}NAz?P(D4mwvi; zBG~w?Ly!oGT%ZAP$jMd$q-r-l(AwKY@iUYOKQbRr5Ec2I;Ls+2$nanH7G1 z>D6;!KWDs`S0u7TL*1Ws71QM(0Sxq1c3#0!>dehmdvAjy?d*Ly zBQ|t|8gZNMNi}^OZ z2_-OJTV&9^xOzSz|9JO&LayHOUp`q5Ih<{g4|)E_yG$GW@g}MBoD_*7+WNx5sPoQN zJ1rdt^NAxw8z10fkgJG#3wxF%#*s~unQHaJHwHKRl^sHlJf>7Uf16Z2dc4Dvod}Pv zv$9H!v5imp7L(XCWAbpm4Q#<10TJ;YLqRNOZ!Gjn? zx!AX8(jB|{+nznQhSx!XE4BL1g`iW`0ANILuEy)VeTF!PEtTPK`~%}^_ToT_f_>1C zS}SwMULnO-Z${+!wmROm+ArNQ!?V%aGO64AGKH}KzDtAGeH7JwMDJH#1UvuP`{+MQ zNzt`XRjVDE&r+df1YdDEJnB7JPjNPCBCLEw@$m@L0JLu`AnbrYY}^ZguRu%?{*s~@ zZ;~IGTzUm#(-HsO6S$sqwUz}$M?%FWA5qh2?T?Lsif~f7(^LmEaW^)GE5GCW&i5p#h9}J}W5#0wZsKMz?j0$ur+y~%m&R;r8@WZ;iqsI05 z{abz-kNv>~)vtCP-F=$)iNhY~5|4o3_xJ{3_RT{7)0C4--=t<&&EAQ*g$qIlJwvhk z>2Fgu(}X<4e>OOEuU~Aals2Bp~&rseo{nMqF(>EvQ{vE%2 z7{!|etU0Z%?8%EA)Gm#l#f^7*utU!7w9^Qwy|M+6!5w|$f4mEXL5m&t@K>epYQU6K zf8Lp7u|XoVWOLF$`BylB6fg4Lk&Na4gOUeQ_8pg0rDv3CvGcZ8j~eLwHXVKWv}v@P z?v22}g!Y+a9=#dTh43xk=AT$}{X(*}_p)rUOv@n#vVp_?haxpjH$=V)iZ1ot6b}|l z!|Ve&uU zL4w=b#xi$jW58pvQFtUUI*XcTpm<|bTipi=h_&M*)5Gxym3(^rf2%G~R=fI$g?vzy za%iq9`|2}DMv%)!6BtExiq%t&@)m+U2}7%Z@o>tCiT63F%S>3R3%xgWt#-P```!|g zc<0?If58+E2^=>k5F^{1&3Y#KR?LzIdxvGh^dEoSXB+$Hk^vROOPxj496`ih^K*0a z!qk`v`-gsq9#Is7W9u$%rq?z>uC76y6v4VsP89Zgs;UoX9h1qS0fMtKlh6MGVcX>nXbL~4TslnhEk~<^p}J; zJNaehREI|k{tBA(n@`R5HOTh9@Vr0vWDtGAk}Iu=0?UZ0IT7}7jLVm^0JkSTOMwbL zWfA?(I0YSK$u#m-j>`>@FXJyQV)Y`*G)v!a(#e(J+jVFwr`1n>D~2nOeS8a~CZBb) zM3m7!=N!!A^xKR&VTl2s)EPwb<0S1(v`1JJ?pMwEe8<7z3t(52jw^v9;6~E6Y%yS5 zHcd>34lv11mDN1{=b!t8-LNpDZ89r5CEgyebtyw2by7T{H(9%|&u8i-+h}vr#O1^9 ztL2}H7^Q5gZLL~q+mw>d^z>;F$$1T|$?Mj(r$aH<YRGQsQ7YAuDv7LmL_=xHoH+WZZcD zixf36^Sik<8kuWq-B$g4*dF$|?hY26-&QYwuCeSM#HFUv_~LQVJ9x$X%eo3+VVPG@ zQjw7Zzlvosw(25HaOvv{$}AQ)skI>`3{EU#q|N~#2jd7}cMR1i$Nh7$B<20|h(u5B z3q!9Al#LzbfNuZy%zfD@!*f;Wx+*u!OT~M*^%WSb>~+SFTejbtNTX$_mEgKv${~b= zCluTAs`KzZSBD%h)K|F6fHhJhqMFhkFYp}&J_NBJ1S2ohN#sBqDi_Sz8Q`xAl>(jV z<$)afzkr*61LvH+A)*-hA=8>Y{4rofR#wnZs64C$t}m^)b#DeC|5j4*r?;720#xbF zhkm|=9vtdq3n>d%PAm4q$~gR`oYoa%Dr9<5m#uhfIEhef39+h`{1l^rqu_O%uK_=! zC9;B20lTt##3C$k3dDqu?$W634Bq8iTwFc;UL{2cK23wd{GL}b>ggq{x84|+Q)uXs z@;EJ9n47C~d&d=&&Mw9EG%n{Izo4Xi;g`^-^JLBdNTnSw%x+!r)8ePmUM~%7>|0s? zlAZkvdVh|O-@)Z33j1ctii(!q9Hj#qK^N;Q7}JqM>nINe#AjR{u?)WVZ>Ocm)z5QV ziiM7UJytpH5N!galdLiCZfS|Q2l?D@rd^a*BJt|(I_#i4GGG2=EH1cgJ9{t@+R@^B zgdD9omusXXB@rbQENEx~a|RdjuqU=~y#g5d@MBmUyWBtTj)QB{Y#ZA=V8SuN>V79y zixNr#QXB$2KHU*Malzn3J#=>_aZ*BxrA7Qc4{cw?6LKmYoWKTHYW;*la`b!$X<)jr z*Yb*)tlP5hFQ$Nl_hWh4Iv=Bl$E5wxooGx_zo+f+*h2JPk`oMXa-yzKoXcN)w+yDg zo3z}7{<(7x*S&kOpBSP~-=t0wc%A>h=3c;436$Gg_+=tyl#FLuK~VWcb#a=KF8VG2 z4Q1B(s5BhzCxspQ@zxunWAKrl`*QM&d1GorPZ7i3eBZAqBP{Ha^FQI7tsy*BOcgiB?n@5F5ClBGi);E&UP(3KnM}Hjs*X2xN zkn{LI6OT+@|2u0ls!xdE_^G3(t&O?xp`xi)wC*E8K2{@uY`a>pu2Qg3bnVhcy60C9 z=QB}5)>1S6UQJ+|@I402(P>3%NAcm+bFLM+;FEM9Yq$3AXouqxoZ%6(N9ks(xB6NX zMLpq)Q4%ZGsC}rf)mr|sC-Qel3Vv?QJ{?sCDI0K$OiRLFma{FUcz=D(nR?}I93L$a z?Bqn$sJ5?x`QKifl#KZzC6p#s^hm4zCR5gxxQ zXd#zW0daszB(kChPvgMsUMHR~=*X=wrB$>Tqvr(!$76BSN+ZK*t$^zA-N_N__BtLl z|LWZ|CSYI`_I!iJ>X?(8_8%R}v0oqql%C4XTG05ZgkfmQZ~3Ufa=pwL zd4>stQDw9W5F+&S2aLAMK3UKYI~AN*jR8Io=Kc6VgdJZ|QJ4nMnB`TTx*)9jC~WoA zEW}a831~SO0hej}z_fUhdX=}+8xbZ0a4yu$R3xJgh>0)8<}1 zk`scAsVBUA;)%{vs%STq_U&D9x|sZ9Wd*jv@-SgV!x~ZElh32nGb`wyk*DHsYOL~_ zb57;zE6pG&rTxJV$z3lP(I-3J^>cspTj5le9-67qWfp%KD&XU^py~dklMxmg|_(Gz*&_8WckTJM$r#M5abM*FZ5YK7Osoz6!5zk`5>b;|m015S3#e;qC zKs`?*PUDupLH7|j84gQ1PtWbagsTz7X|zxnj@B^F+J3c~)1W9Qa>wJleHt&0>hsHhDU9 zp4xbM>>bFVRi$2d8FarV=v8i7qTB8lD7}ADtPM|f*Z_GUA5cVe19*xAZ6>j3X4|-j z5U?6-Y}MTumKmVaQOfGw;s*Ivukh)&Tk3rnp!_qQ0r1Jh<*=Rhz$wY}>Agpc0@vAo z4b3|MV%ET7KJG`W@u8NU{m{s;aNcMb3WY@RDF7>Z1XFHqScnG zBWI!d#DM>&eYVb$q#ddS6V^^2X1F2=faPPbzVs(2xKGPTz8k72vY%!3SxVykoI&&$ zuUmGJ!3yGu;?#?H2n-9&@rXL=A zxA`30gzo#`7wLB9RgtMK5{(|L6UJJ2bpN*cu0{k)RF>$b_aN_^{p7W&v6$J3K{kyr zCq-Aw@5NQyLa&KlQ(>qe#PRREs>{o(s-8GGmOu&G)8uX&Kf7OLOBdW89Xav&hM|sm z6tv$;vdV{-Kt}RaDeQz3mhwSX3$s0^Q3ErJ9789b?8^*|Uc7Hs3J&2=Zqm0o5E!F zoj0F5pJ<2?311K)Nh2snQH*U|;4W}HL->Q|t9Ax24KvMh4NbC-PJH|WSBYS~O2QOY zoB*$NQYKO(JQ3(#J=`E|ZWsV7ui5CYsF+;W*8MQbWroL-t1{B`uDe9dv)^NqRKWft zYSrNbDo##d^IjHEov{x;i)XJIJp6O%6LY_1JurQXjyq-txTiyz13AR^km>hFkEJuXNFs0#@J^9MVG8#bb|i*k zecYgE&%^C^Kzt04La~LUVgt8dm2l+`V#1p`@@h71f!VU`a$rf~qsK&4a$ z>it*B-cnf%Ec{MBEIyV>=yMsyrs(EX%9SV^(G(4jWl2~xwXNk{{keUm(06JLa>2CP znEAaZagZv6&$Xet2z20D`2I3kI~CqiKkUYhjSnQeHHTYpbN@hd}hE7d*cPM*?e7Z zE-v~*IB(L6D?T)3M$nxz7MQu!#isKOzNP|kVs!JyD(V4W4~a}h7ElYM>snIA6~ zEZS3ieFGWY9_kCJ#4(0C+iMuu=+cHqKS-k z&t`j*Y76q0g}!K}g%bCtbZtz2ed4G8md`}H^`^wVtJCWE$EU4<6lUqG<--%z1&pwH zjn0_9XH#XcENKJfy6Ux0N8wLr*tqvh8xvs`YYn!KZb5#}Ui$A^8^L-@g~^8Cy}T02 z#d`h;u|2!>zbU5#-fmO9W|VNxqh!J@-EV7ZYU0-YQ1;%;f3-rJRV3gG%JD#vO(j`| zS@}zYew6S!tFgo!7P|>75!#^rDj}@`!Xde~5vIL8ERbN zZd8;}kH;FGWUeDct4O3Y3hTH(v9y$DXu0>e zlAzG*8Wz@31vb8QwvU)Nh`~espS2FJs(@zzb{||h5x;A^N0Br47q5Asb#)<=ctK;`|iAvd{n|73v6qm9uB=` z|JqhcuLny`?X0XUtt`b>+e@At_=G#BbNq))O6)|%I9dgfhH8+*aMBYM6c!dHBAmA( zf)Y{-uv6?zzV6}kc3RuWavJ!h_4uL)#Ty^?ap45LI9XYOa{u^&z%g-*mmS2wK} z1{9!5A8W2(`NqucB9Qx8DA9u`JifyRypl;{tAPa^>k974MEAMIzoSrjkE<1g-HDu5 z&WKPclm}z$y=s*DjfsPvr;<^WP;5+KCDONu>2UPcTua#RfS{ z%5FX^s@2f0UTDWIHYXb(6-vmg#!23;l5<<~zbQCBj-e^-vcLbCnVsQT?|-=5|Lp8Q zt7Oo_NpZ@8uuxYw<4Z9XjGE~Csn8{- z!0ePSw3hlB3v_rE7_?5x_=Je{?djmc3pop2U0oQ(_7Mg{n(wUg2cXir#>)@0E*X-9 zvYEMI((Sy*uq*IcqQ=`?q~?%Qgosb?LV6JygRs+VBCSXSH4YaCxU`YGrSGp8;wXSL zdZ#%oIZ%cqyR@?A&8AQ9WV2QJS=fMea*}Ie0T*w&!v17Q{b0Rvx;e{J5OJApb4oL< zlScvgamiGzc9L+JmzNiUJy$JJ&Opk-nk%<2Xa7n@Ix`a8l& z%!qA!p)Tl#MsN_iAuD z$@z^-T_X|McG{M@zAmaTb?10+9icq+X%Me2&P#Og9n~uqYn4r6)$ue5R(}nRH(qbP zj;&(dPHrY9nO^sN{g=XI2eD=cYk$VKoVwTI&zN=-G`pFae&4IafQV%bn-2Qb`FB*r z2*}TWn=f#)&t_Ww-|AIL!)|^l*KK1IfNi0aI*+uru~eU~jbU$CzGNIG8%NJ_;Y3Fj zkyixAhn{Q`HZLnmR`JvXv%%N2Lv!0wr|mwfFm(8lJu=Ovl$C^DR$bnz>)n)}ut@wf z4B4c!?@cK)`}=L?C%5q3369U^wl`i3Y9MyVQZx~@A45U&l>RAb2WNYGl#zfFt)h!f z$w4f8n-NJbJXQ2RWW9Az+fDfHT|78};2tcvmg1VUxKo_sQe2C>26wmMPzn^67AaaZ zSh3>8inj%d_2l`TdCz-h&Oez+GLxCies}lYYp?rrIfN#q^bl#AM^8^Pgb^gtmukUa z+P>PpqWnBeq-INtM;?mBJ5hRm3NUi@@AT5F0gdf8_Vz~4B$i{f7lJ2q7#U)jT@)_c z6VKV`3z)36=GwG9Mi%f&8hd(hEWHygWjaQW-4}*53T3*(e>h{J!=|m%_%T80f`Izt zw|VgnpKr`j`p`pRYL-9=S1^1;(fUSO%c$#TfAZqZM_o)a@uxcO#$F6UtxxA>$uC4VltypgHwA0O|ug}f~{rM%U-x?(bHBeUQ-|@e|#QG`zzb}xrk1L}k!P#97LfS|n zJ9=@w}vXKJ-j{ z`{EmE|5{Du?T66`~vc5%<}0{ z4c%8XD3bKQ*K!C&Ya$jm^o?Ummqu*z@PrSTprk%0W*W=WYaCFu!&Sw7PL|%;YP4a` zVxx2DyT9%JmK*{|3M@Fuey&-ffLIEqm{dz{{2r91RSzVo0Vqo-4F;`Xu*K4n?Fzl5 zA#3#8O~TDHvV*GAsORM|Gw)GEGtHxSle1yjLucC{#CSRqWR|Lk=PQcih82bD!0}c`ww4>5=6Cia8W&Foepyg!1a8i4Tw zfs^2=EEcLV6FSuL#x@Yzg8q-*f;v{vtQ!JoeS-rj4mhP`sp<@c*KCq(@y|tVy|A?ni7nI2*-| zA6#mftC$N=x{Mf&ofiyiXv-Lv_#qS;&pVr+~6rG{AXAGH-;?e=mZB{ka+Zi zTE$T&E4CDF@nH=1D{>S5fZIQjIB#Uf^jeuABAn9F(jsEg^en5G{D4oQTw+{&$jr_8 zz``@4ny;}wHpJGnHRLv!6Ja+-o`r>bgg~tC-|@b`nh182Z@8guHP%|MRN{RuS!7!6 zaDsnNgtB28_4)~(qzy}UG)jAq(i@<`KlJ|m5S`YrM#S>`MUplY!RnI1K3-d|x?$EK z>bX70cwZKWosCXL&SsN`1~W2(G34a*GEoN@#uYh%A%m>-gD%l|LzGZ2Jc-!I(lLsX zFb0?hwTJehawc`wSXp{znlu-e;2wN}Jt|7*ei|@tfu|ro&grS#MX^i|Z%6ty1pg(s z8y+>Wem{H>PuH1L`;?Ast_j)uOpIEGJ_U>>PcfB`6TsfD?0zWe^;>~go}geWss3kQ z{wR$R@_-=`&tM7E@rKUiN2tIHwm%;5-@t|u)s6^-)lojL2&KYS{e@$)b2pi0;dwVJ(2tG^5miw!xi-`aF-zY zP?sp$%;pJIJ^5dITZ%6ULq`W;}cx7vV=x0s61S%*tVwaq^uX~68O3uvKDu*UzSGCcriW4u-2!wrwWzLG@DE*GaZD;SAs`FVQ%alfkWkGt|gDA?97AU zFp_gCM%BJB`7NfUc|(Rs^NOr>aQ^r~R8qr~a!ke+=LH;14!XcZONyUfG?hL%mw}wpv@M$G7gd*0sX43>T)t z{DVK7$H&o!`JZa0%3rhhT&!UTc?TRckfRK#EWDe4ijiUm#<}+|6Tz6K(|^wVFGLdX z+4u)R3GEn*<*Ns!uf`8b)s`jTba~-8jit?$lAiuICm`iZuZx7H?X(03y>DJI#7V;T zY!%N^V)jTDI=^RneE50W>`E-eZrDkt{aO^6dV(bY5+t>K-+d^x1RG~)Jk4k!(A!Ye z!>W(F9Lo^0PoDCaf2p(mvUiP9sxxK^90PW+lenWu8Z7W~0Lv`tyuD$5^)8|37VgMg zBokPX2<18X{_YL;tUV(Ib(8}$NxIp#UJOoh9M zy{VG$I2c{&L)mnAc@otF8{AnG2Rmizm5g^4Oy6|coyV*R(e8P#pHfvG(n4p*w|^?u z&{8dAx(y2`T)^+_x20ppt}bWLtM3SCoQ zFg(tHARYdTS3nR%fCCZgzKjdQ3IaXnvNI-wNn*7P0thTEo@rwv4C!^fC9DPIFbf+M z-0@m8zT|7|M&;hgDO&YoCQ9rwhJ^M7ZX2h3W8uo^x<3v6Gq)Bv-IY{4^SSSrWQ?xO zgG{2r*N-#t(q_#)?7tJ*iYz#eUTu$`RWx){Vqu*P&&5+7%YW5LZTX!^+4-$&+`!Kn|wX*E0ASN9oPBOj1(%CGgT zf2HGIWE(hYXtm1ibI#F^@)KDAlQH8r-=PPAdER1v7s?J?x!hvjVPR((Vbv43XNbzCq@Z7C2D*5E zs|1wvoF!mn&s{DpC2!=L12B?B$?bC;{eXN-A#dqhR^Ju={%TSZd_%2`Jou*bdtJ_! zjoDQ}0iD6Yw4^|~(5SkGf*@*ya?ktj&QMAb$W!c$IUbD)A15Ocf2PQ~IuhQ^bd@-0 zkV={B^V$zw8s{3N$_y_mXI(d>iXG$dOw-(}^YIV9Rnr^HGZDgt^L-%^k^`b29BY3X zRN&o4&piy#;IVuO#}ZM)QiM3@Fi((iXVsYF!L2PyIy<>jXZ|{Ah|h zZ=1CRd6rS?c*BRD-kZOXbmxdgYzAw2ayU{)os+9p2Xgr1=shIJxYWM7DsJh$j6(c; z2zJ#HVLT;aMI-(0&@BGIz-s&L5qPw?&Da)62mdX@_eIV>t2N__>oG|XHp){?B^1AZ zBrBh=zx5Q?%Ti@WQjx?tN9x6WO@bdwr-@2bI?xo8A$f~#S%$4*%}TerSv|{?fque4FCO0Glc~A(+&7zjr`QqRA6^^Tv&dA;B&`c zpM$6FTQ~TIUil%*#3mYYt-@anZdS;9AIA?r+~*PV-aV@8=Q#LAyf&1>;gi0%N^JK( zZ9ALW*yxDI2U^4cTHtp?J78f<&06cp?jIi~&iX}AoGk&=_Bp8f>^n#YeX3dV(2mEm zD|1$?(Q5>9H5bmFGH)O$tO(3K+?y2uXk|`{45>kJ@wmB*h&brE%BMdzj)A%0Nz;}0 z{X8mr3+vk2fPzRxJz9MY&*pyHkj9);?){Z|jkY!6ch2HPI|tKieG^M2V=Q$-lcjGB zZK;}+Q=0##3f1mfDx5$YtRb%IWGO8S(`t11sW`ry*w5F^)CR7 z9SDzF=KUnIwqB-mpRuPg_+}pflMk&YBTz0=av%vlhcd!{ZDKy5V~9ma7% z2QviGNEAo$_Gxbxhh^QE&dbo?44Ka?q$KB*e*7u~FQ`}R0tSN1G1+{H)LKF1@wxGO z-`kIuPuyeO(4oTWR~onVU)0&>kB4h7wF0?hFxZ9cGg}pQcU^?dk=YB@HJ7aP4m_EKW1ZW85M+h2pHLj0dNql;e zzp1;Jqc%G7cXvBzEVX?|&E;+F*|z?Lt=!7}cW4Cgrl zpFXhcC;x`B4x2b=+rd@qcVoww^;5P>xz4nT;UD^Qk~io77=~U=q?1(^GWu5&4_tB4 z$H!BsMffmBvbb=3GwWLve0Su4G)tiP?(4*B-x zJvFMrIsuts@P~sB(@UFZC(MJN+u}hn)xVuOy86==Jr!X+vWAgJbS>Pt?Xj?f?Mh#& zXT}k5sDW=DGHS$6{(TXI$(8x>I6$41_7fG>o(|G78)#1>V;s-kZb*MLiAE3!0JTAU zT~Bw{?Z4@(Ki@yyZ_0~Q9L|5jz{v8*x_AJw!&N!G7IbV161+HXgBh~oM7HUtrhi^# zs1KDqvZ8u zUV49+VRs)6?5>jRot6I&X?t-{e0!E*M`#y)R6=W{erS9S|-$*!_;v%n& zKgf+2xaJ5L9#_rbBcvvz)-Q!TMO@!rU&EZ}lK0-Ggyu(0H*dBLcssjJH?SSf47Q>8 zV{d60o%Hi+vdWZDW;)8|^g+_IURmcyOnD^#=7KhO|0$owXSE1eWBUUCHE;oeiK0vk zQfZ$ojIyxMfN+yow$;YTSA`|%tl_N+6%jF1JmHFV&aQ%PYkD=U@Ig2)s{$hbP61xb z5&^b8y2CfdUoDpS`!*|{j{~AJ3ToCJ`kGMhLq_peAUF0S&qH$%6h@LnP?!9SOb|4{ zi6|8}70Jk9-o)Tc23j5Un=4cFOxbZau@AqrrZI2<8~Q=zz@jDW5AS7?-zRKbu8RA7 z|Go#ZJrg7UdywjE{jWHms0ACw0+JfvL4%5zIFWH|V^dk8(aC2<_AppL4Tp~JNVRMx zQKOh{BL*8e{{pE1!H1%ZtWvZ&{FE5sLuai|MMHV+zxn5qqyN9E%$+43pLrcX`tIS= z9i?MiDq;H^U%Dc)Z=Hw~GFMM3iZ-M26gbOA8oNIh3RUoVs`QV&Dnf7 z8s~uGnrZB~RPpJr!U<>CMf+WIDK79S!ZallHm@_cDhoe{$v(7NTOGfeTj;M2WJDuR zbLFwlQOaw74(5}PlDON;$cd4nC!LFQi=BOg1*e&WnO^;zBh!*NZ(KdsIn zIv+cNoM^LYOG-jZfXl{ln_M_@I zZ-kM=cKPD$Y61^tfvAgcWJ#E!q4+8v#$jG@*O?Gr$vvG{hv%&+gXTbeGBE}yOMm}2 zs##8zo$0*74wyDJf~>)MsTuNh@yNG_a7LI@lvD%gl_}8xbSq-GNF}RF#7{9Yw)uI6 zO^)WzlI|7vUaYobQCHeOSm#r$e2+x6f<(&BftRMR0hN)f5_g{ddTsS4JPrANxPfxGP z>di#G_g>{5#Xd!P5BZLAuqYSvKsH)PW)1qlGflfqKt!nS^4rkISNY`*Z|80nH$Hyi z&l-S4*hL=ffWc`tmROQ7&6M=jm>4~Qw{J|%%!)KM(!9d<|DBjfKg_yYsRfSvnP}6J zqCA$RXdl4zY>@G8 zn??XjeiCZP`O8x}U#>BJSl2T?#pbC9td2)gneSGXi0*b(A*o*E#uE0vrHWEuL7o#J z_VXE8T6XR|n2LMXWr^3I=!wshH|VKLLS37Ijt<*Y4!8u8dh<%$NbU)D5KMv7%4sEu z!xTw~v#jryh(+e}?i(6>8cy_X&)^=?pZtp4Uyt1rtVHa&pYtj&=Dlb@DwaS3>5k|= znPqKUbbL;wyfam=@}I2D+-@t2hKb z(qmCm(xX)huWmay#iB?^^Mm2wu_4;Oe$2>`)X|wNn<4h~1@Wymtbdjz5k z>_q$de)%dlH>lBxhC<%Fa$fi6XG=e^cZ!lL}&ce zwwk@W>*BE*Wz7)JHmpxi*-u54m6cdnkMGeF`M?HIS{8IPKVbyaYAg;M^1#tqAgMn2 z6I;I?v5gCtgi@@V8gMh8hg5iUnt7Op8l0Qo8p5$JbXpqZoLN~gELDN))ddc5?cFLA zp3y4;SL}u4P0FgY_BW@#mqH*uqH)Z|9IO@DQuulqE;nzTh!t{j(gAT?n^~h_QIdsp zk~lF!kPZ z{5d$?&+X&@qIqi~-|SvBv_-i1;n-0?TZQ`W^O?o`P7UE}C*YG9G)79?9&&vhk01=I~-hw*siWI1s6>pZPjWce3&$U+!X}yf@IzFLc1~yHj4?`I{Sh zRGVAky1xy1?bk?My}Wb-+;F(myzbtb0RG}!;s;iS>vAwqeJcN131D5}by~2Q%EvF; zzdrvaO+z|YVI7E&Ou(*gVAAbFa|F!CmoBWPN-BeH03scq=Q~%1L6#dVGcr9a!oo#; zG{^0`6Y@&(g&Fq=k25ZAhYFcC)o|ElEe)l782E6OSwOoqH+ch-Ds6OR$M^X@rx4!% zHJfsSr&E~~{}I!3ZhLiq_d;%v%zTx+w_|gMpd?4DJ)sY^Xl7xd5=}E-t-w~hRh{LE zXceLf-`~C&ZNbz=SyRIe&l-h}X$@0N>63Y#GJXJ@C%U=5c!1hN#A z3_xikmu}0fBE@}Qiexf{BuloWG!=P;QZQB{o^n&-#z-8H#(W_z$VOj3Adh^HnsRUD zz%W+$ex2Q7_Vpe?jRX4Cb8UvVlQW7UL-?weEQ{d5x?^-3<0d!pf0CrcoG1trxyK=0 zeY$y;$Jl3qXDP8YW0LaJ`$4Ge}caclRS8#wT;R>vU?aK0hO8dj71bqgHec3lnwfgWDWzi$JMd$;6;HmP(XMe zW=fo|?(jqfhQ(-+(y`RCfAz_bYNewO69Y=#Nj8is&u8j7%bPkrx7f}koS)WmQ#tV} ztJCxIa=qnc&HzMJ$N`)2l6XHlcMXO!oVETdK;s{*Dh!;+g*(WF(4pEMIRcEwn*=Z; z0m+&(h}{@P*G@~|2>u@^7DslE^mI}hH!ruf?v>fuRpAw(OW{%Y7-a8gEzmekL{9hq z@Nh1}fM=iy(IVRM##{S-J_QyVU1|S?6TYe?^7^atB8ikicS|d_n?M9$aNPVlUPb9) zu@o^ELhCuN{aHd|lszRTqqWC5=-Y!N%((09)4RYgIcE2zDVCAs8M+D^v+q@-qTgKl z2~yP#qA|4DPUM}3#QZfugB1o7sSRO9alm0daKlL$&sX|`FgwU-K?>!ZL)5F0Di+#~ zDXX8@mTRZY9HY?M$dm^;$V_5T(40OIJJ+)Y&lRBJs2Vjq*E%ptk*Xsz+|tDc`R}NejboF@ZZr@+LIIFl?eHJ)k?N1sIX7b zn`&%ahA3t)UPUpnb4|3y_wwNJ}IvC|>BVYmnbPD;+fWxeR@h=$bl9iLq@k`=r zYCf!uQ12|UIZt{_*=6Y3af2aOWTZcA8pl2^JLoX$D|LqLty3g2TMG;ZeWHi~Q$c4X zI$^%*n6NRKcZ+}TnJY@1o~9zC~tZ^5Dkf*|HQ``Ijb(uinZb zk>+E=;X?lv52*Qs0_SD>|1C**B(lQ&+wQ|p+TxTTp5e&N+ZgcDT;lM>573<4#HyS* z+hf36oWV`D@y1I1xvsl6b?LWxeg7OH_ubRXBQ1(dihk3Y_GavH;@JQ@ z6(Pi{v~sPV(Mu%QJd)75V36xC&f3UIzC(4c>8)FyH7%|L;0Fqh#A2KIyUd zwuSFz%?hY|c=~bVeWh>0ij$4@LuyzVtk}`Xv%=!DK@GA_kK{^J428kNtINw%1rya* zFK*BHdAFR`r3{c%g2XHDXH=?> zdmFJ*wK8G4fpV|$5dY)OSUqd|`8uOZKlKspju6~PdS0Q#DHHNpPXjiX#43wA@$dD; zqI91sEOeN$hs{RH=cF=XeKtFk=3F;2^Jh@0?3qaZWp({_UICxXk8U#J6WQ~iK>m+; zi!UraO9pq;D|GI;KjY>Qo2@zCafC7^7ap>Y%5RSgGD}M{C&Yxq3}2>5pT$_u_d^{g z)@KEo2kNsMso(oRKM=MU^DH@m=|9Map5_yFeD?~v*dd$C{+`jkUu=8Uvl{r4OcRDkNCup)w%HHgRriX2)~%H!B-knCMzDl@TU<|cjHe1wqTl`MUPBu9 zEIxyOcA(^AmGbhmE%e*=JGcxJ1SO&f%o*wz1`M#N$s=}}BjO>v7*qzAiSQn`?yDg( zOVFo(n7{8P`0FEwbTU_}0f}})P)tG+GRtr}hS3fpo@Frsbcf(W6-gH0fzh(ALF_wA zZZdF&m#1lJC^lRQ6DCrERFPx=pD_F0zHGuFBhS>aOX3+pRCtrammv{z@+c1p5OgZx zZXsK9xF5**NSDwIP{kqyp@V7-TU~y>uGp7c#uTKuj00y!z~sPmbMqpD2Z;(a8flmJ z0(hL`GS#v4SFY4isKrjjYWbRDd_3yEW!-_kuq$KseOGmCH2n{aU_z66O z$sWKZ88A$0krw)O_s_{&zh<-m?4s>7jYAi}CntqSV16mcV;^1#~7-ZTszV%qkYP5GUazI=SU=PeU zVEY-;tMPOdiwkAte4r}?lgG!!Z&3xW*H{26(t#M;@;YSJKqzEL=jJ5>>;D`kbr@u- zHx-G~--)y(Rp8e~KJS(`ZWc&)t&#za6Ve4k(tqWA%oq++9z2Lj@XlA^&1hAzlDru9 zOn~aJ;YLqiA{EjlmFp^&P&yxOh%!STW@UveqRT+JQ|Y|LD;zu@5e^<;p3{&UEIacz zAD%yCqM)>I_> z^T}WH8NBLozL=BW9{ejU)sIIO$IIh`hRLaU@XV=nhv4yhWz{c%H>hyZ0sTnFiSL3Q z1uX(y)mVCNZ>4K=l+rP$yel%LM?l!O(w(rRIb!$&%ln#JDq_0#n%zndT20HYos5ZJap|edyZGJ6$V~ zbUL;q*QPUm_b(yE-0$euEeC2p>%9Sw9EmU~9DT|TS*x`-_g(pWAbX}?iemYBB6Uv3 z8u=PeX)#F~G`y-C%umgWdjh8FL|%m9pp+IGI@8@4(U)QIJieZ23KNG7#)y!PEGU2Gb#$1Ql7xl7z}_Bm(j`uVGR@ThO#4@= zcf&PG!ONcI<(jsew-hntXmIoW3vqoKAaftOIrQa&4pxT}xlXei^f%pKNebTts>Hao z_hpt*uoH5$Savj6DnEy~(8Am1v~G-OfP{pJ1uqt;)*?%ptiwFmM`EH_!zOba^*<$= z@PiUF*9l;CzKVX+Q7~DihIImp<~Kv-hjKCcf7B}?FQ)pHS*eu%XJz<*uj{W2uBTpHQdc(f#{qV&p)}lB#*KjvmXb4mA<*YF5d8(X$T0F zIrrD}z9?MhBxO?aV|;AoZ1eR4zVf5ex2?Qg9I4)kcSy)N)P-~GWHqUpMybBIhV-a7 z7gwBKH9;;{6F=QC{AI&^w9v~oPjAxnQ8r9$+gsw2oT*_gGz(TXtk+--VeMnRyjB$@ zmk&E;OuI|}&D;E?JnwLZ-B@gUQdkcK@3;GhH)!2>NEUDMRxX`!ely_W!eMP*^Tv4@ z3qs@kbLDecpk`loC~X&@?*7~R6HT|{fq$dtEA37OYpVR89y~9@_^W@AK$PQ3mucA%b@Y`j`mj+WHU-uJ7*^EVukp|Dqq!KHZ~WY~*ITe;+mHx1(tT1F)G#m`T+iarpuGP`#*> zRd#mKkFD#@WRYaTIu$$yy<}_}e%_@2LXx8~ZKiueVq%+0LAHCPUzEV=HIcG-H4`sW zcNW8g?~A|xeM(L#F9QgAOMqOezU@ybjZ7iTgtODg6ojt5rn{R(Uc6g$s*kggBI#uS zi6`^q5Mm_gaDU0Le6V2eBFH9R9Wy}3XeJOvBw1P8Px#)6_HAnNAsd^+xTs^sXO1W1`p%C(&B}BY+99uQmgwu^{)rz!_dbX z-$@!r2^hObLDB>Mwij4ZF1-Q=uNCM-UD;bjg~iUm=Nd=+{z@l`Y!{lI&DD*12KK|*l**2!U=;;->8zM#VPIG+Zinn^)(~<~Z7B3um6Rw` zV1=#}Vz5S;ZE>&L?U27x`3_1TmX9&nn6rn2$`Z?AhhZvoKnz8<1XXpm81(kn~ zzbSc|Rjls2n0#!}!-QNtib$WXEi5jsVabM(3hLHj<%f)s*n!b0fI=?oO6H`F5ksb! zyGpse`iG{lKJLTcRFW{{O&&V~mw;c5Tt9P&BN_QrDjNT7c{r?I)_=+;9s7wBfmJjUBe_+Eeb za5HZs1md?q>gW|t-1s?m{>G%F#?NGiE3!ylV*`)ET8jYO_@0VHRbZOe6~f3T1|3>7 z0ZkpuHkLo@iDpsh2aw}1vms0G7znd?SW~``N7KjppY`AJx4rCGrUYU8=U<#FgzgJz z;LwhjL755qx6+<|^0j`&&)aXMLILmv;(?FM>?2rHw>@pg2=imh~!S|9$6S z>jdA=prTTU)HQecSPn6l6$EVd6)QvC3((^?rnNH$aInu?OxrC(`)%Y=S-F&G16`~% z6B7Dp!odL;c<20L`+KDTTm#k8c`VM7 zAb^<&Hr3=;2}Nu$=f-!pw7xd!oCG=Ao$X3g#rXjYF(K)+umBBL>$BIv zu%7myk6(QbJ_oyf?)o)FFNrNsclZtI)oc83>cvkZL*zokU5FTTk8I`iINae#2g*;}r41FbeV<=&3Ej>oSs&g z>YIjY=Ql;4BxsEwhZ}kE6q7IWHPZgx3(#^-$=pzuDJjSeVzi*cn{?#ThLZAWLA8t> z)@;FouOOuN@)?tiz&nE_`@vksA8he1T2?g==_muyhzcPLOjyIOY%wV=mxeAmNUa@iE}nr)%H*w%Jsno{L@S5=P?9y}^4`N8 zv|GWCu6n9PWEab*>7B&aiKjHg?;EeB^yNUzCi$OXqBa&5T>}C; z1W5ueuKPo;lv4DiL`IyvX3Xl--2(0I*;nR~%Rp1QqnNNRu{HGANWciTeJl=Im++va zO6#+@>*rz(oT7RVY>cw4HVTg%j7tqMB?1`k+BV0wiM*jX|I&jkgPb;cDL@bEE~T`y z=F+K%)7;wPt+vBywiyui2xbBv!6SGp7W23A@-)&`l)Q?;ziuo=uQa1(#v^xGS4J|m zK=-J+Q|!xSIQadKtOc`5@2UkY*0b%!!ZM}X*U#lIJbB8LocB@h{Bxo(77D9B&JU?v zy|~)14tG638PY$iH||xO4K(>jo$TVB0w@WM|m&%$ha`*3pNgp zNO*d+fYS*xYtcN^DNLIms(j%6uO`Qa3g^}8C3OQ+h($8c@Z|~rB^e*v^Q2Fs()V-> z7me27ZXz*O{4(KmZ!%I#!JVPT&d7K*(0ti4v#nJ14)Fs zjk2<`hmF7U-JX0Zp@-`==mx#x`%BE0s9eCuE)^~(PQe${3AGydGA_(yN(Kz1+;XMh zy9qQ77ZzqpFxw3_(Khks4wJ|r`!PESS=%21q3d+JT0jR?UAaOzcn7?Zv<=J5Mpuvp zIoy#L{vLU&CPKg`M8=z&BvSOhN0DDXO}nN{36&>lcUdqL1yDc*$t~eDN9(~ixmnRk zxTrZuK0r~3Kz%DV@xen{E7>uQpCU5Z9U3*fJ2{Ba#hjsp34kb zZ9j5YH$uvXz~UKnCghK$ovdYyi9crKwI_qT;Y>%~P#$sM_$h$^^7v$Xgng*!k3A}j z?(S+r^Sjq}TPFPe)6E73g%5qLAW0x8`D^YsA+jNNOU~^1-#Sa^#}ss z?UHQ=UK;7Km1}r=r~1`xN~GPQD)md~P9D>x%3cms$2&`l^UioEA>((XA9}in`jsl_ zTiUE)6)Tg4oC=qC`VWVfhd;v-2_FG}&*e9mk5%Vh=)Y6$1f|bPG&3d&Kb0}29jCKC zGCl1IR9|%c&2*5LqeF`x+UDymqexy!?+WmdD6Q$Kt?QGJ>X23lq3NKI?xOC@@YApXK zE-Ox$KU^kaZb8ml^6)n3YU-5sH?tyHqWq9-Iax)L_Fyt&$nD>QNLihITY~&S!*Z5~ z2Oj15>an?o!}Z) zUFd71-N*PPC#(9nIDk@A%2I=(FIEkh80o!C^ZI= zkr}p{s(Eh%8MJAfR=~d%i}e7&_@FFPo=q^hRy#r&L!;iLt9flh20CyD3maRp9miF7 zcIQL02qG>PL_e^nOVW=c+)nd4EqT!Jr`Ey*zn#sb7rwyGc)k#-=P2*LicY>)Te zNlyZ%g3Fh-Bi6Q%wLc%f?_c@%yF?3PvPWg8EdmQ`7gCW}vW8v_AoCYJTlw{zP~=U~ z)6$0<0cs>H2QAKA0xI0@+VA~A$%XLrbi<@~f0)=+)u?l)zj_lr;rdgz_1oin4|+HX znb7~zJwd>Ah%(|aV|m?_f@nL=!YeL&HBIZ+^Vfl<>pD~@*K{1*)6`;0?!pwHLAs2) zg~_0zx*H8Im@{0iX|Ux%2mOT%e+gGC=uYlu2(tjHJKR}X>20n8${n;=D$Ygt5aJRh zv?hYmF7#cfAHzPZDPrVIf`1QQM@jD0qtB=Vs5OAivlM)JiR~a83L88Pq`se}g03Eq z-_`glnckbE7E@PyWyX)Z{V1IN^QP7lJOV{P;Tl21uHdU$ia=%-?Ps+g(G*LW$E@0_ zjD>}C#4!|^b8CmJe0Cunyd)-;X4z@00u1p{qk`K`*y!hcaTC$YED>)iTmr6YN=?1R zMcRJ)s>tMgiKme>ygaK^%~=&FjLQ^QXepTu{<$Qv{w-M|Dd^eDQiSgphJ{i9WO8Rl z4i@tUsyAfl%}>7GXotXRN#l4mL8ogYdKLOzN%>m5&8qD0uir2FO4O%91n#%p>V9uV zgFW^V#F&$VYWmzUzX=W=v_DJy$cgqM)6A^3I#B&mE26ry-u}M*Q{c_n>e{F3x5T~V zUys|XY!4rXgC&WX{D`!EpCpHWKB}!f8si}=Ti`7gh$tW2oyrmUsqOXK9|9t>p4EbM zPUc&sykjLH^MAxO$3$isH;hk}kzA6TAVe1Au|w8N{n-k|9RLo9?T2QuIy=sTwu7nl#)o$8h!CU&Bmx{P zEMM|f$hwR@Fvq*!3y?sXbAJEP7ZcXGgl&_Q)=VC7Pc#{?i>}T2P0NoO9eTcQFotmv7`LA9 zlA|RsT_uRcoqge!Sy#}qk%0aGbIYy-mEW}xs@Nx~iF{CLEzK0Po-V{XS{8XWY=V*VTQl5*c1jQYS$o>rN=&c#!~o7)lSjW>6&%(}n1Jgz^{2+p0ce-^3+r z`<5yu-T^=j2i;o+T+uhy%_ccpX*a!weT+b@5Y1xl4Ob(E!AKz@TQ)%yS!ga@PC=P9 z^Y>>8z08tADRKJZb^ookdA`7|pootGKYf9*bMnUGb@5GOTi^g1b_lBN0NA9vI6tT& z$bPi9o10z`U$ccLkS2prdXeDAts81tK%}4$Q=bd>F5_~X;9$%&4_IWTHAc$xIQ(I+?U}Ea8>pi(*fh{968C;& z5oTq5wqRB0!uvIm&EFTCx2O@NIPfkJ_6!{NqS-;b%S0)84m4)fj8XnE+fM$8qOmy8 zmGaE~{1DUC<9qsk~@QiBN5I-)khP)0kJ z&=*0|QDEJwCrKS~nBcDwPI%q~4{S$%#CVdhUn{eih{;O-26db`GwTvMhcN3r7epqs z)ID`OR*nW96i9BYk0Mbgk$;!n{mFucFiX7Tc^GC?1QSH;150wdFgljwxMrC)Gq2)- zKc!qdR>(Qx_7)l74kMrR((6 zq|8@^|65O4M*?u1gbG)w!V+~n35$b6b(M;PH8K|zCCpb25SNL+cxJasA*^$`ap7@K ziI>nQ=qim@*OlN3Kg0KSUXJrNoqtv|1}OCS6&j)C61Y8yYka*n%2H4F%cWO;shov& zKdj6nTMvR^l`s~uhfk#+H75Qbj*qh>UPMeOF>w`~wI`7j8xIe%T{ewb33lt~7l&R; z;55YznTn{s+(NjdRuBL5tPorGeF!k!ST=0j+(o9({Q3P1e(Vr7yPCWapY((5l)fop zHT?6-IxN!7U*=}70B~*~Xg&$W$%12VJJs2l;lh%#RSPNTKuxJw0fDt_o{ z&(AnMDRdUti)!mqHSgI;?_$Ap1`1a1N>&H$WiP1%&N(3`uitcD+N}hvU?BEUOZ!!# z^tWmQYYU?n&V%JMefystKF&+LyC!7fy?G|Y*K6GJdF~=s6jiI%H-1=q5V)?anhOKx z)FTF62E_gsQ(qa?^#6uUcMV4OsL@Eb#72q0Xz7v$Nhzgc8#zLxVYGmRAR-{0g0#|& zfHcyeKKuR8bDs0O+4=6A@2h?Gx$C;_>jHUbxN9S34ELJp9m-HE?xNV@St^n5aueL} z40+%rm)|`MBvWLt_*F9J(*1hoDpyTO1V+yqn$FKzv>t0(5Q{~d;NkU3Hc$&cyh(zUL5uc%v=*2{^f?P+VOU#p+XwL?QyyhN5r( z*Bt8pZv=3wu&|4{OV59Gl|_&O5oKJLJPw)8={Jn)nm=$~D4o(lT>EK0?HL=BKLR{= zsjTd}S={`(LETsw_EOW<*4EQjR$PvDs-!9hQbPqNB1ur|hX~1P_88#lX4?04XUImV z)&BT-RUzaTVi~U(uDOg~Ik=Oc0v-P>Ld+8%KnH3J%pBxO#Dew|4f4HCq{l^?l5swI zMiW0TLuZeEX82OcV#yYw{WCYW8DZ6)gL(;I8{c;NKDaJeWw;k&&r?1gVOIzmznsF{ zs6CeDK|ClGpE<`PO6yc(W-XjYyPZp?LM-s`RSo z{5+Ya(~hHqOb7&1zT(0-EV_SwCJ=4$EP1%2TV`6f*-rX=+x5SuefVGCfAw2t^}l!F z5rybmsR}JtVLtZN-o#hu=!5zQl^>Rulc$TR7H9v)EUzzqRQ{l`vcsk{aZ$fq!KgjH zJT7G+%?v$$mZ<0^mzloRdMc@jqJUgbv2bl0Qr+wEOiA7)3(cS>4LJr(Kl9SEk;+sM!n>^7y78Hw# z*&ECNPoK2!bLf%&&O~GXq9g-F^d()I{4mr>kSty-Qb;QXDR4%M#b*h{|1vnPVc^Z* zFpLVjoNIeF{QIb~&Dt_Po*D~EVW{K%y*DnLvWBN5q0*am*?Irs6 z0&&K#x39DUxo@D{KIf``Xxp2cFy3 z;R&a)FAknn0*physPp*TtZU0cHitHIk_J_Oeb=sF>8;q-ZE_^97DTYy!=4-x&UqQG z@|;QYheLj~m;F_O^BLHt&nKR@bF+c;^ttP~yPiZmuvh$p8(ml~?BZdR2omXtiZR5N z$ST((i!#YUF2@tsA6MiTY0o4Tttc_;**|_@mE zovXmpEG6@8K^1G*)XB-Er}%*ay_((VpW7rsB`e;)L%p6*Sv6n@;jvnpk~#m~O}MsMPNey?8oV-3G1 zUNT)ZFJ~Cu`!vnmhvC#dwa5H7(_o$(ey1<8KlM;k)GCySC@=}amEH#~2JR#ZFmJs) z-K%=@j%7w)>F&7wMEMTS*d~R=`z`Wa@ZRK(ph%a!COa9MFptbnE*yZ;1H}fFv(JFq zVh5uma(<_08G>Cevkp>p;PzWQV$g}zMBxhNuK*^xifyo{v8yog%FzXjD ztO3}{;UhaVgbGZ|3LG(sRkL$2msj1>3?s3i52y+wr@zW$8t*<#oQ8vQlho{Ash9*87&M3)a^I%Gi>di1CzPG0<03)6bUb);E5O&Ex@hJ{rk`C zDk{4D#uud&(2lD1C(D_p3aff3luZF>8}Iq_Cr&Vps^2!5uYhu}8lGA)22op#%Y5zS z6*DkEoJUb--iU*s6DuQnSN*KAGQUp}`uR!!b6l~60uZDbKN2EhiQle{9cjQ>ZqBjH z4^fqk#dl+N^-NFIEQVcJ&F|J+nt(J5@a1+44^;&E$FYN&mzQl`kk)ky3x^ke0jKiD zUmB*!6XNMkHy3CEF(WIFKUDy3%&hXw`=&o!D%3ZwTX@VGo>-5tQR-FxR9f&K@c{?J z|BK7>>Hs~+KVLbKP5<$roaFqI?el=R= zDFsfz4Q;eJF@09vb?yqUA4CznI>ML=z#X95pCWta#*| zZ%bXx1Ye6;=|}5l>g~KuNu-+>s(!>>}r_)_+V;Gk^I#)R*X2O>C1TJ`QjlNu?q1VdmCgK~ zPPaeN_a;gaH4lHZAMWMorcn!%CWGCa>N!;K#!xTEp`KOPI4fFK4hQrWQs2!z4JXpY zYYFsPdLtGiM z!noE-9T#A>WrN5#fn6-TvCrW3AI*fYrAMFPJ$t8n{T$DCkHPMEfG9+Guo7u4hFfw-fmD_zJaO zaoNN@bTpEfB1CwyoI0Mf2<|KHH=c)66%Aw1pSnHK1)dV)Rh~;kf7YGINLc>bSN+rW zOribIGZFr9fs}=i4*qQ(Ce6H2QU1yjjn1Ps@N|jI=tw=lu5#j*UuQSI1 zY-Qx=&Ym5e1v|YLs&?!4KmXj@i(SU;|EA2rM&Dyl>WQVrX7-d14Lb}#Eu03Eq;?RP zrmaoZP1WSh`?F+8)zotH?e#FRkLy2ar(AW4&(>kB-=(mVBzZ@j?4hn@nln*Ii(6s_ zxnVHA^_Z1&bovDsw@UTd@wOu|bc(!W)<5U7YfL>u*)Sl64DtceuZx#mm5;I_@4A8y4a_-;*;}ENMbNa=Z4_8HY5lAPPQ+l{p zl`Z>kN$AG*Cfu}*lIgWzEpX5SCdP!I!Hv(Fsjv<;k#V)tOYil3L;l!^qIbS*jn@zr%35GAJh4wHfYYs>dnz5;K5k*KYuRF z^`Fs}WUd}nrvDlx7cCJreX}RS-u^sGYf%0!hmu+VdV-WMom4DM@vRN!eX|Xj=Njbl z9Z|TjZjvBg6RPL7>8{TO?<;PZV6=M>@%jc@xG<;zo^F@ zD$uS58B$#bhC`n2Ds7kZLBE>B5fdf}zTV0!6 z01lz&#H=s8g??b5mXLCn{JZ=6%e7kF&{j+CIOnz7iRMz+UfZ=~XhhiBwVdB5>gy-% zQ}S8z{YNFOC!MXYth?cKi<1-*0OptVJ+vX)?p$5&CTrxw0&JE;ZTk&=?z#$S8w?wZLU`_n8*{4^Ho{Za4~nH9BV?b@efWSL=YC5 zj26~k?H`9AvKXXzM%){r*C;Q>S#yB%Bkp7FC=;I%0MQG3BFj{$s9|UtA&N?hN<{B=(vK$aT%QYSm_PhiOIDYTGCd;w)_4_s zz#Mmsh|v3{+N3=EH~JfHx`z4opO)c!4lBs2&gY>aMxqkh)#UO_A{` zv;W)hzx*2%=0Q+|oyY#|_G_vHZDk$w6iyfCq1I+_6D-|E@s`irORW??WFYaCyXl7T z?bF9I6g3@I>gYEXtZ}Y2`(A&lTJ2j-VLM*>UHS$W8!kniG^)k$7lc+^dQy zg@3C4WnHIq_yuyv$t~99Zj`o){%E6Q=)@%awm>qOZfq@KL0kP=j^BqUigSZJQ8g~^;-kT$)>sTR zC9uodmE*!95_CKM&Plk9OUCN!p31ZmW8U9_E)Olu2zq3azP6|9t4~m69S5#kFfrk% z=7_6olDVa_&L9dD!jDPS?Us5~qcJ^pmS0TkO^J zo?dab0>OgdE#F`go7b0fCMK=sM^~ht7*jlIpHKifNX1Xh{D;*uCjZ`)4PFnS$IkxL z(q5Usr-NI*V!oePxmXSfX46!O=xn4|G^nj#uq#5=r6#au^;|l$+2k3fm|29-T2n%X zd(y?jk{0v73i|(1ru3;tY}SmASdQy?SLl%(`(sEMX?HO@?5e1qaoa1IpIA@_@x1NK z3tV$KRn*&fo)=D3Q;%ZNV-_S(waSYi41I$ZnUr9v@paIEJ0*Qyi=jNfSnC1jHZW}_ z{#9m@JF?8ze)_3@ z;3KI))AHW^Lx?yt{xjJecMZkN#q}!4(%OhNaQqWbo!+Z5@O@a93lPm$AFN4OE+kxg zWoXQuq^&~?caMqDl2Fvr3h+6d(xeQ3xYJw}ygH1Uz~Oy?Pg!n}z;$Y|o>LhK6;csR zKt{H*(c=8WinEibET#HbXiCVV8J$3c6x)89>hZxGKputQcq_D=g7^8L_@KV)?;DW9 z^e%@BM>ns(l!(xLwGbSiidTRf&#J-kQy29)!7x0E3o5o)mdJNZXTx-hoWP5+e=*C&X(CMY0 zM4+K=5zTaxUjpdxCjr!f>&!fak%le=)*idy)WLyG-FLttL4MP2P^Rt4ElGEm=f>S- zEDjn2Ah(mr)Zp>)p7D=CBj7)O)?(~&iXQ=qOEYPJBRNkQc(l3H!FNS^t9LTg2W7+o z=Fc^eb~*-6m^^!EEWeeJrc?1E*Fts)l}HIG#yUT_@R9AUMi3apvQ#@$uiG`PBRx0BLN4h)>(c)ptEkE+KKg-{qe0)8bMe)Y0^hc>AKTJLu4tt<# zj%>p0G3qM&?*qx!AvY#cx7ZJ zwNg)t3+l`#W5(wn0}4swk^xUM?+`%WM36w|v(-_Vxk7T?oFD&DATN?xko}^MB0*Ch z<$}P|mOt?@FA+dB9)oVdf4soGSGH;}XD>47;15;V#0VnjU0$A?VP=~?{f7@^G@arv zoTUIDsQCrPxFFg%9Jer%zOVB7)oBlD5RPQJf9ughvR3yN~4EHk_%dUFe{Kw~^* z8xL^CHE`|U=q;PcYT?_4}Y#)Qkbif%Nkx z^= z_f6>V)-f}E`P4V?R=H!$L6aDdaT9R0bL(GOgo*$0=o3n;Bv(#hG8l?X!6>6>kognd zz2rC6Ie66<8&Ux6{T5N%*vEi?*;cZTuZ~w*1S6d8tfhDK0O#WLXB|cz4jj?*ZrEG( zpmhuEdaH*|>ZdZ!Y zhV9PkyME@Jgk|quqCu6NdljHCyW)${>CxQzl*k{6YdU@`YT7VG)xwyTp2odH*Gs7% znRC(sxJhpj(ar8dx2deMvtLy~DfBHaYS7x`b2RyrW5o{@!-w3efXdIT*(~z^3keyR zdT?d8e=~gQ`BzY)iI%N)mv%mu(VTCcGvrrIZ5G~JeuNoJS!a`T)9foV zqLljuH+%WGXR{p@Gj$C8Ab{J(O9hrw_}Huh24ItCJ6cMx{5l6_S+QHc{7o*3g+!}Q z?e)`UPePy*SV%*D650@p9;gLC+vx@~-7b5E;K;;P)wFpQ&vWh9)xJO{=rnLx(BNc# zY-{r@wnu^uiz}LMncorsjvnMw#awcdTG~(h-e`FArr*?sWMEZ&0yxB*C4T(lQ6ySW zBqVr=(ErRNlX^p=$XHKfcB5Zc@pCsw{EpTbB8{h2?8q*!IN!V|_Q1PYt_6w4WD9s$ zBY>m#P1K&x+A6`gDz18m$Vv@!3XPbl?BcvyAY^M|t>H2338eYT)zQp)W4dtZd=0ak zScwhgk4N89X(CT2J&+8D-1*nvaDB8<{OWjWZ?&dq_CU?N+`nG@a^hA?+PkXIV=`cu z<^YWu7{h#@&CRu1z5F_t`8db~HFxZ=pmc>M!EX{U9Xt2vY?_r?Z=zdq8i+sNb)XTY zi%v)%IU8Ka0T+V-7}1)!3K!?;7Ej5y6sFlUfX1uo`BqWI06SV1ys;lBa9-j?FyO1C zg_wey2J(OP;g%L^y?tDeNO1LQlO5gbrhbiQBE4uS`m2782b~+xBA`9ntxuupMf!z^ ze{-|FvU$nSIwREj0<5OR|L#ggs(}Z3)Yng4s7cNGg{eg_sbTQpc@Q7$3ren}J zhf&vm!aUfg7o`W&?v!HY+Tkr7C|R9zjcM5ETsrfpLP+s2RlxSCqg7Hr3Phf$W#zAK zU;27-wJ2d-|2vKKk=On0F5xl8kF;<#XK?>S%T|#T%%oi|YdpKW{0rgph?r$GUi-I| zE*^`6u*kQX@g>|S#QXOMCwnv9BP+R=heXY~;m(gYrJ45w1q+@+Wn}btNAx`NqoIMT zpLJ@Y4~5!)Ibg%xyP-+YH2TZysNW)saRyVQ?27Ex)<^jCB^vRLs@-TwGdl7{#!C!? z&Ck3PByCyDuP3G5`49}qF&b14;fuLv`IgbrpwiR$<*L(I-GsopPoM`~!?0{%YiPT? zS)>>mpm^&VTK5Tell$|Vn4$>fM}Q9tDYI)L-@Ow6#>OD+l!9nYP200@puy|=23bgwIAdcc zd|KLP*3x&w7H$iGn(Bqlb`Od(RRfqK=uu)iI#`hm{7wXyoM*bU=gsD?eqDJjf3I8O zQ#1Qb&kdBs;@2hOh9p3Y+o{etEAdUE)d_ln#<-%#p(6k=B=d0~bEGnT38{ zA2s-bPR0)GY!V`V3^O3bg9iBsf&12|T(94wVre~ui3xuBM3h=CXz|b<-Px-VPF<@R z8fX#iW;h!*y2+ zY`UmKx*Wt^Hj3@Xv**H*Ip+G}^27pa990zWI=W^ltRv^K95AU;RNubu7YID9*w$s0 zyVTW1xH?^P%JExf7DU}k(^Apiw+<3EEwjg&9`Z?nKx<>3(Q6cQ+|Es~2r<(9ne$Bn zKEKA=zW%*Yv{V(TlNXr%8!u7DpsK7aHj?Pw$z-h8*BFl^b)JD(?fJg*UxqtRZ%-mh zR53|L^OYJH=f0wPKks(q?{fzcodxpAGCF+8cv=aYik)2g>xlr(jU z;R>9ndUlmEN&A1|RlUC&nub%BY)H7H4YbM@&swv-1_-=skX~x*g;O7_4<#e4&LpsC zQOwudLdC8Xone7VKP%BaeB=9ccB%{QdrhKAnL&u)vKpsP*^u`xniX#K>;QgmTRNP9T`c)jQdhZmi5c^wX}~ z7V@p@m&aw&rP6H980tZ0zTn|!gG*si8oI_F3A%oSfDTF_J3omx!yL1UckuGZ#pl(z>x2Y+QerEwWLFCT{1h!mSVWO^ zi3)AHStmPs4bn@TJT9u#I>Gkd-GKMV8V~ZBo04TcPlFp%1_rGEdDEl0`*V=+V4~P8 z_`?m8-?ojVy7tsGp-jQ=V|qO3%z*&}E}=iC`c$$i7NT4p5?VG#h$~O)t2SV!+QSKT zds1Orw*c6&aiJt=2!kz&rkp)5Qj8} zl0Bi%T;xxn#-R;V)g}?-9dhYIfJ2(@LtGJwS1k!MJ3Or2AX!m^PgOk=-F>&dHHY0( zO9?dtC-!+gAiAru3%L&&&QJdX-xb{6D!Ytgpxy*&QlPdo&uHDO7Mq5EB_*))=@;C9 z$4`CHohw%UDLEqc2T+;J8@$Eq_%6~9n1$zy_7fbWED{Uk{?k3()DVv;#UOu}9F`9k z&QW^*+tKIQTX3xXyw!%2*_fLdM)xjsKm4DcOI%A6#fU*SXj<0z`d7|yargI@^a|S;_@mSf@&VjF{SASJ|Jz&Vc(%`(`rfNHJC5I#itThO z_Qp6$gTRNsKhEhE@h{{l05QWM#i>!o1!%POCFYsPnzc2ujn?$ld>t&ZFfW^z|D@HY zg9yz53zS#RQ~vz&bkA_*=`DwCEH2D2vjn7gul}~T#qEr_IIZ+{92?&U4@(D{`Hr_d zYjQZbPyOwT)F$R^oD~QK)bIi4Kh>03lEk^oaa2M0IJDUC+8;Jnp{nG`bu_bIwf!g( z3`?p;pUcz1j#)JRMNc#3wi88?^Qt{(44dHDI$MB9Zk%{~RKoCS&i0QF*n~xo!PUw4 zHHjWQL*!%7Sm@uEZ}~4oSkUY`wyki85SuX#a!k(|`f^MQwJ;*Qs!fB`&AIDx|2+$2 zd@AC;ofr?L&>(|S6~m3gPnKSE{TZypK(;=g>d95WEl=SxkOJW=}HAq&s(&UuUb_Lnz*_57 z?af*0J?@>OU!6LZcgC1N+f>b`->cN*A<~d>8nTLb$G>?eX4q&Wg=cM)M1JHi2UAi~ zeaz|-kd#u%Zxt}e=n^pNVGx@gBXOoGMt!B+b$iL0Ee`BSXP&Nxx4AMH|0cKe4XaSf z#?&loV5uE%5HC6!J*$Pcfu_3A^4)52&g^;S|K|^Klaya}6^704W8h=3YURcs4Z)Yv z17k*!Y8z?l__T7fU-v$dkR!FSvZNo<+&dI~1>a~_pr7S7%WP;?5$X0E*P{58QH`8yQ!)(+=LA9R(C-nw=3_q%vj%7j zSF%iX$jjA}>3K&Sas;3aN1H3YbjsxjgeQG8l0;I>53S4p_}|C!a>4iWx4pkf)zx8T zP~k|#uy2VlfZ)cbmT2abOieNlmixws!8r3uUACKJlIwo{(-nMbFBXCnwJY>SXp@dwT2_v3iE)p40i^BK5M0}@IcG zuF?E?IgcH&Za#g?mKxUA+oinMc#yAa(TTaWk6vtS%PM^)$;e19=1NZBmD#?ev+9tnVl?gA=Jb_0E8F&{nn}h#wix9TvA(c3F>B>W)De~Fl~_6E8)3ze zNkl)x-~Ctf!P5S&S5f%_>Kg1Qb&V;wlX$o0SXg?oKg-L1KMrNnf`DPB3Zczk+mGzU zrh@bxlPW7J8Ic$1kGLn#V(U=V#&MJ+x0%&|^B*rOyPp8T?j{^m8Jj*_5h*F;s7xx= zteCW6Y-|J)dB_BWt>$MJ!f`nLQ_9i=Sb!LxC%qLZ7QWir-vloWpnzeER3Nl;^uJT9O){moXzgM^cgsG#Xt|jc^P=qYF{V9EUFao3~S&dUNC?J@6I< z`jBDSo^es6{=ZoE*!=@0mh}sAYq<83x7WVg%N2KBi8wwALm(DmPw^}rKLJj09Wbce zS$M#U-m;r#NtR^LV69UL>(~9%lT@n#mZ=XjXRLHou$W-PP)_(32($>8q zJ@GD&baon0tMIq6ID3M_B@~xIwOYfEMVqxK=)qBsNnX4dFM#s4w(>t%C9VM*RIz?2 zu*tL$Y-*8dcM`QOW%g9H6h^0f>gWjM9nHW>>#x6u`~W@=idi6Zz`b4Jg{`%y{v<3S|ajXa#ux7ryDF;wE3 zsoUn>#XZo~HxeR>Dy6dds0Te2p`k8zRk9dP4%Uxix%hy^CrIH83UiAplp|b7ldH6+ zVe~sNHZB7KfWD6a$*+X4Hm=Lmr?z!F_}KIaHTxVlI9Sw%V_)@I;Jl*yI51%9abMSs2-(gx-MeioOy9B7TgBe8}JnQhVi92bS7|Ao72*dJzUvsc|DC%zJ zJ>%ndbClJ^jPT>6yq(4FOs}C-)6V{cGx7@> z%u-10A^a6-1qwe?f!|qsxZUodjxrz1jDL4}rYpIYO0EtVx7mixIsdpi!s5)t0OH>i zMBlJC6wv!vL~1PIe#8z$>F!a1{pLF?a)|Q4RP;yhf1@ji>N($4iN8Kyg7ak$%(SK^5TxDgolq@iCZ6H)$eD0}q-bB;Q#Dr*peoUT`Vc4pOtc zGd=ngc>bw!BImz5m{*+#NXEB;AwC();xy9FJ>8aIEVNM+^;~OR(gOw{MwrXM*qw=28pSq8Ib82t0GOVa5rC^FESJjoY%DMV^0UMF>EE5Pqjqmv+5rN zg?~UmkHg>gzNnD9mVD;gLWO>dvO4w)NWUDD^)J*YrERbE8TY9IX@`vos1F>fVezj5))kBcPVbM1L`GIc)YmtBZ;7S zQm>Csps$i%{0I?b8*lT^Wk7J8V-&#LvLGEBb?;x7dZZqHJo@CCD=9@CwPJ-w$%>e_ zFA2eV^Bm)hur!gU!V36A#H11e``sO>iBH2h9l7%MdHYaQh-IpfBZw=HUaJh6$e~m8 zd$nU}3IAG7oU!ji!=!eF(>QK}YgGX1w^d~4F6L+7CRM6QD6#2BMnXx)po$p>hn|W# zNhxtO4QPcs*R7bt&hBGU=5%X%Tyt?xADoq4an_P*1Oow>B33Hr+jHae&L@v}_Gr9)H(@OB-<=RH%wSe{Mu7uA z#R4A9m&^eH^aFi=bAlasS-2JAj^lrwuWM9Qsna-4t=suNnh~o4SCvmbZ$AFGz6(u2 zD@wfft_eE7@ciF(wfvkxeJz)mPt(t=cH4FSb#aurQE1vxSVNMdD|<*VgyvS*_1J*B zE0`|Eh&q>{DE%Rt+17W2b78)bF@mx;XHWdF5SsGUZ!+UQpdF${^O+lSs+Qk*3Bmu( z#k4;0XLqD=&oVXw`6l)e{zV_7ghGd?HzbR-%+hpTM0f3?*Ih5yYuMWesQ5zt?{0+m=l>onc)0Uur3(?`lv-B=Ka2nJnwD%Y97p zd!6t#{ygLb>m<>^=M_q77OC`uu3-O;V*+so$9W}p!biG zjbSX;v|?XuVZKj|13Xqts4Ur&J)b->RVhPNsS*>EE+M1MqoHr!$1ySY;3RU^bklw0 z*Wj5naC&V_JJQ101vRL6(FUrGFatyNx%nV-)S)o;IFHxxh^^PVqg+ksR7HVs}q zSwf}m7>}b4iMQIOLOR+gY!$pP?>EWshAp(5W>q0c4V?H?B~z{rZr*Z$B>Y^v$1?OJ zk;^di%qP(1U#n7KUFk~1uiP=NWEpcY<80!UrCG>kEXtWS{ftkeiMkaEJFcZoFy$07}{Io;@T~pNG=xWJr2^|$YWb<|D zY`XmhJpgx-_mc6D(r#t&GNq833Z>>lRxZ>igezPO>JSZr>O6v(RmzhJta??Q|2)bl zT008vH8o1WlmBA-Q%GKS79siWmQv1X8<#8!K3vg;-L&Mk(^SfWe}*QInFJs9Bun`0 zk*iGE)GT<%9f?Q6K^og1bye^(@C(~93I_vMc;ztE^AFYVT`>Bh&C4a2RUzG#CY~<<#Ak2kHxniVArvZS7auhEn@a>EUJ47^d&xF$qjE*b{@!{0>)k{n`W6 zO=Vnc@xhzdOK#CW^3>ax)Jw)l4#Hg5){Py-|Ezqk6E%7Y@Z+AlkQ-j_PzKG}u0{n~KAeax{!Q%O$v-Ec8mw&5XjNH zh-ECELq_mU!QFoDB8;B@LaQy4(0Cw$y1*a7!0XEM>V%{p2Max_gGO5kEq?Jh`g@e+ zlgTmv0*CIh)(BSVuKGjULrCu5kZJ;&rZuCIRcZg&Ka@|#nvdt$zb(jFu07ULj96>< zIMx67&}j|x4`^-LssEz=m)LaE%qh{rDPaVYE`-$pUBlmO?=!bC{0#X*vGq;(lOa_S zXx_y&hfm?4EIfjO`io(BR)6ZYnYQAQ+6MRY~!MZ6+f1 zOqaRctMvhLIVB>pSS2{~nadSLHfj7f)&wjls};mSa=~ZjD_uaxXB@HEOKb}+CrRm_ z4V=#FwLL=b^(sKYG8_gM7fO_5bq{w3s$haBBtv3+@#{!X*;KMd>ApnamyPk=j54DEU8?%^9GBij_Fv2*gxBb-* zthW14dW}rgFYT?KIz6iQz(tbbLG|*+FZyYCc?@F>#YYQ_HX)zxbhH88a%_jcl2Y{~ zIdNhGCMx!Ii?jKfOsa?|rA(XuRLAWW6|H>xdw3I)0p#t?@S^jZ-Yv#aG7NACI&UuJ zdtC_X%*cD6fxgdw_yS0OCD5Lcg-zTw+@T5f??#KUn?SD=jB%!UrU-Piz$Q{+Vd=`1- z@Fh2=p^|I>YR}iS^G)GI(Z&8okwXwgP4|BB8bC9L5$>l_MMZfhwR$c%H2LCKlNu*i z_QjJ62>8h&kyUqiA*Om|1}ILMAHeb;<=6UKlNT3eT(Qu`7$Q2J@6}+vIA~wvPMoWF z=j9hmn~tr@4OHLB)zy{Z8L`onC1}_+&qC`;`|q&Z&^K33!gz0d3j4sCSa_AZXVnz@ z`HOx8hxl<~*_Wj*uiY6kD7%;LH1kW0@8{ur>^KC|PwON_5%ck$$6?O#(MqhZ-;UAt z252;^Apo>=0P03*2Mo#oltVE!he$inlmnQXr$8m$%%Fn;BN$M`G)4=$+Xk9lxZD$} z{gB#ihs>khO&AF+zD5GIHC1@^(;Hg6VSP5^en?q7vbd%4vwl|uT~5peso8j&!u}M( z4gf`7T*!51v>EhQdu#F}=%oVp3znSR%MG8|~CLdEDaRb@bE{ab3VzIG>TR z+bzohqGl9*b(1^6dbMe`qm=qUMbfCv8Kw5(?egyMV$MVEe*Eo>=$AiN29|^%a)OMw z(PLqPemoXw3*8jDyczAZ0H|arG=lV{*T%dW`EjaT6iLdmnR4gj7KOhD8!@{TKOVT;5;qzt9rT1x8a6A`3!vt+`o)_GTSj znorxe<+ORG>PELrbHDLTt{zkNi){%5T|m(UgiA)%7auE&oUhwbZT@a^A@RR8JdG#x z1+}uG7deNOCG>SAQ!lYTRoM?Z@(TEoUsM}F4m#&K%m^B&8sGz3cvR=X^T?&G=8Q2` z$=?8qmUjkDYK3J{K13y;S_ES7uB0)%*B&|o4iioqB+Le^v!o_`K1O?xu6yV>;aCR& z=yob53zXYWXZI`ns@l_gp#pUFCC2jWRE6gI24z8pslWpCKjjNOcQw=@U7Fc>o=GF> z(7dti;baw0(2#kD5*nOA58TnGdU&T4++;LLiR{-j0DDF9Iv=kNJ> zka6qp{d@0)HD$@ro73U?KHs-OELxRJ3GoR-*qSpcpjjGW8Bs`uVX{$-dg))Rhut^4 zyu9llEAaaN7V<&aZvA_)hjhk%MUnlc zjWd-{@LPd82kb0gqT2*}sAWS8Opo+baWp_Bb3sV}jhD-y1EipFB|Zc{yITfv)^^_B zeO8RNYkge)4A`Myinu*h$Hw#%Qs=DT}9DSTWdRH-X)zLm=jgS&b^wJ*_*gWJ_j zBF1%C2sytr-L>^OpN-8PEx)u}DVKm#Kd)8t4GtKR+!6ZP>E#zlYg>{jREUoS~lZSMNBfd_>3au9QB9G12|BL!WFVL5>a# zGWEPV&voKK^Ao;h;4xjGGjH@Hl^q?(SnU!yvcGK(jjMJ zK)SYYR`$5^@;}uYU>z7F2Z#2SslfuJvT0D@5DG*_wk;brEfllKn5YDVz^nX2(EbWl zRn;{eO-+If%=?@|I9D(D9?@e+lyyqs@|`PRtOw9mV$p1{bpV)jm2;<_5Auu?8P}o`HE~+(hm@Na>vuRoOT6$-Y!2aIegTpAHC;BolhC z(WzptO(d{O&IO2N0F-4?KLQ5gM$E@h7)DjK`<)M?xY{iSRYWLGyzD^l_?fV9deZNu zz9(>SrKgS}ibL3mb@7axWd%q8lG9ajU)vy=Z`}B`( z5ajwU61$6Mo-fuq!`ua09tZ9)LZD!N5IDCd%XkZNm|12qKU#d zwuT+12A$%xI_lq}mYcxWbhO?XF5(J|)4;K_^#RoW{7Ll~BdP=v2z_Pt`*)?I`T*$R z=Q9qpTqsuJ|I%{k)Bnua6>eLXcl`t(&4!61Jfw~Q%m|7pxetE@ryqEI)jc7CXNizJ zuhnn2pf;Y?<{-Z(-hZ_`PGcQ+*8169^V27__PWG2&wZ(6W=-=>u1|MeqA}KI#rdnM z7PulQpG-?1D|q#kTCIYw6CvO`_KFE@XP2z0G%Ct{US5Z%0;zJe$ZnN&v|p%Q23wZC z@M^n!qFVlF-ihr|SKSzFSPF`3Y#{mXGJ*ZWRrtgHL@?u9ms_#8kdBDMZ)anmO$ zy#Os%c4E)ewRa^hHF?=gmD)d&gT%vq!aGsU9MZh~=`QZ*`=*ymGo(Z-IBVfP&3 zb?d4@pAzQy-wEc z>6o>8Mi)<|nAdc}uJ#0;Pk!iQGx<=}V1LjD0NY%aO~;yl6*e*mH6+GN6)%tk7Hhx- zkl>({=lFlY0A2^dL>jnfgPIpDt(TW*nh%FkVx5nT3s~G23KIcN#a(|d7yZ0)`lk zvfpgAdvV9Lgm45fJFXK>{fGutSo7k;A~~j*>RtURWvo@^-Z%jJ*^)&YO8zldELyu^ z>*vad7B{Q*Ndi~Uy{KZKho`K13Q6_Kk)jg7nIGxm@U>KZWO#NK*I?^d)qJ|=m3=Ve zIa)k!gQP+H#Opc*?2PvG;6I*ddUcr?;tz;p73(kh$_$B%+DRE%|zd7ZosR!dqW<$@H={>D(4?@YqP|N#?r4AD zk3*)^A+;zu9ipQWS=ewY&A1cwBcCZlGoH$+C}iQ9RG2*TGJ}VcZleW%q z4H*L_sPV^(UW=H$YtwikhVib-bM?g&N7=oH;j;%9Y01g4NN@(V-2+W)Uf&N2fwE9i zd~09?h(R2DQDx1Ul_W(21wFoY!yy{h;xFf0@xD0YVR&+Z;KDQc7I#lq-^hM9GFGAyW8KSEatnVu5HlaZ*Dztp8i9Cvhn9_GneNebBMOZW%eWE#UXn3z+}$_jL)Q zGR3g!p{MWEy!5}qdyJ|RwkSS0+zmn70P{`T{%_nrqCwpjQR>LvAd6Qr`{|1+t_j z2da%n-KYfyTG`z27OtT=-`x#!D&B z94m0M=)OB2d(F{m7*t6=9*Uvjz~GWVl~d4Va&0to9|B2|@-_Mhv8oCO1M+uzPAy@j zRJ}J*82ePWD}_yWJ3p)Qi#>VLpUV%)ds^8UR(~xK zh|7Qe=3o1_9ZE$co&)e+9RdXk&R_q2TugWU3!`9`NDq)BqZcrGgmP0SAcUNfmg^Ft zYl&D*fM%;jAqms?Q0YhwM@j41HT=2|E#}-TWmP$yit-d2k-8U$`c4eB3VMTe3P==5 zd~<&t?;Kcp?*57A*#(L?k*(=HCv7BJ>%P<&{jXvR$~!2u5-}ev4rD=O6BXXmz%job z5x@^^CH(wQ^zNWnM)1z}H}-@7QK@J^aC{WN=BO%4y$1=k`ruU^b65Tmdil++qRZlZz`Z)^|6%46{L}gyG&*0T z-!7`6g0%z}`j@kw0f-saa7PVjoiHkL8ZOd!pNA1bk5?au`mQ%UFE-kwx*Vj5ScXSNBxHi_GfFZ2w8MBcVuOxZ z)c~D|f7ku=dRCsb>mFLHLLPP_p+FIKcnmZLx3zBgaF3XN ze9|9L;u=x(z(v}q3bm?~@Kn)h`1yDVFTg2YD2VhcjZec*cS@ila9tLS7|3LaF@W{Mi3`g!G~G z@#=C?kK)s2`xGmC<<~}Ry1qO%mU?l}3Q>{cSq^xUcij}w{x2xzr%{hkfowK=erd7b zp5EiGyU=R@%_G5uOidlT@u)3c$^@-)ZGPb%CA%+6EeE_psJTWt zC}XsHh#CiZ`cQks*QwmjH=$5V4dBQAP0!=J;0H?R(W85kFQ=QE_odkHf#tH-9F}7% z=wU3OB}7%9Zre7!@W1EzaCu}n;|cwre(O3%GAwy9qsTO9+o@7SybB0T|8hRGG@a^^ zh;=J@%_9Ke-h&m!t`4N`w)Xfr$UFd&0cA;V@bt&W(xr^aol!;U#R2r+AoLIt0T39! zU1*z0MLy`{7MnLP4|o*~E&TKmtpqImT&S`w3k|(0SRNRj8d#iSNTwT`)Gc?Sf^TY>f<(pkNG1(@ zL#+Pu5u5a^I^<4lQg?8Z!VmpT)*V9}4y;oGk_2c#)-{94#L!x$0}8DpCH0BH?jCMs z4UCHZEi|-OF(q(Ga`5r`o}ZW;E*+sxYkUj>l?BpZ7OxIwXMjs$!QxIqOKB~5k1o3y z)E&$NZ8|xuanVPPa*z(e*O9`72W@*3Ny~^_a<9eo-qeKqyIR{qs<|FC)eb4Q`2j6?$C`AF8OH&#yzYnY4DaJnpq0CCoGp&Bk#*?)0?_*B&-gY z|1qjmT~#D03=fdUCQj=a|B(jzLfH@q_9d0E0`tC~Db8AqKmnp14OP3&akx;0n^P=` ze1tuU7lMT7rdPP_OTfpC?!IDjuB*uZ^1qMA(bzZu{ooY8RxuR%`P;wV-RltdBmFh^ zH-=3w0Q*3!qyLI-+Q7L)dH(Uf&N+;OLivQ1?8y9*1w~xAU|x*~LMD8*4aLHn{OStIEJM%j+dr80RsM%H`urlR+LdWhx7J(3$h4zrct6i3@4O zkB+KGv<&Jyu-LQhZI83HDt7*DQpUYU$9#ny)61T&;l$v)sP0(RPP)p9e)$#oG-^c$ z(9Bn#+>;^sAx1h+$?3V z5Mcr^jvRwy&0^&-?75+28n`3)uRxKamHYXHqJ0tWEd-_kMR*%-t(r}u2cpr?n8saW zQZ;rok+g8kesj=rWtfm2ZbK0c$o1j3c$e(|>vN?+Y~rEXJN}A_jYS4yo!>>@wa-<~ zXGu+13eL=*?C>jlJb7}lJ9jcRJrfldxJYXgw3Iq;6pgbiU4m1wR*5$+_rQ@)Nnvcl z?)6oa5API}B$iaXe$7@L0YN7ww3Jap8p%((oC56GvN)(?9lq7kqZ8@5a94F|Pw#5J z%JIQ_#j#?6Cmk4z(iC+y&wk_00NsFU^-eZF-;UeUH?-nFarm z!jXXNy_(t*b>a;F$-jcb_Z(0!ct$9*t$wXM%1%pk_l z_($7+AN1I-BvGg~q~+LN;+|2C+p~HONPzdh`^E1W7^Ij@9!#s4J^tH8#-m~#;dFFt z*m?OY^TMu)Kya;|&#d?x^xeYq!$mLhFl#(VdUVq_u1j;D@D)`o2^jS3^ep#!D3FD@ zfojz;N8NSwzFGyRmoet(0Ortt;CaWMjBM0D7l1=CIH)sP0Eh z-A|JJpNIe+?djXq&XVUbnqVmk33)>jiX{A&(}N98vKfaZf@aX?$#e>?{IeZ0&bn^W zIOlxmSG)Dy>Z3-)>`3qQVr!rzpl9c8JeW(Wuye0jNfINpd&a=jI-?1tNu*a4cT#ng z_Jbl&s5R)_yCy8im&lj9?j64{(a{Yfsyi>gS{k~mo=l%y6tr%ZD6f1v-+uD0^Ep{M zEDGd!RHPcKMHiJv&xeCExOj@c6Yq60Y0jt;F(~#|K!QEIyxw{3n`uBXz0h<_hRQ1g zAv%HRE{GV3W(tH}f=Zu%lI>9mmA+%@V*&)Vc>t>~2$=Eg87bJj$FS{6SFLo_?Rxc( zk$f#!DCym?lS$k4BE|B+Wa^v4;kLUU{;Tjhd~6!+T;CiLf?X>~p>c}vtP`#E2ga08 zhYP&*e?(?*Vk2fu51+rb&YPSYcrf*Hwng$DxZ6@ir;ctu2ESx~!Gn&S6ajX^l-3*^ zJ;4*)DnHWOv9LvY9o2)bNp7+dF7MkfdAM~lw2X@zlZf?kfK5xtl27U&s@8(`nJBXH ze5gbGNj0Y=P7)DvIj`Y*Nd~_p>v(b-bb!QesiK*Di3*eSe*KDikSIJveHw+b-e)r- zCeoHs1dt_NnM>S19B>Yr;{e{fZ!QA#6s}kF>`$o{79|GeO45LX`>FX%H=3VzxjM@w ze7NJ!+7Vj!MKJubSJw z?QFNJfuce3daZ@l#v8s9z_twqGmplcM+8v0O~yo^iOr!06TQ3PPGL<=&HJM3N9v-X zs239k4^D=@`;UZdU@i{YnSF89?>o)|qj3|eVQOlx=~R){?T*@>q!r}L)D__R)u2f1 zB&mtvEN6va8_S4)B&ZulN{i3&AxAT3l0c1(FGied z%67`vWE-zc0_WR6UxO-;QK{mfe`UGjc&M~TpVNOwiK?X}T9(1LG18p`ZJu}B4eAL* zy58+lTg-5dN^nN~Ui(5#$IcTjCD?g+d%GX^jyr9}10r~_u)MIa@HjLybo%-zEMg@y z1H2?W!O{ALL--lG=i4RHKJ8ARqjg1{*@t9XewhESMKg4Y?Q!M zU^0ZJ$F|@h5ADXcRMDv0_X4fbSroVCd!ThkPxMWo|yoXhaWY@h~0MuGQWE;z$N9 z?6tlg>q0M1SaX=r0RYn*)yR$7xwocyjbP%^&G@!*Y5rUi=w}=@C^@rN5=psU>Jp9x zed0I{?%->mg2EwCNDG0BNO#J31ywXchKr1iCjG|h;QC-w7=0fw3`d%;+@}x#30gj~ zfP=w+Bo#g<(?6SUs;H`}?_1ut)K-Ji2BPVQJfn0WxuVVF5L5}>Tyd2Y({CX2qR zc}paBRMwD*Gc#2V`M5uUnA&*Pu_`=7lem`L6p)6uGnZn7-0Y|IA_PGyA`|yAs>1zlciR`Wa7$S~t7DFdFW)6=M@) zw%%PSJ_B2ROVQKG!XumVe){sqX%m}MC8`s3R!5=fe;Q(AcnQ%Ai#$iXB_iOza`Sf; zVX+{veX$R{SG%}Z;^X1zCyVB5WNsJ4qMh2ybQI$BD@pl%>SG6okr#<%6mWsxWGS{f zH@Q9Ek5-uQ;SjtbX}WeW1=!8^`NFTGcULy5Xa>v}5gk5ohMsJz5?kL@xYBaWu~Cr8YE-*XM+2^TK!QbEKP{w|3`LPJW_{ElOIS zA?1qAIup`P1>Rs33_VzSzXI{i&Gub z3oG$I_50mb^1Y;_WPgbFc$3H{4&-0NDg}5o5fg#SsRz^7endEIa3q}tp2EkvWz5p; z^qpecKzBg#xZmy}KGAK4yIT4+t13{`Rb~bVgfrL>)k}>-hNvV%ycTQYNadN5JE@{j z(HK&5sFn08(7E8h5ay$U9=+J>#NnrM3_!O0lYa2voI;Klguupj?_8)jeA?&RY8!`< z*L=XFQjGnQem;JGiTA)i-r-X2{OcF?asUEv^bB)+Sy|QG|8!rpY7le*?nr*~#ItW! z@yW=ln)7e+*1TEJNatvKRCiW|EPWBiS-8kCc|Xb z3Iw$LQa`GJ)HBgB(0$)0J9>8H%3upnCZk&;b3beGNo?d|n zWRwk`n|$PHG>8CGfTiCugEMkf@1SI3!=$tO_)*A4I=o$Av2mQ31iSKuZ`nz;^PWF5 zw<0|KR-B<#${3)DiK#L$;0wSfF%QKkZ=;uk+LMj=$!6HZi4l_=SiW|~CzfK(i^@;s zqH!f?BWwRx>0&*a`dVWExs<2;KS7RBl@-c~a2Hlm^)z|TbBNG@C`csw?#2o4OAeNs z$7S~*LYObZW?e~1_%s;R@$vf4ngZps{PRm+3&kp@8SYOQn}!~nB76nVe0J*NK}F6Y z-KA*F_DGb99Zqsp(;1hX3}8YZT16#`g$(LJT|U#$6n_yJ&2Z%I*=h}-G;v$3<9Y_= zc>l?MDMh{`^!Z?lyl1o#dl$s^;7?uwuIj;knA_KL&&ZO_c}sSfYjhYgJ3A(arc4a3 zI)3vv+m95T8i_Lh0TY;5QiU1=$4NS|YXlQyG1!vyTm2U{OMD8khyp5CRV>JC#;HH1 z0b9!B*Lvk{StXGcg!7CxBq8|@b?1DYCOSs1NsH)?^?vi@s`7f_6ieEH!EePPBDPYd z*dGYBzMJ_>I~OU9GA{FN73bu)I?3>9{6p!DmgIffziqp*5<4@0OaCH0usU3v_svZT zNZRe6&A?7Z1pTL1fe*Yp{dp_eZ1y*($uOoY(P$mWl7K~*2OqW8SXuZQ>-r?-rvM`FCkPJ(NL(aF`~&FKQ{3VrWgO~Q zH(4cO#DNbSEpE>>s2Y4|*GoU8j~UACQe-9F$Id7-qVR0=9Q4+|zhB{q4aJ?4kWv*Z zSC*c`6V>QGLBX7K-rdr|^yY7ZLW0XBXJn?Ig{9qSio?nd>$>I4$nM3_NO=_sdTpKnsXERF}OuBwu?9_5LO zRC$I!3mX)V-?0POTx_SvF9l4#nUQ1LCkCq9Mzq#c_>xsrki(Hy&Li9Spz7$IDeLU- zLwZ@0)FK|-tSiLeXu}>j@G%ZIG(_<0Cym~-1bk2wYidhL+pEX(w-dVW50;;kr=+E{ zc4U(OE;?;hCBIv+i*I|bY|b*z=?&b6W+P25&NjWHY4z-pwrH zl~4IoslZ`afNFWW3P{w)6scSeU6Hcu9@3G7?X@2Dv~B~ ziZI$Ya_*;I*h)m1LGCkS5RlhUJy;^n5#%>kb?1ZNXZipiasU;x3usa7DU14Dd|Fft z{$Iio7i09+xFHx^r}*SNbvTwE-0;ZB>gPcLo4~)F3I4*pSsRIJW@Qh%mP zbiR|&0C0c&9M{=r_5_cB%+@(tdGfdf*F+D!DNw0Td>b0~8DybCsaZUV6KY14 ziQn zj7T>vWDk5p5F9%Bf*g7JhU=E_?fGNR?%(jnc#hl*FrMAwy^-ftmj2+C0C3RyZ zF%OB*u z96oATW50rrjD2p#+jQlnXG|g}Vh45*jJD*`zb7x-L0C*4v+s;oE68Pa#cA9CB7v40%ln z>=Fcl2aUU12%$9EYeJa)N@L{6<&59aEomPv%bRt_l7We!qBLG+lBLQplhPvKvHC!x) z*`54KkXy-AWyw{q9MKEf?$|ka5VRj-u`!CcS?sSgZt-}dyZK6&Q}z&LM>joHps^Zg zJPgyPPzQM3dqIxRyNPoKuhH~^s|ap*9}{LWV#v|-koY>w??(AAvE(O=>YBN^Y*?I~ zK)3k@wC&tUf%6ppo4kOp2%U(h{spS*LBYMQ4O@SX){E7?N-38ssqfkPhdX^1o(%@2 zzDqPNi}=gKH{RKO|6K%i0Wsittg1iq{b#1j5VB>OM`Hv2(8Z!j}`n)mgm-(C+ zz8?24mA0tqEzZXRQa6||*(LowrJJm1c8({6(5CkykK7lVx!|V)IphkBC3OIA{916! zo->ws*k#B!OPd?nF_ zEmr#UX@t&{h)HTM7^jM~lSA;NILMV!yaC~yc{rfxMG*$|Z(P-QLw_%)N4V2G{1blC zhHD8NU?05nH75QfjXKjJ+)X;L-}et)R9OLnM=~|Kmz1@MYEajaT~Zn@)qi8Zh9hxU zd9?1pejG8G9aEw4`eq_ZixY_?5hA1tb|cZD5erZlp@VY!-lUMTqpdAN3Og_)Vf86 z*~n*0xih2|DgiLY*mP9u0Vz{@`}+ED4}xs4KYD&14PIWBh}W=L1)rNTs{>}IU5F{{ z#|m=m!1w4%H|yan5d4V^5se064NFDLwUq;R)y9a7n9ez-o|}kCBG?N+>5VpLI`c!ulPH$keH*?@ZeclV&8 z;PiGL8N;JbccAemzkv8=$%Vj;?uOy9O*4uzNQzP2LkjRyG~IaW?};v*O5^44lLOV$ zF}nAoy@DT8vx4pcIdg{b!i$J~0#flZqY;g&800!DAy6?fRm;uq`K*|L@k^9M>;O;uJMDr7F~DuEiUswnnXa=H}nX@ zucY)CC4Nx^AjzkH-PHN({WpYYTLoq27#Ex!u7B<4<>fcL*eg%8*~^{uIBTQ$$|AtMCKsf)~59Qg3U4oA_Dy*MjcA-EN~QC1_3wmBx&svXpw=`vvHO%c`!kk}--hHlU31%5B-!GXk% z5y_%IfOjLd4nQqoVDEjgdL|%%;YdS=2w!~Cl>$>S97mBgewB?{@^(aI50@$|S2b9D9 z|9q|wo~Ybn@1%SzPFA!3y(TxJB_0cFln{tOFepx#oAZL&2onRNP}vm~{yLsXRx|JE zVi!Ku74y*CP8{T=az8(xbEQ+c-EG*JS$TfYY7vbSx0)4VcVBb3Swyamz$DVkqjwA+ zN%1`C#HeB&8*7idR4>7^<&~DYHO+5t*4}2C_}Pey_=k}d)e&N|OI!t8l$-{gT5 zVU#~8EE%+CYSQuNEvFlKP?--gYCcR!P%$PSjpD_Q)i3S>#Y+HGdI8zF(^j9kzl2o<$~t*WjI07vLm4&^UV@ z&2j6!E}w=-VWHCjU(QWueq2m*Fm=tY--|cEyP~3nr%FwVaOHW|N zt=P_=n@f3tH>0XVcn5?K%P<6I&j~{pn-LcLAe=TV_~$uTFP4QIB`G~Iy}o;FV4xkn z^5S@)cl{(1_pLntzI6Q48dm_}JOe6A`>j(L6ahA?BF0_{<-VAML0l@f`Jx$q8%snjT{Z96vP_Z35Jq z=ges4r)0Xk1&b)v{ZYkM;9X|rAg|RWpVQ9mJqtsaZzSycpDU@@mnY(PuN1w9OofaU zufiy)XtkjXTz|*sq~L%acoz7^%I>8tMa^&BrWZB;b4b^1qy^*Jakm2AFt2 z*`*enHlBP-Tk2+!Q^W*`ef?uOOpZTbzld0zHRAi+-15qFSm4D#`TIZGhVN`&VB6Z1 zlsOClIpmeY^!5l+Y(D~FX;K1wo_=4M?m(=M29`An zhqwR`;|9?OMRnwTKTa1O7e<1Ul-$ zC=#g0V)Q*FMaGm%!E&L`khje!3YJlq>2atK?Hzi&z-KIB^mmHh70eAs4*o7tt^!j|yxTHe- z=2SEPfCy-lyWMwq*Y)}6Ve-L5P{Q`&`M78hPfp&p1Q^`^POD2tl##NZk4yn5^&Vz&E>f0z2wx?qOY|gX<<(pqAfN&Hs97Y=Z20X z^GbLGwV4~Z5&eW}2)X}A2Z!jz*#G<`Z1m!rf!V*f<>h7FR}#II;6^Q*{8vu_MmKtRBY=S94kAEBoZ&HzEmiF;xLQ>r19iObc4z!p{_W@kl_^c zF@^{#Rv@VB;=uA2w__1H)}7~#pKJa*6!EBp(^_02o+$Mfsl;ew+~!h%>pAk1z5!@X z#XiT+FVj_^w>q|%c~Dna+PfF$C1l(!%GY*5PH*^BV%DgN9-?`Lz@j zwBHk49iEATZJ9rK3&H{h$P@ar%u;1ju*MF|pdWga=AT7s)!@L@I)5r3>fOI5X78*O zLw*iUY8y(3VMAOUH<-^Z=z;pHk6y6KvDn-O7V+VqUlSvfZ&Qcl2K;oo(O2gklU{Mm zdExI*1iTJ{ZFy({O&n_?Qm}0*tfbtA@GHfpkQ$!b=~{>{?q|9ACw&tYZtjru71zLB3{3SS<-#uK&+xH;Ugz9p^nMQwTR;7%8B4 z8+xMNZ3Vn*r9P6-PnYqA;oo#jPfTyjhH{gwp|j3{=#Fw-Y25d_b3yFI0uf_IR6UyJ zM>Njw@l%D=+FU@21}3Mc15LPnPYq*lqK1j5$m)@8Q&=;X2wU5k9%xsxUoPFZ&VO7Wysw`xHP8z)V?O z-O|)p*@whD8Gy>tFZuf&Psp3HNfdE|?|VzCSdjjey72sXKoO5iNOG&n7s(tiFj;h! zduScYqH6~nkCh$n(ToJKKbXO)0pff|yF?toxK>p3erqJhmrw27VM|++LhlR051b+e z?``jGZT-6gpBjNrT_S(@@Kt6aKZ%ta)26fEgDtlGn-bo>TWMbQK$1BQtAKYljOK$r zZl``#@nzcL&#dD|xLM$05E1jZ&_TQZ(Wy}RJzJGv=N16Corf|}hRA58ck&J`fuj_SrEC~Q{5GEJ!vR;$d=MJ-up{#8JtWMMS? zZ2BEzZW7Od@T{dxt+Vc(WYA*z!>{mwhGA1jk0uMCKt22LaLBJyn)h!xSXn=RIZ3qN zukNs){IcMYR3sd&S0NXz?6iA7_e#$MYT-g)RMfDcHYvl*Hj%?(1(A61DRoT)6+-2e>a@yq%g)u=tzx`^6birJ-yA``)6V?VgUxx zrPA^`Uc5C{t=PC_Dhh`O=oG-$zB=+JZ(%Y*hSY~7p(@6ISf@-|l5)1zzp>nVOu{fc zYN&cRHeT~RIXZg#UT4njYLanrGzzA##Yh2xd7f3D6$6$$9uQdP8N0weE$$$))`pV=qVRY6Msf3E#66>7PdF#aGpC7s zVX_g@!K+rlA2_t^;VQ)v7k>W>`A=>wghjqmzz9XHgOmtAR&TSm84QjlbgG@hzuf~w)kzfphMfU~pU3d$(ozpA#XJOvj8lS3yb z|5Qe+_kk$AXq2=KSRDg{doZK^kRcDLVnmoK@!54R3ALl7rbY!GXMh4LG%;7hjBh-K zOv^Otw?`}SECy0E3H-4Em;tZ4N13JA-!&fh7!YR2(Mq4^9+YDYS{`&@ACyL1H=&BH z&i7s%c9DH}8Q;DPlnxaX!X&LM6Hjfm1p9jH&kQXeisoZX0uFu+V{xUnoE?nt)8lIs zZGghXZbQ)b-+1@G_(6y2lKT38&H3o^k+-%l7V^E>XI4Td`%;|gR*w2JtvHIGOj*>_ zGJDNj%w*3zu$Z%L)%~PP7S@lhP<}$=^v=F?>(D+P1YA!|Av;pyBmsu37x=Ak?3GG? z8%Od=KF9u?u@z!0X<>PcaRT~Y5*(xZ;=3Tqt(xc3LttLqz~tK)fD}%2O_i3gix(dQ$mNR{44oIflul{7RIz zx8t>R9@ho;qi8$aGb?`7w8JrCwUii?76txPlp8u2ocU+_hR?avm%sl#IU$#xp#S=iB^-<8$E_L zPeK;|zR7+=ywx>L_n`u%xiw-`N6He&%k1HQxhet;e>dWyg_ARF_-=^#4ihhjT|akA zvDQ0l#qBtLK>K|sm&;ILdYe#CXg)Dh5L0ip5y$Bhxp9xumEpqV0j!fKq^N;FxJZY* zmeD|9nGDwM;j69!+sNEyKFfcl3m$w$B5a?fadI39`XM}!GQfiF0aonl6*KC`D>|MJS!Yr%-u5ukH9x2o zXT6Bu7Y>;lC;s%h)&D8A@a2~T&(732205>N;ns^H98NjualCQtF{Ldw3D@Rlhf%M} zz*bN1sHxr_FfCgKyEy*%$RXc;yU)cz2)+0GaKb-LWh$7ZUKjnO`r*t{C)2oplk>;H zvn)NQ+HL*#N145Mz)DZ+#?)k69V=?-V~to_2Z=W5nyJr2Fp3i#)G{(94Y{2V5J|>~ z7CCx8kEO*e_^qZKdTWoxjb!Pqgfp+vr-g4nfX+}Al78RE{u&Uir%b*HJ@2UY_1G)t2OE>v=>1U9V7S94RP2xdM%b(G{ zbphA2e-Xrw_!xdFsJW9^Mhyt$7_h3OOx>>diG_>KQ6=pj9&EyIJe#qSL6iII{{Cc= z-fkJ&lO=ZKi=e=)j6-%!$ zx9H58)e2`7f}{crRWe)NAFC?}xE9&K-D4WXI0YDz*S^)~T=5sdRNyVF)A>TbK7xyN z0BC$+(fWc)a`3VUl=9A^_twHV$P^LC&J9zV#o1)tN)cxG)sLAz1lAN3faa3uvyq~s z&OdZsUvVa($k_{hUQaAMGKvz~@4W8%?w%ukq!zTpY`h><<|WXfW9HiM z`u6#s7@miJ|9q`+?%jFT+my!JRB@$q8W>}z)IqC9l0gKYdm^?0)WL@ul~4F9H+%B) zb_>aH=g^iRqVqvGqa5m@Jx{iq%lV$z2DlTCt z^c_tazB&4mFga=X)O+c}`)4bEGd_%N-Lr{8oHi}`iSorxVTGu(c84f?kHP)95T)eC>pQ1=Kp@-JPz0vYiUI5@~r& zfMPsfzGJd~)1Km@m{Lqan3E%rwx;L}Rah2E&pfEf`3HYNlo@=dhkWBbMl-&vhq#&cv zH*J?EdQ-6k=YAPY&q4*=PBRdmmrDC8kdaQgc}oUn7}EKXN@-mhq1jU$6>99IQtsxg zHtt}Ob5NAyTmq9uVNn$Sh_^0;mLfg8mZFY$(bk6V!|ZI#{2QolyGV>r|IKDfnEeix zWKMqe@{VJ^E;ur^0AvomH-o8KWmd40nYke1H^u-J&=aFA12T{s!k1koSZ43$N2m?Km(UrNDVQ}TxHx_%nfghaB&$N zca|e7|M2j9_WX9?gZIix=;m;*HeFGtnh7&FG!?r=ii(2qf+nKvA-^F?cr6xClgzlE zRwR$FED9mRSoE`g5eeZtQ4E1dX70Kue;rkdg&;RHY1){basfJ}=3Dl`4Wq!j)>636pbWhpELl0Exvwe zQ_GS#4d>=Ah@t^)spY>?X@-GH$XHKL)0>!u^r8mmP_E#9F3tnb-(H2ZElT5tfHD4; z$B{B(buvD}rt?gqOYN;2%cS7>@U14zXIHO^#mniHG;N%@CJw%de1n&@w$&Y-^!@Ft zIZ(an=lAZIZaFJCcyV)tscCAOwi3O1F?%I|bz`x8i~jqG5f8N6Gj+DVGOazm za-pVo;VM%hZ}5@&nD`jcB^^JCPv#&*{mKPv=uLeUARz=?R~TC@QqcqW0QUhqP~| zca_Fc3uR)YDel`VUqbE&Ca`g*tKOF-WuVjy%tI8mva10S6H5~RlDMRE<=4Ywh571d zMAZRX3bZ@qSXwZsI`KJ(7n7v1WsPwn(t*Oi94Q7v;lyXZ=RquoeFyQ`Hv+tXoej(~ zWb^RZC^81uwAdeQ?XC#51 z2t9*5n1v`fbonm3Gq1z*x%3BqbH)2b25Dhrm04E0n#M9~KZ~raLZkS(y(J5|4a+rN z+jPA%*U_O65nsg5y8E2V1v^z$>E0S}qye0S5UmEi<+yrMHwFvcDM{eIJSyp<$^S0z zMasgLTfuy7Vt!^C!}LHSrHE+D!=v5+kPj`;s$XBtmQlxijbWL$Jt}&rRygQ)MBrhu zv2CIN#q^Z1hzkMJ{aiy8a8-rTTUgo&D6-TF;!b%s_+pLg@p%ERI|S^f!3#27nSQ|B zK))1g;LufA=E{n45)8dL(!S^xozG`ie8@rF)7It?8`2LDn zu_#giR5YL`Gyh;*vCG4or?4fk=63%5r()GGIe^Z&&1+6z`6NeL7|wM`oc{Bc-Fz`^ zpT_I1V9s9Vebp-{;2APti!;I8WSXy^lF%gHhUrd#t+Bh9XbfPAPC&z~DCq1HUTp4y zSYPPfnK6@hAZ~tTg6!th7~;$!f0?VFVFH0URr7&CA{j$bGI+{V3!%H4d6|&<e3r3NS^APCak zNJ}>e(jZ7ny!-y%zxLO5UE8zge9pPg9dTdO^ko1LPNoot*GYx(Lln4EVIjm~SXE#X zI}{N6g_dvM>AG$$J#Rx>*qql66Z*BN@`V8D$hjvgbM5fiL{Q30VD*v$`HspDwwagz zDJb*{N!MLH=dsU<z#CS<1(H=z!B{r@QOHPur2yE_Nwx|rN z=@*PrYFEE;ShYnzyaVkD^B@^+MGxueh}fn|jOwjdW`fEuSaw<9T5+iL71vMfPs;wt z`qB`9%f)Ft`jo;itc>uqC=LsY<0O+U!m&rM*hgEq$He-_f{9szfMIVb^kimQuuCR6 zC+ULCoa*{jtrd|jVadT5Wk@Mp4WR~rwNN+xmtM;kZ3C^AinNyU>#>~W;PTd&u!g4- zE9>lln=jS{*6_eeRT;^AL+KRTVElM*!NNtKbBDZdwwn&2Z#z38ZoDrRGyJ^OukAp&iwegW9( z(*Rg&MMf(T*%EaO<1<+kmn)g2H+r7^a^ZT)y!B(qKZUDjs!&*ccWque!)68X1VcJhtd+S z&RF9<)d^j!H++Z8QUk)oA@(dHROXQQx}L!xSEp16DUr~Q1x{9{v5>?19(d07iCMO} zFMQ6kk7bv*+8GLzC1MxYPO5@a{N7#9Zp*fu{NNhlI%8bN+Ev}g*d={@Ow7E7b@}(k z%}y{C#4^({`MHbkjkWlXYT`uPzSWK?KAu>LCx55c{JuAATW7@V{dGAseTM}{)5}{< zYYW!{?%}E1pIUZ!?%AuGtE?tCE${;D#7csy*e&$ZqQ}GC@==CW{|#+|$53Iqz98LA zK*au?06-O0zqM5u4c>_c%oo3uO2O`3xp=!93hL-2f!T1?MutKf2L&JskJQ3>Ek|RR z?bI=jiwy^!&huI%aU<+h&;Z>XVd^Ux5H%+Hv{Cyjrj{K_d98k^HwMUzsA#xQ1yPXQ zHn0&&VfI??faPBeVMB6~g4o9u6lf{RF+mx&c?*zsAhn|hR!Z}nIY2Gcty`a&xxj`B zARs2O?C*{?vMKtO!#<{ruA5B75fi5&*>N*lGL1%nNVPCf|MQMlQd~$tFsi-ypveDk zQW~uZ_nYQFv^oG83bbq`j!DP-I6;vFDLX7q~ z8-P+LL!wa@&#zT<9rspu5Fg={_3Np|p$vtKU%0pFy1pa^Fz`;?`9>ffsjwfoHGz!~)K@sXvS(!>(|M0h#C3 z)ro_4DzyOD{Ck(d>p-98j1Xy6MgZLKm}EKz{Pk{e!oKELVZb{;&`1p`spQjkgv&p@@u89etwaZ$Pf*@+#MI^HkH|^CINQ5m>tJN`ZU-KNDwKHKzFe9 zjR^vBVoTQzML)$B#U6t`=A-@Qw_LZgFB?u!7e#uzkuagbi=1ENOL*8LEjS_23c%3u z7iTg)ob$*|52Bh>Y*f|{BYxlsQG2hHkGK;;sl+O*Xj-+LFjD@+RXIddqVJbKuMt9z zmEUa=XN&d=kr#Qu$yP2^0c|;mn9%rpA6!Z0i1Dh#?H!A8pvE+ACw;kpI@xo^g&w}6VsGY@xgF)flsXU=lp@Z=}JM``yNPPkm{D_ znL+9y1G|)>TIrBQHD?vCwg*(QpSwz_1&JU{qD!MoV|V?mQ~Oj4C8_e~m2 z=dbYgkVd$exRz8;77Ys7fX;M}l&<2Ya|G4dWOh@t1U0cHiur{FKXJPtC#oIg$RzAR? zBd`yg7GOVsWmQxs@|!fCw?}~=hxQm1C1Lz8EHcrDGc*$$o*>pni*^E)iK-@k=2PW& z95IG6;u%3Xvxrn7@g8I^ue#p4zsXHiCElW)5^LBEGMonNKvBXV6*ZX4&axP zE7TpQ0H^;5@bH0kx~7r__>hL6}m1-0F*XBRFy86TD$Ll-d0b5D74`q+-)c#wJOxgUgxUoTB7iI zvY?HjY4B|S5e2f-c3ru1^PD49}}xXXFnaORM5gdMW7KeYM( z#uhCI^0V{v?^%9jQ;9(#2p^+B`6nq2`RA_M^(!3qbPNk3azFbhVjbo^s#Xm)G0<1p)1lpzvBf2qjM6wFRn)rGddaDHWj2XIyE35c^#vq36 z`o?}?kSg=^0;RFAy3>?chMeELai2<|&|{EO;+4bKZQu!CY^C$kiE#D5XSqdHsLi6$ zU6{YVnTpVow9}$RWOm)JN&v55EiFftuJ-w$Y{(U!IZm)fo`_pc2Z5?iPK8_NNTh%~ z2?@d6f~GeuA^loC2Fz=#N>jT3LzGCoQsuXa7RV-}zNkE)b=!rLBSwo!J~f{r+q%?- z!G=tzq5%RIcNn#!@h_EPi$#M(Vr1iAImVSWKOP3_>#kTgpwRT^9qO0ge$iF{tjE<^d^+^}nnVd-kqo7Rs$l)1n_FDp)>PJ|(9|G>e)gfti|R;+9XFXid9J?)c`uyJBKV*fYu?J$}~ zwfB0ZkcW_vcEvpn!4Gz+U6nfyxUr?dxMI~=y@#7UT}a4W{(FoEpn>Y`>c(^uB}g(4SrQ3Os)+5~ z+cC!bC9Cr7O#Ksha|90?l@nu&6?}&)AXK~Haku^7>VWC|3d|OPcgJXqYeYv zx|6>qdwkjEHz@40?)S{YDn1$=V0!S@xr#r#R6r=l)?vk!0jg_^;I4kev+HaJjMtaHAlpipdCm%N1`; z?f-{tJ^?4b{0G_?=)7`!suEZ$POfZKJbN80l@|yVJ96*lAw7O>l zU#y9gV}CGv4OL)vdBa!Cq(XRJ_Axi0B#V`FU23-U+HWeW%8h9!QO$G@c-|Na$A&|u z04H>F_#mj5u~iwkiOeryTn4nw2r4$^GK99nk^xUsYVTaRc|B0oyg&j`3841|S$R6> z?75BoKF&rrKis-t%BQtbK{5Ft!!WSe&C4wwt`UTnu9|!d2yasF%s3Pz8lI#;m=wWj zLuSjL#Eo~J%rV5KvK&a5lg@wxPe6VcmkhuLq10ZwLxx-)NUn9b)rjX~0%a{gIkC+* zh;P&TyGl0vROcvpYp$B@O$S$^MniS4oI$hihz5G*Qix#a1b^Sm<$V=H%f70Lg4M8%TO&O@U`A_n8?u(B7G@w(r!R3qcwEh*g5( zCd5V3M&GHNxZ)^|71QWFgw(ojqQKo`lq}5oRZxM_g>YDD-k2zYN>C z0gHK`SWdB#96z8Vrx}}P6q9z0K3M&;uN}3W*oSeO*^k2%{9E~1vDnU~3kNtU4q1Q^ zj%`7b$#6YEjW>kYk} z8>pN}<6*JE$+&_QDLVh{TKD%iJF`4w_YYR@S7?M-$@Ucfm|E1l58RP3Mck8`-gML8 zC1i<3A0jC1UFy!gkG>-!F)?MPW6s+DqFw^s0Wr#%S-)0l_#Kw- zvZ*-=SX!yaz*N2T9B&IuJ~BR_vhEH8mk5-q9^TvfZl3LenF}A9$#m+a!%rZ2Uj)Wb`ExJoyn+h(wT!ips(EfSRm`wxkd1@wJmcr46@KK4{?wumKh_cU@X zv$2=D@5%rgZZACjZEhvSU>y zWzV|IeX%R6tl0Tsbr>3){6$AE(OMuZ*HPe%b$x5ab6evvXZ{sf+KMaRM;y4#`|`mr zKR?*pbf1#Pb`%4KBMdB&1`X$ekR>R(a`nHPv-gr=H1~dIOW^H8ZP!}+6vY0^!$YXV zdgpaKKbg=s^?oOvcI9~YlzsxM!RdMtXnjGLM+alVg$H@ONES9;Xz{Fdp;}qnL}9ih zGRqMAGuo%$o2EBM2e-%T9ep*auy?KAYdy3ZZ{)}lH8=eCN|Fnf2LcW&F3QRYY1Lmq zC#COfyuH0cTre8mQs~X{5|h-aGR3`-rQ;+<-RBp$-Tn(8b4L(Vs%0^O`FUWeBL%Xb zd}7h|X;_>~gGiJU$m0^*Uy%S4-5fEHHU-{Ygq*0rJLX0idmhbef&dZ?^KcQ-<(XMx zzkCF?0}%W3rT`(KhK7fnR(STXkZ_>$*?Py{WX*`;|GE*H|8*mcYf4DKTNM+!$d$Yx zmReF@5}t_(zYzT-wzgZh2YPlbct{%(xZNlMcm3S8YPjzJHa)mWDpkm*w$A1kKh&N? z;}-t=(BYZrSVh>^Y|w7L{aEj;f+`ywYTXJ*MPV^T|31qAi2EFuWNR|-8d=FPhC3Lo zYBKnxoNH#De~(}P((=vYdkKAv9C4yg zdkuT(Pnwz~drf;mgdn zBX9kU`w$t0MsTI^$_YU+jTXd6(FzxdNXk*tS5+nH25%*|3NQsP|5(-OKV$hz^t>J8 z+90Pw2@RZ7^SY9lmer&okcxeU>Y6z7{v~O8o>G z@YR;PP*zr^Y5{Rbj}n4u;kX{n&)H;TlD`TD^ zyv`16D8MsK?{YVbMrT+6$+AO@dRJmKO1#H8#ZZC{6-}`r6OuUnB*jQBx7#i8jY%-m zy{N6E^XVK44p<@`@LAxzwqQ>~l<$6m7sLNb8xg>{w`J2xKBUa+loDKQ)0G<1bpoAH z9)rNW8Y3{KTI8TBOF;<4QL*Lyp$E+t16tZL%TMoSy@g%Yib5To4wl(vm|VBX?C5Nn z?jiL^xB4HkCiIPl5BKHO8K3tOl3u`1(FxZc`o+f}5-B5dDgQp>AZx$H5}eSdKt zpU069wi9<>QZN{V_ANVXFv6+=CYZV9(trlH%hy=Fxw5=iSEc|d>+}JOh>@{&$9Oh3SQ+IWF*}v@$1MqW9eG#DOI{CgL z93GdH_`Ol6vDSPe$@~R?ja1q%)Wnl-4Vj#$aO5;Y1!o9Ho(}t$>?+c~H69pij-NrE zi*Owc(a67chkHHOkO$MNEgm-n_6=?P8$~r_h&`j^Ne{{2v>Eb9>*KzTu2~~O3-GU`Y75SK^z5B zf%d^$F*ozOKOZ(2>vW}^&Xwkp_36B~sm=-d&s8F{9{lS@V7|t(#U`GmsFUT9=^#x} z`Or~aAF;@ixFl_lcWqE*)8vU_p>l`2Lx7mzQJxqMxIXn~l$>mI@w~l>NfB>)|Lb0w zmTlI8Q3wplnPDa{R-nI*+p$g4><7_=t4HQVf$t!fI6i}|?V^&6`FNtD>khMc4&^tu zF!jBvW!+Avqn-Y?l~%S-UoNsy!FT*kwWM$6xk5n@Qn?2t>r(T|v)MP*ynh2@bamJ- zvItuZq7<3p!m6$VaXfadEX2Qxj+TLPho-Gzg9Dy+qwk|9qABmE!+DeCNPy7Q(BgNL z8+fymjNzwGDQP-Pgr;T& zbj@Gc_}*o7e(vua!D7cZzAB%KAn!-Pdj(vV*@Yg?`S-?@Oq)wjr(rjk(|8T`k+hz*S0SX!G{Lsv|0UTORG~<$01j#SUhTxW&tg+h8tUw8m(Cr zm(R^x@_LWQ^kvV1kx4o4t*Dk*Sy(mmx@`q)C$*TU+*9+Uun_qUKRRLyfBbk=Qr=#f z_l7R2gejz9cp#Vo#hV7JPx{54_T@k#zCkQjX7s9P(t&=%|z_D;_=iZ3NI{0B>M%Ad$k z*pFo$ucSDebK`o=hGuk%3{h%HzQEA+f;`3FPM%J00T2q>SzoCO{@-Vge}s|6VQ7O5 zSrvSf)o8>6_ATDOm)Ooh?QF$1c9jAnq7i*ba(N$LePMy@XV5erzNUk;;*rYZ{rtH1DU$5tW}s``dIj zY2Qjjq00*i@Bc4sEY>0l+Z01+Fp-QVqrQQy8x7+imRE z@++{}WM~aVht^TLt_S?$2?~0}SQA{2P)p*8LJJnhO3u$KpgTCBt%Lpci>Jn!KoD9L zf882LTyoD^In)3$v;Qg^6@af~c9bbu75{Bu1k|TEll8E&ub5cQ9Zk#Y;xWi+$ZFV+ zC4f(RL?~w5n^Io~uZZvRxJtd-UPOEjE~k>|PlT$MlqecvTPfnx4spFmB9@A&c$3=j zLhoC1cv2huYf2fYm)3Ee0N-P>>#=vG>6if=e(Rr~qo)o-uNv0nf@uv$DaTjDS2;Rv|e=Y zcJ!mLBwbG;i7h0+$G-)j=_J)V=%LFS<+)f+s5M8O?i292ey#~33EkeqXYOeHn(X&= z+w4mSI`q)wDH)cYDfeK?uJX?sY~>C{X(TfGa^Bk7Iv)K_v1)6jrlqxYO^@sEuirI^ zRIzV^|8~cn5jy9I)Z0@B6Az9@>E&1;-ov<>qWbpue-^6ofMwnS#%0j?musp(U^zzM z;hyO}ov4~Y8&F>#W8c!Om+rO#6IiFi#5Li4R7XjTLA_viQT(P(e>)7_I6jg41P%sJ<$M0l`c4ZDO0~Yb3`X4`hC?sO3OvECVZMxoqD;@7*kjPKRe;&P9VIfNR zPJd=E)Y#Zqi(LJSMCZgOb>fk%N0?*(Z6>G4lDKym|B2iYSs)qrRtF4bO5~|I127;T zP4K^{N4MR>vA>rxzv&hgWnML_HklG3l{q=;$e_a7kKk|C3&yad@P1hh$fRuGo`=|?`o+IjKpFeF0C5V6MxPjDKN*uX|)8d-|mgs<0Z1LI=D2Rx7=g9lys(8Hw=RN*RWqeB>z z;{hTzM6XCm#BiWP8#(ag?1$h$;R=zPDAVdF#po+aUhw{$xEEyhi8t~Kxh~(gYEF6- zJ$x3b`Ow?FZx+_F>ipBP9Xu|u&FOSr-ux_eG1Q(yZK(JPl)TMJZ-Na-=tfb?0&b%A z)$UVzY*2Cd$fnaO_rUL|rROk++nIv_E*9+k=&|ryV@m#)wAS(tX^IBe%llyx<)QU0 z;o0?9&b7$xC%?R|A}mrEOkrjnLvMjc9qwNFjbCg-%b`;{J5LV~ofaFnki`?k%|}S( z52*qh<&8-Cwc0jY!Oq4(E9St7_pW1o|7B%pt_q1xd;Rfy z-ZKw^N&%cfUKANp;~?vI)F}?sMc^vGwUT68GP~b%JG~?06|=% zNbuP|Yu%ZJvN(nRI_|3zukLhlzz~ZoJ1XQ{)$}X&i_ygY45K##9|Hd|Q7+%wUfH z1{eop(w{uPE}JKu=aHcMLTUQ*LsxFv%Ei%OEhbR1-BKR#8C?G=pCF)=_1a375!9mi zF^T@{`LL?C^XWc<$ZTm&819H%4!Wj&El<(Q9nonb|Hbj53e53W0z8xd4L-&Xq#FD3 zRa_3%5c15`@-A$Oqd`d$0%_KIG#ytjFYMD74ddP-Q@-=$UMSWB#wW{9m*)%e3Jalw zt;VlWLkC~_wi@^DGvdh`ru`9ofX03uPCi2;p$vuYyhIFv-BE?Wt>sw$1KNiw>bcyU zY@a8Y&37;4yx_AR&!ElC>~*y&pwPpe>g|FCE_9f63?gqgze4WpCs?Iy@WE)<=;5_2jE4y|H673_32Yi)U0y4QJP*i z3?0;)Sch#x8rvKyGMB+3d58=KMb%HW!J@h}g9^B|&JM*?VHx<)P|i ztK?+YsNk!C!6jtt!IPUGpAEGw?hT#>FKyvYinyRMW8=0mRK+kPwh^f zcg}lc5;-0nqPjdZ4$KJQdN&{Lx^BbLgzaUMxUVI3b8V7=4h@ieuM~~#PU>-_Htaau z@d;B4k7nsz@FR^D02rUX<>x{udFov;SdbLM_*$naH|@Lex|XPU{sV=_0TdYxe zif32kqIpp&gMnIz%k~S`je+i?7?3#xf0S`9PA5KUwCr{P)S|pixZOR#b+{RN(nU{G z`i_N+WaC5b7i}@&;Kbe*gGDBn+cFrFDdAet^+p!+Kh3FKwn^pEv=#^yBh!NuZ2|5$^>XUFa6S=l97&sTNX$@f+KI0e+v2tgs>s$mGZ}C@wdCCSHKe zi#r|}q8WQ?h%epzvU;>ya9W7lAF@|8{1qD-TlnF}UMP}oaEk#Hm4%W3E#V;Rskq!S zV!6R)p2$~&#qSczg`G-?)D_Bq$~~^)4=ET>w;OLA# zLw}>OQTQWME{ioogIz{Tdug@r?LsDj0*LE0;Cr~3td!_i6j`WeS#9tMQl;}5^#0YS z$+=UrtJD6SFdivu@cqNzr-+zN(SY){ii(edV#{j{o$2MV2yl?J6}bhOE8Dp0kPR|? zLLU{bRAt|O?~94UY-%U@$sqWTutS?`V#J7$;Z54&CFwZb*SqkwsC|ZiZVF zauipemeUB3TN3FH!oy@$&)D$U>WF7ugX(N5)vPV9S{2J=-9{1(yL!l>iudNoVp}m` zKwL7{RYCDH9X$Qp^dCbTdNaMrst*z5!pI%z7tIMiK+*8;uhW6mry{9Zihk>tQ@KK! zd~R>nOgVjA27|D=A>fL%Ty=&;2oo+d#{_%xYXLkis59xgvpmU5D%9o%jIE-Q*z(w- zVFvkBB-gE4DQ8t|3>{AOrX_F!hus6y0mCk}5P_|`gQ#pVv*AL22#$j%_=wjyM_`*M zsGwtHj3+S!6UJORi^LxI7BixAF(7*ODgS`|T*7(EzG|I_?!!Mt7e|&Z#o26y!9<(B zm-imO@mr7h%($u~3NADWdi(UseasZ10nnMQf|AXbH~Cne*2J)|uy%@|gTuAF9yaX@ zX~hIpV6*G^jjy-z{+2>>j0XG|6SqAAM_k7BB2H~eLb}I#(+ycH4dXy)*4W> z|D$QW@=L#3XU*_~r9|Qxs?W4m=Ibbr4KKXIJrY>yuZI>-Gr((fb@hBPTP&ap2H71l zdzmeLvQ8%wLvsX|5SLLu$<8jLJT@DQ-m-Hj8iNIaTolpArBS45lwm?CP8hNz9AuB! zW-$F33AEXQG~U1;&)DxwevCs7e`y45ZpZ8T8e_8be&jr%=6oK}$fwp;jDLQzc;2de zqz`~IVDy3f*`%rtJ&{cbBOr!TP19sz`2k>Dh=b0DuLaKlpL%VXce!_lFh-Tbu+zurw4b25g^_IQZh5mNnNv`L1Bca~en zZtocv1_>WyDfwfXBFeFTE+vRQI)?9k2v2usQ*Y%8x;LG<4U_bE$^#F6s_(g5JjBqq zFB^lDJ`|jk7eoj<%goAYX+gCH0xibl&sOXH^*gK}PmqcBEXJVW=xX63QF#3F^2&k$ z1)028@z0+NbLpo`Xe{A64KKPd^|k+f1qQ&u4i9 zQ+LbKNn{Mi{tFzUD0TRIm(a+s7>)tO$R&@Ae5%7+ddUkTiy<$`h898$gDOw{!;8PZ zZsVOkH}hzUE3Iw+{;m95c-{2NiOK3S&r)K-=$O(6pnVr3sr7G4ITS*t# zD@Wf0U$?28IjD=YM|Ynwm32k2pFChHQ_{dgBNY{OWE{K*hZoE4aBPCIo>HYFsZ8=? z={?hAXDta(BVL}!zj`ICrZ-Dc8XAQnm_JQgspZ&|kv@FL zCrZVzMJTf_4okQ^q<~Rg3p)(20ndYKY_26khUE|OQ>>{pYsl+Z_@YFAj+E!`F}97t z@2>fZDYa+9+Z($AX1>es|JiIFJsjEf2lI}q1mdhwaVVU|kPusDe#Py@4L z>gqCsGLl>xB;6qUgro-jN85NxzSjY(n25qkL*-O3yx{)c+n)t7!1w7c#Z=|VHt{C^ zCbngnmS6M#PCl#oq39VLoNSNy?#V4);C>QktqYqAZhsFn7*$MG*RW90od2$E%5}y* z!p^w}QDbT(JGf1%CrABC0II>}BQ8=hH_|b(EeaHULE1#Nb*Jtx?sq!xBvF}`fCAxq z5sQkVV!U}^(hFT8FjYY z^ep9PzFZHn8C|u)(wAaw+H`*E`d zYUUybwq6RNR+jr0NV|x8{1h+j!)UJNPMbG4J!d6H{Hd+5 zW{l3ex~5 z{%d!R6clEIMdq^BIyk1hl1gaecgxKF!LwzRt1luVVxJXP5!Bb0?l+XW0_-Q?v;r?< zfzzTY%q11x^8-IQ!n^=PB+t@@;q-StBews$c0A>>EM=39u>Y=`A_ZKh6!w_;kcW!R zJpS=jrv?t(xWzcB2OGEbo-?Qc|3*DIaqbKm#t|~{Be5)DT_M>m(E5632k~o2`Yc9g zc0K9(pUX;Y+azcpUY2`lWZf+5!`rf9Hj)fE<@`#whDeQ6%7#B!0U~^&(>k^h^F>WqOSsAX z5?52dcz!07t+$A}1&(j(AbD+)*mU;|`*X#`^*usu2DLRS?R$&V^jew#J^;?%T?~D2 zk>{G%9}8b<19jo7^!BHFj@r_art${jJu%N8!ejc#k>}}%qa~bh(;8Hdfr{dT6VdsQ zW=G#EItO^#A;Cv}zpo`>McA74lIZNqJ-U!P&je_^J^)8V9p-g7JK6Q%VK>&~WbLD{ z8u$`lP$D+4qrL-XG{8$I(+%R-1GH90z5%SFz~2q&+Ss#imtvqg_ky03gvyktcgR#( zT?#-hDHN*=WTSgE#>y@?y%v$`KQ1yU=2^d?KCPMu4rM&ta3?f9vBJ{7%M~f{^6rRx z3n;BQ1R!1KmcY4nhS(ABBEGzJwx6`RGRms1J=@8-p+9rp7c9sZeUEvqW- zLkz3U>Sknh%G(#MO^&-pUWgRr+wp}EW_?YUB9FIJmc{P@R~DPTOAM%f@{}(~4rKz9XzAo<%!TG`by1tr;3mTUta28CAxqwyAkA0tIkD}hV$ZsIoLzGj@7HAy+~wlL`LxP$M?cgfA-X-UCE z4s|14LsM_HiVhYDZjk~Obu2~&=Zpt!z2Ir#{OO;+mHIWW zV}~OAHQ%E~g!%L8O!rZnW#|f)7nE>olLsU-*--N@nqj2CgOQ~c;ecdPag6_s=o_ zxfx(V&nR3}IKx*ruf+i)4X5J@t}6X3fP7Xu?s{%xw1sP>eol$}3>JaHJmdi$%}X3k z7-Z0Lza-S^62Hq4R)L@LuaIf2JU99hZ{0E41`TLM*{`;mygv{MBZ{3Szn{94mf@Xo zn-+Fre4ftyGKT8J7EXTV9e~|}hYl6=hY867esjJ{BY<mj+zLZ^5knbR;t|%$7W}>8_ z?lY}THBxcb9~$e2=PEMw&UqjgC-=XGMaBAvI=>6k#A5!!lWcTgogpevc=^$~(0xyX zXh&fGF+#H%I&BI7OtaQ@-fPD{rv{Eqh`UGL#~C7r#7iUTxk*0yt-O%G0~CrYDdTIA zsA9U4)rvb7?qUEfOGkaW>FK8s>VdQ0xS_>li#klVWFd~^psTbtf-isH?%g}M7N^DvHcqNF^jRT<;v3P3 zq#sL(Qb%Go0{;E#h;VJ@Z*q}{_TsOpa5~+Hu6ZbNQRf`nhR4B+C2dw{%63S%wdA-_jmsU`&W z2cV@etBDf*$w*5V5-30!VeL)Kg$G-oty(X$_wk-`QJ&#U`^Aa5fGR!~un*t?*v38q z<4wd?ZAcmvY_}-)nV`ZJ9$Fv6Ob2a0es}(osVqEH?ct&%){Tz=to_lgN<(4mv`yk2 zcTQh;bJSxjojg=2pZ<5|$AM_siSIwWO_vzK>^C2 zqRYhi4H5m|m5l>cB%5W=v#O7%pt?5(^a%VH<&H9) zmDNHq;GfO5`2J<>{qD)l#Su7N4psZ?!kEJ^Ue-2Fzz=EebI2r zFK0}wI8cl4QKRuY9e(wgkyOGnOH-uk+!8jsdnGnD3Viij z_1|~aM}db@B2$vV8~XhFHBN5`KE=vvnX5-g+CN8_Ls9*QetLT`=@Pfax+E$PGYAGO1KV$lT~&qqk`2m6UUzRoQ$n5*&ID6 zkoNtJ-S5Hvoz5cvfHkpSCpPj~lqJ*r)x!>7ZNlI%|{Bcp*X+s8#&MD%@@Jrf8&@$g z^wN9&qN6Rqz`CvKh9tYK1zhatORVorG*b5-hT&BV7!u1B{DER`I|6{a(ilHKB!>dsHP_ z4E>%AWX^vu61S3Oomm8q!EdDk<`8xEwUdE$2v^kbRHo&skYbtn?UE z9)Vxwe{{zw_w5sL*K)%j5K~N|q&q#6WK<1yu-Tsv#E6aRJj)mY#=dl)oi6Ps>bu$< z`KPfz=B0rR4?`HfI8u>$cbkBBhF~;kU|QA#;{|J?xWei7W?b7~4;jCKu5p@V=;lZA zYlCpm(>I%;xXp>$)w9I#=k%z;wu{kE9?_gkDz5?+# z0>Sr}e(E1L^f1S}^HFwVBa3MiEg5k=jzdARv4T{V$MbVnJB^R89%GC#H(mfwq^4xO zZzCjOBq@?Nm+Rv>*<3?KZwbT}AOq_fcH?sV;pNx?09UgrBVqz3@(j|KIp>?`G+TAZ zSXo7^Y9$`H-*>~WTE!q-PVe`XjQG_Z*B4c*e|nCNeaHXLh1~lW` zl|vaVtvQ8g$cvJprh<02P`#`H#`4d@1veLsZ~w&%24E7YO^hF}KMpbpf>^LoL$I_o zA@6is#b1kyXPxq;VE!_4cmbV)*Tj?bBMr!3Z;<8}&rt`b!qfh~kPI)UFheDab5KBM z!IcAKIwYb)$DFt)fuSH4vN~RYIbyBQwkE`~kCQBWCEFPl^-;(3=8?7@faG^<$Rd5b zhytW%mzcX)P)xd!M=mTE7g^f%KJC+7-5?10CBV29ML5d&+w>6*psJNAo&CPMhduXy z(J0W>g}>%(&xt*2=@HTb4|OB-)q!$)?0c2_xl40Qh~UnS>VgKlM=Itpd1sv`Hv!LF-ltLN*AO$~KOpr?=84XGjT` z44!2B`I@g9XRo#+3;sU8HOUMEoeV^2m4^Cl?3~lpSj3ov5(^l0ixP5qgHFV3-LceL z6x-r0UM<6n7Xc#qKyDQVZ#BZrFKeBi_wsc+TgEx${B`d2kB0CJy?l7y@I=;reqtgz z*O)h@tIj<)fgHZFZ0ew=I}*5`cTn4YF@M?oYMUs7UL#CLPR+Hi%Sgv71|6!->Wlt$ zA7%B-Ym(frt-2-*rSPP)+Qc_B?%n&qp=%Nu0EU)UbdZJcSq`GrjNx>VvK1za$#n7f zaxx`pQO|AwTF%WrJ~lpt(ITb&QEy3F0wn|BMoio z4;jeT_T(Z8`$yyfT|76!>QdA_HYlZlY&6te(ex1yLt7Jx8nT$$ zk;Q-e0$)p;`GdEwx1^X?X?jAi;px0;0qHTIC(0I#Pg{|HCrRUN7t55^-z7E06RwR( zdY<86LocTmu&_>-L(fc4&O2WzCZ+rRx_63SNl|R#DZAPXl+_69@D@IL%3=+r`{&kr zy}X`!Pv^n>*3tjh_}TjHc6?4w4jMEjAb^mz609B=Akagck;7nUqUjQ@-%yk{++98l zzhH=<6R_svAmSORUQ!cY^Fsy3;ln*VELN(ANVG^#-U9FixZZ5s7e~vz_KV?jX zJA-+`H|i%PTlqRF>*}@~1k}nTCxo#W%9~qSawJ-`G|qfQLzNA^fFaU}bTu{7Uw`Y= zH*DUe`#Kt;e*%Mm@B%#dU!RX#O8;rpV;4>LKYS-xvBSgseKK*991#}^(KWnOS*rF` zhD8ozJ^UY2Um4c)8}~~$$Y7&$)JPHOuE9XMTUuJWyBVFL^yuyeNlB3or4^*4K}z84 zf6j9~*LkAX7pxKejP6=%BQIU zERIV~j>8-FLO>1){nvYM#2=hmu>1?7;)1p|Be3mBS!Mo9L5VinUoAL9&S7yGZz}jOV2svVeuxo@L%UoE*MloJtyDy(aW}_zXAdwTaS_w zS88C!Y~^(zWJnD{u}sCE{e4tIT8+FJ*nYM}IB)+WbZ3}vwl2ug?r71MAheL#g&B36 z9lG}U9|je`#BHP~_IV#=cTvbwT!~S zc(Pzt;Np^HmvTW(zHkZb+0yXr03$|`(5t4E>;D`(cF%+vZB<~#=lvi(911r ziHZ1Z37^^dn7=3M-6C!t_B@`5sR~FJD~H?qar-7+4)TL@Qrgf{2bPg=(5TcONy#f8 zB%#R?uDa8J5(N348&uC*|E4Dw_h#eaV02z2=J)U4q9kwqX(>Iq{9I7uR=9~2VVukc2o|nCj;#^V zSh4VIJzycC`7Q*X>-^(PQ+`!mqfC{?m0}T*`}hcD1Q_`*1mo49KtseQpVBpkLEj=V zq5pg{iy$@i!{3@l%Y0kr@Q^-4i;28NuqS+Lx!@iPS->+NkYZXG=(eZwH_$bn&p+)e zd1SiXc%FpXdn1+NC>AtmQTi1Q=8`6{_^tRWJ#A(~w}_a1wOXU((6|c;pX+Pgu9*|Q zz5wq9iLTvfw)%-i@1bA*o=7veM7J+WdvA3gB#jsq`cc3X+!djzsialy^)rk5{Xg%LVnlCnjg4)J30c0nX*27! zAH$qMK#;@Xr-i?bO2c96-#b6(k+S*jX|;B zkul1UH~XVrq*`x{OsW#_<%Sg>W)TdigWM6z+_i^C{PlL#+8PNqy&+FB(d>Wu}LOeIuL{gw%>>&eBnyOE9JRV z#=T7yuKnCc1ob7th7Vqe|1N|X;UIrq0JSCCLdf79R_TOyO?9Q{P~S#jjmW68LYT-w zO2~MOyQ-$^N z5DpX|ZUB$14Rlz31$^ke5$}VKZ;Ma1wx8tAgm01BO4Aqd?LfQS>=6_GSwv93B}OJy z9vWMcR?^W=QjB0Ab6#n1p#K936b6$=Vpz` z+BB^ww(*~9dDc3eRy7F}#}IfA_%AH^gil}5-sBCfn-h&e_3*-*M+#!$pYmxsEuQ~YeN&(o z->0goqWaV=(SWG-^3q>*%A3-zVCA42)g17k#Ds1!9kyY-Kj+I*ATJ7R0%yd-cZv=Z zmVwZJjKK9Tg?87p?Jfq#?k%h=Q}od~EtXPz2WmezRJq?&2cZ*{TV2!o)L6;_{BK*l z-}ml*!)|xF^DZgpY3;?#ly{Vr8=;BMBKsTaB&wXdnm9b31-^CvFfxiB258h2wUxp? ze3dN&HLBt;DkwyMqUe`rMLEm=09FlUwv#rPp&kz9$Uukq@A1uEk?5g)vZIYa><1KU zd$OX&U$M1vAQa)bHC!`pNWRV$yK(__I|(r8^|Gbx)7s%Ox=uz0hEVUnG!ifvt@!Pa zPCg_GB_p{-St^*i&b+0wsDRtb^2;R~(rX*o9^M=^lf>T9A5!{H$kNz%-SmL_VzexP>p>ZkdH?h?MC$P64i~A+E>Ad7r z?bbfe{=O6{%zyUroY4~bwIabL6OOWY?+pV>W0&J_JW#NF*6-IGVy08C);@=SzaUrN@WV&bXlaa- zmrC|(Gyi*r^@qy5;$PS{EgL0}kZ`fKl0GLecQtTnaZBZ3iv>U)WtT~ zZkEO(2!JV(7~bbLpg>y`BF&kV4S-JAIlEE#+gDdN^HTqOyN-AB-+#V8%z4jBTEM`O zRtS-bKw!Y+!;mmo7H1|18c*8~T4zae!)Z;1`i7~~7rpx&K<-tUd>>Zy%^D+jWaN2C znC4Sp40cnX=^T9TcmJID{M7h(z;t^W*jxp4V|fz4iacISToBop;Wa3PVDZtQk^o4* z`2A`qox=oELH&(%b;~^__Rfrh@_BfX?lHtjDha=cNLzJpFRdj0qnw;vuLLbEtvWeK z7X>~yx3nJoJZ}$qWvD1&ay{a8{{2Ycm61gAj>1dzbfx!df`{4|*>fL@@G{ALHC+mv zEHyH$iUtEo$hk0JBvh}Gqq#UQ%DSo&6+GOWT18Xkg7N*fzME^xTrZZ`~O_!@3NbJM9|<2c}dlEgsD zXs}@r?ABT<@+(R2v}`pt)@6w4Q=5y*CJuIV?SmqlJJI`4SJ`nJrMsju+Lw|Iy93mH zwbe`z<@M{kPk*z}Uwe3r{wRpKTf4lj9RB<@tS;kTD=gIK-Mi*Aq=k@557y_kEik|! z5~B-48lbf$uaWv4>G0YGq)k!cJy7A2NBYQ~t%Pb_CE*&&C}Th^^FtXR$}{FdDI~QD zFsyZ)djadrfasX&s;#>7)R#vy6cGq3ZuUZO=nFIzooEOKNP=WE9BDUWtTp$!WRU=_ zH;}rjRu+lQ`_ol42!&}An5WgMjvSil{!hD`iRh!x-2iw;o^OP>4^ODHSbv+*`V`DL znkJ0)@ipCFp1Gw`S6E27y5?|N1R~b8tHT|n;I82r=?PYl|AL(QG0ScZR@1@0qrqsN(2na8r1cO?wjaT%EnJ+t#T$2s$g!6 z!m+L`sZltbN*w@Ft*50rqnq- zs|^Npto)*1ucxwuSfeDvxgzlA9UOdc{gV?~q%v$N5GVDd;K}UVHtM`8`+muk9K6hIQu~E{52j``@X~ zvK#p@>Dh0vXk`*$sl4K^DeJ{4hg6JIc7?&0kMJfWdu5H3RHJ9@r1f#S?-`^yYw}xd z4jv0nGn(XJ1o3fLhGj;|TMzegqd=?C*Nu&j3&HdiV|zIcL}v0Jc-A$;G(I76O8Vab ze5d}|qoX7PEU=(q^&J8QxL3LX))Hu5z)PV;q_>JmKr*_QJXoYki}I23zF(*PkO%t} z^L6`G+4hM`b-Cj)UX0_H;dRrYA-aEFUh6^gKT^9G_vNpTWA6oOA_zYLQQ;&)r|Svd z1Y*68V&Rs>2+L(kRE3d>Nb)UdA6jL2TB2o>S@|sWHG-%qJXSeysV%b*=14NNvz2hr z;OU}4bapid1`xw2gW}Mnt{9YTIp&zN-jmj zPe5XbRCcVg*8Zysv~=MMn=zs=!y6G0d_m*aGieAG9Gry#WXF-iyDCmGx`Az;|0-8v z6{X9FBX(Q**O4Y0(?>m*viy2GzhirldZ~+QYvh=jHSVND4_(#oFEnvzST>oN07EVeD$zqHM zGhP(`F=L(=qz97}*p%|kGVS@l=PkDc#$v;5HZw_qd0>vJ6A3~6qIR(wy-mf%7vi^D zNmmZ^o`|Y%l|L<;$Q<`;>?3q^WWTV~He)6cq`@8X{f}z31t?{tGd_IxW!-HB-*I|w zAgH;CNyF??Unn*gLUonC#uqRsMf z9NV&)*WwIpo$A)LINy%Q&_f!0F&|nxVlBaQv$8{jQJg9iuZi6oCSoq8SVRGaG|^(|>F-TSE~Efw`&7 z2!!+rjVI%%G$-Hwi9ss|J5xjjj=``fsP)d_hfXo3SBisb>ivTT_TApx-nX}Dce?yl zu5FQxrzGNkLQd?S(Xk&k`&ORUd_NRu0gJYIer}dky)h>TlF0ZdqSr3mffnGoxGE_LP z;x|dUZoO#DEl^gs*1eary(D#37h21LV zOOyW1W;w*Qv$9l$xNSP7$qbMS-zpU3zSdq^bF#}&xqy@BuhWl4FROHHQLSIINa_U9 z-ok=n$^hP*i{l0O$dC17&f$L@r?cDAW{4BT9N}K1YL4GHF(fTpOn3*=qg}kgvnCG&Qo)H1IhkMz!(t1-d#I#V5`Y8*9W9nO?(i?OtOw*O{B~7*Hzr^ASnSm83Y{ z^?LI(z@I&*HhrnPgYwgt1rNU`@h-Wpv)OrEHuCeIbgZt=T)pH7v+erTYvX3hAQ86R z!JJF_%M1}jBWq)1ky^|iKQfMDWIud}exP}!sbuK?{%p8cqJ@Q^^oLB>z4WWV$t=_vhow#j<&kH7E%5k4@hN-2Q4BXUD?!A{+ zPU^8OTHF|r)+%V9K#X(5aj&Q_Cg9oN;S$9D^-)-xf3MOg7*9jKDK%8D4(x4Cv_{qi zRVe$jHeLt=rf|gs3Czx3DWMf3@KwmSloW{>2CmBDQVY(I2@>zOx2rLIB}K9CZ(43OISOg-SB?o>iq8C8tLhUE`UnTsQ<{}=#SCg6-4xx zdvLiJe-85zLWnYF5Th+}b#K|!tm&Ets#?{qN=gTan-fdw#;uqbL~#%c4WV<%9-OWPI7R-ZOK6F?pw*h*8JHw9PB~b3tdg zRH|3KV%q#Az|^_lw?k>T2E!Q$m!=)b`$t8jZW~*)7CNqHjiKgGH9cJ*x&Fl) zja}k<-tUGPge%6W+`i<0$6iRM?rf{tdU`VI{ukqsN&QK3L571JTBO~)>D?oO-ez=r z6=M5iJVe74e;rglZqhgPMRMgVS?|d_Q!0uLcNf5s{O@hw%0$ex;A8qI@F^~f>^A7b z+xuJuN0Ex`KocUE@A_Kf#KvquiC1hVj$(f0K*i0Rf|jY}m$IlFJ*xT*PmK?~n>ZvsDlfn%4BE>1AGWQ6Omd_lbg4)!eYW zZEH%bxrw}UECWarj|NSngisoAUJq!AROa(^|DyZ(tGr7DtZ3-75uq-Kktf0qgKlmO zpCjBI!dHo-6FCE*M?L~OS7;DiE${wmls@EN#ehVHGOi~E^lcl^o{mTsK%AWc&Q@Ew zG-h{80y9YwsYFVYoYWD|Q-Dx&{x5Q6`cGbv3bhx-r~t?3crdG)P`QBFx1!^%>>50v zD?8@lr#Q8R2J;0*Q;d%U7`eRJx(x|F>yY|`jL@DplqsybyecvScKo3q0rFoy$Uke4 zUeotY*N-|#92sWDozVFoU;l6n>D#c`7(KlVq%SRliAZJ0JYn8+E`}m>XCT(~>AQUj zUGtyvxokOK8%kN}7Va<5JDmp;2G|rFAw|%9iZKh0jlVqf=@{x<1gHQDC~q9jtD6&F zsHr6t|Ji7KWl)gO?InhnV8phH^%@1*c@*I|lJe@t=%rVaNNifVy6YDe2Tl4ng^tS8 zY9ho__RF>19Q-;VtsBFa=3wqn+dOGLv_83)uG=()u-eI)0pD$~SuJ@*7(jN07$_q| zoC0Y@eXrM?B_yh+Oloy2sG8u^}CCG zsC?G432*S|PRxf4v%qtaQXm+(trWcKF%xH$D`e#e`+@Y#4ah6?L629a1akZAx6@0R z8H+7SF6XGId2E@{{OlBQ&|MH)TosF|>H1q~RI)tPd;9aGH~B;&lzF_jN>LZbfQuM) zG~AD!@T5ei3 zgn6bCuonUM6?n``mcr8j_+P07-q6a-8fPY5w0!H_cP$uGr8+* zH5A@;d6A;RMs?Nr;b#MfrDnTjOCf=lCOqR(jaQ6uwU`swK;ATfqa1%T)4gzlM!5pe%YBWSIuD zWz8um`-_(HRnxXLk}&O!R_YheW~!RAd?rcPki7^U%(&kJR zJ=?aQ9^bz|wT}Bwk-SKoetbRuA!%Ek&dJ{(D&lza>QO300{zCS$Cr&;3zFs;FCm~j zOXax1p~+$gkh@Ql+I<;{*f!mek=10D&p=ERCmK2r*q|5xU5dh|Gqy9ev!8UJe90-6 zwz?F(!Mi%DPzbtO0;9;|@Xl$lA>uSs*=bm(*tcO-crTEM`BK(8>$d)=^jjubKq!Ps z?%fiLp1totLQ)+ruBa+SQw2dNn2@K`!i;R_eW*_44L;kD)6!79-_bd>i|?&POZgp% z)~w0jq^~WB>G=3!oZcs2@4q?74Smc<_@sRRsAAid= zjfC(y`71lZ8Gv5ps*(Zq67+DSEwrheoBk*ZaZJBFmptUqLCu5zt(LzBjK=-2%Q#z0 zhv9Sa(NOq6TkUH7ADU{#4I1JK!8-=uvYtSnc(>T2p$8`Mjq)9q{FghgCcQ zn{P-gA4CV2Yl`CK^1GJ+hK*D2@-w;pEb+x*qat-BDn(o6Ai@=Ik@)Z+Wz zO)1IFO72?7(NomkiLXmhE28gbiq)^J)I@69*Xa?fqYj6ThmJ=@z-zQb2M6;B)vUEV zX@rwDUN#KBJ?hE{?~Irj*8Yu|c>V0tzFljQ+!;r2k{nNNN(Rm^+u8w?JcwL*m`vX9 zKIIXOn!wI(L)E#_jYVhHv=p-MLdV-fY`x+xcyn@tok60+92>al1d!0h)h@nUyhIy3PrjFdd>F- zr0)R~QuU0aO8?-Px~`4HM#1ZYYhe{Bw1hNd7 zIv(J5{Js=VIrEB7?X?D0=MpwMdtK(Z!o|4IoR7shE;Ox|h11Mrr=YU&s``;!o%x8b z`C8(?t5R^GKBX7jbV1L!zP~(>Rq*-B=a%h7+rO*l%FE>&-(@l&=F_LRZ&Ep5-q$5f zckEbphM4Ic6fh{U2Zh$?w!EjnJ8R6-`rT6rX%Zq@-mu+1Y8r(5=wfgSw2^rjs`(%buj9kQILvGhhcD{whAfN<6f~RMj zT)KMmo_b4;?V_D>!7%^w9q1cTy%jQMEYA%J_;3L|cl%;MBl64QLZ)9&{=zamk@%6=hA(rQ>U+6bQ9oQfj8k(KkMRmk@ z(y7LLaQR+hl706SaJwv&@sD>}UTnTBxc3F*LEk*_EpFb@2Zw6G|6)v`A!SK|)>V5^ zEDO5d`*WL*T#pn!4Z8J&A8PxMjYEBk@!dZNY$*3TcmPpIkzS6yf@hcq<)8;^K= zp}tx03H+VC77O@_K>Ql1vtD1cFZ-j3^#K_7E495K{WF(7fAb`#w1V5b(wp_6s71kQ zn~jY*tyeBe$9E@FLN}+C6&?g7iAw?{2c$^JS8?xfnojlH3e^({nEvFoub{URj;yB3 zNol9*0d{@}zu>F&3_HHC2$iA?5yjG*23;7h$1DbvMg~AdhI@$7Td1aU`RbLZ8q=Q@ z&9c`BaZD(b>d+_R9=JHaf{KO;O4SIhJ@aFI9FdFP4DRmR-M&vYW97K-k&u{Qn(qh+ z`6a(w15%z1v=L}64!hy27>nDJLL!vN2134C4sa{puQq}1Fhu>bMXv>*Zj5iHQy2g4 z#L&B#6cW{PkxgW+k)*O|1X#N%Xt5JcR3)8^JB-wiX&GDZ-^e0m0vy(%5s4+EPzFc7ASXeVlwCUKmCxfAySg0>Kx&CNd;dh!_8 zrYdkvA5c*tu^Xj-vLTDgYpIh#zq#h@X836x7HMpP1I0+OW69*f2=V*BIp=>GkcqBo zq>v{9iUsd^om@iC1b9JQP6ZdgxoFPJsS!4&N9LHnedy4iVA_a(16d!R`mmra|B?&$ z|HO-{0EY!@)~`BIDA6utl=*B?0eu#TvE3x5$;u&?{YWFv7E9YQZVwUr?ni9jwnvQv zD%Zp=jrQW@cgeKaFBS_zb>x?)X5t-23@+A)t08#3K%Gcd==ZoXAP>zK`6CsaT6V$Q zJ&U=oF_#?McuB>RHgXDSlxp~4{sQ#0WwS*~cAG>JVeOXH}S8nxI&0@p+UG~sX6UphaC8MYMv|{O|pa>u7-F{f;dpc zfK1kSilzZj5jygO?At{2VZIP8ps3|Mu#!6k9 z2~i{3^eaCH9Mi=%`EWlGCciz)af2%NNP$Y69+1#q2!bF8X_Bl{L^L;Nizl^EOeXb(hAPsZ+(}ZYQ9X|9NTTd zi%5_YWDUKAQHfz|L^qTJjzQ`r#y#bBcXyr;PXU64Mx233;S{2~BA{YSn-pc$RQF&= zM21Jf!-Ga-jySL}@fjO3s7eQ4S$bvxDiO6!A3VP+++S;cdWQtIU)UmAmwR-v0s>hk zXQ%Xevfo3{NLjdi$jgmP1&uXBCS{LQWCwS?maVB6TNFhN8m45GsMAobZVW5KC8J$Y z1V!C?ysaax5t298jR$jofXrG^(Vr}fi--K0U^8H0+c#yTuGclCwsjrz{jO@|eF@|k zEids%Jr{mz&s0)AodIE4Kg}J>wo#x!s-E!anV3VlEmhr8?5ys-6$O~GydZ3CuKu;oOd=q|rYsaycDnvX)v<*Y zV|NAss`RoOqncz~!Ziw390Xja4rwBVP9;@}Uo7C*sYi;7g1TEqkY;nAFYOmLs^f|q zwtg5#WYx#Tbw*HgQjwFBua2|@4OiIJu`|^cl{Yon2@1R%wQoguj|uX+)JJ$PXspj` zTSqFKjy(8=3Bp=lCo&f3l(b&jnbFDB3b5Peup?bb<% z{W*B}-4r0aHAcZCbl8mx|10rzBV;{JZC}1s8$)iVtRZo*800L+N=wqI?dzU*jFkUgUUF4GR9=QAoFQ5hfR;P-t23I&JVoY1Hh(PQA_NZ zI^c8?3KIHj&Nb|6$3om>6mmUfaMM*dRUru@eKz9ni#jI3h$libDxXeI=v> z9hB42ip12AAO6KPrqWElGa9v1paX|=67@ueLM_zgh60Bw;vZ}N%MWACr9}|rm6;Yc z#lCyT)#)|_wjX-wb^N!7Jbu*0uq(YCv$-RF&us0Z%g<;j=QEZ&;g>?^Qj=6>ax!Dn zOMCydu4;OG|0R%|+T`(xw9I!a8=OBi9wk6MciJY|N- z6|0fNZ?%Tbfv0MzapDJu!u0g_UyqTXNxJ%4_vbR82h z658;t_!eAoQfo*tn^~g)aMR>~$D>)NjE-WBOG@_4sW(2DtlBo^4$)%XMq6I~&Jk?i z2#OmGN>YY zC_pmev8PTLfM9CQ2$7rB9;<+)qZ=sL|}LdQtTgl zGw5au+aoAiUzQk5x+~26(cbTisPhMyimL?2$)`}z5Gnp>USt6EuE6&5-Re2x4gtOP}ha_U&j z5$%S4545yLu|^*_Yx|2zZJ1?> zvh7+d5Pc!RgD&;eT#WIU(tvo2wZb5!F$K$xWAua_r7Il>bYsY{OKykJ=Yl2@aa7ms za;e(Bwk>=x7WDebToSv~&KDokQGWsn-kq!~F^!F@$d7f!Nz-s{$`-y!9FwOHoCtq4 zdsMI;D#tWBDdu#nn8sCV<6djWG{ejq2LHf^gEBPNxF{YWrtXJRro?! zOvHkcl9Gd5VKfFHth{xi6Aut z>>OYL1|^7&KufT(Emh0V*HT~c$pcATD8TKjC)%FB9#rp3(OWsqP&8=yIm7f{B4j^- z%>N5;ps;_QlR4gvU^gyWnUvBysdVB(*ZAv-KT;`KBI1T zi+VIhkqHIri?xiYs`$NYlAvr=$GWso08exyH^q9%vHPO<=8cBXF#kN5A z-i?~sVv2C)HhdXm+;||25$>P0;N|q_YiiS4+OMUtWvvT^mC0?aiGTXef0c4>vR$2z z0#XuSp!|BSU4t*2sXWVI5WDWu6{QPw#v*YZxhI{ZgIEGyi5uS@lD*PUpI=& zZ1ZDI2$n}($#R{HDT9?BC$4gJhm1{V%xI)RvWkI1nC#F1AE|NC4lNNt@)o2;+~ZBZ z>{&zIvvtlJ%`=-3eqN7re9GI4kZ_mHwE{IR=-EmSBCOPga3FTppd2(fA^q z0#JsbTTAKLz@_{eIJ{=$DRZbC0xiE|n9hpS(k>ymxS}mt2vWmk$+!&}4pC!IQ(eCB z+C4GG9pHZNw|T`kA2(JfT;E;DP}G0mZu7e&OV~N7rcF?hiW0=d?e*u4G6(F9F^Pgh zTWTMgC&p|77v;LKqJ}00($dzyQM{X74AazD2HNN=pAL4=mgg2){%Bs}{PPwBL4!nH z%;R{adrGx6k4k}7rX1EPu9bUsD*_(FDu9=Ziz(R3Z)li69W-v3dJeVOlC%M18v%K;A8(4lZ^j)8Z@!g+qkA9!r`zb^h; z@+^2VGXOejfe-yd#cYU`nPsED`X)okr8u#3vUhW`jvsb5esST6;i$a36psd?lwPQc>o^z;ZAsqXDa|&HJu8>tc*^77Q~jlnC1s z$nIyZwtr(tY;q2Cn;< zQqO5R#T+X}>Zv)T&^rmxj z8-nUsVuJRXeYQHQbqE*$FeHH1L?S>7(j{W~hCBjsQ2SxiEBr9d-?9DGZxA)fHYI?~ z%U#0v%=|*}O4{Jc{&ZkNebu5>noDKe%`ss%HXs~vlqypmu2x|gz0R@Jx9AkD%~-BV zu<_Z8v**`xyvo%q9x3BzjDglssxq;xtZq~pL2KI`3b!HPXp^tOrrz>Rfe30BuIrLLR(9LegYty_|1eJk8=A6i^^ZZShA6k}^Eg0HhvJE!@*xqJvnG$nLD<_gP{ zihDMi;IkskVV*A9-rk}Q_?W~3EQi;kzFhmBMXctjCl2476p%x{)U0Jh2}Fk86jK0o zd1Q8mpb%3Rw+Al5myZ6L&f>BLH~I5xRx0sfYF%I9&4f=(+lSSp5zDKa!3V1f6ZysF zmLodvWHlKtesb~bpr9pdX?J^c;fE;zWbYdn&;X+p`3a{ z{@SL(#=K|1Qs%@w(CACVwCt-1u4`$)rEV;j!rwKXGQc_wAnYN92OhL+rl`R`n87$A zT|$Z)%zk*D8@tccK@lpJCNq#BEP`#{5L8F2hL26WjcsWqg2%xEwum)uEV5E^C4lo| z6%w3{79xe4X^H0K*WV4V&g8Umz=*?nx?zMfMgE8?UU?N2f(Wqg!nM$bf=*XYiEk2ZUVpY5Ypn!`33{WzzV8Dc4@^W}Y9Lr(=NhJ_a;B#1$Qp(yht$YYNzE*f zIlhO46R~Ia>q+8)`XTeb)(uqp|MtZq5K$k(jQM$re}3c1H+6YR{$E1;vz2RlZ|h5@ z?=m>W<9il!-;YKW67d4~(|hcBXY01V)88A@M*w_Q888rCqRe>$!o<|8#P(wDszp|R z`0g;8b4k%6sJ<<3!^kjHKPx7a$NfPQzfyxD?g4B zTPkmohk{3KDy;otf4_oz{(sw$FV{UMWSUbfMwZ! z0Vfx`tn8Z=la&BY?#B%kdF9#VeKXyBTJd@R(}))v!BSj6;=gj<-NhCQ69{HDP&t;0 zaLxXT&ceL*_sx|RsiG@n1y#8KWZ#S7gNfX93V6`g@y>=gAP;jO<+YK4T-MrLN<9q% zRO!mNi#RClF%3o7LKG&uy$N3o#XM|8MUA@w&75c`jw|b2q*q2)&-h<2XAmYwrG6rv zA*2XnX6r7B#f5r!$kktG3JJ*2DodU5JHRVKs^cs)!9T|PT^MsXRO^Ui6W6$7QJ@Zo z8*zQqL$Q%4&{+kUp~Bd6V*g;tDy`X^BJqY^-Sq&WUscK_VD1+Z+FpC zo~h~b;L_64DZyneTbba>n7B6c0g3E=-4|qE2J9H6o`*^}g=p!i4|2nIX)v!C$P!Y9 zd7uVN>L(GcCqruY3|f29IB;)zX$eh1XnI`JwhFAUWE8|I2msL8F|ucwF80+EGH zv}DZqMMI6011hh=g!TL^H*Hz={`|w8z)IAdY1KBgn>kFTF5b~e+ZT_U&zL}!Y2ADsps%BgvM(`&H|{} zzK%s_sew^W_(ShYAUOq39Jd8wg#q8I%2-M{4aicO2 zisLY9i_|ZIM#F(Z6rf(+I0(mKWt&#S=ERrc)9w%hOt{*EO#U(Lf9E#r=_d4i@|~SN z^n`qrB&W47_sTW~`<9Jm!z6)%cBHhZq})XF;t!RQ+oOX|L)66}RxQsBX-yoch6Fi? z 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 an|kfrK*~Aqa^2ozfEYt8u9xcFiTxjZbajpZ literal 0 HcmV?d00001 diff --git a/assets/figs/portabl_windows/pic_gradio_en.png b/assets/figs/portabl_windows/pic_gradio_en.png new file mode 100644 index 0000000000000000000000000000000000000000..f08fa4cf1b0797045ad24ae9e52a70577396f6f2 GIT binary patch literal 290512 zcmeFZXH-*Nv@UEx1wj#zDjh+j7b#MeD$=BfK!DJDk=_OARgn_9NDU>_Pyzv|5h;-x z2u*3BBfZ1Td(L^=x!=$G-9Pv2F*34~vD=z!u34V>%pLtkL;2oay1Un|UAw39N<8x|AWBhrTWWj*QyhV&%w9wzlmI58M##G}S?hMCjg!q+7O!MZa|MF< zj0kByl{{T6I2ES1F*Oo1y#?JcBO{iTUCF-Bs zH-b*xe;&ZfNTpgUT#j$nM>gN^Jy+86_2M?MMh?mP<^FvQ7sF8HL4Mc zk6Oj*E6Oq$y^pI{8C8T{X36SWlg#+Kg&SkT$A64%0*j~fy*5O8Pr zi`~EcF@`u)YOLosGx;K_H8SQNxN4lxeS+u*!=p{Y0o2~ps|UK~P$ViYVO6DZ-sO)hRlm>-?40BO!P+E)p#;Mswq~ zTGyJKlOI3lFJpL#1QV*X%=17Ig8dk$*p3ajZc)tx%5+w`U3@CUl%N!m<;92Um~(3R zxxqQv^l$`4BD_(iAHpU8&b!4P=n6HpM4U1RvCqecvCd70pw~oPLx_4fj-w5;4^aw^kD7xAO2 z5Kxx5hhV32XBr6|SE>GHmDY9}=i@~2x8iG69`r(>nlkhev=r70orSr-7Nc1`JhH}e zSlU*>BL%hv<8~tty$bjk*6-$p<`37cURHDTl+2udzw6GA8z$BnnFei`d=r4Pk-39- z-`QAXPBs?z_=e_x7^QCib&XUZp~)34X?QS1!W3Z9r)92ImvIM;p1W4!>O z8yB8q%}ujVPy&ZK@C>{l(2V&iTKl!6kW93eg-rF{fix$ivNQmpr|B9=l2DM?OM0-lvOQ9g40pM9eAq z=iO56=s_gv7+|UgO>Xqf3&aTEGPdO&o=fmr&Lt3XmEH0K;y@h(e8hn%Oa{&FT zpx~nYpV)EEsk3BoP{pk(w0nRnw7&c)fR|J|k}@@X>u9QxhGXh)f8pV~{zV|hHTd*uejk~v=RLC9zDv@6j^x;e$7~XAuN_B5 zIW(3%*0zxfviLG)R!i-NAl(}OK^CPM*CEb?a+WKflq@Av(OOW)8F1OgVEpH5xo35& z(Tr0PDmmz!pg+V&HI;elMZMkj4h*4pAdjOP959acHs}w5%pEaN{4GKS>Xaa29h@}N zHrWRl&>+s{s%7|~#l)pGu**W`1P}}>2A86#g5~521RvAHTJ?+<_c$BGFBr!xJq>yF z!zWA`1+|deit9XAK3Iy%SQz_0MiXU6xj*3u&zzy|6u>@M@ww9~Q>e_QYdRZCL~w?I*)}r%)RRZmxGz@J=1T#BfL1bJP{(w+gtLIoD8s7&{1F`ZGEot_ zkV%IUO<6)67xnxW-``YovL`(-XNm)CDsk*FUD(FhS*&F>8CbcIaBD+9Zy@mpkB4!=zER&UioAh6gfY z1~}cMT7Y3#(f+rx+tu+A?iS-o5|bB958^PXD4OEg5IbeY)aF6;qpPQ1Y3#i+8anT1 zlJp|`^4r#DH{UBm=*UByD6tet%9u_Q+_&Sb-fFMh*lNJ?=?6iR$~E`cqyd?>!5!i5 z4XiU+u0Jerl^*h)?=uKo?rrPbQm=SRGj?5+{>k3~0wQbQ4s!anfkR`Qcj!xrS>3Xhx#Y8!saJzOA2C>n_idJ1_7D2bB_+v1x7Q)l{)Kux57Ch;qY%F_ zK?S>W6C8yxdc0gB2Ug zEK{$Keta*LgTtXcf}oq$7MUtX-92V~Z31IHe9FuL@{AjxO@D6`Xw5!H=AO>4A#K;U zS&}cFd0nS(ond>uX@2%v3SqjrFVTw;rAxCzY}&zo{+MB}7NnsMQ3U3{W;@f6Zt`MTa!BO;P5-QT5-m>LfP2h z9sAAEu2;O`KTt}yc=*@Aq5c_>RFg=XXC1k8u|JueObiYLj#svP*%AfiFG&2FhhyLT z;O|-DvXJ*0-xJWw603y0w>pB3P`k(}!BrqDXtz!K99V+7OM;OiJ;!>bU|9Utf*IkN zr%VG{+^eW@wjW_~0FRGYZU0oaRU~aM%CS;G2dWf?q03SV1}8e|M`*fo;&81xeYy)W zkNyxrv%uKVUJv@i4}opZ-n+tfz0M>$D2t}v-vx}PzlFOSkqhSi1{*_G^=@&11y6TA zP}D!-2+$Y4CV{buBpsK+qQtaPf_tzBuUzt$oX5tYQ)BnJd5BSLuZ(hlc&F`37zzTt zJ=DR+fVd$#w~p^y!?d#d91r&+nff->AzYK>X^8hi2KPD}!>IuAEV;5Mc$qH(8)?EI zX3<#GFfL;3U|sP%&^gzp(T>jebV4a{%deUH!n0@dH(VyTUS(tn0%e>zr|Zd(#sog_ zdsIYM>}{|NF2&e{YRTf~vH?@aUSTE`!ML}NvAOYgBs9c6j}K?!LsEucYcuidk!tQ$ z8Lw;T5K)qVM*Zq0LK%oYvaG#TxFt;$e(X^;KITZ>uHv0%;*C~i(09ySF!3%HeC1!( z7D}=3Hqhe)J0+ku1Xgx7=ULWx+W^z~-pCi6Ix;2&V#qXM6!U&p2=b3Oc+`C9xziNb z^K-aBv24-d5%1P&9)C}J&B%On*FnWfl?PLDJxwUu8E-T&J+BSMu=|4~XTGpA=6zAM zfwATr)FQsnUI~(vWZW9hbfN$}SVkvqYMon6|&oRoCbLC zXX9g}z^0k(1}fqXPz9f|8LUvtzata>$OdOW&hTl%<*Do;lnHDv8(8EMHdcf}#T?sV z_r6FaC`+tMkB%Y z#mpjf(4c23aA2zWsfCV!7+=LYRrv*Fmd9grm>|#8Iwj6y5!}Shx%LubU)y1ylvT(# zmZ(LTS|a`2zfRzga>c6&hF@NliJ2_PSr6i^ew}V}V8Tbc4{6`GnN{DLjbs<=`9TSD zdnB1O!wX+JYe&z1iMMd{GBIVVUp-^xdWJarIy509#B6(4-zGB)U<$V9Kgw$Wm!fFI&3hP*8irLNhCV)dAci|_E8H%9sQItag=C> zm!aOVd=^!dQjd0k-Z_U-#8lFvYS}Pdd}1*B(*CPY|D0KSeTu4}tk7_+D9vH_k5euE zV~qt9z(?>#s>kZXqupXYPfb|}&f7uOR6Cz!icy?Qm3%MRO+a;641Af7^{6-})=?c5 zw2<$pvb14zJiR?`D1aFg8k@mR?0B5ed8{m3q#N!QP3M4wo@CmQ8 zPgoT2#Bp@E6C$cJ_W>Q*F3G8<2l+5+w!r>cHU};?11aN zgLavH2{lS781921AiLZf#XWBDF%Hfjvp$?3Ud041-8ny86z)!Rm|Bn^j{b_>CqKAI zqj#|Fkk}l-;t|JKzpoAf zk~`QMPJn3TNiAqtzq|J&QY0=#{E=C8_i*aJ{xu1l(w5(cOQdma-8} z#Y6NcmifXLiBDVI3sus37<{90$DX@pHW@z3ug!G-^hmP1iqDPbU(oRqu8$hCK5*oHf_U`{oAWS1r^VQ=iZT1{2TG#)X`yM zxm)_^o6YK8+nI53+HNg%FfDZSgzRLtliU}t`v}7##HGSxDdz zo73q}>-$wBDWTupaf~0>`zg-I1jx#W;Y2f>hR?P7nWCEf@%zwk52v0s=*zs z>9@;RTHsbsN->{*1+u*-_I0w>wWTac-{rkNirl7i=yAPOT7(Y=z@n(|QPi@Wq12iRguVcV@jLBp)FG8<}d&shY6Yds`dl__uWhJ>ks>b^De1VO`nbcM{-aa?8_M zGH^Lt6@opHDw&dI>>D1d(4UKC6Oh%CI;_2Q<||3%o7r{demC{;I!1v%F&w?koMCdF zz2kt4{y2kP=tfA(`J>lGNIqFy1a|&q9fw}H2X&6_wY$ET^~n=dhj$7ot8Md*{vJ8G zt21WSec#AVNFP1yT%tKO+B8-Hvy$vMGrJm8@fJh!vmS2Np0SUvMhD%~QHN2BJRrlA zDrWv*nOy)1{JftE|5}CyJ`(HLH75)$QeuOCA*)BI@uc;oT|H%0%{QR&}Fd{G6+F@&t;SQ~`WJTFj2uzfIOj*qI?L&|7aG_{!fJ?!5 zclHTlUI6*#W#Vn=%eV)82#X=oV1skR%3ZO~%}&BKeP|e%=3<^>F$PUx1ij_n?JvO0 zOtLeEmHNxucxd5aqOsJLhZM=M>x#D$zJ`TUIknVT@_cMZ3ACY)&Slte%AsO&3~fDY94|>821DYK$5_ z86B2;rq%wb>)Za)lH-wyZ{O}d%YE-Nr20=y&ZrU^8;1O-2{P%!n&^{ogTEI z>cclbDD2tTEN#arSr3^(b({~H* zaW0&hXnhkxe@y=6!m~NV-Dbzv0O1?4^XAE$YxpSNF;hUt`6|{AyO~Mntlo|l_k6yE zW^!WcY-l!O;aVSV(3+B6u(8FXA+c5j%7xIxK>9t{d!!oABevYccijsRhh*1)utP(k z8~M^QVp6ige?*vT&yetZ*==v8siJKZ4KlpGo@Zf>dPmGQ8fByYkSE;tdw~5LzM}AN znEno6VPXA|jS2tFE_@oB;tI^V!-PpE*^sV(*|Po6cWNd#@wEDx;|ShX+)3kF*Si{g zbwOE_ah|=pOw%~t%rb=3oZoZ%I9>x}oEkc{*+H&3q|w*0v2m!KNC(s&Hcftvuu6=^ z<;GA23oluC)(l!)-CYm>Iln(Pa!7u_p2ig76tVtyMfY|@E2+*wW}5|Tl~?htDa)_( zchy>4zSxWHFP*z(|YaVruPf)d3Nm22XXi5BizhSr%5Tm=vXq8B*6%qMYWR+{jw}q z!{h{=rljoK$&plZr)h093{b2I4aQ~SpjvCbj2Fp11F3+1z0^mn37XV1@98}8>HNg( z&P{*9>9!mE_v25I8bY9RdQGJNx#{Mb*LDDf6DVxek8>U%#s(pnio(L@W`E7 z^&2uWw+Cmx9k`{;V$yV2_q$3rFt-U<>gAtpi+MM3#q3s&qf1DytkQKMTlU=uToJVu zT=6oguqwzqThQ2^yB~{?HQ5$64Y(aAT1`(o9spdywM-p?p+P_)^4Cxx=~I1rqE>fADkCfLp4X z5!r{ur^Bfb-17uSPu5iB2SD;BsMxS=RJnBOMzVjvg-JQi6uVN~6gE85B-ovZaA0w;g-jQ}>gp4V8lN{JZK`n7 z>5^jWI?QZ)GIlk}d`VT%r;HU8xl|5MuslGH=~ez+lksTZ4}_EsP}8SJ4K`3BUB0Y| z+1s#~xWwndnLP*c??^@*aEXOjm8oo2-!WkRSX5uG-5~-`N!d8W%)8w*bOBitw)}`X zwuu`d+2a(G)5{V20{4{ylG=sDQPq1O49n+M?max4eJ?QPk6?r)m~7nFNqO|U=Mg;A zAwcz_r^zd8nwR{*ou!kz^2G>^*J8I>76j!fv!8h(M50{`G3GYGfnmadB?IMg^3&`3$7* z^t{tjGb)YvwN}^KG%f*>#4hv#ug$3xuXodMV5@nJjq1H%xIXzjxXA&bL^DET-{I%4 zLi;{mXqligylQ%4(=ja|NG5&7+9XqPQ%UR@RzM$iNQVgq{zwRKo5{<#W3UDDZ0HqB ztiN9?FxITpC&+UzvX$cExcBIj6hHQ@R0o$JdJSs7zWmu=nb{W7n8RI%+uvInI@N35 zIykBhqA$i*^@E$zGvhF(1G@cfq+<|c zOYwT&?kNvZfPV4NR5Pt8 zWa>If@CQcH{r#nw=2?sI#`{XAk*fvOm0^GgK;-h?v*D}GuwO2j2sL@?W$AM%mOtwn zU-s6gJ9UxasSXIr9klIC;%&{Y>6B<7bz9Pry6*NPcoIhH)F&S8IP9!zFZS(TMUNEC z4I;SJl%peeve>+`nO4owfQb{xq;J?Ir<7PKCGSD;CfFRJkgO9`#%ZBUv0=!Uhc9 zEG}>$W`St&857LPeVWHh5Z?q5C@h#KbtT=Q#&2(&AtF7SI0Y&3ALVSr?I4|0uT~JR zRs7WCDsV@l7~9%}noHh4I5IPS-b_iGnNN0^-0a`0A$Ea0RCZ!1$h{N1OtyIF7k0!^ zDeN1(f-{yDJ#}b7gpVbJ(+wXCz{gjyt9UH50`B?)BEU15Wk(1j__W@=`vt*3HF<*@ zV3c~u#9(>Uw&u%}xCC?KYi`w$0NvE4{`Cqr9BOQm8&t0=3QC<-gqi>i3PI%bSO8Y6&3sn)D4eA-S2=MY3ZyIU>Edg{!F z7`yK$f?>PZw{f|$P1QONp4n5Sb~iQmF-qGsALd@K+gl=wvBy*e-9K2c<#A(BhZNsI z0vpQwXq!zbH+-WbQZeQ;^8qEfI~( zK<((J?jb*(h_a<=yl3UNEsqP_JJoZ0m!BNOD4XsJujXX z*+f5o9)#Z|W$a1f`a22z%^xcD{ahX*ET2t}PD-{-q>6-DSWORV zV8SrZ#|{Ui)F@H9t0py%PA@q@%fJs>T&VI-m6(RPfZ+Y{yi@hFEgV_$gCQFFjF!R0 zz@NU3`xr!(;KYWXTX>=WQqbzlvWYvBw``BS9&@6; zA+u*dPqJaxd-rQ^ej7{3tS;MhPUlnI^cxL~t8;D-ETRaL0N0nmBB^uZ9{}#bZnwJOfI~K66#o=@T;DLzn_vHydx`0~JrY`@P7DVfcN|p7_;vX12AMy}EPM zcfrGsFW|`+K2nfwWvympPYK$3`4q6eHml7ocZ(t%fk!w2QjY z^Y)rpP-f&1Bg5x;y4KH@0_Ba?xAeU7HilP=8t_V!>m9BYDicv&xs{1D99>wr|GuSR z&M}x|CMYA}4yP}g4GLQK+9IF)jnFvbSsos2!ofLV+?{#Ds2066-qfi(n2gG68dl0{ z=1m&tRPAgS^=8XppcbDhseau9ejm{eD}&C6YR+b)h6J+m)+dWpZW(?{hk+rqqfi*q zS!Pa{qi?s@(ZooI>Zyfm0yPfBAmH}{k&?~GP~q|1At+z~k3gh|fV|=zO3-Y{OOdTK zcluuLTqX;jh^MUum;ScjTsFs}Ta{M)da}h&_$k|pV{6NKF>K7kp^~1UQ`~2kbIc8Z z!4XRO`SR`hI?GDFm;*jUGoj9b=gHb@y+`-%D{9)E5-Elyt_# zWwvkgk_J+N@n;Hf%G^zVitfAZ={WzBnm59s7EeR5Ps1#HNm8#gJZSy|NZe)8k3%Z_ zRqYyjG4ftO&*dIv)MpfHm0#>F2kJ;@#ZX+kh6xWxVtTk$v~QI@jwL9;F+K0jCk`=5 z$(fRaoG15GEgh<>Xe^Vzk89eWY%m%$|5`)1m3i1mj*D=V9>r@<%@VS=5cxbKckl*Q z@dEF;$G!aMH!^C;$kZ3D$sZyjN$WrzGY5auKgO`tVJT8I+$nDgI^>9k0O)ND5hzx>k$sq8^$bN685H}Rc}O~7H?cqj_fm@`{f<+7h8?gmT71vKcZxm;41-tw8PXAS(ZJ@hzQVqU^Yn} zdjhr?TdFMo)H-qMB2Xg7&EpKs3lYYW?Lo?>F^?PS%~~Q@X3!zBOE1 z5F;x*=YH2SgKeTD%$X6bkyrU~fT{xQc)EW^%IG=Y=|N>fPlv@@VIGD^@_#=vC6aP45{$)FXQ*t=h2QQraD7z zDsC>9lz$*Bzjzbz3B<4L)s5g$Y6Sq_DEbK7w26HG>sQ}pWY`INRf z8DDebC@ux%_ujkV6JD8T4+ zeBGuIa$rd>&vQ1iM1;s9vwwh?o<~G$MKW-hYRg58Jg%xgTl5gv= zhwW}7%Y!Z-arsCU@z>Mz9Hh3)&K;8PcxzsvdF*dV*FRJ_eR~hwvVA39a8Siuyoyp~ zlwFt$P zbZmsuK>oTbiL=6sMJUp%bu_w*cWv{~p{f?~tzF%9Q7MJ*cmmoN~E2YhPM zxykyx7S#$ao=+z6beCCiCiwoe%U#osjVT)k-j%w~ztYvKXq|PZyp%Y>YyATtFCpLS z9z!+CsiwTYT7bIgyEcs33{xFQpq+{NG=_MnyXeXGl4>q?{w>w~dL5B=_P9vJv82Ec znVqwniP!%s03M`-FcsB5Hvc&6^izO977tW^3AOV6(hde>59qUkN;SH6ztKD%yUw2L z0Ajxr$%ztprr>2DL6S$z%XoeL>u0#*uHKAjU(%_B+E@=RZm7Aum4FsT{Uw&TQ4+B$n;JbzVrI z|EHAsf25T8|8)`V+?5sa*gCdiSI%FYyMqty{@udDXF{R_#bC2HIlu9SAO}Ja8Mhth z>WrW+4I4T+E+sAsD&VGF$-guazcbXmd>#(9*%Y68v&z>jdSP707_v7bPsHW=_)rdF#;%_K>%;jDXkk>_KM_=IixgCQFmdTf@{7&f}bx~?C0cx82CqP`c!k~LQmijZ&(7#m-*!F%e{)r!ziD)dQg>M|WLL{CR z8ME1VKjGlaP2V5eaN)}LaH>o?N#amF#634pb!yfTtyl^#9AJ~0`Ms(iaH=IGy*i!^F5p?L{c_C7wBrlINULMDSX{hP(F=#4l zZ;|vI@6Kst_c@jgy69e=Rig0kB7WeaR3x;P1Z;T|E8BEGp^*){u$RA3*8B_5I?0fe zGoYlb@&52L_gwpG^@X|NTwLfvW}kP!kCD~quK@@SYYG`(vHPaw*q8waFV?M3_?93^ zhw7bLr|)|r;}V;cpgtdeo{qVMo-o0oZ$FCCnq+7=<#xeUaod1<{-~iA!?QX zUby>(H;{(QC|2X8f6DGPTeQ*{S7*Rnk+;1Ymh4IDRj*eruU2r$?0uY(n8VbAh(m3` zYJ1A8Q?FiqI8zjAy&Ij@wO}xoT0iJXd^jSUxLb6=#>l4&Pe6n&<4fYHYz?9ybazxuDRsB&08`ZoAYr$_(dS0qz1ZlDmXsG^ZuA8fqimxxZ&n0{n zul=e+WQgzosF8XfBd+EZ-o*|$>*pz#v2FjN!j|kr81&kq2}l>2&VsFrM6vFtiwidR zC{FWKYxeGTm)_mM7ArAxGCz1}(NV>tB`uqj<-Lrv`wxOp$Xox;Dyf-3r)B3Khw}6d zM0=ukXBz)lE*`$m(O`QT?2->uZ`F2guZ4~ef#@1gIy0CW%3FNy<>A=!C?OF}Re*(RzAk_=OQ;~g<~o-6QQeZQ zr5Lhuh6G3Ec}g1I_Y<(sRBa+TXnlo3Uc}G4xwB(ssrn`Z6c}#mt3=07-Gnc#spkJw zt9aN)akii0bG{|vnM*ewy$K2RVxLPwhj;8$jDLr}rY|$Fu>)J>+lAqkZy>MKz zE^~4>7v-qr8=YfYb{OmpATkuIocfi~04s{6`ubFhFo&)%`D}5cU+&d_AZcyyK^&69Z)Y!dU$`QS^A!84*_dHF%`{L{EHX( zz_rJU3ypW_%;I={=UOdibavD`EwU=zvh{v-4IMe1=hC*?ByX22Co}fDA7F$)l^^f9 zb%$q>J&G{HW5TTC(k%K!FQk{iCl(=)W`j$U&@qY|f~V<#0N*?bf z^r51@16W)UTnM;oQCRY>du)EmS?!dm+BF_4{VkzA?8Rmy;rEu83)QxjdQ$v{+wwa; z8C0*+@V2sQf|Q-zYx|#edT41GZ(O`Po0fgyv&csY82MlQEA&+tKa8Vm&pLks&dDtA zM~v`y?qoQ!+aHn0#{aUK4gMJg3HOrKMlsQi47FYo!IyAy)zfk!aT5NnF*ej+g+7DI zdFKkOoX)s*{1Tmm)H_D?=Afhn!&a^>r!@%8*DuO9bCV^A6B_iJ-j5UdI$9D+{?3wt zdTp0QLTkAC%HTG7cMc28x+T|t7qX~TRKPGfn>-@+1RN+kUiqa7DCs)r0uReeJ)qF1 z%U4D_2T?5FLYQWP11bjZ8^I~3mT6MiI(02RPlCz%l6ftb-v7~%Kq?Zy=;6%_{m`d% zL+umhcxBmu2&CSrEAm1l0?OFe7wgvGA!1lBs0Me*ov~vOD!3n|n|nlP!rtU4tp=M7 zTMeP8<}tio@sA~U|{I2$(+k`iVqg}LD+ zk81f*nd3>^{KjhHPh-x`*(X1xgsSAm##2Sv->AQqDyox8St$Iz6>#7jFooSXw%=@c zE!H;YI2${<`03jK*UFbn)5&fZ=FlyM*f*0-o1HZdK#z7+X~lNhpE4#i9OSH5E)!uGnv zKCN1(7JjLJqbkw-4C>WEnp8HNZjd#_aVHCEqPP4z%B)IXnnpr}Uc^(P+t}@Yaf)MH z44MTG-`0CDWL1Lh;Ov|_u4!vo>jAT1(UW1CvT@4i84SmM$XkzOE^c$rf+FK{ojPF^ z(XWrO?33NwVKkQC_#EIh3JEV(ri32ywy&v#Kw8^rR(x-zG4x`6%7or|BsOpvHAnEN zyTf70ynqXQ#jsKGMyz)76Ou)b%2X&{G=yp8fX)=p3O#w+XxM5trhQI8 z&sm4?M#sF_*ti{kzfMrv$a~YeuSL1yZh@Q@H8JZ0LQmcVY6RYBYVA>@OkUEA(MQRr ztPNK=YBMV-7ur#b3V1HxzUXjK=#Z-3@{P6^FDIz+`(3(A_=XE3@%AdGFW_<(D692yid18XgOTZ44fXoVX{W z8Y^ssscbEvF;*>n%Wk~++C(A@l`*R|w<;jJopypQVG@Pl$HX`fWc5z1Y;tS_DCk+4 z9xx@N?r`H(*Ypb~KV?RJO@@efpUDXC5w(Yf3qr0S25E@bWg49m(9l0P%(0lbRM3tL zW%wBJlT(JG@18yAyD#6kMh$Pex_)zX{B*q)wO>ux>MfO8*m$$=ge8RV13Eko)sJVe zk0?W8{LO6_V@;fOPyiXj8`hn7`?0CCCio&ZH&n` zM?mHoK46p5%#A-7w@wWHB!e(!7u`aFBBAxkH2oxGXFQ3S=g&pPDJ}oe#zF?t7&L{f zQA-YrKKog2=gOH|mV6J`>{(xZb`oSuwHM`?o;bhi5BgpseR@hcHD$ZK11XaI<{T|M z$#PC?boN0>hZjK#4Kgb*13J|ZouH`jjY~&gP?6< zuS`l&c~!NxiAUfH$w-Td`GteGexCW**Q2pW4aefPvg9cPC(*XN%sIZpyfe>9urMg- zXtAaO>C5s@tHo~qE*zRhS~#}W!xr&iJmEfVQBX>SbZeuBhX?0EK39b{Y4(pI?d|lq z^na0Zag?2-#D%`HS+SMxEruvuVd-DI)LX32-mMR&@g?I)P}V%D^rMV_vDyB}m3&bG z2Xdcg2+lT~|E_WTq0D>_|D6gb{Qt%0{Vl2H*^dnM{7C%|8IX~kB!bthbPEe9d8lH$ z&8q?b{Yy1jc4C14U#I*J1^NF)TK1`knx{l|70}@g5ZL~gqMY-bFaU$nIQ|PC`$AlX zCnWmrDbEseJ%zq7G_)#yr0|zYmAUtB5AI6Voo9#qNopSoA9Dehp3m){sx$wkfMc~u zbA?OZ_J4wI2-j0ywG^>;6RatJs^}VMb*_*&tjlqK8>mF>7QOWEf-JyH2m|X z<4t3?v`lWIZeG1xNRZ86*gU{0{Q0nb=y!K@Dva8cM@EC2zKhzVuLk^e+LAU76i7ke z7XKzx7dhCoJ(BbIzfME6kdz3(t;h5eGes-fax5g6{#-boO{2b6-W?~S>x^@~DF|T_ zno2jddpPHgpn?JMPWZc)!F{@`gF%M zMKyme!<&tR#Z32Y`~sN7Quiva#+KLQy|{(Edd#EA52Jzf#Ht8NuT8tPoBnJM9z5W* zXVs^+ACa2SN^%UbDlS(8z@f7nzP(tf-fvFVweyv1`|fp}D>xPLrI;NMcwWBq4MM*A zPlsyzqA{RjG^=x>-kEJY7Mo_hd#-4*>OUH|2Xi{pWZ|AW7x^#Al!ut&W=Lhf?)-2} z++GTt8*pLMHW=(!dBJPESNaFok*AS)pskNjSV!JiWq}P7gB;Z?#xg6e8SxU1|qMK zMug3`7h8NVKWs5@x{q;IgXozF^e8(j_2*|C?oz_Q)9Er$_8I~p7ZMZ zvvqJ~-lM%^w5H~*mKCFz<(j!}F1<204 z>`rKjO|ewy$4>ZaO%5>J;}gb&%5#M`PA{R;eZuij>OU21{9483yoZEjAZENTS3pl6 z1VU#fVvm%V0arm1Pj5HP8X9+d@c^?{aN=3i&kcU~hIHy$norVfW~t$M(q(h|wqaa- zG$D$;*g8gwKl@Cmi;2mLQq%f&TgWW@Pvq<3&x%p%k5Ip9ZG-&C%Fph5XSAV0))c9V zidrrj{qpnhuU{!XiFI|Yt}lQ0h6igCuq9OL!<%Id`Tid^VV$+?lGUj2`}SB9J0+wJ z6?3(H3Otu}vtNqeCDAEvYZ*B({)!Pfeg<+H;4*?A#<9F1PIy-s84X4L2xSLbkQD?} ze(Ix1{GDP~mTl$Q~|{-d2(3 z*wXJm-QoRZ*8HC)YLt}k6@&{fq)h(m)s#jn)%dqM*6p?HQqB`AdLDC*#(QoumzYyJ zsU}QJ3;6-Ou&|~-%>^jaIm+OpzIu6(3&_<8DQDOQ_sDzOUq!W1kPZUE-pe0|D_R6sypr)WqU-Qk zLuD?-&K|SRl#@F&^Om_-cv*huv0o~Zq6n`QO&Rk=go_p1CAKh_hi&TzC*!N=v7h0w~OZHK_zp?)A zSUQW3p&X87`R0uT=ZJIw@k?uEYW;xuY8po4_G4#hl^?WCw2$PyROWs@ct$NezU-6F z-PzEtcXebm#CHfW4Y%`PDQJLY6I<+I!?651GE8Ae_tKIcnWAl8Ih`A0L#o1vhwjIjnM65wt zWNiogNZm5a)R;j*#zUlSxy%QOI#Xl8?xzsbIlTAw_Nr{newbj_z7dnK;ygFkEs0Q+ z)~Up$z<;w>TE%G$Ye7q*?m8g=rayEs?B_2Sbealh9lqjkNjFFF{X^Dy{_*$kDS-Zm zzLoSH;x-^t^7AC;=9!az``p~_ZngmSb%-`&de*4UWF zW7n%HG#)GJXVnyZ+;WS#xp;asu2Xe4`_bz(%lA;BD;)=4FLTs-UD5La&rm)LmC~`N z1Ls4a;reCuT)WsEnmNsINK0NOI?g)F}k$b~(2)vPUV!NTTa+wX(VZFeeIeN95ou(@jMAX#yLMgnh};*Y?s~YhPKx zO$A=S3*X;BW63GLw9p5BrO-fxS$|eY&Ddayr&J~q{@o{0E}%i2^5WI}C2{xWRb-Gz zx0t+LLi=d$1FNV5%)4TZpk<1!q-jn*wX&XLUoT+G6a>jaU_nKE%Y#r+8mh|^3j4Wi zba>WDVfh?wie^`Ia=7){wW3O=aLbf}mKuYBB(dKrO@}My*7Jt~9&BJE&TM#ondKGe z>o?eXcvEn|scUS{j*Cm|Z~bfrCc;+p#&3qr(ftPrt7TycwgVrd#9ZquMMm-O1Z(W- ze$8BDRER*xf?}Mt=L;fYH^qzvm%PaXmT61oF^>iLdYnrl6e13crjVV4iNiy`i4p~y z|ALZ@X9wwJ?V~#=pwSi}Vou@3;PUiXE?(w=q9=f=sx zV86=Y9Xvv$pg7^%h&m#LPF%tMmJqz>EBefIWThd&`pc*!Mtj8mtDYBnd?Cz)X)ZCc zzQ0wW+p^vhF?%LO2ed%hNh4?O9l4do{T&P^W&`{=<Kw3WZta}Nc`aVD0M zfifoFuYY?)c=q1U#Hb8^vDG~^BApciHYB8cV2xb7Yck72AB9w`58l6Z>GvudXp!3u zxY^h=)QXhr7W!LrZ!)7=jU$C<>E!-#Be4QiIXcZ=`^?HpEQ`H2?Fls#9-X4croAou zXNbRgq^?~@v1t80-J3nbVQZM@<1VWeDMhn2(!0$^ZLexbHM*zPUWF=%0ex0G1n{HI zjjUr&mV!g8Y?=pHAC0t;WFgu<9Vnm9Q4_$xHN*Vh3ygn@+Ye3MxzKx;MStXz-Q?Za zBM`L3$MZ78^t&e|)4MZ26prm3fGU0)WmD*Wnu&s}wXx3C^)^JU)YhsB8#d6Jz2dEubaRoAhug~>Yy zQb%I=k3m~MI>J|MxiF&59>2b6tAA`IJ<~jO)cN{f{DgxaqyyC#BP<+RZAXfohUI5Y z3shl!ew&r&oe4`?ABd}q*(dJ;?G1w+Dt?~K?LGHGKf|#lTY=_&bD!r?om7WJv1&rk&;6(i! zbxlo!hRhLm#pVk-K|uSe`-M!B*SBJ~Fn4YNaL1B%ZbaFf^+?bDmU#xk_FV(dcdL3; zvG%#*Ow(lNA2qXLp6hF`a}z(s!a>KkPR|kVHhSb6e^SKC)}|G|K^h4{$ybr2W4@-* zv!TV^bakMr{UyhD(ii*G`vLdzv!UZP42>LP9`%m@#aOv>jqK(K7Z<{x(Q+@i3I-01 zR(aJ2O+~?eLvr%#J`~`KcM3=W8(RsVmjL4|&h`VU$rztFZ;r?oK)*IeA*Y%#W>xaU zC@(w9+*4>cbmu_xk{#zSm0S5sW_XuR9fH2aJ8il51HVJpFzZ?MH{RB|7hDPorY9!N zpypNcjjU-@>Np+UY2uJiInd#F=6Fx&dsC)yvJj3|ns_L@OVY8hm=zd6GM16^{oPdO zWB0q74L!eqGn!V@ncYM7J1R7aSj0t&}O09EStGNfiPw6;x#_Q%P%1# z7;fjrzqGOT{>}7>-DQt_AU$t= z+E&?dhCf!nAV%Z^{gLpkXU9LO6Q1HsvLdK2Bvr#Lm+G_WzOv*C_{FNAA%9nwoAa~w z(Km0dulyV+Tu<#EykC|1#KvPj9+46?-Z%bH)~DZnQXXyEKB_I-_!vj~#kw?zk`rr9 zK{dZb`O_F*L~POBZ|ngL1nGZmnirduc{+2D#M&Qj9>zA?arjVO!^dDgu%j}@wc;dS z85k@WQ5;ZP0z8Ztjf5Y~Q|Ae-!ElD16SbIVXTUgqut*u8_~%%_^tc_x?BnILD}QOR zzKrf6>~gEi{bn^eJ)+EOgjPmdmyE#pwEmp_K7aA^dC_H3YHGeeMjWl;S5mgSaD@yI zpmv*8^tjI_Fer2FcfucrdNUY>A&q*85^qh}M5OY7Y;Saj4R-(Td47jKT@*xGT=u1E z)f{9WwIigd=iGZQG(zjyTJy$4AuB%26Zd1}4x-B6m8 zx_y%2sT%1mmN zoZR>RkRC6aKrj#4VM$nD1PmA=&wXU2`}Y|K;<9pg()sa${iOG%Eykw)PKsD#HhwDv znR6FzWJrDs&Y3Cs?lhx5SLn%RqpzI6DhjU|-bfdM@JYQ~lM5GCj2Pdt-EgAAyjtzM;cN`oH8OHGA&;N2XfqFrG zy}e(?N@1zlbMsg?RnT7JZb^TTP0H+l{1gNuwk5sy*vBxY7=hB&|4t&=q-_693d~=O z5%?$|ET*q^k9)1{gZbs&no`Gk^DQtJj8Q+rYwqKMicaLPQ1$g~V34D$#MfW9qC@_t z7ZlC+>9^y`x?HP$B2u_I^uQ@QEFS1u6uE)QeZvZi4n;I?!h-<47OA6SgHKk4Gm`*5 z%~-M@CW3rIH$?Hj-sX5IZv~i0mz48=C<^a9MJn}K*7AR^!lJA^)!(qj0N{Q(_is0n zv@-oeb$G2K3nh#6GNTO6kc|z~*~@}EzHmgl()679_*AWKVp{1iTH=4gmmnmzoPE5o zEfo9Y{BzJ6C&sK0Y{gXAn`X5bekSk0}%;ga({YFKbHvDW#UC9Bs# zHEbb-&ClUTQMBT#D=E^ZDB%Kt$OnU!zN`iP{gq7-3{(tn?2P~b%~nBr7F!B=;p0?j zJa_tF`y>}^$Yy>^9-DMlxu#}`#62#f*ExxhSi_YM{mqK4I8zZ( zQ9|FNZ0}JN1nvBL?YriDo0^*1T{gCPyTFs?%MX)))KP=LP4G&JT4FXQ&*dy8SYfsJ zs?$$`pNED^MaxEd)XwKt(^$(I=O@fJZL+1;om;!7wqtxn{*w1PyYRO{2UWvk?hSW2 zorZcdpUg=(>gwvIWJ=HNKYGNrQ$4c}$!c#tH_pqJ4f`GYVB`dzKkOwko=_o$?H6u( zNp*ROI-hk6LJ6khV)}=ZdU_M^%hDu;Z>{MZ>1a9B{N&{}nGd__Sn-CHe;1-$$)zqB zJhCoRV`3V3!gaVipD;SA2LSmJqmh%d#**1aFQnRE-t$4j6W||&cs{c66n#0DmneZ; z)?o74|B1%5h-7Jvt&dC=49K(LAZjZA^2BICv_hYW>DNnqt^!vpy0)eUq4t-f{qLKJ z31aRrNjN@f<{g2T8rM^kP;tL|eB@8tq4)PK#!f*0`wPwhDdSr~|NsBJ`vr#uvG|Pl za>M^J-v>JXY9immI{vMZW4ai>y!d;#D$!GRjH*@l51`cxtN!x2kIVl3bGc-NrX6|> z&fe#CpBf#%UA33iUR>{pfQK~hoO6XoHSl@g2|Sy)$e=rvkv%A!U+P=eGMoBfb~Db#?Ty;Qa-7X`aWY5F>4+%vaZxv#lo_! z=^oj`awu*f#nMf^KgAMW`MJ3iXBlYZ`kw#7gVGOK=o&53(#_kCKY47j33oN>-u`Af zy>o9GX&8R=Ys*2PJSL!gI?LA1?NirWJU5{(2S*8uAv&;tmL3}k#2fh}6TPSrU!L0P zP2!4wZ3Ac0jI#90EugT&c`~D^dm2#;5qz0%AI4ujbCIWvc5^Aur6uWyB^o{+N-UDg z*ElY#zB^Aly$9C`fp$?$z#p(8hqpnFoe~zOX>WY(`%9nAykqqDY@p7z(OVe#?OGyb z6eeIX^^DM9kE8)H!oE#BIDBDWB`ZPc;&`xc<>atmB(4*;bOIF)vQDmh%-9)-!?J&_ zVX%W(Ovh}NOUy?*x%F3UyGyn7^LPCOb4|GC-e8KSUy7-|UZOG3@mhJ9{qU8zK38`4 zqrP{lrLX#xzP63zR_=Yz88HmxQR6+yh&&ypQaE?k2^3744ybVa*P`=1Kh%7KE4n9} zxPgh}ijAE0SJ0jNdu})8e7UYWp71(0t@PaYUB%wIIAA#*1R(j>&z!;pEv-m_YA+MIsn zUaMDR_G{};8<1_vLfyF$IBw2deozt~v?Vud*z%L`aSp>@} zq9lQK`3o%7+YtOh06*T4hlsj^M{YqrT*`4}Q1hNx4Tots>cF8F<@DmE1K$rM)TOC` zqNkHE)-kHMPZ3)&!uxu!FVVh4@C35vR}{cTJ&#rK7B^=*+SEf@&r_ zqI)i;r$9cu&?aoLZ?ARHtLkG1&6PiGP^>>u5d0VGWz90tSD$^BuQ7r27(vr`34F_! zh-oj*!?Vv5Z{Nq28d)FLlvAGdzjyvrNui=IlZ4)WRqW73fHu+$-|IW6M2!U;Na=v50%m0bj~d+ zh2Pe*j+sNHQKmeR(fPKfR3`bc(gX1l&ZoIi3I@Vh-9Q^rI{2y#p#vr6Ge_|NvbyQ_ z=o>m^X~ia7A&?llJV(KA(EOjHi!ob_B}1t0M}?pY-O)k@$b>gAy@Cw!)@X#kW+0fm zV$ic1VHSJQu}e5>m5WhvTV2$Ond^3A z3kV(;-|4QDmhh;1L-1b8Zv z2vYj0vS!iQfhj&pnxiqd)QcTP1|EP~2~EVG)=)l~l==1mRwVtw)~%)^=Vp=WalyqL zZ)8)bs;2}05pKu*6BbUUm&H;ZWvM$q7BB5$yfJOH#)BrpE!9Dy@dlvAbBAiq9&T7+ z|5Gf*qpk}1#~_HFYMedo%!46CGD>|h{M#{UNO*BnZpv8k%3#?Pe2jdu8Izx zRL<4Pn(4M#aj7maW`i?>*w9*t@>RS%pW$KM?JZSQ_2Gb0eH<#wWD#kdg*of-dtHwe0R&LZR}$Y=Kv+kAzpkCU3!h zJAI9h>R^Jk_Ds=qP52g2Pgj!e*|l?gz1rhcKkea<%@k*#xstx=cG-C2YPN|8oup~5 zrb$cPZ?B5%wVIqQvF9~<-4o?YB4V9^NEQIG@T8T3GqcKT`ahMk!~t&9&x*J2!d|Qg z&*Zb_ZEz7m>W523%})!<7dM4 zt#GyMpIa!_%bw!mKQA4#=?sPOlzO1Z^{fqAeZ5-CK*;WoKWq%6Gs{1J3&)Uc5Ufq) zmWF}-RwC{1ITbxIf;04MAT?bXZP%Un=b=kk6%wY6doYwUQ6?UtI7!v~dtnrZ#hAah zZ=2#jEG+8^uIv_H#))w>qga(y5qkkSw2k|KkL$H3LrdS|?s!qI3EsvOx{($sa6xrw z8vLp|8}w`@>OqMHUuR(tX}RqPg5gLN&erh8qx;jU_l+( z%O~ID4jTD{SG)`?{nv2bX3K)YTk+W(3kC|$pMKi5xoPS4ylhc@lQ^%9wk*j_FDh2o&0uHDN^{_f$7@YbetY7^4~ zUim4vTbUx!6}5TSB1%dnbwAgrrkW#sn~97lD3>RgdFP{*w5z0CA0?RYGf+-?`ZjOdV({0h@pYuDl%~jfLJ$C4>eStV?Ffpo-)y!6Ddit z2{rcZ3h4qJBm11f9+yaOi$i<$(=-0B(DMK2AjdclzqxG5f`f@tHTn&UMbza?F!AZ{ zXBU(LEgPpm*nGHMDs<$hQWiWuYbyTbBo0%>QmQEyn_Mb3_`F9AJ7xWaC$L`#+xML# zUOB?mIOQp}RPnaXiey!#)c`Q=0+DK;4?>kp1}Aa*#AZo;jsVIPNgbrYP>0UsfvdG> z3ud(8qavxP0Gyj08reD7pn$f^fNa-?(kZ3ivf_3d5yaG8X`D&24GD3B}k8;-x z2ir6fIf$r3hO!mcYYfv^i#$oeD=ksuklG0y3*?I$WD1S+czPI0X@L?V%;au z<7M%ltM)5PflaEVn+>n{M^M`-%?rbH{m9`TR$i@As+*&b%0^R$g8s2$mB~mcU{YsM zt2=!`|64sO)xmb%fQAps;V7Gi(;=>qQF;?^TIG1=kpg$m<2_+(Rx}oxxfJz(s+E#! zcMEE&tB?6NSmwMx2Rn9yCCtW_k%Vy-3A108SD~v{7mRZ=cM=4X;uklo!N;fH0{y95iQTTw1l9c&h$Rq zJ|d)FHH9fO$+87~I3oQBt6?7S-03O!{d`NH%%CA%qqGWNCvLLA0FxnQn$|(xC}t@_ zdepvha7UHuT1(Vco*6LIyt^5n?ph4L=(k+h`8f`VWp}V$IiZCjp=l6-#tR3xPx`!s z#tePjl9Eal&4~u(@{|6tFB{(2N{>BZ7x^RXh*O;_mpaW1qtiCj0} zCd&6MDCo3(*ZqGn=h#guaB@=oLgVh?3I9ox0_dol-4_G#8|{G(I6o-V^fS}OvVGs( zRn9+jW?zhxU|hQ-^dN;-wZ<*S*vbrGh4J;oRP$GAu`NfSd{$-;uE700T*mK-xQz2o zhhsIvTQ{35=2RDEN(2kP4MwLVUCXo20TJmj@QJKQ+VrL~1Pxtppx zn|tm7=+5x@$u-%l^BYaFLBw=T1lji2S9cS%{BN`d{4_d0*ruwm9q=-=QR!~Xozr^N z;peBjw^L?SBI~YtyY4V`>aE^nUhH^rc(Fro4K}y@dzm`{HUa_~F`n3aet*qM9Iu?!3*RSn&bjgBZ`Pxv-G7zUyCPK{?AQOE0DlKGYLqR#^aoFTazAJUiqh#{n<@M6 z9+>zw)X<(RG1G}n>hPnCOVk`=WYYyGr6^Im0HSnlu@MdmnJ7eYlaOw}oPQuX5`Qp0 zq|>)B&}68|e%x-r5EiL5+{3Mt`63`yCsg2_g|Cfp%U7N@o5=?Udcxv)^oue0u#Jpj zWw#1dPXgL~-|wYe>S+a!l*z`UzSq@WH}4)`ciKl=7IrJG-=auRm&C=?tt0=EM{q-; z2kND0bkAJ#S%sh18`qJ6A_JfaLAc@Z?ME$!;WsfY@sScON;c@z(I`QSa-Z>Z!(XQs zO{W_c{?)bW0qyA2Vst+G!{ao<^UeqS-g3lesA`6X2|@?=##&p6&T27ADaNatOwJ{$ z>ad1eckg2GrCC$HLt`8#F;sW*OM(*p8nhb>n)KC8Kc&~ml}ge1-^MG0$z1P(BZj=xc4hmXJ_SY01_^M>QKn!O9vS7P!CQ;r-+{RQ52F3BU)* z-SeRemzUz_KK=0H{Si)Kw1ckX+Sttbmt2uVPzII$p=^T|EC zJbN9IbLwP+eA8R{FQa~RfbqMP%l;aM1FhOHTVh;#KN#R{UQoVXd9<4zM~BK_R0TXUQq+U0wN-?yt7z zYJoLFE@gW8pZR;$d{m+eK`c(&4tjwKHNPNA0Y*0p{TF1zCer6SC03TaF!}|o12TsU zCTlg;8!jc@iy9@vc3{>%kCt+864K>p#L;4Dx&%Aer+^|gf1_r>o=%>Ax*lV4Zerb* z6y)%t%}7d)YIFYEPt0sWZEi~^gLTM?D?Q%L;~9ME&w=uh(NC=4;!s-McNrl|=SvYt z<4ViQc%UZhK9BQuUWRyk|Hj_mU!d@I|7sQ+WOa)*$m$MvJky)PM;D~vD`%NYdC?og zp>f@8SI2h>6m~4F9Y8K& zIX}+@k5D+MWGtXSj#Bbx_-%cb$`6QJB`GR* ze2P=-v-m>#xcwSsv>ir5AY$67@N+0^N@r|YN$0aR>O@mUgoW4JVCB z!dH*kPILA&I^3N`j(012@W92;tGymAN>W|>s^zGxdF}|~G$L9Jhu&h^OSF zL0$+n&+*kj*ZUOvPSznMdtG9AjsDK}oJ&>bw&G(zbtgujjl}-6rIe?|O0SU1e{VQ| zfTWoCI`LZZR+hN${w1pGEipO|HnM{03s3^O2Xv^*h5vJuAiucpqibKKKHKPyGp)al zGl?jcf1|@tP$u-`hO^vGve1F(TFjw$^SGPy*y2}0z{L5wD!*`ez0azHcKcWfxMljH5GnI%)XVNNJx0S)8!V#6xFK97WTU1(L!p` zYQ@8!0{)c_WJ?JJi|DWZ{xI9FXGk(i0LdVyo%Qsf4t$zpwH#G*!Tgyt^>LK<#EYLH zT&jq;ph#7zpEe#bL|E0LDayxSG;>S}1x@u*3($DiE?H(28NP zz=Yt&*)KXSbsQ|8JMz@z{4uPAJH}@PsavvyT{`GN!`>Q)a2rkEK_ zr@a)`aDec4=;`=oAb6xG%Nnf_BwH5Q?>j{h(_1_=)7kLp*w5AnuX-_^ha+7R&awu# zH5H`Xso8cFf-^et{ll~*KT^x`47jrOyA|W)k_1%aV|*F;x~ggW7$Q}uJzkv$zH&%x z5aA+0$Nw}xsJPx)K!?~ReXxO?4J*EkO`l>3YIS31JQVXhnPv$r{9hTSoLD^rwEhgG zDR0u~iO;7k5RaLkk8G1DEV1=~5(b%|8PVbo1x-VXsKz-CFRaUUf*kx5_Q=66vUnh{ zR?jerIonT-ZfjaXOYzwcj?1#~A7wE26oR4_JIdPO9cA|p$Y$iuRby|p0G*xikOp_?}8uAy=j$a36%;W>sGjQrTX}e4!9!hkV&cO{Iyc^zMy|Y0AGu2 zTD-%%un7a>kcUXo_&&N~kyoYQ5Irf+*B|ZUrna=Z)o?v0CH4-=`R8y?7$54TdUEMw zrmf0lZxkY?C+*O4qHC9uD>S(cMb4a6@NAh&XPZTpoug64F)`=!#4fQ^cL}u#3ZD$Z z7e-qagcjF`Tj65x0ttQ|Wbt<9wyxG>l#t##SO!3mC^ro+$VdDGLSpR0K!Mz85`5;H z!h|XJirBBG;`uQP_ByVUse_)QeRM@rHNDvzHASn%D)v=#T^Qv7y;7^Upu)cWM`%b> zOTGqwp@yfyO!!hbofVWR(O5TRcPM2MoqY3HmWzy!DyuW1-@8efFt=mbKYVn=(xE)h z)}wru!1;4QrL(vEKs&r>WXUCs=R}kSNC2rSll^tY=!Bn(Bcs<#RQTFgdt$Kv)*=9+ z@5DTX3~{cC;ekTa@-1qF2*;^RZmO=aC&Ti$H2EGTX4bB^%MKYA6aZ84wO$|OH6;8Z zDewLH>2=qxn?i^1r(*W$+)^dBcR;hs-SB8%VdT_KbAn93C)wQiFbmV%?gu$^ZpA(X2kV z^FZA!^v&4Vx^tGJk^HQVJYwatcPD1E^Uy%NHm6+E_z^9|gsEYelL%SG;siq{t8~~( zlwIUp)*CPW2*OyIl}<#(R^w-HuU(y{bZ2rl|Lkz8BVgf>{HXA6%?Ju2wxF~sdWQJL zP$Hicqm@9rP&InpKd|Y}=8qUcS0D8@{FzdK1AAz(4UiCsi)U}5{!rrXCxFhO9XQo> zWPjrIRFI|6<$b5!2W}VWl?ET*$Syz78A$O~2xssXbfBEkU`8M@{1snhK+oxmnYyk= zT=Ym^@OfxP&BDQb`?))K6O&Ee&X$^6P62h)rmxY-_nIBvfzq)STywriBK@X(V8%#H zxzvV7(`ke8l?DIFo|<7b!9eY(+pG;eu$Q<+cYKgKVNj~Rlcdm-z4p9eB`tg5Ff%Cn z%Rkwi>dzL(_}v&uUGBWx`FO%%8P(?tMZ#AC)78T{}Iz&3?1X-V?ds>f?PY zkV*P}E0e_ih!!NYySaUA4^l9U_MjuH$(D`VRV#Ug zopPR;`p1$M`--<}DdiX*?nW!XQeIQT2R{*?!o4k@ZF^h}IC zmzs<#;g_17*v1&K``GD4{2&F$#e-YIz&)e6h%T2Bdym|@zW5K};#Rf--~=9^w$sfV zy@M^eecRP|^bcp~q~HB~7XIUwn%!p+4Ps0sY@x)Lt)gtpIUxvz@AaPdV-E-~StLIr0mQUq2%qdAwR|470 zbi1}OwS1Ic4_7$gWA$!*Lna*u-4=a?TMtGck!bNQnm<4ZZo<6Oh-wNBIxNY)Nw|Treos)=?tqk@Vc#fgQA)A*)s#niL7z+PPq{0`QEns9`ko(kG~9hujO#uKigyy zzD$G>&Rl9OmMnw45lh^(NTU0xWW1F%JMU&* z5x5s5sO(}Xih{y)_*(7{=oeKonOe*0y^f&%A~m&LCPJoaE%c~x(?iAUfDa94rDxFV z7goW&HFC-aDGpB6P;#jY*i~|3awrOcVIE=vlF-@MJk(3(5_{bq6#=A9yPi>_8UT^) zIQhFov>kMz1>6SMCGRYvcLyRVSk8H&8V8jsMV4{>_4oBGxKadtN2OH}hzMt6eb(u7 zZ~7rDZ$khKh+`Iw*0n8zo*qpQhW`HXes*ki1)$;p=%=LPvR!pc5}sGB3NLlv^;5sC zd)0`)GdIz~b~RUHdM^7-4qU4mo+qMr;OGO&9w{6UA%o@bw75a^+^-a-0&e~nN5f4J z$W6EaSkUX7>6H>uFuCr^-$mh_0qRRDY(Zgs65dH`S96zkqWQqud_;3q+dQ+4)MWbE zZ+2lwI9@^8_7l^SW#u}%UM=T~1-7X9pf^m!17-)W>sHeE?l^A>6429S?c25RxEw`H z7mJrkNaGt!m)wzY%-If0=$W!{0?A9jmP;gIVc%;e`)d;>beZ^6-Fr)1R?Lp4K(mD? z=wegxcvl9qu&;q8;K~HeRc3-&8pRhfS+YUalV`M)`P_IbN4j4F1KP&05LFn>#`KnL z+Ux-ne+GYHw<^5f-0Ith-7yxSyQZoD`FNgZ^{p?d&d zB@;B!5~*ln$wUf>s`k}6!bTQFrU70LtWTmOnX zEOSc01$%77(P30E^PoPyf%`+XID35_>HJE{;=peJ+e*?5&}f-W?%X@~DkRsXS}-+z zv}6i&Tc+?Zpf-Y0TZabW#k;%7mPG}YU2W6?8^7l7ZT$i!9}+8N_{!sc<}JiBb9#KSQ?~x0-x=7TSv)vT z-{wi#e7eWR^5k3Je?0aU*zl(u3UsYk%pt^A&(F_qIySA7-k5Rax*p`g-bCcCOLkLa7A(zjxJ5(qZ8e$lNb*~ww_y*E zw1~`1^Yma82lMu0o@V|xqn=)9*kn7{(~Td7_jLb2dxojecknEly?|y;>-<=L+AGH<0yrsHYdPmA~76Vrp2w zwASqOv}0Q7QzMHU&boew7*_7znX6=OtCZ{63tV#X_g}lG&-EHVVp(tKmHUl0&ru2- zRa&oa-&bJ)*1tLSdT;-IQLE6O{?7*QKk)^=DDI`hGkoh82!+8rfWF?gz;VSC;&jd% zP7Zit?*9@cZy>DR_a7N{84*zEDZOT}a0m;Enhx@y4X12o^qTb%*s0%?)(LUJkn2a7 zMgVX#LFZ^T^6i<^%QeMo-d5`W36!|hmz6v5JjY`?2<=szd*@&MgjX?~drM#MdLPuE z0ha^$?PX7TEh=0!k+AXmlDh~Gn-5G$l<%WyCmLVV=;~4}sk;cHGT(pO(C(T1ed}H$ zk57k*VAZPNLDKA6e_0UIw6ylfRJ`jX7iQ~yZ3Tt3hO4Y@A+_fiR!Vz*<7vn_JO$gu z@zLwkx1UNTfcALcX~j2tR>RR_qg*x^-1O3D=?J)0ecDRuEgu_S8-hudam5=|2`M4M zR-Ty%r~^y_ml|>LuL^Qq>zGj#9f1+X2b|lBdJwsIAZWHKVwAM{=1z_bHP&?Iicm^< zwf--^I`L5Ss8v(N1v{O?Y(kKOTx3`-oqxccE9#M4PiDRLG3&;JrHfE}zhp5w3E<`o zSzBHSwim?e`e#9c9i$)=X--`=O$d8waF_=Jtzl|G!mNf;K-`}@%HZ}WG|BSSWefYU z#Q%)xASV6S^-{(J%+mD6CpcSv8Fr~E%CwsOCzFx)wuU5qazHZBe=_L}pg*kSdh zcoS0AHS0y$F6Tx5d@oBxyZPGDtQ*Y^o74>|IcL#sdH%+;W?C(PUi_Nj`{?J_CK9)g zEMcu-H#zN9@7QS4k9=eZ?_J$#Yc;taJl+w3pC6u&^D?=hNE5uI(QiGH74K?}3B8!- zs1jm>#KqZSWxnsMakHn+USn#w(K4e-JXC3wfdI(pzT$XuM5^Wc=p=!sOr0+Fbo;&K zSjg8^XUUW#fqzzn9q;XrS4-(kmc&OvANBwYid{0x3*ez?-Wx!;Mz4P0sV*)x*>@;i z@?rq&HXLIRfibRe0azi(93|DC}$ zN7kOYHWY+!m?G zD}TRRPJxd?MxXe*@(^XS4nCV9Jm|~@wWXEl+7B0hsr7+OK(ymnZi-F3H;6fy#6`;K z1XCq!;H_zNOo4&4o{fr`zAlRZJCr*>rf@Xt%^zv|X<-%EivRjvytWS%+BGCDU)|OX zqCE!dw0jmxQ6BnM3CnIog@h!*mfR{oxnvGgh4Vf&aPk*`_kYS_rqO&4ht(o)nchDS^=} z4*im-9Y;r_N@msZR!suf^Ng=?G}XL#Yh&ETNjU(`+@V)P?Vy|~=_z8Lx(^ugX@Rb; z#XGGsFR)SLV$s>Imni*5{h5GcBL`6hKj9@BOQMq+jB4lB0f=T8Q#2#49ILL5w)NmC zHC_?1%9wgsqv-T*ihpd{$_r$f4~2Ci?Mr*B#qqCH1gL-YSMW97pVp$c80fohpCX`} zV6~JS@@UU|3Ajx)`Hh5EpU}ab%jSLdTq}dt`QGe4Re?F5`%VGrZ>Xr_IS=>j{9RtD-K(8F6}@q} zL0>1fK!2-lg>=S$Ur_0Sxi)&9DCj_K=B~F`_^c;II7Krt5K=m?*+7Bt`9PMP+l--! zz`2>&Cb86(D6yEMBe672H4_O4N(@@(hXxrU1kZDyUo6L)qvpq(BVOj+BVK0u6D-F) zu`+k%-R^&+Q83MV#)N1v}dCZH{rJ|BoZC1qX&;;gb_iZ z)4rqIyZI)SU1f?XTa@)L^pby&>Jeuk-trPbCaJ5j&47M?FxLFKtGdb}@T8I14dQ?U z^*n(PY2~jJQGbxup0F}N>s%OpTh>;+G~o|S6PM{~+Ezu6_UmKCO6=c(dK^+W(@M>) z#iBf>J1eb^+EWJ|c#53b2&7Dh^iaa~J0KMrMII-gM5+yTz2`JKUjC-y{}8B4WeVJ9 z&(gSVUZnsymms%pnmQ_?GE-@6Qz0NhCR9z7q!&IRv;fST$+sKJ`N5!hum|PxYQZ)A23$ z_DNy-CD(@(0Xg*hY3-2>z3YD@-m*aJJ~LcSSdk4^I#&qbAA@)fOtYJq za-|u~l*EU^rva!lS+t&Ei_)Sg1gtr1@l{~0j!{b?JplQ~25 zPN;Y?OI0$TKM}h4g}RDEW6l)n0{0Sxta=lKj=S0L;cbu?>J+oh+3$pX7Ndl=|N4h3B(y2ctx~QOA=7H$PJ3BB0Yc4`83Bm?gpU(IZ%a z-Vz7MMs<+-IP4Yu`0SoSo%vouiuS>2n?m#nkY5B{ z{1$Mxs6AG<$9XLa=K{tl>LiYdXM%>!tY=2glxHGIlxIRocAIZg@mUt3f;aF9=cEY= zbdf5ptt{Z|CZeEs(&WRJE04ckPR~Z(YGuL-$*|oNqpk3GHrDXZhTDXz@J#jgU=IAIFxeit1i z)Ouku9IVgu1GM4Ngu3<`k*V{2S-V@+p&HFmp!jtI0>)RwK3h7}D}xT9ozA zQ7n5^0qy#jO&&yy6N1JAh}UR3_Xg^wIMx~giBV**#HzNKoR{Dlj#B|qm4UBgM!!NH z$Sv{dPytv|^f())sH5dv)m{c38`nct&MgL*PP4nCLkjOyUEPpBy_A%n31VhrkqpjI zd{ps(mxwP}G!@DP0vZ9vSO&Tb3ZwTN9C?#e5s9F9MJS|sLZ2aT3~y$arF*7^Ow=|G zaUw%ktfPKy?|;R%wRy?m6$t(3&nzy;5!O{^ zy%&AE%Tv=0oK)DK5Y}S;<8v4r(C4>>Lfnbkne#KQ%($nTToyESF*iwq*|&$UG*x{o zp1lE?$aLA7d6}eZWFEZ0mKJPXfnz5^W`kO^jc-dEW$jbE7k^^Z118@|^ti2Uy9I#1 z?>)Vfw#gIr?1MXoPYg=jWL=2 zK6xU%-(U6{8&d}+d$T<)dX=T!xNqeDmWn$^n^HIsAy;`kJ4T7!E0HqPZ`IgS-JrYI z`sQiR?7p2~-ZlfCO>j)bj(HlIsh3Hn%^XeH-AN`t>tqtmyTD#&0YX(L22o=b_|1Ox z&oJUzA&;NFI3BocA^R8>!a;JYqAZO)`#a5bp619lQ;%Y0P)d+!V(6SKEWy^$X9g`q z*6w9pMd1i1KF}hq@0s5(VUq*#=JOH%8K)N&APK3;ahDog{)1g}R+H`*Eu1EhsluM+ zlB+G;S|x^@a6AbJHmHDAgGR4)Oqe<+F_E^V7ztpAu=EpXrGIg)8c`b_^@-+!>jbCM zAiK`nV{MOQSX72LRnXJLuRa!glTBs4e(hL^a7@9aAxiBv{We0QN4nx z(*u8z3;tV`Cosrzezn@&e6?xvr5#re9Zgqnxa9F_2O70ibh&y?B4^gVV6uM4zFI3u{(1U~D(rGhN03#n0fkdxuKsiS%ME~;i78Q3 z{M5UuM!j9xI{l$(i_16s;Xne0Uak@cx1Y@w02}sHz~T>r1b#~9BF)C3J7cJD4fcJf zpT*R{tk~!o?D=dByTag1rECHIl6Kg6|DivE>zvJw=N}^U+fGA07eD@{M}T4X4TJz| z`}Wdz7T-9)_bY{dk~V(6Hr>;6us|ds!3)=g$J_?Gbx&3 zE!O~rXkXoZ4~2#qe)XqawTG;*Zw$*}2MyYJ3_xG331b<*8dt3$O~c%?mirgmLKZ}a z0Ef%bggSG15c}-A?>hDxTh3s(k+1cEijFA~YqaOo>)J~qJ(6!uczn-xg{3ij05;v2 z9}2URgfcU?H$26v3Lj5Q_0Z*OZe(HDxKXE!=lNZUp!QrTo1_```cx8+KQ)%XU_;=4 z3d{wj;BV-(F$U~>fSdCK1G&1EsCO8JNJCALKi^5TD+^$C$bw6rTr#X$g$j$8P;&om zw`YmpkjL#? z7*1vBtj455^hm#3mMuZREnN69@MXy3H;}c+K8dxvx~$%w$iWKqD0O-tyfbCs#YQMg zX;t=sm6Vib6+Ud>cw**-ri~uUBQg+H{&IP1M|H=c8bW{2NmO>zrK#$dYGmCUy|$N0I%B@w{X!<6WPa4H1Wy_7>v zPdL5$Ib~m=PTro2Be814vz&V(W~|ehgc&LhRyIW{)+q^`D?->j+zS)V|9;KDtq)P2ss3!HeQg zY?WaL#WF5l8TdJj2?C$nJev#3$wf|K<$MJ%OssUwq^urKrL##X>2og$Yy2n-2=ufE zKQvYt>J3M~;PUa{xNj9v#S)-5Zaqhn($X6xO%DE+MU&JuN{FUw_Qh|7*lf|aapVV_ ztTwxsnwFa%sm5xkYJ}uB{`)dKt+Ny95@j6c{cu=Fw_745A5* zH7|g%Yi=e(A3kjBvTth~Aj*HT=wG72qlRto_=T^U9?~6-cT9>{mSaa7X@9_S{5!

yrr<^`x|Z1`#!bX)yq2bxsA6&8A30^>10z->>XTv)bBok}|u3kA{11&S^|lJ6=(Wd;Q(dq~Wxt#Hg~FA*nCFT6QB`Ir>lvfMowq{U_a%IyTzuOSp zs-Tf=7Qc46*9f6sFz^--C89r%{KsFaiiaQBzQ*F4X7KOEn!oI=RtL77*$>^f1c0EP%0y3QDJ9xEcrfr@ec+QZKBq}vL27eX8PFe zDeRcMzJ|=pjLMSz)nv7>jN4EBs9+Wacg|vW6zf!Wbs?hZJ@LebaQA6mWJw?Xp0J^D z_~JE@Lioh_Ze`Ij@6`tegWVI4&QMw`T?#VtBAU@u3p@(9btU6+?|{-ztvpkGK;zT-I4BFg2e zF%APg;m`J!zhGlgNULCcaeg66g;5rRGWR~>QnMxTqZ^&)8k?$QH?R`X!ESyF?fGa! zjbGKD7E_JBm+@fxP}A)TdSV0T!fI+8BK~x!gKR?yE`J5wr7dEEc$ zm5pebuG_GR!wV&cP%dm@h7r?v#A|t7qM~h_B&$9r#~$inGzSUzE{a_m*JmIc$sGm#_jKowj+Tr;F*qW^T86i#@lM*=D03TPJwl zn}nBdbh=%ALD4qXR4Mso=#IpOOrwx{;cseOSj~Q&J>bLJGco$HbAyju6|Y{SVIN>itJKxxVzljrcsv3n{?guxo~)X^su}f1Fo- zzv9XH$qJ1lYS?|V?an!=_!)3PY~MT261&KV_{XhW!#kP9*7aEVS;M6jR?vG+mRu?K zm5@qoX)E0x99&Hhc&u`QNu$W(y5R-iUta`^97kN;(M$xdcUvEIvvP`tT!U!3V`X@c zv%q2jb;R(V;IWvH>n{(@#BT+bz~FcMehp91cr=nKHq5|OgM_Jco-W%ekPEcSwd`)& z`B655eBi^palUeG@6TQ%c|V|3P9c^9#1%Y0<4ZIqSoRX4L2~YoYb_Gj1|#sXJSfU9 zP@6J-JxKe*s5DVm_Mlg1d9>>z_#7WDnJ1 zie}(}HA@9u-3y-=#e!JVW}?Ray#rzIrzoskv)#s?Ij`H_s(WN_CSkFsHA`NvE}FPr ztsUwWX7?%`=FpxU>+P$f7HF?$i3R50*d^0d)(VqKTa($6qe~YhtqL(_B7RB&be1;a z>pE7p+NL@+mJ(Sb=b{1g-zQ;=`y_*N0Nnt`6IcS5n_n$a5iji67)X{A8+JVYaF&*j z2E3dWZ0)hl@)60qylEPAB`>{!)22y)O+(z?EtHixa+Tb#*g5>T0v@&7k*BXMKNvoA z)-r0&Pivj}`~T8!|29fWIsh4o+c6QT?>e0ODnHA#Pgz2z=Tm|adI|q$&8IsApk5P4 zJs7Wr+QXJ_?E=fFc3!g!VqNh?XDaMK29Qa^v4!_4cJ+^K@d)v;9+UYFyGpS)efe}{ zEZCuQ-TV<3s_t9zZBzEu`j2_;>*sn>r~-M96;5#dqpJL+Zy|bg3B)iQ+8$HXcZn4V zoUESt@T|`7kHMWHgZF`8&dgwe<U> zIHyke&6HjMK%u>jOqG#+Hw*TEtUhdytk3MO)lP?2y!%y2&BTK2fM6#MJ%V2)^j4b(BK?43tc)#@k|G`7rfCrzrz6ouoL)m5%?Pe?K=PT_L zYc2K0288sqN3g$xM%rWd8{kHZxz<*W;O%r6I^1ycT&txxPfugI{|*X)6GgPiV56<`)_^MM_zLKl!;lK=J^y0 zdxX=dE`5fMsunm_9^Tr!8~VJh^~z_|OK8v_in}ST4{jrag{8nKRhiGxXMnWq8$dybu1h<4tAoPrsqI6|HV3BsQF2NbSE z?Q{y8ha7jl*Z&nO7`gNHUGt-!kSJ1Gkub~bW0fzRBKSmD$LF50WJXTDi2MW9{E(KE zhusq}We;`z(7oruH+rE*C@;xRiq9AqDI{ez-U~sqHwuE);)x^y*+EmOq)Rq6T&_QZ zvybR`yrmhkUOBG(!b>B)aArMfTMkD}^i)}5#8r%%+J}4LTI(wED#qZe_+L5>N3meYRd1zxNR`g)?*fYC(h&` zu`$=VE$Vw=$o{T4S2O{;IoGdthcRel=~W+EH1WDUEd$CgXnJIY*n0jB3Rh4#BR_>y zCv*XFb2X=pnkS6cF1h87L^spxd*%2{Ucjc~amXWqET^3j0)!wSVsafXvq%={JhlwpelzbVN_e>{js?(qbwWmSEGD$>3&{wXt|=)*<{8clRq};iH(3js#Frm_itU{dzB$yODs{ z&wvMEwI9{FK$Mgxf|}yj1gN_hzO{M&(Sk8BHiKNnL0>R1#Z-$(dZO(kyzk*Fak34w zvtTmcJ4@Eipv2RW=od>AbHVW5NUQr)B0F*K?{Rg9paT@BRMfkppQ3KY>+IQ}K=Df2 z^Is`Edp`bi#{@pARO=fx6bt^hybxn%P~LsV1WB9Ao=qCGkY3}`u!-F@_-^_TbUQ^? zx}-CtWtoXcYStjg%>m$!x=);dQ;M)CN=dh)6 z6Jb!4q1nwhkmPoX$1&}oijnn1_x!&07H`YBv@&7|d?9&fa^6-r{VTcfKo;4St4Y-2 zd+x#4?St7)GW0o#ow&>@zs!$SY8iy_3h24qVv%WVd0%0B>xpEf;9Rm?K9@^xz(i1( z`E&~cl=kG-yotor#;ak_8;zZW(K6%=T{opa%HxprQs>T)QxLO4CU+>l`n#lezZDgI zutx3J>I=b5a;Px=(z)4W*W#k;TN->|h2(v;On|Q5D;)jEU8`&ep9{ykLhajcWi)nI zn+sfDtnkSmwseSyaEv!z|AkAzsaAC_N@NRHZ@u`-(so3hO{*OF(yJ&pg(c?Gz1T^H zJ}vgsaG?QI*247v4^i=2KoU&bsFd=r`^euv1)kx0Yx4aA=G8E#Z88l*Mv3K%pcui; z6=EoIpS954Zw3*}CB37MTJM5cI-{h?M>sX>mZf68IV0Q9p>r?vwobawaYSbwb>&fy-^H@$Z_{i74{B%mh-JU~@78AX zBxUzYnHRTNPc|KUpgh)lZRF6fd$%SqQ@0Wz77Fpd5444tgq(_7P9uVgB?{uNS_bx| zNK$GsY?_xDrd#)?Y=Yh?eAW)->nCDSOTI&S!Emo*L&Ge=AnzrNo3BinF|%xuAiOMW zY}RVQm}pzr?UK8xY|;EKPz1>0wzR4^B<%D}?@UqD{m7UpxwD$sS+EhhnzT^JEJtq< z)Ea^Nh@EdE*Q$!!T(Ph^s@j~Bau0L!aTF(-e;%s6d(?=MF81j{D&pySZoQg-EPuX@ z*+Wu7J3UNHS8Btn?OOj?%*WAktp5km2+}GRQJkIQjV}>WL?NpPONCY22Tl*#USKQJ z^?yOtw|y@Wb18|fRqD}jx<5th|5PcrJG{p8t1@u>1@1HNfasOF`=pdP0H067O2?K%#!(q2+EGmOGATzPiwTwIf{9?-}rX{ zMW8`2ndQf6*{tsGtoJ390T3C=>8Ut+>j&a>f(3GY6wtmqoEFlp3orr3N^&t%KlH!ir@2M7d zIhZU9LOoP0Q>EKtPVtn}coo@MAgVPU&q-*GvPS5Nx}3g~a}e8@%#cfOxl9hn18?(*^oE&m}!+ZSI~S zWv*05A=J!yShf3n+2>v(!~DFOCwTX~$xaj;w^k%ZQ6?4W6rOPD8JgFdT@n)5nD}MKckGb8qDcBcg-HC;_4K z6|&wgH|my4L*;a8wU>x_`zO0odw6=_^LIrYVk-qWmwIli4{bR^;oxiWy}+qZ6d$tD zhfTyMScu8--$yQ>AZ{iMBgUYs;Nki-=BqZy?|jlF~%|~i5Dkc^w>Y)+vF?I$4*Obb6~C^UK&16 zsu?r`zAw|WUD?x03FA{uk!A3x0^`j*Z{o~w7DP1Pl_KeXd9$I-gyGjun{JImNGhZaKIbhj9djTz~o@EMHD8I9k+-rH~ zkGY#oYkq?>h zpay9guCJ4nUFlJ72aYPf>;4JIJtHDG&%TPN%WPg559m#=KaXD2IjX#0;PV&tPw@)o z;PG1)a*pCvT5wD4Z-R53t}rBKHurBSUJ6Y)3lxYm;$Y&Y*+~5?@G_Uk6 zTEo=6H9=Bacg=r-!Yd!A&uZb&E=iE_ct1%0w+t4d@{ux8PZ( z!1#+vd#jA*?g)aq6!%;HILP7}noi&f`I}F6zolc;D9O{K*Yd`pMQI{YaniB%(?Nc? zmVNU-h#(xT(zbuP8^d7(Q^vWU3O^q(yqNyC6y5r4h}8TcQw?g^b;9a*7~J?z^kBk` z(@)r1ML({T@QJ?caodFj5dIb8pgBtM_up;Tcv5_{xpXn6RAWG4Q@*pe-PE$BBHw9M zNdq%K^BjD%m-qcARj#{J;^!4Rrf>Uix1`<# z%QPrui+R$clGU+hFCyr=`9vVAc_T)n@uIs7xH~_uYT~pvi&LX?@F=@UqHS&DGzplh znL?t)jC=cOXLiuU3#A}mcz@?{8hbw>3Q!uqaKk+1JwL*X>zv(gvN|8?0GSuCCUNE3 z24IUu7+&pXJvTJD$b@j8TbdXWbB)PTF|-ViRcS#*hvQ{BD;lC7Ik!Mes`CsJY_$eR zC0=J8)Lx}0CAjVkqxYM9!`ZFN!q-jA#$rH2v)~{b9~EB9X=cWKQD)aL`6f8e>564y zR^#v#E1nkb`JA~kUM40dUo*i={ph`AC=uQHDjYcO>eIyCc-N!pzUS#>$3 zd9mz2&^iyF@j+W(gt!;z)=5P;63v%2-NZAH(D2-yiM2|2hdbgeZ|rr}T_Z=8Wohc$ zx6zKrv#oo+m6yVu7lzh-hpf#_>-djqP4bUwS*z_@l-3g!KiIW?y2}rrv}^vS23TmU z1!%aZ-Q45Qs651%k?gkRti!NidHTkGnLC-flI6eh?@#dx-GF@mpvi#WZ~Kv3v#BoW z8uz8IlyW}Hi&x%pud~Zn>Ym|Y8F@1uqmd52{kx5Ny7wv}KR>*SXs&;a5FIA6m-nrQ zNvggV8hPs*_8fTJ3q1%Ds>IO)yKQ>8isv$DwL`{$5dRfO@nyJ#4-S(;Lb-rCN@-3%U0T>l<{AOI*##*TK#5709$HnyNh5 z5aN*V9O&F`E3`uXA_@BjOU_pinm3u;$Qx$~)v`2<;VH98)4TTYzn9_G!jvY$0ScJf zT@vH_@x&*99-_{3OP}jyownMvVvO0(`=ZPi-|k2zPC@UzHwGL_8pGq)3TCbtz5IRg z&RioVjA`MBs8eRQ97o00kej=4<6uP^1Z-U>uD&Hpbho#bY<(zdg-K|#69gp?$#Irn ztq55iiS$=5_NG*>lg8E3n19cq>h1PY;l2Ahv(<$=W#aoglR{O{|AIj+#+?6C*aAz9FmcrP;CEarj(WOCeL4a@J*sBpcKuAeDKh^%UXTlj^*^Xxc0zJm~H*LQuJAi9Ja%z)f8}6?Hub_9SHT~i9on*=1qGX z#kxEUUcI0)yRD^Dn)CXe@^qw9iPGbAvuVHWJl-5QyJVdXK1*kXn85NNoX<17j$=D7 z{jH8NtnFG+@qE*nl}H$Ep4}0_RM=*uKxW0k6mKmnBeG=MuJt+s_ka-z8&uWxM!f-z zh;E<>Jjnbu_&f0yHah(TNGrFW938Zdh%`BHeVKN9a#*i|Ihfw5x`P38E{N}p=gTH4 z56Fk-OUJQhOPz7{$3lleY;wp*V?I^c9yaHhauTV-JpXoBD^&XADCTGq>qVSwuicy* zAgeHN4x3yoE0e$<0LlO9rC^7D6{j)IViP9t0j3Qf|M-dNH^zK^fHHPCr0mbaMgz=2Xf!TG;#_*O{pOf(MM7AgVeGx zp=TaS5Pm7XYJ$0+b)heiKUwtUp+VQCA^Qr&`6AjS5*MW1()JUMehg5g#yIrif!ixY zeEkC+{DAkLp8pypQL#~>PwEbkcPXn?F)^zw!%jAK2cp}>)KWv$%5x?l`zw8NdafWosxWIZA!I* z*}2K^1SZb7MPq2Xc0Iir{ljSbuoBh5?l0_@5!hSCwS6p;Pa{}1k|eyh@_37?p=+E# zM-OztXu!Fssd#7nI&1TyiUjEf-So@CbaV%+&T>Z8+z$bWY1AVo36z%n<532$xE)R( zwk}m?RZv`pUOZT@r8Y$#YO;y>r_`>kuK06p5N)CB)xhpvU2$AFh%l zb7WGUIz#G<6}ye55cNr-CXE}NPuyDTLt@9b{9u?^w6yitR1Ia1r*UzVlBV9z5+0M2 zvz%3H;Q+{fnC)oVZY>fENZl~-mLn8Fc>zd#0rmiIUb8u+ExXxa$WztwgCT~IMIS6* z=G5vuo#kvhzCv*RF*C7Dy&Nl#5=+scUW(flo(K)?qov{2Q=NvZl~Cb2pn=e5hU@Ft zL5TlWZ0tfaMw(J{=g@ov$H?a@;wjt&w&{;ieS&OL;MUA)@$AOh2smrH!46^;(+IR( zvr}+_wPVHEh8r4X6!< zUPp<~gMoXup8J1+UZt-E8}(lK&%bG1bp2XEae+cKiuu;~w$tk|-wE)Hos_DB122|++7FvJXZ*3V{O9&9=e!0E zEXa80B|HhM$yd>(1l{G1=OrPHynt0b2U4E^CF2Sn)yqcHGYb`AT zWYqtmPaiGOr)$xLkW=xRzHo}`|zC4q3uFqviv~!T(ZVsvn>gWq5rz| zff{St|JEg9*lg1E_gf2MKOH3< zp8b!6UL645ngxoFHoj>raXCjVw!-E>s}Z(1Ttap?2_%yO}+M9ExPm z2@o!{1fOU7uL%=M)!-1@>)3hA82y+VLe$St*AI&Y-iFrwjqiw*|IYVS+F6;|`I`m9 z6U`VZdCiolCB&0#Qf~lr$v1Jn3ZOy_bX>YhO)4Q=wddt_a6*wTc!ktw#ANlWrBZPT@!9g}SzN^H)Qp!XY`5)PPDtI!+FuT1LuHhnHVZ`K&v?oTjwh1hxy z){d(v>q7Z&?HtJMH{C~5=^R$=uGvqew{;KjPU|_}2p7SZK4<7IWyi0!_-E18(SWqm zG00!rK-!B^!62SXn8t<2!otf&+C1uXx-${af|xk~pUhw-me8 zh;H0Z-{l_&b*nO!mG2?NoN*yS98u0{)o6$3i~a-cB5)y>%g4Pm%^N!bB$W6E_h|U6 z-=&a9moP%jUOOP!}Roc+mxgCg|RYmJwPRx`brSZ%ZbL`9luimVaq}O{T9Tcdb)~ALe zZZ2?Ay%FOxbtz?5!=`tkyoO$9TFU+~P;skTY;jrr&6PDmNzC<*Bdwc1T)^S;$Vqqc zOmk*Sfr`t)l31n~cw~@-^Llf$2&2ObkZ+`JI!%5gKvRx})n_US%=)VDjN506*fn^j zl_VWjo+8CALP6Bc*U{^BG|pRxbR)|?LxDc3f?j(MeaaTB7H3)6guF9_&?>xM)6QbvNE%`smp_8A?Ch4o!T zz$JKVG$3nU@wWBzWrp?s>vaQ1F^n9oTfpet9$e4wK!~+e+`NCYfUWT?*^7jl=k)eb ze!Ac9t_i%W!>&iIqW53nkfrUo&P!7N<5x7)_1$R6fXl_LmX#vujoY> zek@FKxoAlB6SI86DG=n1tt|dD0HT9(3XC@`by(9RRowQ<7wd`#5J{+*Pb3miiu#4^ z;nAGzZ0j8KPwJ$%oJQlyMe(|!XoLK2-VhS+g#~iH*EEbn}=kb>~C-1-mX1vYxW(p z%4zlP=4^WwdJozp&um#c>D*3lzWe$p$+7ZoUxuGbth@0S)2!!>=sd@w#e9Oue!WZD zfn*b*QEPXpqQDGjR~XGaSTLBu9aQfqKaM_@_d+dd}1kzp|BfJ?B z8iV1}hgOqwev;^GvrhjWdy$Swv4RwzD_TXYlXAUFQ7q^aUPE$Jv5SMm+X4+ zZe4YGd!7LA3OVD4P@;k+LxT@b#BstpDoAA0WP?ObVj37MzXxT)F>kL->22N1z%$ z%||Z{dZK=EmWhZ-OM@?cHDmGSdCc<*4*5Of(KcFnx!OectXpq3Ahv3;JK5}o2No268$4iM zyYbCbi(PD|XT7_6%|p=Hr}Bb{lRaWUlD%awvUz#Fryf3#eC`L%kFvMg%FQmGua6+u zR&l;t5<3+0>p3WZH{7l;KP_D{Yfof!v2~osYA5Crk7#l~nMlNCo39U|@i;VH zhvL{Zc?OhNb5@}?Y_Pq&9TpI*SK&b;aWFdwdlanevqNtS$+X-Y1F;GD>hoz99EtVk zX7pbB&#NQUsG3l3&G{)eig2G^nN6t6I*Rv@7({Wqqvc!Y{SxKTBfRIoWvr+gI&L)u zbiMCi6>&&d9MtsMHQy`k2w{DHW1k+Ft*YL;v$!3M=ef{e>FvO3O zZ~y39Q*+%>6tEB`kMOe(1;_+kESW{?Qs)*gd*~#L)0AUsN7dm2QmJu{Z$3LSYJYiOG5CDpG8$t~6D z{VE%$#&&e+&QssrBX_5n!oT~7ztpI&y;DR8yeTR`y|6wNS72BVf>6mpj_-y-KYSq6 zNG5@gdh8`jfGE@W*-Ve_htmaHAp}f#E+<3WQR%`1nRHKQ%0aAEB*R-(WfFNuE3Ie# z1t}0&zrG!m3Agnu?Uch}SJYkFOsnN{ktz6k-#2B$7UzTl)vVLAZq`F_Fjn#63A(OQ zQn)*s_rvmr^m*cr3ZhoiP+8m{l%e+iV*5?NQ@vVqk<%&r&r`4(C6k7*6jp6mY6Xy? zYO2(9BxrbOu{pd!Y)~JOueR9sPy9 za75VHRsSf76uj~Rs~$`T#%zbgoznuXk5KD@!Ntv2KM+Y-><$=klZEajg{0x{V2Iide(}YxH zKXu?$+F3W!x%#{)f5Seb(0Pe7|Nj8e6SZdPqx!GZApGA_1C{t1U~E8Y<3Oc{;@$A=loltSBRZ9$2$Vxns#w9W?iH;iBAVo-*5Y10o3VrEw8;#%2Wl*ga;wP_U z`(Tj@CDDjLfU%hlVE`o)oZusj{cjJY2l;)kNIOJo6D}inqJ%1+5-SVTG?&qKEAiP1 zn}#|FXw`_7%bouwhYnrChDum!A;>7@WvV8g>7p?jIXe%-MCvYsfDn(rS3+^Tb;cYzbg!!1+|*@ext(TK0Hl<Is=zlKD`(!F{tAqh$CYE=7@;TaVKEWc;y`L2a^p_!hU< zs$I5_l3wLk=wKqR*EK}RxZ*psXo|~i_(^`r@<4Uu{FUh)KV!-4z$NQ6x9Nd9qrF&H z{3DX9)h>2_L9e8KrXw!-u}~2pcn&HuBnnbxA1lgLPBQi$faqjaTmjRFL%I3)4|n{xCjLttPrUz=O?xkkbY$?K zSpQ(b44tI^1}+6fC&^YTMDlIao})SJwwAFqsF zcDSul2fM!>tFR3X+I7 zO5b@4l}j^oy*u9zgyiPD4TE*OXOS^5`1vcZqsyn{c?4;EPaO?W<(HGsQ=I6`5?kx4 zt={LpVld7YB&e`#=w~rk=0NP<p@kn2%d`!(Glq0w2<#= zj=qBD37+}&${phkZgFm&Bex}BmoN$a#j7q#eZ6fX%_fda!iP4?7sX8zNj?yq1@8K} zdNl6w#YCL??%neJG1a=2idDzLE*6gE!-jXxLUD;@79EvD5hk~ECY**H)8YOWx2fkt zGoXm;0teV>>PX93@+?+qpckaJ(!swCv#&|0t9G!(&cu6UoRw48{hCa%RMdPm&w8ls z>PG_!HMg96wz1~`+q-V*42};6x0?B(DCl+;*QTKXi`#fguaf9p$nyef?)we%R`K)b zih@k8tqrwMD0~_`K6s)%g2FI^V|4_gM~teN49Qr?apF-$pw+nqj?>pP>_lq_-RmeBJ+V zrsO|CrT?R8{u_L2cE{~k!G)H78DBrQ@Q&Qb*MC3Ygk9#$ul=p)Cy#&rm;+fgJej)- zpwm(}3JUD8YfAlO&v86zxRF;Qm^qc>=^eUh{MZ?5n_Pp3vSG`y9eRmPcd){S<+hwow60tlq`2b(+qXm6nApI1Aoe`m2HWV!{Tg;RdQ=s658(+$pjoo*L%P{<#=h((*AsCUNW8pa=4moUAN8+m*T?C zygTt+DN7>oGUy^d&*Sln7UKb$NDwc{_$9&l~@f~Uoha~%~R$$}6 zvdCf_c(U6)882K6z;}16iBQV$y-+vcIUk~9%+MZ(+UNPViCyb{s_s2JK5q?=n01e+ zNW(ihNPOhWI_JoLu$?xHo=>c!+DbEGBCT3~{fqx_Jq|E`Wr2DjJ7h4#gp#G0D z3S{P>5{KMp$pXUyZ$D7Tq^JzIh-r~9svD#$8JUW@327sFlqU1ZpciD5T1ZDLpk`}$ z;&*=D8Xft+S`=H(I6@0NveTw+1@&F*KWyr1Y1TCO86#k>k1U^i^X$J7G`p>kJ^!7J z_uKwOhb<1%EOjXSjeM$R0Gupz8o!tkz&@tXzZ?Z~hOtx@>Eq87lNL!<#Q2l)<!cvftI6Zr>>=X+apTuqAFmZ}~UzmJ0PS7DwFd&am%Ph!)D#?|x zh}|J^Ujn&~jjJLb;yNH%7bgK-ntD6g^l%xkn0lSOHR=Q(C~;QXd#0!pNlrkX{G?9a zsA1AaTPb1ontn4AZsVALB4^qhL5xS|?0Kr1uUdSP#tIyXj$RgTF1DZh^7{W>MXYQ! z*DQ}sy!asvaBPs8(rphn&vs1|EbWN{iI@qK3N*D+KKk1T3+1K6e;`z!C`g_1F! zVuVj=ygMRJApm8O%OA{0L#Si{4L52?lQC@bxivMaB~{I@?^4e3bhvaPLStx5Mglea zz1z3-^P68XBHl}qt@wTnG9vD~3O%JWzjtVKP^k27UqKK@KLI}`z_ zu=8I>zPv&Hzr=rSu4hlSNJO99xAfT+cBXH2CnPDkv?%?_Hi7@gGmMoWIcebhTo9W!OjzicoFyrJ>_5eIgO?WSM@wn zXxK{ylZdqVcvvY8zq!B~n;15Vo+KDtAeNCj8mDCPzF}9gl?!`WqC&ZnHDajiQyA|r zD9iYmzWq;=U!iz6OkDMR-g;`XUkZ~apej3-O#pB*XOL=)sZt_)C2 z4j4jJlfCXMM(M25efp|FkQ8t2ogunxtQmdx6&g0OU_AguD+#-YJ2$DEcEb)L(l6;~ zRIk6iAz(b7jqi_0=Ls}j2KSabn_s)0(90@k^;lO~@$LsRpIxuvASHaWa_&nAFG_!v zSA@}`X2X4^<0do|y_JPRW%ML>>p_|oR|{Q?HJov%b?d77;%@!2=f>4cU&nu%%Bme~+wtSeAqerR$oM;Zvq(8}x8NFbL= zQ03Go;3Lz1XJC+Klh3c1B85-^WyUQ9av(n0$C<&rcZ}Gy3Wti2Kbd>lgb0fMn{xdaL0ge#TqHB81 zs&DxU(5=SzBBf@roUE~E(|`Too9E(3AP+!2mg(zI?q`F9IYPxZ(zeHo$wc_!D zRPZfi$**b$!4%$;$c9X-gxdDy=kv!^hH0^|_{C%KuA8o)@BUZ69x8X6DMoYSS0PVY zY^v`-ngX*u8(mp#NP43r5A0MP%J#OwuoTe?vwz*rMO!l z6fXo1?oL~ZyGsHT3y|PWv9>_4BE=nw6o(dRar$P@oHO&zTyw5#KJ$eS&p&Ied;RWv zl{SQcHRKR{*(0as(BQcrCpjb`QZ}T*Sz|W$```G?KV&J>%{6*#nr^!r_uh`eO`5!^ zJ`*u)mY0;9cYf*S$w%f>Hy^-2uPP8MX`Bd#lpLa(y=>8->bQpaY{wLNX+S|}~HC=wC(*>srO zjj!w^-~Kx6oDfR|AF+P-W~*g7jZ0QBL|@YLYA8oo##o4~?pvwVs5UxdyFYLL<9?%! zMhh|AwlBl>sZq#>s-f+Ft;GLfIw=jpw+-O8WjEngi!Tx9eRJAri;A1PcPgXgG_Xi{ z?%R?+EFzrAjXezVF=V6R(v3y%j4B|;l_JNV&e9<@#Pl&Qk$a#FR@Q}UaSqa&-gpQ^ zF1Csk7y)L}sLE;UBUh;>=}BDAN?{6WO{yu|vuUjT-W2Tn$}e@JcyViiPvAxXEh($G z<5Cz>v`gp(R29N1Wix$=w1-xejcQ?dzX^-_exF`9kjC9FwpC=tC4pnM91`b^Eg~ZI zDE_GoAS0sf>2lT|%d>xUCOrj_hGW{<5^<@#d;SgK=>^9sp((xN!uLW2Wf}ar(K?P(?454LzdbVaGm1^YX;dXg_1{54<=Ek>SUkQ?E=}dc2W&%s8MnCu;^C4 z=+a3(uRcF*tbH2UYu4`EQ-X8{ZTsP6q*fj<6-T(+VR$1@>t%g{#KA0%t5rX2MvDs8 zV$Uxu>SF)v*NQ@L&U;s?sTLQ9#cc+ymAZT;QCEj3^J` z_?h=ZkWK;&5|)baTof$|dvb-AwCc^gkA~1sS1o;pI;fP*)Qxr0K3hLIcNBEz6*Uqt ze2dhFbahux*Y++Gw2m?*_rAOIWAFb-e!(0g;!fQiK`iYl-^M572@585&~G7N$xv!{F6H@JI~%R$vLSh2Y9@q@T~wTuPhW8-&D?|R;cNVyZ1INW~>ewkQYsEf54XDBBMB|gT{$L# z*FsJPaN|#%ebS?4{gCeMze|JvS*vF2z|_@cL(WGujKEw|Sh`xE8w*8X9BIS`#^Iuu zx>q>jP$U9~g49~NeonJNYBhq=?aD=$THErCM^4 z6LD`AQ>nE%CwRQeu8}Gj6wQ6o?-T75MR1jnKNLe|%^cUZoD^$&ocA5zvJ6oq4A4}- zDhNFV{&N3Jv@`sTkGYBi+izSB_m zWnMj0+Gr$IAJ%5!mW%9rz@#22+o^z~VU{6~p#t&5jzug4XnLy=$2}WjDdKt?5w6ww z2trr?F6|F(J}uT(q2&Ela1%bX_~Ps8^o4V2%PZFJi6QTZ2116**ItdzbFTsHCyiBf zFZ0GZ6YQrWp3z(#m3RJLxHlGC*n1&is z4}aAsZ8)^ls5IR)Q>S>BlbmyNOtXihySBbNz-P$Qk+e#w&+H2)3{W0-lOk}e+72F! zG6?Zs*|-n(I_!)6Ue1n=SS3@8&{lMGp?(AS^lf43Q7>sTDV-7Xa$)J-nono?Bv zlSV8sGPk0HicYJKmrZbi^D>e;FWB!avaNu-Q_lzQ; zS|ZRiRK+K8w@wJ5^KODv_>tP=1C;!pGcCmC42~&i+`x+#b1@zbJ`Ks4FU_M*F*Xg0 z+2bQuq7B2h&EA+c;*Cw_+-ueQ2Ibi;m%Kn+p3jO(C?;ni3od* z#`CS~;vu!9{%mS(ug)l2U2@slEIx!t!(}Ibv(tHvW_giNWG6mew=Js^w+augIljyA z#-==bhCZG*NGc;5bLC$1pvom>H~0iET?dKUpPJNT1?n#_xUvu z!}Ehed)W0XXs$eMUzWn~qPn>0eL@vV8uVG{1Z}yH2U*t93Fl19Fs|ym_Cv$wHR?!W8BIEn%^5AdS!9UH0odG8e7_;HuEj;<= z{~Tl^ZC~K;;rwlgKr9aF`s-EXplCeFF~)5Y9x|TMI)gMfM4v;MG0=b@qpS~!isK8YbWqdTle9}CZPy@6>%%E|k>Pb*SnZ@zeLlS1g$}&YW+zLg ztj^&@c5d5NVrVzu{5w@^^js<3k*J?>N?E(KU#XM(oU$I)YN$9vKSN?uN}YT-?^ena zg<`sXf;dV5poHzKAr;rw!WicUVPl%)kwzW@j*+d{U*~5XLwRPnOGoOV03Wg&ABue) z{iJBNR_w-Zva$J^%MC29k%U4%IoM<;mqtS|mmY#$Oi@*(A;~s5id>gmLY5V*>;|he zhy-yx`;oE@{OTDu{%ssE1VX=R!3-H-4b4FW%S1VWNCFO|u}`4*gVgoR_Y)tSp1^7gY-G-!Fa zYj~MIw8WgF6wI%j0!~5d0y-~7r>0M}NaKW0$Pwv!#Tmz=Y)FL)J_h&LG;wYAZb2H| zZaqt(<7K6dGg1#Kwy%TQAK7a3v&mHrI}^EDDH1;`l{&Jna5UjyYauyYoGA15;f3; zn(xRVHltB6u44_$-|&H>(nNUC3d*v0%BWOmso=!(*xl^dpA;rK(6db^uJcL53^h%4 zxTz*+7rb4f8%P_9n%px>SO4Aa0=`2{?t(WE%yaSwiWVMfe=Fjx95||EnWV+=F)PaiHcUPa8uh7Zy z$*+&GF(z0k6hGTiY04C+raJ`qG<(EnE2DxLEp2 zE7saUdCU6rDrq`(6Uq&cO{}J9`U{u}*aqiVi>d~n`5j(x9G+$anP%GCd0Y0CD_wM% zH~_(e?JRB2Y!D<}zlTFT)z$X|!@EwUf4KsAP;7w~7S(KOgW{ay)Siu^&C(+IrD$yI zSya%kN8L0V+VKq3^(JeskPr!)Y)6?$*^T%q%)?n92B+0q&Pe-mt1p-XveF|spXncF zbG4|G4zBhV&Kd~=@o)5iGFO~eK}P`+CzaO)}J;-@r=V{||jMEJ-IEnpWJ zFUw+ODalNDnktNtJfv0FLlX7Aq*5ppsQWjkVZ4<8ar4DLNWCGZM}IdOhR>0xL-Ue+ zlHZ(PQa6y=3~4s&?KW0mLp@=U#fD^&-1X!fblgAs^->BsU#9L-mE~|_M1uT-qHe)A z{l!YK`1E__p{6XvWCzdNZeJ5j6|vFt2E3&`-F>lM^8TZus~#z@0p)OBdOO>HtS z6*{!$QlH0~K~c+!CP`YF$I|psg#g_v&&p^sjm{{`Dw0qT3Ptc#uDCasdJQ#x>WZNv z7~==d7vxz|^6#%Y2scqj?st6E8@`9NuVc7Lk|l-?$LjuLWBe8H*$njxPNM)$3K?&IlP8IiX)lggG?_gv>pZcNo|ebI5TO5;nj85r7!#z= z;B-tqDJ?0~h3%CF;l>d0IjBJ;`Gymw*l8Ab{HqhmQ|XB<9@p@K9`baUPW8~4-piEd ziub?MAaz+cyB7J%zoVqFffQ#tihpA9OzpAH&U|abpvX$}oMM)hWuU1ImYK=!xLjC% zMNVfBXeG7J>_OeZ-C|nB2LpH!blRtnb~AaLPP6#Z<@(3iZjTfys)8A$?~srh*2jZ* zRU%~#^Z{%BmQ1v$jcMu$oL$82lBP`VLtnuBz(m$rrlMaPI6gY3x??R8h0ROtF(SBfwKDn>9^5 z_@St?IHfbS=!AbqiJI1QY8szxhn@x$UmY3LsSXI}3|huCwj1b%hQw!4BMHV0jeMmJ z=(H>b&9Hj-^|tgWPgg1B{PdMV`YA)7gQQ2GXf;lS%aoxp zzT03>xk)Ois(}T&OYZf4zZd9q%G0jQT1)4tBzMxTZMmb&2LmlHX-u1)!0ncx?uHLp zqMq1COLjT>#=3^u-M0Evv4goKs&Y^`;=-gJwgGjQ8Fwy@%Nz>yD&el!B1zQvjO=e{ zD>?M@WyvT{EMjA)h+T;c5EPS3EHR!>VuMj+YZq!}6?#uh0cE}_#r097)`T3(T>p*V zA!YYV+Qu|W1=^k#r4_?0HKAsimU_Eoe3~f=P~ktQ%t5kaMDjvbF@ZD})h7#MfqYwOEX0>eL3yA7Z{IxviD~f5 zq%^=;s+BP0)kY9*Cw2qc7{;IRFkMa*VP4x(!sFc$CTy4pBUH#&ONeJ#a-dqmE+#sN zknMcyh_N3Yb51K)G(xLjO%@p7*ec#h7*wqwp!sy@*l|P>VOR$#^J5cUh#H`cl2uSg zVVWyRcAQFT6t*4XtebeXMQr1BI`Lfk)+KSsDscm-mwPC&`2C{VnhIVQbi{CLZ%}PA zWj~e;&7fYaSpq{+dUIjh2&zn&x>(QWle8_X5YdD;X z+0OjHxA>yJh%7XJ-sk|_(pp4um!tF;8!_#H0-4SuTB6t{s0Kti(bgK2HbaC7v7$aF z!$4TyPimZ2nwYwQ!ua@4Y~56|w#+9Cz_?%%*LVe+*r${9IuYCnf;L?1{Xc$*X4Dxo z8*u5jJSjd}S8ArKF~x}A51apu$2{3UfBseQ*Z%UJYtY~8ZyfsH!(-C&f0oqnamPE`QoCyfsW0)&-b_ZnsDnM)C+B z8sdOkE_fR^EA$Cw3{81L&ui35n)Ub`q>y7iddy=cFo@w)&B8_yIV+IYQZtphmS3$< zdWt*Aop}nuyg;edIm8qVvFi8vWWSpL>?ewc*7^02BQoxeo>!HTnQ%ki*-A}V=l|up zpj!OXLXGphC``e%tOA5>td2DG33Ihat?JTuNDX;vc!}iY#OPptwbD1eN!^n#ne0)b zAb{bWpbEElrQbmDcT^eVs9wgyB=~Fn&8F|8lyq7ZS5J|y1Dm}$$Fefh3vD~R?{6p9r;yKSxDl52yk3AJ3nmFGr4_@XIAM=f5Fk9WJ0 zU*JIpZ(g2@7_d1o2i+oo;PYrtE#+f%lHi#1=3}!r^Sq)rCUxD#w7i%|0T2bHLvKdL z^IA*o^MfU&kRa*yEpZmId`EKjwwUv_C;n2(2hXW$Grszg9XF6{`;aovI+0TJf~)*Z z(2_(!>}c527Vt10r<7nh+IrN(n(URCW;<4T8>QWHj_r%jM0BKlj?36Ac>twF0woDZ zWQHhqKBz~+GI@wDQKE=Hk=6-E*#?($m^QJ$m|0ph{A-Th1Do)ZxkoLPoPS>b5stni z5Q{9VkBYqu$C>pXkZV`{mm2oZrkmv-E`|)!4||Mcxt4em-1etaF60j4T%&dREQVDX z*V-a_Y=#B4#X<|umD92yx)0y~dM@Ou@Jr82h8DL=G7jyh5!5WQpk)#lDfCV`9}lcv z^A}_U+BO>1Ed-3qhbCpVvip!mpop2B-0tD_^?~xm~;Z8TCZ8&vU9}64ybv z<6EhUYJpPkV1?#tr8-Cj&w!xwotlqIda8>8(-kFvB!B4V`ycbY=mtospFRTbLXi%Y zL1MIRcN8vvSYB#U9mTlcS@~=JxX&agWf%7;h8l)J_AV1vyedjoqAN=>7X6EsTBi3VZxc0Q9@7}Cy?;86{+my0}95)3eG z%uC&BYu;kpohgNO&)g z;Iy@zyfbl@Ra4Ra zESxj3OC)75WV@d*7yv3!kVH*J++~4&_Evq5TKHmNt}Av}cHCBVU&`??6;7h!Y4i}C zOY3iCPUhz1n-UagwxDcQrM7`TFeJJYkEIj~aO%|4D zOjv?M1hs*4?S!PQD(U;52mD+IPOhFuQL(Z&#NlNXvTALND!K-2o)@gEax(s?_mOj9~;$*Ctr>^ z$^dpPXhjJ5Kh1K5^O+VoD)cq0ayc1v5W1QtK=WW^K5e0K02dB<^A4$*aQ>kfiPeZt zc25^k>?73b&waR7Sc4|nmtR&qwqVIz{b2^14OJI*M_Z@6Ep>WrI82f9H6}P>;)B*EK?*JEoLPgTA8Itn5eJw(3vCmdB5HUP%o>Z#9R$v&l`#A17v)kD_MFV zGJJ8ZH<)UelD*xxiLXkvfa4nR4l}`PPk$wJbyedm&WJ$u6TPj87k~9)B&xI}EI(2{qJ@1Fs3bbZyL8>CZ01QglAO@xkBco_^bkbsNB2$LjvrxAg60 z$5o^s$Mf4R7J`*}@qg1j|MNrhN@v)*p(n?1JEJ;<4IeQRk)$ueX*#M>H=NU8#SR-7ViE|a46p$@?lX)bzZ6f<2D2ccYmLWf-l%oW; zX9D3Ytx+txY<4)Q8NsZ5^~Kzp3B`T9NqacueCn#TDE!q|t&w4htD9YbwbRj4FyH)# zcfFh!9xfL`E&T8LlBeYCr#dGN&E(>-qFYaTb>;M>9G`f)J!UK?G;?`s)FoFxk*|J1 z%RP1)_wCqGan((;G^#c83S3Hr5lKPn<$fT|J6LfCM#oIebz$Mza^FJPLmw^<>L^9} za+tc*?zY;Z7KtucO{X4pjS-bV$}r1um&3S~<+tLMawoqE*am*GsdKGzXED49IE)Lg zUkV4nv0?z&#WPox_Rx$LPRYw9}Vn)yGGE03c?+7qxET>goF#5p#ei5=q8)yW7mGHvq)LjO2M{|1suGw!2G=4opAudGee=_v7C!um_tB#_ENFoO4R{uQ&B>rzvqkkD)N}jF_{eSi= zj1parp(N7ipV?huq)U6fm#Nw|c9aAZdmXqgF`v=Do3gb$HzUKI#xY_M|a ze$j(fP*=KgI9n@-D9Z}-H!ol)X_>}3ciYdgtmfja$*c#jtd1hy+@5PQWreQ5uU@tY z-c50Y!K5>==ytp=2Q4{9b2WPlFVsdgdTHsRw3jmHe-Lh6({Gh^2p$BXyesaz#%8n* z(4fPLvVpoi#(B4l7BzfZqcQZdRfag5{|`9gF(tsh5gYdrvLPp!)cIVs@<`pVNp1pT zBYP{?KL5NJ@*tLclLR6SqEl1z5mQjUfwP={>dRprQcE64cTp`Vm7qXJkvZYBE|MpG zqD^8K$ZNY)Yw%{kKQ{QZYaKc`)SQy)%Fb@Uo$vf96N*lUmLvSJSO=26y#>5%bXnmM z$d?=5!=hX0hS1`1gpKs+-U$6X3mbu-(!l4&ZB}adLw@XWL3zD)S3v4+>e%(Mq6s+m z=K?Y$egw?*Bns;fX%r$AB6@HVaKIGAWGY0V)c5VgGg<`1xTKp!+j_<5Zh)tLUpp`- z;@p##1-*k4i^K6$GG(l2WsiI^F^SnCP--w)3`^>+_xYV!GU08j1zcDkDc}l}x>0Hm$icoC%?Qt$J=ToQZ&*caX zI0ssfU#E=YS;79HII5A}(7_aA9nd?P($6g|5|K6Mzku5iv30FzX*WMiwwheLe72=nJ`TmZ0V>i&>Dru39FN1{y z&18S+D9W+)4Lpj1(qgQp(^LV-&+&hwAcFY7vJ7BuOo&@^AA?r6a1I}PJ`{&-1w~z9 zZ9AZx!kV#CpaljYF|Z)t&impa@95UdTk!VFM4}Ql<}?(a6j*|BSlD7Z>oVXX-=1SE zXXMS>C5d`FQL|UnBa47$g`ZVdr~>dy!^ZP;+^jJ3k;!!mzMIa}OtMvn&kaL|^DRl3 zbsK1UI-LDelstDT-L)uQy+ViHe#*=&>cQDp`M`tIokj%@6f zntm{bav;98?c*6OaC(IT?1>zh1mk|*tq|zz^Z8_Z7{^`4TVKpXH>I7gI5X{rS{#w7 zGra@gnYhTz7^TiIzFr}T=w(b;z+6MVm_eT_RUW)i;gaNt@IZ^qT$YGA;mka~BN7IR z@H{`H(sl}DT<<4l86{E5VTp~QsAe_?`?zr7tQrRaGbi=371MNez5Mu)xuTN|TBuxD zDwV3{Z&UkcdFXYF{m|Qou48rtau)7x0tjTo>t^hkjO{f(U%4s%E#R$kVRu^Il`G}R z_PM31{Q7RauRIt>*y#ySIYuId3m(i^NE%uN{Ix);Sf+q_-kW3@>4(xc>@Lfhk4r=8j zepjXZhk!zuPvW6MisiCyeA`9M^TPr``jevnZYIdEg$9NRWwP%-S*}Ggr)o_q zkP)jtubO7Jzko8;y#r|plw+rN+ABUc=;xP}ES7_(kl%2u$vYGV8y}~+5-~5)$k#~4 z-3CFmdDpwpCFoR9SpunlTUI@M&r-jm-+!Zd& zbuZV2eDAK#TNX)nHNdX3QNUXom}@-h2$~RWxav@uO+;FMb3_|g+YXigJ4R@HKFe2;L3n(ex41n#dP~uJzMV zy%~4LFg5W5B=Sudba6(>2b#?U8^oj_+By{Xd7c9-1pEEiXTN~?FX&3#;i}+TvQ2;m zSaAk&6pN;OjTV@8tKj(@m%Hy1Wkq%Yn59=r06eE3XR5B@JbuV4Y4ET}U*^OPK}kYUYGakA$5F4K)rY*GUo zH65{(ROj;VA8BW+O!|g;mlj%`NDin%K1W@x)!X+w8tKxE#o;j3L2jQKh0bLIH-k<# zcL=m@n#AzRLwYuVa{6DUwIKGS*KNi<+WJbyEMJUSCyZHQ$>*4AV3ixNDw2Ikv=tbH z`t$lJSR)9yOdr=@c1R`gi!4+#2K7W!u&C^5edr%=t_vb)ZevL=)ZNKmy$BZ9Zy~OC zCzjv8{^Nnqeeqg4u_qJeR#xm0cM{q2CVt}T%P|#`2RJ~Ve+R1nbApjx+7W{9S?utJ z2$aXm3HhwZU6UQlG!n+UJEy0$7Nu}KP4%T*GZvMq@miYY3S$u~`eED`rz{sTr$h0>S?_6vUHe!>yZ$ z0C97g=P22jV0Rs8240jfC%hAjR($-+!|zUnQ0IH^r|-_$lir|d(i{Y8pz~wV8*PW)igFS!!;!ZTAe&T*eYpX z%RE7j(LfiRl;f7;n=h#1&nDVVmpde?;YD^5NYJ-`yGSsTq!h)={)&QZCi%zUm=dnC zsxOPmchv-WE)}(N3RZAA#eqov7iIrX72lJ%TSm2jzgcrpO)~Y1Z|fw&mFN zKTnt!?I%{#apU2@2p)-Yk?ae7#y%0d!K5`mISrq+2uB-Oq(+aC>ojpI01a6ai%>GZqkGK!oA*jgNRSK8Iy1auOBF~T=T^D2Vq@QOW z?5CFNT`sM~oj=g^U4OrB@C_jg=9sR(=`b~V1^N`O3pbIy;qA_qr7+VVwf7WoE`F%RkD|F_c^ZGw~WjSXZ{nuF93YR>7_roe1{G}-Uq!!%#aReo<{k~=6T zKFB7^QaFiF1yzjK>t(x@it{3F*`Ne+_3nTUBJt{Y7`pJfbQvVv60Q}fGYaIT5ElJh7ySgY2H>Vig}fTvX4&M2*;1Z6|Qf$`LYDuMSDUlXkFBU z(!4;9wDZx;&eHFx= zTAQEc6nwNMqt{I3f+71pRe_Ox2u_HG4~caW$5Dnrr`K1YEnXTmL`x?M zMw2;_H1Nb3CQkpDCk{tD93YR1vQEJoXHnF*IN&M7pHMoUtlmUP}>WCpbMi}@BTBC$-N1MrkuXkj3gx{<9Q(>dD^SFqqWLvq)EMrFpw%=fLhVe zVb}}A^;wf`0@K$cak2`;Z8~g#KIqbe@FiLmH&c2ryKG*T70?Nlbv$!j6o0H?=tIS# z{F1eF#@E20yuSZ<*QTA6zciK-^HVqB)PeVt__IaKtiR&3mRR7GO;gP5e(kXBU3n_h zH_FCa1wy_vKCH>n_!P?_JinNQiC_CCTX{J#C7DJkbHWovV$0gh$uuo|4cuu|>GKl6 zd^5yEvFMU6o7@574ga#xw0jhnit0_ZDhjk>eH#_p*OI@~=I1A;+QMf$wOnfqSXazS zX83se%g^B2BWUHMxe>OU4%|47{}667r)^PkIpNH3!B*rwnH9|O8CJdGA2JH zUb*f6MU80`zvoMwJ@qji4iU*Lo#g5#w`u0-)j^IcI6>j5DC(+2c5V#n<6xyIiiK+2 zW&d>qPSny5Qpt(C}Tq-+&#?MGw*d}bO;E8xd7M4yO4Gq-vN$a zx@WnORctqhyQAw6=@`dqV~6BEw|LUfS3N&h1alO>(6y)LY_p6x_vPDuw8H6e!RsZZ zN}Sv2Pv2+Z=Y4bE<-9jlS&%g=85KJHuD@MlvJo^irim_0{s=!TEGo+p_s8dmrtBEd zFon^*G?k{I88XcJMw)FU?=VH;IzzhoCG`d0@kPo7W?Cf){&l>uQGev}+X)xG6E-yL z`Tb;S*C^|iX>Xh^uZeJbR^pmSeW=2-U)p=4se4@ua)?}lHIarNQyklgp)Z!Fz*=zG z0{3pl{=$nJKtSJP5rVtd3B!=QZt(<0R!L9Gw=%S$9jUZ#Nl! zp93hBUJJagfw}o49V%dkhRaCbBFzd%#k*bl$y|X?`McEfZ(1L$ZYO>eyK*lgl+WL# z-&URT!0bo;5YeDxF$EWAw$8#lXL3jtK52H~H`Pe`hUX&bADFQ2b}0 zefD1{EaT|{-(TX%-yt&v%P4ry;X{qHvb!QG%2gl~>NR~*w!yZ4 zCT(cnG5ubjH=_^wCOZoQd}xq44SIuKVDKTZfN$bPNN*It>7L%m#bg|T7cE|YN|$v1 zWe{PKDQ&V8oh^lZ^0~}X+R}2o*#uz@Gwq4RVL!ZUknHx}-EjbNgz`%ywlnOtFy zp2IScIU+L}z0B)^XEg*J_(g>P;`$6ZO_12wz|54xm_7fd>nY`Yb65xA4zJuPOa2Le4e^?Kk7WN(_yw62R-S8p-Ux6mjtUgJu#Ffhn|GdcTWl95NWy0Cq6+pyRxWfVo8p~VJ=BMRZa}my zG=#T<^XK-*CRuv;LeE~VHhsb5$n~>*<5P8h-m)ay3E0fmH`|m0vR7+m9G-VGw%L?1 ziiGD_5i>2l-YvLP_2+zkpqpZ;uNxE-Mg`cWT8JEr zW2W6!E&n>!$?zqW@SY){@s=m)%x$_^Ow*YCX4&wSH5>ka(^9F_)Yk~A#(rO^iHF0)L_7{RW_iX0apvO zmTb0L5CMOiG|yM`)@JP5kDHFze_bYoElL3>l+BjSlr@d(68SbTk+V}Ov8HHX{eYjH zyUECIqP9p6Xt{O-{v=fm`LGQNn%kZ zk+NcccUib}EV~^4<^cOt4&cm8hkj-3CqtvSSV?Yt`dMHnDl=PZb^Y7er_Mz{j)U`! zhl4z@ygbAEYll}$n910+{2^5J2&ORKJ0 z1!9S)eREokkaLPTSQdm+>NERRS=-adJd9w@?u1V_8GW&~r|4BoQ_Bf!Yjd2@a&;3> ztR#90U{6|XCynF94RBX`CCexqaS=^WRMs7px9kF=bN=zome@A#Q`&A(F*2@mR^^)D zPFsW)ux6I$k^!P+-A4^ zKuz^>cTmAW`7ck~GZw%5ODs(P7=h4W@ioNam8*3)qWbA_(^7zyzAqusn0n?7e=pJ+ zTZspg03dRG-_6#kEie7V`{1yVd@$rjqhzTloO$>7%jrb)*3Z3UAV1DqcHBmAygs*- zOQPP6F9B#r;z)gb(CreB`&&?lieGt0*<+cAcIWoZ@;#OEC(H(`z5AJc zYimH`0lfIGe086h{L331`TQSvdl>VrfX|b2GMoG>=Zn_M_%yYn+ZQuhcORs1o8hS6 z-!5MG=Kr;|mHOWU4*&O5V;P-f+nPEZK$bg1h})1}!KYPH!}qq`3!z@6OU+^-;*X5$6ro_B)JxN{vEvA(jSsBVC1Ap@*tz?&x%lPi$8A#2 z1Q%MgD8VDk{mdgU>x^osrzGML4f)KRu-7CJpXvJqaD2JY%~Dawo%+i%t=k0FXfaRs z-w(!gxpyWL%qzq)v(cKR$O!4N?-pjbRD03X{E-C zbq$^>*Og%+*c+&@zN5K84@?_Tq!&Oq`)Q+|E%XH|2I(&t4t@M|cZmr$MMGN@P~! zan$)=*&69m_w=8 zblqCxeirqCDPQ5iEBAwfsW`CW6q9 z`!l8yJ^h~Yx6Jf^u1wf!ss5+>SIItfc6q4dEaFz4WLTSci%*1*upG`Tg}SBb31vQ# zh2n-n!<$TUv6@9v`@T5S4kNNlaaV@7Cu>@wUv%223H=#7SFr+*Zo)$#3j ziH2aBIe)F4zCO?~A8PCSO_Ybb_A7x=r?00~90DU1>*pCfV^0|9Ukr`aI-6YB$;8VE z*nRqHzKt__Ul@Tdffibvq0dFYuXMVx{*d z+M?5(T#SM7M`l^|fd|m68q5CD_rk^vZtQ0-s%=LiPO9eHqTV0OHn^T?{5mulpHMVw z^Vt3)dyH{w@YATv@?}X|O?B~y$V9rVM!U~EI{A`)^<+0D??VLOEqo4RdB`f`_pfo% zyKUy{inQPo`6MN>_Q%V}slyqbVAwyBxI9rvO)x4=3n_o(x}XF?Bu?{Yn`X^KGa z$FxujN>ul;qf;~X+1ce1o5EevPQBFl`98idf6e>h^=_%5g0_8-lFF&ybE^Bvp9J@n zpVuzGkGcPt8~Z)_%I8w|zOnb!N%q()*Z&gKBBq_ptgB;m6uIx~i}+dxRr480SqG-2 zWAv9H9lwTrjEOaJPbW^8!O-?S(s0p*E^`6n#F2*XS=tFq3jr)qRnIgKNFLpMcVCYW zL95?ij!Sj%>>9jNwK2g3F1QVc8pVY&nwlQuN;n94ZztI;JA~3qr0ITOAp+9)(emJ3 zdL63SkKe*13_fg~Cp|LHSxT-H-hVIBksIF_MGqf=%7Jx6FZktWiber1z^3Wys=4&p4flV7oHEc8C2vwdferXe@)~d!OS!%5@JR zKO1POt~@zDQ)%1GOw#a~2xdl}mHik}#kw*wPd2sp-+d}eKN)>><{$_?e==KZ^6|=G zN!-_ip+i()<3|BFPo^QtTXoLsYB$J@er@pQX0c3HBwn3kTxXqD}Hw-qgKci{f;YT9XTJ!ZwcOtz^LuR7$4(1z4&Xe>_>1Y)={jtdX%iVae zTRUF7-Hw~nznb_uHB_@(-vG%w(9{sNAw{1jmw;t(?FH3v7Z^K6BP96q;4?i}SD|f9 zj!#v~eyx|U&x~BQMM^XdoE+u7-^!p!&(Bo~LNVC5JgF}uPTM4~Ei)aw!00u;fI?CD zvnUb4%_Sm}r}s7S+hOBGn0$c4OLywqy(c`^Eomw5B4t-&nYl@V?I};L0@*02QcaCi zV0uPQB=6a;GBPP93}0xQxIVhdq#!rSPUY?oQGOqQhg***Ee7_*d=C^{x$F3mwFbYP z`R;y;{!SqIb2mnXDr(BEKO6St-!y{AkmJ8@j4=^ix%@4nTjXzdc|O&ChWqSYW8ce2 zkW9I)f)5)whQ@2 zRV+b#G$(O1&c%YgigxlmiJ9-ukv~tTsG44?EtUbE-54_DV{~6ioz9yhx#!IB z>VoFXUfXu;9OrPUJI;B>-}C#V?6HOPV6}I#Oh@A5a#4?qOCGmFv%b;0_%?5!N3BH9 zwvSVlr6o`PA7gJB71!Eq3-1UJJh($}hu{vurIFwc!QCAi*umWz8i(NS?!g^`ySp|H zjefn4eD}QPo;&XCu}1e;>u=9hPt~khH7W07nYZS{xmE@1!pjDE9M5Jo>@#3Hp?1>y z7ZvUGR|gfGggmOqu=poBY-pS5<}>+PW5l24U5;)PE3-v@_q&Ah`CFsoDUxj-c2}&n zx+a!c+`AkPY22OZ^|x>!cs*?L-`g8(9#(P@uh%5FNHkG)-e1fzcri2&iR7lqO1J=NF_9F*(u2jeg%f3?|@ z8(@76hjrmEUc+Juc#C=5P}O%6!JCXM1DYygQj!Em>gxHLYAWB=MJ3$`xNhAzn;O3_ ztx7oQe;`mt&BsYj03|EfyTf<(@vhbo%3}y2q8)zw@trnm`5Pt)8#dj>lo;8qnf6WT z*nd~c{?84i3-{2jKRG*wM~hGg7?x>XgaRP-1ai;WM$4EB=A5MaB+&MMoNkBeqjYg7j0vM)Slc`fl z*fD?D#D$+TooVZn^ev2U9n(q!sN%EdlWhRs;IIZ`jjuc?Q$=pE8d;yf9iS(thZ72W zR@>e4T=SUcKSPyOWs5Hga8I<{wH{(0o;s^kqvskZk)cOB#$Xg?^L1&nvDf@~t~z0h z(FBJSzE<=Z5j&%U($sRp2WFdtsO{gaN5py}(a6%UVA&&DnYA(4fc(^wb2CY@c^a;t zE7TWVhtLeX`%;8fZn6Q}g6v{S)Wk}*9h1P)(VQ;5aOd*YgLY18IQ~KjXzB3hPHs}# zJ3e1p6>k2UNPx!0Zbjn!JiWVNe5a+_3KP$Rb@MbvGGnc>?E|ndcM~a zPO{qW9YBj-<$N}4aA&X6v$a;n*XWOh;8D3fyKZ)Bc!NVkgKEClr_A;&wY>0(`2VHbWn=UjMq}=O$pSi%-#Q65obf-!>r<~! zNI9gST~dsH&|L`c^06_aaocv-&`BH`^o>kqZxxC3!ym7Os%kgeVr($I#&6Yu**%{* zg`aJyAZWJvEjdB$3BUvwXPGfZik#|<#BHRj($bRhs+^pbko|rBG#f_C@~Yg@`ncIy z&s7#I+3lxfY$C-{wy@d7FRN@q{rBvD6E}fj9K6ounhk?&P7ZHs;k26ie@TL2#zFtb z)l%)y{kMK1hgUp*pOdQgrJQlK+mkE!wbrhJLiG>t`7!VpwTEIqPldp{QwTP5Od08i zAwmLVXFjyCd`f0ZX-@fJyZqN!{A&t@H>?90-uqcTS18RjHk_#{_!*nXYgnTe3)Q-| zA%`hg_)X;Qm3=6Naq`{|;<9XC_bcDn++4jRKS6Em-#+pT8b8%wkHEG+?X+o@*z4MS zJQXKXU9uqK9Tiy|Se-5#BNztRVTR>N&8ltg=B9myj2x6HJu-N;f%71&BT-Rn-j1_q zV!rxh8@yO2$Rn)wSRI>SCeafTp0vPgx>!=7QEEK6+IOW#hs0z0}0CflUf zHFKwRM^DLD#+W*})1_kt@)4honkhMuKEXVY>Ntn`DP4%uPBynYmCv)*`YTkg1>0Mb zJ*rN(E9wBin|-U!hfVkmplc{3Yjv+^lJp|kVf_Ho^%U0ygmU{sx8M1{?dd+R;d$h@ z_iy;W#AWB-6;0Y-9~3n~kMhcZZ<}8>R@b{{Y$63)>Vqe%Sgw`|w1wLQ$31u~9-j5c z$VkpMGsQbrMH*9^6vwYF5?oOh(5_#{v4GF}+EB`$UEaVzR+0AJWU{XQCZ+Z5wtLo# zB6P*;Wc0~v55vyk`)P}pwd8x~=uF%5MfmAd_x;0h2P5$EmCNt(nCypTh7*4E_|d8JaalU;jU8`iXkVCrB8v)O89 z)&77OmgassFOPEn_>y&{0@$&bBNVHRX3@!(Rmf!qMFB-+UFdHmQz~V07By38W!NO8 zwoc0Pnj4lpkN5u`QL!pyxOldp;A-t5;@js(NpwmRU9?JJl_t*VP zgW0GCuM#04DhasalHMp@vdX*E5^;EB@`|>9*E<+aQ?3&N_v|L{5hb3+DPXQM;+gUoFKZ^e6wFSlOR}=l5 zg^bEf4INT*Q=sOoH_KDQnVOH!Eu(6XI~4;{tVMcYVpY0u%OKapZ?&!csCsw$0ZS1kgWAJkjBuFHsZ$G$$Fr&!l!+V9pQbr?5w@o}Ny37KhG&F)F9{21eIQC(FOm+4D=N?N(U z*oeVGvNSQ=ft9f;)Dx{5sVB_dn||PNIUh{2D%kK_U;+JlO1B7lb5;j@>BjMUJgo#` zA5JPcTwf1rLPu#eAFe^8FaS3_Kta0C55o$tH%H8V4;Pplojw7ynz&wXr&JK)jj`UH zymk-sjL@f*hliW5WF(ONGyS>t2CeQSsPzOhr;|}h{_1!e58CzN zyc21cSI9k?-sbgv)%Dp<pR3w-~ln&hEO*GPwW-6 zEgAZHB-Hu52~V~rG8qcdJ2)wVT*_JJSy5G z6sxuBFCOiy+?)Hy5oMu7qOYXbG{MsvpQUa5C~m#z6Y~dEGKi(DjK4Hk1D%dC|5(Z3~6(P&ayLc0=|6eqB$>t z6aDOG==Tbpob-l0`M2v?Bh0w;%csd;a8~JaX2~Obm&D{ZZQ+WtqJWsn^5RxP5+QBu z0 zo16W^R$P)+NdO1EB*D+Fg(3c(-$%0*HLk{ADb{s|wkn3z>}5x*&@7zozkonO^u$MU zCJve`D{aV2^SWabHSmgOhMUJw@eG0HU?MzsC)<)xWCWTP7bo;4mh+v70^fGG+b@t+ z{yxwXEp)ph68LtB+UfsB0fS`(WL7TLl2Y@RAon0!>U;CXaG5olI{mG0t5w{en;o2 z3O2WgqC<#5%f5oGzG+J99lgofor9Bx{=a>Al$?Q9VJCx4E`A4}?qlt?#(;PS<}18) z1={>sglMs9j;{4`$2^W=BPHQF6Y}$pMy&~v9O@Y#hOA<#Sqd z5$;FP2VaZ@U(wG&8>CKlu-nfPZ0etb4#YGKNqkLEqZGKM* zCVlWeR?CX9Ztn2BEBG=qAs?HUKcCtMch$kYBeIi;y`*Gh24|E@95b@hPsY-6E~XbB ze(`Q)Xm)WYQbMo47&hg7bF55wdojoJ_b&{}MnAZkc_r@L0QKSlQrkt+y8}y5Dr3!^ zy}zdS`tqHgj~SP6#8&7BGu><8+LY=Z-|n^+0Jzn+U5Am4$uqoNd)K^EaK}9ux6FHM!%YxvupS8 z%Mw6fY|KZ9|-FgV$UlIW@$g1pPAS1l-&-&OX7HiHOu0E)I>jxY@J zrM=^Es1*i3#u4Ft^8^jn79TnGarmw?VB-726*@)X1YnJ&)qRLyP3BQd~Ad&PbUR(4*Jdc8q^ox_dR{)hV(*e9-&uxt%rJUr=@2=@%0)>LCRtaP`2fhg=KZ1DI(+AeiZQb4WYa4`;`(uEO?zq)9x#4vP zg}cF{ZJMzzdpC-T5Tb)9PRQ%63DEJ47}Dhx;iGwXy`GsT=yk#i$w=Mn4tEl6^Nmwl z7aY@s=x-OHvs|y`%>aQe=&_UISNmJ!EcP~AH}cHVu=Dim%z&5$20%YpevYcPgF0}F ziB;;lBh_BUsFE7QZ099kzhCoJt9N1;7fiFf$hJ1R-fx8FK(;fxPQXI4F)>~z06pB| z%j$FiqgO$8IwDuRJdGGN?@^qcEXa6b$DMZiC?M;6gXkN;9&|(Bp_zO8tL_efV6#(1 zQ)R~Pbj@13+v^vLMs!E}npjm`eqQ$V-#PKHfI9DNS`Nkn-DYH#@AsHe^AwJ@h#2Ud`j`?`f@#wKFf*!YHerkOZa3RCr#q|%TVS2cP(r3rfN3T~Pb|7>WD zeOJu^E_wQ3=sq%P;g?wW6=wy%TDzlZRNE8>WU4d*M%_^~YHgYW)+ljKNlFqPr|W0W zQ*DhmToHVVRu(&2vV2YEh_g%m{}rat6T`PNZ6#O|`%v-ue)pe5fUXcJ;6l&Rx=KRV z;wKh{!3RE%l2%%+N0iReBf4s zn)bWCs*Jk2aHhV3EvZ#eBUSWKCj;r3{cdLGSK(BJotaFi;8NNsf{S)LM|ywnFv@v! zk&_EkU|H{x-m%iYo`WE58z$dk)vry)w6u0pU&rR2|hWvce(82 zW+B$!eQbGI?eYphC(SsR%G_!9dHNdbK)O4=1JYYt?+e5N0bTFED3R%Jk4octy$uMH z>MwP_>|p8XSRWj^GCzd^mbmo#dmKNgl2FSx;ml}e^_Z%n>8JX+ntOiLA|3VgWuSCB zLYX_LZplk*`RQHwbdo}JVtS&6F3>o%PA zu{J+=o9Ch@EI1fwGYGxA9t2(=2?%;YxMSB_$J!k9x6W^8^!Qx9FTZ|DMq_gH+rSTP zbaghZj1{lTB+jzkzVH+pEK1|!Uiw`!KBq^(xZkaYo6TZ&z4Hp}Tu&Xmt^9~~kL`Hz zn*yXekdjJbdj0U%4%Un93g6&rmcH8E4OTj#lC{c5g3E4G0KGh7o*+lUafVDjt+tO_D_jMb5bG1(#z$c`o-a{r$WN0o>e3h4T zsiVosI2u5wG6My?KJt{dEv3T_K5>0ut$I;5z#>cuv6zj8|c22aSjx@nqN{)$M= z;Rg>8YNc5k8!<$pX_)h;q@S2{8Iho!S1$T^Z{w26>WN~&F<0D7jyr7*8K99Y^&fGB z@;Z6OSAc|0@g27I8)@uO@*N#0Kt3*B?R=S|ncw-Q5YgCMfCfl@{gr*yA?>N+TPx4Q~xq_w>cHrFbjani5pOndOF63A*w^4Vq zY(mrIti==2O?8}W<9?fj2`2no8|!-As6;{4J?8f z9E^HYUERVsi0eZ_rSr^#4qe)2e=*QY$L-mY1k~4LerjJ4Zc~6fQ0c z__Ed)Ck~q2FQMa^SFc42;D?)I%xt~23EBnsq3aUPx1$P+leP76ye9YSg4wt2!bDwx z0%)zwsDu4ZU3%p7W8}2EE_8Q9L%5TDQabqn`fx?8l>bVrX{P<(&Uq;GKt$vO@jq~S zp-Uc767WS3FJff$yNY&5>9XAHEY9~Ct>D&q>sd}sKt=hl(x8w^b{&3|`lP8u97VHW z4FyRkzx8q1uClu7H~rgW4Rww0b9%SsylsRe`qVc!iEMGvKa!%&=QPD9zehHloFT@d zQg@YxHD=+q!Y`+0WpCcJ?5wuC{Pb9F>6eDU%qbC)J@3y6&h?iE8+IazwF$S!^st&} zk(xPDe(%@?w>PDXwz(X&3xEcEt~?6Noqd=xPsES(2*)<%9T)~-adbX)D1IJ4#*NxB zpE10*BAobC#>~S8J`^6QMR21hwS-?$k;~b+5p)u|-|Xfra6bXruk*2ZI33RuZ0SsY zq8)%GovDm%-ky#|0%WT~%Z>TkEPPI#4 zSrl3s?d&&-fn@DI4ri|NbB_o2yW5|h989&qt+!PtrTaYc39JlVZmFQTnbozi1$RUr z5!))7_`9JuxkDa8gP@@DB)t>D9I0I!G*Wh&NwnUkaM&R+3KRm@lY<7Yq@3!aUxhS+RU((OqHviO68(9nXT zz~`H95u9&D2rBt^(q5+5=+||&SxoonS34aq&yN0N8zOPe{$2H59V&MhYw11@QeXiU zd&uUAt^ia{1K81#KItIqZ%7Y=;v0#R5;KgVdZMU&g57orZ7(yyBIv)@_x%k03tANq z{Bk1>zshS-%;s>4iz}WBcpsa3N*gf=YkNxft-W$?9Qsvp=91p1uf$5RxuWMREk}{6 zYX?7;<&-gwvQp~0nO0Qtx5DczRyBMPoDIJ5B#Wq}pr4G+XJ-wWKPL9pm0RRm8Sj6Y z(GzSBt_wBiYja2dwMp~Vnj{h-a9>Y|;drF^Lf!qz{e@Ng(Fc*CwiXQ8O!*g6dbqKL zDqa>$5k9`1tH+K9DtU~9WvffN)mbD*jZ8H7HP}_XD!HV{PExiob*t%50=%+QKDFAI zg7-@MBRweq^_F$JG$Wp|Itet zbu{D<7m7x4=lVLoF=px@1QMFN!l*O8-G9-NBdRJ1)i7@A;1W4dv2v`XCZDdKIl zNmPXujh>DXO%wKe!xbGspSQ0f!h$2{=&={Qf#T1eZ*lEO2kYdWZT@kPf@gLm9nFYx z8HUl=`+PHpvx7FCd)XyM)`*d12grGRZ8`*Ux-CEtqnGK;cnn9E1$-Wk&xJevPCgrM zi1aj}$6RJ6I*<|{oFLFXJm$;_3-%{FWWy>_){CQ;Yrz(e$N$QbZrw}j-T%Wm`Sdkt z|HGL68&w*)hg4N7w#B7U>8CzoQ?B#U3atO9crT@q^ew<%vYfFv^JmCqC@X(pt!V$n zK(tm`5Ehb!lopb9NNAI1Q68KXPvc!{<%@cQQva2Gs()3uW~!D;%*7Kl<@@EB>oh~)AaGTQ%q(jxD- zNHQ$&VxU**xC!h;)I_RpPRJX&#D>G|#U{AcH11OhPyH@=N6YAx^F4f&nju3*IWf1V zK}CJtZeh!>ikY@_zB;ZmS%6g!YloF&C9>i zcNZ_`uGsi>NqgX%K8=YTbyOqnjApiyzYU+ST@p(D!k@M85)LkKBuT0Dn)y>&pCthX zi9iW!AN_aHNnTfC)?K!1U?g~cYka%1ANAMCV>ffv4Rt}6xjzb3dA<^wDHz7_*>y_I zdZsHMTS>)7ViZ)iaz0qjkeLrjP_h4vv0FK2;e*hEHapzEKrLRU4 zQt?|Rv>Sw$D}-P>s1yzR;+SBxPJ0*)x(?`sV3Hh$YmYh_d_j<6Xm;|9;F+}DxysS5 z%+%T)so}HFG}xY4I&1fUfo4Nw#E>+53$iXUn7tv;n@yUztpv%~JZMt7m{}QwZk>UE zw4=RPz^5kTgN_~G?Y?qnvriB#Anw+s`#^6VS%h0!18FrIufv&=n=W^+G@v&{(^o|v zXjjAO()q+YARk)jZZ|i=@mCG>AccNflfmfrt@r5U4P@)i6j4j7<4AQ!CpmiMcainWv_8BfD3 z_PvIN_NyUM$(3?>ZRhN(w5a+{vT-T6lmC&%J0*q4$k-^XCiq>5`J)QT*V?ZGVS(nozeZ>a9ctsi zVKrlaPzQlIQ-O9Z^?3YGQ;SCq-xS*sv)s0X^ANqqw8*2<;rIk;LjZM$-P}#X!k-xx zDI0ObOjIaJWAc<9Si;Sm&bK1ib$)M3L-+SLALccMz4`^5X>~*SY)=2$JiTTAcg(U` z_3-!{u;G~Q6m`Af`F+O>b^*|h)>yrTML4pwO$XoH?r^*}-ko||b=`Di0g@r^sBgZf zQ}t5l&RG^Q;>l+d7`GUl$gb>_uK__V;2%pJ2Y6YS0I|-GAATfgVrzb+&iJ zvf7{R0krKQ$$0W2KG(e2YXZYFPZk9k2Qxl+o>%jH!p$yegH4JT=i_}+rIR%WE%&8=o?$Zpg}?3NAhg{ zSGH{5%b>|l?-9HW-~ir+-}nrqa}NaboC;*^+`T+76c%8F#YR7cRaNBwNGSi|<^>IN zQy4z=xLhueEM)Du85lwtMsWbdD^yX5awBqH!n= z5|hD?KQFO*4Ep_pd9A>jAH$kHf>2vSPV}Y_SdAVBczKs`ifm$NLnn|fzBq^7e^=<) zI450GL7sLN%{C3BkB&dBL_e^U{-hb|>*X_+ z9gI;+-@n3>_^3{xg9l$`;SP3){G?}6>W7fbvHJg0_bd#>30y3g0B(g8V-Rg zcF><}NcX%o`gzpT#aj0_VVJ^TN{nM*+s+cHsX(|74CNKdsy}w=a;DbJy)F5q1*mNL zu$Oa^S{}8(3~LP=tWGA)__VkihwBdFwfF$Dn)2Jd#H^K=FXor1*IS%ZJRo|zYdlpK z6Z-TXEV3^)?bq`-q;f6(5JGga_5CxC_1!ZM$mQnR(`s@9L}+sjo$PXICKkFoI_Y&a zhu8krf6#t^Lk|)3>Ji8m+?%p6yy#9gyq;RvxVYrmxVrS%xE#J0xj2dyxja(x-_FZ^ z?RgS;4fp7JikIGazBn!ahalqmkEHVIdeYx-9_v3^pIc30*s5@%o-79X&}IK!w_r`} zyYgQQJ~vf@Wd_osm#7+y!$>8y?U!Wzs!KAnZ+d#_i5(v5>UR@rX0A7LY@Bo5v(w)U zWVo8xf6tCwz=CNe+g+`3X&(LEow?Rxs_~D)(8_r7`IAh|r+nKz?tZ#ZJzN z0+VaK#ks+(7;LFpJ$y7Z6T=~*RYvddY;S{|z+)a>{MYxC=T*vQ7Yrm5{+sey@0AAR zy&T43BJI#lOP7DE#pC5s|BOnMo>C_k_s}Nxog;8fqMcGrRn$~36wFK_a0S@K&blYj z&giEN{m^DNDX59sd;FSq{M)z{C)62*H^D|Cdx63E3}<-d7vN_)OF!x3E`nA(Mr+pg z>{p#gkku$^5zA~=l*CR~% zM^uVsFMbIRC4m2O(fOcY={}P`X@>JO6UD1yJZjoXjY?mMO(hu@pCPYe%|E=)@R5J3S4mR7v#@&xkPM0(geJ5EEjE!TaoRKW$rcB5T#}>8w zRNFB0(`1jE$qavn)LPCb4g+sS^Rnt?6xuXibuAjnViF!R`=AXvuu`ZDrPfbfUu|=V zKwe;R-0!hc%-|clG-=~=@)RgSbJ$y*qPExL9a*`DT%037E+2*m1%YpD4jnJwMts-3 z4}|YGe1=xYg!ZRsvo9X%CcWMwtMY-&4k8bay26ilKEf|sw8HUMm+1c6FA%@&v#QR6 z@yV|JiJ2qv(dm^AxJ@Zm~;)bHh`?)kTGiSKn8S@TQ3$Ex3Bh2a0S%<*R_>}0h1x?7}E6D9D46o+WSO#^!dW5H+q;Q}03KvO=S!L%g?m?xZ-@G?i2x^2}BB zegA>o_ng&{=`|Lp_k!^1wE5PHPQu8Wd?Au@@0&XOP4X_^#;IaB4P=IUO1Io+s!b+A)k?Y=diZ$shaEe%sT$U?On6I9^gU; zYg@sPcJvg^dZB9~Y=Mlx>5URpYl5aV@cnO!9Z|yimWsr?OX&n#16r3rZbX|~L^pQI zsqqkYRt|<$H+l~PNx&~*R3mOG9|26L9{KpDy6 zQp)eVsLghh)Z;XjW&OOU;mp*rHPlqUDBvy3s_1Nd^OB^eE`X{a!CKvgg-o%_x$*vzfVbDdlv}t-|i)QquOH?OeoxVe)O>izH;GZ11DNy zg?DZcvK^m0V)^b4^9--nrHTES6aah-x3R*Hag>mD*1Zpkf__*38Xo`0n%kebuyf1? zsp@qDqjXwuNkBcBv3+7hy{cLVX88e8e97+xYUUM|1ciW+ zbe7AerqmO2gR-(HTD=(#Pb#U#JShEM?VG)QFfd8v-2ITwq9yAW@|6=w6~-IX$VmtG&jMsD-?11Hi1;nM(zC5-tU?4gaYZBdakmJITR z!Xoj<<@gNKx%6^~K9i9s+o7OUy-qd398r!DiKJ7KA z?kC)v2d0Xbt!A7Kp3%nXc!$dm2#-ANeF1NP(`c=MuqOaYbGtSk?B8V#&sU z)-RLWkLdJb#ZqZZ$4*Y4t0cnp_n?o^oxv;bBeZ5hB<%K`Q8{YV4{=XomiTbbzWmMP zIMMIU+{&q5eS7=yDq7#9tmv2aaCS9d>P~G10|k zCB3xC)v3Me=dho#-yvK{crE?h^~GqkFYx&?Te${KO9x_`f; zTrz0C?~5SJ%Vkr{U-KevmCcBL-qV_QrgHww$4~Pch(^On`aLGyD_s} zce}_ezRv`BB9Bo3GNHX=&}8%F4Zv!NXZ3a4#@_D^bwT7MjgicsyyBYgKo~fZdM~my zyQ9SSd`NjG{2Z5gPgds&!H9I|?Cm)VWm@$f+OB9yZG*-go!sMhIVVp6ng}{PBga+z zACGm%47%R_6{A-RU9T&3S+ML9##o*Y!z%NS%JMiLw^}@{pk1~_bCCo9_pD5|E>G>d_w07i#j=qBlcJw5g1<#pHx8qD-sjFarS62O| z9+CFQFw2?W8A4GutLAun3v+o&Pgu3=d6_q|sSE~#-+Mn=(AO#SgD&ktni7FnLq3y z>@SJ{AmYt!&&tXNO(h3z?}zI387vPa*7s`}GOp8KR;Aw2>blsHEbN?{ig(sgFcTTj z4&J~KlDr|bi5qU3KC|CR(Q_QW5|W&}$*dG6C2GI?)HvE$+0T=YXyXzlTG%}MAr%!! z^OL1f%ljb*f>gInd1RK8=LZ2w|EO|TDqV2MO*C{jQ2t3dpSqQ0N!9AkP4eGba*T}-IK4_uUVWglQime zjISmMFzNY#phWkJ&ex!>q{h8K~($yqU z&{udq)0jGbC5$G=on27-Gdth&Lz1wLyo?w34RcT>k(W46%qE46V=jD*C!ftAX=uL{ zMT)SFpm;LBi9a*z7{&Xc?V$Vvj3j*-pdTWA|DGvWGhSaCpy);dZ9v85;ZmKRl`zsL>F1hLlPM`J z{Z(H7cj*fgA;$e4tbf|(5GwPKG}sT{_(!4PrT+N z5eBSv&!|B}MEA1t)MQJRd@@FS2kBS*qY^r#>DGM{6ZEC&S9~+3eQ9^;!H-aZ*f^Nc z_|gj65U9>oCQVpA#`g7&($r2sVqZf$e{Tgno{^bx(P{U;B5><|?;!i_xt#W&mLu%y zaR~nRwj+~nL)3yM>%px$qnEhs&%Ke_a?{jlIWS|zj{+g{$*%$9;>9311y^PqjN%R;R&6O%0>&y7$Pf29&8YA8$wD z-J$)JsDtX~5SDl4+K?bn3mS`}jSR|t-q-oi!Y|0j85-4;%E`V2@V2rw#{9k?c8*T) zqZ@ME1KGVAM~B>IDESs~SS>8LmsX4&jDl+Fh)PM7%fY$31mO`LyoAE>_>YoC#GfOT zzY{;cULGP)8xtplsY|e3|Ca<6<3BQ zJenif9Pj3-0&HyPlPMUBHD>3(&&+sv@nWk+ip&naD;$gHlPWDFOT z9_It|Wo5M&rB_$&jSHKwU{){Br)UWW?(tu{bcIEn{9*-Vk$q$g76I+HYfG8aj{;f$ zs?qFoGyMEbmDAW?wTqHhoGQP04%ZUI@3(KBA;wsYiu zjsFzzCy#47%{S1DsXm`$A!Q=v8KWx|g~ya*Hf8dMNsi!4?clTAQ5kD~RZU`NA-nf6 z;Ha4XR|S9Ud<2jXP+L5ql*3CIld+3GZ9*9q`-z;1D(>%JU)nzeI^H7xo}&H4c>ir| zHIU5_S!$FEUt!^MJx_?t%NKd>M`J6ipGA3aEy{k_gAb~hwK4M2)B_YKDM}6I?64J~ zW2jN)EBRzs?9kN;Nr0)|HFBrSp!k!X+)= zze|OFG{xCY$cR+;M54(VP6;XaL690@=gMzm!m;!@J2 zNJgpmmGv=wrA=;qO?bk9)JPg(!4bdQvA@@;LqVc7{dhDNN<(6e8*JrJr+3;jS4(o< zZxM9XgSXS~`-V*nFoSvyN}*J>G1l*#T}h{xRtb-xVMoU_t!1FTbpsUyX&I7r`Kt@w za7rwyDEWBK&fxk~N%kgNS{FqP34IDHZ^laya$oc$h6o#Nwju~@F$SSBF-lJCFl8a7 zGC2{QZX*3+WshFN(H5SvD)sO{v1Q^S5jBa`>6P`lgcXo78=Ij;W$qpRz$_3Jk4b(T zIEeTE0KuhWa;n6d5NAllpA%MuM+pjr1U-^-d(}B zckHq39e4}d3PGLr%V1lqR$Mm6f=}m`drH(PaiF?I)i0QzgELu(#&2u;v3(vy_d~uM=1dBt8{ej`|=g>)4=pbXwVmgM{&25Tc6;-__sh^Xw~(vLoRz9D`%?S zxM5-uwCKdzJlf=zeb<2#75oZ-NwYAh`;i#__!{4m$@EuF*!nWC)y8=*_WrDdHMguX zWgfOqV${WwX}FMIBzn4>>S|_tSSEs;oI9d;$WcsO{1O?hpYm&v!t2k)r;o-*7-2QK zU%g@clr9~EJw|bBhzz3iATx@pv_(6~INc{VYSz`vh#^$$mg73Ufs~dTuCZNPQ^AGE z_#0G|f#n%o%aG)Cr1!phHSW&ly{!!oZM>VCN70proUQMi4rSTUVk}gR;ZxNccIO)6 zzU#@#xRZB7act#B23Yt>PKG#bbEmbiK*O!g@>Val?JCZQ6JxaeMRCmmn9~sqLkwjU zMY##vt?)=EC-nA~zhvgQxmBiTNLN$?mejK>@#!) z9n^C6*YLGZc;=Gg&F=fDoofl(ELvAr@MgRrCV#7BT31r@uw9>m1Esfhdi?~kXdqTs z2KGNhk4Tu0^*{38dtO_7l^)cPVfWCdZK27XQBrRW>9VmFRJ&{g^*| z*o(j4LmXgNn-7t-!`Cp%Q6Y+utae42<~IL1-B|0V#mmj+#7kXN%fd|Z)=pf?IJ1~# z-@O;5$(QxOjcV{x-N?6K7g4i=H)q9@p$U7$h&ML(B(r`=jZ{#KV)6Q2Qu4eZNCV z(xfT#(Z1V=7aF>ai4h2J6`a@#Pk~D3oKXA5iaMzf1()i6^d|CkGPD3h6p^I9J1L1- z{`NDHlu~&>-i(hU<6zj*=#zNM`VF;!>X}Vc;G;9K9(RsW7r4RZ?31f*XrR*Pd82So zD)Y_kG=QZPDctRN;w)F3j)AzED1DAsfoDGUW|qOlv*MWe`NF*O8N0i^(A zZejW*Sh|Rrs{T#P0I@`}z!VIQH`G?}b7O|%YPh;D#GRXaOL&BjC>TO2rEX}T+QZu< zBp4j{^9h)-;K-yL4Dfn99n$Ny9N}jubEel@6@5JwOf>;f-JyM6TbGp&wNFR#jK0q~Sb zg!=ALWk+dcGFQds!PK>;a9T?yz#`mm(sXKLPq7iIcuEclnefDDm9_RSk~+ejbPAJz z>mo$L#VCh^zt)*a{-tgB?@1x-`#;raDg88ZvOS!_h@c?TF-+C3N{R#g^aO1|RJO)D z)iL1%3=Hr9`r7wJ3bumoPKdlT19dEXh=aQl<;J=BW|t`vk|vnxzaMWn^Oi&G zBXeO_P0)IXG1SDb?bs9|$DG^3p1!;-&tR6PQU}_DeW`BCD1_4rQKsIM%Wuz2hXIsm zMfodJqHKXXn25>C%>fkK$Pt&}O1U#|A2+SL~5BbY`tty0mk`g(gM)&bhM=rKg zsK|}T#x19uiiyo2J4VR&u*g5g^kP*<$oF#de+W%snwL3COL3j=Gp}V4j*JfHYoLb?qPEU0*MiOX}f1F6Od; z?9mZ*MOExn}OhJI$ zMFkygb7hR<(qnDF*>Add-@G9ATddh7z&B}h^0f~^s8JYv?6QfcmoN|XplIgL?3{pa z8|Fa%M<<7KV-p3elTpV1b}IiLhIbTI7?!W{^FSFfmDn$doKXcSa@Pu2s$Ugk`j}YW z)jgOpC8*ZO$o8`d;APi3iyDl6-4s}6HJO4XvJHA&5q{I0-EP!YXbKaZ)NF$yE9 z%dxO(Q$TYzqq3Ei#NIAu zd=ev>Iw1=+6*Ey)K8oJXj22#I&+?*cIfZI;8+3h_5QOqKCCnq^@uOhyXw3?ufU zDJ?!&Bu7fJ=GfZd7&i|`3EOR1Zj}ZPZB==;mSG9~)Dd{#p=|vxUY1dR3eBHKJfG^)8MHq_V<9%PYInXzax+W@^?N}R*<*n#QzyEf3`VsN{(?7 zH+XkaSL-+dem(Qz^8{mWQIj-zCfgSTnf|6{QtCojrIPEZhpt%j+p40=pMl(ifMF;T-& zYQN(W`p|Yt!JW9Usk$Iz>p{k6Vq%IO8^69FE}@S)k*d8|Q1~N0?WcnzHR5#p?4w++ z9I}&~VmAXh=}Dpl69`l-4;wC1E1#LJ86E2*7r-kz6(r`Ut%=7mEpQv(+13UnO2`M)pJcvZOB?Y6Y2;Wr$#Q~A9= zpeJ<#LnYmh;*z-65HWA->w?`W_00s$}lDrCq z6FohZ++b>2vXZwbhEogN$HM(hV$euovFAK|Pz^V42r335uXNugHu!Hl3BtQAdfw*d zt>$@LbWLeNk|@M#l{{`^RE4FVFz#7-K}|v00!smhPi??~%DV!WGz2N%YX!4#%A1f&dU>cLyF7|%f`9fiIkdHf^D}H)|fdQ51=z6?Yg$-G@ zM=e5GhN7^0+6j)fmYa!m@{lSZ|3#wEJmHJ)n-yHJDK5_NMsS*@ft-^W9295o!D2U; z=yPDtz+du0?VpfubLp5fMy`nEB5RK>XDC-^FaXjP&-%7>XJ<4PrimHjs`;@BpO@wW zHPvzKC4)V&afXmfe^U29jH(93a!%5Upl1gFOAIBxrIx4Y$bR#Jd#$CgaYHp~i2k@R zx1*~aZX^0G=E!Q1y8lNu{`m4PZwANoVjL*iMX^w@a=H^(Fd21xNacI|F*s6ye#t8= zS6_Nan_p&mRdIXp;L{ONe_aQ{{k}UeAC?e4d-Mr4z<3)-Wb-*pM)7fbMlk@Mw z+>xnEI?2IYVysXdd8T6(PGjRg2|8zsA8$bH)f2-ezW*O%Zy6ldqNEAlE8DU~mc`7> z%w#cBiB;kftHjI}Gcz+YGcz-j#mr!_rta(Mo_!lVyB%@_ZgBz!*Wr0H~-W2{d@2FeprRjp%(B)1k*-u05$%E%HGH~)&x<<*)4R7XbjF%v23 zP&ULQYDk`H=I86hBt|+Kqg&M4?|)GVDhGq-^4~~F_0TD3ir;Tc_2kXodK1OCq1}ol z5lBb8$gWk#Om9^vEGMKI(X4a%)+J78q7SlVK>mEdlh|a-F_U(xAjK7TB@33LiplIE z?y$vJRLxLiv&pamUcS_weg$Tb?>88@0SeB~RnrRV!X(S6*a7zHs5pHfn~-oLVME@u z+*oyjj9`!ha%9fTGEY_C@cfUj9BQ})>Qz9$jI^)pNRsM-%$bXY-!gsvw>it=1dEfH;oV~Ou~r&CF^tI%iwjZJZ;q|$`tb@ zr>g5f&LxhIy&h?&VvWC~cUt}(E%WWo2rU(HQF(Chje&uk-OK}w$pEx2Ew9HlA{-$L zNoMUVF1F?gCCzv)$Il>2Yw<ESC0M06*G|9H?M8DI0^t^zK(AKw^jE>J74an+CB0nAZboSA})Rf(l&lAgo zLk4JQzAA=476BGGcs`agr0g|Frg>c)x5i&Eq5o3WxpAZjd0R{-G`Cc*rG*6q`CpNb-mMV@|&w694VPyN+S^xg}p+LLDooihl(V9v;DAsy(QkG+78Bi$CTIQLjae*>L z<8|G>Miq_B(kWht%htG)b!Z5#R}sjLe=50J>;s-Jd$0yG_JYT5mEY{n#`HAT}0KT>BEc0 zJ8o_gn3#l(-qAM4F1~50S5>9Gb@lL3vB>QMAg?cij~~MSJ?AV33ol4c3yS+1#&l@V z;0IoWm&oVUZKPt+{%o`~e^IgTkx!yv+Ool}nuy0vBIcn&34C1g@{YLdLUbV@Pw)vY zDL@MRfk~Ctq|kW!Bj|GTuxB@_+2iu>x*>T+yGKU*AjDZ#u3%@4zZ1E>BpV;-C#v~& z)PFecM{p)A7-Rr_ZKW3L40DrWBRy653q1M2TihZgWw0=dRSHM>KP$SJ>Q*9Yjn^1c zjHONdi57G;QCmy_=hkw-9dfrDzhj!v!ZOO3MToyH>`uu6rrAal3jiWLEIQ}@;Zcc zlvOmIh&4kQ@`@_PQzIZCd~;q^nQzFX`QlLpp;aCX8I=#}VUf~?y1WJuXW>(xvSYoX zqN0#(I1iGOIcG_y#IFFTO^Z8Q4QoHh{YRava$sfyZq88-GZiPVpd>u95*b=^R6XS= zr=S&zuB7U4CsNghS4wcC9A4sQkATi*CA`eR{cq)W%KL;@1DkIleSF+0SMl(G+M8i| zYGP@2=7!>5{&&jjzONdWyFS*@h_=^6hWn(73bE2&lK7%%1BN2c%qRu&`pI}DR)zBk z1u+8rq7TELsrq*FBjn;(>LfN_o$MNEW4PIcwW{uT%ub^zI-P&b&%o4@A5x~SNv+IU z9Xr=$?VP_1r)-G5PLuYWd%7&KZL2B{1nwZG-@w@nkLt^cky`**Y-Hqzs91#gOIOJG zaKidU#z7#)u#jGEe(0h8&*^h>HWL#)9gGA`J5cOsdv*LgC`I*#xUnd%pkRW_*g-;FYp9f%R+NmdGVL7B?-~Qxyu5_ zw#Jr}!r@<%AQsd~s{(^ltCI)Z!t*1phxS|ltoOsNYw!2Bt*0gLH?_{kV{!V9KfyFn zn}?fuP03ug3Z1eyN30=vEQV8;(OpZm4ohCO#uzZiSiNosslspfU zGiZkrnSD5hYhB|C@mL!(#xkTSEVw38^7T}*g5);_<`>Y8qi++Y;Tq!F@$sY#skfk# ziHJOMio{+S;TjoA~w+$znYklZs~q zDTBMzEizR(Wo~&(Ky4*{X;4wg*+pJ`j!*0vCt!VirTChfAG&H6loyg0f=!M+#uUvz zC8CBzNB5<^Azo1l7}5F+8}6Vo9rI9C(SXf%pKzoJ)JH)Mvvpw(+%8ELCkLUY_(q~G z46~|!mA?IivUll{&=JJO%oi8G&RZJ_C&4gIOid3ZZ;i3ex44aQB;^t>03)fNUoaG# zk|w4qNX|9TlK;rXl%@Am#UH^a(@kaqezyIR)A1!zq3#mX@vGdl!yP;VfciTw1@PIk z-#U}bT+jdLUEe@_P%=50$nh2zE6#pTqATb%K>OyN`M@cfwMF9Yh&IMgN#xFwyxb&y zI#b`b4f@LZyr-@bttyq=wPvBM2BB(@o)>2|e@mL=bhOlll6HWpN*%w*7myw{wxX`u z6F3W-9xAP&q~Pyq^|!?htj#!s$G8JALU;MIo&2053(=+nD2O2kqBydd^xlU7pR6&>> zE*bJ47X*)6A1@zQ0w2$6{4dw;mF*w+N&K(=;__KGzn_g-zvJeaui;Cf|Cx2TVkI%D zV)Wd`mUTyrWoDNZNvgk0WFLKYH^am>w7R6H-{KtF&S5T1Pl^HkfdbCaQaP)EI0wTs zB|J5S;Y%K7@}_0u$`M8lt!J~lwWB-`J#RW9C?nM6wZ$kGM)(a~S5R7JFcB?eab*`6 z7gPq7?b)Est@VscBR05s7Om9%T0+>d%XEdM?;XSM)j*)ah@3$jOta3w$U!^Qq^|Ch z1#c1keFBY|9npBT4*#5+GWAnhlZp`P#8jFYt!r3xY#IqT=e%mtwDxCBYIo@3BfR`t zYY47VpxqI#k`RaA8iF7enoRTlH*mvfIhhhv*@lhMkWei7qFr+$imLh+qY}y><%(sr zzXU;J@2IIqX{HyKdY3ox^BTTma;<>2&w}rvF~-+DYOcP=3p6f`%pqL<`m1*r6e2B6 zrjuz1<;#0*uNxLMr0L=v%cg%upTc&Gy67)WF2BVaAt6fnZb}r!Pb#4 ztM^x|+cwFJ4Z-z2;+V9iALMipS#vyvp{dj}-_#FgUg2N!f3T7Vi@c$;_)8c>AxL5u z$^SNg`R{i1YWh+`B@l&vU!5WSMUlf4Q|SXfnYS$k%x+!3RVI<66V5;z;+)4BFWwLX zpzGtuaaz$g@Ufn!2ALe$KDe}$EW02jIP!aLTU*Ha1zCPU*v@eUZnIOG-;%XrU30>L zw!22VM+DvB<&_K-RYyeenoPCAD`1~SH@;A}`{%w2*ilul zpiOA?(vDTN)4!~N{fTNjUO7Q=aY0n&k`ZmgFTSBsabZT>)tW$s&NAM35UG9!cfyDv zx8cmFJfgmaWu{w%8{KnZNgYj-bA8y69%;)am005NSNYzQ4wRCdF2Oh_=5 zx@A*N${`a~yG3xgSIa4Az@|G_IWn#6pOL~@l4W;!Y(e^gFQX^&17GL#dfhNAsf_PE zQ_df{`3Ks8tVg{76%0{6X;4fox}=UA)PhcHIz6ia_d?Jt z)X4NCFAfaT1TPNRS%(P-)k3PPDs)4Jj)o8TyqPaAMne!=8;Kc&FJ_;%Jp?J+VcuGWwx=zT`rm&FAlQDdyD^TG=1%S zy|4Os_!ln&VpZgB_YYO*KbYs~qovoTIHYcNA-Qi9rULc}m2ns)D;-($*Ho`<&oF1$ zB^}|Jvji|sHHDNE0XKzWrQEH>Cucdid498j=+tX%#a5PiodrIvH(CH;?V1H( z$U`Vb4Tow1zY?4UM4zUdB>m#;qo&%~T~^gKEESM6t>Ezqp}>fex-&5LhIxJ=F|Vu@ z3NOLPRQeRBWUNp(>7y+^K}XzdVGPr>J+jUZ=0XSO>dKyia5^pfhk(bcmW^}W(AWUF z0OD7nHx6X99YGm?#A~K^QVRd*6kI_sO;TZ>6WrlC5dTX2!=xr;P%AQAIB5dq;uZ-=ESzXWc^;H%E|c%vxnwtHZdo&0g-%ya9dw#SUkcpob(+QJp4R3w zJ4K&HaN==0sO67i#^UiiucW_c6zxrafkn*Bv)Q5weMtYe3E&?Y*}oo_&i`;J>Sd+C zC@K|$YUPMyt&7XWd!Yob3LZRu?z~4(H#*EtNcOcgrpGBgu_?12Xeh;B3dM#h#lhO@ z2)cE)vOAx&6l-EY)>#S`w}hjwHL#GR5-UkD6{pBW#|r{zL6z+Q)X}nfM&q?m=U}I& zsD@gzVZ&aL%g4+|(tvt<%S`0o2?|}ZlOPA;(V%B8&wbh~ubW^B0{-89L(VSGlV2X1 z`lC(W1d6xrm@SFK>I1Rna7*PYy7&h!Qun~h6rLHdBNk|qHp;{s8fjV#aJ8Q0!w(I_ zG}Dpr1nxTKC#uKz6U>yLj2uzeF7d};gxko zjrPM#D?R=ekVZ>)*!n4c{Y4qgDC+UeTfOnsJDc!a{2_VEad1@Kg0Ao9wdfgqd`Q$) zVK!;n=%TTCn|sO0Q6h$-#mjT?9B$AQY}{SoT}bz~o;_X22B_FrykMVv-ut zmUCN9&{S#NL(pa+7uohe-(G3Ji@0)rF;%B;Ay~QM1P8NpWV5an9$_F!LHk-B% z4FHU0CHfGDAtns7VZHqC89uA<1S`_-mBM>gTk`J@!h0jNx7Dnd!R@kJt(QsSx8G%v zmf3>6?J>L%DjwO{rOkSaD*v8J<>t+I;b7fanGbii$MK@W`z!%tc1qN0o%}eVbR+(3 zOn*`M^C5Dh143yTMWVp78I<}=!dLCIwk*!xyAyyYC*-a#?E z;SRCu8yZ=)4d1Ky8oX93{Z0T2smgbrf0-8kUpa1+pP}=9AV+E%U=Ic)fWa5NT^%@o zTE%GX;ihFIgjm>-{QPC^lx`HpXem4maDbIv10~M*7 zz^IpnL@eSIcV2&WP}c2HKXtrQ))4_dMVXezY8I%?09?@=_aW?V7c9^~(iNMAPu(QV zveX(@30UxA95UPCf%pOKT`wYLx-8W!K2!uljh?(G%)otBQj1&cM<|_R_Ug zv()6A(z>+5Onhn_97=i`LJqQ6%B+TRNMkM7A+TXr=^If;q55tkBpDoE{K2aQ&E@A z)3y6q*GI5+(#f5quh-}-0rxP7ZQvZbu~^ZPo$(IB z$Xc-oD41w}vkO(pUdwUBZiWbyM{btJI&3pTzNVCgD*$H)sn?qt(uuKfR0f>b_3@Am zL#gOI^h)E=W^Ah82D!nJV3DF;NVRx(g-41Tr7v0NpfJziG6u301=7R11qTPSB!=pPdbiDqk^ zWs;r?EUQjfWLa|gM3SI3qvRzzT82r}N$gEg-p~kzQ&E5Iz&@b%fT>&M_~_1sveyRV zZEYgt$?;>SD~2%3@v|Ez^4`8gaTLk+yG01Rmb_LmkK_zL>CltnfquVoDx1=bF&L}V z_-qw#H7cuMdm8H`O1p4-5A8%=w_y8@4O@OATk@HQBePSmf>rl{f3BU6VtCWbKm9yt ze`J#!XTdGlcO!^u%Q^h!69uGes`Ag)zjk9u{mCkH*fN8KWRE)&kXalm&L)13scz0X zTG95GrAK0H{rP(u_5D-a=er1`Wez!s56+&qG#LD4nWJfAVlncN_4a_H5K-cyMkMxz zgzRfkUv`Fn)9=1^2A_8R!yk@nX8%Xd`yV3S96ZcW9d%6Tn3$vfB0VjINNH`jzv(O= z7Z zw}MEaN`?sRuX;!d8MO1>rWL6ZonqLz#MhT;kL`I%cx`+i=F~9TUD9%Hn@l-95_>J( zDKoa@t{+j4&(GtVIA-{kCnL4%);sJotp&XMr?%RsrgS^|oC&sm_dHpGEy9b2b`iw< z66estA~jL`37ydKZdkFqg(M7xg_a5wD;j?J_YkiDi`ZJlEL02=h!lr@PD-Q-M?M_0oXo9@^mS5=jqu-~x&41msNUFDN7fS&vZNHK~yLRe^3r4(q>c4nXQm zd_;J@aqbecVk9@n@ZsGC_~JTzbDE`CANe)y82H(mwQp-cDipyB0JXmOuH#Yu#skKem+!EnQ^~>@XtMRVOq#WyvlPwWbS zWFbpgqy@HpR>_aS#TcY#;{z;>)sg9STu*yAc)E*h3u8E0(C&OayOL(Su$2L2kK7=5 z)&oJlLhW0fB5}VMg1nNb$Aofl{JS=hMLwq~%67i|vKvS!Js)HPSEbJ^vy1I_LKWW^Ou#d#k=1puTXweru7>To-M9_QG{Ku2*giuSP*lc{Oh~VI1|C_8UuCTXoDTC&cA(tko;*K)XJ2gESzPvU z1`@n? z&w63unW)e~UVfO)9M&A7T8y$ZDfYLu5*#y}fAJvwAt7=XT#sbzyN3TmtNsAi;^~~_LLScEw@{dn6 zse`_*w0hHEOkErdK54gm-cn|DIA;)ax%CUYA5(qY-J-m|kG1i3)_2bgs5(v7*A`Iw zT19bSeghQF3db49Tf(lhjjZMiuDYopXUqpXDpM>9W?+6*DOn&iuJ|4knJU6_^5Z;T z_RI}$hvOvfC|5o+iAoed&`|O%+0pG$)9klN1yREZVE$Xf5^=X!$`7E5t03E=`4>f1 z*vAxFl4*yQc6FRiu}|`EOV@L*Db2FvhDG8E8VS;#+EjEKcy}`Lb9{VbN4=_p&fp?% zkL1qdiSY5MISw|_rGC^1z76F?Wq@Y1plUe7-%hJ8<{cvS4Ny!@qn|a)euGM7lJn3z z*=K83%y&R}fl(Fgole}3D;8tBMrCB8Kz`j#Zp`1HqM)ce`b~?7D?7&iv6;VgDL_!{ z$v=L-O5-%o#COXY`!@rTwk^fu%agHdGy4fm%ss-fqH3}YcFiMYRj#*RoF9K5yQjOI z(y?cC2`y~1>|Jt6t~LtyPhFBZIenD`7+$hZXswD*P73dxaZ9~#qM%*~h>rBw116Om zj(8y*HMZ@NwdG|hn&SR8-w5(9J!dkq>7IJVS2Vog30PHa+|VeE)X9C`GdhveNmxCN z$M2HrWM$A^rPtvOoQBkA+GfPk6)(Q0lFPl!?==p=?%$~TdG;c5U@|ASuT=Ig|1&b4 znBI@n9Q~s}(OeuPA00#g_T*9mlpsMcl-PAhGC3J2Au-U>3I8;7Y(Gz0>1&|G`8i2l zTSWgV^I05-NnWOho#a!{IPGG70VpZjUqy>|5dcO;u91}M(b2p}PMByt1E<^D+fI%R zP;nqO#Ucxtn-5!98rqZx?S3_G@iP93Xob5!C%*JF*K~P{DBwLR@P3snAkfn57l(qI zZe^gK8_|IxTMvCQee%p~`M$ab@%mZT4l9o^&o5UZ+Efg|{Ay%ymJnR4M82w%@C}G2 zWEuZ0uBp_2r387un24dg&~lmx;+? zteGNln&1zlr5G3T(VIgPS)oQTs`#0{Ptz|o#w^4EP|Oszv}8g+P;o#+WZ`TYzIr7F z)vjOd<71CW=FVLj|eS<aXR?dD@I<3F#;|hO2lmOB!A%z}N{7J( z4L#oZ@w~piq42+-fg;;oqXPYghL>CA`Kj6Ty*O%E)e=c8z$5RoD7lvSGkXd3MS^9-hgqlP%CU~cn8XpxZ_rDgh=xv}(*!EY>dv~rHM_Flm=H#VW?A3qmXIf_?{r6$GLm^nu9ughf8`^*i_ z)Q~KTMDpWpa70~+!3CWe%sGprpQU5?_&L`4q74{GsG(#_VCsk#L%GRt_oEm^N> zRfm*L+QvewYF!&^d&}s(zPmkEEs&UY{GF2)4r9+mw!Y!J{MT22U%Kf7iy`BDaO}O* zUDBYkR|r(+~Rr`vcCLD$&qh|)Ybg~G@ou=;)CvlPtHTDaN^;UvQOvKqUdl4gXZ zB$>r%scmWbKtm%|)Sy#)8qbyG`CwH=+OJ3*q1LY<*qCHqhN1owb)=C~F^o*|?Wh`Q zoHY_R^X#+6NyD1UqVKc(u+Dh-dVi2^oC!#rr{Hh&O$5S_fm=7R8Yv#sA*mp3*_ z?Cns%d+_6R%;a?}>hktbzUun;yhDqNvA?IqsS#{tS zzmq*7tx_Xj6b!+17bQMJg{e~^ojkD|RpLfjnv1K?yy$nVrzp?k zp7nuu{`6G5K1Jc2XR{Faow8j9a1?Qk%DuD5}2PYc(xNuk;0 zWkF-3Z|aHNs1)2t_eEBxTp|YGZOI&^UMDCT!Oh>2nRIq8U0uN4 zu6+VCv@v^ADZ+!no;|9uuHHU#O)c{3+{F6!I?kEP=7KhXL|BB4byrI{P{oRg{i#5G z9}SeAz`!tGHb|O_i{)2)x26;pDM&*vhoAB2atDE9x)8?h;K6lv>Oh5XX;He(2HDT7 zjVRNzqIy8YcYp`b{mSe(aW)`}6>ok;T;lRC{ZD=Vh!H4U+`|0_T)l&bFlp-X6fPb< zzhX3Ap$o5$@rLRwKL3dnTwi04^US!FVNSO+a+>U$WVRA8_V_+?xRp1GD$W~`f%3t_ikIXpI>v~UE@q!y_vjoLy2Y+2}T z5KSW9c>S=!@_Mzh_Bxiuzpwjo2lH{$_w{vm3Gwl`Puj!9@vGVcVzqT?48+0sz*t;8 z8Bed7Hqc>AZKTm7fOjY%zg%1P1e$GUi5jWH7)|jZ^d_bR$!XLdSVi6s@cCguCS<7^ zb6PT_P>9pFQVDMeHY9Z9)0R9vme3NnNGEC7wiv!)C$oceOebpp@)^=$xro1jXiycX zFb$fr#rv?tbV(?dH`KPq*3mmwf{v2d+8GEAtZK81>T=%RJi9DuSoj1n&v@|n>`d!G zd1nhUkT73(Dz9e!~LJ>X$47PODqK0du2!nE^hsIfjE_B({_pGJL_+C zOWk7t7!EixUfTHm0Y$_yU9qC~Sl!T)O5@PxWU4U|ntV5nvJrx>XZlohP0IaqVrT?B zjvh;qaC^-k(QY6Krelk76w}}Q6C56Zk6GxZNWkP)rgsvi4{SF0%QARFy zQBp+yCOdOmcctiRrQ+WPtS$c7q)9OBA88rz+b>2r>^{u1a!-2(qT6Ri=feg+natLy4V{loF(2LrKfE^F2)~zPL2DTKnv5g?kt@MR3C);648F`h@bn|1$L2hvEEq za1LsBH%_gSwmicuF&?wwgJTf}K&KFtLYiHOOPJb-lLDc22CSq7+Ww_%gmzslCC`^$ zqdf5nG?*GKvFd#(;(}vbHQ82VJj{{hVbeyMzLYe~#Am-_oMZWopSm~P&w%t}DZ4`6 z<=FiD6aSS;@@~N2-eoF}sq`e{c5Jrnu>F`_LdEYiBIPrMydhkMHg)i93QgLHcGE4iP3}hK(qugx}d^l$Y!w z=lk?h4qn{b8wF)#gqWFAbJy6K4vOSrpwJO4oG2)a7M?(_1G%p+uzRibe1C7#eU6yi z7T^v$oQA*fRBCpJs?7lf%bxrFn;fo-LEz){(1h zJl`{AA6-8=A;`&%U6U%sl&mO+j3%9&G!HGyU(A3STe75>tRN>gH9}4fDe_Ce9@~Qb z<1jsbmuCP$mrM7S_Y3{UUEj;=7-G~@5yR!p#G4;4=j>2Oid5sDB*r=5z@81u90*S) zvYv4^SvsZ)5^2T|qt_A(QISJH`4H{8)NiNzpMmYfCxyWr5O z2=vUv(XMbIHth*=5EXf7Gq!XLn(~C25t5~YC9EtWCik#`tn!iOliVCLdcWeQXo=)X4ve~a%GF1ROQ zl$A1&mBYt@^wlcsfw~5Qs!Dwi_rZMB#mg2-RDI>rP%oWdZcqkEH`?BAm>YUb7Y&we7r^{og68! z?7lfVBo+MF&kia&APD9Fij{6q?|@a2&6;9u(u^RDkFa0U$EIw5J|JZd&q7?j7yEe! z?>ItNI4a)9kmA`$QsWP;9K6J_bnL;v+8madq*5~%7fwULTUiYGd0DS38&zZIe4+TX zvYL#w?$=MAmJag=bDBS-tzD5fL}%bphnN&nyA{lk`&3fGmG`S#=#x5kK0iw-LFCIt zd8`SYqu}S!x+Chb>;m4jlN}jzbLtWT+?-19`8e-#BZayzlA%P*y)sLJh zQWMoRP4NOGlNjfFXAKmT>nF#4X*Ek-5qf##eB1StnS`%4+2T#2hs0$KIX~UqA~ru= z2ph|16qp_Az#cZn^7F~h9?UbDaqsyGCqT+ejXnw{r@T&m$ogK#Th_`}- zMW)aQaRyaQbR4pV832yoqPHZkxh)Lk07V|Dd%cYmd+Tw_k2Yl7&(qTg8GmbQcSMIJZd$1xP#0;pqX1HecM>=#d353T zOU$zxazHbv5vxKMvo4Y39s3a=?38P!a+{v&MwJ_@cc;vz{-){8LsDM zPkcNQmVhj)=0tkVrC6U}GOeld)83OzmIO2}Kd!{XDdea@j}XG&Upb>6Hwp(ag=Gplw(te30RBa*-(rPp@r`7Wsy-D?J4_!D6tH6_O^QLme{0=ifkj3b!I zI*sF>laYEu&91Jl0Ns;;Xzl4lxp8#XXA1KpJB-+9}9jCL&~zl^;DU-*7w*g-KRY?DAu5QyY54 zapP$-Ygz7$^m|+iT_P>xT5a+Iz&^{^_<|o2jykd4i_Vh56-m?xqOj$Rli^L-BWFQ5 zob=4RtedJi*aYs6-l|sKJS)GMS414v*H2Yy-&Zv_nUQVL(ryFWZkxFnbXS|wMepxv zt<4U7Ch_rAOf^8&)e9G796yQ}`Gu~3ladL~#ectSc`bun=pRY1W&VjCSh<-I_wHK% z$0e4ZuAk+u)@a1)B&n7mKX^MwF;_(e6wE8Xh}9n^}2-}dCkedf`>(7tR~bX+pzNVG%1?q zoYF|3Ik35|CZi3Tr=_Sd2Iq8DW4hAVZ&Fg2(#Oapm`~i;^?IQ0^_8OPs%WcoAj|uK zSHRsX)Z~vQ7xJai{DvTPF*z1{T&Q|*P`H1GRPUsh!GqOnswTH{MZV2DMscP$!ueR0 zaOX47q2lTL{vU1m%V(g1bt~RRrE4-=QuYMUSN{)GcuQCv6B=!gYCWp^wHHYEKsJ4HS-P`nL z2`ID5)mv#A(S2nz9P5(X$lJ=ZKexoRL)TmF{L6EaufDR=Z{v?gjHR<@$oXwoD0q(g zx!%)s*S7vxpVe>o2s*I3pV%eWDp!&qZq6(+eYsDXL1(W>z%}lV*E4;cJinwP;hqMFRHXUDhgq~s9=D1T{LWU~ET7e}HjK6q- z$6LyJqnDNV)t!}hxnjp>a(uq~oYunBNKum6?tvV13I5BHjV_n>!CKcnmg0g}A`Ny5w`&HN_`^S^MVO4@(9 zAcj5)=`bzn&=-2;WQQ}L4>xzJ4=za?dWf4_)6#Dr$SBt5C-WGQt<%s#O3~kLhR~9^0GAOv* zs?5{3;9DH;`rkKv&Xe=~B-GHQf?gS<4`Z*Qu z8yh;Z89n*3!p~~{C3ZpbRe z{-qp|li>crbwYn-5>45o@b`t6a@6ff8p=BR5_zhO-Zqw$s`be>I_OMa=}~)rtlB_ndoThO7DRV2 zGn};WkGJ>^j7@n5b4c7F9YDJM&pXZQtD3;hN>e9;=a3-2^`(KADA_GDiDbd4zKSDT z*&5Gsd32pdTJi%`J3!+P%-YNw7!9FdN(6*9cB^e z$E$Bwr+K-jpAe$5VVB6(R43Bfn8+q!2HweR<+duNJ>(G;^=PBiZOw#x%A{r4aA5nR zY$8_Xbfuo<+c0Zly^yj}%%c6S0@?LFVqFUViM|9sUG)j*T>MwWklDW?hP04Av}N9e zD#ND^lZ;=M(Bf@8jZ2lOI8f2;l@ytpP%-S2WCq)7nGZ|~<>(kdf*K|9H&IIoNwvkf z=>Z8UfUeYlhKTj0*&e@*H(qizqq@?vsHfT1Heg#z$=J`!?YeZAL%i=FS3&9Cmxq{9 zy4mhqig#bXBk_6!3m?kgZn{_9T6cXgdB0Aiy8j#sUSYGl>%2d%U z@Lb?9bNek;s=6*Q5Smu3^6d_t@eA&k`7dHd!)ruyk-k$WblS;K3SHj#rB6> zvxby5{`Q~{6dm&`-9BfTo#MI6XU`FG*8R2OEgOObAbx&9Maa7X)YEU&(mT=uriryT|*-Ve=DbZzme-L3w{b7N(B545L~OTG0L zRLdSehl9$(0tXz=j*8@URd_)H^C-9qhF|2UqIlBTQu&JC;d3L0W?IgdH^h1sG5U64 zz8i@n3kQIlHD*q&u`=CXT4<%( z;CN*UCjw5Xg z`UQR6Cs%c(R$p8lsU2iboM&U|Dh&j((A}tstCD=u(ZP34RAufe z%p_}=piLl#eBYyjP5yCYnnJhT`iGi#hxF&asCmuAwRwOKcSG||8S?@!K^R@C=xbT3 zE&6y{VMQtqjIrhlk--dRjmF~CkqR=SbuGYTL@lfpRh6EO5!s)`d0T5wxUsebaO0O^ ziO4x_cImlcRHGSIAebM2aivB2Qr!97HS_7|E2Kc_CSQ*{@9c}ra5DwDn1s)!y>y;? z>R#Woyhn9E9%GtpFkdfxhoL`~MbxDRl)9?~fsS3rk>~JN>i_NWw%*+gy7e|{F2g{8)W&(p|4(YRxXVR#e|Ad`2?{YV8Jd-u9JMjUn zJ2KOGI(sYIIweMO8D_2^oRPEUukugSLibT1I$%f_OHgq|oW!&oAwD@Lcc6&})K)*f z7D$QnYak;~*#WgOM}LCXJkdKU(-Dqok6-H6&v~}X>`PCp){bm|NZM_P#G8aC|8^lU z?mn=j>r!m=vNciaxH*+g+H6!qSRTj+TSYMNn>2Oi(-Fn@Y^+pK4o)8?zEE;Z;md2i zn`TD!drG&oXz9a6whIwp9h&G0w40H|G4+nuPL5;x`&&=ccEEnz( zONGEMcHEyyRGEddN3)**fzycLdZ9x$fm;4~Ik2sE}1#9m?I03hy z>0`M1@JYfjgql7)y^P8Jw{t$)QcFEAS68R_+t*lt70sv&jQ05J2{r!lg+W=5L=4AI zM~`6W!wXbWIY6A39$2TbmtmmwVvDHZI`PW@QDSE#Pt=ygRtT)9k7Cy=i|>>)*R4(w~2V zgXIZqt^X@Hn1+~z_+I*pk(L_aSfoS;yTI*t6*FxwDqSkteW0k(I^}+%frgX+iF1KR zRd%wqWJ_mtausUQbww=f1!dW8<*M6-8Q4T4E0eAhb%I5FCZpZ|Y5vQ+{g5eERv~G+ zVcbNYlwVp!kAC}9ht%CM#<74+xb`OJLJwt0$DGI2JL2Olf!Cn->-Ey>eIMfET$Rqg zS{1?mf|8ls)FUS+BneC3kTYMuyNd8a@yC5}uqzuWb46W}e_m8`K}3E*Kz&69Q4uPT z#BUHA+5rt7rxc4xjm5keB%&r)Y(eq9NcRY2M=@WKD0Zd0jzoZWuq2x4^ie-`^F^?* z;V2)PtHEh1L8;mjw6Xd1`|4ZHwJokNiA&+1oy^rJ3lDS?<^Z`BN$Z|nhl-Z8MwP8X zubz9>^%qfUt1j$;Ro8xOC*+DP!DctOm=nv-Cr-IjuEEcux&{01K-0DQ*vQz4yTIK|zyS%xG)@Zj$5?v~&*7Tkin2X~U-u8q4i?v1+>+}(n^HxhI^@63Gj z?bg=pR{i=P=(_dXd(Ly@q~BK4h-;`ureY|!_lU;?!GjI14X;g+%N~AN-p8H`Ml|iq z2R)`}^0+>rjA2xeW8m6*OcIrRS#wl*=cgwG{g-aJC&>Q!^?=g%o}bD3l;8F+u7srv zUSHd1Q4~~32+0?4jRK~I^V_YHxEq`t%$Rur3$szM&8ylf8O#kLi}OQiBK*2HG)_b$ zi0_mcFvMp8-)(wljR@{CbKK79hl`?B_-eC>;~X_Cq)M!r%a3NN+rZhLW2dVs>ePCT zl0FvhBpV}3;|l!g&1U;J_CrfODEx%YR)bRZ>&=NPZnmxezc6Vx`KrGs=I>K-ly2@A zaroX^7IuTNVlVn?`NUhvfq`Y0FsR>$xigei_K$zvtEOCOb4^~Hw~emW;_P^>KK8LK z3_vBJ?wsHMXc9r~anF)4QvxR%ytZdvzx*ql1om3zu_?bfVa0l-30x8Zk1Z9>>=r*` z(gx{~6!AFcez{M-`_pL9KJ<4tDmXE5buz_AOCx+jTFr(&$9|y7ai9@@1-P`4g@>rr zQLXwGWcVWUdC9B@)WXg+m1F@yKcOK7Kq+qe@gYm30Z5LiW+$*6n2#LaqUvA&O91+R?iJAFx zpyy(*B_(}{sWOK#ug z#Odg<{a_)IVC~04FpPk69DI5|4Woh?AU`(t?S7SA|NaHZ=b|k8YUKMLX54kpnBPl9 zju{>tgxfVp#c0_e_j7g~(D~QI48um+KAp@UY+_-iN(WOT1!B45n(!*?0=Tw48^nCd zRPL~qHB4a7nBeH_2-CQCzIVH-w_58h*tloA&qIHAvh4XslN@@h%WkFW{5KqWzd4NY zx2UZ$^rWssg(GN|6)+@!^Z3V~qcTzba_mUz%+l5@3)pHy*i_OMT$QYLF&FRDL07+! zsOhY#DtLEOqE*3Nt8ZZ*wLU=O{bQ}0i~16M*w_kDNQCDAQhs!5<|$1(qO+W;xzSaT zSntzV4m|%ge4jMi*$PTfutphh$w)PU_jm|GYP&s3c>3L+(00>9R3*&cpAcd~ln$wO z=o&SZpRoKQ&JY`x=2Dn)q#WmT7w6)_W_S*qR$QJ3EUzb>qAlyIw|+xV2lL&GZX1G`5+`CSikL++!)8G2%>>6K>NZaL`%}u(J5^@^UvFcX{`nZUD z*upv#n18?F%z7PC!uL5cE2m{K9F9~GdFH~QFHBI%74gZ6UNV_Qo%r$*P&2e;+O9Jp z5R`F4Cb?go#sv;(KI^M2a) zvQNwA<}zh`oRWb!=9jwAD&_u9)I$Q>Gebu`%sUNr=T?{JHRZ2;%&>n})l z@Ajg-dNltlhP&vW818S9Ut3#4ZJa?n*p7Po>;}Icn^GQNwYd$-tbY%*(AbwaY!#+? zb*L+k-0X7u)YnE=&2c$8ON*kVf8BX+j3tG!)AD3HzoM1TUZXRd@5EfTEU5iOx0e{i z0nI#hE-MdQF$1k89VP=EO|oELL`#mQ;?GLmbMG6MpZ=vK(QEl-EY@J?)2DvJPh&rn6o=O&m#4aOfasdMlxOlQ z1I6GVM@>$XTPbLv0WzKqel1u0u>7-)4UL%%wYe=>UIk5gC0RiwRY65>l~q@nO~1)O zPoDjtk@|M@`^!GD#kVAHOR#>{$oiOIzNaZdP#pi5wl4k6nl%^NQDcec&KEjT*uShB zP~t^6kO4~JS(nQ(#$1mdbhI___kH9bqE<4Ds}N7@gtN2YhHJ#uGk){@8*AXwH-!ex z5HC|wl!vk2dlGdbCpoE}Qq>ZURvATpk~Df|_uCXRNE8ob@bG$g{cz~a7w7F${FWS2 zLp1>TFmFm=^DAb_tapdY*h#lqhTYo^kMmsFb%o6%1Mi6hIW_Ow!M1TJ=gvU(hmV8` zY)uxxl6-i+Z)aGv+3kHZ8{eS=z&n|C!!KmEe}8g3v*7y%!oyv*1iw36e=a8ks_lFn zWj~U-C5wou9w9Vt9qUJpNXVoSOy`1|hd?f6oNXFXTI%wElGLzFbmJygo(N?}Wu65U znS(9f+H15HnE+b7@AD^+?sNza&%vl|>~a(wBO%C@FcN1Tu>X}=^V-s#6wSq@R!rcf z1Iie2an(vZAVXh`-z9|pHnI6Mgg*Xtaumfh@&3!nf$a!Y6)&8y>|D1-fErRJ_J{9% zvLbB|N17T6{HuTq7xkqA9TdAG*f%~E4XK3bg3XO(*}K-9$3!q!l(GN{1h=KHLhCCN zwF6RTmE~Kv82F7i*pAN18HD}qO)<8=73K)Am?1-hGt*}2j$o`FFI;$z za!XEH)j44`Pk&=Q#97G)4BkwChhU#!(y>ot#XA?rplO3bGYj> zL)L*RV8Mno<`#1G&7Bvm!Cn9Vjbyf*1+SW{rC~Jpu^i_rjVp(lH;?463b16LQ08b0 zv68-GuVq-OV`a9#jRlr*mw-eg-BXCue{#3l0x!f7S0EJ|aN$ZejCc9zBu0 z+-cU%65t+c4v|8b3>dusJE z3ZD;)Pzl$WDZ$3?H({ymeKa)C^Y;-SpNu1g3>fLNiVFIGh9-0R=BH_fA(I%}Nx#L( zfKCJIb)n~?Q&PU~mLlZXez4k8q%0GLeOXq=}Lg3>DzV) zerk!2YpQ#3TAgJSgNr#f92g^CJ*qnwTGIlXzY#`%&`sm}-GM^JgHFoJIG>a|$V@?{BZ#&we6-=Zd*r~T_Auu5Y$2@`{+it2DAAgCj10fjLRS9t6}mtn znk;{cZ?g4n7nR^DIZ1*|b7xKBqfM!2aYvGL8i8kVN!H`BwYIW$_tlkH5^x7xY>A5$ z?v!Fsod65ls-+e`;tP^2FO8QSRKNVDN{m*|b@fS(6OE_wLd!-FN_l#;ffJ-#1w83E zGr!3l?;8AdU(kmA2iKDXt-X5O{iij^iahJTTZ6)(Cy*q2MY~Hq)%fUa%l4%;#Y?>d z*fSl2R5CZ_liwWT?Nz^8#eN;wJxov$7V@ZGZhLO%sDR?0Jk$hkVoPs@ZhWLQM%SpR zSIKu9vyfgsL>w4H=*A*rx*>A~Y=flpkt>TfhmfdV018XGV7JxHhc<+ACAtNAox&_Qm@zM@|~* zI5nkA*@^wF+A7rvl79rXRqE0~AWx>mc~(Y7Lq~1&2u6UmzIyk&Y3|1#E+_94P|Anf zlIts9uB!eDh7n&jx}$FGSEbXIVr zUQnOEu9#;zi#^sds=f{!>opI_K2>B*M;SPIWJu=aVynu_XdMPLHL49fO{?rBCbBCX zZBXu3)~cMvHEifA53TJ&=ibX@=ki^HRYI+{gsOvNm#| zjMrh1{kTbBERP1ep_Sp6Wm+>k>fJ<6tXa;qZyb2;36X+fgThqP?1x}@nMiXE86TI> z`#!o$_7YJb6@Lar5+Y_8UsxbfpYb%iGVWAtRL+DvMUu7yH4QWEwtiks45sXTSYaMj zyipGic0;fbm#*ey#}S;s*(*(OPe_ex;ugovHljzh1SMWRJ0$l*@VEEAe9?;5bAF@@ z*`$f0fed(~IEs&JELNEz`epcuGe2oQO5lg)eF#>Td9)H^uM2Z&NUE+@Huyc8< z>Gj5)>c^N_&l&snm98T!aZ?XT#%ElfY~qN8aP=cWDbCWXOaT<4E=KA~QpIo&EAJyNPa7B(!ax}9FV$?gFE2}xv zP7;d*yd3b?Nsmu^|9-Eq{YW2y8h?JJdUC5m8a+j%pt6Npt!H5zA~lFwA3gTW(BM+1 znydcBZXPU`yVaebg9tN7Q*Ub&j(#`t6R= za9iju@CE(9R@j>%-`oCKVgKC_ZqEEublOBwIZnS*n(?-BoOv(pt#-o?F9j=RgW~e- zvK!{rRdS24fgWq`AH*+we>UI4{^V=6XI+V+nTOof<`wZyjN51~aM3Gmqe?IwTGi03By`r%K#4)oSGhUUEyV zoeHk+Qf4JE^l7BTBBO%&1bBOzDaDBhoH;P#I1kTF`=%t8rzM7$N2}Wt5!`Vx*X^ag z+95Bc)5wLV3LQ(AUBO5u2OOTK|m%W_Od z6hxOFqrEO3M?K0BGxqe`H0bwOGFsfeKDY@DD1I%p7b77??+h#6kYO;T+?&I^!IuT> z%ToCi6wF&BZL4sboL6>Ht$ga8c9_2GYGg~S=$=*kQBnp6Zombv1qx^2qY(69Mdu|O zM^e|$yjtf^I|<2tXA9)`STM3JMQN7+|Ca6OefEt5M!%Gf@ zx8+GiyOwaXc23dOw+B04P$qmY7-yYn=@k@emlA-LnOOWkVXnjiu%zJV!%&n7NDDdm zrM7<|XR1CPu6Vzn>rS8pL5TUJ_8~+S`QDa^9Ys#&r1Ro~HN+xP6DNKE&~bI&VSe9H z;V^@5)zoKHJ)yB?O#|bTl6^~}OzMeK+CfY6fUo06<8CB&HhVt@bTnp@EFy~K7{j%7 z^!rpwvOUp`<7>A@IuZX8))*7Be>c?3TOF)WV&;(YZ0zq0{98o@#lYaQKpQ8suX!@cy@ zYEQU0RqUuI+&YPut44s6+2*?_;lqRW%G%hrT}63mm5HobVTw*1bK!axeL>Q%CWT>U z6?>K>N7cBxN*RHex`|%y`V)JbLiMs7y(RH%eOW&2oxa283{mc}sdnYtn5LBI<5c7l zd^Esi8J<%^0@nhjnx<(27cb}5nMn_;#q8YY;V+*7x}!NQu?4`UhBRQEaN6hKreAjHG(mkd`_0$IQsvz`tLR?U2yU)N);okFIPXk78?+yw(v2vzradY&hOEt5 zwj3+p^5k(cu$dQbLkUYmTs9A^c| zSH&ANXNw#&CQ9w&;)phKp=hr-+2Yo)_uXNc#D>{K>gP2hPRMYm6@!t7TpX#&h7o zGl4^e{f26W4c66?;YA+ zj?obGy%HOiC{K`4z*G1Z35??!2Jyt}?*-c(oqQaxIA9;X#81n_5BIUTzT4)C8J}#l zKpo4SIf%{>cfLoqE~ygo@IPDPw+=2UjzpW}=ZiF((4VG_zC7|izo`2DLizn+<@?n# z>8t-f$bE^J(4@V8e@W1w3va_vi$^QQ2g6~sSYxCi z#xEmI2V28IABm}@c;E$g>k5m}=`KriM8gt=#a6sf9Xt|b4j}@wZ&UyVVzSiR1mHY1 z93^rjNX9%oR2*UYUEB%X{LfsrOmFBYCIM`|Kwz}p-kb(k} zovop=9X8SkAjJSU=>J57vuD@&?`yn&;gfG>VaBCoA2j=Tudcy=6#d9I=$ZDsLA$H! zsw43aG#cE#Pgyg&^{HZ(%yNun+B(X;zSwi+#l?n_o-CNjm^}gGSRleW-KeX zp5?xhkR#^sL~0KvIdP-L3=mNyA=q1zgXi=1O6!FR_%jvR_Ki#s?a4}*X&2L_tBZcXm@un$C>Fk5o4yp-QWiXP`SCOEV?h3< zt+J~n*T652w5c$1EB?=3Q~-)oN__YD(3B5S>GY+oAbmd(kv6TRKRj)@}y3AMgv;~#|(R0TK)AWO~<*33| zoXiIJs22DH?I_OQ{n%F~wMT3#$XXPiBR9#clVMcJe$Zn{Y&(-Trh>HC03-7fYRjyF z{3pF1uZ#eFY*Z>KaB$Tqg*Bjfz7V)?C@98q0|nPj)$nVJAYW!9(RtJN6TjZ9PZ3j{^csl(4?d5helQ_BrUXeGh8jn50Lk+m*}Ov z?|`29YMwn@_a=}+DVgl{Us;;pyEYrwO&;JKwuN00{+tl~d7(;=QgqWID%Z4HD(9|U zIWi1!X|GT|^vr3^#;zcS9!6tXJG)zgu{K_HC@LXE|Iddaso(wJ$iIv@BFz6e6NB^K z+A}e2C2e7x(b4Z#PIK(3tJOk#>p&`J3AK5p!MiFP{nPz(>P%Ht`?-5GS(bLYo565N znrf!fMJ&L?>YO?twV4?cJ+sBn@vaC*+otxl*K=iIkb_rD#ZgnSoxwLxZ*1($}elkE`LcMOQ}yqfC`gR(aXZcrk4S5 zt4AlH)0^FI^2J5y{iNW8BB{!eVY!#wOKJ3=B1r)ZePPGO@Ev}Xt8 zmXY_)$;X0cX*Osa1y|N;Kfex$ZooBc2tvly;vjjDm9?>(U~bw1gkGzCSR$r zfQns$bLKI);1vBtJb+Is_(CCilLWsTOKD4fpyrXdu0CmIMLTS$vKRaIcNn~*R9i|L z4wDFcmKL6pK$NP$IHyS1ck85stmgt$5@>>>k)p6?n7bc@=JlrW_4oPrSA(b9?@#an z6TaDNxiA{X!YAJ(miEGH$2Tp?IA!dt-$%JTttWR*^t*rWn-P7%FTvda`5uu8n{d`e z%3EyY>ZB1#;t&=vW#kE^6!ef5iKOK?m;$>t^GAiQi3Zob(vec9svTZpFZcCnylyET z0;Jg|GCy&8zqwg&wl!*C;Z{^;>(*$^4pFDkfRt)aCDNC=)#jB1B}SqAAJ=rB@89au z8R^ykt}YF4$}bLG36E%2)fi|u!)6-BQYkCd`l>fpo5qkN_lym_giB4W)S+)f8|d3G zb&fc*{Pg5Edr4t2LYHdaCt7uknnL^O0iB4um-K5COYyr9^oJ_&rfHl;-~M!xZ2x97ZHc9@WBdc7T@U7qPOj( z2$>~l(!au3@q6%ZOk(aG3-UZb+dbZQ7{Yvm7h$TA8A9Dz*ZZEQ&%F1&*&;g|uh-{K zBi~FQ69LT4#dNiJ|{-PeT>5IBII9NX4m4C8guhGI|s@$r>891#R*D zsT4Na{73~%mF32gzQSmY^_Ma>glIgo7DY1cWyP_ANLS58)v85$?x0Ay zr~v4x^17{DO3f6Tgo{12IKM6#q#~ZEI6=9)%f!lJ98@j=z?UoVO~S@jom~GpyqmMJ zO;rSnTZ^if!0;Q-ULN^l0?lR#XXo58qA@dPs5E1uv(OnX07uo;21=aUW2~*ny4X># zwaN`Es_3oAn1&ZK6Uw+bP?pe}^iB8V)W_A;hZ%K-Ujj3y3NnY{-fZ`ZNNwQ+=b6Kq z;7Co|OTo2A%B&1-X#|Uz!%^r=e|~4x84T0uUk&1i@?e4a5!EG$vALJH3O4kffE{fUP zqT_lchZzben(~DW6m%Vef1{*SYbPEcx2M=zGm%8NoV^+UNi`lvPBhK$?|m09;N?H1 zYLVLP5w_&K&;Poo`*d*Ex!ErIlGx2FlCyh}V2ct{EzH$*Hu(`&C7l%S6Atk}_4jCB zR-xYJ#`V2fK~aj!X+pk<_R!N=RcMsGnEO4`@be&a(v9M1=t|#FAc0CgP#>hH^!sjc zUCK>xTui5*e19AydYn??e>j6zd8I{ef8eP^n#dRMf-b2O>Xc4$MT9AQ&)%eGz-U;F ztrpFK>y&!q?XgF^63Y)XFLK13{||XXe$0#CKk^12oluK^rCB#o-~f}s7f$T1j(g9A ziRw%YRi?Q>ShK{@5&6e-{CXXV?RBU)@n~Ig`av@Fx!{@e_-vGQr?Thm84Ck2DMIUu zN{_MCt7NS_K%0p;fxd}_nQ=S!%9^LqEuJy?+CzbR1QAh-iMUlw;0*mRWe_Q1X>A&i zJ|v$27%7Z*!f{v{=%oe$Zy|<|<`jOmp`jUgK2M)CN@wxWvAz`iIu3#Zi_wL#;)-Z; zSA=)rJ}S?xvbVb!=OdKstpQpq8e0{*9~$i_W^2L@PwGu@>Mz@nJpjFy^y7F4w1!W# zo-kRp{!rw|i6jr?!b$8(4RPVgRdLJX{KejajMt7c`cqzcE{YPPivZOyBDnTkrk=Wo zFW%_nl5AeM*Kn6N4&S6{94@?^> z&Smas8(X|{2-nZ{$1qa<@rzV2k=HH%c-vJe5SQ<23n}ue59)PEkuq_+#QrEd!653F z)T}}-ZYe95l!2Z1xvCa?56d!>_{AN`tRGlzYO<3Um)W@*=o>pn3M!A z=Hk4n^A9rH9Zg6&k4rjdqTf%-Q?X}=cNG7OurbECCHN=EM|ZgK3hCZlUt}ZxO0VQQ zw4JCC*Gwu8#{#KX&J4sfQcxFZwrf^iOt-(8MljFARa00Kwmba?7Y7GikP{j*%;;I& z=I_d_u2zPnW&^afvoe>gi9}Igwmm&Dl9R@5Uh@UI-A!8XaIy;zhp9Rf39$`?^->b8 zWgEU0C!_`@U4CNyD`=3fFK|ty;sW)}_4hqqhq~KSFE_N01<2z5E@TIs+x zP(ncPW<~err8IgcZbY0fi$wX(UMl!)WZ?<2q$@J)4suJ2%;GZMFpiS0tlS8_v>>}K zqp}?5XWw^@a^4NGM>BPX$EBZiv*k3qx9jW-Bp>%cF6SOUvNGV6cdDdx+t58Py&#Dz zamluMRkno0(=E6Du628&pJ&c!i$}B-?9NPnHLNMAZwjQ9xzDU=M+_8;Su7acYO#5h z^Y!}K!tk0`>FHP`826v>7+va23f|yV=rFNxp5-7_lw_Y(GPpcP@tq>B+P~9CCrI89 zW83T{axsoJlPVafDco9wqMYdH-|4C3UI%Oev`ULbe6k~|+Q(-c+WK>o z_4~a~xRRPV51;|Tv>oy`VWKnq;R4p}ex`h0Ytiib3n?^EPDEkk0E>Evyy2c=m6o@B;DI{D{^+OQLB@iFmANNZuQt}O^in8y8692_8~{*|4;k1s;-j@`u4tTE;lgI57? zU)u{n$nbTMR7A){tH?o7k-_zmQjo~NS>%TYyoh4_;Wjz-hjJKAG{-~m^f*gip_JHw zlz*DQsxWAA1@VB@D|phVY)!?>tx`u~qS}+{R9HP$g-;ddQMp_W{@T2fhL` zZZF>|pa}AShzkxsO$biFXX~ivVy?ACPFO8f-lG=+V0&T;3h~liVM`mFJP&h2HQ|N~ z!Q&Uim0xV*myW9{Phjs*5|K3GL;=r3jER>EV*QsxCBCQOJAO!y9I~Dl&PeV|%ATTe zvd-fwzC66rv~Y9w{H81ud<yYJ-!g_MM&00x7#Osbs?s{9k71}6s1ni*T_g+n87 zZ|^e!rkwYV5SiWga)aJ&YvC9hgk=Wvf4%^6cv5QqU#KMa+MS9{#Te7kdV} zy;kTc6Kwq9u(x+zFF)mC!LlIxr)ONKa%5;fq7~^rzV2Dh^N$aARcIBoHKC|FG(935 z%4M5;wxW*!G0~S9dTLYOB_@F>RAnlPjm^xs85v5owRHwCxw&mC985J$kmeYev2~bZ zG&G$J9PuMKRZ%p7=13)}?sXz+D_swJ8cqU_zY>qNv{riD!-whA=&J+U->Vv}`R6y&*bnz4B2k;=iQ8)Ex$E!X+`N3@76D#FxV;*yJe#X z3`VLyG~Obk{mvvBMWyCa zF)WOX+Z|U|Czi8`OAV2UX1hXP^oJfE%-y)^RVJaxMQp6{RxxP=0Nqax=h>E~Xetjq z)dDo;XKQNe1BlmrZBI38+d6{08IGItOXK?MndzSOX>Ox09*!q2M@Tz=Dd~$2g0_1{ z74B2;T{z-u*>N~Iw$3enEp_MAr*@APE1NJQm{E6UiHU`)2=>Q;%V-Z&#}1rR?;EW^_5cNK^Qsa>N>0yh@|6Icd6+@9NX>2Uf=ZFIlXKGQ5 ze7?c+vYEV_%{zAxqjl)9JdkoY`CN7`mVch4Lmx~+#3Gy|pF1}jF;6vkFl&U+!XDzI zMd3#zZY9JCzP}}<;&TW7+T5m6%%Ju?lMQAS9)W;aR$58$iJAchbgVARn1v~*WgIhO|RpQTlU(}=M8rzMj7AHVefuz^Xd;P>%c zVd<#0<6Sr#-In7I^5HM~QFW3OubV;~mPTLTm!Fezj)mo@YQ)}%o%l@}iknTPK<0(F z%p>y0y5sLuT1(}VGAr-GmKogY8me3C6MM$(5xpO@Hoi<;)v6?Em?Bp1GLx=$8SNZ*N`2Iq0 z-saa3WW zUVwpml#-s@Y=u!*8Lin783ikKZUu$0C6)0x#n}n@<_WE}J!L@!ImIdG!P#J0Wx{;@ zM^0YMFB+SwYQHU)qCxhUg=tZE){TbNv$*0X)X#I^Cjc_SO$tnqpsa!B28(#q*%0cFUt*ENJI^iy!!t_fx z&LI(smRgi$3&R(SY1JS_{RqXSA4{_V-LpaKRMIvFy{789aSw`}*x-r4DYGuqg{=>s z->CBVR1la_?+T-ljk1>_+|T$ndy7IzMWrEq{KorPeW}DjUT|YCCUx>B`FuQLp2ooC zSt^u(86aRJ=qJ@&F4gc9{mEmrA^$h5)Ae4uTasMw+m8?8v=>>v;TNh^TSBiwLTW8Gddp{yRMAhTUj~(!cTDf5j00e40uBp^5PEJ065ORL(~C zM_Lj844+YSq{&v!CObXb(>F^(pMzhRw}SshMI?Unc0{-X{?bxofa+^F^S_XmmK*EJ z5w_~+3^~})cIGGO*%1pVt0u4c8A#&asV9LYhV#M!XQjnkx3vr;c1MP~F&Tq`k0~3I zoX1wNaHMK1jwQZI8-zsymR$Z0FgSmG7m9_(wR^1d;gN3%;#fPIE`&_Cr z+-cl+b}c8xs_l9qQ+EA3&W5Ob)%SK!jls7@4W(==TzE`?a($DAP-`TCZ&Is#y)5OQX~#YA?k3qPZ*Eq6pk-nVqV;1DbPOb}U$X~cRD zT(iHP4lzf1B4SLklfjR-$=R81ysa4|^!jcsZ%?2r5DIB`q&Ems4dF zOw(QZVlWXf-SRlX2(nWzr>ip8Hp7-wt*1s~woE=IZ34i7_Xa z@A2o-hrQAMSiCn$2WTzsZ2@f=N9cyS3m{iOv**?$k*77k7=E(~_QI+fOrk zVWnk6uI~H~F9eWb8u=E~48;l;dlab z^l_omX9+(d5DUoOFXD?0j&BJ&5!`Lgq}*lan3ve@1%L6bEaq~?o77d07@HK0jVXqNWGZH3i3$>lI1%}|$v*3; zd~dDujaVAj$WI)D<0Pz;nlE)JPq1NmWq?vMBC`LJ7v%=}{#!~NS{G#hkbX|nM%ry zKdW=!$uz6#xLa7!uRH>U=BEY~xD|Yw+w=j<1`G~6a@Z9<&84ZVvdxukKLw8kwRILE z+0l1bgSOjV0*d}DJyuLeOFX$OVwM1BAgDWbgJM>fpLIErJN%A_N(^C}zgq0Qqz~K8x=6htj`-1b2 zwRcCEq@*A3bQeRoce*p^3zlc`ZrbtG zPw^7REFX`jAiO!MK3_knyC=#$3qXdYX4|<{N~eZEW_E@7~q9KS%Ks!yMzbS z6C>97P*Pp4P{G75;glZkkAvJCktR-X3#0l%Gu{Y9d}2HI+CI|b#!KIcZbm=PZhIe+ zWaiSaOWBi2>eG##8HQJ!eK=;;pSM1>oz_~kb5!1onBr~5-7j&LU=@-6y*i@>1L0jR2fF7^efg!6C+~ldU-ERF7-d0k?@Qp z+D;uTnX`e{OwC%Cvc^!s0mL+dE0G!v2V=JLsf&5s)!NJM0e}&KpfuO%8#<`g@PCYU zs9f$4)cx|z_v-$-ZG1G>ig@p1&u%c>AzB~nu!DQK_Vm`CnPGE1-WVr2(PAUn>vh-o z=y_MYJbqann|qbkOjeycqF}VDGEQYsZ|-JQPg^=pYNU3++`hbY_cjggEOGf<=J9)T zZ5FEr&vk#eJi)z}I_Gt|z%S*)P(@_NvnS>CmrbOnhXCF`e`2yW`-@Por>~1VE>kHp zgoOHjmb~GlwEs<B?d^ummTt1n1$X=({$s5kRbEB-SL>Qg=m+liYe*ytabPjSJ2F zA2cvfVcB&_l|wR8lp;13{S8!OG#6w>=aghN0yXs&`xbw+R&fcw<>tKNvb3eKwWqW{ zrpZcu(G>XJ0|G|JVK&@h)ZBe^yG3`TFW43FNn(N0MfT3TsH(IiHlm8jI3WxE!iIxK zVA;6kQJL8vNV?{b;<_}?crRIhs~y?O z?IO-2=MFb^Lp`p!K0wVbbT($yqnvSxQB+MQ$)`&po4_?|gre871UopS^c%Q_gGk#s zg2l@D8U=C-aZTJ9UhZp4J>eK`t_vBcsztEHBd;~N-gnw9C|&`;oer{9wgPF4NHwQL zJp<cxwo_bt%INI%nDuq&jdd8@^=3%f%5u2my10&=KXYd9 z2-Cs&fP6(*c5hx0GnCJE??@!^$8W`at~h*-;M&sQ-lpl$-$<0}O~14+ZP};+Bm^8r zE69%KFycDoCg}$q&iiSp$!_%K?b}ePSz=(6x_%07_2b`chr-qL`)i5Yk1D={T9euf znRW5FAq&O_WuFu9U6-?EnY~<*q$C4otGaV+2P{v926F7hi%z=?m7yd{9=MqO;Y6$8 zny|-@3H^}Mn4Bo=!_*MYr^FTlKQPvgLe~C?Pd< zX1!z%oDl$2XU3oxfxW7!+50XkN@#kzXWPzBXnuJhUqv)Qy1?e5yO8EAxj}Sw(dFMa za{sme_;1s@?WM~x%L~1#{2EjS4OogBoa1ly@pC6xI2+#|Y5oI^UWomRWNnPhy$tXp z>#-Cy-4ia@|2_wd z$ZtV1%nx2vN(QRl#$_E>#6#<{RoJpsC7xx@r;DFl$xB+{%d)Urfc~qc-(jnfGp=u9 ze37aabVgqFk(_8{@`;RV|lBvhoHEJtnfQZeoxLw z>9dR?L9o)+N77iRNk9uSLq2)bLNl7TK%1ZCSnMU8yoZd zRpKYF)sn`VVLXK11JR;D0m;BKg4&KG=#Ci|6NN)5Eo`x&yRZhj5~vb(Kk4xyu^LoiMIW0?e>a zX7Hjq3bF835;mRd5h_a4Rq1MBb6VD#Yi|xT!7@T9f-y-ZmjNr|I^K6BKI=BHVDr41 z$hd#;5ZDlSIecAzz1My1d41Gpks}z_1lH z+MXAjHf_($ZFj$&R=qB%TVFeI(;HlWC8l$Y_9#seEM}Nk&~^9A|Ck^lE~@ue?-nCH zA;qfwjItNv#&(B%{F7JH4~6XK?Y6<6AWe`i!^n7*mf1#@$crgO0xGY7*#oBEOy$lXadEn*otyojxS~>fKPIx9R zth@;cgsVY&H(KleI#D}ykvkrsXb)xC~Z zq+IJkzy+?~&UFFg5NmU*bQDrGvSkv{*{&Ioeoe!tg^Xp-Or}(3jgZQZpv~_L23aW_ zx;2+1ssJMBN{aPDN|ORa?}usUdzzop=;9XPM4OTsjRh4L!a^@KR2BQ}HPCL=;{GRx z#Tn3D6Ni~m&+>r*nO&{!Yd29(mNrhF&)0#Sq}H?y>kQPFQc~*bG=`Gq=6}xbc`s$B zHL+Btjlv2qix2ASpy^Eq`1MV#A@_-4MTjYjt`dhL-dErYnblSwN0w$sp*y6G36Mp*p6+ERBshh0WP0i`0kpg|E+*)(A=7P$gR&4 zx4`3X_yvOl{0g0ZEG1pn8&=aOK$Q)9Pq%t%RTYlEBz93!imzj^QMc@H1jalyj1 z=0k8`%g<#zKd3A()O(T%`%OV;CQ!29lyq-)leJcVs_u97(8s_d&KB;{2ifpJO{+n7 z8A3RmN2!S!o4&~^d@a*AfsFth{5t7{kSb#i3hJG5#bGczZ}R11#Jd(TA@3STS;VYL z%!;uelt!@|?dZ;%NDWnY1cfszS1!s~2SuU_I=qH|dbt z7EUdh8B6X7v!&?U*=)A!tSa+yE~mX=sajQJ_X^CiDJqC85(#6V#0OzgUvsm+EV)Ar zZ9mja-$tQ)N+%#|a0#4lrS-E!FAOYE-ifV`o!gk7MacHJ1QGp+!V#e2Mzh(%9xP zkav8#(+k2zN6TnzF3E%_6{?;jX@?djg`lD7$(7ghUlQT}Qz_^!PLeT3z10YW^ZZ)( zt6~T9l8qX6UtEV6cCRzh*E8M3h^>S@Fqo{X+2L1h4?E+m%4`O^VM3NwfMaQFBZ}bq zobmvk1Fbx0yjwi7a$y|Oh%B??6WuD=m>%cj->bVm{aexkzpoBYKl9%rEXBfWm_}3z zo@RRJ#nkz{D8cMu1-AS%UV}OK?_ik2!;E|4*N3sEhs4v1Fx}=6kJA>4ZP9eEi+7B? zE`GZVBX*wFKlxb9DJWx*O!IF64>&S#l0hJHq4x&f^!jb-nd1IymgKm%>r7B|N9tg) zw0fXeQAPLRBs#+4nL6ftL|PJHWu5?U`3=5v1}^NTEutAkB?`$&9IbbihBbm`9J-}{ zLMNo#hAG^o>Ig|0=dco|y`G_OnDl1DaW7`Np4s>{x?WXc*Wk#>C&ufI&t5YvV>5a@R%b%@AfmLXV8sK=W~^xjTJR5iP=6RZkywU|9u8hRGpC;uRfLCQ_}$h! ze~$v(jHSLkLFypX&ucvXKF+AnaL|Sx6ao$+YG?xp7*p zb%aot;fg(x*}k3z2yg=|mNrW6SJzbSoK(c6m6F!b(Q*DiOFc3b@3WG7#*H`!bp2Pa&bgNua*N!9ik9a*Rbv35LHG@xmkJr+?EHEx#;1 zZrTYt=^?H}3xBK$090tnNod}l^PWUy~rN5L9Pd6Ix zJzDJ9%!f38B?fpfJ?s#~L9~9Ufdmz5;#&^@RQOQoV-t58j&ZdbTu}$K&>NZu9!vQv z_Q^G%oSZ49CV=uHo!eZC`WfKnIAfJl;>icZ#LqRHn^J-(44O3NIb6?xa@wpZS5&n2 zZ5V|XG$M;DP#TJnBLsaX$;YtdW@O1Mg5IQ2Dv7XVUTY}0m74hzIYxgu5J3{AiC|Cb zWo7m=ri$>giW?us$Z>e&vcJLckR#B4n16GV&Mo8k>fK!PXnQ0O?sdWm_3t|);!hiC z@1f+ndcY@mT1QQGJEoTrADd#T%80De&f_!|a>7HmWHXs99N{e=zm$&xZ-Z9oKo*9g!Ys6h`06TZLxW%oqSEp${eOH7 zf?fX*VgEOvtG@a_H2!U2MaiD}Y6{Nawc$s_w&cX*jk+Y5-k<@Z-h13*ysW4=iu^U+ zv#CDSCNA!xY?8YbxZ3VgoKl|!Bhy$O-0J{orI#M|Bl6ugS8neg*Iq__o}b(9G8A7f z1zvmcZJI@DM%q!z0?N1%!|-9axT@GbR#j*+Fs@I$GR?ym+vgU3_5L|1)$5ir^6H?doQ*iiN`0^VJvl{0ekfFK)Qg-#aZC-2APSU$k1#&g+4cb%6sx7 zc2S|fYrojM>6fh;G$hS)aXwc*&1GlgtU^Ss_Mc0PJ(eAZESt6#RhpPMBVIVUUc=Tb z++pwi0pfCUWNZ-TP~)cP+nK2~Epc%}{%25L;i8dQit~gnB)YZQ=_;-)PYEhE$jvQ1 zJEc_>0L^A&#TF3s=%D})aZD*UL_{`fgN^VNoK+{u(xg{4Wqgzv_}G?e0;bCcBWe>X z@>;Gwa_4Q|TwE`J_#ixch08)V9wZkqt;j;S)RM2zLgeCf*yNu=Rz()wA~8;eY2HS7 zy($OUL%}$-Xn=fi>o4&1UkU39%VcEry<#xAA>e4KYk6Ulpv5%-b`#I({_;+VGAcTW zM@H}DgKrKc4zEi{)+P4GG|s-?Jq28kIT?0)K>{XQ+iJKz=Z~qbkCdse=Zv_X4_{^A zqx1x9lbH6CigtB79A0o~;PZ=Qkd!`285KOOSX@@lY#HUOj%x115~X!NmJsog>e=^1 zzrH-@u-+t~&h%`T-wq0v)Z9dNuX6&#v8p;JDyV6TcQ$9^V*>*Z;Tc|DdSCpco4d*% z!AxOUiufY8TV+|;qt=pJWkb9;SnIz`r#o({45?wkjwOs)Y{TE84;7#>G2$ne+XjdRZp#d!;n0 z&y*RI^@hR-`=_rr8TU(T0t~q?$2LB@V?Ot^6|Yx)NJQyfoa|CcoKoVvqt<01GZrjx z<)0u~7-g_}N0zY1`37@Cu1#uhndQji9+2+!O3C{?iyuz76lF;#>UfILm%-b^GM2U* zpE&BUG3{+)0*^}=!OZ&E#C3d3Z?Wt9qA01wSAuV7$T%SZbPEQ>j2qpXENCH*cHB-$ zdG$ipyn^szHGelP{pcx=e~^+%rnU!ZVl47su@kaEzFMs`MAN%1?ZwuOk1L8l_SVHK;C%uX|Y3}j?C~U3@J7u zyOFT?J6!{I2xYRiFr_$Z`?P^8%j=L{#8U8qh+p=uo9q23(BL5%d;W46F_%H&dCt54 zH=+&m*%3_E)yu=>)()LWamUyvf^P=(a`otuz(e?Hc#RD z9^#0+^fl{hYS5?I=iI`=;<+<@rv48}4Zsp~v@!mAHh-F$} z7@`I2qHGabpBHO<%vXBw;7aow-eZP$yka}c+sXOrpo`C*=;UB`VpIplX4fb zmx+&Gz``bT+K+Rc^+q$ctG~~5AGWMCG+=!2FR&wM3qIU(8xE2)&5vX#j>A%ET4(zNUiQmr$>H z5<4xO6c{{8;pKvu&DVAYS6Jtc@+(SWA}Mgw=zAR5F(-9e!Xh7lwH#ZMiVYDD*^uc( z>&zC4pz>ZJca~EXP=cl#Sut$vlbusi5$%24*Q1QVwHmpPH5QM{P7w09X^Sgg4k@My#mZ09z_ikXy zH7c#g=jmO#FlDma%~vr7{=WXOijB6jzsqaJzC9h$rg}d1@xBhNUHbdHV0&Mzw_O|x zJj0It?kk=)qI}kuEp3>{3DJ3P3G$WX6!}<1HLQLC)2Xxw-^}6wc}rPqip56;Ww~g% zA7K3KuIwGzlQPg&)u=bozC2S!e!!BE%Ce4T4-nRlXv}n{CA-|PJ5`G;`e=9%5Ai%` zOnfzUt4mc;B#L`Lb-X>7a6y&3x~gszxBK@pRCM_kW>3KH)!m};=h6RHDjfr@^z1r6 zxiGOsSvq50+^>i#hBlbEd{o;Wtf#4nE4dhI$j=NfK^&?tuJDMi9a8Q0Bep05B6>(V(d?7BFgpswM+cG$4>;3Ey+q4$w>fPV{Ub3)z zwNRF^)ZM-N*rSvbV*~f#tSTJgE;L1R#`D@JGbxKrh7ASy=*;BGwI3XMJ^1IJWZ&7k zI&y}$EJUZCxPFQShIEvR!9u_Vw}wmsnZd!i*3?uN5qQ9Ww^&Ray{$;T)YFBpdN~iJ z$C!&#R8bRCI7gW+_lko*)fH0dVE`W@6viHBn$3x&ySjeFCkFPP(BCRm+Ho0csmfOy zV{UUr#njxRX@Wz|ENKgB3ep1?Jr}`4W;R8cRosdBV1ffn`=Z2Awd%)@Gzha3nk^~i z3Cvq*@wIjFq#Re7j>&s0G-e0IIcjtM%lYCbP*N9g^pX=*Dg_2V_TUeEW6mF>1R{hH z*@QUVoXmmxwjb86ScM(nB?#ulZP&bo;CCblxCW;K!iM>7=^VyjTEqZpa@mZo+E*N? zu(*8qX$O}};C#qs_b6Y;&KZ|QAIdm$EAjQqrU+w8cgLJhH*MP;vcU7%+TB3gGro<_ z9i`6eb4Ie)Jv{*>gFd%&ySB|rYrLNmdDDGlP*r)KohIfn=4L2Ll$LG_Ae;fPO+q{s1@P`fTF2FAps|usy88X;h$EI{V3IhRm0wO;I~46K;0&o|XNr z7c54XiudK6$0vbuDgcrcc7a~N?ds^J7JE%z{g0Ke4OVNA=m1)*>Wzu`BbtG%T+%3d ztqi^WYPe}M5%BnjGO389=>n7Cr=0yVq6$QTKvx@GR^jFF8RH<0*wJnZRi+i)zW!hXW+>U- z32n3zypC*CJt?-?JPC9@u|E2Jl8eQ|ktnOM7D5`P_#^FBwv(cug`{jL8H*mr&;(A}OzhD4B_!-7XPhxywM z64G;QkL7rEp48cn7ZDJ&{eA~>W2fbXALZmY`MXlVqPnsX5@sD0Hb4EY%F82(%PqKw z%ma6cr=z>ou9p%Xmng!t-~oUVD1r1-GWSWOlU)c6(f1de&AgPn=I#ZaZ36%Y38)S# zK59~e1nLZ1(`p8NjKF}bh_vYlYMBxO%2XV$>WstEX4v4Y7VcnBP6u>+cHWLI{JE+! zGY(o}jgBrRTAhuF=ZoQ2piTseK>4uHi2DD{teK zGqfBy0EU#99hqfSHTn0>YSJKZC~4QnH||)_(1uY_&kF&Z_}O}vis)Aay=EA=wFYZM zf8X5DV5oitzUO*Yr3Zqo-LIb=OFZ`Eug8z8r#77?4r|9xt4VJ?eg*mUccD?QTTP#f z+;|lwM;DETNCu*uY|aP75^%csRVh*83V5XZPMPBJ`-DV0$T8a<{M~_Ga8AS}dNGar z6cn}2We*-7K2s=z^sA=@oqB(>Oej=AF@fvE%ziLUe)G0_Q!Cx|qD(}w^+d~U! z%Cx@F!?-$6WE+2w+y5=@_|H4f(qjY7Y-Gt8Ggj)~b%u46%=~KV9c+0{+FA?!iIz+E z_QH(1`{TxlK$_0`6(Q@BWH%qE=sC9(^XXhbA8>!;!J}C}HqCm#QSWHmd>BS0%D$ zdK-1VMi2>{H~25yx}gjc>RpZNkk%-LpQPwJzLIa&7>3ItePc}^XZl2*fDj`A7u-$o zjtqMAsOWEp{qhSrNSanOs$)86%Dmm^sMk!zpca2(zSax~`_H;J#vj)@E1SY5852bj z^eSv^W(81Sb?@Ny4+vBksrvYSM=TkL}rUPrJm0S2=s8FcU{WOP~Qc_LANQs(}KtVof zM$C$3Q39x-+!6m8ldBdQKSgGfBR(OOI6as)c{_bQRkoiCD}L)*qpbZ?RYfVwRLOw+ zj4cfCUJSI){HR`8AG}~JH*&Ey3>9);Z?kuod+$ci_m42z#7EP94`4IcAMJ+?Yd80g zFIU$ zi$h>Ft~GB_TREU-7_m5P=!Hjgv}fuj&2h`-Tv=U|wjBZUJufdXR@^Zb%b8`hwE>|c z;%REkPY+Bc$RW@yO~xR=6$B?P}+4pc+NPFU3+FZeSX*tClVMH20oV_PmwwV z$jhAccpYI7QHP#u(D;A6IO0b*euF@$(`ZN?7@1*oHH@n$jvCGF`RR0;e0|?s@$u$c zrK#WfGrG($3JYffIT*zxmbzHX;O3}sT5nqNn?c{PykQM()uPILnr12cS8f20yP@vQ zbD>2ILIl8HQ}ZOgZhTb%V3-r$*l1v3fj~{YD5d}M-X2=9a}Iy99nz=vORd?T&5~Ge z+doXBev8PuVe@^f#}r5X_N;ONY4m3|K}Zo48!3L1Zq4VWH)Dk(uD@&id5G3c+%9?eccxqX@a zkrIEtaN&n?z604sOwg4kn@r|_KOD_l&KaNZCip$z+KM1^bFnW)K z2|QzxjkQXhJ+aiv5N6w%p)R%rO^l_r+g?uRN_(hd=aW*Q0{~e?y~qWPIR$+whuLFeAr|OS*F|pi zTBA9WkSkkpR9Y==_0{>_>OfhnnYv1On00`gxdZl)mWTQ(wCHWkUw^$`Ns0(6&&JZ{ zGg$3!oxsXk3$yJLcWS4y|4Gm;-|$l36Pt>^d5u#V-o21+D9`q_VRN>#Y)bWLoS{3K zsVQ9RH^@tFigRu)Lm=_lL1t)qW$0UTkL|!-)qB`hb2~Q`SYKItPWZzvzv?NFC*}>6 z480z=bH61p-pb=}dr55Dxx+u5Wa0&6v3v)75$tOxpY1aJknWN2JGsD)kk8-VT>vB; z%SzezP43kAW>V?M=S38S|CIoCz4?2s4)t&z=WP(mW*VNU>nm%GxJmLV$6&iz>YZNF z-S?zv`5$J(V&BZj!B?MtX%wDFqA}c7CC^oGCMdfC{hq%mDVaf!+^~DSP`i zxh-We`GKGD4nhmd1~*>~Puu*D>PO$c;%AZ%2|}%C;gvKR)H^8%`f}x1x!Ck|~MqKIT~_R#}YH@HXvPr+ZxR56<$B zO$K>)9`xMGS6MT$+14bB&;i zh%jr}*>C|%`~{*3;Exs|j*>zXPL#~Cv8JX_LRQ3xDM}b+(Dw3w$6-yu#U(rjJ+|Vi z58A|*wL92OoVVMd^M{Z8m9Z3LbBTnq&oOYy)!E&khQs}g&^rKRbwsLRpBpJQLVWOz zNb1e6k^yzGx1ev{IZq46;)FTmL@La&4TEJU$9`6*=JOwXs9}xCV_gvhNLO4f*@#er zXo=@VgvY)`0G}0KTa+QrH4Iao)wZFOeEL{i&Ai4gm*G=gEGXD=IHk)KvoL=*wNllV z9La$)WGQdWiXByI>teNwE={hr67#K;8D!70>hub==}Tm4*y!MeXCv)TnK89p*Y>;u z`3hSitj7v9$Ns_DlP1%A=ya;G-N(bCqgT$AI=;B}gyzNwRKz;u%nr+qFr2V@G>mL) zJ8S)DN+q$bgTJfdYUe;E@dodig62$SYf&m$r=kojI9mC{L!{9bTHyh&VuP2!QkxTf zuca?+Z)5i;cPiyhGaJ2rPVO)uz3oa05@P}_`4&p#GS-G+@@WdtE+jN;!*#JySuAv;+uH z+H?mW%qam|VnUIJ7Ao~|^A53U+_yi^mI4O{*`%p7+QKnQ5-P6(C^asg$apDxHhNGm zw$NQJ_x$V5=HDtV`=Cb&*z-v1dV**2O4M5qG<4K&J`AOMB(c$E7+r_<71C)*sVpE) ztCVF|>GLs*!r6lexeL%BUBT49g$`>lgHC4dKuJRUwXjV_8)h0HVzIbe9w(m@i)NHX zOD31%vsvDFZp(LDW13<6{B!jn~GrAT5LnmF(0cQypmA|90~PNFRvY7~0tA1yf{3lrU4$ti`c7 zYgFbuLeM69>zwj;O;xLUa`DvcmkKRFY$-urF<49km(A(0upGt*@;9GWwK>;0QnXyT($IsW{XYZ5NM9&Vf*w%P>w0i+8O!! zNR5%{F3x;Q6k&m!!|#i)`EnUwdFtRnYaj3@%aoy4@(HJgZrN!n6TEpvyo)DqgwSJ+ za=mICn$B&~JNWs-^c@k)LqJBmsFnA_q9%+${jH;~pC2Ph@mCcI@anTnesM-3%V$Wez?_mUe-Ui ztDx;PY<(Bi)WvIdZQnFX0kYhct%-Uhd_!a}+Mv7mf@a>-m*vKV*rGQ&mnDB!P0TD{8wm}Bx~2yUatw0^=hP-1<~#7%Fnt}3XYnz@p+Sj z6pwMN&!Bsq^w2H0#l+549uZO2h~gG_HwS#^sI0*X=qkc-l5c+SE}sDkaAe|6%Fbc? z-nt;pa7>EDj2^O>Yx^m5{yd2O?n$iKn%=tZebhAfihHRlmueVNPQ%ACC>A7}Ag>y) ztQD=n^DT0OF>C)|QMr!j{-P=MTBTq00h=;Mypm>BsM9vBM$HSH6nm)=a9eX$xzxnz zo<^#8uByD%54rfg)HWcl5JMTaO!;6&xfoNq-=ffpD*holGOJK1zpOwID4tV}5B&Nv0@4a$iX6?ok)G95S*AJ zC=$hI7DMuLumPq5n$$=u{`2qq&cXrcDXX%FH)-L7yu+goy9?eoFrf*mAufR_usEPc zXTR}Rc_L++LP9;dGP_IWAua_km#}r8&P7wyr({o{QTD-28iq0DWQeGm z+Pqem66>32O>M3qew}(*pdeALM}yYG3quZYQMGaQO7&z8>?Q%)5sXjvz<6(MGkun$ ziR%N&N?@#5YR6Wq__x$}=ZH4;kC7qKxz#^LhX3S8gN|w^I`tOcG1Y;4@MI@w_ODxy zY+kA!ugEXA3x6x(Z=kt^i>}^5MB;;ZWMogiE!GchY!i8qWZ`Xjmt;I1c@x>c&jT6q z9yfs{yrvI!yjx;3XhxRFr|gwt6Nrb9p1vRcmK6`jEMkz-deBHbH8gGv%d5gtEm$0P zxj`eq%VNdIA&uVVs>>jzmhmi^=&q3^X5?%x{Xl6pSeI>X-L;sS?@{PKF~VoHxZD%+ zyqUVl*LkN0zJY#N(EcGaE6%)020oKmr@*>J57+z<0DSj1R`VNlq71aev7bX_Jtk@f z5SnjVTYFbCdq@#`bO>9a2zV({=D$=(V^x$O>!LIkQiZC@N;$<@)!ux@F!@=XKHQ<@ ztfG#tn5ZF~aRmPSmx^p#L3cv&E5fF-_se1%YK+cLGg;JGJi^~mFRv9G^9_yK+#NbzeM;6 zt5^v!W6E6loP2P{c^c$Z$n!YigqnRy)V?g>=dk&%BSfQ`#o_97aR?e)Fz<2BtVB7A zmcA(Fq{S%5{Wq`GRi#9ub-Gia25#ikFUvlrZ!(_lv{hwIAEnB)7F%0=YOb_gD*5O9 zosIBrXIp;W5cE}n1a1~u)C-&y=ePzD2b@n_#P72@M(Vb(T4^~hfyt2>{Z70m2-0)f zKZr}pdVYG6Wa-|a{>6chu)amH&)uZ*;8`--0a9Eps>9s0HgAH@yN%Tb1`XE{Cn1?l}J=A(E#515o4LSojB^W&{JB&h>PvY(JShp|AZq ztRL87KskQ=Mb^Cn{cab$2Ct1qWE+_G;XL!|o+vCx>zdtq5`0&*+5r;7uEQfxoNpNU zy=5I63typvxXK9fsGAs&n=xr+oI0Q3#?&oSxPWMWU9%oPix4ARQ(I~nBU=9`ccckt z`9ldKyuk+UYSzJR9HAg6RqXMii_C~ zpfM8rDiu_fL^X3qxCgU4Vn8gG_y8i&z`M$^2g`e;?qyF_ciBUP*tSGzpO2@{IS)h# zRCq&~(M011vq!h`#)>xFMY#j=bKsqB|7uJ}3xCd04FA2rsZc6AVzV^T`y903cEh_g zmP*D~7gl`JYQVN?{_@h5t-nVsGc`{wZhdA%LR(wWJ$mm%v-xZ)C%h+*HC zhZlg^gP0u*c}}<#YH2{UJCAbEB<99FNe7hU_b#lqEg2oiQ6-kvev|HauR#ux7Lsf& zV7`Rg*L)Bv1Gia?OU_mJ+DM(#2ZZ3qn|Noko*P0!QdqIPv!PP@>n0KLOAwTkgz`0b z85E*~@){xD%sTsw#r`zrV@T5w>XTgw-&tsFNH0*WmqzrJS{D=7buli7& zhQ$R8T(-PDujl9`RZDuz-R2>9b7KFlVG8dzR%{gUUYe&CXtM+XQ8)4CKC;#`talVZ zQ-T5e6Id_N8$wdz#Jr2EFwhGH687&(+%bI=X8MT}=FZ`bojkLeeFZAaHfY%pTD1!{ zQjp!fztq{5EVhqm;=2^eH0#|On4RQzq8qm`3aOBGArdj(?v*VY+A5%pRnG%C#fg*e zTT(qPomL-zW6BaHZ=d)u_G0v$<+KI0PKHYjlH*RL1O?n)JtDwpDLuCLXt5Ui}gult8jR~g> z>B!^{0SnPGtn z^+;5?m&`xCCS6Eaqdy&FqC%!=4AG|d35u=oKP}PaE0as0?qZ% zcPzV}DWJnsRSv|PK`2Z<59H`UksEk;dE}|NbYPLGiJsDQ&UPX8FQsC=yR`WCG8%k{bF;QxU<+%iq8*m)03!=B9|h{oF$?1-^N7^8 zQkBaYZkUipt6s_2G=3zatR!*JEGE#g6=!BaHsQ{IE^JGkDA;iC$i#^|$k`Sh8%E1~ z-Q;-f6nGtL+dZBetMs^i_joIJc`_7K@9Kz{66jFt(rZ58ZXT&AAu2;oCbmKHRzCx5 zHZSz;gdzduGg8v|1E9xEInA1of4^obug_Y|(52AM9f@=Ky`vb{`;zzmq7kdbV#dnZ zdv-n2Sg$ISR14VU7MRk(;b@GRmil91$Lwl?eC1Y6@h!`6{ zmC)W?pkaiH{xI+Q{T2!zz+|6Ohti_1jMK4#9j6&gjtnm!_*9r@?4+NrTmjIeEJIz4 zPT4L*bjYX3HWPZo%3m=3ATPCqMWYmd&ptg6UTbq?(PP2vOR*N2FQ2w3;8)~>bU1Eu zB#eI72mO_@BKdmqEJMIIYC>JjvXpx&7IvA_YqBe8y#g>ZpaqwE$I++ZG`bZau07RjNV&Y z#cA$e)*Z5W*2s=<9H@8}2o6PUy|-4tZ4kDERbgp;;gOauf4sN)LjHu{Pq{=?fv3I2 znE#|+WMKSjYIE*c9dCS&mHyGhwHtre+a-L7p1-vMa``nNnvvD)&eIq@gSyC|V-W!> zPPL}8IUS$I_{lClRUl?@%*JfP0hZ;;YXiqhOAOY*Qds5XTY(UKb#=uK(;I;qYN1`i}vXYzuMJ@OsY5apo?*wrzH>QbE zynS8}-`hg&#xt1_`@L5D_#mmaSBTh36~+NmkD ztTHws{%s0ENKE)ru=sJefh;MS2b0j`u0*Fa>j@bS^m8cZIUHiwOXFGKk?RvyvmiW5 z1zZ>)VwI{(Z_2u673sXbkm9xC_Gbs_9!;*+ypW9l8% zHJFmFnDBWqri*pJ>4hqiJ)b~8UU86{O1cDn0I3|X?@RTn!tAa`SjcsJhsZf^{L0%> z$vXQW`gYyHTF*SeF%GcflL`sK$C-Q~iJ^#qajeaz2-rJU_8QXJUPeRaVoA?y_Gtj- z0sP|e9|J^D-hVVnZrwHiXp;W?t~^ZqZ%Lwy?)oJns?lUkoY7mc_+&PJY~1CZ)z;%xR1{r!ScNX9tSpTO&qkN;`c2bK(9h@Xbqo&tTIf^^RZrNv#3JBefo(@pGi z14ccAtsH*I%*s)0Qbu2VifWP&NfYr?{Y=7Am6@D5CIXYz{bu=ur1?Q&sI~H~&3q)K zS=VvhhU0#vmQfFh4?va>%RH^<+g5q4jxLV=5Q8Rq{HcyLS+Ot|Gx0%mKiQ8&4_z{&`Ac%g z4y>?LEO`!gcpHrnoajQ?Khu}bL0z&=@!ID(!rk=9M%V59Hm6v}tW9liy-lKs3@`f8 zDCANN4jU4aT3kbXH?bwgjw!fn-ag)8l?ogF6yvDc-VXK{P(Ib%=H8|zV^HbHvPw#CgzVV9Jas&&wXp}U|k$VE9umE-ut&c zngu%!n8niKJq$a#A%gA-pQNd|@|Cy2@edBI|kU)U5=gL*fu6#N&lCvR!YCz_P z2)hU=I(hU3x}2*dg;)2K_h&`?2)7UszMq}4f0Mw!6e7B`YnI9&|3t(rmR%Oam#ugc zCLFN<>fT_^s@wnOK7!-r?D&QQuL3TuFSyrOY}+ZzcHx)DGHYO0|Ar)9GZ7vy(N@-9 zYyl)bUi@GoeLSy8cHb|6Hv%(wU-6YAsQh)d0uGeJ5b}UZGWo@1Xw!nI7W?V}S#C26 zCbdPiR|`Sx>Pf`c2WM>o4GJ)AJ6_4f;&|KSEeYzw4|GtwFU^K%d~o*Qw!+S(S?;(A zv)P6n>j1{$4i*y73&$hq+ijE{?Qj}5v!sPRe#@oDy!Qq<{8)zZTu*FD=!+s*qa z(@_?W9i+ZB*RW(3Z1dHIL@4la-us4^_-Uo$ZszqaSncIyj@+3*XqD}!gB9NE4*i{p zvjKQ9B-;n+wHxUzeB?N-sL>-)+$0mNJ9{zxc*mb;}(VbekkDsRf>rgDiyo zp))YprGevlygNOt0K2$$NA{Uyg3G_I!L=PXF=GXN-+B?LUR#ztW$8<@kBuH6FiO$rejIGry9~Q0H|# z9Tl}{2e|rGD&{5QXHl(n9>!cuVSv=MK_^5$UQ=`)Zoc2!cTyH zxL`4JBZ!6t73{^kjdE$lIWqYDGpHOHU`h<@t>Q*NoZO8?k`UXdfxea-98@<&I=jA! z+H1ua3uDpzx0iP)%$M*3BgZ6_cB#;FLFg&o?p0OUQ8KadrhFu9=5p^DuFWqHpOc&4RSKP91`h#Gg`YpxPJC;${p3U%Ni!2pks^v7 z!;ifq65mQYoKYO}pvFVLhcHvbP~%86Y7kJ&uP)K(9)?*O(4Z7=R}|%l2Ve+-az#PE zVS~8+DPl#}7JaKcGLvK=DB0h|{g_n*{C{PJ^=B2SYUluVVwcXNkU=Up2xxAZe zwT250pON*sHKVI(t{9%1@#f3FHcc6;wzoO<`5$R|M=s6Yv!kUa7dWjccxu6*E8jX6 zt$1#-(4gsDLsfG+CQI9MA5MA2+{R22jC0rc=Y)mFsGPhEOGj?ct!e}M`0NtyluE~H zt7sB77W86Hv1v*Uw>%-T19kXpPx9rPlu~awO2VI%L0isw(LBn52FrP~4sEmjWbWv4 zICOI-e{A5Q(Eo`&SjheBXD(6Vj{_Xg6Pg_zupEQlL%P289IH4gXgwYgMkTPI^nju=FDB;FZ)R~FlO^87%5a8IYIh^5 z6zzXuDvFRolg8SSazYE?`Y3Ak&JXK}KWv)&LxA?(-vL}oAkMe!+GyD2naCvoU%@%p zNk!KN%SP~BW#CFuClQh$_CqGRaDT+;DV=Hwjh{DI(Hsx`+LR$yIkq*5w$aa3pI3Q>8LUX*IAjG&FMI&agUtSR@gp7%yHe1HXZpK6UsK<@&~Ow zbKx^;lT;sm3XC>qZAl509IuW{a)rkN52JpQ$qHBw(UoU>FLv7Jnme$n#_;!=G- ztuYD{YZJJg+L#G=zgftKJvE2M00&gaN>_jGGrJ>l4eLV3<_l63XAbW{=tVe3Z%z8Q zs0F^|;^_;2v9D|9%9n2&B2(hIPsWq##Vyyp%aY+C?}?^TTzjo{HOwD(39S?6wf`;X zG8kZ%G86yoivMYX`KkZ4lrzxRADxPUwF~jt-){H8o$@W)YUud^Tl+p=6)Qybsn$AE zi@wg#sZ$;+X$~R7S`2GpJ|9IV2;MdAwMFY{;kFjS+qF53hLNKkZ>?W_$KJE>n>b5L zX2THDA?P|Dj!6~ma2FQicIy|Y2$F6|ZEH(fqiYOoM0qmPq)sSx7S0oF>>5{7mC z15U9z20&fYIr-1|Hv#t*5gF|KJ8e3MeJ>gs|3HU?O@Npc^RiQXHDgrFoe~>Ka*Zp8 zQKAF^9h;S_6mkdlo`F)yxwxeN7h`W3)^@vX{XQ)%lwxgh36w%{_o6NCF2UV`yF**t z-QC^Yi@Sy3uE8z1o;+*4d!4oRwa$fck-46r9W9T*NtXHN{s%{5fj}pB%6vdi*|4P7wmX#tp`Mi#$;f6oFJSPjimYE-6yqkD z7hJz>=zHl>7W7s9W7yfxz9E^CZrcuS;>l#!VN1jKxo|o_&&)zVd12}WFhB)d-^lx+ z?ca~U|MR6IN8U>Vuf#>4R6?VSyFEet$tSkh-)h!UuSQ<%Z;QDjxh#6|ZUhg-EP=pVB)MEeZ+Ib=Rs=mUz2&fWg$z z&u9Bq+8lP+Y_$0MH@uXj9qOldkdkr{h-z9#4cR=IW_Os=KPKQFjKI!q<525Kk~jhkPnzY z8-t2Vs~FxT7!Uf(i!O|tSeV+2QtoRMw1(}g5?fxX`QWaCUB%l(~&0EsftdigHUINnnSPY_8PTt+*t$1II5q{}1*WjEr z(r9>mGQd|CJa~(ByyU`Uw~gn3J6?M{st&&Z8$K=@2TW*nH$S~&+(mTdhm0NoQB>}T zL7ERyPM5isr`a@1{WbC-rpq63q~=8R2caU@AM&TzWbQbKFj=`wZayu0C7nIKlEz$8 zU*qqst>(yhZ>0WdxLW$aMWoFin){9ThN5}oXvexe7Q5p^!ijZ^l2WfpBN(zW!ul)7 zG5nkBsF`uR+I@M;A|78=>PjMG)p5MqnbnGjx&!55PxOCkEV$>(aB2B=`{RVk-yghx zYJC;sKJN5x8q!%hQW?)`mQ4xb^r$bIece|x%krudrZg$HTkr98sZb9!>FeYDOO(Ir zn#()nb`Q#3qMuYDxlWR7P05Gs-0|-+Xm4b`>~KClbiNRF-jQ^EW(AKZRs0pH@u>XP z(6yB(c;aOJ^yO*|9))o~q2+yp_Sl0^q`{N)4PM-F+S$YCeZ|@K)K!|s>k*YJ)^NT$ z5_o&3S$MaE!2rAOLrCLg>*?+1)wX)2!Ah)=ieLoRi9yBOBqxxl~M-~yDYECpyuFd$wo4B9XVev-& z1&`K#g?CTFzLLJT=b9<>30X3RzHGb!=EyaYuIghKv7*vNb-fX8)G!gdR7oxFRH|2%AJv_V}4G?{< z(iq1D#XtIE`RI^ACrVOo1+!UHG@eVOCot-rPpaNFt>HqaAd?t2@rW#F8vBi{gm%s|RMO%7@H0tL`@o0_45J*rs7e>3;kAJ@YzNKnG zxd^0|U7{I2RMP*^$q@NlHKhTUq8(i@Q-bpA*g8vTVdg$Eyqs64)l4m}sK#IXOPaAo zI@*)C;_ER!AMS}TcnZ2q?@Vp2ga~#8&{nT zb9Bmx)KkBLNG=uG4+xllSbFzB{!cX(s1X~^{H_`cLz%N-I3=2Zz7XYbNADD1QPNM9 zLNHZ|ro4+JbQ%m#bwQHRY=o$x8?%Hr)ME;%35f1DQYja@BL)Q9EK1Ksq=%94bzKfQ z^cjI(rdWF$PJVRSp~$57usNZMAHT!4LMR(@R+s|&IvM?5PjKT^g2CynDGY1D8J^#E zW^uivvY&X+v+y$3@5BQN+w>(3)MxWGT=`dry&~Q<9;_@|U7pqP47M0$TqNiuS3iU|5-eYXx&-^t%@|X6eo|h#$h-MRj|&@zH|WBylXKi~gDCXN7%#q!p@OwvOR?{E zM2GNNG^;B`V+~uvhQ3;i$T$^%$GL`Wv7i2zj;fPQu8C_z%;N{f0I;%47}Et{v2=a0c}c-coTz@dWUgp~rCg?Y1ZKAT_;c#;k7wV>pk9%i58a9P9gz!~Z0hha zS4I@+%CT8ed}{aR=Nn?}imPDV zA0EZ#WELbaKom>&_k_|dgc47M=lFuM9sZKiFIwx;&&f?SOHVdFn*7+1-a2?PQpw_d z|ApQI-Ef5~JllsgAbX6;y&sr)YHXa7UZc!YazeU1?cfK!-dd`O{d2_7Hq9eGdQ8@M z__-Q@G#NRL1641N9T#FqS2FGhh31a&8e!N+cJ=j`a87tUmPJB=y5ez?PpjMSVKU+I zr=|3d%FuOY)1;YTRF!7g5(hw>Ft`l$E08b(oHYJ{AoFwM3srHC>DdIy*UnRNSYm}% zD=l18;g@Yw`dip*foBPb%_aQT`Rz9E|EMhnEKceY%-JpLeJ`=f?c9$xq{$j~^)&TS z()3pAwb=I0d8$LWrPz-{0sRJ^68Dc*%^9a=Wskj^TMTMpNWS>FcVS6GV!^E9S?%$w@XW+jkEo-^ zAI_Z@=sr(3otsdf7Zh}@meG!pM7JBL4eXvUvB~}pkEhTBe=i99sWJM3Mx2{ayw$jG z#}7*(F)XSbxl>zoQUz~!?z?zMmRjIiai2x}78^uQF(D_hQfyi|LRBep%)A$*lB=Mq zUj?f6*W!vLm7e+xPhNIl(U2}W==KiV#|n_f5n_qpSHwHv{9VDsXwDMc@GX!=TPlF9f#a6Iwz43dkTGZTFpjKn%8A7S_4fM!Y$JYkg8_u7}#r9gh^L zWO@ERoKLsv~g~mQJ8aQ-~=LdD>)&`qRW7OR4Ym1 z@|sNCwHEVxoaHMEYN(=$GEisgf1l_pnV7m^wRCs4_L%1LxHso{d5F<`dE(J_$LTX- z^9-LPVKzQJQ&Ndsc026+w|x_?H|cXtp3WqNH{oFH>FLeb=}qg;hNa}z43q{XQ8`sw z62po@U{$eE9Wfwini&6w61I-^Tl6c$(F;Y?a0>;s_U}E5g~gh!cuqppDFIiIM0$}@ zi{4MR29a->#5{qq3P=0o1;7tpfBZ>l>i1CtqzQz0HOge^>-_yn7!pMi$4Db7izn(P z=cnYnI%>IkE9r=GH11tEd#53V4s7`_Hj})l4vTjI@arxW8N3}ACuOlk-UK#?((^zu z4R+se74!$uglZh|Q_-A_~=v!{Mvmc^7LrQ$WR;?7ZvTav1T4%;?MXyzc8_41$IfyE$F($P}0hIp-es^1io@< zT^+Up(Yh3mmL)!$@U^;B!{SFQTkZXu9QlVgB~Si}sru0lOMp~;zXe-65*Q(aciB_@#~cDK zt%A$P;SQ}>F5-5L0_xI5{2!zpG8u=4#SslBK9A(66T^00|D!*2=_R+wEDw79gUy3z;DAvZL<^OKWjVLRRX^0Bj;NZ;FCgpH; z#XGo|TEZ`=U6B(T|3OhkwhQVlR}aj-cQg7LIo)*d5zaU1MJ48dXnG8kHsE=Bh-vc% zq|zTr3S99lz65+DfOnGTCTbW`_%p}HB#`yJSMlNvpo#vTX!9dpdJ6Bo0*MqDhzI7F z4xvlWrjF0%_*BTSB{Hktaxh@MSDuH1^mbctrT2k3_I{A{=RYwZtHu*?=J5!c|+9g3xZPjGW6V=Z)8^T^|g z&$;~?J(jUuwd@_5?CBpC?r`HRtcY`bIz!eXM2aG-Qz3e7Of-N{T;3A(m}BbOz{9!6?fnJtopjBNE5_$xZx)H+?M)x}a9dNrn97GkQt8F~J5 zp>Io+r?mYCQEJ1a-7ZUd;%av@lr5Z$mF+r0FJU$iit%Z|LvhiE5e~R|rb7R>%gIaT z5JY9C&+njnhOh$trqvmN6Kj!O1+GvB6JBwgINZC95<*|ugtaa!oH!0NkEE_M$ffaU zBcIq7HmzX`Ev!nZ7xp%LXI&h{z~-dO)d*PR3X1&F;0`<_gB`8HvxB z>L6?bzvaI>z&r59`aS7&%6U;qHtJyd_?nBhw@P1kjqa+8Bsgh5MPw zkx`>>f(H2fd`%u_DcE*KY*rGgd_F^u{eIRI`h;52%(XWm_`a1wU8!{4A zS~}%=Z1#RhG{?+W2jY#f2$Vb^^Oxi<;Eokm!sBmBk_QN`vHor;M=8Ht!fzF=x(qki zC+=Nc32d~9nqQ|X*KA<6zvYUBGBP`yV;3;!=x<&uITE*jzuCY<&E%4KnX28sCi=?Z z@@{0Fu4deOyWERPqm}6fO&^aax1%((#1l8=Ss#_Ku;_4QbXXW^g!czck3xn^Q?pXV zj$J#lNJs8Gw1IOq|K%bTui+%0ZEmDQJOFpo9H;p=U4ntrXHoNlaGL!!Mb@g|i&Yu; zsYGFFHc;{2GIcS+VM#}NnupnPF~rMqcTt-Z4&mGV13LH@g0*q~>7NHT|A|VI4KO<$ zuqEZ~$n3N35afmEpz)|PrWi%CqVJyIS=eOV*)*vz$2{Xb)D@DsO>7$Wuq<(6-*;Ec z_gN&0hlq4Im8WRTxr#i_I9gyr=;V#dLeFx3P0lg#ww>nB2VQ0zVoyl`WIO_6*q( zkOtZavZ_Et=_BcKz1-AMiE&e3kFbs3&@V0}UkM5iK~xvfJtu#BY)=Pi0Bwnc9s>&M=Vclz<&L@0W}fz|n2z!+-O zA@Tsn*M?ty^B)N@dKJdZ7N@|9wwSTJ8B^ekhOkZSnw%G#tl<|Kp@P^&Pm=ns&+IZg z5J*|h)TAH9-j9qirL~1fmbu^DIHH)rSwrl&v??gUD#l!XIZQ;h8(iRTRAKOdA0J7kFoXa`^p5DRWtAHDloZ{wKs5H8y zC%Ch`9cc+d6rRiD#vsrOt9H&fFLeF#!8Dqum-XZw?QiB;3I|A?^OwYkucv@~-n9wP zzK!P0RHU=x`?*o;G)?EN~K~xy+yKW!3|Njl-MY4c_w)Z7gnqIX~r&OMPJX2$+ z8?3>vTe&Hk9vbLLoiSc_;h5uJ2wyf(P2758w^cQNo~E`vP7iRGkM zJ;)540SXdZRx>pye-fhz=ZmL8zp;?%tJ&j8wq)e+nso)|{?K$U&=gH^iSsl5@)!4_iP+*bj+TH4^a0fR;$)nxoIeA|Wz0uew zV&A7*v}8@$O)yYYSy~9qHvP*>4X$f{q(dN^M|$s25D`O^nPcco`_y{P;{J$5=1&9J zGL<;u_A?!kW#PG*_SoYRDrB5;J|Y?-gHFke84?pya`Q=9j;LNZwBiYPB~gYItmPJdGGxw*4=QM5+jGViwBnPW{n zGzI|YQw@z-22iR|G2ru`<;9s*c<3p9TbW$FQik;wvQG>pg87L9v?&#NR`MOd4p*^~(zmYe`4}2joiw>Aik5IJV#i(U{q(#=_XapOj-z z1_u$H$Po}XUtua#{`#pBu_PZU^**)XQ{|d;4!ukcyU=H|o=N2p1ts6EqTWph{b2tp zirjgJZ}9CS!3b3<8%`nqF0Th@l2)gLWQPV$;>Hxy1NKDgg~+92MPye`aD)UqRon^}{rZo2<`NUXn?UnltfTCgR!*H}YU8iv%vx}RSQ58O3m59yd~zsiW}CSCnq4<5Pte2>dF{hr&45;X0jC6n z)2Enb7w;cNrwY>G>S;}rJptRO(Fnezfkp+&tL85={SK>Ca;>lFXi)jAuIwXM$J0Tq zk(%icsTahRGxCeBG3CZ9g=lfbk1|!H)BTHD7>6v{a89f8KSk(X2i?ED!D76ra83G6 zv^4gcjTS29d>r^+Yr>O2&*QTxi<1*R%4{5N;LVeuZ%XPhf5y8)AkhTOs3aWF+0KE15%~EJLp)?qaX~(6mEZZw;pJC zd=|{smt?q4RFc*8T@(yBYqeBISW6Snw?pM>%Ua?Jmp}Klz{JWx*t~9BC zMnhIWQhC77{D_}2zcjV|^?P7N9K4|;G-T1Jm}A1hI|g|Uq`cN>INI3UZpbul-#8)x zhLhp!@qeOa3~5o139t1-2CC}o48}MOhsl}pw)R-n>&ny3z|?HsoHD9>?=#Vy$irBo zMPtXNu|lVSc+Z?PeuzusX|-z`tP_D^1y>0q6&2`WQ^n@a1cu| zvqU@#n5>aTIa457ULLK1)&j(`;tl6s7dv#q4!l z6C#>!kaVMJM>IUK0`n!Wq#^im!g-&i2Rc6ObMR?uMJ(8QMacU3GlG~btMkDZL#QsP z^BK`WvR9moP4B$G=wvkJX!`{>%%)w=Yy#OxXqwJue*Xn1R*-TI?CA_j4ONq(g9GpbbH;oqHpon-&l3rME!gRamc z10A^{O7*4&{0UN{%)tSBiMKxT^jn1Pls8B*yqZPgGENuDdEwZ}48xk-#iQF)p%ku= zgB_3etOAPaZd16>KKYn|yz64|1f(v9r`l)L8AgRGO^{h>u0QiUJH|G{uZ6U;H%=#I{^= zs;Lw-^9&^pQG%7U*@9-F->LmIxNTI(Lnx@PQipTK8gs2qf2^q&i68%1S`6S$6iOX3 z03H9~XZq~|!>L(vVR2l4Hyw!1#LoHS@H=632f9YXL^Qkr>-3s$@L>R$JP4~I>une1 z9O=gARdSF{ZysFbTs7Ld8>!1|3Nl^t?q0f%T5yZH7NXn}u*+DD#YH~mmsOd-V-!v) z7O#&=xF;5HNT?1~dw0YmroBc^o9dyCGgix%WRmYVRvwY}_s*-VKd4(9J22`@%-ZbQ zzuUt%Igu>|bv-`y9!l1ILKrL5HP&9ray-8Ok7f726z2~WjQ{-p0na>@FpE)i zwRFQ?qzf3dG{>RCC3k}9zbnnHmXE^DT*)V5jF9B|HPo@pH-o8GS1si%ZBIJnB@XyVENP#ht9g=c2SfG@dx^v2UlecZ%Nav zUd!)W90raS%uSa@NZj+zk9hE0w&_+cTC1%dR2j5dn-@Bp_PW5H>9Ntvrunof@F8vP zNJD`0v}6k)AN36g4}FelkJj{$l5C`@kR8KJbW_T&pfvu>Fb+9B{Kzydh@``;NOx}U zOx=60J65hMY~e@IFFJe*nFq0=-2r_)>KdsQBnTyRtHy*q>(-z2k?D-fiAqOAEP z3|^Rqb!ia&+`cPKpv2%?{VlXQA3?|gJ$*W?yG-z~I?E1Up_Sguw_{VjeNp@`r%7M# zb;0AtTpDtf9#SkgOPb$N_X>mCJe~Wa*a}}5_gVy;2|Q-WJ=e(hTBb5ofWRSASFCbK zV}F6jPV9Z~?NqOz*>48wWiWGF-|)P_WzTvlzC2)b%b5su0&c*a_JHYZ z9L&E&w4;LQOuIcj)zbUq>Z|LQ80e6oU#c5#)Q-1Jn%D~S30uo;!t!7uA>>iq+$gzc z;0ckE^KgY1Abl=Kr6O(eBwVp0QW%PBX)?=oRA!${ed90xHI}Y1#Z9p^cleM3l2G85 z75iMSIq!Uc6{zdsi&@z@`Z&dhDu-I-FhF&x%l#*~{Mho;z9xUA8>rD^CfMaF*=0uh z>wrdoRJYrx=)+-hL>wz|u@TkkpzG==Fg3jk2gP^Hg!>DDBEz?#pm^bV!Aa$CH6_XU z;?J8?AFhfd-dy&2YUJ?qc^48SVi9NJN6v+*Yl@Ovn2cOsAZup}e=eYmlP^t<`_`pn#N?#3JEX%>>%78sT7?6Lan*n5sEbi;kZ{^gm#=5`cKQ_hCqZ$>=m zTk}3Czha^DE|w%>F6g$mf3O@(WtklhzAi?l6wl|W;$ck z+c*TVe21uhY7cHJ&P>DNn@(M*F(pv5s7cbB;cSdbogba-Kp53_4eqIIA4<-A`i&y+ z@{O?_#toeSY=$Rdz!rn8(o(FArF2FTaQJd1*bR}fbE^?4z>*CO$qNfmV@=(k$G!^A z=z+Hz`TIzJZ`sx9 z3rM!&TQy+kU#gp{X4@xMjQeVc590(NM~Enh7^-0w`DgpJj~n!rDsnf_Y&UBl6H+Oc z1SsHsA#P9cq({9=9nDI(??{mcbi)mB^`;+8Up`;&yUkkj^rxhoA`|nDZC7s*39thinEIo4*SF>)q!r4n>*iJ zf{a%`=U0=5j1vxu>ZEC@wKNTA=o9rmx~B?m@CuR7AbY!wSrt4Qu;@0c8|M;+3`dI z)JKW%gw7()Glb?}xR(6h;H<4uFqB7zUk8-}2neehwA>+$kFd|o98EC4kH|E621`9& zRr+-GH8NBk@9{g1xzV)?k()yI7k$EHC?{AwHjJ;^?)b%4pMR>Yc|^JhxTdQy0ye=L z^l7Q5`U5{Bi=Ane%5gaI*~0qbEoChh(q^VkOS7kSL?asmqLY4~r$r2@V#d0m_(}lE zNwJf&T9Vjg-lFB@zf(Uv2hD!8cB#3n1`RY_gOjQvGV3h?6)FG-AUTP$;iZ zQjzDqGCf$Dn9DrK^u}{O7MW=OO@fhd2-U7Kk(2`~#Xfu}`-}Z+P7x7e7%3%z7vQ}% zJ!0d>dZEbSQ$au^7L=8q{QC|%=CB!&Q^i{=j!=eJY6@u;XR=|vzhnk=r3+}_U%x(@ zX?f=4k_gFxcYz8`mPJ~s5Pmi0g%adDxIK1cmqzKc zjcRDhP;+>JZNktd=zK#Or;WhY;GBI*@`Hy-)^H7PrrfJcqQ07DcK9O7@$rOz@%kwL zX3#F>1~AZOo`6=)$4fYV*5vq99#t_Gzi&;9(qLQL)#rssIWgZxXLkq04^x<1l#ubj z7y$#8tx@c1XZy9?2{GU?-uhQCV7A80<}P($W}mD8t>=FO0u$GsuU-B@Ao$6>KbK{I z16e`;j6L{`J8R!l11H(2Ga1V_EYJ=NL=N~es3!84)YDH5+*;zlMx)Bz#_}Eo+cokH z${;MJXeTSppAsVTjDmNAq&1NW!95 z&f(B->JEFT&*YP)A zrenc7=LP+REm5s#!Yi1TZD>LnmVU!MsurhA9pSNk&GJ&a5wO0ofo6*bbu&}b6|}Rk@m~G-Cr_& z2h+IS^mOOF=9b6gO-?)uUSi0{Tz)27I5dlhZVbz#U)17E5vUXVG@A!L?%;&S2BL8! zxILDk_X7{mYG_h6{Do<6-qv`^L3bZm_!_CumWw$qe$I~ia?{@ISuI;s!GflSVB>%O zT^9Twa4a1v{f%M8=d8AbO7{KR;I1z13Z_VrR5$*mu@Eg>#=J!!(ePOm>#!9LqfdVI z8Fq4nK(XrC0$2k_@;n({A+ADZ8oxAv0ZP5KH^vlD#dBNS5SyBn9ayIG_1MMd^Nh+s z5HlBm*AB;4ep+$!8~ruSM#A;0z=rIq89l6>usSjflOUCxgmpiT%*z)Sr7BxNif%h(?4H|aYLOKmS#L@{I;E0J~>l`a9#D2Ww!7a0#@&NtiW zl|+V%*+b~JhkoN0j7(wXHh=K$E6`G4)J?b&JU6`e2;EuBJ$a?FQ_5_qW3#Qun!1dT z5}16jDPbB_kbr)aT39V@DaOhzB{YF|sEG*tWW6h)=4Z;wOzcA0w6MN2Ktl-64zvs^ zERMa_B$TS2$K2Ex`AtB!oLPPXM{Ii7%@i^Y~Zw~ zRt|+f+LgylB+kI)o3ET@<+}l3jc4HfW7Y5=CL*COJlT7R{rw5&Hz4lBr<4@^+cSlJ z*$n+#h&tFKax-N`$o1r}jOejJO?P=`GzEf)Y-_7N@Pd$@QP>d#2OP_~-EflS;Ee%T za%So<#Wfu#-UKgbr!5QgFWfPVTTN8g%Zv=|v*Eh9oL^+WTIFRKjDOPBN*b{>$_;!H z;=h)ww>6mf5a{AqZAdrdnwU8o6p>IA?Fkg=pB7$L6k*Z(45U8EQM$nW{SYJwB@)Zpy!pd*6rfczJO@O5!7i6o;r%haVE``lJ^i@86Yppm(rTWBxc{tGl~7i`)z&siV_4z3aFxB1I<$zU<}bQw!o5=wAj?1vnB2Ik4`|I$NfqW_UXIzb{GDL*nadR=N`@&B0JZ;l-2J7tk zR!_J!$QCmGBO$Pc_w*v$^7zlUhPNy8bTcct%G(d>vBw7H%J-|dTW@{Rpq>iWvu?L0 z?GX>`6!6opa^rOk!_2T!1=9^4(Q;YM*$M@~N2PN80ZlTab}`6`NbmL!@A1R6Ldxkn zL%C3k^U8lSDQz}0!Y{=`WEo?BKgWOCyl%y-Qr|8_9ZeY$Hq!%jtsau@Xrx z;XBE}7Lo>`E(i=m!j@TDGWPo9Y; zuZi&Hjdi#r=93!e+7dQx+?a2|Kb)irrk@TwS`MhsjlIf-U%Pb>ccFW0%u*)qDUbv! zMN3LnRx$5G4sMgiDz`aR*>r*K{ViDAGx!ypL>=20dLu^Bt+gQV=P)p^sjf7Aq?O0@ zVei8!$>G)*A3lRkq=P$0-_!z*vkV(6-v?tVi|nx_VTgv91z1pOS#mh{Gd|0QD-be| zir=GXjvel~dPO}d}ME0`nAO_I!n7v3d#dw5|ITxI-sprPv3u9&aeSrL=&m& zoSNa~$n+7``ONxqY4g&5JtvS=ZHj5UV4dM2LKQAPa75V8!W-;q`}?X{M^f>)Ovals zKR{#-A zYtyZFG2MeCGlO^1=IkhQ)_Pqj_SRJ8h8u|ZnU!YS6EvwngSzvg*+Dh9;Hc1^(8oY> zkbq;bwdL1ecy5_O+G0$2?BNXVu)t_#&|1%T(b)xSR!-JC1*B-vHXnP;+a2&uQ_97p zEd;nYhMe7E-6gBHKpR-=40#BlE=<)9NR^$AL34688_S*;r$i@P?bE5Zcg@rcmdLRC z3cAxwqID>=@b*s1q0L2~r;<2x{qb2J-TKhz0hlrNgd6~q)!@78Rkj#c0u+O5%}|E|8mvR6c@;b@ zc;yDWMkTV>9*9LHbtK2!N+fm|3#t&GJj2Eo50=;cwOl5+Uz2mLn~tDD?^WrnKFO80 zrCeD6n%QDgt^8hWA!rTGso9$pUpst{tYYq={e5xZP!tn2D;%ptsRwUUA*`CJz|Zky zpKUflRjd8UHE^cZ{^F5uIm+vx6r`U^qv?+(YUk09)34pJ;HP^(T%z+E3Z3$xkcxuYp<;dDp@|F@0$VrlL9rhWVRgva8 zEq@WUz?l+;@x+6WCc8ksBwm~{4(yc0ok6J#VfAXP@{-rJO95mb2R@zY)!|Pb>?9F! zZ^PMHp3A;wg>W5AZU+R(F+^zwKKDrMbnQSex!7?+M<~*yNvxTDvH^?ANxjmHysU3q z*y18focmkJ){pTMz8d$kJCIzv)T#N)!9yuC;0@NruyK*H3fNA$DBocctGh__kS+Us zY0CX*uU)p-DJxzheeT!zaonsMb3jiYjf$8U?yqX(FH0_%^DggU*`ag-mjs;0&E0ba z=!U83yW5s&w5jx?4FpUr;bnE-)VCrPiDjy3;*4b4uy3}}o!ig(1Nm>iPFHrwnXE}1 zrJB5xmfKpZL3k?oHf!VoH-_TUs;c>af^2&ffk+IDJ0c5()QRncLwYWst91H=-UBAo zkIEb$sL$U{Ha2`DTJp0p`mM6>>|IuWVP)QW%64!UyxP-q&Oj`CV^>PwpB|p@?{fFQ zt}XwH*Rp1QfNR$@Shw4o_ z8oC+-BylqrfyPd}hIV!y+6X>14RMt-!^KvIrc2GRw(HOvxDEF8!a_Nu{#t&n7I|RS z>oUV9Hrd5z=+}+U(BsZr)eTzpB5qHkU0U(hKr)|Gz&L z3MHEU3y%JWPtsv*tg{>0UyJhSp#|;if*w+S(#xW~Uwf!Ee^qa)KVDPh=p&FuzAglX z*PWQ7&P?c;0RxJoY}p|OQ=EE}9C~*6XMW4`LJXJA^rA|9B_;VqG#NrGRRrlG{$B}t z_iA%FX{QbjmXtkt)D4X*xRO})7XXs*ZE#5&Hzy1$9zX#Hzn$e#rQ#xYPRxRPCaN! zeP+*5X75Ud3Y7(w!|S|B!<;02?n`KKD@-ds-@6Tn%KP`Fu zKC4zU0H`mDJq>raH5v_e|c|YiHU%*<)^u-uAfOGcnPA4|{ zl>MMdrr^Jc-*;y{k^fBk_=e=YxMf5LG6#CsrR8%Z`88IJy3_oL5L@=)Ej{F77H z0Siu9Y1}M!iNYZesHz+G7M{2wRdU`-Z%;A#MUE^uD8-tzryb@NQ$yk5Y0HaVdKhXMcBJHOb7gwJigjFDpb+(x;mXRu8ToM2=jaeWf3fEWUm#q5llKZ#H zDkD?-gw<~llG-^?!PgqvXgF4U2L(<*6zptp$8`{j$9$;l!N_`Tj$KOBp)uZyyQ3^0 zVkJOIpKINb$crU{K0ZrAB{-+}_u>II+a5s_VH~`|s?HgcAQUHFJF*ns&w?^rc}+Phw*Z;4E0RI<~bUM~l-k;nf@XlXg5 zq}}&Ina9Gw3Ic7}Pt7!)?s_t69M@mq3br{UM#Wq*+glKaM-IjS3Dl){P6S1cE}hE^ zW8rF~ZEOE{x;8R9e&-I{vQ*!khJwr8gB2h$Hz10iq)GME>TQa=k&T2k;ug9=#YsqX@OEt?x801v{rf-O zng-OhvF&W+?+eDvbO(oXG`J8fK=uuqIER2Xei?De<9X>3CIZPp;Xz8W-<2X{+Fvya zg)SNQA3AKHc$^13H9Zo)*5};F!f&icF6}@}%|;KD_|;d@zsYKd!Cif4g?ANi27+7k za3`ra^k~S1_?)Fp-kMm^QwSjp2Yf2~h)YoV+H^URk66&cvUj~Ys~W$kf>uOV+!lvM zgilo({B3^APP&+DSL>6|AK!k6xK$qw)`7+WwiA_=D8!jeGWU~z0dam?30IkIHg`QR znWpl)X@a3+N@#oyK`lY7kcRUCllY5?uXbdYd9Nj>UL8(MnY%d;Wr8i92TKHHCh5YO z(3;7<%R;Sha8KYKmtFLt5H66jHnHN4S!Wd&n(0h)_fU+MMqrsoZ~6mpnIm3ccjXvM z1fbxr`6yz6M6vIZ!S9@O?gg{tcm8y`>!$paDjy-OFvI+3QJK)V7^iN<*Uxk}=y*QR z9K^C7cPKQqA?x7Pw zhbme9jO25PXjdeG^70Hh4LtPx_VoXR5dMz_`4d(Tc;Z$!?jhE4RYQn>9|%&~bI(8( z&0ksBo+2G@@WVX5PWE0W#NT50u9p3<_!8-^6pip!#|kbu9;oA3Wmnjw{dpw4m&?dD zTtdz0&ny`opy9>B7iFN~Y>W~JL$m$q>!odAPr6Rm)|$E(>KQdz=o2KFq_CT9Qzr89E;``NkdKe$i2ZOs3C z)eIMFeU({^9$E1|vfy=O2V!F}PGB)&X!fgCg@C0B3aqO2b4}ZMEG{boB4-5jOn}3m zh`y5U&$^K<_x=WNOQy{KoHXb$vFWoxB%au^i!{U8&BRQV^pUx2jboCYR8bkoL>rSA z`>!BuWsKf7mr0X>T4uho(o=u!N+XtQ%Pq8+nir`HX$#?B)!1)SV5f9zmEI$QhIO;- zj}5lb4&_HU+lZ8tknBQ{pQ;=KVm?Ed2yl-sEqzGz2zv=vtdde@;I?%k9wMADSmBnSz476OA zPD=(Jh#j%tHR;2*X(E!%^`B<`np-n>aj2d8<4(@y-Kx>Y3nBE*lNr0RO7Q+|FsMi_ z`H%PS-^_nSMqInxpkkoiZKeP5Yt4Uiy#4=@K=)ekbyk$OW+7YPajJFLOg$l!mS&It zMZM;-v0ANz>qpEvHCg2@c>ZDLq!mabZ^!FG9tz=dC|Vul?7;eXLlc<>-{bdAU)&0@ zOk0X9YtC58WDg$yJ@k(No%Il7cm}H!-9ESzH5nML#D}(^|GjMg&~Qx4!=qs35_HPrayjzuE7PQ?t?=DWy4 z?m+w3496K+I{})PConMS*fHt%zc#p>X*vsB=>UyFH!gIG@teT{y)U#H&*r3TuuC1S zheKaR=D+7LHo$hwO7iIZ(rf>Yg6$24_UWA*-=UQa51~dYPRM}&vUSf9yU|%%H8G5= z-g45CagwV-YFW#F5YlZtZ_J>UnMzij`W?j&>B(z(j_lf~_?7TAe0i0z>@SUwFe%Qn zdf+U6ORi*zP)c>(4WJs?cv5JC-!2i*X7!1CiU;Ld0%R%uTo|8MW1(CODPabs4iQrq z`aT$cS7-ftI6YJD_ZoD;xD6q5p=)<}L>rlECLMi^s<&Dh0_k=HZpoyj=f{lcX@jPn zn-fH(R<={W=d%%nmdRFSM`)`@NTrcV>AL(e?_mBvT2SVdoR5ZfAX9nW0=RWS%+db7UT;(4S*+O&4C z>6n%Uv=K{^(q)SpW%s<~P$g!Ws<$RiED=%+);&4k8|%RJ?TgL&8{TgJdtgq}fWGnU zT}y{DnE;ydmHqoB%eeKaPYQh{D>Bh!3 zqhP4$e`!Wt?g&uUWgcrWC7BbAT4SMKrl5_-j+OHa?brJf=bH;=i*2e*`RaNTc^zQZ zrofC7k5#K3HdxVvaQ+tKQ7s8g!F2vb1f#cQ5}U4S&?>QF{_p`C8+C260{K$PC}}dg z{_B!`X(r|U)3UHvRxyO_Yhhi5**OS)M5)1-f|3HU2Aq0{D1Il`BQ@t4S(A&`h#?}? zdYClAO5^=JcPui;_Kr4y#8kBaXBy8e($NiObTORX!er~+A~nKH3YfS&B~J_{A2 zxJT?@@s|(@&9YqXW_i>X7&Y&qs@gmus}h`5DIJJ^jZZ=LuHGm5{xQHt$S>BXQg3@m zm-zbR@ZtU_D(b!x^XcP!7vrO=+e=Y$=ACbqsd{5!LPU8y%i_bUv~v2s5vQ7KU83%x zOC6txf&{bmR z|EG%<FA7r5}ti+Q#L1H zd~n*VMy5kBs4Mv!m{mr*5c6+RhK-PK@Xwxs6C9k{F?b#a8IZqF$mvy9`8t_XiQKL8EX?B>)5|Cr>W2^%KlI#>D=kd%p6=ufwx9`L?0MvYQ3>U1B0_|LeM{jJbP;-XVn64%q1Go;UgmAt;AP4td@ExN2^8vjR;6>)TKB0tQA{GOIz_2%K8ACHPCj&{-8BbJzb9t{hm( zdop0nd$Pz~&<9eg97}G=(JJwjkjBQGCxpqDZv?w?-}kk=J}NCQR0Bv5o}4P>rBd@0 zH%+f^2YvS6$>C!SjMqada!U|d^PUr1VHmZuz9OE^^nXt-sYE>Q-cYxD1sb-4QrySJPNs5{qmOru#$jf#VAYZH0h0Z5&R_$Mp#Gkr9eAH-inr-FT!+RX|}wdi8-y@N-o%Q#02LP(g zH+P>Y*og7Y{R)9Bam+}4^tAMne6adHJ8V&A5UsofEVut+9y_O7zpF<#Vt~o0&Rvtb zgJKZ1RY_&!DH$dC$v~gTf@YFuAedRM^?e_#`;fpAfUXWy>LaCLUh$V@t>8iL71IvXBy)FlmX+(>vMsC&=n_o|T-w`6B2{Ohl9txEF~QE> z@dXH}+5Z1KerYN% zVbjcyWKGm`>iOr+o&}COH+vFRn&YfasH3(n!?qi#6im=!jy}7Nv~^VEA_(zbviir9(AC1LRly%m(c1BYULLex zt$H12;D3^N|1n&0H1~td+Fvl9Yo*~nY<0W;>f`+8nfAW6*EpEd{E0EFtbH!V>-YzD zTKTg)Pd)*4904CZI%f>l&~0H_CdrC zuasvDzVlFfJ^j;Qb&U$XqAq2SQE7Jd9g_ekh0!=`VtJff+#GKtua8x}zkTW<>{s>T zCSa~RfQLTD>pj?WhIHG}{D;j>EsT^q39(m;A(tNJzR5+gMVGq=?j%UO5Yk)`{|oV? zdQE==UL58fF8A)3=!9dQdpFPYiWZmu6X66;deSIp426XvKWC?UNhG4y(hUD5dVH5T3QSsT@I+&gurg`ZDxBMJ8)=}yOg20>8_(Zn`P%$yY;#ru6SQ^14L&(XP8R41w4_APYa(w?6ZQBS z;^w27x9+Z9B}t-oQyhV&9Q&86CHLphcv7XFD0MBe#bw>90aCRzOU){IptPZ} zI$tr^pF5}?O?sj(8CuVyBG?i!SF&Z1CYsekSo(@pKg4>&3X#lWevw27Zns?%;0bZZ zjo!$hywKAj*zSEsU1~PR<|%{Aty*YADVS)kYI}aBd795VwB?42OIkK$J~EQWgUYXZ zj&%}9N)fIKod~u*;M#OXMcN8b?+0qXC>-zOw8Y`Jr3HP^7;axB!M!H9@1oj9agK&e zsP#u7NP;~_*lLeEqSPV&Spr^j(6*qfh#Vzj=UMo@ELFBqF;U^pVrqfhnn*A1~?UX zCEBRanpV!wq!?_Ex}e-~HMden^)1)(o=KM3NgKk`C59bgW2V+8(cnnmbC-KgO(lNk zrxkd@SU7>rx~A(!QK>)aFayfmh8PKEKhh11~fBkSv_B5q6;rVn*i8j+aQRRg1C zM1XiJm&oWO_U?Gu2-9~_NnMd&Ei5BRr2A}VfTLV$%_U(=p@KsgTCXt{hrhmvRO_Ss zP%50Sf~Ru94vDA9Wmly8jGb>@f>wV0oaf%ioKEWkbkS7Sw{QVk;A&oQY1SI;d1uS}TNUEB@hR#iFS`Y8FlN=t^Faa^~YkmTZH${`vQ zj~7kiX+trt7uS!z8sZ!-k}9K$ct>U!9Bk(}inHVmNWM?m!x z3N(2t4Iex=SyCPe5vd(>Zqo2-E%gOTGCez5yBLfZV9at!*WL`HXk$Dg$y4W6YC_QD zS>9Y(j^(tQ_`bWbVZ+agdh&&K`{%?8NgAHj=L4DgufUgg!ZlEbD^CJ0*o-RvodcDZ*Ylg)XQtzU(+jTi)$N5t+x>p3$#SnT}yGZN9I{ z4E_S@A=)J#*0g7^7?Wd|cKWJt)){)T!^R&c7E1lG9omRyC*zOySq1~-^ob@wqLWmo zgT(e)kmK?Pg9WZ6lYOabcWvS{7*DmaOkCgA<_IO}cd6v8PqsMyvj`GW<~)E(e`rER z<{ZPQx&b7Q4pBLn=651+Ta&9dxWjmwcSzL0dtWWtN=_Ixo=liAf1z#Os zhLyK3=FjYa&wr%fA>O}n-Z~?5NC~g92sTnTH{yM3mUMM-J<>#BB_u|#@f+KaBYaRr zAyzT~fG1(iP#|t7raj0Oj=am8C;Y~qoHtKoW|nNF{xU__vrGYdXKx4e9HoHfA+=%_ zRerX3yg_V?XMge_)8BL61=O$=J5Mr}H+Wl^Ew1OnkBZj!T0a5E0>uo2XAAqy$~$x0 zLK@<3ZE;G_RNfu@2-NLto5&GC0CdZ z6=J9J)x-jdc#&h^`nI!fj#Z(KUjXz%B%(o?!f>{K=_M@*ueDHD$0?Te?&ed&z#^fi zXm{doKgMnMZermK>>kG;)!4>pyJU_|HJuuNhu z`r?o$)p=mzxN%BrhLNw$`Pq&NAPc~QY!;_AR9dP`Ai1%M{mF_wf8q|(@zt{0ypme} zk4m{Y_x{Rb3ZY+uNE}0ow%QrtDEWS=|Gk*MK z*s1?g@;<*RVJ$5KOLlG(K_&(-vpi=>k(?eO{m>uPy`^;%i!q)KoJMlH zFd0f3BV6vc2DYeXLuyOWUFC(xU}lWKdIHMHpY0WyNDB&muCI{#@RI4J#Wu6|=2zoe z&`ka|-|wXM={h}$@ui@%5rI_@i2OKxd2HEy&iQl!pM}ccPjfpbf2+ysBHkGIpCKwY z78}#Uy0@})YPIj$4H3l*)1Jn1Mf+;_9iFP^Y+t-*xu-FwW4H*^ zZxTkM2o@S44B+4tU9l5ZXna~Z)$$N6mx8E>+>8_`QGy#eq*XV$yiGKVPvd;!y2!>Q zqs>HU!QE4xD$7x;5D|g4aiTlPFd!onoI6i!o^&x=8j|;kIyaq@#P+mv4mWVF1A&v_9~*Z!gk+3_)8qS%Q&g|P}$&X>40 zP>{fjpi4O+kd@k_SQ)xrB-qujO`7v5sxDs(@w>6oIM(ZFjwipFjv#Nk-6VT-@#MG9 z(COaEa|Zbwe;Bhtn2pDo!4z!YPpyt*L+E_1Po0Y<2e(*Qn-lBb@^Y!n%?zD@8usbu3fvT|YA7J~Vo-3J$X;+Q0GqnQ9MHKgr|R`X7+_9;iFSRvYbAC)J^n4X*|1 zbm%E{DTWV$vhxFhGQ-y(G14`b38bv`j{%5o*oe-bXp<2B>rF?E!?m96#0blDA*!|A z*o9W$CW-J<_;zzs;mCl95n96}!D&=lq#yJHlom*ENInn>IwP%jplZh?HY&I7)g`B2 z)EW#uB6F)q8`@i`ZFc$oNi(`~J!+b~>AqWvB|~St0G=q&;4ceIKDmtzYICy?sXR;@ zZ5EyeSq{97uG}~Ii;O+cnds^#y(mjb_}FbD>wSCiQT?(abBlB ztwWtn1Iy?5mS4j1*+&MH9NP!nB?Uq9+|Z zu+>pX4_YZHsQdPg|2cII7yJ`fUjX~wYj(15$Awu7nOX*b2UpP9Pt;eZ6W~G$l8>C=2W84ar@H2ciEWYK0viUpQ3otY zPD*|A?l4*o01?xnW~t6klIUEnK#Q{jcLj)6vcl-K$P3zweuA9`IBhRDy2&q1v^v0< zuEYFJ4$SuHi=AHP^Tzy@hzP-Xoz4i@cwTF57N3c zOHkj43R@Ft;hAL3Cid4OJj7r9ewAzvJ29Vx0^ zF_g=XCbaue0f(NUgTe z=$Dun@+n_Ha0av@0TQJ}IY(7qScM1^?EqdnTT~&~nWWK}TR0*~Nz@e$mMTCd81Ldn zr^Q{FY?4OjY;&e&AkfBC%ZsqSgE`s34m;cAQf`+z zwA<=@@PV3_RX%o@`{umWPM*TD^dGdL#O50*uWALnBduLHAcphD$Kpn#D4u_(%<&xobRmU*1%bl=I!0Tk(BEF!1CeEEyKRTXHt z;an^eY-W~3gzJ-V|MbeVTPc8!yj=jj)yYSGPw9LoAmI$nq#7~7P^nBTTtqQE#B^H9 z=#f+drDqsL02ePHB#$3b@98ICqCp0U0qQqkrad1u^`UykV51o#V@^U7-nScE#3u5` zS&-3gB@sS?nN+!tT8Bf&n;e_Ctr#CoxZHU;?H|8rRAly*$?xy#HU~y66FVPm>#X`% z(o(n8rCJvepLLah+T6X-jww=m)4T?pEOmL|bNLIRfX;LS*8bvb81%7Va6gZzG#zz^QTxC*)2a*2rm>Vmml}IA%i9v zhZQ-G)N>_xUaITCr#DPl!SL4(`&8BWmm$NUeY(++6R>%7djp-3{I7;t(_{G?@leHh z_WJ)CgLE2d<5zhdP!)_t_VhLAj{V=>x;PzaRtwEO^K>Wx_yYw5eX}4 zjtx(8Ya=L}s<-&$BbywX!bNE7LlBJ$WxSvEPdCZ6L(LZ{Wx zzNt8zKa?K&A#U#*w?Yk#bgn?)vbDxgIPU?y4mphmK{uRp%aN2r_GW1+2Qm-{5H^`* zqew1z+o&Hktr5MV7mNzCByclvw5aBj=hHKD*=bJrE*zBO@+S4ZXwd66Mhy#f;I;R; zF6epH9_C~cc31I`xcW5~ozEvp?HDt&T!c)BiZb7?DWe$Gq&$jYP$aU<7YzC1^Gtqn zIwfI0MSU>=CMqjE_5_QtheP(sK4Y*+ebJTQtWj-gl^_=%rBzvr_l`NKzZfX0Cl1G- zyD4#vIsN39O_|wLuU$h~#&AalCVz_;UL}?GSQ=~DPJ8nFS(j{S(`EPjij4HZJ0SgO zQGicdZBcS#1CKMvHl6c~!sdW;Qpesrw69Ybjr=Nw5^7#|+B7=w%`Xy)c)KG{+2nb5 z5|id{3FWehH^&FFlbfumq0PHvOSz4hK?t zm87=*60;=;Wm^2)Q^Wm&UeVOTl{q!Zte-i3utpvLu5rS+JThq8D&%w=r86rtl$A8W zd@e+FppNH>%Bl0PB9EY_=dXf<^b9Y1xB{u|snffc(fiN(E9_Wot>ICWv>x!z7pp>S zL1%&kXUMTn=_~9R1Ze}#F7miu#4|OnZ2>#9SWE~f4nLPj{=Cu@;g+}(T5mavYR-zm z!QIOzCOQF;5YB0$;_TTp`SQjT7$YDGPxyje7#oAU9s?a^rnbb$TJrseP62+R2%~l0 z%uHWNg&Q6&S?G273w+=AB@D5MH>>9&#Z&}tAylO*VaV6XGb{;^vKkC@xOuIp$HXw*qJ^F98Si%GSuw=2mYc)hGeGB`dt_jy(xi zJ(`f=Sn!1{h=s0}EJQw{M=yG%@ceLxk6ChvAH*jYAG zSR10@bhBXm=we2A{JSmMy0Q$u6alz7Ie#W1#GYsk>_CeO-N(RJ6}p63-QPl&{I!xUWfP5#&)@37dX`_1rO8^^|u!}o8Zhq_s# zSRU6;kbv4W!Sm?-wbwL(*IcBkm^8iRl1F!_SN$y3tMgjOin{tpFhn?@@MGtnE`+WVo}p zI&S50O6SetmdAeY`&A!bQhVx*o@JmJa&B_54dj7_!fO|KD;*M%WM{Cv+EYN82eOpl z1tv9A*((!x!RD(?q(W^`DVJnM-+j}fv{#G@ufC)}VWu|i8I$E=o?Zx&>Gp)#JS z_vc(qdvZ$_r45s-B>BSaQ2VHe+x)vNQV1Sk){%ZTaaArm6@ndCeB+U1mCN{*3-N)% znLq(8Z05@=pk7nD00j=ETPs?Ke9(CLKUAmdewB8(V_HNtSRGt7OYHJ(25Z2045-WT zM&HP9hCe1}$oH-Oq-sidmRQ!^3%VWt#3`NG9tM@n`DE-qC63UVHXsVd!QltKYTt#! zJDNmW{LLqbL;_mYKQRUi%S_f@DQDi1@c4)X*L3YhWcI6wd=*|u|9T`rrVF}ED?3d;b;GCdPsmCj=hHLkxh2AVErgsNH=WN`McVzXSu3~l zP{nft)wvzuiwFp#E68o+_2k_+_z};$HJ)@`GCtM~4(kHs($n&cWV66{*a}W7Zbz#7 z9{FYdcbJ$SdgkleehK$28Z)&0N>KJBbNtc!NyJv86#egp7uT_?jw94yZ=&ELYNnNjnhI9&wzkdvmbnk_YCj4U=p zq&A-^U0vqvQw&x?&>q(-ws9ZHsKRGX<*Z)(h}nxp-qLV==d^{gnbZ>Lq$tc<3zuK~d0TSFQEc_Y z%_M(*bh4Iri7FsijPeeX=c4@DZRj7)HVt^s4 zdxBUmwXph9%6Ep?pA+dnHM3PPb1SL1CLIbE`n=KUHAy5Ama{G$d826FJ(DYj`>oGojP(XovvM+amof9;NSyrNNHcjHB6Sujua^qImuRDGSP&+geq#zZLc5rx&l585jA`Gx zDj9AS7JT}wXdgc9MRWoi4AS#)WIz60lZrdevX#e)d3_QDb};6kpy~-hZ)t95jKX!B zJ3E@=v#-2xGy-RsIJb>Z@4P2*M}7$kN0$u;Rn>(SjSyvG_K_Iq#}wwF`zTWP#6_K7 zp^+S%#*#}X28sOjEn~KyrB0eJS&wht(&3ReYpN z6Qk)qA)t+JZ5+|xG1UOLqhC`}w=(DMVpU>?yzVQ-w1KTzTdc1Qrxs1&f}>QvMkfv- zwB7nYJ$)(nH)4~*?%7qw^(#nFJ_#y%>WWQy0TtkQaJwfadG;EP#wLO#*J?Uhq z>qbwgBc*ZNZnJ#a+T(5pe^o>zi#LYR)#}r6xy{`WxEo4_=srX8B zLV3TSo#wMdVn(41I;Ffa8Tr-+Yw?*mpftByoLpatGNge|p>=GtzFM>J6_>vxN}t@>V3Z{$Q6p0SLaWvg&6HuYDI5<+<@r{sy5<0wWde6pvq+o38qdUy9Q78J?~(^nz>ba1IkMJ&$Mh_O_n*DCJ=0#H)+ngD0vm7w}H^Gm*ZZLL{} z6Rn6-{+Vk%0dE-o2!uj!=!{68#m?(x@Ftv%5pIdh%(ht0&Yp`#X|G%LqZU=7hx2+4C)VpU)~l>fZf#IG z$hqvS7&}+x6{Y#j^>GEYQdQriIBV(DklmS^tdGI3SWEh6GiwhPt z6=I|3fl_aIx%;kF*TdZ%UDM6g(N31vOT(SbPlYyi=}8P3Hnd#%?8j=agcKkqHC<@u zobz4EI)U zs_@pM%oYDP#_Sm`YJ)yqcPzO^_F6{)V{KFwRYWgt8&Ok{h3GeVqCHENCjJb@I>69dCBUSNZDW8Wk%yGo}F?oN8+V4JdAo zb$!$X6J+~W&p?;kKgtP%l@^ z$;o5+&7~{>$DK!h&PKqPZplQarS#%_M$0l<+d{tC(h_GHnwnkmQOw80U(GpPYR6Gl zHRVz>Tf0HVX`${SsQZsWzvntWEijr~&Vk9HT|ODXIshVPWve zoN8g7reHekIy)AaS6Vqcq{vi3YS|KS3XOLIifgI9aNax0nFdS{<7U6VQw~QL`BOFE z3w-<`suGK%86qNn`YR;Clf?DX#3CZIOYNS?tU#}2W5I=Ai!nHR$oGZqs>yCRI%B05 zne9;?NqA;|S=(<$R?0Gwq{Wcg`~>y1D1A|i)`GXm13y?TXxCA6gH@F_fTLDJUj*}K zRfI!9OlrTCrxZ`En+B$}*$kVX-Y=81{?ntdMKIe%k6emCW=!10l>I2)Y z2jPr+%fA*Zl<7mmLu>a74SQw!0y@nalprel-%J(jEcHL1YM@K#+tuh%?bL2>TDE2s zQP`oONnj~_0KJdfyc&C8oF8;iLS`17i4|&gum9s?h!WaGoa~8EsQni_ujRqv ztVG2(Z9{!);DGyH(v8Nw<^-iLa|fvE(w*EFo>J(q_7#?3XhdGt5Ue!6Q`)mt4^GZJV|qVrQk#5cIa^a@?jDHF9{Zw+w1h2*glugJmJHU=aG_U zA(Wt&Oq|7yXQxi9W~)7@S}y3{m{@m6bGWr>l3=+XI>vvcb8;8yAsj5%N%nfVq#|r$ zN@uj}(`foCN9>s(y`$NkR>9#GVls@H_0-E7`WH(T*TvD+5B>Ofe?u{(-|^-|Z;VpA zKkWJNVvQ+Ft@+hPX@s+VbMV^R#Iw2{NyoOhsqf67Nxp!4F|?5Gw=?-l^==#=7Dt4S z7(^!oZle1~-DM8Fy*yruvZ|bwIjvSL(Pc*RIu!|b>PvAd^6Q_wgLciG&w%Ygf-|0v z%}S%9gbDipZ9U0pjaWQ1Ee4u~S_t_!!}M6MHvpH7@@{~3C0~ein4h1?nx~ZAx|QY8 zeeMr^M-MTByPZC>)GS-{In^vY~ zS0b-hA*h{HI?Sz}14`KbP-B#iOhi&0i~aW2}d;_@JD_e-(=f1 zo`svJRFr5MSdVx;yO=qN#}>H;&c8 z%R@{;+tH_THHmlcv7ts6Cv`pk9RmI|>V4Ttzt9itsH$3;^-bVeuhr*&6Nx|WrC&^K8MsfyfLF&I)*)%#oUpTiT7@6oML8j^4vx6zr(R_sV_RntV7asZs_K;{m88xkNqw>J-2L zvGZPv%0RNy&Gu^+YQz3SlVOjoK;(V(PMfa<4cuLEXQVJTU2C%cC;#k03jVjV{5Sjb zlG>asy*0{IM6QBh(eA+m4Z-PDN;w-hj-17w>oGP0U?A!8w%PX~Df{;LF-F?aE)|tA zajQ1MnSR@uB9tBrs0S{9L!wV(HGd^qJcyEABQ#s|HWW-Cj?pjg}si`8zbVQu76A1+sl=;z7a3^9H zGL=&E$NY`&*H8cH)YOUCKTzODh=v!Q$xNw>)hT{tgDS4{Y8m5tcm9j#7x#0Iq8r*J0 zRH!^s`rUUVXK%vqUa7x)MQ_rJfP@0nr&IImi+++$FD=wLQQXZbt``W$du(-jtO{~O zVPZa$Rat zG%w5=>?d$zeF$)*I_ukmV{*RBG}eM-(75VD$%}W^&h0uhA#n3P9bfGnc%uNhyWlhE zaV5;Xg27!^zt|eEm&zMdJxsiDOgJM){vbmF$d$Tr%QYTx4#ZV5m-RLjuL-vRv zd4BJ@Rp~Gv>KLg$F&F*T2;s-0ot>3A&X1ML5DmH+Hmi1+d`mP&J{q@3yU^lE0c;rG zEO=2-RcO;p+U*gE%Q z$?aZR?YVtV9!C**E1sF{Z_TP*H|#;^aQ1oy-QOtbLxyquFMpw_&AAH@M`@rd@}0 zny?NW7Izvk_T~(C88LN3$o$nGD9kS2V10c4iSqo-V$4HQThZg^%brGas|DJ>(R5di zjKRp#*y}Zdc)GSH*Cj9{UT~zHcK#^>QDF>J#8hsppx++9^Z9D(v@;;pnRY z>{ocuV4<>Gq3~L&zFa_OA$9bqTHuOK^h!nFPW3vrz$wt@1!I6r(21txtGQl`qGWD` zzG9oN6AQ}2fsUhPC|^cQ-F`=-agSAgzG&R&$OjMbT93)~t`aNt(eZYGPln#ge4lPe z5pwBNz3uuQCprt-cl3N&tJxQWwkWbYJ#u>d+eXD}=Bqt9p*taEyU~#w8t3qx z$a=}<{N*cAmE~*S>LhAHi|ct6VNp%po5aB$%1bsB0B_nSB^>o>%K@4kAhnjB6&75|M-l>Gj$5gvMsamrZ^riP4q8(MF<`4LJi zc@Emyz)O@OMah`Xr>*}u?lP2?8_l#_*a+0U)V0Qp;d{VxY2CBu=A6iWKdz+!R*m7u zD}cCvuvIOZ;C4ncF;_I*=$0X`y-4tR~NEl z%B=o+llYsHT`ds-j?@^OE9B%)g^ELK_=7NWTWe*AED&}&H5euI_nrlZYPl~-e;-`$ zL07+Wh;{X{$uMurxBRECo1xk7RWE%b-%|HeKt|%)uJC>9WKYa+)P1p1&y_Ra`tjuT zWAo>}-=7A23!P7#Gvc$XDeosK=}K*}lJ;bk6b*Xy2MszZ+)gi^VT=9(qgLnsV*jti zqu!n_zAJ5g)M6;oUO;e-C*&Gj6l|#T3~Eqll07;W8YXN5WlJO7Cz`Idqm9CZorW?C zPmhnaqb^r;D8Ucnnq?{dH6P=hlZ2yIPL& z!I4NDa!zvQ$e83Q@=ryA6-BK}(uz@Oc%N{E<$XQLDP7bcmf;o_;kuS`$62Y!NhRvS zijr_O=kU}d0jp)iS042^xsZ}svG*m6aoDpTte^Gz2aiyd&}d4UnOXG~soz?4Q$5G4 z4Exq8-dQ?;B0=|OHYae$nI`wubXr-^O%|Ptoo|(eP7IKl_s{ub9x@MrcH?T=e?_xL zk3x8^l(8fgO=hwBa!30rSbHn-4`*CpTC1Z ziyWF0t{M`JRaRLk3w7j%tcA^>zRLp}mVd%TEe43I7-MX&dsxKTvs8S$F+^jVBEHOs z=_f`E(w1udE{<*VF-t?iJYjFbgFt+cGRy z?$9vX(3RBjH7NZ3--P$=4%WaoywuISm^6X^u9-skm0L!Np=)IN_fqy-1B7V4T54m5 zri`y?@pKBuza4J$qrnn?nRW&?haG&5>!FW1>laMscRzZ& z1s~70y=C%*jhVovKxGE}Y30`DRpw_{(T6&Jz|Up*{T%S%mt))Y?VL?b?qr%cquWu> zhjs7zPhqPft4o4OfV+O@oz9t<2&>BP0UMtYOw50OsWQlfL?Es*yvaB&Skm zd^bN)*_FkU{2|gtc49d(zerdPI3z7wp9WL=k%W?vP^O?{CR{wd(%c#<(|Qu}vK*Wy z^$jdiWlKOI(n3_q7dPzP?xTnO%&*q;DxmyAfx3<`US(`HFvQSOKZ&EwEov%hU2dE~ z-P~k)`x_J04^J&o8MM{m6MEl)D&OBU@JYkivxURr5NHSwyjm{B>JxRKd{%&Za=do# zyyd5ETR@K`U|et6R`Z_~DYm3)$r$P@UyK#-*#)_0salo*VBUhn6+nxJDg1h5 z?INRx;CkJHn!3=ukP5Mr_mJV;)Cjf~jQ6hM9%|K%Ys8>czeZfccTE#NV-vqf(O_^V|My9=`NRm)v4f^@&Z&Dv|q-Uh{uB5p{iK z7M=FGNq&v#4q^0=Q}4`!;0FW6>qb-iB5ehC7pmfq%I{LDj~Rw>j?53zMZ%*@@2iV{ zc>%bv#w5^^?JirF!}1O zSy+!UhyE|h-a4$UwOJpg2Bj1$1&X(&#oe72EneJ%6_?;{En2iK8oam%*Wm8%E+M$P zev7@|bFO#4d!OI=&iW%)k|%5BS+nMmnYrg4KabLCTjvL=VT`MxX-Cdm>ss>y9N|u~ zbmwFzP@r?riU)a?yq+vE*qa6%`YvFS)wf-;JS5ypSn>7r&LA6Rx0)n^HoP z9vPFZ6TYC}JD?@fn(<~?b}uovo9<@IDRSwIu!v}6$@qz^6aj`MX>`zU2n%2q(QIK$ zCf5p<8gC8;fPr#$I*RAVdqZFN1DWrr?Oo))7-dX9uZDaWGh}EqrEftfEji}eWC?2o zAZN)WR@W;hhl{d5H`vg%zZm$;vx?no24@Em8F^4|UO#x%?XSxoy)4-v=2Fn}y93U# zbf9_g1X#utJwCb_MduDcl^VskOj22PQ-8l{jjT7r$lqPg01|($7DWn4l6wO>0B1zl zw-)}1mQgW*S@o9kz6SyTEyrf2Bm;oXg^<&7+q?7fV(#kptwl*Eus#7Bkl)ae-U6uN zvuF0#ZZ=QkH0i$hy?q|2av)V21AR$wE@?%uK%2kVk-=j%p>|$A)W#S}>X~bIWLFTd z0CAr+Jvnj<4i^N_be2H%F`NAz{YMM5tXlu(PWq2n(e?Q1DsQ#fF2~fqJ;!2p_-DfK z&%;BZPW>$3SYv*Uagd(0K4F8-G(~D(sg=196eKbe67jQD_?i;)2Ce2lQ5w+xsDDUj zMj@MN&~7i*pCqyH%_V=fE-@|Z^x%4^AYryPB#jqgZFWTrWCKM^gfqYozvIGOzr2Bx zXf(E^1-smI>NAjO_QQK^>m^Ba`rpG7q$p$TQjY=5)nauCuVCIY`yt8x@OAUie}}~mL)9ZEd#yG5=JLuOnJPGK;%8m z+#=-D^m_IYQ!2NlxOh-ll954bosSC?2BKBT&nOihNm zRFTjmU_4@|MRu#%8(uzGx8W_Hv^1O?>A3?ee$_9(Y2A@M=0||tYnzd>o)UUnHVo`a zts7sh>(*kE2M~IQv{^%!$A35c%V&x@is?v!(rebE7d^ zBPmAwv#^!97MzRqb7uh_9^_%SOuz_AtCMlB+FD^cnI?R+2W2@LUwaJQN$mZewl(SW z1!d;cLceQMv@DcN#*wL8PAc>|H?p)_CNe?&7?E&MqcIQ;x zk@Ly^3kG8K?mV}wqv@osgawW;JI%{T!nO;0OR^sG+AQmfMXf?&oo;vpZI!+LdwjY4 zwQ}+vu1aHytO*A@cN=~b#Dul3N`glO|2A=kfs{CPo@S8xkWzcI5;ZH1i!=thu~1p8 z#28^_ITvJ}$lx-YCNnhGs5|f}P8{Fy*wm}B#mp?`4{mlLr>8vAwecJ4Rw-$9zt(DA z=fokE=R9Q(l{X_=8D($Hk-3x@N6t}Bg67D59{cfHolG(8Nw#EF_Hp)8LjOhfFE|x3 zIF5O!Rcy|dhCteKLME)&Ge_3$_wbrNJ(+JtzF^$;mAs*#(9{o-SAV;E!xf{Fm4~S!l~2X9@eY{BAdZHs)!~Y_WR6D09mnW@)?hs{kI=u|f$( z%7l1SId;(j-3gkB!L>yWs*Vx2N{ya_^fMXsDVrw+RfPe$8y<=y@Uyt5&dIzt-ld6fcogF>nPIA*wi}{qDH7ij?f!^jf^>dB*su|sts|!L;we&T|P{@M12jBYl zBXOt5y*xViwQ4?rD+^LD-l{+^h5oCLKf}DJMi0jxqU&_49+d+Qaw?WX_`^qDnkI|E zkl}+2KK2E=!T-(uu8|dLc#`Rt;Ofap*`K6;T2T<0p}=P{J|ejOac=aJV@Xo`lO8q4 zbE=3_V*Twf;e2kpq!WNys_8d**+7y|O5G!!2@@V;X<&(;3W2Z&9~>DK>0S`4K$F_S zLQA=8>;#NY>6gb^dLlJCFCN)(HJH6BEI09{J%f&$k9cpQ@c0$6hHOreM zg<@=Tu-@D&Jtjq|Vzabv+rO7Q&{Ios)P2bSQj1|=fSiL zeG{iiV`?QeG%hdYX6M^ZgW|x<+hs;JR<36jM^Kq1?{&PtJE}VB@x0<1Dk$Z?|hK658D@;`An!go~mvJ|tf~-P{(Z zCOc%By75eeB*xv1f^%NE3i>bKPO?A=l28>AGaqVYzTn%~swsmMjUY;wWCLT8%zjJfmp(mTp+gjH4m;}`rR$nBK-?bOn>qAYb~l-Y%P^;a;i>A61W ziC2VTdrV2sMQws@eaf+5jB>kiNzldi4|joNW!wKHaH&=eCWC_NTfd^kK&sprcbQk1 zvQp1y^5ogafiguO?`mX6OUFk_E|`Wy;|YfOqgID4j|=BJ&!h4_ot`Y4nP)f-v$-Pr z4X?j(ha~g+aie7xSqzCd<|ns(pX+fsXr$>U(`lg%h_SKS(_+XpP9TM}`FTV*J7{9Y zR65zYnA3tSOyLFEuSqLRH3BLa@^Q9Ej|GK`}uXJA|#P z?-q;N_wiE0AY}IwQ$^{op&e|oipQ^p7Sp)lS=G!R4W!-|?4W88-LR?5WCyEf=h!N0 zFvDajAORTAr%!q+I5Je5ISesZ+Dox6W#*PAEcjT3l7}|{H zpYz6JX$c03D~D=Dv=g@H^i_{A;5^-1JGfN|HNXtsR26Qb97vP#w%9(F_;&^9!pW@g zi;&!VS|hf@>+vC2F*Mu>^YpOk=g&J<>A8j005=8qD)R1t_&WD0u^tquBWEXh3~&LP zot_jgy_>MT}4M$T6swkw5oDGOD zMa(Wl(<2sCP7jHk=vy@1V#`g5YUN1uho;*eYs43az54Do`dC3RbA;cHCc;QYe|pqv zoDR~tL?XpqWXDW-#<&7+>2cXvQ~(Lq|Kd#60furZ0Ndn?aSDfbCkf0?GW&BnhAnm9 zqQY!UY7|N%?ToBV_r5S}$93k-Q0{Mz3xH;rzuI-L*v$ZV`An<+e6zLI66CN#la>8A z8)7Z~B#$1q$?6n{WvQY?V$zq9R;0XI89IwxUD=2@ZhB-Rrk`ZDImAsRo|s6BW<#Y0M^ zuv)L|>+RQAn1B~aKGFKeJ|0f#+6%kLW%lPCV1~wsc{`<;h^e#D-(7ulGv)y3D5J`Y zLVC&HF(^J_)AAl^<0uU?m?;6=Gt1E?c@bwR9u`*w?2h!Yqy`)5viBx zacf6hQH6?C)rquV2H;Z{1Rbs!Jv5-uCuH}lo&8wPN0rRT#~umhk7?N}Ga@YssG7iD zHs+z#>4Pqo0;w1rdA^MB=%cx}aGng;`uMCRJ0C-%|MtQEiAn-8hNb?}oO z+MY&^&aW1>^`w1*=PAg@HQyeWb!?bGQ#0Q4qp?f6dHh&Q5BHZObI5s$UNFX1t~8v& zH!=7svw|UADKgjpRacGVuP!F`4e#=4Vdc(*DLJ-Rw%AbApZT^}HZLRgBXKJ5mxhg& zDqb#fzzrsz%bUIGx2Muze(ARHLAp9Tb-;zL6l`|D>ZFhwY1ZkHT}swZ*B3uOGn(7e z7umu^oLu)3svWvu(7MMCRA05Jwy%on*tn79_vF3(@knRz+l+B@66CkWSJ^~A!DWT8 zc-A+0eM;Zdv#tSD2pc~+`*u57nXysYWh!YibB2&g!l~`HN=8EWRUsyHa`H^LIl(!)FOG&T*OlUGYd{8c`Uhcu939) zzvAW8$~-t_JV;)0aI(A}6FcxVd>N|KoN@^wb?m4T1}|ZRhVhQ!&ZaRR+Ee+N4!@Y@ z+)j0BBc%C-DtT?iwuE(Q;@cg@W5f{K8OLs?UhYV$$vJ?SoX;ShqaSV-kA%JX6h?Vh-Vj|(uVuIi$dh;JLU=@zh%IE(D2s2B|>*1o~d65BBMUmn&@hG<;UwO>;XA^3m@&;v=7d6^4fl3W$=tzQ2g z-l7C|*W~#G%&^9^Ed~XR2pNE{_TCVstP$@y)7GVu#nZ{C5*iPFJckF< z%MaAhanI{i5-`Y(ly^H=6}5R1Ha>Ig+x*x><=GdV^UZrC0&tf^S-sUG_YBbB?(pSZ zey4`>W=f%BeW;HvVZ1X_v=0WWi$B9SJskQOekOghZcRx>VzQD}7g|&sjp_8Rs$yyY zWs4qGsnC*)w{|$5@KGyHr?*-eHH^6cEnW#a9ph_GJ6nF6vRP(v+Tt!G_;N2E}7^n=kcW2d!pW;2qYoR@Nt&d|w zn4e1~?fyk4e_qvN3C+5%&eH*2q(7$0pBm+%H4s*34y@OCxj~3!c0S@y*2%QZiLSg2 z%3D=Z;8oKAAFWDU2bo`;=cs@U?pHI^_Yzs_c{y*VBX?l=IJ4)P2p(N>$058_t zHp^x6NWY7Etwutge?7lMBe;|u|B0?Hz|7m3MpE4E*ZT;CZ7sEdVrBI1h5X<%%(KI# zpQHjjd=D{hMPqB;cb21L0JG%koM8rx-|1={T)bD)W&bh5~jfHk_GVtlUY z#)wF;Gj9>UjpsI_w;6L(79j9g)#;JGF6(WCDjDsvxLl;Y@00^z9!e=IrNTYu`i|TS z45RyX`sfSPgZq7a>^gl{RsTjq^LMfjA%0VesT>~vF{PDwCS+sPM>iH?o;e&xd$@R> z84lL9T{0>jtf8fuBbDydBjfo?=SSjd)keteRRQi<=*E@_*f_2bHe;HRH5sF}!yF53 z&M1!=gpKpSTa0Z`_pP=R7tH)YhtmL}x8D?2X890tD!qJiQ(9$j!VnWqx7htX19s6& zlQC|+u`0xpzSvGw?n;6vZ^z;p9Qk6IcOa|J?da-hGvmzqte0T^=G1DAt%@6x3{^1uQZ7)s zy%)QN#E(v@frCd#PC;m(5|@|2M#;}McAhQgmkpL49Q>7DpAk1bjdV~IFTx_3`_X0g z$7{&3JZ`xH?x+Hsn%tyop!YTUd1!0Yiq#4e%wG@k-ZL@xH`l28q(isC7*?;SoL;xv zLt$CLQJ>vR{e2IU5}+XIHn#l~rk*l-yVbQbbksg&lLLRTRCTf9D&#LuXwW*v!mdTO zR`V`21dgK=xf3d~2>MrN+QSO29ej#1|4c9E; zZQoZ~d72-rGE{TLwB%yvJZQDl@!ky3&jXa;0A6?YNa?2ckh5`X+g^TB3m5FC6BkSUgO5OV2VHA+{2OvnE8JTgc>u>R(oLk8w02^uo}j%AA8Z%ku+nbMH?+&%*jeQcj~860yB0BkYr5cGGwJk% zqbbi8vg{K9-c5j}M$#NHp@DLzmA@h-{Oo+YwA$U#`hi!3c0c|Rn`GV^D=>d*sVx1Q z1rAu;e}sMhi$;#jpl^1F$M4Nig?zC+ua740MP0?Ws}M0#n+umlk|oS0A(E;|JG(e#$ZRCSR0Q9FzAl=OJMc4tqPqn-QRv(r8G_MsL{ZU=WxW4XPhC`6^T z{mk<)fGf6bXQjFb{37O5M#=1%D#if3`=CvWuUIQ53dmdw3hq#`UFy^a36=y-U^1=( zD0a!(z+iEF<5P_~cXw`8+5E-Om7XeFdwC<%#o$^>TfHrle(>hftUq>w=0ZQMWL;He zA`YzvcU9F-{v!p8c=^7XF6QwN^dgvOOWES*%WrKV1?)iHdQY}1W8KLE*SK%??0&C? zUUn)O8+eByXAlaP0T@lwu%X$PX}_6efsMi!VO(|+nNg=v1s$9enx(g(9ZGeww8A$+ zxx-=(YH~E$Z_K*dp+x>2YC?2olxuWNk$1294{s;CkrzLsw?~7PIqMkBZqr`bk$q%c zw<`156HC6L@=whgGU5*uPSa{p_@>PIIEETOy!>+x3vB#FLIq2LY+r|45>Gi7;N_vq z;0k@Bb~2@=EX<56@Uc-@jLPKg_6QA>wtb7LBaayEyzjBFqZW{uoQE7R@RgRdU7MgS z@#%8G^QAn=fIMuzVy2{QOsK-GZ}=w`u`-5_`Gs-*Ym!DGc`J)?AkZB1uO7FWi;=I` zTD*g(5T2sIwVLCvDn0#@VR{_((J*H?Y@md4C@*qC`icZ#3BX@1j z?%DZak^3!0p7#I-tx9g>00zSJE8suuC`Wq9{1rP?KY1`bR8qCb6mJqy><^N?{voi z@!bHn4-mHT)x>LGaU3j9;b^&^JkJWVGQJBFC7$MsDy=m>njZ4g5-9csFm3?yEedvV zJuMx0xj6)fxjIwhW6-ZPH$8zlS{Du{_iRbJ9W3%OkboL9$b$tyn`h_G;DoeQw(e6M z9T)&uZWmQ+nwg_CeACa;z}e%9i(xmRF|T_Cf5OSeU7a;xEo+jWwkwm`W;_hD)HXf% zNjVKg>nQL5pz|%Akr7FeF-iVNb2550ns4nZ+cvD^2FIdP(%yf}Q;_MiA&g&Uqf%BS z%gAI9GW2+_Z0V3bohy;?@ZAfm)s76b=+s&8XtQngK8*UtUIo$KW z{J_=W{F>vTJSV8(Nmlj4JY}CT^A>FTrKi<4emBng4`#8wGWSA}_eI*of&hDl&^hTZhC5 zCsjfhHwgl8KWQ(#EBs(H-PqYCEU6`rce2V9qco;J-O3(Q{VP+$#LRhOe>dZp%56?- z;{qb@LQlf=LWfmwY_e)(cjXN@*3A-RHKG=YV7tBn*oz{ydl4l;=go^k^-S;X{ug8C zU~cdl%e;wc7pzHT)zdatl@u=0Q}3!?$a&`5N+nwxF3!akDo0f5%n{ z!6-`UYCNwBDwZHOP-Jj5%eSAX*#KfHeatn}G#i`QMy-K_JmTpld-)mVb^h&{k7dxA zcAVx}ff?_KIDM3m!NQrhO|In%GlqChl?dS)Y~ig|oW9rsk8kL`u`iAsuzjspF9 zoy&ZRV)#Sz^izff0=Vy(Gf0~v&#*4_&eBM(#ihA1zX+*lUf8`VA!{$_X*M8DngWj* z_O_c!GoENBK|D4G;WQnGtfewHr04<-PjniCIt&_DJ};HNG@vK>Fj?^Sg~N-`si^U< zJq2xBBP%B}2V%450LCU}>q?Fz;1eEkD2nbE^BWPw@5mU0r*Ld!7YQ<=J& z`L^1;0$80^hbG#Qi-Cq0Lzq{jT||Jb+0SI{t&S4gIju`0>GrAFULPaMhH;H^&Ztl@ z-sXjw759StrrQ%UPqo|?e1N8?GN5V%Z`rXf-iwy=;6@+aD_ON2za;o#c~R)r%4F!@ z*71KNIZPUU;R(`cPtlFd7hxY5EwhzN{h91S1JuUql2b> zFe-z()RzOE>k;E29%Gt0yUfz9MJo`ON30@a(qgYUKG(sujVuXhU_+Re%k2v~BZ+nk zZO6FvZKvdY7F4xxu#4fId;d;iSM`mZ^U0ul2A-!D%E;GEVvyjm#E+VHrK)DG-xutE zxJsA`&MP{g;*YrHkjgNk<&WyY4~8;ep7u}hBVBg}-vaqTZM3|Uc8()dvIS-dlZhwpN={qZB9wiTC#rYPsVZF_Llp({pV8_lmHMGm6>{s4(`mdwEQSQI8+t)a< zG4)?oz-%_}?*P*_8GIU0=<7&3ezbc`r^s5L@<^vKti!k+E+0nSF&F)|S%CkyZ_KCW zP{!@%G~%=K5a-CFxi^&c*(l)?AwWcZLjknH3_yu&F6g=3RfxYHODi+>n_xM)5-e5? zQwTvglt?JGh$x5DBsw~g*QCM56S*MJv_M?tDG=bf#Q@;JfJaD1YbIiOx?i%;5*Ygr z<~8@$=E^bV)lJuS-os(+l)*g_Nvq`ta<)cd+yN?VMGh_YfSX0UWwQ7=x>yxG&JV&1 zu_S*ey6QpS?6X^LXh`zQyee&jC62U!WI{f79m6Fuspr>r-=o2JIp^`SF9bN#e=uUw z*Z&2BSqSpjyGO1AM6m6vz#9JN^4+Ef6y)fA{!HA3Ct(p{@?JQNd6(_gMNBG-m14Y& zY;0S|O_q&}R-;^jji)B7|B`|63gJvgWJal4ofWAYrq%Ls&w$ARq zy;4_r){c8xpjqZb1ZT+7dPzmEZ39vJ6SdKNW1;-WdP#nRt;7&h>!F$Tp6!_Fsh7X& z1caoteb+9jWY7$%h%9wuMky==WDC( zoNg1LMmzp~K#ZA0Q}NN6Nyv4&NRJ@C*}3e`Xec83Xy6I_I#p<3M~qUC-Q`@oAOb+Z zU5M5D?@r3_iLwxg0{WpzQs?LtP)|`WJH?}1hK+YMRS;+3ib{%PE+3L4AhZSxbEi{W&NJ|vukF=+&5u~M> zwU5?rm}4;IQh!nv_AYc4Ok}s3j$qJ;u!=M1V;j3L&Bq*>#7e8Lj=ns$tuK%;i;t?{ zmXI;P9XmnI$j!FMPcQkHbIGN=k$Z}Ru7+CkJU!JYbzJLV+;26hr1rx8<_r@5w0yy} zZ{h&!MSx%k_0?AZ^xN;oRr8<6apH|G{@j}r|gHG>8~ zK?@nph@lmmP3vhTu7VAI#d0n>!&v(#00+YIiP=Fw;^PrP)z)ZKRgaHEj^U`mGNCQT zP1uf0l8k40#Ap5_-4_h*dc5;LaAFp|&Kb85DD+DN6mDdAktYG8a^p4ouOJ#+3UxC5 z=4{FF0a+Vc85DfSkmba>I#_K(Fy?9b!R9_))d7UEyEIHPP@HK=U>q_cuZbx2>X8luCwAu);5fTn zIRnA#=-}FRTT{U0xcjOtFCHk=RRK{|p)Jo8-Kezn6y`-#hAv+hcEM_#@Sr5I1LhF8 z*U0Y;eUS3z_3iOtqaAdDxSuv^V-M0n>t=K?Txbe|8Sp^A7&Z4VwgH*F)p~T|yZeGrF zvx6LD16sEi#v4f6xq4huNlm}bsG^rJ_4+-qgvUJ~>N%&wS=QzOi|lKQ%!W8c&nXwF z-mFu#foYo!h%>cHW4%j>lWpl1$FPnGo;n{pCvE~<9adRlrtDnw8Ix?>>j8p7OeT#) zY&fV>Pv61LeekZaF&)FXOXYIM3foAnmxG>IXT)5GUOsJqBzdt<6J96Jm;}g4k8(F# z(`6nAo{VXdw8cnb$=}K>_m#hkGhbgX(1Xt!$yyTjwbezqTmdPP+)Qz281_f=^LXd{Szn5VMdGDax3owPPd#}CODCSc>eB@dX*2~B{GCu9U%-x9r&rB>`oJ;Twzwm8lW z;VE)p5O?f_ulB1a%(42Yp2@D9+^|;Je$Kg3tg5nmiQp`=w$dg?OqAPt8n{ttd00xR zQrPo1*gZoy$|0`jryz~TaQ<$G;idI30!Yd+++MfF4G$5yLN;Lmnr4qL1nk|r%7VdwM3>wLn2bfBz>0bY;0M1(MnS6h^``fyWuO5!7OsDk{2qT3|_sVnl9R}*IG;`blGF{nPUuO7}2+#s0=%BKcQp^ zTt{KME5G4GC9C%(1HTQdWeL$V<(J$FJhy3m$d&i@@fI+}7iJcx1yLI)T4>Jqpv^=z zG#qj}pY4B{=VkNHyW(;2l0#E<8b7?PkSw&4+0UX!ou5uv>|T2p!=Y@WXX&kqzs1dI zNyQlM_G=^}z|L8MKAxjrzdz1zG?Ylf>UFcFp(`)}wlDChb{eCs9iAkxcxuGm4m<#2 zJxT)$@Z9s>#kT@iS^^8SLpE7`15g=R&(G=qTQbkf_cR-ONBd|6eqMB?2WaM42F8>- ziemCF4h|#U;tDd19Dbn+$}EWZ3}zgOVStYX<8z;EZsqg425rPwvKY)gtFY8;-dKru zJ~`%)-3GNT?Ht|XDzh-@0N}1vmA&(W`>;(P`B4=NOarwf>8cL3OwfdmW@0DI%=TUE z7&tpzsr6eXH}>$h9}R~|Nb*8rDrHu;ql@pEVDLFlY#fic`mKmMdU&%Ahj$5JB~BR7 zFU_Oskk=>Mg#>`w$FRELTf3g|fhGlfBH}4+op(N+((UMuY>TOcK@Id&y&=@}214)c zk(KS0c-KvyGpD|94;-iAnav`xVkLF6)9lTD9UG`|ID_;c-SVN zw?XQZ3nZr!U5QC)3y-D8KDi2xKE3_&3T*h)%i%e=gwWXVrBjqb@$3FT6xCjFCW7CY z)&AJs4Rd7&efdcv?O)415@vWqIWc9He`fow=b0bZ>wL~sXZs=aqaf^usW3ak{ zXxbUgsw#exl1e*I%lA+^rv2{Kj|l{v-f5-z+iLv&xI}o&p8YS~`($Pf$_~K5vfTsV zfOe~iZw0afbyQvffC)H(vql!cBcI>XxPhiRu`;knPEMZ<<*{GRsdGuO^YaDO93E_~CurZng33~eU zu(EjQp}S??up^s7UV`GxypV$wdX$3=O$7FG4%PQKtf6cl>rP3&<+oo5!Zi7PvooF= zUnr_QyIi93q{GQ1EZJ>}jR4J`fkIlynhQPgDh1HO6+j*s@=%)6NN9(=*ra-pVoc}) z6J4o}*`V@I^?6Q`6l5U|p$(7E!g#Qay3cjUKuBC5+24B58=%Mp3~!MHvOTxW(v^Lh z0 UYu!?_V!~%OJW7+6aJBqyx9XE_7d)We%e)9u_@SGN0(M5|a$Z5ZW_%;|(Mp($ zjc)?iH;ii=IirQi>F9SJX=ZBdwNX34Gu*I>7*)s6mBX(GusZO&z1^L)M1C1qDSumX z#l(Jp1<(BSeCHN#)Id8a99(Dq*0|!t)<~P)7%$FQulsYD9If8KFvWO5e9tT#&4hSD z+!Ge0V`AxE{<#Goa7D^~q!v_-KX>v8Cfg)-FYRr`2SC8RrGD;4jn;q>?#qZVaWLjS z@^4Z{nVyi0ZPwhe9?PCke@me-`ox@ zYE;4cb2+8G3r->OQZd6UZiM{7ctzKZZ)9Pf-y;x=MJ^K*72w34VtzC(Hw$!VT~Q($ zqXoRVIErk~qsEvAQ4zK_y9Ugc!)-nBZrm{#z^2*Gu}&f0)x|}M3{fGo3b$N|x_t$j zVhf7lJf+$B1izMtRhd3Ft_WQ@9?t=yaEunoZ8;>R&YlPh&?GxAPElrf;w)bx`4**( z?g`gv0bx&4l)+?uReZUkA{_~dkz-bjdVyo+H~|4pUP_zlN1Bv02D9JA-NFU{gQjpu z``SBndWTW=3B{S|54rC}ONyg6{b^oosAq?cDOHRrjtxndlqP<0d(`D`_I6CKdE-Ml zha{{!U_$-tOyOJ7QDdRuAJk;37pz=Tq^g_Dbbgp=12rg$yEm^&_nJV5?=Vj6s>+0| z3H)E2My=T9SjVHG@&q4DKRbx`$6-Oxg!g=Z^4#|ko{%2z*T6?QtzkMjpIdW@?XW{p z_9=&1KhHUTQDxNIDhd5?(xvM+3K4OX1NUWbnRv=6HQwj0XknpeN2Qo zkV*l@j5$5FHgv+@+umK>(WbvP73T+oq3{CB6IgX==)_qVeETCD>~4*bb(;C;P$FS+ zu)9l?LAH<0+WBK7eO^|P{*8WnZ{qicte9F7`FeSyMeses7esKE$$TW77z|aO1c-;f z4rH~Ae)I$KE3`76o%jBDA;4O-{TKiFUkTq1?%1TGe*O1xxfcZl$u$H1eHY5Y3hYk- z8!0e8^3PgB{|WN=Gf0&F|EO4SKNPAY{^0HWmmAyDO`%mE2|DnVG zJYYRHL>$x=dO-z2A;ETKbS%#A<~^Iv0~d4B8CPDG z$&YiAA15UDev%=(Tdls6ZG_Z=E(w!;vo>yZE?4<)ueE?K+%f+TECkCG`w~AcJ$n>k zsu#5lt|^x>dZs+B*YA$6TXm9-bWS8b#6{P)Q}GLUFH;x+pmND~WjBmd-1u;Z5SmhauoyV2{T%hhUoq&UxOFC5!jm)N*d z3Gd68lkaykXV`%1e*afJtbcmsv$}iXudW4!M#5W0o5Qar9*x}<+IwF}bY4i@4a8jD ztWHvf-+_hu@-Ctgvp6OD8>k@Gz7=ytv^3i5|k?MQ0Xr4qcoeW&v;ojSatvbp7!>F`*(>LZRmX| zQ5AQO1m1Gr7b#hW%H5BV|I%2_==+B)}3V|^D{(9zrva(@u zesH}TIZIgR^G&~lT&~XEh1pwQAeuIGR4)JQ>Dt?WW*QWleZ66Q96^u^oVIs)w0P{L zdPlM`;l(m@a;J1RclH8Mx3B*%b$dJ9b9tM*31wDf^9a4O06b0S3xBVh@ozIxYXQ93 zFZhp?3}B=KV5NJZ-HUMcU$g7qhsj-d-Q68@lj^MDKyb0%>-_rB8Tf4Fr$Ik+Pz`#N zN#v*gH{S?-@IE$Wzc!PmXIA_DAzlqWE2SO4_(#L+<&>DEmCg>7FxZM+M!`2!>*B<3d# zIS-IhU>{~tki5^oPCf^|)29JmfaAZ~K4ma$@dKZ29yD|T=X{WU@<;RQ%tcQ2Ki=KH zG%i16#{J`yckH)?Q6!|#AZZ!xLAO7D;9Z6EpRKQVA0d6X{$PO&{Nn%8maY(ULW+ds zUFE&73Y_{n^Wh(Vfu*<~Px$Ab0k66?Ut^#B@#%wf6W9z1iHb2ZlVSb-E`Z~MmfB}# zTx6dnU8Yyhk$w95fbSwP1Fw*fumrKpzIdo8^fO z(4l2a{l5vR`(>*s5>lXG;MhNl>96hoDX9NT>puwV1LPYQIugi4Hse8N+LI*P|c-pbx=MTb1thvz3CNKPZsA^lvrc#Fjt7tK zUaC@T9FRG!+rjirG5K#7Hi1V+r3`c*v~b78f9r!$b4C#MGlV{qu(-O89LpREJLH;k zutTu~@|VjOvQ@tB-ZD27p3z@kv4#(8C%&Br4IDUP-k9+TKVNG=y{t#Vp=-pqC z`@9f(sWq*NH zDskyztJ2scy}_rj;ixL94AFJ7Q+6}Ia(qV1_w_Ejv%#n0PAw~$Th^)EVd%FFL`^0R zydWIj6)Z9$Hzz(bb7?B_#nI3x0mH#6tJV`*pP|~j_wXT7qYx7(vvMo^K-~1~^u}JS zy(J|!SN{k)=4G`s=?+Gjb4c)Ov2itV!{Ig>rSE5HrmVqZ+WfJi)P?Lr1nxjk8^^Ii1f z_l@IL)*~8{X~VkHgT58}iIckHSS@ZdXrybR=a^}xYQ)5Ral^x|7HKkRG$f>q{)9HA zOG^Hc2C3jsBN%+rA}}b#X~2szXXaXtmH2Fi?5P(T8++Ol5yk>?BXx^j6K*y0{ucS~qm&=5Eb3z*WV0C~AQD))!J6OH;M~cy4@NP7bEmu8A8k0^L8^{)k7w9le|C z7M{n6lpr`PwFA3UAjOtRmgrVR+PiJ?I39d-Q^u>xtZcn@t8E`2G65a_9bdct<2sph zQ{co^w?zxu4Zn7r6PLK)Tz7G`>DGEc$RK#lDV)4D>`-!NH1*AdgIO80m$4dIiOG!X zZTt9s7<~r4-t|#f++QMRV_``RFR?q_4lXkusJrY8c%l-RpYrmLodVV!I5W<-brgU7 zmdJ7F#`yTn(J89AkQak~uEs^KuX=|FaH&Y9qqmvQxE!s#7HxP&H`+AA`o_DJd{o0` zKh9~_DU5FKdL@8X_r9^*T>&>gE+KW$ z;$-}EIt%f%P?&AlZv7RhN4oR*l1}$n0qn`^-9=7d3ip12ulT*6Z}8*JS<;V%WCQ1@ zh~!Kp=JLJo_8@T3Va3AhP4XCNIP)7|iF)7Y{ypdT6wUrFl;kbw@?boyFTKG|=9mw? zY)+hf-X((dD#v4@Mu?oP(Kb#ZXv@hv8k)8Gx}Y_1M}epO>Cf<8QVuaX6P z#3^@D|9u4<5-z;Gs$6YZIs9Ao_?ZeQvDPEzQ`(jZBIf@i?XBaYTGy~)Tai>skWi5B zZV&;H?k;H=q!|#H0a3cUVd(B|1nC;-5)g(Qq?;kWh3>u2-shb6yx;fx)*tdi)|z?Z ze(vYGulsuL^*L_ZxnCvX6u-C4w++6hfP+48KA>uY#&RR|{ja?WfHj@E?W&jK`84US z*8uJYj8?(uJDVWshOAd9V}lvQQ&v*@bxP} zHddyfXnV@kzwc{?`XTnB8*7I3B+0TGrq5f@(w_W0N&GS|-E`@CHIw&HY2|Z`as#tN zL-$qjJj%#20n(w`ng|z>P2S9xpRt*gs1XuOaW}PlZUi!ilU8259<&swIu=BhOlJii ze1M%av|l!!8n(fn-RQmVm-ic{-F5H2g(LG2nEB{t#!T0eqh+RR=l~ept=-2etFJ&l z+2;M*Gs~e@3G+2;16RpI1-Xp1Njxj+Sipwsnci*@5`Se0xk}J*aJonsY$;m&Sy|db zzJcu*qG4vXCO6TmWX8;P(ko)>GB_zrqpCx(k%a4`*>@Op;ubT+16bMP-%Yt*DXBPY zham!^AXWW%*=uU z>$c1QAlyY@+IrF3p^6Xj=(7_Fl!^TEQdR#z<6}RzyNcDvX< z(y!kz2a3V)IDgv`i0s^W-xn>l5Xl;8E@f!#)qU-OY_hSBn7{9=M zZT_3( z8@Stu19<4y*kwPHzYaS@3jwIPcgv1E>Q;^dEWAMa_z%x|{EG7~73Tlp{@>uqj|UeQ zcTcUQZnBT1rEvRJDrf8ePZ0ZGK*N7%t zzs}zKa@B*m7i9>2=bPdN-IpY)RQ?GI3^=0>5-H2X+ zeHW@x+?WLirty?jKtQJypIs{SIw{~3Z8EPkz{x0 z=;+<+(YwC<(69I4UmrLX(eq-~c^+!NQ9r0&7#9e1l-607Esjb4I*fX`{;3x5)4R9J zh=9kgZPO2}*#FoZ292?9IvlUuEo0F8TkC5(fB@@87W$$va5Hwh8Su;RFPe$~gYoBzB!u8gPncX!yiz@po~mKrd7w|;kM1t=id z`)209Kk%RZU-3ePQ%WY`?x*a6IiP>`p3T@s*ZAKp`k z%bq>`FZPUs`-eqX&mAW{P3;VDA|Cb?#;vR=i zljYCQL8=FHVMxg{H9(U^xOP(t@GU1O=W3xjPEq5JcX_t zhq^)T%0*pe?&Q3IA6Jp?!?=X8{PODOR+^vcS$A?ee8vBKz2JTsb>BbMPZmS=V93ba zp-e7logXwcEsH5rkZ0B>N}M=0ArpQ#MX{-SyBuhO|62mvMWy)1O0V=KPQ~&$*2Pbr#TYN1}(+pdd8>?qncVLEW)V@K2 zdZ+ipps>Du72a!`z-IvVtQ)j?eoO591Qya)SZ4WN4plB7r+eJ+Q9T3x9hu z(SMPSsU{txJr@J2L$x$URP-gEW?rENH^f?Zi(NhN=OTqvC!#YWFN#z()THqJ&87uX z(tAv3xTsHR{p%&oRJA>ITb-{SP}zXe#Z9TyiqbS*%reLDB=rN-8Y{RYF9x^RAJc8^fC@TgqJ7{kuTqsBUmq&h%a(qwC<9JE-=ZP4 zf{|upO*w6fIK1L1pU>!C6d9O&$-#9HjHFB-x!A}p9$|6bd$bTrw#-0h_LFe)7-?7y zyC~4O@R`Yv*x@KuKNb~}8I|6~3nm3=z@vun4eI@+HnYd zr#x4d^Y>!47ITFRvH*Lbu2q_Gv83>^>_MQNk)M30iA&=kX-1vs<|`8g zA+<^pB{0t6^z%KC41G8a*a@3!@1eF!`(b`o0u$76FTHkTe88kheJCU&UubWx*A+R2 zAOGZCdOnw1)CbxPB^f43Q)y!2C#eV(dNHjl$9UXIXE~~|(o(9(kda*_HJ&MECH<~4 zsVS^=U(EZ_H_UA7OHv;D>@aBD?K>h+w+4OqcobqA|0(c(UWcVI==DQ$`~q)}Y-$Vp z1eH59>CxDe9*ZBLrA6xF68^pPR%1wc;zfRc_HBZ$r^ho)j}eABPq5u8r(Nu#gw`idxNEmPdpDDHy3^IL#CKX9(t zu{JA0JLIG}Uz2Fay|`hpYixXUM?PO`Twdy^s5`bxOmCh@_`w&bV(Yp|lSKWa-S0cz zBlq);*LbruKgtCwA3s!LA%j)WB?u2mV&WG$#-Y@LE^eGw+6+9NvSIfPlmh9DOH0wY zrlj45N)bn*&f*)H^M>nE1ilic%u{p?jEYX{j!ECgXyL?K(`1JOfYR5;XD!8TD^16y zNzM9nGP+n3_uzE?>*XPWO@v3j_02<>DGe6$$I1{@SoU2;oo@@5*h{U(?YQ=gk?Vym zbe_8^w4yCBEC@<^K zgv>jRYQ*U*j(t`)R&Y#&)U%%LTi-fL7V2EuRiM$Ye)c5h? z`5<|$OD3&LGL1FSl9Dws!BqC^Jm)I5R?@@z)nj-}T!UzilH^`L+|`V%_&qk_ABI_?KFAVX^?2I(Q!?Vo zC<*I1cR3L5ND#DOZexT~t+FGuD zdUymQ-zR!7-e*}58$0h*LZJ@g*0Mm?Wpx?ChU7N@Hw7U-T|2VttKEB;Kt;$*h0`fF8l=e@E-hpG zDGW{aBp%l)DCs>1b!HLbTYECJ#g1`AU9Di^WA=dCvTd#Y&7Y9Fx;BUWZ<}i(9#@$) zw;dF`&QZWn?CaGAy|d2Q8dT4BkfYc3nl?o}A9%5;V<1PWJDT;PO7(Qn==t)Vw4%G3 zYcBt-;XLQOT#TDiFn&A9(Nq~1Sv8PeLR^D6ELBxG#uoqHuS@yB zGV5#orrBIPN+{vY)m_C`<~qthNiCue5fi$7uH|3ijx=I^&9~aDPSt2(3+qO7BT-lB zk%inQfI+7utu}(sDZ2UtC-`T$3pP1PWN!@eiq!eBvyZsdN-R6$ArzQcZt@5KfR2Hgl1_#9;1PIDea z+$|XOEV6;fbg$O71ASu(EhzMp5@JvEn0LicrC}9$V0AC?y zFYMdKUyh&Rp1!x6e~OrY@k1qf5KovxB+_gOLjv#PPl+uv0vB-l>{M6 z-jWa8Trrulv#$y8FDIgs*}$32Xjg@YPx)1RBK6*yX})s^NiigMpS zv0)5zDVW5|lbLH4I(^@I%E)sk%}xnBJT~^y#GHw$ntIt;k18(;)Pfh^4m~?R7;=*S za0nyK!WudX{yZlm1)%5RBe82cXe()ub5!oCrn+pm5M8EM(mafOd6dXT^z?E6r^w!F z?9N)u_2vf(FD2!WA<2sKUC}{DinB-|PHLyDXK@5HLW7Fi0pLoPz~f+TiD%og7s3Ma zz71!z7TDXemlX^636|Ph4{J?y0qWP{L&3PiT(aP-1JGf5x8UdJI1#WUv#qHF-31rnbFbNQ; z4}}c13k)&_O)lab7r2o4xulaJ6Jl#v$!_b46zC_}uomaK-EuMa-tN)$pwTrKa=JM3 zmJmF$%5C~ikTG}jIpe1<70-4;H&>-kpT!xZx!aA(97RtE&)6&+^>LmHX{<9eZ$V+I zFzf@1%fl$+FU;`V$ZgbHH^|kl%T-FLfm-6qmO^sPdZeSrJ=8aM{oyCZ%x`wwL*MGW z7n!2o^5`ZsRC7}k7_snz)ozOkW3=0S&fVYlBXZL#o8rEvYJTxERR7ErE0!~;sH{ee zmSt-<9aY5CR8_iM)iz6Wy1YYIQ)5hP-vi~(IEF>I1xcB@r4OXE*Mwa7iv~kmz=A@< zVwh^WPC{e;^K<^~5r zNH^)FKe*$~kaktRbWZmL(bsK*@|MH4-Sp#i3?Ty1QlwT{0r>#JZnHIMQ9u(>RX>~m zanQZea)a>|`jw3w(wNGp{8`w+8Kn*ic$G3}1A}y1J9;aTSg9mNaySoq3!!)*YQ;b* z%rfoqo@UI?ZQ1fe$!2B~PyDMvz#~?Q2a(&sdxg6KmUX9TSiA6Io3xiYT#*N?n{QwS zlB5^Ool7l@Ot?L|5>_b?Hrlm5S`3>=f`Bu;k8B;f~(Q% z%=1(Flw_|1^W5EA&07Vl`y8ui3|eemk2XJkUs-x8CC>Lu4650+Sdv%dwE(Au28GqUFwlbW5P)nwt{1X*iwqO`aBl-Xz*N4mYf;K>?gRxY^ML_kV zL#&`V8PBOPM|j`F-4mcmi_u(uHL%WQ-uS_*IZ*S*w;2)y2B`~`DJRj1wowE+!><(D zJ)|E*M{AX$KQQxjD{|efy4C(v%O(RTE=5pB;jLH@?8*6)-1xg0qd`p=8yp{!QKy)l|=C@$Kip*h*E1SSiyta+a zYyRN+bDFOifYx!#Kmw#YhbbLZa2~^5q&r&`A)QIkmzDFT8;Vp-@S+3_ciGQcFe~$p=FJk{S zJy`3S()L3?kpuE^zf^ARcmDT7e^_J`*(~1vM2vYHe8r)9>F+hARmveCQ4M&N) z)WA2BwD^JLxdObu^^0fTjruGxx6I=e`P~Ie{28Cap*FV4BKC4D`9VxYW5kWD?H`C= z1p5A`{)!0ta_w5(*m;8KSW$8;6&>bF-tnz>p;mI0$4T-Aw0x-H%C{HjAcJN+ZFti8 zyLdkL)f=d+%{bwmA7@K^;{=yltH2?XtVY-c$)64H+BOEdI`tnKxdEbMaXnqB{SPGX=%w-s?oVw37EGzTX9?VIm?nn_<|Cr@Z=QahBNyzCwWEPo|58DyKqRh z1Yv*c^h(H`Kkvqn3q)Dc7vyDE^KGvholVN;=h6S1JAIo*J-HeHAi9LGngLmZ!nnjM zp>qsc4;j%8Jcw@fGkAW!*b)aPwvq1K62-UInP_M#L`ae2+SWS=&A~QJ^&uu^4-NG9 z^Xcpc9)u*~!8Gf*hm7&74tZZcop6pgFd!aGfNzT1dH%6+UW^^1p8R1kH*Wku-Zugb zwwn&~@F;&x9{na5M?gh=ujboI>xsW4dKwE`zD`N;m!<)v2wr))BlGbfHjWB@N8pIHlJVtTg2O`I zj%Zqr-qkacr-XyiuHHY;vKp&W#MTLgSF?sz^%#VnqV5kbs;BC+ZwjJGd1^i)82Mz@ zF3`+kd^I>fujavMnhSe>JM>XO|En2|8xHw7{>DHSuyvQLP{ol1^LXQ2WaHsg{9)fg z@8VhAxd1u510^#^)!e}%JO#v(B@uinB(T~T^0$A67Qp4>Kg&TtYc@BGldcJj| z7Aeyl_n&3c6P%}n{fHEOIm}(-jus#^ReG1q73o=HX9j<|#A8PCimc zqGkKKz1tiHNx$&AtA76;&HdjTFg{g2eO`Kg0{0f5*gDt=aX-(r<8ky=f)l^3w1Gdr zh>)}!Uy1ZkOx8xOo5|~B!k|r?EPm#U@&tev#u!y&qn!T!V!J3eKPOo4>kA>n%0wu| zMtpAc=DNFbQqYb;7!m)}yfo%HNJH;Zvp#(Ba#@Je(Mhq!0&UDnCcm7C{j9frot#UTQsmB-SC8cLrnK&jyj#YTGY+-uLg{ybg3o!w6 z^Reyl0z83dc6bwEqkg}p}@&1q!!-e%IbdKxz4NSb7n zKUA$)xKlh382$gXaz)G2Kzfn_d2Ev zQ)awymh*8AIND4r(<&1Y08&ctB%f@`%P9;mY|!T|94VcW%3orbM_tKM-%9}A^-Z2^ z;^EgAIRnZ|U-m2hobaG{ial3csMt9@fnQcs4tJ9wlJ?4r#`HF{e^XaoCQ)K0TZK+~ z_gGTlK=HC?$h^h+Oi*B< zPSMWId4^sB8kKYr5Pjm>Rz>-X1i^7B@Tu(k`<(^8#5MQ~l%1PdhSSd>KTz_OHWK7_ z^+2$oEYg6f|<=w5A$E4oH3w0i%hZlGewPWf4wov?ug3h$!<ZZzD z09lzz;6*`AtJOHt7SXE##V+4HdXx~AA0pX)3h=Nsg0v93rzZO6!F|2d$V0C;gf#qg zWkDJg+H|)zu~1aK9>V6i&UICwrQt^)Lx4;SH1v2;LwpMs7*-;ieonwl^NqkdXIX@+ z4)g#ghUH0dK`*6_08}$71(G?|9k`(mnCFt`OAn1v5)UN=^+QR$ir|^iM@l&{l$}q| zL-e0!Fuvu_or8RV;6vhT?PS(VB7r*IgQ`B z_#X2 z{ctqYi}Oa4EfzJWZ>nU-Qzrukk|~?hfGCG|25ESz3ZkhYN17Nxk*9gitgr8Fw4EHH zby`Z)VgY*ucD(sCwplzbr(^#W{HdAHDX->48|xn+m&N@W<^Fj&WH}n_CnlsW$;n0K zE>4tVA=QGg!e6kiKS?=2m)+4L&aU>V$+vyIq$UG~nvZh1+3%#gX1)81^$d%gK;}s| zJMl3819{73jXc9Y56QW%HSOa{$k}?y4lN93-zvR@ucO9^Yc58pY%{yv8Iug(Q6{@FI!*{@lCLY1O|=u~YJ7ZnIwpCv z!Ah@vi79d>)Bd&YrrnZdh)x~L*${~cc$~qFis&Mu1D?h|*+nOAB>kr>9ZXNi5-;|*a)_|j>I7^6dcgH6pTFjwC$)hKw|#d=Mbr77Tp6Jy(|j zF&1G-YFU1|PCka!An#7LFv<37HvF39QM_w1*?&z2F-z+c;&7XkJE-;o87~E|yIls? z3n;Ml{Nx$#pOKCP3JM%6N;UbnbblFc2InSPa)yvunH2}BjT5&6gk%wiznynn1v)T8cRWHY-tM?drK zDn99FVU|~JMyz!ZGbyY zQu0}yAs>I8%_Krec3^Q;k+cmQQ6j5f7Q$_lmlcx{vNxi6EWJBTPB}uEJgT^E;4IhX zJ80?}B7fW?90tGZ@MvE4khWLI)207+>qV?S>0r6~5}&u1?z>wyQI3htGW zI42GEvs}4mBeE`Zr5n%d<{(U(9&YC|ZCPy%6Pc_Y_AU!8WW&%t{$q=E*iy(RFg>K$lSZ_Ne^BTdVy z&%aTIe;4}=pqP@wiy`(AF1#HyQJ)YhD`44RVrtbLhW zVMY_w%Vzls zy+qu~55=*^R0G(>rlGoXafnL0>Ei{V^VPVG9q->#VxmzO;9wUTm{XCpVGW#oxMh?Hgc zgg%+r_ql0pP@@I*rsigrRF6%SdSMyTauF2D+bd|T_3>w#5B*U%F$35r$)~sUqK(4X zl&eZG9TGkSxL~i1c3G_AjE9JsJnOdOl%M%(CF}TLn>CWO+depm1TSa#en~;eAd=7J zRz?_w>zNJC#q@96+!xqrzU$%c0pScG=L+$Xn*u9ytrr>gM3wCNzUO|Kw*=w%)B_U}5n55JR|Tj(61eRt;RRZMo-chD|^mu#m|^22R*tv;~Vg zptZfBSpRQF(WFsaEqO!*!CTBf+~kC!n=F5gY1f} z{V)GHeh2D)T$*e6aMduJ@>zY|rLp*$2;q|av+Y-%rp3#vItrHxxOL;cBie^G-gMUH znqj5}Iz}MROGk9`_`3|(9y8`G(}Rc3pZJd4%+Ip8b>Xev09>hU7=UJ5k{ha1ZY zi-8#9;i~WYU5vR{IFQ=i4om$U72dGu^FL{m-vjq2&e)e+_uv4NEl7Q>C)z+#z4ea>WA?@7P$B=9H|JfR05GM9wmTdS7qh;mi2e`G6wn!iUYmL`%VcVrPI= z36z2YI@|w6(t#J6F4f5aVK*D=pY|Du@34#g;Q#U*AQg}M7st)8LIG&Edr3Kt>WwO_ z%v{^APyhTUtMvckq2FWrarpN2N!R}y2l!tV!G9-){~HtdH(lR<;{llsubDRqDm9Zz z>S;Im92TzPqa)ABxBo|?GYU8Wm5`FT9t9|dKR*8ZPS12ejw3chpLb2~(dn*2sNdNb zQ&o|U_%cRuVfj@A)vK3TX_D0uWmjKQe3Ixr;vSJ=l@&~{+R-cf+Cd&+rR z{r8mKe#TAi0C_CD`f^@6xg7f-_H|xOT{M<>0D2&kFkT&`uDpo%RucNZXieM$?~B`Q zv!O&Csya^)yw>R4$}jzi$#u;hb&M7oDIf609N%xx#4su&$uRWn=H%FtOX4_B{MxkN zU=LIf$i6|$sw2*jcVwZ=!Raz|mDqdLV`<-8K~#P#ehLrYO48*nQ~A6jEFNxiLiB@edp_gr{i}mm=YcifFE*8@&yn#5cYf3v z{V|sYjn}O8pVvy@Fun>9=ywLF^FyS_&D$QU9CMYVhb(v#;3C9qmF+yIJ%EI)4KXLR z*s4Ll;GCMmtOD|OB1M#kn!QCFzdFx|uuz^5Tdg-Yc7n=uyhN&ZPWQ45+dU%?^~1WZ zK+*6|2^Re7`$E~@K;#W*4|(~tZl*^CzlSkwf4tjeXMOx+WsJi+<=eKYDv4jDJ|9TB){fB1wwR|mqDK&o|Cf^Vr95?#;tH{ZH7PEUa2&Mo< zcRn0~LV`Dt?s$q=n1Zg>jeq3}_TvXeF)L5W)-Tn(u^vQq@lF=_qtZ@9^@b zbPF1=B5An$3|;8;@d|xsIrfrJh$WF#FJSB29I(FFx zw&_41r^xUTEH;>&2b-%o}O?{ZY6i@um%qp2!MF~?bu1b>3GA)AA{U9-8xrf-_fwN4%MDUEX52v({%IeWwl?bQX=qS z7`Qlxp4moD;LuvnR95xgOo=*0N?KYX?*;#K7r1Y9)P(hf|Xd@%h5!&!NDobpoosZ;>94=UFbTvg~cHf&ap!YfH#=AS^GmBOmO zHSZ&_q_X#pu~m+%=v&%-gdC?edq~z1H|U53M&*OiQaJTrftha8hX$IjeUWQ4dXuz@ zs-f!HMjMjsbED7DaYUqav#u zK{TPGtecv1(!MzdyIGmMM;frl!OGi6fMDB3)YE(H_0HcBx$Pqj~qtA}cqs#;@;j8b#k5 ze{Q{o09S=>lQjIAA!reV1$H5hTQxf;k6BHtA^w+b{!$CfQF=cfDiJmO41+s?jE5`| zC(UqiTu7c6smb$tQPq4==GC9s;}A;Oe|!V;W;a3g@Y1u%dzS^U8HgnpWJOH1pU+UOvb1HhwRYKA31caKiNEkadG-jHcCY3l$1)@K!~U zsf8Q_ewd3cE$pq?Pa;o0<3mC&|HU=^hZ2ZZiH%EQgyt;Q(_p`Ep17g?Z0MKvvL_IE zcCBQcaDJVQCGV(>8xILKXyy6fqYP+TC1>cu*D@pb(%&?gp>b^yX?z;!cu~bPT4mQqx9D`wz2MO~KtF zSh73Uc}rpzoCJrZ@fqXn-Ik7L`|YVM=Ffh-U{c7p{%#{_4f1XV_egtpGJE4{T(SYq}K$YVXmPM z$?b%cGe(|6-3m1RtY4pWr#>Vg1i?z~ensK<@o}DTzE1Hu=po*Da?95VHRZ3H8J#@mjyl|! zphsFkzT#Zq59wK=zl6E6`Sl;HRK1_rwy3HMAb|vee5GWizc-vT-Q7xxYFfr)-M!{+ zl&opD@G?pqmekyo0^*mv*nb2~-ZE(BPD~$J66($(bV(hi+B!~mWAA>;r9{K^a<-XN|5M&@()v9V9McP zZDXvoy0|iIVQ3acq{HH47W~Kasizsdhx)DfrT}IB1nH99}QV693+xvSNAf`H#BjIMJlr%pG_ip5*e2{jNR0gUOjxT z)hUy}G1?#~79RnmF6kZ(!vt$OqU`G3s^UYnc$mKus#AR@m^DbdWb-3YxYevs72PF^ zdq_4dhRF{DjzO$jI_Zf~d=z^kZ4E|SxL5HLm&)B2nlo*ErXLdg@+n`ihFLAdzXF3G zy&$hFCsZ5cJRC-ll!2NaYVoX9h5!et($b!V0S_z^8<@{*Ur3U1#Xv-M6K^;2XdHaAgQ~}@KAy`MKb_(hKTf%)RSsa{|MdO;waq0dU$)lP& zGL||{%G=dob(h8fTmP~ME*TwV+^EJp|Ho=$qqSCH^7rN=H{OK`DG|SKad^y?KM>M5 z;#I8W-W-)lpzw0J^3kn@1OJ;KEiD<$fz8p`DQU1ed1B=5&GKlLotcD=E{mYDw;8Ck zY$wvHpFcCI4_7i|g;qvUf?&$J| zG>fx=?+gKfK|mlNR^{g9T}z5v-FKQclKVzzuki8>!dxxX!h_MyK>S26Qz56UlYgEZ zB8=C%+PPsqmwy16W|&XG8C)>($PIb?%Slk1TL-5}kyKEj(GvD4{w`^E*C=fvIys6a#l5 z;vojbz6W%uUPy{+bE_M~qqn*A;>Aox*A81qAQJKnTR=Zx@AkyV;ci)%Xs*HP=UnrF z;%$;^_WkuQ9mO^Ku2}z%;zG93etF2MY|k-sYEOT8ONx<%JD9RRlh-o6s-#B-{$h8} zXGendq!JF)ZS2W@$w9da1of#jt2!A)WOM|TBOT9=sPiXnS!-{_X!K+os1!bs*Sts-D(zx6k*AGW(mHndP2^Cd6_BIT}7BLg48gma`dpx6sx7=Ld46mtAFQLY8s3fI(rs`xBg z7KKq*e`muAmx}=JyoTx=dGvOMa-Ro6bIehlyswJjJaFz@*2!V1W1`0{R#_v{x^KxS zz;xa?h&F;vz0XV5KWT}c!wl$=7=9)QA!$C9M?yC@OXJ!B0koB)_&fyB(_i8$ua8O1T#`-NuapuS0er9&oF zvr5SlVa_mymlDZ`$26xpX;aPd#Bq-Oqh>Be5!_g=dsYF|ormskyuh+gU|SjWhdS>n zHX15|`ZFX0-=3kW)`bTtKCUP>PmKp5IzD>O2duPK@}}_fFdwPual56bT#{MZ4$mi% zRBt>MTw#B#bI4;&bjh7RSA(KKe0Z2@VB@A&aFsksSu|Q&l}vp57NoRT`9<^Wxl`e6 zOs+qKz+xkB#?7ttygGmE>Ty@?$ny{5)z=R_Gc*(;XlWDZ>3-@h7XZ^j|r9Dd&Eia@!(!|0hbAY$86BYXZ_B7nc% zVELkzZ4?>2TAMOU$cUi)I z_PLKa)06Mlw-`L$Y~Yk`nz`pFD>c+peD?C{9+H$|Ef$BJY+M=LgGL9oxGiQQ-<4%6 zEB{rP4cRJ;Hu`lxt#KaSbtzzs;*RvFEy@gYh24A(W3E#{7FPwl1gshHvY+R3`B?c==zr!?feK~!scA7tgow8p&dKmT39Z<{hO#wmPchenJ&5Kh9ff*fdc$(fhr5k?8bM_~LUU-H`5XRZY);~r zeJ<=USnQ6tbCe=0cPaBG+$ZKH60=c$lJYxC|G^t*j_biFDHY#ZI43B15E#*jMh zaMK4Zl}wgSIQQ!5W4f@cX=l>1`Xa=PmW)A zyz!n$NxeH9*iym7Al{tR;^&JWT}8ni+zHv4bQZyb1JuQDqDY}8|gYx(0J?&jZe>A+#9*WuR^)A)m4 z;m~UhU4y#V${Xb33psfKs+V>2<)X!m2hBFzQeAHS(ew~u-JC-4N~*m^|H8mG8QAF0 zRT59NCt>OWV&Kx2iS^ejq-wh|>6_t%=sOO~%_g#MU z&_yJsb*!=O)FEAE5C$~at{?xALz|ERP= zzddE`1Hxas6H4UWud76%Hp9(4kLOR(JF?klz3KQ3H}2N4MBv9>p7h2fiK5gjs79E9 ztYI+J=m^_jR6#-aF=i zDm#|v0Pk7vpU8^gt7z0LO$J>bVfKD}^Cqp`A4mF+K`Em(-ju1e(-)uIL!VZkkcs>` zKflG9|6X-r_4E28q&~o8L=TKsS45AGk1HeOdJdeqZ?@!v{dW`uNIN0VZiHW3>vdTO z>cg8imP3GS)MDOW#PB~V8X_T!O|Mn2DQMw8pSiqw6DZ;E&t}~FkBSU`-uzWle7Xt0KpBlcR25XJO>mZ{ukEFimyVMpj31xvK%jncx=> zEs~xcI3=uAy>nb`2&KS2XbRuli#tBjLUiV%0Pfi!$FYU!M#}acdmr}C+r=K8jR!&w zj4ZtOip+<(M{*>#M9@}AT?a{ajnZJD*COU$1NeWEkTMbcK@@vYFRsRpc1R^84Lc1H zz}Xef2tU&rdeXF_CycU$8O7Gb$&$}VajA`|s?7Yv`Ly_DF|@B1z)h=`9RYQxvxsA> zB@RNW$p`6M3%u+l2&z|w5vF&Lt2nC5;Mnf`?ibkvMNoorT}ii*7^z(8nphNf{jBWs z%|2b8W8U2#ZXAJm&9sDLG!m^ODxSNhIAGzA1g|U3nfgox>00jhF=$`)RM!tPSPFDr ztjs@ED={+aoO9c%>!M3_?VK1mIJr)c|8Xh0zLW*J1&EZu9Gg0dY%+3%>P$sB^~-Ib zg1mGPJ~*`hPBF{U3n+KGm$#8ZNT(rtHSaZ*5It)D;&p*C9D8_0?z2yK*$IN3`4988 zc0c|A?bD%Z^!9p^vzE1m9!S5a?6t#Az8J^BoGHO{oX>9^s)cRw+U+}=jooyP`h~=5 z)^vpE7a3IB*XPVKD|Jwa0v5xgx~t(+@hA=hyH0Y3@mf~7@hNiDV=Wfcq+LlR2DG*N zvOl7eS;T9r;G+j&+LcMOnT{%{st1t~h<0}IZRZ>il;-#$i41r~5Wh6(@Babffg(}) zZAlPSS(-nnBw9$*Brq1-f%B`+U*T@B6(T4M|C+H3RQ3F}166kZe)Y5ehp+PvXky#i zz8yO%2#ORdh%^BKX+bF>5PAtc3L;HFdJR}XK!`}Mkrp};X;Py|Z=pwN5ds1U5LyT% zgnWZ~&h^}L-!Fd>W->E-_TFnhd#&Gt4;KrNzq%`t^3D3n`HZfo_X0i;XHPtS4S754 zsnhV_tHD?}4rIbZs>1svFN=h?wznqCu{Jh1B~sRHSnwY7y@8U==C6EDOl2wbS>-zy zm}nPAk4nMrzj`)K&aHk>lzGZkyh(HBOxgD0=E8M;H->K(>_=>l7A?>{9)0HPviIZ1 zJ^WcKzOq7rJ9}!ae-0y8gpgXivi1wVD*ulOG1)&dO4%AY>0t6rovF64`&eIdZ0e21 zBdcli>DAqrJU*af2|%jo#gZ`7b$Eftv(V2%Wxh*CkBu2<8=fZG@yv++t@;KOiyQf# zidevIzFIj4-~;;O#Zr0F7pKkaaK4Gk*Dn!!-z@bVX+c%jzx>pin|GrcVy7$h`#A5ghvZcz5;62K zWv-SOb{k(a<~|*)jCyNH57-;wRydx*2D?BMX}9PFk5L03`hA2;wr`)DEtvaeFD-Z=rM=uqYB-!37>d^k~8j3uVrauAJeduM6I7` zq=LLKAVpV7MM}=ADQLe1ThCu>Nb|t7gq?Ix+*;IyjeMOA7rLO^e8Mz9Hy9Pt#M#|) zW!C1jyPIOD{{7yz6Q9IR7&4iVJd$fSYR)W_UfRY{o z>OZjq*qj$xp-*}99i$ceZzzSB#q~7PO}i)5>e~&=@Ut&IDvj>o1&oIDN%o$Jd~2sV zjC4mXxXQ<#vgfrUC0!Z#Xlstl`CTy2=G)DzW33n?GAOLO-I{x<9#EX4bM~0DNWeVa z5`hHMHm7of3&hUcwr@#7&((D%-B<<(Too-lpCrjS`@TRY%G}NgVX|*&cQEx2dh8}G zgdC2}b<5~O)Ou1gOOhOnD*K^KGg)O$vs+WBA1{eemC$-}En)iek zjEZq9oIdw#^0IiD{vgz9RHOxJ!!ialjZ^ODyOaGc!QMQ786wc6UW{4Obsv168_mh$ zACuc{ZRIFb&N;m|1ZS(7d+ENGSHX?-GisV}J(7bwuW*>Z4Si#zE(Mi~ux} zYa0skVAnLfN99c|h04U{uZF=ph$^$$1Y#6UKHnwwOh&UnxEM0w8bXE3+XvdjRL{-k zZZJQ&afUT9s|Wu|!1psI=fdKH)6>esEFTsl9UE$I60uz_s~Kh5nOj|+1JnL{Vl`r- z8;suzpCY=bBzaJMoq6JC@)0WUacpdJs+*MljS=S|U<2Y2bawd$(`}u&E?<8eWpebV zwa`)9+XH8E?&GV4wHPYaad}&i!obLeKfpg4|E#Zh2W)TwvTRBHUVE*ft`BGQHJvKG z^}cXe?-7x&nu{JKXt%c=YLB~g(fb&RV9w3z)W;I0&tz|H!$OXHf5!HN=XlEFY(PRC zO->jvmr)c7uqZZ{=)d+c&EA#<h~`wl>;pp0%Ppk;B1puK*{#EnsY1(8}Qx4>ho# zly|8p@<#sRO42kbR}HIUad&OP!2%1W-+PmkW}uiV+;3Q~np?XpKXC70^50Z}Lb48C zWHeF`-^U$Ps@97Eviic9eZT|yBz|9&&vQ0hUjl8laF(Pa<>ryomtKCGDfTNU`KVNL zF(0D|O~xE$neAsujk#CiC1;G?l|FOby!mUIVazONEDdPP!JmyO@H4Yy1J+?3-V*BP zRk!L_qZtu;A+@;%!{*m#t=xPq=;+7E+kqQoFlp7%%ECtVdpV{VW%luCsnb)jA9b)T zDV5j>Y_GzM7{sj4I7pzO)17t`rYtBGwX6|$g}~c!5PSREC_aQC)wtpBG$hV7^OfDw zHyHZ*D|a!%J`N!bC8eCzs9Qg<9U0tFL7%Vu(rAHtxrny=+7it3U^B59*YF>D+g}k$ zf`YmM*pLObGMK%UuY*~01Sbyk8cjmpF8b&p?kQf3OxjmityV{nyph*BSBH(_7%Ey# z0g0Z6ei48&k^puM#aI8l1Vw(JvEo#D1GXydEMMi7$TmHGK?n!Xa>Vp?Qb=zIGwokkyCwS<5O=J+T1 zh6V}=l&`QeazpeeW5rO3g))}`AH!1BR^|z@PQO?e;h^c|$J7m$pp6RT9^KkRC?`LMJeX;cQ<(skgQyb1Xl4GFwymj^x z81FD9pPQQUbmb`)bUMDX+E!w7ldXa3y@!HIlSc~cwsnhI$$^E%Vr~TwcB=JL7;ppSS#c;6vwf z*x)B$_dVV*GV|E=cEhkA`|Nx!_9Hss&-l(19nyXpv&>C3Frsh z|L#n%cKnN$@XaJBi%3MZ22PD=x>m|Kj)>}es{}5P1PT1_LXfLO`nNRO?z}yyL;tgjX(MMSj)W|NS!GUHX(uA7`o8$CLs4P>NB)YA&F55K6^y6KhSok^vM z?4`i<^nWf>K&n6oFDqMYkgLy9Z%6K}*XEvcLHGs6coyVDo`m7%k4B{G)6y$cz}=Cl zXEd>)cl>jm%g?x5LE>sMq9grNAG@aTHU=VH&!%m3%kgg9*(`#@<0NYL)I989Gd;I? ztoM7J7ky74+f?7o(~_$PBfE6TPKI~Z%qS~{feil_jmwYEKJ|ORVGTL^H#{nkl3Q<> z@y4${X32^yt#B^*an@poVdo(@4=F`p=z;RkB~GS*``tA^78!*BY(Jsm5{ z72W8d*qi+5fkxpY@1RqZRj(FNl-7@pg40-|P^w$^ zN&MSGngO-j7y6-N^6U;AR$?k5E_XCH$ff~09}c((2bUsN6Rw`{%6*7txY&R#WTHvAinItr|8 zGG6mHyiXvoY98%a*92CIr#6^(J>zVW;xQ|nul=HO--hUPG zTKuZYUzksRFroBdv}P^84Uj2$`rJlonaS&IcK`&t;1ID>Nc{u;6BGRFgeTbB0b7U< zAq2@|is1d(n5Ihu4X8S&#ms0OJru`ZEZJY8;SSmDU!~Z$d_w^q@d@j{{`J4Hvw!Se z{Z8-vN#^`3Llttgd+@|hvF*}7AsRnf$p065_V>g1tJwU1Q*597w`TJHW7+ zc=EeceAoGkzutq|MQN#95vOAfqTU6{cRRIA+_XffH|839c~Ivu3;iCB3VQ zC|(=>sKx!kykPt&w$Am|6l-vY*s7x}Qsi!MUYGEf;MHQgjJlb%5@npNsq*G(Fjisr zhmG$1e&rzj_w@Z6?!u2ZQ%K_;h};hgp!Tmkdt%3RU6M1(T_WlCSPV%49}hPl`AO>i zw}1jD^}>ypzwObg6}s$p@vC&3tdf$fW8O7g4T*DXl@=@^ruO)SOpif_>iuvoHibvG z_kBG0dQ~HHU}RLCsaOnMwL=5m53fqf*xuW~s+O@YI%OZX(9qQRU>nxxeQunl(<)8h z!JEqxS4Q)zv-{iDA6qarc&-<#7>|fX@&%4%FeInKl%^(c0=AiQwn-SB^EFe*;BqR1Xw6A5q*v}--?k)iqij=<6%wx6CJm2z~?UMyY?nk9NUWe^B zJ)=Hj+nD_Q3}x$wutHF6fCp}Wqv$lm8NL=VE_I07Nzk`NoCa=AXHy*)?ni}P1cGnp zftSQb6!aoHN+gD-*2~v7d4b>S=lva#I51pc<9GT!HnPC8cH_^`;Ggk$S<}FvyvMsg zl|EuPf6|%7%(%fp14CW4-@wtN)}L9I%AxA6P(%6hqba%qywaGpMxI`P^I0^On570f zL78_nQ3=f+jJZ3YH@4z;e@Fc56Bz35>Cq%-)Owb|lXnC|Y5DjlyNn7Y{C0ll>hm(` z_w6pv)}2-$J#AZyJlW~O7A-FfgA%3U4b^~^&_Io+q0ifR$f+SCeU+wD>aVK(1PHv* zsbyYsr}A?Pk->4#Z%7Jg>k~$=ligt7;tdDOT;VH+Q1j6<9?3Rbr2~i^EwlLk99nt$ z6yd~7m8Pe~C7GwD(>Fc5-k2J_s(vLi3)%-TJ!+!Jb2n43 zS{E&SE0aUmgG(7NgS0{=U1f)usr9UsV+*X-TPI22u(!CpoCpd{LjGF|Ch{ZbC%AO^ zLQBL_Q@fY?it&$a$!5JV(>w=3)Qhp;sHkA^D(cN@)(^?taLn9^x12CO3NEj zUPai|<{qS}g;dbi1HuOhQKEwT`J$7PdQkFd=;A(n6*u z)Q>zki_qRZLy8ayOe;#@VD*z5wbIJGIdcue>i$5c%H^PfuG7GDyUfR8N5^>{ojoz} z+PU?clY^R+=X{ZBt{sa43yztc?=VMQJ9!sK4Rn(;k)nJstd`T@?tK1yn}V|AA> z&+SlHm^0oVAgZFYcdti)`k@Oyfu$-uZ5nc$709;^#I~-A=J+5hfdz?+@v4v;v zhDY$#IOG+p2Cc4Iy&X1M%(_6Qny0=72IL07*PrDyMe>Z#T)8%oV18c zDRo9DOBkxqnPps?%QZB>SZ5;gG9*08Ij%5f%r!e!i>IKcU z*p!zgj$pP=kdJD=4U>Fy*5KJi8lSEvm+5@xlw)-0?kK)W)%8+4%&V(#k(=!ZPILCP zlQ~f!n;;{7Gd;2`L2!#W8xJG^5sZJGfXX4d9r$^+xJD0DPvm%~>e@oqf}5#Tthh z`&;^^RJsv#-sTN%I%40{8JFy=TC6UQ==wDdl^UPUFt1d(33^M&)td}3ess-Dna7e7 zD1o1>@>d@4b+{Ax91KgCt8xc19eMIoGF(b1Xrpj5zDZGETfd^zW+Aw^rI6PfTHIOo z*?dc>gdA|Ww2woJcu2?%*wg1vQ#p$rEG|9eZXh_dexO54L&TAUrIu**0Cy;aZNoo4GW8{`^g8E4^bhV!&L1r&(>%`Yi`$shpIV>u zdoePTT*Gr?jy7U10+k~0^@lrtrdllEn_B)*4FBZcLk1lKqs_QjY~ml<=^ei9r?+6h zGiVqFW3zkYk!FqGJ76r(cePyO`h}NVK~^z*O9NpVzKzlTLaH&hzT9lT%VnP(CQ)5) z(s(x!!GHcWDLq)3FLes0I-b79{nQPhsJz^7p|pRJxIV>y#8zMZ#R`EX=}G6#i!q(n zlXGw=ick7E%eztUbH1LJXJS8NL4tdd=8kes_h(-k(3=Z|zceXdOiTL2tdgQ524rsE5s$ch3-0#Sz-laVpeL?x%%ExTO|v z5{n^JOOv>G)aL61e47B~s?-VXQL?M`p}Xtu$x@czs!58tPd7^1*(L7c^xt|l<41`DI?bw|1}@dR`S(!`iT4I zL${t590ftD^apQi4^g9EjPJ_=eOMLmmt8rYO*t5o*{*|RVukP%6fP`=pdUtq<0Ljoa2IupVRUhYA<5l z?5Drokt40Pu)iznQ%R~dm}#G4Bu8ml!vN96g52xN7uSkiT3j`Ht{O!;3BrQ{!f2#{BiyP==^1;Fz(MYFK8N+yxE|2&s=TAGn9m-4bhemYdO~-s=dM3 zl<~nPsh2gv6D!iVPYL)fk8eLD4C`G2K(hik_J?CO9QgXOY*MLp=@$iQyu4C1DD5UM z>_LnW(Kfz_Ku{2G_Vh)YhzN(EfLLa;#R0Bc%mE#B?gjNT3u~Y{&1=`Eam+9EK=`Kr zbk5&V+4UfE6~J1__uI|$-AfKN0LSG#)K=gPi>serB&1c^Xi{xzAAdMloZwj?q`FpM zyx*3|ZXt=+v?HUp{I+N-Vi)#f`&|yQ1o6@`?|E`mDk3or8t*X8rA|6|Rkdi`9c4Ly zJ?`stcqoML{N9Utanza@;rF=6$^{a;lY}olN5Ssoeescayi0ZS?a5w|tzn~H1&J-H zDNLs8XH~w?6&cm(`|rmRVXP*|%Ssk|>%V&dR!?xS^>A_c^XOC{Fk$50%~5%vi{t3k z0wK6rOKE!<~*;wobs^NF+pOv_*j&0I_7RJ~bx15HBYeeEBJ;j2KnLEDrL1 z*5m$u*RS;wP+#N^Ct+WKG~nWk@b8`^%PNVcgoF5c1N*Lx%dh-EHavhhxO{$9tmP^1 z4bbHY8QW8jIvuy`MUU^T*O{4joyiXg>OS!5s3Ez{oq1K0CW00=NY2e{2K1;eX~EmH@L4>sR&37Gw|R#H#N zKPLkEQ*8JLgzT!5D4;HGEgf!Fm(SyU$?d9%x}E|W);i>(=j;_D6KB}he4E^Kx5~=d zoRrLh04ndjGZ|dX>8Y_+(8b_`n$8_!jdiN!c9&KrAy_2e1>5KWBVFw=_0r6_C@qKF zHNH*7%|w={__x3)i48|@61E@ae@dE-#dS}SjQl{!(vko1i%qw0K$PDu+A+Z=uYff(IjMnc{qyCVu~~ZAmK(meY7e>E$YHrY zwjCvJ*(HDs(AAHGYci38&iCMsl7}0ugoDHf&AJ@nuD1zqXH-;S&8l-*eEY)vYsl&* zfs)6)$+~@kYo(Fy{VuvNI|kFUPFTWn70ZjX=YMuw#lVQm0OFIPl~RhhPE5<4x!$pw z7~HQWDrC&uJQf+y$hlf|og|K-;Z5WC`o3DF?&!qzI9h%7sRPeFb#11%5qoN@=lrIx zMB2!*wFY#`Bn9eD{m_O7jLfi%q1)lzaz$rOUc9l$mI-^g_IwV0FZH=~1ZH)p23t^C z&qiC;`#+5&fHsE-lou6dCrtyZ2@?$`)v~MYlhf2I)YyuG+-x-5bb}U7xYoM?P|j$E(7<~m-Gmax|jSUKEmGg)t+F>se}(D0RiAL@pMs?+mKJs&r%1`eBn%lUcEBT;2< znp1X4($$KJkip$2W$uA@1+SFyKFWbFWF@JSWxgiGn%TKv*jg^XKYycFR;i`NNY^kn z7jCB%v83H`DZku$FR^dtXHkDsf`?r1rFMJ;RQ1>;)DL?aP(AozjNg zt*pTFRZqh()HDidx{(=s9Kk-rHSG^n$Fqnl^pQgY z11)UsQ1z*87jEr8*fQREbGU^(lwtHe#jxUR|LF;0`sv1(RB_Gvh1C*zyG_1~-;bq& z1*Z7@%@)fe5FLe9FW>3Msa!Tm7y}ujxM3fD&K)h{e=P%w6CB=D-&E@#pA-j(u-pKy z#VkeG*vH|mz?@!x^bP4N^INwamW>)7p4UGsh611NYMTtg> zwkxind{6+U>3g~Kpu*cd0bS$@0-MUxx%2}mAsq;>8u5)+#AHvoDgt52$pH2tVy-H) zC01VYM)As~xikLBs@KM>v24*a7O-x!O;IJMkJ$nGu>_7~f@@cL9i-=qPO*8eQ&)0_*+`5NZ^^)A*Qm>ZiFn58Nco-3m!o?!U?FX)HK z7B9BmA6yW~<$3mkkS!G85*iUN{e8#es&>a%>dDQwKVAQJoRR{gf&8D3*BS?2hVYRq zdUm_pPwjBKYziOmTW#F4nbdSUu!#8KmCM^_Di=H*o=Bp;@k4^1yRqwkR{S!lCp>8a z+PAO3m$l&V{R_kFe8s`*P4=~&`~TJxf6vP5%&+pK#VUfr11v~8P@kdNFbAWGzHwcK zf7HEgpASdJY4=pYSKd#w$k0L#>MNM z|KwgqIQ}9*{I{X;4v7mSCN`OpKzaS^NB&B3#B=;wtNt^%{5#XqyMl=)phsF7GqX?z zr1AYK#E(R~zTPqF`2D#D=t_qHhw0C0K*e_Ap*qF4@Xh~WkacVBe_39wXUUF~VnF8- z-pyD;s&{y#bCaUIIOQFP=1IU{4Ul+7|K)S``|^Od^-l1yB*I8 z5{=tK1Os0+u#^KVi6ZMHkSx(o?fr(RGLpe|2E0`FDc*_I922W_>>l>LpHEh z*Hh1L!CM&o!fZocDg4*Cbla<yd4co~~!W8S9nbemNhR$f?xcjv- zDBF|zs}x%wLBp(;4~zapY6C^%Az*L;5vcjO&9K7z-!i;seJd|=90xv@`sIZFjQ&y_w{c-xh@K~JLku(IQtYI>;}jTe8?nt!|b}&{ToNI;^&bv1a^+_Zo@Fb zS&s_rbmp7f^2efa#Hq>)SGDdaFi%h)ygs6P7iz;+CeBib(ms$boWWD)MP2wV2}Bmr z)_nPoG$XAaSssjFzg;nyQB18`iDF&Eod5Ar*LN6$X{^fd5j?dsShO$x;W_rn@K#~t z0Amvo?lIkNM$K((mAr8F{LRniJyR=tPRjGA9a&VY1aMBi#ehw4g7Y04%i?HWqwT;jgv7O4XWE4z!oz_bHi~Ws z!683CH!DB;A)VI_hZHJv@kpq~8gv|L-Kl`5zOC;B@&dS4h5-+z#mq=e=cucm&Ix`y z)&1(5cK9@Lzu2PCr0Y&+msY{%BT6m(krl&SOQBC7d`SgTIjZ&|@%#b0a`5aC zUfu1(aVq$|Wy`~<1J&p{}?Z6>g^vx`~PMXIlt-$hMhHPF06W%{Hc!`mmHz`Tpr zX<-iuTt;NsaYNKrOs=8z3IwPf8Rn7Gsym&KI2>Q}h*ttE8&}yk!4C`I=Z}mSOan@U z3e4tqDTHl-XWf*@(U_1G?3gORHO=N`9(g-a(h~T9F{dOWf6Fl*s7{^1FvnJ;8a+(`HV07^x7ru zV3!$`^-vPlHtoqN)_WhJBY6?4-*_t`jSa6Kzkj1o&^44uXwj5dPob3fVoFNoPM3;> z=WP`ZQ&bYT#D4&f_Z)gb_;Y92mpv$`llyd6R!f-B?DR`R_`&q(C~Jch_gLHYQXJn| z>KEPML{*(u)_uzD?@5R6{2*?RaOXZ3X53Te;b-xbi9;kL4I&Z=?D{{4rQb-TKPJKx z0-~`KYP{P}T7bgQ1J6H;C7bdmF{b3cP}uiO-T?kGZ5w{_=V;CQhj81d1>Px!XN(_QqcerKp3a0kzuuzy|Lu3eude>$7Cv-*GF-nqqPpviYlfBAye3^ zveLoTR*sVY_puP#@)3-z%ATDIoOb5aun?7u{$Ee}*TsnP5lX);&ZzEH{It9W0s)%F zSel~+ysD7(80?uHF7}@reDCwi3b!e(5H6;@Yh$HU`?m5+ppm4{wCF@;j|YKWvt0oL z)+a0X|FkyR|I7IIYcyFHPont>aW*uy{zuG)?h3?fU4i536r@d2LGjHIk?Vr9RDw&}B(jm$E$6q1}+o;GX4 z+(791T@2o*%P!R z2iUw8@97MsUd6WsN@68;n(wspW+UX!7HHH4*Hwjk?YN{5VAwsAKLzE#zWU`RxVsxIwX*>%M6-teBGgKL^Y^Nd{DTCW8QwHd_S9ifc4 zP6$|NPvD^uEsi$VcTK;RHzA3=$^&|9#q|R_1LG6Gv-@v%g-Jf-_}eUTblr1j+JcJb z;wHU}w#{yL`MgZMI$R;(S$Bs^ZoP`gA}NDN0;M;$OCfTeE?9Wjna{5hpH`A`#8+gq z;_hyC!aQJROk*^fTJ^;hpXmv+IqCw}fcN+PNo;dDK{#zJ$uDMLkFI69uYmkI#P|H6 zuy+A4Stm5*CY^q`Hx|O3-A$CWqrrKy#S4YHX9tnyd`HZ{h7>=m54rAGVM5@Vp|0xZ z&O_DS{t6L~l@PEe#pr3QN7~5x`q5PBRhgWg1=72k2Q@d*Q2k0>uUp_)l%XUfjRQ1E z!lq4Eul2KR$zu~MAB26PSH%nl3XCy2Rd6js`PRUgH=)^Q`+q+mD}LlQy#eoW&ZQ~O zmMS~DEna*&B}~Aj^Xi0tj_r5=0px(5zAxip%XBOY9Yr{yAK^c{g?ip#b<3_(1uTI= zYoQ4@+COwieh=uwfv02NEmZb>(l@>PQ1qtI?6sS9oim+*4!Ch`?G(txoR(zm1F+Av zZtud2aRo-vz~W6To%orydM*4u5AHoe*?Z3}t0z)wh_>^{odKxf%#N?}F5&;0f0kMG z?Sr`)yHSq=;uh;nLPKvauLx0Tu7O=HOrE&SU0ek8ms4cRY$Yj|9HKur1qw^n1ed@3 zA|0An;ge(nUXZ)4)z6Ss(;lq}_u}y}gr002ETu}+1m{6cJMxUa4W%?y%tf7zo%IP0|6 zd&}?nh!#eNtq20oRcA#Ik1}%@sNk~H`gODJvYknc{jb3!h5>B=#>t(}^7#s@YjwWQ z7R6qu=zGLmw8XiRBMeApDdRAgC2tkdyOt)j!g#>??%}k#N%`CsRo+gYmK(OAuN+Nk*q&8_~PIu%Pkf|md*f26~-y$YQ@Bk21mF$d#CMit= z5C)NXEgtDbCGJ)8!$(NjSz%CpRs;m(k?Z*0jxUzJiQF}n@Wn*}60x;*uuc-Bh2FMT z;8LJ}kcAzcpJu-^_vw?!?B+5g6?=cVgq`6Q9IPd$nbU0PZHXDQ3|N+~wq<0l%?q$} z6I~^Dromn2f6VqLprV5pfuUkq@Yv|b@L`uJ?D%@$rzkqLJ}AtCYhZJhcrEoNw;Ec; zTNr5Qm+A5Yf%0g#%I97b`P-M^bjji+OtYajrSmmzqJ#UIx-8GhDxs;)var>D z1hNaU%{jL6oHjcR`LS8vj7rVsk-Czbk)ijEucEh?RH#S8E?MwDaGSJLuh(@G zSMTQ_ZmL((-$90phN%Yv)i7vdKdW&oQ)~o7m`3PVke;YbD}do0NwJ#)qgw(qbYeovq}s3p%9P?o~eb7RDC{|HvuivvHPm3P?_A!KH*=0ir~tLWDb)N9J#AqcViL!MRI!z zW7qHhgUp^#5?--fw?*J)cah_j&wM7@E z;}IDyfyM)<^@6pQ5=h@nkhhBftn3HggEnEiXKtoHlI~;umGOwQao%a$zR#Cg@X=;i zo=BSPZB23mMxb63tw1rQZeh4L*n}(sg~qmO#GkHZ-`fcccYXY?1w+jHouJ_!P|`}) zW#bbilS?48A_8c&epIcnN`E-Jh#o03D5IN2xl(TPfINMz{{}f^1{g4Ck*nKfb#m(7 zgCBOS?Qyy4zct`BLvE@lVGmMG#)%MYL-U&6w~%zK z2&%)R=oVDniWnWJ<^;8FS3hK-uTO8(ACT6HLnZi8W39^wdmCEf5=`5F&gnnLEMP5h z44Csj+zibN+H91Xn_R`~-L;{$C~V)RGr{{P+t)P}Zf+e-mG_UcG{&i+n4x|q0qMH;?Uepz7y4Bg{Sgj3`LhVI)IIyRBw-TwXwo~_VYr-8fe{}?zy(+uHD0of@<*i#&??ypcca|Jbsj~ zdJycSiUJv@s1Vq89SI#A7dS6N#do0klw?6FgOeN8{u{Af`H>7yhUQu*;aV!@6ty)t zc~;wcyL}oaB^l~poXx{n;T~R!x>7xc?STXqzVI61#tP^wtO#8}eu$_GNU2y-{}#qu z&DcLU)SHgzEAQ|OBpEA~LuXlGgm_s=Np&e_OU=-rY1)fAe`%N}DJUB?*0ZIX?-x>S zTrQsZBC7)y9qUZDEaz78zLP9(EE{oB9P6beGK2vjAi8PMBd=LT`Ai;kHT^HrXK^&XVn7h8v1y&RJgM};~h$yV0qd(B#u4N1?}K&nqY zDvqK+kItDUvv-43oMff?Xz{szZEmLPJ*zX&9BUIq34e%k%Qeu{ET zW4M~Qar#pZY9Bpw?!)%d6wH7@B9PIiPm?mPAjY(4+M5?CLSv3i^3bfvDNOFRf=6`_ z?R*i=Y}AkwhVTu_ph7s#o=xx1(e7t( zGQ?B2r=(JS6V`{TT>Wx&4<(+~AlP|Rv}dQ|pHEIX25n0_O%fS;Y9#ZO`@;htlR)V& z>%5KXqvM7od$8v~U=5ojzhMf~m8q0@a}83Sx%xTDz=#9&tEZ{+HJfRa{$d(;JQlNF z81HLLj@08Z+HoPyscnr*ZG&LhyL5DI}IWDw%c5{NA|3V}S4?6NK zT;UEE;=4DMV4WB!qRTw(qp=tMKah2{Mr4v*g2am6X zk5fbrnGX60!RCnq=BhmfVo5kd4NW3Q z18TQ`jGh4$&moyaXC<6yB7-N0YUn4DteL?hT6!B=?<>cb^Yg(`DmjDVTGt z9975J+sF6{)0?>yx685JeG$Z%gVZ#5VAQb7=5bhUMVj-?Ek3`^QTH`+?4+gZ!d^sG zn%Dd`2kcc7!&@-NLRG7s1|J_wDPDaW?3lMa9F*ft#J2~*6b3D7o^lx3MUlmE+3ZmN zR7<~2{^9p2{Re4S=H7OZM_DpeeN}I-F*HXZBg%-ahMZZto{q&G+*bBAVjGU}3e-50 zub>94CWj38(K-C$KhDt2n5M|kaaxmy#dsZ|w2T_AxduvXQMISJFa-PMwrhm*f4Gx! zk?;Um{F!9L-6KtiUMq(cDXH)e1$pZoxb$@%oFdt6-k`6Aw6#~BJn(!iQ6xyQ+_mj+ zK5Zp_Hd<;_g-^N0c|6B6Q&DlGA8G3Yyvs z=&?0(tMF4gw%fPkw|&CKHxS{wbv+*v_Ru$v_6P`>;o=He#sG4n>MaM zv+%^Uqw)s}Z2gDwR>mviw);;Iy6KxU1D!MCwLdBuEapbXV2tn4-NZ*UP{BSdCW!Jb z$oY!|b@YPod}y8of*~AHha^z%tujqjiHxtG^9_)pCqWspZS@I$@p9X9e!|4(Yjx1b zR=hrZ6zn-k<*Q_vb8CnihIs=2aZL!h_@>2P)No^IM1eU{ydRF)Ub%BcG6*;}aJh5u znmwp^?37Ozsh$WEC689k%#LhDbcH$EjcnsrWWp0h9w01~7N{wF$Up~*$nRCopyX{z<*5agWm55p9m^ki=RXH!*JOQZ`- zJu7cpjO#QRwq*;=xmL_*cUt3fj9m^I%R#}Y5BZ<9yFWLZgRPi{$a${`UqRM01iZ6o zkBQ~xA@6veet^q=Iz&u?Pz5EM-RG&5^2EeR=!T&(cWdpwMGh@s{tOxonx5kqN)tB0^26mt$vCq` zaE|m!#Po_e$ck{OC;+49Fj8Qt;O~ZEt8#lx_l~`~8D?#hFM>1$0*JNPo=R=TR-?7Y zDg>lL4)rd8P(J`wR7?@Ec_OcFINt1{CC^ogP(gLj@SFl~`7<}Sx8PgYS+BeI#Yz)6 z%9wj>(Tq2&l61&+;FE3oDk9Ud95(-Di!dg!BJqjhY<7V}``T4MyYNjOXM`OZjRPb6 zx96X)i3-n*oturf3h)6gVrzk^&%UB)Ml8O+8<$(pSPf^^dtNwVJ6q2VjjC9N(v(Ih9sVFl3q>#!9&rB>Y$Y7}#t72lWTK(qZ!cIU zMphaLit5G>ab1Hul3+=ea+DiI7N30sVk-Cs)eR-J!DJ)k2d*G$Wm(liY1vv5B^SHD z6u5iYW1{53t3>?|g^qyXf!~qs6dkg=NsZ4r9;^bt5nbshNXERN;BFGN)Vla`}5Mp_>A8w`QVkh&h^ z1Py6xgNW#dlydfv**FI_eTO-qL2pD^CKAH)x?}T9!E|-XeZPh53)Q}PHv?T*xCT*6 zu(ng$b=a-y#sLvG-wsJ+N9n>mW@Mni88>zpp0c(d;ckn_!fopn8P!4R)7HnjS@Q5Kh-?;*4+~*BS>uwHpW_1J%OwY&iw=RqJ+sNuJ)?wbmPCq7L02(p>v8#3UE~G3c;h4%3{M_CdhI*Sc4lLfOcez5A&wKINmS;gnG3f#_@Xk295OT#a z7*#MGK$xYW^-&|!q-n3#+V~!9V1B@lQ~K!S5MYrxwRcTzvu=Qw+NPhMT7zAo^SrD0 zoU@1Gw~p|hh3pSnk6SBnmDd>G-0xYmxxQ9~OI2AEz4w0Sz4zGJ1rWjKn#i7S0=%6yGyc>R?UxNh)-{^rIx=#<>JQWphr zH%AnLTq*EEUxW-v_E8vX&uX_3XrdnK{E!u)G&q5(+}Li=J=3Ab3S)NSTw^GGu5cnq zpm_!-$(mFN^wZe96;R>M=H~m2|F!w&|6$xFoFA#h4N{JGaYm8~H^k)a4(2oL=oeDA zXDer?7_0n#V<-CD${{4&9RZ&~Ynx}q^v;KV_plKjM0K)7Z`iO%U*0mruAxLsqBMbe z_5Tre9#BnnOT$)Cuz?kjZbJm5NhcJMrgR8M2L)+?fRxaSii&iVUP333(4>T3R7#{H z1Of>~i4X_`gwUJ+0pEMS_r2f!*3V)sMZ-D!oINvp_B^v^8YR5a>Jq|;!6vGc`xBho zEip}68G$i%P3{^A@ksk1mC1ss%C6b%640Eag4{iu;cBr_PScEc8%7QG(rDEikscy_lbIdD~~@mGX}K_ArLTW*4++3_is|b!K zBFV4*@{LI~C)b*gAph?S+h6Vm6&FcW+vPXx4~({~p4fs9nBoU^zbP9+u0Rk2idr&ebSd+4QmIO~t>XfM2A+C)1ry456$l?{b zei|k$nWz+d%PT8kIP+4Q%c7h1Jk|n7nJqUt0{2-3bHWp#W2%$C6@>zAY&ZhfhcOP$ z3mcUWOMV6@1TL^~tTu9uX-2uXE$=uI(=pR~O-bZZ%^np^z^5rs+CHjXvA;7H02mW* ztkXNL;030-H-wcYoq+`ZbKhJ;gS04S3Odjbh@ripHTegf>70dm?+z<+t4bcSG^V^n zlx>rCwI$=4TQNhcWlM`WbX+^9!~>L@Z~2F;%w=GLwSIpl=1=8R?(;NfX6#Q@>%Uzb zn+rp#7wl=3M_f$v&JL5G+_9-!^iQ3WTd7G7T50f0a9w$X*vFRLU28trRvs}n|6Anl zpPojeJC*sZOi7*ws5B4C-}FGiWQCg-A;0n4OrSZ(Z@q$$wqc9LS>}IBmHY-oP4X`~ zRa#KL(XXZw)t@~TS>q3oKPM6&lR?4X(=fU7)1NQE3iCW(Ya4a5nrX|Hlz9h(u4;j zIyGr~fGb$LM}Mq*!Ajx&r2l4(CY2OYkL-0CY;K5=7z^NsP7k3>fhDI~-n0vMM`R5v z+g>q>lgdNZvgWZ}OA+#Hv;%iu5W4}`xSFkakVX4Ly_p-Dqc<)H@oWU_} z0+P7nFuuaQzvkVLA-@j~;yu5=r9(GY0c%GG?_CX?3vE`POpQp|4v6Ll#~(-x1yGeL znhj{4(?rh(WT)D8HEdC7#T1Z=TB^OHJpr@3l(|m`?%z&rQr2i~;z8`=T$|N!yQxk4 z(Gb%zVtpm~hP71$(wRnK3+2ZsoNuyXDYDc<){Zi7|I1$X2zpU6~?EQb7jgoh}{;QKflMw6g44J@lK`v85y$L zeX?_<$6*!LjoWwkmRmDsvBs;$ zzP<}8e!H!M*R^J3(k}IViVgOAlOA9h*diJI2TVr%-=3D3$eK{_wYn`)&*_<{)%Bi? zya*Zvbu0fTFn&3!Mv-@%kIacnSuP|-#P4tS?b`!>c+dLJ4?$Ys`{56-oSpfDF8*5n z^Nt?u0B(a9I{Xp^5|U0wG;=uacyCJvML~vkW@(lR5$75<#trnAwN2MY*=Bu}9s?-? zF8_i=*b|L(e=hX)OxY!Hsd?@F-&6%=rPv1t86jubFdEURufKQp0k{09>E*X63=q{v zb@_#&j>z{sI(`1{@%NU<|uI=|xG{K&0ZqdiMR;|703GHx5HKd^vp|5VW6k7_I1xEg&=GKWOHEyw!vI>^?bmIe>G5L4$?zbB%_h+X436-C4~Q)*N<4yU^K5C zIY^#)Z6eRFFZW+_TuP3ej;h^a4W29ovO`w6_fpgkUYV`rL28W0o+|3_QT{XO2S~!q z5@9~L^0Fi_=4qvWR!cifoj!a$hlx4Cz>WX)6+zdEy?7PIo43*VcJy+d-J1N7tNgFq z%@1zcHVJ$x?%Y3`oZi!n0tJH}ut}aB$d$jtjEJc`EaGtN$kUwuq%*((K5nx8N5;$Z zLLE&wJhz2F<}IsCCnr1t_W(z{5k^wlF$}t0;ShD~uzt4tDRIxJ{>nOKWChU8#Vf4t zk)amQhG#9_{Gc{{yumlAdyZQ|N^(+r%O!?!51yHP_8UoCbjk**1zlZaW8=(Sq(^@) z7aPn8tQ7eSEkK}9hFH0~Ii<&02+gk{7l#aZ2Dpb;`&4xgD|;j{xw)6|vc#{lI7)a1&Y{X=#74to+&F878Qy<+7Dn=BL^RJLp_rCL~@3?-lTlZwaf0 zLGVTQZ^PhisnfMDALZFRk-GXd8Ys<0VZwv%@&=^lR>fx*X-vuDJfci=hP+(Gg_m&7 zteLUQZ9f(O=^E01U8}xsuA51FH9BCQ%7)C&9&ijOHU`Yzzx7&I{vR8fXFw%wF(sb* zlmZu+95)|7(3V~Fv(bqBs1mHJ5DDqv!@E8GvgK#CMJCYG?cu(W0ggUC@sR$F)NQM! zdU2%XG}}d~9P;Pu+1$TW-y+`^LX_s>g-xpKk|n(8^;h1@;~Sh$LFIGJgn?>8j^hIw zEtNJV0?x4jjl@q(x#0Ka5 zQmj#U+%NUva4+s{^*2bUFW2;DmF*EG`ov6A&1>|S&Hifh9#Lp(C zux3q&YZSPBy7r)RD0_wv+_nlFG81q*S8NbX3-|L&uu>Df^D1|JihY;=CkH&OxDSOMPDn};A4ojtooT{Q_G3h7Yw^^JoO*is#d1)CuEuJE~e712pHpp+joh__s|8R|D{46!& zzA$~IyUe)#DMyBg8(_1iPyDTbxDh-FU;pJIt;tExlkt(}PaK;bC0H4maW7U+7V%rT z5e};GZSz0U;mYLzd2bJ!>oA7hf{gmU(~ec=GCT*Aw(YtQtmTZA1aAenSVK1J^Q4=v zZ@7k3R+Yow*sYa?bo`KeQC0OzQrk#uFd7uCK=t84!*zAXo=2aKggWX32llG_=8#(Yz7i5A6=sl8oRk}sC zNn?g1nM`z4WQj4|@kNu%z101#FKhzEJ%HkK!%okYj@dtzOJV`q zjA(@Ap*Y1sq3C{~wCY0v{>XT^`5OyNWr4I3&(1K=z*z%^Hg`G4flH32n5ZyLg!e@N zC5KYxbGjzng#|v93*#F#e>w&U4Zqmy!One?$JZEau9(>P!mI1z!I3CE7t&;4##&A$BL_qm8%_Z?M-F5C*i zFJU_AbvJvJ{;$<;`ShHgnU7IoOm{uT{p>iJ*ZP8Iivt&2xA0?C=_Z&vPiH>Hzs$E^ zUuLJcGY}rwToc6=+Yh^uS0X3ynEiy(9_V~BtouIVU@k`R>YoQEdSe@tTO{mlo`~Y0 zcmxe5akZ?rQH)eTn0u6gViz65Gg#I!svpXOjF6@+Gi1G9nge zB5EZt7n?nYe3;UddyY8?kaefQDSYKl%5{~F`A2%CzthJSa_zoM_k>HBO+RZ)lmCvR z0a;3?aZDT8``7FuS=3KhayvK7;0*1Xnh^0HRLDF>)Zu^~`Z?H_YjnS3s30-!ExA&% z!qwzzyqSD{^%xY;}r<2!*MR%lhVyzw8DUoA+j$Oy{=cQUC z8m}7~W4*3L8AYqQm=yfnGp{<4a#=~#C4aifb;6Coj7he_d5~ZKwF;EEv%zTJJ+ght z2H1NF{UavC>aQ>6<(DmGP0o9mQd6+OoOTLdjZCl0z=kp*J?tI2w-#-VJdXgL&P;M* zwp2Y3d&eeV&)3t!#L~$Ej^yET>sCraX^wWu*He4y_0*I z$e48}t}{N%W5Uml%dGtiVnVVx4C0!11ma5S04AXdnp^g6PNuiUa8iCP(&(ifVWwe4 ztPz-$s>s)xjjlnLh9>@KS_dP-q)M9YOsYvWnUJ5pd>VN8B7SWpK(vS-JL2;v5?*To z^OU~sl^$sn4P3|hj`K|2kk_30W@^E@1SuZzp5PG6uhS@SCN;YFvMdGAQn&Q=m^)@d z@`ud?{_Q{>9v>+=Hp2&?!~Cj7mWlFvFKz36RnbP*_g~8n~^Bd^{Zw$#ZK&7K# zceL2^H^$q6e}hYEsIaq{F=jzvmN=8io(+@ijp_z{1LtXo!Gs^iq&hu}xY|T8{?%OtmrSL1 zH4%onNJmWw=9Ya=hNgB&>W7&1*&Xc6?2W;lM0jgRP>ncD-k5)?wNjF?|Dm< z+)9)2Dprm+)6S_r|3SZbG2z0E(Zt78)e3y7=X27oPT6SI_txDK}8w=E$Y(+bae zL8&~@Ji*5xHuSU@S*r1ReBbi0yyfGT&V!ugvww4Q4vgY=zRd4Qg*@{V#)2&9tFo&p z(E7)>fbI(f$+5`?=<45TUBjXql6n+qZr=51k5Pz?q8P#Jvu4Rn!<`?lIevuTcOECm z(_5qE-#d1atKNHYPe~;fOZ*Z3pX&PPrEQ4=q9o5ybT7~;sOpZ-N)Q6tE0KzM#C8U- zbt-@sVJEcb8S}q%+h8R1EzAy&e57Ap4Ee3#AI!?#Wti^RvOA03jR}4;q#$3qq2|A3 zVQD&EsLgVVz+6l=j*+nh*CLU%PYj zodF63hC$@Tbxf$T_Vm(*hIWtaXUKB;@6Px(YgdB@09Jj&m{sKb{Ce2u>0^;JN+0F;WPJ&ruA*NVC$~2 zDn8bKRY7$0G3mL1OpNc4_!}CXX)l2^km~C$V4w=i$UL?M(-WDBL3Zw+dygVLIjJb8 zvvld56jLehxYMNpQ3gL$IFPiSi2J~}{`EZ+asJ@vMq1AaVZ%4MFYl`%KVz?@(e&!N zNZs+wC5y0lSt{0eVBHvQ`GO+Z7V7Rly#nzS>G;)q)c&?)?r9FBUw4<&Deq{R-p{$A zT~`OaLM)8lo>l7dyYCX}&LGuDzPsp|dwRDa;Tfr*)I+y}@MJggt8irzX4>m0IP@8V zEX~;51IA5X0XOg51RqZL!ApxmIe6;0{%ec|LidwSE1q9v?e}fLe$Y1Hk~%`al5!2C z5t62)_k#gZ67BK5gV5QC(_G`WcmYf(P5;$WmSp`6iyK4Vu|u9A8!5=9r~J=CEXGtvfA!qBFS+JGioRkAK!Is!;){HW;eD?pS|10gk+YuY zb>s`sy%5=t2iNqn2w#vD@BNGj?fNvh&i5IfqsYn1Akk7cBWzZ83q{ESX$6jRjru~; zLbT2uT!^;5}aHg-&A z#CLKa5{kkg^`EfZ966zGouzv>rf-$z?+!%8S#4RxP5L%@THcm=Du87NWWHP#WsxY= zR|W|yfJ0rSepNO?aswfW9*-gZdesg?Ki;8rJ-*M)kMZ)Q)$8Y_%JkD`dsQ|5_$2zZ zPjfimOPUUm-s@3m#LQrFMw~9asTZF8#a5E99!WEP6=F|dV~`DLfc#X4(|~nI(s-v+ zbm@wgTdYW0JrH5ys^;sfCn1`7gDj0F0O=Tt_~q>mC|W_u7p$`ce~eNlASRc!cLO^n zQ+M}FkUuvn_sc9{v7C=))HSCTeZ--EG;tEK}$17W%`ARAGmsNg<6>UsSA##bE{OR#$Lcn{Tg9DMm3%udlAz4k@F%;P{P`)F~O^3qG8IVK3{>E z39c^{LA@RZ6wln1q;-Bkckqj!6sITHwR$uM{q%8mV_uRSDk<=={*@+-{27)vOuptW z%))CdvLuqM+K{#yUrZSR7WKmgY}LoFQ^$T_4gaOiin@Wo+c03FJ2v*D4FhbXZ=Vac zO6PuHySzMu@mrKxdr31`&Y6**h&l_d{%wCv(_+h`Q>$60_l&huO{%GxjN{X9cplJ0 zsLr>!#mn>?(Sr$tj^rO0l3UBQ=|>o(t3$YT`9#j>q89|hmRFEYWYE@lP(RPe+ITyf zlKg?_A!ofabrM=ns$ICeL@hSsfVxa5Lq7;=xg$AQH|W)ZzvCn=nT#Gg(3jw}J4+E}<7 z*_o0R#$l0oV;;Pu^G$bBsyJ1qUXj|eCk7nx)7ncT#oj%F2I)ad)96zMV@QowH$V@E zs&M!MZF^Kngp96^dLXnsgO+(%qdg*^$*MsCF4m9-VE|mlveLnYlUB{Bn5s8Otp-au zYTfz`qZdvG76(#xQLi)xCm*(O2Mt%!HDrcmcJ>ZXL0=32y=pfQtIMyxdayVF-zerG zivyE&+=8XH1zXNhz>o(E+OWQ+NeSTpMy8wdoD0@zRFW~ zr;P#9Bx}^r7h}Q@u^$N%B;qR)fmeaanAtzSO8M|Y@g`Q2%Y;2@A zwPMd&Oz?s%rXq-u6F89J?1S+uSyc#a)=?~)1^0}uz`fq9_&py@OHhgk%r4wd>TH@Q z>>XfWLo^#Ho|%4|ZW7sCeb}K8kXmElYt=UYeu?s;I*q*~A`X$N>fI_qmn!>cYI|E+ zb{hW*d8R?6G@j675o;ZgI4svYJ(*m0pUA<16=^7t(W+&_1vq-D;HHd!Bsa3K z{=BDewef4Eip&XTE>+t(LccLb>f3qb<%kKS6u037L13WXpwf6ROuJXDAfr?dTb!7G zn|sE#y7p3BjLtyEOR4s`tBmIC*=?R520*WgDW-l7?l%PMRkiXVrnH{y&r`GwLs0hq zZElTV_f(p`o(s$7txgqlcns0~H-ZrXnTnvn+D(L3T{G2Q29A%!tQKsT_DcwBxdk!I zP;aCwky=mEpESaiSY|*+_wb4|XV?=;2449n_^I;DmIv*n`ro?U3C|i8FugMC)!RpM zf^uZmI!8*}Ivqp6%PE?<%Zpm9_?V3bntB9AoBH##`sdDgoacj=nl)JE^zIBPU5dCs zN-^EOahcRR@RMEZ8J%$71u^faZ`)yh3}n$sMS*}Qo>MZ$7fX}3(!z1hbGH@M?m8@H z?dt{ZP4x|aC%-s*-_V{cwpL%#oaYfK@iYm~YncO+%38xPVHSd?9JV^ENjZT_X#8PyQK zV$sa6gdJR$EYyWj!#;`YOKyV-kRBhR8Ezp9ks-8+t4%CJat?LC(ipIioE_jEI=n3{ zwU9G6dy9LDV4Wd_X*+5$-KzrtCb^@KTDg0sBc|n4t0Qe$9_Og5vZKKNDMiuNY6d^eL_N2 zL|^>vvPRM4(&A-kKXZK!qJtcc)%ktrd-4*8(p%WJqj|M7!Zh znDc;#31aVISK+OyR`d@@A88_MPJc3J5M&SMI^ z7>u5&MM^B@*7VMxk_})IXqj^5724to6fWY&$X zD+sV5Jk=`oYdbAeWxG|{kYwlQcrRVyx@Eqnr$LkJjY6}yPLwuoaV}6s-aO}Zye&t# zd*Uo-Tf!PqW!Q1!aVW!2nAgCkDOQdJm8ZWZ#}qU|-J4Wt2lyh##*#Ay_ky%siUz}j zns3F*dPmLNxL_Kwq#F>$r6x3&K@Id&teMb2gad3*NdH5JY_0pjCi%%iMg7BmWLWLNm4**?d^h8JYmWg zrX?_-?VS37KweJ8hdKz>Y5Px!O5ZH0pI#AD5v{Mhd&e@PR|MbD=BUm|(Av|`sH~8< z9W!q^lD}6I6i93D2&z(XV^AzS;+?cD6N+fCXuoi<3lT>Q%tcNdtf6F;O^`I8DX$Kl zSjA}uaP66)#RqHDi~95Kf!F|&+3m><|2Vb){^>+{f%Rp9Ah{XPoqk;n5G=ApU$*YH z>j?tBIdfPQ_QgO%2dkar7njY!pyrcdPV@}lPLUchyF@S->iAw3==0FIROTqcoW_v$ zEnKXwmpTR61J~+cLsKh7#P5fUH=>kuW9nPL@}c#X-yf@%W^`WT^M0qUfX{`=8|nNo zx5a5jsTG)+<9?^)x=o%S5@5GixzbH1nwQ%?6<%|n%`@~pV z)?wVukVk=9EoMO4Q)tuty9 z{0ci%qbgATuxp+R0b4viw4@m0v&XW<`PS*31ya-Cb=?ZnXS>L6)z<05=u3zcXkbvu zIapF>jL^J=ygeN{tS>jfd@uQ@N3sp>XW454V=A;s!k0nSD}h!zH2Vt`?RK~Y|F>_v zcJ1(IdOq(YQ|t@!V;s|%II5aTmlL=2J5Z)^)2>r%QhCdudsGOd1-1Vv5JZ?3@HFG5 zV6k_V*&6yvMGc)nPf#Ph97tibjWc+$3;0VsNE_a3z##0KA$oN1)kH&IYh$$*FEU~}1a-ivM2Xg_ zMZsw&qKiIbCOL4i*Pu-3!rTRnn^6(Ummb_ywfO#IkEWV~sj#S=ntuT2gwO-B&2>6d z!gxV|z|?XYw9yV?K9O$JcS&#~442f$gTYBlfwQ=A4f4npIea=>7H1G=>1w~SSk}vt z^`pL8Z)&4B@cmCvz|?`p;?NAFF*vgE0!}_CpbT!3|1c;x74%aeK6U51=O+)T@3NNp z@n4Tve8`wPnxepDBP+Ph1tJ;Qhz7tpY%05UPRs`c7AsX|JB3|BxI@2S-7RcuUtfEJ)FG}jUB-c}E^-pJ#3lpkBCRP-V1FA9tz|+{H|r99@J${| z;{pqJ$!id#0WUn-V*0#T{%^HY0cjH@o;?PmPguWabtKCCSO5On;Z9VS@ikJdjv7Z} zknbTT%l?6Lby78X#>vrs>RO-lX@)05>r9hg8&fAKZ=nqLbzlxsH8&v~>-2(cycHtI zVOfga6LQ$uv;K~L88L)B6NXBBt8XjX{?QxHUsrg315+sg;mI6l$zzbW6Va~4o{n09 zsRnNB@FMY zDWA`;Io)gEokSi_PRVt4{vgw~p7)I#RzKOuA){VMSdrLJep-+whtEt};IlQbhe(L1 zGzQG$doP$qs`3WjE~x;^rY}l~kLQ6G9@D;he-zN^p$5kNISJVvJ7eGe3=4ID6jM%($8+jVU*&pR)27GOoF4c6~}a%O8UaEl>$?sYBpY8r8l< z*~*+JqHe_XwP9+$7);oIRet(_z%pupwz5Z!M9+~V8k%@Onz3cD@KcExH*ZphEIqmJ zTxdtwo(lfK+vO85jy)&3xVPH6%)hrt!iMa`SI7Wa8*jwSs&rd`Jn4xS+-ob18-v<- z5u-8PN-}PeuZX+6BXtrmtnsDqA?MK*6nZ+u^x+0y*XH!(4q(aFcmgDqfIt64r3_S_ zkgs_saWa8I(=Em6GU^iG$ZTy2Wk4rr<&xj_T>e}hb8y}ly`%M#d{+%Pa_yYcY0XxR zA=)loX3bTrgI7Zx}RhPJwb?wyM@{ag|9b1+V=vXrw+D8Bz2#w1bh2V?`kh+m?pmESH z`Z9;+vuZmKOsCD0j{Gt}uI3E&-Y~m6gc)WBO_S-F|6E-GH_wY4ah1^|^iW;rvO3n1 z7*x*SdM%1b6iqnks(OabH=PRWpcI_0IPR7Mm&pfs9zrx;dLpdf7Uz$}j%m?En7L>8 z_ZSSmH+>vow_{#f=CimW)oAr5W2)kdVv=YmZvN+EL-zXbLBXvghncI2bFFcwNo~gS zpVFk%;$}7_KFfxJ?nlTNTELNa*{8p2dn0bO`T9`wNxK}L$lw&~1_W<&qMx}}QKv5U zBY4+mR4XNMzJ|QTp;UR`E`!O+VyA@HemxDDG4CrzPT$pvAkBDYp4M@R z)(fR>{Xhe2hp?!|o}Ffc>)x&pJ0g5bq_ym^Y3ZwNP-ig|)HRc5D=JJaX=DhAQBsgw#GTQ*9yHo!|mln|g2SpElTV%+C z*L@#@u`=V{i=(d<%b}IZ_CoH%qX(~LbRp&1Pt1jAsk?pUuhNlv;4=LTW;Eododt>y z14DE;h>;z-arGv?lMEcpJ@Qodv%Ci#mFpCz z%L`qmAAJIW5QA>c>>z7B(z5B;D(jmS&4}#pHU=XnGA@z`I&JFFqPZ8@JTpP2)A#}m zp^|OV$SKzyDg%ZUo8x$FWiRD5wpz~B{Ay`|;X#qoYkGES4HBTZ59rex(2X0(#`$|T zIOCE?E>}GR^H{J`%?^0$Xxr5MT~EQtrEiu2p@1oZr9J9A$}#KVw^aR==eAp=cKz;n zwiC+-b&??12wsX{Yjr|ZN8R}Ean3{Tp&Np_tqJqalraW?hiw2XC|XcL66|cR@jBga zY_#OqnBD>V$UI~p@a#@X-S=M8{A+>s*;d8HqZ0ScLSk9z>0i4Z74S&qa3nd5nwX@gY7S>Lwb?;KlGDkD63s!+#+qIW^x{J<3SgGu;kh z@4&xU)+F1f zdeb#l3)4sQxd|`+f+r7NcWDp&f8a^@A9&(heZW_86&Gm_BCfhNe5~VxX8&?7haw=X z2ge)=T+@UNy^=WJc(y#r5;ctJ_((nd1)dXqNIu3M;~1~E=ygRreB;d^rBr*(a8`H7 z#?n&b4`7iqr%kTfyk2ZLbfxEbPbq&U#3}Bj_=l>=45AdiXNBTcWJt6DaI_0LH8Z}}42`~{ZHkz8IfEHD0y$KhS*qAcui5PxTM?>G=g4}b{GAzWbq z;L3uOfLn+~;*{l$ArsLd_XAAFeSrIvT0Ywuv40j_py=NVw=V{ZXNym>moot&W2lhHjiC~a zG?Fn|8QWVWc|b_S2jtOR(!%J*0<%i;AK14FTfEHJYk?fl;+Q=|8PC46{ItI{53W!9 z13C)NgciL{q0zA-Y3uzcXNw=lzHs^D008_$+&!=N1u~z?PC>t->AQM>@U@dOmjzNREF_+kOgcn?IK|_#Of&)i#)uRr4445v^xMdam!Pp~=y%bX}>x zJUxzJzj6RF4nA>=h<*i94f!XucuW@c8Se9qMgbDWIT*zKqgRi>Aysg8-d_1lmI`Mg z;e=)&ZQqu3pB{SfeW%TWmxT==$~fsG(-dKsk4|R}_ghiO|3&kT9HEZ{T>f{a(5E~| z3h$D*K2$+IhOGgZn(@R+9gcQ!_P4aYJ@4STka|z3!5>IqfRX<7lj6RpF`UmpWM#M) z(qQ*hTOUn9OP~gmQS;dh*jTa@U3!B>uTpH`CvkQFsWK{gCE$Cn6`+8iKlOkFvLdJN z{r8C6A2}Q<{R4kL&U+k)!{Qmb-vkuK*VJ7)N^bmyEX5eMZ&N z7}Q#1*hd)<0OqWSnDCO(1=Kmc%IFke&Q|)LePkKtz?v4&E}r}&d~6H&mwypEaX{9g z0B6pAGEVpBh4BU~0pd24@oW4n01^H@p<0rTZGUIShMZ>U*`u}GGE>{eF&dJa*d3}E zNJMQXl<&xNnR}4kfJ@Ba{_aWo_4UDDV+hgSqmFtcq=nJf&+4!2W)g2tm-U_b%X(e` ztfyLptad&1l2}EP#g)FAjlYQVb)7rkc0FG`@;*bfzs0t|{!X1FQfgXJ&zd#&np?f5 z{r-iFoVl;;DsA&q=!|~?X}6&r4>563t@($dfGivm?v4|G2)6~-TaqwH%ZV4g)Sb)Z zSk>(-^~+!p)g~fZ5nCCMNzNA6zf^HKIVG>S2w+5%KbALB(el(^Fm}#U^$-uQUEhVX z15ytxCVxb#vv;uNOA7Ks%Y8KzXY3FAsH7#wd_=^JN+K(?Sn+7r{@rH^T19hyKmaoZkM!0)F#LeV zy(46$(P&%rt%j2b68G5_-OedYMD*)UUMaS%)z*cm1`exw8wj-YvI5eF@z|RZ0Xh1B zadv4T>Jtpa1EsT-6RbXygkRa}T9G~rt!B06t-e)fh?}G|FUd08^EInIKkQQFm5o2R@>fbPag_k_^gBO?Fa{)r~O9zBv`$O>`@?JmzEJ9to zY_ic3H4-PE8mqry%5MmZgOsy}uXwQ};`$%9m>s3EOB&SJK}wEEj-XG_We-eyeD5D% zExpX6xi*q0Nw`4108}G+eY}HVh=UQaeur%8mBtD@iBFS6@1eJ7rTr(+h|2yZcgTB{qCjO3~#leyF6CCburU=tds#9AEy)Lqo7zbBW27XN(fF*+oKJ2iuBU)jBJ=VJe zn{Q0d7`|h~I7cy;)Ym$_^cr|Ll#G|YcVp2>{vws=AvQWF&}YLLQg2i-XP9z%NoDEl z@wIteQ?30=ujwWM(*sl?i~rptiMDaB6@H2UZS^xZmG>z>%a#PM2c1x@vF_3~?~&i&>m|CWNRS z#uANyVOl0h+k8ivTbzV76E;&kBT)pO!IddN^_{ztJ#BnH-RupLIn)sj(q*PCP?3$1 zW{^;klk8U%m@@rYuwK)N$ zskltc6m5J!EWs7>mtUvp$GW@{tVY&q3CM{x)e2#1Zy0Q6*QEFAg-607q=D#CgO1rS zu_O$q?)8pLj9e06w4@@c6isC>?mV@JoLh?_Z=^Q!Jle1&Il6m)*dD``=e3`!I3qS} zn;yGa0YcwL7T>prs4s9`$cU-h=fzL!8r)UcE9rZDrdeL*Ifb)vA%M2t?$Pw_O$D9h zplCOH$bELF5~YTH8h*VY6ILdMdo6Xh-be6C!X~htf5p&$HJ$^qkb=K>i~b3qA34H$ zg=*7ipO56>7rUiY=)#&}l{YfM)U)BK3&z~0+`1I^c2&=VdR2fc&molNYlKo|yn6q) z6?SMV!<@sL5M>5)94{mM!wYBXw6x3x>KQnaw{yO?&v%09YoHw1^TSB)oM5`7vQvF( zoMv(@5JXSURw{$`W<;tM7-cB%_g<@)ZG)ZbE!B1QeE`#Rzrw%n`(YwJW=KX@M_QyA zjZ8$?SnoO{PF)J{@0U-xh&xY!=eoF+EOuzgjEu)uS3#L^{R+(wld;$7BXIKro44R! z-Q4J*N|lwxCF7p)h?&hgP=Plj>H}RwWo3f^2JU2OoD~xPMLYwD96Gv(OE6@|eIRmR zo0GDg{gPF;_8c$Zs+t}Wc7xs$F;%f~7VPH>0Kdk~29CE8GD$$Vb{WNu#(k3}AkhoP*6?i2l#Bslf zzTaBnA={0qid&XAH1P^IZpML|H##w9ToE3taXCV$|0JC)2k|l^6^O^!8k@|@$M3W{ z0cTPW(?=Po+qcVw(slR{B(H(5b{{UTY)kiB`AwUfKw`e5WQAJcO7LxARlQ~7^1-`y~`rKy;^nJ1Ih-^*=uF(DZZos0kgJ+r_FEM_>?Bw zgcQ0TT5HRC7x!U2hp{Q)fFM!&oilt&&9>W|npOPgr|_4iWPv1(P0sIq_jf)voDikU z8H-Qpqzt5QcCUzgY84N91*BfwmT2Bp;4=;r`1VTH<<)R)2zD&U2c%t?v&+Jo8y_2p zpG?ZjQyP3iJ_lqM1#$jKEkOKty$O7%hWg|q!p~PUpFFU3c}*M*cCuGkTRZJnheSU- zk*aog#5sRG{X&Y>Wc-V{?6YO6jz$@-X0##Np9<4NRa;<4V8y>4yyQCc2=uuu# z`Al%}?)VSFc}Z_@wU3TTv20QDWRL3Ps^y`k4m;Z2{P(rl* z)!{K}%Y#aC9eyzM1cj88Uj6A2LD`aDmMWIR5^y?l08FA_CCcxR+^QXK<&;K*Xh}aZ@A6v2hBJ66)`RfI(ZacqT1X)lHBlDQnopE4TD& z1cYye(UbI&5{;(o4ApIS1yIelbA34o|`j?^pFR=43TkXw^VlG69 zqV3g7U!cBVqq}0oB*j%Kz!!dqR(f2W3ExYO;$@}$c%BQdyCq@pxU-s8Ub{nF%XS0O zbsqY*u0NTtx3EQhDA{k;6Cq=P^5dk-0MHOik_-v=1SR#mZbXn7p+3+SbY(6cC*W#N z7|3!F8WVpQ+A#SF*+4lS&CBx6#iL+&KrLtRLW)RH5pyWgI-Sj9oX(Osl~Vnb;+Gbs z=T^c%W>3kcA7|;}C>-^?wvgbITi1f^zNO`60jBQoxPeIh;VAYHC0SH)1_}rR=ChLo}g%9Q{vIxttXa0;}MD^YYvgl z!@d!FA;ZJ7!srJT)}ZWp@pK+bs#6SQh4IUnaH5yw?GB=LQi`XHeiY9%%zL1p+~gyWU0GYE z?kKW|ORnqUcs?a=EUn(T*rGAhFf9YFRzp(akD6*i!Ln^0ZRif_n+47BZx}8V(e_h^ z$5_zi_n%!zKNC>J+J-FJ;U2DUDL>=zu~ZAr5~_G!5f5D-zu0-M|ki$iRA+?026 z3N>FE+~1G>b(8xM!qHdZR@FI&l+tFQ`*Y%J@~hoY{cRtMNUFd~%x%8jY0u~tUs%87 zN56YW$|>?xpQ)=dZAR!|K$M&qi%y*9yY}fOm$JZn7&Y>6bwKK*l1QJl0v8c*F*_H5 zUEnzj)+7W?S)YlhVS06lpwQB{3v^S!$JX`mUh7DVtSMJEQ;@dkeB4y#>SOr&>pn{+ zYMTe4hqJ%LM_xcSBc#8_F=gTc321G76)$MHbIGlEmvmniGp?ByeRsYxwcjbv5B9;m zQGQld(7XDU&3q*(-POErK4r$&zp|q2=1f?i3Mm5g1kzcX@X(ForXJ=L7Vh*A?hICL z!i7|Rhz3tNym+*+4oh^TTZ>TO2@?-0(k3%!aIvJYmd9ebEtjH^^oEIZnp$-rFb?5x ztx2b2OkRuJ_io|NS_nLS;9kWT_-EA;uWHq*4*t z*RdOB6lG^Dm6#&NGEA01#4s3H#xi61K4+-YIiEV8&+ocE@6UDpT>a5?^)fN@dOe?y z=i`3A-5*&?pZGalvTJ9|=yp$u^1I1V$n3G6DD)g$m&yYNw!0F$_X?{RIaMKYcU<|2 z)6cJAeOz^$B9LfF?rqbH$dGoqzB$ui4L1w$boFI!vg|V)AIz=DbWJR-^9o90jPM~M z=m=C&Mo`}6+|{_*Nu5Sb_^S^vi8({tW9-pAag=QkPy-5}j=Y`fv49GuX9kGV^dWD! z&7voCXv&tGGBN71=VykCZgS`O#5ECgZUpg=@Rus^1?<<9a)zVbP)CjmB%n4{)jm@} zT^d(>M{Suln6h^7K8Km8f!7aHtNLugE5 zI5c&-s>5I2G`1dzxhx|=G&W&?0`hGtw6lo-kN^BM32RYy$b>54iYksHceJYS8jye2 z)E*$YSO%qh`Z9H=gM>e)MEvyR*USs@*G;S&EtCgjO|MckGeXTQTVV3rk$uJ_Ou|6o zuslas9gm3?<|7$wA#X#ESr(+>NS}9_Opu!lhS&>-lZdTayBODcn2reHlDh1ga-L4R z_*j%L(Tj9KNsA%1SC%ZFQsz5l>3lr?$r$iQ=pb&^EpF#(H7aW|-i4x`vAbHjAT5*c z(@#+_x&4awvk4o^_|JLlN1d;wi}=)Ru;zVwKki_3-Yu*A?1a(5a&_MMy%9aBAA9}B z{~R)-J3nq6;15I%&Mw>u$71tyjN8RkdotxFrHgdWC;C|>_Cb?53N$H_2sujmUaAr& z8OIKeE05v>^aWK1put9Ugphqk_qj}zqjeqHUcdHD6~`GyUh{O^8xC70^vLUBz4jGW zW7WE?`9Adu_Z^qX=9(;52;g_~X~=Z2D(c>-T@J{F1&>3&yaxTD1G zWU*CtP!9=h_Qm)X^4h?X#^9*P#H52^J%Rs0yz|tGV4RtksCe#FER@Pc+LbpHGA?QY zf9=utx=Jn&a+%+u#nBt@mAt2-_g2G(#-NFTCW0W}p5)Gj*F1+km~A0kQ>e4ML3W$s zfNXad@eki7p`U0N++bjAKtatIM|_&M4-9wH!b~VhW`Xx5@oa58 zlhD}7@eehc*%+5p?Z9I7eLfZGupz&a8D9XIF;TuV+%r7)73hotVTKs2gSOR9R5zfC zw9CQ6=gMYEGD9^{gNZ&Brq#7Kp_D0?hu zZX8lK?CtQC(~Y^TXcKs|r8H+(;mw{l&L0X9pe~7qb7|ZsLkIbpI>mggHE7fR+;FzO zW)+;Uf6s>|r)SR)Z~zr*%Ml+tH^fK%m2>(9GHVm7{}kuh4OE5+pdVD8f5!#E&D(jo z-P`QNK$jpM*73xQ8ccF%XbPw{+X~?Qvj(?<@7}=alGoHW4GKY{5YjiQ)egBr9-RFh^|L4+0>ePr54gM2JpV_{(_I(y} z;3hYdTbsWh@Zkjj1E^a}9EoJ0QMm<}z@GBH0btudwT+DcDEOvrK%5i>vROA6i(K+x z5=moR_F~3thhkP~mT+E#g3%^lmZ(dV&t`SoukSVM7<9qjL8}9SYUB4n+!YoOcN<~naT1xm&gPx@ z+4HcEQTbq~~9M>6# zJYL~UYS9G@MWp?@{O+L%`|{K`vJlwX!U{A*Oqj%TZQ@ygwHSU{>{`>%e73d#N^Qqa z=r^X?viP!>q-(Zy9kv8YHJnARsRbyxlF@@qC3ru?2@51W3ziPX^3#2~BHi5Hm9-fx zgwwA=+I~Oz5q|W$MeVzLF23g0Xnb~YAXSD2_q$F;J9C|232IEK<}W$-50@Jg5DW6L z%e!RX{Y(23*x0b&V{1Xn9`VT7^ksDu*cZEs|0%!5IW@FJBl^PVM?Q&zFVD=h{boku z?!E*~Mq8|_vl?&rh)5CimDvUh-9}!j?))j@7M0ghuX8VYequ^A{1^?{zD4)>^WWIB z^4kb<_!i64*Fp|L3JMP=<&aml^#gG3nAM^7bvTZrN`!x77S|&1&o4a%wCOu-MN<#OXRNj9+f)BlDo5=^@pPP_nICGO8?5(66eh%rhct&g z2>1e1Y#Uv3X8XWNs2y&|PC3VNU#KXw zT%}Z?IRxX)H{}9@frZ!Nr@Qo9dI{wh-ZdF@%l~QuuC=e?t2%vXVqiw5{Btmqd3D^u ziHLXr7t+xZRbWx7mw&W!#Ga0g-?j-6k~H4beC4vDtnAi!tev~_od*mB z4o0-wQH2ie#zuQzm^M3SQ_#$po@mR*@0ti~UHmL%E3qT#oCl+?XN`?QTo0$0SqFzs zCZ#M}J9F|s&d1MqY$H?otuiAB2cN)4q3*zkE=&}u5lEkw8{$|7UOK1j+r1$GW+ljDpag*B$pPaM#b`-#HX4lv-8HEzhGySSc3I?s6YchA;1$FQP!^eEpcu$U2fZ3 zrq#lWakYz$v2uN{yu+o~VKS}l2XG6{>^#NSU&!P0)K_m_?W_IGj63i3+&y^6CfSlA zn2s9?g~+;@qF!Bhx7h#E`RRq>7gW${pO*!gy@kfB#Ag{289mZPrvnE{2gkSRJ|vD$8{hL>kR98b zPP)I*{JjnqWWdqTb) z>-l>YGThp2%5{w&McT=)@B%4i#S zd3iJHZE<|J@(DE`I_(xUE=5YcRkv4RhRL&FM##)L{ULdOKtM>`uR%G`PS$qT)M zT&>q#qBmnX{EF!@CkgJo)q^r?kF~wdCodsT?*5e#z^pekKus1&qigq-Gtw%k&x6%R80Da zDof&;y2w_zn*?|)JV|Yt!@1qA9=9cV@N&nA`PK|Mr&|t@;y_OrYfc;g9q2idqzG-- z7bV)~JbWr;is7f?DuHqYyAzf6Qnq0XXnwAOfLI<@Ay>@0^_YT?owx`%%zUzt8 zR9b381uQ$FV#nyggZ;)~smWCzu#PL;*?T+HJ3)p1@9 z%W&@xB zj=Bet5v@bDa0R8LnAO1m?OkJ1J52<#6e;w}bUV>t<5i1lvexXgxua>YXl*P7zD$8~Fx?N%=$Vjn|C9{*`1Q>Ff>{o%r`JcIGux)#TT zlC_&(S5$Sx**vZrCaj8_Mxam~2W1X~$jh0fZ&g9Tg56p#7s_R;B6LAw&YesTv9kP)SxL3osEO?N?Q*0MXLViY++r z#Xf-Fw%R$FoO#Ca(Sup9kJS}A-H$9fylTdfwJmNay11?FNX}0{<7=Yqz6|uU+1K5?1TXf3F_)4rkShdjuVeOBwq3 zY>EHGBm5gn-^(8ciT3w8q!@+L=_|Jy9}n7;*xi9$0jA4BtlH0QR={|C{8osO7etZP zh*5|!DiNMYdJG7uO&LAt_^7e8xwf8{Tp|)7%_oFv{83QqFM;9?>ATxEj-CkAQX<|% zD?=!;aIPJ+MVdL6){ytIoG=bTIF_3Q+I>_-dCPF}O(DzHB8rYIvEcBST;uKAB7%YQ zij3(&zHMl89ZZ_HEQQu$+)R$UZ7M`m87FtdE_~g z;_2yyt%V1TeRORcY=+AwpXT_VaM2)H+lvW{OC35DL98sy}e}>U( z|JC7(Sa<>!9h4k#DoI-@Y5eTaag)5Tdb~zQZugR)Mx|AR-7b{g#KT2Jna;x@LMFI| zej{^yywV;-3bmzfT7+|shR!vtbh==9%n4_cWj_^<_Wtk?u9MiIxi}?})4epUWExxE zgolhLyhqC#wtHfHcE7JfLd}LY$m~gVoLVX;>mtzC9^_^D-0Of>)`uPrZF!9Tmc?^ zkE@!veL|vh8wfs^nu)q%14{vl_Liw_1cRzwMeApRXFpcjKw)J6JdAS1enP7Gv!1?% z5N2mK)P=~6!Ym3)=}e?|)~Lr5Q%S{2`oMA>#Zag_S~vI$Z%Fa>mU01<dy8AJ6J=Rc$3Y+#(Qyi{0I8+jz7nsEvwJX>w8iF`k6xBNV*_BZ_<1@I zwJLBQWEec2VxOgLJvKxhJLTjGNseI?;<_!39sr0R*AblwWUKWN9Sb8I=qw4IylTHg z_pp)1YugKf88LKW3nG{yr!wv0ycS8?6`wbx*Q-nGv&+1=tTv!`sEv>n>`l3oF5G)ukL8yc)f?#wWV9d7d=B< z6lEGn;d>Z%F7Qk6=xLRCrI!{JH!x$dMQbj=t8pJ1%GdQ887WJvj6o*E<&$d8)y>SthEZ zyqnzLZ5NVTdo;%UX-TzMd7}h-2=0AalkugXnHRR#UjfpYVXkHO!0BiY)1QA-!BU|0 zlatOkWQLd5y?*RBoKsGBlO^Av;{}ARy^*h>%tpM6b&N4u7&hpWVxl`zeJ?p_ z7WSF~YD%R8iC*gLKTeY?NKbBiVICxN*y+$Q%RN(_$3~TGPP?I+EO-V18yKUUqU^jK z!8^TR2&9x)?@0x_+diQot%`+JWv9`!1I~Z;=^>Ct*Yqf-lq9$mYKtj47N&kGT@P-W zC{1R>IyL#ZO6dpCWjl3oqap=**sY(0kGbd)8nnF%V?MSEWan~0xWsLgb$#+45)m#) zuG*Jv{NeRJTf5>$T8QOiJ-!zopoJkxxMz=N4%-rJVW;!%dx~IBnSf8g$3O*7UF4in zA|6e1+EHOsuD-~hf0=-lhFc|J6CM=L9gRwgDZzu!Ij{6Yrw4|73;|D|yaaczBHGU( z`C1Fm5MNxPA{vLT6l6=o)u_-U1eyHJ=S1CFZ{9^L8W)VZr>^$$H3MI3PL zW|&k(gNAieKlc;rDASeB`a{v!!W=~Je-vm_ZG^T>x%BG}=J&aE@0u#0os39EM4$!1 z7H|wR&!hP~F*tHZ`-HzoBK9Ish|2~Y%qWw_xGnKOX@e)@*c@jPIs_BK$DU2U%x9xr z(R^Sy>@A=^6G@n{NwF{2x?EdSl{Wl^@5SY%o)0R#C=C4%3vZvE-{f$w#U_I=SDG&= z$~GQ=jxKfjNIE9XY(^v=K{gSd$%*fi@a2-yY22*}7Ow z3uUR4a3nfTp0A($dZu(N0)NQ-J{n0F_NWfM(O=CsXFA-O)I|Yu-IUF9n9i?snSDC4}Zi@lkl5@M^D8b}g ztrg}o7p$}yI{`o4T+XQU$V_-}QceVHiTjN!s$yoxS_mD7oY863t%tr;|_Pj6!xn&gF?gD*nU4Czet;gppR3oRtIu#Us>~ z8X9Ji>3z(}M@%dLRtrTv9_%<0q#CfxiyidFNOASx5QB1wt!K#XHK|gAf#X#f>?u#U z5*2*t>5=NjIF8gTu-qknFsk;bG!uuc+Duhk7co;Zg~!G>5#*i+&p13@EESBGo819f zR)lCE6VrTEnv~d`m$*WKi6NOor?K02JzMF=hbRntCK6pY=vs(97uaKm!I_-u(heiZ z2~ep9@oYMRCw)t`r$`p{E)yE|f!7%98rJ;2(Fm%HObRz1FFfBZndPyC$TL zPwdSKs1d2HwXS#OQWqoZK>*#8Rcz+#e1d#AOZ!vhUliN`ReyIt&}v8huA_RNal2fbTEi_~WxA<7MS( zF>}&3M50?L;%$|WZACwOD)Ja9KTC#BoBr((+0pJWY;x!%qw&Uw?qGx3N# zRD^%_h~gGFDE7E+{`y`~=-e#VM4j7pgndhCO_ICv+m$rQnvJ#B#&++*U+Or=CF^z5 z+X?B$)p3+hAU)&=_bV3!=B^?nO8EBy`1{@VB{@DF?s}m?P?;i^qylZPmtv2{%AT4qg zOv*wI*LsD23NezkdM~HM2XiCMvtXfszdx^LA zQ-(50S+b|xqA?DmDDmkG>Zu|nYxBP065_Ks`$>sOes88ec6bZ|$U*j$ajH0EzI3|| zbW`3{Oi5-!`MX_jp@}X`7!LHG)jY6?p!cDP)U_9DUmUs=&reOgQQ#;#i7zu}W7M-KI?w_gcQo2dA|;h3WrmGl8@>^#z-jbX#O6L=1ev7xf1grZ# z;t&2BaH%zm)W_~z9NLjji(ZctZ$CwsAi0cLxoIroNJ)nO)&n@Z#7}e)eQ*2G&Db^4 z&HO9r##iH?<$~p5WvcA~nQArey&w>dd6DUpwkzaUAUM!2@7I5!a&!!1DH~Z~et)pU zFlLmWn8Xp@UKaLXoO;M4)WbszU_bz+V5;9BRdH-v*wvet^xsVwG;Pc>wW#|Fqwxb6 zO%%Xr$-nVFh^Dbrx1CM?ws#Z-(7&jH#5H-4xMn=5!6POewi)# zx8SOgAn2A?AI3Y@VrdxB`{Ko<##)KTkpcG717B{d%FO@5ln#!3;uW$9WTh z%=kY8(<&@<{{|5NzG^xXKDwr@C|T_zzltbnD3i$IF5SVTkmUc>9;%FZ8ts~959BtT zyz*x`Mf#jQTY)I6s4wtUA+7`|ed`Kw+XiNwq(2L2W54;7-7PU1XxrLh$gDc~^+d_P zp=v=OA9A`GiK?Q8{uKhq3|QO(LIu~Px%e|p&wMarOWfwWOm-p|cIf|Bf8)}#2}HXF zjLOjhfsCA^*~QA_E8YVSx*+hKU{Q9=r2M-~zNHV>Ss{NECQ1hXF67VLEj|DHkiQ(w zT!Q>@nrl*eWi%6V`-@~}f^2%)Yr%fy#aP{A8~>49_ZNjh(8T!9r)tCw$)0hb~ zy3d)&9I5@vL9kQIU$b4$Rx~tKni=kS^@l|l@H^z_K~{?lf&e24KIN(mAIkCEPk?`f zJ{bSQq&pLu&Zi%4%WjWSSYL+oS<5g}t5bIi$2b7k1Q@R^K$2Y2I^4$U|9=94Xx`rZ z0)iWtnu!I$KOS(w6~wcgYfEQZaq_=mV!$jTkeLdu9t5abh{2GXPZFT(z{>fPc+`~d z<56kFZT=J{4_SHsHW?6?ENM5TqUwmK!nn{(-Oq;QQ-s1oqea8YvzazWy%7cHrzB!j!ykh36;y3(Q z9kyOqhtoD%R%l|fGZXk&hN!Q2vD(*71h_lp&x%>>DQ z=NV=c1ki;K5xNi7Db^i5p?c~$GF?WoOKkYDPmuFtJg0$IfkJVa^}`GEkogRLF^@7ym5`rNqP5cA$eq`te|RsB8`H7vRotIGG;Pzh#w)P?5-%}~iHpZdk6=!@CGn9%AUnw7gx`t(Qda}q ztlh(G8+*1!m8>XR%UrH6WrEukZUlj-HVTX#2k!6txxw4dD%!bPv>SH9yYx9c{oKm+ zH=_yyJ9-MQAceA!@!jk@iua<@hFPRbqy8%vK_GW zv~N;%`+fC}(~bUFd9bYP+nrD99Vw?yKJ4n8d%)z2`O1vQuLx}(A#-MLm_D5ke%01_Ffrymxr3LBW&s&-_|_Oti_{yUxu-!Nu}_3+#uWIC@~tWAV5m-e-%0MoVrIz*!N zHdIk|{*1_Lfy}^!-DJ4Fx+`k6JmWXQQdSz!7^HNy@nPTVIgQv%=5)-n;M z$Ba+~tZDS-aew(picdI_6TT-3~qIBX$0Ppz0`t}Cw;kuaX zPa9rSxDc`RxT~P3{?ECLfC*`{$4C>zYTh5KtzJrcLivj7|2>Ogjb;UQsFS2@{(GCt z4(bJB6I|bs&>Dj_XQ8THnF~~LXM}Bw9Kwr_{Bm~V;YG<19WkXM_4kn&=tlOn%Oc?YGG?V|YyF>;;F8~MQ3jjxqa7&&;>HsHP4$b6&JCj!-LU6v z1#TjYJTsX)>?piX)`(LNl-cfiaTM+1by&BU82oprSC(Y(32-*+$r4~`c^A`>36k2I zQnSB!J1|2j#K~2O7y4ChGb^Tm<~U}QX7>3kX-^K&{=)3}H2ImiKYnv=9Y&(7nxM%P zhmDB4tlI>~^r|so{5%kD%`91d&##er#SDT-VO8oI`9Av#WF2O@F~4&deTVGJ26nc} z8anJC*-^$;-Zeo6*J~eOTe|Aa~r&r;4`?cstY&*5H{)J1Yc&{xt-mEAJ0vj_&M+4UUE9 z&ZrrKA`#2R9(8q@nfm^YWrD-^%d3**F>VS*9>Jts==N{9CY){pcebksRTRQZHUs|= zWc@0ey`nw2$5>0(e~rOfOXMI7wiX$xgU~GERaWzXxV`fnrdXS(DVy{Mo{ONvGTDH; z={l=I2le$@g>DH=S3si6#VMzh*H>C4nX+x>HK1hqXZylEFN`m~ZCejJ@Y7Xa+lk2F zSx+e|q=;*zM+6$r3*OA#17fV=A}jZ*G~V$Z>M4$JQwzTbLO&0CD#d z1_AaUMtPm{$C+G|mK9hJbSSU8-H-0cy${2IVgQ(mc@YlB2YrjSoeBWwK2SJ=xdp=} z#J%6AMFcFp&5Hh7$bZds_-k^((X||0GHLA+P&RP7ap`~@9}sxX4tmn27}tLcB6za? zqj5p-cmI!?4u4zmf=(Mkj;Ve%JpRZ?wHFb~=lO&HPK*DsegkuZ|8nsVHvUo($`))kbiAQM>KSmxg4?|Ko;*3PG|BQPu?-o+K^!;#f@p=sNgizStZcDqx< zp6P!5Z=TH4clhF&RzfZv2MG$#bA`3w93P~j#(m~(0AVlxT3jy1y{8kz*Go^z8zwRI zs*MN?yrtusHYedJe>umWn4@7=SiJ}_=465I43c1aKw`84Ysi4BMXRKlhTKk07XXj^ zH^yYOtC;O-4W34h$?w}hdQYW-VJ1f~h*a9k>B1~1J}KMCq@0=YXW;UzVo*TeP{)TJ?Qx%GEu|MUe$gKu&EQ7pg2*OuW~2|{21XhmNk(%^nz(k^m_h;;)jM7Q?n+C?G7yo0;sSX@67i*li)Xokh!!4=Cz6ghmktRv)iM zu6L0%(!E%FEmLhu@%(LVryU1rO{c#fneqV4Lg5>yCo*@$^$amt#2wJ5op}}pZV-$- zm~)}Wj``;VivTl@_E!R_YZl+1HC0pBo2va+r0-!B&*l7^`#lhCa}Jt3iTZG|S0fJF zE8?!c;aW(n*TE39jj%mq>9^X5K&daE%bP(a(*NRUm7jJRme0QdCHD{*EF-Yi>i%bf zBXjH8%ItF&zLP&&Irb!SZo6KkA*@d%)I=cLyUNA!EVqIYEjFg4NuUL;pV&MD!HF(C zJGf>}7ZeZBVL>2(X&BpDCQvWmKZ|K7Z3`3qGQ(_8R5hs`b_$%5W;Q2SK}`a0*0W;z z$xQpY5AwTAnIqsRrEm|{&)W|^r&ArRy3Z@3|GiD3an;@|Fxw^(t8;9t5$E(?ssT4y zZV!KMlWxoVcl(k2bw>~7j#a9@uRl&JP`2}Yp{Pr0(6Y~6JDN~MOrC{SoJk+6aH!)* zN*qfGDXR>hy7G^5F&U|Bwhw!z+I#3Q-3GT;BXnM*m8i{ev~o3r0NmL?7?XF#9#i)me5R6W|eq_`V9#N$ccB|N)Q#lQT%L7wh}M>f}~ofp{kPE>h0Y~M%# zJ{O}0@$Z)Ko47%*%%fqbMhO9S6!*o$^!A3Bo0L?a^>2(U|B!Pz|mR`}h2 zO@8_EUdT5%cd=&QZlMK1_{x%C(Q>V}eG~83DMnqUb(U#+EX&U9ni_D%fy#D3)=)TU z;bsdgvA@Zna&`P4P3D-x=cSibQF%V2YUTSE-t3YvT21Q031s*Rh6vKfX-nlkkyQn` zIJqygFx`W;9V+ecDo`uOjJ#KLO1YeLIlrzm#)45QuEA`ETxnxYR04Yi{@e$be~}*m zQ()%=YN=YQ>{gC;DpZR9}ytRx(3Tfj+?I>PptS zIbXeEO3%p^pht8lEwB3eo<6zbvrP;|%Qr5y=Fl#TJ-Nwnlrh_r)u&DD_1!^oUFMwi zDj})+IS+b`&e;+_ue3OkG^^(~O3qd78;PIy307I~PZ;gWqt!PV)zAwR&hGB%EEEpV z$FjATo{Sl3BR(EfB~o7Mf8S0?jZwi}?W9?y-JqUP=J}wiEwuOwHxlI2Ew%93L*u^; zxj9w26osGhnz>4+x*U+>LEiHhQj z%wcCO(7*=)a3?2R{Z+BaPGSDSp@(M@T&I#%&QF$qk>IR-KX(8b`TRl%J2~MiUqN1Hh>ea&Y zB%Ko9920o5i^0)3TPaLBEk4vcj_RBDMZfyYR(Z#{!2NSdr1#83gY9a{>)jx5bObSZ zCZGqagtBNkjhLeOe%Tr?!Ivk#ehxXXdn9CxwT5hT;FD|}G{uEl>tj~e7_mlDL>_Wuxw9*$K-HUr!KUtk4QFilM zd-o?8WkOTiegu2EZ|wdkQZJb*$N72x`B8+q_Gq6UM`j&P1b+LJ)(*db5T^?NXvY<8 zdRuMccB8mzKGhVz71h<#e)B=fo*u)oQr;D9k0_tw96YJL;LfgII9|!<+Bed)r-WA8 zg(snjONf_~)qSUkKF}WCm?|2K-Y?X9>g4k62lOg8X$#my40`C{e9i{fQ7egN_+;h% zD#CM$&JBNGccR#}@vD^na>mtiswV010`6o(8F6{=aOb&rd9xHNpP`yrFMgLt%hfYg z_*QE$4_&FE58x99qqu?6Kx*pP%0&T0BTXn;AYJM>H^bKsIb-OoR~Gtd%wrPw_T%2= z{@(5p#KHo!PrF1#_Bq)+O`>Z4hV7EWfM>Nx(&h5NQ0)B`dfXkh&P~a$O$vf9C*3-k+OgXe< zggh19Ets+A#DbFO!k^u7qIopySyGrGePt67w$u{Y<>&H9aG_v;yl^T{#jW7}N)s*7 zamk+J`SrJQfvJ@P6@G61D>hdj`_B3~hQS<{OSpN1slh60LLSu~$xi8^N|L9#y@O$i zrAaM@^gTpc&%sdA+=l{Yw=@9WEsUa?)*?)%Ka#U71`UfLx~4tPw*tBezz+>g^_a;#+0?+&PrxM2r1uyH7Tg_HZ!v_+|fs!FC%X-|Mtl z3w=I5(m+T&XK-WS5}lBxic+xZL-?yK*Rqd7@F9;q$_Gt?s~Ic8Bji>3ane$shR+0U zq(z=8sEgrh{k;!0j2~^P=@vo>RebrCwCo?+qKcnd;a-I`2^)j*GUl@{7p8YEtU62I zXX@_uSovUYSHlnQLs~;?Kf;yB^w1Wqx3m>^qu{YY$E8n^;|G;PtkU#J`-gjOt1i2H z-aq2!tXio%zKYz@tDo#S{`>PAStHnK_`>g%Z)VDZTt~N-hv6AzJfue$vbmphrLH+1 zTkGW-BR97nds?*|5^Uwg;WL7*PTAwTs7&9f+QF#OQs;N4gn&LV4YnjFgqjo|b)JV+ z6fDTQ^n1EXomb6I8Vo&n&3n++l>?6*wWN1RSf$xkd*ylS5q%KG{D=%F+9{j7;?F*6W$6*NG8BZ-o<5X!#$=Cu3(Y%8+{{Yq{c^)|RdqSmckV5D)MAw($wxlr+6K3%_6+l#%dQgV(vUv|Z_5-K)1ElY2)uuw(z7_MVqTAF;)tUm zLcvCnisy!$4_y-q%$KZmIx`7-t#)HejKA%Z7m9{0%+};zhqvVQJj%tFD%pqH-3^b^ z8~1&luiUB^aM!r5fUQ071Dl@&n^9HeTv?c!qbYjfL8>N|4ogyKLHbtu>qse@GS=#E(xcB1^?ja#L+_2fHNY&v+f-^6w z3yD^!sGz0_Dm23$%)%;iEb#BS9c`3^$9|=GBWsj>1gUdMotd^059R&l1o#HJ?xjuc zfol?!qT60ig4zm|!MiUrZ#ix+_6tWB*(@-cxC{x!YzpWzB+fk2#+)b_uGB!3OYz^~ znM3!RJkdgq@iosR${HvVtVs)>ji=WY|3oFDQ`h=-uc#mV;&%KAzV5pdocUj z!zjc!`(KRHUDQMm;UiA04b_~8)AupDkG`DX`myt9NoW=0;kXepK0eLZD}m4Jv!cuR z0%mfc_nAko|~BU@uxfWirf3-SS7)tk4LE+!g`Pr zRP~Ut=FBfse}w>TH1YAx?PDNePi7p^|ELz;tQL z#U8J8#9Pk_4;S)#s#1%r_;7zmLwBFT)ohOH<54virERH?-oQSKx3z*{Fv1fKu0ie< z9H7E`>U5cL*#38zPORtPuHV|x^%hyfO64`QH!%yP5-noKDiYt)qsR(N4? zXMvVbpB>6Y>2rG?HXj-;U+9TfoP}4K%a~rd+dUcS_WTIZ_nD=ivjy`r_qI3;65U_D zFH+PQiYLpz&fW^4LBH7crTShv_QB!4lZRvHV65EX56)6OL!OV4DlYdOS)lJ|!zJHB zjamzazTaQ;?C*!<$O)aptUe}ihRt!k?PDt_XZA{Rix(8*s#y~^>v+D?C$cx^%xybc z{Gv#cljL1K)nvC z0UiA0IgcPKt~<9JQTTZ@fZKE$xAj~VCFX*s+D`w;duIV}mx~D&nbA1G$dXMLl(cKE zg)rpWHOyXZg#^uUH+6m}%Bdl!ba>#& z`Q@1|3nCcp#I2gH28`0f4b84oUiU9A4r@3l=yk${F%_F$|>8dX`pqcCao1PTRT7P?Ab^N-fQK3IuI>(U$6B9x8AfzB3Ij^ zN%ZAu-_N#%H-_b72aPw(c@3CPr7dq&=wS3tM+pvuK*}^J87gG3QJR4F{rHgC2Stdj zC?cxYjm=_yhibaj%JiPu8B@=j2XlvA0*_9b9!SZNZtroqXpS8}T{N66>F@h&tV$Vk zS6}cL$l)sA9aDteW!xd`EUdG9Z(IiskF0Mp&fP`$0}tEh<6z!y4`Lh1Cf31J(aJer zdZ$0%psaxnJI0ylEcIpgptJ@O?d*9;Wv($T1S2m_P;s`{RXcd1M?Sv(NvmmJ-msqu zK4vg(i;q@?)zaSN2~%qjM0ZJg8ALQ%*_##tCIF<%x4}JkC|7X{dnopLM7&kV(hF?2N6Mi1wW^g zC9%Pp^T!`Z24CH7ZF+nB^XD@PV237r{I)k&Wk{PSvS)*6H(Fiz9T_F3KPgJI2kI9p zeIiq4{k&qf>q7>uBNgOQ(gUm2a3#G5<>?H(p*=jx=s_p=AR{g{4R*2?MjWQqX^Gd)+G4=L;) z9hCI^;-fTKIZMq`(q;9=UYn}uAgT++=5!nGK$2##_#mHJ@}HFBQAqTF>>g_{E~Ume zS6;^iiN4WjESVdMHO!0itY9cD7iH%$0%LBvK<{5DF|{*spEYPyRq0GmZa8knKhrER z5>ve-xJ=_r8zySHp{DuAPE@<-xSMS%qIeWGznxR!te#dbAM;Xn3DM0gS&Xt4grWq+ zmDEm7(@3}dt9oV6H$d5D-=zEL@7OWAEGU5bP`uY~U-Fnl^%>Rp*sP&WL3&J{%30Me z0_+z>$fjL=hH5iHez7Wyf<2>)!&##RB|b?>PY#O=nG-8#Wt}awq06%srMXVqYfZH5 zazDDTe;6^&})N2TLKr9TVFpP zKO>985c~8)^=Bbt_vXdCPS%!vfPQgr2%7znK98ZRt40gt9>yh3Uj!+;*QU05t}-Sw z^V~vP2dE;-i@cV{=5El(U&KqWnauIM2CkT7=o8~h4A$`PuQbNr!gfZQ2u@3;=e;&( z4u#*R^Eng+2!*5ys6e)=4Hod34J2UD))e{dZ})guIL{_ z&4wXmBaHZM9xAvJy0TPi_JG5@s(#GM{QxPdj>(MtZlov0+NDune)13=)6`ZeNFQ*Z zyP-ZX-$G)3ilXkKoKRnxv3E~VNwbxzEK0#-Ub(4LK_URc>k^;RGJ0GYYD?j%oZhjd zFoJV-mmn=g#=~Ut)K3ZSA-WT_V@9rW>6b}IvFRXeG0!&D?eHAgI6u?hz13>r{x%h{ zyI=-_s2Ekp=DZ@LEXS2GUE_KvaA??hb>Rg4-HhiGW79zN_ER=w^z*4bmzy!zq=2Hx8FD-(>X_Vu`=l?tbSjS#j57e4X3HI5`9M4zlfre~dIHYSX^I5)_2n=W1eK>d@J@tQPBM8E(!emI|SFXkmZH+`*2Y* zeLb_rWZk=0J?@qdIP>21-1NfD*4}lXM(}5Mn z$ijSI+Fb&B^=aVMi36!J$zVP~WoJ6+xk=ZPvbuah!EO}oxx;yW?oi>m#S?G3catUk zu|UZ?>FnIYCxkG+kt|E)$h(9oX^+pgOxj=8aTI^aJ>0Qk?u2LmwCHokoF>BJRMzOB zeCYgD%8-ZfwUtlBA4@bOr!3Kq#(w1fh>{?smm0?gmRi&WA|D)PnuPYs`o1VR-Jp2c z^~#eN+n8d+TW2qel_RORw6bkoZ!mI=G|NPDU*kn99W0Bt=(D&bb@*W9V)JVFYrEej7bhbp zCR~S|+3o(4njSNefS8HnoI}9!dIjR7eX?i>41liOmhITVF*|tkv|IS}N5k2}z`}Tr)XD@HSIqwqVtg4CzCOYvo+!Z1H^WY2wyimkG{U#YwNHzGXRNPT9Y~nt2e=% zJir@g6eEDqXgVN*h_wHo#38-5Z8UBWaQXK@B>CsBeEONzkF~@wYP0MC^rvEn$NW0L0)0b}7IEuu_c>Dmrj zvl{ht?lxna5$XS%_vnAYZ?x`8ili%OWq=GYn%|Ef5#ZvQZ3jjP*iOt|?RIr(MPq|CGf1?u)T8 zXZPqS8qn>(AC81DfTr@59s;H!fSjF?ZPXhup*x6*WOHcFTTzDKvn0KF0+3`u>_K^G_3! zuu73@fW;aGCH_we3QS1?WQnNKB*0;qm;7vXTS}gw{$!zsO^@m~2#vvJ+C;xZ0?GHQ z+zwnH{P4tpb30>yZEI z6MhbNlbh*R!WU^`o-Kb`z1y=A8bDaGos8&vzqIx~Tj&m%38BV`eQI&ozO%r_vfYwf&Nqysn=zRmun7d?K5%T&Dnt z3UV<;*;)%0(EsJCbOSJ@qoQqUsueh$?GeQ!;?2xa&sTgMH@e)&_Z{7`$g`U zN-ia^ug)1BTf2>JSUVbS!a$_;z~rh8cXHVM_RJup{7%jwWc*A`)wdXJ{Q8|=%rrM+ zWPe}(Fo*Y;q$ns0`&ERx%^6U_CR^WUsZJ~&QU$L;sp%_QA~p2AmO9Jb_kJ3C$y;j% zLG!3B!A{Y&Hh+D&4X>b&%t+IFnC~U?3;x05elEy?T>p~!rHG>U+>RM!^Q#&;N&sAS zD&5)AhU%M6Rz3dpstp?~AwA2Q%h0oM&_M#vEe6_|3MK){@R6g)s^Z^W7C<=7+DTH% zqrbkE$8rt0bp5Np=&TrP;Q9A2K~(+o>%W8lDd_+IFJW0(@kq~iYVS~zPasaEMsegb zx_k69`$?k?82IGC@0hdpJ7VJVJO7-ZQe&33Y~SD~zA)p=>YaRUNxzv;Bmg<#I%#VbfiT5 z;P5$F^2qN)O7m>sCHjlbv)=O*%)({hZEaEGx-TNAR?9CHTGF~l5 z_67a+TuD=yDzC90Oy&bWf0P+05`R@Q38N^Tc}ll$k6LINJ{6@Z991tMa)-!sIl=I; zqd@aqhal)pdNgg^u>Ngfeje^mnnwm`^>|NG506@QqE;l%Ccg^;1|jM|5x05hc%UT z|Kg0!*aa&nRR+G|&Djzj7@M;{hv+55%_^zgV&kp`vUYh8Al6`+fcqj`w5URIs z*?B4D*-Dhv)NlSt-yT?Bg&D`bx{5yB31T3pLM|?%#vbczJ>7S)PC@o9uhU`jO{ALl z6s%g=mvSLQ?a>I(yMZeXLy&y1hmql5Bd@NsFfR zdsSrwd8J-LRMiBf0wh;3Ah7oAvEP_SdlMx)cMm_opZO-a~|L4nqK-+sd}-v4)S}*y32ki zBsFw0vQv!RcS^V`b#Y*_z^MJQQ_qMv<V`Fp=y%dwB8?>*yJiF>>S(AI? zlY2?qeO%Y~7fea^=zh{<*KKwLh$k|rUu^@8MV~#;h)^D5i;Ux4Y7vWdbX&h6czP+a z%q}fTW9gV{Eybu_I7dPS!8jqIcm>=AkSu68y5!hnw2e%WBxv=5qxD~`W#1cr!=rt> z`R+Jt-lu~|<%0_erU;+#)00pmiAO31CM15Cnlw&O6Z&=|qUq(5 z#_k26JqSiUVcY_=G%DuCc;o0M{C#7b=lIE_86jS#fQO@2pt9{Ayv?J8>6Tq^Bp8V9 zXMcJj^B8G*3Kev4-Yvv#IG~_73}YE}wp*siR}VS@5xw5fGOleqJT#s`zWe%CFC!?` zZlSp+=$qH|w2)FLc!;|;u${#-|7aKDe*-4yt>$#^C6Gh;G{X1LwYI5{G(LjrEWZA@ zd1E9+)_!?=~*3k~YedeF`qGQuThGqcK;LIdJ&k6}H~PXOVA zm@v&(01?FqvN@i$J0I2YCIscm`K9bB5+qp5WK{-VW z$S=?FT4>@(h7`6#bp_U$nRGe)i(>ojlPdUIzdU<>@LtBEb$nfKg}2@XXz$U;{aL)J z%bh`Y4wfa@pRm{sJCmvMl%fn7MP(Gu2@rt&P5ESx!ZZEq0P?Mo^xdn>ajR@0BwHh49E1$}uaOpuDp6S%Im_ zexVrstqI(OE%ZqfcaM6th%=qXQGSYg8|_X%aHVHpr;sNy&RE_Vir-8^dCOLOw5t*- z2hS_Wy){)rw7P;7^!DuvME65=whOK{i0gHZ#-rXz38HK!oX%_(JldYpucHsWYlc4p}_ zKW>(o{aBECs<$1PN{uZi0q5pK3Zcx_94j>cSr_y3FOH^YBewj4{;R_MPP`Gv*=dPS zUR2KVsws7vZD^X{7nWS(7WHCrZ##@-I{xk?A?~EloTDdcGw$srs{nEc{|zJN;VP8( zk&TYSr%DhQC2>^Q$LKHi4w|re$Sdq^D*woRM*r+UH6!mJf?b1p7miton?&w$wD@T zI#u9~4607wo5xga;=RX&Hnnqn;ZL*Ih?!KGAYA%ll;6{-s5QUS%yq&&vGJjNY%HM5 z_Ctd%i~T%%CTG9Vmd5(JF@3uX)RZ$Kigy3>g&J8a-fo^iTo~7cI~4NOe6w2gVLa3HX`RAR#78 zAiy=+_C$`C_hl}sh^^^@CHn$8NO9L>?ootufour77>6%)F(9jpT=A`;_IdHeF zhZaR090X?#SC-?@taEqpAX7Gp1(p1kYgaO>g_B)J=*bl#K)HDDoalwr*1Vwi0b$b# zWq8w`#?#J$Xuwz>|XYxNiEzT_D9c&>&Tq~zkJpE z3|?Rf&zxWobMg|R2%iQ3rWuct;SZB)sC$p&ms?V)Nub&|x0z384KKRKu(Oyed28yN z68wOxbx#63YGo;vDnpNXdZM!%)k2{rg@Z0W>XRAuSml@vi@NeC_%AYWZUZyhbf;lD zwI*obk&^xjZ`pm^I7k23bj{%<}P{)GbPck&2uRRi4BH(lB`KplL{qs+n-7@0lZKc8+*;U@6 zUk#hCj``Qg)1v_MZ30fPMqVlzI zk6^~bWsI;fYr^LW?f%Tb^-X+!KoC-U)(ZgcE3Xro+OyV1Ed0IRxjKP08$9=0hFAUd zbW#kZhbi!f8xH{$fix##)SLLitLrUUlai5mqGWVSN+s}i&Pl^DW6%K%sJLrK!V{UXx|yVVpZ~F5+c0FJErX`i{__u~s_=aj z`aa^~5zPi;L!f+~HOP#_OQp;vm#1t8`=-fq)*NSJcUN4m#P0wbu6C&{r&jH)T9^om zOFi1sJwI{4kn#SPrY&dONx#%n1{8I|*7|DG4!^SosmTA!Z;Dc6pB-m8hxe=K3~Kn* zp^jO+u52$5UXhDnV|}esRp3)6xDy%5($&uxb4R`e8O6oIS>;yR#h4+}AjKWv1Px(8 zyjc83it4Tf5*$jPIiM;qApay(_wtUhhk!0JvENHhPg1IZMqy^15zJ z&21l2G_2R$E=_Vq3x_iyG@8dH&>Ky*pv$AjH7kh&=_M@|9R-R8{2ptnm6Z&#d9sG$ zvEsiU zMV5Ibm3j0YUrbQAs%+akgo(Q6`!2%D$P(psg1K`q@+`v81QoWq#Vy_Wmz`D?sizV) zlLY2|*#o-V6P=a~Fc0;t>|1hOnQu7k1~>ic-^-b!m3Ra9ZDH5@PUw+$jY9d-v_+`Go?;vp!lXskInYQyn~TTHl=wqxi) z@v>J?vM2?;?r7a7A*7w)zE}%!fBU;f@t3gz?E(Ej_?!CZW=lD)g)=n(q9B_e&T9o* z+0b-zS_Z?L6O5L!GiSNsq|2m`@vt=VVPv3He-{Y;W|2FPIh()@`(QvXqfn^ixV5kk z?#lJhoj5RXRUJ7{N4nNHwd)zv+Tvq26UbaKv0_m&Ik&A!?|Fwc<^=8g~--;dR z0Au@~)fJY}-((pX}43U>F{lbk+QDhlsbeg zRY}_U-EBWuJS^h;Jbn0s3Cy*uf)>395dM&mM#w4XFl2xd2j(zFp_jL4oIL}(SU%m^ znO(%X5zAxCfbm%6&rrpiZ5e1A=*B`v{Bj&xY$8~_iT)saYLCX9w2Vwt&IC*!x=fMo zbTcKuC-e|sg-sy7Ja>$IVL=y^nwwQ5a7P6iU6NZva943ot|Hs6JmqG29gr8!fyN#3=bR-ZVLEY51q5`1k}3;-4>RJh*h1eIeGP zSX38?fAk8)2tkGAY0B2;2^7+q&20o>?*fwz@n>qG9V(-C=S?keT##?$-EUVnLBmum)UJ_ zSz@uzzZk~395or|zFh*jqr;1S72Dgi6iz})WDCNMTHM08=EoU9b4G<78!mr?FaGCr z@7-X=_KX;TZM{%-xmIFO@^?0`1@F^8Hhc_cg(0m;k25;(9mF-a+NFb0x1F|@lUEC$ zP?xRUa}f-q;3hFcp?VY$HVJ)gpC}jI^cv|twoGK63J;S!YcU?lb%-K?krWL}2@u0H zw7tArDSBV%a**)p1j8q9u9_E9V9%Y1j(^lriRBbtj#^rvZHP(|WhZ4Pu_yBQfmQxA zWy$%{14W!HZh=_gH}|J&NcELEv)vZHH118UL%Aa-YW5z^Sar|HtE*6=#S}*D9!g|& z0=0DEF6F6FEnXU@D6_;_0e9i}c;;jakZlU@MKJtByR4bIjWe^(q79UHFbm8x?pAk) z^S6P_wGS#d`)rE#qEA1iA_+Z(Uk}w@M2Z|4_;J5akosN+r;kfcqc$p0!b6Gix;cj3RqMM)P9f%@vF+z)=87~dF zC?Jp`=*mH{d3_DDo5RPh5O8F@`mWGV<%XB!_O&;&dT^FF)(mJLr7kP`T1b!ZQx-ED z%TtDa3*P_bMA7<#%vlUPN@1MkNY7_~#i}&N*Iy-#ct=WaEMU@;&U{G#;btGB$CA0( zpt`u`6;AuDG(G*A%i5#}IsW%`jMdY6)e6fl203WC>(vwVLkXke3*Ex?mxJ~1F26*O z&JcEy?=M4yi`rB^sX0e*@s8sGWSQjv9)t{(DD7q3u4gc4jj_5@6|j5yt}SzbXC|Dy z%`IC`X|dl1?$NzcdwKjyL;yOgdBuI=+B-T>pfn4%*vwaru>ZH#|3T`1g}8Hzi^SnG z1MB)j)B_+3o3WwGk|*&T-+0sgue4-P4;0mN^m|X&WuMLkPRD_!v;*#o|0DErWE45p z90-|c>3&d*LoZqla-LZ_WvGx6qkzpTzIS~xW_mC%{FNfcnZEB|RCik`N6t4q{Om7- zy!^PRJnFybw*MLwZRPQHRBN+7tFm5G^lv`Z)2}x%XG}1D@(KN)w$L>{cveZdG-`3P z$jSfNGXNI<`Hdrh_{?$;KjJulGUkDBoUKsus_W4W=2ZNc!*Rrx4X%f8Py|?UCF_<~ zy2Inx{{coAF9jW`28yC=dsv)5J`U}?Z5{ec(`e}N=Bk$+#vEO=-QqdGyOK<1C=$58 z|0j-N{9@srQwPLj2|2**CR%7dUi>#o(wKs_cT@!MC?KT0 zf9tKWNFU+0UH54&Wd>%q{tVa``vh%&@F&IsyqMd|&qp9ZmxbG|LO0%P+e4aDSP}4h zqKPH|&?M*4#)Fu=_6-C7$KU&shYh5Y@adu<40IfDWdJy4sCwRJ<1Kdo3n<-yOJ`}@ zf0Q?}BUBm#k#--AzhG40%MTs%mY!<2j1+y$>x9m z>&UkHsQ+i3?k*h|7^pmFWBB=>25qxB{!zb+vZ=zznOpt7SLEc(BlI&nzI1eKCo>`+ z7u&f0^OKLB8DAB((A6QI8o8OV(h|cq;wj$3@ zl?_c7$an5A&E4T@`Oo+72|l9uXwbz9@pFQ)qo`e9-v962BEj1_v8%fWlKp_XQ@W2Y z0d4>Hv4FE;(ZNoKsRgUU$}~ymLV3d-=f7}1jTbd;paw2kle3Y+5>RP=5r4{7$DyvOcd--qetxbkze;reWyo1<8vvn{Et{&VD zt)AV*bYjv6-S}twkEgVu=_@z(%A0TH<-Ri-v6jJ18DzC+gx~0$4i{{8l7!@V$Jem3 ztNuH&X^Iw!m$*gHn^{&mb_?|Uq|ezC`>jwVEw7;SDyN_Xsgu*c@}IezCf0k*dD)`i zg6n!C&I9nPijF6;^0F3ADk)+5S5_o3Wq~@NrFyJX-Ng8Ks%xWn|FQwA8e$Vd)VWk= z)zf#5ek>qFE3)#6u|$KiYY7Rn!82>tntQ%XOf|-o#?0K`x83qi@{`eZ-^CXy-f2-MI1TA?VQEgRNFH9L ztgbrec6Z&r%aQZf$*?A%hQZzke~A(Br7W9v(ju|{Vl;3F%-lWiH>3I};B4sMbRg?;(*A=BBH+Ky4wW#f~q2 zK35>$GFWkfuRxyH`wBXjCb?%DSpO55+${@D8_ z@wSMs6R*&-+cC^=8+>VGu5kvn#<)*M$z?Hr^}!{*e)%gC6g<6jphngaE4<_l7{fPP z|7L#x+l4OsXs7oE)eI=K*~PqJhmfw$yLzrN$j~~#*h(G{1tSE@*0T{vXQ40JW%-)R zlcH_lM;$jSx%MS?WqUN#F1cDR41U5gG-Xh(;CBkER*?9GUL)F`b-fdf^%q?!BRTsR zpThkVNRqX2C&DZ~MqaRWqcc6_SWD~x_N$V0i1U*iuQKAMV@Pf&)_*dp{#Vb3cn)H? z9X*#{+q?*aWXYE}Y;#Wk2kzVfE<79h%79sycr!9MS5e=t0;VV;TB*+3{}35u6NXxe z#>mRa4fL*x_TW|e`ui0zrNF^mto!;`t46A}pkGtJFWpbFP?kKooRwkr8->X`S||!Z z&83sW1^cfkoUXHiM>YYuFkj5h{oN`#T0;(P0NVjs+1dSo&6AOnvF#m8)qK2`)?ybg zDkgU7WrvM&>PyPQ+|#H2(X{VAB6^O&X`Fxa{hX%7*5i1!^NQu^ogWl)fEwkYg}35% z0R8&>Z~X$997X4EZn77>G|=9D){eXYR=fR)Xb^U6RYpekSF>2!g+F|nEq`qb1-^u` zHu5_p%`QFg(^E3G7qtw~xd`m4;|w=%yP8+>&%Vd*6Z?x+xG3pY_il84zH5KOZ=yY9 z&)W-*&i~wpjdW7IvAv4L)A%C?>qr05AsT#t)&niK$4=}Y@A$jRBoHo)y9P-UvJ}2q zS5(P;ct5t#x@qTptBC&lO$}*H+h)SpQuB%JB@gl}zdw6^?!%~=mf6&U}(b?Y?8P5CAYjfZby9nNxbt$j4(GGNRMMyuiBiqJwT595xHXm3Fh~k zhh-H{#^)OZZDd^BpV*7s^o1~L{L3ZVR}{=fOJ9KEZ6aK!=%U<{@hgphKPVy+1z>~c z-2KH49=K$ijom;r&e09}RPAknYvA*${m<5uHxg%2F5r#q5oXH9o-yt#e?Q>j{=~kG z;%YhfEO!G}Uz|5mFJ{4I=#6nknWq6v1ntz+1TM}6ZQnSw!@3T+f$7aEZKNMDPZ0)z z3z4SdK$6IPBXWi$aFL7sk^J}1ok@F2Nl7iYO1RGuZeIzy;wKE1UX_Q+0+0T9XA$YE zr{0?rZc0gIwo2mQUQ8i%G=Em?EST3P}9xJVBM` zOqD0UE3N6Sk%=s2tIkfNf@r1)4-b~F1Hl4Pqn5dwVnonq_kuOGUJ1 z$}LLU>a%*E>15QfSC%8lU!Se9THAQ8bDY(>G%I2^D0PTD*aI|~Shd_%F&~09wBjjl zNvPQ@k}dYIc5$QDB#@}kPx7DvbdW$aiVIZ*x9)tp-Hl7N6wclm>zW|e!ZjzLET2ZT zcl+25TJpon?J5Xagf_^f1Js}ix}&!Kk*b_>mUs+llt64egB@FmO(7R@{@vJ^9Gxd$t|AIEd! zO?6i>-X`*E2BK`Rauywt#&hQxKAZyn<{1+sak9z zUIGp))7YocBy<8enW-0xR+t(u;Yg)#4PK=LAVw{Tf)8?1@-ASrk(jJO0Iw8Y-!;+W z=FSgjT)FDdJ~R78i7++pMGm;xAJxfHsndol!}taJgTJ?GjE4Tc_x`BT*go72N^0l&C9uB2hj4%{pcwOaxYSF zi^sp9HobR4Gl+=bv%ODS1VrLAEdri<1{lbOH}C>>O<2*9s?~=}PbA`J5ZjbhNHH!; zNiQmy9MPX{8#|qFri2rRIabrjAMLeLyr;&2$!T?egMajGSQS#vx)amPIW&DO{TWHf zyC|)D?^icCCFTr$+x?&Jx6Grr2A6nG!G&1)VD7kloT`Q4ewFG(BSSu6q*b%eexa&^q?_8DY6{r6xhz{fSZ2U{?(*L z88G#hd0IUoO3S2Du;fmZEy2RnfvJy>j*Ld8{Ul-_mK_MpDhkJz00{9q=4VRYPH^}L zO5;McfoFC6h87n2HWK3VaqyavR5_06)TocU-u?9JwV>ueF>qBYc#Zpr6lmzCO-m$Q z?O6~<4tr0@CCMfdNW#ixhdXT)ZOL*J$w=08!a$ClA%9N05>kWM(z80rlH+S3Q!^o_ zVLMk95=jrUVC&Z!S2CxxZPgK_lnSaiR#BHK~APT0w1s-LP)Hvos z@n2qSCr$>IHSZh1MW1%l?T?6|_c7^W6A9Gy*7X5;YhP-=ku*Zvs{E$9tS#OPltjS6 z4crBv&D*DY#NuDD7cF=p#pZ&i-|SFw?erjxiA{hWu~vE7uph_C5$Xzfpo3%(uOVWR zB)rb!JWHP93x-|w7h<}DjJ0rGB+G+8RJ%bmU>6McWLAWQA78{syhKz27UWhJ{m}W* z*u>ZI3#Hx+y3tq3gQM4N@#_H|{=d=Q^=sk4hUR%e#a&LQ-C_0;BHvVLBdo6;(&-s> zf?@Zzok|aAthIGI&zJmkDC}R%b#xavM_%9L%O;UK`;lSZDhsc+7OU{6Vbrr`mVXL| ztOu=Xekyvo(;C2Lf4ZOKf`Cwbt6%=fEr2s2qVpE`?N3{B5U|7VkCLNG|79pP6sYJa zg4e%{)`r@+YgQ*a2Y46&zui{^hH~GSmY~x7JTbAyGhWepx}G&x?#P&~aQqMZ8gS>% zcf!q0L*s_jx#0tEwUSy))KJlXzvXG6h)Uv9iyv0p>+#aWqrqc;GvogwpTf}HgVs5e zRv)415Z|FdaT|Nnyr+Po@@am-)8Tdq$Kgzn`2L1#4Z1QfDGHuEFKzs9-0`}!&QULB zf6SQ5jA3(JMa+6wsDX42{?lxCkLT2$Vp3vZVS}y839*tu98j)~@_j8lO#OB*{vzWY zPY3#awfkasjGG1XbLU5Lnp3T_g<*^6x~_!m9|X?DauqFH1wI;E{0A!REKFDZkXn-J z?&2>I{?vQBvg%x%g!}LDFYJ0#cL?jS*v5764Av&5<`wlA(AwCZ&&38kX;lru!pW-S zpD{67a^_<3&o-x46SuagosHIaaF7#ch`#T%7@WX!9Z)x+uwSi`+>}m;J{r1K9|m1V zYzw@}XAH*be4X_)IT^^fsp=Du58Jq2YEXyzDggnbMFL! zbabR2jhs~vmn^s-al&M}lNY+ndrn4B1bIaq?dh`B&%!7;6Ta1@U%OIZ19r9AeT&#L zqdDhzE$vWJhkp-YB#I&lk^Y>5>3J(PXT?H}VOie-#);0J|Kl430InCwH z7P>EgV43=QzUgJ*UQ~FcmSp<4>}!sFSWKm$Vo>Y1v*pG#eP5hkb$=q?M1MCb%#scb zEm@8j?2LLw;BYV?gFE`kB}Ol0DEx>FV=nmCJ0B9b2j;#A z9?=7JHd~PCR?eW4a*T0W71-abngAo%!>txll(b*b-5m(0TPtS2s7TGl46>E#BoZ#= zj456M1YD{+jTKxp$E<9hovRKG0d1q)p+neg_--LPXs_C2#}MuPD` z|5WH@>jP=L?|#q4Zs*9km#zgGJhjFXJZUD=>gXPE1yfIhtl87eV#Ii_7jRG&%hE!F z8;p#3&Imcj(03hi1fq1)3^Kz)51F}hWI5es40d28F+oiuOq1?tdCCHl==vEE?I*-c z!xk=>%Z(O$X@RPjJ066N5lw~ME-@X}ycn&ygco7jx*VF%H3v*!76p$LI7H z3YN{=adQFoi{`5iVZf=$p>?yyL!?BOb(Wwe=z>%rs8dQ1vP03|uhf8-);aM5^M~PB>80{h~2A|Z{!6?kcoqBhu z@es!?{4g@CaoH8dzoF%aYMZ+1hO$!*{6$_VhaOhfUms*C+HTWzx4O+}_j3!0xzC;7 z&4`IYa+=iPqz54q(*uP=CN_OxF2#gCNzXghL2Vec)2=t^Pe<@6QXeiRY_J0L3ROFl zapbnvZit_|u!cCol{$Yr>Xr8@2eVXN!AtVGt_MSBJyE!gU8Qu!ow6Ij$XaGzCyKSN zd3qseAzmE0Z5r&!J}9OdCPRGJ1oEbd1+`AKr+TgMe0Bv^n>rI;8DR_L4jk=`TCJ={ zg!OX;Zd}*?0C-XlxwcwW225%9EIRB4nNP*cl@?nY>JM-BVqBWlN|i~N(r+a9L7PM5 zIwpz?NCx?MEVQg}F@O#+m^k&q0IF7UYr3M+`GX%gQf54`B%p33)c;&YVy|_j$~3%>xNaz~gf@<^$`y!R8Cj zL#WjOasA$)jzCg{3&m*EO^Bgx%&PECYKZdhfB6CG7CmqG>O3lN^a^_y`Dp#}6Es!( zc$YR4T$hbV^22#dyt)vNv30my?>i>F5N6}yx5LLd@S-<)6q9w{5!>~8IBQeVs?BK< z>Yh*P>sWpAebvZAr*nGRzK=NVN^5KYf#@<;4wQ>80YG29BJ*cAYZM;Qhp{56= zJ%(SziALItHVb~6@xcyS0aLcw44X;{K4adlQVrG}G$Ri;jngVH0#558JxIH!O|{Hdxmd z8b6}Zjlt1!3n$J!?`*yrh+3f#*TE;&1)@mMna|DpjeFiVy@e19shhWfOSpru(OS8)bj(WNW#_41D;@fT;P6cX94(TgNq*B@{E&~!LN4w>1S zsCL#r#H-cIQ+<8M&+(>=8SM`6+V6a`;kRxpMnc71qhs=l$>h&fhjPQ!k!z z^rArLvjthNf2F6rP`q75Ov|wfq9yy&$Tkfp)9UIc(gE#gnBj>kem2*@@)Z%|I<1xt z2KSgQoG2s{5#;ufiZe;>6IMO#?@w?9^A3mrZ3RCyn3v|TLvwGE85j%2)We(uMu+KO z_=IF^n(Xz4Az4g-yTD~m5YUF{nAg{asOJ=yT0>6-PF(Ywlfo?EP_R^LF$hJsUxoG* zYRTPMO|aruLb6`3-pWpmZk7ZKR zP`iiU34YmV$BgCDQx;P{lP=c&?c3c!r1C|~bfUoYmrVs~XEpY<$PIda>yEv4N3_u; z3(=uIQV%+mkUZa%*U@T*g*y)qd8(%vNhW>(%M3$qc=*+yGTL8#2OigJ2^>LELsBQ= zyswuzhIhRtKvl#QDx<`bOq7OjTKlOUNj=cw!oF9JyfC=UT=JdgZJ6O%>-}!n`%2vo>`F0Gxw`5pKb)3U*uH;x7X6fnK+#eN~rm zMYE}7h{Ldg*oP;T+_%$qUBghdnH7?lQs@xnG}p|JG9R%En-e5EL?I^mn~$5*?d9ml zVy_uv3X(EA=jivGIdfL)zfJgog6Q0FGkM#%cvCkC#bz;Q8rBn;!Xgcf)KrC>r=gsQ z&KXI0Y^nAjAExK?Y+qSIeDiMs@Uxlj>$Mf_WPX4la(86J^=0P|RJDl~iixLBJ8UB9 zwDI+<%7tCGS?LDur>lJ(NTJ=mu1`l+mWTjvMNatoC-f!v7kn)l&5sd$re(rHAV-}Y zhlGdg;*BzrAfu~aMoRI8c&qLp)_5@slAW{QKBSAC=KPW!^vAM&f>xqhEyaoppBA*F zI4`U(sSYe^4QZA1?XO#~W7$kID8CQ0!mF>&=cpI6;>^{EJf)tG z&D>Gt_T!GW`1!=~b(7V)MIu~XOPhUlSyXZE`fy%v!@CdJM0LiHX@Od$X8b+P<_wvH z2cqz8eZJ%RGu89~hjYW6n2;ls%FZwg_~S3!+VS?4r%>u!ZbRQlL6Un2RR1HfSgVM3 zx`ElWs`nj-c7{m@Y|X+;UDvOEZl*#lrb{TMVD1pdhsP@n!$2zU*nOB9e9b@|-2qe1 z;PnQCi%=wVZvH8atnOH}K}l!9{+zA8H@}&=)DLY_(W3XXfB#|@x>jcsHM?rJBQ8+u zLUs@N+M7eq@=h1#E(XsZ3Rnv*jnR^*nwF2;b}c!1!4;x+1~ZeWiqDJo`$kt<+%x}>K)?PFX|ua(YG4%d}TM4@2XfmZH5 z(gh5Oseax4DYz&oE> zSgdRCr6Vd-R$EJ4MP1!tR+MYe4w3f{{)`x;sIvB6HOtsEV0SgwNz|P20urJwW)D6U zR}2K9YyX_~;}+wWc32N=8)VW8-rBG}j5^)9b7z~~Pa--$4!HV(E;*Pz@Y!*705@I? zXIRP>N#+5aoc}X)0Ia+o9eAiEH`m~J%FOa;>A8a<_uDtXq#p>A-_}zXEj?(kLRAP9 z3T+Q6-6Znf?GJz;sszAdxPD_esHU=|OH%A>&k5O>XsDu=U=i2OH5Y2hHZv9073a{r z0n(?I_HAIfGSG8w#QUM7HVTFxx z*F2y1j-8p&7^HW%&5leSGSJ@}60V(4H^gAe56Nsq(k7_oKs3b9B16c=x z_X*E;4hb&{920cYxt`B+WE1MjwF_Y3dQYrfpSFf_u4%$^t^x@H08O%tV!G)IwV}7^ z9)6O^^#`8{hH$>S&Dg409|x<=6%wi!N#iQ?z*w|zs2^vGTXe18=sVv5q-Ca70GDcs z+FKm01?rPTD&HKSWDaC*tkj;n^W&_DQ{-~qt#^`iZ;}k5Q&q10}0wc z$Xf{N%C3$@pE?#GW*Jv@#=e(S4juXtiQK#q`R>83%gMC#HKiC>@KLyDabj}f{u2!> z7Hf?+9DqwN-k?-`e;oOUEWYm5oZm~)5m-~!2F+|Z&4*2Li5UWQRPJyZN%MrP}J z7DYROt&a~9r-x^g&P>n^aMyuS^`)w9W9F(K1Cafy>_iuHX%Wqkr_tLjM#Yb{F9vnD!vzK zKxmbd)?H@3)p~bp2fGShMR-Z*=k;8xKf7i*`Mv9J?T3BqC8L zF;nE~1eOGo%FN7Mz7e2ABgKHbq3?n!Z#mLQh@qh&p4tarJg}QebI-`2OSe z4EB{jo$8N+qE|(n$_b3*ou_OpKhO%^-pV-dCz+Lj9MIbk|M}EEgDH>E2Qwb{?YKmc zGx%&C#ShRbKh@oPTfNC)X11f)q5=}4CnLJhqm1_%NI0-+b_ zkkBDS2<6Rrp8Gzx=lS`K@x5h_!N^Vq*?X_Kt~J-3^O{#;v^AAT?=s%KapMN5in5~a zjT^W1Z`{C}A|k|nlAY~WhI_f`p{w-bM%6I$Htr3+t-OZ(jT_KJ;tNXx-1|Fkm5n@Z z+#rMf^>-8Q3bwv+&3%3+0n>%+VI57Y69?%;o-P*(1bnCDMM zsSABqr^3pN)bT$H7}-&ILcewzT!|LUlnyxEnenik-w({)yuL~KkHg3+UsdtX;~qX9 z;K83q;eC2A)jz&N&@Go5{pZ0!Ld0)bN3>ur>aK~s?cvE$f5O&#-$8q`FwwVG{zuS)BWc}V}j_FUW96(zS<<{sFv&G9y~2A?DM};sY?uefRuJG#0A?g@dn$8g#;e=&p2ZI_k6$8h z0HNMCBlwWw@;?7+J=ll`3wRc~XTK^DUh_4h^!5EvNQ$eNh$ZDis90~M*+aoU0a`eE z;+vn9ZW1FMaQ6VcNT{cLzG3qH_bR?eK9?GwN$rV1<18}CyO06V;QULuEBy)RK-jUm zQJd>SZ^ql*)`RUD&YZMOWm`;xPovNEw~a@*N6s;uVu&KGd(bfV^2e*dBv#}ZfoGBq z{prEmK}N{Z>#{w3NF*b5thGXZ2Hi1;)wo%G=;rio9^P9EE(1benr#pth2I_-aO?@l0pv3doc}TZo@HA} za>Bz&Cx0d5VUb6cKM8keC zw(Rt)#=%y;Kcp=4u^m8amfDaLF@gsQ+@3<@7e>oIzqorE2K_Oy2YVo=@A+RN$$DWD zt9$x`OPja1b(3_VEOr9wIU=LY@?P*+{jZ}-#p$GYUxkn2FTGunC_?-%g(-9N%}&uG zox%QK^=g9UC~|#C?sBxX&obOF8k%b+n7~)aPJ7i1#>;ut3jb>pYg@pV%AD}u zk%gXv`Xq?(%mWVftTIBApQ~|Zp$q%JNEo%vI6@r~1xZAic(iwi2q?f=k%Nf6%^f_z z^^_{OAm1PuF5tNR7KQG#^)QqP(q?}ysF^i_r33K%S22~%=YM6p$H~>wLnXQwQruzes()Cf}Ps-we0uW z)@~s@c}Al?cYMSH*!V8Q@@QAizgH>Qo4AUekhIsJvDphFYt5~ueQJ*>5R_h|$WkLMgDGbwa&Q;#zaKR!se8c($SQ zL7vSsM+E+EBMACH&x8YE`!M*-Gp?(ti@kX}vA>k|+Z*BPvgP27*)_CF%AToRmWh!2 zypt2RwxOt-_;O9wRo#$)*6Pgrh}J#)aNF-mjImqrAhU4FM9sch#ivf)w*afhM}ell zK;>HSR&kJqyjf2NwE#CC3)y3VWXp8lU{==mM7!rT2lDg~*W=|fpkawq*)bMbCWkOb zzA)c}f>oH-(FAgXqA%m&1lp56RXr z^uvXqy0%b=_}AP7XFlha3#kk-B3NPi!-B6!4FpXWoT_61lbOU2F1R=~hhI@Xk@n}# z^SBg#3la11x`O0P@^{+LMR9$b4y;S9P!#0#ewCPg>+8uBTZ3O;w2m}Tysw+}TB`c? zCid8$_gShSeht7of?D~R@8oULo%A2P>~ayIO35FNuU~%{#GV6)NbF_2wy5u?3r_G` ziu4*$B3RU%q=1qy9+YxN3hdk>(?8Z&&NFAYrK6YcAoluZ;tzIK48_v!EeBJQ+Icgt z*NhUvl5N!CeOtlpD1CE1S+CTbgqb}2P%H;qH3DV<)bD9mc)*N7 zie$N?qMrli6>8S>r|UbEC=Eqs)2(W-ZzD%k1$Hsz?Ncc9mDJbmT7d( za+5Cb@z68;`<5{1&~(IXQnZo3uaH|ZS#W}4>~~bBJOivCQ^a}MNGvK8BI%Y}M(wfH^H`O>(HSA7{^5u>oyH+Q zt8sLSLHv!*gCobCnsl3o!AVjHI#!ZL=mJu>!%o%n9~}(1u)`}r)-xZ;CZOaxWj zFT~hF{JkSE=PtJ)eHJIn>yc+9=)Eo|{TBim|J(WBD1cdMu$X$qAUh*GxVK_J_|KUd zhH6m)sY}7&mgWxcRO`gg`DRbKdfxK+b@Bt_7X3tE=?=q2`3~^b(uUm+j9iV*fkRtw zA6)q@p$iBgeQ$>!WO!g%qK3cen%SaGaDx|}sIH(S?sdB}S%9Rf=7b4d(i0Ht^Dk<;3`JQMFK@tX@H;m^Ku7;t>kWUBd{A z`5B;yY8M+!;ES$dcP@19Iq<;N+O%s>uAF$2OItX?xX+I#=+-w$v(Z(XK)&1T{t7qe zbEHp+IdQHtVe7sEjgk~gY+#q=hg7+S`-BhM2TwEytMCvNKaOjhJVbVmGE4{{i@(mC z@Bs2NF864QkX=|8OwhoI#ApUdc_(tF82p2=+arq_4iTIcS9IX4H8p3D&*UuMj7xjjb^u+7ti!;qO-)b zE*B&Xxhy`H5j=^sc~W)j5u8`)L=Q&EP*91gbRmQk;D<w!J$5*{qBNP zPeZ{gDuVpmXlV)P5VBiSd@tI0dfB4?PrRtKKEeZllx&McCQ4;OkVN9wpdU}vb*rXc zJSxJz;8d7`6vD{nE|Q{08%qsB6lItrlwH5NC)`3L+^S$Gt$gY*1R36_BKb*92_~G` zo56>C!o?$fz6uH*=b)ZIrk%b6$^Wv2^gZwfie>alxQC*U5hku9q%Ay5$24h<8VZ!9 zw9g@ca7K!UubX!EUEWLN@1FDHz`701g^eJA@^? zk)abymXUno! ztoZJ2=FgMcVpPPsB4?y$ZDs-S=c&{1_xYg^OBX$z0YTwCTkDjva`)-6^^Q9G2-p4?d456S^m|gu#sFSky?yu>;m#6xqkd zcN*q9{2KlMySM+bb!9r;-tc{G&hX@RnH+$etM~X#tl;~C*bcP%EvPay6LIv0v&@^Tmd?u#ByLldWi8tXv-^f(LYi z`EJ+T=Y$6Hrw~DPQPT8^v@0c|vlVfA2`_P~yY&w@RpD8F$(0I-cVn0(DJ{o?PdAUA z0M~l{SoNMst=4z|Y~*+2uY$DPR`oT#T<`AWMG52l{O^T(SDv(mUPT~i)0djtc!+lb zUgBdf>@*tY(k#ZncQRF=VY|VD}hi5Q{%c|KONSYu~1}s_aY&_tQ`yd;Po>Z>g&-*@A4tM5xvN=$hNWt@EQ+P8aNmi;&Feee)_GOz!f-%+#LP>3Ks<7o{eGpR{d zr5UGhn^sgTszIP9{9S0lk z@@n$}Hb2H^#q~-O{~GnFS&TGVBmNV2SX2YZpYdYaXpL#sb*(uO_2tu@)WY=k$w&)nI`}q*B>@; z!VH4;%-ncRG^dIl(_0eprGCibeZ8u=B*8B8s&1bFd`=2y>X4pu4d~3Om%luYekTB! z9Cw>#)3U2(cW#j>trfqIW=or%?r@+4zj8R9^KO;-PpyN}jEiqU4k76Zsouys;#rb{ z_;25gPZW<6Gz=jL&?o=q|3sTNzJVw*ELAZ3m}vtsR|zJ9)(tzzwhglH4KjHWPDaCn zSdt3xA$vW3ldxZm4n6J)H9Xe5O<8K=2N#~F^MB<}k#T(q>wk^CG!)Wy1C=WpRc4vU zrUQU_LcmH!lycwbN=*fd^=)n~=TG&y}1}cOdCUw`g#$ z3M{tm-52JW5UUlj480bl6ZXsv$w0o^9`@T9)_2PrTuHM~d~ccAzI*I8@Ugemr9)(- zaAHb9Bu&}@SQRl@f=!6~7QF>5LP#dnye)EV0gz_CGa6x41OcB6I^h3w&LAi5UlqR@FXEU z`|~lDDskj>TKs#(UGXie&&bQC55%X)+I%X0jrPxNlos7zS_zhD8~zZIj~t$TZ*+CD zgNMPX#Ic~-9PS2OyRVoPxe2%ylZ*Vay5BHu01SyUx7iZ{yqJ22jsI5BF&i}b)GBnT zX2_lBmvbr-A*+~=oR(Q=4~+bA-mx*zcel$j-sZc@eEo21yT&mx@^=)WL8wD%@1F(C zEnS#g>JYBpAu`-DYg2sx`qmvce#M(C5Eg<^m@;|h2d|dMtx;Fa`FCUCeFGX9)_09x ze&4f~&Om&xGP^E_fGJtYf4KI)^7wszYl^K%0l_~ZJVM~K_9{5eFQk2;*#K@>ZdtNi z!0=}oRmaYsM>|L6uv#_We_tbUd4!xFN}|+e@-wlMG`$YccKckOKB|Yb>>`T($(MI> z0HGmaNl%EMotfEHMQ7xFb^Lwg)AUzk2nRhUV6NPt?AxMN0o zq{q8adf6?eW4tyc?Wj^=ND(OQqai}o8y9&$y7uC4`Pd-YHat3umP0ib(*>c|df9$mn3I_*_2q4{IePaMn>N?0E z)j{nd)#?X5x^aPX{BkF!k}oeA%=?i_P>qj?ntM-vY~L1Fgc#%s>Iz3>0Agl$`>Zr5 z|H(!a4lWqsLyUcAD#yY#%<~->KKbM6l*M|b$_Y;d>EP)`nBR9K(?DY{ZsGw9Z+`MA zxxZ9wCSz`@IqkUfwz*-D#bvFuC||!T5ZWx4P&#Kx2Oq!V6V;f{eFc|QJXL3M%Jkl) z`e`%dtYn}n!d%d~$gDkdY^M5>$ExD$G3fVfE5Ph^ z+ca4mY(Ldy&lXdhoOt{v!MYcQ%Y)LEOCgdh5NT>K@&!s8kPVXq+-a&$UR5o=_x^3I zI1BNE5jQ)gTbC{47+9xet$+3gL*jAouWw?xNJluunosxj@2FSpui+7(F~YXfSvAE@ zg*H`)y5Z|6qrUtSArqrC(*tQe3RxHE0zP!%y?VeFdu=}c2)bY=mg!98Nbn8p9$Q;Z zzgE(qUJnT4tQ09fnW(p6KKB42-=8PEO!$7x$*7CBUVOgrk$lc zz6qyqkIpjbWJdPM-;rD=*j)$XUyBY8CE38TULN`WfUN*lF6{&PSXP!Q*^ym>0|84V zy!%50o;)wGLwAol(YmtLsUrhI&N_yzXUv|lz9VzbsC%!Td>Hvbu}J;*-t0NE<()rk z)bFc_hbRQbC806~9ti9Xh?D4}(HbN_!TGZ}62%ZQ(YLQM&mK=lbY+ntCbkGQs z-|4dueaB*CVkPKfmD1YT%Vvvzm&9{t&K6|Xyc`TW2L(EX`r9C1C=S?^$hK3YfS#oJ zxaSGQnKcDUyix?ukzQp_Q_AYJxvrj`jL=_y$ap6_yXRHrPW{9_@yChZtj;^(V0ggR z@#l}OL?Xwar}w}4UXpxfA36%EI-eT#iy=C%|Bhv`b!&sCKh(g!<&ICSULG|+W+!%+ ziqec%=v)p*B-P@tDrqPMa=^vha%)M)J-AsxfhWpw<|&0NQD3J_w=8q1?;O`pH9@~A zSs9hIj-Lm(wX^z1QfZpY!5`F*@Wg`bRuqp4@6b~^2b2166>Z+9^jOEjuP>MGD4n~< zO)Vb#d!6V0y~qm(RYmatOB8JbDiapnq2_0rfrPS|OGXS@)BXx-yNYGOx=nSudrLwe z(dB}5f@(8e`_y2E(6G6fu@sz2L-$?v|~Mk*W81 zf_=pzrKOZfuZEv!d)b0|o3H34JgAR)FC_+?jGLCMd#3tn>W7+YmF;@d#X=P*whZ_Tqfil+UG%QuvSgi=kDM-3Q{ zp7FsXgK9nxx|tf^7XExm6s8?>HL?%g%9KO%ygy>z3K64p&quy@ev@((_}K8nNV5Og z*#nG8`%~Qpz~B7pR_$b^9D@Ee*HfJa>d#lpCBcQ`*R}g=kR=shkYtHPuY=ifcA2~1 zuONE-Y+us(67lDVYI0hzw+uemCc5NyOQJ(}`lHRq(jxxYWeJ(Be5wVR!d2&gT9b^oIX{Se=pWt!_@2ZXyQS2i*#s`j zVB&>Qz(5+tR?Tc0Q7nyTAj&eY;g?bpERJJs&oE}3R0a&JTEFkd9eT^DAXgdKK+op2 zLP%moyv-wO64noSaCA&BGyoAf*7JCA57r+8?ce`srrYTpFR+`eZ4V1`b7(5{H-{=8 zJDSwa(fYF)_JAWY(DfG!7sdiC9%tDVs{7APzb^?aTrdxyNzF`a@eoX=Y4+81nZ~gY zDh`rwMKM-weU_3o%K1@o1u|?a!N;qC*h1E4&NSaAj5cI1ylq?Ss;(BF<39^#alV2J z_;m&jM}mw>{Ec+mynhUaLH#w`nOA;)m{ME25UcozMcC(a;n>FyffeV+<9DK{-jaR` zYo=cp7j{uvDBYgkV39D8jy#t@u0CtulhB>8m|!>xKj= zejmZnex(toIh}i{2mY)p$s{Pngx(cJ*ye}z&h116sr1>~<*e`dHFf#R&C*~U3#|j2 z07zgp_S;c(0AfTBEn+-+9hiM;YRp{DmyrC;M(;I~Wzveb{Ki=d)?xPcr3?!vP{e3y z^C~(8`(=Xa(IARHAM|q@3*+ub{ZPZ2PO|0QLkjxhNP%+@Ri0V$$y-^Ki#eL&pw~(y zx~^?oH)^eVx?)x^TR)6<=93a^zVvu$owZhI-Rc?nn4^3t_{5*p;L(8e z=&dq#9ePIA2$g4>mU|mc#f}0(R*wqP;oXfk;w2n80iDUa18yImUaULQ_F66!eqSum zyG(4@Z#gD)m9Tol)7Z<~?c1{O_OST{gMltrG$n?6&m*__a`-QbU?I1uZI~iMDK0C) z#?1|Qkun?fIO?_j)Lk2v^3^iwrX#lj&@)%o5<3hVo!&?226u2THInmR4 zO&s(Gd!baQ*iE}Q``;>u68_V_=^GM;bOig;=~5FA-=mj!LXbBLMMz2(p^V65b{A?& zVTL*q_zn`)$?w=KuUc57m$Fe@=2 zL7!@BBc=^@V=P{bWisMSV>NYk^V+{&%s~FM_tEs*al+Fc`eT{)JdT9I(~B5*Cr|Oc zV$MOt$ad7z*r55M&Nn!OQ(jzJT3`AfA9l%{fbKhP^~_kcT(wkoyuszydvQ>t#{sxK z$JdmpHuZ*A=!K{naVui#;y(0xa$lvx!|*z;!M`2J<_x?Ry!UT3Q<@pK(tshBMaBav zFE4vG$nSxXH%nXhfKb`OdM_TWx7eJ()5XQNg>$mch3^vSqqUdMa6JK6gALSumO4Nu zdK$ns&#~l9wo&I20-nxM1#&u4_D{ppFG0`PZhN&IDMG8upZv0hUdIGTKgzH?Ca~F7 zOBo%hui);x#MQn%!nfI>u zl}D0)VydY1y}>l_fxomoZ6nGG7mK@cFr`g#TRYd}Bz_4O2l&z#9>(ziYAnA}<7 zi)@Jh!HN?3gZP|ZELK<{yPwxLUP#jBkSpzgX!4Z@*m(Nk;P#OE%UUA+OGj|_)7o*E z6^TRdOB`2tFr36FNR&i*DcBn#W-hHi1+IR1*}M&RyG6TS-~GhlvuMw~>QYsk$7+jw zzUzl}IkV>hDnu6-#Ft*KfgM}RRTwvH2<`So8dlaEd8J;%yf}N_f)0^3Zr=#ojn&~m z5#7Y*cgV!=^R5fhM^$#dONc=4UKlYePU#XRHXg$UI$p3Amu7np@EK{yLv>53cYl_=4?RJH?;5 zM{rc~4Jnr4t-DnJ9e-g=8;+is$>pdLa2MOz580N%S@yeTF&lxf^4-XCD`fUg4AP7AgVEH{o3mSz;T` zd>*pq#P!x5Pam}EZPcFxEFuJa9~s=UlTSNpuD_v1CS2}W`2j0HGB>-s`A}KA;3G@* zQL6>}%NymJy3EAR&AJ^E?8>~kvi!W!B)?&|a2(&7^TejsuGq0xq{&jE)>n@QEj`E1 zcdhC#g=7eK(aXEqyo0Y^%u5N^GdD0B9r>leJ~8f@kX2SjNiWKJjwUqhAFFXh_x>iD zdCVnQ&|nFPiiVfs7tD74?qEYq6$a0rtlCxeyVX(VaWBoCQ&jjfL|Ubq5)26ZJpVXj zsnFxy@Ko~Pc%SDr=2M8>KE|kMT$1Qg_DlPms#zhy*GoaCBdQ)-ucO2(~w z_V|euE|R@oJd3L&=-lkR9J~w)PClKj1?4bH%unkC-DDxYp7Xj6;yyDANrT`2C5V5S zJtoV&7L;{O`uyn1GTNTQ+}ZpDlYT0(>lEzyZ`?d+^~CLn!h{)%$>5_}?=ju3;p?KR z{hm_qPm^y0BD}*Um@9s3UT~uvo+{h^_&M2d*YhM9T(ax=g9&2nT*t(N2j~b8auRWp z4+BOB=|f0h^@E?dDT%GYw1UjZg$?35Y*V)wBCb_j0o$bxx93Jn(=5zXZ|<1HJ)J|Z zIxLR7qaM5J4)yM^$w#ti)_d&rL?Bfz;kKY3!%itBd`)}N&!t&A@Fw`PcRX3xfB70` zPdABey9ED0HbKesVH@A)wyW(uEGSg-At^!=rM-vg64}bJpQBWaYaE#009`^dpyT>S zge4CB<#}6L8BblX2kwvhDJI{>4I|HpX!Y+!ue+N>zN>UJ7%BD@p$4hLm07|jR?hUq zdZF4;fvk000$<0%pNLnK9%U=?Db{+ERPMv!N8&&80tUwtDqsG3SZ3yFoX;KgSa`mP z`P&>;+!`<-I2K8aiPQ)So=@d-yCf%$gDXqAEPg~BWEn(0Jk6svX6c-2a-9_@zv^++ zBQI&Mu6sAqRTsE`CC_A9^M$}F2d3KmXWUKD+d$C~(V~_sMyRRiFSOlZ*6|$O;MB*( z?S+?{g$S9gyoIFI5=Vu@S1}`|Fay4P&~ixIUWcm}?VNNhh~j`A*FUv#l_JYQRqPXn z{XW$wtUo__?a&Zldf}+Eb&L)kpG~HiQEU1t%ld;Vh)3E13W?j^ys$ZXk=iFN_eDLdi{k4kYuKQXb zEWX}PMuFvMR77uaU%v-sTZX6UZz9FI|F+ZLj%h&R)Ahgohb$S+e@K;XfQpBez^*2; z^0GHkB(UNvbK=>c+v1`81k54SqGPn*u@jO4>)OeE;=aPOA3H&BhWm&VGAbfJBvZ0T z_j~?@ff}(l9MeU^ec2r? zY=v&2e829Yn^{Scj4Br!`oxk>KGN5k!-KmJtZlkL&X~Ny3|0E427yj-1OQznOgRai!t< zOc~J>%gWxPf)UpvQchQWT;In)&{GJulGN-!eI4nYI9A7@o;us%ETZ_;BKktJ3OT6J z{UNvz&{eJbXoqGBi5j3TF2U|rNX$HyCl718Ycem1aA~r*S;*QMpIP9&1zr%g$}Dr# zlAU3tkLH9=z73m%`ayuMVjFur+EHYH0ei7fM;hgr)hBqJ2T))(@ZDee`%ekxj;Hy0 zbP$hjvdj-QCQdcmu%r(*i<F|$d%l~&IkkapRF8fHnRZBt3fAilIDBM^*lKo4 z*_f@d&<|Oc351&kNLl3^#;)`PIl*f;5qk>eqHj1*;34?4CRD5Uy$Y#&IPxtT+! zE3LwxCM`pb@}8}6Zt>S${N3siy;{aYjq0&Y`wZr0?X$NiqgRl8%ORV&)EJNzcv%Iy)~CGsR?9Qfux}W7y1(U4E^MH@1%@ z3|w$!GO0w9u=n$SsSRbSRPnI0G4drvs?^xS~7(z<@6ao75Dt@a_s zo;+zG83N+3W^6B?Em^kb5pMy1hrBTwH+O~gZib)Bj19Ji3!i{S?eifcy^P{4D51Kf zY|c~dJX@oHd3$06CNg-w-GdsF7uTW|k9F7?n_LV}Br}w08+s`6cgpv(cqiaCE#3v)k#jcXT}jz_)FKEy0~Gqs~Kp6)uE??6)Da%u(+B8s*gei@RGi;#A4B zGujRkn~=PWgrgtvkYstI=4n@H4iCFyVa6s-ZmV09969f3L(_jvbD!#of9IQGi6M{# zrSeHHd8{bTy6>(*8#`?BhV?Wl0<@G(vg;#ptRDI!uq9`@k@t7m$&JMW4SnBxB^9&p zdxgM<~c54D)Fzv~o840Dh;F~=~4)C^!r<-0He2+%Zf!)dYe$iG9 zXilAXKAA?C3ALDR*?iXUxy!Ou!l|zF^%{^z4e^@U-8^Mey(9i1K*~1poHftAU4%Yz ztDXdnW;cJCDN!0IUoNp<{$yek_WS%u@=f>Rb?wB|r(TpS2$$|j9=%Rfrs#FAjE2m?xW4~#$lu@Rx zXEVvI?Fz0ZRYIAZ{?)*mtnS2_b0nFWFCca4^1~(CTYFHJ!fzIHrQ7C&XTI-mw`Eo` zQox;N)WsUeydAu6d1xA+;d&gbnR#lM+%<5};sh=@u3xt0F9I!NGHoi$F?zpHf)gN% zKyzGVD}6sz*o~!AHCb%iMRk49f2*EW@EP@V$; zqshL8wLc!TM$gSXo@%b{&!1c{?(_e<#Vr3PiN3#q^6@q&7n zJzFYtp46{*Ot1LvRrSIo%UehF^W8+?n<{p@>d~rnE}0tOQ{T+SkehD84f)OaB-fYw zAxS<+l1A6rN__|2NcW(Z_QFU9#+0S-SxF{K%jE?=X*odHlz2?%67OWH&0W*ppadfT z#0JVHpXow+rOGGXOQwtR&)uYB!W zfbabJsi6?gq0}i{^Jb@WQ}t@OUGTirM=fXXYD!*h$3kF?Ncg@eTQ|tR4 zXS%=sVT^0nASWrOB!}Rm(8&q81aI2+j~?n3(^oqQC8G1{20N}k(ylneIr>#n&!3#9lZ&Ei*26d}`!K}dw~eiaD zFkdN0x3y2%mgJ1NAQ*(#o)e~p+K}+X->mR9nJIH1QF`oWgt8D8#IL^Naj_3KE%`MO zf^D_HDEtYCiI`(LurYq}BGSFzT%pOa)T|;nWjXlrn_jsb;*%+VO2RZT>@OLX3RX8& zzzf}$2l^4fR1^Hez$tDap@Cb(ay?|_V10AR0yA}cbQU@3g2;672A_My`73BKIQdVZ z96pDIC^^)S0dhFCcct(}d}{t_|5lDoZ9vp7#4SyRPsWw5J3^_LV$()4&D1J@vzb?0 z=U@SVBXozn6uKBXUvZ0BV_0z>$qT$3_TO0yreO79>cs9z7VV6DeahxUMUxmFkjQ~D zNSkXg!PIm>H@@oM(MK-_+7O|L#Zqk|?@tOHNX5z_p39cM^6n7&Q%m%qu*%ev1=7hL z5XAB&6t{nS(k^C!aN+iZYz1X+$DQlg+Xsf&kBdC8pfj| za|=>hm=H~-cSO)OC6<18o1&>0&Zcq1+b#!&R#VA4`sLK?-x;u^5ft~)u zlYLHo&^7AW200_Q2w*1-TL?v>Ytugb@XL&qQL(r4ebBG63m3#=NJPd>d2kHlTdpZo zcPUi@;qVv68WxbY!(DwFA8yHiG=FT(i}ABSROykV-0|Ju-kMh949NTZ9PfCC3{l8RIWV>~Lb2gHGgGosVAS0<0u&Cc>h4s7N{ z2M)eoUsksSAo4=;87UMQU#MTBQs=k|P)?72N0bUpq)ZtRd@kAT-;G6|2u$1qpZk*e_1#X+H86E2QG zrFE1wV1J}59KfVG?Hh1;rRW!Ks1OBVT}00PLwuyDSn#_$>Oz>jiQDM*7Y7Ol68Xyr zS}@nmD$$eY_+_y&2N7)s-PC_xsj!QIVf{;YKb2H( zZpW)o2U~gTQB>-%PGz$G{sTZ`S=1N*^fK0xC;keE{g>p%9k3fH`Kp5Qf2c({qS+c1 zgeNRL(a7f&B)r-Hdj;$VXF|f(FrTi-{2*6Rj7~MN05G+{0a>tW=j^uX>0KZyC;cfU zbYG%V;gtg|gv+76A^aI3B#mUDAatSV6Nw69-2rZIkx|A+hk6v_%&<2&Wi)GKG+*kI z7lvP|3U+L${?k<{%52(`0nQ7ACxrd+5YPM`&+7iU+dM#${Ilug!T&)CtYXtGz(_?o zaI@y`kmawFt#9At(6=D9wW_qSy;e{l&;NWu;{iCt*7*M>BmO%1-zT~Ke?Ch2LkWOG z&j0J0=x7gCaAQM5w@dX)BcsQE1LiJt&ByM{EbHIM8m{)h$swubj;yuq?H>;emfzB( z`WspmUq3D7tmFP)QsLkF@WNwMHX-Dw8i}Ts{~Lhi0gt=X2KOiaz2H2raME8uF20p5 z*S~M<X227dF5oE)b<|PP(pDjy9@)hP#JOQTsCsXSs`~JC7lGfB(4?~Pwqrd5I^^C_SNY@TY)mqI@ztkZ z^rFOx$Sa4Ztlz%v!Iyl172_&2xznLGU0rOJ%U_^7AJG!FhG*00^W-hmLetxmpd-?q z0ZNSDeM0^p3(*r*FXpYF@x}WVb&s(fGOA4J!s)mFRtXoRgOsB|~6e@mmraWLdSuHnlK$G&Y0 zU4mfw-FliIW3)&tQ$l~l_N?x+B@h*ANb6^sF?T!*%1o3ekZ00&Uxc#mWW8V_18Dx% zkw~p>O%09{+J5MzU)`1Dg_^&d-TfCZ`Sj>a^Nrj5%eQ+p1|L4-nUZW%h1KG$5o*uG zTQ$XHOI)(xC>3+x;Y3pTuCVevhLH97;^`t?{lQUy!K4dMz-jQ3H;fIYmRDS$?fo%W zfFT^cuJ9BzlMske9ZKGSAwkE`^ z3F-sifM#IlGPs5heP?LWwjhBKyeHAtMK$XfI%v2Yu}~tVyOc-;yv(zcfu7wC;%i@wDD6mK^)SP$vj`9?ZtvK`G82 z2@yw`9}r~M=9)w?$D&_ARswfS&|HxLm}0g_CAfuQnq|(n=M{Np8T(gj5_O^v#;rm; zR)VmnJpm@_p-36G9M;?fQ-7dQ$kK)7tO!i-3YL6x4)iZCkTZAAeu;UDqd1$Pvsb@M z8YeNEi{cAdmS;SH5>9=VHX|b18pdIkxDJ}TC_T()p8!ByAF;+UzR|&e z@|UYGQW?*08L*z_F$uFdmXg4FirbP_mkJ;xx1|`!Wy*ZkSigpGz)mYvnV%k?8vV=p zNgK&FUtiJXMwNW-Ovmhe?DDP%m|Y35X&S5!7<(Wkg&I>B&~7aAY{3EI3+>byuF2KC zoD=9oWEA!4RLMHU+vtvad?FxfEU;gw$AuDkcereU<}q&dLFSz^aN+ zehZIWgnxJWK^M%o=X(vBJgBIef-i#3dy>Ew?}sA$Dta(; zSC+m3d(6X%{bZnbe@%xA0fY(a+_*n|(g81|7LlR~-`o?}fA+6Et6T|XYVYVs{JW~s z5Er*soS*wUI~H*DW(m&vs2CY^m%1r0-dEU!2-Bbj>VK$49@LEAAEkel@a%n(fx;Xk z9w4X_@V#DY@+2dYS4GgvuY{LnyTe5tN6`Lvo69;=t559eT*g?b-ATf2 zmEkvYR-V}nY$xm{%7XljKYckmJDI4-J6?qxAA+NgL3{0fHya-OInA6*%<(3RgM!t`I+gQ{CM=Ms#lE-e zMPEU_$D?WQxQtpm+7na6%uitl643 zKRp$d293jn&yR|3S!dn?z)n-)-~Mfz{;l@g5W}9&c!=vM+Xmoq8zv=L2uhcTNT<@JA|YKvHv%#=NSEZ$NQ1Np z3^Ozg4MWEur3^WA4-L}w{@m}q@ArAW^{vG}EY_OEn(I32IF9qUUfCHS@4a_nHNEaq zLyme{?%bIdz4(HhG3kEo<#%S`xf+$YB>_AqnZer+69eI!WhmS)mf-fA0;-XrF{tgT2){^|e$}XK0$|sj{{9;l zc&EZL7Y65i-6|bp<#%dNROn|^{a%N!cC-dGx2 zOxfrmND3A-OYrx~?A~uJe2pfYA#n3rIm)OQqWt4{(ftc>85*^z5BP6NGHQ5=gD%4w z;=;^u_H@F2)0GU?dDjMlhb}0_RMbkdFH0yby=V?H8Mg^&&IJ>K?j?k>RPF>*@ESf; zY&qWe<+(Y>La@B0&11Ol6X zg!B$o?G;?sZP5@4yONO;B_|k7>G%F5QYFfH7k#0e_N{!m6tF;=AAk$`*ulu z$3q=(QNeie$;%UxLK|zD^bNQ>)hr;`M#4nIJYW?tHQ$7pyd!4Ew*D`4dFTN|de75? zf^=0Mv6pzU*+D``;i+orn>D+xR}x>6k4I=Gi;Pk)7+fpF&XQ*X>nM_Ix_JJo{W@Rc z_&ht@A1{NLjH8ZCyb@;ON7rxx46u zgoHghC^M#z|9Jnm=~!X$e?>;OOpuIlr(u zIA618-P-BlIE8Hy+_Z?kE8q5}^BuOJlscj-nFrJ`j}g3EytRJ&)ICzzEkVMETafi} zlsziXXTGf~Z^?O3D%VbjIHgzaeD^lOrnO9K`4Bnt`lZGi9Yv;o*=7O%_PFaM zL&+T-Z&!Veu|I&trt4ZXYaJIm`_J0(V5QD&6cK9VEbM?TDY!JcpNVjA2! zr-6@hv4vQDTCGvxDU}HMLqY3KZlTfH*C2U=SLB*Y_|4LIc(^d|nb;@eXG<*;G2PT~ z>CH)Cb4aS>Rmm2#@-mEdSH3++-ad;;(6WI|4XqGX*t*~*SnJhk>5S1>4g0T09aUBx zV6IfJD{|*?E8;Q`Tf_oOnz6FZslwEP$kx7_%~Q}MSA4p*E?<1G^LKmOXd>UuF&(g& zMV`|&%@$UsrXFlr2fg+7A#hDa;WNYt5krj%dr;AF?I^#n3IQI5bUb&{YdlBO>5yLE zPEsE@1AXQ`_4pPY976PzO>VB1GW3ELRz-vij-P&?-uklk<56KG|L%nA){o1UWzaA2 zG92r@eWTug3t^F4*~_!;d_qh%s;g-Z8Is@ zLKEZkDzyg@yFYzDr{m0*(CUfz>-V|39CBGm)mC!+X0AD=l~^JM$>TRjQ-#|7g;033 z)ihYEL;rHtYCp-Xk3jI2<9~GN{r&ywtvUv1pd;P$*a!MNqKNZW8?or*?Cdi8QoJnX zT>TGeny-B6NuyJbBj<=9O@DDHnZfk2n7pM%^@}Q?@g$9kz9i+7r!&_XZ@HlT{!J9H z9GD>>P!7h0(Yf1YkQ4wOH@^JjKPH+Kj@<~Q@wP5G8ZZhTFfkz_&1R;NaB7Mu-({yB zr^rho48&L(*b;BlG=TgE%osArWmj$1&HD1b53Z#$xxwPtv!@9mt%l{x#pyZBzyy76 z*)hlqvjsyF2zavX^1yVA*W`4)&trcMV}`0i29P~h;}VayR6Y4sTLe1$$SL+=4o~wQ z0U@X35vB3@GpDn8pe+$BVL1`Pz84qLA-c>6qn+~7PmBA$!>7BC*=Sop?D00QNPVv$ zFp}~iTxK|&u`ZS67Tw;`=Njt0NcVqJsU4gX^CqG4=s)OBl$#3Hupfo$7%w$Q&bgUK z94T-dY&q_r7+#?m1Fy?dH9em*Gn-vs98ZtG{eZ9NliLH8KDOdI9n4`5*7Sgw(f&FSkq3-%`QAUSW#lJ1 zF77y4$M~z#w9pxlb6p*ND#-W`{jlNU0i@Vr$x8wV5#8ZX0l0+tC5+coj?lk)rYy7X z0BM}Pe~yKhckO6$*4cwXAwZy88&vFV00Xry1Q@*T-MB)rsX$|+t@=FL7q573hqfmp z&W44u<~3q}AFMVfc#>OX5zx1JJ4#XQ*{9A{uB`?`E<6@hdiV|Q$Nl#t z#@)(3SX(dW$4T;|v1qvS?~T#VdkdD9mf>-6#JVQ_<$EcB=~g4KQ%g)P(=YP&y5XTY zA6ti$n7V~_0pQ{y11V%hSb#RPbHN1iTv&CJjpCPhFu*%v?CFvHhYBi=UV2;wi{sbm zZ!3~o)4U#;w>zDDpVr(bkB788*ho`UyVaI&@d(l*Jy*FgeQ}Q`s2newY47SbF#lhw zVbpS~`5r9Cw@Pr~L$vrCCe^XCoaXn+${>~Pv+|q-7h%(;JT&>ADGTT1$9{} z`t*H+^DwiSNNZB3j|kH8rm$?F37VXwI&U z#&>6%5T&6Tv~JMpx?yeUj{Rb+c=4S~c>@?;0$_dx3gqW>Sn!3p(1a~|#9Z3aP7C$9 z0BiZJt3CK}9hjED&W#HXsA!jaOQ6-6Jg59COb?jSqQKX+(27go6IM2SW{(rZP&9OV zAldrp!SS>k^*`H|o$H^?g8swnb4#srsU=HC>1BP1X92G~pz&Ig&2BqC9N^)aNOZ$$ zm95q`{lQ=g_B_iq!E5A6bpCiuF$3=;PSYJ*e`TIg@al3CBN=!~_x$S$PfzX~Wl@Jw z)^ggP%}-cV=!HS^e%O4a4`v~lp%lIVm0;Fq);l_B4p18u6@tCAnMB!EX)n>d1p5HO za#lO|Z}DPrLRuWtC^g4zd%gK2_%N8El@m)qR33rPV^cMYwl5c)(%kWsIfv)-m_dEXH ztN%F9iUtIN-@G9abijP{GB1SdBfw-pf5lZtqwhuzb!hh)Mu})Lbe^U2O(rvq^UMY5 ze1O18db4{J8Mb9(=LHjQj@Ze42=s^P#Wn{JM%Q~ccjO83&9pn;w7&iNklHCN5SmTLj{z`m=sdK&LPmrdIv^1p;j z4p2(}9ZhsgM*iO)7;s_#GAiTujQ<~(!uu~cXI{y@|1W9z?FbTxmC+(2L#GV<+oz?v z|4aRip1Tg=fUqLs*`JCV@+NLOc08^Ka4t7rn5-%m@Y>HnS{i zU_diHGd(&w7e?gV&^e1O6^yIwYIKOp!+dnK=PTt=53H=6Ia zzgBb@sAssapPA{pp{`v-N_fB@Ivh}9b_MJ8C7c>&MxS#F)z&XMd5t_xK}X~WETw^7 zd8uuGlxgjZq19XRw3?_}`Yv4CYikg1yxda>c5a4eIM>4-^e>&UM65Ht7pHii%q6Tl z8q|e?lJ&H7<=DK^!-ukNZ%&aEtEa3D^AuaH|2lXW zDNsU<-+78}YPh=Y-3HJ3-4J(lmc2XM(P7%I<#0N(my(_LpRkx@@>ono(uT`1Fho}l ziwDjRr?G>nv%iXxAib?P=`VKnc&|3Cc@G=10Z<{16`S)@To@M#U(DiUL`LpMGUJ#aj5GY~^&M|ZoLmF(=J&vxn1XdKq- zP$154O1669Ir41WHDc>)_g;)c9I5EUz-vSSA)?HEwI1}UE^l%w@-0<~V9m3lynA|X zTzw_>Z)BA@Vk4GI@nDdyqxk3kusoQj%7+o)_f`E|cGL@LEejhntkAdGESoNhd&iS$ z22pNB*aPPjI$ISjM!{-)z%jOxsT|j4Rpp6L?KhQe+iC)hZr81c%?Kxu_=|H*`iH9? z2byIDJoFZzY8vLlgR!PBHjW+fhqBu|u=cup$&>L0VWm?A3b_|D+EjwpDW-l_B$86b zA#R(Yx;~r?mBn7VS>DtPbp73^PLVU-)hFg3!oPmP-(wIBB_>++jsng&Ha0fu#AnQ7 z-miD>^S>EloeBpXbw7^92z()PMNk)VeZR%$mU3eD_hZb+rCj~N8pHBhMb1*$&4gK> zU)|CT-fo+8=Uz9oNN%yXIPu`a@0|UuVxEPF)Z4K6K_8p|!z-ejnlp(Xo?G*2)mKty zy^&;|z{+bg(oe|zl%YGU#?Wq%tyf6qcv5FBBp6gGU)vO~u`CNVddQE(=;vbF(_av? z8`?wdZKU&?a0cynJ|5I`GWlckz&=e4(Tgk0nmhCb(=*~9AEVh7!iu>MJXcjA2DCXT zL}OmlYV*@&A+W0Ix@mOa&o#kJ=UPS+TGgq7ub}y$$KI)6`-idPH47CjRBUMO0%_d` zS~C5w-2yBhlD_j2)4Em&g9~yg&HBr3sSLt<*BcPJiJHN2D%xhr(70+?<$;!fdrq;8 zyM6T}5AoM7$)@hsx`{abw*9HNvl zGgUJ(_pGwElS~aeF;Fy5wc@^vHe2fx#QD1iOE066RnYZ7u=a9oQevKqAZ;nM@42Ac&RvWjK$dp^CV{l6*Q-g+I;#aif z;`*R6g>`3xKKO7DO(2%ipvx}0)40Sgh}Q@Vb7#Bzs~Y#*{@FXJ+gispd5BUvdaie% zyTUuCpLq{S*+qU-`j+ep66;SR)DWdOM9xao`ZMZ0v5L}g0(wigTv^&WcIPY9%05y> z=#aKb5flb16=sZe3xmE=FGf^}O)_WWQ6#`JoaMJPk^{ltSPK*p-=++j1~M2S7l>rR zVl%KhQ|%K$Q&)eS@tm^G#!UT^p)y%Jce3%w9GdP`y7OcCQm1cSj1X3BF*{2&7#=h$ znI4KFLPr*AKY3NN@FC`L@v57!nqly4XfnzPStWhE1svZX8wn`Pz6f-hf?H_x73wEmk`kG2+d zmUTMII==Xny+tsbnsv zey~bZz`-v=B*7u}Vry1-ZsAQWffij=_0M3^se)+?u1^%f!%s-V^Gh2sIH$113shzc`<^VV|VPyuCkg`_*#+Q7g#>@Y9T5Jw=1Wt zcU|Q8Y$b`VvItzUt0mC-10GxoCFx&k7%Fwmn`X|It~4p7k2@6p{j*bZj~5wcS(S*; z6VLWe#akWHeljM+SlxI>PQkVk*%v!|51iZhvX0hdJ;k(lQ)4@+Q!&cYB!^o^^xGiR{woUkcER_>v^r1I;jag923H-8%07?@^7Fm-mF2m_)^Q zmUZI<2gKfZTt6{Go{@BPtbRdGEVW*GTbxxmiC+x7IUB4-_UxHt$F9%oh9LbK?{OsX z9}K30w}IGA@xaYtE-;;w<2V=_sNUa_Qtj+pf3ZXy;CJs<_nJ>~()E5ul|n^b4GCnM zOIQQ$UW9rrP~9G!DNB4vOaDYfg4I4H5Qc~5au`FP7AlN3`;t0uQAEmAJx1IBC&T~2 zj*Pj~0S(f(ggU@PB#29Jg1DD^#_@rxT{{@J7GXlNF0-KGyCUri!*ia07)weAU8C!2LfXmnXVS^ib?^6X5P z(L7mAfEZ4k(*x@iQ7HY8tMEz1jSRZBO19K;Dyf0ZaCEm-^oyS8cN>;fRE#EeH<>46qr@S;amZGpDqR@4k|+IRdGX%J?p1h_-t{R zdx03D7D0IIAd(6e%XFEXuXV4fDGtosp02^C=Rt#08S~HBaL_MQA;R=@C};Jz=y4#L zlaGc_33M>;A~0fGn+!C!{l+FyyvJU+6c0{VDr~&2oejx%p5({(#nkjP%C>9exiTrlV{#nqdPjt-z+~I<+nNexd0C_Z&Ty_^km4r1b2ARTm zQn&g{(F)e{qaV`Pkqq=Aq*o6Y7CU>B+_q1s?IWm=IR7fWvrH(Iaef^z$dL)@@bQ9jNY5*=z z>y1YU*QO!e{p2k9q=t#i2GaHi;A&Wr;2mOcJcitLP6FFWSb} zUN28J>gWYpS;L)HDJl^|)q_0n&_X~stAW*$53{jqj-9RBIbADR-jUJ)^ zt|+g-7ZeG=Zn|vuap{CzCwJaXf0zKb*84V+&bV+?$P5*HHHuZ%E0|3CQ%oZ(1zYY{ z_Tsm=7MH20L#~ay7HqhOmFy}Tren1|XlVbGk#th2fn9DA$(J9!%?6_4& zIE7~4Q@k;(pDp78bs8(&5tF?O;=f#N3mk*w8bC=1vSU&!lbS^$CJhh-5me1vkYLJ>y zpI~p|L23qdTItaN15aH(qJ_}@TglyC#o`Yexv4e{Q0*2m1c+`|XGhIm=Pnvt@Zmn2 z7|1f5y;Do17u>`@3^Oz?`~ja1yX)NS+T}c4qLULm_LbbyVdgtZ+c6irqe6x-c%Wqo zfjypyqOO#|g#pt`rVgYWf2-RqMp$e2oviXp7p%dTi4EDx&KQ`LzzDFMGPA7Rpt1VuE8y#eT}v!ja?^>f|NX2)Su9vU4k)D!x~{@_@Kq;df6=~~3z4Kbgnd-x zS7IOx{iRKVb$;}>+VTEk{&d1fhgQV=oqv~DhRTorG;dl|Uljxd+&(%GZObQ5K*ox_ zw;yx*E|;oEj}EcYm1KR2VGqQ*n>cMfv?QD@Eqo0!aG*M&X8$-*LZw#V(Y0VVPW01;RFY+^L%S&;$NZe1;K24JVj?Q@k)R8r?`ZNI5{ShW9}F9uhAHk;IgTp;?4~IR`U8w5avY7=plZ$t1f0mHUf(8 zY~o_F;<|a*=cOJDf%YV92}B*!bX&k24i}VyAF^x{(Xzp1%+<-9 z-rA8O^u|*4x+fF3Qmj)KqDnOEQnHF!6e}33DRZo!6uUy{2YbOHm~#G=J(~itV`+7l zo3S_z727@hXILAfdoT&cG5Y~tkpF3-lr*6x^ZyF&wAYB%);m6@^liJd4^R<2`D!>I z$A#j*zfLbGt7dwP4W=jRHePNBIA639KiSL!VXYY-Edy!m^n|5fAI zmDz8?vtN@meCHEFrdQ<-9UF3vZTooTz0#*95D3IL%0$u=hn~S*LiYObMS-Flrq5u% zX&w_euS)rOUP_Eovq&;F;xR+}GSZ(?^~REVt;aWn%qMZ*MxWk1Zq3wQmT{?iAjwPz zi7M@?>pqr;fwe`SSwgS}-f=(kzRr#W`O0xbX3VHhajyRjf?T<=n`JuIo9LxpTonWM z?GArn+nbBKAQPzmx<=_N?)<*+YUW0x(x-HZ(ENo#Q81Ki=G9 zF&CiF0jm9lufdv@sFp|aD>Lg#oS7(Eg^I?y5|T{;W!6VC9F9MmKFmTB7Rx4y8yxv5 zQ-^aTo68T+-fiB29eC)uw7gJvVO?gg9PGHT`k*cJte^(h2cP4>&EY|-xL$Y+)wyn} zJ9Q47Sd6eb4L|;)fU9Wz^lsf8y^!JVy&TKT_Qv0DeO*dkXNd{O3}vuGE(SFrm&tCr zxFufGO+n$_)1gnG3f@p^a2or8*wg=jjicvo?SI3nUV_4k@ra&t3@9p~oHo9QjyZk| zgyqoy58lAc3JG|1=zp#25R#grX4nQ0rs!{q0-g|O9}mH zi7j57FkdQnXshon>xP<5ET*bYEaWjt0Y_^Tg@FN&Y?2o3wbvX9yvG%EX2DXy_mY@KmE58?-FutM z@$EP0cXo<|WM0I*&0~HwHzs&{ux3oDLazSG@7(YG`5}Q-of;2T0gSP6W@N=irvnsM zA}A2P^>OQU)0I(ENswz&*a4qiA}Q)5MiUhz2v^ey?=q_rksU}Nb?{cL|Wh77QaKn_eAD@IP zJV`c2M+fzgI|n$pd77!a%#G{Y2drGxaaST8>|3?s`0c7MXuWcH)a{qNnGMm|^Dp8s zDR{}srG4VLE(4Q;7 zkOM}Xe598oN4z+GCHXV#48+b%!O^`M7rSD9Jo>goWyiZ-{h6p3g>f#-y%5DubUQ=! zzv3Cn7yz(DRD}+hvjQP4LN>MIoQY3p7QntAhy(CbETKH1QK4)h5eWHtY{nTjuf07y z(d(O6=5vDy+U?|zMe4m96R>(>>~`P_LbO;Y9>D=YQ_zIN7%Y9 ziV2vH@!SYBK3lCYraaf>5kKG%xpJg@aa+c7b9mL_xu_a^(EDDRm&=>L*y!vTd2e$} zT&?|^tICb%lt0>et?DG(Nbn_Dh+<5*kb|g}k>qXL9(r`c> zPTkFC^QgDb*s#pmjg>AxR7E7m<{?mXo!>sFSgmyIuKY^=9ku>_I&_6y!~^ya@7+$h z6I&o`F6--4F!IdEy{s_YZPi|5XQ_7Sgi3(>$yi;khPc#WE1kW0K$kz;Vp%PZN~O{c zH!wJ|N~j4WWl~H`GhzDr7A|v5;6dC>9sI1kdxUXfF%QV>%bh-p6HFHi{i8z5o0WBo zal^8vJvq+~Ql&7#>nyV7(>eYTQvuf!roN*$X^>#ldo{Y4XGdlaisL`4#?JViXdUr=Nn*0h{4sadXO+x z8ET|*kUzTlIjlwc0rSd8FE^EVWbZ8NdM4I^EirgKdQlYbH)w`_-FhLSWkbO34E&M=Wp|%p97%_7^*Z+d<}i{=+GE77Yd4 zgPlzmU#}$sN#((Im^90NE5Fp9dUN$<+TqcxU+;eV4S}!IQyjkcERUFQCZzSgsYDEj zd|Mf|D|wQt!@SOZ1T7QM{~Y&g$kg7OPjZlTbdK!Z*sn%>t$Cll{4Z}o4Y7t33P8&i zZ3a^z2F1}Ha8>_*5B~yE+&B_;h2F@@M>#d=11~y#%!Pf5r52MFARhp9fLSyG@|0jQ zD0QP|GPkZJ17a~)nn05|TPa^r897tl)g}f|QXa;kcRUP3n|7~6cCkK$7cz#yH`gEP zz3F!8JSBD+K0T&yL=w|`RS3~Dj6bxH#lU_Pi!Mg+DtQUg24rIxhNWhR9|ue@3@iKo z#nbv*jMLwP(cHsM`YQg@wzyFc&MKiW*ilwi84k6|gxbmmcE*^Cbd?X}|F~xBZ1b)= zV^gGht8MI{BT7#rQN>hkRQ#e2k6V?-(7wt5p}aYn#4M&gBTiovWtkGVB4h0Rh^IuSEm*b_WCZev(!45L&EuL9gf=jQ}1zLx=JHjlANPIS) zYdaZ4$aA=Xy{XiH92y-)7b6K@o@}It)TZ)d3 z4y9Ummd$lbH=^jl#s!B$iEJdem-&I8O^BhkF+En#0NCZH1>WNXSMY-H0ToxUmR<@S z45c3gcvJ)rno94oPh7qQIeOUWtTI5ssm+(HWvA{<>}Iwsm!^+U2hSVRFzz#|PV1#Q zPsO(tLPDgN5KcdxpKA33js>fw9n4Tb|(g6Mi&k5eRlFy8EEys(oFY4w(a0m$Wo zPN(^=IEGlvp{+cvw1zecstkc&Z1r^DlWDY6qAWe9}1Vkw;CG53Z0cjAbO(Tm1P2-8X zrF3k49~4Y{ZoAMD&|fZ%7XIPLdb$I-O?;F3HN)|m#9_r2 z44=D}a5nV}#bXwNHij3(?a`?@-D0*D6?|qwt%FL^F2;fhs+J4#D&z^SD&e9LnUVNO z!WrtbKZ8UMR(0L;QH*}c=jt<}Nsoqp?VhB7blE#a8Vt)7y(dldb`Ihen4Pf3R`W(Krm(YZUH8?0{NMOb5P`raXP#bj!O$u``hzcgiamkV`SE&j#>U(OS zMo_o^0Hc4#EcOb{pO#z)q^tC5vU`MseI>Boz;Eo^!l05*MP=$?7ZQab#g4neAwsnb zZCf)$;W>DfALSCNwo4r~x{iy_;%MzaMCNfYGcd-vvL&%#@)L~K zWJT)_a~Y$yrk4Dsm_YklOl{Te!bMLz5I%`_H);^QxEwb>> zg#dERmE8;ANr9PrBv6Ga90A?<$bZh(*v~)2;Nt3Up_7~Vvul?6;yMDIfXEq#CVaEH zTUuoOGBw7l7qKyO>Wx9~i4uf2)1P8oC3c(YD1cJJL{Iq>4*>h9I`h4kE9D$I`+7V0 ztj6d(!GNK`z1g6A5I1dE(owPCvYOZ9lVp*2-Jc;{KVLkL z*wU~y6gDoJJJFJU=t5)gW&NW}U^SWbR}8C5V>0(7X)0d9(y78hwXAz7N(H2@yt|iF zF~N0GseCo|rw}z5?tTP8Sj$MHI4oat)EaQ^<+nay*^ZHCEA6TCT0MJK{V0cas3)>( zS+`b<%yBo#4EyHl2>$NMb<3ag32=ENw34O&8hCv?>*u0^Rw_|K^?YS2QZ~b`X_6^~ zUs#suXSlwlEc_fkq@WXs?f(2vY2c}PjCJVQivNDiL*R2}b#)l;6iw@l*CXkSm!0K=S9p~tW$b_8%<1RKE_t;;R$_2O zEomfz2TzrZA*P6v!N|R=bREFoo~nC*m*}zh(TcxncqMnzIHqyUs@@U`zAxW|ugDX{ ziWb zv7kAmwOvL{QMq0tflXgs-thaDnE%*=<2Y?>pFbS zIp=lXaVFMuD%-+Sh!2N>UNi#D)&Nj5l9FP^D}n#`J*{%q~uj=3E%hpS+E8W(r@-8Z)sW_TkrZ^7zSosTs>)VXeDiNY#^<} zxHCHtH{pBC-MC`Tqijd&_7IdKd)}Cr3%Ken&gBF;cypiIPch+)r?b(}OULdCNXPzU zzS-Gv-^{`GnHbQ`6Ll&6!d>iUJ2mfNz%yG*dUH1O@YLca>U6>67v6#i&wTJHdGuSu z9}g$1b_oG19p;nWsgSXn=b7AWZx*NXGYZuz6BAf=j;k7PG-@mTF<(&L{YNeKB!`vqb*KNTa6ae$UBs&PngT zZZTg&&c7L7vOlt-33{ZohkJaYXlN?BPs>ttp%@OJ1AOf%a38BmLb^d@o(2>rg` zb7(!6s~6c;z_4S<_3DfwG8`|9&(1a7B+(V{i&J;;^9-?l%&%)+3zS3}pZ)!tSAa_&%R5ul^UCe> zo3zsoiL-UZ;QhFbK+o&$rh`4?H7N(VM6keKbGWke?VFB3$9N;HaB$IMu3f=>#q<4A}TWdDkHMav>Dx^{7&{HTVCSy1s_-{#CudK z{q1dOU|-Q98d0m6#r&N1F8R9YLI^_Us;|>sZuYD$(Ao0PSn`7=0xiI=?-azet2kG; ztpU0VI>4~y!Rm)!9B2|L8nTQRe+0|;`@Q6cQ9FGv!NrSWudK_ZZE_i?5P(zC@E;x= z#M_mKe+l$Bq3_g~G2@(0j}Dz7HovL8PD6sOfb$D*5DN)4VOcbpr|mG9NAU{KG0>qp zdgYEDrK(4t0R=HZGi=8z`K&OPx@l<4v^QPfjtkm(fuZiAFYmgPi$ZwZBRPI$k&AWr zsVShK_ye>wHXAzRTwZy^hI8Xyl>mVVSf7#5t2T}q1}w)p4Gc#t98 z7&*7uG2S!D_aBq_&w%QePvE0GSJW84bpguBQ)+_xEnI>PADm~Gb0Kf8y)E`X8`nFk zF^CJVkc*SLJ){p<5xiQ{LAJfLxLi87#xE9*ZmKZ?y!3N5__A;r!(=$3BA; z&NzMor;IZ;$X_X)Tc|cIqRTC(y8JwuAshB4nVC`c*en9WRqw;v`G^7jmHqJfnRkfD z8If+)27fn28g>AgiEjs28=SLAk87kFj)#2%kj_360EEo~FX(fpfNDLH9CR88si1-p z*CS$D8Qs@{4Sx{V9d2hDxrbFdgTfm6kdPq!Z4_7giKfh?%MyVgYG{mU>Wp<$curM3 z%+g2WV4Rx@O5d?1mRO-iba{!mO8++YEempRQdjKB!-!J}QC&QWzUv!r6lC8(HW_ac zF>4L0EU(9XP=JtUE$-c2!u3ryfefpl7xJSOuGZz_Ps*Nt%YK0a64`V0^9%lY;K~;U zyCRZ*_sL6yC+8C2DSbO}Z>jFam3lukF;F@UutU!S%y!lU%3>O2^iL1Ow_r_1Lc;fN z>Yb*!!E5;d!ItVQ#Lfgn?wbI5FUU24S)Ea+f#Y>Ll*75{OyY_{s@G_7;@d6VL|(xB z7H{s}F{RV`F{S4^VLi(?3S8p)2f<8^J;A|_?b6Z?Jxs)yXp%TgB#Zy?LnTTd7JsQf zJ<#UO*>W|`KBn5k47<{_pSpg*=&caY{M7%(PxkqZfHf~UlK;tVnlpoOwj{yrmG!If zuG027CP+NUFlgy3^_VF2BG_hU{83w~cmI%49IMEyDn+ftpM>nvN&-KU@?hKd?QQnd zg0xx&PQ@y>#VT8`jE34_?sX^;74(Sa=2K9ICUN9f3|Iu6WBpZJp?_YnYq)Anu+pLF zXO=$tn|n8k2qY2*Z+4s_kG1hl z1_c>;hqKqVAiH9vE#2hHKDOndaA{c`yXdK)YiM&LZ2|2<9aArMz>sRF;Lj+t8D0*D z>$IvGMFVansc}aKy;A&75%{mg9%{vGdAK#a{NHgL5gWS)v_lE5g95jB6Q>u*joJ0y z`kgh7q_VLL$8)xe-wmXG4&-i8^}g_J-4<#Oj6dPUoHN~SeHiTe z(RJ?~g$hwu1*ztfrKeZ6LoJ>bCy%ZyhAccSMmbCLkwo*)Sr`S@U&T_8FMJrKdNN}> zvH=FYeaB4sqyQ3?Dp$-1C6KkeKfSc6c2{BQKyMZkIh`WN{4UuHMth=@LZBm|{{;+k zF#zBzI+#oNoUHRDxNBxG+7oz&i^_XYF$3#-TZs$=Mlh#h@4QMpElIc_pcJl zlem5VMk2>S6R*G7#(3ZwpvUA+hF*^Pg*bZ-C*|9;^j!a#{wIoE-|T4s?o_t69QykD z++PzefBb)gJdGPE8jc&e1hkojb5($1Y)*QWRy%HQ7qXZfG1&h&R_f`iOX+{@DV$B~hv$FUmF2ls z?C-goev`&uDRpy&`Rm8ouh}#ax2J0=NIW23g~)$2Q#dvs-oH88OMQeq;&}eS>M64j z1w_?y(NvaNqpB)iM?Jwi8+*=TU!ffPTkVQ0+^6duf z{Pl4EJ(x(F+1hNiUCFmXif)g&aCtW5m8J2R2kFcGGLuqaPtr;@kx3_U20%;ww77;G zIMpxO%s6AR%t{j9LW*PL5Z9{t|LfJdVR84=p0YL0OBHZu5 zyYpZf8N^|C+VORi8M{%WzyIKEx4^`$3C8Ky?Ly(4ltvJm1`y>6oiyGRI=*1@K5ZrS zyXeac2q+}D_VJk4bdbuXzkHEJ>HFJesDVf%OG9u_~wn!a{HUQg?1mu z_D)nL3=9>$s5CMC4RwmX9L(~(=x^GG6kS?OGvJzDoO z88=^F?Cr0P3&=~xM~-3ap3_N1&O%7d6h(rPFmE%9?cY_)4Lx9oz|re}6A};vgPH^} zJKfqlO9v=k&`_fO%rog>?aUgnFUC`!qp`A?Wwx@GiE`;;=uPclr8wO>>EbqfuW7*2 z+nssaZe&f6i(=*n+=H>H_Fnpl)ps2sCS`auHHFGpLz3EYwDgWzsk>K_hz@*pr+Zk` zzTSiiApP~IHfqB!6M;N&Ge$ji&hC(-t{3MQ3Yv6>{Y~={0H^io$7v-)fl-IVbwOBi zGAHnq_`^bQa4(7L#^2g6tj$0QwHk1lZu)ykI)qZo|M3bx4V+z)X$~S1_ymOb&Hi|b!J@_W|R_3MA4US zCgRsKO+bmpNiqvqzhWkhGNFpT{Xr95;EK0=oXW%(Fpd*`e)`I{nu#1jG~=|tZ@jId z(p6_eB`<0el8F_a%rHo5khW~wU?9iNrp*yC-EI+1xHZOVds{?k7<*TH%)f(51~DSduA) zkOuS<>RO5Q40Uo`sr6Ej8Ln(0A^a^Pc{sE;yF&rcUYFp)dJiiu_Sr1Y=E(3~k}!c+ z^AdGkpX24w4t6&FzS~tm!H&4`WL#3sCaL4<+zrB~eH3Rxw3WfFaHCZGvF#>7bejv- zx%(0^2{P>k=BTc9t;OXZ_`XghPZWtMmXD=nJa-nTnj3GUfz1C5zw3{$S!(JY4b=Y{ zK}aLyU;H=h(3&;YegbkOAvU`yf86^A<}hy?W`FkVkMH98AVR3`^>M&*Bh76b_4ku_ zK$pb;&w?$T&iR$Kan%7m+pIfThvO+=&|wG@GBxc|u9tH!p7UecjoJ>q#GMOiUpid4 z)57~MUFTR^{L{QW=&>-tuSMqv`B{8X6miXGt^Yh_*yj-gcX-F;(O$1X zKojw8nh0h2p!eT<-2Oy4<>_(dtylMJuLWsQ{XGX&;FSr1+>X)cuoUf@8t8rpH&U#%?VXQ?ZV6UF2gIANfq%wIKy-NE?QQ9lK~YW@mY z1_5f5a-Fc@*>bHGeM>iC-MP=5$toYTgc$3F3O@Cvh|MJZRi}W-p}o){)ItVJhe4P4 z`d;g#Gy|6)7;7bjPyID{-*qn??3<+-dA4l5Up$^i?FvvGAL)u27$jnjsjMqDKk&8o zad+z!p#ZVc2}Wc42S?{z2bft&l9S#896Bka4p;{4a+HOZj>PVqyB9DCNEVUiSSBy$ z|K{felC(^}HSg_f#+wvRT-Ot_h3*zWwa6;$U-SZ)!|J;|#>+mDL(2@$`4kk!L@t_$ zw652bl3k1GFT2KU!2gG_w+@PX-=0NxHk$}Rf(H-o!Gl8r!JV1GVS+mZcL*U6oZt?@ znZY5rOo9dvGPneH_km&FH|LytfA5~URqs(nQ8n-nRb6ZK>h85ZE$RylNr&KeGN;Be zuZbu3;tFrcu>y5~=^F?mi#b;|-(yNX!KRn5gIv&R`M#LA>l^8&yy>{Nuwc6?Dd`{F zjYbiGggHl2%3%x-aDE-6g>}35L6HKEzaQgwdo>Oxcu24vLhrR4`RL(dei;1fv+1>L zqj`6M7n|%~aa1(H5gKwYd{2$_B&^xY$Rs|c-Dv4uHr}3$ram-Zin>~>pN(6K@j-O8 zszAGYV>qjCf6-F&aDCr_E0ctCz`TI9@z>^{I->G{zb0p5VD4!H&%j)|t!kFv*_1sS zd>2-071)cg!1tBqWvSFex=AI*;Lj+Kp%X64s89Xi&BKl3_JdN-dIm%u1qI|nS$DJX zCV9rk031jPtX%Zwjf+uNxqq$hz!n;IeBX?`(Wz+Iv)g+eB4Py@u3&R?coP^<$M1h! zGw_gEby3$SW>F3~0|Ilx@%^Ig<2AM83SC9Zof60U4aV2W8l81J!Im$PDX%7@a)IrN zbZN*!oGWh6D4C1?$brG0Yr)Sv&mXj0urA?}!Ri|e!l|My#!E$f9o9km0F9Nz$%z^7 zw#QJ*R8s{fY|n_kmey*6CtAcKGx2&3V{_)$|d5uE@uvHJC`C7!~VNb^5Ax+<`s2U%w{*Nu9^? z%A6Zx-_lE_DgLtrBI&4{TByA$Mse!X&3^+5i#<5t|B{T%TQC{9Wyk7g5p{Pg6MJOi zmf6BROXxSUWr}P8TriF;`U?A#uhljB>6}8aLV)h+nkhI@G~|*=140zeBW3$9TC?GI zzU1&s34kQ}`|Hf7JOI*mEn1s4kT9H)O2^Kc0bgp4ik_u>ju{+F$l81-rN5s%7bmPM z`1GO0Os3Y0!-9p4H;yWqrTCLSZ?xq4^TLoTfjt3i+4ZRRJ!a``8ZH6pb=ab-9r(JF zre3B+<324?ApBcDN??_TqYL9CViFB(i`0~TCGr~qn+GXzCk)udYnwzdu6owS>b!bU zF%bOC?lZsON${%g431rO#rIgAQ+N$u3FTfbyn5GL^xm!fpQ@5=(_M;Id?h5W)iPSv) zA1#(S|7>%s{r=JPB?{4W*_&GmoSbNRGm<^GhjYFgfbDzLj3c~!>So!r3|$DUrz{SG zMztO`(V`FA9->i8rC?0BJzq7(qeYj00G)2g)q45^)m0> zY2JGYseSV6i}3lANoS`%xEoCt+@Yinlclq?2CY>KAbB* zQlAzq=p4iO>^*eqLUE-*@X@e)O>;}*;%hz(y9b}#)gJj>2R|=U6I}2K20+nVp@U|b zWTvL|XKWGxCS;T5>a)JWB4cXe6OcpS%eZ7V(NEP2mAD!}=+(((`Sf`|`U|~%NR!FP zw85`mkN(4Vf=yJbGgf%%BJfNlbE0W)%`S<6JQuo)~fE4k+`qih?W}dEb^lc&+C*#_u2A#(o4ti`MV-SkDzw;*O zgAT4ycs}}g+8&#t;0upGXM>H!uJr-k0%&>LZOt92xLQG*t0&(68%9B?Xs{WN^$ zaZ~{;=p28UKN&2Y=Q|yn=eyMPT1{tt_?rMh6Ta0Om8&85?$r6H^KA7Bp-LH^K5^Jn z#v>WtTu0ltiaojl#rV@Y^JK(crH;xDJ*uMLL{Fa_ww~4OMAeJDzkYT)FrYcVknip> z@S+NN5L|~0X(6MCepS%WAL^_7)J{$)axY^}!p1iBLHS(!+^Q{T6IE{OB$r-5A$OrB z0-FA`in0QW8Fo7wj&X^D>%VAIu;_70e!E*L`Ug&P9PT(UqDP@Ua5#Amf5^PO5N{a4 zJ!^T*P(}jX0>6XC(W{sTS;>8>~3U<#|Wz zU&>Q+JHO6|SaK{46)v{#~N-0uO}+1r4UIrYh)zAe*o2 z{jQIw35{|82R89;#T;jammN5OHw5@WfP}T+TEuS+r{273;H?n2AfNu4OIC=#@5gvJ zW%nz)-NkuX%D|iB8PS8 zlkfIb=qDJHOO3V;8~i2Im4ttXD1M)7t=5i1*aTy%*8FdqB` z91^f@!3grBRpZ<+2Nse{Yq(-pB9}RqEUVJvMH&1-ALm}rs65G(P~IH76Jx{9iTC6O z?WZ8MyrMgHS*-)tMwJB}ie24(-F9jq79Q!)I+xudj-Z5Q!(ZP;5Lw2K0S%?Ps+6q1 z2v4!hebw8e4!BSDVRDw?YJyj=#x!^RexPsvePdo;5e;djPL@^}+GEwmhw%~+FLd7s zHEe;+%1UWU%Bo9##jc+|tcg|Gu}O9-8Ti_wLoExqwZZU(9O_FzXTgIQTG$4|ao?Bq z94L324-oc&JTn3Q8(i^Kc|oHYAbY&X6liF>oX`xEh1SrLQM)W#ge5i@7Zf)w;!?X5 zn)R?I21N#BrgX%>#NB*AqP6F;Q_SC`<)KRn{AA@snM>3tGKiY3v%FhIby+tYvCrO} zw0LtJ!cCBf=+rn_sLk6QM@JM1`3sNO>nRJ?_l zm?r1%F{`zufx;^}fx@eYt&_ZvD!*<=i|O3}EN3tl^46(G_A1nL=F2?qT`=$6?#laU zUnXjE+Px@N`GtrY#BP*J0R!*7Frl}v161|S5vuCr`NAYa?715>vh$-ZUDwBE#u|r{ zGjDq>K@+G5jq}|e^H8odF{iX~1eR^z7ekW>juMq8M;4DPfp=QfQ*;>kE_fRb=OP#T zpC}GU1?RW;P6{`2n;A<;XpI2Z@9vd==Rr#0J&PjZ`7IUrCnY__tn@OY~(HL_U{~t`}7|c(Udwn>M8?^WSTv$Y0FkFP_@+# zpti@&xfmWg^w`$KMBB0AN0@Vpn<2PsyF7~x(pw>(6)a@a^v$YLkMIk1g;u=P5{YsE z7pyf;?g^-_=g1aVEP*?a^ySgcKea!xG{KXShQuVNlX~yjP;An0{3u7u4P?PUmt?swgcvqo8%tCR;0UlI)h?6 zR%)p(#GJig`%>-Buj$_6?S?2Ewo}C6w_tZM-2M)3b?yua@nzhl)o(xkfUELo;lmHF z#Sea{r4PYg3md8@><;?kk`o6Rejwtei&8y+-lxVLW-PK3ZC^?mOy?z`K;3SSFw9SWUlgK zICg5_gR-EVV5?sV^CZ$6ZB@16_27NOly;@`X?JH+p@vQHyRHbcauuFuknrnh28Y3l z*JklF3hQ^pNHt|I$M(UBJCA_YT4{boWG7fQ70#tG@1-p498mUXLyb18(z$btV>Ztq z%Gd{T&Cv?rF~t<5BigW~L!Vbl*2h8pv&<_`yPT&BL}4V}eGfbWXk4#cy-SE>*~N@5 zL4*2SDh^tX5y#oU1B^?gyg!+u@`?_11Qd5u3?|L2tkMreJXgDux@(BV`2+-dfN$Wd zTWQL#(pg7I-@aYkFZ-;ZPGeK3S29Px&PE4T1~y+<^VwWRc5Fqyxw}Mo=Py7nT9#Zl zcI?%qeEY|4c|_h{QTTOBF1f7n8CES@NBx?jiktB`t7)pVb`0CKSC=5W{kD_zi*Kya zFxq;ezU1!x&V#7YW$Viwzi4UC%=phvr(;X@-}al7(G6u_=VqCk;=v@x7UiAZL6RpM zRS3mHU)xe;ri7rlyW$i@rUYqn0y-%td$i~m%oY<-#9M}VMJ5dE3p_}~+tU%vT9Ek7 zeW;V2&hGLtfp^^R4_6T4b727?j<%{B^6B%Ni!EHLvD_z#^0ofM44%}Y-*>2lo6!43Vu%v{ ztF4gSz?IX9>8vJ9beC7|`}ISR`s3_?>#V(e%vfe)8`*pZdIK?6D}`xQy20m< z-YBnGzcs#+!}i~(I$?S4#Re~M}AEECYbJyC(ONc0pDjFv5uWqRFa+|JyQ{0X~O~+6dxHOW{OK6Ur<;J8c z1t3XrdgCzDnrS}m`dx*!iqGK@HwJjJ(6C#>)JB%z58fC8n}8`mg{}F z$<4ELZ=CIQkqS*JA4imJcmxTklL}k}S(n~dp`bD9LW$?oQ`+rSByLw1JVxH9^26f` z{yVgs>h&qN**@EUPY~o-PyJ9Ck`9ca8(FmKL*7y&E|NGkOwRQ7uO>zZTms3=Z&PuR zuh98PoMh&K%)OZF;nCf!GV&x*wId0$`DDLx(W;>d-^5vkBsXKLsd!E<36~Hg`C;82 zig={->{|y!<(9*0cMp265;K}~`olSJV{;JNgu3I_?LoJ^Yyj0loufJo8B9on63;ZC zZU)h3lWW3un>$)P;DBFt34qxf&E1$&bB_WAwxK><=;qe$v^3pQY0NNu(?53xPfJ=| z6n*BB@QUkabrQJz$t_RY)?Mi|A0vG-utIl@}FW=n8y*XxI{rCjvfsf%A8xQ5|R~qaU3A? zw=|PPsboAo%^3Sxu{>LG2~Yp!yIOPEpAmRW0%BjlnL%Yg>&2 z?@qmtS#8(rF$SkzYoX#?(mvVE3OoX9zkQIJ*)G5Tc8fK#y4j&}=Kx#Fe5vb&+8q2PyWA;cc z$(w7utt3&6Ty(d-HeoLmucIF!)1jjYB6G1S4&^7Dyaky+te3h?I#@&@*6-4 zbZS@bNhwQm?kI-4PYB_Jo(db6yekj{GZXbA6aqmiOho;;Pc7%7rHM~5Spd+aAKX+X zC<3kUUw-?|*s!0}u1?(b#HXBZ{fWX|!IOB*4YYKoTl{m1lur1E*=Qr;ISw^hqwom*|N`VR00eIMP!zo=RSm+B{fvsEfcw~(b)=kd0^hj`*uAjBG_$9$DmJK(ayVZLgR zo)r5e#}4_E%{>wvQpc9DOE7?^{-gNi$v*_^2E!5Q!}X^#{+n*yYrLj}106Fv?>XFf zUilt%izu-w<-o!9&V7;h&EShRMsMG_P+Nqt&Kdx3mCOjsiV zyn+!dp0>aJS6d{Z-7&MlJhqBAYrc&CFYJ0NxEA|N zC;X?|dNB5Gb56$S^%&KAva0v%#5{SyD3zA~?Y$iigKg!niPm04jKR|oKh~2CYfDwi z`M73KSe?Zs+Y}c~-)4Q?Osx;!-qfh|SZ9R4^r0K-l7mTjUe3;!3n>Y|F!^nS_e+kI37stUj(&qBaW3g{}g?rbgq$!nZ%5lh?L9gRhv z-hf$+0Bx6A3u#IZ{QY4j94m0~DywR=dcln{UD^$en90Cm}l2 ztwSHXw$cKA;|g5nSk2{3sA_$?iWV8g-lQg-&uSk`vDXmwzGAkfMQmede(RT=qT3iNfiNM4!LY)n0Uwc!7w*pNr=mf6r5VbQlJY_@2Bxg6BfaqB$ehY@P+ zIUNzNnt561(2Cl9x@qFyc`ZOd5wK4SrEMP!@A872x&I6n_iw?x%H3}r?(=gV3mWA{ z?KdkOEedb5&q;!1FN!nr3=p#Y+U@EWm-b+EvE#I%8nR-Vecm;Dm0Or?*0t=v30T+X zxOoH2vOFIs**@U@&eAaMU+f-0-D#iPzacl)e1<8^Jc1ry-BJbLN5-RQA3O+RRD26j zF1FJYmyw;zi`!Ss>WM3#(ZpHnDm}Jg3&&$nU>hY>gl%&Y2NdOKMy`HD-h&mMMOX!y z0gWgU2Dd1^uluL^m14SXy<}LmdK!b6`50hxZIn^M;kd@3bGSM^;QE_2m+Q5dCrsje z;j2TM@KXjDXY|(&JrxivJ_n*MWv67Jh%pKy;QAdEcXn;1CzObw`d;`%Htl%voqXWZ zYfwe%ITyJoGxj6__4jZXD80^9U|z%c_gq0La4^rpoukNsRN(Y}PUwo! zPndgljHD7$xqz8`#j-$C0@MM$Fn_QLKUWj?{6734hPOx~g3dHFzFF^28Qg4Ngi z;$>7)ZCfL>4YK93=yD*n_j1AN21W(&uu%QaJbbc1?B%-;kVkF?Fn7K#6etlCb)ZZ4 ze*F^kGSXg48N+eb*`cX?7sP2#Lc5oKKo_c;sdE4g~om9 zO=oGpTv!gI`o9HOr+b|fmG!uIEqHgw-&ToKq#OqfCvQ17-K<*I|OP^iot%reMa zwZo$OpRzE!bk-~xU0$D>Hw+J9VRmw6|0MSlCb8PGo!IisIB*Vsnd@+BzSerR}Ew%k%k72n8EDdIz-myiJ=t*nc8C&4rh zfWr6uK`w1aU*DsnG0b=4Jiqh#pg5`9qjBpaW8VWpqMDL$Zok9F>|u6gFnG5-;a=!2 zc+nx*tQH4y)Fzj#dE@zC`o(EG&mV9}theg_LD{%wvLe$FZV&>)G=p*egdO<$?XS-^ zGE%RJIm~80zYVLGrJCa~*7G}GIS7B{PCrcX`i=kdjVCK4eW9A`IC(QP%C`O@q)LQf zKMy!u+dYYSmn|~t1uIJuiQltIHYnH1fIqw<4BiXP;?&GyEX8X19s68H+&p4C(s&wM zAt`@EB#HmKOeBobd?)O-@diwD&-C^dHVe0{d|e9+p^8uQ8KANO%{iMKdCDQ0B<*%w zxDK9tO&UaKLkU5M2#mvXOyVmmqt&SS$_Uoo`+crf9+R!pHERi9w2qJ@6ocaA3A{=E zTott0*;TSH?v(?{46-Q0n#ng-)j$4O(qU_;Isd zBvSmVfZT|%1-&n%v3ysaa*tk4FU4^5Xa=A!$!R0kj7fn<-Y^um&XT6{$j{}i?zxby z!|L;MwUn&3ACVJ{*DDLgub>^HOH^^9u2m4!@3VYfm}Da+bJuG*PrcMC^)870|6R}6irxc~2GBKS z0uzCGA>!?S_}UZHUye3@=cY7#VYlzX_rux8OVsjd#%K$QX&%x?+4RYKuq+b3&JzcC z>Y#*aQg=O^fiGc~gr?qB%aLC@(XP~>DgPUJE>HPd>6y#(Pg>wa$O}0nJePvwdxqi6wb%ocb%C2OwmV2B&JBr zSBK(L{h3I@mxGhe{ZU8W7`(rq`6<~WTfrpoOyKlK3f-Y zM`MYPRB#Ri2##)6%k39#1>l+bL&311nQkM&^xQ$WwiVg;11iAKcnbxAJr zMyX2LZ+L^XN+baDXD= zWr7^H>k)y=CI8M#dx9D74WOYenI43SJ2bhc4x9N@X(wEb5UWdh|6q2xHym9qO|OaT z=1XeUOD6jM$Z5eGeM7}185lqNd6eJdh`sknqPM9+;o9?zzSlwQyKp3oLol$<#fna1 zG;YhO7Bgke7e<~%*eAlWx^gQ6aR2=kDnMl&OfQjk+ubpYjq+aar^1);?J}uR2lOOd zNRJ|fUq|?91p=KR1e7lsAyBRWWB8r_iE;qb4<6@~R%LkZBNDqEk?BdStwNwP5SV0pMr- z>Zh~azopiHj{r;wUQz!UH=pl@=ucp0s|qq6)S&w}qsqFpI1;w+rTER%G;q4xbS&eY*dXWrRX6Z)F3 zYPoG?t5N!FZxnHdpoA;;?(KZ$5%E1@f8-Q#Vua|6wU?Qudn{?ORSyh`_u&DJv~GG? zXEW{ASw6>EQE@qL8z)ZzU8cYJRzuYN>_H~aqQwRb(8T~9B15mLHeKcJ)Y{r;N1NACcEspMcbtk2cc!PDu{BRvR$ zIOmx}j=`T-Ve~pwMzOATYB01h|7w63f`3Eo#_i;IWvwCQe=&cCn}Yvn`_+4`E4=Qk zz0|L>xWnK2J?kHNmq1gYOf(oV^%s#^AQNS4JXey_8LRLs#bIS`wZ}ya`m)K>ifUo$ zEnH78^sOlQG3-6y3Ke0^^nCJpg#>cq@(~zi!9ld>H=6i2N5mAr-jqtteaGJp5jVp< z_#|qixE3P!lQJ)@CEGv+!(sWMK#Z{BNamY*H1u4Kss-j&-csIC*mT#gjL*Qz{AoYw zUG1k+kSzPa;}SuEtlF&iy93eZ<#ngXYVD~z-k5s(&DzV)vkuG6DdyxOZdXi9NzY~fpG%npGmPJ$V==e; zh``j4>7)18y)^iXO@mAJUXwl`-Q13$gn~aR2iL@9mR0A-nm+=~w(O);3nDnZD8`DO zbJyE`Y~Da?+Ig5bB;g$_2LSMNpL@!vX>d;EYS#ULZ{Atbd=y~)LC3_8K3y&b6<8Gj z=?0Fo0;lG(w9=~C_gkcUPMjM7&|1_cr;brj|G0gH)$YQeM!L@q`@~C0^YKttpkF3A zYe;M1A>$+SeD4Tz>4JWiD9|1EkA3!cU8fI;llZ;XRZ+bAVObT4b+uhZS$4JUw@n*> z-`E?pD;0n*sfoP$)ulrds5pxDvRQD2{ns!W>VNb{X`>^!aROYY|1GXjY^aov<$4?P zM#S=Jn|JoVS4bcvS1Q&_v9a#6`x%SRJV>Ef+?7jh{TIOh0fwfP@?6~~AuJNiSg)_M z>$WdwHE%Oi`;7w5vMUe`PufQgSkN$^tXPP5De~PCm+gIIE@y1{8fzD3XP;uHkS~)o zj))X{N2INWRHPF!)B)aNd|t5^2`aPrG-T;5nP zefpC8T-nL)F)6lz?-a#NVM+EAXfl70E7U61-fZa`y~9#NMqTQt+t!IWEy8y=MAx|q z&^#2J7p-?jvH|bl<7vLT@*w|>=lJtiNAo|LGpCy_wx1B>AV_Z8R^n%lE+?#w+Wg|s z)}uB46Joui=|f-QWv?x^|0*8J`aXciIpg6?U|ngneu(y4X!S~bMBsFCJgs*53CDyjl$W(I8$G zx>PM^GjT9ojzCA&%ScCF5;QJVqc%0ln@%z|rlED`C>1hjz>j>+QNu0O_UkOzR<6Lo z-BXrqzus#%4T>_0(wx8na@Jg489qp;l=OW#eIM<~&e&&M9p%610=oM?)4_}388yC5 zLT-?;53*MjFH#<{?GZ?87k#^>@p<8%8~5p9#2W5GP^O6?k7lF4^E`+i7!m$Q_q|z4 z{o{eso-T3$pA-FSvhWHsD{kQq1~|Szw7c#<`X|1wMEO5eUTG(p6~FCX{f9=*g`T7Z zi`^YtYaPF6vOud&eX#u@$HdU2)hukZVd9Hr0sX|d0ZO-DbC?%S0T+V#dfe7_E4oDU z@>9QIO2>LH?@rJ0ji%*=T*X=SJy{Yh*@j-uC%Z^0fd7RmI4`-P`$4hL_Ms`PR{iEc(lgx= z^Hbm)yYvp{W`$n&oUGrh>;Chyt3%V1&59u?B0_X;O2GL*4B|FjWqw~A!?n;7A}4-X zXLDpqMkmqVDQlhPwJqp|pJlbVM69~#mY~$C!DqXy&qCWYbls(!{(e2Pg>c{LOuGaH3x=JbY#rjl-rjrB@VUy#6{5>B1fHl%GFcyS;?>577+NAD$ zjuSv*|3^-qbe`4n!BL<*Vo$u3GT-efQ5D6gW=mh(zLNF$_Di=U=X67f8FcZaD>RI~ zcQ-=8zu2l=YBjMSj)JT3d09xTgxT--&lQdy%|eNgVLOO`A>A=-o67b4foy2l0dQ_K zb9Bsl=jARdkNy9_2Z3gNc`)k8{f8RfX?kcNZ z4Pc|ynyiIsWf)#aG8e=p%gF0F`{fHGt-!RddDF*^%Lco`<(w(UPI^MdliG+#5?N&a z&Ih5|VKCCOi*O9ju!;XsIsY_#Mk=4vGeDPmV4+GLnpIrcZO}?+{q)7i&S&x7+$NhK ziJC>F7=l7xp=cBlmRhnFoN@r~ytIMO{k51ItN&0&&vLExptgGM!f^ebb<_I`K|lP% zcb8ca-vr6DwG(7q;xhxeccSTLe}0Uht8v}boO*c|#x1RCy;Uq%ZYYr1?AEbTRwb1W z#Te}F;cTC2VafL5THdu$44E`X7wrXF%nmU7OZ)Od1DA$Ah7!;Ex%24KEp6o_(A-{A zDDXhd);bP`4EaMM5%N3-8p#IXvu9rNI!?P- zQMV72*IlK191>29N?K&(*AXBu_sk%kopFHw_RllE15 zOjFz~ml@bHXO$gRmHC`iX&xKQ6FdkrR8gv`I3~%KJV!vurZaR37wKZ1%fGoVAfM|~ zX$24T*=1+c;6PdT!p$lBkO*8f zx*}}(DEX83C*Ky>6{lE(RQi25Gd8uepr=skLq;Q zX25GKi;9y(78D!u&{7@Qkbv;mQ5FPcT9MrDK|n(D6v}P0P$AV})9mU`oNh%x$vf+U z9mNX3srZzqU>#2z6zTG&_Q9DAXVRB7p=!ZY1L}q(MnY_mJ=(&b^(+0O=unzK|x|6zE)>SaSrmA+`k9kFyr1fMF*n?cE-v+ z7Sl3Mf_--uvxc{Fr+D2iMK)h%j_#92rSY3H1o);*)Un685Qo*-q3!T<#k+3Ay+m9t zG7NOQQROcFC?&=KlK+1gL>SzZ{hR9puirBtl9Zb^E;kia z#PT|p*uUoD8Prj7fLz&cOQ~bQCz7X;b}cIA(X}0#w!^4BW|X|r^!wy&5&@;6x`)<( zHSMU+1ayt{e`J_Hav#7cvH#Py`|{}74P=!am~35q`6c9CwaZD06+kH)`7Fz_#x4vV zH#L)%`laf~GON=3Id@JxeS9H-diG^CP~PX1d=UejwQc$ozxBS-S-2X;Q619ruD-O` z&L=X~KQ-*F{kyU^l$B}4i-2a>XNhCOE$4vOTVU~vDR0~faES~s8(NG291mBv;$7!3INg)Ozs89}CQlJ^>6Az#?sIv~jG_V# zsD^oZM4*sP$8P5LXr8F_Gc{)7ur0pQ9$DGY%#72w%BMy$HE`IRUZ(PLFPHDMr8ab@ zNT;-tC1$hO-}jO&Ujg*;0-^-S2*0$`JHK`?tETZLJxS~^+qPB%L#)SUjJmCJuPiPX zo;WPk$5%Y^s`K0;+vH0B(I@LWzEGESkF~plY)m-ab#RSLfWZeh3g{)DOSI)0s5j-q zvcftpzTxh^0o-Eng;Qa5<)_mW?nesMbm8m>HQOi|0U0Q1Z4-i#Z?JLvJbK4UtbHYKBh3asm!v<=5n z%@M-#@x`YouGbrBN_Q^~(Kyi?*g{y%H&CpxKPNXuUD(F_7mn`9ZFt z%V&2(;NR@Z&8S;$zFsTjUt__{xXEMn^IRV{?U+U`!1q~V<{Kk9)BghB)Bh`Dly@!1 zuQJ4F2nfw8o4~U>qivMk7Qm!T+MuMjj&G>zXJ6S(3{MtP!cHkC_a~Qek-cqt8E1xg zNZOv0bFPzLbt17j*e?xE&1^<$Cej=sG05TuA05sK+@#(;C9h8_(WgCRV|XP?1gWBb z#YrYHDTtU@i@?Sx+s0PB%Y*HD;X>N%n0XT+4M?b$&LEZ{i5ui6$zg~V;~e3iDBc>c z`w!b4`SL{#A+RK0u(#2Dg+BaAu!XN|zuHqqR_5q$*P7a)wIIQy4Le&dep*i zS!PkBWuY#40>t>WR`N`7O>}Xfkl>YbVM~$xzOKBIEPZaEKvIMXIiLBW0ombF7eUEr z-Ti>^E2E(9Fe(lGpf!rUO6j#eKs5GPW9FP!ogx)puHEmYA~W_YqJ%xI>d+jX^uhd6 z*);LVv%B0#9n#!VCv7>-f{{b{AY2;F*IE5`#k&G5xxU}8far@dpJFQJr>=_b@x}N? zG?~l!s--{Yobs!KCdl6NMo-RyAidG*P|jZ8_ zD!E$FF$ssq^||LI<<12ByY@AOzTv}a3@~-8|1+=ofA>48=3g7MMc~Hi3xS@F7qE{+ z7jaF?TE1aG_OMTqu!3}d=e?R&^2mtK0Fve~79rVsslhkd+q&S~H9H}lr;9*gDeIQy z=>c=Qj}^Sg*pz66r}&o`;5WS-l$Xm7F5i9(FeGX*s9AI{(@fWK@2;ZP-cNUh1kw^x zt*B`Vw(vcO?$?956 zDWY7?#&zZuwUt?Vrkxa6qo(cfm;!KNEZ=JDmlhNayv}_nkb4#g_lr6I8+lw%R8s|8ayRTsJ zL?iR(V00A4uc|Z+DOjEthDZw4^pU4ycUUnm5K9^6I8a30iMP5!ysGZ}+ZdF*-xH(M};G#RRH07e+X&!y*HTUcKQ#lfSaWeMmP_tpcjB7@P z*9+&=?V*|zmn-pDeCuFggIPQ@=8$r^Z2JPA#gv2AkIuJ$!f zBZ}^}5>a}o?D+qCM)6*hAD1NKCoW(2DPSK8FA!vnkNlel(qjuw{YD8F3VkxU{uY#O zmCw%{sa$39Rsgy4ir&wDs9G}-HU!)K$}XIdgIxnppX2D!^O&epEPb7BjZ`vkNOX0H zrfy7mYyWJd6i~xM6y0qUi35PSymrllVRtf(kVd_&2Py=P$?(+sMpI)O@ZQEy1p{}3 zhk11}<@1-o&ES-wTyrmH@Qjh;2p9YyiORo(WFcDl^KsGLuU*GK{!}6$yJAojGG23d zz$E`DG3A-EiF~OT!p^)o_DwtS^O@%=Rl7EngGQ6dy&!0cDkT2%slV_|I-fe;dADZPS|QV@k_Rl4)`R^Vu2B-C!h+?yC9u6_CXZjWlK3VR z7sZx)k9OUe6;GsX=eM;PDXip+nnQ8H?fKcbHS*dzRrK{4u;thbt$GrZC=?7#7-mCF za5!t(Dn|;+Yd$4}X}j9v^jC7fXy=GqkMvI%_@wNr#5D{m`j)8T_LFTeuh?3st2g%D z-Gc3qaeW#y)l{{^AWMq#d}pm=re3WFql)MLyPFPlxoBVpordwdjgu%Y(ZC#L)|YkL zlR{+BrqP6_1p4mx^k<`s=J&JWL(&16%_Yu!ThZYqP69{Wcx2Rw-aF7VWLVN8WVWx0 z*Aehz92a^@Ez2lGOeKWqE(+TeNH5S-$l9KwVM`JrlCfhg;&y3Fcpzh#CPpd9HN#%< z+4M8rGOzqkADXnp@-(8DG-AB8?xVpJi~mpSgt5o* z#iBX0z?giX9j;vZNzw+3mVO#aL$;nR0)FQWug!-k)@#N)d==DJ@W~IZwIEK0>2S1J z4YWV3SyHsjNYB818Z+yO6gkj(rb5u8$Q`LGpyQX?J;s2_a5D!BG<+wPgA0^sg zJptrOV}n|`pxFF>+HLlf;$ps=KmA?_QJwHiV-zn9gBw>3WzW%qycMD;>5!U2wgz|* zA&^k5Ktt(Eks;;T<-=|{&W%9y+`5W#n{;|Vy@gMgqRL|yDVD!dkp!v31aSf%)~{dJ zYRj+<;1oI6HH8_7<0X^r4rU2Ly2teLlH@MK{m58jO__!Iqo>VZs4S#*?%OCoU4X+3 zGPa7@`jl##4o}S*4N#3WV!@lcB$RfTdF|no?Tfx}|KihnCE&M3Yjrd; zI8@=6Rv$p%)^obx*qYvMDSp;?Xc4SuQtif5*LY-x+N4o6Lc}azREq!^l~(6cCRyynmeC?m8B}A^sRWji%zGR+S{gr z$!Kuv_2L|eOOGgK+bI66NN2=*yZ=rfOZZFiu#M=O=QsC=uz` z@Y2fK(87Z-%huQaQh}Hg$RF(3B&EjHfKd~vx8TRv692-pTBVDVs zgdk;aTVHm`$Tnmb-`V(*^wf`(!IK`mj43JlDW}qr*-~z!oXBlw3yqWfBx3(XEXdBT zJk}vD52*=JgJ9Xd#5;Kvv@gaidm%eScu;LCZZ>`UE@JxyiiEw`t}iGJrUir+2+i6% z>i4TA#<5cu$r~q9n_e+@yOUqhe*kMdUb=p%FhS|i?D70m#F+Dn*)LR`lve+!qGyuJ}Qes*92-c1oS0X(~8s}6Eh_lDIG}vSG%Czk?UBcvl0Q@ z6|RnKzIZ+X7GBdITr4jQzOQdYr8hb7t)+53bD>Yvh ze>V(y#ob*C z!9$SXP^6ULRwTF-cM2_1v~Qlh);?#ib@sZ>`zhaZ&1?SeIp%MS8QS`st(I5=Myyaz z+Bu+@mLxG0rf_FitY1B!I;Pmx7`F5kQ!tXi9>?k5zPOBQx9D>FIiS#$`!|Qc^bd26 zs#_BkOoDTAtNb$x2bFU4bl8oEV**6NPokofkoyydz0{nW6-$@I_Z-3l6w*zG6iZIa z0W(q$a7v%n#ZwU;3cZ`LlX4i1E!wug0fE46Cg*cD13G+{6B;p0W2AB^%my5BjmG(q zlARd$Elf^I*y_B1DVc@SA|6Gr>=(F0BxtD%jgcB?&Ri-wNJdqR79AAlRK}z=n=E0y zF|eayLuX$&{|z@A#k(@~OMTvq#$^x`CGc+ShLlM5wf*e?irsU&NzQ#+1{GIcE*IcJ zYcz%w`_tboEj9j<9=75bs!vKTWF4YagTB#l>&S>>d9q+G+~z0Gxx>i^I4!D{7+4oB5(|B3N>A^zBcQ z)y)+C3g4#FLk7eF-O%m2*Qz)BJA>q;oU-|gKF~9tdZMTiO$I^sWMqdm(a%m6GM_Wd zK5m2nkRv?|>OrJlf0|}Z%uiyJr{@1w^6Z+@=VzZNSeBJoq=+FsFUAz+XE^n;Fu5Sq zPj9X~IHwEO|K(3&8R}bB3$2F)S7A0GuSIcX?dzP{@;KX>G#3hq2Mw9)1LB*&*-Z0K zm*6ko0&$2&Lc7rk0~Y>@6BB;=fV$wLesIbNX{uN}Qiz{(+o8muESX{POi8WPjTjNT zRy9N&$;XKS?1--u=e~K0ok8MCKZU$kZNOTHChIoKZ2fcM^jvV`$^j@^?5#p*J4fL3 zqDPjCKsMmj|J{VE=j1rFc4W=&>mW#Ciyj1HidjZ@xAZ_<1{stJY7xaK9dwPQQ7F0U zk=TISgjVF9bcQ*Uc6Kp`BI_a39{GNk(K=yJft6BID7MxOIAPw1FlH4_eC{aq6|# zD@8!Ms;e5^oeiTERJySQ)f?dEzX48(>H}tHn|QsLl>sK7v9AfO4ikE(aC5~!t;~~_ zw@E2&EY|DA!LD;ouu7Qt^#Gs`v-1ud2%VHl_5o@&KRuS!Fx8X|5tcUQQ@=)QE}N9T z3(>ifsRq&bn;2`i>1v|3&*Pj_Ebk}E z-C<&5PS_ju0i)}0{F0!UD|kLnaoKmM^;c)>3q4ozGGcC$)J$a$Evkeg1Hw-6aGJJC zWX!hlm64BZR3GMama0Nv=Gz7rH6%V%mnF+|baT11=bM7!EwGETl8 z#rI^9#Lp6kvW?4CEGd=@#BrLKe#ij=w9F_CiR$06>`I)HiK~r!6L8-YZ{UWBGo1-X zd^4k0^fqJYlKeMh&t>gldG>FU1zNnj2J-#Ct2bpmClZIV{~966#0NFp^$IDf_65;H zp+1iRmqE%&q4=0GVop98QbEO`CaPNiDQ6PSS?my}`YA0!=3~zlRoXs}{mcpklxd zKzkdH0*dej9AtEWAPvP2aqCdoj)2^3SQboXuQzR;&`ME-=XIaKMUS%+nwTMDy=@d0 zoaIAP$7xRzn!P{``o-bs*tqHlKJce;c{9#YuhhLM%SmsB#TiPMJo;ypZ_{>^^irth zTy39T!y30r4pp_MlDB4)juIG_982oIDd~e^bcAfKo%N(KmM1sbm;Hp0H$<#fEj+<6 zaN;80kT+Hv=Xh)>!+>01O@4>zb0uG|VRf3B+13g|7(9l#n7#VeI?@1Y^ z2}N6?Pz5yc)6}88)UiNCM@U>0f~h@h8PZtV=2|kaJ{UESoF2t2Ws=UzjpbOTqfFEs zr+6ga47Y}xR2mCS39_=Mn&~Qo+@JJakdmOtQjPRgU)wxJ_*S;M>#K69>*LO()#Gf$ z3cV*UBea00osBUdOe;iiwGk=4Ir64*L?TYiX|Puuy7_9dqXwIdC&DUlv4M%>0E$tEIxS z{UBtIhEjD-wfp~fUqNJbUebx@}%qb5Oz%RG#J_Rt*s6Rqn~`2IBeK#DlPX`iO&D3IM%joDaQ* zqSR>4CEBY3u4o?rv}ghV1&tU3lsvw`52HXdy|(u0z4O`j?nb7feTpDWP@nyASx%)F z`ppp&T=h#=*!0&_adaYHPhnO|GOcTt|EZ!kJAm=yXc_}TCaoh*Af}#~V|Y?8sgzv` zq+%G8kV1ovYvb&PLL1Bu*u+rs@|rAKjuZ$j+_M^0y_d>*siQu90b^uW%(7BBcX{?N z+^mL%Jdz5~7q_TR*>Y8XQ4Ng?rDobO@~>$*7o{#k?S&fWAD&Z3&jId*UJF5DnBCF1%nzFhkgk&QfKG#8l$Ww$zo&3e` zs#MwflQ?=zSIAl#7L2C2M|YySjue;Mu)y6<5x@{}XPO8SR%(=%YFxTydGAc)j!q^K_vfV*y-%VIRz!BmNBL_po5wM$+_UtFODGK z4Ag)-oYVG23Xp__a_CAinZA}?JK3I`8dE5)q76z;&wx?*&9znXdnKj9dp9xJ`>EvPc%Mcx zhuNRCL?t9Jh)NP^=e6Q*xFlsm7`a!}{a{!w>LhAIejCKls9$?$K8-AF4r*$`N!bpJ zVryFFU7@3<)SM>DDfP&;GRb^c|H~A&e3l*Y=!qyc$%Sa%o?zb91i@A1w1J2&VDgz( zBOSXgmY_Tzl*nq5UAb5zhLuTz&P<)jBz;@t>R1V=flJw!T|#2}eNYvdM5LWI7iz9r z&H;F=4|!wjX#3Zt2Yz#-58T0ZUMNgx6JgEaUfAE9-Rg{34cF&X%RBB#&wu5w#dPLd zZCl04OZF}#pCB{+Re83h3Q6*Yi_|VL?6B zSZPM0)V=BcFhXZ+))^x8D2cFF3XdM^2LF47ZGEsnFS7nNv^M;`(fVh7oh9h#K|M>_ zp{kyTgQpaOS|Z7xoQfEflC$qvHqlHWwzTe6-~OPdN=h-(NBY^2EkL75at>$~`0~Q{ zPb^7l)2PM-O!H=TSEvvXm3Z)L-zZrbA5kN^R7wTw+Ypya&odW6Zf?G>$2z> z9%5f5zJnaMq3YA56c?jieBh`%QRX^}&IG`t{pB<9K#SX*#=h>MEm!iG+R|wm}D$Z_ckaMQr^HJ{QOb?nkT)_^0FecuNvFWv@C+sjNc#}6u8eIelD4qSSv#~ z3cg1Gcmv|ZHZ9mM;aXDiG<3=ZSLlKhVsrfQaaqm%3~Z;$MI!?N3+H^mG8MTFNJU2M zy@uXvTojH`7)-Op5Mb~N>GM+>qh8ShCY|Ne!0%P+QQO?frI8ybj4mB7d0N$|XoitP zf~A{c{QZwIjrmc>Q73g<*@iaM`NZnQIDG;RWCuWTH z>lD2-Qt^XEka&v^)x0MH1JLPSO;4=^Fu){}5d0oOT4lI~LWqinJk%WIFVEsyfNAPV zh-_t!CcPRxo?O>WE9}juh-O#Q&@GBAi|~J0iIE}<^l^uma4b|w;Ju{8%i|P{qvQ6= z439F#UPl-*7QdDk8-2&hGb`6Rtp+wEqYrrbu{}e5!!1>yjI~fZj#bDUPCkWHAzn9B zKjYe|iaO(C3QG&DW~b_8$H=!oL^i)ptnZ|)wpU>l7v!*s)K3%YMLO(-d8BKb3MTYnp&NCS$*) ze0I!ue2M%Cy)@UMSYvN{58-QWDfmqoHA*7iSIPxPc;2OqD4 zYqB+4&Y)UzW5yj2k@U%l%>p2dURe?$x5T|*M?<^}4H1Fa?hGAI@{5;X11n3Vv9 zb4}42yZ|*eao2+@41p+;9PW;D9_`Z7S3Gt~`swQ>rg;r43l+AVw$W!Cwh-IA4Eafm zRC;X_p#KJIQF9j7RT^VCgYSWV)OtdpvN;3z~nk_aUg+?*L z;}!KHo!NUS4>{Uz&u=lCsEXCqELq>6V80vy1{X3L^JZ!>xmM+SH(Gj4$$0N5+wr)QD#1R@yEf@cp0`R#6#8N`WWajfimtUkuY+ z6)TEZ8RGvGYr~IJ0R?^`UwbuRiHWp!76#=rB4cik6Jil&sWyBujnDT&^j7t^Y=OiOFnJX7;r|PR&tQVp#BoS=$lb=WJ(Z~Rt zi={t7La=~NnreUgb8>5=xQCix7`tMzE(yIxt5k-LQDc;rhpW1TIe8JnOCDN`MSLiN z6|>JZJFtk96!T-v1(-WkrBP|Qfz{%BGU#H>?%q{9XpMq-)Vl>Ii!zu*k#8njal({T z2u}nE)nleM4A>@~}QK5KFQtuMP~e{Xh~r%V=HB zvjqHc^H&b6p^|%qMS4;`WF%zHk#UhkwGl<0iP9bu0FCNYH8VFy;Tbp5gHfJ^0=-JG zr6`#S+V(G(_MxjP)bm>LXlVFdHmrI(gj63S5utRbAn(DluV#C`PESBOn@r=vPpFJ_T!npbXHu&D2Zj9N2vQWmL+GdA6yG}b%X$ijnz zX>?u5L=ft15Rx8ITDfM-$yunYVo|&x!M2cP+_V+RoE7k!)x}`w^k4e7@Q?o_zoRdx z2yawdvl!w}pgaRWCFeXyAQzjxYfLy)k(f0aLp}8zR`mK{GKrpAv03`nm>x(I zHM;k{9=*reynysW3g#cgwqx&OQ%2KD7Ai*H>*P;DN(_CAD>Ntdi>P3)f36U2^*Mww zacDN{80D#(De<95ul+?T=;J$ISI~=p+#xI;JeG}`57C37mzO`wQqsv{$11GhHsdxCLe{*0y(y348O6^xQl`ysUG z7lV(|>`liBP&%k4v~?|;ig3m}oo%bd2}I9x!)J_R*5}jyUBH`lc1J_q|B=K#BZ*Cf zZdwuH03Kr>v8JAB1;v~9RYg>&eAQ}xLP@2SZ?QJToCLAF6jjVmKMT|3f(u@UDxpt* zQ_V9h>Si!NM~n7&iuS7I=F{8;O!&Z?noxeza|Z!Q5vVMYQ3zgQ>yKzkwvKEJMqyV6 zGL%8Q+IzwC)W`mkb@a{R+>(j$bv~byQnxyAVqn;=wk%NXnBD??#rtxF?0SER%^e=_ zDBKsm+L@ZZ)GX+;#gX&j0{pv94(HxqK(NwPk+siKTl;H%Y7BQT&?$$wd@g#7d7L>= z__a65jWI4&dB&?ZPahjr>#)dykKUq@K!r$AHg$kD@0p~jc^^$P0e}CAIs&XM0*)58 ziUJTgOcQ}|2Ka@tYTmBwlN_K^4z%8?JDHvEEavxq{$75p9#upwSrzmzJq(=#^1sqO z{oOg0&m0hGw(L6DpA><*La6X)gDs?9igU5}g1lNvay`kDZ8gbZ;;)?X*u?^(Q8X$H zl%kC2uMyp=2;nTAOyw~VkdPJ%uAiA<+LG~?Hc21dlTs|n;V=^SX88&|8hsPKIDGas z=0y`%FwYr@O}j${SIOGI{r=UMv2xAp5&YXL#MzfXuTL@~38A+ppIzvu$@t4BqH0~Y z$*lm9Z=(-lIESA%BymnfA}Mffe4|@O*Y`qXUQz!JhLk*rg?rd@-!DNb+TlGVNb2`F z_mknx%whm4Zx4?4Q#|`#{~5ReN)^{>jw)1=pvW2q@fX;WjQ-`_58hjbz+Qh|ck^PG z;QM$U#!&Q14;{xu`^vu&%8+;YYBa(bmQ6)BNeZ+UV^VtKaynp*i)1-L3{i#kkVNsR z#|<$+88P1(FuW#Yj+0Z&kypZDmDIW$Q?JLIen#vtTL@4oY_N~2cc@c#MBZS&B*CTr0a;Z^6v!w?QwO%NsuOl(y$#hk^yGCP% zB!55iZ)Bb5s1tjhS7`3029KRn-U-qt z(oS4C&NiG65^Cj14emdwTIjT;k{zY&zw9fP=&+Gd(LS=BO_bFWwiFQLV?VK{^-7f$ z?c^^TOepb~2x!$A-4I5AB%V5Ic;36t4Ehs+To%Ca@4A8?auRj^IAQU-R-XGgAT!>y!l@i!#C%<0&t&e z(Sdt=LPyOybKX9o+S5;0G6Oz7TeXLuDf7s)wFG0HwO}Ds2$=ebS^9Tf@K|*k6_ljD zv1Al~Jw=62nbDVw2UA(%upnvVTX}Ip^+U&K)ihJ^jOyu(QV4T3IDb_!&QmD2)LBYm z-28m|k)Iy3ll)uu)xG3T^DD28-K8#2;4!lO5>`Z2aU8Nh`EiMO@n14$e(r7@FMV2i z{rCF}Z2;^Z`X6gVj=`v64&j0gC;U=hHG}jLeWL;;1tqqNZHJjm7X4Im72mSddJ!p7 z^`TV}Y>@dAkQx;Vhu0%K=@5ryWH#R*R@PkOk@*`Pbp8UdmMvVz1Cug=LFg#hdNFh` z0gJ`xe78-3BLTaZ$6P@z1YFZhRsHNNnZ%D*WX@X9rr(;(X`z3-fxXS|T7bP}6g-{w zaQ8ca-!Nz{m32)-cy~lOFi$3|c!|t)V~eqj*HrQTW1`xSW}oego|@x0&PG}Zb9M;_ zgt5m8N&@ufLk2_&`gO6&1U5_q6E!2BA|92;Xk`46y4|$t7Ez4rlBi6hLA;!NT8IZR z7`~5)d=c)+BEK1`1u&3$OIS}O87=6c3k2D88I|7Ej;w3LSMWbKQ5#O$wOnIAtEhk7 zZY6XBMR~C^O=YTCur=` z;95#$I$z@%6>}5>=j9RoVMN5_T80U!a-GAJ(v9Q`5{6R^PAqmDHXhZ;vibMr;`S#d z6N9dszdeq;;j0}5helei>wBV?@cgl<%HFIS8yDNamB>EfF7QA`pVMl0s&+Sx63|yv zI+uHpQ)?j2a)81`j=qY0w1{z#gpEY~Bcm~gDhJ7*3QJI+E~CeE?@|RF^2O(#JH3zSSFe7Y;uBxEtSp{= zVtTNLl|o*dXO`^vH6Hpy6JGW!6{%u`35$|m0AFuZIo_uMG*_10q=e8@hN-t zm<|wuk#c~^rXZ+StmJ`_>})jr*Yjl7n}+Uq_8 zBt@$1K9(Vv=Wpj2a~>w}g9!KyTE{Q3F6DZGd#IX~q)dYbB!LlHkfAk0&mPD@%oy5l zs7otq0TQjMrFbL8LuLUtl>M6{2fb^4go6>(cyl7(1xu3v^)>~DDc%rKEu`0}28AF2 z_vmLGlXbnKj$TT!EgZtL9`;5gjItL~tWn(&x5pZrO>k(qP{tF7PDjnF20Z|9JD3=D z$g5G}5lt669DqhP(lr(u-KA9Ue(cN?c+xC&B;mSu+pf0;kKWoo!tRd|zhoxUqWKyV zz9#Il^4c%qE`p9XorJ7>b4-n4kvf!5S-XNYjUg2b<=Sy@ysYeIeALasN)1p<{{$(+ zi0QIyT6T%zd>RiRsbzMN&m9&`S0w~{|?eZ z8~I-RGyS7alXnaV?f9kvG+~QJ`JPvBm)QjnN<-Y2G*Jczv8fd!S30@WDu2@uBE;$D zwCO|1kPHZdJE>#ul@Qt+RVC|y-ofB9aH9 z9QIZTPGvrRP)ltrwoU9+Q!u`|lAHb6jWj%d%y{#dBF(L>hd!mio=tctSP)(XLHh#( zqjab7^uzFN88sB`02(NQGe!q2<&@1v>r%<6=I}x+mvSl?L>ZREHmU+LeiH$)R%C}l zCEtpA_0ymzQ|)u1?G^5@oTWI>=Td6XTz)dfs?N_;qzg2G;(3q7X@iZ?1bL-}nSpm> zyR&^5Q*j6;C{90~->)IVGT=*)ut6yE9WpREEp3|!g2S{-q?{#@Cy*Kyp#w@Tv)qto z^ApL?vB(8NjkNVLqSJ7sDzk0TEWkv3QJV`ccE;E)5^X?y*_3-vz1v{5?=!1KKQ#3N zqXBZDlc9a5*!aBuy@yL#&_b$`zDm8{E*VUQQp+?alAs~N(mgAxC@co?H23wc;=PJ3 zjKZogDJ2}1RngV{QB)X^#DFlXC~X>b36mztS5Q@q=S?G+Tr=BMAqSGTLnNoomeLs% z7#KGedl|@i9Ys-*NH>b{0{RhQm|)dq?e5JW_rbcQVv?aH4dUVA;@#>`M=ZV z)gvG#=0v1@4v^^CvPF46K*nUbS_LAjz|*&J#(LT`TTb7E>jI6tZX@+_9m=^tD(Oa5 zwv`!ukvb&QiZ#8TcvJ{XCf{zgG7ZK~zfej!oK2#oR`&AXkca^*43QsVFRR-^p0XBT z#t?~+uq*0itQQtB#g_fVfyL0Anz#FlpmQ3Tkn;^w_$+~k+>g{xCs2Xjc*dFM zRz6Zr$ujd7W(FqApDoe4zV0n!L6$%V9doz@-SW5q69C=Q*x(Ae{@=n{Y$_tWS>$O{ z=uue3mBMTac1`ClXtI!GY2z=^zKSSY+$-*iTF*Ev9WQX7@2_% z4+`*>$LUgxx-Dsm?XF@@!~BpmFZS_~XD5B2q{ZZkR#IzXHPLNWd+g?KLWe6A?!X2@ z!=Mmcvwv4(|M!6)rr~AU4x65Cn!2Yi-k4|KxpPgSMXZj#M8HApo|(m~+ID|Gl=ZY; zvO3zs6p?2Sn=YQ_qn zkxZwekdSUDc#;a4m#K;Hw1SubU>V!RRK^eQ=x4`h##iI9=R4j>Pm}SM zm9*0o&n6Cj$LHWzFHv27qM@h)hWfkaey(y;_UwTkeiW>iE*s>tW?A4ISNn1(XgPJ= zm<>C|!Uv(lN|a&vMeDR!PlI*!{VOrd?4w8kjM`5~aqz#oQou)fx z1yJ+~LgKGFsV9m!NGEKhZU7CW!q|2H%GvWPEY1EeC?Of z5O7F!Vk$A79Uxopx$v}^=Q`mywjbd+`(6}C^Ccs?a{*A99I6kI5I{uWTBJ3ckFd@1 z{Lc8XJBlpGi&DxP$@tE)OrsXY`&Yj7U!BY$93RA!y;u)LXyVPXp8)a*03QIxpeU0# zBY@?b2HjqyThx%npf;#t;gf*I7g;nPqriQVI!mWn64e8ywg?bwx0kG|>o#IkWA#boDt)EMxV}IpJ02&HH ziK`Ya%mCB_1`U1&o`-ob<^$tPPki*Ckao;njFe{g-mxVhA$^s#`iY>E9>blZ2@no3v8ZM>`^>d}shhuzz79fwTscx^p(`D()-L5$!kzxot6iG8L#n_HXud%EH z!{I=4-Pw{Ky5nzro54uXt|Gqb%)qtCXz;fteG{0~bDHg5w@pTnn(FETv>Qh-MX-QQ8O4BPv8KJRN&@P(Ldqg?LNH0@X3ds>yoXh3`?x~CiQu-` zHd0E%omjQ*2Ax&d(IholRx^*2FL)@qULT&6N~K_f z$h3DX%yETfoS|;e?MqY9n*FQN8|D&}r*4Bbu)k)nSQ0HyM3Wqf&`vshe&InW zEyv$1m>nSaTB-3GCbab6P__tFK&V7ok?c;40-2a)^Y?t7hliWzP#>zQYp}6!WxZFx zd>irTB^@(0-5$Ook3*=gBE60=1BXQ$3Nj{V4wTN>irC) zW6`=qz!Id(tSiF2xL;?n<#|C0laqskVxMtTqXW_xKtW4L0cD<4Q6WG_0HedF!06jM zrLPrUH|Qzh0G<<4Y$v*e@#ptSO)Cu=O;dIc^8I#rgEDLU>>xQQ(I`wC;{RKqj+XwW zg&gsOHbiQQb4CSz<*?LMC2nZcRNHC%rzq(8>ebEjCzqAjZP7=@^5J9-n|LUzedlgtEpF^xj{H?-w>Mb zDGmxCyN3zwGhQC+<}0Z=kY%GTaB@UanFqXGU61XxMk_Xl?_L);?J>_J4pil~HWX%P z2v>;`2vT=*Z4B_M8&{53zMf!tA$a!a(VufQMLC0 zMhM?sHm;mE0*lP9iqCZQlhxkZ;+z=T%-5|!|@T>2h7MR|3#Xxo%F0`VWR z`nWUQPrso_$JO2fdb>KSNilftsi16v^V_jZ6#TwEB)-^j{xX31L)rQF)3}1Xyy;YC z;hg!KfF~nePS$6w!5alNc9&>Q`_GCFhW}Kg9J5TR>tK0_5eeaOe9xXJlz0~)&NSJQ zU0H;dd~xKSQa-^F;c(B!AOfG02R#10f42wUmmfIQ^1wU}(^h4dd=^V_q%csJ;PK+< z)rUV`{@hi>OGB{tOpH`N z^$XpI8411GE4H1inJD%S2Uqk@S5Uy@$9(y6UToU)X_b_|j4wzxIY)~uE@lN$66dgS z!&~ZDqRJ6Z{bbUr@$}a<)-^jH?D@{7idlkhmhBCZ*I@ZSk%LrC0JI&8?I8fCpe@= zBC4u1RDrPrdb~DqgIq)8bE%q|^`S@)*LT^@G|_mCm#SZZj89{42}*wT^4CjsC7Yd1-w+iV&Ez{n zSJck0!@Qxz;FyTt-x%wd>2I3K^IfE5j&2_RxNaW$A^kA@M;fsjIgWPxQcZ`RfIzHdp? zK>dQ;{t%y>*i?tg(Gu-|U`Q9NNevFik-F)oebV%5j-1*sh`>APW2e7h;_L|- zK+E--C6EeHKspq4o18?W0DLE?w0-UWvX#F#0)Hp9D73PsicN|=wha9$SlEA>Rb0o` z%IN}UX(leGx-6@Awwq_BG)UsJ&joVwmGeReOJX#A$;;iIq^EC za+*zGtAWwLz(7w|Urj^XHO~A39Jf$nSE{4?rvH)Pcu}vc)pxs4hkadOt$9EM}{ zJNG4B3216DGgw^;%*&rd?(kQc@SPlI*raCP^pe%*JWqPFrl_~3+AvG9qET)sX1e6-ht4BGAybbRwTNLNT->H!2W z_)~i+|E~Wa==UASj2%6;{K5NgSoc59G&qU+Dk&qX>Ur65EbP}N(FP=PHU#!*lEu+~^|m;- z?VqU?_XSHOCh}|##|hO;jIAFB_uQ@7shnA`N1WLXygK2l+WooAr8QRZeGkdy6{tVd zU#mVZUY`Z%RW}xe$FVYVnVg$Y#wyR&*$xwUxnvEj12rVve8{WjYN18#9~qxe{|5hl zg|3r4?dL7uYPCr_{ZMDu-(}*c7BgL~B6Rgl6kpeea=gJ@Wf7*wKao?idUpT(V*T?E zWucp;_0c@R49e6l>+2~K%};=M^HAB+dPGK-LWIuEBsPnut7D3W^L(^39x2UjOs{u=(1o>V}mPiHB;i#P7~>$1dF z@s?;_^c;jXx_%HHwH>SJjLUC{LI~Rm`R-VE<(~3(-ii``q6w9|n{712eXY+CyuPwe zHU%1Ex|se=2*qdk3TK?6Qi@X2CN~qHl@D;BU(Uu4lfgNW|I9!ygL(Ajc4g_TD?7F@5Edro?M^@4)#|gYOOj{T=$B)U2${*VR8rk-iSrJ{}*(Dhf9U`yp#BI^(hY zPIvSa9u_&m{kyg|)VBk{KSw_6ZWYLEv}@@8R+*JNJONl?x#kUUdMHaEMHj0iM`WKo zwhXUrUxji;JmmWT=cl?4V?51#lp~00YzcRNvD?dcRy!rNl+yLG+!>>mHzkv!1ut`k zh?RvMzRvm2ROS3oPW*l-SX>F`DJoaHhrky@%hnWek zKj-n9-`&c^IcD1buwI%494)sM{Mt=K7aiejwF&Yv-_f}BJ)7ekug!2{G!Cs~*ut+J z0q~3f8E?)|#ydxo>t66I&!>S7N-L92h|F{RA3Hno*e|=i^G8%#>fQTT@LcjI_RSo{ z>z&D#?C`Aa!ycS+mOr5v0J`P1R%1%)9s~D~ zoR+%CGlxkM8*$DF58Wapj})oNt!QGAC2wU@Bl+h5z0~rbYDq}+ zOPj9Z%Z!+^hBcU``Mx9ZT@h)S5p-GiAmgJN2&?rIhDs#Lgge8gX=jYKevP#z^JHDo zV%r7whIeYTwO8P`?993b$Pv%&Tzwypky$p?89*(h=jFccD?*ey(Pd8@5GwIpcZBsZ zLyQH>*ng>r2s!F-YIHk+7v^wzXjkAFl`E~*JWCmIJ4dS^({BGXY`d$5w-=_O4+4pR z5xa&!l&K+K{!o3N@b8UZ4{_w1x*8{Vlwa&ZKOn4!OqJv5dNSfQ+S~%gb`#&({%PLM z6K^fhU>9?{o?&y&Tl~5rywvKhjKr2|^YiES9zXfMzTNq<)hjG=F2U_bdz4Y)>G>>Y z!HQ&muf}bwyMydiE#1y+Y438IpPrL@Mq~^B`~4$lEt-YF(STmco=GUD$`R&e5*l)@LkqA}=3CUuyUAyzG#Sl7Ei}}&*>oHT4so2AjTX#2G{y-Y@ zzU8-LJf;G{XV~P)X0H_um6;qk@#4xDG@ugmpSo}E;=6x$s6;v+ zPwvS_B{Y2pM!Wo9*{o0Z&t>u@yCYq$E}vp}G71Sj&E*U+{+!_RIm0IxqXj_IVy2L% zpdcR?v1KpqfRL=;xY%N)8q#jm%Qz?zL1{TdqtC_rk^uTiCuK~s;Sn)3ekjt(&s`sP zV44Rp#GGRZMdD*>wh$ia+ZKWSCB`@kosq%_)105xGi8(&qw$*!+8=~m`YCL+D2Bf} zShza;aU18Q8Lf;?H!Uz5n{Glkk9PJJaszkU*AgGPcx?{FHPL%{5RY)4#dz;d@&)(7y*#FIQS$==N+yEe92vzJZTn~^Q=@4w2R)%M}05%yNM2L>a4 zn(Y~c*>ZPa%$v-F_YYfqct74uY{w4xT%O}4{xI8~d5F)O|C}(w?p+@=%~W$_Hda7t zWpZogVi*UvKHTb}vG~cFJ8%X5HP42YPIqSD=F6|AVxP;NZ|+Pz9DSNieMjt9XRj*Z z-enJ7?Lfrk3KF{fNIU~bemexrSNjnylhvm{hcseKS$K1Hpo$S!T-N=2GVp?1z@gEY z<#BuZs6|VH8h4=e)_I%15SZfr`FTlmSISWexI;r|39W>TnV)#~+m-pId?_M}r`LGukLW8M*9VLOLOIyfz( zL?!hTq*#2Z?^JFKr(zsx=gQ+rsSFX;6iH_h_IXd=_333qWvVi|YE&~u??R-j2Hfra z=(YTf219LdU%p;N4w>K{{i#WLvX<#?4S5n-HskK&Rt>3frZV}G*c)RkQ4-bnDYO22 zEQaX#pPYQ|ZoAbz^U>@2?0~~vgw2AFC@)Rl!WG@f8h~HrIWM-9+b|(;E6#A2%_4XPVuj6dS+eM-wje>qDr{my!*^?CeHo z-v|G4KFS`deuC}u-ig!uN^AG>r1GWY%giMyHdoJEks4a#;nL0#iS8i4oR-u2;t=n$ zcxPxX`K9aal$>A$^K!Ru$beXa+bvR=&SG&qRYR)pCt*?V%g&$#J8!<9zsDU;%w_un z1Pi3*@LVsB%uiM%M@H;gS_2*kBAaWskioclGWGdZx3lgK-yjJ*e=@44F%ZuFE|ZO875GLO=T>t_+l)AS>z=G&O$+hRA7z0m zYpzyNoGy%vj2TBP&%-xd%(x#;cu6T|V!8t~-u~6=hYm;cu*jI88arSWHfi>gSgZXV zy#C8b(0=xKq`zhW)Ys<)0=7kF zKzb&6uhi9PYK(=WH?A`6U$FL3yo%v`WMtrd_W7K7skC&)u~hl)k}5W}l3yK)U{U(} zbmN`WmRQr@zimFZm%IOnsDI!XbaDG1MC5AFpFaa1e*AeJbo;%wW32{de6fE{XVxBA zXj^@A?fGS`yEq9SeHiH0n?acw%G$uw>x-$!FB20`86`KCbQuK|LQp1nkq zwB?LRPgPhPoQ1RLxP6Db+)|yaSt(|4=5D5}{nA-=KRK5QO}+xPr?zhxDC1BL{w&3w z?{Z*$?hUuS&U48Y-WP7J&iR@SOl=iv$ir@cEy#A|jl_O%cQz-EEC(PQod8SS)t0we zLS6}+c1wFNX5(Sj7e*i+N|UiWLI4lVN@SC8H+cHz5KsOcWiDC5+qL$#BXi+!<|VTC z{)eV`@Z6!cds(;RQ7z~ErICE>Tc7va0@}{`I}7;@FWUms*yr$mp(ULH^CfPNk9J~- zr>~IDjV@1r|D>bKTk2ow)o5+96U}VV-u$|wX1XF8&z;NeW;5b*a+LE0b-^srvLT$n zOWRYFzUF2*rkLPFW;NdxH~rbrJ@AiY)63I%eW|uUFaEg+`tO(FPnISA4`FW^)n*%R z3BNTcQYh|F+}*t`?(SCH-Mu&jClDNp1b26eySsaE3+|J5&Y5rKoHgs4tjNmqBP&1l zbKTdq_rCAl9xq|;w>z}-MWDSSyLDSvp^{{KXwP@GwI~ryXfPV6)9mKOk7}2(-S-l? z&9k!D>W4;sYqz_N;8^A?!P{#8#XH%jC-kyiQ`qny3IB}0#aMZZtQ{ez#>Y$C@~b=N zRy;h#A-*b)RnA8PHknY?w~7dGwnnwr8IM_|?%#`{9X!r6dN1TBbPX>) zydiZjbu*SfOtB#JO6{X&I{Fxh5wnO_BHQE4dKB>`0(s{vC}2aj;O+py=XwuU=+)*c zOtvg$82-k|_)a2&Adj9{MONUDmX;&QWU7`UGA$6<3OZdhB$rFKLLPHkz_CW^r=vbi zsLfXXW0xmzs2UzC|7Upn-*Fy0 zJ-4u^J5^zeI}M?eKPIKGAt*#4KCg7!28TtsWkUXWzzJ`cqif>K*4OBYwb#(f^QYj) zMsl($^5w52*QA*&!H>B}M}b^L7>~cI3Fp5A6%b&TlT7vh(uJ^Wml^gVQ7-?Kss+3nt6!^Oy1?_TWUqsSJSOf>GDJhvn=8emqtSrF5QCRICl2s(>% zv7R3bm1VG|jg6RJ_5?aUv)FU+FUT5?KoL$hSdu>wnAcj5sm7dY_BVeJb~-%Zv&&i< z4x)dWwV4b{zPq@1=E~At9o|9G@$j_ooO-peHm{_xd(jksM z`)u+j`hCSO*1WzRLQy_3fqxR+B6ma+jSBUrP`Aeq!_HX03zR}Sd zlcgF)Gc(J`RM>;DVUUfTz2DIWp3rI0@WiFC)f_VEGLibwe!k3q#=ft5*8Ik&=Bcli z?UfZmP`6N`b~9HypGrA?W|yqr3S3Z_aDLnTreS8)%waGx2lF4usyq4?WXULxD{wp6 zwS=&%DEl`=T(Qe#5SE&rD}FGKIX5?aBcrEAQJ!1+`8G)br3p>R3F~YwNg~NC6d9piL0r z3$%cTGB74rbQuX~$sn1>z#cF?D>)1lDVhlXLnau!+VoFCpxf8|t?<#2fRCs;#r5R; zlOfXqcBTdikh+4*d3<&{Tl^@yEUG!(pMY@EJnjH`v9` zffv@Kh$VsF1Xx=_@d4&V_;_!GBF3D3bpbhik8sfL61K-sXp!VqzUj1&v51;%v??q6 z)ZgWwI65+VC*>|xjUY1nau>(CdE>}TG#w&2M<9+`=9q(fbsSlJx*VpM`o?Jt<}O&# zAW1^UnO4viE6PQkWl2xoS`9x*ObXd$fpu0-OhE-@tv)sCPTle4;PV}JiKiqoP~^Xw_DrTm?HQBKFPM& z?w+F5Z}AGGA8>cxUw$`UcI$Y$$Z-cNm1j4wZon~k!GLd^-(BJ2pv$wv>zuFiZ5O5U zZIf@K(>s7KYudhdg`QoN^`nb(Mx^knnpG2r-Xy5(rYE6gw;bNZ7UQcU#{19)w%`-gqEIWRg zT%gT8USXqsVj;VIKw-mg(7Q5Y|K#X1bN1TE+>0^nZc3Ml6x2;U-<&>EKYW>WbSeYP z>~Jb~MmQ@o$<8@jw!~Q1&go{CZmr4+4p8AQvM-E80O6O~*+!=01(6xf3rZTpN&-lK znzFGOy)POCs8G-g{l4b$hfe3xj?4ck;K_Wf5sQ1EuAAADs- z?|zXAN1-I;N+=7aDVfQ&7>O+evt&Y7Ii^j~rk}qKtMnAfUTZ`NF~;drvpNvOpWTYK z@}nOgN+x8pYeAK!ru3&<;xWN}!1RRg@;^VO8tP+;c?by6ef;s&PfAw>35ME+@T-n* zpSvq#dAMO;Kj;3T``nFT{3|~sK9$Q1n@>~oNV=TEmX5jXRe(%QUz3yNkvCL%S4_j0 zmI@kQLWQ4_YGrI#5|NaOtqxh%l%4@WycRVNw!d|9R{10znLS)-f^E1=TY(&>7K7>% z#;YgMU`vcZ!4rh58p^@3v`wO0lYaOFVElJ|dA4Y^B~|R<@XuG|Tug}_S#)Ox>plAe z%l9sPfHy~Q+S`jZ>f4Jlo^a;qeyqgR{Y#EOhxQmG=z(E9V`zKt(uN6T-^uA)Y|t8S znHx^kw92Tm0p3%8dXs}sYPvb7+089Lh8m~I!y+)f5aRhVFSXv{9l&juy4KJ4zV>Y8klo&3*Hl&pxA)8uX4viZI*}A=gz?t% z4L^|A>I%}fPtYnawS9r;z zBs+RFWjJHh>tThqAJOFV6>)2vmJ2uX@}Cy#i%@6OHcrkNlbR9buu zvA3z8N*=vwZLC!=e*#4W!*AAp2H#=lKD&PA(clZTn|y4ejRQ=Y! z1dTD!^_Lk~IwHflZrc8sGtkHJoF}`(Ex~@hwTnc!Z3q>W89GEC=J7TxP?<@%^_a!Q zG(P9-)evFqOvK=tT(zt+Dyzrly;6fac4^u+8M{=#fxTR_w5Ie|)%%@HkLyXcov~|4 zkZ9tYzdKrCzbmxt&O1bs4#yzwbKT7wo&9D<$hS%Z!EtcAh^`j#X7?GByd0OK zQCSRd=O!bqXn)m(Jh{-inM-dhb4i+*0d%=8&3b;u1Oaam$|Hjuo+lZuA~9s;P;2Y> zCRVew3N$nhvNEX~!Jo1R72o@~f8DMB;_r_0od40&j&yk9i`Jk#TW%YTJaRrCc_64; z^wFvY*KXLntUg?i$W+!%jb&MB{Fe@1&=@$X4wD`v=LV|st^$Co#jz#uweZVK-yE>u z#Y+~MO)KkcHXJzN#Y=g3)cdxo@r#+|WKMGqv13Nv96cI>f?Dx;*_1|>Qu_xaLSUto zIl|iN$JgKuQ0ME7eXKVOy4{r_O;k9rqAU7C?Q1Z#xP(2q*W+-kM2-+szI1t3P7CIj zYm!*ymxqSGX#k^=sU4kp51oxcLPY5e0?UXEiKKL9D(5H641v4BIbQ zjsLh+vzyeG2W&5uqHwh+=g-f7_U1PxBph{gsOcT*%NpZvKub>(wbf(g2n9{t;y^7Zvr%!JJj{i{8VhPYjM;)TsA@bcIe-K~#kz;d zjvdsgJDGTdRud-m5}h|FQA8??6Pz>$5zZA zUPta8&T8E~uGa;LJN$s|2AzGS%m%yj;GOB)!X`(Xh*AkEp6b?g6{HUtDd&(~7bI$G z0$%=^;nYJarjwGrc~M&X@!g9hD<*#)?ZL(;B#&n52%xVRp>V_K^%(*L61K$2+q*ma z&HI+Q%HiOjIo}|P{1Hio2r3zD@ruOlI!U@(~r`=L_}ARrMEt)XO)LzIJ$>?`q@yQPpCT+W2eo>2d6S)vF`=A)8^(B zr~&r81Fr%L&a(-D%V=krxLZlad8_fao;p?rLR|eL)Z*Y%@g{#O(Z}>?!T+-X_@7Pc zzpbi()_<)1c@@nla;IMo4rry8g0nj4THs174vYVQD`R2;_#UAvuXKo|&?4Gg=CK8K zMc{mLZfRgeObywxcKYPB`cEAR1ihDNTwEGsqp|>S1U8r1@?y&IFI&=Bp$5>SrWW2- zoiF{kJ~7Y3{U#okh>;S4nC&St6NAIatf71c-`_qNY94o|)TBe9Te*hI;VkSkWbkFb zDwjP2=Ebs&&|M*$hpPr$r9!^5KSRnwvJ>(gg*4y{0Qjol#QUG{Q;3e0G1YLW__Z=m_lkV#j*gmg ztGxE1erLKoe`Ubc%Q1W&E>N;NpV$mKpU^jid?L;6FXYc_ zFeGeHyd4(wplctwcOv;|0A-Aod#dm3!7wyzIW-;cmz4%H{H4_S3Zc!&wNeP;>R)efL}F-r5JBhhaalx7w9b zpWA7=?2fu*1^aWAU3SaYeRq;d_w#QCYl4Fd%5S9_`KxQpW62WQufxP09;RB_{#wg+ zAqw{8ux>|8sH1t1nj6Q1;zrn4DhvGIs%W;~msgy}P!G*5p<9NtIyjPm2=DnBA8f=Q==7cJ@Q4?{TwB468UWLLIUp1wYMbI-k3 z&UMdyCX!C~*t_+%uGUKZ?PvmtCSSKyl~QtDZHujSRkXV>pohN#>pA28)!9#~^KsLQ ztnH=ZrPcJo-Mx5OJ7jamV&TkM!J&*pd5EgFfVo!!&m3%cy)}t(2Rl~@Mq-Hct?JtB zOv`@QH&5dg-WVI9#%}WVW46~79K^BL-Hu$4zdG0p65!z;I`u7I<(nKxU$}*CmEw3F zKMM6p4jqSy^YShX=Un37#?IBw8Vs38AOPFzWv}O1X0?aEtFY#snz~^1O()=emylu* zRQ9r-#t(B5`@zP!0rMt63oP9)1ryDwu8fFHOH z+pnuQR41UiB=pW7lpnP+P9U=#tQA=q`(SqGHb1*GcjmFH3n<~aUfNC%ee1))@_UjE z&E1*w5g#}2)JpxO5%)V(=+i>%#XzI{#eSm#Ep$eQ8hp6(d?`me{Vd!;D`xffC*0>% z$}eF8xZmaYdeN`s=i?B((Mh}4rDW+J1}5ANTR^$Y6o8f0m4Qas02$r(k2eg_>q)O2 z%CNQkm3})-8`g+6ie=pW+n4(GHfw!_UH_!^<7-xm93AtYvKnl)dK@JcgRr!IxLHo_ zSKV(f-i~StShk*yY7$yX3@_gA)bxyZ`~kTsbYdzxc(#I`XzG3=zvPgScON{1OFP;) zC%gY@;uJE@i;6V?X|D8^Nrj9Tbq51vPL8dc>Nus zRG#{qoo#T=8Ri^1Ie(wWVqfjca6Wr9q%hwWUL7jqlQ8dII8bG}QyF<0fBW64r@v}( zyJ-`R6BgM}%{&vZN1>u_`dCIqP?Kme3>Xc+5(DX0I&O4rH?PEuPzi#GnjkgA}JVSUGsI1 z=`(xg{l8;{TH81^uQvu?4_wQ7OIQdkzlSuk@@9cd9(m$-&PAn)=ozPl`q|waa{JS{ z-TJN`))_k1(tFZHA~Mc~H&=(h72Ya1*jWDFDc#8s6zDnpu%pYv(RH)K-sa~SBH@mD z^%4Yp-YTDYzMrS{^SS!y@8R%siVoV3;OF6xu_5!|nN?ST>6xRNCEP~J=>0+?+~y`a zY$#@^y6*ROL`n<)@bdEE`P*Kr_Y;_KSI5))?dwLHSFpW-a91O${N+o!`TdV!cl)fp z74C`4Qyt}}`A;2wPl&J~HF|vagnVprlck`tfukFR>ajs)`f*-re{(XM?{4Pd2dF185jT9 z$ja_FIGWYXO`KB$m78VOd%X`+v1Z(S7T8+W?WVp`Z!IIR$9YT zGdWOLDDJU{(NA(WbictZ^RPg_^z6YB>JI1Ith6^e_tV)9>(Gf_A*9w)nn9w31ucJA z^ADXf8XcjW+Maeb9rwsAZ*l>dSmw$ee%ng%M35i+_?(RytuuR&BZ`YS{|xbtv_>6} z!?s8F(M;W0Z%JpjKORCO{{`E@t0Sb{c<$eMrlmD7C)9?DZy48}+4N6!T-U8M9A63E zQCVJNaq#OrT}w&rVcGDXW*SgKpl09T?06_yS}77{-|UZv7F#uB*E!a8r9O|liBy6j zV{mKKPy&nDOd~t7^}zQcETVS>vkzLzXU0+yt+ac@a2yZEthkols!@2YJ5gG49Ge~` zTz93e4^G{|VIo|F^qhtCva!!Z%M|>_aV>J$8JSdxXS2C|))*L5aMSKvgEsTn;t83D zksI9>KRyrimozy$g)T6iZb2eE?XqE38r{ZaMwly_|)pu<^4V^eA*`HaEm*VXyw9nX|;by*kXytx@zO?$hO!?AQ zzOMQ`;~V%t{)UC3hcOF#XHSp_?gCLawtMbK{u{ycd{gP~y^8TK=fv2{+5GQH{vV9! zF;_(rlT^|YfMapcV7Tfwj_xE2Bk!lCW z6VT9(80Es0wG+lJB)MDNW1S$QurS#@mh&&7S8h+(LU@jlIXJ;_bL$#@<)n^GYdlx~ z(3uE@OS84e)pB)+Vgh1qH9kWjfn!N`!UA05#RD;OhtTeT2E6e-RIy~1>S8Y7Ylkq= z$iBpm2Ma-W5(;ySYEyNbX^%~y5K{GWS?{s)x3P>KEl`=+VikW+NRBEuT@n zW7>Lw51h8lVetr1`R{if&KIJ3WS9A=1@#}^DtK#hA;|9PliKk=ZQVY8IPG)c#++0# z=v6cqY-dbz;liAm(H#EG;onlKyzGx=ODj|dpUz60-*tH}w>mtxW0H&iq=Kw9?q=kl z%3pZ=(loi(*;oG%41eWHTK$?qw$0pONexdrRCOof&q3_ScofrmiCw#-V)#`w!1urnDLl zC(+h0J_C_ty>sx%ed6+rzR+`joOZp#H=$9VZzw2P{$leMVclHPkpw9@l!r1HPiO&B!)tN4}BwBEI- zsPi`<4bxIv&G*GW{!5YNusudu4sNuSnQ3rRIqkfg8DL%)5Hj27Sk-G-+q@0xWReH* z3`dsS7A$JZ9P?>oU}H%(VNPs*Luad%lvK!VYWp3(g)L8hB5$aof!PU+WvV zj3HHH-l>%8k2-KhM2E<=e|Wn=%T1YeiBwZs>E!jaE^7O1tJ*`7&S*h%mZOaY)fA`h z^;{WqX}>_j&v@gvCT#-2mn9$j32MPNBL@}Cakudk4l=ANH_g}i_cPc=3hqU;SFE9g z;d9$|UE+SYjk_aD<+|s~T|N=qg1mk%n0+&9Npc#-2$^GhbzJIGss?gFiAQN{R#q~_ zbj^dXTx=$Tp_EdS_*C z!-xeKQ!ri*gz;B==N)d5?)phiZ=tiDWBipH+l;iR>rG=i_G>$*?)tFT#^#ti$;J2e zjytMzzw5YI;kRIg&esHq4WB-ESfH+Vw*NSPEb--dVfNKUWaa(EvHipS%K80n>-ocO z7|H$hoiKEX{S#wOV zv8LxX2G-}K>@u`=mjm9RxPnq$0ug? zZuyz8Xf7?f1MjE^o7cBS1JX`M6YtsdvAZ=*83e(X*Xk5(is@nsrii|Csn@e6^wWBo zVwJPEQnm`FbnSaX$Qt=4e+#DytrNhcXSR{-6x$XVk7y|LX;0@={#wM!^Ldy1?;vK(pP_IDAUSjRh6gN zrN+jnVJ3jUZ90H7JxzI8Zdn7UCXG)FKwnB*QIy}*^gHmG5D@^Np=B<}rwE&dN$fIg z7W4q~GM3*-=;q_9%e85y;^x7hGII)aCsunqQ7ZQBTj!yM>F;0xFteYQl{SqfIvT$S zF8Q@NzP(?tGuWA~kIZOwNr0tOJDu(7GiB&*4IiqV>GF@Qpq^cwg`Ho%<|%j_2il{?hxNc^4zN&Mfug`O^BedzXpByYX& z!q4%IoezSQz7LFd!f&Aq9gkV?25PLT6q7dK?uD^cu|ibmTw`n1(_Wuw)Htt^>oF%} zIN9a~W_3~7Wj>6SAy+3FnHmQsl_RVR@kViko_VDPtd!{LLPGOPz5Xh0b!IE|9hArS|i~#pzpVNDvHvUVgXa5&Iyl! z;aEpPrmTi2i!%0zq8j2U7=Z(4U`8ob-rkl;FUeCmeLxbn(ff;-i^krh22etw-bV|Y z2)f@0GM&^;6c_PBziCELHSbl_`!Av#l&ZTO6&XZ!c9 zp$cy&-T95b#0qV7?HgR2Eo@wDp$bDUN&L3+Hr{#%ly^_VI^W1iUbYmJU%N#tAM5S? zCo-8k_a5_@o1vFDy3ZFX;~jSh=EQ!_&g)MpwdXQ3%JMQVGq4|?kK z+P*K0Y&Rfrw1bK7|4FbzV3jR1+Rj_ zIGS(vKh)Ip(h75eTR?1Sd?gmgC3&TVQ5^vQOf}>$YAh_O1B1WF0-M&J~2 z=n45La@N4_*wB>;uK8wm1jH?uH>+YxU58SHTGim$j+$3-rH`i(KEif6TGQo~az&oC zybskLIk2WFsO5`|DbdxIVTbL|0avr6E@ya@ux-;wAyF$}OMBU{TyFV^e)Pn^JP@(? z!|dp%Ljz^WaY?7!f)F^?gEo#9i3iG85M1hWU0{tzW9Rqc7nSRid!nF~g({d|xM%7Z z_e#4b?g{@U!dr4jJeIq}5Q%}S_qgSH$fg;9ERObd)hEI?K00eZRF&vu2C(L0o6^K~W1Rumx^d zXQkM}4xC#ZQ1b{UT}oF}URv1E5jqSovKmG_fE`wpM;5I&eb=mA1H7Xq@~G5{m55$m z9bGW|HW_YnXrH8|Eh47GMbypiCgG3BbnH@D|4a~1o9nduk6@M zV(!@4o9Nh^r#6r}_8Cfw722PM&vx2+nc#W2Fh=RTL3<);n>Zps)$%(f0-d$@O|La- zc06$*Rkrn=jM%ey9;@}+uNpr;>bXh5{)@i(>mGb;EaJbgL|>TwSGr{Me>vVD{&yJ< zHb8QeV}gx9;ejRJJ}Zo--Ao8G6;zm>KH^}VB1tpT)u>xC9_O3Fcy>GG2T#nS4T-{6 z!MEz7l7bFwwK;RJKv+pyTT_dCTH_Dx4k-ZoQJS=c);%eSVXUGT$XzZINYATJ8 zuVilo>9CafPrX1SBmwydF`;Ns?hglf%yYgZ+xE|RF?b9j{O^*#nf?6MJ?`(Tdseb- zg@imF?$NgorE5yLly0S)_%ydRYrZgRcq6WB z-s`Poav}eLMKYZh|$n69|94y1ia#a0$gRa6YbOZoZzP&hXp+5YzF%C86*Cw_0Ok zbC$r~@p287_wB+sru{|;e%&L?x3Z%zs})tV$v1nAdChoh-WO!o*}t91z4$Ur082%s zQ)xV7b-n7y<)LE+$gg`vR}@itONq5%E2XhDn2`xG^MEV zQ)YR7eI3`=*R*cdKvcw9FpV#La!y5L;yV%%?1TeC?y0kz_hVc09P?^Z(^LHpYH(Lu z={)2*J*gaO^8KYV#FqWKwrr7dc(U^pwWXwy)ezlK{My6HvHVJ|$XD@)qFFLN0_dSF zLw+k$?D``aZ6EA!WnyX7C7Vu?fg8R>KvzE^vKtLbAyNx6B?cG$BI|jNfC%lIVg7Bq z{@UaLzqyI`J4xajBui+~t1@PW-j%sKQr`w=HZQs@n2^~c%%6XzeZAf zSDk9~$|0MmckMz}m}##uh%4rJh?9Rf=L0nTHQH7iHcx-`yHU$9xIg|m#R?5|=UHAy zJCK~Zi|u0hhLZQ!LpBJb8d0X3iw$r800v9;3z=aG7S6DX(f3Bqk?~ldcy(a4l$E%o7fd0%And1^4t z3=*A^K)_^69>4hIy!|2}7nob$HEcrJcb5T6VnWgF z9uo|&pyIa4fdxOI?6;di23GELc%y~hW`1*@U=@R^D@e{z4*@4Oya5@4)Pwr*651Vi zA0MV`a(xT`o1eq)@o?gQ%H*(02{R;V|7T@vkvrBbZOf`p=YmN(=*M%rOM`rK(PbKI zf5mB~l@sTZ7V~qW5(*I0>r}x-Ir%wE_4oi9>yo^JoPzKc&}{O&(wwrmm^BcSvbYn0 z(-upWlbaS&YDF(~TqF=vQzyHu4k)SMqieCUI4Js4Q3z-W;L2){R<+j?sokeK5*fAl z%w^0YoqR>BaA`Q_T-I;Jn*M8C(Gk;|-)U(ruHQw3Dz6?diery$HgV#+h>##B@3pEq zJ!0|8mp(vz@!HKNPRwjri|bN#qOTK&&Vj< z{4C+NLho!YQF_EMWX^ua6_n!v9qFVUFgOg@oW?Zd)avj-s%LpYa_#l z=*84E<-N4NEG6CSE^sMMPyW<0rtfq80#GX1ySY)7j>l0eJvuJ3w#@A)4#hML|v`%FH*-#{&e-u9Y#wL)=uJOTYZg+&H}Klirj`f8Cd z<;UW=*(J`d33-9+CJM6gLaZV!9KzOqsn6gKm=%P%-=)u{{n#LPacuS9rz_U-<(cEF zt6~W)wZ@0hYLa8)sy%{7!FeVXgw!I^%hPD+I4J1Ct;zSPY9?1tl6pMfr?-FfJ@593 z0P-1#$XpLu*dAK0p1?PE|3wM^zgyw*%t~TILs*YMR7EDFF~C zIBmKEYlgzoitw1__sgY-mP{i#4J^^qWuj2!ogvw9acm-a6OYebIXU+s!P{uKQIY;M z4f>>-ULl4jc%c;%xO~K02dAHtA9GU9KmYCT$0xzDh8lmMjYiF7@S$H~Dv=c>s7%+Ta4)@~gJE@5|XC z333%h?^+7^xR1G$l@@EOiVs06))Xx;!~n*K=u+vR*DNuObm?dlr)Wu<*da)XCFLio z#%rlb=*y9Ra*a;ps#9EF{i)^5j>R}O?ef7iT6p7qleTnu;yi>;e3?!Yuf){sPdw-w z(fXjucDBUAmH%z=WhH%yPxWrUrU92)q)Z}1MI1k`%<$&tOTqTu8yDc}hQi|o?qOc5 zBvB@Xrwtc&(Z9mv`!dwbSy!aRsnT$(>x@hx4S%+cxH(rlm+pNMu=eN%QB_=7SE zu-zx4ENKS@KyuTquL#cY5n1aZv%73c7)YWDOz8F2@eakz3i-3KsoGS2ZdglazP&OL zphrWX%zx_>x7(Oumf>Ua@v(o4Ax#lt;6*R4{YqeUI=wi5qv1&h5e6!%Y+F0aWy1DZ zz!VBMa{k`qN`q0=+^3%Mae%FCL#t7X??C5($&;ImBs(PeAj6yqGNb0kDwV5Z?(;PI7qj;XNxVN)OdwcD|xH9Qk!B zs!z-g>)YS8?)o+@=zDh=7oH^3ZWsM;)cwOt3&|5dt*L-tETgzhSe8@99E^!YqCX*X z;;_%E{`B`HZFhYD=)Bx=f+lAarM+#1#*#calJ}H#Qhs>KBZlCy)hKUENrzK%Q31lk zKfmuGyFfuOH&^^D|4O>(5%vp$7n;-d=Lj#L#he45cuP5V@-C{kyYGuI4lJ=%fF>N8 zOJ~MUNi2Q>;5H_8W_R}FPZ_;4WpL*2L6CO|*4(yk3i#@edZN3w*x`!w<7}Mg>E7@w zZrBe8vQXvGZj%$)akAEetiVvN1nE+Q2}Y{2DgY5}Gf%&%5e_iG*9If8+O{&V6 zTYnk*vbPIL1|HaTt$^u#7CIs-!^S-7mjaV+Me#N66x*tP-ZFWzx+X4;+vTqCho7I3 z+FB$=T}rW0n-68_Q<(dOj5eFHL9hqc+hxbM^=m*VbchA1NZwM(phDTPcn+=*8yCRt zCEhgkKGuqf%<*m+A^6t>0^(g3h4%!jG7c(`r7^kbkaC*}Ct|%`viDxV&{&w-$fuFR zKcx3ikYfCd)XprnZv1^tkBTq}CJb|L!r}i9_gX(62Xg6!Lm3%)bqt`Jj|wII-s5C@ zyE-PrRV%wx`IrD#V1QEiIaI+BIFlR#HHZMxY%&yOyBJ=x7%-A zSP1lxIer2B733qne{Mu#WUQ6vw5-0aH3aDHDPgAh*QZiRsm{ zIoKS60aOuH{(*N$xo48Bp{S`RV`wWV=6VCzF9LCJyk_)MNrML?OH6NW@-eZu(13$6 z;TF$pT+UQlnFOE2Pe#^9J(kr=tf92}>k?bfWJ?$`6nCg-3rli7$v!Se|D@(&!0uYe z#96^Fzlgvkv6=$NP#nZmeoQ)*+SiHOvK1nUm;QsREwZWOM=sw}xWy?|O?lX2g^lEU)Qc{9tYNE=EX`Aw?j0s5S8G(kx1Yw>((O1}NKQoMy z({N)n=6^id`=tHQaEY);N%0FKo1$Jh|7CFJ+o?*&Di@RbvW5W4v_R~rjS)S)R9Puy zT^nF`nNGaas5!25Sh@E+1<^ZzG8HcR$MUZ2Qm;t`^%EbP*4ePJyEjv9xu-1GKI?ko zgvHE;{gck{FK4_LIWR!y^_F8WJ5&3owJXyNcu93cq7YI*Ck}g~Ovs`lXQxjZ&9E`S z!=o@WOQ2}4yf4#zj}DATSnkb5HxUEhkFZ^UI!2n>ezuvW@(h@4<7S1g#FPi0R*~~M z@XuABnKU1=<68H5#Bjg#pxBd%(Pgmo&Y+hR}^- ze=AA*x4)N=Vd^JQsg;5Klh<-49$mv+(DX-+vHZh_Zwj>cgWkqe|;=KB{ z_KM`u2~~Mzc2vN-X?QrPcc7_b=OX%RMnI*bQpx|E($fzbi1fFNrSKm_wq%oERTy#Vzqtq^jc}IuwP5 z@rhBUM(Cg#)iRZtYI&IfN^X)jfONMtLAZ^@-^!-o^3t9p_Etd^7NrqYs5sAIOwDz6jvw)Bs|OXUHZ8)cJ?0YNL&l+~PqnMF`##FccK zGaJhG1^{Rt5nJU;>KEV8h`1XDszVh>sZ7ERk_m4`o&u!*41x@5iA=GcFmD0>zJ$E* z*OtjoWS!O?SCn~}$WsNoEa1#&X?)i)WpV|ls_qslCnW#$Gb3w0lrk};Qc_Nkah0Q- zyW!+$;Fz4$lrS{Ka-4SGOp1%~)rZ?CdOVR?<@BvoVwDGT@U{~mS>o1OdrZzDO z5@YO`GR(r;Mu9XVF_hH2X&v7`Ouuiap6f~eR#~nZ6{XnFCVeh8wf_mX<>hVKlg@7chMHZ2?gPF%)mRA6u8UEy6?k@4w5wB zxxaV&`xKF;Nn!B|v2tF&VXmPHT!Xz(1O2a_NNmS-n4A3m25sN$U*#H8_0tazBURvx zqLj24C+(M;T^9~;hrBYP7a(6+ss|7&pu=) zP3O0aI@2vQx2�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%0D>KCbrwuys>76+vym9 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 literal 0 HcmV?d00001 diff --git a/assets/figs/step_distill/fig_01.png b/assets/figs/step_distill/fig_01.png new file mode 100644 index 0000000000000000000000000000000000000000..cdbca0a24540f1829376f132dbb66f4332d948a0 GIT binary patch literal 370168 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%0Di&Z{e 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 z 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�RQbRbtUU-{oGIcwMxvzPY1Kzq*q)SyGYCo1 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ȾZYbh0 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

=P&>@H#|l=1cb?sCpNX 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%0D?`1S3^g_dioQ&?4gQGujXmM&cE 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

_=iRNZpK{Dwco3>Ls?p%f^vsf7H?kTiG(`7 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�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ξ~6d2wyH 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
  • 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 w)K~)>pYxyg|Z=xCW2J4SB6H)b7Pw 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%0DpTBjw3Z!Lo`@^()tO4Z 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

    >ZP7@cNL%l@qDO+yra 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�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 z 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μzSj%a!k!v&)lN6O^x2i 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%0ArTiaTIEFJcf{^2Vc)#0Ji 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 literal 0 HcmV?d00001 diff --git a/assets/inputs/audio/multi_person/p1_mask.png b/assets/inputs/audio/multi_person/p1_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb8d84541a08927a71556f004b2b077a3d5a27a GIT binary patch literal 3854 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≫uEy0s|mC5m=-=SZM#6#A; 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%0DvIA0(3N*Bg_SAKo7KB7dSmHwVJBQ~8R z==AF{-scqlu2hGgvPCuG!Hk919F<69;Dv^DN8l4GNRmkGx(eJ6Obu2-)tHnyQt%+! zs5BU`NI(Zev59aoG#3lsfIz@l@UCH{;S>-W5k>fk=o{ZndS)YPq$M)k-y`5AY@6|e zt2(YGE39^aYl;&}I>$lKjqD|AqEZmz-db-P2Yt%;k)0Td0vm@pn5_`X4+EPh=ne|( z7d&sgM?$kQ;VNDz3m8A5S7+Qj{mZx*A8t@nnrAMpq1XzycM;FMqws+W5IAb15#d-xmq1tZ?{C8c zj1w!PEx2M-?zi7H zRfR@zviI<4=Xn8~GBv@$2oUu=g8>Y)A^yH^^&18;RxqLn0EF*|{3p4Fq&^lNB7TnK zWt|e0YiQXh8>p^q7p7w*TJ29SmmlCC4khj};86EHAN&!RHwxJR0q+HaIeNLue|nMR zk`zJpJlwf31`cn{4tRDHpU?c2Ows3Jqw2B^%Nfm0R7DNPvSl&4`G)z8EEqI>ghMxK zUN*}UuO_Tnaqahr%(phv>KXu4h(!AO-YbD6Fp{{*3@nl?F%@|;%L(I>!qbMMT4W3f z6vZ@ADAKW7oZ)kVn4FFut}4gc28dHuBxv?MP%N@dlA4q zXN#>XLu#Ia&*>y@ZhR}~@eG))m3$Mlm6Xnz6otW%0svtk zkN{vzX*nqRXX!ArK@^fUE7?yaizF?(a$9N$jGR(BE5G zw|*hu@m46tw`w{CT1Dm^q&~)uhX6gj#X|zqg;Wdf(RNuR9EcY=^ZBfdV~N~V%tYED zEq|xBD{aT`}A3GBe&K0cqSh)fJ|QSB5{tLs&l` z8yk-{f#hQ-mJ3HtX!QKPu{-+l@!mn(nM!S|WEaMxU!Tq)7ZW|jsy&=DQf|R%1Vz+Ee%unreov5 zmZ{|fDQB`76&zHms3MjlwJxM`tsgCY+7#UL==i>D^P#Q}2qur>6!%A(KnM@Ro(f#K zBQO_$-!ZHE=%4#U1#o|?hC+d1!m>TH-8YjE>t2gd>UwJ`ev8cyH&f<#9L_tx4L7&( z*C(up=1S&7ltHI1CVYSk)U(u=J1?_p@tID7X^5dI1^!PU};)x^#m9V zp_b8kNZdew2LeI@WoEs(Qz<}oY*FD?QRU^o%p=%lMBYhZXV2q>!CeJb%GW$p(qL}# zg+6d!YD%+lW~2G9M4Dympj&-ozq2ea9*g`ZIXehk$$BXM(G=@T(Bus} zmBLx|v30Up7bVKA(NEKrv5~a&hA4wfYRGYBRIC6s)+Q86Qvr0}e&~v>WPCvQRlVco zqLGt#^LuYMe{1~ae}5=K)HLq%UkNz>7blGNeDy;@P+;2+jsKe8f<>es8;&0hF^TZ7 zyrtQvu{-p!17x;Nr6R|{JU(Hp`F_XkL3xwY6AR({>Z{Rj)yJ53e>0igopZI0K`mTI zj2fPI!P{w>wcjiBAR&Ba`4U2LR*~Cf_oO!fIQX;x5Qt<;0UIT(Cls%xlqaHrLM|XU zi=&X6N=T|TsCvtPA&%%M%8w7H)&j=BF)&a#ZhOyvoeV+nn)q~vLlZDo6coD&u;!_c zNusX|QYi35sxlU00%VC1j__v*I_gUB;Y1)3y&*8p*i-j_tiJ3neXch?%@`JOE+Lj4 zZJHz}fxGFm=n(yGuFhFWRDMeSy?Ro(CIntmTpc>2E85E8*`u#o!$KIeQnCWnvNdrf;-rM5k#HMx$D1~ zf5Ki#-S9ZT7#4kaBGyLg$Si3^DYfX&DC-DT(H_AWBDMBm+ZEZ|mz6VZl=(UM&l%BbDL_cG-03=)Khs-~A zPY{moSH7>gu548Cw{v|K~E7&XWOZ zTE*^Y$7-#KvasTf;+c=DR_?D!_*Yo1tR9@vtCV{Mp%06-1>Ntbwsh`!j3W|1p0^Em z?|wR2kve9wm-QqxOhh|R$Pz4HxP2k{sf1e(EfvUZ1B>si1=^x3Y;Aox&wI zCxnou6kwY*CRYJI=bMq+k7O?lXK#HwqT;A2s(I_%K)i9KBKNYiv8G@`EQQ{=#28(z zU4Dcan|#d=C9jv;`iZCSV&O2|SFQCx(Oo-&cH=Vuc~W0xMj6&7N0l zHK*SzA0VWMTuz}FU_b*su82>i3;HYGKQM~hmTlNo{v>|g@d9=bYW8^b&yA^>E$kok z8TDJ5_{V&CK8cFywuN;M>NC@LOYszbP*sOQv?HIBzAaux)?5!>U))PN?d}#^#(*$= z{F@`7N3D=aTCqF)B^#OdRHGuMb39)(D2>|v{&Kt0)o)aq6;bnX+{-*M28AJHi zc#*wejGXb^-ph2DW-Noa*U=K*?b!0_WMN;~-!95$8xRmkHy(&HLL_|0YbFYPkS>QL zD~UQKsGsZXaH^YLG4_7+cF?r1aF4H4s&Uyq%_#2b-1Mmvvf<_ADM%#OVVUxdqDXE{ z^}SPWwKp0qqhE{-`|jKeJ!{N<;emV6g8n1jC;Jy4{q|3t$d7Hwvm%_0cyz2>_N~&f z)`<3S8{Z~G3n%Nw1@GdK-W#Q9<*uYl5p z@wrIy0`$E`+_v5w$fP>@PKr2$nw@h@B%hv`qFCxQDm}t{d8*QLkkFw%*z?e%dGEy6 zXuY8JX69jC$l95~VkfC~=D}?9?vv%adEbh!t~Q3Ox%kfAuNnQm5nQtG8&0*y__Gzlh_LSlHS`$unQRTo}5$0g zig<(&!{RcCZrx!lY`6h#jkyGhrWC4C_{=FT^??TGFL|fJP$VS#urNEFhj;i0i4ONo zP=YDJ349|~-9PbAxM^XfGIsd-Yk_VA?2T+_nP)__M;+Vao-NTy2;6d3b(W>q&{nWy@`Gv*Q<~4Eq@FA$>wGu%e8lAvGf7PZJhHJ73 zA3H%0GkJ@k{YUoaWk3}Pf@|)(q6WdvP+f}GPp%K$&ugRmzioWdH<|dH_DGjW{z&~+ zZ>nLrP`ezk<#MA>2J|F6Lv!@9aTT-+r9OUPXEY-CuVA0u$5x@sIxI(u)!~mg<9E5; zivxZ>4!0MD<83ZiU=r?&j2__%SiTT>M{D}R$D@zH-_MJ%v!3gMz0B2K)NmrMSIMcS=1Aq<(V3W46y*M40g95nss`+Jjx6I~yI}6}`QAY~7CO*2&_y)TQr^ zKaWinmXo1I9Z^!ksDR@PPK5{)>_VGqf@Q1|901NxHWC5LQHmKEl^Wcum>fqtgQ#v~ zuuq+>23d^SqM*3~2IKcb6DWD)+*V zaq!}Q$j~))`OC0X4Ta2`f$XYCq*^GApzNyhyUhm8=hO22sTgMlT6Dt<6TCTrdmxxG zw)^WpM|W6zN9vY6x-^v?_azosl1pd3FTX%?jKnJxSh~6w(qZpF`1uSb#&__H090CPQ}@Ad=6qh2f)0- ztMBkQ#`c{`zT#NBWz{1Yljl&#!f76A7nw>2%WGQAt$u$%fc2W23$Yj4qkIWQ$&8f_ za07|4VwhRQaTk-ZhBo5-Hl{3KVI*=TU+g}`IG$7bHO}Q;sjr!8U+kQkgL{GVgIm$} z>#nJ-e3t$6^vs>n)BKSF0Z+EIGMqFpXBv%r$=$@2|%Jsgb#?% zcum7AP(tbF_H;<`*xH?+yH96Nq^yt66Byamn++;5=7sXFL-;cMGhWo6mmENMQ|;(QZdj1usCSx_U|1Gc4G-1X^`=%G{ZsYM6T zv4z18LuL+g&u`UIn}6OZeW=I`b)vG47FSb1L_yp$7w=bSVQ_`jCOUhj*OX34VpaUy zYXpa7t?LM=Mno5yJCw8R|3(tlu)Y^*wCmYGi=DY;gzBdxQG)sro=?gHT1CE${+ib+ zVoM2TDoD=fC(n{P`Y;Is$WNHzl+-7JW-%IakyW1G$(XD?`ha z+H0N-IugXE{IxnVtxm40`hiD5*y@l@RO0iE^|0K9KhEYazleBL&kO4%)orwNeZF!f z0bu*-VOzI_f)SUX)mP?^sfJ;`xJLIRPu%0!g&%ReDBxu5nebBqFcpwWHLgs{=OaK} z5@WvVwBESezUgq}@ylO_MfWsZJbP?U|M56%1i z8>nG}tv#q;n}+z2`R?cj9xqkLvbmA5D^`NUCX(KNx%{Fq@7RZm9EHS7!wBw#448&z z>BlWv=%iR01=`^-~rcTAMbn{DrSYB&e>EramDy>f@0b5|7v62Jm z2P3ii`KOT6HqP-cg<)cMG4?;>-`f{!Ee5ZcmA?_q4m|T3w|7yyfgrwb)83$X;8HN@ zt0$H{`{2zGe(&XtGp?nNPVJODPIP_Wp0E11zMyDg*Klw8ygTom2x;i`{OI_>CfTQ& zVVcLs4K^$uhvGCb($qzeqlRMSd*4|HrAKEiDi1b;$`1!^vTGjO9S@WS`HUy1ES}k$ zV?Nlgx5^&J2Vc@o&ecYXfWW=dZQf1Uw>qAdsJpDYx|D$f)8H5tMh1NV9tk&xA%Q|j z#|CAbk{7ScVOj6j;_DBydSZ|Gx64TgpYY{SWT7DU2`MND!;vg zQu0*3%y1nDbCKQxN8Y|NU_zR~ZRC*@%9c_&M}kfgU)61W-L80A8e;1(-0PExp$heL z@u=%T>72XLq{w%wes(@vlrBy<`celwA~a`UBKe)p2AMQ?B3?wpGsLe7u7nRsl*sZJ zta8`1`4zUNQ1?fr>i*$`wQoz$lRRy;fq9>k8xGS;GxNf~ZXLRQTvq(tUyWF z0@A>%a@|m(qhMK~g%;K?D+$ZZ26}kM50_!(h1EK5MsP`J04bX(E)rusKO5P`!iURp zRfYlQxAA7By^|h|a`4V(R6Q65jOIBiqW}n`YTV)k$j$DSi zZ^AANuI6tX;a^N}c7(au<4tvAfntqb1V@=1*F_%JL%VNdtIR>mUq>_5o;lpFCA>%* zF^uY;I@|3VA;O>3H@?}E!{55;;{H_P-o=|L(Pu7p9b5x}fGn8Q{*{ZuU!y_LFAFBN zkxd_%zi(G=bWRO2ZPNIBf^3I%Bwp?6-QGAXS^BW{ZvDCRCFUMxO)yU^4cg5t5!I4P zPs&V7(V%{2ZEOD)xw?uN2>`nL%6QXLszz~Eb#n}bCq~IAsawR{PhV2K=ILpUdSHd_2$*nwMqyKgnU(&BrWL@U=D9O~|(fV)bP2W)gE=ykT6{;bm$byEMhT%e?fNxgQlzrNXJ9 zN@Dy$i6#Zi<1VIr+Y1F7Ul&&`fUvYkO18)wVYwJE&8P-|NYu?=f`j==Zk2;izUaWA zQv{tq3$=j|((D&@T&$ZOyuN;`@WKICG5XpOgjQYmAS};`Edetj4%EKpw=v|YIj&GW zl5UV+UNCy*nfBJ%0<)~Vt{fZjAuq2I*y0#bx6Ws>3r^Qu06F_oVdn?=4D6xiq37JY zpRj#Vr_#M^b7`8Md>p1R1@~2NGY{`PRw#`Yo%T|rj|6`3c(jNv?soF^Mk3MR-7^>C zBWOKNE>3wPHG0;i;=TI62E##s@Zs-~h~4C0mOPcY8lMJkt4K*bEaXm=leVlYyTm_r z$_;D5ENPQ}_tl!o^f+AjGahD|74k(a67aL>wCdoy++Q?$d{6;<2W{+d@4_PMNdrK; zds5G5*>WzK^FbH@pkR3`j)tai(YnL9Ic2E%OTj>#48}kMys~qSf_YQDmhauUldk#7 zo5M@g-hc>tz$28jnDkF_IM_!%OB>B+li%%XpJoy6_KT&+9<}|X%Ar=V2K`pEk*=Dc zLdY;iw*WMIiH{_pSk#F>0%xtxN@edZ6jHFplw z@l(#bZk}})AHNxFkd}d7kx4S;cUCovB4(CTMNqcnra>nJhE)?4#a2FO7#>mGcX?N} zbI2c@ZnF_W**KFeQw*1H$poLDKhXA~yDpSBhSe1QcDK=p+C1XHJn%U1*l)7k@P(K;J?9NAAh)N(w@6dmE9Qkq;?|7OdkytGPc*6pUrFj zZMj#bG^#&jIyinKcCu#xo;N<=qPjjKv$;9po@rT~bCdJp>+t|WJd)pd^m=@fq$Es; z`xi8|rz&mkkrx`dD(VNnI8(2}8J!BtIS~$)D+^QT+?GdijWL-E+BbF%meoQ~bwOCg zwIH^q@jXVWKly z{;!+irXpviBV5)DM|X~B;tLhBp(d3yLL#i}X~f~-&34wUVI7ETyssLfB>9i`4OzBsp9a#-sZ}gW zO6H3LAvD}XmB!wFfb(yhFH(B?ES7$knn()xi85ezl+`Fro8I-Z>MJIUxb$V~QLq_u==ran@|;7Jdt}$#=5AtjLu;>Xlub%J`H|ya8cM4YqD%GS zTS{jUO#Ur9vpSR@_F1Bgrf&mmvM^7G==!&&)BT6;xbV(P+pUinqR9(d)oU`7wYkbMNPS zUph1|kuqyNKu-K%`NJfy4GqWC7#Ej6NthYgi` zdQ)F~=_Ps-90jrxQ(L{=IAh|(@F-ZuNn%gK=5>g6$|7z}n)3Kl#qX>W(YKkuk55d~b-lO!-)_!OSz@~a zDx1CL+*Q1-Pa$&+`pI#(ir=Z*-{Tw%^cQeC9 zw?)tk1ot&Zd!{9X7>i7DsG%nu*i87qHhI6Z-VJ{xcXO!elzw{A7hjN}_HEV0QALhx zYW!X3DK99CmGR)TEWfH&XDC`dTTU@T*Td*P15PvV%loWYE2dIdS%bxDx@3%$kD^=Z zb;)+69)Tw+%1!$}t!=J14IVv}!24w>ea3$Ar3r?w=Ir4!pOZ53n+HK!sX^rxE4B`? zGV1^RJiR&9YQM{o25xJ8Joz!AC6v)G689~>?Zt6zdHzx519uB|7=*{CEaJSYtBrLb zkr)4Dni=!}lGq2Zf|x{t?}Jf18TMGeMQ^^HRO6M-9I8tZ>_gpy%TOE1pL&u{diEb! zaU!DmHHqs=a|0>bO{3slU4t_U`rqOTy;NH894QD#>9dZ>{|RQhD}D66J=DYX9Kniljit#57)Fw#OHRZka6F8HnRkU5 z$m7mc50rHOlbkxckORrKp*ZTBIY(eE-uJ#l-O-~w{_L^XJN_-PLhCd)wJ-ff3#vjL zjOmN#B18?=Lqs;SU*1svbg9mFa5Ae6U+k~A#wfmJaYm}jZkJRdccO{cFjI_BJ@Lpk z%{1(KHC#i;8O?3ZBlF2J)ZL?RJ4vHNL;lpnr4NM4&%BC>a(5_`FTP!Vd_LK8kp)Z; z&|ofiwJ*=pe`;!{G{+jqKHjjN4dJ#)zN_h+>-`zsb(>sICZ>M=F$`h1XN9MWW!+{n zT^&2V$!^3P#)0WlU2x=$N^qs<2Dhy-8*G?_HEG2wc7^8>3%_VCie-m8TZ*ix^YHU@|zEpX0WgIRv&TV7O!A6KRz*;zhKx-r~s4czIDYV35*1I*tstK z#X!+;jQA!ym31a6FX3Rbkyj>v@$;oXTC2LM8nS16^)5=|?p|Pno{mj^X~my?5?VyC z=1anIToAU^9lv??3R|>^if?n1m5;)cu2=5>BU4>$odO*LgByLQtP8b+_m-CpC@8$> zRyR*z(KG%@PBUIu!FIgTrE}X_@vS(bt_`iHNuocWPcgp};B%@yi$WBWaod2p2M5vo zOe>FKX)P^C+ar5#ET}F0rd#ShVzyOWQP$13Ip^GBH>%M(|R27vPid6_zT{eQIb59lB!U?2i*o-)|%u*-bKWX$zSR?&`OQTBqldTee%)oETt9$Ud6QCk z(Ja8N5i1?SW%MJ~)F|Q&8a@CCkYOR;t6Rc%e2yL;_7qM5#E|rfOdA|5g^SXl`yLpTB5iElvq(ChPU zX51}eU#^)E?X|Tmxvc)EXqeY*rn;5aVkpY1!<-3Oi03K6q4lpH(D{iGoNCtP1{d-MQd0GO6_w_yT-rTeyc{o^EhxWFS}9ic1@>99JKTJ*HN%#XV^u zzZ{(JcCi4KV{8Y5pRgeOXU^lDaJ7&Jw0X2af9FSTgxl6W{&uhsQy?o_lboG?eAuxa!lr(1=e15OBb5iNW)nsOyPUgkJNkE z9V@AiDV~Bf{0_?D0b3<*u~|5LE4S21AHT~SI5ZXQ7Y7FbknbpjBidWOP`o44G`Fs( zwK2lFJ}ZF;jY{Of*?5AggzIv60&r(Fg zEhWb%6IL?NrC!I>uKwf<`N8Jy5P7qwEbM!wM7P3I#h!-_q8o8NzLO1%ohgLq4MHQU)efIp?sQX^7@WF zt~&G)uLP3n*E1V8)dc$LjewtOdz~u<;d2KtTt5SOufJ#n5x*O8brUuI%2i=XG;r*U z>3@=Qf|;`$v1&OViWNtyK8j=V>~&QF?-llGws zBDJFv^Bo&>(3^dZ<~C*3Q{?sJ-Vr7dQ_JJumKW`@#Zt4_xj_9b z29%VoOT;{~WZ9cIAS$ujrPGX$icN{9{>ril>=t*a1nVW1{ltS**w!%8UOnUMyyzM{ zS%6>xvU}L?vMkB#z_Po1Xe4v{vP!kFp=TLyMFhmHC2Cd1!cU;u@izMfL%|ts-lg3Zi1G%;2dgb+)i73mUGI`fi+xT@)N)zgy@C`(s>i z((IU01H0LSRjtd%!JDnxYG02lPo&M2=e7S{c{KL@(*u#RJFCjim^O+{3pHO^g?{Ci zk!>hg|BY)>>$^?u%ZYYs>u%%k7CA*Ot$UDfGXKQ*@(sNFepYTPYTB!o%aT&*z$XUkqT*z0Ack*j|I7-5}7VVF}4ml}G7hkrGdg zN(UdUcWS9 zKS|~zGawfXc^2;Cvi2?Y;MKO>X2t@zHs8)*I=~jxe&?a2a5X_%GsR z=T01N*j#S?-Q$|=(V2Ic|7{|St|&{=}Dt3m)>2hXL&ciz3B&t3@D^0o&}4JC1rxmJX*SdEF2z=&_ryL5CDFW4=)da z0OLV;DCL1MS&6WS9)_GSx+6*mMb@8O(Jh3->Q~BB*nZ?amE*LkUCe?5Sgs82jAos` zj=EOu)vb%jGKK#4TqQ6TP;L!nSbXgmC3q=&yjMxIaFHkcgPzIti}yt|j-U}dA0{@3 z?{yWQod`t&j+|s+5|W})2u5)gVk8jiO2`lAdC{D*m4J!#G4k-+n17P<;Fb3zjr`01 zwWR%erEO6vWhA4-8+O;8tK84oO<{d>uFEsW=I(r>{1{^Mq|Zs6mf3+bXAz(Qwwi4kmWJvEU#it2FZpENeMA+aq4icc5lXwIYPxaI~)YiRVN=T44pRL`e0jA`B zM|L2|TmuEW!|rF84F5&~A=%8;5WUgqpkRzKPd;^@#Q9HhHtYc$mO~HT4=q~wiu^~h zuEB)J5O{W-IdD?GGe_zuVDT%*6ur~sj7*{*>Xj0-ZIHE`N5pwzi{*II#gSPxR)$2JX#k){1c{_ax5Y%|r^cS}Fz1{n7Z)_c(E&p`weM#vCiC6kuOWn1x)Be{N z{kIR+b>4j?z>Yu5c^Mit3b2MJ0lVL?e)M0SgVqF9?FAl*%DJG}>+Gph&3(M&CMCQ1 zZ<*H>>5LmZ`bK$_l<7ex^QTdyX$s)DUGC7r6B5gO@M48|@c?l4iE>(lfc&@;&40dL z69mB^2^dU2*iba3LL^!UV}O7ZMknKI8LFgA(mXt4G`298Si z==aX&-y%`^PYT2}Bb|(5x$a&5&;lva`M2JY) zg^ix_j@V96hb9P$uy7>skvhwgtj=y@Fax;YSm}H4f09$oc%^1(Yw~;=Z~{?HK?yokpiI=bQ*!xCd@Jn?qqx<}feuZ~j z{AHv&iV=Y|dON84N8fv!zszp4a+U7U2dg8^?$=Iklo?!Rnw~w!Q7{Wz33Xzp3|)GY zab@QhjtV|_Pw1ZqC)R-O*-hUdhUj0D1rbx0(q2E47@~ppFB8>#Q?G71XSZwIz81sm zU*_+FP~4RIWv-ppj4ph#2a@>u@UH8ps|&YQ*gToBFyaH``~#qC$r~3gCe1}6*qY|- z!ilG<5okEBNS{x7BS(5CmXVTO`zt-UywfZDg{-J%_E3yidGRr9;ecnGi0HshE={gF-t~vk^D72~P_OZyhebfE@qzQss}nz2s@?rJhC? zPu}}C^xs`-vt$eSY^CepExQS<=ivi8JIDg{gg>dLQ zR&{v@)-GeIjO2Rw22jfh?oNQl)z?0k~OH14sGtn?26>Yb>@oRq8GyP zZw#gf93Z@O91jFXI^fZ|gqtA7QBzVzYA&1*`6oFA*zB0)$fshPlOzSpGPcjh#0*tc zY(HmqXq3yD?pBQZ=xV_|u}NEWIW=y5lNit_ROtsd-$AqKz+q$r1r z=mQ6Q4cBEhT}SBM;9tKkY=py}l%Ba-W@8!TTw-xqNEamDmr%L2Vsp&>O6t3VW6ykN zLQ9)UW(IIPcS6sB^%|fQ1r;{YfR6B^#x+kCMIhe9Q#a0aKaLXO^0-m|Xsj0%d9HQx z=wqmsZi>RoWRTEr#mDId3!oOXKw)uCC!uFqe%xKbN3Mpv>Zl*7zq#G-w!x zFiFh@Xr4b$1~DRo66MBEMfA&kSoAcx!%n^u0_)(v$lFJ;@>Y^ls8_K-^ZRzMnL2Yy z6HLm;bxATs94VC;Zirl9d|csc(@)4rJEh*j*K{qPzPu4MhbLfMSL_8^XKY%#)A*Xy zR(`}&gfdEbo0QGfaw_uUf$n@XjRhrFV?R{I}F z6GIvVg>^m`;+0FEh7NPPUgkJA*>i)$>{UOkZo0xI;nbuUxBiW1Im1<<>F=ed-X4No zJ87Jc534MNbz2yAuYNC1AjKdbIe*u`GwNnv+AIqXM|g?)o@O#FdUGNcB)gjQn1aib1CsCy(;uBy`f zRh>^t>LdJq>FXK;H(!i*>Ur^bpD`RlA0$cFrA#D{v<#HcjEv#YHa!<28%>?EDN6e^R-Fi_jO}OX#z-1 zp8cQH-VTRbgzUMzhYFm376l0agNIS1}=<1e*kX+Klv#+qgVQ5*q3v=c9l|_=n0_T$AA@7<+%J6vDHq0G1?ZlnXpDr@t4V zzcv`+9L@p;u8ocogK2|wL?N~vDE1n?lml{pOZOee@q{3;RK+41l#<8xGFt)T6pL!| z6kQ%dSq0F99bXB3r$Y;97FNYMyiasB=T3$O72pS(8DWXt{bDK~5TFb^!(1hu6QknOU36+A zOi~2tY~T+_0jU7dM*uz|sR8*XIdt3!1j$yp?e(4&d(?oo{Iu8w))TAeFOZ_79PP-% zGDIZ4EmnN0nqPCmXlar`$OQT;8kRWjj;|9cV4_zE*_k4WwH$L$FEr+xBDC$A!z@&S z!-9VrJAX$u7FEjL(FYB)1u_! zc^~HCqsPd)*NK%)tR5!|>k z{ven>f)qwld##~FyaL(>=hcEL)o=+W!_~AUucapD&3Gm!Vw3M9UC*FZ4tc@No){`d z0SAk@S#wb)nj6F=I=RFuwHzb%{ zBmGFDYE5-n&1rlk(7#@|CsWsY!uLqIVkP7+oNcU z#g?7131|U~|ZIT1+BCY2voS0+kdb`4+T;%~J(Y_7>ozHuj_?Msr^LW8MVk09ON zKq%N#MmmS}?dmdeIeAEN$D@t7AS{z61dIdvK+BvT7#aqg0#l}@!p+%4Tz|gnK^~MX zlFhWJEI_oBIsxg2aP$0=oG=7d$ilX^b%xumZ#>mjy)0s+c$C}o7YCk&;1_;a2GRhf z-1?YR`=rO;V{4@74q4&Q4?RISJx;k)pB15ZNTs>@wj4OHMRv_rykiI_G5}NgN+%QI~O+bz9f8lTv!@E@%IT8cp9W zPT{AS?Yy1!4YQ6HrUY!*wtnB2J>ZJ{^!(x3LObysrkty5bvMsDJI$2|3a`=~-=KZe zIYsMdNsEnV&NcZFbk+gWwp*xGe{027AXd7ltxGrvT9^8q=VKL_ zYF6UCl9yC9QnzAa$_oje0cVb9=JP?%S>q8b_!I_U6DO7eDaZiF6QfPc8jq>@ZzCyA z8Lsb`7r%Tz44;^Puy@5=6GP^Wb6-d@%MP$1YI&^2Tijt0jJ4MkQs2s!;lU2ctgG-!U~pAYww+O z%Dzu4Pwi@WL&2cq|Lt

    @`+q!zRU7!>v<9@^Kq&=z}8)h#y2g(F#9u`~%k^D=E$- z9c4DMco4E4)?Nra(TX zx3(qIGUrU*7rfny-WS1<_4Bf!DWp59jfsgz%ZHn76jCNgF=AErR-q4(-q)7QpV?;k zc^93Pu)=33$Sbo=nrG)*%NL~p$pasWRJMa>n1i?Vbt@oQZ0pM!iWR3qLbhN}CEHk? z{eRIRlZO|Wn?2!|H|~}+o~+2e#Ol2yV05)iQ@m-;0)eYH4N|_RIyf22GiS;uNZ-zv zbZsb#fg=?adzNaV!+0YoL>npk-Ba_b<8Z`vm6BrZHSff0#INzf9@Ixv)6 zxFJ;hKlaWmsL3wc`%glE&_fTQh2A0bswVVK=p93qs(@4rgdTc_fTHv!C`Awvq<2ud zUiOxjT*kerHskD>jf{#kfo99KKNFs z&b}qY_?cAp=tRQ-+DfB;(4Vt;c3|^MdavR1(b>#LkAEo=|-o4%P+$3tdTAXzj4oZU|rE zbXICI^lASJ&1lit_0x8;0x>L@xrRDH@Q@#4wKl(jeSS>rLksFdfh)ngW!u5YK=%kh z33R9AJW>gE;5_diU;`M3$5?hwR7FcsXV>q&4n6bS;mjjbg0;kTR`dAZvz&4q`>4sd zR>a)CX`RnY4&zRwt12q}oq3-?Rc)7i4KiEL7@nqSHOvV8y0W4H3+7tvsI{rS&vaMq zF}q;4q0wQ*lM_q~zIp{)hK@~6`-BS|EFwEY8+HLr1VmqJ61UKDXxs1QcEN1yQlRo$ zt=yO-Vh*xY2MjgfUUIXGIj!bA0@mL5o>>i`KqYSD(i4&9=)3}Q+GuV_p&Xwj7lKWe z?|u_a$$O+Y7V@r?G9c;P?6dQS*%BnSA0v#l53Z}0@LW2q`TFD8*JJZ&$$6fjK;o77 zPtVERqhH!F#P&)+${296EGKgXsS~b=MI$7+{^J_%*<(Pn7jz~OGYQrhOAw-<;Gc)$ z*N5(*`8m-+>w`N|eXel6pWf+J>QCOYFJsEazAuq*DmQoS<0=vCjaEY96<6v%lv6P^ zuY_}M9%pr<^}Mpzf0S-%j~8y176O+MpZv9@Y5P01V08KY4&KB*|I&x)zyjHJfT=I*hItN@FO!_v;+%Qs{5D7Jg=v^k|9ePEBFx->S}g#*P>V44w2>e z6BdVxF!IIXI+fu1%FeTyjB!JptDh^HgEh<0Xb(rQcJXT;qm#;DdwvTualD~ARmi^l zA#%W*uS$HHU`*8CDY;_Y%C=x>kbMSc&wK&50JpTwR%%cz>*)mrW}HU)@4WfZrOB{v zAo^Xmf;dtxPgC^$?o(2<=L?T<0q@sYH;61)p^k%X+#S4NI!TU)y!!O8=vlzL_+TAV zGH{x)wTVLC2RDcgLKI7Qgf3LlA)HyJ0b1yzM2IRvjFlFj6OWEnPTqS+3w$5cPCq4< z+l!gL)bX(d=sw2PI^Mi3B$fRBZs(@4opy;!GsSVUvN-DG9KBIN_hIr7ELr%gFZKyf z&6%j)IBER62@87*R+5RjY!gYh9jvDBG0#NRS{Hk)*UmP@BhtxZ>+SXm8lO3~S)z^i zkWCEP6&Et@ePN|4^5Z1Z+4BX3TEiJT!Nu*i#Kb+x!i0T2Vq|fv@Q3eBcJH3jD-?OO zSUh%>skpm!zN##+>c(6ZneA0?w_LFJr13*O7P>GUldHsHj#@Gm8KkWKh-pq_QI5=q z(-gw)o`W6|=}tV4W0PSJD2sToP5T;JL(Z@JD-+9BZ1g#X`#_sfw|rX4pWS>+d?64l z>iRpBV)%uQ9LD2|P*F95gOjbxUC>mru0U_EEEYqU+&uOULI0lQSiuwvCfLhG9xJAs zZY6423R4{`cnmKk~?uv)Cz7Y3KhEa5OvykDtV#ni;b8-_6#3TAw1`q@QrcYPd zex%92-=d2Bl&N=VHl5TS@DizVRlRB_xqG^Y80|i})7RiaUR9@C}8`tv$HH&h~f^GzNUCoBOJy)=;Y&UdJ`uyZ;%EpUaLH7K3f8#Btg&*Y)5z!wA7Ev#gK zMPWmGO{&^x>?NzhN@J9A>!=ti&zF=xFv{~S;3%*RC*9TR7mR-+#bx*~4?om*le4|& zCwzFPB@d85o+3du;tYjpG-vQC!EK1Nf&9`#Iy1tgtM zBiF}T{d#e1b4m63aoa%T`i6z@bfV*$Vwb(}z;-`_8QYs*>#F$QuL$!F;ibqJ!B%-0 zkb%JVF=Ual+Rfn74qV#U5(j>D%+Ep8j!PCz<=?Q2l0^NNE{C8L_D4?{bzVmq`xqj) zbcf;JWtHx_DuejSMK)WDQ50ze$~l3lcal2t+%A_Nvc|~{R!|J{!H0uCgGT6d$zamC z<6Trt#lVJsOkr`bND+ENQWPFSFPQI@k!M?~v!RszP#?)eO@EOtTfsOR<71m2A12*$ zwg+;gZa!IA+fl`c>4iBFHZL?o-@OtoEpz^3V(YoG#htO-!N?_^a~T^rw?5_ zNRAm7gTRux)2ksHMpJ zvt68^>uO}5S|Lx|$OcQPUL2Mu$xlfwPPw_ulk+&F%AG_ysb$WgNstA zaG=z1-YjTxSyZ04_J@2-S-fyHQBd>if`!()0@(yOcPcvBZ~88h>mYM7`6 zAB4C8*|I=)T`1M{+sW#TENi95>^hfv$+yS@i|e4&u6ZeUIgqYYUA=QK&DaTr zi?~WGY6NORH;_Tx>r_9^^M~tGH38X#^932BXFK&f3SJ1C8_Y zUJ}_%Hb?@g^?BC_Bdlh~5&g2wXwuYJ9Rn1Jr}*8Kqf=DUG=wAV zT>FJj=kdEAThnb1T*Y6`YouyAH&7BF`8TaR-!M(qU=ltCXvMuuQe#BXPnJq1X`J$_OUGX;?ZG*3%)m;Mzh3w z#PX%3zt#)s)f!B2zqL2*cogz5-8D6`W?9vrcYGo~|77ceBoTC) zu!>fRwj3awXw9bcUl9x*iHp1%86BvdZ1RZ_er^wKMtZiqRBuD7nxp`~2em$pERv=2 zR{VaxVBY8E!`GkJ>eKb?bvYp1JH3Fqw?5;m>Lx<3Yga#3dm5?p0mbD=D_1lM2+<2v zr_sZDwP*KHqU=xxG!U7(4u}bYV<|30QalG>mgqq8i_M5|o*Na(&yZd8` z)0PCNZt|ZXL_oljyq%@BHdrmdPGqU~Gv5HRH=#Fy!xhiuvI>^<01+w^Y5D60)8K;p z27~P8He6LVT~o4K?hz+4$X~t3y7(CUUbRvQ4 zmtkEumCyFUO0M7I<}7+9Dst(7WOU9UayM2|K@k>9-jlahCMR)lTcJ$QSwD|*7t)mxY0`%-pzd)hG`AH**K<(g_qPXA4i70+1)yqlNcAy~AlH+4qdek?2~dC;^KF0jO!LF50J- zORU&Uv3%7N`zo%H&G2}1uCYNQ=Y2rq(2D4tFEz8>5)VvgVgW^3{n-gwiqo)=-K*5J zsw7%nH&xj=h&_f_=D+LxqjOUMaQdgrgXguD<*9WfUE3?KXsg_g ze;_W^HLgm2XoY%3uzvN^fng=NS-%c(VL|W=+zs9MNd>m;N%2)%!5K@3|bCbf$&M5&I-jS0VP`~ zw`y)SWW_CpnoiCc_x72?W$H2-ok1mWsP;5q@ti^PSvry`?qY4Qg;=($;u2@RluJ;R zQC_g-wqlm~=XS}iG#f`P1q=dJ1q!qEYnbxfJQSBy%Sp3Nn$`Bc`!T%vM9ZetzeR7g zxqJ56LuJSBi7BL(h|t{8)l|pSpKiq@ww##kCV=+nd`zA}4bl2_sl=1Fd28k~cx)hd zy7RRR105A`@&_F?8>=jaUz5bCM_Zj{AUxI>0A^I@AJ_1HJ2{P*m-iL#UADRPrAUez z{ky6b0N}&{+5{vRx!}>&k2gT1LFozj2wW{h$U&5y=zab^0fV-m6bFO>ic%aho($z} zDZ6ioN~1)jiODVU%Nx6*>?lwk9J2qd@U2JX+@`o}xxJ+}o9|m$24h%F zkjg*{J+=6_;6$BgCnt|RBg=vUp4OFypIXOYe3Qn2aN4QLVo^u(OsQO|wp7h)8gH6} z>W5q54rHbj2fbd4#~BULr^PR_m%OZ|o*QvTt<|!Ubv01g7&utcM@ELdA79hZmgJ$A zKN1YH5Y;|PKp?Viqfqbk#86i%WdvWb_n{6-jD-bTm50~UIHp?28l^r;G7oAFXm-o0 z0CCxtRGN%#-9Ba~=T3{l37l*%y<1y(+O$GV#?(RNkPT@*ce6xTDUFLPO@x*_X3$S+ z2CbBDn}(*&>!JWLGE<(0cQs_2DWQPZb)Hx%ud}oqT#46%7-R5j7)uCzDNYvE5iz4> zu?R;NUl1Vs<%)|b2iFQ(C2~k-vsy%=CI_JftvTNtUg0tOgWmNsH?KzGb&V3L$qd{w zpyt4b5K$GD2YXV?O%;g+uX%sgL@8z;6884W{7f9PNcSh%f#PU=r6WC5W zLZ|4{^k7_V7h^x8#D{}KcyOhwkvH#pS6zRvfSgH>bS_hPg?h=4_VA$ht11KldL%e{ z2->*v{?^lE(+|D;BTkGIij<=lzim%MPG&_-MnLsk;Gu613&{09Z+ti9AE8{~(Vx4{ zS}AZ|zWoR38A6=D>!tORejR(j8l(#W%Aoe1QHk1ZC+S^PgYN2lhX5&;iz@nhi zvi_P>M#Q&4#8HY>7-W*bFB51*?f+ly5;yoln&DJM*KD9J<@aC_YG2MN33d993NgaG zRe5RL1F#3K?wWD@3V#xL3Px+MFZ>)VL*ZYtT99EZ=BPs^UdjaX7C*1es`f$x$UClXfOqN%(y%rb z(oKN`as)+$F&Vm>^b`uz#|9Zl)Da#8;oa^fR7dfX6;(2cvv#zsy{BX$zlBQURLqj* zp%R{?r7a3sf=JC5%3%bj}^#1qA#xH2zWT?l2cO&RKPJu4%EEinh1KzA0$S2)vl z;^B+ze9`|+koriYO^z;_R<)P>VeJzILt0UHEi0K%qNQ&wdZ94|7Ll@fdiLco3Ujv< z7aU~k%qXRucR)uf3j-EQgA< z8k>Yw=z{f?q8W4Rg?KZU66eQT%JVm(&wuk0*1i1QO%Wi&0PJ>9R@8CF-e-A4d=|AE zO6$g1Lt3e~XPNNh1InAJeiw-d;c_zMS2%>KEU;_lfXU zY5P+JTY#CU;y@rAn$Q&h5YteCl(M2yhz~@8JFi_uCObl0sI5_b#-q(xukw{3(c076 znJI#4M#A*7a7?b~_W|5AlLmHMqdTcc!A;Mi7Y#R>y-`P0U^WS$BCCKnGmtUVW>V_N z75L(MC6ZehH8B%eqcOI{6)NJCxfu5{-eTXWMe(n-HYQ?pg;EMdJ5Pg-Ue057E|q#7 zsl}K_97AFT<`~>)NZ&8~dcu0`mjD%4-?9_Oa|cN@`CEK6zdEO&9n@EkzSIkJx%W0< zDesYu;_WA>VbAzm)~~~sZ%rx$cGP|Se$#_sny!7_aI9x1Yg};<`R&IZKn(_{niKHu zl!m!CX5721(KuxubVRUWyQID^)1861DMitJYY)+EGBIU1nC;Th^{D`teaIvu2y$* zWvVK|;gyJqWyHYp!<=+E1KxIPide)>rbOf`Z}&UvEk;>4GY_x7tawlQ#rx&l=~0`J z5AS6k%RB*P#)^Kn-tKx{kFIHT;~S2A#NEgq`3Te>T{cm1vGID&;hS?;R?WxW?7w~f zRj$1$WTD8~oH74ZEANNy$0bjWEYSE5hieUn_|K<5TN%Hi*iczgYWOZDQD_W*t>9E) z8I}@3Eqy}kG&lY{BZRsmWI{Ut4 zW1!sDhciW^?xO!8tY0qwj$zGQ@5T zvu&h+_l?bvjaHI6^a=8wuG!2C1978(DfO@*8xObpz1j;z0tBrA(A)*f6et>bx{Gfo z*p80j=O?4Qfx=R=TIoW4HkVvM{~-t7*fhiL+_<`LO1bPRPwh~2a7K%6^=qGka5Zp{ zzptg~j|W6ghm=Xl`(yP;0cF1_Cac%mCv-9-9#QGGn&K^o*0@D4qg5vxciR>J7-?Afw69|Bo|Ew zSjD0)Q;DnlXSrjT>#A}A!pqo+O2cwJRx$7NP$T=dTrvCv-|TY6udIR`Dphk3BZL;J zx83b6H=AzO0r5yt;dP`IR7J64M_Ki(MS8^@{tH8xnt8~4F-!d<+q_Hs`)fk0LF|ty zd{@{qKaazHYNvh9hlvjfj*AF?4jTxfGdi#c>_8eP2?Y&Db2XP0kQJ$zSsMu0wFrPI+*GtvV(qHaCKbx3% zoXSdbx%)v#>~tpe=6;q*))XD?DuEO{ATeamq{T{B&tC5BU| z7G~L+?XnU&1hL-?5v1F_Yje-RD*fBh5?Zn?NrEMc*Z!#nue?-oqJaNsh-ChK zLm~c>^e=(ot~HU*F9g|~+?B}Vk2-(<*e|OeB)U2845>F}(dWPm%w`+a`H6TE1kt`5 zTKf}?_6vS?dM9#mS?ea!&(?1gnB&gRlq$0cK@;Rc8ZvZlK2wHeJYrV>wq{pC}DMUTXhE;-m{vplxS(Kw_m5$nRN zQVTKS?ext_2G*cBbgY!SGNv-pa*b8nlbn|2Yl3B8E=`dr8NQC|?F|1FD6aGy55Nvh z2axP_O=VMDqj>6NkdBo`>$1IglCWAb!FbG-Fjt)IXPRKCbf-I}CCv24gpe`diA2CM zwL0(P+BF}i&fV!&FqirH^ySC;>F)ILzi=s zE^Kf|-cjNGX>1VYPCZ&MJnwfw*w|?ztA6M#1fu^n#9vg1oZK;4azH?WT{KSQF=;}= zvggwF0Qr+menkIEA=O6|*t-dRpOv*F#_o_C43ALQ&>rJP^+u1w{u1ifcCcv_7cs#_@1X@$C{bYVU6o-Li9aQqyo z{SEtb{`$R{?JO(zyRJ~qisz()z`W#Jy%pHc8Tl5awbRvgF7a(Ldf;D)wA8Gn57Mp* zZ;s9zoc1+Tptzo(PBE|&(~nRrKx0ueo~sSmC`pCi>Km}g#+560Q`fF zSd--LM`T=f=XJl6y+e}DDNKv$@6WB?Vsm%$ zj3^B-bxAX{m!Jz=aa4HVn5|SHl&vADgs}1?=||A{>G3XXkPC|Q7HF11Lwy=b z2E%WVwb!}A98E4rnwNCnCA$ZVRSQlF)zbYK1ZCrO-MQs!a@_Bgig>+0$#=TdBKMKB z+ekVgt*x=YAtkMRm-KY*T3D#m^eSUAUb;SLRbLFhT2er%|3a`rKvdm6k!lz&A?HxmjE%*OK0I*q;C*pWOxb*DJ)v)* zdb0`t_Vi~m4a-T!JZq+Dj<$Wou9iujB%yCoJwNv4J*{-?JOhQ*!*}rQ?CxgGl-SV+ z*KT$*0KovH$qe62F~dx6NmIc9%8UObnfZu2q@0o4Ss%qAy)3&CjrAefGiPUK<&& ze#mF;NK$8JO4H!aHv-aB4jzdi+wZ&SYjp3xPMZ>_kS{)Q@vhxaHp?%VpmE_4hb1HJ zm=!2`BUE@cEfw!oN;lc_+Oj10U6b?q^~7SR_ksD+-+-P9cYfTQn8# z!+KL4#P*+fM0G<$pra4{)ujJ%gy z{9p!U|A-^Wp`Szb)<#U+rG+NdFk#{@kGP;io^XAxr9zZb`C0w)4(}`kWo%h@fyAeu zr}5Lz3K!wy39jQeG&6KVKDX`Kb6Oj+NX`6ODr;pfu&UQeKtFlMV&B)d)N_eBEiuIJ~>E6-8D>!h-T?r!Hu6>r5F;7R~dA9aIC3_f7V(bZTaCqk~tj4)v4q0}-Q{X)~1gFHx*`=tA|mtv}K zg+;-wg@PxR6++Hq$sCIx;ILT;XgPY`NzHZfCWu8FvfU;~2pZypAWFSp;7J;uPBU*bAG@@#5>c}&@XeopB@Fs`iaNhy|P>%r!iB% zm0)drUZh^~SiUywsr0$oo%26#7nOvyL{-R0#IMVE-Jja&$}^ixR>kR+j9YuUT_YVR zI0}BgZ*m%-D9`7Rp%^zW)LOdjgA$ut>U)r=p}4Lx=qT-sf&$Ikv2#R zGiT;2uajz@-|@V|G22sTSnic&@PJXljzA<@Y4BlhToSO{;(r5iT$rkKaHL?M8Fm(; z7*C;Kp4Uw>^9mKLR;3kA<*5##9o{JFU4stv9u1XyPxT#*x?+dQYlkphljgcNVz#sg z{3>hF)rnAKNx~zuM2jPdd|8^<0-A9yS`Cdcw01%gKCz&%*t#?jIyyoTgLg$+U@O3i z)Ga{PX?sIErvVmdpau6`>HAsUTS0WXcV{l%>i!QofRfY1Bq1CJnAM4!l-~qgw{{F3 zb_1Xdf%iQOXwY*#&z|g;6-itnHRjscfi^qp?oWgBr8a3hq=p)Yk4O)SU$dV3mY?}^ zOWo`WebIb|BV?5U-QF;bdCIL2TeN%?2j?VhMq#wrUKjb>Wad1Ou(Xn&NA{DQ?q1Q0 zX6jhTFLU*m>47~i-O@lMv2i2vvm}SF_nZ#v+2Gmn9aK>L#g-TIb3H$&<_G3uGwG(^ zB@R^SB+)a4t{ZFEIW_mKcPnz9E-WCl7yyKgSK#Lb+&--p0A$+n5+N_;)8MpEUZsgf zwYdxNvw6uPTVZ@3L@4C>WiBhfp+gU_*p1TwH27YC^s`N}WXF7AnhlJfM@*cr+=a9m z-;jf>YZ?~ZwX5!N`1~d|wZ})!5m#E7SZa4cs!{v&t9;qW<$~u8gUa%bUkj~rTjCc^ zk4TeN&67v?MPx39@>N@NMxD21Gcckq3JWfv)g7GSFiqmq20JGXzwcu*J(0A^yXgGm_ zLQYnCU-KrHwu64Tc<2x9G2>d3gI{9U!(snRcoa^1Wh^*ZKQ+n(Dy$8GAOwWPEWSr{ z`RBa&o;(MRL0T}C&6;`Xm%5lobd%_@PMWm5?t*+&$hPfW4{<=e{3t ztA4Dk3S}N_Y|ZAD-lc1Zq*`t=_rxTT^CY(Z{zd(|CX4#rXA;q;j{oX;us>DbAV>Py zka9zZhC4@6Qp&BoI!{W6+gH2|TsnUSy~#;Apq1?vU{h48#@3AW^{1i!?^gcyJFUu+ zQrDI7kPEm~+V~AVYFIgAG-<(^c;IysF+*Ii^|W5jxM$>bu?bc|4Q`T+v@92i9jUSY z{l3(-YE9nzd9G`($W7xgSO;T_iH^MVX=j%Df7c&10>9Jc0ET@4@Hu4+3IKGcoSl9s z{s(gZ$Kw4TzuX@+od1mZUq|5gB=`TBxcYy{{jak8%{Tl*?r&E2kM!*ya(|>Of3s2l zko%j}{Ud$*huj}2%inC&Kji*qb^l1;{vr2A%JMfG^$)qfS=~Rhc#`^$)qfSlmC;wSUO{nY#SNR{cZnFBbRD zbnPEGhO=|k(0w8MMStV!kc!7k_7Bj>FH>dbDDw^2~qUL4a*-J@@edM$I!`)Jfa{{SalniCrrgg6@L4tzo*!89m>c3-K& zv5^)Tm{yJz6~TImZ3P0D=ry_z6>!%qMhoRhzbHKC^19waSAgY4nvtp*UC+m#kKd6v z$FaZ8Wv!==i>bOOkp@1W=&qmC!P9glFUm@;M><_pzF2wje7>Mt&WPe|(zE>G^=|^f zzve3|D+fYR8zG+`UhlS?JFF5C5=x(S?fm-n>-S%gznbdY83t~bT)A@X;8t{kkdQEM zlCsOKTer`40YEQw^<96+8JYDdf(oEO!FLOQL9{k|3Y7;-;}xLf@v^j3F{raC@STCMXx@*KV`OZ!#_YH2Pw{O&#mTRt6UU^Ag zJ}Q-#mdn5Q)5JY>mlO7Tk0tGXBlk3O<$qR}6Q=6zV0{8m|Bxpp-s%N6PuaB;cVGGT z=?bZQC{^qZ*IvMtW=jcY_Ji#3U%a=Xf1XUvKAos*E||Sf z32IQHc&H;;S^4w$R?~yqq;XZY{Gs&-&Fa>n_kQru?|0m;#BoPOl2%E#0|$z}aWz^7 zH?bO{ekW9 zPysgA{5ua^T+);0F7i(SeLMrLZFCHuWyJ@rusE^Pj%m-=#GGD(knwIv0xb<2`X_Oc zQ8Q3F|~RH7Z+M6DY@&^1zdkHBP)xNlhYnT6nMu;`TTmFonxduq&Mpk*4j!URTqmJ2%786 z8u+K=eArp6CYdN>sC`JJ%9LjYLd5bM-SZ!V^7<(N>hX5NvkogTh_#)pd7t_EmTXP> zLxHcAW70~i@L3c~F+JU}XpnyP^WqKI`s@^sB&z zoFmSKTPhv2vMR{pTLpv|Md?D|qA{7-oC3{R6!92>0jQ4*?+NN>8jzxs`#i@>$EJ%a zeJ72Qb4A7o(2_|O5#tCD<1`4`!;6dzT_GS0F?PqTqx+ZOW!dFOj?#WAS}3*EWU43t zl~rL55CDsCx~}2@;;0w_lEeY$Gbb`r&41|TP|2or+GZHV@4{ht@`{TT>o zqL14`v3QKHz3H=OovT%uM%wP60NEMI9wBq`>iE(QaD~I_(?(>H_v@QApI%1@T z3dyt6?G-yxQlz!Ixy~(RF#h5f*7|n$Ii9NUb<-;Q>&eG64}XXo>JL7)8DH_@K<4n8 z{qXk9esN5yqrOf-umWI6fQvNFzag&hkRoQ65~Q|ZA0sQwH6W6`sA(Lg>XpH1E>9J| z|I$fRJG81*=!q5?ax}+j1N#gV!x$5hA$6wd1yP*f)C-|UKxd{6%lch>M32S+0e}Cd zdd1(9912fqY-;=kF@(Q3=Hq-Opo61XQK$DD07@3By8q?L%C4O_;{(AWAL{aftq91TieN*h_yT!y^CKo zhQ$|}{221=)lLf|xA~0Q#bJEbCM-X^?Z)THYI29k6%vSdtTE?|Y@ROpl5jI&6q61w zo;2k+Om02Y7Ffk5iN(#d9X!cRJu_@Agb}xr$Tv*Ar#)|lWl4lC=SUgN_l3xfdye-l zU59IG;peht`CvV>fuyl2XJ@{r+wT8)bE4lKdL6`<(?B?Sq+O48d z$hY%2`UY0+gu9AI>z$L*q+cc>`uf1>?1`s5s%muj`JyYaCXSK*DwS)@M*Yv@&Sp*1 zL@wL5VUA75ih#L*AKMxxJJIiSl&YIIvmX)FSdj<#Th)8kDGqZy))i( zdVu+j91EGSmXYOUj;JOFAA=B$y?T2w3A0JpFMZLx>s2vlSNQt|V&}4FoyKt=`%8)* zAcB9GDZ{W(wB*CYZ5w5Z7nhV?nrrfUNi3L@9+CfYd0LS&<}Awb%yTS))Y&NZF~Ip- zel=g;q?->B22V}^46QQ#%q)p~2{JL@JV=%DOJUP8)DiB|tay7VD90eI$~RNxY=>Xao9dLH8*H2i+AfvyY~R7p>|)~|gZs`d0Sv!BoH+76 z-?hnCwB5=Vhy!=^73=2o)@VIJYXhs1zwWBo%UthiysjYlmGsd;#wEbNY|u!GZ%`$v zIdDt*yiB*-MW(ojB$`o{z#6)k4Ngcj>BLJ?=~w-y5^dS!!fP9rDxIr9?$+Df^xbInZl9M#;-s+eAJ{5Na`n&X!M{Fxk2Xu?kFu67v3dG?~BUWE`D@tG8@@qv;!&lAbZb-7h1 z=`d*~iPXqI3keqekP)9LaUcDqD_s+{p^Wlhm0dp>Sgv<*B0h zEZXK0$mg&Wm5^U*|Ja{Btn@E?iMh*mJ zi=wH6W%L$|iUoE{p!(Vo90>`)Q@gljp0G<*ExdB}+-z8lqGv1&PCA3*AYDsOYiGJ$ zo{Igq?f0uSaQ^6QGo_}1|eB$!Xm zHqjSS1pc7oBd3|@wEv2?a)nuRh>7@69>w<7nD1$-_c(HpHZcDwwdOVmrIjq#b&3B? z&GutVMN9jiJ4?0CS%|$P8u7X`fDyO=I!j$eC>MX(D95Anm7n zJU73*FNT|?#Tr{Vo7>gq{Pb$bFNh9|j;G3)eMmbdaoU5m4Ahv%NftG z;;)|1$r>pi+iUjng8-E!H@)Ll2Oa6|^WX*R*EjLE38 zg?inoajQ7@sZ<)I-ER84cz(^f z7*Wo_@Kt+K2ftq{e3c|b=;y0hAmTTB`|lzM!yapT z!W0nmr@1`k{hZjyh${xWb_?_ZpVl3on;(kLtG1m9YIRDdQUVE|wx&&muY=zq%+r_6 zS*!ijZ|sGI8Aw%)>S4znri?6Dg*(}x4@h-qRO%C`D#^7g^xp~PQD!j;uq4G<5gu0F zu;#P;F#B}DN?_+EErmhOkLOMO$=1vpz9vS`E`qqQv;gxubU2mr-Ueki?Kaqz0uYKN zR3l+T2YnSaxp@Ss08JS0uVbTQ#ILm?@c54zEzbSw+gKw)s9yDHH;RjAvjX*7S9rgBX)Q%F>ssP zlG_*jGpgb|vq!Mx!&{bJY^{t5`s3kge7i~Wdx0)KNuYb|h8HEho0+DsRuoWoPpKVB zW-cuIUFohtEI*$6xU)#}D*1IOz(Ji6cQNY*ZD+HJ7E?LbPF+-qB9MI$fLfV6$TfzTW$5KL;?ARl$>2;1>mipz1_eA_B@#p? zgs?dKFiE-l+#D7ge<+R?~>m@!cx>Is> zxre=IMELWkr1opgL{a>nz%&tK1sAMjQV0yWs=z~Wx;&m)>vyN+h853cJe-$9KV&h6 zg96(Q6x^DLmsPGPD;-a3sT#QL+4w}YeKVx=3$!Xo?wC4fz9dY0scHPDvcf>&&4tJi zcIUgz@I7|VH^L=7Mu{YZbl?2tPkW!0;bnMUyT&?Vl-os}$p;5}m#)9@RyOl~3CP@# zs&KN*!krWGAqc_VamEe`#8%Bfuv{@H>AuGnvT2`k3^VqkPAFVj?%SWB0@#Q6GEhPa zHg4WVl8ZrOEK?>o2UpvyTX#0wYvxH7BP)zg)5D{Gqg@pc7)n^{0aSi*Hf@d;iDC|}W9-f5 zSY!0jPxZ1#TEJ&AlCwbN_%1{EUI&NTC@VV|P_Q=ixN&j{^6*2>BRBP%75*rJ7^(|! zoi|HTi5;?)Q7#gDKZ^^WrE1r@W#l?17`?sAnZ)q^j7a)&>RXb2fNiE-v+~76n$+{( zlOg4|)+h16GH#*#PYR!$HS-)DPn7_mSixg$Ie zR9~see95yzQV?|UIvyp}YhA}`3wQt&gGai3zuhKc;0TxxXWS}^M^n&(wa{h0->DOr z?R{Y6Qv;ZW|JHJphm$6zcZ#ltm|UR3YJAKJyaCu>*geyqHT z($Es<_0?$|KAM!oZgQDtK!o}G^Z9fyu? zyvaY2UVdM4)NRTwtZdHn{ou`@if)7q6QIwGe(h)Nf(thc_9(L_59Z8^(Nw-}i#D9Lnoz+#>(A7jln_>qIJ zv?QSXxr?qel2zs1RvJ^q&&3&0E-Be$eipg|P>7dl$`52S^I-EYQv=4*bcwpk;_?@y z^|P~%T;9F4RXH=62baORa&_C?0W8_BwjwMngc-m3)z{;h9&*=|l}9H+Cukgos@OvP zI1fV10xWiEv)m28_5OGk15(+1&Rwg(`QYinBioNtvX5gU=+YseAOdr0Sp&)b z(m`igMMm<8S@?&a60gbtX&9iBCJ>C%oxUtXZecgxO*4NTx9A!*%a~YIPSJYViN&YS zDYxIa@4jrnZ{*nG-qV<1E9|054MaF{IQD!wtz~u7J&UL`ZhJxf`|3fa7;WYT7D?2! zD4s(_3=N~UMs7t@>cytqoTdbV3avz0k&}2pZpD60q!y*9b|scERX|QK0TV|ioQ1zr zs)9~xP%~|1c5w!~mBw=4oORb7Ac73}SP3qIIHB@W`UV7$;+iUdJMn;wBoJ<#VQmHVtf>nRe-mj6B1?yMgKf04IK{mAiVy)m& zDJHiC$5)ZZENeFn?~Fyo7s<$C9UGJY-6X$f*`ZKE7=Nx5Ir_YnH=G}C8;fb5^tn9w zkoV^ViS%LUz1blDb3;3k;3~I9stNJGi{cOR+uN^r-=<^dGx_+;<0yjS;Ytfen$$m=Mvh=DpLdxBrj5y9{gk zk01U2S;6Rrk&bR0DWN#J2GWg;loDwX6*juNOS(h_1QA3TDJ_i{Gzwy%f+7n0^ZlJ$ z|65$wIovqcxyIf1+t&q;J$<_m`^#j*PgF(AAkAZ1v{KJW&`wmW9Ouk5h9b@x-N*W~1U8&Hl zPs3NStJN>IBu5@*)%BQ^V_pZ!Gk{WQ80$i+di0C(9Erp~y4MpNC|=q;58M19dHq|z zx5AXTtDtTl=&pa<_?H80!^v|w_2Okhv`Jl0SkRJn3we<8qNHBn zRg^>&T$dhIo>_KHV(L&0tfeGckwVjij%3uX_6}C#FSe8anlnI<|6No{0EQmN9Xh(W-@c@mzyuz@l~OhzKnD}FG}~}0;iKFsj`c0AelfbT4<#_ zVv1sAf;{odaUGbM$iy>uLhG7f@)5mj zn#=*@)__dqU0rbY)QH^Vc>R14@Ho1I5&FcjgX69&Yk@MZVicDIC5MwMBY0D~(gbx_ zE)*QV6O|={B`s{Vb5k2kYmz9_=nj^sWMn+@W;4Vn%e($dPApQ()5wJXiUQhHwBR$s z@G0}=1+`SCO}tf&J0Y*6%--l)jI9~*@1(jOaEOr!@uoe+vZb55m7k{Hmn(Q4{B?M+4F`DHo z8Ni*B@-1qTT2jz~{Q8=o-3&fjObc2cOkKpZGFG+o(oKtusJkZ)WPdZ0imUhZtGq7R z5TwAvcb$oM9L$upHO2dU;n%ByeGW<2KkvJ=S#7@sEWdbJ`)c9UGVveg*S|-4#yyIrN^&CHkLz%Fbq-v?NIZhJlwBg%PS^_&p6VSl_Tr~_IdJm1 zUEc+|dZx)eWV)G?nc10R@!ndzGUhqvZC)3cdy8oz;3Q*p%L z43zlZX7<)K7)IjtYz0`LHNJc|#i&m{m3+@j{Y&e7Y8etYD#yxN^>?<-{FeO#y%1Vk zuPjP)*ya_sl1C~=J2yS40xof6YklNM&pPIG=l9`5=;)sY#0tIKO~{;CknkWZwO z(YflH3EPWK2D#WC4yQaKo8@oUYZObo4%)XF)t?~6{Re&5nZMBeR{bwIv($YJY2C0~x5~LG*V-@4m{HD1c`02}BFRtpz zOKMv#c<9~nc@KVDA$*4O!q$cB-vW95=4<5Z$9umI$W2l$m#oLvoLgJU{{ASQkI-zD z;^8N&=Z7x-^~BLdJ_}2fOfwyp7qNN#SMB@kIeZrQd)W)(y}!t{WCRWZ;)-U7zqYRf;>{e_KGjRB1N`E4JuKD{8(u_v;UI2MZ1YL z7)^S5+uXwAmcR67F0O2~|-85{9{K<2W&zsHQ#HGvJ%7<@S9gZno9$8uE92WXwCu-pY*HkgWNpwC6No@EdZYmQIvg!G* znX#p;t}O1)GIxsFSU=WvJT>remcPLL%3!@h3id&;oZk|vI3{`AF zP8vMm$mDezm2exWbCwwIFIptCD{ix5k8^0ybN_4dV1B}8@T6R&2NLW5pFSeMSu-*GKH33QnqOtN%LuMKNms~ZC zR*JzGq|?REL{xN{;-iS=(Rl@_FDX6hwL%;HIlFkBWaemIIGT+0oWpoFlv?bf>-r5A ziHr|XO^4w`>`S#Z$L3J4qiX^-`EBU zOZ=^Qt(Zi_K4Sf~BU%C~o)d{u`;e{Ld&C{|y4$^T;GiMec$mHMx+aD=*QGb|$B?)d z|187q7)4Vb9I-E*bfA`V@+o-Mluj>9x^zE?RB-rBI7i!jiHYh>4^Uv|fjkzlszE7o zxZM^q!Q;KmvAp6hu=tTu6EjRMz7;HnvnDAA0FNuxN*L)p0Xd+XmF0Qw@0MP=xPwTMe3{U)PtUdSs83| z*G@T(2d1mm zd*_~YGqPFSCJf>HUD=6$@2^CI0405i7M<=f4@{yVu*6!`E$qIc&+aCoCMkdtT=QRY zgK3+amr849PRdYkGim+?mr&-l%WLy1x@*Y{!iJ{on*h}LTbNC zo3z{B%De7ipBf~jg$UN^lC!U$4o=I4`T zoZMzX+~dd~{s(rftc4U)ogkvsrIh*t`wheo%Fo;gF&{W#d8piAolsx`6!&*4vXTdPvq{EZex9UrF;|mD$mQqpJsN-A41_OWl?2%SS ziSR)0&Oz1X@#{+$}V`m5f!K)sl{6-`GTMwJNbtzPvAD8D&b%fVBJ@ z{eh7^RyJEnYI^?ByYEL@?=-&zM$1Oz{J>pY_quYBB62*KK_@By=gWo8E&vWL)u=D- zQZEj{77(ZqM|7Ng;-I*70G(aI0XGP^%5v_if8J)Ud<#9jD+j8T4CTs>%9cYFgE$~~ zwwk8Nk8Z{b+pDwdud) z){<&UF{6;zQ)`&MZ3S6yEcbO;e%kFkkS=4DNoEn4?}O$6LtplV5YEi$HrCs#pIWu% z`i8QfMMraf+8%f*ESR63B-m>*d%?XG+o-}#q0yB6ny*!_ez;z4Lx?{sH`hinc|XsX z9_*xqRR7$Sm~iYiJMHtmzVoKL?Vf=>ytRBYwkwd6E-pTZ<9k*Pa(PAZU%Z) zGD;R7JQdw1#;pIijnh-;DU^t0`}OA0jlGDH;Qp&8*Q?an#7yTlt{eVH=Oi$@QQ^e* z{1ABV9Vl5|HWb{rxe=YsoGV`yCkA2@tD^zpL7%qNp(r@B?&x`xv3V$lAC4H4u-)~z z$jBglpB^U3l2$a%hXpy^ryyeiSFztMZo=**Ty^rJm!r4E*1?TI3>8&UKT1Z}7jGn? zUeW8{!GP#ShIijsH}GZ6}lzjw&vsw!Ee4CTca*?#u%JT?rvzYl8|%jaL1Nu0 zDG(wx2^oG14> zoh0`bEVOK>E8FF=ryE@$ahbe=GnkW;_NPI@dBzRiXqm|@rnN0Bqprjd9PME(sC)h0 zFn>%8zZq9J=W9E1H3&uGFL&dk^93vy&Kv%?C!uuoENuR>%QcIef8M{$`jds@-xwY==7hLBbcSk@y zR`+R8U>XcLHxS;BoY$#&)92?siF~lixU}VzL#eDx1yJA!i%~94dwQPuO;Br{e`y0~ z8k7-YC*n8WI;R^c2dR@q;|c(2aGM_5(Ciq zX!Su!NdC!%X=wTiW(qWu+0--RXQKErP6Nb&ah8z#ZaiWTB^*s%DlcS{@1akRWC7JG z=OD0~oAS)#jQsYzs)w_JLQqKlt$}D?v$a)+gf%B6+ zcv@Aj2EDvJN82=)9w~M!h<1Bsrh`@G{Id(x2BQ2o?~iLKtm%u?H#j_su%CalzL%Zx zVE&8nYRCog&lThPdfH!p84wS>0gw<^xFZ@_X6%ZM+$4uN!c@XCtfu!K4u6bIHepl8R>V|j=F zyIt;Gtni9~ws_a{u3mq=;l=t^-gLD|a{&02nCp2UbnAjKM&Sa5)>K zj2aq0(qe=cb$*g|VNFl)q0G});>MPhuThlya0odi2W6ZN8Vs0EK9waCI#)%OORtL{NfZ60rGIIM0sc*etiAiZ5vwv+f*|Q&gY$k{ z^`iT1Fgc%`Kfu|$V?aMQX`CH4I>Mk$O)f&RXrt*k0Z3%7EkNz;+yL{Ab_h&hsR_?0>;CS*R z8)QPywIJf+P&T%v$`h5NN!V+#VL`)@R-UYJuzQ!NWi9HB_{cX(ODbej*sc0e*!zpl4#@(Nr#PhhOUjmBa&uI5JILD0>kZ z{X0HmQQKj4V-|KMY-9o&27l8vKsL992n&A{3d^Xv6$vntwJ^RGgc8MXByVE$iecrL zO&@foXG~R(A(xb9&fqJZ0je*dxStW#wtOS2` z?7{w?w-UUY-J`Wot}dDaP}3B|+W-_v@sSWbfW@Kl8cdwJE|)nK*2`uq&*gKd%033I zmDTZzLO2oU-#IHFJKj+88PzC(xQDA0J_8}8eV-(|iVY6c$03m44awR6g3sIDAg78Vn=T^N^ zDR7Q_+{*k6OPofwgIjBa)kyWVkzFq3kg|A1g@#SxKB()fO!dk`6~R7ZV?Am_wzD=b zqlw0KrQ(V=8&^~A4pYW>Pj#W%ODd@U zl1qmmL@^`$VH1&hkp=RX6vfUZ$V#Mm(+yK_)S%iE{BCo&Om1icvyyMB(8}N9)))z6 zMb31bCLb>SFnW)uUiuD+qO^J4MyvK)T59>cHNa~OuKO`v;tp@7mvy#Jl;O7Sam#HB zK~@j6R;9Iz@;^BcoJs^V%U&g@G+IP+G1LpqELDCUGo@EzM^^on)`oDj#MZHZ1-QBg z^YcBKV&i+#7|x*t`;!Z#hxqNG6x7X3vG(tUTqAKBym&Q15%g-=K=#RB&N>%*Bl$p0_0YzI`;=_hmgTBOotAl4Mu5+`C;knqA;=B%6YVnYucpZ_NTnIkm+#Zk z=$k+&Tw&<0KBi1=^+wfcc4=!ppf~c1%V5#xcA~Hg0t@w-iP%N9^nf*Bz!fBaB(i@w z2V@*%Wp#ge)YknbUW2blPxS+U{slmOzoo%%FqCp+IIzVV8cyr~c`JH+J7vp@Ew7^W zA7$VsH+96%gTwA4Goo;WRuC~_*a8hWyO1 zO+A*6OpQO+r2&gP3?Ijg%&`1TLEtASYUsRK-*sjQrfan~?UL5^%cW`4P<}}Mp6ZDy zGXW7kL^2lMlsxh?ymw_x_b~!HnRWvIQ-{zm<_!o~_al6ydgOj~ZuMO-L7%5?SbNuDTC$;S-k9RD5VfVfkNj zeo<^Lm~npPL8M;IVm$Areeu4mLh=rWnmnhFgjGo>pV%Gg$U}uR+lg_2X$9bVMn_&g zkmaTkkbo;oq3K4|YTm2;YN7IkL1N{twZ3q2tHiSU_vG(5fZ+bKKMV2W^c!-9i>@tf!oqsDx~bOyc9AqipmqC5he7QFH1A#W7_|wJD?fl39(> zEq_}3>m1WoGbCJAN~n|YVulpi^)esTAq5-i5b(>HrXC8F2S~$jNQzbpi8f_dzmzQ| z=>APe79};-{0oRlfFBn5x{lIAx!=OZxQp)7tt;06cz#}$n#Jz4_eMQ^V<_qkMJ6B2 z;JaFRq06I;yaW*C42AQ3id)QB9L=0K3=>sZex9Q-(yiDUfZ+gTc$3LuwTeFS#jnoZ zB!O!U&dx5n>k%O=!#KzEYUh+ER6C}NJ|>K>vxvmQ@TB%*0)meMrbpnue_WF-V4k#p z`^hk;z#uCJ8HFd{5wuDvRW{SpCZz2RygWJaST!41Rtui$Gi(P=DiOl2B9fY~mg)%D zB=+9ob4tQ*g-;&ydQA3WReN6CKNnjrDdkSTOXXnQ1LON*XVlqIo)^NgvwB5ASjsp9@;5vlK$dT5w?`eQ*}sa zqsQk`M+6x_-W`S`c2lPqO}>8+Sw%KNFXkK|__4Rw4}oG^MOrd-<%fSI?h$v0#ey$T zVhmp~0l@;Mf4x`3S;ZeAv?4wmUgI%lK(B}}aP*;oKc*u2>H_-K5VY+-xsRyqU&bGz zX#26XzsYhO3Pmc8L*GJvJ5t(zY*cs9h{q<%LH!s(;eA60)a?1wDBfe2yA4ipL z>tvFJrm|w_J7k)IRzv#@DJspz{!o>U6WfoMiSuHvnqGw$#Z=RUC|;1G9D%3+sKBQ~ zf!0d@o^K(AWJ1@%PM&%KKfriG+SsHuVM;jhuhaN|53D}LzDN+Pk|UbRC3ay8o?qiH zp&NRq7GpwJ&{S?=qAFCCFCdy7x-ZzTI4+vafHp-?ZwTdnfXG%*nz^MG)Wf6asriu1 zJ%@U;;57RLV?BD4j^F~#qT!0toqcC1ynZ7+PDGza(5bxozJgi|#5bA!FkLvaCmQio z%!zWiC4UH`d%e9p_-kvR*who{?PNU4#&knHM_{`h>*LV+Fw#tkp#Gt7iS~b9Vs(bF zju>4Dr0d-^abN6)eZ+9EpCl)X>d~mG*=6GPNa@9iBeFG<2Te)|8D&9X9_pyNmvF$8 z6@Y@^0L8?FUfnmmfaO;2YOc6`eFUvUXc~7{k$>s5$S^w0`6rJ<_t$$zMB+#W0|YWC z4HC)U6%xUEtVjW-)#Vf68g1XgUUJ<1?8PT8(F9&*{`8T#0fe?-OghLJW$COh4=cOo zWd`cJ@^f9-8lVorV>N>>H3gIxDD$v(Za;cr*K2Q?an$&&xn1zJFV&LF1AY54xa%G` zO%ad%q+A$Z=(yYAVfK<2mb8_oHq4vJk49|+Xy>^%j)d*Xi}tx)Y2t>y9YY6M@QpOs z+kn@&Eq%QbjY-pwu1ReI?+0K`pG@@IBp#|7slVGhH0hkmxh@1^MuS$D(B2w6s&HRkxQZ(%Fa3=14eCd_=rge@v_>R+eN-PSIS4Ks?eF1kAaTvGsaZx7T_lH@9*iG{vV8}9$%%?X`TglOB0ROy{fS1*cQBgQsKpANj!LTNG~iY` z64{sxYHl*?+E4_>0w4I40e9n+bGcphyoGyYG8FBX9%}E6LOiXyqy&UJ-hVbAKDU=qy?A&l*0uv?b}r`hP3-x{9jPuP5F8yaWSdM$ z-F*y;mc&YhKNg#!k?C~?j9KgMOt(ohz*G%fYYaWoz47!8IhE>7Ax1LBWE1dB(~MT1 z2jBK;sUP`e?;d^7nkBCeGQFaq-}pQ`3#n^q$6=&x>tqSxVpfy>7WS4Ak>9#}-eaX~ zZGcIuQo_F`qjgx5E9vT04{9M3=#T>Clnj%tZHyk9@&HR;j`%f{1p1la^V|&R(41lM z<>}a9h0kq^Z`#gn-C8#j2`{;AM9_OnE<7^;xhN%;BQN-2mVbw=f~wvwC#Vo?%rcVv zkUw-)?_F(uky`4Puh9;3ZW-rIc6#cVIaU>ZgvAG{`z3XXo&Wmo@tZ40o=2B1rw?g5 zD;Kx%b->l7Cnkcc?Xmg0oV*lANI-AHX?-yEB{%Pj^pg09-|q6aq966sGT!KhhJy&D zdGQS(X69zkhRtoz;vGxY$~>(x?zxymwSD2TrML6jl6T{ms-=E(c87?)5v``7b%I zC^D&&%LnTSMibG3Z`30F?1Hi!aqE_9`ZaF5OuXswAzW?08CP`xzO=l5v8afM&ka7j zhpO6KC=J|!B}_4F(HnO-;8B}pNBrtj?mVE+)7)b|*lW%j?cHtY!r@!yr{GAUif-!bcnpvvsd&xx+x>HpV$;SJ^pozat(+Z7hT zOfdL?J3ng$lYqD>+yZ1$4YDx#FL&g%lcOiGkA3cl?T&OQe}L&C%jk8J(QrQ)lQSq$ zj!!F=MY~{-44%lZ>bGLd1!8b9eKH_sVIkSkJ$UJojd{K`JLP!w?Z(ah4Xy>=lJ{v= z1qCIg)jmlLH)(!~Hy0@`d~NY7ai4qV8(d|6fBW&rOPA~~5w~ddFWX`PvdQSmHPz?8 zqw!>1h2s*JE?*`xFx*}Gc0D|14^xks;`-ipyQt#-Z^G z(a?MynnYR}V+mu5Qn-IJ4|88b%BtTCMTpY?uB||)M)Bmeohb^FI0=+rZBZ9Qe5tMjI6&yX)y z=6Sbmm=a9(z?XUX+fJDdhCs2r=rdi?@mx&_i17e`XaQb&2DU%?PRy>*4%rd2hPVGE z7n(-ahv|o?%;QWc3NFFi@;L-$X{j&k^<1hJXcf%$Bwj3hBCNa|EarO$&)9LJV`OWG zTVCX=7L{0sMxk2;*L)H?^>~4O;+sqF9l9nO+JZT_MQv8&@vDcvF0UO-w8|mfGJi#O zOup=M@0rQPq3*rPw?!z^$o1YqFKOG^LSs<;nG={EX%W@J?O1%Si0{+9xPC37Vq-kh#WXnXZMEoKOYzDV>Fi*NOGto{TT?vZ z0x~DSc>Tc$}tpY_reTZ(%xFQhWF@ljshvblWn z_T=Yv%YSWjDvZi`rTdF93ys5fDWVW)uB5SKxC>KhTL*G;*F~Ukbo3W1QJm_v7#l(* zv08m1(^NwyBtfJp&#B2p`Eo{oT^2dRS^|0l?IKiL@exkz!B(j41R4W^p6E<3#wxK0 z6h<<~!9(erG}aaBl-MiOG3KEU4Zmh2w&eV{bv*;gU;pQE;ns-niWVt*b8jwq6sCZFAy}hu>L^+Pyd1 z$=c}uFS)QJGF40;=rBCpWIO+eWqq1OP@cMWyHG7es3O~{NLMFoddBhSw*Qj#d*b(9 z8KOkJba3;f>Uv$BPgfgE3f@~`U!cqV-ce1cyTAV$RxYVTVtHYe^R{%21Htd3(`2DadZeV&;wj_U1Ur-3X4=+frGn} z@;*i5=us5XLb1`lY@9DgT*DuuskQTDj66AqUYj>Hti5``9mRcHb$6jTCd^?=RMQ{x zJgK1aV|`k>XwY(GtF&Yd7=9?y&Dyt?diY2zI&=^%}QViX5$}wa_3J(&*VolhIk{lTBBGc34u1UNpz2ytYxkRC@WY29bF5 z-R|$k?{|m$vL%v7J06c}(px8UWAB1xiN_-i0AK^!|0Nll`pjvIHq-0s(c3So=f`r2Zc?%vB#cr7pp2RD zY;jfKV2}hh*bylYXmU2J=`XoXU)hVVjQJX;>A|tl@VX&eMbfjdmtC^+!l!TNcb;)F zw;2}t?J#Sliqy*12Kc2n&B0UWXnwY>1(?M@eE7S(mRU-SvBb+=tJ$Jen|?v_!DR*s z0M-DYw^qg(*dB&Ax~BReoCTCRe<($Iik!(r>6*3)cG^R)F)QFnz8KNDJ)+sjLbhdUnJI>so{pc@@)N-{hjr{P*46O#LLYV5`5VTKj*Csy^Goi$D|2;KzN9X_XUU0vE7r5ZGOy>Ar`$Fj3Q(F!VQcY4N$Z^Doh~vP!OT?=$J_PE7y%Q+-PQlB-sJSVi z&VMtsXo2?c!N*UE$4CG$l^Ox4@x+C95x*runKOkSe!uXQ@&gM8JIwN>!!PpT*p{u} z`wKa%;jY5lx|h#Q|4zkiMcIfIHa$I6!vlRs28$Gob2Cut=KOv^RYc7 zn2|aV>S3)NEFyicdxCoW59HAhgb|}=s3j{UjY9oz{6{qa8p`7NPUs~=r@H-hvTKub z%}%O!eu))$(p*)4z}}&GIC*t0dfVH0nDao#gU!&%fn4OsvW1*pyI@(ovZ=TZAAlq@ zaG+1_){iGNG*(5%ozI%?bfLM`l(#Q$lWrOyQ2OkuGGnsC0}lI+fKRgnNCEzH>TLm= zgW4t!1fom>-vkI`IV&?3%Y@kolrE&|J#4uR5;?RHsOQ4{P%bX5*3>trq@*D-FaJ|> zn6!#ei@;yrjqFBNc8T1GEIEk$FFD7wUra{5^#|9$m}+72{@-|nNPp!2E`k4&1L#g(v{ioiITpXQv^uKodQH!K5GF|a%U|{nsj3?-`j6q4`P7@#{cbX7s z{fq@j$(=DMY20Z7q~uN$BCVgX04cdM1|^LX^ zw0_0{q~y*Rlr-)%0a9|O36a*%Sb&t=8H19>ohCp^?ld9N`WXw5k~?Ei(zw$ENVm(K zCPZ34TLID`ceb9SX{QR1k~@`%wBc+8NXeb8Cu!QL0;J?lB_eG&TLDsXXX{CtcB%j= zxl@Tq8_rgMl-${RlBS(1KuYdZBGQJl6(A*dww|PErwWjgJC%sE;cNv+$(^kyY1*j* zq~uN|B5gQZ0a9{j>q(k+ssJguQ;A3$&Q^ew+}V1PrkyH4x?S#6BGQI46(AjQXUa($ zcDev5xzmkEJI+*ql-!wel7^iwKuYd(BhrpD6(A*drktcq(k+ssJguQ;A3$&Q^ew+}V1PrkyH4O72u5(uT7Y zASHLUo}_7~3XqaJm58+AYz0WkovkNn+NlDh|?o=YuhO-qQ-7a^wo}_7~36KuC(}YOtXDmQU?u^<0(>5!myX8L=P3LyMV0_5t=ssFkEy$qQ{0pp)g)}P5-IY2Sv z#P?Ytkjp7OLFt@8IQgY(_)k+v58(XX`+N8fGi30L2m5Ob*`Kr2$?P;C=Uu?Q4z$oHNg4cf(OEf5sYuqR3H-nQNJTQ`56d(AV3x? z!leq~BF9ZcqEVp&ocu)ME^6h!+#)!%2mld+0fe&VR1glh9dYsl#~v%j@Ugv<^zn#Yg5#W5*qfFI^3A!vclZZ&x z$JY0uc~RiKhOidJmPK;%2rsiwzb_o+2NH?*_J4e)UnKrwWHFazwbDH)>*PzNpF)v^ zZ_NB%Ukn%Df5{PX6jD|uz9;Ad6!j0rJOE$3lKAt70C=aS>i4}eV8O;iAW~YuxWSD1 zBDFOa13z75Aa5Fm4%u3_T21FlE<1Q}?LQNV( zQNzZJtf@!X`(JqX>$MExV>d0OCwJ*Ncm$xFW7&qX2LwL>ET9xS;H1`sQ+3X?0r}Kj zLdAd4z=8SUbh!R?jId5Y4NS6dYRDJDTVo^?f)V?|igOZdy!AVWpQs2jv&K=3{nCN|Dw zfSW2(2Q+AkWWU2|NeSnnrHW0e5oTt`^0^>;-4R^AVsIFpIsi<;p@rDV7TQ{l9aIMk zbw7TP4v0iY;+=7S5(#Cvtz>HZ-i;`=8WC0rF?ArRkFbk^_Mp}2RhlyW#A?l@QMxe0 zcr`4qfa0HLKXwf7L+2Mn^OQZBxcHF&^SE3dzbcQm)V!wbO;#}mOj$~!4PrMZ#di^| z)?tNtz+fem?gBZuE`=T>Q~f(}RPtRnV=7|Oc(&n~igKuDz$VKs;D&x_yMvQiHJ{s+ zFQYaQ??*3r|BmtSRI9vjas(`IX#J{Qj`-Ul-r%rk`Igh$;Q6A45VZu%Da*o3m(~7O zn>%Bv3z0Z+nf|jcYD3Lj?x$(^W=>TI=95qJMPJb{x*_DzkoL zt*7*V-~2use?akD#qyhVl!xaj{pwn&AoX`bbgL)cne4m4IVCZg(hTe%S`?w=!k7P& z5yON&|J;sYh-z~-Y65FEqD zdM+%RAzp3bt$aeC-_K9OtgydE_s6C}G_$bjdDGUyu0z8b{r`^dj06_DzW5Zc9T_v8 zzQK7dfOooHON>51d=fR;{$;x5$@a_k@!Ur|<8N4S01)oqidv{@?aVDusrV})f8QaN z*`&=sODe9eQy9o9?~QT1<9xo-&uvtTk^2HD zU@A2S-zUE*etp%NZ#|9MElnDgE$^t3N$6mrQAWSiScNX7Z`UBHrpPBvliF4(u%Z! zPVw3Jnbv|lO1pK+uHfZFIjixXv}q66{~_AagKMCn;mw{NlD%ZLbd#y+;4(-V(BI|P zpHFm14{Cj5aA4m{lU(^>=(+g&ypH*7cZrvG`hxa}zZ;jW9H>L_TrhJE(a`|PLn5)J zRY~g-c09D{=JDiQVyLbO{YidbhMknud({o1x7L|@AK1TRc~IS9NW*Bv^3hh}GU4X` zoN~;N5D7!G?+4+is|oe4muV^xr<%pjsaxI?VdY_QXdPrgTsOm0~zY%Fx>aI#I+|IEI7bNOSF9V3-HnU&oCd5N~I{8_Mucqo7WvF-p+qKJ>g55bY5}rnm-d z*_k3HkucdsE5r0g**KG$iwxQIW+iN{U{!z4KxKI_gyPyy??0-qA%xcVik?zA7LyLY z7A1AZ7%u)%G`vZPx$G0Z@DB=*A6wguhTO<=EzG>yXX$SK-0z~C?T4So#DJpg_(bIz z(Y@?*4@dN#xnAF!uUmTXtr`4W?53|1;wk0YDqK8k2)trVmaayBKRpfO@23D)v$r#Z zlQ~OHnzPCgkMX)ADju#Uu>l6Nv1AZ-OL!v$>BgCyZh>Ng8rux@$!Wzat7ue(Q1Lt@Uepu`*h~E6Qq_?3}%Hk2v62I48>0WeLtiu&uQ;Rv*8w+hTs9S+f0;yn9PYj5~ z6yLYZsa8(@r0`wMs9`Z(ZYRqyfG6adhnq$D@cZ?H<%5rW;bnLk3b9AB(w|%QB_9{_ zg7<6g-nBc_f0gsv0xEH(nxBvE{j=-DxoZ(WzqT)RKEJv<2r6U&4++MhYN$|?nlL`+ zQll)srMgy@8QP1*Q~{`gyKEAaBHlWzIuubB#D#gsT$ms|0O#eLEt67K4Du!5t`Sfd zUvHO>GD#&k^!tw;Y1o5Ik)I~KM zVfVU@OzZXC(Hds+aJzUO$QMwz`sO zTSiTc1^ifdG*RC`PkOSFDhqM^j@d^ zKt|Tv-{2Q#S9(6Lw$tks_sZss`3(+lEf@fW|G8Z_uk`uD5Wb*;XY1nAy%)Eat_Wtz zYm9tkfxsh5Ya>2}*a;KY0CmxRc5acy)z%WaI~w(EpR7M<36HZodVM5xq}jx(4+rpy z4gHX5kXwGAcl;&>;79+Lo6Asqql-F_;j;akI>`!5aA!n$xej_z=j}Z0>&>yA(jWa$ z97&(WBl%x)h$we{z3HE!cbuK${tQY!tz)MUMkn7?SIfNjQNms_9iomzMvF$fISo4H zJxuZWl8zEp;kAiJ;X<^RL}!$frUUdo$-TWVP7&+Q{`d&iq|Mb`(8r7xyRB}=6lg2X zP_A4T%qO1TWeEy-vct2J#UNY8J!QHLcGuO_4;_)LVz>d@3&^rC3oDzkl%lWlf7&UM z7j&i4e7sJP?zLG4m&+5;H~EXaggd|HYn>L_2iho^hyJ@Z&A;&Q&GkJ^&>_X8mC!eH z>IrTobU0=;{{@)~HaGtz8Wa?EbPunFxCWeDDFwYUl#i!%dL3T3`8;juUBkeA<#t5v zBbBgwIoHEO{NECW&Dd!iAxb$Mwv(9No<+xn*8mD&OfRIG58{m~*K3$wy;o+vi%$EC z5DKGDBD)d@mA+Hxp|klXLltrHmgqg7^YD*i{yg-2^fZvHQ-NYdrYi;s5aL$|;k%W||ol1wHAkO{iC9UMao%s^o75 z4=$aFa7Tra2Up-nC5z4%d-ZVT&LtmH?|RK@O|f;Q{V{WC8#d6V3pZ zh#Wwn{fZ`2f#l^02RMPO8pnk>pp&yxmg_xl-9_bNHbkR0Tv;~QAH-n2?HKHhDj4YC zqMp1C+G+&<;nAd6R(sr1QxM(0YvAA)&}FX;D4bxKNT<#~M?32!2n^qyh0IPmHEr%6 zymJVy6*uy7$hOlOem?zVsACWJN<`8eclN9k+^=cQS6**Xb1T`A*UZ*C-I&WH_?J0V zl$S7zP?Vv9vqa8F-FsGFtuGsQe|nzP-lKah`EZ@#bJUe56iVt@(a5h?>*bi_GPS0y zn9@7Gs8W2V=qy)?*4~4ArpLNJ{ga>cQ0(dU_PKM9K1=3GSd(%kqNbjEIgTI9AKRlv zR@~9>m~bmLFsrSm)5lb+@e!r)cO328d`V3EZV*@DnzHk=005Urqv%6BDSCty2dOfL z=h{0y!Ab;Nhcu>wkP?oD2sv@ZiaT1fQbGP9$CYrTV`A>sbqDW=P9kZT&2ssOTx44R zZh5^#6nNW;*(Ctp4@Wyh`R-d)jmP|~@jNomN^c|xIu8!Xnp6#G!AwaCrT90BI1Ux* z28{iGSD=@CqS>K-4MBK1$>EaL#nB*zQJ_&_f-A=K#?zsWOc9$en01&BmDmc82FC{a zXrlCI>lI=uV}>V9tajY@nUU!@7<0H@)zM|8D5T;UI0oiyFPqyC{pxrSgSNZLik!1pIg3DWUWSzWq5}CYn9z zd)nH}^M0qPKr6@bMVv=GIUBy*MK34H1QfBnEuL38PWnzcnJ}rSOp@12f8-Bf;8f5U zFrX-dV4(I4&eMN(H0%c#<$(Y=sV03|&R&AkD+Pdoml-CE!a+?0+2t?;kd!-;+MnQL zbn>VIlE6|Af| z>hH2d_qjh^9ACjKG1@KjN{Q#OOi*XJr}`q(T!;wa-c=pJ&Ki_Pl0eTdJ%!KtX9*e$ z^{4O4?z|BVVtaeb@7@Kw<^_v-zlawG&o||ScNgv^<1gijUgdM;XT4h!Mts-SBIa`> zY8P2z;eMvGYH=1hRbhL%AZd#pK;F+hi*(~PN}wf~2lP=c3J2q#8}eR7WKanP&mw zqn9s;XvHTli1eT2mj=OYfQ^b_sMj6D)bk~7@^uR7c9L9GT>I9%WfM}8~0(i|> zHS(s)SMG<`RBWhUV5-m_2YuwWT5#=^{aDnOdydx;mk>ALX2NO=!(ZHSXWyc39Z^En zj+}$DR6-ujE1hyP4OE;51As(RDyt2fuOnaMxY{^}W)>nQm6L@#j{Evd*lLorRXYOy zpjVzgdqVjVaiuoU*M8LiVMw%75obb8TvLAO-TzSbEJ`nml1;c1Vw-=BFu*ctBs7{w zpqY>Wk$VvsT1Yl{=@j#gYqdntQ_hOX8VV?4a8zy*E{dZ<4dE)dvfE}qB&#u7@kD^2 zL$K;h&`kd?9!w<06mH$+e0~M$MH^9M0KOkoipIh;I3V<~@C-z>tE3R2IZn6agS}t( z0qL`~@&)sB69>RqSI05(NlQ&&(L5Fmqv;z(^(~7F>e#H6UxzkG-Y-mwuRJDn{qAJ!=L-~Y*j=NYT&$MaSPgIAS2(TJ zlC7Ly2{vCoTfe!E{;dy`xS`gqW zI%pBj(WEjDW;x+19c+JGro&`uoE08J> zKUHX`X5gkLZo(g4jzgh%v$VI7pZ{zTD-_^RkFwW>A|6Z9Np*q%oheE$+KevV)Ck)c z+X+o#L(=Dp!s}QTB)hY&M)CYnOjo#?4$88RF0J1`gIuO>lpZTB&N-luw{$5>*v!E1 z>sCv~0z&Gl%+{O?Qkv+5X9!^LC|sBp^u77g`)6JHw2B*^_e!=k*l z6TLh8IjsI>Q=g`Gm3qWe>}UOc^!yI)1%oah&4h~F9=s^@YGu1nuZqpWf=h8RgayB1 zpjpmRM<3_yK+uGE-aG6{oectxCq%dPcVrtCnS=c6jVrfHI0)t2H_uhsIwSxPy2;aE zb6g+xSgp3-ei#iAy(4&E93Ba6}P))AV79<&Jzlss*p1k+W zSg`dXOkQ^c&A-LYNXNpW#d>=|5G>>xy^uFCvvVi^S}n!IPyETr+Yd%}6I<&) z91EiU^D}M0;jfVTtdUJ1E9*5GX(NLgvAwrnn8|`kr?tC9mVPWMUykEGmE6Oru|p$n z-F?jGPgYInIs9&S0sJAY1^VM?^AdUZL9N<9+OGEZ3WkxOYzW&xZUM6bOawxLBNn1y zDQs=vqZZd3CZ_nsZG;m>_a8V`04JE@; zB!S}UqVo6H0?oz)ghtiaN+ zxXhi?PphFnTYm5iiHW>U1>L!4n7CIaznu#9L6oom($&>f8j(H;D=Bz9gM$l!vY@cQ zq5vL^81Q&7UNqgj)D3@Q^x+&~vE=a+JsOuA`9xLy-qf4#)^trWe{&WrmY!CXWd+>( zrp4__@n0AAEh{moD{C5==cK^^0FqkWke63|PR}R{A&vJ(7ZfHNeU?qUt24s+OmXg> z?PC6CpZlgNZqLR>=OI;j+7(vbDsvK$RZV@D%WNeHJ#W0tX~_$pDXj>=c?m!p%XKTq zQ55*76tRJFcB~+pN}61-4h{}upiaGlXCOk7L5*@&p0w)4<%I}ZweYv_MiuUs6Dwv~ zcSbZ8^FBi@z7GnRy-}SHqS4`0?e^3P{BboX`IX6Kn^Ym?ATT+4|55U%JKvmQma98f z50bwnsl5ZIv<}~>lum=zDsk#OP=a0aaEw!@5kv&h^^zU_+^Cq4=3}>gG*j+6cHg8c zzkc+k|5NS2Pf`u7$PKt=s+ z)*c-=c3YeAF)inKj3$%&E3$X-w&sI_7nPKnEzzm$wlZ{K!GzhAdV#)C`znrfLQsK{ z8*LBEV%#uS(^hZzM!nu7pOc0d@hxOcRlUGOM?KN4Ns|B%>=F`S5NBtgg_%OAfa2Q~ zo1+;(ji$JXDSZs7z0ay*H!T_X!2{%M?XrTr-0vWjQx@?|EEZ%GP|ynIBJ$lwLP zgu%XIlNanX?(DoUY%vlgvO~?OV4fBjB&ZK3fJQr~`EM3e)9_13h`2a>^}P3Ja;$cC zA=ku8vtnG7XVtnqLP&Ddt7q4D+Qf^8zc}{Mdz=Z}lQFGsw#yZ$xQMu|pSOK6^+ zU1>AQ-ut1@=jRy-Ku}JbQ-|6jdSDhc-{+mYsUJT$-DU1ZXbye7=VOdJV9;(akE&Ok%v3B`_Pk5Kd}S zLpu4))Cgr14+y(a7*~KqxF^tQG{FKF#ErClKJ03&YjM=|5M)yg?YnNZ-0}db4`s}= zK-4fj+a+C;FO14rccAw>`v>)mR1ORqzf;-ejLI*rQU@FZ2Yf#ljNVDApHIExW#I zzdA6-U0_VN8%~%Q2R3wz{kDmDZqHTzJTM>;_U#AN{tEh@Pbond01;~T>Pd)pW3ne+ zeFPaN`d}%#&t<4Vd-hBi+&hlgy$0%A>xy)TV z=F!GY+MsvVm!(csI}tnx#4ud3Np=85$0AB)m2YUG7(wGbAZ6l0>*OcX7y#mg6NcWVSFg1CsS8n*PCPC6f`zP`uWr-zR(ulE&lO#%h^q^UR)79T3_QJ2*I-XzrtSs&> zN|e(L3MeVD70Bk`2EMoC)7(s+X@-3=Fq3k=c-|~tJr?hDoNSjprBGh0rm``XFvy`y z$7u=EU{TB(HvdeMt{4FQn>PTSiEO1Kbb_*ynPJ+eeT;Bi^_B4WQVzpRE#E;_xp59#H!d^BhsGV%f|l4 z`!n2mV2+JKf;Haj0X9!scq(>;{7sEXa2SohoJ2R`>Tg)Z-;LXziMU33x z4AnGjde99ijI??5rmIVGD0mP3A&_AHp>*j$7fQI$`g=Zwi+O3BUuGSqoOw7`!DL=aq=?w|JxOcjD`1b;3@>CN1CQxuZ>t!C%Wkw|YX-Y%; z+5q*XPCWQLUJqqa5QrYiXfn`sA`{PPoZq?;Sl)g;A&|sql%)H<={U+^@>VSs=}5`% z2k%Xh2a5WQ%+EO0Gg{0e#@}?cUCQLdc0UOhe0zO?gRGv*+S=UvRjsL*q<;|70e){q4 zdH#ZbAj1D(0gQy-&!NZv@Tt!450oac{T7M+3r=T*WJaz8sS{x%4hNH=lP>o z3QWG?YU&N{!EyhxoK%9ooS9XKo#_v2@7u?;X*alCWVNRJg!>GHt3pMUB5YdFaUZM- zWT13bzaw63MI>$oa;;LC+&+VYIYJG8t{t${QRU<2Lcd~|{6V^0xqWEss*$UkHdHHZ zS))x!QtPAPcI~6NopzNyffL{Cd}k-kVZA=+4jkJOrh^IkT*ifSt%6y;*~-4!o+;^E zQ^Xc6g@&~V1?IT1`Hg=0p*RVTTN$lXZFmG@qwoEF#Z4f6J!w>?NJNI0t7rS{`q@d( znMjG5h&_B4S|&!u4t?bminwUxh-|0Su_ZYbpSv00$bS3)8+egBp4Id20;8yDl`akG z0NR%f6UU%SlP56Ff+`OkkxeJDcH`9fYk9*G-r}lTJvQBoKkc?N%W4~NKrhG6MY@X1 zO*}cG?QoNeY_@3yqoL2bl7@@LTSkhSp;U&>?)`Wv&AL9ir$|Q7*4KS=Iq?u)W3ESa z4eN!u#XxP@=9LP;+*g9D_ZR$niBol5=2LGaw>v+L>N;{rxIYM;qYZ!XYb>&Td$DFL z;M#EWwVq$s-zzzOCjZxc=ve3fM8J1F5W)@!K+=mPz78)tA2WJ;IhH@zP`%z%{@r1e zwleXDjJ)bGt1){~*|$9P&y=^6qs7mZr;4eV1eOgb6_w!xds*7XS`t&}0%eNnsQee2 z%WR$i#{$To0k-cFVmhoecY>6irat>V;ywtIIB}9KApE?f9H^dR6T)NRHm?L!c;Z`H#vhjaxvuxu zJ&CDc?wfb#cfNnfsV3?VnoN~;4dBet$9o)Kob0P*)tLSmgQSHwm6SQih~MHyp|i9f zsg&w@t2j`Pi~tZR;|r4dcvxgwH0Xr(wDwwU{)CZO)Zg_VtkACxXrr0U z6yc-fxr^LlF%?NwiWByAA0EyY2=v_MPDAi!Y*1Bvq+=%Ut5AxcP!1`SCZ>23$g)&T znm$eZh(1A8G-+`CZ{p>jxGMlx96J>lz|oL=p*VMvAfD(8=aA1rt4T~ifK=*e-Tr8( zel&I^)-i!E0>pc*RdFV^;A%~!Cx0gUAB_85mj#|b4MSS#rgQ!7sUI+agWb*EAY8wv z9wt=u=QADe?d{r|=BmDfgZMhPXF7c8B$sN_#o7om>i|3$YbBwtFUUT~H@t?VbBHE0 z{$kTRbxCz@b7b6LR@rVbe*9Q%QU~Yw^U~?Wi_Z617LxUs8YpFfK7;RTX`002SNkrlAHRBYP7t0Pmcsx$XjmFdjiFr!85N-iHpHR>~u)SN#F>{|lR$k3B;_B?mQ zd6q;FqA1}e(4?nG^gwTeF+Q250u@(rqa|1$-Kz-a!!EI6V(=^^0*H>6n@E)c8S>~S z>nm$?2u=f-=S!m{lc6-~UZhF}!w=X#DlInmGga%{XeM476?y#dU*?$a;;}z{W&j38 zMq&EYtiFH9VX0NjjV1;ZdQZpiNfkCkYZ7sI+Fy=9E7+C?z^0wBq22HcjAy2{?j+Y?lh7&t_( zDyOeByDdvV3#C5>rIRn#t@rHJf(XN}NvkuR`3n(o*5Y{BxWmii1lE_kA?iFWpF7>>-hNEhue@_#dP2f#2ImOBplv-{0>F}uk)MO=|Zn4Zr=BCjIW&jc# z?xS1fKUE5E4;DE$sQKp9^FJg`6TD01t0Ssa3Jf^%9DN27`R$!nwNo`!1pJ@QhsgRj z%k!!&!R`C#4Z`UafBPywacmo6m5$gx{oa<;7??de9FwXS2~b}+%eA(9LsriAva%f; zxL#m$NxH?ZUO4K)iFbf_xo($)rmqI~=A{jNKdzmtv)i^Dr&;QDs?p|hDzyh2BmCCW z%9eazIVfj>O_Oba+R$?hJ4$|0OF76`VcL(KKNZHvkjuzmMKk-uT}h7gR!(zE`Pf6w z@FJ#;fXQeBF`%&Cy_jA@8xdIaS6cm#9YNykDO^x$dBaK9<+cQk5njtjn6M#cNu>lv zt1N%Qrsvvmu5gY%-_M8MrV%8&xw%WaWt?`pgN8&ZUM_mHtt}N2_F&Ang#{H}!!lj1 z`*@u0RZg45FfD3y?}6ZUM8lQBmwZIE56&jOB1}3~y?aZA%(`Ig?K$goKDFI|@~_`y zvYI6PYMv!OA5@Y9THyGN5UTWd(ONg8Rn|D=O*j}xIX-`@y?yBcr2hqf#3NBE= zKjbuFG(je#wa>?Kx=GdBibfk3IOOD*zRQ8ML^oSXUvy~mZt@-_;S}u}D_ljPo?|6Q zhQLATm{@tyizRr^AZ@CtbCW{RuZR9AQr>p7^&F(6861WU?rjwLNuA`zUiQvIhHtJzFF4NMM$p%6T8ias{@cFv%5;67rv__?3FCk>^Wh7r)0xbbpi|Lb$ z$oCkOThm(Ra<{>ttHJ@#NcEtAgt1LmcCofd`3SeC2`|3-JpTe#Wzv$!V=7IO&1UNn zA|yD}JxcztYS5=8^O8HYP-P^RS%Udo0%j+fh(6Ef*2Q!mM((mRsZ3v)o^J z2e91y^5_WejS{Og3E_m_3xN;qTxt0>8*IVYed~7aTYolmq)VqpWRL_BhCabE3x3aa z5%5euxK=ZmI}qA1s1o}N($!FFTg-BoFVcJPi#7vZ3l(h~;V0j!@BOm)zA^%R*k@Q| zI$LVB7)Cizn(t@+TYu6-=(i+iFgeY*#Fpi`U7+y3SY$g3VUT~UA;vnqb|RTJ6w?}7 z{o1~+wLI=TH|o5SVlamDK4wf3-GG5(3Ea_%EKPU}Rw_|D8qph3)QfSR0ze50b^nm# zOw?aFujRVOr%kJC_{GJ3@B~S#r~CZulSh78Xp~tHyWYga6lj2D@WCM^cyCkbn4-8aRTcN_a!4I37AJraj_N-O9pU!?|?#%3kWOK=4*TE`PHj1#RGEU z-24v}eGZlfQkHC39(y5Em=r^_hJ3U3Nl(MhbVX7Xv1&pYx43U{XB zPkP=tRxjqRA7tOj=w-`us4=y9+@m<;Qu96x#m2E!oYE%pK$G#V2)6~LgJG6)JhSL8a)^C&Epj^B60@S2fD~ zUHa8-&^IchgBsYsRx*@kv<_+UB(u`-|Tl)DS}MT0)Lq% zr9YwQTqIp#2x;W1zID4o7 z3Bk+atIaIzO&;JD-HqJqLJns2N(=8@I*Q%!1f;y%h$&x4>-#_N%oX+8zWbl_MD+aN zd#1622%sDWz2(~}3Y)E^sEJU0dCWp9U!nOqYJN&aiMqUKjx}5WlSO=5hSP^D0x`Yn zAQ*&M_XIOSJ3vi#lLEO!ldl&YpLoV5rN(W9@Dvqrx2Q2~q-vj+83wsy8}e7`vJcC8fIaV32_?QEUvDIez7mV4K1EBJ{B4V_VHr*N`6lin#ckO`^qfziZF+Zq}Q6eOs{c( zEn601<^D6=thjkCy!8Kbnj_uFsrGKhmI+6E+G~ig_rf-h>V_ zpyaYkJ~BCK5T_yS)^y`@NPBH7ZpwpM4OhX5-zu30#R4~=ZVsw{Y%d1f2K{u}(fVxQGdVic+TZO&OhRt}pwcp6p7!XAv| zy=c!PDk@{KFJbOuQhUowspeaA@uSohg#~;oD;Nscjc_0s;*+B1g$uB(s6;zagajlg z8AH#b5PqJrTX#4783{TSzf@w!_2p=Y12DZfepMzs`CP$=fdS<9a}+=#soKCum}{Pg z4R8l4HbjAN$TAwMK}W5is)+gO!YE!W1(Cr)r!V$pA|Gtvc@i|OI?CS+h&}4CW6(A_ z;S@pm2XF4F{bwiRzNYtbenC4pU(Ciu@NtCpW=@TPNTSmE=ga(I>tUN8m~=17ws-wE z*PQ3^%jb{IE?AMslHek$sW4d@Yo?OgL(-BSdd@%T2|HNTUbw1GpsT@F>+~%L{B9h3 zTl@Iw%opt!#tQQbyD=2gWB}Ix4GO715i2~ey@U^XB#WLH2k25O-VM-w31?3fqGmK* z>Q%)}ymATQ=VMr+RqP*`jzb#84N^fafTFP>)X*eggNKhtQ=iF+`yXON&nIbKJb{ zma6>adZL^F zOBaq`v_JdrZm!Qpgr!rOO95kG)6|=F_0EKs7e@-7SzlUtMQJGCN&Kh{_I=%@a%_CX zZBp5@pEWH?d;%98U%(6fgo}D3klCyKoptC+_;7-~~A=wFTc!GBQIu}m^HrSuxQ=|wP-^6;w7d{y3QWTOtsI{3?LGIP zPgl`Mu_#_VkVES-A*73f5O}iN`2bS1|52G*oUX*tZ#!?7-eRBL|JQP{o}Wyobqep{ zEULsSxEQbSd{fX)TmRiBNZtUPjL?8KDCpUh1WgdtsOUPLWQYVakk~nIb)d41d&vpx z#oN?80gO7)LP3Vm?OxMhxM{DF9xhxxk*HToOZdoAO?{OEe>u9w*4v_$xzZs$>Qb1FQ|L%>H# zi1Db>d|F>!wTs8tn&GvR%=s7X5z097m^(MZMxo)G`Pehd{>(qNpEi*IoSMxy#+j?g z8<$Mo$YnPnKSgk?EbxgXbrDDNQ_XDe8As0l9^Voj*YkKC|HiP(nDS5JJFKwL$Py;} zLUJVpA@oE-kElqSXS=PcZ~zH?iiThNVo1lA5QFK5ya)lq(5U!W7BH4ZN-AQ%%|qWT z_>E908Q4H+XJ{2{@$!t=KsiHHgklIY#Sr>RH87Td#2H5OMfgf#Sat8aB0+r>EXpu` z+2P7NY8U*hRGL&{>%Or=TyUFw5@5*+;r@%Nn87~`g?{d^YHI1a@@8n5OAa|7OV*ob zc88i*Zc26<c(QNVhf-*-m95uaa@S- zaBiuZ9l|0q^Z;R82H=5P65_biDK!>;;l+W1qgwBcG_`uo$jB(b4k0 z9W{@JXa9nE*zSQc6m?tVR#3ZH{?4Cc4@$j>n9!BrL3ly2$z?#Ea$`3hClT2ZCQ4&4 z@Gex(=?eFgkM1okqW@Ki9^t$$ab7u42~__^E8Vl#`M|q zzKB_>OqNO-?=|dtp~X`GF}~IUlR8wr-WOEa|Ded677Ub=-58*J)S+@7*hW#^%><8d zDu>3tBx?zfsyKYL+vi8=?)?4#yjwD56vQ9wi!a2PU%!25+!_~LxEDL-qTmg6Wn>g_ zY$8?SmRMa4r+DAGw0}SMMpGybW*kp`M1A&ayzxR{RB%=}j#H#B&Q&_sD`DOWozEWY z+`K;LoX~gGmg#IyMd;(>+lc!Q52Gkie<&y3K2_>SO(*Y%=GAO&uxynON@MzSnQQN$a91 zk@N7Lk`9xf``YI2`#vl;Vn zvD$ex1izSC+nc)$Bli}$PNmN2;BSB*fbzqr4h{-RxX>a(z#a~q6jT$+g1(;rJ|xoa!qhL>ziLr;(L!P_l%FNfborIW zPby|%vPt*+%h_B>ZjZaF%)}+3Y)_R2R4;WQ14T$L{y8)`AV+CtmO=&h8qAWa@fwvC zy!=X+(!cBVNr;w5M+btWnz}d|#R0W3)n?t#Qi6Altw@x{f?Cs;r4cPpOf1{|)pw zP+n`d>dZ!a1z#WNlsf;yE{O&GEazGKy~~tJ56aO22NY1{r;Y2~Bw!QY{arkHgv?^; z#+_eSIG+YXt$hN}IS(KMttvbj5D07Dd`^%~Jknr(1_IM~z>ZMla3Z2+} zw&z^6$fTyviBXifZ`7h2zG6E8%qI4J>M_DUzNN|xJN(zv2SXlJL*9+|i2O%Up-|E_ zLaVAvoiptzM*~u0`&#*4J>)f7V&h5xRH-x>p#v33hS7@Wtj56a`T>cGqpb-RA3B_O7)cY2MCfE zQcp7X7$xXLAX1O2ysP~AHsx(pc?Yu*9dSUkAOp&P(RE0M&FbbmTo9i>^Huf z1l#}8f7f&KE#=a_ezQzr#RqQ1JHlgscDK)T{24mxakQ&3p1`$o_BCqVWMxe^ow~^9 zzFAL64TGiLaTb)#kIu%LghT6|HzB026PA{$e8@ripqFqCPQe%dMKuq)A!wGM>nwzr z{sxPNH*JCF3@KiAS_F+ zvgJM_lOw<|bymF7iqIDtg@o(D^-0yhr=YU}Chbu+zoa5V_Ciz()Qkk9! z4tynJWe66UL2bj#O7J!nHPe+!pIw&+wdrh(S}fR?xrcmU3~j>YuRkK_#Wqa3^F8nD zEXs5R&VIKjx$w$bS1n)XC(U&e9liRnuTK)Q{n$+H)UHT(%|}sozPxov>5u>G$o|5> zJN)d^i4MoxhTtr5X&R$#w7V1*%E|BQnfaf!Z^_uOz3}}VnP?I!0slWPoHYo zR#wTUTt_!S9=D5ST#I6X7~@&aZ5L*`7-}j2#*+*UmLrl8ftcz+F^@rZs<2V)lkJEY zsyK*?_{@Dl3u7AuPf#5Q9f+Ho&eusYW#_0vI5hr44i%%1F~&J|_x&)fN=nc$>f%Y0 zyOh43PpeF>z*nF!6~YM=mMNr}@7czWgA zv-*IN5(}wBDyg`~K^*)?!T~q)BjmDb{=9BC@#_xTeKN7nqQ$*l{4G47!wWU4|E6y; z`=JNN>S8^wCuZOw+cRqr5dc^LFi4I@7?0cz3_;=nIz}iBw%7%Z6wzHq0t7lvh)~d% z29jdI2QVMC?3Fb|7$TCJT_FZ(n87Niilo6?F129+!f*+a4^?~|CjlB0ABtcWmKV&g zZYngdSo}~(m{Tf#Jv7VVdC;ya(IEewN{enx%#E~}a>+Bz^k*s@vDxT4P)EG0>@Avs zY;ky;H8`T5V?tIPc%o*%6(;$f3ARmYBplUClq?Jl%qea9(?QnEa_8*#B4e_d9yACK z5%)MwOL=cQtG_r>F=_;mv5%>W0#gLuXl_Yxh3#b!V62Q(Wd>)C?}lEGp15Cejiz|6LoXzQq%WpkBIVovJwO#+K0pt!c|I&6u( z%U&{=b{q{UP|Y1Qg~yXR3>#8*S6jv2>>FFoO>#rz+1XOO)PylV&~F&x+!^vR78Es| zz|m%w%4rD8FeIFXnq3KHt;K0$bkvN9bQ>i+|A(AR?69J#rBI~%ig}fIv&Od~#5Xkq z#`W(rn#E$K18qw}O^erurY(i_WloTcR1SmM)-(*|>+G}~q0@Ek#)oa*hN?wyK4+W7 zJNZn5A{Nj8Tnzs_?175@Ja+Ze-Frm|5*>rJ{v8t*T@ZqEJ>T780 z?I9WEf#%c0pyY3y;tgOV&E+Zkt%Dj0*M#ai`%T|aZFg3$ocjd1~w1T2i^p(|; zsX2}R#J1#d{6=qt-bj`?37IhxlQm46X>SIp`Cl#I>6)pSdSnVuFxq`U7w6i5hvIwH zxC>yVZ1PJ#ba(}X&ClI};rS`aQ$I@#>%JZ*>8_>*f(T$yFP9zLC-3i9zWLHRu#DeD z6^Ivxx{(texIH#XEK3-;k<$3J=kPD(Q;@u=Yatr=xs>5=ic`nE2>65P675%&Su#t$ z@czedCb!Si*z=j6$fgoZu_)x#2ImS0u!L#{vpE?u+)S^%qiMujKWSFj^<1feAGus* z_`ynqA#o~)esdW7S2+7`EuwDh(52z4l4v0LxcXjIYlkP0wr{&Uv8p)ZBiZs~xZDvcg2p5*Iv(D1|3b?& z^a)F^C#w~u`=Y4AMwFZZ8pJ7ojA7G5x@GDuet^@;nC6>#jb{s(PrvTW7_juD7d&4~ z2Jj%}{VP$bPhRFEWcgmZS$qkS;LT2$wi8YkaG67YM*0+I3wH=0^~0!Sik1&=rT8`1HI0kO zlA{~Zx8Z|~oit^h;T(gav=uxd-*Qbm*;Q^Iu@+gaO8dzVH+0pR%$QlXCY0gCK=`X) zq3PA&G^6zALy6pSnb$;htRZIgD*EP$HF$tKrz);+B&LZ!Ym|lt>=JIWHWCx370Wx6 ziWtV_*2`P1oiF|1f!LKe?B#$uBh4I*@d{Zw&K9?1kmQeid!hBFk@%t zK+~g~!~lxLkC3dmBzL{Ofl-D8AVQnpKu>e!)t}W~-MT#Vx(r!d63-biz@@}6naTE? z#j~OTANU)2Kbfxp>#3o*Wa%eJhtW=sT#Zt4eCkyfxU_g;wHC0lWhFO4DY@`Xh% zzHIIqFDoSfdLH?CM?4C(E#q~4qGU6%V92CMTGp^|-F!ay^aItn(AZXRynR8meF1}! zlT_}}_+007sfTG=i^*{C<4HMg{aBkHSGD4VlIeS@4F4f#63c04Zc%D6i8C9vuhp<< z%br>~UzrpHDcw!W7`H0_#XPf^; zi)dRu5mKT*|N5ct=sJ!bWxcma=c@lYla|%!*ls$$W@@D|UN{rAen4WqReQekF;Y!E ztDkpAZRhvr9dS_(s-dVywQ-91tjfWusF&huqC2-1LwCkJYs)N`g&1tzub`=Bb>MCi zuu()&wt5C@xm~@8w0%g|L$sBkrlS^_CYyeGr`!)K2Q_ys2H_0Sk-9v@ALKz@4=@+T zLg&zio6#qc-Fco~N>~W0E+?ex%Ye>{LBdtljvB@VI{^lOiD+C=n(}EpCNHvmG$QDo zO=f&uL-UTl)+y?!4KyzXKe5-cvklra)#_po_?G!=QI>lsp(q0JOko3`wTnolXByi?7rN}Ra1{g$+H3; z$rtSgWfP5TTcK_d-5JG?ep(iv$4?Up?ikd*^#n6zYQe4+arcI}$a^wzSIXc&J|NBdtWA~Wr`{nG?FY`pyePA*>T`0Vo z&STz3zse(xphv!69rM{?!3fCco!|C+oxaxID%1*SN&|2dMAJO-1pIPDwJ=c=k8MtW ziOqoq$Ms;*jJBbZ>_QXtgFIH*zv*?EVIr8G*HUBF#K@B-s*ehcDL&0--ms*1eEZ}; zlZ=O)xl?;(=gEag>C=+yzH0}o1ZFOcJIJ84b3VWAaE{XpX1A!&wL5ghu;+r#tK1xN zx7ZAJxiBlhH%T^qL@z~D`JR54pw8I@rv{OTN1pd1ga~@-jzry5>M0K1;e5y&7SEK_ zV6&RXS>u~3mlA;8`=nDfAmu-!oIBgMZmXlxVZDJzO~YH2ms>;!bq{g}$nq-5E>IgE zH*YKB+V%Bm+%?MMZ8OH&rXSCppM3jsE42QMN|4iR0}vv0iL|>$Yzs85ti_yu{&cIH zIefC8N0$=zll~|O5l=+#R{6T*V|Rv9taDH_gQ-zSuXHPTvwg&UA%*Z-H!C`a3Z4Ri zVe@NK{0?d2sWQdy zh{qf)Pc37?>^etblD10LnbaZHCG)4cGcj``bTC_RssT6dKrQ5q+Bsw8*mvhakBv%S znKpADd*Qxps@;=&RREQGQ{S*cTIalYygMcA80)oOx#iX;ePf$KcbJ5LL955`1nA|a zHPN6rLQNc;?{L$3f^*L17UHTWXNstea&G@E?%sR{^|^T$E<~7TG(LhQhYEpc+mwwB zrVBi*iu9{JLT{`-a(`z74wt~V@q~-{h_eZ8!NCSc=RWMNpIUSm4exk*{Y24^Y#y+K z|9#5p1%3(D1A5wOOvmmA8uX-?S05G`xmp`>XkS-*#_rUO>L!TV{+3Pv#L3swX<)2C zTL^Vba#1A%&S9>;7Dwe~706>haoS`!4Iocq>N|0*6K!Y~AQ7&rWtruLl@#lYh=celD*NW+lnBRDt`km^8#W^gR z{R_scI|F;nz%uA~r4tRwYWf`nf2Mt`Vj|+PwSv+Xg_5T8a7bIt+N((Ak?H9t+kS7~ zy<>)}#&{+l;BF@vAJY8o@CP|c?5pDzgC#BPfhO_3LkhBMqHQYLwTn3@&9d^&kiyoB z1-lgjExfEPb_O~SW5=?tnlg^ZUm+H{_FyVxUwted`zl8N;`ptpFMZCurhSW3*V+!B zhXIl5Of-Kc0voEX57G|5O_7U(rVPg)Q;@&L|gfCk$+^^oJVez4~5 zG8F`zoj_CSdrQTGqKl|&LUCT~ENyrJI3faUurICy!?&pgwq>L71FezBPPF<|ba!*A z$~Xf;#u-S`$K1}@!rvyCzBRWle=x{dOD51;m5bmurFZ)s0A8hjm!z&Q+)_~r+5`Ix zq1mh~rR{UZpNq~dPo&qs2sQV6=JG3WIdZ`b9eYc-w<6}KzPXr5t=rf=S`aMX+04SJ znV>5tl%p9%Ix^gILqPu6MqgU#(3OxXt=;!L>}@0oAQnU=vc}7#5Y_Egs>;-UYkQux zKJL9zsAYBlk+?67pB#oj+Spz%Qt;%-pM&Z!K2b-VY88STN{{@$GxkZrQ+bg}rqN;+ zM{w5JkT`q+0xzyFdL7M9cfcS|1R$3$8zIZ77sMUH0B9FLN{D?_N?) zFnR484hgt7R*l(z5Bh_gW6b;$vjLWe=4+v(+>MH5vb({+2=mKT}d0c8#q*Ql{wk% z$?w7;1Z03ooY)Z74xhF{+;fmSTdE!Q0)Pjh=`aX^7RW_cikgT>m8B!7glPIv`eCqj zRO-`|2v7uq6*(T51hB$KNi}WpS$DeP1_A*AF~5=+A^!{T*o60?Ir5h#FLf|HGY&f= z`LL~|Ia>r)CInXO(X9$J(i6Te$JmzVP1n8QnE>g?u*x{SQRHR^K##lTy%)I^Whi*g z%eVm@L_76Gu#~pZR+9GMI4}P6630zPUY>ISjjuDC^di1hH{BYMnH}&uek7>BN@X87 zYV5~L8|Ox^s=`sIJn3c2&f#*+$(qx(_6jn>{B0wp`xL)y45uF;t{iH#4A@etDd{gh zEE3ngvNgi48lD^|=tnHnv+y{+oBn~VgiLu1uh`8n2=_cKi!S!p`h z!$2d;NFeqi%9eXl2CKrUE{Al1NWsK(Q!xqL1-U9x9wj0^Amcd->-*SAFQ*btlSmyx+D)qg8Mw}20~7Xl_LQz!^+3ah*n6Wyl`c| zC=_9SUL-W4D_y|9`cw>EAHg9bj?ss;837n69FO`KT=R7(SbkK05!>~vdUT`Wb%Dy>P(7G~;bwuw_}5Iwh_SwZ)@&W=^|JF}t*jS^@;@%s>3l(LCqY z9lAWck^Z>x=83$fxA$?U;7UunpXc6rCx4!=UpaN;!_Q(WxZ}sW7njsv-?YzHz1p#V zhpM}Fp^&QI9yOTa1E@vI(s zexQ>Qlko7#_iuLmVajaLQ6)USn=xlgIQ!Na#D2T6w&R*ztx+9CE}bN78(FNCHvW#< z9C%oLj7Re$FIIpfJ%+R9#btgdC}NbA1K{e#nG!O%+oULBq(Cj51*{2Fh=Wi*rJf&{ zej0KqB}C|Ss(-;rAt_}A-e))AXB9FmbzXnEdyTu$r+~sO&UqJZa^HgY9K(v$o!!q# z01j1#2q6)5i9#i&@_yJ;-VeQB$1dAmX(7*^IdMP&pVYVfL_+qIYo)2Syl_-m-Pw?F zJA2<7#F8h>`}>@5H6N+ssArEq2aw#C&g^K6RK7Om;=KJP2N5eRxbK|Kq)Co*fs%!0jQxvM<7QM4^Y=mlRli- zUff1uPdB%-nt}=FAZqaVsz`knK!f8pcR!wm9|UQgbI65vmAZ4W_NKQJY*{6(xC^=E zkx`m{nG+22QvFivpn}Sq+V{9I4MTq5uCFRi5PUIp=I}8uVKo6jrer8ThL5v6nm62- zcB@Yv0lxT3=XUe{KghYJcoQtm_}`kZnU(2UlNDME+EirJg4BlD1mkm6kJ~ z?3H3wKCMpW$%|x-(#m}I$rh(%r1hAG=xK-;^(|8_+RJP|3=L9 zdZuad#8OPYKmfDG2t>w{A)H>IS)|uIXkN1zNp{gM*H`oK3Pu`%fmxsOMX%$MZj=^j zIaNiwD`LcXt;v^^FdS4n@(YYjgEPxgS3*dSW&pKPD2vMU2rgM3>hMmD;$)RH&%-=` zk|T_|1rJ@%Pj#oz;uzg!Vsu}Zv(vnZZbm$usE@FVDT@WdF;(sP0w=@{IM&`3*eI)g zHwE4jED&xxFHXoLi4_DQJaUHfvJYrL zEq;nvARuO)o8eKmoCLRsw?iXqJs>1f49O{gd=EmIIHP#G%a(1{$MVj7&7=%fb(p7ITtP|o_AYXo`SWoxT0^b=aqugn!@XHu ziRj&$ZdAnD*tMxPNm>!e0W!4K(zj3BOY>!Co{dkl7c8t~h z#YOP9?yR6YIYpQgjAc8K*jXu*!&e9xAVmEzNjG26+4$wSx)bE}5DRig`YxW0;aHN}eyc@7iO3LMd0 zk(I;xa6%Bir^kN?*uDS~%FGiSnnoYr>C+Exd-1I2Op)lCivGuE+=#h`)4yNlFcl?w zBBN4r<*+5NRGZz3cQA};?Aoe!M$*;qOlHx7`P}eT;sNiF6I6g@IhG%kZjDug8UQ3d zYzSwhFro#^0vZ)eJFR8F?+zkm;NnrEGOdrWO^8S(vY~p0L?l28!iEbp3bM9#HiEJY zB8sU1WaJM)%S?rmo-NCbB?e6@VO#>SR*f5`G zseh0=%;Q~cW`6T+|A>XW>7bV4h^RPDlY3olSW(;y$hnIs(Q+SD6;%(rvuSFOkQjoQL@Xs2^?+=^zT$$ zZ~e2115hFc_q}{5v$}fWJh$~JaBBPrd@-K9$x&~S@3eHa>P#&2>&M_;ewyPeL_C{c8|GB$it|G%kr+J`^H9R z*DeNCxTZz%^b-ik++>6=I-=_CtKtWv=6jb#Wo8>VS^A zwLJn{Ttrsy#NKf<;HL>;dt3!8tnb|I`oIQx8pUAr8-W10za7qD^3~ML?z6>#KgemY z&A+m+G-xqjGskR|pkkxMEOA)wO)i?Mj9kzD0$vN;ghza-?`&mp)U(qB>Tn0Ddq|4z zz;OCuShLYn2euEcRN>7q6qo&^N+Fq>nHN(phEX+FjT^b6(r>J*B}@NSbIyNTrgpsW z<k;){XDldygf@B<8PA@&19$tykpusiYKnw*1GR$F|i4^d2*J zf;P%4)0j-XXCLvS^NNmAKwP_aTnCw2DVrCFMVg?H+^6zGwR4Gf@bwr>T=$`Fxs=`x zyWE-Tr$5g?5rf6>aH7kpf_wT4?IH)`7B7;m1lSGF`%GV}hc{F3^vW0rNowBrVvbr%Oc zt)vsc9>Olue4Kd#xxq$XHl;0hNO(Qwue!$PJ6AtnW&WI#J-Yp9=RAG1>pL>t+(q|H z)p?bybI&SjUT3ZjXuuzSZv2h8&DQQga?P5#c>L=dC*ue_g##BMch;=3wT%00{+#aG zcE#d3^fdFTL1@5p=E}a{GbS#F!zopyOgV9(ore!+rF^edO5RkX zj0Ra>C*Z1;o+Fug`2MaMKJs1VODue3fgRj2VtdA}GXEg0(2qkTZsA z#KIzJTHG~%MJ*Qz_gf54E`xrK&IciUpu^96V#;g*s&^!c#L2M?0m@#7`80rwIfG+Sdw?O;J!&?F2c00S* ziTCIIC}($858YOHq?B$}68Owvi23R0hpbCiZXK>3uXmD7c3S1iImJJ zg<948=omF+ao$a4F(%2w!R=t;qSIqDx62((zwT8$V$w_T0?21)D?h$s{$Bn5>`dWL zvlM;|MsccqV})srG}JC?{n9UJ2ozv}8ZXH_GDFM*Tj1s}MnR+q!Z>aXPj&T1CZOUI zgRYfL)E5uuRrDs+=BA;CBit0yS=_oZpfKC94m=49wByMb5J>s%pL97{Zlky6=7}u^ zYbFZ1X@?B&hzzQza!+m(u(I-E-r2k|L@|mSf(^n!i;`BLCL!n5G0LmUB`XcjLJq5! zL0$|?UuI8!sizraGDHSubg3NBgOHAw4{g^uBMgAnG%V5+Mp&cP?-rDzN|F88``F64 zInkCNIHQB?)d1!-9l3REWdGvY9JiHDtb$iDbMDxw9aV+N%$M9@#c8o4rbM8D6U9-SnAwNi($^BeVC;K>U=o0R~kO4p3z52kWbTwJF-#mxNQalS1IkccDYnsUiC>uOGg$-s ztXDPdJ!!_&8ROl@Sax3IC33Tv*U$+lA~`6_vc%z9T|WFLFZ|5uL69idq^#v_u*K3D zi`P8k_j5bCS(GCPy9F&`Xv<&P7(wU~Q-`yxv@(ED6bt?{$SH8o-!|`OX))ihTvX_g zjE!<^(@<4i4;YpyU9iX$8lOKPNp}%(&vLBpGWwV$+QJ~WZ!yM=*$(FJjE9ftCi!*q z@6Ywvrc8~B``}K!Y|?zA5W>O@(@%ZveMYgf{GBlBkRyj;H35LP;#1q$gNE9$_Vuw3 zy|dnZuzB-kcZ6f!VlHe%Hs`o5{3^GD{W7lnILV;C2((eaF~ShiXiaM_K7IUT zZm}=>#w}cotYc(R6^&Mu*%58ygPcx)?gKq+1I=>#uO8s2g|3#Bg8)Im6F(fqViayJ zUaC#DrzDY#gm8HzfP8H6fn51YEnP*-qa;3Itc~^QMom}2XF;44N7Gzsf&*!yY$n9$ z)$(IGC?FG|Rcr5m3^XZL9^Rl7F)Eum$bNpG_ilnbbF1?4@e@C6u2^NLD_}cQEyNc} ze``tgqMw!!OlLZh8pK0mtJn%oEL<__H95b%b4bd=M{eYdoS-N;H?@{IeUi!ip>tV0 zF~0`7cXRXQgjovMFW_MQ89mbZ;aLyI9e+|fCBeeGNZoxXH!-?g3=k%P1)wy+N;rrO z$n33c(6llyqd`DzPg7?VlH}#R_KR5S`;qH&d!gk2yOrZEU$N+oY;j&QlXrY2xxf(F zQj<~rxNRy|x{!1y(NrOCx2Cjh+X6b4`_PSKBKf6nZdZ-CUMmARcQ`zOmL$Tiit-YMFTniftdi zrw^<9m5al~5t&~_*$;~Q%)r_iI@5%-=5&i=f!jT#g`E$~kE<82A+P?jqSvLH0z*Jo z+tAZA>eGlH`U)Zf#t~f7Qav3Ql=L})$fhCh(0TXJ%3oiT3C#z+m!ca@V#Oa@6( zLhMh9$?V9qwUqmOd-|*YVjR^U*HVca$76NiScfZ` zCiU3&0$S*w8bmDa@Wi2#jzcsmR%;qVun1>|132ukW)Da=&J*os#lK=MbIoG9XO15{O)dB{RS=9kX{~zSEQp!urd#>*yXYZ+yfm%Ev6r?0#wH(l9 zoLP1!9~D-KHkBFe(ys~`#M`Q{TEMwMoF!}A?0WG&Uvd)Kf18XeZ}#0z%WTE-gMn6H zor=YXxn?tN*bV7kb(Y$;VyOF{s%QJk@xU5a8MpMgx^i0V-H~^pJ{?CLC$ek8yJbf0 z>>8gp*uRw}13D&W#aL;l&F}QJlHm}xZmoRBZ#%y)hx*!8tm!9$+HYLBy}#WGT2!vv zH9t0h`tjN2PJ(>wq?eJqD`mW@Du32Rg0MVJmY?kiyHBKWUC|v{7_U zTHJjFM%~}gI&x?I2+;m&8GE)ajk9sd?KNKcgq#3*i;| zX}RB){XXoLRXn7;4WQPLAG;0qe~H^JD$g`|L@-uFp2<7jav$7VbLRT@fhRnVdBq2c<*nDwEk$jSbgpZ|ZRD zNC6Ar6kt75w))Wn)lb#exg!OeR5h^sS%llK;>>srBt}(PkL9M-wa^cOOydA~y0VK~ z9omKC?TKFL0B*Is=PX-y@d^HDhFFOlh!0g1LHY#SawOUal z7-y7)MjaY2gcmL({NyfAHU022O|kjYz_fVEDZ2uf(Jr$_v|CR4zEdkvD>gz;oR9oY z{{3N`1ptKr@~teNUTnol6o_3*|+uM2va2y>r}c_(PGU^UhVDzPyiQ0Mj-wAcG4Wh=)Kp(putl zF(Pn2b}o|XAXe|0p58zZH~c6V9;%!ygRtbsu;ck&)o6`NWQ!;F{h?HIO@(5gpa%4S z&5MQaeS(<}EZBx-x`sgLpL_*hK3`tUvE>!__;m6DJt%I~zr)!Nj|R9}*?$99KL^L3 z;8m#b8w>t)h1H0Ws%3r6M7d_+jj%2E=@^*fMwppb;b0r9s-o1UutWiK5PaI{)w@IL zo2QkrVlJn=CXThGZf!t5EPr_c$ngC{hhYI+GaH}KfFFABY^ar}QgV>=09|x2LwdKl z1pEqnk|^$IZU#uNThZ#demfb=nC2ryy5R-D=Pj_Lc3NWjM`AATd1NyKz@r@?NIf61 zX;6m|tJ>m2gX>chL!uc2;@a^UFSC`B@Dfw;(qPa4zOpA0lKjdoSZnJ}VoBC>h3jLl zRLe@J?^A>45;&Dak~XcYB%aQ^j+nKtPCB8dXVUdT{hew{#f4+FxT`1W9XWm8*4rK< zn-9Zt;|a84NVaO#<9ovo-wo{)?$iMQgaQ0P&Oaq4--yWn&^?eO$L^{pHzavkjZbTZ z3JTd>%2z-Iy+`kpcpVVWI>S}{H~?F7f59kHQ%L*5X`Scd0T*6uN=8w7Zgol2aR&31 znGLSra8700H#P(36S|8)_51&D)X;E^m;Y7B+#wAN;#<+e;8d(E5P@ye(Sn~$roIeE zS#3HGbhYRtN$B!KG1@2aoPm%*j0 zLCOf^)(T8tp(FE5mFg-vGGQQ4kvq*mb{_xMU9Pn?ov<0HqcJnX7X!f{+jYFzC)dT( z$OgHEZ?5}P-4++|t%}QtOc*FFecCo4rc$fAW`e2XJ7a(>m2on8h1Ln}$v&77MsS&f zdyePq-`~aV_j2-(FWSW60QJdzOj&b@6_X)avE-Ku%zC77Ae?TtpKm0yrcj zNDPvpAn)wX`=89|-w&9TCj2SWQ?u@p8Z8(8WR*k)(8ROuqT8yfIti!QbJsh z!rp>xLdZmH71SLxNdNj6Zg{l*cj_M{gEwFk|K zaRv%E0yb?ufXciP&o#RQS+#Rse~`1J!bBZRYcJv<;hyma2Rs0NhwgFLSnBR-9I<^= zEZ}+n$!NeOp?-0owmZr@V8k_Tk9#(bbqa%lD6L#jhNEdUET^N#_6i1n^IhO(uz|SNKsJJj@*zJYJ6{L-*Im zLGtdjFQ^p&0isFf6ZX!^bM=k%(&~CuyWZhMr|N-h!zS>%jJ$?zIlHEhzIMFJ?Z#N&=(=*B%{IyX%FJfdb|A} zEe0{_RzEC@eBVuo&evN1z+?`W0-z|ecF$*ngh~S(=PF~)e_RA_I$IJ~b*Aahgzy5(B(UK8;s~jO|`bdzQL2ko0W%<`p zwZ}D#B5skMwcqkgj5~U3CBW$u|BC*lZS5u2j{<_zBzyemwcyquV@2=jvX9gE~SN7d+ z>F&?nO-<_VSoq&|;=jGW|5`BicJ#l9z#ek{izx3M<3A#>hunVzV{h|+5rIAA{ufc+ zJH~%RU=O+f2*%##{~`i=$o(&(ymyTMh`=6l{}GJ6&HqIN_K^EuM0xKR{}F*beNx`yWpQ@681NFNFPTkFht%{k78ktA_0%_pd7Z*ZQ@G++QorziQYXa{sEb zf3078$o;j_{HuoTA@{E;``7xlhumK)&A)2c9&-PxvVW~#d&vE@()_E2?IHKCD*M;^ zwTIkaE6u-Z*dB8Ks?wbJ~nhV3EuuPXc3`n8ALUn|YOYS((A}f3G(GsAYS|{iDMEy>9Ix_xEb^ zk6N~e+&?Pp-|N=@FLDC^uj@ku^}pZs0RZp-x^=g$1T(oW2_e(1f8;|0twO-VvsPAfp1W4 zHc+7%17^fx06dZM>Ms59S(Al}N-Wi2yap&mWTcPaZ_OPLfe^$!9F%F;ZE%*cU!lMbkFmhGv#{MMdbA*sNFI0oT+#i@=7ZP#&yDQfXRG6xcbuy7dF<}rXjW1 zU_7jvdzH!jUAr^LWF9D9Ofy*wTu+NnfKKwk$h$opMRq_o2GF=p8oDO zFc3l=arp%WfiqaLkU(4O3Dav{G<+(Q7V+WIK%sK%a_)x6F52P{lc#%efV}PW+7W~~U03uR8#dePY7!o5G!VkP-fItC) za0Y?zg#PsYDw!A1XpJJWr6f6)TCr_f!}sRm*swt|k{>31Dk3tHc$+wPvDgZ{=Fy1T zAAO^koEjVSr3rKU{^h0m3(wyAipuYMwN9;3KUs6V_jrkqY!hZD#2F- zxyDpZ4tQWtlmL`iamdHT4%m5gnp)WDbnwDKJ&Smni4m5=0zxl|k&7|$CPCBrgl#T$ zqwFHrxlB_lA(iQJSOHuC**{tGjCmTD6rZCGiBV@DwG0^;mL-6quy|OX1R!QKS6kW+ zXhan$g4K$!*=zT?SRJnO$sRQQvWzXwJ$cIY;UTq4^~o%W48fe@JXAl*vPMoQ^5Xq_ z(YGtXP=oZu^BUd9-47gqz0)wMGOt_;xyjly*<&HHT+bo2pQkg|u!5^vh?ag!_iL=m zbl9WC6gWHw{#7Nh?hypfH?FUcSE}yKVoFPeu&LmvkRn$C*au3FneWTG|2;xQdn&&0 zj$-O7-qLErb-_@??l}OUITEDs?)z8&`N8IUd`Ge>{j$WkwENX8*GP4NO*pSKK*({xvf8UYeEhSu zD)vvhoH;AoIZKmMxtGWZRVcATYGY0)C0xp9SYx|WNA z03T&z4^fu(2%WBH+Y$5P3hnajYP~wncU^e6<+5Y-K)f<(i7y=qz92?YwT4 zb}3UN1b#QYTcT5AmAP~5!kgQllr=GVJ#o0>qOKAn#!gor+<&q(tSK>j=@dd8TSssw ztmww&a+Ow|2B8mi<8wsn{VG7%KoAoAQH6x&J4pd#>>%WFN*ds$%uZM4OXzx}S=GsH zCKZxv;rHjdDhL?ijI7V*UEJ{O32*Y9yDMz1V*1QCpe!+$uKCaytbD>im)R#%@ucEh8U%t)rKXg)2(Th)gQbVBPmx^&q2s*in zXH({0HJ9CGyLkTF76~JzGl7m{`}?txc}m=Kpezg^lDX#h)uadb4lX=Q{ zMwB@hnD6--X@TU=IURf*Ra9TT61vT_mUQ<7Ihre7V9Pgg&?~M=0^HGfFaWCu7{Zc} zwYJ1oyd29fJ3u;E7NrO|9d13r8*@~ld=k-pS{65xj!c$K%k0Ln^|%b`o83>%cQ-74 z_;^Zv2D$~Q)u#$iPj!8Tv)K9GlTw9i>H6LIVtO#c(p`P`wt{(4t#);(@K_?lLs?xOY}6XJb3paZ zz`*t~S0VZ1%+Oc_c6THNfXj{%7o%yg$4Ei$e3edb5O^q+a%Z^zW%)kveU9Zo4z~?l zeKgp@EB6m_$XG9gxy{);53+}Gc>Gz6KQdlLKgD;Qc1}XpzD$2o$R|b|)P(k>;$x zutl5Q6+Ag{^KN-j_VQ>Xi0!S$V z6W-o3i-_cMqZM0imJT>h+e=waSkym^qp|@dSFW2f2>9a!vO)Xg1+Q$+kL8?$Hya2r z_G7|FOOVq8v7*PSm19%8{Ey$djW4Y=uv>j4m04`3Y$H`Y(sN$DE&Gst)QF2`NBnM! z`7STp8wBPLcjmDD9T4;9eX9rF3Nvv9r*GyT^{IT*ZJUWvkPzQizWvGX-qbl5u|zES z+W8BM?C*@hafgL&So-$4HGX{8WcL0^8DFpjrYlg26{12~M88tYiSx@_8Q`G4kP+)o z@n?u#0RA6q9O5s>9rR_Ku2={uXg9BOj!MQ!_r@AeZXy&Q)6D|{a4Xy`M3-dGs>YL%Y`Dnj;HGE2G?3f9_d1Q`jxuSwjy%ENefcbbMLz;3TNF%Ai4N@Nver5zi+W&pm1(IUaVp*?)7Y2OsjJ7; zGc(2^m|2YqgmYjY<>-m(Xp0&2LQn@zbj#gF!*@ee>ghR<676DKG~uI36q6Yl;3<9P z^iU*Xczl4Lr>U+FJFT5-ZS;m=r${rM7^mVY1O0nsFMf)Ny#4&@5EhGA{_dK2dsc#O z$uE~Vb`7g)~Y4p5j@*#!4} zE}DB$^pzbUo<71+#U{b?>I?2GX`cN}g-hN})~Vm@72aKqWb~f>P}!=3$`fD%T~fbM zcjUg3nyT6YvtQdSRh}tctt9(76y1{ecnc`J*ix_4EXfSHQhO$#)A&Zt@fe>Rby{#< z%l?d zF1~QcWB0!3&xZpwvf^!09pP@nE%zV@5`oBUNTw4J<$8Q?4l}G9uZu`rk0^tg^MY2$1hJ|4vB8j?!l z=QyJq%kPZVpFQI3M?R^)B0nb71+l)~$Kwiacy-9IA}>p;2aZ9140v`_YMJwv1uN#h zC4iy&l(tD-@19c(;x$n&>sJho5hdnvFW&((bv+BlB+ypR8HB z_dmA}T&VB8HDa#y=;-l`;Ai(Det14>>fr@Aj%R8Atlj)#PuKtjrQXNxK62i_nU?Ek z+q||Avh1mpK|1w>$sB1z#E8FeP;iS@=1i}MthvyP{!O4FFnoF)22?MRE9bwo7Y!!o z$~b&%<28+p$>e_!2#OZD!)GlRyht-4uoHS)82|~}npT=6YTXmGp%|w>@FM@k_O)9k zj7twFy~ihY8mq$wE{`J*m}w>|M`vlA3RnTlamxl`1PZHkDht0oo@y~MVmIMb7|UDW zFK+{ET(@EzM06e{#Y>$F$@VIGc~rP}^Ao!CVwuvLfbFh(cW-6gj@fd~;Yz+$5^h;B zPRv0H**uLpKrg-?l{Ce?t=oS(_?A60R?Y|Hv9M?m)jYo=86w*MsEWN3^`Dj9vV9u`%nL>+LXHn9dM1TVU7QosYhZYgO3~5T-Ow%nI zJl%J3;;e-6D_6A_nQ=EWRZ^E^!l-v{>rI?LcDhf&0CY!-ua{=St0St!=Nq8Albf6S zHf-yYhnKvXs=l_kt!gOO;u5$ovGkP%d+39mOMa*Wmteb-ILzPfTD9k%eeeo8bU!-4 zedGtYE7VLv{-FZwr02Z;gCxZ)t|C5hk*oDMQZ^?|Ie&4JsgrQb|MAgwm~ODn<@h4qrk{stDkdI%RCUK=>%CKF&kVldz3d z#IRa}W!pR&25#GQ47Lu+Xvr`(egFoBZv25uCTCF@s$t87e#mznj<*rmK&fZ6{K{Fw zeL!obrp{T#^2F{CdwV{PMs;gqyuI3+-806xHlrU&NGnNDJ^qS}I-nyvbbaj%N4y znfT6W@cGx1%R;Qj-!ABWVDPQ+z4`q}quD0EvQ=Kq&3UWH_==Csv-cPb>P$2qfQ&)Y zVt^<)5d`#&emOc8b}S1*b)462=%Ov;45w>hp)_%e*Z#Gb(jL$f@^m;qgs%?o)97}Gumh8fh zMOdu|#OqG2bReK=WKOrypy4V8464 z6LqlQr?%1I2DdvGC?ZzG6hDM;D)s+PDgA5ftW}CTZ;F424(NqUy%d~{cUlSl!oK)H z#*f9J7}IwGx%7iwz)Cz&g<5V$WC(TpSdlmwxe0wk|Tn2DZ`?P)|`w&zUR5 z>Mx#2%`FdPd3_s3sn^^f$;*F)9M!?&d`MxP?7Riol$5DRzK~oBX@E2f6=GBlKjY-Y zhvWT5eA1n!`!v7g?~6M8n=eJcLrRJzrN(F5i?syI*C1AWy*x(DBu15UZMZPrAN#TK zZZ5a+nQqCgYDaO+F&i;Pq}#|->(2WHp=S=JnVn}JGXSAFp!qAlHhO8^ZjdG$Nw`ir zn`=qKcdl1wQa^PxRrsa24N&^e*@%bMw%$K+4uvGaC|_xx2A{0H6IZ6xSebn|_oOnv zP}jxx@COG`Smzi|bXXU)w(B5eNIN^Z|98^aPcoKfO#nV92Yv1 zXijnKI9Qk>ncgWGy$x@KL(!o>9@R{egHtdb^(oK$3s9Byq4tj#!Gka-cpoD7n z+-_oIR+h_XSZp#-tb;%H&fteQzAmMmX3{bkH2#Qx)cAPdH}Px6m%m@!0?$X?IUfG* zrOe{3sK5)Zp=y_>6CBDtSgLrbS$+GJ;5J{IziDiScg?Lz>m(5BIyn6`I3+mhm10MW zL#>~hhxw%U3q{LO!a^;)Kz0%|=Yc~!F8=dGNnWVwWN0-l-O_XA1FCUW06u4@T zJk^Q^5CE&Vcm>Bn3VO#IR;?CLk;&ngsL^*;Ix!ciAv^e{?=f5Lu}1Xkd9|}{3b~5Y zqJ3YPUz;}PRHIdL7MrKmGiAP;eaXrBSnhdMd2!17eaO488j;@=VQKG7ZPN% zm3|QG+GKE^NzSDfOI+SGlR=y!nKAQ!wo)cZ7=>dQAmS)0e3WOlPD6m)%13s9 z7s~xXPCWK|yyalW!^@o(a;A8)>0J?!(n0Q(^)$U=PXe`IoGX<|Y4+g{ciPB{?u-;1 zGytgj&yfgLI*bpgO~^uSBxdXbt7h=q1Jh@fVdp$fM}e`P@@y6klva+{lif*37+krI z$DW_zDuX&ccz}`-#|lR$wHY{E7=^MS^&P2fSizqlqp7G~uUq#29|>pS(A4`i@Vha_ zfB~aNj~+cbh0%?42*T(TX#|7O-8Dj`TO}1lVRTEQq9~1kD1sQM?B)A=?|*Qg`?=>i z&pDs-q>Z|SaSK69?mvI0_L%0&N~+{{)R=ZjCC|JCYdZQF^MRMqsPHEXO0@^i4xWVa zu=(lS7(wK?AqvGxH=Y^k>|!EawLJWPi5`(i>r?pidq<{9{x$tp?{^H}>VEv^)a4B? zMQ>!d#!6YP^{|69m)A}S)knN3Mk*y=5?x47!?8No{*4?3Mq@K48lO#lSoNFC_tCM|%Vg@Om9lj02$o~r2%%D}~?(hlqs zDxdL^3Vpaa=?a}nyyR@l^nX_Y@qj6d=zRe0=3w};FGP>TDAMD&93?DxX#6TaA zVM$CuqLiCw7yC@UabJt4x7!Dj^ss83g{Lb7V-G6vlf5T_gk&J)-#B4Kt^|b3Ar`<0Fx;?40#}1!KoH^|{gZK5~)A&6(e7#m;1{qG}lGUK;k8r|#CU zRVoJ%0U(`3y=`gDxFW}I3+)}2PO{SoaB+OWShEv&HM>diWs}H^YR>SpGe$bnZW|@_ za^j{185}#0gr#W8n>hF1c^y%iN>@W&MTUbeM=b#*`Cv+^t+pl8iASXeM_I zhI44$%3f_|oLoMHFr&Lgk!Q-3pePRCDqG!c~`gAn(N;r?B6!S+5Gj9vLZ7Vlw1 zP&G4{ge684QP7rPE*4eOGZO?6dK@FM)f8_ABwIc5~Tk9GgbskBQQ_hcwj zDzzqQe*FiE)46SKo63(k*G2^AHK295=JqCS@@n3cM~*eP4=!$l_Zz;u@HI=y%|Q4! z(2IAjV)PrkYQ{chlwT-3?fV=gyx2qFCkEuMolwov5U*JBHM2$w2Sqj(@EAiSGnXUJ9H}> z{{Y&AMJJJ5OFj$-DS7Ma<2A|lZXb}}?ls)mEC2i`=8$)U<)^*Du zo`YiiZ(F-VFs8-WbHdjh4;DlT6}kIWzfhm0gRm7TE>0mjEy2jEX9Vv`SLvt_aPeer z4Q5KEE$!1KLGnAzbYQx&@ucgOg-%9r-lic%ozK*Cu~Wokfjf$vhysr)p>-v1KJoVJ zY2Tt%4+RZcnV>ayzEgF%-zd6qcNAB2YtpvrN8rtlV=A@>9d*NXaU)B5dLd_>%yma- z{vRF)Q1@dBdk{rq&40)#CXMWym{&X84l?p(>*h*SX9<_qz2SN^pj#s}j(=iklw9&j zngQK`Rk<$TA*GJfnAKZS+q8T@#fx*y(t;`dkhe05heXdFNG|c5>-acvN7zSHgiE~p zdS&UKd3$7Uskq{C8@KQM4%bId=pS5uVnn3&V5QiT$6eTWMISnRel^<(-Bc9i7|hv3 z@;q#VQbh~yU;K;trbwAQih;3+?*1OvtNDtId7h@<_F>*MU?fFOoh*J1c7q7mG&olR zC^|+-CPz@{bWZ1R8VkU(Gz6B!>lEdOFF;jRN<2V)+>;sG^_cMcskxga#&uiJh)1TwRF=D0 ze9lj71PcK4e@6y8oc=@3KFJenFn4Hg;%3oExq@nZuzZ(URnm8Fz@WO`q=0(^&8YBu zoFI`Rjm!z+CAa0>RCUU5{5A_6bN zS7r6zzx^9%^~B1?^6jG-K(Ph$#XdxQB~1e~9g&3a>G9^JhrJe|nPIb{fPKk`gR3qw zd91Ig>kN!7v<{`l6g#$HfH9Z?bYMKg!SY1XqJnBz&0IluNg&i$hs&H*x-#$FT@C+!$gupAZXlah zM|tAlKBfP&6YQNG9c67>``OZ;C0n<0OOKjlqhGG(k@Ng{v{?EwN>;!@DRJI)0c07Z zWFRQ#)AHq68tKbhii}NF`??T}xVpIz!sP-KAWlB zUKF>YIhM*PhO@z6fq!wbbUu0TXC`(?e=}s&JukW4CiaMC?EC0}b*3~a6KuQ^M(|Bd7 zSL4G^<36$(m-Di!;y>gPpd(S*)5fL7CpNI2oGZeewpaL3k~{RV2355g->EioJ_&i% z)%nHIdYiQP{z7?gFu=eD$(PwKKLXfd(_W;8Y_Uwrf^$14DXM9PPpK&u4RYs!7o4aE zRQQ*X3};0-NvHr~`70U~Q30`Em2nU|u+O;b_mFTt@-LPm75A?O2f3d7YfBtHkUb-x z;KkX$H%%26iyN>TcH8lI+4QQiA$T@U!eLCfpN(cGwhX%R3;bo$F|M3WZq?u zu)knSEez4s_4Dzdg@9cl6R2nOZ`UoA9u=9YV=(T;)V> zK1fUdZX$E~Ntcb5|MtDm>(6_RHZ0-)BKGY1KhF%|v0JIMpkV+MoB)D#+`p`q=f_yc zov)Lpl{gU~FqAi^-j~Sko}5xWIV+?NiyP5ACu0zFDwqlX1(z|O8`O%|1kqp<ldOevJj@snT<0fS1T#ZJ)dx{wkrr&}Fi zS2YDEsk`xb{1v)wg?C3!Eq9R%EQ8urR%U#hwK!^nHZCK@Z~BG22>s3=`hH$o3Y{U8 z1^B6*c;mdTTo3Rf_OZRa5pABK&n5uvj2EgAYM}-IXRvo)?pOW(S3~SWtxv+(JEQ2t zZv~ms4?O?+r&Gs?ce~6<{6zo3p2JP$RfmUL528pHDds$xNG<}2xj3+YlE>~oZYTE= zK4hIiTze9jj5>bNNp35f?()A2g0&@Ofa7Ll(Dv(?ZbOrSEHg`kT}F5%YT3-R_0E7X zyh7(yn&rrCS*F|4%+&}M3|=lZZm_n2`c}GqbwV10sGwZu+zl6^d&;^OZdg;?IW@w- zi*sVizz1z7$RY`5i-&T_5p~(Kb*vHFa2xau-jdR>WP)ggW#XU;T1Qf@i?QV0-POSo zMRagsi+#FBfgx|YIr9o)Tjq@1Uz)NwT-jK%?&iD5K!%?peIqNkMA#2Ca;A#dfefs| zwIc=V!Vmir(Y~Rlsv5Qe+jjL>!1bSIVZ4$0QaPtbLSRf|T59T!-w$4@<)rO3PO&2~ zp~qRq>7R0f#OP*i*Bo2jyg69cW=rr}%WE7L+cYW(>4&K21)lI{TQNN5fI4MeFD1SM z1m-t*SE2SllcWl|r)p@@(L3NH~N~Z5QI2fk##rGQ<1h|GVeQ&RXWf8Lq5@EcI^Peu{C!0jUv(6@MIr zGl%9vvDp7~xvF@*uV$~_Js-m9CpG2@?i7`=DXL^0iW`d5?pBnuHDM(lk~f$(CVB-V3>SIG%9ydq+jnP16ib6&EL_PhGpuC(cMflf<^4f!Omy>M|t6yY1u|B!afm9NIslV)np?gI(B8jU}j!Y*4&G2hYmnz}FJo3?3_Hxk8u z9f>I!ndhqbmYz62l%#Hr`$ewDA&TK8Pq=_^%erS6grd*~eGatZbOsxQ)(YUJxT%ql zy=ImXZjr96QB_dfx#z(xBLhX=sXV=v?Jcq8qCTq%CzI=2MZpNmVq*m;kNGbE!E5WG5Ni9rc7O_gN@FZmasTES3U zrE9qCfBR}Jg+805q9r#vhao1E@?`d}0whlTbjnwYctu^v3ir6hM^02SLQN z^XXbj#Sb`caa8k%3;B42V%}AeUM!#=so6%u)3EHmIX%X8eS{)u0-1mI40)sO z72z9ix2upHVz<45mer#6i>9p>7LA+U_bV%MUY8J%YLB0vOi!G}(m zaT+aWd#>MJvt{>Q+sd?{g=In1MyW#0@}X7;|jv=3}$$P@+2`($L$&cKiCz7y2KY^Wz`Z5w^rW z#$5P(fDD@CmuKvr^Kx$Ss9q-&U?XayQc)X3Wl`)Ke@k(sJ;W#B{uFeOGx;C z$dyxg^BB*amYN(J>86gWxy_X+%U|kpUk7+|g+-uO(3sBddAv3?1Ria~PL9-px|g%% zC05TZ(xjP`GtlER)zqc6G$(TO1@MEEiVF%R2i*f11x;)b6FP(ep%xtZMh`ww3#n_p8nj%<)L74zj> zwB>)ud8nLf^YO;UGFC2d5M_BQ5`p1u6%I}1v5#!FZLdW*L2UP{9@y{4wW5d9(~CdB z;aPSH?GNj6o~3^Q6AVLX28a;x?8lhgDj2i565bj2eqPXtEo>_2zb}%7A8r?8pc2q7%!p-8 z@bOV+o{9$uTx4Vo2h?<$FBgJ-=?aT7(1#Tp+r@6@#Bhpa(PSJ>fulHxIcr+7E!8cwR1 zEH56F#u;)ej`ni4Vt&cMzU6M>R>;?jJ}Us|wUw&?WTaiUSIkb8cxb`%^5*|5%auWQ z%S_GPquftSyp$`iBnNVUlr?BQztW>0dJ(@rq#Q;KvBaAA(8#M8ylKggria5`N}n4H z>F4+eSyT=-?LO9_-s3gjjU$OR0CJC1jp)mx6x2i>Y&2;m;g{WGD}7&x4gzsk6CGah ztPiWwwEU~m#Zy@Psz>SN1&=1A^vT6}!W2`##W2Q2l*3@w2?^WjG|nZ;-b!{b?P0Pr zy1>k$vHXWV!8s;;l_uk|S`4my^xp?0q>Rb_Zt_>lpix=hqZYJgejZ568j5$zKYD4= zYEt0g*{;)H^?oU3RvvTsS36|6bofksHu>6cQ~&_FU=P&O}ReMcS#DqIDh6#L)aE{?h>Y97B_A3s#VJj zxKDC3dk5Srj%V~2FSP&ItxOw<|UlODrc(VHV* z_ke6%yY9`iflcz|`PReHER22GGLS`QBVvap%J=aT_LpLJMy`*}`$)S)l=RiabS4Dk z1mqPxePL_$WwcH2#Jt}|)G=%@6TxI-^ zcV=coQA12-$-gTk^tRbuRn;;z*kiBocmeVKshDl(k^SYsRZwsd-((@vF7wxg5qb9F z-qSDSVTghBN^XW9G9Q$4hKg3J2YuxWq0F%N6_47_lRr0ktZm56rfXY@2u4Q~ds5!@ zWpp2Tv#2&Y9pZC?0JSI&csTO@z@~BB(qa&VzQg)_F+fh_OUbyYb>f1Q!wq8w%QF?3 z8KwCLz7{kn-_bOoDgk;m2=*A=YLod%^SuWaSB2^O91CaAm3^Id=ID1+Aln2Td{(lk z}%rGi=OY#of zxAwhs2rPv<@aj+WLfpQLeo4ddPUN9cgO`~4BIdNs=&ZiUdm3wYC?B-KT-Ty?3YUl$ zrlxjn`FEOBm0LEGS?4$Xb8TF3Fh}^K<+~13 z5&4#KU3%li#=(wzn!EyjzCZ2*fu%aCxa6d}0FfD(*3u%e69EHNR{)E`7^vZymaHHJ z+THGNWQqiTZLa>xVSRyZkoni9pUcM_{oT)0(Cvv`mgC#xqOuwQi~}e>eG`hD^cGuf z)c)xBka5N|4=>HI==u%Hqg2hrGY<1VSRs+ZL#~tl(rw2L0rLtR;-RG9yz#%m>RMyc1?yFe%v}*4Bx$ zY?eQI0AmJ=dMj=`eA%|tn9-mg(5kGT!_^y1#yuL!N#+{S%L?b~m#_~g<$d7MoHKu=+&K`cSO`{=%twrQm^VTP(u5jh5;gZ|OlKzCx+`0XDwLg=~Ux;I-7Jrx~b#1IuixruX@+M4YYt z+nA}rDR82{0X;j&$1}h|I$6(|A+RF#vi_*TE-o|l#QOZk>gJCn!-Qw?IapBt@8a(> zAN)YK|C~?1xwqm+m$+n-xR{8bKxp2+7|slob0m?h!u!vYW4Ru%(v%|Q7F9{4lXk5o zcF}jHvoRM3xgjgnKIJ^ccg^6ehL;K3Wyb)ht&=b;VQNWxL8}=@363D-j4!G?EfTbw zEXWNi*Opx*1zr&H_7vIpM|8y8hO6T`UvLjjCimZz^5Z8sgB{GoDG)dF$bNly>QQRx z>`yjOO1Aax(@|S+e)-xv{kzf&9YTN2OtSCm;kn`*ZMNL$Gj82hsdrxLskO^ESOZ}y z>KT&HrlC}?vctuo(@d00o~`uMeSf&Em_4-3V-Wj;Gj|{$mpM{V=Mw`kkGzEnK-ilf zD;-7E>#)d#%j`MSt4tTcL*De>9{7ZXt&*7oJj>5C3iN-F)v9Y>;o(B%*DiHGx!GTQ zHUD+~)8mT^Ql)z~-*;W>0KX{uOQ~H`fYW*HOH`|-JGa+>;dbi%InyB%Bvph#&cH;+YN|~qSfya5p&vt?P==WSQ z&2;o}kKl9CpHv)P=ZG69lse69fuAj7t^r(~_An(>@7n>(4tDJvSF#lyP1AL)RhQL2KH^obK@ZZhKf6^$sw0z2?Hl z>>Ajy-TPe;W=RMYa>57m(BU%_h%)5cQkvfPRL#D2;xr@3!~0VYL=BE>+Hl9hOZalx z+;LOeJfx4LF9^ncH7WrprT9P!78Ut&V;SK$!)zI>9w(Nm@Tl~oXByJ-W3!8PJy*{= zF(J~=^M#wCCb-&M-JFvodWna5ux3{`9Q)#h07d?0E2JS{RRdYFLpX0^ft8G6_Cr_MMn z3WzQhh`KAkMjC|Hq>5wLe(>7qtR0)nc=FVUAKpzDUOWf07las@R#oV&RIqYXy|}r^ zg>mZU^-y>!HuNcaam!*ne9`q;i`^`{eYqkM&mLNlVCu&`F&~7CFTCL~^mL6|^_ySo z6#|`Tpd9l*jxf8SjK>e{6sf-cD+$=9RwX?lk(Omp<_PSN`7thAyYZ$c8~SMDy^#*V zp0~lc@S^};i5iz8%w+pvHvHKx*>87&wDX%&n}L3n3Ys^)hSRBOm@z-wRdkFs&h!Zj z6lntSZ*KTq4#xsaazPa^98$(LSS?sXE@(r|^%pIKB33i_X;Nh(ksj|R9gEs8N0j6f zEAtY`bq&bLC@mh1v>aDGmO6a?LW{T}DfBzvEE7o{n}FJxl)Hk!n$IbH%C$l7K!+{8>@b_Us+>7}TD%+kXoftNpX?Wug;j7vkPhBN@M_)hS` zuST3f=lZ+Nw3?Apv5KMT9Bpe+L)sNE)SB~oYn3L;&Pbe@u-l4}fq~T+SUYuf`82J) zVYqL^U}|#HWM16Md~W@)lMZfM_D+07<8Jxs@tF1g<%>daz`z`nNNhTbbLPdj`-}g` zzx2L;=P+JQ+4sZ^S{WN8*O1Eo`;q2@gN$a`BhuM0<&m~tr;yciy3{rs8cN>EdJ)CQ z*FA#+o8|xnMubBEye%)8I{=)@xcJBlW1nEGfgvc086!r+hzt?KG!TaWL#`DpY-wcN z+q-CKDjfBK{6L-iikKK(sNsMJL+x<}a}XbqQf;FC)RR&dqy@Z<*RIt3X3rhBy#2Q> z@sAD$r8i6;Fi?kKNYG)!AYl`gq2&4|D7cOl4H)jHt?*F^?!vBE@vF0NUihv{*cEQZ zKvYwmu8fmY z%KmS^)K9AO;v%{v({twE?Uez5LKhhO%r$HX(k{`7tG7!ScM&U0bRZ=WYrbC8e0<<8 z#Mt%ZIq_|OfT@%rogmKzxXb>?j+q}$dtc|{pAk#uXK#IXKjXvhm1cE-U=RX5Wo5^= z5u_zpIvztq00E83=1c6}X|V*X5T7|AJleh2FnvIe6TaB!2uZH}E)~7Mmbz1Ly}@zR zb$-0Hm58;16q!7iR;VKEG+>EyD0M1Iz}Rb2hEQ&4AR~QTpyoSMST-cKJfHLtvco`W zTP*688g8&!7U42^OB_*?;d5u5a{3mWIAS7@GdK+?mmU*l(RA1FnN)bPc5?bi1%*3xn}Z;SuEiM~uaF^;cARNo(UL0dCz-nhNK z!5qQN<4*T5{Z7uy_gyZp*)x?-E`p5f5)^h2!t+5rhx2%ZIN1Z3rCu>Ct z1k8_?cEEGx zbe$Jd&Hb0^~0?TNfI@9x*H%OH zYJYq39y#$;iV0th^c`S83gVVK8%*9_M3ksW-M{Xyr;)WDPHB}i(dEO`ZcaK7e4Xb_ z5_sPK4+B5|VHTibU5y+Zl?bSm!?~2>F;Ym@_}{Sxj>uG^Yi_qAVU(3Do{@H%QGl3( zLnQLWrpAG)L!8@>Q9>if4a{KYi8P%o%r>>9KdOP6FzK5BF)nAIMy_0mD~qe3X22Y9 zN!yoWS`GOqWY*V1ri9WyLdzd_9S9&$uPCHiChxFu@wktx<=pMl(s2i+Y_LX{CvSsXYN(HT1iqXOGHXDL+cpdP(%JICZ zNzk`VcuPax;3TS^UvC_SwtZ7ymiZ8ZrtZSh30MLIz~C!%rf$%MVVB6N&$Sz)x5MAO zdq1+LwVuQP^URHNhnmN+OPDC}~S3F>{t^Rz{hi?uFl` zjKbvZKObS#Bq|b8z%LZ#S^%5@gR5)7e4K^l$RPMg=YP{S;ncshjs8O}NPjO1D=&fO zl@R8866rg^!7YfLR=|gMk3T<@`57ZjnX9OVg6cghg@mWHCgMic9^FqZTN{ixXlGHp zysqM|wbHOQ57pJI*C{xlM%evNN#a~}h)G?4KH(4g@Kaxx$3pB&_fAO~OTo#qL!BC# zW*KrsMKbB&ch&f-bI5gE1vvqTjg18|N_GT;S|`bXAmR&+>DQ?8DWX7z4DGZh1N^hA zS=QSOdSeqSjtp8VlU{npRPthj6muAeOFzIIibUq7t|x8f%Z&51LD%f zndn)_7s*UogLJT51g$u>N3VI>xd{R#gzWg_Vv}nCC%Nno8+T8>3aEy282-sU%5x=V z@0|*i&PmZnD3T5D7=`9SC<$!f(1&xbhniE54Fib?>}@gzsvC31Qwb}D5ja;ZSC+}K zDs#(zUrqo}mXp(rmnm>sTk zIoH<)(`4k(Zd-TdhEvd)kfBWM$SgG}G8kCl!BFd^7BWqdT!^b52;YrhkrmpOyOV<< z3-%Itl{RapE-{%9%iKMPD^CUVCS*H_B$iL!-`nLlsRI zc@xBOUl6z>_sfSNlPX2+$EO6|c+}|<`i`5sW_(^xX9P?xoF8vlJu5E*_+=0$h_+i< zKZT{~SATT3>i|c_sv}b@@bX1{qtOqknFKtS)F>RnG&E$Mg&ACEugyf?5WLbY?LPH2 zGI!d?AyhNhIsLG4+eIB+WFBAtOOn zreS5o%6tZzTVM@1w6ysS8YjQT7k|Mgs^%s)T|5l$tQ{K!JbmZaj5E~8m74ofM@`Bs z^)R$P0ut2m{FQ!;AZCBoY1s5uQr%V+kWU6lf4hM(W_j7Z`|`1uxxLdBt&WO&UOjho zsA$RAHKI$D>?u3_i?}XTjp@aN%PlKHz3!Gl<8?praKPZP%dAu5>|YI%wNnFwt#zBr zvxEMD0sFRFUp{_VCKSvbY@J+O!L1Z4i_5lmI`jp2S=k0lO@po}XbN)Qa5?asyWw@+ zWxV#t6G|fK{9zMJK1cw-KpY^4f@Cn_iCi3YU@SOW55~aeLAZhN!7-D?CYvKL?>*d= z)28jol%L>L{32dkG=rh0wj84m5dR^^L-9J=WUBf7+X#I3AKk9w6g8n^jB~FAy1noCFwl)8wtnYbO64+93c1d2xWJD+ z=<#EiTC)B11y{MP$>bO`j9=#2CpjqGqmJY}%zmNKXZ5YEx|pkVqmEL&DW$=s?9PNL zy-oMX*Hf$GUDfmQHIupzzbC1ALTW7Mv}moVa(gYJ%vN7CxgnC`{pTCcqkXT8FIC9~ z{=pfA0JOg}UFSrK#9eqDqg|@sC->z?T-5LXys=zlRQ}QXWCbVu$6ww8uoIPq#d}fb zaGsrb1h=Np?jQ@EdSR+?O}QX7;+8fWejdR<&8(C-P|HJQjRC$ccgS|>| zLEShfT&rdk2mjd8CXY$v?qBP{TImLgL}x)H4HEo$^C`tietS;CX{j1v>r>Y-zvf_d zI2xfd()>zr>(o{erKf5!GS?ws|3pEZR_n9uB16D9lk>f_ zfyKj*q}k{PopL-Gm0P<%Nn2Zy4^hb08Z)|q)1qB^IvWT;b~2ZWXQbC>te(XO>8JrN zyLxOdpSUwp7YwZAtK;G90vM#+f5y4UBH@}z&vVa+OFdsOxb4iHOeifcD;N9~% zsYeasPLY%ii#f!&c)2*uA#*I#n51m38gZnW9BQJjtZ(#1X@?DAE`s3 zbR9%g@zrZNHjN2Sqsz|RN=Fp}ZAe`{w3j25MDIV158v7($cr?+Usn2ll`Kw-s*}#4 z&i{hVR%1LMTaYr{<=w094)f-pBoe=fC8FHYf{rCAfkZl`NWmuY0x#R+Ul*_w>Km1B z>6ReyC}PEsqueS(ITe4_r3BqGQ% zCY&fgO;7(7&HJMYF^?c1tqk27UenGGixi~|wL=h3ifFjJvj0*Yup0WpKrAfSU+R)# z@A{1E*Gtl)bQ=1)0;;pm(w@3KIXW7<;VGGJKG_S>m^6)aw)2@jz2V+qBKcH;4xch4W&m z<49P+VIbtLI{499+}+2cU;jgnDO>NEu>sk;K{tzrs0g*{aW+aeBweT{rCe6^NJe{_ z8ge0YC-(JdmTe{uRbYk5T}1KA5!>mtJ2`=P0;9!HEjTYZ!35tj2izw_7t&|wdj~)5 z##bID<}68GA65Gu%kENCx^n4t4GPIVl8kqH*On-zIUgTq;7s7`+;gHg6xf6h+%AT& zm?H>QELE2E(bfy4QUm2dV7y+35{K3dL?c!#-(nM^r^L#<+#|95zHf#6zDrL#jD+fLcjPx`}(d3s>ZOd{>LRZioj%MvB7T?5OiP|0;*kbpKh z#!)&fC_kf;4YNQw#FK17{Y=q2XAVMd&YNl^WWvLy@FtjfBbFZ9(3bPHzNpp3V!+jU zF=tRtlV4t3X2t#IYaMNVc1_VVe%Dxr*mOroPgPS@ADsUB!cRDr+k~4X<;|HV%r+h- zr7tA9pOknucdAaYdhv4jBvHYiOu1bXl=P4+s~WjpwEos*KPR|B6r{< zvSdutj^8j$KPzA6ZI7=7%JoXX-`fk;pJZD7XNMn1={^qsIV94kwA09V;Fet~h^O7S z^*r;#li@m@Mt;(#qeTcrpdJHb#|($dPf4ixKg1+t0O`BeRd%n4j=Cq0GD3v}X}w@% zqi6{KIc4#HId;Wu$TDI?DDd8Y$Z^3(d5m=#d)<$(ZZ&L5(MfViE3=z`4uT&=A%19odSs4;vkv(aGVw!t9$;p3AbjRm+s4&y~}g0{bAk$a&2- z{ZqKNNT}qk>!Yg=q;K2*&AS>=1NnpTxvuuykUvT`s#b}ncubj13{tRDJFg+Dz81Y! zD4jV@!7G_XbZu{n~#@y09q%0(q?z z+-}=t7=l z;A6GN`g8;4nYHJK#a~>+GH2grt|YOmW@~!cP!$<*!i?z(t?$`Zsj&|HjQE6Ny*uZB zbM2SwPmgaDq1mVDa>v5_Hd3o-16DV635Cwr&bR4V9(vV{8}xr7triSR%G1Rb*^3+I z#Xfyk;dQ$a({si9;&HUa0BrU_5(1(1>O#v$H^lK%Z)o|y(3o0|-WY=wbXG?GYgWT_ zdL9O@!QaQAGLo~e2(@8A(A$o5>X#ZWDwkIT0*J<# zGNk6J)ye_h8L`DQXP6KfCd8cfKSPr>VYJ=!>S6Q%)_Ef8lsU!BVL)C}(o=T8TENGE zh1a*taB%G5Mqa5|$w3^4sXW-TjSxZ|KR1x4v+?U62d=!fx^P2GH$tZZM5e;Vo07)D zc(rIo=0_Vy(Tm0LSBFxzMy}f{*4T+4@vn+imVaiSq|kqQ@z))hW?Q}!ZCG5`uANc2 zAB`k4&+XIwY9t3?9a+7{T3Xg993n7rV*m!X^M9*7Ka-=ya;^DE1oY*)(nypnjk&Vc z*kioFK+`Gu&(#P5Rq;5b02^vQNXJzCOJn4K3X7>ZFGx5_}~>6 zAN;HFSaxOm#Ln8u^{Em%nXg~==~b#<_`dAP`I2gq6-JCQK|d`?*=A8=VY@4o()$*+ zq*QCFJ4;3c$jb|c>&(#zdYKNLAH3C4RB!+&PQ>qWs+8POU&*xqcHGERuVgk^-Cd22 zNTY@?T!BJL;Rn&RDN?6sJ%duw8dlD^lr0HhA34QlxN$758}V<@MQ%7}#%**nCHy9X z;2mPS{+E|ARXA#9e<|8 zx4{l+x=Mf@%X*h9wqi@3$ppn{%n`VJ3ZTsY+Ed6XrRninu`xM&`+%Hu_+F`aldXHT ziW}v6Kzl>bw1)>L8nb_NQg5=5u{L&}in^I91n+oQZ<=KaQ^#|l+SbM5@xC|t2?sA) zyE81Wi;=OfE`BKZkTs?J_IAz0rM38_hB<Hn;WtE3j)|-E zFSH@OPCC05m-WNuuj{0b=(_JluPvC_K=tmV+U;K{M?!e0odbY{;8GyCp2?dAS*{2H zaj{Hj;|Yi%Yf(&dAjkR&j55RBarR;eyD5@1n4-jLnNOL7ug=ZsplOVw%mBv#^razz zRcWQ{Q~)K44aqKwki3QBbFUHUj?HZJkE12S=h?_%xyJta^;MuM@g?c#%vEP&l@URo z!@+cF?h-3r^kkh%a?VRC76Mb$TvAwUf?_Cnnv}H%f+aIH2t8-;(wc>q82O_L~$^`Q+5|oz3G1AlRY~w6sOZG*~Ex$>x0)r^$ zCo!d<4DAa#oP2a)7w&jArKu=e#4WxiJ0uA}zlo}v`Rn$4Z=^m1{g!*t{DWiF>1RB; z{=S?}-lvl(W&Lap9jDok?iyOq4+Yn3SM(GOx*Ip6f-l{iYS($haI-Av_1;U0(kMSQ zBMIMVK!H=gK=BtJWYH0GNu64@41KtTL6&I(xEX=LQh#V2??1`0Q~$8myXI5q)~Bai zfOiru;j-udmwf2OVFlIV6aoM=z4Cu@-2CXgHsE1)r#4DDpTN1m)BdYloADmHO2~CM zz6YGns+X@S^v)nu(&khG3?cA4Kdqlp(zH}G5>Fc_Yo1m7Hg9hHCm@n}g(1ekaLsZX z37dpLpI*iypYir#%Q$QpIs+6MW^=PcnampB(iB$jZOn@D@gR8oGc%uC#6I}lIo~WR zB&BIDe1YMOsOL|$kiAPCp6bd3<*D{0%G7DujUuRsCB&Bf`N8 znJ{NUj6&i;8bHqxjhY4{M1$?73!|nBU9T*p&jmJU2Bh|fDC1R*s96CCI}y1BUgx9y zVNHJHTIX^3EONdJUO(}7M2Bne6zA+vYef8kz{DHyU0sXVIj%8iPk+vh6kBQrEvqac z*})_W=!;MFUgq|!H}9>*AF2u`}3S3_oyE?TKG-2@KDpP9Az%)-|LIMBwbsbGyz=}jI_ywG(rrASHr>Rapq_o zL0*oESr(6h(NDmrZ{;(fc*#qJoF-5tR?W(e7DpfkiJ<>U4wLZXSeMe(U%==lCA&E` z)D_xGDL>oG1IZR|;s1&em`2^rK`tg=*w6?t&as&XBR|Fel7@x@y`_duw{r=%N(rbC zTBg#gGy9o6PV=b5T3^>{-l5F)?R$TykE{m5HyJEiJ{6Ood1eDp`j?)($iYEe2l)SQkbzocgJ!_+<8 zz=W+> zY&&zVe8#(p>CNLdCd+@$i+9{o9ytPL`FghG<8KOvf1*CqzkEWXM7J#O_dts{U_(A4 z`7Ztl0;mRy2YPxOC!Mol&{9)SA2B+^DPnVWsc4<37U-zN=J?Bxoe6=WS!)TyA(*An z0=PTZaYaq!vsB;7%w*JHCXpSzL? z3D9Atg00tM`id3I@bKc=%=ov6fWUV77DJ`Z$@iL{+QTC`1M`BRnMRSpDJF>s@1RRr7gDx>H!)nkD>G<@~&Jm`{32Q9OdS zo_wY{Z+?_#@npJgN7l9Yns(^QCkr!{0iiMIGl-?%v5c@S4`aCZz{+=D- zEm}_}qLp@${?l_4njDhJ*CyPHCQuWTXk9&jdPYvwrGJtWNDP%RFzk=G+hQVYjk`*f z%PS!v&9GzH%feH^mmoHh-|#TC$3jlJZb zLzdK#4Zdi4ej~|}jdwDcZDU_8Mim;wEq1>PloArQ_9u7p-Vw!Jp8TZO34&j&e|5&T zt<&xu3B67xKf{@DgQo+Mkh@hI21(Hxpe(cGUnU+_N=inii)a}oPFrz8(QAN6lbtb3~Q(S^BPMZ-VnpHEz2-}uV)&3U0EsMb5U&Tl@ zU+(qo+o&2viX;RVPU_vimi7JNVYa~7MCsBmaoM4~$Xxnxwchq0${nXKh=M$H6&~-6 zobNy&3<$!E{O7+_V9z9-!e8zadQp6fm&||ws-Mc@gD3XiZ@<$QoHbsz=1XlDcRZa& zk6agJ@mk6lG3nO=_DVlfLy_}L?8r4@` z&Ja=6^jpHcJXwPAiOIX9n4zHP=m~vhG>jG`xTaB|n({jQfn7Lo*z~vBr)$nIw#lOp z7_<7^CJX0C4-GhTMZ6{lW|pQe_Z&#ZO5^k$9W~1y^YQAg!%!dOU82~6qHwy@R4{&*4ok9do z|2K9U@W$p8JUdmea$-WaMc^L{H+JL6tFftTK^JwF55Ne?$+QI)X8o-XI!RyJ7&dBOU)R&3 z@q@3ca|?k-a%FBjOU7pepF+Vw{8^)SUj6RadU0?jAIuZ%7c*@>rEtfxOU{NGqOvT| zO?a#@&=NP5Cp7gaxaCg8WkrG z4$FWWeo(=!I09j$W{MS!<;U>_x3hpnK-pAkBsNE!;1M5i69YtNA$x*Y1aRsQhKq7) z3(<0M4@4W{GKtI_4aF&$;TdO=ZzLqY^kg?AYoI#5UHm;n9O9I;cy#dg)#;N@gPMKw z1NnIpTA7*Hz9Eite(1>z)@|(Kvot=Idl0rR98eDmaHQbpLZd!>iUZczm!>TPe5`Bd9_5 z{QP$7%!6ss2-fP$1bn{feAMp8s^--qDo7;#-d}+ACKw7UgbrrmA9i2(=Kv&iPs7Y{ zo}i>M^I4KSRPvI4iI*Q7>N%5ns4?U+m$b_Va>la}!B<>T^UFp1FvI{%g(FpTt)rcP zW4|GezN3&YljSiUV;;y6LKi{r{aFJY9I-bps~L#H|pVkbOrQmHfY5PCLOZUw@*%&@j+kS2SO6>n7VQ2y48* zGirtv7|crFT{2>IB9uQ`v_ECh(a}xi{Dw?7#?RJRzu(7khB?rDyr*!{>W zxi<^$HbRd2S!W=d%5QM@wK2)Co-p2p$@Tt^AN9q`-(2jtbUt3D)GpJ0s{G2cl&XK& zsVD%6UaPwNfJ`RWz;fUoEJ#i)50(!7`+amW>Mu@{UYaO43hKpbgFIT8IA-m=@%DQ&Ho;cjQ8lU@91?m1YGs-6H}@NJ$GpR z8<{aue3(@!cZ2f45R{ee{Vf^p$rm>EgMVTbCnRnmw^st-QbQpp-)IQr2r7?1%Huab zp2l#=2v;(HQ~AKRzg(It3-NA2louwfl!J4x$+bT=W^X}FFQz5sNd&1Cts{rKXi{8X zSinD?_TTo3i?g3_cUjGO0A@JJ%launoiNP>?2%z%Yv z5_E#F^s*W=6e{=P_I~xX`vG2Gq~3a2zmkuy^2^X<+M@Rl#>S%G(I#eaCk5+m6*ok^ zxf^h&&tK1D_4|A5r)zh)Tkri*eXte;=W7mtMjd-E^3T2j5kX17y|p*pdDO^S2{!nV zcKNid=6G=b%Y>5_<6=`9{04TBwX=LW9{*f?GkC5ZsexVgBlvGu3@`%W%xM}*Di zW=zW&bk8<*@?-hk_A;Cy7mC9lYfXI=)Ap}OKMVH_>(1BW4|!77;}qY6fOvlE{m&NR zaMO#FXAfI))eCmq@A(Dbk-X}+6X$j`P2zcfKWi}*u40XK8@>LRTl>V8dhEeUTuNRC zGTf(4%h#83(K{y}Oq?6d!e)U_ComL-MhUM3y`@KM4;`RR>>Y*FP@Yi%6kkpmjvmKX zH{ILZ@P$#lDB0JR&hQ)B0H@4Hw?P7MQyEoya6|E zO2oBwJIQ`ThPTn_i9!SCbfx)MA&UU>LYK1Gtjcd*xWQ3GyEb>~c(%Bj7rf+BF*U!m ztQS!Uws#+UlUU43>ZJuy5i}ptu~@4WBamj78BOiSm;fWkOh=2MSStZ$7AU#0F@}ngB&vEN(}Oa35m9)n_-u2mYD?n?v$L3gpO>2IOM$)U zg5fYf9o0A2h7Y0HxyhfJpWJ}$egbQ$#07NvnqU@>gAO&_(YaUlqaBo6y&l1sdVLGM z?^}935X~NWSc)HWQvHky{o?G!)4v5D z%93C1Kdbb%d(z;7a!=FWn2$smzYI00U7|o0khF+9g6Xv1{&-s;!1=n>h0A*iAL3d0 z8bLz&cgD7F=bfIPwMG3a8=lt+q-Ec{?8$Ce_po(>o-XaP=?u~-T2SY(L^?oN!bEj# zd>A|S?kS({be#tEi))-tB$~BCjmQO>vk|tKRh;tI2y{Y9z4TCNH3&qM# zqd0R<6Z+PYU*)v7XS6OBS?SMyGmS&LIpbq>)2FhUJ3};W^q5jKGqQ4d+X_DcQsUzY zHM<7ZU(=mr-nz=1DJlqcEf${`xe}v<7DBRXx$xeI=s$rx3o8~|COUa43y-Xev}s(j zZP`8`DA0BA(;{fHZ|Xk7p&7 z^e#i!^xOy`(+_TC^;2o)oLmZh(6++!P2VGOHQ;RRA{HOB5Pv$9^3`+_cE<_}W>x#3#lg z*Q#u#T>I=X9VssRns4UPm2t_j1)iVYggd--fdz)z=5L=9S-LFCEk>5L-I7mIs)~Y- z=PYD0(MiSLHctY5906$YBSiK>d<$I6m&OT+1_L~SL;dNY{&O^k4+wNd+uP37vy3UU z;Ucy!cYP(w$Ig+nPe$ln@G`zD^%I-4txB818 z-8r&AKk(cBuNwzH9fiQpom81FUiAd_w?m%WXNi{hQD+;Bn{v^+X!t!=eO$mF-X zACIqpM?O72y`DI~=V>o%S>=5bqr@nhs8IpvVxvAL_N^MNUgl&;df-f)nIw~sz>|LSL@-FEdau}ut6enA6K zrkK3=b9?{o#ir;OkbW{iYdukp&E#O#w{nGc1Cm?6Of4$`NS1gQ= zg=s7po?buDZ1<=bN)*8WjTvCandlLzM0QZ|9>64RWot#i}!nn`9itDZLtC)B#< z-D5gpi_G2hgk{hrZHc43;iUUK3+i^SMid`65Q z72bqSmk@o$K{}lqYk-ne=g6QmU0-LW1-s+kH*52-MEWkw2Z)1ie*AKaeD)vtEexK_ z;_oSf`R{vn-4SI`ef9si<^O@Fv?7GekBZrxORuLiUx}wPT*QvSC?9d!OgJcb7ICUsW>z;w!r ziSq(+J^wPfz~4S}>>WmKD+C#-C!C`v?C9{i-B<1AMga3eZ;r|zTzC16vo~@5OUt2b z^s4psS*e!ZPpmwzQA6i-Wa>)9l4_cTwY(a6tvjodMd~u8dnw*za`$`cT?F_}`b;W< z!}R?KW|3KXcBD}qaTPV|{N>8U?%2dz^@PFwu!x;RMQ5hvxAUb@KRy(RBqdc9g|o7s zQPA~-@H9FC39F>p_x8V~8ZD<2OKbyX;L!0T&wPaF+K*A~&lG`D(}Fj^N8eAMr__eGnI^ayC*8E_QnB3M(s~B|m+5ikRbv z8;R*ROmB<8Z!5;VteZ>g4RqX6u&HOV?A3>!%M03l2Z%}05432?nx&t_6UX?yxZO-A zUw)&bakfa3YrL!nZqyLc)8_ho7DgU#4E>V~35Ifu<;yk@m^H;Q^2maN*{XCYfmk}l z)r5?Tv3eV$(}iPeLH{Hdm9D*HpcnhX$W#wz?L@of&9N^nV7w=9BFness`%JnV-X>6 zfeN<#C+bgBSBnpn6!?0W-o3z+O22I!gcL*ih1#fF)=fL9#;cP;=E z@x($&{K)v2VJTOwj8|o<1du@>V zB`5S~dP(K4G?(jv=8?jKiC4$-KO8(;-)MMS z@J`A6nOc7m9>kTJGmz`VV?KS?s=rx>_MXEI2Cf&VGVvaoC^lRpDp-^8M@mpdnGurN zv`Z5Cl#!u$Wka_-x$#K`$Gr28_g55tM^m<`D-Qsmh;db29UMCnCYIl$E|so@au<@1 zR5sWm-Qc47F8G*@bJk1S@aoEuC3#y)m3$(d?PvZpXc)k4hWeEk{RDw~|h z8)sq8*Q4N=1Q%l6O?R1+aYq)5I5P@?r+hZn@XZFAvTArtbc({GY)}ecw|<* z&;P>+Mswx6<6K3?;zi(VcgChm*(b7v2iH@3r7K=j znRWOJs9-bjzV4_M{`*&;7-*RlK&sycDy~WBR<76WxL14a30;`-7WEFy{7}y@uw7jm z#sk;aE$qmZA8)%6&M^{w;r7QI`P)GmXM0@VswC6D>Vfb7tx{R$sGD)OFB}UVRlmWl z7FC5TXjL`P)c9YIH6d|0#$Xh(yr-_es~n(OJz_VgEJ1N-_R8_Oy|1eSJqSO0wt6r_j8yV4r+QGJ~@ z5kdGzuc7#)aSJ0U5Xso_H;x$TH2hGCB$N$_v6PbbYFHFHf)-4)NXfavroA5wRwMk} zWE=kSfE4c?E=xX8<}oCiE6X)MxQ;cE4fw>zFSlMQM9qSMNl82P^lA6WK?m5KUs|I^ z7;u{{?M8z(-`=cIo>x|-D4Bo7S6J=WKpAX5I|{3||$Xr`Bz|A9g0M zJo$>5%!RhP84*?GLjhBqUs1$B819$h&|rjI%AkwLNAlKU59Jnm&7=ooPR9hHju_WT z=NRa7L_=|!V$!%0X(eRz4MAgcx=l2fFXp|CA#UBJG*=Oc2 z_Zy`QagFOVURXDMGg1~1oTagqnJgZMw=8C)nk=yE)HC^UVPdGi+$VDD)nBbnd&#Bc z%_rPfQFwp_2}G0s+2ukL+2yWH^mpAw=_OgeP_2G)!A(Qvd6;l7rfB=!d`0-E(8KMs zFG7rAr2kAs+2cR4y)Eyz1kQ{ zHA70C!Gv5TdrQR}U-=u~OJQfk(gQ@-o+K(=B8&xs#?qjPY#nA|B2KUtkKGDZXdh&D zCT@gU{G(PP!mGR+9FegriU67juf<*Vi8e|Bj zw8X;b1vcx-lIjf6CkSxHKJFEtlLc4X_h(KS=r0{_YA7weym>e1wGU<4B466LFLH;F zFr!Eipvjj+O92T!_mH?6r&*BBh|0k9_QSarW)Ysc@Hd}d`yVL0M9aZIK8EGYP&#rFGex}m)N~Lb^bidl%Qgq~$d!InPsA|YjRPDB z?ix>Mkk-6#2yz{pc%TJGsB_^miu%fqE*THCZI_s%VKHtc1^4+qzVe|D7hD|!eM)5` zU4Sv`T5*URoG;SXGu7X}gn>ufi+$p6=bzNJ+cT3~V)L&>GR)k*9>{g}#l-gu56WO$Q{m@9UGZW;XqoROal}83*2bC>B#Gw;;OqOx4s~7SXt* zwM4)3L^*K#`d8D{Dd`){xqO9@5!zplyC_QmdMX1lt_=LWhKeKjyD_pe?wRR{-N_z{ z*{+N35jCD>-dNM-oO}L}d{VD3B_xx`Ut>)^Ga~=NrqcDNC#_={gIt}ia3_$-3~eAZ z!0VPT4s7Oxp>fR@b2 zzRXQECgKn@Ca!oiYlb#Kq%&F#DI$*}+?Qr4l;ec%PA2zA3btLjH%qcxq<;Y9~f33@kEABIrLG6q8y6lQu=iCwz zcaT|vXrjMWV2Xe&Jb!;pWt9O@1f9<)Z+ zXcX}z{*#<(EPJGpQUA-iU?bXyGS+=h?s!E-#xR{;@$&6Q!mUN@iG{-bIQCPGTELvB}7b%#(zd>QThVt7Fu6>xxMz>{cafu2tzVBQjVlGMI08YA;BUh z{gT=RGQ)%ufs6OZ(cmyp29WSqYj8@x`bPu5A|VK5J@9KjiHQ=10etg&GV^Loxb~L`nd9<5fm_><1ojT!!E5cIjaSGT46N9hdK+&yIK8= zyL-iu&n(|dj9U@k!AGS3m7@Sa#FAwO?(_6XGQ6KK+m04(;#Ezaun-(@oRk*p%01}EXpu|a!FUyguTEBD1i@yHf3_PP8=GO=2yIqz;mtCcECov-<=Ali7$bGi6x_zNh@MD3g$|)3GrS*Z(IQ`r6)~470of=UX zpL;d~vm1sCk{LJR7FvJXTm}!3HE)GrphW%Njf58_e^e#0DI; z*qs4L1_14HFEhn;o}?T<{lq~YS-J~7eG4^W5OyWZrCYq6X~|WmjharFsEQ6y*eoi-;8H6zxTAnts*ERF*@-M%Viog$sZA(*P? z|K|T{LKIdFCQCoee!nJ~T*dm?lUqwskzt=T8e8T*6ZY7POHgZvFiQX{VE(|3Iqz|t z!blzFxA8S@GRAJgp{t&sGve#+?c4}fN&tL?L+s66-wLut*vK4>?JIiip1p|NTyFn3 ze4u`naa@!#={b#jUZ0ntjsYMwRM;kKrXL^Te|foE@cTN_ELOXQ-M|npu{^x|4zJ)} zqgr8qj79E{XRn@Jnm^6|pab&vA)j*ps50VV=lzxb*G?*O*BMPTz3`NXhH$}w!T)eb zPD*H6VczH}4+ux##+fsT=PLm?LwX5P%!Tfep6DVG#vJ{X-X88`kknd+vm8QTy?|5@ zOVdm0#h#n=)5|D#Y1k@bSqUCW>VWHJ5C8Ci+1+nl&b5O3Qze?1j3&4Y zYrc8pD`7llpV5P@A~f{NI5h60Gc!&uO$#?^ji=AIvW-zF<4S5{bZSc9qZ_KbjW~Y# zR?^urB4IEfq{Df8%xpY&OGvW1Y&@ysu5iwOF`=|BuQGPjo-cdVJg|K_#K<1f597xoJ2!j>=Ovo1zONq|f ztc5>L28#KvT@4nAb6kfLCi=l&(In~ExaUJR0hBB#=y;3%n{@HA3Xlb+ezFz+s}BT2 zJBA>j1XUZjUxtt31I9Oon)r2;bM9!nX2+Z<*w+z z=ytX&6*`)@p>{Rq?Z=)>=X5a)a!A&Tt9zRJRZo~D-$tE?mXgWI+WyV*RTKZ6pKl4D zeUP90N$(R(o~ZSN0zAR}qg`QQ15`=7;oXUI898cw4vPl$i!~pIG;3i#Q}A0OCh2m~ z_=d;R@iXL6v)QiK=TCP$*G7w;2`1%|zeU_aCtV@rjdd|#h08uxfB=xRU`l`1K<^Cc ztxwNq1*H-Ho`L8$DwK99Uz|?>|C^h0At}&yWWz(&KvI0&%nX8H*gr^O!NZlpxPW;R zkW3*0K*tosvnOWfI^2+S)dpfhax+=y?VXb0d>wLvZ=ThU8Y1m`V)J^5EC<jC$UzK{Tp*TGi^GrY%yN@PHJxpbuaq^`WUst1kZBO9 zRD%rJls$V9?0`CL*tz25#)cF)GBp%R zlo@7iu7_5$(V?lF`jCx$vKU4LNt!7L2bBqEGU4B2kY@&J>f~HSw$YE!DFk)CP5>M) zxDJkmQc+7ntju8y@rano^}!$N*sn=Sdy}At+m{2~6w$16es|Kv*Lv0eNlu+6bi%-> zc6s#BD2c<-DJ`F4R9Kl|UwTQDcWdGJiBky%(d&x87(xX%>CH}}HZ67gn~+LVTW*&% zRe;$t=`Xlf(pDFG^5^YSPpV$mfRlL$VO;n^rO{dSXcs)^Joag*Z4^28Cz)(3c2msd zxA}q94r!8-g~;UnL+jAy3;et{b%9o6CzcSBaCx9{|a5coIU3)10G^k z!GUqU9|Ju!fr0pmCgw?e6`}OL64a&9otDAH8p28!g>SJ}mBndodMfU9YP->M|$tTJMRre{L@j?b9H|Gti z9!lMzlg-2c+NO)shOk$1{S-D*PtZkE52U*h6I@}=pxB<7IT%MwBznz-Nt#$BO?!Ky zWoCqJf&np^V%TdafE@85NvQTN8yae&Lq!<8YbrEx?)*bjn%6tkA#Xr3kA;_7;%-Z) z%kO?@>7ZK~iCj`~Z`*$@-fCOl4C~)bH%_q;^=D}WE^hV%GEO1?4Bt(zda2t@`bPaP zM!y>m|Bk`!y(!$6S7dO?qZO>!0fe|agy-4ugXyzwB(07?ETS+gXK$?Rq(JLzI7~;Z zqJ8e%aR-lZr=E36`2{upxV?Ta<@J z@;BU}Zm@#kMeAtm#Hc(Xn=U0NLPraoSf0Ji&ppu@ByzRKw5Y$x|E6weF%ckGp;Id8 z0rX8axJrCn0uxofoTg)=+7m#COCm>SC|9w7;$+}QYhH2<+{g$5`acQts8JI-RJ*+k z!Wn6u>vd|fB)7ktsfeewnkkRu+3zL4{%o}Jz%uGW`1q4@KX_Y_gd|I2w7BUa-J>ZB z={%z0ML|=`xLol@w_kg*q0B>Sr@tNzio4O?l1@2A(Yf^MPiPC|4gcI#iH5PV(aZ;d z8})qZ?@O*=wcn(BS5(z>tZQvP+bo1$*S|LSX6iv)8vm6HVynl;8>w2`abO{`fE+4b z=T_Gv0q!Vr@uv|(epD<7?{7sAMw2POF?x7fJP}5N!QiCH=l9Q*)QA9;s0ggXv0pij zW5-YL!mY3VA^wv=rc@Y&GitTMOqc^k%}uHRL{oTkv|&rxx}i5Xjy67-;Sq;QhdD)R z4YbY+=$0NgttG!vSo-IIBV|%TZlypj|6(ai`kuR8NKO4Sh=;vN#KXXyG`rUm`XMWs zn(ymDVa4l1wXhuY28h(95+|UyyTMi<`wqekWwlyaJUCkjcKS;ACplw?q9VcQVqx#0 zes$+D?T$NV$W@uTBe01|#m>xwiU#BQE19%hrx(GMk^$Hzh?B zmK_m{llW{NUR_O3NiiQazL+{%;FVLGIHESpd&%UyCdM47=32ezHF z17T9I5=^Y5WgCr{{@Il%rTdxb&m_+Cp4M~dv#P#6xy7thFs#|vqYAPTVg0wN?WeMh zg9~$g6_@{9tUcfO_)XeTn%;j49f|B2?Nv=kQ)LvP`n52=S+l>0%WJMz7^&p@4P``M z-x|Bb^OmRBzT#No%3ONVg|G*&hro68i;Y2{Myi)+84mf!KclN;ffSMtnc;Jf*pA_s`>RDAr= zS-VeG2de-QLM84Y7|Y-HOF{yiAjf*#RdA_c^&VGNyNY^ZnDs2c@rPSywW+bTA{uy9 zq?^YS^lrYZNU~LB94a*|WORN&1iQ^#9siM(%fWRnK8S?F>fWc6_CLT#_CsrD&~f^)1r3Ac-?;9@Na{B49X;z)5s7ONu$k0}P8-xEC?c)(Ay z(z#58j+PqN(;xFhs^W7XKWDA-{*S|$rERk(CtZjo>&I&ZKT+EFS8T4`X^|JC;I_R? zLd)nd_`44=E{&u1w?mv1E2Cia6%+c;-emS+GbXQ?{#EQ0ADFlDHeRO9d|lHw$-)LE zKFK*IYMWLx?Oa~5Ox%9TGT`BFD|V~F-|Kt!C7GYua1~q4&Fg|d@&E7;2C>v`l&Xej zgm`VV>#BfW9miv3nY3oMXpOR}myME2Q|4c2_$>L*DVGGoVY!SzCEQD?x*{2jG?BJo z|8rUl=X~-8otik*dzHRL!GktO-~IP##V#6DZ%i= zcfTUWOw=ZgL@%k=g4^92`g$C^D&}VQe5(QlpTkwMc0Ck!n5|N&9jHTZ46ol6h-FEC zUMB6S{~os`o(W6Y1Zmqh?Z{|J8vTs_>;7fULOiWrePJoQ{L(LHRQzhqe}6Kj-(SEJ z!7fPRX8^?b>AJ%ot%tBRJm=LVmTmr6@KYtFVjwn7mcQPDBolvLcs^Fas%1u5oT$OT zola`GSJ0U-WN5wleP;G)@fyKVC4~~Tug5jI)b)4`920;*v(ZpZB-6+Fd`EG&#JmVjAuX(f)1vTpTKB$r@ebs7&(^9Pj$Tq;c=CEkZ<(^u77jt>yKur|I^_ zA$R1rTN)KTa3tq<7xYc83RPo+9i<=ZJ1aR9jy-PINflwM!12pVo~p`#us|gftRh%X z^HZJq;oSnasTniFiocI5n+C=7L!Ql8Z?p;YAKERr-S`Yp+2Qbj81=th&LWoWxv?St z{qaNNYTEzM7dvcbm2qjWC3CRG9g0RXx1_}@g>Ly z;VvrdvPigx-=juj%V4>8R?DOEE4-uHkb-*0u>8u56I|}#Qsf8sHe2=z!HdeROuZMV zw7^*VxrlTpH}g*6Hzc-SzM8-3lUqHOO0OEp7uA8xP0#g^{)A#Rs~QwaxwgMp6Z$x8 zzFeB}_$1{T*P?f`q-8)u%a4gh^wx*OF!c~@K~YGFLsguTMn+saq8Df_F{@i3;Gk|AcmdP9S_=~NrlThzjZ^?C2@eH( zFow*Dtvn1c(4!khZVPX{-Sb8jVt_lcgW~VYI2jA&&llg4+ZW>-QFpKIwtu|jH%!}a zf{{qwFcj`}SHJ6MmNz^Tr9z$n0&7_T|G0lXy0Mz?NM;}EZzgAP$jcH`5UqzPG7{nN zn14G+#@xfo-gFo7O^?9hRF1I_T^V)dVQ*f{^;d)av{ z`r;06G{5a}GcxU>(@AXTgJeneASZoH^%Mh5c6f{q3-+Dz%QC)ylCz9eNH#J&GVFIW ztJ=FOkMrhyCI3%yqnEIP87D4$?=%8In7B;!7j)UCdY2rUs*E;nkZ66x6HL>K6T>I@ z4X(eIqXxA8{b$VfXGc5HSBsUkkHmgxVIQwRGg)sio5154Ubqm*7s&Hun-lw25ew%J z@3wv^+C9RG-*onNF#3zcC}tc6JGcBsU`x#SSfX`<(z;b~e96%{*Yy~!ewQq9>=9?n za!MAWt$kG>FHw;{P`p+pZn_rt=Xd9otZY6$>~CZ{lPnC3r>>zOvP@Y{8V7DY(seL+ zadRSB(9|McJhY`^f^DvV&Oh zat8EbJyRJ_p?UJdMSmRJ)@^v~6k0Gc9I||1I6HyL@@4&3s;E+Z%dROd2Xj*Euy!)% zOyrCStLy%N@~&K!#rHB(@8iz+T9EX^WLDjJ%>XYbg-U{u_$N7Q2z9)%Vd=I0Lkr!4 zY3b)9oZn>SNIqcND<$qtYg^HbXrRph4e_}f#;VeTJ)@gy8@!*R zNRTl0K%L$pMT4lT1vI;{OjL@NWgR9Jd^vK(31Wq>*aErO=6Ed2XWmaPCp^_x^j81V zS29s>Pa|CG#s_zw%f3fdQ%^0wEc`YS@uf1;fX>}rW}aB!$=70H$VOPa(uNVy2pxxjGt%V-57dv5U?UHnTEY=Slzs5dt|aONLH;cVU|g zu@thYJ~uQ-gYqt1OUcx>a8ug3ahg0z7mF=!ww?~YMXsEpoCRaj2T^mRn42|v3Gte{ zUq<3t*4yA#g^cIvB)}HK7LK$MbTM7b@((RY;DV$YiW}}SAu_BPwNobwTtE0h-M9M^ zkR(Uf-UK0$aDf^Ef|g6m34jypz&!on1s-AAn7HdS{@Jd0Fl9X9A*6b&IwhXH_?Ipl zBe*@|n>W+9kf!fWMNIrMQO;(6R(MoRsod^=CbbM!qja~t+@CvlSqV06vOCpv%(O3N zHxXc$Ufjtq5y~x8BDUXYnN_^JaC_-N*VyWkgUpUMjP$?Bm^KiayM~kes_%$KqnuLo ziH^L|((;U9@g^eWyDcRZd*gI|X(62N)!SNG!X#oJGgLPuQMu@vl>g9K3_Zy8a;Qad zN-r6rZOoRTDz)}2RssDc`wp=Aq>;Yc_@i)PWqyVJx7{U3X8{tne2 z|Noy^jF~YQ`&b+M&S31yShEb-L#i1&l}L-U82c`3h9ZRQ5tXGFOR@|RDpE*9tEGjK z`Ao0R=X-tsf%oU@`d-WrT$hWvyWbzTd7N{e%Q^f|8Q6Gl07A}zqJ}}Ct@$N8K5aZI z0hU&l1E@+EQgDX0$9QzN0w;*TBPoi~Rlr%YJ4)GbMT0F=?vJ^2#`G+r+3~*IV6Y-Y zpj&C*c|l~9s9F)%2?37~mK+*^B~e|64>zrMPay;V{AGU5%zs|3IqX9!!n`eV>3u1- z5$^QuQQfyEi|SE|@4r4y-+y89_3@EQtNYmxS>0OZ?iwC*iF)(J*dz z4U0!#j^|j!h5tv5*z3# z4|DzX*vB_`4iPULhsRK$%HWcVv%2KBi{1j8Vi6k&FI#S(_M%RS z*%vk*`zfb0@Ksr4=aqibe_hUuwS1mvYeK!sYtvsPh+l3M4$#oM7ILjqS;j9$t1gU7 z3EM6Uzi+|zZlwM|e^yp^(&y88UIyA?GM=Vqybj-TJsWS->$U%e9jQB4bt0~dJU&qF z7csCFG4)FL)iD`YdxJb)mNa1r?#`+^!qUcvYD5Si5(UFrE2SvnlcRqk?}1a}@0hJd zWG6<+{sVJNsf<6m&i|D;p1JUXafdOo%oWIz$Rh?~ZokvC64yx$U6WARnyr*&G*)-X zp|6(r!MXTJ$3p?E2+oc;2;M`Pm*7h&G{jZ# zsSqN&k>I}cL*Qa8v@wRx3dU?Wft&3MV+HA8gnNpm_-KtC>W~ptHf7@Iyeqh+lkE-+ZQ2ka;UfyK>LWcrh#_@9| z)zhT$p#I2PPevH`qV3*!!XnO`SqGo;;SB^+Ro{D~nG+06E_W;?KBf}wbeSQ2y}Pxp z)cLgA(UB)@@($lyZCwrf2Z?Nv%hQH0zxE^3GF_L~j;1rA>)^f6MF~kWX^Agth{C!> z)8xw;x6(g7XOPxIF~I zf!dI%&e`LLO5 zcctHFq9$eHA!nUQowu0bZ2hRnQWJl=R*UOus&g#1boo;Cgc${tb=~G}KN0u9E}Kyv zW0C6eT2SWHi(-mDjCz^^!tr1@L7*u3e(I8_D`tNT!JGtUkpY85z>>E?1Q>+HG8S_w ze=7+Wi6MbBu6jGJrUL!(@@|1#>{gl6PsIJhPbP49g9Q_f2=;EVroB!lg@PT(=&{S5 znR)&8Fg}>@JM)nc>OIVKLUN91(g-QHJ9feg59ZKxPYHhh7aKs4lRM=u_Rh{XEkGkC z+6i_R3C?Ce(HUn^;$~7+E+u4iY#csvFZ+1b@TZw-#%rFx%+KpF#=wu)Gu6qz#T|7n zHO~AZ(=QEd26<+h1?lp})khz>u%@OEMcU-t(h-Bbsr*rgW7kFvAi`dyJvyN$Fnm~= z?CmULuzptU!G+&PHftkJFByFLdz7)!^Ku_5YJ3iji7|XV@?L@~&`{?iGB(4gy^F%k z-p_J?9z{7%nuR<8)OCPGfHF>=4(lf1KmZPo!PudUqMG+%AV40)&K#qd)n96N9a9k_ zO~xe@J&n2N8EEJXgWRtFzQlXX0(8=>1((o6F9#DWW5MS8jBZS8`4+Xrnnq#8qjML< z*dkM9SpIc6JyyRvRzoJ!V=pY_bu-wM&2KI!>T;|fGLn+|;4dNy=gzYk4pkrfnSFlq ztqt9fLsvZ7qxp$61Sc-`k|+D(KqO`!<}caY+9};>!I5Ob3sPWCGiFAmXJK&SMxE~W zUD?shy(MllZ@bhE>E8Xq($d$VVtaw{<;~+Q(kV|3%b=fYjBD*Jz1wW}&#PkMXD7an z9a(~o$BQS2t1?C&-m!sdzRW9Qv@#e! z@N=o=iX)4N`?t28O)Z~f)b|L2D3{VB7*u2sw(Nd|%?WKS8iJ=ELWOb(@=8$%(O{!= zi|;3Vx$re;nANAfGwXX^zPAchDUTQ)Uii=4ZorF@b5kL=<#EG&{y`-ZTRDGsI zyX1AXJ+B$Q968kIbFcNp4CD8=PcMjmw+12xZ|VGX4k_*%(zlHZpE6WmdelHw-|*?q zu32_|o61~}7t*P?R>ER^w?d>@$SmC-ZfB|#p9<=J-%)bv;~LD7u`yfYT|M~i&BDpdFoumMAF6tPcvdJB@;n`lUd>f1z;-qEQPof z7PVSyG#fw*#__9fo2l3EssjaT4e6D6DQv0mhegJoBadpcotU!+1zDUB93_2r3;^L* zvkpD_w_Hwv71nQcNV2VagjlKj(c-DU2trYxax1M?JI zbw1g!;8D*H{?4IAuTI1Tj(qVM)YNDEc^Q)57|+-Ny@r2ud`4v!*P3_JVn5a3m=;<#zP;m*dM@ zQCvJ|VMbwu0`YPnr}@;Mdjgf?jLj;iWDz7JV%txS9Bg6AoR>IYdj!C`3=g9Cugck8 z2j3=eTiKVn_d0?xOU>tu`b%SE#CY?a--ecuQ!U~$1cZnRei8x6kO(o$E*lm5 zd^*VcL3t!NAsBRl?hOpb5MOx@8FT8ncIDd8Qo74*deTFPZ`f={i=Y&LA9FbgBray% z{WFasW^SMqGq25MJ0^{Upam|17VL^}Ava^>ig+=dQPiYs)L?SJh@2g76I2}e1Ut`h zi=t$d6j*oHba7$wlj{|ek8ArGRWGHS9x$im`}AJjjF(f5wN87k5x(lG6O+(~N2a8K zjeKY~;Q$uEoSRgp1IOXf==PbEFApEJ-eUG55D4 zSDD|55)w2R_k03+mA#19r}o0U7CWy;VF~H=OVlY6F7F&jLIV+~o;@^^GLWIiFc+G9Pwod41Yz|u3F=Yu#du+iNr~zj zovm%%xk)xOcuI?eSw3X;oQ>r z@DPZc4R$b$G;^n}lH@>7kD0r0kmi-Wu{1l({iZTVxA^IG3w}_L+!y5Eea-@)5}IkS zKyLrCe&c5N#K(?s-&40{p2w}dfW|7ehJVZ{S9H^^)O(Vco{N$jNpnqwj++9oh}g|9 z#BlYXsVir3R0XM zoA%g82}ba)TyTXAGPa*mlTTyP77i{NCCnv8mpw(oiHjyeNN%yA#4`r3;Jqb{;?gOG z%eZ0>y1yhzb?8Maj{mTTVY*fkfbK%a&e6{5)n?LYa@ePF38}rzXEIxx@~UGv$eYxH zujm-R647P=V26mKSuyvm zVJ;)#EQS@Y} zTTV0HKbuN{cSTal(>Rdem}dwazzaF}ur~X#1cfF4bv-5^ngxKTmnX_wC?bJqqXs#t zU}2@RcGbGaRC{N>F`ONj`){D9{NEJ5Q+#m3g^bCEme8VKO38`{Xk?1hIQ#^RgvMU* zQ{}zPI!4Ko%gOAO!s?QbH0VCF6;8tw6OIMLL3j*jRsQ=TJ~=R>IT&wiGJBdMlaB z<*2slHcOKfwGTx{PN`}JF^{Y2QhuoP!v1bi6tR^Z!Z9?Xga=%QqabV*u^4j+VQNk` zp;Uc?_c;r?8L>Y2h%t`8m#i|FY5J+Yexd~AW40)Tp)7q3Xy%e6B+F=|yy-1@;u3oJ z25*$btBV}@&{3p`_SN>@6MoE1)|b`QPMk7i#GWoSPkdz#jgL1onZ$qP8{Uw-_Do+ zQ0a(gPBboE9%qe)F`u*d*Ay!j)!9Y^Q2_MI&qtl{5B``FH ze~--f1fT3)zS)bt;Go{u3cjLo+Go$f$#;BP;GTruC^-_LPtf|rt%r5ojqaDi$zVmK zN9<>k_&b`p2$2s4yB3un6O~kKz3t=#IXGM7?JVhZG+aLVb+k%F0V;!aJmg^(`9cK4 zS*Nk%?;G3GWv^V5!;drE7&GoaAmb-fODM^5g|4$jw*fQ+bM-|)DPCz5Q-n%Wy&(<4 z2FaU2_j`27@hixw4Xs_c^;3#2ErbsdX+~+R)!}^%x(%5roheH*QZf}g&Da=mN^)E1 z>Xyb@QkW0$%@x4)b@Re73Hcz9oIUfd%<&c&L*SB~{N1j&&w@!_L$Yi7gB8z~*1e&f zcjn;<*27Y02~i>W+{h@RlKc}mKv=;UOC$LCOQBSMM6tbN07L6vms5f*R$0@#ZmvXMB5AU=w)OyEdXh+~z$o~fxZzk!BOoF~bu?I5;!30s#p3xs$^NqssCb zEOPCAji(g1&nnn+eI6glni}WxKLyHwO&odoQc$;s(OSRZ2kWQ}8U3j8Fc0}spBTbAn z)Xqjj*dgaB$ZO)IPbD~&Y3+->2c%Bkwm_LCqp8Vq5nn7FYX7@ng)Mxtq9@-FIcvQv zPulO(B$T6}$U&NlRN(Yw-YooGs=O6ix)mw0G9rYan6SKM<&ey-&FBc2tvlv_?uZB` zE2;?bn6o}+BSg~i$Gv~IAmKRY-}tg`T>dpr)Z{=ex%Ziup46qJcMRO>bxScZ<4Nd< z-f$E0cyN?f95z*o`xbrh{P{ayM5*HN@xX8K<7T3ah)v^O8#t@2&_37vKvBkTwK%jz zdNJ!?L&ie}qo*S=z6fyUvEYWQfPl+(S|mzKqWL0CnY#Yy9BH%Uz0An7{Otp0=j9Vi z{9t-{HvCq2A!Hgd1&P361aB(-ify*6eKQo@p5A{U#R`ri-^@?)G0{zrUQAa{AoyO_ zqt<9i3G%nbolX(LD8N&K;iCNPpqIrI0_Rk`;0;Q_5+^)95D>G+kt1J(ZcVB-Set)C<9v~>N z{$cf|rG;qe(;VyMUKyAYZyMFci63XcAmjefwA2%l+q{M|XWa zta@mMf7l2qe~lHEa0n*R|Ken9!9V0|U@!;bph-SH*d|7| zij7kSW2UN9`~KA=p2zPI3WqcJL?G~8QrB7rFPz9sK41zn}r2Y>;n4g~sqs?z+6!7mY`>*BZ#&9%i)73YILPm8`OX`j#t z5NyibI8iJp?dNc+eE{!v$7^M2Wa*zn^Rs=^t^ffltTT4%^@l{mV$kvgz35w;rLkSb^nwZgp8@`1n; z258@GMQ2FJA)NCpq76>&SJPpF^(6O{%PSfQAfxmmKEP)st^ z7SshmELb~}#Sdq}<0KW$9paRXxC@rVf2ul|*2}U-wLbXd!>PuX)MmY|_eag|=XuVg zu5!)x&vlj$-DEyAe#lg^9POqwZI0bVc0bny-8jPyLd;qhDgHMsM`ksbA`VnDk+bv5 zo5I~57h2Gi<9kB^sfzktEer;{hBFDwi*7`4-pzvI_aSF$6*#+^Pgv2S&Fp~xsn>)J$v`-bk1Q8 zjTIV-#sz&s<}yaH!H5Ak;^)+qP)Xu%<&=|hDKtaWurLa(n2MApK9MC_hz$39_FtKt zrAvADThpORk8CcYC-eq=b0jZFveh@m@hfoXL)lm;;Cb@Xawzx(ow6!&Pgv$&Rn)rJr=FO@l2h#8Ni&t|oq!_Cu_q zjUj((U&0%Utp_he2G?F{USj`C)Mb1xs6M=YcWV8x^rf~(rA-q7L4K!EbuT+^O%L~! zEdFXMU~W$!0AlmMqR&jTMqYuO#MddiuVbDjougjj#JG+=r);=zN6!WCXNh*?U*{rT z;d}X8Ep{TQkhw>OQJ!0tfoRRviC#5-dAJf)sg7ozx}zV7OCYq)N9?CIlQ3ftbJG-4 z0|JzJZ)c8eZ-+RN_qiV>*m=COj(E2dpBh%u+=xR?BUv5o@KOZv3X?KqoowX-(^DtS z!d$z&XuckWU?E&Rg~aB0knd^(k4KC_SZ!kcJcyeRE+YEWXeC}szRr}R=){!i&9VY4 zaE0g14SkzawGG0b3R=yDZhQ8t306BCt5ej=o;tbKyp^<`&>{7;`b0&^7t@LC2QQNW z$NfX&Ngp2{S$i=0>&Ac~=RldN#@9}M{mVl~evJ3H|B_b;tYz-%yXSq9f;^Kjdi693 zh&||5@N^d7(`=M&38aARHON^~BY>k5BQO-F|BN?cYTHGHuB4&nm)c)e-$#Dx$*FjS z@xNc|xz*NE{AHPJVb+Sj*eYo5+zZl6Sm;?0hyMU2YNGC}scOETIOqTQ?f>&F;?K;t zh(G_&&wee8-!F62;HzA~92#Wi%?e3pewBnV8^poQ3+#3QF$KmLSt{%6l*9h^N_N;& zzpZ(?nzfd28UD`FpPqfcA;;C=k$G2;IP;>o@F98vTEb;{O~O8~t()-<{qs1(}c2eM>R$?~SI%4C+~rFclpAy+|`MibgoXsBsy;&Dic`g+x+l zBpfdk#QaYnkfLS?FcX>TB*MI%d2VDH&J}hzlM(r}4SQOOH8Sn!tY?%CFaK3=uig7t zC4T8`7#lYvn&yOo2?_#ovJ42226TBAv4AP76mS&eAY-MopGO*mu%Hx1Fwoga@E&6a zj3igTG|L?Z!%RBM{C)6(KyTQYqzDEhWfgxmt)#>UjHggJGQnhKW*eI-HzflsO9xEh z^mG5(C;$Q!?JdL5qp7P?@~X)6Un`$=k{M~8`&AHkH}NkliWym!yoicw#_;#+p^Wc^ znUbrSeuj+gRR4;P3e0(-j|#_~EtTF`Gv9k_UeG@$kZ5FMrlF#S!&UuHzWyNxaIOGA z0PBCTyKzK7h7#J-zF_mJDo)!z~Cd&uob?7La? z-wMtDJudhE*&xZ@u-tA2u4=Ez?dtOHg!w(>b|Up%t+|KXt}g#hnBPNgCsNhkY|`90)zBK2LZxrf}YF8@xL-$QOEQs32@d&uqT^6!NCJ>+&G^$=pJ&rx%xZeeGj=EiG4SV?jg6EtG^@O_mJC>*mtw&9&)?6`a9x% zZ@Ju##J-C~_nO=;F8+&K_g$>IhukhM{?1t6LvCks z-^HqX$nE0d?~L_5f#XL8@gs(Z-o;^Oa&^*!WvCih*ey0=1e7Z-m=tnW3s9f^H6i|!$}o2$Pg z-uIB(k=S>$=pJ&rx%xZeeGj=EiG4SV?jg6EtG^@O_mJC>*mtw&|8I~304Vm^-}fL+ z`UR0435pO-at%t75{%;oI=+^lSi$hjlIl4j7iqL~R|tZzg|dsS zS92HW1e7393WUKp(n|4H07b4G187^2SRITK1ONlHPCFz7nC(FcQATi82m%%z!SMZb z;io?cLctMXku+XqDnA4u@ggWi!VoCQL&=o|z=lz100)R52SWfwNA@xPd#yACPXSU8 z$_Oh2G^@k~sOf>QFn$XRR+s>$VAmOcaKX}Q^ec>K8r-xjqD{x2>nPHRG!Ao(Co7su zhk>W^W?z>8HEoEjlmUVKcUOpJs=f9 zVB@@p7z`TeA94!-^A*4X0B`_c#})w~nRbbBx7Pq9-PAo=p9CO*bQu2ufJXF*BRH{K zPp1&x++zC8D!$H&cbJ!vtzV#FAc?xXY)4=t>?;6;^x%KT!AMR~CAs1{Nl?g>W)E;V zhT;nT0P8d~g5yry#2EoVN+Vsq?HqwU!1t!Fbw&7sIuG#`~pB2!Bo~PmG;Pv=}jgs*i^~W;MpfB~YyHUbg>Hh5?ihN2cjp z1{J-dK~DrJk)sSz@>cG4IAG|os~tc_e{!&QAQ|7mVX-{`1PTJ*4zAEW9xp~$!da%H zvpY#6=yncjgwWdOfFzEV$;Uz0pc9YZa>G-B>~RseNkzR7=SrkbU$7~FLmMsP;JlsW z5mKc6>j&pLi;AkDbH%@O25sTb8oc;_W|H~YB!5#CVro0)*q)0D0ca316M$-1{$^aw zD?la>ypY%KJ+4w5E)0hf4C--m{ExDpP5G&O$e#)781c~N$vKwxY+z=(Vv)Sz(Jo4j z6f{d}3(Gz0AX1i#f4Ig!DgN?Z+u+Ty2fu$hOqXfcxnL$zyqeGK`-0N;)cMcryNbhDGieW*085dCa%(AunwzPi z?YKUbw~q9;wtZemY>LIX^pRpvItFrZ3?_kd?mSzAe3+oS+0R!rp0D*lH+dc)2qqM! z@d$3@QH0>p^v5^p19U-yeh&_H>IXQx^SBAxx3e6R?$gtYG7qXNHi_1=#d*`Xji?2b z;?6sgCSR1En$V@rVF;bRFjRsxbkRbI-4La!!K;SRr9`H32o{q}iVz;1ZBt@N9sXL0zEr&%bBclUGSMU$5Rxsg9xAMSPO zuv%oddSDWSX1$ISLy@lEfl0ODT&$~a8`V}s#psyW@8&%`Dn_lhNsBw zwT0lR0I44h{S<%`01o^*+Bvx8PTmMfT814F@-pL6wid<?@kM(U+>Srg4!L=BcMkPufSO$k52f+wnZ>z7=s;N z9(Ug2A4os=x@|CVWYb(~@}LK%8$xuxoESUfX?yZitAMdmIcK(trOwDVm)gL`HJ`Qk zrywPMq1VQA;UYdYIQ=has@GTA#fcq18GjFXXdxFB-ugyz zZ(19lUO=Alio*WakWP~fY&r+feXtJAk7iXaF2 zFJ(8?g3}-5L(+4Duo>U%tSC+`_gQM6m-X7r>&*m(4r#b z)El5)rLhg1_S_rNG!xK)>n5y-9;!!i%-^Oh)7pIpXD_GK$m>5}ymubs=dP23cCht9 z=)n6})q*wIak;<-hcWsrj+>SuXXz^YEt7~0#!cQ zW5*lzJ2f5{`$_D`GGNDf0_ILoIxU#D;Mi$H@3a{%kpx*3k}fHNco#XnfPv$Hzgd%7 z`mH(d1nvFzw`piF4_1~=EEacjHEIi&++;&^p9)4;-|zF_Suzt}=-$};nDEW^$+?=j zs%Lj%@g}+ekfV;~eaa3qijJxlF-V{5dhOO<^rQ2-yoYRY`|+GN_or&Vs>l69jz5y$ z+QwmB^$E>$*`3qiZq?y3%|pX;S)H+EOMm$e=*Vz$3+ETqM199@hW;@+$KBv7v@m!` zHYaaI=4p7U8CS&@F<8cwEU1!&XE+oB-C&K6v*NGK=xULmiK= zyqkP`Cl!f;2{c7L<>fz}WG)sWbNWZbCkA7ig5`RESL@um)R6CYBt$!@FT=iiyz0K* zlUIjTCHxfct-2~tq`de*O$mI=xXbA7%lIQWXK6|Rm zsW8@r;$*%*UxGMG9xNZo4;MQ;I@RXl#$ot%tO=`l7g-cF)7sP;`JpAyb=ILn87y-8 zVEIbjE8mzg`yn!&~k*C^wduH*%1t5ySN6zQd1oRkyzl?UI-6WW-;r_7%>MM8p(y&jxW*S>s}`g>5T8c z943k%Y~%2U8cqsX4j1NYUJ>Y&G~o#N)OoIKxl*H%hQwM+MO`J%IbV1zDRiPsz+Iq% zoCz_a@_@SxIp4V!9zR+v3$1(hUX#}cAJiH)d>k5Zc+!GfE>EoCIO30nMmS82w?8XS zsXe?_TXqb#I($6OsirbU^z+?g8jg1?&HXu~j30meeSTuY@s`Gcm@i_qs<_ftWH_3*H*_9X%5OVa)bG{DP(Off$f`a|fhiJs1!z~2am<#UWuO2`?E z&OivrBsnpep`qG3_I+jRu$#L2OChkYNo~Q1>A1b6rNgwx1%CE7HpV`RY-~^v&bf=L zZ}$G9NQ?O!&*%0BJ@0lMbAHrw^ACsWg)_&$yj?%JZ9j(vSP&en*HE@gFb-af6h>;% z=w*VrfR%O=W$J!!HLEr$Q0Qcdgu>;#BR$~WOUZ;X1G_xU_Ux8NXi)o-$cQDtX-(7!4t2|%Z&&PLr_UN3v6j+E;T zxm<8c+W67&;ppZT+xkkw8~ItuQSSn>qTX(N0wY^QhHdSZW&c**+@6ezJU`;WpF65z z$BQ`ZsIOh%#j0($V357(5sjq)`x|m1M<9RwCrHxC*e45>|NhT7?qmt1zKkEOwTP3n$8*;|g!@lM&(%_a~ zRU!Q1*W78Wu-K!=qWoumD=C$%Wcpf)O{7_}*>do;=%2R8Ie>hPV-maf4ig@EH%SmY#<`U7%Q9cGB%%m+<3Dgl6PoaW1gwS#0hB1 zJwNV!g7vpAeVfUdH_Q0g!x*$b-E;&18YD^Z4wDpmJOSCQKw5ASu!d zpvCs@NH`9}zSx5lyU}#EgU7rvCy`|GoEwgJ+CMSDKd#igtI8%x<|{up)4BWQcS8Ev^n-)1jtl1`)6Aj0!qAeqHq|QK~;n~uO+`)m)0s4-~ z?@yep@RqgnSAJe!EvesRdUkI7dE^6*^Qkv87QO8o)>pYdPq}Htn5BA5Md=|<<9JyyZ8er| z3&}DlG)`VVOe+07OE;A$qGU<)Pcen&A%wgGeQhs$7t=-{S=A!3za{RvXluR7RDb4Z z^zo>;1i$OxZH#%p8J%kRwmq1C;kA0rXIY|W?j@55eGRR=V5*0_Z_q6v`--Y~agL0@ zvc8tOG~>797ZTT`H|s&Ur`0ZE{Z@qMB`X`vRbUO&!>GJzM5SqkHK} zS5&GqsB*u++h6pMG>5n=`Y!8?tzOxm4s{1?MoxCe!=sGT2A>D=SbRV%uZ2tWtUk$H zBehCXFyb9E+viN}WJ>Y0VzF@#v7{Hcg`W>A#b;vxFi}rssXx1Wj$e!fw;w=ODIrAj zbYw&TB&D+-s%#^vp9BUiqEUjMkukH4H*J1%93z?WkrJNpU+xT$2==s(4>W$a2IjsV z3mH1|U3LiLV56&*8maC{KS`1DjdvO?2SLuW`H^f3hGmStUsF5w)YIO%NecJmnTkT~ zC_nACU2o*MJC60gsN{GVsssj|x)Byx=B z(!b?$n0WpR*3V4ZE}I@(7VN`+OT%1L)vNom%H=KP7lN(BLP-f2Qp@vj$_pQIX%`u4 zY($#nKD8i)3f1uf=IqBPTy0HqF0gwXLb#Gp8UBPcejy>F%qUbGb++oq)V#&2)QJ$YrW6J@(3B=cD5`8)tT_T^W#U5HdTU(@HF`%QmlN6Sf{UeUQ zr<~y0+doFzZ;kw-ZYM|p;$TObOT)oe&po?omqh2#|e>U0=z(w&Wh%50nEbAssb7>ss!<_;-NW6r2 zgC&qef?ElW9=*Zhx^%cL3d)+I#bzp_`_d#JF$WTFL>%0b^YS)Dhp*}g|@mwdf1pL&41<#k5g@$@-;`Y-KoSjCKkgvW}k5|SexaT^bsL(=cFLyk!$k84rNx=dJ-Gcv` zoDeI2ruC2_lQ{Qf!5L0vb-@-@O^z?$BdwXlnW|cdeCVRmC4!6$Zr|z8o>qDeSqr$C8yOtXICgH)_ix9zPQNah;kxL#*}NbY+5Qw- z%+b;Ep<0s$o9w9;2#%USyR6><6{0PL(q#H`$frzQy9*T-In%9h! zYQ}}^=hvbYtwxTJuNOtekS*hRD&O@A#t?95J0ZmLl(SMo`_uVJApU@&la(+bPHz`6 zR@MT!z!R}I%qoP9x+V1qgrZWx3`(Q<_af^}rN`R5c~$s|>j%9iZ#ybWz+Y!DP{CCk z%Z!dw3>BQmY2zzATeCl$tz^2iF~$5nk+|FUJLO#E%;$?ULn^57FS;mxZ9PAp0Nfe- zY`;^)hwW=AGEU!~JsfN7jT;8QXbeX4*2PkB1&%Fkx_ja%+pY|l!NR=Ss)n5 zJ|GDb#xCqCmrLn(=1i%7M`{wx1}+>=&$;_X zL+q=g8EAiI^2+z{LZRbwvj)=PQLGbEFAua0ds-j36EgO9(?pA2a`}WIYU2Gxg>J4y zP!rCbTft@It7a%)m89B`7H8dM(aQ5$N(J%1I@jlKw~Zyg-KzRWW1vpz{2D{Aj zif5$Rdg#Rs87qP7O|8^4PpItFeZ^1W(NpwzG8 zfI*S%bLYvi0|FyQqQ0#ekNCCQ-^$i?gggtcExJ& z#n5GVG(JFu^wg^`UFMPyu@syTZe!*7NR~em6)vHU&Y6bgrdSBFfQiQ5dZZ*U?@9j{ zjm{&0y>exS_x^%P9(nMgqj6ZSS|p?Or&g5@^i2Hg_>Ye9ntv8`^lp@&5{f<`#+KsV z>r(YC{M)=u+t1*~6+_!Wrv;Vr6_y;#&lEShyXm_h(UndabH6^{IzoRS>F0ntChI;< zzhNV|`Jtz=`m_Sug%<6h?neOVT$xP@?ObOTn1i4KY8-avo63}jMkU&(}-0BS#s;+=PNeiXs(3G zp65MMC{{vGC)|=A6K!E3G!PZ&DF&;e!(kde*Icu&*sA5fad_XoKD%H$1@06fwPJns-IU#Wf) zsx%R>Yrm}H|08g;Np@CSge$8~t0|+Xc|$W=aC#%zPcB3nUo(A5!8Qi!U87SG%Q5P| zpzx)4KOd)*09KQPQvN;npUVsX_KfWA)R!oh9Ki1jq zh_OU^E_fU(kN9SzW|5>(!I~q(6#?mdbNrW@*tY%0UzqAIx0>zarx)5H!7M_qPwzg9 z?|h_}3@^B#o)ZTl`I45V7PDvN!0cI^Jkc65oEaprM*SmcUc3Nqz?3(Q1&r!9l2uPd zpd!>XquzHxBQ5)z39xEjY7wtN8w+2mxupa?$IRUJ+l^p%GG#Q7r zfGCKnm@lcMNQrj6MJPKmD4Bo7`+NEgUh2%4#2>jwmTs$Z}bD44Z_=`94-^0@Goj&|BRN&V$RUUVKu%ReV4k1y37? z(+?%Se=fpK=ck;6hn6cAO_5{(3T0YC3}22@0kGUeb3pAQaU_NZjiRelaP<~FQ5ydt zmjY9<97tv&=OlM=ieBhU^`>$^gzpv_HCKlI_0MF&Wbl#7I-e@_$J><`G99EHZ$IR zYdr7Y-of~>{zE{n2m%1$QwsXoW0Fap_#DR7u&GmG_#qknc|FJ0Gmr&AyEdhd7)}+& z--y|-$8+!_6z+_LnJvcGaN>C%jP< zZ?nA~U6a^)29{+o@R~yN`kUAOVh@Mk))%sbj}c~>S5a&MtDjpQs~LS0i_`vd(WX5% z;enB?O_{SrxPe=r;inIOk#+#d;@0WJn83|DCgXPdH1pKHY8_=vDn1Yz#tU(?v%sdF zCpYK4d8RD)kU1dG2_Pt7xh^xY6k+2{R^pi?+Kg!^cL9<3PHhRNMgq%XEU*M?H3IZW zFA!av7+>BdoNp0xYNDYw_=B&D=TI*N6!HKmA{)e1WO59Bw zBG2@soo%Aq7{0PlU`SOJ|GnPs(@EltY-gYqTwqB1OKf2}5cz?}9X!HHi3y)Vx&$`kV&Z{!VFhvw( zHCcsdF+5!XNq^TJ(F>`Ih=V_VCni5uzh^jq#FUYsc8gItHghjIAvrtesN?MHJB`}6 zXc1vz)C+0U9Tkf_Jp*ym_mLgyaq@7sEs{~?+?RLcEN<&-qmR`w***S_9Eqp{2#(lj zBXbNI!z+h?<)P$A^+r*#FnxYXTKQ!q;j?;vBf9N}WccCH;9iTc3`vCD^iAB0v}6q( zk=J)D$Vdo3fr_>Z;SRyrA-efT28il^Z7g{L2~?!9pYmVF!S=vmT+aH-^L%}f>GShB z4adIc<&_=p@U8g>QO}6#s*G&Ao)>uFZC2)5<%7a2tcM6jd3i7Ht2NQzhsqCMql(RJ z|EZ)#QNSdgdA*(qm%MA-Yt{3A8CySa#@hP!3u7Ji9%5IHGrnziFY4}lIrLEN*rJ-_ z!PiR$>!E;>zXBfh2UPJc=vnIB8xE$tBlcRivy+(DnIH%h3)F{wjvrHl^zcEvZ>6fk z)Wp+Ogt*da1Q~ZzlatuzdQ|?J?jo}I3i>7s0O5|K?gLet%S%ybk^Fjo6*r7~BS+te zoJNWT#MKBpOF`Xd;cCUH{V!Nys$*+$iw(=p0eMJww@-g3K5q-?{4e(2E2zmY`uj~n z2mwNG3C++uhF$~>RZ4(R1q2MecT_;s&_WBnH>C>*3MdE`dM6-A5d@K51Pe+Ng}nHm zGv~cIm+#CO=lwm&MRJpTpZ)#J+Ozjw&st$lfn+DtU*yzb+1CulMhdiBtP*Ud(N(i- zfg;L&oBzUp5p)Fh{Alp;(UJP_34SVq3l30|VS#t-F)G)6WB;D~ zO(|U3cVnCC`>huRQ!mWOUPmSvmUlekKZjeIYfbhp7^F3q_yzWal>)pPuk63wtP!g8 z{~fIv=%sjJX=jDTltE@LH_&a2Jo<uQ5)aP%7PQ&X^WOrHQK1&_qDhQ$f0b4Q@y>B@C*lL7nv$*Hs!hbkz}@=L2?x z^xHB!zU|Mjo}tHX#bdkewGyy;l4be$G&cY>i{0o_z#rV8V-KSa1+4RK70N^Vp8mlZ z5q@nW4q94wLezZ@{u=NzR6h#BP z-~CAKG7aQ*37J$vyN7B(6O-Az}|k2-gGtZ_+v_xs9i zbQ(*SyXq*&$B#~G`p_Z5(FXnb-38-TuG~Yd>~09Yn1@6w8B~{DyU-}Ruy|uhY%M^W z2OUU^=^v+!#kmT+CLB%Mp<-*5}nf=>oape$&P>C^^;J4Y>`OZ z2=v{Wr~{!2B2ILSD+ys_^%Q3j$Bn@*3B}#9U%jA^32&Y_@C|(N`{36xd7j?7VvI71 z({n83Hw-56MHfb9U|^q8^&md9t5d4V@Hh1u7`($YbbEjmlpNyoM=<2u>B~FM0U#^@ z_{jj{XjYO}#};LH=3_ASQcBQ7<(RzwJ0SxiW_&i~XPz#`B=aJ`77YAMK6%bv{WF_e zo?q;(ciGv%i>rv63bmieQ(m4OWV6N441h8Kr~{+FeTk=JxJ!-*jYe*zLjHA1hz8O*k` zcz2odyCr93SCh#nWO8r7F`xv94}f80xnl$fB2|Rf_)cthI;=Nc2M7@ZODX{3wH=oe zO6X`&B{-<4H5#mlbJUE{wXI;nIw?H5s^%j?r3=9I3Og%0b?J^u$}b}5owQ3$&71&? ze34Wz5Hl@3C|0*iP}jiPQ5fgk#2Dpx(=B2CcH{BKJKwfbD=}0?x54btp-GmI1!!Vx4~uYr|Gsx>XvJHH{X zAzqBN8<3EVL8FIE2hTI5h+QsozcIljT`&e>Z+|lVWXY$M{smGVaZC@^KWVFjv?vV*2iQ^*!lAjl1HlIwN=gqZB{B z1_5!F)UaG4K4GUhf9TnxRLNUU4ov)d7RYSVvI*}F*u~4{$2xkJAf57e=@cfZ?KjrM z3@T~DsbIVX&76dUA4j^ zqaqUEPgw&WwOBvQx5(8l8#(uaztcE?wA)yliXyxg`G4md9V@-Vpn*>l?Bx80?$6**sHQ?Swa95;Wcp8q&?HBJJmN z4l<%T(dMGa?q*Kr=e=H?Bn;E{&eEW&eNpUCR}{Q$JTmw_`39{b`I~WZpxmCx`~vUn zkg5Z;+x%T)W4FqM#NRCiX%&-ZGtd$9t2R(u&6J8tn$j)*vRn6`ZhSJg&Hc<`soGgu zLN^BpWpX49S3y?ZbaQ_(Y;v$Cc`co}+PZ2wh^IKq%S5w!#pLLQPT!i~67J&zR3o5N z6k_`p0`!FoUjr>}-gG&E515u&(NhSbM>E8X`ZBDUKSxG#7L5knCAf zS6I$eFj7b@mM~aQibzf4(oau-bXEXFjln7Tt$-LoQFa$xH)Ak6HL9_)fL)u}Mn;AL z$)UM1GjMc+_2?7FS+q5>%yDYd=xuO-SFLUz4KM8K`&$@+?0g+=%*O=xr3u9vw$zRumehTt#57**K#G&q?kLxb*`QH2sv;)6 z>{y&MTX_wQeV>Z;Sn=W(#jV&=tV7gr1ev_n{P1I@6}k3Vqd}km)Q~cH|CtIio>xp2 zXZ^!PFT@$u>&ySd=?=Hn*Ri&L=Ea^C2UB^35zkfaitTSWIg!+np4YA zJ1~J4IP^rLNHj3=C1*ZdC2x?R5x2sa4(-8tzs-yx)pkniBIln>!f0<)2m)h-*%_Ue z41y&#kIvF56kN%#PMI-(ksE>aE9vWT&0ilk)7cJoTnT5ZVdD4O9gS4uST~BP#d@XP zc1!)({;Q($EI{a0PWrH~p4gqDP}jIEbNLqP+7C4Ye5mhrnnWy3L4|P_9xN_Pg@0{( z@ig}=7IZQlcZ%$H zZVv}cIS5UPLdw9Eu>rX8$jBH1fD+MLOGyE@(^Ru&N-#%BMzgft2k{CZFFYpbOP3eq zx|)vP&q>Opt1c~b?Y8*wbbx%i?e&Q~`UR8z@gb)z`R(h9ml>p2{OBIfD;6pKOa>+q zr4PLx;F_6&W#vNa_V1s5Gz4120C)m`S;h-LGYeVV=nQQ8-8b|oc5D5!@X^pfSk&|Kd)K!ux*<;R`-wK15&f6z7erjU^ zl6WYq-7>w&}BJ3eeRiv<0~!y z72~v>GZ@zCK8JT^!VB`H13Y7E5;8oti_zE&Gk4_@=K@I=(IQFFyq1)rwM}0ABKkmv zB4<}tZ5*v93&H)v==)+SqDN2-AK#XfZG+hieSutN-s!8{CFQlIt5?N-+4}}1wXPZ_ zf3fYa^nUrr&$eW-+-gx}OoK&k>iO*(mOr_&7H@B^&*`sbD&F?9lrG2~R7p`1pMEy# zZSnm5ToWar$2GnHUhyRQ%U|R+iM?~$dR%$(4UUj)3fJ`3Qs_wdkL{ctStr^#=UR41TwCgmtJ{n9cg@ZSuoqV6_U7$I91N z%Oi*^^JQWS+*=(eUC%~=WdShWL~X;cEG+qj0K}ucpK!&Fgv^N?_+CHIYWVfKTAotjd`;`;oky3E_>!~*#egRu1o@0cAl;m%9$gMX! z+}IU(bx*RvJTuWW-zP@1)nj^s3RMnoAK4@e_fcq0pcST(7*69omvJN*eRY57+pf9lhUBT7wLd zQ5W6M9669S=zmlEBKF%vA@55ZL zT>rrHyil)@0i3m-GrBYv7*&=jBue5H=Yvo%m1qU#^lwx+SSTZ>W9e&LhAVc! z+2c7N8V-1fUcE05ka)V7q`;+gKZlkVCv7lFKW6f@`IG8hx4%?YA0Tkn0~z1nzx_Tka*vw6RxGKrmOvfs$ylY6J@olHn*UC$FO*=Nu- z1iyB>k7<;qcA{#zvZe}KF(2~Hsk`WK;c%4kns$cR9W^>TtfMeX_?!|$T#qqCXQb-J zgS-rCwMGrpKH9$X`POrJ#jE6#iQo6h^(Y#!7O&hr*+yCc1b~2=!85KGe=XW6`H(f!ja}-0Nz(WcWlVKzdYsyiUL*t_HGEA60 zNW)qn(Aqi#2rBXB&yigV4YT?@6vxHi2my$Kk?%?%{39Ixv%~NAr)Cc}Ka|&>Dz3Mk zAvny3UsRm=`IY=06wuU%|7exVtF3(L=kID3z$d7<*YfMd8~(9RqX(ktnBsE&%^jY_ zgVZ0Uq{X@~wF4igN5h)QJaL0aFD^e?$V=@+?Xt+IZcgn-<_JdF%U#!XChRnvAc@jH zTN>c}3av>y~M895hsmNZk_S@vBEs4;IpZ%Em^4-`P0&5pwJVCPmW2TVX)S+BTe`WiS~D#r z=EaPcHjJp4UF=N&f1gwK+sh9>;9aC?dnYRj5F1?Eb6yJgUPDFR4}Rm}TYc(%CPu#Y zhx7(9VEeI#oB?KhJ?ER-_A-xGF3*+&5o3h_N?hP)G+Kl5*{A2RAVi)ahC9hubT@X5;(h8{^6|bDhabGNay0h{88SXW3~$-=kDlvDhM>)rZ4cUgZ^=;n-i znwpFmznU{0?_DqI&{w#m^=fY=@g;?(DZkm#3!2}bi(8T z&r2U4C1K3dtfkF1@MRh=Td}ijB({tefsxJRg_dbm^r{Pjv$HI zKey*RBkQIkxjBA2sBW=vM7Ao9|3&Ugyv}>~?pJMc0frRN97oX*cz!aKvBzjvdQvH6 zT=KZUqGaGc-wwc_l1ps30fVuG>AokD4n)kQr(}ovsG|GR^P% z(?~oh{;b_xb!(R{De|V@je~rM zzkpGRS;!BT6r&eing;czhhoGY$Uo1FYHGefA>T$J__)mF>`p8rRXUI9NUbJkto8-h1r(>=Sv&BJv{gF`>VxPb_a9xY&c7P8Bc5e%=7e$_v^7l-5 zy>VG6a%vbmJJj@j-~)Q?(1j;4Ix3h60BQhqp?!J)umPs=cb%a_m?cSuw2M7#g67b8 z6%E1i>L7H;h;-A}t{(#&H&^AG!fhlpvf5=1L*G}JF4T=UAMRbDd1MVsxMQ=XH_LxZ zB{PPb{x|P{jJKx7h)Htjdb-VV6s7p6fR+5ag&(Aeb(J*FyLu(>T&l}zF{036;RFZ!0( zR|EDY??lZfLE@$!_23y2Y3o~1oO>^8bfj6OkV{%h-VQ$)}%4RNLE)gNR#ud}woK;?3XD{W0?||G9lmCbPk83$>|Vtq zeKAIX;R=hNV9QQ|A=tR%`TP-tJ9oT!hKl|pab4%t`-j5U`EQlG)H+2H^pGCeX7W&B zk0QK*?4lIEa_})xJ5iTWG?@yiF%&gkzH_iYCt491qpSFZLf-fR|8Owt#t^5ciVS=D zutDZqOXCSXeJwX=xe%kb6fM8*uzCi#>V$OXlCG9`vHizKGFPu{RpCF~5MZ0qoqmga zOo`BZKC9h^k=Bt4qVSc-Aw~cwgRBZYzm4ebmHB%1D5>q~d6}a1V(-`_Ko=igHfcpM zv$rIEieVxja=r9@a`<9`ElG*~xBPAEM7yU)4K6NnZeW^fnfw&t(wz%-Fwf<9OD70L zsdCqz!fjr$rb;$(6H4^Lg^UM;OS&sU+|Q_a!H_`vsBL2q_m(fArB#&Bj>|vIV$c*%?d4eo1)y4 zRHPpS4%kST?Ge;1m+%8qS7QdSKlGlI%b9vA)<1UJ zqiaeI(X)}fnfZq>>l?|I-B$w>5m9*bH^?2)Q3-{;p=dL7y3D`zQmsdsyKQOT*i~xC zgT55XK@3PmXwM6A2u{1$vig)gUsE&^NJ}Sh$bY*099RO>^_8aZ_y})+<)zP$I@cg1 zGWrWE<18MueOv4c^bx>9jcC3RP)K}ziS~@Ttpvd%ind z;#QX};=*?wRhV2?Z_=iFCC)Tw^{;o9n8q3#q372GG^2>D41gpeJAf&M$nGR_J#CGO z**7C*oQNEksWmJ6ZqS-wmtiupT=OdJ0Q5V*EamFqqH1HjupWjrP;{&0n)&4)dgUys z=dWniC+q^=jHB(kLsGXW;e~T@WeT=d9$eUuo@Ta^@h@cy^g`Z6Q7+*1d|ijur;A96 zP26`fH8>jPq0-PKRM_nnM+wW(+U7QXDrA{Lfevlf-qoB#(WGokg|VUAZ^}gYRSP}V zyn@}djj~%fSPeXpo<^Dz^Vo_KJEnJtm3Nc z>`!`GW=l<_wiGd_uP2ELy&&ldG)2+18PMI=*tukG^Jc2aiO`rm^;q9P@o-^r-*Y@~ zzAW3EY;)no^kQ-~C-7|`W(~`Eoq3@Qho^YZGri)J-gj4?P<^C+am>FWKdr}DYY0tN zmd@17%gwP8Pxi8;SYbkAxXsv|OuP6B6{NEA)y1DU$r@)Zt|{M3_MTS$UGFI{tk)uC zqci`_by3w2Wb;@UD;@ZlBj!=jEZ4Ap)(7U#(dz>yI*DJ@g5Ex30U5cZc=5y6Mj-TF z!pi|gasd1&jgD2l!89Q+z2o(nDem>8_W#VQbdbGpb&7mLEGAmniE@<_F}m_Yvf+J# zI-TQ|JTVWSs+%#-DaLG{q!3?T>1W#Nmd*)NZZprAvq}_fEI@+U^fEkO7-O{;4@0Vn zh$W$Av+XV27!LzC2!TZN6^RV0Sy(?hb?I=k zWK^a=T2!?Gecg4bAHj-0d%3T64fFM!E(zP=uzNbs1uclOLuV=7VTFgl+O+k02i zYE9)v029ZOt9C5+U^U$B5Pj zOG0TJu3`o#=T)l_YyB*$#?j=|@P-$LRj=%QwuzS|q(mE1$6Q=P(m+|#OwM9F_UCc3 znzD8-nar&M?Aqg*ECOM+Fl9Ci4;s#XoM@=?yc4d>xCdBGnxaH#4`TwTEr_C|$_CSD zIag-|APZ;R73<;J+DgqlOFa52JX(Q9D4>_r&uZj=Wv*qV>@>}9QGA6@UrwWrR;I=> zdhw{fxaL}`#xrCntHMueZMo$=Tp*84M_%n|bY-_ms4?9Z4djg1*-zRI*8SC!O%0AH3+?Ab(D% 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
    rK`7tz&D|miKGU8qWqXn@gK|`jg$3 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 literal 0 HcmV?d00001 diff --git a/assets/inputs/audio/multi_person/p2_mask.png b/assets/inputs/audio/multi_person/p2_mask.png new file mode 100644 index 0000000000000000000000000000000000000000..05c1265091bce025deb000e066263e7fe8e733f6 GIT binary patch literal 3856 zcmWIYbaUh2XJ80-bqWXzuu%BJ$G~vm5aV1%tp;`r7Q0-tnVw6Ol@=;^Ff{OXX68LC zPn32LzV#*a5KoiTD&MkOdIBi|SA(**T`Xu;Xj_$I%a?p=rRnXA9gY*6Lp|5scEzr4 za_qM57D*PUUB*K-#=WOE4S$-=N7&0LsTN8V7i-MQi%Mocr3 z;cg|QmLm)55s|}EM5~2)x?!2b6^P$3+yFNhrWPKMtOmy*euKLgw_13hYqps}{6>V@ zwp9?1F!~sdM$#dk(MTH2Nl3-lXifr`+oQ$ZXq|+p+(+xA(S`%4WjESzKx)#CHXKG9 l4kNYUz{SAu@BeEChLZnN&+gtI^1-a|C<6muVgSSN008B5BfJ0r literal 0 HcmV?d00001 diff --git a/assets/inputs/audio/multi_person/seko_input.png b/assets/inputs/audio/multi_person/seko_input.png new file mode 100644 index 0000000000000000000000000000000000000000..db8bf104725b83ef60894f50b3211aa85847f373 GIT binary patch literal 583852 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

    l16>CK*6-S1w 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%0ATS^`Ghs_P0Q%2nDv~AwXzL)z}xuk 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

    ~-2?1hCXo@kt`EGQE~S(J;FEr%8E4z1w7 zu=A{7DP%1$K9=7%s5&L*3Dr4^`{tVM%E#%N3d>p_l;8{tY z6>!Y08J?VUIozNr!%lVx$jZ%RBw%Gd>$hp6dml;@kA?%D2eOn~ z*i!W+PrQKo!qnyy^kJTEE&<8r1?pJBcuJnbJQ!t$>zn!)&1im>*CQ}u2aC+AuQNl*Jh~EeL_b~;UE5;~1 zz4t80#I$OpL7Y(^jRJ=1C6x0JbT;P5>a;0Xw{Z!KW9l7MuPxhYQF2f)NEG)5*F$3Q z+X)!TC6N_bXL`_iohkY(riEzSqIbUp(Xq}a-n3&Jy8!-p$#3R|(>HHK!NU@C)gmEM zwVt@_rI8dXD2P`vuRrs(TaHuO{u-LYRNpq10`}%tmcZ45f$5-0yRx@Mz%O6E`27CY zPY~5QZXIz7xWo+d0Y%oVM=zWf3O(ZDT?%mRi{}apCmyj}1e4nU6T`mjl(Cp9;Oh}Q z(dmsxz){yc(QQ%u0#EqA@CA=Q7zam!X>~k}$UpkDJNIIAYOaREQb9;HRm=e!#BXLl z7Df%)ja=}+{lLWUQTx3Rff!Q7uWfP$V&xt_Fsj)$S0-`KcSXe5S9q(lh5BAehJUxS zN1_QTjJMs>ZQ`)Ad!lxtx{d9;^agv1)-5>t7DG=L3(Hf>A^EtspIWvMCr9i@sT1!~GQh@mN zAr5RUfM8xhHnxIyw&(7@-Xr*B`kH<8T0P}1_^jx&{K z1PIn?UsbL^t5SXOszKk1vMFE!)GPw#zAyZXPOd4mzHvHIBye>|0dpk(4}ZR|V*^5` zWG2{k+-R=m8#8Mw2uEB(x>DHrZvy@uwAo#OTjx^YpNPJn8%n*2>3AR&+Tmd8SP0x# zgws#>RgL>z=@Z6bF+#b+h0SSnmlF|~^>HXzk+w;tV^+WQsnx;!Nsujmh(WyNWlX8bJJ*=r?4;q)DR_SvsJfpgus1f@lUVmE z_3PZ*5mi1no`7Xk{J;gF_30+ClKVgpSmSU%P8Ql#id(2#($SGmfNKRBKuL1SrfXsR zql;sM7P_~X=(RbcXm9u)QJf))h}SP8x$IhBBi4%TeW-HGuPudiaZC<{<_Tyi;Jguh zO^YczSUUzp?b>M)(?{lYj3{6VhW2$A|0}x^*jHCqH@6?&zJBxiRq^jHiv-T&No3%; z(JyXT0%vm$YNs4a2!0aFR>5Iu6EOVC7`J>$ztST*XApk&R#=74=VwL0msh(>*@WL+ zm1Cd}UC9e-kMkaYeubOz6&0Qa+#Q|0XxU1{y|SK^L(UCR%M+kpr1iV9lV`PsLmqe* zdnU*ZG|aCX%maYFRfZZ5aGw!!vZqjygnlW8|Jny*7T>Av*bc6Cqhqjqv7*SaYI_hPMdoJPsB zwFJ@XHw)0=UYwA-)->0#E$D`&rJK}jtS~fmUXu5CWS)-*HiOeP!I*gW7zvnf&k`() z3%busB{@vyVG@nXRj~yK$`@k_mEQxF?OWXGBwL=)Rw`K& zBtR|o<_}VoScXh+hGb^m1WMICW;64eR26HHG_>yi{vW0N7w5!1VF61OTd(cC65TyK zJmSW^$i$KdC)NtN>^WHFx5~lY{Xw&!iFUv*t!CAZ_(<0s3Rfy5xjg0yjD6PFC)a$)tjE%0A(!HI+D9~ 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 z zM0=vTf_Ex3(WMZF071Dz5x7)DgtI`})5S{BKg+gs!s4WFSiGFYdIix{XoUVgXEOpn z_qmz$}zX157TSyy&Mt>H95nDDyJKhgTc1bh$nZ;yO%AZ%YwIHm_aeV zQpuv$1)$RxjP#7Q(N;cQLH0=a>uRqLmf^O8NMM>{iAde?M8v?Mo%+zCcurPPa=idJ z!rCHXqv&K3=5GODF<>hwIz@uqA;H|TE2X3FCPAV5r~OEu_r`MlBeV|s@TwH}W%IAy zB~KY}T<0O8Wj0htR0d?K&5d2GUH*G^O zig*pu`G02BT`t->`6*coGCuBbsv$CBAMv6HnU?G2IFGY|}+&tWM2q4dd| zCK9aScU>l~`>agxc8_pIA0x1K1eUOC2CM*85k|tp=RF5ZVMhpT2P;!vPT1(lpnNc+U>=S;go z2Y`jYnhAcp<&jLaEx3!QNiVhUj;4p>oMAB&H*boV&2|ayW?Le0 zorz>14Q0e3I(_I2$1v`iGcMDnFxizj6<`x z@ZU$Y?1aTO`Crkzn>{mNEd|z~U1=MVU#Y-j3S(OC1$a+}HGCj%^Fq=R3JsbXNWWcQ+9;+2J;)jcH?peq^>M`hKsTc+f z0_C1u@~`oXO1njWrg)vjP-prDlp29m^onEzw7wkVrAFH2Uyz33_RN6yQ?;#gIzyYfW@VOVC{PDB^ zIP|sJR9Oz3Kv(QV=}W+kDUPH75$OTvwF9PszbbUFVSu*B;#k%s4y4jksZPp}(ZP^7 z3CHGM(4K7>84t$ibs%g1Mlkc`$)P>0mv4MP5<;chN2`E~eZ8fP^W;aii!#KGN`PR4 z@G$SIrpj~&Pv07W^J8|yhDP`X^B0L{i9ueSNKh?{+^Lr$hQ(G5xYx0=S40v)#mU)M zwJ755|NYK|im0{IIRaR<^amQIBw1F37(b^_^iYp(4xRr(bpu_2Vx9Ivx`y3s(4=+ zsJI32TWa9jcx-#jFVt7$_HL@6|3bS%$_3Q^m1Od325bnPvlLkpsuoEgD{BS-N~l7T zBY!-6Ok8j;NwGVY0#ENp#{K@J++kXC^gpQD6`l z2u@mtpC`dE;F0=HlK%dk^5)I4A@SeRW%?^Y!58O+9jDBGT`i1ufkpy|+B;C#Nq+}xwjiM3^I z3>XBaR_1&=N9Fqu+0F=zVQXTDS0JNMUK$yKc2537YYAqPf#Pab2OItpY;ui|Sqp*z z;f}!x7fX?x*(=ES>sX$iXJ;U_8p`M{U4(D%Hp+JL^z^ixpbLQU!P27iUj=~!zd_(+ zmy8fh!O+{I?Lez?q$e})ah<)b*rg>l%52}53Bue@g}eWtSjf> zO-y7Oo()zL7-ZA*Z;%)I3t)_Mz-Ky51JJb_*39mTe}-MW`df|$YJ;xmO^W!=$Z3E& zl*Fn~E}$}DkxTkL%8oo;zyMuYK~!S}08K|IE;y@T%C$pZFu5bKOwY>0c2c_Hd@j`? zYbVDiwIyB$O8LCZ=jh;&j`8>Z#>@=(&C8Lx?sQNl0$dtN-%Nn#N7@q=+Nt>qg9E{o zH&EbGPXh15-cF@2g*9BP*tzdsJ1GA9=Re(jq7Yb8N@}T1@HYxEwU3B`En7003wmIv zP}Pz!K%fNJ)fgzXzW6D8X9$8#ic6@H`e@Z@TA+7|(1C74x7}^hkNC!on^^ob*ACxj zlCyAh0WjE0Sm&w|9z(#(c^VZCYSN-$Y7c77D|ezCWQ=>&Ys)sG`>i)-JRmR_JW}Ap z&2!**@fmT!tQDu2LlO)0EvsDk3B+c1A}>9|SQgiSv;GZGaj;G+8G`^gL1EZ_6#`5Z z8v^`+2r&3d9wZoWL2!#i3+}!)@_tlXD~KGRt+-w+}HDwUVYTDx3o*9TV*E^e1>&)5Dn*LpAC%&W7U$Kw97_%vQS_uPyez}=mp6W zCn~Q%a6Cq!asZJ`>`MF+>D52BGhmF-7yO~PUpI(Ph8F=pHo2x44|$qg!Y0I4dqrjG zCx-zCfH6FGt-H>DCe!T+@`cbIB|ccjVYfPo)pJAHtFk-%EG+I|U6S7=-b|*~*pvIW zEMA8c)TNEiz!{7kfj3^vqoyE}Oy?teAUNrm~iS(iPNbGh9PAP*J!sGtz>Zs4$ZjLucX22k?yd^wHRHA7zijlZc zVYWDGm7Mu6T$PkRqNv&#HPzZ9(R9Xti0`$hFyJS(3h6HbV9@th;=O4K&BK7-GYBgV z);V0D3w|HodO!pKPXc=c+S9YgdrVAbCfh{LmDd~XCaV{1R3UD=R zS{7CM0((cx7K9pp%N9{PD-8#h0OUY5LX(!;6kvGq@v_fc*VST=MWZ~BsV&P;SB78E zzYp7DMS+uZz&=t-3*o4d&gWq~4s8OwU~oipz2d`xWE2QhWt^3m0qg8Qvy2~ca7?1P zYUAmY&VWb1G9Y-sCp}#T1v zm#n|RpT79tH3MvD)fSAEjxu%|w3bodb*m*h0N5E*!hnUnlJ!<0g%v0=epHH5Abj;t zdzTDD3wkLw!Q5n63Ii7TwH*PtGkY**$)QNefORRI7;1mR9%yXYseWrioYy>A66_A+ z@pskL7y^B8N1t-oB_q$JLEjx1hC2&?O@ZZ&2m#i5cz-X*kA_5<>f;t4$l!NLdYQK=?@DM?WH2(bOmP#XkBv?B+s@2S80u5sXEX5uxd!zfe+LJf%03j>}aeH^Pp0X|mLE0kOL zDTzq&WIYzGJDLC|8ISitNr}1KDsIXpLAA362N-(8e(m#IdJ-oq+kh%J8uR`JXt9(^ zg=-d^pOeci5-dxcH<|zSb7B&)|13Uoc76KBj08bo!H{{NVQpM4yY{oe#Vtd~eRb|U znOsUi;?y;ID<>aDpC(u-X#))nI-Qh3WyV2hihmL2o|2?!Q0)h zJdH8B6;wDhGpcbOF#Yw5xA-2bN@_?*RC}cIjsviaX9~?Y z7ZS{EF|<4TT_;*J(kFgxBxgcjti?GOctPpj1UtKvh-FFU@6uQP9=7tlJ!?fADOvBz zmLdkcJyjyYctHnn(|&VkXru42k4z+ZFOSv6>(DP<;rO@)mQs*sWJ(uJYV1_=W;_!{^}1{?$iS0nM3?(SFYu4tYe z1Hc<;K9o-8im441vQiS3H`(HR{)oWw*Gkd_tI2ODumGz-RKE`q$iMh6H_&SMQij3bL z<_3N1p@yJe-Jv)guw9^?kgyvtSYe^j-wJmbh&B?-NxF|f8=GI3eEa?B>1jg{&-Z0b zwXl~B3~0#E!1bACde02NZ5V&0zhsp<_IZ`h!Jvl1##n6QzrK1*$y=fU?K2h_dBWGT z_G^)BY+yI*Nrk=?H0kKWLd_aSvfAPIghq!%pv$k&crfE{Zw7uhy+N_GR0V&KR!b1W zxoEtdxpo(Sjk8$=6-cLhL}0b^lOQ<~H8Q=#HO5%BGC-0*6Ya)Lt~3z375GhH3s0qr zPts{!OT?>_&esUMDkI#rjHw|Mn0rZKjB<%pIrvL67>**E+@3Hv5hr<~3j~*?j|&69 zzK?epgl+)Lff|Gc{!D=*f#9ik3bc__NNDe(NcTao)y=)g8w#93Xtv<5!%~+1PbCSq zdK#<*i!7m8g8s{( zQB@R+Tv#ZWF^h{td}_7JbR}RynR#ZCq31f}$V8Tt)4LBZ7=M2q3HG|_UNjWA%>fez z>qZUjR6>5TF(66^4D`OXCv^Dl=!wNH7BK~e`Zg@)9QBF;SI?t64_-NAq-TFbauaE6$Bcp?!W>~-_>}V=HjSpFkOwK*uIef zn75R}UFi@4=F>I<9;0;V5sb3BG9%aqT>hS2!09~Uz;E`sHyW4WfgPGPu5w5xW0d7# zilP|?EJU*o9$hL5HQkvtM$)|Hl-x!z^G;qvwXZY11@popVBa3Oy|0_8IkFn7_i&iH;LocVZeU2Sl^y! zt@yiCI%`#(+7SaT0|U+&RX&-Nb)+M*^XZxiANS-2VYp?5z6|zYH-}kOhsN156j;F! zoq+JDJrO?_7vx0WTm#_<`zbSIAqQiH2L6#F^sTK5>hjF2n90iaeffkClxaODUDL<0e~wE$9a+=-FU%5;F<*{Az?#cQW6?=sRO=HVJ3p%!)Ry2@wig+ zdwSCi{(k)G!9!C1fBop*$q7)<2Hr{~xEzDP&VnPT0~-XV88pTTE96$B7yRX~ilJL` zmD2d}TKumlar#2cnHO}AUbH+Fp{^h?BDzM!VV*)(AXzvn)N3e+2%*ATm#5Xy4DAmk zdS*q8<*x1F%uP&y{{V(E4xO{Rzg89sN8;{`&6?lkICwlU;J|OQM&(SVnmDp${xtKr zJ&_*`V{ceyoA9^#^_x_~dRb0eo6u}p1cWYMD)C*0*c#a1EOvfg6>b8W`oH!B6eCLO z-pL%iz%PB12!46KdgjY4Fc%^#4Up#x&s^d8$^8#I2Tt$}*VU7bX`OCRF$C4Uu5#uc zW}CD6f&Fv9s0Hj@qEZHeg~Ce0hB4}DiAR~)`Kn><)f$&8Q$E$)s;b%rjBCFjX^6b*RQ+wckVU=uCz3O(zD1%>~j z9o7I}ia;2{AGz_)BEXHS{h>Cr=gdi_goyqFs3~xjGQ3rnEMIo7^DVdmjV6AgY6>L; zWhTF4=)*n`Y{}^JNHN17u{LW8tDfKHT1wI1yl&wj7UCfUMpKU#{apV3|cc1Pzp7L?)}5#l{B84#B~FDducs zyk5)T;Q%f#!4%LVhXQe3j6u#Y>f|wb8dG8gG-(w)SWfBjI5-?fXv72G_B%DP;MILx z*mgq*j81aPCfJFcz?Xt#RGRut4A>hs$KQ?whXG5jd@v$#lacqL%mEKU2?W1_SxhAD z3K;a^NB2&jJgHxr0B{xY-Y{Hbwiq^}br4vPmdF;IVpkr8qg2||S&W_hXcq(;ix)+K?-T$t zj@t9a%E+;5g>gc9{=!wn5<$Sny(o@`P=R4*{?Kg_7zWJg$=J?0vz+b7n$JK&$wfTK z5m#9kjK9?b>-{_05(YPW^|e(nA?8K~uaPkvEI&usOvg4>Oklh-;Lkx{Hdu7vw;t_8 zJ2Uhn&H9wiKQl$Siy`utO1?Ry@UzUMt_RWAh*v1{3_8=Quo-ajOrEw0d6^o5q~^3tz3`W!oYVcG4F2^aA9;GmKL*PHuc zxnRM7t4tVd7+$ggBUq(oz+x5-tYt|C;AAem^Pu4OH`ia*2=w=iKs&4;3Z^1wDNm(U zoVlR-48cI}g1=(G;%`>YKht;H;HqrAqm|sfP1JJc2kH@fDRRG_++<5T21Imr5O z+@B@!fA-Id5a3e1em9+nU|~p<)#$_%mdZUsfU9Luj4R;RRQ05z+a!vfY5e6;{HbuF z2~>?Lh~Zb_;L3*KkW9)V$NFmsAVZDS7#y93XO~IWC9-3OUW`OfluI%3Qm%@}5A3S2 ze9Rqsg;xEk6`Z>GuMt>ROdeq-*pSEK>;v#q~dl8 zHLpWPMEh5B#}M&7!kLj{I`n`{El&v>C_ADD@#CTtM6TYb8L%Rsmsyqs(yFSIBCs_E zCk?s<61+vqdiu8e8&Y@twd-lMK=&<$jV${@VEbN10=sgOiTfzEp|_e1MA_`4i%Lef zpZH&?p#>rtdzKXRmN|LCB=BW&eRv(xKj;g6X-^k7A5#)uJ%3PB0T4Vq9WCl=1C{FRqo`cy;H|U61e^fsa=h@jVx~ z6@OQ;Eikf5M_`S}QrY>5Aqb4L{welbDg%@mcso%AZ#<^TmJnINUY|}y3HwE<5f5Gl zb$W<>%(9XNSt|NGz1pxW4`5VYe6h^hD5!!kOFR4`enm!LY~UBovKx?+BG9)a8IzMP zWZe{H&0mS%_AP4+0X%i3l9b!8aT&1dDPNx6S(NqSt5#rJBEBY zu>8kpJX>~6^h?!6uNkl=Y<<15FC{KV(hXvzbRg^)g4yv5unI~ix6zYpet+o1D%0bRtlN%&%2lX4VcfK$z*a(dD=+F@%vEeuDw|Kxp zey>~9;C?`Fd%c7Qs;`~z>${luh?CrB4mhA1^o_&~dWPV664=&MGwX2!zw3Ugzupbn z?wxTlN0X&E61VIfX^^SROAukR-|%Ef710 z8MI3SUh2+(u_$I7?OW5DWKKgK0^HY0%4-HI@gQ^+qp%>j4DGW;&8|L2sR0M8mX@LToQcOKkmpUaoG3x7|G0G|kuCcma7_>;pT1HoC715}FyqhOZ+ z_nDX@LNbB0fB?RdE1HT zq2mgl6~!-~LUT#4Yo~8^L`-cn0ZajYx$zQ=}9m*gs1U-1QuiV`0Gq0%vU!zy1Ti3_W)lC~sm?Yf&_g zDfPv2?{}vs05EPh%D-<#%u&T%=fP+pwbfCXg{O(0q=TlwJ&nt*1mjUaxI}lL$XHz> z?B-(X9mLKgFtD$v8f?`OKWQml;_HzjC!nrZBCq@^Idvrl?5t)YsMkN#=tn@OBrAcj zwH5qIg~FKzt^+z=L(p7Z_BP&K53ig5e*C-d0pOp2UlTQZ1FPWTGp@gVETz@qLy2o; zfL2qeWvJLeC2WAy@ZmFKus|5N!3IbY=vdPkJv}9c!hv|^@a-+xZUoa2PVe5usGfQT zp~EHn*M63#YGmB-U)senBee|J=o?|j^Ce}2yJ==$IG#CNJ&G4ocLdhCbH@L9#d0PL zG+`GSzq5Zo9qPZQ zy93&r@aq!$od|ugt%1zh6`rFp^l7|L6!@{%zAcHxvtsg4Ut%ZsGz%QrgNFgruIyxw zqGk?HcsnxYx0Ng~o`XqXc}HgfKJu!g&#%h{AFzI{h659JqV>bXggZQDq~g zoup7C_%^H%9szsg%uZFx|_ppcO{A%bpeO3o(Tm3U+Kw)Ty?bEs-Z#RPxNfC14Q zmniWYCBodV{jkrL*!ES00q0}xZ%$amS2mBR{MKPI*3j~9% z$wf|~hob{{Cz~4^rBuS#1u9P=6jN^untZR9T@=Y6VFGY)I{^5!Mx4I7d&lm29!xwd0)&^mh1Vvx>wyLPszd^ilDDM49tMp!$R@plW=<3`>OV z9w#VfUoaCWu?P;9854|@4uQOeB?Z4`Je)WQPsWRl5@$;2X9lPPMqntpgGsPSC3dYc zf0Yxo88G+7YIFq*R-aK8GyE++w{=Y_UO=LQz7T@i+AsOnZD#A+0$_X?`Kb+N3Gxu&3Z4C` z5}UFW?OSwW&USV~NNAGfKQ7&Y;C^Qp;chIOiE!{WGOdjYgQhQWIpPSW^-Ygai`seq z>ki7x!LxN0=&)BVqw<0-wFq>riv70M&rWAK!}dU~OKx_w%Q6RChPFV~KpJ2d2D>xg z{ZCP9BdrIbb%P#6NJeOhb^#pN-S>a>;k_g zdzL`3@z)YwW_XCReHidEU)lGccl)O|oA zGr#lw)r@2e!&A8ufwwfdNP%E#R5*!6DS&d;{vw~zR%~3Ztt#uJBCzTfk&l*!uzBnJ z@G%*Y-VBBSRiG1t?AAGB8k-IZv;DmUxYuYFBqcio?$E^22nr9Ig&u^Lf zdL}D=o_8y>xjxGo+znhxj6;zmOG;k|ZX$62oV4t`bYu*swiw|p{jQP69eX7`HpKL7 zVtsZPu)!EeogNd7WLMbg1Wi=-!qVmd2OZK6`ryv;V_VZ>wA87QE2^^=0ubYVj4##K zlCo$Tf~yspD-4bq6ST2gb*H|n=o3|zWv`!!4FSgbyA3xiECB2+_)9@t8+T`{(uSZfGYDON&@VIutt8+AUn~Ly#}Qhi&Vt}?S|a`unm}>V z71kwU!0k>S-l$L4L46!=+}2X1dq4c}{Rw}|lOb2ZByhoC@Uu83A#zQEkqvG{C?dER zGRBT!_f2vg5v5aKEZrr+pjj4w+`-*d8Dle0y45$X7;xNo>F*5KxT$SIzleW(Qc2fr z(_jJGD6__(pUDY&mXiSRg4k$8y{VjX!gy7UR+1-iV?_dH_V~g`Xr$(V5jf}@(fxF> zb3Jx&v<8Gpg_(y9u9@7}%p?Uxsep8lf}oZWN0l5j$SS$cQn@)aUs z-F#TuG9kqU>rNH6k}(%>6?~e3U$zB=le6KY`pmR*?l68-1h_t8Rc_wKhq0s}xKa`p z=|2esYgTpe?=`GaulfwIgoaY`ItT?Eu&Tv}XdR&)kU;Fu3j`;;gb{}_Gb8kD`Tk9; zUo0gtU#c_G---53uvZTf=0nv{VRcc3(>9%r@77rGZ60&`LSPok07waVwnUBgpq2{a;#_QujhUPzs=>@ z5ec#sQY#vTz;?q@zHdV%D`tqDQDxK9EUX%$e%|pcZqStAtH63UiJg#7Wmkfs!QdUQ zs+Y=(iwn;@pMC27W_;T~=5hKWchdEp{-vKw&eway12`8cX*XM#zl9h5?emubU@2 z9S|-7f?uB_BfsGD*Z0B-J_EoG{YHk(@_{B31FL}hBBYYr0%0@Yj6PR+B>4TV*>B2x z11x`i=T1Q{unPs|?AwHu_mt4BkLatT<&X9HySsP4IIY15|1ZW-zIf!+X7ru?c+OC& zF~54xfFJOc%+Vu_z|k|TT?`}^bLiSi&3rxAp>5&8dhT^>0^me&8X0ipEU257X}oYn zp9-^5=NNu!)th$kqEa)H9Fv3s2YzMLC7WauJY6?vY0GDJqQE>A>4a}->YSexkAL~0 z(e)fS)4pV=!&LeLUqqiESWBhjb>8y-vY~#dG$bpO3%J^kT$Yl#>*oeg`Zc%Ti)Icd#fZZF!wY9Qz4t@CwD)-^&tQ}dm?8y(CgMb46Vil#J(VW z*ViJxdQSX+NflYH-GjhD@D$EUJ4WMS&2L>WPyPmf^W}s5j#*$k`VnXuxH1s6>4COP zRpHFE)L(Y?k21IcTER9;4!f`=K>`vK-A%?6z)ixVNUqeBv#$&`8+<8fK%bI}5ufCl z;-h9325jI}@!i(U0e60iDapFrHr)KC=_zU(`>n16!C5PqAUh%+5y5c82#k(nVTHi3 z->MP|i%WatDmH8fS~qkCL>P@XFFht9)f^eH39#h!(YebC2rcl%{8~fMkwl~XpacLu zcjF~-pg-hI|LXRqyz#5tDaB^`_ff-Msz(L7RZt+fx?UIh!k_E(GNQnDgui^aZr*Br zw{G5SlfgG{*LwQR>8TlTf)X|eM*MRI#KC0DHTXa=@N`rO{04(3QcEx7l1n4=LK#{i zM0U8^B9TogmUA#LWW(>0t<9w4j&9v1Iy4m<5*N1&Y{!&y9eVI{hub=WN=sCo7<|Wo=YN+BN%B(X4y~VgC7wF{OHy#s_k2XjwMdTE3 zH9JpMU|L|hv^-56x~+%=FduM66p88|NZk4{_J(2;V&wFN-@Kg zB)|m*p^>$}-9`ewp}_I)lG&92aoDr&fJW>vRgKWw8G(I4roWB9YX~qs>)g*Mj46J6 z5R$rVYc%A*SFTlw^sW z@zC?5;O{qpF9D-p-+u7m!=lmhS`+}og>Ti65>owz%r|eo`ueMv?_RxnY<2Cvl(-|zLd4VsF2v-y@6j&4ETiqjsbxK9hvBBZpAo9TN6VP6W&XQWrLXi+WWOT zzxtsTC!XY<(_4{_3_$~Vd3*0!7?g07eu+8Hp2S|{>s@Up9;A)K-yfdfc@G3j<(A+~ zgB}&m4;UoV=*t3RZ&P^9wfX$`1pLHxCwZe=t6%#*73JxVT-Hm7Og&v8A?cql&Sb$~ zpUuOgYyT(nx!1L_)Y`n0ZxeyOA6Bh(yy=&iT#j>#*(N<=hhHhBj0$FBT5FYaS#3sM zYN{=I)O@j?x2(VbQB^-D@k6Gdf!!?84FdP#!=}6;%L4^YmG zI9dR_()W?y)1kxurpqG0hQL(}z#rXmMix>G z->$Vtuf9CE!oyy>e*5lS@b^St$@)Sv0&e25sw%%)0>2oT&jP>ZMS)*xhby#}1cQ0+ zNX58x5W{sz+oQHQ&yeVb9X6mg(t7AhXe@ti>-8-h(J(A9oMen9)e%Huz)OT@0htQ0 zYycMXt*G@)!+@1u@M-6yR2|z|JW4iuyaB*dEU9I{O6zirZ`NM%9-j!X_WH^BpK1&L z1%ETDtYKx8C#h%HvTbA~6q+-~VU9#A!5Q4d`GksH_Kd@G><>%cE4Uj_HfX|Kt(W)% z-5uI27^Aj~zUxNie$*7ihqql3QW65a#K!r#nOLJ~6v0XYz&VjRUeOp!@Y#54b(t|Z zygNO!GZtc^n;kSVEj?0Ba$HGD;sK2|`3^s5W3Sg8G|2t#(YN2du4HRpzxw9eZy!B+ zbnpA`zAG56H5Y(z58ctxQt0bM^9#T__6BOy<5+-KW}3&{FTq_ZH$$G0+=1gf?pg?X zoF{^W0Gn&02;J+><{h=UrHY7TAetd)jn3J)c5{rP&Pp$pr*RZPgTFm$oe>z_dZq=* zhj4;eSAyVFsJJfn>43gMU}=ZnFkmradPHcAz`80!-9cpU34)P&Am)Jo^TLG&z(DXn zh5rVfiva_{jR50>)lxBN6>yD1hXUslfB?V6gTHz7=$qGH-}(CXt5>%l+JI2*o2zc=D^}YLlJYhgVf1$8Xn=!mYcfYL~GfWcF z8dsVoEgc2StD@mPC&{BoR*X1y&49D81;x;g|CI-n-2zkDfDTCrx4GWh^T2vH#t946 z5-9M*d@+@77Lw<{O*H$ilgjAtO5BoJ@fjacv!A6g>(HA}FO|8vJ(YKOKb3>LGoVp z{w}*X`3ikEwO2k^?_9hn23*1n@UN7FVLt`_pb_8~PJJc-Zd1T_YKsfR>ne9@p0_A) z+1GI1O6&X8gNI*!`SQh!O6Y&k+$>tT$|L5h0kM7>9 zAF+K3cv+mWIQJNWCHgf(9nLk2!6EB%eM8F1x&TTR)|%xxMsQ+Bu17ORIbsLnuTbA@ zJ+LqVk)$!4Mu5RQaXD#8Rkg2oau!bcx_N!DktYne3c#11O#e2eK!7z3TqdifGtJ49 zO?VDu8F%$KK>j4XM+9?TnQWqKFDaTXfmAF#D3|2lM@j6AP+_S0m^1MYo`w)&XRWs+ z5xOY)U2r1W4fLWm0|;}}ZvrW1QyPw1(pMfuA-Vu=_2wNS?47Y&Wm|>&W>_Vcu5}&T zVGX6;y%hj9=ItlHHu12UQ8n#=uFQCXK~Q&_=748$7gz40FPZ?+h`_e$vXL98B(Q(0 zWKPJI@V7{%JN@1FC(i-j@9#Z&{ou=&FAs`Gy!`UTxfj1Vz`^U_;j7n=zAgUy&Fj|% z#YKm|`yR+%nRbFo;HWt;W?+~YRf1^yHjx+z;mBTzn>7uAA7EIm^?2IkJdHR5gi|4G zu_ED!;d4TJw!pUBu+~ikyn%n8q(B^eA8Ff6vhG@4EV-Np^rie)!f05w#1ivb1l36#)U@dRebz^y@Dp@KcS&$SeX9U*3FT#mFck~K2h?Fi_ zcq7_z05@^sKK^X%1%7EdQNIxw{6#@SONbx`JtDt}BFZh6zhrHy(5ywGNc{KEa5CE0 z-R9Xx)~;MibSwFUWPH3d3|NvyjV1nPN3up4B=!%4NaBAnCbH1qoiC<9Yzwwm#?a~R z92coYGOV*GuOC+G zwFj@h{`!+gaN$B=e6fU!0$3yPdhmpH)hB^DvLNtUJaig-o>m9ZNI{LQ@Y)Mqp&d7Uum?m7T8BAE7xo~V30LE+YP*^r=f2Q%>m#0OR?Yg zN(jdBPZks4D|kZS1HG(#uLAsH^a%ic*=oM`&Z`>edG&xb!!N&lSj@N5I1FnH+ElU_ zFqg4txbDLJ3V&Z!Ea8LL$8x*`$>r%T5_LvuusN zh||MUFo^mc}9s5LG_qGnGIg6U4| zbI7gSLC)7mSu#^;Y&dZ{{YT^CK98y^2Na&x`bX?`UB-Vk^7Ypb3xU7=?)&fVe$NknXAq3*uoYsjkGVc_C{0N~RwHy~3ISnP`94cvp^*SrkZOql%T| zK6>{r7cT+88iM|p0C2rg`8+&qE8mq0xGE-r`v}nMV!(yHUsvPRgPQOy_+{Yv#!LO+ zZ0~-Db7cw`{1pK6L17SDzu{j!xPJXN*S`Ahuk}HBdGp@s>0RM(sqhYD>l^#wRMv$7 zChR_&u8xngQ_i5f@qz=H6u9eaXYE`>{4L&4-TjJ( z9;rJBV6wSO_>;jP9qmj_44eNV0^dkuz;q3cNBKSCw8-{;GH>f^Q+Zx;R1QszK|79% z1c$tu0b4N%Y2`ZNWlx+JLM>ss9L;KPA@Ddd9vB`os;p-eMn~6eH#())3~dHHqH?ve z>oZ8~4(vEhkqF`b`^sf4+1_-DFdGa0qJXcIAkd!7xrO`;1JdwY2}P#+(Q`HN7fC^=y^-O{Rb; zOSZCz!8Uv7C_SFNyHf{&4X--(EO($k6`jlEZ(s1dXDu>^jyUDy-oeGc6#@gm|7-}h z6Z92m>kC{T9_nph2;0^Hmo!JL+r0N**LtE?cfNjrv(=XmZ+!W(3afd&re4upHIO79 z3IQ+-7*{Uv_s**uU%vXQiSmP+_ly3P@ZwE??TmtY(Z(ub_q)!0H@o7m#ATU~69tB? zA=ro*aQLr=AHAM!-D$LpHKLz=rZ>&K2osrM7jeMIo;ZRQ-N4%DKWJH5r?*Rvsd1u4 z)xa=60tb20S#aLlnFMZlYltvD#`$=0)YX3m3DAbHPLkj#VZd~>ei?Sqs&%~Vdy`10PsErY>S!F5ROFntppI<$AJU9txfZd zv(i=yjX{jTc`VyNKDS>yQNnXcMs&;&s~wd$iI98^1ZN1li^z01Y;6$WEkom2 z_;&~Y$c*!6X?pFE`r=IO`yYt`CvAudn`PT10Bi`JjLW24h_kCDi%nxt8{PJb7-$MTB?sulpk@r#f%W_nul0Sf)`I7Oe4Pb zunN1%H>gtpp}9>M@SX_Ef?U79sIrVskEs}10|GBdO9}i&a@tAuP7()IZ^!J)ffyZ^ z5cF4}Kww+Et za7HoCYLRq*zfk0ul~EPmdLh9oCjG+2;A=wsR0o=IyNz3mH&#Et&!9~{Sb8#k5KPBx z2rz*=On*zZECWXP{fg{O{!4A0gr2vC-wA?)zatFCxbKY^+)W-NjX&=^)jSNM<&cO$ z7zqXwgy7MwYX!at84s_#TS0Y!;zr6Gz5LC@b@A3`_0!kIREC&+jn8W0+f!x40lEi ziC)0XtRK1zG)qE%OFRC`Zq{=sfA0o*F{o2J7*fI9B)o|`b(1+tB?a{yaMJy$R)S)Y zPc(zVIwihD#$UeGBP+ve;Fpd_$KLFKJ###0#5BAf{@EWq1?+UHS!iV3L(WDp+UlQC zC89hjt0+F)bZRykU=^9xvCgc~5aRCJVe4)O9`QjpGFz_GN*eNZ3~t2?UDxX)YCmb} zQj3?KNBSOTYFs!mM+XM%%)d06v@Ug9IZX`MZx}^I^b1FxZPZJUspQ zw(u7q-ao<{rC|0sV|nk!9^WerwPl9^r=}U%9~~>r@qw^2__EFTJNRK$F$oR=e_UTK zUtho0QaXUYg539!_i8IlW_In%SB1adHaF;d;BNsi;Hy0T!6uVS)GdrLSYyDHKxe4u z=sA6+9yUtQ&%RtB=|&jL;iN~DHu1vaIvEChh#nq}!MaB3JBOWis4sV|=^LJsUl#yu zpmgStU7>%QfL1+qa5Uq%>ju86Jb4Fpb7?-2LSGpaXv9!t$eFN5g1;05c=eblO$zQ= zz;78OW6%^tp$oi6Wi;jkc(mCZ9<}73=Kx?KFcAFDW5I>LM8h}`{_?i>d;UR(UxBVl6`4trzV^Cos-R7%DaK#{@UDo43@D82vI(4O9yyqJGe9~1wei=(@tvER z0^7{qWUDDAsFfQEg{j#}OX!g#+cJv8yUvecck!4ZXo+CIGhor$((p|2UtY8B$SFoY z{;GlCNC4QZKP!4mg}r9LBDmfAYGl9*OtWe5Em2Riz?l+1ti@sUIf0|gngBm9ySjgS zWWc+_yU{?es=rfixL5sym^=#Ngs769jm=(I6y(9RtLLx6 zfD3)ETyd(y8bAb(uUtL&QsFqh`KF>4JZcbZ00yVVXkS{0G0I@?i zRk`WQH%Ea|BXHLMy0aQJ_AB(2nmoUe|BiQ?Jh1dUEC)Sb2-_?kL`>cN5ZRgAuqSEH??yXYra~NrH zr~m89`vPE5U?BLP1izPB46KYC%L%IlV?SsJ@YlENqw^)}l#2Nl`o6p=H;TH_6TXoJ zf7_J}fPV{q-zqNsH9tc^;2SsVq>q0v{`%jzM5Qm&J@7UeFRXtCqOelV^R_kIN~qa$ zXoMtlHBv~#l7hcNV1b7RPqPq7sw+aVkh(&ZV9Uw#1SpAjNU>I7H)2TXNCNy)7IKwk z&GYo{&qJ_dKQ&F!lM?(UZ?e)X@zTWOGj9BBJ<#AR%9aRvF({{3F?U8fL~;|_yR1;@M5;YH1rMLl*Drw{-Pwq`%mjGdgy^$U)(SZtz#C$yobdA+oy}@!jcs`CNouV`xEX;j@4!;;_WSJAnzDZkKpp zwL1%(ivz%wpLWoifz$p?_0D7z%|7*}{$Z}O8o9}Ln0oW9HZCBEf!UTXH?<8Xw zcH`~L4U*x-Um%-mcU_o97M2<#!~-$8*ts@+22 zM~no0^ZFH6-C-HM@VBqh8rR@bsQqO+qK~MFsUkWHUyF3>`Vg;V$te>`E7q6XxB5Eo zE?9`JnHcbydgZr;&|*+F2t4~eVZ?kNqmqNhq-H7F=9$iyq>N;!w;{KwLpTd%y5i`N1+lzLPsiD6O7|dOT7Q z&Hu9#cy1|x^>+ZusY&59%R*Uuo&`|WthQ^%UNK<(z1gp3*e^%oM4DKZD;X6e;j}cn ztQ#B(f6F{SDGm($+(Pz^J5Rv-c8*s8+f=CAi;T!SyF>5KR5*=4v+a9IGtCbE#t|zB zJdHvZ5q@y3P5IX3FBn{`g01B8xvyRq`F;IO>7(+3E~!u)qQK8^!h#{HL?Q;O;O;Ds zt%#6U)RsyMajnRTGY-)Kf=6FyG=Q#q>0~3YnKQ=%+__2@rU&>%;lWB3Ri=~jFkorm zml6mL1MW!+vpjx*;6Pg+JVM77lLHaHMf4|EZrpI(IQ+(Eq#vXydPGEK<(T;;x@oY4H2%c9mQ8seDo3 zTjxClcOSxSog}yo3?X2!;a4|vDCiErq(}PZ5pkp2=cuitCo?Y@3aeQP?7hyo9(fQ=1o6vHptP&mV-UXsl??=oQ5 zYSMU1_p8ucifc8ZyWBJojGfSTzZ+IsDzjuT-477{n@Qj*&c`N2$b2daeCNiwgR56Q zxbkidL4Q#Ex8d)VcV51N{FW5@~J*t{*69^7^Qh-pIvWhFz32^7X$$P{}Dl)a{C}NU+ zWPdWR`K@+I{c)=!|C`@`_Sx$T?=?TH@L%k&D=iVB$DeEZ#SFMgAAe?REV%LCm-VSE zFX&fy>hSVOKv-nNXOJs_VA{rCG2jwXihq3PLr%EUu2wKtQQ*eX0>R;?SqNNxfgZCB zqc4hhzBJNtvqu+HJJF@`Fwf4CgSs{y?Vj`!;}b&NE}*!}NREO@dl;}SLZ{ck1c5ip zyB=Ad>o`S@ZZq4R(oHEc0gO3spd0r7zTt0Gals0N=4URt9_g>!Q@)xWr8h1#n9RM1U6tCv z7ZUIaWfwzn_Y-T02cQ*=OGr%7dGUY_1s30>9Bq)YydahyY|sq#Z|l$S$@!wcRqTZI zPvgH=;{PoEt0llyed;0TR}FqyBLASk6L|&a<#S;4z5U@01yv{4Uj{zRb=?Si_rkH7;v1h&Y-|TDk`qd z*x(ZFzh6T$1X%n=Bsd5a5&M)P3ZokA)#K$yMaN&2#2Z0$B4-8$CiL}RLvcDJc}i|L z6_N*q5mUd#g*lVvI-co(9k`u)w5(}fXU$#pDAZi{^sEZ%EXcXs*xBfCB1jJd-hBcf z+4~=}^|^#NP?rdEBaSqVp%o04nw&aApb08fpWU5;KKn0DlMSP`VqvNH-NCb4xNs6o zTi6NymQ>Yn|L%YANfZFj2#isAixKCsJpk@B8cpZOP^Z~hYN=XpCEOx@Vrfnhrzi4T z25H!vfY4)BLUG_b*RM9g>zS}ZzhUUP;1~Hs0PG=X81Oy(poy<$>I>XPQ%QD^cb0*% zuE0qtELfQVTLFUcXEyw17}{7GVgGo9N7r0E~VX1`GzP z61y?}+KEb^#0(Kd5;|Wt9}hJ>6U;`4g=PFFcD2bMbTayO7^axn27;68Xw`G{2&;8s z&{uK<HK~_Ha|#kUsfK0Wcyr=zj|S)=$MNEI<2J{kEGe_LlfA`p=P#xyhnY0g8#Xf0!~(yem~ z$}@fc7naX5`a+?OhnVqCNmc;Q!=t?Z!0*P&`NCaG+FIu(DZG~?3vnNU&WFmO<5)fJ@ zepr$R*Dqf?xLPE*5cvGdSFZuzPriPQeDewRz9=vV>`CC}ekBSV=F3JwDWR5oWK5Oc z#N4(TTgS~4r+40gYc65A;Mnxw6Ql5{Lfr&@Rv=$Ah1YsK_F+G)d$`Uz@KeZ z73>1MC;}`m;SuDMB-;l}SFO__ zg(NGw$<8GFkfCx6%ChXm1KKRu3mg`2O9L<#*`D0J|Ce{qU+f4hFX(>~{cf{furjp2(!G202d?iDvZ^ld;T=~h6Be78l^A`{59V~ zR|yF8;;*kNOiW|^eQ5+}MOI#=-qDO+_aNsatVX#9My zx~fs*&cWZn@6GGimD=~p2jteT&+5W}zcQtdl$oF<>LsLVyzj#IlVOu`twL7qUIAn8DBK6fwSG zTkISLj4Tl@OKj*gbc+E4y|matjiZR3ul{)!KQ@xUmH@LK*tMX%uc3-(e4GO?qtfjt z(p4?Ym%T0?6tQ@axfA6vLl&ZC18N zd+o&o(DzjY1O|kKzG1)suzjGbwk{G9DR7gWh5j6g%T(93gEvL_Pw3Z#?|+#kH#+T(aZC^}0o7 zfx%y`1BL<@`W6N&yD-woumG6lGMTG2-z}pm3x<-Qh*n?rVfx~qJ%->ZxPs|vCg40S znK42-E%BtMAbB=%oi4S6I*PY3tvU@ppJ1TAt<-L*z$CvZ0bd7BjYRVLHD-xuPj;66 z@*^2D2IkCHGomCQDA63bjh9SI61CAcb~Xu`Q(oP(QXw!hNgI6za1kK*3aYISOTR6M$4wO7dwRd_k1L>!+>k^TQLtL zHU9;7*(iEc#-OtdDY_SaC(3J8|9)vlgVr+x4gtofcGp{sLaT)lqRUJO+{fWiis3f| zSm>*098y)UAG|oYcJAS;uU`v(zY_d@Qd+aXctL}~@xme>gK@}1(3CQ4Q(TNGK$dnb z-V;EE{2DexXz9=xXX1={teTT3!QM$`$emjTZnNM>7Ai6JysATNRru{udSI{(`qGs3 zmr;p=*Xa{x{*nNB;z5h7I|NfaOq68@Sm!ud-s%hh>$B4??hp*thR-^se#hSoFHc#1 zX=2)O_sAEf1a5oOGr}ipM2jYISY^A>EbyiX@WH$16AKFfMoTci8UY^hH>pRkpe`iX zEO^0QBPUky`|vthNZ$YPukU>D?z`{5f9(ctTin4Pq&o3qc<%Ql1;afnl0^Uv1(tNK zF-G>K&z+&g)eh=B??0Uc!GYf-dUk~UA?l>|wi5fvYiiKvCDw0A(jr-=9P3jigG6`= zVi+<`M0_QI;LhwrGJg_*yO%>JrAbd4Njys5Khv{@P4J1*0XR%7*#lNG`sC1DxnE*D z1brj+^NuGKqx9?2Nj^WTXMhHSO@K{-&!kl#w+uwBgamQ2VOi}4rx*yGZhyAuO0eIwiX29)-b!LGl2CPp+7;si(cr4TE37tkd@Ig-g8NshfuEDpPo?*X# z(FZriG>3{z*(zOiDEP%P2aIYwx)|_Axj%v6nhI|Kd~{Oz_}_h(XwdP(D&)OXTc^J? z|KSBlmxI5zx(75x$q1c_5DWe`ZKXC??1wiBeqUTWxN`NKFW>$8`)_~q<;(XAfp67u zqj(}=0kZ(G5I6)_(9A5bs7L-qRWwf!IB=u8GaGh1Vd_xP#$Wd7Vb@}S)IhNTXTe{7 zeWC7V%UGk&QSnZ`F(YOWjjEJ@cF-(|bs;%o4$pUD}wu_t+VIoO|2n^!(#_yUzHFspsm6 zX-8bkseV96fyuA5_L0pOe_E0;WC9fl3!Z=%?FPZJy;(*E%$CQPv+&cfV%(02L?-O@ z?r!)E)bdf_H(@w}z)eY$`pxUFzbW`N@LE2B0y78Pz_-k|RqlN&0A7Q<6tE}^7>&?2 zaA9MDY?k0}lYUN*v^59T0DpbzG{5{t{>zzZ8dPb$8Gkt?($@zcBnpQXA=x7u6_z5J zwX$gWJ&FWmBl%vYW#LDyP&iseIo9Ezp3yM^Q%Xf==`pAEe6YJ`32%9ds&P~ZTnYpi z2p?)JT62(Lz%BZE4TU!bTt3kM>pTqD^0xwDVJ;Z_s}W!ZpcQ~)alfh(c_s6z&=#Xv z7z+4X^!H}v;jjF^2VZ^j>g8{~{OdbcYYpD}A6ze53j`w#fcqq{IIuDkGJYK|tODQ@ zVWzPU9m-KhH?)WPSFrqiiTYnPI=roeZ)_tMQ8T&Y8ib(~4K_xC#1a31>vMM#Zw$B! zhm-kdk8q)hR9>lOs?nTg^0T;awsSU+18;&&uh2K6V2G-o;*Q zbOhly$n~xh2lnkKbCx2@47jr1{W-~qG&&RD5r0tuFhAPS(#W77!#Q?B+6hd zafY_+CBNg1H1vKzz!#Wb9G|VpMMoGrf5NnR8qZGqroeHdV4thI@9L4cFR&-}E8tau zfj&o(2ItEpaFtGe(G*N1Av{!`C3(MTa^dglkTF3w0OHNs4q1wN%H=VzElY8L1+~DhY2tM{D0stgU%8%0hcKY^cs9Ed=J!xUtUB0`t`TpeD(4- zmx1$I2LHje4?hNB_0cf^n*y5y3xn+jeHZ*K;Xf$&5CYq!#nWet)_1JnY?wD2{~gXb zm9!4=e>MlfKvV_wAu_%hB4CvdwAIlEO%V}aHH)988$n+&-aOTaeY{cX{LEOFHPj7Y zo<~qCve6cI24kdrzd~9A!Ju3BIX44l<0fTM-EDz?$IqaxB)#!FM!??81a~~tSTmsj zBF0}8OatLEDC6Tms4wtcu&V^`LbFgfPlUEG+yCY9uM!zOpQXK8-iC=Gu0^0+t z%eVMoRXIIbI~`IOa8%+t==Ej>j0Ap5c&B%2y__5f?f~ms1cTYAXhk9!4tIrp0|oYd zDVP;!AqNhys>Mj3QQ7tx;DnXS3IpETanzC9|G1Wq9*do?*kGKKuIpHLlD=0F z?)J?oX~sD2>WDZ@Uu_8zT@1Jo_%p!wa6>r(f;|N7wWfrd`-~w8o@4>_$=y%N2l~g0 ziUM7>)c`R1YlYw_#5{liCj}uCSm28-0HxfiK$Le3!kFq}>CwyU*J|1OZ@}MgzW(yu zwc5K@`oYy3ca(h}@$x+Y*c=!HmWcnV9|YFmpPj4Lon?x6tO95~qwMIVn!#oy>vc4m z>#NpiAQ<8Pf?(QccegSAZuO?DQbrrvj4n-f;7L|4ndyzRL1>KeRdc&}ksvRZP_LK8 zL^jncWY*CjFXH#QUvvUiX%990#)lX&1@5RDCpgqtu5WYhQ0hY*~fiVkpAh;$)1&1Mx%qg7?cwfP@V(4Z@^D` z8yJD5Sq+U+Xr8SfSJ#q?>X<4Fc-@po+Y|ubCjy=DD>`9rG}ybB_(oN91vW~NOmo1p zvxX7>91h1TS~3N|0)s!227d*>vplNp^&OF4@V5jA7W{(0p9p}9{Yt(Ag6}#KM>6-# z%YP%&r0bqU3+oAT!lF?Fes&@{(Ztt6dp`x%6@GSDL^nEELab7r zgT9A!^#GJBCufPLCw_#LA-o#GYOYF{ki~n){T6iy0k06Pm$fs{}NaTvtnBm z+^;$Ub}RZl>L7Te7=&a))N2POeAENa#tG}QlFh23TvmFZ(?@>+fPq~Bu&@_H`NxG6 zgp5GHU<%l8`D7uK2tHpKd9idb3U;$bt^wR@FTVP^g1r?5esK*^OzGPn{}u|&II{tG znd>b84g`a~hTkdx@Y;z{jlOn_D-J-AqqRwcF)Ep9%VdNXaeQ56Lh|{E#!IY>4!@Sp z^#nbJUxYU#?us;{f#Lyc&iVBi($h+85E zrf`7}m|}ML);VtXyXC3Sr%4 zo&>gxF3>2Vj+q6^N~q_!98(mmpsytJzgYsjE8pDtx`6iq+k*!Mzo=IM;{~lb;BQOC zfR`cYGhuHSFcvdQuq_xIp+5{5G5d`Kf&diVZ+oyP;(_zME# zht*|XyziM%2%J1;6*IPRN zS0C9g@wKxwjAPJ(;IiN@`*f9x0XLuBIMVscYzgBRc8F$bE))~xf9A;vbRL3UnTTM5 zoRr?O9+iTz_Kw3pF8mizM%mRhxkDsNsPgP0<6K4`xf#>?>zeSgl`z+0@bw7-Uy63A zb+AXef^8#V!0I-u)s+US|iE4LA518=|=H3oBzKo}MF zQZlkUMHCw$m{+Q0ic*PP-2$w*!LdK5AI&h+*_}1}wmZ z$XfmGi)s)WW}&*|xVFctxg<_lodH+K*DOOqU3T4_7qf@*+E8*VK3HMT)?F{?a8``8 zM7_)Yc!G*$4vqDbGr+qH_+w#kl?d$jP7&W4d4AC7?}M*CEq&DyxV8$z@mf)!F^oa~ zP5|tDgdKy8kd*y%z=6UX?k50kG7i9O`9lzxGG4S^ZbrQ)&Lszgy)Lr^!D;Mg!1L7d z!AK_#sm*}%1!{alGP*>M7N!Vq*V2x`7%DE`SUuD<#rD~3`rxx57?P^F#LWNJ#p1sf zLuZwI?Kwg%KA|3d2Ejz zEfiIO*HSw$XYH8%E`-==C&1n+C1uQj_4|$?Xfxp8@BV-rB|GR_LM7OZr9=YW(Gcwc zdtHLH-cdX3SS30q=|^S;EKL9owv0eig1#Sr4e&lN`DFsQ~r1~%{%{);|K8gN{m&3a|(0rEV6=dIEYk_vcx#KEG#_wN0#cizMKs>h;~ z{+daU0N{gj0^pW{zl^4TWk32f;G0Ch#^08~@Zp2o6>;_3(pR+t?`9=Pa;Pf<@T)rn z-6&P&Bj_$b3*oKPIt8w53@9s+hzbxF)DkL%U6fEU5Mg$aoLPoLeI4Df8p!IwO8Z`61HEk65(Dls%Djo& zF+#KUAyrOHFiKw!gvk9W-IBOL>uDtoW0$$ZoxX1a?wmJpbt?DsAO*ZqP*ociUBvji zQv|`FD-!%o9^*U-;cr~y(d^T}JYUrCi*m-X5x4=csP*&HdkugEUD5%9C(LBe5}2KpGK(27 zl^PQShX`l&uWBSn9P;bhO>}0#BdkwO&KgE2FK!8gjz{owN zW{8FAq`FP=g1zvNVFW#1p0ru^N#aFkWSOEOVUoL>V!0sh21V(vdo>5l zD&TPr*uZP%3v||wCS*8_e0cM^CwspHf4^Y_`s1$|uYLvmg1@Z$EnE0207e*=&U|kb z&MZZKXt1o6NQR*8CPUDZnhi^`YR3`+JUa0?DwA{6qKR)HGcn-fQY53!YDyu$^3EF3 zS0mN!hg>q|7=W`Z*eG?voCZxvAQ<(N_BeCKrGvkv^l(lq!XI?O-x8x#@Rt%CGlcm7 zN*&3$Xxhk5a)1Blvhqs|SlAo*l>~!_uIyC9MgCZkq_XH7*diKE5&lw-dCvmDf?oX# z48g5vZ{oktGls#|1JSR&Ni+hj$FXBPSnILpHqi&<8h%l(VC!QD>e3Qnc0`-Gn9HHS zB^%~|6NjS;I?9w(Fe0!;XhkQ<=ykBy8V0;8!B{l{z35c-#_E{8pfd#BL;rLa=#Q{S z)u3`rk0C2!hjE!+_jiXP<(Ska2rlv05CEIcsApX7qUh+Iz9rxM7DfyH8i4tD0KiDKGYi~=$`D*^Sg3r0 zAGE2Uy_l_@TQdZoVfy!7;8(My$r)fV6>=up44~)>u3@c}ruViw#QPA_g*LFNA!+;u zyFiOep}|#>Ldn701b^5OeC4j4S8TJmGz&)@`kanAbfn@bt^ZH_9IIgd$%NALYT9%Q zX&W*Yf9*n>ei~28NI&O<_LS^Qu^@1}RXa)Y|9Zm&gP(;PQ@nM>0Kv-jK%vQ=88DAy zX)vgNwiS~okA`3`VbC%#uFs^rq@5xOW}^|ld&b8Q@7B-%EmAE{;R2^PFH7vlSYU}KJMM?7~XMQI#JO{-J`dTu*8x)R={MVa` zG!hx^kQrbk$Q$r2Q|pexe4F`eX_HqL;cpfIHzgZV$=w3r$NfFBCwPVGcp-;Kx;nJT z`N}2v^(DKWhqeRqQc{o7A3VrA4K+u+q`4QXUWA^pk++J@K5%3V)bNXeI9MrtnoeT3 z!s8iz*#wJa;)|8F_9v=)UqT66fMCYKxz8XSexayaL9iwsHX;&Jgs0yr7+Zs$^!_doY${x`Fkpvt?up$ZbcoPe^zF2D+eoF@ z!-(;869{%3UQM}49_LJ!T2cbPmONmV4ck*NA|P(mmmz4>`0K@VCa(hFh`s37r7B_E z@)hgpZPy}mUSr;GLZ4`Tb=c*&Fb`AWgu@1z5a2lwhmsCX&}<3~e7gMM303Q=CZ+aK zWYqvz3kiEvP;S8qK(5ph2nOKUmZeBQ?yQhtfR`uKULitl2u>MNc~AkxJ+616W3#QA zK0~w4pAIUmc9=vT(Y<0X<{`3L#;1#00nxPye`}M>!}Ujwg2dnuMZ;Hzpz;4oGd>qviRG)~8O#VAH{gYTS!ArOp~FvC?j+7N)3xnB)H zgTb^D1q%T79B|2Z-`Wd{WDNR09hD*@=1F&DjG(cF`&#C>RXrQgUim}dcQ*uAo`nld z3B8dStTXXE$`Gx3cB4K>m>No%(15rJOZYPhd&l?ZO6ukqY_b`nTwlG5M7Dz8Dv`rJ zWEk#z$XT3?_DnSLV-5kfEcww85oJ-}qYZmUJA;r(>a+!btEyat_wIjrvG{Hyz!#kj zi6Q8b0h{~+r@v$pxDP?!XaJnxGiJOFx$!9#-NIi!(PqCMCu;C(X_*GADtYvA5#VxA z1bOxG;dlVp5G)6*YEYoSnGb0D5^c@JZqm2mFdP z3x18flu%(`kIs;b(24OdwDFfp7#t@oNd|`3-h{uUt2sXfkV|4J?m=7fj4WnOC(Vgj z^gu!MF7hAW>b_@Q2kh?%zi(=+kHP1Dwx@nw{C`W7YtG3G@M^8*@sf1r?j8GJjd|@Q zGxxRae76HH=FR?B%jKyvtc{HD>k18e%FYyc>O-qcLf@_jmcBuPz!(ia7tk7ktDuz5 zh_wc(1o-`?Ho0F_(L&&F?|pxwg{~klUjwU5^Qy7qfSio`6eBPC*#N(281UmoBM}qc z91Wn(aW}Z-%z%xz>a-ZqN6|g)IX02!13n{TxYpFbmsm$6-@uf4^cfw(ZD6e69G@!# z@g&a=#eNaKG`U;gSCkB0;veY)#u2+qTaJhNsFcU{z%$^Ru`B{gmst@X8=mZzm?e8iGDx47%rGaPTWCpx3@whG6`!_%tG#H5Oiv ztK;Fh0^shd$T2pIDKJnQ5&jyLpXYB~r6V1%oN!bAzcUVKiDwnG$1`T@2o%q!cs)6| z<}qlI3>7r+8_%w4TDbEbd9E~?hp6F~l1WjZm(3U&A80EO<^h{=$GMPfOz?E<&u}WDEFG zqugR1h@N7C(dg-_KPo=;Wsxh|3yQA^Ih`wN3S~WdP6bRlE#0{ zfGywt76x4KOZ8m=Fn?Js^J?Kk4RfevVKwT+?u^oIZ`9dgU4`S zCpfDnmS?FiS6&!3NHTs>w?*3XjNQOr2IYEe&N2t}NA&e5bpn*g(MoKkJ-JJT`T4#O z8||cpng;}Z5t_3{=Z7C$Df~6+;)*5Q%p5R#R8sBzhX^bH?uEcf#Bg^GKm)*1V-$+p z#KwO~Q`n!2_c#%h9n$$aIiTZ)W>Mh(SLiF~1%u6ilRU#1mbIADh{(ZC?u^T07qLA<)}#PlqQbP-PT^e^xW@D^wafU5#N0cW64Q^0Y-l7kj! z{7hVS&xKHhUcp60ZlnF2%}!W+}aD>F=5M)cGv_s_UDN3aasD?=o{(L zO9=2PVZoQDC0tejYYW@mmnCL&SFxTehFyJm!cR&1de6X?r3Gn?p z7U+=;>1@~UmI9UnPC&Rlm}!v2gKSAMBYMv3n+(9l$wdUjm*cOR+4d|p&9)|jKrfpD z_T4UlV85_g4tDEAZp4$r0bl|o%=v73ax6iTPLt!twjfFzvd-M4L^%72m;D)k+kmAL zJ7iX&0w;EmE`up$#$I4HE?*z3g8qj8a)m(H?CyTOwt9`d2N**M;T@ixv-MjC;^Fg~pa|TsQpT1@1r$3To*1|GguqD#;=x+S4BClEz)e3>dceCAaEN5&Xj_b#*SH{!rXBmev|vM zPS?|DaS(xh5&q7qnDKEu=ZtAll|r@&hIt>I7XX7;!rw~+Kwpl(>@&I|tef<6sE65* z)e61%VhMv^M18x9Uc!JAh;mK@?7829+JmQ{+0}rsPPOQ!n#uxcD`tjI=z!U+n!~}SjX2Xm0a37bfNs;!J2Gium=?2di zyw6E90}cSkzh*bn;I=?xnJpnc(SsV$JTP1Gzg687rHV+C2}nY{mTHdYd6U5`F_N{@ z-|(tVTe+QGuO@jYX;m24^V{8%3W7qX3H+q6+ldrUuullx=B3y<_ zMJEb=G(HPUdgSW{5gxN2LiA}M<{Fjd5c>Ir|Ri~-Wd zU@CB&TY-^6T5I7ixGK{!`(RdcOdiK>)1Y>V@D~JzK?i@wt$4zR$QEij3_ ziiSl=l<%r9)B%8JA85*&g^*(OjT(5}q3lC2<+35)nJoYu*o>+m)ahhAGW$cPGfe@r zB@pz)f4_TM-1lB>)Chq4T~$s*SOZmw0aq9-{IC8d1a>B1VnHho2lItY0^_I?rt27oIP z)|dpYj}*(0Y=IX2h4;Q&rD(97m|Hdkj;jQ_!e5~;LXOUeVYn%mEf8OX`V%X%CId=0rsCgF4?r_4t)eppT}OVDX1{C?FDCiKBv>~U^2+cG zj0$`K;Tm`(5Rrg2qQ7;~hQCN(&TY?FH0m`1=aqtIXMy0PjgYf* zDFp~+Lp3PirH<4I$w7+fn&qS35UkhVPqdC1RF663f|dvW_ua5wydHRtQrR7ftZZv01~wWf zZUJx6-+O<$cdxc#hGrDXyDuWZAHjL${#-rFKlnFd2a_XomB3wW&z6+|w*XA+g1|w{ zK&fO6Pt{Pol2|81LQ-?XxPdLXiGA(G!m*dRWx9)a;2<7Y$u}1yE>VnwMqvD~FcfN` zx)!e;J(0R*y z{qJ{G^R6!&^tre`ya6zsspS`rpcnB!rGsB3 zUoMU0K1B);>gQSTm&O_fOeGQamW+zyP+%jlvKX-?Q&7pmv>7l62Yi)85o!3%VqAS4 z+Yu|y`$$}nDdMuGd6|&j7lCA*N>x0V%NO>`j?R?&LfHo-1jU=-_kt&(Ouk-)G&A5$ z9&sRnIVdy#{Q;%WL28^E*a1tCu2%59NPNlw+b3yx3DE9^0SA4PjS>8%9CMV-NDRTH zHR&xBr9473H5@yYf3_QjeV4wHi>m0!IQyBwTy$N}b_gxtTSe%790ts`1Via${ST>5 z(X%^KDkMqB?*gQTTPs5ALy@ptSL?)Yb}7%vixl*Y;4ddE^TEOPaBMa1QSVDTMjv?MHu#I2xP)L3-T;JZ1}yWTzAxL+ zrmc^Q88CiWN@^tdWsmVdu!XVNr)x^{FLa=FH0fQ$cJ4LNDC~FS;paAu*wnO$mMlPk zOX~Q?zdk#>_qzD6r-2m)YgvF~2qvxI4W$88gsK~_1IsUj;8$V51=?I`08S=`yFf4) z4D{Ol@cXR5BSG-n5v4l{{04#F2XK+ZZ*@pYBQW$g{?OggExP-Fjgi@AIdBBMSo#|MelZ6?N&brMn#73x^f>T@iR}8qvTdq7&BG(Xm3$EExEG zr>)Osz-USB$Os+Cwe`8$+93`l6!>-_@X#_r!+-z&&$FHLcLaQ^#`oBucXBBN#|jMr zjvuts2ZpI;SyDJ^n5jo2S+F~k??8GLbdo@-v?YMA1G9LKXJ-cN7?V-We}n;BF+z(0 zo9OhHr{MZD6j%@}uxy=E`3^br76E5BV&WW!S)cqQVC|@vi`R27-Q6VBEWE7&z{gQaG`7sDAKrZ3kc=p64^VjlL~$#O+HbC!zYcA$y`7q zZ3=ku9O7#Mt|(REFC0{=5&?D#q33&Qh7oya=DU50+ZQWP$a9JxG$KbVGh>J#`kUY{ zxEt{mg5PSK^Opymg?&Bf|A6egu=qU#PbRV-MN0o=VeNG=D!hkQ$_M{dV&YC?V>&>mAY^K#qJI27GD;Y-f%vKr(b| z2DlIhC_cOMbi{rx73zY%`;gj>S0k2&mgZIs1Q!CoU||wQZ4mfI81RRh)kO+izkBCy zDIE9%FY~RINnI$gEYlLv<3V*JzcK-qjMg5Ebmw?jWJj7=FbvoWfbDv|vn)w#J=c#s zQ1w_8*t4>l1{Mrk2DEl=cfghk_E#G^24>IGRC4i^pVi3=#GV5YLvT_Bm8Juyz<2BQ@A9MJJAe-ui0atmx9hy$+1%nq^vlPyLSO^)(i}}7= z8}!${&mRK4RfEBFn*z@ySQRXoSRAInl#lSiA{PTDXk<(SLw>7dBKTzdA9okYw-Ed_ z{Hh1~8iD&-v*0*0J2v#nQ&(h6>#Hdf{|){|*7(mscT?^(IW;-@&45Kt*tY!CKyer_ zCTKBWg?9sdsTAwH?bXS$ZVWc~CiO|cQea3|`^}Q$1jdlTH^>^5#JiHvlUD?#Png8-6>wl`s{B`cjps_g=);&j_rkUu6h(I1U)FiDtqX1jiVl*dN(~ z%T*Q41M^;g%W38#esPx$Ne9A2Y5gN^w=#@}Y$oY_yfe_I@NK19aAseo_8Z>L1; z$z0IQg!PP4qlLb;?S|3$46R1!TR#|t!O&W+veR?N&aqP$cW#X3CY%RV_TzK9Vu5i} zie8MQUx7t^$QZI2HSDQhvO)0K9T8wj49_e0uA!f!moeRR1Hp^v;Vy{@?Uu4=Dl|gh z2PsGpI{>UXU>TnQT=?!i^#}Z_V3gKOun`#f!1V`}kN>X)z>@c=Oo4I1W3~o9#~juP zfOjHXJE?ca`T6f?wV=)A8*9U{!`usRlRScMlGCLu+Z0QPt z-7NcK{1Opz`#SH>2SMFY(IypyMHhlH7*p|s=1czU{La^vhcIEUV8WNs*gAIOP53Ls zca}Gq2lhNM^?IEF_{PnfF+nR91MK18}J3AgVem_^ZSOblAWn6fpw^d?_$MxL=D9tBTx?j||j1 zg+Ht-1cz3DkQzb;3GNoz7W57fHU}0Pj-A>r&=#mL65~401XpVw(^7+)_pZi^opeKA zGN4OEFPDDkuTwlCMlxbyE66iDz_0X7V$RF30D6Gs4r1;HhTVC4I5|5_BdCV$^=5M~w_ z8#KSicaeqft;eD$t7)LZ5fnU z{8zd{aN@zBNWxZCIkvs#1ht6vN^Bk-T$)WVA<6N!65IMHeN-xL+viH;j6|t}qQDw* zWd?lFQ^vqU<1eI(@xHxcVe5o79!s0*2fGwj)7;xL5!+$B3ndt7vo-_*Q z*8Yii)QVRefxYm!4m_8 zUu?Bvz@j}!41yE|;%F^t2W8`L41o&+4i8R+nnEwp>F7ju``Byti$2kikT{IlA~syF z?R2C;`omXOA;6fRK~3z>D~I&}6Tojlf8Rp%0is`+8U)Uj6Cgu?Uo8M;5?Hwf7rT#H z@CO5aKLCG)zTJGpNaHVZ8&D1Zr8_x5mk593h9v|R2L^jFK$jQv6mmn!3aaYjaU*X` z&?Qv~eoutHC1Xtzm6M%3Sn!wKhty%fvRs?}(x$;N8w~^I?aCXLS=3#ew!DIvl6aHB z-0*qMvs1M5>QaQjRt7m$(g7(prONkshr((GYzi!RptNv{aAi*Hz*igG9#OPM!^TKS zKsVypSip=8&>r?Oqy>H{r7FI+I5|f-MRh`UP`Gzp1_WOizw!fR-@GsLG4Lro7EEfB zyI9Hj(6jcrV$1}%3WHp&&pfri5*$vNy&Y}e`798uXA>hc_>0B@tpeC4q_z16FAhnt za#fF+uDbop8G$1LTGt`KuF#ySEfOkCh3-iha47Ke*zXFztGYzA+m|8jycI9#%6W88 z0{k|~EeNjC$V&l_>5+_oIA48_RzdzM4lDxvkxkG{0)K)H#&8GxY6icm@dkN>2^yI& zF2vS|9ONaGWsdA4V6=p$B`8c|U&uUeVpB`FDgPX~PcM@Ox|s=DWww(|9WkUL*&Y z4>ta;V(<<6ItpcE%Rs36jE2qVYt8kIyVP{&JWqfy-35O6Tha7S8rh8575*B2DaKlf zOw)`4zCYBs9IN=o2nMU_^bGXOive#$kGB86Z3w3EnI5N_Lz-PE_eR2$VZ2E`!m7^R z6#y^jYwS%;NtvK{k=6cuIR)N#g$@U{c0twbQ{hztzd7Gx@CAOq{q|ed909UbMxG;! z7%{laMvQ3caNv@vivbT$XjTD3fdjxt^1JtH2-t5t=#XR3*#x-TfF0t2O!lICG6OGV zjSih|CU7N2-Af2?^(hR#0D}FXS%Rdf)(4%QwOVE8qR0ulWqg;40Mmu7Bz!M?XpY+v zw;42!Ja%Qw#9O;Uui-da@|!m>E!a()jQ)#2e3ubb?gX2$g2V7ZVgUFr&#r^Mf=&?F zDH&D*Ou116IQ&T@=Y2u+||R*aYo2y>lYHWA_KI1Qy_?rh)!`)X;m| zu*wz)Mh5w{*kxL$W*Qg}{s(&iu=r<^+GHV6o1kd`LcJUAGx_T&;ISNd#6=&6oWj!c zI*q^W0PQ*~_`!z2r+d-Kou4=hk+uYW%7a)H&VaV&92=ZlCYW%)--c&9Ga;Qg?87AW zUHRR1SeDwhR#Qtvi5cQV`$5MDZ4uVn(YTuNY2zj$rYckd#kN0RBtGOU?8Oc(_@#22 zJcK@-8<+w2Bj}OotYQRC0wweNBkS@9I_*FiGU^XGODxD4f@6I?SEHjIvDXxrgTR8^ zS#}zt);G$LQg`1afP?)~DMZ;?L@nPWT~g$=#cRG$VJ zN6dhgkD*wwDKPeDL;!42AezSCc0Azcx@5uC>I2##&ywoQfJ-|wPeeTrEfQ`lmBg66 zM(Co>{)E8v&?vHaS&w{92ggQWdta&Ab&Q@Mu+TRQcn*iq5PVF_J2g?1g1@cDRj3$S zm}-@HP<6etdW?!*E_3vz%O!V?fqEMPf3ZKyNPc+d-e!SD68t$5bMmd9#{fNSLhMT5 zz^?_269>3^0;Dm#|TbmFV8#E-iahDA(eC?;!=T!azO0P1Sa~i4Bn$^^ z4Bv{UpbL$^zHJsUfrTA%3(#clmHQ_npd}CtP)2lWB=E~I3KH-&>eF^FkJZ;i@W3(z z+tteqxc@pxV=t;Arz@GD^<#%Up|3YI627D1jQ4usC-t_ZqSU80RJgxbd}AarKxY?s zKRk2y>`@{+l*ZYB`ztWCSH04Q$0uhPp#fk^5-qqvX%-FgrgOQh1UR86DU!tzI#r4r zYdW)pEO!(5Exq>(=&vAHYkrNulIj4#LlN~qj5jp!I}#F71_c)S!h&lKn5-W0hPv?Y zRj)rEGGlI}2`t(eJYn=DK33_ftQm_`(nBWvoEh*;fzvO^H9EQbRNNs}bTi=NozZtE zFKD~}Rf#pHrKG30+Fte!7a}nS#u3QIzhY!|k)Jns!kH8GQ$p>NvVDIwzDg=Im@X)oTA(SQG zKoo7%?ms|9e>ni5gjOCIdcEyNM`HecjPBTY21(b;jy;#mfR#y(BCV2G z&f&mkY)gVbFBamfITDN!erO2#D~JS%oG(8iA38o%nW5W*$KU=)-?zmMP#3jP^m|{h zZmJu2j2LpMC}_Z!0XOL2=oW#!By-HlL%7eZlQYTSOOqu@M=Ju`&m6Uh!GA#?WhV@H zf#9(tq0KlB(86EzluY3&{pDcu^R84^TlT|%cCxCZ)}Xqu0KK5@fM2vz2OD)g%f=jV zoqTfs!7qP-H2Ym*J!>Z;(X|uVL)m#Ky&PT;I1)Twf!S?*pWUBr&q$_;2~S`2_gmzf zZ=QYg4JaH07Py88N5JA4fo+5?7?v9r4447~KIVPg5G(>L(MLf1cg5Xx&5t7L8GkQU zWSybcyA))BUpCj)1^1^lNDaZXkp|$zszlYc(9@LyVBxJ-0axGYs5Sj-&lratEFccy z4fslS4*cur%6(+bl>h?ATVu998yLMG&x@G@t73>I>~@h1r3<>dsm#Lwu^+{3ozM2! z;Rjz|!vbAO1gy&z0vnKD7XaG=-Jv)ng9G1q;|myHGp=JKpW5(0|@pFKI*#r+D|*3o)ep*@n}2F74i&0xK? zDQQQ^0AB$%R9U8HiwwsNoCAQ5tC!f!$JSkZ3$~P9nX`3l=|#eSz1lY6AUg%T$WLU& zU$AwY`J-__(nu#fqULN0l?kwy7j(>cqvcl1%5r}L_ZSz zr38C5e2E!4vhNff1h!lb!EubfEJg>~W5M1i0{j;8N}g>Htkp)wR#X^V1#P)o+Xsxn ze>oFTQY025kqv3YqCD>RIaoIUSP3!_fb}w|Bh6V+&a_Q!F)3Tq>{+FQ(UJ650ae3; zXB3VF+{oLaZZJC65=QgD??b&I#~ZWu_9$>yKyVd#!%Cc;1_G|!uxM0cr3=9W=LxLl( zuM8LjrpIUjYnhiTJ%d2lBIC0%IFJx{gpqz`FDxe_DV$`pd;kIuf&5~6MybMotJ)U; zn81}InW1hh4r~M-LT-K#7zTX!PXd$l_bDX?M&WN2X`?SRmx|hzDez<9_kk0gaENXI z7(Oh@N^`u0sdPY>s)d)-Cqn4R&JI}imO=dsG7{9J3i{GZjL1bgw|+SAe4Y)rZR0&= zt~k&kVA5J0JtG^+^A!9DY3$wHcqpM8(CpD1iT3V{zwz1vB^mTM`*}EnGsFIKF=7l> z5f)oZxKLL2EatH>-@n?}NuWoC|7sII9G?p>^RMbjC<0$ZDl1iBnnl3qJ#^pQT1Zkr@x`VY?pIi z)ogB}lyv(Lt_ z1p}4=#c_*7!T% zmxKc&#nWSMIhFyR6#!qoPVOW5KnH+nFK57fng#%CdPw+t>rLd=ts6IH41P^0Oi>Oc zPJ;oL2!CO~@B9+>ThbT|YN80}Nm)a00HA0%LnD! z5*%M}gke+?dTLl*A=m?`cTtH?3j~+;jZ!T1wBm@~g;aMm?{(c6j5yVCd}IW`tX1U0 zpZAQ?B2<+n*1jO{dp6-^gL#ffmEFt%?w(942=1={o7QqCe~VE>B`$Vt5i#yktaMKv z)-z{2=?HvP(8(1LKEj((jQ{)tQ{dU6yr6Bm+1r~Arh6IIuCh)6Um6fAl95YLSi7rM zDfBJa0v-;*!2NU$Y*80l;bngeDlaYSeUm{^oV!ZO>{{FJ8(#!w>}m9|)S zgT_WrH!&r1*8U4 zSBWPMb$%l%e{Vt=@s_68nR%5OGXr)NEDZ{`hU6{~yzF0oQ1<64fN+(HuvxgjI~`F9a z;cp4ippj5u8KETx;Vl0(0#h4-hXLBLqo;Z00I(JVBbcBM&z~qTm^5Jx1bzl!NdjGo z-kSV&L}+jsIYEug4+OtnZ=gbD1RgwCXum^6eo;fPg)`gCtcK0D?2H>UBWI)_+#vY5 z1Q<}1=&M}QiARCp(A6rQS&RdhPXlZbyMs|_;27o8rW8m}Fy~&9tUzmX^Loq@>Z=lq zG8=aeBCi(paf@Pd8|wrdk~ z-on3l_U27x8Wabn+?ZJ~T4Dm6IpDXqX<%Wn@fQ^bMi%_N-Nxk9R2%|-->%Dyy(j{b z2Y*F^ivS;<69_8^tSSt+#F-jwa+b)`Sp!1fkEwuOp)1rE_q`f0@&dtd;NF87cQn(y z5#@kI4Fq${B9<$4m2k=@G4G}p92k6;h{Knkg>tUAfnMMslE zJIFJ_Xfvu2MRR}UZ=iMchc=on^S{&{XyJkUWLMg}I$hDXV_e1~S;M4E$B9VoIAK7X z#Ex-x^fo=NO(WyV7@McHyBY~I?r;H}W2G92Kp5?2_Jn5QIbO}Cx3mbD%OJh1mee#G z_P&T*ASej}Gwv3L=~E0DXNPaEZqO^-{z9QFfHS~a;}Rn;)qe!RRwOAI780B-jU+3D zqYR@trs48;{s#O7aGws|OGO_vF8pOZQcnd3gjZYiKw!o`P)=Y(0DQX)(0@N9AK{b% zQ_AP(ll|2^K}44+w#AYJ5TyzOcCoA&tSZ>4jwO!OGvaH`dd{1K1icXkoR%m2OfE4;Ws;UtPaH06HLRV9rIeB3&s|#d; zKKEbE#5W?toB`NLd3zl&Ee%B-X`!u?bwGjJkp-i3mBE8+hcZUCKrSHgq$iEOY?7Yt zwei_IO*sS2i=0uA1#C4$@j#yh_AXia8~?yI-z1Xr!pz0V*#YEewA4VagHr;(`IQ~( z^1^u8BC`Q{7NPwyH$DzFQ%f!FE}aC#jIQ3$sByk?GC1#prpWmaQ(?qy`+aGI9Y^`( zK(k%jj8{?01q#qgkpWB}Un%|AptbVJ%bhy3XQ>O_WI1Q2wT0nL;Jg;IV9t%_);61Q zdic>h16OCpOInuU=XmGN?c2A{ku$2p!`q+N$MBc`WyXB@ir`w4 z4p%Y;%sod-fZPkwU>l)FkHU@-*uJl9bn=UGqf8waokR3G?1oP8r=$)wnSCscI~5}E z_2*C{I-a_LID_8K%;N_A^~{ls&%ch;sPGp9^x@qr*Z)tUFUXtd8^Eu~@TFc@6aZKV z{BzRs*Cqgl{I&#tM@>S0c|p%MXyxLx9~Ne4iAeArBQVYTXy7+fz_CErJ>IQt;4h-P zBpQdM02l_mnf0Cr!SDj+>BWGjNLXzKvEpw4;_`MB-a1zUD}h5)rwANUn5|asY^oVl z4sb~4(DXcSfLAIpF)o3n#U$A}ewNfF!eEVs}ZEHE-BU7feIIixdB;Y3esIC~r2 zI4}^)6bt}n)cETvxJs-2OGE$~m<|QtA#G@OK`HBmvcrK~P#$VLqLoN!qK`OC_Qrrg z-uf+7NppMRT^e!Rk>T6c5FGxSd0=QP$m?FaUedE8mMT8V?r@5~wDfz)L>IQe^FmE| z{YxRT>jQNX(!bZ;sd1Nnk3@JNmMq?`$k0HjvXRyY_RgKd^YdQZyoD1S@8m}S@tt?y zh7JR~sVIwF77N-X@SD7ZKUKndGlJ&my(+&j{(ggixDoH*3q2sXovm7CuV{t=-|q>+ zfg;X^1P{gyi+4o(`00&E)sPqo500!5ObJ|ax0U%uOp<*(j}hYCuo{|;TIOX+K0U(z z{Sm#Y6a=mU{7PLsA6yLB;Ra&*lf)qvwK>OgBniquC4;l)S2(X-`Z-m%X_KZA{=~Nn z14bif-8A{FmOZJC?4ON#&-wTJG#joem@w?O3fTMK)u|!eu<9>Vzg2I4b?w#v<3xm6 z{agDCEnzqWz&G9!0#5)8{@wzC-*~h6Z%GJnHC3DrnB%Nsum_hR*c>>Mz#o9WNkG^V zN9YI`+)mJN-7;abIP@=m)fpv7jS>K5AFkOzw96Vc_{XHET%n_tfqh(Mj<z z+xSaq8+1(20Jq|8Zj)8RFhkLnJ{%TiPr-T32 zR^32w0eqd54&vjem6P6%?k3}S?<2aftM>Ib(y$tfvlWTs|WW*KW6I`iZEbVeHK}bG|=0j zV_c-sax$lBm7{`}lWY(kPSr_AC;&11m>Y}|6y8bUv1k}D68kecx`AGKP8vmOFEZfw zW8fG0?*YUk$3(%($?j3j06)F{YVrWv0c(NZl>!%b`or{Jf?skW-5AI#dE<=$FkSlM zz;A%R1;B!DO#@5bL74}x3e8Ng;CIE}#Ry$eV-R48=rfyy+ldA1^253W1{_A=xzQQI zJS8RrH0o>%HPkV|WwfD5{_34Lupn4(B1zDRp%XSwO^EQar=8fJ6~05vkp}2)+(jvf zpMAq@zG2V20x5Vf&jBZfFb>cgYD<^|t*Vrr34itLw3IP9KLv@wLZq$3p2X&baYhHi z1^bM_0zfJ>65-syFKxIln;$jonKnI3!1k!G&oHutk>*P9m*P0kp_8&fAD3{r$!<%2 zs>Iis`cX$QNveDY$s5&fN`qv#52;W%zp}S~ED}HGoqzb#<}G02>ngKh>skwx(S`p; zc+|pRqGyhT5@>s3yIp7Zctu3pd;1rw6V?jBm##xnL1z;DZzbof<1;J%3gl%}^!KHg zUb<3RGGMrQ@HZ48aEWNJ5;I5z!PC?*Qq-5K6aZ!`fdvbJ&yEbg7ud)Uq3?pfRmRWy zDs);HpxG1C=!+L+M_32hjKNcR&9Fv%-zg690SM*D3cGx_MZAik;|x+Vb$dpcW6UzLqHm9!+2l;!sgt;t z{V8Il2{2*=27qC}AMfgO1ObKt|I7q908H<>^4c3^ga&~Pz{206zqiDKOCZ45p$R-$ zPFDrF0B{H}CTJ~Uni%jqG=g3LR04BNg8s`mux-#-pzB5nfEDSx`6gUE?r^^4>=RQl zm+80#3Bi&mELw%+l)rkf?;eaa(TLiDO+GF{P~cV!^&-+9OLjgOM&}Th@ZWeqi#f_K zm5uQ=4u?62F|yxFF#6JoqNU^L(2DQRyv)307?^SZXVF`E=6J=ZyqZ1Pi-ZFYD|FnW z^omf7w&QGnSD=!W{I1gXn?O2C8S~R-PIIB{PNdjU+GcuW{&5S$LbBCMc)TX-qr54}nTz;l6_IRh-A%(kz z{$?7|CTF@+glJdVR{^4ZwzK|IRUP~Df@KdZ>h{38R9?UN zmV7Y=0FxOQ$h{T(E$oHn77F7SZ9o

    xda}CV>UQ1;O!zMhu>Xy$!+hN~FNALC;{caoOI8%&w%D)r7+{lx*q$__S#lty@rj8BEjSJXMyZ6WV!S&z zt-Ta^Xi;E9Zdb;_8q9KwaWaTC+&!i3T1ne0kRo*;!Y#Qb7&^l*8xq!isR?_T9gc{6 z3x18k9ZXtu)}8#rgk_8s{DRKal#cXj{$oj!rlH_hsv-aeg8M6|oj5cv>`${DI`oNO z81T{TMJg1YlWVfKLz8Pn^jE+vgPXCJMsl(w^*HAJCH!5!*Z|_mnnG95y9$G+MT7rq z$S#FTV`>mR<=9ZYB))Dnmacm`n_% zRl|o(fy?sz*8#sJ>Op@$`fDBesPiHH9RP*{k6@|evvPEy{Df??h+>|M_N3I37|ZH# z3$y5+kYS7hB-8nEAgu1~8IuF>;n$bKZ=^?rz$EZ3Wyi9lE`|XEzoo~r_O`UARRe3M zRuwPayq2r9F+p{Nkyk{hicb039kw&l)Snz8G%<+a_ z7%=Y7PYQa2z#l)x7+?2zL=X_>_(&kyzskeXva=X zRB5AQOYoOklEeAN+);Y&TLGQ8m_fmgbjx21@`stDNTAUt6JegA8G)P23$4k|m_-hj z6kGR!S`u6Zr)Lm8FVAcGJR+_YDCRqZq^pjsI?_Dm!c*bfVQfMEMUw9Gyi>= zN~UNKn5_}`9)4J;IWRaZ2=>yWM&QC*8KD3AH^8`tnFr{>%fb zF#~nTD>*S++Gb1vei6U1IhNcbPRZS}tUORWd)o)Sa2S;cbu$y}^#}|Zg`d#;kWU( zfR^P(Jy-w?_#zAmf9(c60q{E%rhzSu!03DM;7jp0F3?7F&jBkhKjMebZAGF#g8_T> zhbXXx9u>uuVaDNJUgZ4xY+fMe_ii2aI;5%#iF=kOx-Hn*hhINf1biLmE0?aFZm7g7 z(IJ`W_1cn?m{me+kGxrS$s;g_G;H{dQ8_U-45qxSrofr1-MWOFm(*~-*uj?3Wr3k^ zkZ}!Kg{7KU9=e?y-b;&S;#n*_r>>mX^-P4-nGsl1z(8w+C&CL?Br}Jq;1$WKjaIo9 zW#cmC9B7u@gTHa&g_iLHDDz?g35z?mJ?I0<%q;DxGK; zv*n(aA7ORAf>wE1ohzZh@xuaviv*AC3Qft5uK>p);(~S4^=){`A%bapzm19fNmUkvlF3I zXB5 zH4SV4{)GToyw(`ZBBUD(#3`!=Y>FN(SO;3S->FDu43-;K1O%m+1i!yb0!JEvX9ONs zBeG0;{JlC?H#t}Mp;#;sq0sEWLcIzE)&ffC-HtQ@6RT2dlZ@5DUz4ht0k60l{wsFd z)4XHHa+2jtews50;T>EXDw%Q|Epxz0cdHQrOY=E1KXYDpAM}eF&SVX2!QkVjltSPW zLl-yfv+}**OBiP$M*@DENo~XUCBVFK7hApWj$9hnV@>Gbp;(}M3OG(>=D;Wj%>Trx zCD2i-AM6r(DH%)SFGA*hfY<;G2}X6U;gBvnIbcJte4v#GxcF~@?}y9`S6BR3 z0Bi{M^3)5bE-{HU$FvdIJIf3(#bX0=qg@4iqZG*tF<2GN64g?NQ3GtSS}_o8hSs7G z#`}y23>X1|nfyBv0taf7XKVoUu@B5q;MAO{s@p7CJrjOCqrb5_eQMsOn2j25DMQ!^ z|DBfsPuOeCxjZk!uW}#ZfyLURi2!R!768l?@YkY7U%m9Pd)tJQKWf;E4ox7-;UOrNu(;+8FE! zXKwyJr++>e@VWkatHtar3%9KR$m$i9XcM-1>NhKhTkzZA(_p|Sf)9|FG6jjsgd(+V zhQ{JNTEj1rC2w5NOV*Js;eP)PlN~4T+I@qe2}&k`m!w68-*)N-cBmeN)+_#1Q%fLA z{iDEHAsJ`3*OHNztv~$L$=vwFY~!xxpBfS|g+$at_|7r@W?kiCfu6ya+D#ABPbBDM zrzu5Zw?J+4SGETxn5e8JvG|sV0M}PQVekJ`(YJ&J@U058_4g3wiVhV$8=DzsujxYM z#A=4n5pM0Rf7-0IYRBr6*a=JHs2r*Xg-5cWsWf6*-KqbPNL$5CfK?D0hIWS_aL{+f z-wby*N(lo-Q)Seep&SWjLwy;A|Jv^geaTb7vO!Py`*c9?*Itc;Gc>>}f&cc}->MAw(w1Hpmc zv=`yyFj`4p;I9c*Y-U|ZZW#cU6FqPKQpJcH&1Q=>B69GU!yK3}uS6Zg@7ad5=e3FR zR<$R5_Bx{7hU-)|Bl{u1giQXR245reSu{^ft%El`f&a2$g$8s1U@AxC0D#X5fbU#s z7c5H{@Z|)UL$7Zui3q_V0e?k+N5BpE?=7}bbN+}CJ^BYpXBac|v=|Baj9`Hl3I~6e zv`EUsK;)f9THm73S6Q0s0mtxrzdFQitKhdT+-A@t?b*^R%rqs|t8Pvj;%udb1Id38 z6;wSK6poZtTY~KcjqK&iGqn;#=TdzSw;{yd=LP+6EnW8>HdaJ_*6# zq~({`vKn_WUIeTcRUa2L&N2fYK*lBzW~U)oMrcPQ76aywCIx%ZmOyL|o|ry^{(Vru zJI9unhqw{=G86QgO(_UWp%a13ngGYi1p`D+-}CCdR$2tOdfG!87{h?a&+iftIFrB} z(f5xgeyc?7&u)p=6p?0{w*x3xBJK{|bMZ2!3+fPAC2;FQ@)h9u8Nm zDz*@(aI%*b1cXj@lwVj70hwA?iAi ztUr=ce+CO=t6??twgl;8;1~j2{P^sQRQ%WEf@R4RFr7<M|)5&&5xzqQTH=+uw)_dV8K+*OWa80 zDN!X1f%z_vP~G{F#W}2 z%0SvWstbES1b`(r1kiC{{iHeEh%%}(&JK;h!PuVZ%}7fi*oRwYrt9`{49>96`-+;e z;s1Pa@bW=PHAunlf#-i)o>`ub(QgI87@>u_-#HHwec%|stb3p@1MPohC+I3@LvSIm zK5<%H_^>Cl{2uoEkI$bSqFWJt9t^ZEl$_L`01ZkP;qGj+IHwFp6m>%|yEDBg{&0S-BFr`X{(wFjTa~sxRVnGm*&2Po z*thl~k{>Ta7@bxyIG<6uH+Gb1K8OXmBOn+EOddiy)fPGfz*wLSz(Lm+0I*NHAr4$( zXr(d%F1clxZT!tn062+FrkP;em7PpK2t4FHHpv9R6j`8Qz$5Hk5cut%!+iU5`(JOr zPc}mG01vD6?E%2Y`F5fw(e!JHe2!UtL$N`PPVINbzQkiP01u&MqXxuEd&aW*5_7xQ z_~^MxX1Ks_eq^<9CL5<`)(rv@TVZ@=kcQaAY0@|~l9(G8f!}KCqnD2nfb8k-V@ik8 zphl0tUt@6lVPU^+B5C(7{t}Dmq@A&ki^P8EJkLhfb6y)uMHd2GVBdKqqLww@bia(Y zWe-1hJwj;qZeXw+)r>woO1W0ELHDwZtHQxFu)Goq zTXk9~uGR&?-7R31{5$V~zyJJ|^zi*(0l@tgcWS$D z{)iXD(b>HBA{b>Dwj{NW2wPob^bG`qR;U4E0v%gs!-Emk0pQ8WH6DBZf^GN>&Qb&E z8u!Qr<+=7kwxF<`iJWw}B@le!R8M>gMd*>^C8xoWTN7YWU?XdUhic%YeTX&!E2Obh z{|pc~Caw1Wj4Kz{YKVJsXA50a|ED99U@GYvv;#_uDEhX<5%a4Sz@VLT*9X91IayMU z6OJri=GdTBR_JZ37!$z*e!*X*JIZ?E+PADx{4f^Ba$_P)@)-Xx%R%$q7J=j%GbrGm z#Z3A|YVjQKetKy;Oyp8Kvu0)A5L~e~%vI}V-|)PK!>W3j?p4udl&_bXb;&lkpf5$!&(ZzIVt5j`c`|csTN+bj*-BzZh{zo;()xKA}QB zzJEd@hQB?%zK^y=e{1XoCTI{CAT6_Q`(eceS`jyx=@keIZr_^B)n>p*M`hhs0z+Ma zV1PI>mLj1|fM*Df1^Smv0&g+40`cJbh<|1LEf)MfxsZ;{fQ`WBjRS%Ct?89MMqO&F zB@k>+UCwX#okcbsORrrD<#UR-g#gb8?DZm3VdG$&uzaq@Xsf|~ZK#M`NDaYmC^-h{ zFVWLA_IAyuOf#}VwTQ_tP@}9u6jNa1mhdbH9IT(SRA{Cd;Y(+P{GetyV*f1%qpaFb z)HFDT>4EdY$Ru3~{uU~SE2lRodNUK71&qIOgQnD}Lg2cu7aPvexE=bl#=&430GACt zql$PEV7SKdxkj6o##cHJ9L9<`mNU>Q_%+8h%QdJv{s1R=p?KSq{WuJGEqbiZ`Avzm zZ5d0z_Jx8AWswdlrsNHz?$d0Jybv9|W$E>Oj4J;QWE~RR#vn3is_K zp=QA$zO*q&*-0DN&cd0!)htS)__61Hu|$u_;1l9t{pA{&_yfQ%4g{UNz^p}bG>we{ z-;fV<3G0nEQ?snVC1S*lzd~R$U`qV3R`i7chXD(M7pXz)*1wdGCHIxIS9IM11Qr9X zqGW`Pzs^X`mT>lIMbU2r(~n{g^6lTg^8DD;iM`{>&)O%}ng5ZJ%*A+nBL z-GQdWHC3Io@G-aBmx0;dmI7sjXN2@uhZjCDf+BHO?`%o=ezI1^Cx)9TQ^}~jMLy}j z5ewwkz5J*3c|r)HX!(GAQj#V`~t&O7yQD1O@N(_5c{(b7{6#T z1OK_is7t3H81&^50J-6J1mcMOISg2807i$;tv_!Y16F5V8GNG35(|_>SIzHkjRt)e zkX|N%DG?dDP-f6d=w68aj@7T?+U_9 z2Co<#04DjbIIx%S`|iCY3D!(HeiHIK9sdqf-$sB-^@}AYxAB8Mq?fiiO(@I2D^GGh zUv{?JcoFT2z{gTGyOG~D|3XjF1%y%g(%3mWSwPZ}M@Ody%-s=cw;JP>(J_}Pp&CT> zp*6AIGtbTC3jkBxYY_qq;J_+BsI1*6vOS?pHIAsCfGvY1yp*QJ46~gieBXtC7cjD| zhNR^6LSxt5!vio?VPBS3x0m*M_8;Ax(l(2nutyeX*`Ni%;d@+TVcbsBM}c6s=_{P_ zD5E=+mLm=qlM{+0w=}-lqfe{gfZ~n_-4+&&ST#?}5pKC;FjUW`Y*8J(lbrnFc(gTK zLp|vof2{}X2!ef$6F155eI^86WhT5SRv$I|uIqd!$yEmQTyOd27vL|JXDaz$T|r`h zE(rr3qxfLS0u9nO1{eB1D*>5pk5(om4A4!01;0q(mkJ785X^$43nYt)RM}W&;)}hv zHl(rIlJ3fY1FzF5(wt$PMch_jgLcHO8f;Zg8UR?4@itRgfo;bCq*T{FjBL~mz~JJ! zA$TUQ=Mh<@B|hh{^t?6aA%tzbLJk zuPcN%V(`~i4z{c%ry2lYo?+ATuA~eO9pJqc?oqe{~`7KHyIh1 zs~sj~y~2lWm8NCmVCI+@GAnkr!=4ssk-PHjg(Aw@P9!lfOoM%m#`#w^=Q_Q$eEHhrOY`wQ)82ZRcN%}Z^?^IS@72tG6=8! zW#dD{Pu}VSu8&Kqflx^KnEBc95hMT+vU)-L&H!-ZqT%!q9aZhMsX21^8HYZjX+77q zfoH?-Dxb1NG#iY9-0*AWmDL)88;iw(6XRLXJ2XU@?GXi0KqH5*o~%e_!0ih?9PHJy#YTcU0oEdP5>V&xvccTdZrG{{SS0W4oV{DDU zvGpS3VS>O&6JV8=gtpL$$I^knbg}|D1b9&3VT4W~X3YyfX5}Fr_TriSP(#W-)wz}c zXWhU80_Q8}NDSD7U#5VK1)HogCcidr4IPmE{Xt@(d4ic+34a~3+veGXtE3!B5utCo zF{zv#8Gntphygbfzje+M+&i9_oisHOZ^J9Mpg%EWFW8hWsPG>7x10(9|?UUU@+wO zX^o?WvIrEoI55?{Z|WWezkgcc_pgY+H#X?KN#J=&FbM3VD-rvaWEm3Pi3UpGdhxWf zEEedf4@dj*P+&)(6HoBZvf7c=Nvn?vPIzQb2UjTd~{f z;ESbzlpN0oheK!pI61OIfvHi61?tIn;=nMnfB_hE}chHNFS~zQ+2v!v$4E~mMyo;725ZFG$4LqK7 zjK_~c%^Mf7K#%A<@y~iFxJ4WpNJE}ID+Mu?!%1*yQ?W6)jKQ;Sn$9~mIai1c#zHLz z1vqh1tP6|3HOI@Lwga_TFgJ`Cg@d_^oGC3c+fhMm5;WI-$>xP$UGUe?OKZ`aZV+HL zGhjohYbJ=T%9+-Q$%!0K7uhTks=Tka$BvG}lq3G}#$Ijh76=pf&osy~hlSP>zJWl^ zfa=syL1%a9)<|e@067TU;y%^arOv*<0wnX^kpdW)1!X<&i?w-3VsU&c0M;5{OwTX9 zeD&&;f@Qg4eJAsCAoy>nWL|?Lo#B^KW@uSpf~nM5iew-r_Lcn%eK-h=?D5})G3S(= z6*U81lf=}IUav3$Oh6Jo2b$rMXo?v3XJsU$;Tj`wKo}GB=eGsHV5rIMZRzLLh2S0* z??pKW7}ZgOG{xvkg&KWl5&XJFfA|c4Ec9Hu2rSqY5F7+H12){I3_q^1u9&7x(QFoh z2>`6czyPq^u<9H9{LYov1i-WG1Mmy8GF0JxZ+B=xGM!s2NveH+1{#2orodbj1YXV1 zD-3UG8QK||4Q&Jt39b?WfbA+>6j;;1yy?#q`NY5aJ8PR%!JAgU=Oec^`&$HLo7w-N zvgIN|limFt78?=GCKFzt+W31kO8$45`UQUJfWSL8{U!@@1cjB4F2Ou%V3s!4_IjSc zuegb>YP|48rjt^$P^X2`Lx}rDLV)R565kQ4uaHVpp>${vzh5m6P!n2+Kr>)DSL$#t zJ`_19p>_^7)C;_9@uvZR{p4t3F`ib@95({1&fyC}WUL3kUjvV|WR zJ>e;OQAH{=p4YPLH{BM~rpiX+&+hQUeUWAQciv4C=(QMvznbro5*SCH!hZw5#MgNG z(r~nTn!wMHUOKG${Z>QD35)@H_+kC&n}Xk$pH1)^3XBt0mLdIJ+5k*hIWRKTBXv|O z34L*3O{T~ZS_ADfO|#Ad_oY3$%>Sxb`r_!mI}0Y~!d%?12qsZ|exjKHcVZSt$>Vg% z1G`18;XDouk3rAd13jx5g|XH{z<0ycQb90?+6>qz+vlieLk951BP%lK_adUhwnob- zy7kDS70D>AbPInOF>J``-ygS+Y2|~(_xkzW8vwBJH>-fFl)Q)lyDCrUWH5QAn2*5m zJ?Ch6=BJ1<-*I8iYL_*_x#+)elRnZJ^+~J*N zwjmgfp$Fj-(~>!=ltI{2r-?OdGa}dOdQW+l2&aMGHiwx4$E2Pg>{(?PYjhZJ5*(nt zSV#0XNW@>tfMKM=al9A*Japi@o`dzI)3#7bjNg=)jd3V&vNr<2robhlxm6q5Knbs^ z@kFhoJ9*ZW!pt<~Wb?vG1Zqd*0FD_H>NjL9AUtF4GzDyK>zUoECd0T^L%)8W1A z1cF`(aP7aC0dI$2zwsuY4y`c~{whs>jg9@_bCpnF8>TY_jK&B}WyOrVECyCmeM>kn zgKRQHZz8r__yP9wI_144gJUrQ2` ztwA`JHgDSad5lLq36U+vOTqe#sDGjr2YyOga6x~E^Lr=Oe;5endA2F*;J2R}f~{ls zx4#8`$Ht)T%C-Mn4*fO=EWkBg79!JfOdC5oQeyIJ_+`M&?9ep;xQbn*u|hK`ypO)x zygaJCs13vNs4LZ1tuo67Z^G06}up5 z!KyzRjld1mRZM`xfY*4?QA%0=)i%i~7J*p{()bGiMEy0-*T1F(A!3CFVZcZno|7;(ZZ`-F zt|te3nTNzbN|7X0k&#G;9Lw2@N`l&@7O!@gM0Wy#s;A!&i-i8J@M{vBh*6P8!r%@h zQ3ZJ{u+8i>yJo;v;MbYkkjazN4p^o3pc0llYl5GJ|9bfu#ov&s|GW%mhGM`{OmC|= z)fJVWP;A;^ztjO4oWm-+mVD#m@smepR2qZtRMH7h>i#Bnq#Ics&(yq3esH!Sk|E97v*R zFcJv^PVLJr>5j{v75qL0e!<^o2*zi}cuwjggi#*>XD zp9jB`g#;@s79iXUhX6L^Q=mKi`=IS+w*0N@gk7J>P)UsZ`l0?iG-+JwI~-YDE^$$+p} zBKWOV-AS~t>F_-6Tms>98=}L3a(?%w*Bh-i z=z`XazfeG6q!GCG0ALBwn&e~Z34<+(#35alBB^>iGr%xfL9k^tK{pN7Nhq>p53Zeh zvlEEYxQfVf<^ci|IE15cx0QHA&ft1P9dNea`K*9j(`n8!L$L3l=ItV;z!b->a>apX)5nu%{1*m<*X{~BYYq_fRT|~A0P+7Nl>Zci`7y|une0}T4wqi z=pD_H=zg0n2@kX@zyC&To=s|RV>(hd53Rf;6M4gKi9+~Ecx}gafCGOA^osmWBs89j zfjf@$|Dhy)dbaOJjJJswEd~IfKwrPyOLW@7+VD#i%=H!*%4WXRq1$pC2JE#_BBNed zM#ueKTa7LE*>?U)<@;0X5v7zTBnlS=p6Krb9!C#21vQO}yg*-eXjiRzFC}GzUfs^r zK%X63bMAn^lywrg+YEU(66zd_^w(6$;4n5dU(?F|tdxTWw?=}%(BCTUe^tfss}czU@0+2OqEIUsY-kp`N!i)<1Ddv12Y*WvjmGu9 zH1&-1zx{S2{G>tG=09>k1B)NcV z1Aof`{l?Fj0$#c9YnB&L;Pe}TWph@R;Erx38qBfyLqz1fC9ws1h2SMDw2~5n!9Qle zpEvqiS4rw%6Jch8$4n|}{Pl#LF}0Wfq5vO7;0FtZpY)}!=cSbFN~t8p4=xyaxNGO9 zZD9&1iU<|h(=FxpEZk*-eK+}4Ew5XNy?x_&o!s6N1lIv}?7wV4m_9X{OD*wPnKVj5 zprj|}DVGFygT4qY+EU%ZUqdjLBehqBAx+7{fFt@1(SBDYRc&j21;1v28!70gF0z(1 zQtY>}-`v-bAjpf<&TNQqid`+K-5KZ%fK7&#(%9ieOiab88+tip;nCTUSfhu=1ReC% zN}h3id&|lIVfb}L-KmI5+FEb9&(CnCdttzZx{=x`>+`9t&-WqF`11P$0JoJjahRY> zcwh>$iw)ZAj9tQidEzj7fpEP*XITep&flpI{}RnP;A{10j_h;b6h*$89iI_*f!4PG z;Fm_iLGlaA`Kp6njYUVbQB`_i@b_B`&!y#kH70+x?6>4YMv{|13^)$ZVZbW~4*Uj! zDR5xy2M-1U({WHe!)}*wS7%THO#2;nfjay6V8r{vb)_u^`%Z#_$Ft@tko&0K9Zq!Q z)fA1r?jd6eE1brW{*6B3N*`;5RG8v`x{fR%}%)*k%&>^5l7?9c*W6Cc!a zp(aNQ^{P@LI2oXg!?oYS)u)zD0+&pzTb!YUo;1ta=up+l6>V+^>KlW(9PCAlJ8&Gd zJ|^%|ucVC^PLMSI5hwy<4{uzm(F-a5Zq(o3Y0$KyXjPhKCzY!DOz^+Cjg}-w~ zurm}0W?*8#lNsEk+&DsqVpDXL1pDGesyN^lqR5INk+L+fDOrLudJBako*{7XV!*ev z2l+<5z_(qj!+?#zr3S`;RZzHrH_$8WRUV{W+^-NnCg&iU`=w48&)rDdL_tM@Jt3>V z9s~CUz!;!qe~u6+-uT=8GX_tQTX7k=lFu)tNjSi77&Zrb82;O@bcZ&-SD1SvurPFm z--Q9YN<7Ixb|m+x)4|?F3Vy*~02q*6=r6k(9a0djNnmAQfc^d$er<$q{Qb*hfL@Kz z69T(fgTPfvPDdn_;pDU<`%$&ql#t8C1NrzHgbk&(JXeqR255{Le%Bnp_T8@v(T%I! z*en42@g(ewcLzU#8-J_xvc?GiT)zpN2&PRxjlck~AUL=ijI{v3#fM9Nhvt~kSLaY7 zKH|e!3GC7`ovo!!lm_WJDA!mPY^8VsaX^=j27zBTF=m>g6DL~+Zho^27c4$~$Ug~# z^_mFqYJ{#qs@GmT3!K$RU~H4$NSl^8Xuu5wYd_!{`m5~^RPTrdN8TGMoSm)E0bjP2 z|03xD)|Ht5Y%?qSJBw-oa0kko{Wb$eL{MoNrl0{{_j)peN`ZF#$T7(CP{Lmc zx3=2EJ?N%{t8DulW*4UBWQu+)R%7FHNO1M=h;9qC@wdq?ZKQuqBnvPjlNnkJ$cujS zYKdB(kbY#~Z;?^j8NG%nfXDTRGml^ye04$wkgw}xcumr5bV z-mpRgza(V99u4|7_@Z+R%242S5z=afUhx+M<~>;?=>)TnKe<9YYOm|bVx)wEu}cT4 z0WWdfM_-@R@6wIDf~3@?%vanO>;{7sU}Fo>4gjk|H~hEyvi%{>CpV-mX$8OqsZ|Pk z=?(>A*)Ten&hV=P47cqW;C0^`aBk|Wb`_r*VKQ0%)R75-XU+@KD(Sy=HH2u?^TU#& zN{;ZP%w#mR6!;1Fdv^Nd@WX2Y;7d|1hynlfiQocQk>AekYxqUv5-kL_BK|1F06j~5 zu*87Zh*)xmp5eEhv)CdWSF%Ej&ZQjyOtI5dOn2%e!|K_Tk_u5$X7-UjFKdZA>uS}Z z(q4$s8T=B}!`5ekQrOTj{CX5;s2hO_sg1%TwVuB1?aw7<1oL@_o30SJd2kg}Hr(BX zt^h$h?1oQpIL4Duy2jhl^ll+(vDwnVZ4ftu#^o7*=S6eMMN&I*H_Y1SW?VbruY8bI zP+6lL{h4#yEZkoOaxXUm2YwTPs%BxHAc55+)lKqUR$m8zolz)pNsYmD65m=|n`sdZ zS&l%i{5sg4;28&%b&xtwM&hS$EH}MD43g9qaL@rsdy*DP0|I*vxTk<4PvF3hhn$jU zPIej;(chLay-cVr8057IzA3}w`4c-j1R{-4Kx);fP z5ZUn8tuWVhRqE-0D%twe3~>U<1g+|iKtk*zAQBjCa7Cd+j#uCjNQBPUxA+!zNw+uu zg$X%GO#)$6!^lHxjZIEpLEyT8LvglR;n&h&TDnN*KT?mr1gz$Y7JLO!LvZ8olqkM* zE2oYQZEZ&^MWBQMD=55+08zhcV&OfbMIN#3fZzWf2z%$v;MIks9yrVuc`r6)2tH-en{4Fs-M!-W@jVKL1&~}4f z8StqyAL%+#s$ej?o-=6!Ox|}~Bl^R(dpI*-85HuFLL4_{cm8ew*dV)VkA6LR`x5+~ zzh9mPgR4CI`O~+qymdvXbWse~vup?j5RNRecIBtF8WWb2fmkLQ3$~a+B zJ#Qs2n=v?2*sH1FvnNk>%pLFt6$6g_iuXK2%{pl#f?!#qt6oD-3W1aD4577XYKj|U zW@g>5Ah@_N4)m;IvuVwrIV}hDb3v$giG?7Ki4Lx(?4P9ourU}h`noRcMVkS0G}L$z zd27`s7`1iUt-DA>gGg?6yGN0g1c&=(p_0e!fn`dJ28Me+O~j#ULKBZ)Gxb4((|z>q zjn`Onv@ZjbW1D_4_{I)x1eW~Q&wu{mJ@yeBp_}+_9ggdYeFkj!{XS+L;S4J8q zR>xRQm;HHHN{eTZ0T}TFu;yKCeDpM(VyP>lD(UI3QQ*qp^+eo-d~qNpd&*1$NGR#E+{uN%b|R?Swr6%7 z^{P&>LBSI>)$|8%$l=@DToqap(Cwk@Tq1#AMdFC-bNKJGE&TH{MSd=&0KCn7s|JE) zc2?@64+jc=QvoY$Z1aZx4yDXfz<(_b1OBKPZ~%DE3QZ;W6$INCx~;blcmCxp&%>%? z_SI5%Nlyl&l=gX=Rwd9KxSS-LjhiXDxsn<^wo);N*-P3C!F=wr(kS=h|Gy!yGlp$4 z81V0Z_j@6*FgFM+CoIUX4bXS`7$Y0Yodx*CA3DbjylEPIrIDa;6X-DKPS_-+OAP5M z5*)Ld8M8J1A~eoUcp_0qR;){>g}{83{Npdrh(h_ZOL8rU0sp5$cBF=2auh!M>t8D> zhhl65e;v4EWxz<7@7rqsU>h_V8}y*F3&;-et<91n6aLOfUWd*TmR7UnRaz-KN;ocR z>WjE*)j^@JH4}%3=`MhVXbxE8&JpXCIPDM(G@)9vvAXTZeq47maAM5cLTP}rlP@q` zI=u>b>}>wa+$hE$PJSdfX*5eI&V89@+C$c?x{vkHkN zNPw>wm;`!}hF;nAe}g`%4g3`Zcbu6LDozI4cZ9Im&x`ab`tI?)s@gO1p720ucET4H?Il|1x^BP8uh$fQ7wh=&zkhTPlG4oq{lVjKo1eg!SkJn=X2#-GoI*I^a3jpuSPYT7c zFXZTVE`0F!*;{}4`-sY+goTFSIWU$_p6Rdh7%ibVmX$~d2n>vd0hxw<*MN3*f#)!3Fw*{)`_0E_Us4} z91!;R@v%NYb|bUxywm3{_9=a4s>U`skfNqz`Dn7kS9eT|p}@{+6a+TnQW=8jqMLB` zBd+M3ye!mSf}+1WLGW%+UqK;I96P0P*pt9)$OA_M8VpzwBK$X?>d47@V4Ls#6eI<} zo&px}K4o7RZ1@WU7V^4-BtUZ}mL={6fg@Sw8_{j@XwMaan7+XZ@uDKYZmHp>G{-8S zZ|!MkATZzHkI|CC+h6-9h@x<`_f?&w>5G<)#Pd)n@cU>(V2*8HxEHQVSVx={^oTz} zc9-B3%&f?9A+RwvvYMZ}cbVA#iVgjGY>{VU0{8&<^~NIL;coS`Xm8b3QH;O|L5cGf z@LXL4N*oNH=`UO6fUW-?gP)g}f%Z(RkvgkcM>=OqbUOwti5d$Ghi(dg!+!NDl?=Rne@9=b|)e;I?t3S>C)7k>RD6~v$H)6UJ9<0NO zD=h-tXX(otal9sK7GoerrWu22yevh_p4==U`;&N9*^|P6SNTK@vo=nVC;RgwN}+`& z6Xm?5PYZoHKt~q*eN<9F%Pu1=%gKOuKj}o0IXZ&@gS>E)%g15-npi>!=Xw z@!mE=+i6pkzoa8DolSpeBXB+Fk^I~Qz{1}S64CIx$e0&UPj_WQHh`>dCU}uHYXo;G zmh~|L{m2I2y&g>8s@hPG%DPR(Am6jfXI#p69>QC_zEkCpNrsjZMS?E!i+RlS#>T`( zUojY-yr5pDlOwc!@clCurQmyA>K{hv&PxU4KSATb$Hb!V#!|-lImE2;_vB!g1<^CLv z7qr9tJ=h&QX*i|898m)o zfBToiNM1fz%6H0lQoN=jF_mpV9Qd^werY(4y1;;q)75R>1OV%os!h;TvCUSi(v*>@ zUwOzXH*6CuL$Ki2;x9jENU%8Vz7+T^9aosgh}rtrDVM>7^|fAIuRxj!@M3{3-E+h8 z$$-1}eoXECN*DZDpLYL!G8zsDsd6M76znRAC%xGrXOWTs9-#tGXxc9A^^ag^dq^7;qjULba<~a$C z^;i&0qcF8vdt`b=BkABJ{qW3u{Ky8K6c9TkQa7`uzUh5`T&T93|9V=F?g)S*aeYo> za9t%%&|WEAMVHU~w*WZeNnqrq>cWUEFKMqTIcR~;FS8RuthiXe&<mvdkgTP$q%)MjY;uVgYXxlP(;1vv!36KSy@LTqb+`o@l(KqHPUs z>u&t(vxr|0rSB61u<;jgwWqVx`*#X~)d?{c-YV>~fpwrSV+_*(ze41OVFsQ9zlPoD zg1<;I_(OUnfUu$VjBPMsBoIt$;KbGI_=-5)@?O9H@hMc}Z(kPy24q)BMt%ZP{>PFG z4R6-l{jKl*`nL~%(P;`d0Dd+bn1JdKV6Xj!r*7!m+a3hR=?Y;;V{^xu`Ae%emPNhy z{?F?N!Y|)_zW~?>todH0Uz_K2DOJr75Cj(d>ddnawh^fjQED=>GN9ygQ-BMhg}?zK z`KZl${yN7#E0SztcSaZZg?JCed-Z z0&^9|IuD^oEXCob%9iWN=3*^Rb3ThI@%IOI>F@5tR`X?#(2W-v;BFejO;M_nehpr| zhkBPce$3BjSwv8Jx-I+TVR0BNSLpGx{H;<;&^O>K3p1rUt`NEuU((!{-ZLTam06&= zRZzf|$dpLs7rc5fIuK%_V3kzTU-qjv@YmoQ+q0$F?}Whc-#H!@)$ zj1u?k>cs?YFDq&TFcg^G+q6DJFF~+wXCC;o34*O+zV6(1w>lAyuXDiD?Jb?X@CWes zhbpZJkHzO0_FQ< zBY(Smvu>Y1R=|w=;IJ5QzH_Z|x-k^+_gw7H8cwig6~vU<{%>Kx4)#{!FDBtY3y_uw ziDq@$1jphca-~h8;t0TARcnV~+5#kP_E2C^MD<9&i}i^Vamr%B>KJ}ovH}TgEiGZh z0xJ?p*Fk?z@1U82y(|G1tcCUpe5XX5vlxOAV}nCjJAcvUZiT8s+|90XhS?7Ns4-Y5 z46=ImCNt5DTl)ViARSmeF<=lljR4ZoCYMmp?L^JCx;|qt$%>~YzZ98&KM@48sc<-q zS6{lcRGcnLNx$t9V=O>S+(V@Q>rGk`LQ_?2Csmv;IX@yaXXzbO08DXAx4^Hh8RH6x z5E%4T6$%^;$3@Z_c{BH0Rn=@y?TCc~w1_YH_Xh$~Mzl%57b&1U0D`a5hxQilE$cJm z;4%2C5LgYrNU)az1XHMzk|7{`83Lm-2OgDHFE(9`Qzh67N>&pU1XF^+Xc+Jc!STEd zOU>GUr~8*^j+bJ6*a<*$eH{0M(WQOKIu&*R(%SDzRqz)@7zd5xfd$m|q9bE0we+wy zV3yI|*x7_`4A8Bc0eV5;0lzptZ>Y;kU%@YuY`{k<8cbf75>J>>@9>8hs{rf0e{_C$ z7Yp>yY-L_oAc+EVIP$->MqdGQ4Zjp|;P^xDFGIro+z!wv#TMuwu!3RP3G261&Xe>3 z*!#WVw|KPfJszUa`hDKq@4oe4g}(*BXGv5J5(ATwi3vx9wv)sv*^C8k1UCHo2-4Yv z1_K5=I56;6fJU(e+OaqijhcQ(uFPtaH6Qx|$PUp@+wMF8B9ZN$%u`lF7>?jr-`BMp zA1w9!M8RJvJM3!yx8H+DfndfIhfw0MNJswBLTyDJmFl4R?-2z_!iXR++5|YVc#OMb z%uAr;5yr-zJ>HsgQ=wy*(f$X+k99Jl7mDVu%HK@CaF(YeyY)nX`^}?)HTn zpPtzAlc?q;4Z)@cVqQG#Y0U#K!Q$5xgba8Jc&5ba1g_@@&}P7I0l+4|V!%~O$48og3I&{yPlg()8kkCQk6@(p-Bj_tDGzJ-9vO_hy74(9T zR*_$-h|D2K;?yyinC_@zZ^$oXjv1|E1AHIou}8nviLdr^lBBzHKj16+D+XNCy~M$~ zQ*G4%ZFOXsu02!`O#L|~>DwW|GD4g10=%~m>9aG&WvM>wJi`m~4FO&maNyUrXY*h5 zk*dVGQtnVHihN3sgTE(R5^-jJ$GX0n^?{Qeot@wQ>go*<;6)0O83cg;uZ+;~ioP{y zFDeKY0w*vu7V69a_cEkt`AkvcI(0VyTt!(KN>s7eLZ5RmIy(^8FW)5$^muzS{fqpn z062jj#wJnzgK%37PBd%*V7r(cTaTziXF86rX;^GDkT=1z81N5cLpI*lIpQ1FjkNY^ zov~Ku8Ggpi&fKRnb^Up*biwHTXC<-3usej~*wzdw4LSbPT z#tB1sLVHlC^yl;}DLVR`<^+}o;kZKU9Z2ya9r-9V0|t7-szqyQz{24)HyqbX1}EdrMU}{vzK5 ze;4>oAD94y%lFXPI4~U1cQjEA$0>t*kTBJTH~Ft{`~!!o*jnS&;Z|Axv!q z_2jKSmLZiHuw1aNFa^9u!E!oaxnWfY3jBY~fp5$RjD`az5XTw^dh)&kfvcjl{O+AN zVD%hur%5sba~YGqmI1$hYrpgMd%r>s59Mg9IdYW*Amotfh(?==>H=Ap=lMX*(fT~L zETAz$I&)F%NrQQx3W34ip_IUeEr%WK-k}al9gN?iTW1>hBCBLLFOiIvL<5205*ZoA zqT;p_228P-0XwBp7Wt~{`HyjH=r1L%$O{5Hk~V+BDrE*%@N*D&``KfAyr@=k;>GDI zQ|YCv9J`TZATnRW&sICvt>G|^JtZIT&80K{wVESRd|VN}j|ILFU}$V1!lkp_Brl}n zKdOS`Rw)G=`TNvSgCmuFPZKju8EKjd$Dm2o-?{k;cW7}6Y7y{Cb;eA9owp(Oobd=V86et!^*;6Z}9i)l3%g&D}1oB&eW1G69t9X z;5U-Y!4d~)hWOGPOG|uMa^$#Ejlkfkmxav;EMu;4jLit#l8o+Vwuq+)`3`eJ!e+f3 ziZuQjPqsrMYkoBD1mw>dnGCwSOcJ&9>sDI!??4==U7|%;^vu(UlSdMf7MXx{)SG`AeAtGvvcc zC%DcUD1mPr|A4N|Z+^>Q&pzGGS6SugAiDwRN-Dpe^yjiU>F%xC;EOOI8GKSL+T_NgvcMU4w6-v=nwOk-~BS zxWN~jGX&V^i%pthdQ9ce99eSI;7bYUHW~KlAvS0zF;}k)xCtzJL<@)u#mA<0BO@y&f|KHC7ivk;UX9_&T z4A=l1xeND20aCHwH58W9A=O69L4z`9HvCe4$tfQd=GHs9oVzLq1G#_;fzMA*__K*H zO5{izuPUlx|BPcT=LWL@-`FCJ6`abjoMa`oNLIy{4V2Wsh!99#A(c6>D3h4Rz~2+8 z;IKB7f+)0b;vWi`B0=DuoR(`C54kOaf}wgHDQMg|4voJIM06BZTg|feW}fOa9s|FE zWzE6n+{hUmi5BAP#3LXuj4AM|$I9;p|3_?X7cvA3E$JRF@SEci{vN=u@Hb*-UO$&C zW}@1|dj891z;yTvOwYj!y6NhFoL@%Zkz<+0_rUQx+MN;zw6FC=UCy*^@OOZs&=Haf zG=2gE*CuBz>E!I{2t_TkgN_`yjI<54w7LgM!J@5fVx`BKTXxVCy#~z#dv#fD)ScA= z8Bc1w3P#S~)p{gt*4UWo%&UEuTn*Nzn&A@q5`j|qEB4C<_#PDFh4xAgD1qOe{tf(o zX!bkfuRAtAQ%68uwq*|ZIf0?04ZhJQMB!-@v&0Zg-9m4LU+F9!%T?mH#I#ZJ5(iex zaX*fEH`4r4fCTY z(1!3u)xoj`^ve$m@g2lkY{IeM7PNGV@~h{RcnrZ?uL|YNh!EJA&$ETqH92pLYU0L2 z9XA8stXQ9LkTU{fD+5N3z3&&j&ww>#3HwDl4`+=JmnGc?`Ehs>4s_b6j(g>2muXov z!icpGQ3Za9#(_da1sxVo>ksc~Bu@$52reB^*V3<@s-HR1p3R8-)-6fkAvx9swMI^P z5-vQUD_q3*jD!ITEp?bKCr~u6P{s2UEefv{x>U8r6Uj}R6~USoG>91nu`67a5dd1I z9S2S6$&j;z!V(XrM!d4_SeZIcPix?OtOzy+FDSgIS#L0S4*&c#Q^44t5zvs{X<=`c3v=6tVZc&E+&W&)Nh+R|;tjlxv9XHAdG?w2IH>{yhW83~BZl8NLmPo_ zmll&X);8LL#hd>#C3*-AJ{*S@3-lTT8sv=tzvm6VL19^-1Hfi4tLJUZ1?+Es|53f$zyAkJgZ9y{)z|n`cv2A&=z=JGr=OjjusiPUFDIz zlcb*672$!53W4nk{X;=;G7@&!ni7_@XW@J^VA&Ztm7dy#1Ycy`(ts*}-}G+I>9E~l z0PG-f`hFDwW>Vz%|qQ)zM_Ji-dNdG>@k#WM?Pzy9j2iGQ+R;k+@qKem|M#K)8n* zJEPOb#3%}Y3EFa`4cztWuE4M9^%ODv(_w`k5^pPaTEF(*tQ3o(*B)3`R>AUY2?dr5 z7Vtar622t-1%7RQ4*x|%gN?u+0lwkCRiqS4h_LWCX6Psq40b>cK8mP}&eF?eT?ZUt zK*eG(bvEI?ic0W{QsVq2r!8H!|CmQK)W@BZiH%}!t`o#gSj_XP7YPVwA{Yd&BJOLd z8#{FHms3i@fMbG=t(nICIblC4`2C?j*lP8?eEvUU4E5)D4UPx(Eq1SjQJVb)fJxuz z)Ox2MmjN08zWTG*UVZgvVC`iB{#J!rE>fZj%6Bq6c(XMw4dkpa(Vxj;u? zxe2(TRY>pVDDZ3at%vxpx8MHo?f3rnxA)(z2w3lMI{f!n|NQ5#3V@YosBM@N6Pzck zXp=GlZh^GbT3$KmEDVH$*$+vvHab78o#d)QYPVg6H;e{QloG-5o`k^3h;D0R1O)Pc zc$L`@;|4p$N7xYfY=%mMFu3999DItzhb@evqK+;r{925M=F7+E7}TmI5SaQ$n3+J8 zR5ngmIcwzHn5Mv~<#-04P;&r1XjwH4J^edeG2Z`l7_bR&16zFB*n;D(d<(8;^|CAo z7FiM$j6+H_TF(%Bp>Pmb5(FL)4F9dnfgtb+V=zvx!Trinmu3GowT|q(dt@(ZNvCYB zuHZN3N@{iW^xU-Rn!9D@*SUsijKK}S`torOm`I1hQie`+o*&@`^squ3fn`UIrn3$@ z@N*zIC@ceXf?yqxk1)U+c^U198_j=5BH+L;Dgl85zQAv7O#iA02E&4BX85HF{w5-{ zHtN`*|0yeUrdWf)!P!;9X5F@Wh{A1rL+Gs8?970{O;vedBR0Yb5w0Z?OcMtY;+Uwl zGKr~V0Qfn$`@!!>&|onK#!LVg1HXr{K7+M)?4Wg63IZE@X#=_L%mJUNH20ey z?DQhBbhR}xqJXLhX&eQ)e7`%;4L~tMBc1`k-(UaPtJeYG%LNbUWu4NCkodB3DDc97 z(T<4aoWa3gfiIOA@ZG?#h%TB{NOFaq;8)p)mHVMg(B*~oHlj?x=D)ux0Os>=k7duw zHBAxtW>J#6!n`?#J`Esle%Ty!!T~Rn1%|2z>(ZB)7_ib~2;f5>E&e^p+nu;?4{S7C z!t*BPa7jPAIBT(aRu^e2r#z2?n!+r)0bDPpLC4s5K8WUaxr*)#y@s=l2w|xN$hy0i zJXgn<+EJ;_C|TzY_y(V6<4@2xfhMT|z?leJ>@+4I&X57p@LOfVKD0+DOp`_;&aW5SUCBI{`2Rxa9Dg z*M9aY40w^10S^=O{~s%nZkq81gC`2S?+BfE(0D;_K`0jwXtFUR`)>dk`V0F-h;fM- zy3lt-t930fw89A{7{}L#0}l@-j7oejn3fbA0?drBP?!~g z8MP~v#XhT^b#aE)8dv4)a8zs_Pwsb$U2=LsDuQ_(5d&@s71hb4GLrNSe3ZT5k02Oz z@JZ8s4wX{W4Zp6tC+dh!w$R~Hi(RhR8f^{1e)msP$>Dv|(}VryhUTj=NT>y6gpu~H z77Qx;VdwSnLH^INYiAdmP;pk6mn0e%g~&4A+w zO;xpXT3I^I_m&n|v&de)ejxU~5xk0=q5;Mx5O_+^U#zrkNBB;czW@O2#o-Vy`{fq}7(eud?@ArGOYqLv~v+`2(h zPrg=2AUI;%bVN33F3Qz8E_(^0)7A?S(mYf$h7Z8o-y_uSp%Vk9zSAgN$ciouSha`h z=$$P~e-$|JY;ZnAKmGI&b90MvSHZ3VzkIg*on}j!u{XIl6G#sBt8`H`Y&-t~b+mJC zh<7E+EdTNSwb#l5{cp1!$^872rhqw-!gi?*TC=`EVARvVe1z7Vz{!HdW=RB&fx#mX z*6-f!Oh_C8fR*_Wf=z&rf?m+Kjnx8QOEFvFCX$t;wb=(NVJ3lKJlJr82?Mqqr{ize zOm-S+fV9NC@GLU?3deLjp$D8datoe;(}BSDTX^8Sx8@w&M00XsIU&a&Gs+nwBojto zL0XC7w-fY<9vVUe!Kwnj!s7T>p|UV%zhh6frP@uY88Bl+(%P0>`6xoGJcZ~HDik2=RulWPo9=lnpiR(^oZrH^f>!=ZMbrE@ zu^bl!_N(7L{ulrzXMO=NPlQU~Tp2@Rx0c-Vd{(VwKQK*Vs$* z^jQ<&1IVu+moj&*QE5dI-p?dosGg{=<-0{>i%#wZ8J{gNLaRc9yflds|mghtx1b<1} z_QaELo$Df!B(xl)c7_GdcWRk#o2bPd99kNQA2!llKnz$5=bBYCskzv2R$z?kSXPUK z{*EA#h8q9km{F4g1{)%EjYNrx4ZMJq>5-we4MBm@}8LgR1zv_@+iv`2On ztz!wgGIBioSR)Bgk;ouOjNQh{{+*CV&q_YF#9uivi8KU*u`-ogO@P(vAi|#x0@*g( zNG#AQh<&Cu3$3IVxyd?xS^$g)fN?hNr)75n=N@WbF%D~xy?$r1A$hYdX}fCivP@~I;j!3ib?j_Z4fwgS7lXXLE*3G8Q`}d zz!v3Y8#OPR}Fy^R=ta{tNrvgWyaBhXMn?D+6|A_+1^LH5nY}RYyvZm;#^f zMoehoUw|^n_IuZbJ|(;twdAA{A@D;9ed@+c4K$Pom^JE(k(T)+M*X-N*_I+5{C<%? z{QeJr_yZkG(ILVU1-^58MC7?q+y)KY9t;Rx z5g3ULI`N>ZR6q`AVOWzO(V^bLU}1ztK;T~hzi{7oMSX31F650=|F#$~iZ51`CQji% zo&YYMI?|@{6<9esfkxqPvM%hLlV`R;^YtYNmOs;x9g;mohZuqRA8ADRtBk4%!!8Dl zJh+gxPOL-sq_6d7m?O=cAu$xt?|-cJ!Y*|J2*IS#C&}-lY!Z=xd z+m`9rms(dFr0MGqQUn8M-G0XG2i zUTNWI&qbkhCLYf~Kn+P`Gz8oPwI8DGm8D}nby39(xVgL-weKP14gMlZo#SY6MqU&F zdXb&+H_^uQFHqwdl_MeWGWlC28p$qKXb#v6cyqi0YQuMtkYEc07zlp(>MPe?*7Dy0 zyvARqeyJ@nK!d+k=(tWKEQ-|<45q9UIAJM6fo+8DcpS_8Z+z#Fz^}$Gmw6@_QGFqV z_Zp=jaNxB~$%fw?kIYXrR&lLI;!SrjBQLd-E&>G4rf7VzBzDLW-)*fv!yqt1(C8|5 z!b*${@Rw51Tji0cuQc!r8u;VmZ&O*d5^Aspl?y83wAKy3_idl146D>5XFTOG55KHM zz&Eb{>;lGu@zxwVvcj&M{5wAwgt1Lque+!_?2*>;jPF9ZQ{Th;7^ zMTL6bL_N@J{AK4+rDh1MTGgjoMkVeg2}6hAKnD0;8)boCD#THsuUvhl02m}L1O|Bn z!3o1L1;9d8(vM8=OD*$rAb5?5g{o?404|w5n}WIlQX?yyO6et%>j2rLJ4}F&su|eF zS20;p?01 z*3OuQ*0yKT)mk18>^(m5ph5XQnSG#Ds6+kBws%(WTbcM@X9oBu@LH_UKcoMG zQ{B8M76$+u?ho*l)bdoo(y36KI%`h$xBUU=8scKccTb4$2El znC)XAFvK`6RlsjmLR^c9skkG3wB2rUPTUR*zK*py8?TM9^c2jC9)reQS*RJIGDBIkGhEAXnGs&wM^ zoZJg+hTo^p#D5R8?zfP)gqE#^BZA^igH-tY%GCzofxwvwMxG18fnC@zt#dJ0RfPas zTUH2moz+Mfp>YXWosMTDU5N0Ki;y3@2!FEHgZ~%5~0HV*u7J2L!;-g$r)MF=uy+r|ppl zFbuewP(%^eBUJ_vjj``=!{%qM@*bt~#lFZ7a&E9QCT9NF`-sm40j1r{qGbK(jKFrj zO30{T;uH-wv+b;XMnuG9Ta=Z8#Q5!BQ5Y$De%wSg&QYaf%^J_k0Yj>yW*`=CZF*&9 zjQW)Ydi%aRMr+&87Qu#crloDytloQTJ0(XB?w&j`=@(!iAK35BMbuD{EWJU0=q<@!RQ(h z>$1!Y#N*%}DF_a(1%77)9+f){x~L1AMGRQtR7YTHdwQYZsaqt1wK{3E!i*WH!q##W z9?bXwV2dJxUvB~7KyU;KEV*6kB}cTM-zl}o=?X=tkrjOXG42JAwfXaI0G9d-)lxem zxlHeZvWT&_Dg~g~fxz;R9{9~eobzn~0lt0r+AARN&t8bXueAZ1>P52NZUx|*ATY=) z1g=i3&?^U?Ezl_CZo@As^tFJeqwRh53UV8Q4ZtNnt2%|hhyUd7Zuo5^mLafoOS52? zsguVIz)yt0VZbd=f#V2$8}a z*4I2{5Pg5zA4!lTW@>{kBPd-dLLGl4jd=l$p<+~Kz+i;V4+Pt<3bjpm5mRA036E^d z+(Tcx63uBKPvzp9Nl!wEjdkv@;4F6H=Z?C5fVe&Tv~cC4KqQ|sVt>v5cdA_k0^59> zo*A$u3^*_96Rx)hQbTY&{N28#h3Z&gLuGyEbm2CvD2p}eE{oLw*&@HOeJ8VC;lmMEJ(lC>6g zdp_$QeH{|kio}Itv+s~!;qm&@RmgX(ngcXHROL77P~tF6oE^4f+!)=%(>>mLM>) zpCu_H4a7#NB+uJKv{z6_FM>nASH7|;jEyy1x+m)C%8hy-H|36X-4E>7$K6WhbDs2$ z)T7Gp0C8P2-;D={0?$AX_!_{CzkQcubR3gL81=fN@w4A?FQY^K1@10(-JgKvUfS)6%W&yZFnzE|6N?h2_?)uTJ6 zz*&zJ9Hz>OU$<g*|c*762o}#d`J<`}gjd1%HRw z4jl;{78?!(cSx*#2@02IzS0PN!QLvU`H~rvztIK5o+N_-pTmC-KfinM#`Ow<^&$ZNncIAz^qC7T~lBNxj+JqM#O4tIOpT0L&f-Y7S)O4sbP@6^Vc4oli@NoR z5CPUbU?rx#op{~ZZF0Z%8ED&YLR`8FBesKc0y>8Qb0T8~heiqqpis0$-^q+QlfNoP zaB7JkD7&dzDItTNl$Xja*ubE_12&$IYf2QOY%$>g%s?~0o$y!6XPibMO(>cPXNy-a z1%BVIa2E>oz2R@eGb-9m$IjnOQuoK#e<<6Y+03(f4AbinQ_W1w9#Q`La2qq=&XDX2 z&M5c{xA@KCUq=?BuNizMe|1v+nVk*s!kSQ4QZ6%~ngL@^(DKf#J>pEiQ`PEfdo7%B z5ZJX^=q1rHXgz*LX;#}$NuH1(y?|zS{sB?#Py=o{D;G8jKT8B?79a(F!CZ>lhF;47 z*o(gW%Jm!9IwU3F`|Q~>*za(UR!+hXOWO*)V6SR4uFzGjUeHO6WCRZEt_J9EU>Tt` z7l5H>U&2!xed&5X*bDlmHU$>h4Fz7&^4|!s3`va>$xZ=+C3RYKnO7387E$hDbp|9)X|rZW(MpXyHQCw zUqga1uJu4-=ITxId)fnl`F7F z9!dDyRO`aF3SW$xzcv)dh}$;k0$y6g#8^|!Rlr~#CF==gvC#MCj-rWPFL%iA4hp-# zZ3yu3D4O+_WXb|GH_`@wJG>0Leif+2x5Ibq$o|j_47?2i_O*_gsUijpOm5zX6oj5c zX1a?FfB8*Imkr@e+_5+VUll%672k^s5hr;nwVWn5VHI?>J%1gSs|XP&pKbK_z;nO$ zy$bvFAnsRfe!g0HT3-?TUMa+d`d)cP3l3`;)g|z zw&QblCk`ytYNSwL2gDk0=47Egk}c5?(_bYU{gdJC^n~vV?0^ojX9FCTxXw?+XTxZS zgfnchx-)N#MS6Ci+j$u`_jJ1JByHtsnA;+%1;g{iso^&n69OCEH3G{fYv+4YILD`o zNwg}HFh=0NEZS-&o%KW%F71q6i!iVZw)+(joR<;g7vwD*3YcMH>Etv{=}ILvCk`m3 z;{-km>!gx%Kt~frL6*ZpONE^Q#+HsK4g8+9)(C%#a&u#ozgN~5`)%P&QU>+2(jy^k zAlQFyG}-&It~Wl#S@WClT?J?f7~<=wbyv1T5#vFWB#CAx+lu+GCBC2SJ!1oX-rb_V zRH#hQo*zzV^ZLs3>(r)oNxDYCZF*^+9?zn=c+Df9zayx1&33swrMxu)aBTCxZ(cR~ zJ)oL>vDDiCYAE>o>h)`t6!;1NEaWv4womkc-#^W1`Pmi$d1)?P2^=ph_ZAYo$AQt3 zQ=9F?K<$dTrR5J(T@X?utAqmU;=pf981Ti|kRbOez%S^#IAu-t>+M&=!5{zl$Aa9d z0>Iv87`7sjFyZ#ds#Y%0&3?C7lZTG zPOE#FlAX~*&VXvvrwe{VfU_40y$WN>8lQZ@hU2azJCp}?2sh)e0r>HMBmXY|Ok@-< zmx!$Lw*kh_kM0@f7-zTqiB;AS|>l`JXE7$F}(uO>E;x z>&~hD$^yU!Mg<`8507}GC7Hp=k|oj0#wmhdfq1eBBl%gw=+4BRzk-RdXMtOMP0J@{ zz?_N1jHBP8{ao~3H~#vaFf(ADzJ!lb7T2H1-mQzuDshTvDbpbf`&HO3hu+z~Hs*g# ze?@y;cVz}VPXGhJ*REHTqN^_}WpE+zGbVpQU?A9u`JEcc@Jl6)L_X>{U@GgHmJkU7 zBLQKg!$O+^*PBu+99Y@Nzati3AbBsXeuU8#g2CXhS4rk@Inc`3dW!{qn*q;Y%MKiZ zI;{8rtPSL*-A7;bBkEvZ&B_X?|0+wQ^r6SNH)l3rFffW6~N7JRnEr7Et=`R(PC8bc@_`L9lBdRh>Y${wsXq5}# zm$r1bWol^PZp>!>H?!t75|KAyd=C^Wp;_SIX(tj*L5Za?C3T}+qc!(ZX{*? z*jXEH|JT2T-eldkag70jKLfvlSSrQAx)yB~jJ#|R{@3-_Ub|i{(D2`vt0pn9ZP87E z@5%mb`dd}i5_cn6i1g8v8fj(0D6M2aCS^FV=7Gmw6cC;hLk{L!yAB|qIaEc-0j zs2C&k#kOBfLUAnNET7MS6Pl71LM-`2s>&v4)$T50=tZdlz)~Y{!>?@6Ha!Er!0zFB zRYSZG*S~AermS4~xOCWIY)!&n%9C0Ec=|+WYdP5tCTmI+d0fmn+x%M{0(@5Z``HIi zU%7SVr5ix&PrzSzG7K2)H2s&e<&`S0ZqQlu8!-k$j@RYDNJ3&EGX%f8Bxg`pLMJCU zo03m(Ov){|Owzi-?&c+^M`lOz)S-&y4e1FmFT^D>I1ENDE64 zYICTS8}WAyN$1tbK?R&uMgsk%^*3i&@T}2+6cmL21=y?B6Tv)J3fEbT?;I2}#N8f< z0TDChPIZPAy2j^~i7wXaXUUu~(BxN&z;tKvt{CuzQJAp}fJAybXrS3{gOC3<4dU^xB*zRWj_qE0ss?r#0!WY6#~l@dKDusbs9FiKM%l7-UYfA zfVcUt!59DM!rxc52C4XOjlqF|;%Ynz4E^2wpZA&XyQ?XBKOWW^lLG{%e*SW#S-cwf zSSAVnfeu_2gza1!=x`pj{g;xnX4h!RhL>Ir?A5%q^d2s8r@789UJC~{VB24Mxa8@6 zY?gY~2iTtjwUm7VoM0Uh1Fxz9zVUy?`aICL)bXCP@D~CM?;RPbYopZ8@%%Fu^lcaD zjR8Nw2yMdKR%r_-x6?(ZPntN0qxFElRX+Rd&fP1oT>0kZR|CK=o&{DQju$gv(dA2} z060s2`_mK(%;qC;hBga+n@t>;^4!VbjF<#7xSTt}V1@qbz1%njyK6lb0ojSqiU8A2 zX^?=^V}+gCg3kMb1iNqewP##NisAP`iM`h!RvJmE(k&>)q_LNuwmiHEu)((#i7(Vy z49bd;yf9!xXS+Lh>L)gia@F=Lgleq%HSB7C*yh=ra}5QC6IVvoP%hOa<4sB}lcqK# zbF+y@;R$&83sbQRnhko(nlQs}7_bpm_&at6{Gu1_FYa^LsXm5ikMI%(1xClEBb2xP zwlO+zaGcj(-_moyS6W4pu9ZK96Fhm$HQ&p-H6Wzm#DP3HGX@fZlLi*>yeT z1hjE&9SH+IGUSE;`$3L{z-UimF*;dN`u~!AlDZqJsb`7)y9VDTz?NxsnT2C~Jr>p~ z(ebZqh_UmrR8aU0uf$a*-`^vs4o*U>`7tUMNSj?0` z%MP`1*kz7L>0JBb1CFP`F7!9)kkBkKW(0BTOb#(Z9|OA&s&HF20Dad0Y-x~1Gsd23 zWLbhFiS3yp>$4IrASS;gTR`!7#sb~&o0MZQB6Z$bDv(#`TTVYH7>o#sIZ-$88#?go z><$B1)ICQkD)k3XE5*l4*IorGUnIufpTU5C!l}v0aQQl%00wPB9Bmu4tEh-T?4`#o95nih0avfn5h8MG z(P7O4_m^m++UpYiqzEuIjMLB zlyXXtk=Z!g&A?C2qLmhLoXhRGvFU{NQ{ z0Smd>+p2%vGhhpTM=tw?xK+9&+ z(8(<#iJINvz515{6gX0YZGx7)W(rMW2`vYIKV^N$`Pu2 zm3$&ZW;EHCT%#-ftzt0%D>w8Y!4IU>9o~L6K?`A5{AE}}mQ4DxML=E(B5!ARRf=b?ScIHzA83kwQt28<$ea)u!A>WCEth5-kG7ZKX7BD-_45hlF|atg?F z5>hzQPmyVNaFDKiFupvpbiS?qwMk3=;`_nxl#PLir=fFQ84_Dvw?uXY|hVW zq{wt*I9D$K$`6UoiIBL@GXq8)EyG{mp6B&c_}OsNWuV55#f`pIjiX4yOhSJH>L$P- zi?CgWZpHx1{##NZQ%H^taz*+L35dTfz_UVNXXyL&h|FClH~yk@VauJA)D^JXi2^BN z#BEX@^p>_p4B$pN(*v5&rGXS;0BuW(UV} zXn;oGGZ`f^|0`Pq>QUh>t@k;|D1`^HJDRlr*pc>=7X*g{a}zmUyBcJAGiCFa?Ui zR}EsDv(UF)|Ikin3Rieww@(6FNpek6{UTxoiv5G~@tI-U*t?3!?}PqY^8_$(4h)am zQU(zh12*nbs3^u?%Zk4daFq-yh0|LzZFQ%9ioNpu$yuee2q@uUUiysJ>WCfkkh9h1-46S(k%(0q_9? zI0zgL92rL~g5YpqHqQm`BX3$73n8Bu`2E!u)(zoTQ7B(`rx3OJYR^JS+8Kc_Ww8EaoHjD?o!CetkM#g?o%Dg`Xi;r|SG<8#u}zfFK=6lVQywILfu#Ac*YO9FG4 zFxxAT*RD(m^E$cXs&OllX!ePU7BXHFM*kKtSoggqHI%3`$0e(jn@>_*1 z2#hrTHb}c?7q~dap~}cS$hv>|l_XVRX)lf#t|I&&_;)qh9#M|ldZ9l$r*J}0oF0nM zvH98DHEv)L$4}eBeIm1un0(21;?w=jFYK0N1_UdLnL<%r!UYy-fg_YAjM~vo0NkGz zK1V^|Jpw%GGa)esXuO}-w7=F>UIuQ7e>Duy4b6ZrdW9$)EJqpvDF2*XgzNn83jjDI zcom~B8uV3#QWg%3=?=S0CUO1w>Fk%K8#%81b{0LoZwP)EES1g}3P^&Xa;Bq&0OgYYaC|X|esqY@Va`oGOD~5!iBO>}7N3I99#M zBPGJFcnPz>yP>C!d+Teo-pC12J)Q7m!(Wi-0p}o&(h)N$5RB9AW?BMRMB5sEMSM-S zsBi*85*4DSd3)U|mEd+KzMmCH=D#LW4$0{qcPQ+%(=Mkk2+aNA;XI@U1ik@mis+9) zmoj_#Ff!nm;?=uVdv=#ULa694Fb_9#>=;p3?+wT4;QUN*k!FMw`r$I45%fc+^1!NBjXRk1@fbS5fF8C`4ETeLb z;{RL#{B6lSjLjKP)_f`h=}!PCNC zs^_C{QC~%gp7<{S-2Ts0$dAK88*+BD980!oF_XgNLFX+mmYWE-3C3Mo@0vVDp^_1DtFDj4fM&icA8B0gtQ__GjZyAP{Dw0?jOPmBKoCs*}+zPJKL3Ix~28 zJ+~WoPR*;wy-J810A>&bm6o_$Voxl7=P*F!PP=o>6gceHKGJQ_7(xf#{82k7hy0p? z!97jo31Cm0*bv5>lxB82-%-y?l{(&JJLMd^%~~ZS5S(Z!36lzTACd~+wst_%t}Y>(8YoiDPxb+0+c6JN`1}+LVY;|J60B#0lxQ%DWs`mXm9Na zoOL7VL2x#Bi)MF5->mnQwkX+xw4_-pWWoe5qMcuf&( zab(JFVZwX1Xa|W#8hyim(Qx3++i28Df(N~5oC(+SR}T|ef!{5@JStJ&-;}^_WZW3B zi#78%4HsIU3IPV8Y8$Y^crTgv^4;0rR{JdmT+IOs9ZZ3dBn}vg^s>1AMW^V-6gp8& z3;U14i{S5|5Ybf>x zR>F1jRMnur3=1IocKVBhz$FGvBe4Z+W@qKFF*gGqP+|IcY8`94wo)DSwLw~NpPuq4 z^AO{z@g9gK2XDW*1WC=FnsvS@Lo!^7BN!1!vt`=pIr%6BUu3q z&XNGBGSn0S#u(k>SB5+rp*Jc8(s#3HFUII9(%Cj0_+=CSRlDa59i1fv7%iEog8(=P z%zwoQ!omyv6yp7)oZ`tKUl^HSk^Au^K}_t%+e%(eei#Tw_JU<8*$mW~Dd5tcRf|{F zcEiCn0>DAvJw+DwyU1XhC}Q}nEmH9Nh{|4A5>EtE4`W_!eve%)oC1PVTF5W>$mk3B zZunb@Xz%tQ?7#cqt5;q*`1*^luT?5SDD4X*+_oq%bwGJfeDKB5pbtcV4X{+1$cgxP zI51-Pg$1M4K!IuBStT~;wm&2AU!m_me#M)3RLv2(hz~km&$iYw)IgboJ41lEARW%1 z0hp2YrXzmzmdk%abBY_I)lDcrTIBzYRsK14X@$I z?1T6XzonuxVZcFP`~8U#hXrdgBMay3dR2Xdj{d)OG-TEG8437nHG{2IYm*v&8%SeB zPFQdoy}9B7RaEU#hyRq9ZV(vhRLFH_M5wOYix3Z!jT`}bVZCNG<-K})a~q*Vg}pL9 z+XFgo&xT;t34$dN(pGup6ozlQL##svz*@xInO6$;klVW6j`zz$fUC`=<)JcQIq=VuN;GpB}t`5*tvD z5jq^7gdqX2-MDJUV-In^rX%>a95nEX>MjVZD&QOI^X=!;-;Dy7{dtDqN2(0PfnU`l z$v0|_a0%n}!oP9BEWWRy*Z7O**$t)e%zyX$KVG?c^_vgx-n*7ugg<3wSD`pwnEaP> zFjc>Z0cRFCM(D8Ml>;MLkYsU=BtX~{c$MHU=qva|fZp0lOF&=%7ztxA1b3u^0PsqK zHwgllx<%DH5dr@1|93#JDKOt$iOF0oY`0Vm2m$E2>*YrvfkP~bEg|fQ>V^WF|2C`O z5)a5o$;$`$#WZ7-y`c$TFg8 znvBj&huPB8;MW8=0{I1h|M2y-GC+Uv#nV?_ef71UY=NfwnPOsP z^wKp;%W~j_0pCbMB+zv+LbFi|gD->NU@+1SS<2VHg*r(H{Qsde4*c`w{0V$;c7#02k!2Hy=p%!@cSA!UHFxW>-2w7P`g!bJqhncFCXxAf*puHje-U@#Z+l}iQ6JZT z>e}U`EuFIXukxTPg@qXWnWuphccYtOfOZT1Rtfy7pFD&TTc3rtga6t9&2ZCS%>aYH zwE`IaOEUf{4Zp$Pn4VQzoEI4SyIP+E!Ycz_<3d{(2nK;oeuck=k0%0Ptpzqab*kqr zi$DQzk}fPsg_X6fM7wgVvK_faVBBX^M`Ob2(I${CXq-rvQUS2x7xZ0N@5Fv5{DuGC z4*ZJ$LVm3(=RmNm(W{(Qp^=z#9I1j*=(~`weKvR)7@gqJ19!{rj8Y)K=kdFm;FsrH z8?6EO%PTjpJ^Sj5FRxUx4?*NlcZA*t=DiU?FsEMX1}z30aHTW}UOXCYhW13T5g0{6 zgR?G47#u(7FyJP@Rj@z@eu3k2z=a}=iMOvg8^!s;XMbo~d-%fsmiUyXbT+3K%>e_x zV!)4KkH%k{h%q;JxGi*kpNg<`Os0)sK2j(L8=D9Gq6-4M%V~aj%~m@GrOd-x9Vh5z z(>!=WI4g>bPS2#Hd6f9oaSY2s6ag%YRJg2d%N>K#9M~W&aujHg!2M_GHP8}(iqE>d z#>0TC>ktEhZXFjmU(nQuXMi#G)?ktrB7xs{F|T6$b(bP`E4W2PfU)%la#htmn*n{0=v$8ox{Zqqk!fnt!LuUfafd9#fEA1bY#$yzrRXrYMX27c`GRv;D;kQ?? zC&Tb3jli0su8vnW3lrd3u1k^{*+5cHlR@y;VPR{Sh*;0@eSWI`6=y(d-b)=B7H3KT zI2j0EE$iL&ObP?UV-4_dfyM$20|tRN{4I$ubV?IocjicxRic4kH|V}2G)hGY{3ad; za-@W$ngI?2Mxeg}Ok1IoU9YEsgNqhBE(d^}nEU~QNG5xL-YrvupckdmL6ob4zdiGF z5bjG^L6?TsGJ9SX2oLzZO-be>;qUpVgvVM5Y&qP+V(fajXDLU&yidI#M4+pVFhRo% z_Cz5DgGn?-={etG5f*RTJiP*^LqwWOaj`m|8sOV%Md7#5&w zbX{1m+OXgyHZ+@L^@?6I_9Lqax=FC*@Sle=K|fMKng%zpGzD(+Towa&Py_d8L#wZ` zoOu$stk7n_ED}+`l!nW3M@LfsO-Qe(TS*A87iPxaX+>aei*N!}PCVOZz`RNjIFlPd zupP5dWvuq);!^$-FfMHMly)-7IsH9YV$a%~I0tyJaGb3vSd5sWy)yz&0Bna%eRUgQ z-P(4I#O(v3J6IY`|K{)OxWnY^6?bOjQU**>D-YgyRArTs7;ul_c%?2VoPgC%_8`m# zl7Ve@bcg(@K(P>D`M3eIbXDkWM3{X}p%`+zARQH}MVM*ur?KMq; zU)z{@ipL$1Yb2vm4o>Pac~W0ADYqxD2=MriRO>tvM8paSRuuzu2>=}XbD)=Pi9*RT zBSidn5MZ-k2Jzb(IT#3k^`Q~~3xR17Q{WHgHA&B1g*5v>qizDfsnrPq4h%04ydf~^ z&rl4gC$dNQ-Hn`3K@d1PL?JdpO(kK#V5jl7bU?7iBR-|$bch(|pw(D?i3xheU*L+( z`1`pf*b4=&=EwfeLR_k3AVjMmj?HmMiC~Yejk10B`&;jLvQ9q|50L=85%9O3!sc}a zGp`E#jqp+i0lxL@t3TfT@a5O9|LfKN0DG}PyJKPZxo0oa#mmtxC2%`gg#x3q_+zy| zuvqW{!8k()g73~gSa!k^{{9$(4@=L1U}1|F<(z5L*O#G5GQ&drKZjLTJkQ`8B+hkp zClDC18}v@jsz5Mk+3wB)2k~D7hGy(AD71@HU=?W#bg4M7;WyH$e0ipVN<*rF_LNP@ zxs1H0fnZN5H}REthu5+tOK^aA5Jj+|s1ozCmGESnG)?MsY>ULCGz>8bQz2%+8?;`4 zzXIF36dUUywZ#s@lPz#6h=G_8Bvnj_8o ziU6~#>!P+P%ps@es}+rL2V zNKGwz%3VxLXiRoX7CV>OL-F99i*`E!<%LMR8=D;*k$_tkw{Uf?J z4V-+cNgB0G~W z!(UaU$RLng@Y)LixF5JsxPt)ctA~?9fZ3qHZ7JmjAaI>&A6~6_5^x89k;@Ty>HxW& zmx6*gPZe0|-K^;Dke711lgF{1fU8GrsA8EZny9%BODANJK!vi_Q>t;)$jb@F>!dvu zg{`^{(x~Qs90=bo>HJsh3$@QEbqwk|YsvWAmsfkd*rC4yUw4%zV+3dN_E3%ANEUS# zOZZ67Zv+N&tytBnLaubU%ufSgYso%;;&=apAqseF!|dyXs>U5+EJ2b8cUxP6!hzvPP&n|b%?NyKx!74wjxRKz&x3vvq0U~#51-nUI$@3Q z%+FM=X*6X~l1$P~fOngzqhWQ!*x+`9a#h^XI2<_;^e&5y;_^(r(ca%yMJp|&6ZTep zhzf#7*R#TuP-5?%7g4U##918K#StsnsE?|ue%z>QoErS)rcJfE+YG#=YIp%`RCr*0 zb>)>;u6*^!KYZ}TwO3z#^*^ycQ>~zy>(|Ul3py_Vd`k%lp9y~1=!}+fiEzehiC#Uj z)_jE^@ahL$CD=Q*L#U`!OR7<0n==ozWQt70fkwp68W67Q*n!5KF;)mH07i!W$1W#& zEa9(R96J7@L)*-W!}NWgsD(6mjsfIGVDJ|N9w~a`yP716Jev%Q{|x-CqN+r*!T_^F z8#-BI@IHAA^J7DI9>mgNyGBtEuNY7>p=nWEVx@)ej8Bv`@J5Mn-P5M_Em6q5amV}z zxaB7idxJVICG`>NxVbV*H`|&4nBL_Sm@!oyLc*qH8lkbQ$OuR}`a)keo0}zKy*`EK zrgN1e5i-ranvy2<*?>${`VA%Bu`gVuXudcM*pNz3nUh3i)dqieo6~ZFw5maN7XA6E zxrp@{=}2yd-7UYc-Oh;4bg@9NIC9b{q4h^e+|=<}SPdK}EFm%0XVKpS+n5EjL0~EY zar~dJkY=zl5aN_7{Pp5r4AWJQAe303!C#Ef19nl#hhe~y*q-Ty0%r*l`qAI2EEv2J z;RSt1^;{$LlQX>9_|IBmuhZXA{~AQcdrh!irS{h$4c0t_!&HiJH6>M|FE4B3uDVjH zFyPU&izEX9;8n8N$UL}Ft+1D^88GMz|3xVvE(J~dnH;jrfSDskLFwClZJmOODHFUI zH42odqbjq$T%x;EHux1;Zw>u50DtjyMWOuq%e#O0;7gpKjgl`GpSEV@UoZAyZmY0a zk(^S|pjio=oP^+NfLKE-3l0P?7>q77_#NvE!C46`M=Z2N_3iVsFy8>ML18@5&1pe35yx{zU3E}y`!g1=p8)+UQ&dNUXabbVd&3yJ|7fB z%K(>C@i0>kB7+m~s|8y2?bIKvq&hu`OaXO~;gWkHG^oN^y}(fjVc{Nz;8h-7>V?%k z@n0~vHWlOuMGU5X1&9f*e+HBqbL0Q4Vp}yu`S1sjY0@2-^-AnOuPV{nBal|i7s|@0 z-_gD%^S-ncs8$2)`SU91iamo03@GSu#ujeK zv)u^X#vZw;9{%zd24CqjvtdLLC|ixb){-DFf{zsh7@t(dphU4iKN|=P1@;s$09-h1 z-b+#SpfXAie5_6$@QUvlcj_ z*&1M)6A%!1+u;zaj19jn^eM4K(@uy^VeE1M7Gn$p7Uqij(t^8DK`)h9a8!uwl}XjB zt<><#1!AeXiBCj?xop%w%rm{(5N=U2(7S_dOo^GQMgzYF;6Hrz^ePtUKNJ;a!P`$K zz$zmtLq;>xyYH;!7$0ma1AZLOEGp}=nm<(AUQGBA!vv*1h|U5paa6rro^Et(Cn*{CwbpA632k(NvHPQPykEJZwxP_1(1 zX>vfw3ow`3t6K>@2boeMM{2R@5}|m)mNvW`{^A$+WP*OiHlX*Zs;7m&Jf&N$FZ+)G;3IWy-{1*aj7wGbTF7jLWt5k%mg#X6#S@nv(A2I(M?4_;dvh2W% zBpAnR00y4cU>h`&I6Z@w;4kflzU~Hh4f<|aeqH7yB?cV});JvHNBL?6@?C2=@_%AbtD)Tlk8l4QYc#pYQXgU^J&o(E>nVo$)$Sxw+Ls>~GX`+H-sO@T{w zI^%Q7qvTnxYlk1Ln7_~BnlRu1u-v-(3qQ;%S*muW%04d@Dl;!RuB=iUV$0bqb&3%< z67TC4Wg?_QNj6A3VU^NMX>etnH|}`Fw|8wA_cAE!INE(9wPP9y$MjOE>(&P0Bf)AC zAZarS55B8?j+gl47Eb~TZC3`|0W`RbH;V7^fDL+OMP$P1C>%8I^b5S`7k=zz!(OxG z%3{3cBF+}69_|$9AHMn4=7yz;O+5JEVB@{vzbK{048M|V!r#{>{1pKn_{;onX+iM4 zdveBF{jXrZhF>bmG6RfK5D@qyRcz0XiBQDCHj*O|%{U=-EYO#d6aFc<-O zlSjd8i44%1BMt#B{PnLTr8>_lW5mmiLWg@=2Qi}Wo1o1P+1#v&eh12dbJQTNYE-NQjCw%((GqImZxzYHg~`|7>w>F_9Xb$PxZCpi zd$$W$BF0`s5NwJF18$N3lqZ2{HBW5QGsR+mUkta5DSMUhS6?)CX(&ofXx0)SSb2c! z%FLsH2SC}NzCmCc%H^W00iHJqEO3^@jpfWmTV|03!FDw}J5^bNHO!1zKE04zv>}E& zGy^sP<|Jk>srzi{@l1f((f7o_KQ2WCW3xExX?~#dzZlnw5@sb6FUa?9qcl>y7kF@x zh$H!iG-fwxHvECWp};_(qfyd0fC|M?K^UQg11p1{8L$GCJTmoEwKXVL@l6$I$Hx{@nRgWq-j4nYaXKD0h8klB5UX&i4=f;Fq9ZxKA z;Cw-0q_bjtwu7N2Y=f6p<8Kt!itaQoAO`GE&=!vGsI@wy3T>0=toZX|9^1jxUwbnH z7UXsnnWH`nc|l^gM%%;G)(o2QTDXImuJm&V@SQ3Nvehu$z#Y+UU>Ec*t%kP6B>ob? z0{vwH@WIovK-Y5MGC>C)e_}Z3)e8#>eYwvx9C$sVSXj0}o6pW1IFPGdOTd>_r&v}5 z?wMe!A#-M=kYG@l?Y;MI3&dbAY$d|q1X(Zw?;>rc)Ayh)bPdsJa#kRiBl1v9B-NA1 zWAGP`Uf!}qh)@PL$tKOt+lc2rOQ12%*EKXoi~`vSC``92W%cnP30ym@)JUA~plA&>}Bi z^o`a~VML%3{$32No^g?*Nm;0b1c(*~cUVciOA^{js7u8Kz4fya;Oa3cJt;mI2_rGo z_N(D+)KS6>&un4*ya&aA=bW0;j(UP)MZ*{_%0H20uJ>71?=HbZE|cHi{jz+pDhfvt-~!;+K*Rrl0)xNs;1}bxE`TtX?)hN7 zMktP^z%%x?XmmZq5E>q=tZyU%@WVph65O(i{W7H0Gqnx;J<*J?){PFpYxpJiWL0N_ z15?)qdp{TavL70Q;4K|@Z}kxq;^V}5mIWG9Wc(_pjPWACf>mKKr8Dltg$i+UzY;nA z+LS8nvCszsAyRzVB1w#}Qedx;=p@X7U!XH4ZHklfbrJela6(h)X}N0}Lx@m^N=nD4bBX-w7! zb>pBenE)I?iR3Z>_=_*T zx_S)@^zRFRul+{={2FXm40uLm^pa29?5Mph<_&|NNX9vlo-`u+sR zDi&;8^lxhejt|caX7XSyq5hGFt0^Mj84I&KQ^J6u9}cIyFyUi=A#%9R<0f|21#Nkk zKenF86$Nqz@u|ar45L`=yk=!QJ!w7dPBSeOfM9R+Uwq5kVh>%Z|87ERVF;Tmz@X)0HK_rx3VS<Dk>#54j)7eu(hCbMzhv1Hti#rhvdmHSgRxob!-I8ha_Cz>W>w*ot=iCa<3C#UC_) zR?Z!f9nCDqq9ltv10M_ot_lQx$R}tJ8)zOA!*-VL$PH~ShyU_KX&kw$6g0LXCcKn@ zFGYh?675W;#*PQwws#?eZqrV=GQ67onfCFeKA~Ob7ig>=d%|B+WNPOiRJw3r3iVN; zZj!Av19nyy>gv{YvOB}>M1VEPjW~*&@z7u7&dFb*2M-H2@$9FeRo4tK!mGy^QOXe~ z!$8(0M@B6BB5_Yd{MSxr6rBLnws=5CIM+Z_+Mqu9)^$P7P%~GDtMVVBGxk%|?)*!z zmzc?P1MzL88xS`5M%q>meh&9JjT&(22z~2-0l8hvc{Mb)P#bYC(7>-w6t!Xx5+$GM zCx5$gs|?Vuzy8`ASFk~w{$64Ekpf`NFbnvWEC%T6E7ks$UVy|3BrQS01g$w>W`B$F zG7J1o0WZ6>1cm-H2wWH}6t-Km!B?`tuOzt`D5k#j_ZI=HN=}Bz3V+`bc&gHQ-kU>GQ>%yQ9^7TcU`k$7TcE#s zdhOsD0Q`r7;-40VBfyG!fzeNy1x5|OD*+w}k>0`&I@q~N+_LtE-J%N!Ct&413a_bx z-zzl!{M-n1E(A_g<#iTV1j0FUApoWZJ%2glEo9gbtW3{UTA`GU1hOLX-nN`7gRnzc z;02+#y}V=P)Fb$vZP3Qsvr(O!%(G+cMUgf^vr%aTc+simZagzbJW_-^`MwGd3_{5s zPxXV^OeGs9OxPfdixK*$>)J;{LAStznLtjmHAIjJc3lX5lg3tw5sz(5kIxw9*Bv{E zV)}yxY_=22kWt#XZG&_s?eAs7y9$*EHJA#cRMI($|pIvY5{|0@%Fc|hL zq_qQyRebG(!vOvf}y-2WFO#?6$MPi8s zy3T|Ee|6<5K3E1|!0|tZU;y|J#w@ zEidUg7~Zj+IM@LnkaLyNvno`xZ!{_lW!A6AARBSw{fxt&R{q~49{LU!@C;y`?rBT?e?W>WwYn|MfuN{y1F|CQ7 zjpQ=9d~1=B8L%zR$C?$Eh6N9YX(MnI)NfO-9qvisKyWfT^APzhi&|$z}uPx9> zBX9s1{ww_T1Tdq`fWg~Ae4)a$Lgd;CeoKwN&WaTFyUOANoqP;l0Gxo(fnH>R-!&jd z36%+OW`Prc-rjNBOfFOPKxGxj+&k%{`Lu}8_x^q1uM0=L!+k*D839yPa zYyEVp{h;meUkrGeFh#QKdKpKcxpvF4R~2>PuRz+u4i&{>+zfQSGpgS;2VMYr0pIS- zcWG%V9LYo0X?Op4_v;GL_VwKY;13MI|Mv`d|GY3@5coM17yu?5^p#Lx@R#yjx$MZC zN_gSI>oVaPgsTi7{+->QHH&Hj+`JY5Mhq{AzPQ4FL$ErHUVaF@ z-tf1Io_R}V<1;q7ENRyS8*M`~YX3gCYd`s8;VB$g@Jmh0AH@Nn<0{BlDVL$iCXD(A z5>^@@cwBW++W(1Cy=t%Q?W~*^&tbq+4n%1To?$nAN+-m2__Nc0e)#6ItKcsH%q(!h zE&>mB1|(tZw(@9!;5jAIj~$=^UexP8 zHtZR_4TX;)!wfeps334*a8+u6qES0-6$RlKW@QROi*6CY9%&cAV*9v(xhHM+^q1`>`6rH_T{;RPAVJ?iwbDU5IOy*1!)F`*;?8;S z3||sJ_=+5$4~)J7-CJtZ{V@n5!e1MpO8{UKVC>B$!C$*SLw$w6g9n4Y4Zol+wPhcI z<$t9*0kQV@Z_rmeg5WhbVU=0JfjbH6MXNkH6;dNI@(MNrmw>>OlSW^Zf+I@lVf9;yF;QW(bF8wfdV|K5fvg86rTjGJ`l2#HTe7O}GU8De59C)B3 z|Ai1>I?fZB{6@|&cv4Pu;III=e12`%Gt|p$15zQkc z&VgN2z>Xe{}6zMrnL!xGx+b|dR)QYx(w;&6b^bt+I?X%i4KC>16g23hiwm~-pHv?8G-Js(f57JA5+W;84OmBdn*eE69 znNz1&dvf~33|Jsihrwk5@X>GbloWT#pex{I2Of+fZE_qX85C669NX;Fpc(*%0(+(K z%$6xWo5~ZrXvdj!>L)4GC=?izGs?--T&>q4RxGC7v6;7&d=0+MfvLp?3x|d@O!jv5f=4KN<`)vb1uEP5{ zBK$pN<2{Nf51|lN_7oX(Z2WX$;KVf#06U`hl25iHG6jz*T%>y+esSgC+8eJH`c^6# zQQ$Wfhy$R!asU7uf9DC{fN%|~xq2Y{B?4s=;7-H8WdI)jR|UrKVFNJmi+*PyuFjeY zsmj8BYePeV=aop5hT=uSfG-aVy&sOF5Lmx`SRF9`r=izQxpidfp z*{XA&6&hHeAJZw}zssVgDmGe;yZLuk;?IT%cQWoOoYPKvdM+Icdd-29od{>5vnd+# zTh%xW2y;8O+^q@&t;R$)L1Sqo@?036B~YDPgaqp-LZ=MSUw-k&FR#3LO#u9d{~Ulh z8}y|_7<}HDiiHINSM|JvgfL(Oa3V`C@Y=jr2cib#7f8}5{o=pud3EQ`ZBjCWyx?!Q zy_Sbb;Qm6Zy~sv0IdqH$fhVRV$o2BmYD6H6zol6a6Z91aHrFkAB6<;gKVy`U4S>Ud zBitMKrAy%vya71I!I>`aH?BfB{)LZjV;~~bipKF^X5=scZLXo zxgXaL0?gKUKQQi5K)ACzAe^S;r}`=GN3{#qlu82zEDSy_@v9z~s7DE9_55e&{NZHX z>o?I*a`xC|>sRk!%i@azhZ0=6S3T88(pn-7^YP82A4f0^q5i)RiuvqGksU(tdvfEb zBfaFmEe|ZGngpRKne`Ud=ww=YYMpVH`Bkc-&+HMC8L{#Nh~+2 zf&;Yhmla6U6!46{<$CpOz!TJC;_1b?M1Mqigu;AG~P0>UfzU4wG0^4w`) zJ7NvKD+X-(+Wgm5jl+N$>+HU8;0E9)Krm8!X28bZof0u*C3|epib}as;AB+Y79#=T zQUJK&F@TBAW@lI0@v%FYoQ1yZF-}2pKWdMlEFyJ;pXA-!vb)~@c1Gzb?kEIuqTg^Am z-a2^mR>_-slwW>yNb2PCPpOsdqAIZ0EZF=P1hxfQ0KCF)6(^yIqmRTS)?~N8Kij92 zGZ_;f6|eJIcB&=?INb6_sJAH_4*OL=yJU~}MRz@wmmFKQ0V1L(mW4f!|@$5ldv5p&=~klbzX z%iwIBFf1vwW|Ls99gicXJNsQ#E^MxqyGxO`g6EAXto2wy{$w75l>`K&NNFoomqe z%l(48h`O30sZt95N{9sQBocPv7WASt?lc3oU|Tj?KOBIo<-`vuN!iXd%Eq8)didv{93{=kU&zs!3RXLD=V?fvk!C&NGg}*XDGuocfPJi^xxMyul11ld= z6()h54hi&Kvmpg~BVoXSUQ5;h(@55}NL8$c;Qde>GYFdkkEQV#qCJC)nVE?J|3k9G zw^aB$QY}2FbBpwT`~?2{>r#lXkk@T&*jv=LvPpLaH#;oQgaVrYqdK2YErMIN065e( z_)Bp`OS9E?HVCHHSVSl0Y$}&HS}i2^Ct`4P2G|@823P6BHS7CD0dOS)u1L^deDM3i z6Axy4avI2P^>odUmmDMN}JfSM5#-RpLSa{NT--d`8RFOOJBp z7w_FZJUj<{3xz4A;4cK&EwDvpgYC+IZP`7W5~6LZdMu_B8fKhR4S1ehV{;$8GynrA zSg;MikQ#?tM)-n+01JR)6-O;**F!Db9i|=pt%_}*|0dr&jlL-T0_0XJKcpEDYFm^S z)AJvMC%VL*=AACMBjtfrMqsYt)Cq$VKck8PSlaQroT^xJz)EW@ z1U^pCDK;Un?Z*vRz^`XVb-2m|!ToP@NbK2)apouB1+&IkQF>v@03D9ld)pA47@;Le z^US{1p8YuF=P|HKdTENx#}Hei>bN&2RjU(A&IH$@!Td?gf!kNG@1cqjN`wdx$P+aX z;L}P(_<-rd60NeT7rJ5Yj?vyStLyh!sppFk%##k!1R9$G>&;MQ%r5WF@4k6ZwD!j9 zroX1Z&v3w!0eXYrP+uz}G>DfQc>=gSp#RltlLr23*%4SwXGG-C0;CdoLE8xJ5Li`W ze@+MvSL)Cjh4=lT5!L%B9E~I{R?ycC|8AxS#4$(w45t}qztj9$#*i3rL2x1P{lS3? zfyIHbLF0R67;ejktQ!6#4HB(DW(u<7DSrA0gCf9*j1~rr1cJNQ1x32?0Kls==owX2 z`K**xJWczb$?sgYtEnO$-CJM`-9-$*R||j(t^wee|6?y`))mn#qm)a6VKEC_vd4gJ zgAM~W_oZh0w{yUVnnjce>Cew@yumMHh&C~&Z-Mh4epCp2Cd5phDg00-Lrms2;eZ|QK`!z4)& zQaP8q)**Q@QUtUU0GkA7Ax|5bMI&WRRdgT=_sz8e*b*+4qn2ZS%az?^S}4m4(9540 za3iz%ABCH55dkf{r1nCYvPJtj#Rs}mJ@dpI69#RMJ&s%8q>x~Et+OytiNnhZQC&|K z>pXOaGN#`nyT};|nmdBbBBzt=M1ddFYc&40%eE3->>RG24cYU8c8&!D@aWSqkwR%p z_{)t+k)!jwSDqD-y-{<(e87=cA;C2ZEc}%NmcTZ}d$%|g{B;EAOaNzXu+|(^Ob^5> zfE5P1lmHy?V4I@hz=mMEK}QU{h@n@N)za{rdQAyToxK@-FXh0ega1C*0mHqPmwDTX z{|-^W4iDBDFkqaYhvj)PK*OPthYD~O$9_~kSS9_b?NnlkHMa%Ek`3C~C%G&Dyw20c z94(zC#1<~>!9=85DQ|knikvR1WH1u^?JKkNm&W2ljlg%S3;=#w(;QDp23!FA<(2;! zfNg)S@o6XPy;KxDW zBiWZ_4P=)``E2C+g}LLi%|nC%A1w^nNbhfEJ#>r16VJKksT?H&FK;2zU^?`T2-LmX zkt9ul6E0Yti&APHM&LWS5lesU;Or35p7XO&6KK;@oTaA_C0e|cq(jv-j4>qeFz6xi zpgzuQv1WbexG7WQYhkb;7?oKV)HNPcXU!H(FY^`AR&zlU7ZfUiwBvM9HP7`QTp2R; zD=ir8e`dMufvh$y$Mg*PDnWyw6d4HI5KO0}L#I+RD&47OXcmIR?Chj)UsJ#*I|WA? zR%8LNRw0=Idwy|+V4I)|Vl#U@PF=w1*Kh)cK=Ma%mObQ*s&-R3k&LdPdJ*H;25P> zV{;_bSL~Mvleb>W=X2yeyme3%_}jmHboh_M^U`5}26_*Lz9{%Bb!-lFK%LSWH2zYr zt3>wkSGO=Q%Ey%A1wn0{ZkX&ZRWo35V3DGY0z+`>jsjl+a8LbiF3)XnJ`4PoN;H@- zSiqd{GlHqtIkcNlYT4%rXe@b@=2%fI%?a5lMVun}82_t>$DlB0aFUvEU^WYX1dEsI zv?EqL#3&ZQc|s|b2)#{dQD7?gyKCuFO;N|`tfJ}w*zJ16jrfyFO@SL|Z5P&htrDJ3 zAh>Z@2v3VF-#v}M{j8b+Tj(=l3e3i@m1=mLej+>JYL&rf=SSb65NwckW4}V*5@Rul z3fR(eWE|IE^4bkWPB`ExU^_uSC>>6;{=@*9lKwD7sij+mjPP% z%ebL?yoK+4{p{si#eT2j0}TWA&unIaX9ujdH?vU>WjOeYT-#P4L4g0&2ejr_@M{7* zf>8p%ngbq*7+}9%gcSN43H{BkP&cm7^cF*OH^JY<8H;w}ztpQ67IjhJqPCzf8|YaS zRuEjJR2F4XU}vN9EHL;h)UA!er6sHp-sTEW3dyRxLwBhn*?*Df7FN^YJEe=n1kHr+AFw%>d{ycAzrM@xAOHB( z|AGOJB0Kbp9icr590I&}VL235i3#v3L0~CE!Q7!LjlcLgzxNBWJs5)JZe0|(riecL z{_pbCF9S5nOfXIJVIWv+xAY9O^9b6zs1VP1)(DKTy2mErc;L4krcH)_6Cids06biF zjiq1$=hYMVbil8kh9Nk9&q|$;pw4QOj3Ir+Gz8{^ZB%MZ)&jutcMa|)#Xk_tb#g!o zwu^(Z2)IhA;wYH;s+$m4rJ4%Xcp#WBU1fpwxK|L*4A?f`UQUFH*k{44csvpYtcV!L z2ERtQ#_F>vF>dhJ@|zH1F5;7X*%@sPn?@=s-iNEvf1xe$ctOBq7tFzrb%# zSWtuaMqmK5gQId?PXU`ieUm=wZ*_o zC*6esqx-YKyPX)YgE)H)l5Njs#XF?mpTvd+XA5-i7dnHy_tC_FMkWSqVtd4ly$P^a z@gJ-BFrpn!I<_Lz2LZ@Pdr+-5-90wjhfqmEP%ZFF?>}+3a=V6^RPFnI@Vh&|FZit@ zw=l-$Z0pSMWq4f3iw(Mjey~{peCx+^z>r|J0B~z| zB|%_{qGmeDI+cUiuT+e*XNId!K`Bj`&J2lWz#k6;Mu1%&L`l;J(dHSz+XKORxRC2ke z!>F7(Bq7eIk}8=dqwN|Ezc&ISO2{TWxlo)+0A6X@1i%VqJ)EEe!I*`E!0y^1+@8tR zFhVO004s8s!in1Mrw2qXG#CcV+1yHE(JSz%0+8Z-Cn~JhZ*S zSF4!ly70nP8+=t?IHmhZ9I-~%FUl){nFRI{tHejDR+UmL4+zFp$NbkTj!+=j8D)jP zZ7q=hbm8v@Uw?h2B0!S_srWAltg60aZXAHWCcv2jmayw#m_37 zTTTj-RS8gL6>!Kg4Mn8%r*YpLNI&2U`oerEzuk0sdI-Y83%oYQ*487WORI9batE$`w0Wa zwbjhC*U|Vv#>4Xrh9(!GmNo&?l%s})7&GHb#DUH*8v^W34J#vUynH(5LY{jaP?j6T z#`NRR0Do2571{0>0IP^DxFMr*@HZl8HUgtrJlki62^)Yx=~nIlwS|gx=AuU6lM;bR z=b{oU`$rDu3sYr7FtsiB#$5}25nzRXW+3j-+$Qpgb4Ex{w4oh?BPM7Aa2EZ}R%q_5 zXKDOJc}U0P5Cb0n{w^UMFx z5X=$tVjHwuj!k?;h?SJmU1}Jx(AB!ijI5U)2pAiGB|1%op79s;g{h5|IvmMibKfcg z-@xwxV9E^nxfTmFnHat((0#@n@EH8hy`X_!Lo3w_y`Y^csXigJ%Z*;Yabt3W4*mv$ zJr$fbhl9Q`J|m?0eO7pnlNZxOct|z^AH4bO-iP0PUvJzgZcGtjF<~LA(AV%wk9{E6 z$|-%C2=7LL&l^#j|BkAoNp)5tcc&=Oib!PH34i~4)Uql9t?fk({v$jmo`aSzivVx< zZjfxlXb>1-WGLVk`m5~dQZ1AZ07G{gBXX+_1l*IOsB#8{|A9Yf9H_>5*)1sX%x@$! z!Kkds>`a3Fxr(YL$rLVj%sXSafzu0eJ9CSW8B{*C30fBDo%y~O$vQ7kW9so1N7*3B zW!#@C1b8(rcjXya@wYMv02cU_mjkU zY!J2!S62Hj0)Fx>sW0py)iVH#)DJJ)F+n(9JSRUC&`xpp_0ACGfzl@8RV2PTBFFCY zCwg?}?qB|N^=9R8DZ{bQ*8=_)o??AwO9DcaZoHoX*#WZ$6aKy~1GJ-XFy&ieufX4z zs$VkPp&NjS&T+5MHvpWqM^TD|p4%luf3%9WEJcb0c3s&C%XKL5VuO|+7VkCwQx1bA z%d@n4DF5IoF69HKM55PHN2pQ2mtrdg^-*Skv&@L!nJrwDs}S%P9amO45K>vykFXOc zY%a^T3%Des0^t8V zBY){gGnkPeZX_cZtwCT>=STtY&Gy22CIBw^vY-`iYYc9O=snZ3ORUcu{J#Irje2?@ za2c2og`K_y1wQ!Z!}`3`o1eGwhQqc-8-!uND21vwv<{Yh_8F&X#O6tHr~yIkfR!}) z#$b~fddc3d??{UMW=?_M(rqT#01Ofc*&*qJu2)ZMkv#R>>3uWNE0hpXT(j$$UfKqo zIhrH-VAO=b$-iz}tmzdz&Z&Vq7^6I`T9QTp#I=~j5`~i8IrtXfDHIiwZFVP*E?_z;c1Z4cd?^DlAsZ za2PNZ=-b)(tG%#NI0}M_|I(uEXce|Q;Fnw5>zWI>tO1vnt7bp+Fta!MS~2~5FDr!!tM(itV&Q%a=Y2fbJ- z9%`MIZv?|`{2f7*t9p!h{!OOnq*>miUFNokr=)@IX<%Cqq(5vE^L{Z6-CBGF0)w{p z!=hy$I3Dm@jV7V1QmJRm23(?wkbwbHKPIqfg3XQ7CndycfC58+f$N9*f<}+EC{*73 z5HV$}69Q*V5<}7wu)s)-Z}sl%@PnEFzF7kP#{SGK(~YZ*zw;8LDs(dS8vy2fPXIdy zLlwr!fCScpzsOVQuRO983F}YySbiiC`DL5rdshv$?pPN?bU>I5xg;KRGy`*bhA`j= z06Y-5SucNhVm<@0DA0_Wq#_Ih!6PH#0A2kb=ov>nUr&<@k-ifaZ-fzc4Zq35P+BtE zsSj3L?*ha|%x0!R)LgX~q31+~&&A(JZV)D&1FN^Qp%;v$MLqX>n~V^OiW$f4qC6#{1tSm;_R1oi>cV(1P2 z27Z70-uvIb$rCK8jKehIz;A%SMYn%`uWZnN`)Is#L184*DXdZgflm z$yJy)Y{rRncSN)l{sOjCU@uLn;Wu#-<@X{6Yy|%ADzyOyNkJ?V@UTNucvjYA4ixP* z4hR{W0e{lz-5F#^uBZZFP4dZhoAiT7oN}cqd#^Bh@>2eZV!#tJfFV7-Tqr~4p5Up;av2!%o%2I0?9~=f0Id)!$ zEGBk5X*-o6T9H({!rxMCu$}}L(r+Hnuu(zpV_JK_3<&~r%Xz(63!{kv&fm^jGHfY` zUd_aw2LVP-QJ~lO`|%l#9j_$EU@sf!I~4rgzIm1HhU~q3QSTmN&M&E1LJ~CKw{!Zi zp!G<3jpEkaAy`Jr5g8(y0_&VPTz~S%8i4ukJ_3L5mYegffxp)czpuM~qxfuc04wu? z*{>SY+fp@}0Coh9F#){s-@+#{B%0WJoVPRV1uG4T1ZD!0_Kp1BU@`@Ebgpdf&0A+1naY)H}&nm6C?}F zm9G<>&E%`jGzVPuxq)X62n|NEZ4gYAa8;@d!Qk<(^~m#e76Wjd!2tv?=Ds|G$uzF$ zT_)pM9c8FB0t3H%7UYj?bZh+OhzO1rCz$~!wv>&hwv-xx(Tw!&x`Nd~3 z@>(+GJ6=!TT%C)nRBM69cJ}em;XQp{d7?U*GS9jyHWqO={^FaA@Ko?$H5mK**(PXg zocdBN^z7-~qmG2+Y|#c_U^fg{lAnV-nu(VZxEKCDeRlBjwHr5X-k4^9<>GPer20|JRK9m05I@t8PLmC@>~SYUa)sv zDvT~H_&E%it*y}Bb3X{YP6H$LUx)YtzD~JMHU6+vn~2#OfCv5}LgxH4OY+l-hEt58 ziLCW_$N=DN9zyV&G?i6JAC^9Na4_@D$O^wD9*xc=h}nsf42LDUYL(nAs86 zLvJbNbEhVzW#1Ug*;Kk!E&Z(&4D!O_mE8T0P0)bpsE5*}x^y8hg>l=U_Y*R(5_k~c zr?x?V74IsF0eJR*W-#!}W&wadfA9VG4n(?{1a1JPe}l(5sAb1L|L`y03xUIeZH=z} zM|ep$4W_7p{L-`7NG%E+ht<>|qQhpn1cB)ZpG)mO1N=IJ|KKMPrF(^Zk&}>aT{`fW zo3l_#7>opeLEr{pRO@Qx`Cna)CA@_g@Ppcn1yt0@X=mq~I?ioDg^11*R5t52@Y4tv z8EXV)AZBPpW=G&0aBFn4io)#^=d6Nm?*#bTA_a$4P5sc1KN-zDL z8So&$ih$)6NJeS!_t}8oBEUs~0bro_X^r9ty)j?{V3qt?_&aJKIDkt-kz@d+EC?K3 zqGCm4agO$`Wo5vjz!i>z9D`#Ufu3nm6^SQxoA4rT&2>jZ4e+*bc35+%;rCP!ECBX8 zZ_9CP)W%`H#VKysbgs{r$mw}Vx(SjYrz2h zS#8Gr9O1e26I4our`K+g4haB$`9IDF%v3H~GIlS4;K)1&+-ZSn1d&THXax8T0}cXD z5FGdw0Y-jj0{r$3-<=?oBUn!Dz5ZHfWdQH*efMJs9yJ0O|Kjl6@;0>sm55i(jFpH%6xcRL zZfXpdleA&oARI5~8GnuF+2PKJAy~l?K?;#<{~#CAHSZjWFmOwP089GUNE_urYtYvY zUX8$lQ(*AR6CRnP}fF09h2>AO0x+kB80&j^klq;G! zdBb?U@wCFZz*p^&vH>Fxi^6t%Bc5?{_zNdhu&b*YzmfRs8HydIgEtQwjV2EH-ZcQ1 zDBQQ7;^qYn6!?VvOY`ME5P0D4H^Ty5QJ`gj4gtPZT-DfWD7_`rrJ#mi%E7b(Sl?ev z08;>FlK$HMd~g5(#vQAarN9nFsVofmK*NM(e5Rfma3p)4|Lt})MOQ<;I$}lQh?PcT zmS(`JkoaL0pWO)~4Z;Rg(^@u{8Gq>w@|#mFfor2VHwH+R!GTD+P+*y`^#F-i$(KlN zJHhqt{)1h``Dh0G?;#ioGd1o~o)f`iVZb5Diw|^Yvnv!y7tl>kCUIVdXg&K|j|BTI z0IqgJUf0~gT$<%b1-l0~uY3swuH^jJ|2GU61TILWbID1ngwFPw)`gK8(j>5*pg~~J z6-7p`CHQMuOwfd%eDB@g0>D3i{bvE-@nIc%_QM*9k)HiY2>f@6TI26u>+=KzmtVBN zHk{WRgYe(hDy+_wBngApG9eAXjOw5qnwiRDTuIU~7LHW@@>@+rEEdBsh$!g|v%uUQ zH5d1T+d-%i*x`~u+qNQ#0}C9DjKaTTAlR4?HzK6TmEtybnqJwekL^}0>MD_2bYt-3 zv;1g)y|{NAvuuLaH-jKgSN>3?sk$Dr<96wi6@QTc{-Yo;PwWDW7=daHzx)o-OUztu zuXgUtixRt~L5CA_T7U}ymeLm-E6t&BcQD`TI2Z>qXu|kc27a9%m}B<92Inn~Ts?l( z2*uj^9H~P(7x)$cvuyy(VdWR3s#-FInH1QuIiPb1Ps$1BhA<2TcIN$#e-wEr7^b3@ zt5r|`o2VZnLT1Bkb(QCta}kb6Y=8dX-nZohMTUJ0&;`42UkVP;FC83sa#s@W%Ovo! z{-{G>>5I<>=zopuz#IP^^p}K$g}sPFK{o@|65tMiwWLA1ToR*Wjh7WG^umCHylzvW z^wzaVqcd}0Y|uhqL#s>+jjW)o*Yyg5bwUX6L($#^foo4E>12GiM!tSx2>tqr5m+YZ z=FE2VL~x;JEAZXjFZ>k%UoHTzi0fi84*afp8USD8FOn0p*mq&Tu8_X(;!T|n-8;ef zszKk+KD!MBYs6x(-T)Zf{o>iRgRcsSKe+qF(^p>mUj@Q~)K;~3^s=P<1%dlMSS7MS z&l&k+f}ZdXP7;6Im% z=`XNg5cu#jNnvqHVV)?c=m*4v5`pvzera4>C3}&HtE|wnL;G72xJ~H5!e0omMIoVm zFRCdvW*A*o95vKVtM!iU9~{i;`1vwHn*b#bfeEie3(i=}WdnW%OtgMrGyyXbGZ*-oxNb7uS6J}B}`PT;!zAN zd5^F7JFiz7r|ECUfag7oxqTLf70LaR*~fKrn%eT?E3AoLnmMpWl)lJ#%87ELru&V>cr9qRO?-EHc<VI0JjIUe74}f?fwk@9)P=Yga&_+mteq-fdv3h1Q>l01cw6CTyBC6{O)HX zOhxVfk|DSma40bRbjILJ^$z25et8*sBR0dysquRG?G@8Z21A0dS+A6ywtAPP)Hx#(B-1jWq9IDrp2}a<=-93>N zI*WfDJ?azZZbjrPt&Rb>k-+iR#eX=BA+BRX9E3@pNV~rkgi1I7nG-o2N%VY(Y4Vx0v%Iz8b?YP zuuh!e_aO}g7!?HufDvUt63B9>0r+u4u=q9y9F0-`OY4u|H!;W!zXPTjcG$Ciht1N- z7a!IZM;t2S?~zlz&RK7GW$Noa1Ul<4A`$y-W-FN)@c3T>vw1(B3{(7?sL)RZW9998 zSKfTH@VDf~8@0C36qxGO>sR5wR}+B470?Rkbr1@_)q25@dbz$3} z@4|pT`0C)=voGuC#N9uBeeFLAg$0ae68MEl34Pc(`MGiyg=y9#FbVmEz+Zx_%PcTj z@;m|@1pZwiFpGd+Z_tMV%VCl}04xg3BN7oy2;AUX1u+LM2>$c;Kydv@BR^2UU>LBG zkI<0q2i1_sLBN+HaYRc_iu{0@6E_3yybZe&^Ir$^jnv7)@N=MEsLov+{b5GnB&r?g z!KduRq2c6J+~0Ya8%>YJeLEyHH;F6Ig~ZOvPV5PFrdWK%*YrcZD7r z`pb6qxXisl)C=2;jjn*CJ{wdGt=TxNCK8A~0e$a3xPM>x3jqJR_%AtxMSy1nj>q&# zr$Zd+4j+Gfu*Z4RE@Jdu@s|x*anf=d5bVQ0UHTTI3ih%M@CAO2#m0zY!rBi9M;d_t zFaY?AD{mguLL@w*e>wmg(#CpTu(z63VwCQ9l^&x2-Z?fpW~F3FXbKzxJV9{gf8&H@ z1a3vj0)6}aZ|d2_$qRcG08D8LjMR_Wdw&)Qt}Rn3bb#RR{`{vR$%VkTKSzSWuwaT4 zHVA(|6$V=kyUFxVZGUQqlx_qT2%DckbYmfe1XCct^nqiWrH`P%!?9JjGKecV>~R2C zL*j5Cf-OL8aT;QKs;ErkuN|uF#|vjcj}gKci9&M$!ezt95{r@u5O( zEen7D@!`R>o3;KI{##2K$n%Zs)u?Vd2VsylxVs3@tGYu_{%jE7e?fl<0Da}D@K+2N z;>%{(tx~e#?{^ljKyrz=AIUl-nxJo{fZ3?je)QMB!GZT195MXJRBAt3EQcwC` zXpygWMQ}GOwAUv|I3oUQd4M(o)2G0G(Z_|PK=7}X#GeVJx|)K5@72h+PV84sTb%s@ z6Lc8w^H=2t86zC5MVSTqc_&)!b-Ii*vox^-N+J+G8EY8OXW%6fxi_8 zntP*&L$>pg}@);idAA~!Web+?a<7W zz;Dw0Q;?ii=d|@11wRM=$^hL?RGmyt?NQRni2*C`J_YV;fj#%cqA{T(B!&T((FidF zQx6ORPjz4*^6?;f;IAZ{xXPC7y=n0J#n42%JL)&p&ty9{mGi!k;RP7w4#$v zMxg-7cEQq8$!d}NC!TsQxDEU!fl?7;1yc6RxN=bB>GnLof{w`ojZ~{;&|DbXNFy+! z|DG)1jw@*1OYMNaU~`faErtf8wEv_&sd{}9-K;nZ1e-8-KE@LS1a4OWQ{m&9|2?=? z{*!Oq82EdgJV=1AOj=iszky&cKVp-XaQxs}^Izj{Vo-v=EdFf*d{7kv02_Y4MTkOK z04)2na8^~Eup%odj_sKyq}N?U&B}l+ng6w>VOuj3Mo9iv-x&^y;d$IJV5_jPvL*{;Iw{IC%C|nbd0`FaZ2Q z`~`kNGU~QHC$=Q*dTs8?QBMMgA2$Lg7*-;2AS(nT+p%CYz&l5Qe*afm1ssO0gh;VL zUxWYNs%;?fpU0;`92f*vu_3xXXx|qC-(G*^5DQufc}u|E&lrestWS>kDc}Uyva)02ue0x>S%ukU`Emz7PQK^z(cVfve}~&rJlsVZbZO`jCj( zg3XA#Iy(p)3`PyVs%@Co;-qRpyf})pp>>83vR`aZ8AFGU?FG$?Eu~W%3|KC2qR2Z- zXCQI_jE?x3Uk0AK7W@i;0bCX!ohxWG2joyT1F+|*6$f8_bydw-=7w=uU&xLZ7-9rW zPf^DlX~VO+2$u(eQA2Pf446q?HbqI%nIXYvhZVoQCUkEW2H&jt-wLe*1(qAu>sM=e zkaF;63V5+T8-Fba$w4RroatYqZ%4o?75*A~2>@LZ3-k=KlNH(n)_Hg}K%4HOC2qui z&44XQeuSn?ca4a(QeaZ^1HfXVUJQ%`f8&QGR?LSq5R8cI-XFrWFM9)qOK@bC2v2KX zSNMy}k3wy4dGX&T7_P&B1Hu+F$6)Fn?G5|}`7G?pDhw=2LQ3aL1IeyR1HW~LT#H6- z2OC-z0_q=uq6ze8`rMZMi$`fRbDUY3=9<=0|)5fZ|P_$68P}}(2E|-At;T% z*WkZbHvYTP-*1J%g}x>C=qLq$EYOKX8T1V#_i!MX65w5^?;MNLjbzQkkP+)@gtpK- zWG(QBK886r=y769YH@LUGGzcfkrtilx;vRN1kECfz84y6|?9Ws!&+3}aN z16HwL(O*ZQEEDv1l?f>fSWg)EWorsNG9w)n?KT4I4Q>(~1peL#EGx9^8JhsKC<0% z%TTZh0OqV?rVSa;w67SjJyRtPh-6zbBfz?s{WYjuc^~?81T-5t@?| z!b?-eyh0&g1Xl}S z4~#Ens|T3yHPa9Ihs{y;BjY_1{FOmI5uCZGdV$@*@EneXzMb&^UweA{Kj-`M{`;t0 zoL|27#?5Q50K664y=tOg@u|M?a>eFQ_~)u;tMk6^v)FI&7x`J?uL4sFeF0y>U$FpK z)4wr5kKh})W_ls;kEVfD2XQ^-0gncQ)!RU`qiTF(D@x)TF- zZX?HNp4_8QDn?+b9%WCM-2jUe4i5%wTehW5(S^T6p$z`|rrbr7&B%kne*s@0_+Uxv zyLnbE0K9;!B|GZ$8Trb-O<@xr_c^&HH;ybEczvj4Ko6rcmuJ_G&;j5IM|t(&=@)nJ zesSfM>py$3?-fY4H9B9eSgUB7H?omsF<@{wXE;i;Rw7*~1a3R?fZw}RC1${h6s_dH zC=&bg=VgH=5Oky-^Ho7G7H}E7uf2H<02T-SmU-a#`&Uu5A@HBff&C9(5jaRY9|CgI zWhpUdp@}2ihE=s=ZZA^1abZ%VCFQk|48JVIuC0b(P?(yg;T!?wM8J%_C_jJMvK$AY z4++x4R=4oL$pGW1WhZF4Z_(kNV!s@V)V;DGba8_Q>~*<(sYi;mTwN3xzGv8_;%@{J zKbQa3zyiNvi46@jkV7P=Xk0LxL=n_o@t{09k0SW(aFjqVB_!BP*qQQCW2VV4_*-P( zApEds#Bd2c(GA2%6*gK$`0FG@y)fHm^L8CG{QBXt^o-|Ct9aU?z`eA1+`EdB2@3tj z4i3*spY%+gn=p8-ew5yxNx?0m~sMO@MKK25_7I76R9KsLWz6pk_g{N>jNSFe0k0Q~gUtNWaF zAAY@{ma30xA<_!9&jVzdfxe{+0~Q6|;!y^GC3iASxPflCF!o>d40_aB`WxRo$Sxn03L+5%lI zHfwE6(*eY_30=TpdsI1LuRMPYrvBbPrEEs%M?qgI&YLqbNPs)O-V-?v=nVzlTl*ox zD@LP8gp3%Gy@*LlqE2HWGkIaU$|$1!3k;^2k6%4 zS)hXmLEwnsY97w~q={}=GKIA~O~HF!V9O1Kla%u*%@Ay(J;DWD6g7wwJ zH)yVy8;y$(>jbt~eg{tmA0eQA(!ih?1b8>~PNHQ~@z-2ny!N7LZxdJKk$fv(3Z^^5-%J&(|^Kj`v z-~r`-RrrfxSsa-7la@CZ{(AuYavD2@zh)3)2@@LT0T_#6IH zxtq{k;cu!c`%}TqfP=fEtA1?H`xH3nyRQoZQ$_xH>g0g&|ClY!9SAF4%i0xO#{o+K zyW+2p-)B2PM17WN$GMm4yAsXWcHWH27Nu%sr%_?CESD z-Ur~|d=U6Dzz+ouQupJ#8%O9`2wZi=p#19Dn^(Rr3jFozg#}ivuFu#1b^ZGP5fWp8 zHvCdnS!uEFok`#@VEV~Z6t**o$r;~hk_^{d4H5?}7MouzX=Lxym z5^u}Bs&B4rXBRs!0d8q0>&!H_FPIG2v{f{bJi=flY#ooy{T;Vj^s{8c-$hmeY~e^+ zB={To#1vSY;TLhnL4=9@PVEQYf}v7vMZMvD;`227cc1%bn#)$1E) zW;b`v2m--geh0Ybc8jCWGI2Z4W{Nzl5E+Uh*$~IKC$F!2qy! zQ~Qh+*SUeu(g^BU91Xx(3H-LzHt6Kz=U9nDUljoV7XEAb{s3a0X8-`3eEZSL27L<| z&d>)!;E-VF7@=+i{&N|j3xRFZm?ccN{|z}bopNXdo}HuxzlxafNZL>=1QrksHK6hZ z-C|2K+R2L8-xKgc-madjh1GZgfy5{Y0`n>HJY3dlCcc#+gnh^E5U7K{{uXz729Vkl zN%pO*D*%W%K`S+xoo1ch&VHILoapc70WEsaEI&d5mCsvdl#`Hf#)k9IxH&Q6PZH8pzp;kQ?B)~wNuLS8TZtqnGO?VA~Ykpop%sWiYbs+V;VZ4A&X zK@$EJ^giwAR|mph2yhh%pj!-BPSEng3IeAQ-3|PP0YBFSjZzH+E{z0q7Y@Ak1H#YA zizJOGE8zyfRG9$|_zHbN%65p%YTw4-0I*Qi=XgZY|Nb9$83oY za%TU~z?%ouWN2Z)3^n%Zt2k4_zL+*hY4DxvMLdwb8G{Yg!fzG2h-SA5MhO&u@x>R< z4i27v`QSb~ukFjY87 zl=ie*F!%@&{<7acFc@^y5h^>5E6$kch5nyAapwYL25kdwu+|r0a;t_|Iuaxy#d^|N zzVGeT*ReDmB~1xF2mpfFA8`&>ab5bdjf24`=0uLpnb#lg&-BYREa{EZ=TP7W&3~)z&&vwIt(?Vqb&X4;c7?WCqZHtc$nIe+$*LwNFpMwt zfnz(DylViCuW^7h9FwM1)g^Y~g#v$iSR@#GG(gX{zzJ(D#*B{&l^lfOT|repY4pW(x#s!0UjelxYqa z03J?QlMPxT1P%c%v4ixSf*-Z~`Nj;up}-DcEjO%NLkfUz-h2}T{&OMlcQQlAA36a! z1_l1dm_?_inrnzE4a2T+gQq3+3fr-cg8rM#k7^U542Kz)c|LPO#K+sqV znb{9I4i2oXLwvXF|>CkXq zqB!&eU>yK%|Lk7=&ozn-A_04WvoSd1FQVQ`fxWy4?Nj(WLxB6j>CEE=fk%%&UnB7U z2!NHspEULZdS%lU=e7M=i;VamT^ND&D)UMakj8Pj{aZx%s~oMGg+;~{kYy0q6u7R8 z4|3Zi81Q0cWr3D!y&%~LyfXklsrf)nA@Gn0OQGCzKv2MUSFWrIC>Z?pleQt+0{*tK zy}j#m3`rWvi2ZZ;H+M|bZ5FtCnDuX8xq0&z@C*F~ezC;W7e?W)rhl6RgSfFjs~hYc zMF9M&_(kC_1laD+g}?)ftC9Z|DS&BkfiC!M^d&c;6C#ld7*QPw6^=^O27*zcE)~t+ z48IEr4hXxX9|pXnWT*XX_@0Sk(&@TLjvA zJDZ3Lfai3+cZ9zS*)7PVrjImoN>$KM;9MLAeE2D~9kDt{N5d}~F?gaY>3!jVHQ^|2 zf>uW0sw*b+A8RSnm8UP`1U=&wBsTVEl63*V*9Bvg;BKNp_kdiZgVELRjZ1ad1EsG| z>yVriDF_S&jt$!In%Q-qFvsJ56+$4&?Aby^bkJJhn~*I~f$Ul2UuwEY|9NQhmWG7p-EYJgDMTH}~(qbt00bsvHyiA1? zHNd~i1h(OK#@|f+OIE-2lEnO|!hcx%y+HWrb|L5u;qNd$!wA~`ti`?848o1Obkq+( z4=~0JD=UC)fChRUg7RRPpM}5A5CwtO1hBZTQxn!$VKR=;$UgeE{u}(w%HIimUC~PS zDX>eZaN};kSM`Fwbk0x9@(~6sOLNN>1`CPjRq2je5KJ$#zsVD9X>>&w_@zjEMvHiM zjbVar{JmoajDV1AS!FWO%z&@Cj(1m7)Wz|_68{wn3(=Fr$eYExtAuwU>D*Qm^o=ML z(g?!w#UH6FE7FJ0%1#3TPW%iYviiW4T(7Rbauo!wcmDMOpvWZ*Se?}BQPdLxi(nh# z&47ynzqO|2pO*q}`4}|rBcZ^ESnzw_yteQBrQjhldp7`=76-mXU=AVhJKw$QxRigl z0>Q{%YB8`7xcP7Ay^6si<0Xy22u(b(s6vEmZ+y3l0ULgyz>}}9k1Amhu;g4r8`@S8 zM;3@1(%CZrA0wDBMFDWWG;~4b-zfbNw}a0Oa>QqD)y5R+L#;H zT_9C7nnr>Hegb-m0gD2gHXDz!wp5q!W8Ej4xf*k;bQQ{ug8=lHphXY$tjc5xV$Ua{J9|H*dUA;7hrF zvuHrc^{a)yWMB}xMeGVq4GL3fxWwI;3xMT-MZp70{1^CD3g83G(EzWujsaa@TMGU@ ztJ4kuU}U5uY5R3E8BP1&QsfnUS&G6@_{ETL~8`26hgsnYi* z7qG>yQ4~S1>ak3&+Fe_ijlm(j+MWl&$fX<@y+FgF57y|;cYw3ow+ka_1-k-RH6^rk zDa(9r#QP?|6x8Tz45tkPo+a~+xfQZFTLpcc{%94yF6DK)`$ci!GDKHa!h>5-+aRX! zRbeMbn3&o~Rt^4M2gH^L(C%lSXiNj5qn7G9~Vye@AqZU6sNf0}>7DwjJ&l{(Dl& zw`yV$(>{<#taAC14UY-Ju>uIl*E&rCCPIjS3C#o7IITh{a<4j!K^7Kh#L)Eb*i|Y5 zD(*Ir7O-)bopD+T`-nl_WLjA4jw$fK7hc`$Xxrk4SRzmcwh#{;`OdhcX$wI$=?vk_xF?E0Ge2L%?~#Hm~sJpw=|ts>!4=JLM$BX-42k zuvc)Nin4zE+~;KKgxm@M_Y`p9uMimcH3g>Ec#D>#WwaS^U@^kA4Z+lM!CFx}^R<}@ zMkP(a7qV@HrdH?9kD(W}IG^Gl1_1x@ZUutAa*KuSz~gML#qYVcf8l)fuYtd>+6}ry z2)nvLrxONh$&~UC_B2d!cq%1i2mv zUmx`MW|^O{L061fJh6hnbL_W)z{HM&0^^7ko@-f>X;_TF0bw&>6^Q}ZF^(S@ebM+9 z(a~{FnHg{hPtjn@#tHM#80Y{Do&jb~kNHW^_rc?nDk!smkRI@td_+NDNR6`u?}Weu zP>#`ojly5K)t(BZd)o37=x+&UDa&2b@o9Cbfyj7MC?!jcpueJMya36Z=^rWNB^S~k zA;J}e-*=UY9{~RF766>5mN=T@VLLDXO{~y`yn_ORz#}a5JM{rF z1Xq!0h5TO%fd5|JgolA&{+xkfZ_fkZ&#e;+rlDpMxKlEmmr_iC8w-G6GvL*gC4{$j zxUPi}fAOM&m4bWzVg+_ZTTzfu_zR+*R;f)+y}}H#7BoxU`1%Aip#*_< z7`>H1vb02TDhF*xus>I(xDs5j&a|p+*uI%v<~>jk!d)zK#Oj|`fT4c|@XUnOM6#}H z`Br9BuO+L5*_CZN5@SUc20QYa;g^f`J4OKf&kr4b^4iVU-xw75jT<$c3uV2!Mb}8W z1>jdhbyS6|PLl`phQHT||EwurCqN4OMIgT>x?;Z;&iIB!!Bzf@EcExqiGjb5*aS^s zqmuPG+4$Mkgutso`Z<9(T&zQ?Jv=*As8@Y5#DGUZ+&BKR?wq+_s@mVp0XG)F&5lM~ zc`x|uPw2{*^-Ki7Nd^c32GLL$FdZb`&a=cIO+h2M=rDX}&Cd|{oz2j+^CBqQt`l%0 ztQmE4$Cu3r>=j7PZ;S_Y%?97STk$Awg1ACf2TmUFTh+e`a*F`}3kcp80wcVOLxGo0 z4u=ABjTo>**c=87B^`dy;lJ^N_9Sq`ql(25u`~3&`nBA^8&WO?JPy#lUYI)o7z$jU z@1nw54~*y|5<^f4Bp3iL1irl?aHq*)PemeBp3+kVe|sd^{k;xJsr_r`(>PHfbd0~q zl4`yoSm&vL#O$elJC-7IJEMaa024RPs5=KD$S5|!U^<)>?Df^%h7@eO65(M^h^znp4pfB>d zndWCBGy(t%f47VaP809|0@(7k%+E!Bp90Z%K|2&y%aV^FK{xg@ z0?&~sM?2HszX^lc(AwW)z`@;&CK^W=uzOQl{=>i5Eb#8487Ec5)4nw5gD~JyNAAgT z;CNuo_evXKXbrTto!WHR3^)cwHh}ET%z)vSLEC+X8)271mE$PlgOTJ84E(ZLe4LAo zz=$wC2<-EU0oT)J6AKRc{hhUhH2hx>1^UY`3BrL4eCmiBRIeh1zvy)sFccU7R`|)t zwxeNj-Nia>Fg60~45M!r0*_#n!w32W2t0-;b1>+3!g}|c0C1k0NWLGiwxZlOF+smk z6!?`lUcXM3U^wu1e|eWr&-iFSgX0KY`-1`-ff4^XoANFQoM~YF|7j_aA1H;mN)BA` zTV3$i92ljNVS4foa+}!26aGp$JE5h`fjjB>DfnylOYgzJTE3z=OZcly@!(^p2)Hl- z-pSJ$Nf3t+VDq?#o7EWz3#4drQ85;^o>+HyKw+;x$AFjaV&kC;`0U7fm#hterVSf$T{A@W#<3f{4k2{S)QB&&H6jQZFBd^C(E{QWmzCh<(kScWtLnR=pC52%$- zTFZ9KjxiV$iE~2(jT>W!0P{Vqm8D|p)t)d({YZ<#6ze-i|0cYY2s`jzHp4i5UPJ-# zodfu9A@3VEUKucZBF@)?qgmdN~*ggH_{>#UnETHVIzbt@{$_Z*NFIp_e%i{QU#q`^DWa?>&3PiM<97 zzFrK=8RnQD-sC z&=xPT7iMko#PZ`qtFQc1!xsqMPUPj}&!61jT@V5Mz# zlrCk1kO4$tI+UVg$29P-iv&OUZzJ%r7Yt+NFaRI(UX#-R1J07~uxItyjllZZ#J_4F z@I}TSiuD>v*=du4Dy{p?3+%~XYK<|CtOUb_z~>(p{$8(4NH^fDOu)W$?Z(KUaDW1$ zSHpm%lr}xH*D)x^au3b_0^JDc3jl+^rCtOK{#F2vduG1~$czHdxL-kmI~C!=dzYj~ zf?^7)Y9E4wyxoHVP!{^jCT%hF(yRgw&u&=fJDDmvD?hQFOZ6F%%yYmTGz$iIgTR5- zfT+f1^zE@3fg6A`KRmjb0|tI6CGUe{OsiI9TDsw#I&3S$rJ?6>$wq&ABsa>sBkEQp zL;n5_1osUW6zBQ!jPFp;&@wM_{@`~2aG9XL{OZdO?>)Qrx}Zt)7q92>OYs#VKiA0r zxn5n67Y@vRIT1pFU%-ID+bQv{t=3_{Jx%O1`2pa!l#(Bitqlr1Aa=m-48e*MjY5Ju z9yIHK?;hN`5gRlW;>WFhcZzb~B*!-h{K}1LiV@otdQf2aFU15{u>3b8@STQVHfq^T z?t~a4Lf}XPaaJU$Em2;71pG~!B(|c)s6=j7nI4{V7*Yel2#mR^f^L+wg(H2^nIRYz z_)-tXRL2^CPXS<>(}dSB{Nm<&RK;C*aXao%>H<&Z`U`YG@KH#g*fAntt-V3SKfVtF zk5vyKFFi?}kuY|GF&*PBGV@MM${CGMc8?L?vY_(84h9NDOkW9s-atg@lDAuz2FWWZmWf%y~f%GryEMJerb6 zeDVqWT%G{rZmN0UC;$E5?G3HBjl+33$t2f#I#w9W?=#NuEHI|<{#G6ivpZ8@Ud5pL zUgSK6xwa&xfA?&9w_mu;_c{RV3-a;jKKuR_v9BtCJAC)*x8J^W@X8Q2mSx=fz|GK;-w1lCet6;L+uC>fe3fzd?cK=8qOvtaeLy;)#AOmpx-fmw+3 z22ruV;hW3}*P}BHY%3A?t8G}M2L=9{jnMizgHr4@5Co19dYz?EGb1n?5&%YF#oZ|# zM*_mgBgH9Jcw!SEN55ha@P<5>RyjKx_^U_^JG2nkvU4T?XR6y7fCo<&iot$6;|~bT zjgHUQ*=aV=+4Z=mB0I_W=v>A#hOqHvZO%$Mf_exPTR1)P>JRTHuMq>KHS^j4?8uB} zz)N`CUc57I*PIcf@&djVm_L^Wf%UZb$0&cJ#4Eyah!z2sFcJLZ*8nhqtUc&7lfwTa zrjGeP$7bPt&@f=j15X-2lR#j^DPvFiKf<2YFU=8BVuC)N7FN}!rEMG$1GXdF?)-~` zH_H0_@=FDl*KWQ<{Hq%TC%7g6z5@OVV;v6*jqkI?F(_?+W<=o2b^wva7L6IY7yk-= zi~klMh8t&b5*BE{*Tgpn{6VAd%5sguA;S?va4!T#Lw~yje%-heWR|L0#o*f%SpU~4 zg~DTbON0TBf^(hu@d*i#K;X#4Y^!P2Snzk2&Pcg^gtybI#DdNeU@@9f=2KClFT*Q0 z4Zdb6l4ZeXsx{{GWx~^l=z2%cs%;Ob;yf!_jO3n!jdWr5++)`8Ioh}#v*tBc^sS|+@iI63hcRNhE*L%KbXW@#A2v_6d#1Qv ze}lQBx}f8P_8{o@1`PPPY6bSv-;_ukwPf&Rq<$&C`OUZGfmK*~y;ku;Tp`5@K$)rD zQiXxG(69PN8K8x~j0k=u2bu!zAXxZ6H~nSzrEdbhctww749Rme)Dnb^tUP#yU-4cF zRcz3d%ffJ^gJf^@!)gjlYXClr+miscJ|x0J@nXTR9rNM9_Qf*$r9v%@pc1;49*o$m z1OJue>Mayy5IAZGc66*NlLYxzL$qaqU&}_IpNqHnQ86->)4%J0>}PfO@80idh4!MH5X9IDZgN^=3=bgQ%v7OfA44>tfO z6$7y-l@G}P{8q9tAZEGZz>KQu0|wyE2Yl!Kzx@2oTM*kI@IC-TyosuF>y?}Ja<21v zepML}@q`9}`{NN2A`5}xz~aAEQ2(3m#5>Ef8Zq+rIHb%=f+aFYx6&=sG^)5+S@-K~ z0?sm5m+^wC}%o*Y>U8NNGlFlhgd;%Ge3M#>CF>Ff*_ zwu#fxtH&bAg7Oo9Qgety>X4-8gBeUhVJ$?X&oOF#BVog@V;u72Fo!{4*#UO9i^#t8 z5;%MF#zBGN!L6%TaS6S7?JCSQ*^rF0rIrJB2OL9yZ*KfI1Q_U50$@om{|)|PfGz_3 z)bLAE;IaM}0IqGB1QyY~M06}((AGqMjtYaZLa*>UZC1o2ZNi8n*lozv{2Zpu@;U6eyL(%RIO-7 z?C#5Dyf?Sa9_m3|oGikA^hn^B>iyd4@EvrzUkMBt051FUwb$`(xCyzH*A+_lUwB~w z!-MYDHX^6~i+N#&Rt9XY%XyqwRrqk|um&X{AfuyAJ|rV>@K+PPBEe&S&e5=+kNPWdFh+2Op!_!kz^|4K8UV&E3r}be`1|kq1oX#)F27!D2LOfx|NV}A+6=&< zz#d#7I1~BEZHlGeE{8_opfBC?t`xMxESRrW#c2XA9TDQ}Q~)eF*TP~`-~qwsf?@Cz z1U^B*Oa!(&5ct@Rvk5#W*n z;Ex5tCz=Yj>A8?=k^W+DTUkAtmO2Ues$&Obc=@T!&>-;81^(OmY*Cc4A2VQ`MynW- z3KN2*yoE2YdNw*O3>YRisNAmCAI&tuuGI;-A*UCeI$X=fE0LK0`#Hydi$2fN_-kjn zI$H=VCjvzHJKXx%!&2c`l=VME9~~u;5%+Ade|7svoBEHe&8QL;5B$B4X0ggAcI@Vu z8E!)^znQqW#<`LH@h6`8?r3LYRT>l+R6aTX^2)(CFWoA+akY{G9=!ST%MgR24)|f2 z_No;W2Ywkf))Iq~uL1D)TH`M^?8e_`odbB`zg1#-mh;uUd)T0jzv94IWpp|Irj`VK zHP^N3M=uCO88RGQ32@?3y8QhR2HZk+eN-t~8h$D9wcw{F0v3xjGqwhUUhtRxCGv0r zVBbPx2H?oM>Bj4(PujCVhvsI2Z$rz)?`r5GKrNd~Ka6V0hOseVhgz!#Kh`Ol2QGz~ z8H0rk9}o%at8cF0e|7!l%{K~zcvs#q4r7cioE0R4R*jvwL~}R*yokp8eC^HrmnsO% zFs(MHV?dX5NWIz@2#&-B8rf1Jef0JK;H*SiC@|_re6`5`D=dP30}A|lA+Y?gKwzim zZ};bFWkRaYi74T8h14g}~Rm6xPGhhH%>GDcNetDQP9>)pvOpgu0 zptTX0Cn&cli9h2meA!k928Ni7_&$a&Lv@>e0ay$77((0Yk>)8T%-_9&HFoWB zdU&X0Ne(Zn*L#K|1G}Iecpt$DrnKZVo~SORaqF0y4Zsun+W2l_u14DH!oksy9XHm z87KtizlJ)koF@-VfHkwNHKmr~T%7$F{3SBiW7(h;`x~6EOUfTWtaw)dTt?tmDtPSG z;=cuyFTMPRyjHL!OAds@f!_szA;2U7w*8rtUT!C9DtTZP{e}FpdF}60tv@OgG@}E4 zOGwKP00)8H$i%z{vXMR-^bG;tQweRO?+U@I`xQ0&LEbFa_2xBEzP& zMWD+$&3n~EGWmNs|IMB(-}ezAaQr%Af{wqE>M9V&Qudbb)cx$hiE|WBD_SYLD!PlY z*n7cVH=*4BA7^jEAXjl@;dV=E3Fe{AU>od_)QfDuwpNflUID4QwE(t<0sj9_dGX~r zaZh%(Wc*&_t-IH)>aOLh6B!wSnc+GweofnLw{}7&F{Smd=(}J1efE6k#(My_$ir{R z3zb{-a%~rrH2#R&yFb4B=$c}jX%@oYlECKg&qUx2 zw1O-mnC-5F)VkPXfK?HR7_1$}6W_QxN#Lo-6LXdbVKQA;9&D0;R2=ks1!Sk=I3*Oi zG%x^$z#hz3)2puma66%=`qAyxV9&4wVsVUlUaY)Q(Abtr(a=}O4St!8LBloEFeT^M z2bL(BC#7iwVD|ujFSX3I27nR3tkCWO(JdSrd`bb2$XEebeAZ~CF&3C6^;_)ah8e-o znd86jjz}r-;(&5Vl^MWYfrZxjjrlmjUjY1Q5ZJ_uC5ev2V9Ts@Ew}h|y?d*B=eyPb zr*r`eX4nj1?ic}>NGUdOn<*XRzysJ_B2oliW@;9V&IKLS@8B;`UI)cncPUFi@-)o6 zd~+qvj9nQWt>LpnOBVj}&mtC2$*c8CNDdKo3A?+Peef3o>*4y(*1%l@n8yfzkxbwh z0;>)Ouyl8O{a-+E%=~T9%&cyl`mxfGkJOl-1K_R{rN0J5D<-^N#V3b1_bOI$=f%s@ z3pcLs?OwVDelY^E21>1fF?R#+z+WZG!r(7o1m*1lz!JdHznmlm41XVefw6|D z4(5wG?2WODW4Oh0=g6u~FRg|X+P%Qg7qhIs1A+GyepQkW{?>q;!f(CdE?g@3R-*$L zdpGXqj%OM%(d>%FQVp2q$q=SncoD#@fW6rzfg!LYuo!F?v>3c9;K*MOLb~(O5d!$8 ze9-Tjz>&brolX-1*FdBzNZ`xlh%EvmfkR+E7D!)=kB$JWl+Y!CZ!i1}fJ0#Mw=EtL zZg?qJrc#HygiYVE8DldNIPS$lB}(;4HNI8bMp`Yg90X$!7zP``BW`O5R@NE&i?PK; z#bEf{B?gPV5P0b4!YgiQ`=OciMLta9P??m=(kX&*KAs7CbP6Uud!sLqiEmyy02ls> zz?NeY$Kv-=o?ZiyJZjl0I0#<+V!^NbI+H?ig}*ZPsS|Yjnz0<%0Gzv+z|QjAW1sR% z!nOD%;Jr))lS)b1nz~uVKiD1sms*m@&pp&N;d&D7g6@h=_dGC|-U+%Sczu!U_M#6X z7;Q}V6?JU@7hx452Y>5+0GMueemT_yWE;V?7@m4|Dp<|0gcLJ(LID4!2>e;HU_TIl zAvCX;92vK7UVZQS@vCnRZ(h58=~4~aeEq%6vgJ1A2VW6HILYBXgNdT*Eh# z<_r&`fL8>&16X~)YgHqy^gL@u@Pgk3!O_C0g=hSh`;vA$6ebdyNm0O0i|SQr4lAN)%H zZuZp13L+SGDkA#H2&l3e9s*dGeZZxyXKjUE^Y;k=E@L0lKsk8c#zQeF38s1}oxI;p z*VG)8hijl$6qW*BAeh|D=X!+aaOPolp@U!pm^d=`!vDt}i+4kv#;oU|e&pMMQM=gsCvmB-+QgWZ_p%5qAhn20J-) z^&{{~J{Sac!APDLTh3wWg3rz0VULL`qhCV&1*$~yFjIt1jBqV^$2pI))MZ>&yavEh zz~c{Z9Sn0nE{{l|yw)nw*3-jlJ4gHb2gf@*bmd+}12~ZKx}3>y)Zx&sM+kx8uXcC@ z5&~E|gkHpNU6XWJQ}ordn#5ws-{;2fOUvKG;%@<1Fn;BNM=>B9@U9m6E)4$G3#EY; zeItRxS*>Opn`<#d0(&|?5UBt>M&mKbx$HvIVI|X~YH?2S+NG~I%jjRzw*j2VgUb*(6M<c{_jw}5+1 zRTptl)yh?J+(`nz`Y2<8fiPOwoxmb6PG~f46POuEPR!q_R{;WBCWpATL{(w2)_07mIA%L-yG4^O44#2XpE^B*#Y5%Bn7$+XM!{v@Q``r*-9qh+tnM z6Sg?<}h zaJ)-0XX{_Shwxn~o~mxj2`&0!$_kCe0eyu{cL48#ZF-NRf3asn0JA3j>&{>Jiygj% zzwBXk$_Bmg*M!AlIRtsNu)T2%ux5d98nZMX^0br$UJ*<(EcMazh8yGVonzdfYzW88 z{K+T8$^lGsx6kRd*|YrdCz!|@N!|LlMKU}u^H~kxlE8p3CLVj=#$7LhR9d7=e_>*a z0@h}b+zihq7Z30IF_ZAYqDqr9J(#{VZ4Lf11}W8Rb&(IN{@}CYo#O9x@LTTZi@02d z{=ETzFOK&(2`DdRr`2n-wtdV%nJ?=Ap_z-zSg%-_PV z6>tv&CJok|UlxGf2^`Mr8B5KZzXQjVfFKI1mX|Go)e9^M%!etT5NTlfp#6TnlV4(M z7x3bIUI>iw`e-Zfp2@t!`wV6)VD$ncgGWg7AaJ>$5jB9-V~6oS=ibA-;Hbi}uzRcu zxj2s{Y%wELChlr+PmS4A_LcD@YOVn5VdKsKz|86RWpKmC-2h5bL+0ox*yoH4tGih8 zHY0Lfg<%;zB)`1kxWO;AZZ{o@rKFJVf@NGP&>rUp{rzh{wsew(z%idN_$!xt5>V^c zgF~uR8Cm}yTN5}S9=rPSFgyjFC(v?Qy&tzrdp&<^cdv}pb4d8p)}#J*AZY& z6FS1)(ZgJevZu23zHhGu_V z7M*0T^^@C&?-vSp_bzM5hDQ|I30*RlmU{e2%7LACK&y@ev!Q^^-xk0%m;SAN$lvH+ zkPCkcz*J+vLR5`_PK=P%5CodHPPVm%gE&9ks~%?O=E2t0QKFJV|^Y?BP@ap%0^ zm16~)bB(iT3L}8aKKU42s^#6TP1z=Zh3fg7hPe=o+3l^gJb1!41-u^whrzVC6`5w& zBQu-yuTA`2)UH=OTZ5vxa@^i|Ol>CXux3tn2z}ANQouEh5aB2R5YGT_9T9C)Y9p_0@T*xvlwf242!4T|haWMoQxb?DJy~3rvV}mXW=xYA5(!OjnSi2vz76!uDAFQW548?k_C8sb_#)q;!s~y#B zON~I-qLnUQ$Dx=ZtyEtiVvMB1G!Pk63QIwKt8m2SI&2I7r^I!Kb|vmf*O=o~+6$eA zh0p@4c89;9R|~9%*xG_$`GsvkzWP-KDB*GfHvIt7vi4w*ma@%d5_Cur0E!ytr;+fh zSZrx>I)@=Tbt)NpBt$E4-al_R4YzUe7Yl$Jza(2x(y&&-qg6((lEA#*OhQtto!AtBS*N0JI@&{(4_WK&Jy3Ue~Srf1i_l@)^mW)%}Yd z)1-*OuV`ENwF`PUq1g?5wZNi*V+(?#fN3#stA*xjZx6!CMi9KzL|PQEO`X8%_aH?a z6vhB@xEa<0V2rMzHuf)pRV#q!1RX}XDUETG&){JR4ET8GudtV?4Qh>>_P6(!g>`7O zZAunRaWmF8GAm@(;*rJzV66EY{AUO2qHhKc51AwcLtghTsv=SyB@>nhRef05CnbN4 z-}f%nc(%gt$%WmEgTyBwSambWwt7W{kbY=S^iLRI+W_or98B#BUW2g8fFS&3&Ojsq z7z9fKO8}oCFbqchW(3klQy1_r-rp(w0^pLsT>YKFT0g-I2ByK=%K~o!__`(V<-Hy1 zjp2lr+u1tUW0KAg`1V$FAqp7N5OU0LW-A09FMSSs0fJ@8)?z9rV~69QT}2oO65)(B zO}~!=Iu~Pp+da*#gFQS+S*R78g?+CD*VEEIWf9jj?uG=Gkd^?hO?NIU%`isb4+I`a zkb)`-d*Col1%a8V@R>3xDSkSp^1m3wB_kw^nE5+$baE2USRvewEOQBBOv#)cI1AIeAVXFDk|wzQ*AU;4vAcn7L}GcAKU2h=LlUmRe1J7n~|4D-VcJblMJU zMP-_jr3{4p+FW%EN@`Pox1zLq$k+o{hJL8}3(oN@AUl|={yY31m5_yt7Jm76jh%#Z za|!fp-6DU5-|+%N*H1X5Cf~|FuY0Jwm%qsA%RZ-E6I3okEPwa-pZiD0J9{_AkV&%h zbvj#qz+Z;5wk}QBRe+fyfC+KoAlNm2lY9gH8}IXT(U<<ig&wjJ<~ni^g0O zY2`1J4Sj>(v=n1l>B|%b8?qs93*!a9OHrhSz-*}#*n{I8dp~ETTKHQ4mIO9|V@uEO z2H^OX+&v zhs};W3!X=mlN`{nm#Mz*!EbUieTeuKe#v`$Wl-np#nXB(9aCRKI{36a(e>6s2_uB7 z6Icm3U@!>&PZcmK6XMRtMC4fkvkiaiR?`@VO9V8wNML811i(_iij7Vb)`!(lzyP=; zFh+pcAZiHgCs5B)b9~S!Uod^``VX%DRJHjp9v{Ci2}}kKK3FY+td!Y^Xa(o854u;M;?5HqO5UK`pLvz3BS6CZSqJHk%h5dySO7YAGofq zBc=`AwP{fd2frfl=GgWb;FpGs6BlR?2Y|;8Fv@PA2s2s%b`B~74FeSe2$(A}A%}xs ztZ>r`cruL)RzNqbg)KZr^@pag;^;4i0R^BqprL(qsVt}sfo<&TLs1syc~bJlCWm`U ztu~|qBF0%xz-6S5Sfvre^t(aesn7bJD?$9O&|cOGxQCFdFTJKQjEETcM~nggqybzY z#MpY^pDFhWxQdZic$WZ77cfxf#bcvrilXJ~l?hYWokOcQC00ctKK|^t25^}L{pTK= z^cl>Sm;LFTqut76MP1-`rXTQ_$0C`*yCSczcujf%9%DRU|Z*1E7 zopP0i!orOsuo_b($lOf@KMjDo8yJ5u^LGFkhquDA;RX3gFkqpKU0tWQxWJ`4(D$Ju ziaswA@#LVH!nX}z+~c(`_6Gij%4hhiS?=5lI9CFOqujl&WDkI}`U5L>_)D1drzsa# zr3F7Ph<*HM{QC@eJ!8pwmy5y&4S;c-0N_Dij4xpR56D--sX(cVDeM1*qn>OkmC$kk znE#*ZTQPFHCKb#wVDTvf)FE(OyItu*>l9Uv5`bCS(9Py=0oVvGD=do%^*o;LAMX@@ zukwi|OOQX!?LWIRO6vn&VK)HA;IAXF0C0u?+x?u;zvx{FV2Jz-{1SX6&ohnb1^neC zxuDevYzb@+bX?7zg5HwH34iu-@j_?$1{FNv_e~ptbZqJew$%y%b{-r244(y?MrP9G z7{Jvyr6Zk#U`_~ummHJP(KhopKJDN4-umsf^Eb@ki~d~+jA^O$@Yfmj(Iz!lAFv4= z?_$OVGm8M;6jE2rXW}`ePgpxFf%62$a8lPR0J1<$zn1Ft7 zG5FW-qnGVfK?@g#*{ojSdbj?tSL8(kvwY`20WdRKq0SWtZLA5v=>nDnMgUs^3&00UGuxcPh{t^Yv90~lZgAKqp3}8k&cQr&Sa3s1B41urkYoyNOFH}XS>pS(K z92)p*$zCJ4+Sm~Z%wXUKW%uAS>*QkzegAiMZdCcq=ZU~AUprSvQxfW`Y|_|22O;$H zS}`98i@w@v2%G2kxNgk{e4~2VVGdjVa+9$w5zGwwas%m#?1H~G_=jl;S)Hf9DFr5q zLP}St=p1X1r2r%iPeKGXr2P>e#~I zrI#3<;{f^O6ArcjZU6(mNZ{4poV&TdyrdW`NhClp9gi*j!faVTIhSyr#Z*I|7XEU2 zG?GpAn*v{E-1*>(uReJ8L3N{Ce~-eqSL@BZcLDIy#9!Wf#b0zVTWnl{yL*MDQotfG zB>QOq%c6bX&Cw{}1YyybMidqRF7QeMo4~(xyUYq}aiSjFI9{``aYt$?c& zxa=A^uH+cUATf5OH0tM-bc9Y}#vK z@S}nUb^rC`$-ka>pLQ1+If_tOZ+`O|1QB?I zz)fte4DTuv@^_er*9`tbU@#%A27If*UtG|SqW7r3=v!bOef}maC8#z1zIRsomH-2a> z#9s|TQWbw&`1=gm@qy3_ecvw{Oa7AZO5`o0JU?U>vN;T(A+QDn%M95Vfh1|YkJc-i zox`x%TT>EpMD}X70@;V7eKlVs@V_1_467PUbP{$`bM@kIh6QkMeM$>|*{yl-%gT}` z3w*cy{cTxYM|l1u0LB`?GlNS;F4YnYOl|^fQvS&+IAUPTUlV#FFct#ma@_2Gemj9P z64=&pJ_fHr%q7L&UwnCRaQF=VUamJ~Rrk8^V!&4ha!*dv5qv5D6A(@RFK*gPMli$K z-)^ZnNULq{_8bN57z&$Q(3loCcM8BD7!AzQ0FDF}gV|-%KE+{G7jOaiXB~wF(n+n! zlir--Qo|tlM;^a$3xG!@^yuT?4Eq?@q&2W2htST-F#$~m z;~Dp=LCmT+p!}RDH5{lUZvrCNkZrcd9xaUFWo-h}F!=ki2#j^`r{>DzT#SSv;crYb z6UGesb5X&zad|(PFS*b_EPmc%o$ConV{+Mk*a7%YJYW_E>KP0(c@>zY3lB$qVz8uu zQ*Gk@15%+p;C|9tTN&1(hVQowvR&0osuV}rxjoD@337opn@ z=xqp+*ev)2e-H6Lmw{jS+cwsufN?=%%#)C^IlGEqOoy7fGlEwUJbR(< zva(P(df0o@WT9^Wta=RpDhd2hT^SEGDwh@s906?NLf|GUXXQ-YY$7k`bMyJ(Zv-$s z6$M}&V`uTV0Q~m`@T!4RnkY8!8(&;}?_f0_-a8RE(j^3TH6tdkSUd^8v5Z7U6_0H! z0x1ckrFU5igTe2I1>nCCf%UBX&wG{ebZ6)0?&-_T@5~JTvM3XRt3lv;_o9N4z%Y0Z z0RLM8OKYMm;VrWm{^r$&1jY>E>o>u!G;pmofrVK4psTHB0RQP%zb*hDeE@)O+$f>X z1;;O79!GIldUlwSdKG~Ah0O9goxla(T2v@B>9B}|hPO!IAehgL{5*3naMQHS>rGnY zmu9mZolcIF#?~C*#xJuNloThE0W}gizxEu+#}#u)cTcC!dAmkzY)#C?KaFV)lY?Pd z;EZMly_&&V=gY#OUAN{hvp)!*PIaYP!qtEu02YC9w?dngdoX~leRDZ0U<+W(ce8Fr z1Gh=~ehz^jZ>1?XD?^696Y1QKth$CWu~u3ll3|Rr;@0?eIS5dsYsUJQhUBOU0*k-3 zOL?+Khb$&K>%>817*(V~EY@11|It`TTlbYAa08g#0`T@L<31tal{It3J<~hD-&_qJ zG>8AM)D(`YDT8FvgWFF-SoxHQN5!<5xfCrPoHV-p0M;?aAE}Q24*X@HZ%s$&-fF_@v(qCC z{rdv?zBmKlM)Anav1a11tptwvZT$8;1iq`vz`m_Ts%co_p>wnW>{vZtQ66XkI5q(g{hM#Y#k8{>&`)SGdj{*k zxvslO1IPPJ!!qW`TeUeB6MvUDFmKC(-&}5g|F4z)YUjp{of_U&@4C~MuU|EQiMt~3 zidpzOZfM{=iUOCx-=Tp2ZAY-eo0w`9;!1U9>48C^FIGCW5qzxy90FSc6X#q2jwv=P zT_>@%&%UoxtNQserRKOHeoWmC4B8l-qMjLZT0z*)>+H7!(TSGkgRrnGfSbR z&2Ck5RYg-+(PAPn{KX(-S94Ih4$+sJzTul4_Yh|Q_% zPGA8z_yr+IV8!J=R+9oAwAivgRg)E+h9olyr<~I93@c5p0+kg}Rx=D*8boDt#$_vD z{KMV{s(6O3WicuW0boB_t6WaiU|pAqb4b&t5)*b0a%L-d5xDWIe{R=&^5|+p+|d5` zC?4?8C}6_TP{6T9u(NkO=EbnrUO6;SzR(vH+W>wj0`na#0%M(yxP|+u`tIB%tUm(4 zzx(~YJ3G}qbPfDoRe3g<^sm<;a00MKa;u%%auJ5E!p{*9jO|AMJ}ZxNIiQ*72sUKl zE8b`DTYI4L;BxIKQ!>hwBt-o(y%E4E=EAHY93S*j8EFZHu1W398kkx9(QjA4k-+Sf zSLl<+pFZZbs>!evSaTB{8^E>*Th53L{>C&eTnr9?*$-~5s2lJG@S=cIdr)o7Xq7KV z_zQsP3F}xCg_qu%oQD3k41l9|+L8b>{GEnIrIRsFNgF^nGihmbaV__&5BS;c%@V#x z&ptSQcJ%t|SLHkret|6>=;MO$L||s>2L?-)z;#;yyxNeyPPWWi_q{t?p~9!J}aoWB8upyT?m|XT=hV*LL7e(oJBSA08zl) z#RvwH9*u;3V&z%$ai;*74I{U9dh9gVZyPn0x?`OvH-0sI2Ky!1u`$LP>nfOCH5$J` z=jHgE7-x+(s&3^^M&z65TQ?VKP-0F@ZUQUdDU$8euA5X9An)8HZ9yqu;wfP+#vlGNySp&h4GV!=2d{cK@y}s!l5wn^z)yI&iokxqbcej*Y6HI++8qV# zvx497HKvYUA-M6JBV5vt$Gv_#0IbL-S@dsPT#3uTl9~eGGBNn62uwz3lQ*^!*su+4 z*$jbc064p&fZecMuNjOn1nG+}e({WfHDCVx%MZRfB&fGpE9fd3I#ydKW0G>v4=e)z zAQAi@D`2PNNRSX0d4|Qsaus9QikGMdF#hOB!7v!O<#F_ zAh3k5JCm7MXY8`-$Gd)>hQ%s2skr(W`kKE3lc-t~xNew+{?fTD{MrX?7qm!W04oJW z09^iO@N51e=+tKkf3dA(J|KaF>hRTmagqI~;uJP&n$c|vzuiY`0i0U@gM{~z5VIq* zQJDDSA-wdo#|F7xQ%WQIz}O67Ci|bw;CP`|1>Cb(Y66GIWs3slmdyaT;LF%=5|1ec+CW_S%R5U1 z=D1lp>)&ns(F$Og`Wx<@@xwxJ-lUGI#s+{L`NXmoQ8TL}(D|Fa18Wa-n-s$>@N4?U zq)q0Olu^E8(R{_UJI`kkz)V`1@q5P$@Jj}c1LB~M4!`{Jpltv3%Z$%w?V4)YG3vN63*o&^h%e0xIuYfNza$&g^;RlRHN*LBh*smJ8 zAbG5hjpi=^{^hG*{z4L%EAAlT`4~z9J1QIe=E>BLi}FFUWF*q)1in^dfsw!rL69$r z4;OQN-1=kSFsyhlg5S6+3{aau>ei)_n!u}9c3-{BD zkt@ylxP;v>eIYOhho|RuP6@Fyvs{@=phI9h z`rkRxXSZ39%m42X>Y}?8aI$894}qEFfac%o{2a9uf5|L~|JgYvjbK+qiuA>J)DC;^ zA~ae zuWuTNoVfNy@hV(I^J*6Huy^vw9w0Z zPJ-c()>!~+t{pwdC<@qdSdNY<2B+Vw1wkZmhW@7OH_Fy!i5tLJ(0pFMSeY}!_e>NP ze-acwIQaW73cmXX`$PVA$W_*78|WRefhPz^^#T(R{Zk6q050Cv%m5bjtbmt3;P=!8 zJZvmRCos@02@HW*hrsIORWGpcYZQ|f%Q090_*J!E9+dTeTP7d$?(xw!{73+1=|14Qk--1BqgRF(32Oly+KHAX+FV1cT@@x^dO1=WdNCgl zbeAJDgZ)Nrl*c>1S~z_EI=$I)ItJcj%EUH5eE6#kcNn)*+Izf%EsUI5H5tEv0P>93 zr=emUj|5F!C}Q*;OY-7_u64HI_QL>JW?W0?shFM+JOdc~0=kS!b|hBY?>G*Z04wJs zOt*AZSZPS>Sj4=Qt?%Om)LYJsL0}Kd)v#X{9%|(gOvTMM?jb1)wA454T)lE8rrQmg ziNETY=81`OQnm4cv(e8@R(}8hW`xrKvtzh)7;XMQh9?0(gY!b8e}@+w1Z#*C0JiZP zrqy>sz-gB0-zBt--yIsleDB}}{8jwbd$^;oMF8`;tyVa`27e`hpS?aLb#xri?-GHf z*eejcz~lb@cn5`kI4=x!X`G#B6dzN8vLdNVGPXr-T)ZG-7NW=bGe+5 z+&cjImaY{mqJPQKIZ{@|C)p{a8}E?TBN#z4(eWa z3h)rPNPK61AOEwZFHV$f#5^RJ1zzYaAJ(NyKLKE27uFSQQ^YV5ST5*Q0R!G^;I~F7 z-?&-OE##I22EkIm0dV?&wW6|w02otZj$a;rAOK&zd2$j0^T^iYN`~b@QT9O(0AK&H z=GVrc!zxQy0H*Vo&s3ARt25l?vmgl!fNkl$h}!f(H6=G zOh|Pku;;P$cU_8ftvqJ8CRwl?`Yvg$0kwdvi0FI}YP0s4$5O%f9E(*qCJ3kk0RUJC zo_lkjfMKWJcqsm2j<_~|3F|e0VI6d~1_r<>*C10uM%1gRBw|Pq7h`2x=P)JrAF1*| zI*nO{!WNkT%_e|~da#E-6WOmU*W$F?(AwZWb)1dP!Wjh&fQPV@dU*u^RSwEi4kx>WA>>K^KTkTAZ-`dp#);&dByy*?#L0dfwOJHFa|J6GTE0h8z4+n0p z>s6NUv|_MCV2W=SjU9{yfF}ujd*1+_6>vbeltId?6hg)aJQqk(HjmqHC2rmi%Z_u# zwNqKdZ*I?jBHc_seK&0N1+j(k10%-`;8_yeB8z7mTS71ZmLZM?+rV$9jUF%pTwAr` zu~s#Sl^Dxi!e#0!js$KxYoF@{TLCk$N4>xzY#3$hOd3Te?H;|m)zISu!3|*X=|0Qp z{<)e=CG%-c3C7I|`2J{4Zv~&ZSe+jJ+5--O?Y|wR?tvcyGI839%q|;?25>9{PD$n8 zo4*WwcHQLmPu%M|{S9DZ%|F95f22o&!72nlUedhap>Hh>QgPj}&OJD~Rzdu0{8qx_RH*ozmM_6*u`6Mn6KePfYy zSO9qNmzfZpbkH>|Dpvw{oVFbOCXLy~;Jfid2f{3DQNEdn!Jelo@G60c!lH&o*+Xuh zlKspYm&OXgQnCbMajXH1p=`}xozV#@BY~41eC`I8!#Z!vI(w&iHAB(+7V@SaY)NfD z*Jtu&zs3vvnTe_xK`qFCRVC$>Df?ojq^=mZm$%XFn6?nyA z%}$jEtJ(=GA}|D#bM{A2`c`w9zd<)+SLDqwU_M9h@CgFF>H@yX$BHDGwNj-7k3WFF zC4sRH!}_pY&=J7U7vrExAr*eP{qnGU(3Lv&=IP59M zs9pBSR!XmCcS}!iCorqD|F5P$Wi^kPip5gqm_fb&CmGzBYJv{>DwhTsit9jZ6e5Pd zBCxA5SS&kaw^qzw%moC%1o@w1d@a3!z<~pYdYg;zD46){G*Lj54KTX`82$h?|N{)jze*dz+|Me@z9}NK<@mt1> z9nM3UyfCN4V*PNbBC#NqJkUQ0VCBM+2bwk_qFJa5n5kA+e-DGZWu<~|+_;GZt}bAF z&_b{!u*xk6!J7aUfj<<0>tNZ}b;Ac;MHi3xqXvNM`O^#h&Xq`Drds18j1M{zxVn?B z)w}>)pVPzk93g$%0PrC2UB9L8?8Dxkc(LwK{xJqc(~B_^*qc6$9p1gARJpCi0`zH% zjW|WJYFmE}oQE*B64jkr!g^0p+z(>p;&@&u~?uIo4}e( zYOwdB9lKyt04%$2XRa$JSpf^@Qjo<6cU3aVs8p~MC>pilf})191A~@=d_2%2PX)BE zwRS-_Gq++1KsDl*XWJ^+f1k5Xwcu6JiSXB=k!QNqY^97bG8nVUZ2%)V5=iqMfzCRZ z@(?DlL#0P`!5UOVFR%b?1oPh8Fq0Wb%NRa1S;oqh99XBM5P8aKgE{h8!?WBzz&4AdKPjY)ijDP&6WEb!0xAW zNnJbO*4WZB_yxVnNFV^aJd73a=--<8tGmbtZ2-^koOP|UBuzz;-h$wTzncJ#6?gC4 zE&f(Qj&ELj0I;PmON==Si~v8`g@Ix@p?~mTq@MtA`heeMHNC*z$LFOaFgMh%2LT(v zHvn*%eb7g!;DkXt*`(Pk{L0K<0Q|ZLToQP60+#>|fk!_twF&(+7YY2%832J~Etb*IqPl+5m>>@?FH_P@T>XqvL&)|SUeyx8PePq%PvF3)5FGa?E4(qJ&C@(39k zWCKZ(o$QgpUjeufG4a;`<}|^XJ-`A2w}D`CIwRGDV1+b~stl&Z+KDS2i&j;LVN5RTNZ=je^|nS-0O2`1(0Qlx zQyM^pt{Z+aMmLJOnK5yPtsBgA?5{GHY(MM&>oHM*Z!FShfv_Y;ssaDC;Cs7nh2gL3 z&7wg_rmX>7dmF!HELefQrx#wRMn3^qjM({46z~XwHh>4QbyN8;ey_q`CX5)Yp?q%^ ze*y4L4F&!M1Qvj6u1p*nX=MIlI>+kR1V#ZX3afg6`AEEY;qlD!K?}eT*b?0U2G4`Q zHPa968@v2KKHP>OA%oqMV+HImtZH{sKErzQS9z5_RBvvz)`DAJN^DlZYxtAyX8zim zbLais2JwbUfzo@XMAydn#Lsod0AyAXV}Bi-L7bx;Kby_F1B%{vYF`OfSs1G6$`)2Asb!gt{> zCjMgn(;i6w64gwAbH%Q;0Opmblhg<7LC?hTJgP`q*NSpL)u*UpF0z$_V*0PL z0#@0=0bq_OTiSgU+8`GeRb*iAaGLSm(SguopME&o3!Nf_E;tH&FQI@{f$#$QSA~xN zstC*kZXu2=z{_YQwetwhc;FD2=BY7k^k%I^FjGuh z9NY+8Gor8vfDVCG8($e!H~#jxwnk_2KrbRV@mI6!MVPg55gU6sAY%I`;toTG)Ijji z!giI#*h&sw)r=8kRkzJe!yWI@I46nx;)HgnRNZ2c6&UvXN@TYp7EO?TGI{MWTcpfy8;ZVje(`sv=jKA2Vo}e!-%>8{{-;p>C(z=GU z-#}is``K|=Om!I1_Az)0Z2Z%yx` zfDfy+0&bNn0H*^OKL7HUXk!cl$VH%y&20#;RzhD) z<(-_{x@_xZ)%DuD{s)zaLIe-~s*88Efhw(ORgbTRN%oRtsxGZ8&Pu%108SAa0371V zyrncDxbG3bb*9icLf7G&$y@+^MeskWtsW~1UY&H{K(AuB@+I0CDyAV~mY?~{S!gSz2|2DIFm zp1m-Gg=6z~xS=J1=da2HVFkeo8HoaxwfoEymh8~BL_(u}W7I-&3xrn!_xjtre|@m) zG0-*7s4?eS2{so1mqh`)A9zW}p(QQGMgXjzfAMRN&B5}FX4*m3g5RfJ)-7oyYZ(rs zeWh_(Hh)JUa&9EtGjmzga-4N88D$9U-oE(t#9x`XtD73D>o@T1gib1@!td?!m+tfW zt7xV5uih{Mu*{vqc0LbtLM$B6dm|I2`1Mv3e~0`PfHM%OW+-5OzAA14_tDkzIwOIv zxrqJ{z(`<}t=!N7Fq8$r;cv<094b8D{S^xM)yTy0GrDgLUuDNZ&I!wngAC zm7&;*&7HvlaGcOGaj>Whe?3^GUCT_!wOY!c^+@J{1jeP=RhQ~+!ngW|3tB29#CcQJ zj3sJUu~0!DAxT`085=ep)%;z2(KSf`)5>a9(pUJk_BEg4d-mS!4~U)M*+qouzJ#P7klmm9H+LU z6F?gTM+O65S{aL$z{$m72cp2Md5RLw+BUg3fG;h^nSpQ0G6cUyu-I$*vKk6|g~n{D z#lSvpYQVSl7JwgLJm7c zUcr~TE|}CXGr?Cu&lbQ1Rz*9j^qM@-+{$Xs(Qe<@B&x^efxt^hsqDNcVU0<*9ALi0 zL$e0XZ{NQCEfwXl(!TKMrTHuFYOW1u=5UF^E{`b!SNown(eUf-mP$jdfYF%Nz?fY| z+zP(}Fc~wDzHL>C|F|S@>ECgKzy;X=nELy2L1O_h1g>%o2w(~#y|2(^06d(~NZ>K- z*AiItnG<{wt~4IJsLRa zG}{&g%S2!bEyR$y%8%tpX7DT4`FO2C;KG_jC1(r3%EO^(E}+~wB?o|OMf^=c+?3=u z=)kYG8p7~gGIw0L0Ss5&`gcG8j0wMrFlu8n)_@w4*}H@-o1aAx+`kTLF$mmWkjWS5 z6oBq^i$xBr5;6amfnUlK0$?QzQFnR>ToWb@jQg4hwBH%Q?t`}iRumQzT>y@?6J6DJ z;vZ0jNyh;E@!)#>NQbiTN&PZVzi8Y+omVw9$tfwz7{xI9!2q%aF#MeaaCx`lf|d`O zIWzeCjD?!uD+;?5(%|oLUBU#moMDMgRgYE$?8-_1HYt`$B|%-LSpe5+&AG)=iNRZu zx-o70K&OMQ0o;Y)3fSZ2Q|G@)>f_0qmTsP zr?aWX%a%w(3YfXm>WQzARWcVKO9L~r=h??Be`8ZBtdMj1=2gqL*SyQ~c`XQLg1wd- zw{I7G$KaxbI*Y&4wl^~r7#jetW+(Ke9|nIfUHJ(YwBYNyN8(#G-^D=_d}!o}9ss^^ z{c0^BuL1nNI)RmCB!enR8nY*6-v*|U(W_C^MQRR}b8b?*U18mE1k*E%< zmdNBs!wEd@+4dkoWmZ2#LJOX)ggdPl0RFtRH2N1szGcIn_`61@<(Tk0ep~I| zD7~wGE5v{6is3E`8`~h)%?xhVt~RI2 z(n#Q^PYS<<;K!eJW|jz712~T7*g|3>IP{$^Lm9KO&PSR04DMPse&d23L`BdtJ?R>! zlEjk2QowXh-2=CnJ^u8QO!tZFr9jqt0Ae^vsl zLhp_MjEy?LWgs|_&fU)|0&fDi@q3qpRg9q!e)O8qDHMML_|i3gBU=Ky9FhS{IWrYx zz_Wz`;2H^hd{XHsQ`025)$0RMs|8_6VELe#gx?R#S=^d9e1witzYQT;130f|;2Lo$ zGt|z%C+rrcwgVK7Ts5JYVKMk?0*9arNOPUGf0Z}~30&qKtXKe}f2*Yi@P(6M&(Rj63m9wqrU}2S zO8(jqz&>_j0uz)q*`$DDZx4iCt1~zXnjiNulyA+ge(j82tsxw5^TJ;vIK9Bc-WPvA z9^R5QZA%33g5cGJP+cI#-cQ6|BUs+-c0mik3BfA+3;@%Z21z4?#bL|g7QjZZM6T_L zTlg&kNB5>sYof3;F*_Gjn((Xh{cW*mqI}bXU!2c)m%EnjOD*UImJVJ90W(WREclBd zfyv@VEHq>5ep&%*e612fcTNr~VED^S!;qwXuQT7l_q+l4XpAqyRzLGxk^x2=z?cMZ z0l4`KfFUpdzM!GNmcW3Qwkcpn4W<*gmhwR#S10f{BTMT?0M`gc`m%uwIsi@>mgH)n z6kCSIu1UXxFxo`7VF!tq>JxG=GdM{**b(8YlbeZ>ynnX>RA1oy8l=cFjRpT2Ap;>I0@Vfq^TKGuNzZ6*sILP2-d}uFcB(#nw+;L%8b=5orW~ zKcoDSl5yZLg)~yElem1u7tuo=xbfTk1-pt|7K?QXoCJ&Qg1#rq1$8q&QS9oq7MEg5 zKz)Cez(F(*lLHEl!ZdfcUR3a0t;WJ-=I_W-LS*WS}*a=)y z(#`>H?l^`=k@TO(OviLC;?-3Ei}UJR`2O}T-Bwqfu?GP>La_kt_^4X+D#vY1MF@AC z02%>2*8sMM5BX~obd6oHS>rJ^t3804+lv4=1g_}liNFhe4PXait;T`v?5N(U19(h# z1K$?Ht1~*@<~QiyB@VhI@M!Uel)0}$39M){fNPW8SxNFqTHa0pa3rv<%BoXahQOan z0psMNGq-Lm;V5Vgh?RPSxh1fj&~1UR`+k)L+5&hPOq?hzngQIlc=W>M4Zr!~d(*f4 z9jjk;`C@}aVlk_-^Z`cz(~Mxh_0$P`VJKku^-~HM&I!O0!|YQ*B=(LVCv^e~z)0X5 zH+QS+7Xa^+|9J@DBd`l+O9MA%Zv$D0VE9|DPJzs=fhzoJ-nzB^UCtFS-2KXaIW^ zYm1k89~*JMr=VW-Aq#5DgO2J<3;o0p^I0`OON)q}#{fo=d?@z4wuW}wj&^20@z z8cYCK5cV$r@_Kq$UgoRd_j0xC^%12wFwFID<;!z^%I(W%6TpRD3t;$*sr;`C01x1D zW1?|LwkTj$H(3JAC0J%F{MLl63YZ<|lrIalWkj&)3wbeq>kGejMz5AcSWK%e$tqnF zm>1Qr4%Ru-Xi381!o5x1^yXsYU~6DOI1ZO$tpE&yLGHM_gRo5YPh+3#;5SY$?mf{I zixlpP3hr?N*UK66mRe21Z~C{iG3USXBBY&j1$K+2^G@43SB3^6_Ue@}T4ubOzcp_# zYvZ*+ot%_0@Ov@;n4vhWfQh|=z+(kJ@6Elv>xE&!`!kOM z{r~`%jWWP^p`(D?30+`@z#K4|u@b=W_x)F}(sBPU+X;OM0PA_xQm%5DB(OfSaY0`% z0G}KS!2WdH)m8Z|I^?ixG9ZEXMKpESO0F)-@@$snYAb*9V$v)tZGSJ*CEa9e>=cx1 z=Cz1jY0kZUQE#m9o!?Vl$a1a4GamgL0*?gb`bA(D&s^Q%b}Ajl_*g{$N&z!HWniyM z7i^UaL^s0{4uPOrfBJtE_=k$lomf(A)T$k0S{3xHI(h(?B+wsI%khAAC_Vyt_G;|Z6xcUA<3>Wj0vs}n^AGpV!N!Z!+& zjfKFL9vn%xU&+%Xk$!;xxpXWtxH4V2tdR&y6Fo)hjlgx>)bE_uH6)qbgVn`OjxK%$ zRmDUT*cA64nnh|f@W+i8^2z>NtxTe}vxtbw>U(5i;-mHKV2z}oF?3u{REe3p3k5CJy z#X{H^tZkRHEfV-C^|Nc_J2gDWdp1U%L0{Ho5O=EcyY0=2ywDNBbB?SiU<~M50b?rO zkeIG|^Xu}95k41ut{mc zUTs2Pb=nBQG<$~^1T^oQaiqe_w0Pu~S`iOBcb^8{6y-El)E@%<>u6@t| zEfN^P8hIEm@tZ@Q+dmweDS1%cwOEmsS zj$S~$|CfF6d&d!h$zPfBp2^#GJ|~tHuv0)F##FzrkgMtn6_Qn-R3SJ$hv@+>Fo7lY zMMBsjFt{Zr69fjqg$5K}9sVr@RyD%=zH>{?M+M;jt)K7^A@RxXrDQ&aAZcj;Gx_P* zSml~;;xA_dV8&OC$TEE38S5mm9V@`qxxQ4e%!7|A#E^I)aJ5thp6c~mBtvEJD+e*V z#;~pLlt=qfyXYZoi`R^7zTd-l@B@yZUU2y zl9)SQn7MG#U@@rt#Edn7o61tKQnb@hBEh%yFIHoTu>jb2_Z4Vm>Ji~CJ5OTvB0uG( znav^58HL2nV5Y@DFW~Kb9$WG~ZN&q9{_8jbI7%esrNw3yWNhELi~6l7zk0XPuv12k zO9EqHS0l&ODNK&&$x@}?6_Eyh%YG8TN<|5P~9y8zg~UH!q}bHc}<=o<-K0KOY0>E)St8K#|&EDnF0)B$kBZ{hcg5ID9xK=IuT zb8=@aS88s0p`)HN`B|(M{kyO{YdS3mMgU{c`k}DF%bH`+oMYXVH0v}3unkYG#<)Cr zP+uUf0US6v*Hw|WAPS1r6)FA}fQJ#x?dQ?rw#8^}r-m%GIT8Db)+qAbCV878V!% zY_5ak9$-cZMVk%)*Q2Nc6;ArDD5&GUc(PGD1R4Sxz@vM(q;GZq7P&vI$1VQy#rxU( z1Xl2JU5MO+wWxF>02hL<3%^y4uo_NiHZEgIjP;I3_VexI9MCA>-EPm1H3k^+p3vlh zCL(%vKy&!0oz&bTFb2P_*IL)RQ2RA9IDxHLG_Z&ogSM-gy(v$qa!4`U&eeJ-uywGe zSnwO>uKc|l30$-KSdBMDz2$^T$4Y_5XkF`6(-X@$BAJ7knPgj?eGnWAe`7G1b4g;p zgYdO!B$2qf%3vCr7Y6q}CPpn)V+=7XZ0g$t0^e@nPQJE$AuSg8%ChNv|Eruin~3P! zZ(bf1Z=WCUV#gOM^x*gcBi}YZbm~LbmKN5(HV0u<(|Z*cGU{O5F#&o zTLJ@N=*#lTwd+(M+`A5dkA8l1a(t6fz|Q~N1g6Yy04xNv+W_W3ANlAP9~6J(%h|es zdn7QaI1J$Ni{Qt>Up-q%;CGy02PZiIKCb_ox|6veAA|Np!{7a{dnD4g|NQ5-?gZX9 zI}>HRdMe&%+)3j0&76tO{`=ah)9_06S~9E=jqpO!1I;k9JK zQtgO=-7$k_;2IiuRlV*!6;q-&Vz>^7LTqTE$dTU-H*{ zH`8h2E@9jB2D8dWjU+DTA|1d*;L=%Tp9A1eX9CxJ_L;trlY9a~4GKFacz_F9T-vTfMrvF$v zSW^#13Q#o3&4K>zyp-@)e697 zuNEdS>609NT=P|FOR zTQ2Bm;17joyP&y!{i|1phmLtZ^Bt^LeK zIR|XhrRR*&;;%%w34BffGwZD$m_!jW5NrWVbzs|IAkJs-`+%~8(!XVotIZy0CyW5h zh)DIV7J#AJZvk5|xC{h8u#u&MXk9s|;rt?iVdMR};}e)DRKh(+LAMsJgIg0&t1~+N zz%^I5rYwAKQ9MrK$3nTg`K3?-evSr)zYMri;!HYZA5g2p9mdY=;b%5Flbge=^S|Sv z(<5vHq5!xI{yL+Abu1mgE{zZI;VLd_lQM2?rewu>$gp7M+`G`t#UF9~0=T-;KmM$M zT;I6}C-c|VtM!!K!_NPk*ZiE4zBvxB}KI z!fCOP_YDM=-JN{Uw{AVD|1`CqAB(?Iz_K9H`j-uwp(*gr1P+AR;X}C)SNd4jh?MS& zaeox>Y$Lpxj907mcqErU(k}K1zgT&mhx!$2jb99TAO+mJl00y><(sYAe$)wVmcZGI z`}xk-ukfOr98-2{z*jS5FmFJ~U7xPsp6hvnxxJf}zO@K^e022l(~7}zEe67?L|<-lGz-Dl81c(~4zzRnn~y%Sx;KEO z>g7rY!0!NDmFdQiz|NHkdim7yNtOh@N)&W?sp$RvwnGtN?*8k$-=cq+>XU)-HfJQT z8R}*DXp7KX@?HdGAtS2?aX^=S`Q;al-I(|I@&@m|t{Gh|^O?bGV(4d9uTxHA()5v;_?Ppa=12Xhe^0sQ&+q{a*D;<}GP z@IA**vn>Gt-#{S0%nT#j#%vpa!PVfe2plVS82g)?u$QSB>GYDr#9%0_Rm=)_CNL8w zjk-M(0={^vJes7h=1N~J7>=0a2ZnzuU_Udfa2|_8Ehm-z(%{@oXLKg!S`$pIgdYq% zgH>r?PEx+;#Rtuuu!j_}piCj=vD#y!1aSGG`P0x?pTS?6C9u5WY}n|)mOlX>bXg4q zzN(7Aqbi{qq0iUKf3{};`wPb@?x+G>M*Uy-OA~*eReHM*PNjKk&Pq)j5q3EgG>^)K zQ|Is4b>SERTsFe6&Lh}edq!|t;;@nkx?3+oU~Y|HQ@3S6D)j@@z;~6v!Lg5J;EIbSBXjb4`N?oHgM6mX!MmN@53+Hv;FwB=Q*_E*Kh zgQI8VeMbN4R@mHS+6WASNv8;&8o^_iHkgB8zo|IC0BixgSC}ef{W}0V!=ob-JxK^} zR5qKP3~TSw-T?3iM@JtNfXM`XsG+~rAZ;zIfNvFp8^A^2Y8;Ts>HIZwZYtrs5%|Oa zw&z&`l$ioxjcV|CegMpGg2UJJ$b5_U*#fv~Apu|rT-zXcbOKKUk*r>A5r|B|+Unof zEK*Yn`tJwk@0V!c#pcI|qjZ(_4()6MU|EmA(&aK5NO&k4lKT& zEiOxAkZ!jE7Jict%VmM@Q#Q9ai3EngaF&p%^n(Ihz+6Y_0QiO4NMPGt{!6cq#hiFFu zH#K`G(gUY_<|#vCDeMYFx61mMaIb`XS%C+^^~&%!3Bm&K?OgzjRniTt)G)(;;qRV2 z(E7enivWhZJ4N3iga=9`fa(8b-3Ee@ygI}t#`mQ{wxX5`zPqCh5A>#hHvrEH*gQ>% z1vcL@26!Q`CY#6`k2D02lpqZjt3|97A-V@1Y{_^MWt$9>?qLR=YqcYWblZjWrz4Y$d0- z2Mi}IB_a3Y#~#xUg4j=L*{GDIiKfz((D&}ErJ;nCHyXFW|rJB!vme-{6eoQBbh9Wya&FB;D^`~ZfE(6 zW4d<3Uwl{sFh1zUFAcyIcO!r~{u$nBE(U)I{8|w#E!$f#kLI3W-RmhB7J6xb*cqw^ z*fp@W00Vnr?r@C%wx-|M*kb^5HW+I|PNLPvlYPty$ZiOwW>Y0730@gXt8l1h6F$XX zNazGr=IKm+xT+$Jwe~=nseNPyHm-b`_Tb!vza)xgsz_UZ%YVj~EuLurEWUS=fA(NK z&YH%*@qdo(eJ=bC@S=d}0=~Z20$A=f6IeaKuE9`Z)dKigqxPsM%tTfG<7Zu;@Kl7h z0pDsObK@5PA6HlnW&wNZW26q<&$`1LNWM>PZ7h+oU!;MZDsQNXNt z)&!1mb`zLX9C(7hd#rJG@RuKiBIzKfSm_j2aY0+uHd1jRV+>}pn)Q*@Sq;(IDJ47; zSmS^{PycUOr@abBH+L`mPCP>>}Fgf zu&qbGgukb}cf?wPpE2<1P7rHgWi4gl`1#i~Z(=OOUwfdjJ(5udz^fU+@Hd^ntb2*X zZ2ne*bA&;|U+V7;0#k|MP~lg}KIzp`!2fLxOyPwP_#;w&&6P;7Ch!Zay0P~P!2A%9 z=Q)KV27uocfSL2O0Px=KQFSQ~`YP%f;$nBv!hpDT*M_SS-qFhv{4!%Q@xotjA)9yR z>`v6&^bUZ(6miuZ%rsVK2^_>TB{@hQ#D~s@*qfn^)Y-$*yL>Gi?oXX#`#Pu_nPsmFsw$f$0Iq@ z(?d*5!=5x@3H*Ax2w;E?R*|<&yS9nb99FBlxh@ktgubAxDCV%!nDqz04j2vvU(03^ z)~4f;WrUuoY=MRWF97y_8Tz}L*W0fRHeJe4IhwK1Hvs08YCXOKjL7?3D;B^2xC3S;5A>_0&Jj~a z1IJ8Y?~V`Ji%&d$PjbHnn zneO}v?9$9y1K74`f<+C9x~#<5v`H6D5^L~xj4Chrd-A;B4K+7Lu~WaJBzhGDjR^Lb z;1-N*vg~^{e}6zl7QB8+0XKkIXr^7}FEgO$IIJRY0hpMl)4Wz0|;9M^XU^0x!DK((EKHb6?j#^tN{#pp%e&v z0)LsFK-d`kbwLLaI82A1i!$htiSNKjyK=RDi)g_ zYVI-vSTz;P$jdx_EId%wYd!GHUrwchV4hxbg~Wtbrs`C7*RFSGEvOEcIkq6!z?A?_ zY!~s`L}U%xQn0vP(4TM~`!r&S3K*rGFw%wM!sfB$)^{iR9}jO_yKu#1rM=YFx1ZOjA^`lc{m;pi#YF^Q_MbtpbaDXv6hrFfi$J};9x7qZ z4hgISL_3!WyRL|TyJk4xrlBEBL2#2dHfJen(Yu7bM*dENL&x6zJKwxMdiLy8kpo9X zR$k=>Q9EK~BJgV)hnP&71F*R9cnyEKm&0H7dVhLg z(YxYyo%w%Hl@k;BJrY)jzol?Xi9@5+Ms8~0iqWgO^%!^lYhu9b-jc{rwLu#I>o-XN z%sDNFwfl?{830yi^z2&h*e)jTTk1sE+L28|pu^wb_r6@v*pR?h{lEQG)gEe&jR>y> zuri_Wb3piozl?zXe*XsI_ws0izZ-z-Q+@4x7x0{fat9O-@1K%C*Ho(?h`q-pcHyj4 z?{h8K4`$iyqO5JT%BCu%gItV-mpuxJCVkuPWc#7RUQOB|1sq^|Y2IS2@y(O+ga-3j z0!spWZZmf=&M&hBe)>e7pc;oqU;#L;4PFp>bFFTrU&U9Z8J*FvSnY+^oIYMnUQXv+ zvnuxe@ov*F$6;05vG{czhCe!WWJ)LqztXpq`nzSL%a>ExU46dwy+qR@mB~|JFb+93 z*Fi>_8@*$RN#}SM4N-)#F8^wDdq|QBYi)5 zh57}Jm{oB9VLhzsQ~+)X41hHYfXf2l;esvzztS81?)Ze%BYpVlm-}Ka2xjU|V2uQ} zQ-ZZA;z^4TY_XiJdGL48K;*^NjR`Fr`%<738f7!nwPW=`dzV*|U3^yKFdoZ~gLDBa zxAUF+ikzx)ji{>*hJG`EX$Cg*O=A**;jguC(~W?tYVHc|tj$VHIablXgx7hCNA@otMJ%7Jp`-(%vdOX z3p8|R`wUrc#Y|2OanHq$2U-F87|+ZaoaJf6TmT{f_ULFTa|~$=xXM5Fn^!?;SYCil<)aE zp;z2SC>CA8h1tD5$6$rPgh20I+S$PcEd^X%!N(c`T+?aMm-XYCpl`MIIM)u)`y8>$ zbW#@l?h3ycODW(8VA(vR(^4P|*3y>#-*gT89oa|ryl0l>D-Ua68wNl3{+ zq>=WUPZPHX4@vz^C^P^TPorO@e8KQyiL4rTAnWKOmEPzG_d(?(-+;eZ2YO*UPyf}! zeg8R;r#vpJ5SYgoeLEktzDz*Eq_3!>ib|3mOoQl#L=Vtkp`b-XC8kWa!Y|n%}P-(z%6Mc<8$!fXg5v9%$iL zoxBRg3gGAfF1WIzhA1;Frur*+x=MyM3iClIC!s3b;XAiZZ>!be3*>Bd*_J6{*<*;A zIm=fEVVxVXjM8=Hk4+hmyR&68KRvdIXC();nasT9vAAm`ymocVI-uGlOukml@L}fp7im$scS=Fvqwt>STjP3)Ql91Oi{2;f(h$mOewVmbuB=1Tmt^ zx4*voYmN2YjJgZ(x8!d%CP>U5qq!W=PI;}8z*KYsz>&Z>qS=T9Hh}dsD+>Cgeglj* zeHro9`=x;o3c$RbEr4CTQ&Cv^0C>V-Lo4o#kTnF(UKY*YFAlyqm=i|^z<;ma;IF={ znf%Y(Hado>eIFgm_@aO33vUa8xqQYR=TXk2yrOyGeAhmf!x`Pa;@8NfruKUzNd zTgSy*4L<_CEZ-{u3|(6Qi@)vx-ctv#BCu*>=a?>FCPiA63A=(WCh@DbYXV=WV44DL z4CuxbgthpfQ=4Iuz*CilH8thDB`{+#=c1&Uz_kdDWsP5&E&SyOmw>z@q*MUL{>5l> z4UfA|X9)zxCm}9^%TKBBYybn$AQ<7Qp}n>SF!@;cnJN611;FZ4=IRtf=N{ zPNWeZv<4NCF2D+y2+z^+JH&4%aAs;-2bW|_NWxX$Y*E0`K6RVu%X&lkpuS-5>>r_j zk5IoI5iGFI6yCB@93O8^=sFw0n=oiCIdz!oF_^y>_XdF9is17uXpmr{0t{< z1>iDPFheo~PB(5m;z`KiMMQS?E(8|w<>8)4JS20+76z{C@FF&w!4rUIjSO)czjtOG zi~=@&0iZ_nz+F%UW98R{EV!m??TNImj+wvgK$g~0Wg9qDOQ}StY#Cbk{k-7pfkuHU z27xVctFcX~CdNr^IF^~eI!^|H!3g>_P%DycRa(F=Ph655=1_p3!;gTPSXApckfnfe z6&8Tmkk(xZ%>DKB6b!ZkxY0Qm;?Yzic_8CgNkV^5YoklJS|Pai#e(^P zW^3S&8I<)g03M!zYNLY^1$_VZ&KLqr?#UwWmFw3jh;$iw%V)X_`ij6cUBLsr3SbrR zWfFe1C+rn{g5tSnX~e!1Q5kjyOg)0~ytxSIJEBG+xZ*A{`Bcq-r4Fql}* zSuMd<%$Q?wM7oo1f4}_C&z>E<{H7QYoQC&0tsvY)3tNs;sy8HkmRl2+|`+l3I@Uh!@vF(@q5>A;%_8#Up9p2 zcf9^uOL_UxQNSC3Wl_M;x9f|t7yv$grOyV+cV9VNKO_c=w{wBl5XOcN`tE)OJGBL) zD|h`;Mo_LNvhSeTY0I5Q43^C+VxtKjoQA;KUV{8$%UjNKV;5tYtBb%QY1{0H-d}`q zAZ_XFvB4gZS5t4rLSVy>?$1UroNfPW-7I|BSrZDFuM!7TRx_2K)IkgaV?IL!eq0cK zc%S%XvsVqk@;qD}qO4Zg)%urZoYWqB1iBNX|tcSmOq(uOO;Gua(H4C81n(RRx z(@C~~-S>W=WLupt6aYI@84%{j6sfS#zTAq#m# z87%hJgy$LbG67#1{6+ts(2Bz`^EVZNYjtFTJ_5Z%=3&6v9G(_<5?;O53FVF|voxrGX0~kT>#9bordn9`|fa?PLuTa|D_SMI{|MgJ7 z{tP%N^oWDLy)XW*P!(&#Pn$*SYPmOOv>}JS%J@XHEYraR8?$P!ozxlHW2(&2p(6EDQDJ z-xd{Tg$G)FM$ng5D+pi)AYmYSrv&hG#XGA5xVCCyDf;dTzZXDn!6XRHZzY4AX90`}v=6=;BG;Y3z?J|lba7Hhf9fH}b)B72w5SXO zE0c!5AgXO?tL`Yilkb>)F}G9iFIr;3FRg9cj^|Nxx7aM4dMQh4Bne==&xPNjQ2iXs zTVUMsOH6LrcuhFcQCh%?qcSbW6;AtI#yF%OT+se)3YcX8-2ClC&=$nTG^Y}9d~Fc8 zI(aT#*kNSfMMWGkVy}9F)t9ooV{N7{<~MsH&-&mNgCzh%UY?-)fO%?4Md@KtbOJYk zkE(n5!$PiLUqTojGy2_qz+E7zwt1)To4}Ee+*o)eFCAEG>od;EU~6FeMuK1()Q!PV z(>x500)ET;vY%XCEY$5wBn&#wD|Zfq;pV1)BY|P=hubETJE;V;GXiDq4O5I=~ zI6i07!H??R0Qe#HfQBQQ-u_!h zmkPP?*Qub(ioXKzJF-NYz+V77^e;95JQVQzF!(s*kIHt{3d6JheJVT@ha#NU(D zMV zV)3>q%dOK@$@84Ib7ok)km>~9e|3cXeLc_$fd^ez765oGAd0Zd6M017L28u`3E#dUsX84#+|*8^ADcWRxSw@diIw_iplI zRQ)Zd{4HHPf~oBl&Ddq(rRl5rOPx`M0Io|nfSrkhS#S8+qJXOzz`Li`)T8jiN4hkb zIUEIT0P~B~QCJCSmU_&Hp}cf<9*4I%mY-`gJblxiT;r>ns*Ua3$!n_uwq^eqR@_c( zcB~O%emu6Kq4QI7Ex(iu8y~U!uulF^+qIEO!nLg=9X30cG91{;1VK055(N!^lb7nA zHKY(s1FiQYe(3-%{4%kFO-yGG0(+yH%b$sl5RLg_b+DDO9nG8)hjcxsC{m{2PAfh= z=G_@>74tCSky6B^oz$1y^i#?WJzh*3;&PXCTr6XTyC8!B+}6b!4g0nQzy@eCdKN&- z283Cy99LyS1xrW8;4jwMpK)QMnn`qB0@(II^{<}XIlkmVNLmzhuj~O}d!XC@ToZ*w zL9X$;*ZdvDX+}26<5s}O<}Y|XW`@(6r9!YwUhlZrV}O&IG8N`zaX_aNc!`8$96>UL||>Om#~!}xXjrohXNLWKWBvANLSt|!qrPVD2ak4 zSnhLt%*4s*Amo&}UzqW~bOV3-h&u|vn9DVM=M4jxJv@v7>|sVJV3c3w9cB`*n{|Z0 z7(+;HP0BTJT`jxbhGCzQj^KQ)D-vhyC;@x~o(_+yG-Y>5uwVn5WAeV432eC4OIWYE zLz&u=NLjz@)Cn8_pR*ajfK3WG=D~V$VV8;1pziYJy~{YEZ#ZUg)K45gDEVy}Ke{@r zXOqtyzkAfLW}Me4NB}UG2Ed(sV^P5VxlnfHy;0AbT+k@uUX3}1>4*eSrCSynMqse-mOAM5k3F%DvZNZ<+{3!s& zy6~V&4CmSt%d@64C{Gyrzo0yY8U=OR69zz4;_Bbd2cM&9Nh+i3Q=1T!EG0@5{AOXBn?Gm7U=~u*v@&PIk`Fox7y##;AOt&+B=%js#01OHN#N>O4d87| z?^ylplgDgR*P+Z|Tm!%!mGoWowGjMB02X$+VYi*Vd4B|(D0W#G9`g*&T)m8Du}Qqb zc8!c(@tYHv#hmm=!e!>~@IaGR^2HJDXbOv0f$0oS+Yr?`q6}ahtRTy?EiH!uOgxkW znUskmuwD48nS9J4aPZpz26?PGYLSoA-nFVfq^QM<)fc?O*kk#3q=K8bLatVX-db>z zFpj;{ zLi0H;^m6>e+B+e;=?jd^UBzQz3x3O5x87GSNcKtTEehsAuz-gf2Dv$ z>sU^6gmXpNZ@-TGLfzw2G)D%cSJB|SM>Oq#m}jS3}}an)orr9jELpqyKl5jRwDEDshPfrVn@|vTD1t7UsoLu{H6@3wyK4%B+F^ZCI== zce=l^9Dinrk$u6ZoKA&>1Tf3A~0bH-54C z%)AFU!4S4_zVVBRoyk!Z^~)tzTLJ9fa*@EXP3D45XVBPh0tfoy>D)iFPybARaDXoB zK4vwndxXCb81{z10WfURFkqX)f<2h15nM|t-@#udB%}DMS}Gbt#M~4%h|@eWsJR$c z_OeSA3u@4kwJ@4}60iZGiPxL)SZn634!Jgg6V=5O63Yu6oKA0S!x7!b=UB3FdgSjz6;)<5@5i6JmDK_n+!=wzUZ#vhGTynG0Zhf?niGjd z+}zXs%&S9@J)>Zw*GY?;1PjU@U004G&C;q3c&I^ZwLm80m@Eb>67|gWFWYbwT1!6@3bC(b}rIDk)L zP~mx{pRq@BK?7ivFW}YWBpUJO#q}03!aNow6B5tgdZVpoQ2(@X`I)~FzyP@P@5zby zTZ<7JpLEV9uoYwo{6dw0hs=wDtdm5!vE&pJxQFsU*C03+1Jugp+||V3%E5b2@9fueT`ZE`p@h0bmrc zyQE!?@cPXY9NTc0#&lPyR9T?|I0{%%Shx2N{DaAaTlrfXOf>DE@ta+9t`#;@gHZPn zfH&>>hVg7B=-L?~nA801&hvK}9+j+Z7)vR94uRh(B^Kn>BIA;J=4uRVTKtB;0+B); zWq6=xUuwe_Zaz#JX#1dZT>10{gJG}n3p8tz4ap0L;jcEhVa9I|96&{1%HX%kebwnux+_C($<@Xf zWA;B#_!TDib=eL>dNZVA?L}K*Xmt|sGG}7eHsSRQqR&d2oVH5kW#1bAstfJkt?1_$ zrxjse+&zN6a@n?qMMXOIq-a&>HE6LOx${c1@R?I}e@Rg|Mj#UaenT(twsWuznhC&| zR%LaR(_AE}0~aq|x^eZr>&0ObQkGubNtzjc2-tX1HN#TD*heDnOBN@|mjy7|dIRu} z8-S&O17JDI6&bd3${^&C2&8TbXy6O=Jb=Y5cz&h z9&{`P41YPn|99V?A-_ZXR;TaB^bij60$*BLtTqr3^Lt^L66^|i4Xe!hjkJ`xGcchIDP&t4%KIHqAp8alaEQ%X@nMhG~A zOufQX5t%v|q*))q*zwx&AydX^I&%e3cnYT<7K}fw*A1TuFJP@D;N2Ib5~l#n@b3%PoG=( zCTh55B2^NGqYF2=xFwGom;t`rIM8=ZA}R1YI9Ab8KN?*tf7$KcUlxgj){L~1iwkGiMPt$HRju&kx@tz@8<7I0hlo8WWr){ESOx-SKcvz z%W6$Q&|_eAW4ESGq?!y^^bFUn0bB|gJ1{3_Yqpw#z_z!9LP=V`kGM$aOUpYabZ=Ou zlzuyEjN$ohHQy@&eR-cHpvwk3vF2|IC`#H&|C+#%H^Y1fep%?OHmzFcVv=fuz~Pu> zEh3f0M%yQZ=Zv8$@j*))Dr?17*2wIN2m-3QE|m72*J*^d%S`stEbe79ph6<@{S&Eu23tJemAFOTv^ z*NL-&#S*{_{vDrW$`D?}0^s5+8h)}AnZwg15ZYnT#9?XluMymC%SdJLyEvf%FcR1kvq=KW6U18v{4%TyA<3}h ziWP#Qg3F|VnNI>3<7F0$V{G}p7;^wzMg7d%RR9~nUE;5^LDQI`fQ>#$WmrsJ*Xm!s zh63K(<)`JYBMdR+(=>a%!4uQ0nhEW^UdFUh-25E?z6^j--3?$?2Y^w)B*Y>U$9wNo zHNtCq2w+9-3&C|0idB7$Xc4w3V3C6O+p{kNj<2(O}I^($0m+wqo69= zaE9LZ5Ti$dO&_+}|tq>JJab zub=yUj)ox(1&rHRAVvbCd^KRSi~_UerBt-lTg<`M4@ws)W44oqRdV2?o#WFTsvl9d zrI-qZD`$MoHxG0*3*f@&B7o(9t`&i|6tG(G3u~o$cST^fWFfHDRG`oR)(#W+&7+Yp zCo-4`9N;DiG*D%o4O$OTivAUXJ25l}c9+{!^C5$gV&GU&Sg9v01&r}2Q34vrCgR@U z_v{~JDn(t$t@i=$XQI=kZU=(L5&}P@XO{!RjY0VQz5ba->zIL|eg$`Y*q>SdmP31| zb+0IxfMc16nXfLZ6~h-3Ujx~OvDb25@U64n9>NtXwcYq-o=EEf;G-dbhvQX!`LMJ_ ztOAiFCNX=bbK^wFB^W1bRvoBCr{Z8f0Q`f!x90)ueW=U{z?j^+4Pc{B3b?bk5(ixv z-YW%6v>~0qK;Oc>COuy^wBDU87W=PLjUiFd%7P^UT+h6Nu$VRlTt5Ly^)`S(FvEba z?NkI7pq1#Q@g`=Y_Nw<625a%n1mGGf^mk?l3x_dpguktV9aN>pA%W26$B@^4hlZ79 z`>f14uCinT!fkmkz9mdLm5Sqn#-{p(A}t1fC4kvGM_F+wIVUkxZp!~QbDX_G-1Bf+ zsEe@}2?-ylxKT-9`1=`9;IJU<%CV$Leyl9e9)r|Q=!PZh*0M2<4k~lN{B0Zyz%B*O z$#p>wSh}SXa`qZPy*Zj&ptj#S*PdCt__UWxLj49SyIA=2-W%l8+N;ev3;%0576eZ* zRbG#cx=R=Zl&yJd*Jrgu!$o;*sAhyt#s{tNDZ8PSui+DA!XmF_d$J{^SL;$0q|hLS9uq*y{HV%>ZdDFMr zL|<#*VY}Wto8&JD#yHa%`-0$(d7TJ6DPWWf&I73Fg%rX_rZ~_&LF&YV^zf+bCiihyw>>^xT z0TY1h+&ZI<1;8UgbOlK7Y{4$3oENc1=CHswJDR6az$>>YN~0G0_IFB_tTO*`o{U$U=E~>Vim@_9_`xU>jr8 zJ54ueCJ1XPZD|09z}$~d&h@>E)xUi8I)jiHfMftixC7dBYsWl5xPfarcg(bUu=S}b z0ONvg==+&gQw$aWwgg51zjuB2@YP3!TD@7Ne*tkT;F>!Inr>p1W4MdoxNmD8zbwg| zLu4!9XANN!I55py!q=`9t)Z0l3vvBpg#22GTW<;b8z+P;OJ*edKR7tPm{jg=Y=T ziNB(+DGY+cMX&e$ZwbM}ZsquSOO&%iqp?+L+Xvvwidb6)^T0BU0$g#cF=v3OEnM znvJjHGS$yH1K@+*ODCthRWkhgjk3!ui>o_DVS+lgbbHm*1FQrbvLdzhF8~&Qh2H?! ztS$WFa`vv6q;CLRt;+!qPLHujG+FAst_Zf7xrxbI5NwZhN(ZlT(03OJoK9u~*aTh? z>|#oWcK{55|5%eCJU%$8WKE?Haq~Waef&9zu0HRCS%bj${o<;l7(IO7p;}ZNi<{-% z*?gz6-+LSrnWK5hcfjXQShyR@b{x;FsUcjwX6>sc_G01fbV(yN1n%n%i$o?3*4I=b zJR11@wiA6%qkU77pez7pCPq*)Y z0K20Y<2+Wcj6w|8uU8*1oxlR{Dg7!-H?VVcX~~YdVRc+vKE&n_$r8ZSLTUhuzY)MS zQ+PJfSmRg1du2C|QNSb3v#gdfcK~-EFiR=mTi@;{XSX0M_J*Kr1i&2U1Qc)sIHP+r z9yt9RO-!$Zl!+QVALS-@W{PHd)R9;-Mb%{nayW~<`&4#1JbQ53Off_+w4q-bC5jS zv>6`X+W?H@RX01m>>~2~@(>lr&e0kC`EWyjhT(n|be(syn)$ot^dLVW5?TXSjA~pX zx4zold3k*4Mtyp@k+TQKGIIi=1z)vyR0h}rxX$3jvf7~-EZ_@)ZS8yBshj8<_y)gm zJ`b>_LcdS(L2RgFpWS(@um z3co}AmKnY*I$fiwWC+jN@nwep3cFe{*g|gCV;BJb;nJ1W2W`_H>q;<;tW2Zy?;M2% zmQ|S$k1x>^3^J%rVD-fSV7Zw!)02tU*+`y)vl82#It=hvff;)ffc@;H!reWswIVQs zkgkmw=#l8kgWG#?S49{U{fx2VaYz8zt+i_K*}^mcZYr_|^gd&<3mOG{5C9wDogCUG z9_prAObMi#qW3zMD-h1*u$-C^Ol$H=yP%T=I%eLwN7w|$lIKeN9e&ZX04_6im4|9b z-yy7st{oB2402I{!D4XjWmp8#3K3RFt_cQ1V(OJh2SJANZkdssABE*up-)+B7v=fC4ox{_qfY+Fuz#? z*ZSFl!g%xk;V`VH9hm5>aU&->Ly`uBdC_?v6oCJ?T6akd`KwH(WH1|X(OZ~ZYEb*d zmG?vV|Dodcl7 z-~GFX6|MWt@RDK~&uy5RSKw&12H50wX3oMrz_PB#a5C~q?csx732g8h#Evx{0mVOx zzh&^3T{D1D&766aD6AWdL%MXa-s#7@y~kq;xtQY(w3=TD9q8|>5-osPeNomwSG#uT zP`p3tsX7K)Pwq$ft6vH4DF*tL${;GeDl;K?j7yRLmIvD7g9(HF`#c6MmTrG+eSID5 zHw$3)Wl%9qX8zVo)r_*eA~15P*gM+8 z2RJgFEyYPUutfnU?UK{=w}85L>)FoE>BSp6H?Cc~UH}$X(#ac0E7|G(UM5;cI_K0{+7>G3 zdXwc!)=)ViS_%jB-TlLZuYs?+4{E}izwS5C9Z@3IYT+x?8T90Xnf%qsoEV<6IX#sgov;IvyKBf5MzJ=7@7ZB5UC{HWA^ z?MeuiL@+;?BZ0dnqSA0AWtRYa?dC~6693m0zR5XFd0W8^HGEmLb4fDfh;MN|mk?N4k;d#H8kla!2LN~&rDu^_ z_(RK>J%Q4lg+mH>NMNIBv!P)Jc%K${nQFTx_Ib#Wp|u2$Z6a7it`=Md+=g8`V_nQ& ze4kT)ncyo^MNTi*u~28MA4z7(9hDua9ku>bW(*HxqJ1zlu=@rcKJiWwn44v=d>3M~ zWblZf=8pXR^&*d$9rrLtAw>dXMCptOTEzn0KEAngdgJQOPWhjkzY4+HOCg4LEr6k6 z_}e|eIHY&TgC!9>E8t5ZFgNBVux9|60U04L^J9IZ@KDu+VJ&36#x9g{hi|P_f;TB_ zW8Hdob3Jz%{~*{9CLq*NSlo*i0>?t&@Rvn*0z+WGEzMwt)h7pPDd5MgfYHDJm>0Fn zSB{d+BQQEi#br~)4lMj_117NIW@Iv6l?|h!WSjS7vp60*LXCzYx+sxE_ zPDr1tRa^M0V;qFP-@JM~_XR}GCYz*?)woLL(we)XE{)f2c4o9eU=0ISNnn0=f?pVR z4#8eC;OGR#05G!vxNPi()Am8{fyg~%@Wqo+j#z2 zyO{k7z)D}N?{19GSt^^Bv68>(ey+6CExm)_nf3#~>u9NjUULCm)+@j_76EJmn@?E5 zS7tn!zxqo3V?4XA+5?|dOhNc{VOY~wHtO8LRym+QQF7WxgiwB7rw;zMFLcOW*FPHT zJ$z?Ml>v1@ZU^xyw(pr; zQQkJ^>BjL~f5k0>IE$8dw6jPzai< zbqq8iSr))GRa5>ANLz>Cuf%WYJI|8`nyUSfl*yTWjQLB!E~_y%BcszP+!A5V#E~tj z$;DeV0^Ns)(fF!0?x+=!(GV0ePvl1TsdMczW!Rn2kjFHgYLJ@xol@^ zmbBWtWn+Oc+eZ4+!13V8lsQcmH4$NOWp4*~; zSr35QGm8mU9^31Yy%|BvF#tTUQHSI{2EWDCvd_RTH}G4#yGkAUck~rjtAJaI?~Lqs z7-)D%@H2?L=YbVd5-9P|+-)NY)HwFwB7|oU>l#g+P$aT)0kB=ZePou~&KOz7^|88i z0Id6k_beNYvG!im0^odaBK5I>;EsJeZ=0Z3&wcN~B7-z4lvm|(@%LZVJ|_sy`LQntr9IFij^whlU;){^?gC~){W9YaO(J-~CR5Nk+Y|!bxh|X1zC+zZ z%iOuIH94fCgJ&%q1Sh{$@Vj&bf6JV&Y&H8arGVc|U`q#O^++m?e-?n-w!o>ak$+=! z^2-rzf5;#(^4JLeeYCCUYis`MSO{zcm$~3S05*2p0=#OO&U=faNmJjo@5nS`69QZO z+8WsFC38{Jd=0=t|1u_q)Qgk>hD>wJl8MAZYqR(iorOcwZ5M`r8{OS4CDPrXA|fdv zjW9qOq`O8-Do8gf`qHDDjg~Iy*l3gvDF=M}{)*>0=iK*om3qPq_=p^=;AVj9ppTkO zff#xGdc$Ov8KEYd2QW(bo?~E775F@9NGSvO(bEP#9*XgGihfpvi`Z&A6K`moD|&K5 z)IzxQURiEg_`+%GcotaDGuf!Y7QtH~(Bk;^wPxSJev(NAL>E@#VQOsaSkO_FWF#Kp zb}+C1l;-8af^#>#gx`%m37iu`56q*~t)7dIJ!cNsMP$$ONQjvy{1UH)c_|s3>kR2x*x9xPV zh2OUO*}jei)__rAr#G-C*v9n&o$KU|B7A`I54-@zn0L32a&yXu9GLHqz%z@5U&Ao^ zBxzA&ZJUWv^V>wx5m!Iin1&dvZ`#N1!04R5@59j>mTW054`2lwccyj`PaF52T(vbz ze9zJV{D&6ag&_Gne_tYA^oShKQ_Aef%xIP6+6eB`*@MMbr^&i)j91m|`~`EB&>~-V zk24oY$qr>E_qR*q^4C{u=UujJv?FvBAz{VBhptc`aIt1A2Ra?N{nZb3gFJrH(&WfT z@lMA!KS9=uAPon8H%y8X(%mWpz+AVF+dHeph^oEZ#i8L6P`k}X`Q9V|hRA0HudNTB z22I8({HEQ_Zc`A!m}kJSn~HPP@hOfb1gk|W6hVvV)nmm$ujwL;uTreeSPhk=#~kVH zRNv6H&pg!xAz69DR{^QjGzzbjD0?v-6?3PFi^I!MTM$fImKz-^nIe%HY8Is5Krvu* zx_C{kNFfpiy}w%))&%#ie~Xj~mtTz)7>!rGBLOMAyhzby{rTaDCTq~FHSxE`H{1fu zFckF`_fCiBR?No=s4m)K6JN5+m)bG`*^p;PBoEZkh*+fF@#EW5hQ$qZ*a3MRO**)^ z5w@R|jm?{w>vOuVv_c|qP#4v>WQ5m)A0-|UcUu*8`|KCmE}O!M2jsD=1wrvws5uZ% z-=CIl5*Z^G+hOzQn2KQFdZ3YC$4%1!zu_9g0!6W0!gfyh)i8uL9BW3VeoLWlv5omx zID>pc>{s5tFCKIOTKkW_W<_hf%F2A=5yFnu&+m2eqvIPWC~1|fVJA$9eN~+K`J%a= z&nM=FBX}YQaY&$4Rw(3)S-g)CR!a~OxO+cj1Ge`)4)NtNKx!JZ^dFM>ErC{mPu%Ju zu-Z^#bXSp+Tp-Kw%zgtcfm0DL^vC|+`nZ1lrGi9 z9`#acPO#fVRA<&{e2f0C%k`X=Y=)}XQz?Af{zP>uWAV2+OfCg!wm<-B)Q-gX7JJUz zO-^uB-y|I~kPM5fH%UAn*T?~@Yg>%$)Rw{zUr1fM0C;ePO%79PIV-^b`?XBP z-8~U>xil1rXuTsrvjULM^CVPa_8{~ixf;V`;w8P8>+Nx5TS)>`)S7?r5tOe<*KQUh zeVom6qNQUFadO~6cd%TZ0JC;fcb z4U0wcoZ{#PH{a;NJ!@)_43^x4^VNl4Vvl6rp1Qvr%-r%eIUdw~qNHsw2;D8#%NsSjy=mdD%yy~iJC6)M*g_rTTKO<Pm#ekkZS1Kryu>^6u`}0F+Sy_oATT8+?Xc2_-Cdv~? z*1Xw2%BnO`0amlvm#X$eJ)IIBZi^1aSCc2-PaZtlS!9pqiEP(t zSPL1xD3vSLa9A(DE}DGFb^&=aRQfIL<7u68@f`c*Q^2wke%SnH z^jn0|qO4*S_EDb#9zs3~3qqnYOpj6oM!Co&_Set8*IVT~;(M@K8hKoq_^Omz7a(-VGQpb~T;hmX+d>K3SzWZ*HN8!w9)I3jN& zi-lYMZeb4BmO}I%n!I8PP3v5%l@MkctKNIu@R3XWAflQmEY66Te$B>KEoU$c~N7<|3Fxa z1@S$N?fHJqyow#RE*#g_<>++T*W{9PVqSbTU zjsA_G3z>v|6Qi>+!Dq3vTRtivg#vDeP4!HW&1X>stL3u|F5*Id|L_s~XZPvU(eD_3 z98@Ci2?784zD0UWfbm-9VUU!S~Q$k4X@x1Cd2m|aM+-CwDG#f)vL1cDXhkJnf|NT6@S`#dLuS}FHdl!uJ49o}NI zmbMT-Wn5t*T*xG^mPvBEgNR-|e$83{HBU9~`mkdYd@`0MBA_t2dG-_ai~U{C3xefz z%Y=*%R_DgGqwKUT<@u>NA3<8*#0$D~>>dx+$;H$@@^B>&%vbxp0D^c}0De_r5+1z8 zHsJ0nuHQjhQ%{NC5HG&#E-xz`2Vu1siqtQ}TIVoW+E=!RGt43HXWXt`H02Ht%&R{y zl&zh7N!FZuLkI8o`RBK~P!jb$bof>I&J7qXG->fXx7&n8h6jX(tAL`c>N6Kj(iLO+ zd!Ji*w|{N^fTWC!3jia^h^CZhemOk&@JIXZqfC84R&D6KLlLPq}nK4IoJ9c@7r@-ZscQvlnqYj5FNXTS{L z^({SN0wYNxFo3Ml5YV{gUa_2Q1O-Cp?IbrrR{l3V1cs|UunJ}Gz5TN@Jk6pZ5EVDaCezFfv+ zOh1#{-jcLIbke~~VwU?sDN=~a#(SK-ukNU0oF89)%?x>OF}SjAU6CVkE&Q_5lUHf>3*?L-1YqrL}IUbGsN!f8B6}YQD*MBjTU3EzQ^r1mqE{ zb`6B=riV^)UeIL!2~q;F`^a$vkBTEj%RA>R*# zY>#b4vtRmlzY0NdEeK=(q>SiCBGI%YuKbJ-bIavDU?|=}XNU%w0u2g<^ zV`3m5%5mgmUS=ghsTUrCW?1{i(L@%lwcm}sjS%4t#$BKl_E|DI>OW6UuCGWhya3||l)JO_f4eQN z)Q-4_1uT13f{xN}O%;(q=P?t!6n3m2zqDHBp66eK3GbGCh!eg611SIxdf4t$v@Um2 z7wBuhRf7j;!L+y)v_px28B5HPT#Ln5W;>tTPIb|j7-Nbn%R5_B?@1ux57`sr3t_!OI2h(@bV1EK zy-Y@#V2nu^4@c&H&Qi?PVg#KWp-gCVb{5rxMB?8?J?gHM-ZHl;sO^fhe^DcBKC6LM zuD_kM&uW;RTkXvvk83AH9Gf(Bv7Iuzy_qVPFBFkynVIcl7tC}m88s#qZ|29RF_n&m zSQ#i_Lg=XR0apCLdCvNb_j-1-UGT)m%4ks>SKj~fc1OO9lSJM{=fQ7(-a46=`bYa^ zy(w#~FpOOv82`QRUR?8Dv}s*98Oi(4>Z7A$a``5``>y-d4`Y#sDA$$yw>=IMe|%*3J;=K1j<)}oYS43=C&S7 zOQo>3m&3Z31HYP&@UYoQV5AH6CgaHPP}(6K&sAL8-a^S z;`lpNL31puixhE1EDSyvs#%Nvqabbq>@4>&CX$;nFX9ddRfzKY2YhEet$bFB=N8N=fCB@BMdYkEYpI^y`B8*Uq=i)Y*uUB z;ULbJu{NB0(#)|s8f&?6i0{!l2RHhwMYKM#J$R#{1)n+eypKrm99d3}^3}Mf@^LF} z{v{rPQ*KLr*YGp-5W`T{drCm?lg5z#3^CYXo&}w<2RZlu`IXlcZ>5X(iVyW1A{EC+ z+r~U4DXjA`6zs9G%#L**1k*X$Cq%G7?M`q5H-wd+m1A_wn;+r@j1rpSCpCNmVi^d$ z#;#8P{md#@9HE|XC_P=KAP!$;dEjk+c~YPZvcJyzW>>$BXLy_M9%Z#;6hwjEfJ)f~ zzBTQRMAmNSn-1@N#Gdmr9X9eU_I69LynXSTB$zNx@%!~$mRfr-FWtUvyT8|Hz@tIK z)MR~D$B)0&0NVsa4-d%o-X2>7y=sj&F2CFCQNXT!(T-3|3}YPFUwrX%KZ!IM;!7x|?}C zju`KQcK___(82Vd(uKo&u9(pY^6HJL<5mnG{xV8o$xclgVP47?S&eKhnvc{qhm))r zZRWn~K)7J)SMRY}lImN2IOAfu03F8tN?52gjHH2Pq>|>}f+*R?GwrkauSGxTD^KrV zHZUQ2Y6|O_H^DH1kZot~^_H;n7mb2npzY12xuvIFL(m5J|ZAtD}Z-U$m2r7MqPY%==g;e)ju$C>^;Le;(38z&aoTAhFoD zaL|4J*m2;4a9#9dW~~I&)3RGn#Ox2=r@Sbo?@9YBz@-zM_tybV<-e}u?zgh)k z%ii)HSL{Z{!*u={MG?tOC!vy}>6(KO>235840I_?o;5du*FNJvmwqsPnlrDy77Z-G zEOg@?!ni}o_>J@xh1^eYkB6G83^>gkBy4Rx)wD7JR^qO&_7$7|THCXx&W7F@QLBL- z>fiqj_e@RTJ(&jvY}St#Y(DHg-0#F+Cu+Y%*y+*?$c?}_XaBj`*v@h$TotjrZF^%Y zwASji-Y?qX<2)2up*R`hMH9)L|0Uch>j!xyQw4?vo|E$gyi5!^HzFs6ZbCElk1&vM zj|9=a$uyu-)BZ9{XPV7Z2V1SC07k?3LmyKRGd3k4fYJf!iz; z{GEy(uX7TKr;4pa=w6{#kZkOWAu^CYOww8eUE40R<3cqqwWo;=|n4jfVp)Tyq zzB=aC0j7Q5gnfT|e3~uuPGg1(V#+kaF0*F4v-6)<`QpK2%ieOj!Z|Pe4%@0hYUDwSG$q&It~%+7`gQ$ruq!d?%uAvA>>@FAzmycuWrA|B5A^)` zH`dMkQ7W)IP*0URa3?=9AfgCOb;8LnpZwD>?>Ge#$GTqD>^YTicNW%XeC2!hp&pv7>G%*9dFuEq1p%49a4se+-FyZ;&Ge40Ib=qp5c=ocM+0PyG zwh8v9iVgg?GmS_Ad9}rbQY`S8@qcJ2SY(KcCR=(w?-P2WtBN-yMPSj3&OQ{?T@!FA{y*BK96p?I|b41rAwC_&Ol#~NU8IQ*i zW7o@QHL2U1(2thydwp<{Qx6naCb&yuxXd-j7C&alpS&)nQMAkdJ z-I>`s(Lsr3|Hb>a4&FVtR8=y@ryX#{YO(!J5M8*L;y@Q4k@vz;i;6K>jUVNu&+4(` z+GA^T*04=8YK-@Ny4!|;sR<%?+{oi$5_U45X#*yc;%n#nq8qJ;zoP2k62S+qz`%1z z!DNF_GVo%4pZ~{dyCsGdOGK^B~Z28gW?u7 z4J>hwf)JpTqpVJ^plp;UbYQG~Ntir0_sIPlY@;!}e|Us-Cs_%4)jXm}z0i5S|4bvA z0ebsEfj4w=E1w`R!9}7G%(CA}6p{6>K{C`Sz9(0}b*%JDxHvbL>jJVI ztL0?h*w*h^o+d>i!9W7(9QcHqhid(zZK@@EyX9Nqfk90yC1!OaL^EH;1N)po#p81?Vg^?Th|LWg>RXf_;*l z*G}^b7rGfR&}GzB0fIPIhPU8&BwdLE?~AQn=%2|wAd?_eGBMF^E>bfV<*L;sU7muN-lNKs9jjtN79(k0k&(=>vUqZBoXZy^vbaTH*9(NFwXl2$P52^xs3adBVtk zh|6^C5%W3!nsYPiUgIYb2!Q*gCou9f7vd8Sv&6(qkOE}k=L1HkwYL#0I^7%`0gqr5 zE7xyt{uzP&X&%JFd^|a@WEzOP7ps6y;Ot}}{f&&-1&Yy(Lv?4WOOAcs*_ zzGL#ZLfm*+r>Yo?xFlaAi}!}z&h%#yVymC7EO@KdCVo%VaPSbEf^mKX7>G5Mbg=_4 zzk`cP%+f{t-?**hiHKa;Q}e!-YNw2Cd}fLjH6p|L+8As?wq*FJg-2`YVAk_oU`3XJLHq#*Fz|2Sn}%Z$!eVm z^Q4GN2kx!%mlztB3=c~iQbbcGOMGr={vzvGHno1e*@r;(!X z6A28YMavhI2wDrB^bpuYj*nsE0YU#vV<2zaV9oy9tD3@3@N;u-49O(HGEq=rrq6&e zI}6&b{aRk?TR0X<^?m?!m`nUp&i>|Kuj;C%{|8`Td>@$@A*f9$6a3olIVNM&YR`T4 zG2?rhyEsnci}UwiQ#uZ#(Pi25;XsgC0%2V+_si-upj851*XM-P@Bu7DbL z-nYl7`WxQ*8`^uXIres?n!f?An4~3NX&<#3ZBG_9=2+nw?JQTMjQ0<(Gs7Ri74gQBQgTeRnsc6^ ziC-b8@Tv9){UzI4yQ$lKN@}EbGUXJ8_hDeDN_JjJ$Hoh5q5pc;mg|Q9z8udaDjZp{ zS1}CK1wSVhSj*aQC$9)C4XTZ>0?BZgAn_3wp!Pu z*X=`MR&-j$P_j4rBJ;G;AvM3jsq<9fozu?Nogg$~EL zH&bKRI0%E7vN0k7Yjl5;TxKg&b+bs}_Hl<;xU4W)*bn_0UFD#4cdb6(*M^p~tZi<7 zub-mi!)@BCfXX{~$eVl2CGwlc80a|cTsmiAoUSc*1W&%Vv}B~P(&yc>0WoSWfV+ea z_w`Q7y5J}NGBT&8A6nJr0Ulm$=Cj?xR&8hFYroYA46cKNER=o&+0R|@A;#8E@7{y2 zzXV#aI!e{1uUoB;5brS}tlh>o5{&RX#`2@Yt}{RjCPC0DC>_BHa_BdBX+X;F1OKx|oFksfBKa7^qJO2`z0D-; z#D&w`B&CAi?QZQgdhp-4^t@k`0Yr|y4<;!R&|u$y5}lP}>d}2BzW*fujpLrjAQB%; zuNoOvo9yiq^b*HA_n%%U!tx8{=zUpi!=nPQWHy|6U{kezpqY2iV4YKTI{kW7j4jL) zw!Z0}Na8?ZXc@m|R;@`np&r-fWleD zF%Q2#{L!8yxoCv0r&**iQ27R;K^$v}`*Dj2e8TcMdjWH@p}WkujxiY%&R`!K`K_iM z=b=S6TZ~#3I3hk1`|87=b5PEj#bS*jYWE@zNRSF3V0$r$rG%@O+&j9W`5U>yKk~yUVbxdXv z%z1I+EACtU5;i#A;;T|bXx@C=>Q10)bLD~c8lZ6wRh06U9twV_1U{*Ps-U)ls~2M- zt%8S9xZNDEqty4P#}Eu(JZp$eE69GBSn0nchNRh;@1mM0-xj^;r{aQ2dqSW3Kq&e5 z-_Gdi*qRG2F1u<4Jff@YSzQ~}di#8B3-XRLgvU_QG}%jaLl$)7kd4q!2<3Jc{0-mP zTW6Jj0|DyGe-F4>?j_vKjlYB~C%0ot{p<~r$L%ap{j~NuL#+7n_N$=Lo_?~eW?Jar z>RNkujmg@!v`{kkIPXGrY?-(&3+FImz-mH3Y@v|u*x-T|ZHOt?WPT={tjOl8jOmU5} zq{{9;rH5h9w@x3!A7GU(Kb1-!yE1gV+@&pf8$b@sWGGNNE56!EP89%LE@HcC`_#2D zdaeY+dv~06FO;_?^_!sAI4DssUW&OJ_=?d$Qd!6U>m?pND*6%Whu)~GEB6XkL|8N*K>5E`@^P5((? zo^Vy!ViK#L72NiHM>1uZ=5C_u_vN@8R(ezLT^f(Q5kX2BH8ET#tdsOFSTqMA8A*K? z!guYz@o6Jg$?}$T1=W%qpRl7 z$$uA_+3cdKJ|3%|H0|c}vS0rzm`s=4^udMwe3Fkl(Kh50$#CFyNY(Y1oIj#A25v1j zH@RCvdW2$do2Vb68gzM{*O+9A7ffRSsV5d4jjrRmn&mK?cFqlaT0KtO(U0pfmWvRK z5iODR#BdF>Y!?zXT$qHqyx$UL`@=z_%eu;VG~Wd^%Xo7lOBxZQ$noB8-X_aHabU8p1M?#!*Mh-%3{058AFGFNm9rVI@P}+``|uRCX~LGm1pCnf!)X| z#~Cq%T@{j!v)hJckb_G(!aC`G;Q?IRLX`CX$zRp$%Vl>8Q7ydIAR)(u)5Ta%+8Zf&B{(TCT~QOEicFHc~M=T^(V*ObD;(pz2PhnZ|8P2@v96Z3}10$yRU9tCDD| zV_V;;89(54t6(g6V^%@XkFSL+;Xbts0o!LW;FIx@@cVtXn%6>yZ+-A-Uy9Pz=`LY~ ze&w0Prw-?@Qs`&eh>XRsEw*d+_(A!EL``moHkSaB7QvUbCGlB{3hKmh^7{+a?a-*f z**@IO`jP0y=70Ypcu6XssJq&%1=Bg{0!>tMXkQ8@*%J8)Q=?W%=-+d5Fy5Z zz9;5vy-N!N7$WTTU&Z|SO%56Xnp(*f>kpRmg}-P3kL7$d&XNg|1)uZx2PDvKzd5sX z7_SjkL6oO;w;zN5!C#FnCr3@hIsN1m{DwJXoUXmkG11e=6XK=QWMlk4Fu~oSwNOtH>Uo8ODSKLQ?dzOQ? zW#!S`d6gz%Yd3DcUmrlLr`;FYUVV{E2=fc!`gS(ngiij#2XP zkw9=PZU z(?^=riMqn*my{oT>HTr`QsrlW)BJ43jUTuH{;#DeBP8GFm#ma_ZcAXaN^Tz#XXG5QdKinKj4-$5J5ns>`iNrk3 zD#N4adVGGkyZ* zA`?L2?O(tBpF6p83AeEvu#n;Bf;=GmM$rQ(E?~AkP!&iUnO7>+3^v)stebx%}ITIh1Y`u_9=FP zrTDu-5H+pg24_5swy$GNalqM8Qd!V8D6Sd^!-3WY8H8`?zw+AuMF}jYK040@TqVRx zjoi&GCQFk-v@vLvJfBw&TH=r;)@xP9Gf`wUJaRUtFn_%L1G6teVvAB_7l?;%ZzN-2 zV)qoGFMEEDRc3c$N!;B(1>+$O+!OI%)1R%_7EAiov^v=8Rr{%^0re*>NI2V1le)K8 zKUEE`TFru|1{D;SQW3ouWRj6%*2D>CbR*yVPStFisTp5;jgY>2-KtR_Y!HaoAVO6S zS5RJD<##g=3E7>Vs`$Lx{_t<22!6lQ(#1S#WkS_`AqY)u@kWe0px&^)DdLj zBN=HI`yT&*CAQ|rbKwo+xRq^9@o$~Hvjl?B&nb14WU$p|laz!&0A|h|N-_CNmdo|x zh{31X9ees+1hl}3rHSU8UeHEqHK(t`UJ&L;;G$O6aK+QT`!s=)aGNIK92bQ zUipvV&o2bBg3@xhs&^cBJ>JK_ymbWusgXJrW&QHnKjIy0V3`#cXuKKuwI4={5uU&B zsXWE!bxum_FqgSI>8Q})%%2Uct+}_SE$dGWk*QZ?L;`s z{lRjLCj3e9rbeCab2vUk;uuxAG6jascsvH=u4muMjO<_)IEmrlQ@|Tg(%7^=avnvL zz-|)b;Zp;+uu|Q@XZ#B|h7An-Z>(1C`)DEVZSZ} zsoD`*dlhl9$K`rAz7nm4kM6%;tx4?qtC4PpBB}UNEk!(r(;*zpEwsI)bz!)Ai~ZB< zF~GE`)Gp6642V>3eRqqqF~ys35efYJ%zKa(zQwt@`6d=TfOpvZ=uu(L%(H*L*=WS> zt`a(j3uWnW$3;+@imp~gW)A|WKVx9 zfxlt!d`p;pKjW26(B&X)CaMD0LxJP>ErS3cOJv1KLImME`jBHnbp39p=7EppHp8RB*_61bqE-KW&*F4%`S$H&^m_tkFjKdHg~wUbY5V;bJ{PnNc1Z@o$nX!}7@XkQ=$1G`(i$ixglOlo~hI2v! zs8>BJjiC)EYCDALh{ild;hv;?6cK-yBc0!moB}boj*Nb?Pd%8_Lo`NK5eAqzZ(W;b zV5K4iUO17DO88m{hu>hEea@`%j!_aQ;n4hBsv_gx~{OWy%<#y;a0`;|H zBrJct+LAk1NvqyzQPoZWGWe`s^nhA9j{uP4~UL z9xXioqa!xv%uWT5wL_tr8Yb+fm@cgfd|d0b{|0y@>c28pQ^fdQOtU(M{Ia)xc(Q-{ z9PIJaWow{;?|z){T8)cu(4vV=dz8;u2n+QL^;Xe%VL6nC0e^I+sShgq0?^`KH~!Hq5UpWLBoM1FW}0^=1Ow`fk%@z4`t|00)IRZ+-jH@FQE*=0fBl zpD<%4)#dl1o{5)=5c+Q(Z0u@$zUesf=0IESDplBV6-UPZK?hKRfm!MG1=+WwXzg-F z(_lLBa&_|Tg@$P{pV9^}4G!to%2$}ZU7*ClCh zr(dc*U(n+t4;a-)1 zckj9DMpgSD5f}M;Q<$R+nzZI(CnjKB#dOEwsQo`AO2`D zOdHpWtsAQ?&Y&gD;(*K6dMwQU)%;5_i8UX@XwJf9=vR$!`6dxCk3G<#ZelpZDe?S; z2&TZn@TEbngaYx^`l$8-f-)6pz{ZWMCjrDs2~=92XdVnBufI}VR!(?|XR~r$Ck8XM zf9$qOZ8w0v0GSt!pH^rI26Fo4WOFYqy5xL}b&{-nd+y>kNfNSIR=sR&wbE*yFC*80 zO8g`l(5RAlBCX$SWm+X`;1%rm(G2X(55|I6%3@vrVs^#Gltp7ZAI7QA-U0Oz(Cr>0 z=1lsxaHajw4sQY+g=@{n#cT@UyCY@fB`ODs0XZy(xE>rZL43K=PXj83r<^bE=it;c zy1p3|xaA${;%_>|RpvEC(#D7ZCz3qRnHWZ_GC(OWVPoC947o3$UWB|6|E2ne@ubj>`sjt3lmit zAy8R-=(OuWWT= z!CxV4ftRO*7ALmIJ~7)xeXa1l!p>{N{JugtJhFb}e2K9qNLnS0paX0-j*rW&znQ>= z@eK7@^_OJh*9qZu4SS3}$FMfs=$ZFh${d4>Z?Ok+h{Up=Quz=cZ-z6RS|n2%Fyh-@mDysl{f zMaSQfcV!+P7E_h;Ci@m|RZN2K`7cD0Fi+~=g>&cAnl0-{SF5)>JvlBU8;#+qOeOG3 zsrE0*|JF~^?qGN6O(B885oYH8BIYWzvJH5&&24U_@)Dn<<%i+~1u#nn#bHv4TOI_T zDsG2uCFrv}2zJ^|dwck)0i2z)eB@yIrS$AUq~!(ok^nT%=XoL9DYT6Bk)D-Rsa5xd zd)77Gsx?Siw5ZM$J@m%{;ZpKSjI1b~0p28idbOWXH@oKSFioD z3%7rP z6a1ukInti3eU_{Dz~;8?+uz0O>*dfyI5C24hMr}?mel6^WsV!=A*84JkL0Ma@FTjy zbs_Dzu7^!xNU!kM@D~uH<(}1WHIxtiL{XF^(g?r9-tkqs%eGI(gaIN#8TY;9Gl>K3 zP8{3j)xjkfyjR56DR#jL8Z<}fO^uUm9f+{;{#T4C>@|BPxbWP1 zJ!*{#s`d({J{IRzaw9~P6u6fP5C<1TM{T0jD1~CdI@A{r28VCc+<&Q+V@!(%N6EsA z3`@?rAcc$LRj&s+H>(2LU?<@}Mp9x1w`g}pg#S=A1lMM+gJfB|^iQ^6Nwvdug`Lfx zeydd&e!lf@S{;v0zi(?w_H_HM<4fH~JN*%_?b!fQjW4&ZQ#w=nJMLW>jiodLOjen7=tjE6Ii<08C_1BW;*d zxUJ`y8A7E@HThBBPRS!|n;%8A2W%Zi?Y2iX_<*gtblDm|8{_@><-l=f02uLQP$FVX zc)Qzb1B(|`;yhBtL`}TGDRtxvlZTs?^5ulUh)*-Nb-$R|0=5pd&vGSH*3J;|ogYgn zMHNn{B?q1x_?%chD}RbkS3YB^69XmYu zg)Z|Cm)^~ZRU+n*0Wd1sy3?4gh;6{(!%RjBr(HY-%n*`#_G@#jV?-BqU+b|Y?P~t0 zhFP;h4QtNB1WSTO6d#N4l4pVSJ;_Hwdi?S|)60{(dM1uA{ zsR)|;VLe#V=O#uSR|BBZ2A?S^>;ANE&p~;kI9PFy+R&Hh(blL6S%OWK^_}yMzslV6 zfWKnbU16V3U^n|;!y6$)RB>1~np<1ARtEMly@X0+MHxf3vF?_EWHw&MD!7Emn?LXH zUK#bxkj-D|{OPq&{^_5hrr+-O)Sp%Z)38%_r+uH=7rDIyRjSrgVhUdl`N4%ky%)EM zF|;W@C!d0A+4;T+d@^s1=nTmt3fge5h#^7Pew~gdCOLr2sC0qlU*Mg+1ijv7JZi!g z5|5~wv*0V^_6WB&1tD*Fx9N=lJf?bT#6s%pYkfRn?iLOiI$xNUNM8JR`Q*4dK&goXhbydDDaf zwI5_E{awYw`WKUvVIvpPrwbb3_hNr!XLb!6&bo^yz>H)P{{my*7*kAnLVAe%$9bRFl;(D`lKZkiv%*8-0~u|mjb%IW|g!=B<-K_G4{a}6vLo5 zA2oZ9Yj^2e5NHy0w#4rF!>NGE^HWk?+`i49?SiW2@bxM~kURO`Wex)Ckj3ouF^s!ps)>ub(9O#c%)c&vCNsC(T3AE- z-Dx}7HZ{=xj_&2qSG2JvGG@f=mhg9dG z{@$!}LYuc%gLG;kvt;&kja)Ehv9{*d={e0z4z^}jUF>EK+mc6x9}KU&ThZ_TD46lb zsz64^KbilV@B@iBR_euvp!j*-(Sa0#i;;Z5aYi2rbQPzP6{U}8i~!Sy`;VVWYt80X z&AQS-L~?T8d_bZzS~b!xU*2nc=VIP}Q|-vR;Yh&ztUJr~FeI#!Q)kSR0$k5$%Aven z(p3-JfxQjj@!*IQK2jO~#Ue_Z^m>Wwgfhl=-%7uX2>SNJ!RE(A#AAqErNzxMxi7xN z-%CCc?J>P4tde$Ww$H)yKFDgPBL{$Nks)=0YcHU(_%jUAS3m@gME;vFS5cU|< za?@^gy)A$5qSkoBonz>3uwbrjB|Iu@D=j){o8b8-g%mg#L|I*!amnY>;qaqyHrn^*<}LAM4sE*I?79NlTb_FKh{ zd|xD1H$CGq3Ij>KFJx{kcn(3bIA6&?s870{4QUoxTDAw~A@H;$*v!t|v*DhG|Jav* zOzR)0=jPzwNq-Le0{gCY4`Q54;8P%sgL2P3J$qRxHM+x4 z&m`pCIlI`2GQKr_ctp|CG=}7YJ@@6A3}7)FxxB5wAY7|i?0{Wi%fZuVxPl{AzzTA{ zFwyj;XXsurt6bygcp=A_+o?l;@6}Mzj~W_JILN}q+Jz}g&Rr?ad)|0OIQB*}eYv1D zY;Xt9bc%^v;hlQ|G4kHVKdvR&g⋙SF1GggU*kEngcGuwsR|bM>=bci64Wjrd3bq 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 z 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�TzM>`Adoy$9Hun zJVW;}<(-FPr8jA*&S< zV4;!6)V)IR7hfs{`oY%>yb^$cXGKvvh>PRIGf_9-y&l0)wAuCJYSBy!dVi-ivIFF) z1P+9QVc6(}UYmW~L2zy8^coX!Tsa0D0Oxd&eO>x1tp@lG`ZxR6qBr;bDFCN4^{QXZ z-sBJ&=K=4nT#22;&bx*CTs}f3!LdA5_^#DQ}_O zNqp2eeA`d6(#))o*D5v4_Ys>TsClCkYuA1x`U)-M%e(^2oaEPBsm&KhM5>+6g}g=NX#RAK<%mN4{I2O=#WvFT*sgME2UAb@`?{{HkcaVr92i{+l^i*^V6 zz4ZhQpU^))!fpW=?Jd{mZ{Mt^1HbxsF)sio3OX_oKPu_#DCmU+upq^4mj_mea@B~8 z?hI|Sh{)Vp1aF+c!dCZ#s!_TkZua~d83XQlNKV&`r4RdhJ%7w0)CYnzU(Q(d+@o#t zY~YQCCGf3+m=eH0Fd0Mq(3egLO$FR_7!2HwyczZ#udbQiuQq9WFkaQyM{@IBnzQp5mB$ zxg-;cqI+eDZWe*1aMh*)SeDF{H1+#P1GX6&Cv!tJ?^-7;-#5gucgN@|Jo0QS-_k(M zGm5o3;9U}>NY>jhYWqz_E6dJH9q{^wNkStxW@Jtg*T^(G}N4r`GxxAB_ z7@`>crM%4n@JD*U;(~4f!~YD4OBoE^1L_jLTq7773y$BV0QQIUZ6qpugv)?xWuT<% zS%n+8yaa$xjv{~y!l^|Fa|K>9m_A-H7>(;=DPWjA!VADJ5my_GoyI&%1Z%L^r>RnX z6`GN25z8ejcZk>4wJcjH z#y)7?Dh>;6N?^1a;H?}SHtJl)W_{sFz{0PLZfc&*JSO_9fBk=4NgQa89bHQR0000< KMNUMnLSTYXFlny< literal 0 HcmV?d00001 diff --git a/assets/inputs/audio/seko_input.mp3 b/assets/inputs/audio/seko_input.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a09e2c90448a64dc8501b3eca6a9ceda376ef2e1 GIT binary patch literal 361787 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 z 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 z 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

    a`z1{Z2F(0<4){s%d7q+*Qbg8M55fYEeE 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°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 literal 0 HcmV?d00001 diff --git a/assets/inputs/audio/seko_input.png b/assets/inputs/audio/seko_input.png new file mode 100644 index 0000000000000000000000000000000000000000..cefda29965efd3e3a3c68e142b1ce8f82dfc93da GIT binary patch literal 504390 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

    +Xwx;uOn61)qG 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�xW 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

    D82v5PH_%M+SL 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

    k3Wx_Eow0eg_(XObK4T;{vZE}igPsY$ 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

    %=Xt!lJeqb&IK#Jy={mEZvXSWEnDf*%y5o{vLO zk+0##d@`4AC$@}=ErAGLS<}&KVcuNP;cPE$C=x~z`Z$vz*s>7xpN7R!2B6vBQTJ>o z&Drw6LcaXu>81^sei)Aoz5oe|awRBPX!58FAGnq@?)cB7xa`H2Xy0YEszmK4;MsUlm zN=S1u&rQS+s8V4{*R$q=yh?2=;WD`PWK_gv9Wx6P4;yz#BKKyrXY&m>89q+3zbpi{$GL7k$sGG#lVzn39NNgr}9>tchJyM=(!E?ulBifbCP8bZ_ zDZBqMh}jIiNP*H38i)8qK|B+kQhl~3P5wp|m z(kB0^(@MAVZs=3|tfX^yd!d}EZ;)3@1NNO7Q^0bPXZ*r9Z13x5*HR#lNM}X}+XMg* zqH^EM4v+FDU23>qwD$s-N{OfJ7&Ab6p9(K2yCJm_D#0m|gH=9@cd0i{eGhr0N*>HS!1LG8Pf!jGdDD>8dEKDPaOz-Y4RlgRW6 zvE8w_o6fl8!nL`ruEkE4?rbQI>Xq}6xkY{t1XLo0E{s=s+w>@@yYKS zn=oI69nh)m$2JsQbQJd|0wzj{S)10|;TO*V%LYokLsiPKY8}d2&ygCt6&XT(@W!lz zyHjTm^r>w5ehZ_+B{dEB86WpT-Teh*GQSLIgYT8asHer#%*BVL9S~8UD=^#qJ-Upd zR@>_+V1iZnIT9qCrb*d{hDD(r)9O9yZ^>fh?xta1Y1>^tWIUBDl+0yA?H|ygW~!_F8e z;>HOG`rW6D%fsTa^^moH+0sD1CoV9(6lobu#c z-(H>5%O5et>5G__{1W=K-^L6DxWAg3bK?sK8_S(I$?DpV+t;ZM&OZHgMhsbm4+TnL z2e^-YaXv;?ALw8oL(whbfo-}g(;)vHT2alkUwzd)Uj&)xP z2k1HVGah{N%LLC&ijnEO&+DZ1b&FDtXd73y0!VgS|E##WYCaUbdiz2F*lqwMh#UF~FL}{2*$JyC}NpOdZGK$kIIYRv*XY+yf{t@4YGCk}AL2}oARv#oQD?dh*3iAuL`E$-wltbh#gNQCwf3hN~9mpwolkY14dqL-$3==IY8_&CihmT1n9tFlrWPkz&@t^5?e9y*Bh0= z2zmW)Q%5K4Cs20QAb$-|X`Vt4>|gQP=`;ph)!#+zS-(JwwjlHUyGkzfz=V6lhAL!I z^~^i1I|VSJUG;m~RwH7H9M6%6amp*SFQ03w(<|o}5eV=d`p>1{Ll$#EhFH3wP0$T- z3sqWH&Fig_&5V2<`dq}8NTPWpp6`?WTb>GyI$kaavC6d+1vkFw zFZ;FHu=)Om%DW|)t-mBphXIC{9F(~(Fxb!`Zc-hF&B45hNQ_KE+|6$weE0F6=ew|5 zT-DOmrrRSt_lrDvsNo4*4M7=D6TqzDT*RNjH)OZIwBGgnACk`UE2_4O!)Kai=!T(@ zMoC2&x1U-iY>xB1@x(eQKf17UaX-*?_F@3zSS7!M=C?d0EZNC`uMLGK}fNNGo7j4wk18l{BN1;T2I#w7l0 zsLxd0PA^3DV3(xq-tBRICvNMI`G2au?T>TZhIBH!8aq15r%Ph@86WPYhIK5EhljcT z%=uaIckJT7Zy(b-L6!1;Vl%58a-p zI+(Md9iO66z$mj2ALmfM{ig3iscL70RRmo%7sY+~Eg$wpg*P0&e+(ZsNvt^X%tsC- zbM34VrJO+HB*ad|?gxI^*-4%Cf3#j_6Ab?So#seR$c>EAw4V~XH1M7|(762rXJ~w2 zMd~v|4=N^m1t3QzLqtg!gSWYysS093!u>~A<$*`Q?b2op);^6C!0_8UO!$xOuzeQ2 zuFvnasM$$O5ukWxAe~ZdcYa<|(27(b>M;ObZU=4lH>v1&4yoauLM{XMopj^I?$%7k zWn{;9A`(LrS$gkTD&zz9Fa059v9i2K5EhJ2BB?tkGecKC(~d$5V(a;YVg!Ymt5)cl zTCzVoBA$b>pcN;uL*Jj}rY;!g;b1BM`B9=U^U9Z_RoPN9#D%IURVJ18Ep|G!;i6b$Do=GaAHw|G zuI@6#O__t-gz+9`SVR$sWqxbnAc942s>WRhahzP!T5KL8$7N3>A1E!wtrwoW+NN>b zB3<`jr@rdO|9h??qtcrJzQ;?3f3d+Q*4LKCjD0AEQ<4HG&qAa?*`OWRvx(Npupjv# zb+T*(p`C-9nmnRlSIK-66Ru;^_Mq`|>d6TZV@OwYo;h3F>-+VLOVCK&lsr4&f? zDO;9jNh-g3l~?hDKu<%jmWs?asg(}8@0-OhYkF9ANTx8a|Dd?o!V8QA97rv-0JArL zOETalB8lYTgi!}^oI>oz(`lMYX=}VJ?mH`TT||l^Ot;-sy^62BP}L6F`I0G<8A{BZ ziNl&Q&*lx$aDV(W-q8O~8GX&klocKi+PL#g4>m(dnThJB9~XLX^&E=2~} z{0bZD19QWNU>a8^%!it%S!c1oV_JitGj<9n9hoa8a9lcYg<{!J&_v#3j(bibimt<| zx1$<37vnpix^mq)w)4W!=ger4pxeOd{n)SYL%P>$2lYY^VWhz4kWa?^vam;v(hOAC zx!Xz;pWg9j@e>|B?FZDTF^bbv3VMInUzO4<(iWU$QG^E1bOeU|?s@bRG+Z!nM=V4} z6X76T2=f2$v#m3`CgpYOMgGgRcEcwOu-Z2YvJ@`u!&x~{>XxAw_`z1O!sMgUmBL1( z=6ulJV~OA$My+8m@0r>4Ke8Mhs9|8N5ndEcUb z=Zqr~#U0L_KU`_lrPC+UpYmR8+zIXv9D5=={iAf~Qx_PK-*(GA4_fN$nBs!*ISrFb zi#>tr(_Og#zLpNikpV38bBHH&fl%YU6L0ij@=Ykl@h0wf=iN`OYrpB+=q{SCWHQ<= z%y=V&bbm@9h`n!V>-wG8o1vg)EIF+zkEE7}q3jtHvH>m#*i1nIppRGvY4l?i8Phey zOe7fFL(tH5OFxVe|5|em7}2H4Y;aumLdv3c1FWKt$C$>`e}* zfm2kVI?*j0K)CH-Sw0-d;IRX3+oBb6m_pE=fUqqKF1R+uyHcFUSsT{Moq{3pex}k8 zA*-)}!ox4lp1x!|xl@QlPdGNaT9I@K$Sp**Od63&xV&wdS2i&GFU(d!m72_A$E<#l z_OW{2x6mh^#zj+qUbZbuO%y;siw8dNR9G1CDF0H`bW|r?b3{ANaZmm2(w)sT`DhL% zXcnd5v3oa0Oaa5Ocf9=_4MyE)Nt+c9_iB`Da@q9TQI^$ra7Oct6o}x$E(@MR5-GI1 zzz4ET_rNdp5XJWK;G4CSVSS)?v~cl8?b(N-&RUQjXg-cLPNWE;#4Q`wd;#zxP*|87 zkP4~+U+LvALazo7;^({K>Q>d#9?r8DF`b$k!wdoA=nEjnL!hs9)ks{T~JGuJ-(tq$^;_n#zl@cbMzpZ9sU zd1_=8v*f|UgOnLR`jtOWrDFSxjC%+rq#h?a#cxuYT?5aGORHo^N`1@Ain~#-L(xAD zCO)oW!+tswCf?P+w~s>d#nPvu_^7d8Lw*ePxI2Wd{}+vFl?@bi_@~Tql?I&6LQ;hB zo!0@qLToQn&vU`-@Mdj%K=EW`e+Af3up7e0c5)kHM8+zD;!Y8o@4w-LZuSxB2C_-w za1gj1d)Jq=F~nE?zDu!=FdZtO3-MhHL2|-bW&Y>={qoH-rqIYY4Wis2s2c%v0kwov z%y%O(fuED|Wtp+Bt$ckVAK(XXrg--(+JR0{hlC;dxN(uU zasWYCIWAYb9ov}Uh9B(b5I$tfj}S5w@Kjp8wZd5i*cR+bF1{63eercJE&|0||G2Ai zOhf8bvzzcTR_ZQK_E+6#<_qRwKKeI(>Vj{FnDW5{tr4A^t=G(G0R;C&*4c|3nn3}y zmB<~}n4LQwv_2AC;H zM%Kt0EP3G08xJE5@lp~_+CB85hL=zLA!Tupt0xfz@=Lp=9af^He4MV;y;S9@aT<Naw+P`z`^|>tRF^wm!Mf>E7L;o!bqbgQp~uPvKLy+$k1#!s4pLUXJgMp{5RBM;m3#k5 z@uRyHVVs*vazaCbT1g}{dlmR|6xPgec z$RRBpR#2_w%HDtknUSFyKaLFm`~b@(geJxR3mXy+m?QloYY4fJ=Qk3^J^>c2Cqx3o zot~n_fbfLdRJFS+R+M_?bym|)4v8xq`wrJi)oYm-p3e<0m|Z0=@lSu&fStXIX!J+( zOMj!%MT5Z!fpsr~Xhg*}$>Gru>VSFuSD5Hq)L-A47tbw>VN%3q-5d z)yttya%LH8zJ?UsHZ|rouBH9;fj^EzWmz>Bdx9fN>4}ro*FV>zqN!=~Zx?yt$Q6(F z5w>&uq3p}{qpo7Dj?5G1+X?VA++zfqv5pB`xgiMP0;M2W_Vd+904G-6b#z)d}}0Tk*eQVR5$T0 zt3t0HNI6~d9*RwLLa&oJ0Et<_f95?-{;Zy@46boW^7G9S5sa~&H`l(;y3Y*(N!aJ0 zj9f?#%0W$~;wsqtZ>XvdTpvoF<2g!_E=gh}Fo+|Q9$|{x2rkl8gF!FVnj~RTs5;~v znHxX?Zn}65IkM)4`Q^idrZOan^-l4#o<8FcyTTv%eO{R7|w zr;&(Rq1U;1z|4>dyNbsZg0p-2`2yeCTPFd;Okl@rtgE@2DNHkbneuidlzlwP|4H$} zH+xQ3wL6A-+Mv-Kt?H*_dY7u~hZLY^1E${zgHBNNKZ&eT%oikt*(SN*@p9E;GSpJ| z@M$^-;6Hg|j8nOf9s+a9mSzbZ0b|bhPtxW-0?#zYu)+bbM zx4CZB*H^+2U5W-Cc&c#C?;JP@8NiO#E#fcY=ka;Az)XnX1B#9U#BRzaf!HDVM+LdL zWx)d3G?L4&G$^v$l3ErRK7xoVjaknrdZ(y#W{@8=SV#hVq#)mNtT_Zn&&FbqSc-pC zo6WC99Ozy?4O{DW;RE3eXg3CB9~&7`9z(TD4E+g$UXTCeHmdmkFfsL+dJ|${W-Q>) z-?rS{I)0WV>CV)q+Gz3L!S`CD_Kb8LjT*^5cGxdxt6QOXCUS6XPahQvAQ-NaECuvx zbY9QZ4vHcUIs;TVI#CN;=361g^S7aDSob;F{%wty@W^ltZF1%PbC4>@qKr4a$xkc` zyx>RI81b#!kvz^p)%^X$hTkh_JQ=|OZGd$W?Boj0DWa=`O(&0;`2RR3-P3vyIqBI@ zLhEyj5Q3PYFy?&j4P2ZmD{FH3RK66T0^a^;lYCxKiJne~ZjV%#(%xOlZ~X9X_!Viu znxq)!BRA(xjB1xUyMsGY2gY1As_y!)=9oqeRMa?1L$`4tQ_NIf=54I#Q^;r77&$uo zZU}5`X~^$gboWV8)VI+MJ+7jrM{lFk?xkgn=J(do0 z0FA9xsOwfSN`~po( z*$5Q)(zC=6Z1nsBsT%Ob$gfiDk%d%`p{nTR#Ud-!pO?Qam)m(cq4CT$1)eUnSXyxN zR|ffyGWr`&DUi%S9vpQ--~hg}@93-zD!>Ab(RTc2W}*UV+P1*^#@%Hv37+fZnKAq|jc^}JOzK)>`+^)eEXm-t6n_k-k{+|Uf0F0AQuCz#@Bg6-Q1t}Y6*cOZ0|{Uzr9S@H$; zog6IpAWL}mJ9ctO7Ox+omi8YMHi+iv%yVcHoHx1-neJ4dTne(14LQiD5_B%^u^|g1 z?3MmNk@Jo8FmSz8ukGXchU9E=8$OGn-E6WZpIc0Jfq4M-hY}K$Y13Y4>s4J+rDDuW zpRCH-U?7XU%cS5%G34SD%8Noe8|Umn_f=HQ{s*su9WOrbNQT2IctM z8omY1%)SKfo%oJU6rH`#49qG4NNNRvUpHX$>jOMN;aT_8(c{}sYIo#zrdt0zqrRgL z^Hw;_8ZLay@9<^%%k(fa$^=_(d5ilO|M6e}5<7ah(QwYoR&!_bmfY4zC$f>vRj=b* zn9w;!?A!$pl3tbkYbRDn&szdxW|P&V0EuezsdBX$EguVZ@ZyFT%GU)L#TZvm;q8G4aqsJ*mg}w?voNsf(9$mD;(Wf(LIWzJ5L=@?Cs|$r!K8 zfAd%X|9AC0e~%*cxkv!rnLI9s=y1`dD*UhAec&@-FamnCVAHx*hUkUE0NY8C?5zZW zU=JRE9pwM-cg>ReZtulQR%xGi$8Q82m>*$(fXo&#pN_n^?8xM%%7y`q^<9{igonAqJOAe1Ak-$(FUMR1cfIT9GQqaE3ogD-NsPMa+GnS z<}Nq%o0IqR-cyGERxQrRZXs09nlF|fKOM_G4ON82(c^p1FixWor>=iLwp@n#4KtQO z05i!=rGqcMksjd&I5tb1Yhhd@4&Hwb$6Qe_x!|YRAjNR}PC4dPl0L4rBTRj$bp6AB z>A4FAkqvj=W?h?ia4vZkW+s=_e_OVjVM3)K%YtfBs9l~#m|ZCaiUKiNn7SdzkO(4V1iNlXHjwsO zJ&6Jts078d7kKfg?r-$-ygkl+L(QMmt|m$T;m#SIL(0B3myRwrYrAs0It^TUWhZz# zrWZ|-hCm^OxlsUq&~M?C=cI2%V2+;B=iLxW33vy*{MA$bX){O;B1G`oKJp`@f!t!D zHJ+uOz_cf*?81Thl?~QNpb#+s7x}rhiZd5-l+=D3;!}p_6~wQHPcA*+62ax<9j6Q6 zi_i*B1zOwhN|v^UqY*v>BxpN)@GVvJbxIBNEC>1@&!Wy2ZF;i=;l)d4a;7?Of=(=B zMxqP49-N>QmL6LE873=3_)_nc9YQHNPNbm(b*>DO<6_78q$w{3|2udC8ghI5bsu{p zbc7rRS`g6ED(OKWVju3WY+Wf^6ewK=8FR=}Rm+ z3T+I;0gC_Ba+9<0wM?ZT=1MH(47jsgjsgF?q?bSrG6qSPk;k|2V1q#jokJHfyaO;V zT6oy=Fvu#U;+GvmsZX@BSx6|MQk5BM9`YA3k_YP*FbV&_#9X3UUuUFkmi-sRs3J<0 zLz2QCIY@#yJG58_oIqGLvquuh!K(@7d)7OHe(Rt;Z9tx_RJqTk7O_U2VDa(2nkTou z?UTMk)ga{Kmdxx&K0fcIpy-H_Mar;_N&kA%URsB@n;ag;bxT1f)izucQb`Vw1yfzHNU!gp)U+q+gd}Lh~bAzKTEbHmPda^(g4_>)9cEvZ)OGd4Mh40gIA+5 zOlDBUpS>WdzaVr!V{mr_cc`YV@V2-@T3)EDK!;&l8y%VP;1di&IpZf(Gc6HcSM;Ty z>^DCxE)8^`QF5@NYajgLNNV}&6ch+b2hWV~NmhKDW_z&wkW8|dyRza_=lLXaFk3>w z2h7ssTZ;MLgK@C;<-dDK7(L-&uwwhw;Ti9TAvzGZF6>AeoCG_jY?FgH8zqB1P4Vpi zDB5M@wH8tDBySa)4=sV+}><6auCVxizKeDC)=9#-u-H{jAY#ytK~ z6f?6JGoO7tiK*I8NcW9*I!JhFLa^A=Sdzn0fFcqu*Qs7XYr1^P!w5yS>Mk&l9EXkQ zh@O1^CIh>RR!PMVwLgGz)$ANh-sxa83X$ni`Q#_ozV}N!P%5a$rEiQk?0^E-$MiOr z&9h8*g+#_@{wa-(L5VbP?s`aP7+V;5gu=TEcGv9Xpl0JKN{GA21;h8`$~t?GGppn0 zO=Lj93d1b=e4t(-!apR&YmsK~rbGLroz)_+YrsmhYr)=^+G&_0KplQm3n6vT7t5mK zMCa>4AX{IZYnR#rqPS%=kxX>0KmHrOG`&>Q;kH{!1VcP~fJBT&k;M?cCbbOxsu0uT zBmyt_ZAE)p zlC>_PNm%|Chrb_^Dp59r_l)KRy$Zk-q*Y#d-u0^m7@jz9$$jDA27rXR=# z=ZMvT{4HFYrf0o(BjLj7tPuvYMQ7SLv>27krd9gSXZ*iw)PHnvpD2WwSoH@i-b?xmZ z`l9EUSA9SigB2~d=9G3kId_M&8S_vQeHEAk+C1J9Ird+d_+#~a$|zguCNcL+2N(n| z!abwFR)dD~UT%3@WOYV)q(ihVjf6KsQ4~O9>Gd~7P`T|j60K$zL4OdMsK@5RyzBf^ zjyUd|0#j#3hD13#GMnAqK99xO6a384nf)Y>czoLJFSqvyN8}K|vwnu@Q+?gTVWi58 z?RhN`e$~U(M!ecEsr@f6{?&@@)Y^F%?H7+be+`(JAD@r+&LvD16a_Dz8vl8pPy96% z$PxEDwmdc82vkzgw69J>=r4Qr_!^WzAD#>xc-s&8y#7iCMN|%c$FtM0z$s03X~eH*y;9ViQN9z3@5mwx7MYK?>rC}C&d@C z&i_OmAj*Mt()4k9c9(>Gr^0GexUdC1UnjoWeo+Y*d>|O9qQ!l61tVlp>w~dr1wVf` zc&0GuFJOiPCT#tZzM>ywq+76G7N$5o*JF5!LUw70YOQ2@ST~-{-y1;>9N@GjGtKE$ z*?8a&aU}CE%OL|GW0fY>G7~+>2y}3@?e~_ZMr&@Hf>@S!;3!0NRP*a*X`Ali=w zdy&V6m!C8Bed90Yl1NgIWHt3Ip*M3662r)!oz;Nau9)wVvG0o{5|hYyCF>sR-^jlC z_c7xnp_4zN&WV2$ef!c)SF%{_V>+k~C5U082Zq#1QD_|`5PjMH{Xpm{^7{4nx%fco z^%h7P^uz+Uy$L0^UWe{u*a&e$7d-}fHwacbdqfuJ7xAqTMnRTm3U{9L+r~CocDAS& zeYH%yT)*=MxApywFkpNXDT@dG6#~Ho0d$a}3A|~|r;jx%&V-Nbh`fslK0(TDks>EJ zG9$+OqPG3XZBJXPswdFsDb_TL!g|D8-sFOy6(2=mcR39WCE9{{1qKL=Yo;soLyJ}G zKp8Y8K8lXo5E4yY`UY559l5+&i4PGz(ZbBEtuMQW?eG65LEGq7`Pz%e0fE2ykBO7~ zSKOeXr_5!_qU|E)i~V_;o#^L!`5_ISJkadn;JW0Y98ah+-ABPau-dp z-{mObl{D#Jd0|(4>H~KG}MRaO_^S`4qBRDAZMdmNcHOL-LIeZ3A zq4FZ2AMp90tWAlQ2Ay%~v66>B(_jToz)SSgSTzM;KXULs=pBH&nNOMRxbw;o&wc>= z!HjZ`{<{ClK}M1?PNzK$GLtg2r{+W+nx$ym`i=~ku2kRQg`$g4V1P?piCyB;#tQ8@ zHXUeUVkWcU61qE$aOZ$lLDQYJ&3GG`4OX56*t`%Z@h|jK&u8wo!G}gD@&InlJ4=2$ zi{6oh*)K|B-iFF6UN*H(cs^CSDj=8(@;+eL1@^egoVZ!klyAiCz+|!#KM}3jlGOR} zRh9AdLq926!E2oG=i(KePshSLzbiGkY9>B+^&5}imMFY=E_)SU9FyOt*XiO`Q|CS} ztu(rSVTe?ZR9QHCTqFi2UM`6Ke1^8n|qjjQ6-=(7e#K#Ey^v(4iy6p$bXJ zpD&uG#9h**4ILCfy~g?+Qwa8vLJ!Y;4~VV!s(ip+zcUbWc2Xu$kPMXCtv%%{E$EW( zO@o+x!^Nvh65B6mKycyjN-T?El9pzbZKro(7)(eMf$EAx@Co z;r7&aqdF7}1$HqiUf2!D3$W{b)Tc-mK(Z$4AMlMUbi{;jtX%r0MCt>$pS#T(8TcXf z+ZLW$u?h~bgMEj-O{!F-#&5I!IRF}rv2OIGEe*qxfzbD-|7&PS>TJ(ERT+Mqgj11v zrl6_PQa5cuOEg_gd?WnnucNFPELRFoz5mfED(M8M@knukQtbzPa!2d8W~GB1Ys6X3uh3h ze7erg{z>^Zt*UW6B$W zrU1mbubRO^H?TT8$q>pDi<1prtkcLE{?+Qf2Hn%=)vc6 zy~c;g+YC1C?<^@StGf<@H6dubId%JJ~DNLXO!EdGS*<77Gll=*AeDv*m`(KV7_J!FsV$p`*$7Z!P_kOxd#j*bB z({tC0G{e(B^^vpQ!AqB_ObtH?tf>P7Lc=%2XKc`{xuWau1QXteekt@*K60Ng<4Q(G z(P}pe(CGrHH&B~`D;qh{<<7!rLl#szS=lf@{S&+h2^z@%VVaFlJfRll@$?ZGQg8F- z0gm(6frama34WosxOR#SYd&plN~W|v{@1Q@3*}4(YtwjJ3GcyZkAmG;gY8(HA{kZc znXAiH{@I7cDm)C<yDQ6*@MOi+w^-$X9@v(wB=1#Txg~pToEkQi zkGHZ#9!o$%r6}oN)}~_bY*NCdujWUr)I_XilS_=b*JI`*#@Tc>iu|h|Iq# zjvBKRYNZp024Bf7TSUv_Mz}1K#+F`sJKgVnOO7nfl~`2{?G~_qz6AUOOOrvsj3DHh zQ73F<4?A@(1Pz6yfQ2u3JI@QZ0kC#nP%mQLF+1o1t$!>1TIKfkcVM5X;hpO9NW2ay z9oKMs=57=Rb1K85#{#fdyP%N+hXYVs#M`s&K?GIx&P7}Izw*&vZE1o>#_rTe7BG`B z)JB^O9qDuJR02W&qbQn}@X1B~p{YZvG7UR<{I?O+t8{CA@xzq=v)!0+@_<}NzsX)s zIZ?rLu)X-WNAUN7AefhV))&O4HA>+j_RxUw^rEXztI==ExjKErC4=D47~t1IC3_=0 zZ?G!{{dUEB=EANd;v%wT5D8)5PxwJ;m;+LpL&KX+^{=8Ea`Y9yrt>06b%zBz&r(gY zJdcLyjJXNAw}4vs-vn506fZIB_Qg`h-^&%(((C$aPjmqDVoyV5Twc$spWz%gQwqNu z>ebD8jq&sdmU7Kyt^hNzlX`|>PFbLLlPl};(5N4ZrYE#hmxTI7MOJK6VGWXhERe`A zRNrN~%CC(G!Hj)?V@I%+R6=YrG(oL}}CIZ8ARJ7>w$NJ)LNL$=WKJ0ou zOh7&l)Sg+?(t+HDx&Ho^@uBE%=&{K^os2Cd13I)5;&XSwd*I%UYH=>Vstd;S+%MB+ zox`oOM!TZIjWZXe-o-FEzOV>?Z;UH%4XDEOc~ zW(!RU$O(j|S>dsc+6^NI8xbd>MPcnuP7rk=Ab)eB;1jW$?*c+UNJkOJi4P$yI|{zs zJv%%5`rmD@CQ_`nyf02t`t5rxl9+t(w)7oI6*XC=@3t-f2y~J#t8Rj3eaGwh=Y8Xk z7Y?5#@__KK>rx_F@j|3Wl&%t_W55vRzLtVFg}^O7Kt_~V0N^CYLyf&EX%SyoPK)0t zsX+py&@#9wHJkCT@t_~X?>VS?iRJNbve?3qtn0f>Kj}w{l)n#idm*JMwS`z+0oh9< z&Lycy!D`>DaGB6oQ89iO-il}nf<3*M{1$>8L23;j9N{P z=Kz>b6>`9f$gz1#6XdCc2sRqH^sfHlFu~-ERt6uF>TA0^y)mZTaGoDk&kqv2`m+7! zj?G&{&pd|RG^+axfVhgj+rj?`zWd=wzc3R5h&1&5t6L zbYj3!OoBRb;x0w^DtV%RNlQvZMq3pRHfaHFl3SFup+asXa~icK{>^T1V{(e{wAYix zhp~UmJw~s_T_bLOr*q?6UTN%Xv6}lASm2ujPM6U5sILJt>?3%4QxvIW3)?j$@8Fer(Qoe5j%+(7;Qu&qef%2x4x0c&KfFLI@39;#wW1n{yn4Ori2dUY+=qXQ z@`~Cf?ZkBGi#Fp6Q?RA14M>0S$=5dxzyxOKbS{i!m-zevaQmj(Z$(nu-*8$G8{$gx z_4Al<5;id~YA?8%Bv|kLFRV%z1+j>%X-76>@t;ckyuuSfL|YZp97VnMuSqk8gr$$R zw8Wx7zY>YRDsskk+=hK|%;k?~YdkcDC5kYj)Z@kBDwSJo3_U`qwo3CMJqC=r%1rcs zo+5;Py4jxPhhI`%N&T#AvXV4@-WZPNzDE(klk)FA=MXsE{rD@pV7U*KFekHNz>D*o zVd7YzM_OCwGJiePn3A+QGp6&_*>>TdtZ(vU{zs)G|G9&W!NGR}o(iGn?WNfJ-zA0* z@-04o-1AZ9oI^G5T6)}|Rm`0q`Vto*zxKuntB1mBDSv}Qv}jgm`#|EgOubt5IH5ZS zPkiU={QeEQqIZ5?Vndq3g2M$!d`PLVYZs+L<@+=+3LTy(Vyv?(Q0zy*(wUIJIeN>a zv4RiqJ*VEbXi(Vj5bH(MzFUSRv(vXJVi_%#U#muUr=IYVOR3*m2&C#2KYx zeWdsiYVz67lO|teQdkwRdx&{FYM);km+x4Q<9)_mlwq5-9OhA^^xtNd39gY8=Z#@D zAbSaI9h$R@O!-jN=sP!Gv${XiA8j~nLm`Ek(#pi{QhZ!+rBk7ei`~-bN-T**j8kGq zRopTt<#7u^?oaPG!AyEXFi@ z01%TQu6Yyenk};@j;MJ}v@PlUjohmO-tPDuDBZ>!bR0@)4+gO>=exuhev5dqA0cw$ zJ-!ok@#Dc>0co6iYK@*GPA;^^FN=zNpPpBHDoQ%ai^|pBZr$49C#h8ms}sc@=l{w{P(9r`7JMlz zNWA%r@m704S5Z(@Xyir=ekT5cU+-bMJl`R6)?IGixmm%rmMTa+oU&87N!M7xzG|rP z-Ck_JzFB~B)BJ?+qR-6n_M)i_U z>3IlxS{ka_ph8ggzEl3rO$!Z#u)+MDCM2_&RQ#`R*BctNxMj*_rE|rsFvFeDLhUImb~~k$&R*>N@7}6XzL7 zr8`Y?k-Ygh*uBm;)IENqdM&!)!u=bLvNJNwsK`&z!L>ZWmlI-#L<{wtyvTW` zqA4$dmpvB@<*2s*sEu1<)NywK9>`!+9@{4@X<)>T?I#8-CgT@e+ao{$Mp1$Lb!qXc zYNI@}+KO#MLrU>Q5pna9H=N*T$TRRR!PV-MT1gvuP$2jGf`x9Q8ay~&iT@(JF^zU! z91K!Cag4IQMacP1q}})PoVrJtF)b9eKJu#gmP@KtAWkNej5u*5G7LOXXO5P=6>0K` zc!f_@?i-OnYt3@WIwSAFrao*M=T0SUzj48NQEzsw@`ZZ1y;kA>!2EY~^`ku!tXC65 zK+Vg`(fE#%@+-5+FsrsGv%i*Wi6FhGc&2($soHS+!81?<=q|WL`$b3<2s?YP=BHf1 z_1x6|okX_fCY_z~?|(ax#fd3#JUujzmf6kcd79AOC?1tdn>toe!7Kh#DS5+HLQHHtwWUg>zI>#> z0rCIcVjWl*@0~M|Y++%+Rjo8EcH`|ClP_ih z4<1@(deOGl)I`u`6tb*c-eTZC~ye+g6HgRWZhg-mQHXzg=!sK9%0%55BRT^I2)`Td~;jwGM zhx|7&Ll>Xv1I@6gz4(*rL@#U^!fO7UToTR6i;?GJFT!?n>0Ys~QMD#8xn!*%d|{K( zC&Ycr{@hdg8M{GJ6atQ-#1eH?5-E_cg;n=IXRYqc^;CEu!Hl<@u)6E%q^5ChS5$BnaTrqCP zr4*6^ztrSe)IdMkjKh3ifgJ;VuO*H1k@L*)0iJJmxVkx_$dR=8{?1v!b{4{zzS~RB84$>{R-*K>2x+qe?ZOs2l>WGV-DmCFIL*4(w)!h z2aptQOu;q}fA5vCE=qw?b~Jjd+S%A%xW1qPP8L2A+{15k1@7-FbK zA}0~W(h^ERB<^z+C}Ca?2;OHzuw?HUbIlhDuGBK&9SFQ3l+r)`GtZv@X#cjP^*mr_ z$UOM_<7I@PAZVJS$|EDB}1^J+BStr4~4~XxkVEMjJ>0*KOMCwnTY@#^6r+=((#A)SqQM6E4YC<%%6~P{}Q%xH70>V z(Dbg!Rit=AoY6RYiej8>v?2AI=>L`$l>C)Ho4w(OZFK)E_=Znk1ayFs(McAnHs$xH zq@($Dmx;k3nxU&l<&puA)flSy>HO|HdO>pI`#1d&Fyz#oO_oLO`a|5ME34%Vm8YLZ z*x*U7%HLj{j@bPDo?VgjX5nWRQH3JBHUf3|UbtyWds94gsQ zZHm}7C4PL{++9UUi0G5QD;iaq%^hEi$G@}R0L@@@KgpwIeU2}uL&KHr#VH|q2+o=B zh5_yF^g`4V!oVUR8i=IWk!+@gvejnAOkt$?=q=F(Ad$O!g6`{g@10P~R0q)&y{f)_ zVRS?)3>;hm7soHlpJkrw)V+p)EBR0Ek!z0*-fFm9`9*3nF-2p!PZ)f(Wjj6g;TPF z{VqhG+DU2vq%~S5AB2VDfO<8d(^|aEj)3?sqe^9^0|j%p2lMJ~Zz4vJ1*>S?$L4?K z&1Bt~>C2@XP!}{1*TT7arSpV+aSz{8xbf7FYqV<|?!(WmE+j%vyd}|T&JYZGICE|~ z#{}pbw30jUN8I^Nt(o6mvnn(SS^X&3_MWE|4$JZ+l&X@PlSweEb8X9I<#$%Y>6T}W z24e>c1`B9^1gT-({^)sc1|&?AKZf)K&K4Yy{R^R>#IWyVZwJk7xf~xKf4`x4F!15U zQRIo$4Sg6p# zr}TI^zsenb7xWUA(@{=L0dncF=_!1Mf?sz? zP_4f4oY%=kFgRLUMA1L^Gmq%1LEDD(%-cLQ`4;u35eA)~zLsEyS^|)CM$vB{d(t8K zc{H2uM>x81vrzF14U`GD^p5*usc-Rs1x3`JTK}5x5iSp;`CBn|~a1 zH&?qyBny%fS67Xm|6Ow0w zWcAVT+^5@KV<3rDVFZx@Na9bS2T8rk6^9lsKT5J__iluqc`}|b>dc!fTmKF8X1^le z=9QJQAa*hVrUo!m9jMSXLt1_KX1p=IcCetwAKYZ<3pnALS8R;k2*^}<_E|v8r}!#h z=-tsupnEXH9VNeLB@A?0G-A7}hfNiXqnAFQ4`_}pN}2l1h5^3CiS)<_rw#m{=Iie|ep(hnaM=Eb=Hz=uG=KaAFAjY7|92ll;vvBcCa=7OK<`Tq7|dF|K2hObR4_N8}3-+M|xQ_X77;4E-wM?^U;Bkb64w?0j%K zV_>UNa#(IRrZqM3Nt!DwHwaycTHYDBb=l7f3$aNxXPc?xVM zS7Gz9X@j-UE^@tmy>jR_Ui0G3V#ZMKX{!Wl?q3xT_G=7>D}}VY=f@eBNAoSJ?Cs_6 zKx+9FUtcno4-7r4aJk$e!J7&u|95o$XJx`L2*WJWEABLg5;J2+1*o1ioAy!K`-uMo4A-)$)>)ySNIbyvbKKl zcEiiYmm+PH(?=n_OCQCCtYe2@AUsTQ;r$`8??8mlr;u{~;>~@XwHAS)8ymlJLc*;il}C^2 zz?Py-$B+Mb#!%oLvB@eXgxKd1+gC$SBq`kf9&HQjQih)zR#|K%s@69u32RF`nQD~t z?43(*n^eVb&Nc6)NM|Q?Y^0j@uY{3As!<$sN*_7Dr=nxmuML?GU)x%ig;9x$Xy0 zt(xga6e8n3%G~(Q)xd+3RQpe06n@Iz`aXFilJLQsEs)=AyLzj$+Fg5==J$7U53i{b z@+U6Q-sD5nQJ%#ui!C)wIm;^-AGnW(x0Gcdsi(iBd!=~v&jFC3ob2h>)=9Ao%h}u z%)62UtRwt_fO{PNKzOI52#}-Yl)T^=A!)^J-zl!mWHl!_=@ST20rDu-^|j}_)gZeW zmTMkm=x2Ww6_2>tX~2JBK-0|QoKNJfHN@mjqH;k2Gnn~oN$T0Jf3)&p5BCL+9VJO; z*8H+DtVuW}Njm80&Q8xYzW%Obzx#>*pZN7yvM({JcOxy~@@Al)8Yqyd6OeIzoqltA zaMJyZ%64R#QDAHMpX1w0?`5~;{sMiA1a+!QSOdKGe*kkpjKA^EWPl71X%3LvPzCHE zUY7WVFkm^8<33|QaQX;Lt2g)5aM%c8ibw6ktD!&hQ8}PG|E6D@_)o;0c z)DQyc4mmv>jxOEB?qu+J*OTEtq3xeyQIOnq;BkGFGaXaryVR@h*r)?|ABas)*6>&L zU+N)0s)k_z1z=SG;e&jBAfxa4L(j(%dq@_D2dxX7as(<4&}`8g&|tx@O-MPaO9cZj z6c9NZ4pcU?4DO*m*5lFHA0&+bzdLxfkMOEiNJn0zqhNPu(s1lY;zqr?^yT?U>i?gg z63)Q?eH57z(9xAsg8wGSi?oLl5PFWG}lmS zjwIPcNw7If!)^}D{iyuU>DGV+*Z^e$bgL-g00;mwf5!a-{7c9$5*Gc4{s*)Hr?`xk zYrzF_*w5B-4Um2U`Cqc1E%#HE1TKHb)pMx`YJ6VTvzayo>!p?dXcCeaz}Q>;$N{)t z8xq@?exuAyLY+Z;8fp3D-l1rtRl zp|nNZg04gCZIK2@%poL^7bMak5il-L@=me+`|nr!bu?Rv-q%;GN|nRCsLVUG13w^7 z(N;(dTfmi$vIX!2BoGB8G&=PsX`s{R<3p>CD-k-pUYIN)u;rROGmBK@IbeSIN3c=H z%m;`7J!Ap9unfPWw>sC&K%l?U)DFXUJH=z1VcqU5wNzB!I&@PB&3E7_;W-r)a#`MQ4A*7Yoy)^EiMY$?c=zzXhGY!QKq ztlh{M7L``9M!eb!+sK6>pi-3!cMJEkn6T~rEVsy~*qJ#$%Xad1!%MFJ$Vp!CIcH|h zob$7tU~UAccf$a-Nsw!ZMG5@taDY_6WT^{(;=O$x5D=Oe`U}b#wS6Y~G*i&+5Eyc#jw5Bb|0B|w{NeOrJOWPhih-dlcYD3|do< z^&N>~riB=0 zNG~Zsx8EiGpUdZ`p=g z2gW^lJS1;D6lX*9f&gX+X87yR(speZ@*^L|-s8Sr?@C*AxIl14eE47BxNx9UgA8D; ze-ePTTlp<#F{=O5+H;2qiug<5U)!lY&imU2uR2uF6A3^T2&wmj0`O5_5@fX83qT0M zaX?4lI6eg9=a7CNRQVT_{$O@^n-Kua*aeuO=%-WW0Nf}?6_G%izTsY0R%w+kxL{~@ zn3ctTkpUXi#lGC{S=TZ`{yJSS?$d?^PtLf1))m6*(y$$FmU@PXnF8pcSuwH@$XN~a zUQ+=adiCV<*4d}y_v+=Lt52x`@hVFWBYIbGseqzV+d}~i5SB<1fc0!GP=^5gCp-W$ z*j^gpeWnj8i$&H5{1?^+q;Ei8r8K>s0aVJ~EMo%m&`~=>Yx0&l)vV)2eqfuE1~95s z@C#cT$mO7T7Js4*QsM`|fG9w#cjYOGY$u>JFINAh&-F1hlPyi;2SM;z=D`U%$F(CA z9_{r+A~?6e4MYKw3AHd}d2R8XqtkL2)nUNB4}*ZF{AunN(Tgj6Cn@&i9yU1~Sto%( z4}=o^)Qgy%bWLy2pL(S!1-;6@Bt!EnnqBE(R&W{JGlJ-55x$)|cAo|A7Y=`2G4TC7 zf;+9?Zq7Kl^$G4)l=D{qR{(&YF8UG3V{QX934qa`BzGqiCFaq-B>+wZL^?pUm7X7J zJ=o(u?PNGG%`FT1yU_uB|HuqG{9)GfPoyAvH2pp4JU;F0mIR=d-}-g1`MzHLer#BT z_9+SwTGOARUmkkA4S)dTAB@MU`-gCrgB|=f$JgIx^aD<-mpmrnp8*8qqYANKP4alg zp8p4KvLBcq_+P4|QAO!&JQ|H>F!WLzABq`b-H}GDaIFp)*lobQk-DTaAbJ~opW`of0XD_1VQP{`f%1Qi?=4Sp zL;MaRQ_%Ups&&F=tzU$OMT(2k0}2TS!2Td0N1Yj>tsnA8<9RUtj}ImUdIOpMQua-s zXw=ud_=)8@(b3 zsXX$N`EKxk?Yp?Ys(#L&s8Ba4K%IafehqBp2jRcxQU8mB@f-m^CO8-an>@4N z6K#O(kK^YM+3NW>T$N8}qnQ^n^z#_>pnR#~ieA7&I+_s&2n^64h`JBHU*;9}0B%4K za)uMgL0y%j5klm+09x2DHuS~O8@xf`BU!I`W;x#amz}&lT&P(z4Vz^dU)7i>Na&B? z$34U}NWf)BZZ7GK^gff;CQlH+g45$rsf*?pC_X|FydDYWc--3VAyNd!BU$^78X!{B zkrn|kffYLzY~R(*<=2H-g}r;48Dw0jSMm#6Cy*Hf$&0>59SU5EH58-)WDNikG#?i> z1Gs5y_Yo-%TcflJa~U{jQLR&faBl@lLlKbi?T&7D9C8Xqn%R>9K1GR&Rl_vf42ir&R;trq?bHETaaGS`!~CQ!G>XBfGR$80c6n>Pama6@c=lnDrElfAKs7w*r7bXzopdFqk?B8ut zl=CgUK3hD(pW|}Px3we2)QM~^_>Hr2W#fYK z0cW*q|5LrJ$y5sJp>{MVk_&&3+gw^G2d%7ONHg&2$hm=(hXZ8kCUvb6Hb|e;;YV~o z5rDVOJbMxxr!{~+k;Ly#KG*+s(&Omu1u1xEQTIEp1wAiMowfJ6h!j8t_l(QCGYa{+ z(^DtS??mU`cO!uj+X1~n1~U5h-rPVZ=LY7J@7DD{nYh+Te^vXISN+d8KaCCM zCbqQ0^x@xDh+4mJkOOW`!n;!j2ED+)>k$qQKZN`vJNPgVoA&i|ZlG|5=j{IWZ^%X7p?QDV{Ws@70KlKA{(JMe$HxMCfsmDQ>H|b5>_swDD2`Y}0Fbul|+ zDeg@<;j-A9W9V%U@XyXbO`6QMSeY_Xx2S-Jbb*q7Y&P|ejEy@4F`{3(on&_!g|h5N zx+qZn({f=J-e$XHb-gs(zg)~YeB5eFK!akOA@nz_s7E^!tkINlQC$AA$yUS%GUaZ# zQJ~muDbuG_#_nUij>yUgXoD>cefZU z68Bdd|J*yLkn180*DQ_l+mInQne^fSk(2+;80hz!3F;lIxBlSri#hNn1l~6bZtB3$ zD;#_Sk6J+V%|jUZ|F4bs2nIesY34B}gk_Uf^piW?ajeq?Zt^#CB zPXIjd9#p`m>)P_6SK%2F@O&HP5vli|Q14%91ys#XtlQ5{K+7}`m;=b=3Z$B~%>G_D z_7vu^r_TR83}1tJ{5+56IiHjwnCD;tGh~4HPbm4|{dnaJ<-eNzI|i+vRbU9!As@X| zzz35161RZQ5k1zyexWgVC z001BWNklT+TioDRaUQ6Y$;04j}6_0=x&0h!DOg z=I`gilwHs2jq>I7pqUm*GN;w}5|BTdn{Ae~AdTsEP)5(<60=5c!yaY6W z^A23=K1TxRkpMWRb6Q5<(6M4qa3}ovuw(!4uw&SpSTl5F2Vt?FE$mA-m$MEAalo+Ra5WaWBLerw3_ct=c-0Tge&`3C z2U0Nm8_A&aKel5xlCb&D_dx$=*Q78wg6xn4#xixk*os{n2ezI1PoB{-V>PGhZ@d_@ zp)VUa#0^gm2btUe#KQW8;`Mhh0AKNKoW+x!^)v8S((ixcC_QAQ=7o~gp%%vYBf$8Mgi@gbm!t;FU1N~N+c14OyIs zb3j=~U2iwGna^v|&fRd_S9{n9yD(^`3e+}R2RMCZS;DgcY?j|Y(hQ8vi- z;BlD!+mgnw?;y&-y-fj&+0{q*&OYdIIbd@u z`Oe+Az@E<1TocY@#n zdTj{V?1%vGqdAy6^bS_nx#82JZ_#xcz+A9$+|^>`iny0)0QbOyobTZR`Gkk@y7H8? z`&i?_4Jhij)4uUa2mo0BD@S~M#_Im?vGTl_!bE(=W5j$Nc=JCI|9I&<4nX}W7>d_f z{i3t=^90afn#Ie&ClXj@OHhP5SY~toq}UPgvwB%6wbptR_))?pp-#TyU|9#m>nOX` zNe2p*KZrj|lsUj;gj-mgvJ4nMZ$h>KILI^H8>+sL5Nd@msu(pR)LNaJBn)d(iKsz{ zCpoU!fXhR`_)tu@(;{V=#Y?E~qp&C8s(r5k;1v~osLrO_Qt*eUHGue(`?B4@3Qx%n z*#{MX5eaz&B*6Z@*4;<9#XC`^%Z|N!P?WOJh~c8)RVlkpGDI|~O2m1jz|cANuoMWRbTg1Q$~0Nt`x_BLigzqy_nhEa5)r2Vv0CavO??Z z_&31s9>}~^{@I-3$Ow_(U||IadmHrjMFY_o$j0n)3i9l> zFLdW8et+QD_1NJb1A+%3k@LfTczEQ;is5YWFgYBc!2Vn0JbdrXLwF%4{*DI#FhGFC zZ4+r&xZYSD=heoCDZsV>C?I&com%q4w`}Yz?$?%u3@{JyaIs;#|83!Nw9je(4j)Vd zyt(IERB&DMcVFE%wgCVPUTO333fS+BQUASXQU1E3{wHkk{%|MWcrsZ&YejFa@m6Pp9w{ya2J2@ase@HCYnBIs=vrKAttEP8jg#j%|Pv z_c@helz@5zC{%?8%=k#l4+A*BxnKucklAj1@xg{3A{a0nci-a9R2oFh`x&o20}7O# zQ0^$t>RM$SDR5&+p)w;k;3_=zAQ5EhGD9?FZnkF>b)>SQ19T~=GGHUpm@Uago)Lz0 z<(B>*$Op(1=#HtSG~Oa zUb01p^6zr+FWx_`h<*<&Nt@lF1*~o*+Q|`Gsqa>UBAJ922TB7-5Dx9JMfkQ91v#wv zt)1H0BF%b#oDB{^3|`8Dc`FI+qm>WH^X%$f4gxt^D>3|cLy4^zZP%#Z7ecaInDL0P)Uw_}Uh@Rr(uVxK|e3cM4|zXYJ6=^SR%6 zbrHmuvB&_&k^&fwa`Nu2k#CKe=<4Cz4*C;6(4nUrwPO znTjNVNnrZ?%86g>#mo_LJfBeVgE(IXKnJg!5oBu`0S7@miT%%b#09~u_SdrUtAE#{ zst2-P`npDN))gBBUsa~F=u6d^PEVh)A0{efG}i#qRd`ZgX{LMAL}1b;?#nGpb=RQG zYE}Hj%1xzkVKiuT^+j8a2oVIv{EL&d0xY@C3AfV{zGEv0WpOrjpKi~cc~2vN8{8cCCd4=C z`!?+fEXo8VpN)QS7GqGZO~Gy;_(>Fo$Q==weg}rHxHOmofw0}5H$o3g-%~df*T2=5 z{XbR%yQn%Zc}_4Df<}-?^28P(&xn!kITb&Mafboy$eu`xkDW}WTg3K}SiiMXCvK2P z^(O|9KdkS&V=J6s1_&TS#oh6^XAeO-0nSkC*>K>7pl$ZIR_QAvyu;uJX7_sc!wI2# z3+gv)2TF(wJXnZHfUG6XEHZGU)haRgm{+-7LSQxc1Zvts$M+Z*@X^a%=jO_-HsW!NsR`7cK6ZM z7lnH~SaJ>r6j&<(7Jk>cxt3W7u#!WEdA9g!LAa05-tm*TpI=uZ6SgK_w#yI9&pAIX zCuI67ar_u_$WICI>y*pC-t(UxTLtsrnW+BNb)Tmbnt=EjDnGD$;Q34BiGLs&1bEeQ zN-MAcP~IPLn_(IIrx(o~f$TFFWpTJ(BRTY{T5};FtWrESjeSJ}p(?G!?<$VhrLNPo zj8&>k6`=a5bXy>VdQ|&Rvnv?ufir`^pFhr9O5&0x@1roQn*N(W~1j>QW?u>UK1?3SE zi|_%S@q@Dcft#UbBWR<(JfBULvF}&bI!{GDoM-@dqjH@f)qyG~s(TQ@%yC+Uvhbtx zBJVlZ2dbyuK=m9of<;iZppk}5j#Qd34~R540h>TRzz^6b>WOroMFhd@IN2q$JqPKc!|%fqH7QUEExMZ+ypD-TlNwS*@ac?`d88x&>n2qTuzD`@v{{ z+@I9e7v;8QM4+^95L<6JQ_~c2S+)%EqEzOvP4O#qz8`6Fjazo{TgJ91d#WtcCjMDx z*&Sh<=9~}~sR)8`w3n)EI8@INfoV#VQ4(;(Bre6VK^ec>iQ2zuifyZrn(DIr0Yr~5 zM2uHu1BhRWkI4?FIl}gU?7-0>`+eo^RFx?k4=qW}CwzXPfNe;6M!IMdsw0tYQt}fD zK>pT{{X^a$rN{&;Ep?9CBy3z1L=_=k)LJ)Vz5vj(@5lcHr1#it=5v`W0{YBhA7TG- zu#S@_1reOP3+Ju{K-3PbfT(|^PnZA*(uF!x@3T+?c=1(`{`%Ki%tO|*Zp}E^#M0b< zy{vo6Pe*c@cMd_9fdeE?f$K}(=B!)U(#-zuX~w5XI|2s|L>tZ z8x{))*KyDbK1~Kc^$b7lA6>|ssz(BptwaZ}9i8uGMb2q6HWr zzymrAwZ^~f;OY>7&3D=JhZ4Xd*th3H<9{wcrN6%sF&_#2xH-z20lNDf-M$BayNGp} z_aWG261cI%;$vYERTo9;+z&eRD=OcC6ns?g?cI#_`+Q|01XXPE(c!MMU4`H{#WVo`@V=M3?KVc_ zm2ZtgC|634@-0AlR%NA1j1!eVVpZ?*_EeF8lvSwcIg-O^e9$D;lG}qIkJC)6!;hvZ zQ(%VOe}F(#iX_wKQL8e%r+MQ*zd?CX6txLduB#I(61F7pry^lAC^jmj9dse$iyKPU3j6Z8LQv4!GU) zmb@z_0I2{t0X)90kMmc=GkLvpiFUyS=QA(h+dWfm)?t1ohO@_MKTmZw{{aQWTjtt# z2v7^WA|uF?bO}GtWNkR>0XmAVyXnDf*aC()KM#98#73yM5)j2tZv=D^7jZfD<~>O0 z5W?(tPZsRxKfPtJ-J6N^V+YOwdL`kowXjnW4{G7{&?Nl4aC|mwCVSdExPC(XpOzDU z8XL@JPu0N(`p|=T$bSQSAp3ui@Q5X_CA?gD`r%eQq!M@j=W4EgQqL`6IQz-(v*vxs z+r7K+#_nEoJZ`=)zH!I;E_J`_9i`vb)B5qiI(7|7cd{X$mw~+rt<7RV>Oa!KVuFI- zosOr#5Yxm1*q?Z;1%v>!_~vkgzh-D$w5qG)gl{a6|Id6Mtbu` zml2d0oD!fOV8H9B&ZURaCZ=T@Ff&LH;wG*DA;!*3ZdiH#xKi$6TifsE+fABpS*#BZi`k)rg9(;gVp8$rn z!owmV;&68J8Or?}|A}ebD-u6sjot;I>jBD6VQvYw2Ieu#3FZK#_-^t~Aun}6gaHh4 zKmmmOcS|1N6Fkq7S>Vxgj~k2PJ{<9Ul2SjE1K$>|xA?yJIuU*!DS(r3?7GR{UN{ZD zx>Nyun|R-XWI9G}m^jW~ZZiJL5celxvNXZUB$LoFPGG#yUrvK?l}CG%_-2(PE<1j; zrL{p~2$G-vNXLOOPO`dd6K&%>DhkFznIlVVRpR;gss=7jv>W)0Ja)<&a(Zf@c1N4K zMrD0hS{Zfk1P7?2>w_8@Q*7&~i2b}X3VGw~AF=J%EEw|CB+8GsRRkQ4qd2(dWtEBp z34(m5f~Yy@2sOW|qTLHyY*ECCWWx4flk4*3rD$XJAnUj-jm8mPo!)k7p%dlk;tgl> zsd?E|Z>P8aZKF0!0GmQ}39H-(!LafIi2f@A=UKzdQ8Q1}>R zth6P=dfQ}V{N4aIc9a_BH&FxSr#7#O?J3ueZ;C7?LKJH#b^=BE!;zjO0Q+^Q{6*q- zewFm#4qIz_Cm9BPHwa`?;B_r$zI+_tAtnJ=cJ|M}2o$TV8N6M?P(uDFV+1OKX%~7G zF=3Yq`oq3!1;|LS>ki0@F-nK!%0-xfee{YN_%cijFFhSVsK5_XfPM(jF@^1Z-Oyvp zsQqERko^?m>py6M{VP9^3hWP~f+ypl*|YPA{Yij4Y##dv0XAI^pr7J>URm(IvTRs2 z)Gr&GfBD|E07)XU?Jfh%xne~0f6N9)i+w-$$VMX`@R2K_?{0tugn)cLcJe;U!}Ex4 zCWCN6766$*3zq(<2NrDV(+4E{HbxF0%3sjRU`lFWl8h&l$%4(y>DOhj3@sG&0P?G4 z7zQ_glsHbZ)M1kRv)QI_SUZEVmB9A}%lSo13|bQBKWm`pg-OzxM!XZFVGfJNHg~*C_o8;HGTABwEpA)02TTcN*^0C z9{$hb1|S=IS<5w4zEtS9>!m@E-*=p~jj1020LOReCC|_XP~g*RiP+oD*8bve2^Ua> z7lj~tFD=veLkfGs@}ZZAa3S5G!8MSB@C6Zw@Q@HbPQv0Kox*oqk6!DBeIuplvc@ln z5fC4c-omqsLuiXKC=$`c@saR^?*$c=buTpFDinyYfqpL?(|XLStZ+OLRd668u zet>LfBh!8AyHQ+Xuoy_!_6`fNiK0^!$TY3?QT=`RD;xfKd#mD}5Im$gi$%<$U%~)c zDUaXwr)b!ZDY5PP?R)%vpAX-20_~KInv7lwOh}gIwS=4EsH0j=COk>l@pSGRp(l zfuVgVWCwRxN(^kvKwu{#22;m1ae$!fMj|XZ!3z0F)p2?&z)ohW>Mi?97-0P@`8%rz zDYT7SxkvNw^{V=SJQ_StbO1v_3V8mVWkApcar!u4)#@(2aD`04AYlczfE;kWvI>yC zGrNQ#xZCSRZ5D8w;4+^VWcZ*g#ZmAT&sUMpQ$uAV#O4CZL4bRUt6MYSesy@dQmW6V z4%OP=?zdRr_gUah^6#DlkI6&-kS|v6HjQQ}!Rmwe&>ZNudrS}JgR9?u=|3FT@wgc@_G-vJv8?C zF}7Qqs{1o$|F+>E{&A@s7{M^a7te;)*U$_{{ISFekmrVGs9A1NgobB2jwL)n&|V1l z;1RHOlZCK_{LjDEn&TJ3KlCmP0uQFpd`b*OPx+xC^d7lQ5MtxUD>6T5cg@+7z3C z5dEnt!i6xx!zQhVeR?7;ouQi2x1ieI1^Z!7F*l}hKrp1saO-D}J$@L0*G-bvd9aa0 z-O>I(2Jj2XhFErHPwd0ooPx197Ab-AJb;maw7OysaY5Wk zEHb1i=6vZ^mXt#RIZ|#Ra6fh(0Tj#^;qH@_xv7aUBcL)+tOs3D_)TBFOFF#e2B|W#0HW4&#(iurc*K84zTDA0c@a(zkP%GtN}JS+*LOKN`WgrxpMvA zy>jJ83gD;sC5ryT3-HVvgIv}574%@sD1rBlE@vGS0ow*wY!7pPj4{CZr_O!>lP8#} zyI&XARby~IR&+-N4{L*~Uz`N)_l<7n zQg!_|M@i>ZgE<%M=7Heq@x1BBje>b6`QAR59mifCPnv7fV!x*1db$Ddq879*p7r6g zmcf9fnmp+K=^XB=?bF`WL$CIW)}k3`!6j6+0#FRlA@G-LIDf1SzCpTN65W5sE)ZdU z%kbBf9+t-X2@gE6`=_lrrvGny?P2SmzWRx1r!UL}5&h4eX7{L2o<|vh*ttWwpzy@s zru4&wClA6{JH1PgKsJXT$s&X`s8t+HiglO1Fe%c;{Xrp{9}KaGPPJz(Ld{IZDm`UE zpXOsfL_yyKN8uY`vgZw*w2t4Z`rz53Pbp0dHF4=MkwsMX-X`9-L7k2i8C380B{6AP z;3OGQjV9|Ul;KYtG{>rrkb4&8TSYYBSOrZwQuGekTFwbQ6zR4PTn~zY&FPeO=CL}a z5DsN>Opkt1eIL-1E3=_arF3Q15SLGe{H+>F8OxGS7@lAbKomcqTodti#7stc5#)80 zb(lRAa+HK4@JAWPI*qDR5XTXbh9D#iBnVNI74{nQ>Lfa-tSmwVh0QnF#<5Jtu^WjF zm2v#Z(kF1gt)gj-}Z{9=T*_4 zP84AzI6ZbdCwRFn4(#qXizokp85F2y;(SnOG7^~9hVL!IM-FjE3X{0#E+|~R-zd5# ziQR{6@hBsHccYmj`>sWPkPul@^sh8l6sX%D>b_%(+K&$u@UZ;@y@ywTW~m=3QiaCU zzvU+2)YRcLFl`}W&DXZp6!XT~vLO*bsfQ2%te(g|Is%6MY-{$@8YzM@195!^5`TK^ z*-8j~Yc`!dajQ`S^Q;f(uOh!6;!vb2+wEqyju)WSw*Kb>nQx|Z&3!nFv>4oF~U(euHw!QyF904 z^i~roKUK$oFg@H3%P}J+u+NHW$U2!z84rIACpD;Ra%?;QH^@W>jFF{rmC1ZVnWyWr zn*Mx*N=Bjp15C$&SBOf)QjQ%&j?froW1PukWAfeAFr)7YiIpt2UAG-SQEZ+KKmfbl zZQCC9 znXU#;M}(C>5GM$J@Nzpcberwz50?pdtNXFS-97r}G2jdd=2(A71-oA$|6>bb_c73S z?L13v{gcDWZ%o4u^@rUYXjON_?u)DfcZ5v}#ZdILo&$*w{QX=zY z97kI?Ra!d2ff}efpj;J|l3iCqdH}173UpD_le(O_L^kL; z03|764eEYQ^&o?!PPR@;fwV|F>AB43B83lELPY08>bQh9!4tLCGMVQzxp2g9NlGY+ z`GUJ_kS(~!<^7T_I+HndC!b++-rtw>JVfCno}JT+g=um=OD3}|}#uq3n?yeMgrdRY!Hq23Bh zrH}?WNtAr~#mt?eo40;^W2_rzz>prV9>I6yv>thW3Inn&fZMm{)UoH!V1(cnn)LwasGBr8DGNc+D`)Q=L1CI)adH{40I z&KBmfL9=IUEfzFk0V5yGD)OBv5m=WK?$)&55BI-D4tKlzuF*%{;3tf)txNY4r;i{% zeb{%p|EYxFM+~617wbic0bG*h}xT;9v)s37Z&u=}>o2-vMQpyyNl-d%?>@l`+v z_U1)vB!|A~ce^v?d_Bec9|;^|33|@)^H6Z}oXwL+@mu8ZAK=Y1y{WRFrhNg+_6E#= za{JW$_Y}g_`=I{^H+*`ga$o-?eD*0K_(HV-pEmHnxc7vAbi8M22bnn9T3eY6!yt45 z;M!^a7i8h!IFq)5C;P=ZiYyb*1DT)#0Ub1AP+62YB1$GJn@X$AE%4l<18uvpn;han z1VyXcq;p_Yv@P3MMO7jX+pJ6LQd(2oMZ)`4NNGuU+v1XRWg1&D%g>iGO6!#R5TL6w zr|o7{LaGD!!!4pP+faW=B7dqt?x)wt%8Dv4^wQ0>8az;k*EwnN-zcZ9C_5cPd)&f& zE>&>`l0n?%IZt16SS^~_0sBzC7O8gGwd*LYB4D(f=RZjf3`@}hkvVKa>{Jl!X*$2s zBqFM1eub%WV7B4`>OoO<@m$@8vZAUU30*`EeW09R4pUPU(XbsX`2Vz^yhOez4)~>1 zzXU#n1DR59P+3R6tnoeivPYgO`v~`Y1Z&a-JMVs;u6J%*8+}^4WCIBl6~6 zf3-PU&>P!uWdX645{#S&AcX+s&k+JMHR#)w+YR9BDNxA02jhJ^AQ1%O5Zr&f8wu7| zBM#{0`*pymk@u#4Xk9U~Gkb*B4Th$i$V?bnM~6T7{~82bdHe@hC>_-ylX z5AXTF^ZvZ&4Yl`qyy^=Iz=jdx15BQpoTaK)8nR{Y~=}L{nzl(g7dH8r}*tbx;IDprp$65+{x$bd$luHDALg z>1rXIBh1O9<1Ub1_T76q2H?F#5eVppc9QN<=U<{Qu2tw;Q>AnaNKKO?wxXih9h6bX z^bmv3!)wx%Z%H}H?}JLJziUYR@(3bNdvp?Cgz}{-j=*;yU3v(2}zRET12V}Cc!Y*MOtUl4HuOc#XF#_NafRRr6JU` z^q?pPUIs!UNlMSf2^a-10Q{m!(vK_v4Idz!+H2sCje$$h{l+l@N)>o~`YQXvFmg>Xvjn~ZlZDkFP(cxke;Ok)QY4V(2wYDl=|G(c%q2)QnApLI zI}AqCD!{vOt{e=cP#*5zOvACM9zLxzMGex)>+gAj@ty?5T5!Bh9W^b4D>Jx<239bC zyuIW7K>|+q=)hy>*!{)(kB|HN1ql8pM*ivU=U069rX737rhw-y8DqiPzBl#RcT+&F zzvnJZj^ddTF5}tv?mA6$_ZTYX_TIx1nB+c_f2!^6ZFc1};p4!yJl>X#KJE89Y1(yHpTk0q?$O5VaZk%H@mCkpkk>SQk0?TS?4#3nxAPhoR z6Xb!Knk;iHJpJ9XpZ`t6Ml9j9f5657$#GP57Je46Y}J5adnv0ly1)bKc$$EA{kv?o zIua6~kMk<-%CblXC+n7>n_8M2K4}@J$xzIb70=aNrkBA{ZPwO0PlxjL9EoX(WYkS% zHg(-h%T1H|tgQIU8BD{)nW_~Q1cA!)^DMf#9Fk#K@-Oi6=Q*8|vUa!A6e_6nOFmbr zyg?YimfQf%c+joEC`~C+Ic!bV(xm^}AhY3iyOq_2x_{oQlGc5w93(}B&hd7`JE#cp zQZ3*CFVdlr%diGC0C}M|;;J>QRG#SYW%%U>%<-pXn~)wkZupBU!Mr!#os_-ZQ*O{U zv>*OseDjR=r!WGg21a(_fHtXyYrl$s(IZ_k8qUCHPo{W~vxmkEoUY&4!{dIfDZZNC zV73*eaELK9{X4BaoXxh3nuE-a>Zer`Oejrq$q4WB73Nr~Ag? z)7!`O!;gm_QU^cC!N+&sjmntN_pb8lZO4HJZnY%db{`dA*b_+-kURro>O`uft^}+x88=T`G_Kf-~|x+ zhYckEVdL>CFWVftVEq2pwm*mACqVxh#Q!sQ|H4k#?$d@kfINaUkNd@+W3UNdBoPb1 z{h4ftFEZQzE!2MK!w*?fHW>gtNXNAy=52v5X~DN^xP5DDMaRbT2=_L&t%TZZU zcW{ILG|?Ij72RkKM+^fKSMo-6dv&a(2=a4URx#DooU7t}u5L>-oL?`KqR|}X`BLMG zGxS2NIw_}83F^74DwrH6yQxx&^6!m(aES^`e9oc z1q?EQxr(koXphAIfKpUY)vNXP)Lc zi9_JpNvkcxxR?~_`GQbp^~8Ofx)zoX%B()XnNeY9cjtMXVLu@j(Ih-QW& zl|QY)(pmF&CgBHwgXO#Yo%}p|ZMG923N1on5OVoMwFV%Pow0mt)g$HqnB=J%0HJ@YRP`&8I9`;41;?ecJ z6?yc>fZoSjaz}t5{@23w0$b3thpgZ8cD-6Wcws0UVhQIUh*c1u#fzT?)?*kr&NCSf zMe09wq*C5zx@DJN72W0MI21mqXghwji2M#E=6@xDHiXf`1 z{6ud!qLo;&i(mXuM|q;vsk|Nz^rm}BtI$N4ymL9KzAn+fRPIAsG33LF{^5N&Xl&xc z1|TvBR_NTKzT_qAnxf5<2Yrs3=Y(HLw9$$QOOqWbtK@6h~q;>Nkyf zZVD2Ba1FR)5{_CGtRPg;qqJ7NA7G3X}YPog3-#e=K|y2;(PJgSHzlw4ViCd3==MMPd7 z9gAA7L*~@N#)J?zC`OoP4g8pay_ubVcJt;_o?$b4^$#Rq_WXvF@al%U9~#FFInI|1 z!smu5o91?^nbvWQB_FsSjKV$3()=UtZ%31G_(s+}K+S&$mLGBsv{@7Ve|x*|vr1pD<9?l6=1BdrG8sOp^Pnvy3tJCv?s# zNMrGoK8KG;_gN|saq2Cd>TC%|^;V5$AeFQRL3ALBHOU0RxHt!%NYZb9`faCldQPkK zK!O+k-1nDm7+X5F0^9fdq!!Dc!>S5|XA!^Gn=*HNE9Q2?U=ej9{ShA`;jO)QH&kjc%kHohJfODyo{q&Xf!wR zgW#;3tVs=i%zN_*!to zF3!=ThQDz?VRt`ie!@5*{z)uh6>Qg|mw9;MGuer?{k$OBUJ`_^$ zD&O^A&kxI=Nz|v&Id#M;e#J=f*FpGXGD4@8kg=!K70y6HB2dvlmmFcGp^`~bkuGqn zd|xF&Z9$-rEQ!OYj#8?GZ5Nwy%r z=Kbkf(aKQBYaQ(iq0fS7KuL5&M0@PaNs{`oPc9_0t1p_sACcA`kLe&I;^>&)rBBK3 zASx8_$wP6iRFYqc7~@Z)K$P#rKGNbe_OY$8Nnm$;Kax)PwM4f;q8eqn$BrON)z_pN z$6=&*uj?XOuXH%_T!G(n9i7k@Xm>hdR#1Rc!y1(Y5#}3W(-6k7>GjKMJYrrVHWE%?Kz~bOd>LvQ_Dl9crQgC&1KMJI#mHe-#G3r*&fTU} zWYO!BFF{-oVgAn-nH`SP|KI%ypMA+8YA0BESE7QUk8PZk4P!xt8Y3y{+x zp97F@yCv+&a@pYVuhvuy zG(4e%kFg9@1;i14U;!Zg!}KyU`9;GRHk%31ZwB>zshNoW4f)xdxiTdtv$<{B)G`65 zY||^PotZ#uo;la?!MV2|>HmMZx_aG6l_h+AHOG5^xkzq)q;3Kl%|?gFEfJt4VJ}IC zgS0{{P9ZvS2P3UD;f)+jhQzZV9^}4)pW{|lGhXRhV|joEj|RS~@2jq=M$N^T(i}C$yj5MHljWIv_8Z1JV5m;#`17^Za)R-j=Y`jB>Hh53-}_u zqhadf+<=D#{rEcgI1Yn@o?^`P;CRfG11JuU$y4Mf-UGl^kerCYG@#iKPhc>V?+Uo^ z@liNP|D%Y1;bE3#6ajDo5yx5l&jF}J;?u*R__p*_v*h#@v|AoT}3~Z+k7*b>=7R1bj4? z5gWA0{$y|_(#%Oc%}IvsjbfkyxJ(Fk2X5NNF>gam`h13JTB274gj8$x9&CN%~`u z&voH3ByYa+cHBU0!;?kt=_px_-BMgFUqIBSsf(W9b?pIo_qX zO;8zF6qEk=Z4Ey0ZYhF2dc8aLJI&wi!{^THr@JR8lLGlo?+MxOKnfUUQ&K)XViAD16)Xn&p!fiWBXa`9vyh25QIGW!1V0=R z^U_&Fh$TFXgZjrFp@WmfdNHbGYEW>AKqRAzxd3Z`zVk~4!-gQ#W$u&;kpESdFItz1 zCnhVoDMzq9ivrAn)KHJH7)xZ&f#GFqWV7`mm<$J7A)-iN+kr%_U0>@#sdA~#APuT{ zo0bvRE@*M7VbK2ubO`VJkFJoVs!vm_o6G6cZyHp7(|ufIf+dZ~c4=hQ^rOP{$xP9% z=N_{M3b;Jz_`KJ{r7oJL*|0^B35-&qI-S?8UnS1|=}elcD+=B9=M_9YCintt$aS~& zX2upI*bZUS$z1hDgCRMe)iKeROEa0Ez*4~4!PGwx2}fa$M^)=}GliTtxh2n1KR+vA z0Fm|n5zX~j9%#{zZ*leqeK@{|{UeyuTZ&e|MfXj#Ax(Y6G;RYVT|~I+QM}nX2TNHfI&h_#13HnQ z3Zvimkm9|X*;i38&)cP4$Lz3;O?+kp*twK$&^QvFQZJTFvlAu}?8iolrs|pL8 zX49JQh67#6G5ts{wQ)>%jE?x3$4$1<%x$+7b@u(c`A5pgrQB6wYAHUldh}Ct09!m< z5!LW0F@Q4QH^nU%5$uvp0BE~3g!aRLE2Bd`z#q5Z&lS%_^8x#OA4CA2bn^&)$P@tk zDaI7QGJFOG?~KC65Ma!&8zBDX5nZ_1c%%(9kV%MaQF62w8d@ttdVnbZ?LX<>#*~7I zWD6*3`P;p*(QT&$SL?Fv``6D5MEI|}xcFW9Y^Nw`KJ#kfPja5IZ+4oL96p)U>mK*K z+Dt0qRFqj|-=@F_t~>2wcAgF$IAR>WZg#&x7Wi;$?m@iB2KEv4ulpwLu%h2a{Kz1r z*q9UT0owW~aecTUa0JKz=J(Ni=DQx~g%pH-6f!SVzygGDfi=Wm;LIci$>1lx7r~|6 zD1CzKJUpZ!aN9vX|5B+KMC@@dQ4e4da6yj* zgg#glunjy&vPq$4*N$^ke>iUoUtY9yfYxh}=tC*u@=c4u3A8CiHXfY?p6~39@yzK* z$H88rFhJLwmDmcPU+TVf{#2%Dlo$si^QKoNHu76UUP}S|V9|*KXfxGpx(gsqIbRnA zpDxHJsq5ur2IEen1XHwuh*-N-wrgF~#a~sAoq4q=uqt;vcXfX0*0#xIhYdPu?T$H7 zN!|5JemVbzy#xW`VBhoz8>ahN^lM&q;P|VqPjuU~d4oAXKYz-iLJ_ZPxnjrQI^VEx zr&jgand;w{GtPP@&q1Ztg!PQGk#&OxXa>nKN?iNYY+K!&=J^@fNWJCTERILHlHf284J4Yc}j&}_4zVGPZE5aMBob@F@il1*bE zR!_k?>+dPNNx;6Mho+baO_!2nO7Z&aGcadqmDN9Je*eeR73?^wW6`b_lP92rR0b?z zF92nBtjbarsM#Q8<5jDWN+^%slG!~kB6Ta@P`gNcOT>rtFZ6fJJ=dgWN?l2c7$*&! zbI-ZH*sNp(`*p^*$7_y1%j>4a_^=az!6bBCkZwV#jz_le$Odf5(_gs*-vy`eSXqTuk8K^-=g+evZE?0kPRR2EhP}NUi8*2g4PU*8I`QNtsDWvFcO|h#dqJSS( z5FpbOFn(`q&Z?zTtyJCHVzERkPDXX3vRkp>{(uEjg!Cl;^L8o}#ksVdDqHK__kO=D zhBO8#a;KJeG9m5K>?hT)2Qtv4?NxCm!yUF{BkWX#_Be-5^+y7WY4**u#2HI%_jVbT zF0`4xhwY4V`jz^_1U*B8)&1^!EJH%^dcSu%?c$LVzyJUs07*naR50N$!R>N9RX0ov zbQzq)s^(g}||Q1oriEx&M8n;IDBrK;InS zn)Ti|`Kh_VbXzZP$Jfj}_oOl^*Y^$+ z0nDZ;$Rg<1FLtPI!}@ybL-!>wJ+6JE=j*KGs|R2O3O9P-A>q{S6 z3h07hjH8Jt9~|+rdjZUuB9e_PqS!a%(ZZ5b1s@EI%>$G{5(fd4Mi57SB*H&Lun<3g zLK8$DNZ0HCYy(RMUt=J|$LCvI?eO7;DIQ}I8`!aEd1)R4aZV!=Y~NK zHsA&fa#jI;uhO4Tj{YSpI^K)d>cD0m_!mh6VgLt3L>|caB~plhxPgwXiOJswd61LF z$L)QR@J_#S7w4toyuR3#I+9V48JWpglgOvWrp)B75OJEzuTfg3dH63$LRzOn5}(YEK*#P*jmEvbNC6xdt(t(BQbA&?#@%etT|ezLM9l+OgowwS7gWJ}@F zlwS5{i!}*tb#9C<_OEBBQV>e*W}Ak3Z0+o%3r`f4TT9mbgf;rQu^B0P4_38%*AP7w z6#M6KxM0f8xp!CyxT4^l=}5yR420I>{aD!Byc%Q96;|gWb}(80J=6Ahx>-Z6NcY3q zT`uF_gS8p4iW|o94+(`9DMtMCYyZ}v0dMruGVK%2E02Q#eW zY>$^=b~nr^?s~Tmy94z#V5-roA`kJU2p+IqHpL&D77HVozGxP~7ELD2Sz z1_bEGT~F6c@Y8AA)Cn1?WT81Imz93}RN| z%)2D%8NR~PLC(xeo*h3CZp)R7eSnrbEpspGJ;td=oo|#8LBEsTkEm}MK{80lF4|vW zw?s-+N)-L%yI2$G;19GQHB4e4ivwwh9-^88`>wz!fOsZSh?U4np^{KKk`JcN>nMM+ z)QOQXq1X`Y74f$et`OpDDqUUI>S-#HyiQeZ!jN$3j8bhYp$Jr}3KiC^aqU!-;5Ujw zdR;GR_-@p+H29O0J-wt?nF*`uNlRSA6+w!m!oqTO8!@OJRoI&CUaBur*0+b;QAZ6h-cg!co{la0538j^L@Tw zeCm8$hEi@JJlP)0?E!B|iUJIJp8!BI5Gbd2g8;(b%l*V#g3TQG@W1sK2TT^gAO(Bm z1%n`Xp*`^jY{KU!2fJOIyu5%&hz&NF0`>uVyKboja95I)AM`OFJp34a<`Ge=jQXUQ zHn0Z2MxFvn-_OTqzCnD_z~c#io->VGXy>s{Jbm;00bcq5{x(M;kkA8`ubw!CpDDB4 zL>BPOsy^pTi4WqOQW51Qnv%~G!Rp=jf*BR zDB?g~BH4$=iD3I6xVJpQKmb%bQH!bZWsRy|h-g%-MO~NqQ!Q1bB2gGg8*4K4bY=}b ztGp)dEYqD)A)O>!M0_U@g>MKyI$kmpZoU1B(pIxK4Aq!L=a z*Sh_sa7_ZJ$-5j5C#NtK|8pIl z?tMYlgQ6+P|AoS=6AH_2_pbWBR_3-pTGg!8ct8HRAICpf9_*ZH(RXjXBT^Wg9WR&> zyld_aITeb&bvRJ_sySoO@9ofCoIM|%DY~=KSw6oFP1j_0JQ|&j7`1!roBMd95Pvvb z`i7Lj!CK7tMP}q?`u>3FKW$+m%ze>N_aIu=y0a=07*>$)O zk7ednV;)G%5Z3o!{79bH|328W&M$rF@l?RF{h{zd3Y)I?O2Etc*hg)^UP`YX;=t>D zb_v`#NPO^rK|1yM7izFiv5C zkU2%3{>pfNV4YuG%X}l%l2f7laszmT+S{u?=zNUnNwWSYc%$gW?q5#&!zbi28$z~Cw?1oiYVu8fQGi4dlA*?SVHM5kbsl=27GrV74i~Um!%Q;R|WjLx=s?@6e%J9KWJLu%bTU9CHxd_RYxl2juY#w+vz zExgly$`egowE53=m}J?sla^~w!}F|e`bTf|^r$asw~*7&jJL_Tp=mxJRPpPr{b(ji z#p{ha_l~~e(x5})wo^0unfQaQ@cZO!`L*c$w*9AXX+e(x4Q{Qb5kR52H*UPy)`zVD zy&2$pDTP zv>Tp-#P1Y?@t^6(V_m0&lUK zlq4C*D&QjtT$JQvljK9DQ4$ofw*sg0Uy&sgOqaMnB)?h|@ecBX|J%V%)l(ivmtSHW zdhP}0O*b^%>A)|(wdcqO^4)47MMVjlm_r^V81n&GIny})!kobp)K@^?q$S-k#DN#% zl#xP!h@C6hnREJ9fz4xo2ndjpLdh~yWpS<%6-uRQ!~rvx@{AY2=YvY2x|K9#SBI}h z@Rg*iq;)?fIQxwA*HGd$b^G_Xej4>kIA5jelDb0jK6k6cD~YvLe||hIee>b+v{XbCp8CJp0F~d-*gp*o29`=J@W3u;A+hIEE_#TE-a%q zfu{WGKWP!*g%%Yw#%%_e9NR5ar_~zjcZ}8`CUj#=qpIqS24IV~e+2#b40iA|M4&RC zy8n(dT^qEzZEk@|0*$9}zu*^}b&IoYsQR%F;3T1EDMh8g>dQ+nYTQ6^IcA&)<&BEK=@j5PgIE87k;sVi4dJQG#6f zQg^mO7Grjahx|&jC-2CjH}T{NobP|{-oi8e|B5js;+Y8s4Q^n(?nytg1VT3_^rtPF zvxp*!@DxyKJP#-8-B67zs^FV@iNJjZ4~jxuJ)wl263friSO6gIj`sj9FOc{nRS<;# zoO3uEC~O8Ge+%ktfuMlL8E8dQ22mj8&ir)xELWn=gvzNS0O8-9m6EAJ0FXJ61cVrs z9dlsbfch(hrb5()@MQq+^rfVDCY8wLF^BF2(uK;>xh&*c4Gs@hFWj+|iIOi4jTT2x z{3C)uT~Q&wlTsrPsJF`*yAo&bXihLFeB(I+Na$-}nzfT;4_gQd*V z-LC!g7+tpppxN~h@isV~r3do;a|`yN{ofm8;;GgB;|iG)?lk^aH!XGRxA#UGbL!Mw zzn`i!SL4`h0PgT_{aR6X0pNI;hHY8a!J5}sKS}itg+KI~W+9}$LxGII$1Uja?#z3j zg@1;I;swnT_P+Q>o4meTQWGtL94$GsEMG3sb!Ib&zD%U+MdSmQCs|EnO(1*Pa}lCX zLm+3PFK53lX8S`H;msh<{>l_+Gr*s-_Kz+>77f8X1_^#3$8fkfL~^kQ4#bQDxdv}& z{6NjT@veEk(}Of#03CJU0J9sE>0jOmz)qJH{R2*_JdQDCDnLD)8M0Y^*?T!$*q>lI zk^g>rqdQrmvyz{frm+T>M$qpvX)l8i&f}d;_b9|Hif*Ua8CJfVtYGFB>Zgad%2AjI zI^7-0{~ST0W&ma{WC7B(0q=SIoT%Gg&YoaOiJeIpKFDJKp-qbF^u+-*-xQRzOS%FI zFd1NMcw`=z|LPjY;u5Ii92f(Lys8UfjI7UR6F}XCe8YYT$Ucrhx|hO8DXGdQXgt5D z>k2|5p$$ddfm)caM^ltDf<=i}4cUD`{V?M4jg);U%hi~b`rVc5R66SJD?L(Gk1u+$ zuI|2S+jib4uaWSbLng0YW+x>00U()_Zgwj1LC%T1dhhR7b$*ey0bX_Q0!03G18;EG zyKWM<231zg>S)w4lCU4FYgIsw?;DRuWLpPZhC%!0bPk{z!?017$GL4g4Yy`OlU03B zZ2x&3AQEW6z|e1@{cQWO{bwD*x{j6U$8j3nwl-s^lmpwoTQkz!9u3V$`e+C4yF=A@ zykYy;wA(;udR*QDMqki!>5@hUFQNbMcSN7fc}M+>^@Lnb?4RcKrKO3MZKEPzu>E&{ zedO6dZ|zdilq4hz^m4y8lXc)LINr)|a+QAcy+)%;MOA?K5KQ~o^b@-W@GSdBy1MiD zSQ#K|knH5AK!^!BLYq;WGC#=pH6Zn=5eSm|zge^Zm`OxKfU|#$6^wG`8Ke(lB_Pdy zKU>M44niz0q@a+& zfnm2OXk*R=k^GMt8gu!xSQ@Q+)&c3RrSOZw0Gp`v9tFz*`V{i$pIoR^k4vTM8}o*W zxVng1LePCbi@b_&4Cxsy&`yw1fcOE_fOtAN{AmVM<3NKm*0rF|*5pJTxNj~A08!*c zPV;h_`lzVS9S`l1$o@##*dP*x0MLOPfV``eCh>uqFBMPYjb}zBwW&)$omTg(!4%F$ zy+~JMV<;8ae?8N1p~4)?a;DX{jp+b-uy*+kqyt3#M@{o=&j6%_Sij$WiQKFI$JDi~ zIF3WnX)tLV7lFiy!SbRcyws`$UKqSlu(RKCVy3fbI+&|Fx>g_o+ zuob?$_benzDW4AEzKuh}HUHpa23>vFhvm8m#q}Ag02LPp`*ijAwA-_~zI{LrPzW@@ zjlW(&9wHw%q#`z=mA0LBPwJjHxIZ&0?2>9{=^SiHo3;O!W$496ry*LRmK^wIvO9|aF`-8&C+_WoVF+>|Xoyp`w?6LA!?DlV`JBWGLpT$PkAM?FqGT}% z5ksF{IZByB5&zk<3A@30J^TL=^O!GE|1uB}6&e1g5SQ`#{2BHPaw-D^=6lHABNjvL z;Db#^j@x8p@GZY8laG`&QireKIrv$Wc z0p%p*z2*|O3m4`dHC#adxC0x?6ezTsX-+3!l&l3>w4Go+%GBkvYvCi-meqH?7&F&( zGcP6U_{xcS8%F0;a4<|TcJsE}<(9)VxS1mf9h`MD3*kHJedq*^JZej`J~S8{O6H<+ z-En!~=~t(PN8EJX-Er!W$%~uwDbxq(S2HdjW5*Jo66?z8Ks4g^*>ummTxUI4aDUxF znIkywjozyIF$~RCR_~>pWp!CN1re&H85`E}xn1gW=w^HYZgro-=iS49_|hTRpV0TZ zdA?Pq9atUcp(G&s&GpFzK}qqj18;_l1-p+b^&j4AXp`sAZ+HFn0VBihfyRdo;{b}d zjN2<`SL}&^J^jvXU%2VR>#_8=Gws({fj#D#=%*D3!L~L|s7i69dDGMJ&7QB?KIYU6L%=06f2(L@27nRXgbTvka0RhdLutFBz44mMFrx zU|>VrA46K60$hQNnYK?9<2Vr^hX!H$(ox3NnfvW^ziUrf`?*Zj6u61@C92Y2V!2XEM zaVV>b)jc`f{hP&U+RAO*>$hq?YYqi)rq&NxUCXU&p#7hA@;Cp4M1Z6)Vbjk6istI= zlWTzcCrpd2et7v&84LR#kY#dcSXbVI-Ur`75J_h_RA2)7{dj)hL;+RSRo9P-p1}PT zsf$_r00F0vLkjFv?D_sku<>TjBK3u*UrK!c3-3t!FZKXuRG(jwm&NFgAs4d*!O8Qh zIs>cog9^P!;<1ph2P^_Z9h5qMJNyXljQ$Y<*64$q@X= z{x{2Blb3clJDv7?;{MpR$1x-%qY&6}kAoSD<7Q2x$r&WGNK$r9*QsMQZUWOnmjXf zr8pk(AJx5348xr3@QCb0fS{!3VM_r{r}@XP?{E<*N9Hj~IdwPBL4;s&v`*n1+FTvM z+1%YDMf=hmQUn4JAm{4)lQZAw_sgFu&kJwB-en5h$-f(J{@c0|k2LqH<&GdY4|S}d zD1NquNmn(&8LS9PZ_0UTO+M>d&+}l@zu}ZkJHz6qd2Uu%+B$UzXUKtdPD{JMbWDqv zt6Pm^6%o)fkJII()=kbu{>wPKtmfLLrp`UEWzAFIhu&uCr`1X=Ef*E3=MD^PyE}LC zUb}JI5I}ir!*ss1--a$^*6i?r;pYh7(ZcIoae18P{NBMf_YV5SRql348|$y8gN*6C z5przA(%E5z?$@pD`mVmZdb2$Y`mk*PJHK)haBh~yHU9Mj7vXAtzj^7rvz2!c7eE+0 z^dS5y>}{<30RZAk&q<1%wEz|aXt3Lxx3X!PurM$bi_7&7`!uy({8K+UqPW-G)b$M( zfRq!(fBg36YRkKxF>I^3B-H0)Wy5LoA3V8_H>jJFt3#hxL2neQTs^p_7% z0X%>K&;kc?eHP1luW=5ANe108fPY6Z?i2@)hiYz(;p8uIi zim!5G9B!DLUVh?B)`Yi+bFpw4-_K%wgWBQ!rFnLV5U`^-MsSFcd3;5B2=m}TLe1@T zir=4(;ky95M-p?vFjUF$5>kK(r2#<96#Ps?9-P@xF?EM`E|>5tVJqqfLys2pwqiy9 z$X<+S7<(9h=I)K4OQ&0BDz6BfFAl%~PQhU_M0*C$j|bQvZXd7SxMN32!WZA$@&eD_ za<$H~%5ol8ur)9O_F!_~xayB!>_c=HP!l3gRT|d!R4YY?no3w^1zHwAVE`^7Z=qi* z!jm~4ukSZlZK9Dgx8xnCKK+D;7Q$uaq*%*9(PzYNuM*5@aqpvkxM} zuDP@j5p!;5Icwh{zU!GI1Z^)RR}<{kx%EOX_!yj5TA94*5qP;m>r(cEH;a49rK>mY z3dn`NACJe_;}vLxaj^CHcnnVW(n?5_QQHO@pdb?`hko@n%_LO~Ha!D|Eb=`kdUCnCiIu|{K5U?E#sau2PK_xQOr~(fR zp6KFY)QYLLNsk3gQK`0c*6w(RuW7SjCqCyle$UTf_wiHiej7xZw)0V*!6 z<|eE4G&|pLSc0Ad*gb^1pDbGp^=TO==MHhWjeZ%I_CNsOS|B=V=b?HIcZXByFAW{x zsQ|*;fs2Ev5SI8)#JgPD&%@{aS1K~SiUY9zq_1)6^V^=;I{1rJloz0oP!@(%U?Ud^ClJNPh+B}F1dEmF7tbmJmFUrsF&xP+hzMr4xd};h z>=LUeo-G8=NdKuSBvw#vfxmg1tFcieAtVr(e2ZiqCQ`8ppVXA_k^i(neEcw^)h=1_ zj+HwW7DQ?xZt1;CX&@IP0LZG;ioUfV22GZdZoMRTwPSpXA_vD(WH$wESzZIho4Pc$ z#4rz&e-uj41hlQLR8^IQ(}n*X%LK;sHP-+oF9|hJ zsA?cHUh&zsTnC_eZR_{fefj?GGOi2&snEV({+ETu&&prtEQ@`nGw*E%vJlkeg6Qrq zk4#$+K|d=Hc!&Y1(9b-xp1nT>X9v$YcgGQb^gM#3&mico2P{4;2)%CH2_gO%d;R#D z!|6Ia5KZ6X_}z84+sQIukzKp**3F#`F4$Jj=YOpo{di(LpC2a|5VWpWy5hh;KTYG{ zXNO2UhZ9-8^+@CMfS3fSh+_o*A1tUwJnJQk)!lZBWw8MXU3-X$vvc7Nbm6RC-Ca9r z^e55BLEF}APVk`t8L?e}M4Y)Wws@DEGW^boL%~e^Cl$uTW}tgGdv^%$Z}Fe@9%q0A zuw>%&VIlrnhm)k%pIRcn%d$3xU_ z*ivkULH_JgShr8E;#%%l`Ahk9GH_$k;eJX0`Ln^PPQ6cg@uM5o{>8P@u~~|>q<+#a zDU+1Dqr@m*Q|0Eh02stwE5x0}zgy&q=@YB*p$iGaS6G!b0v+kS0ga%JC=pnMj)qnp zfuW{0;H?M(LnA>EHVk$)Bn5nym3+rpw;FQ(T1-Fb^Ft6TCUiFTxEfLA$OSkuACXM3 z*yGh#XZE>(i0W0yvZ|rjZ~D*^D8%}QK)`($04K`)#?dYramnB-1nOr>M_+)XBdgvE z=mfBokX^E4-D|Lv*-H7)A?gO`@c;lI07*naR772vZ4bKG6LS1jXLu)m9--)G+KI|? z@tdWut~zEX+u8XX=IE~{i2wPd{RjzeZTFZSK6`*;JjQP7&1sli8y~^X_&kEwNZ7U; zxlqSA-M**O*de%LRA({<=>(=ve;yuP`&w-`Z#Cc1cwz73PNpaM(h zL-(!QINz|-sHdp|5^zaRh;hI88}vq{7j_^cwwI1`jUr%sjbr$D9nQds1qZzPVae_g z1WpeRRuv#Xp!PrQa$f*OZ*ReOHrzuT*(Hc`1a|)5wJQe$E}Y_2xi~@j$FBvT6T9Fi z|7#mR_PRBwtrO)#3BT73ehbQ0ep5`M+U1t`Q-&=z)8EAq7V~v#)kPokr`>0?Gz4Bp@%a$Fca2 zpf8^0cDrZaLcUsn#WS8aM=|k(=fBNSOY-@o+Qo_(_-h(5Mw5!F6ZMe1 zzg7_#$wE`oM=hVZ6b6yrm1JpLltN-9)${QPdnh6ct%2P~F1ep`WFXBlEt6)DcXLb+ zu20Qg9^R+f$WX5dEDUQXb~!^sq(Cg^hD+&C7BJdqAcEe5I^ees*eNSGKnHTZp|KDk zDFk4sKU5+cm1%_jW3L`>MTH)jI)M5k^CO}a=i0=XA@p$+RjBMzIF=!3Gxi8-oG^2- zdSoo}bM8I^P65oQW*yYEZ%8&Amj_k$(L^O2AHw88`g?ugn3qiZt36#qXf)2v1$;Vx z8e>$~Ic98_2UvK2^W6>VJFA_BG>-~Vca9B&g{!L2suu^{(2dmdU+1YiMJkQ%q!qy9 zX77G95ENDqx1mE81yAU#pRQbRhl8r$fFYx0ot=Y$aehyO&{sN0mCugI_VF|^x zPrMJG;lx$KVyl4!9oGc1&W%1=d*FoOvL1+w{_O3yU&1G7{=-`6`EIhFBY;Un4(-w* zroRTixX4+JLHq}(icd}?2q=OE`3%t=4(ua{&;_nNEDJq=d^NE@>L=w-6d)xvereYi zg$4){P{J@J?=+1>4!=>V*bKE?+5*dD_Z5lY?`b|0G4S2st=Xlz{jT^s%?qbzpcm%p z?28Ssb`K_gA^gACy&Tv2z^VyWyAdxT^awY{mzO>J4mL}Fjm<4|i>E9QmvS>Mip^r& z7|qtMkm5JrkgnJeq)fu7+;~s16+ZEdN~(vSV(OA2p4O>DNvM7;)?58F5fbJKlUM8o z$XUWC%u+u{gEh$kle*z!@edpM_#5J$qeV|dkS&M=cn?*B>mlVl>D{R%(I?%|aFRYH z_qlYpUYICXBH_&s$ zpW&z$05eIkMp=x;L3Q^}V%RNN@qIULYTkm2XQnPl(KUzKy3V!nL24aTsg> z1`NZ1m>(Wq^_RJFJnD zItc@*L$4khqa8__Oi|%G z$Oi=P?O=N*nEbqbNTPcO)uq1DacubE&yyy;sN=pZjz^< z%2chChujBR$P`cFP?SG!Q$7hObnYWZmE_D#^Q}C%{PE$X$frhrpaCT3~I$7mQW{5Dg<(ki=jeI zXy9nws;;OAI7u(I!ZSdirsmk78t((qZ4jEWWyT}YY!uYUE@Tfvm1 zz$igR@3a%Jejfr$1vrXw2J*l(@zFw=KWwM&24G?Hk#YCxq90Bp=-%2cE-~rx+jS9^ z0AU;AVD#-jTF=vq3y*sDyqVh+nkFUv_s?%o!G*JZJg(QiA6;B}=FxAQy>o^v@Z%Cf z4`?&-=6rtx+WoZ+&T!gM{|bo7GgsdVW}cosi*_qC%gR|kT#r3wX!LG%L8o@@qDkz_ zSs@kJ=(DEe=Sx^Tynrm{iN`PkNk%T;=Gp5Dv_cB$h=U=nk0XyxQy>Ebt|K(UYc;p^ zmAC?lH_Rn~-oQZpeEB-EfZ$)L!f*2{2mD5^PH9q+uGJj-w=Ce{T*mpn_Y2gvI0Z~u1m%iX8Xa5zS zDLKebg$o6H;Sd@9cDMi7<0+93c>fRXFyJRk2CN{k(2$!HccmO~Dn_D!^*x&Lr_oTb z&C}8Kwl(J=YnvMsi#4d(3yZ6@uCwXT#a-0z+y}SXETiazG=n=-6S%P{xsn|>;q`35 zquuB0n^Q-91-$7@JRLPV%|9Zo#A`-(pVa+1KNiqW{f z`g@R^T;L4tv543+`GwylpJUY!kn`Qbr@I&U>>Xeu^7^aG4QWO9vlvy%0jDh&E`7g}x;kX<%i%Y~K$8J3GfS|P zor620J5xv{ZKujUyvAxV33j{f^N&5geWmPHt*36cIkzA;02mjiVu(NO#PrMl*+vLS zfI>(K+;_($!zZ`OF{NsdGX$R{TUaUt#pKtgEqkzOfznz~7tHUZLusQ6{93xEO899= zCb4M=q~(8dK^Xy=)r$~-@JMEe9J{5)MpzP^Y`>?iVlj@A{aou$Dbhosf&nsjhzvL! z_)aG_4FF?e!UU~Wl66w`Z}R)mk~1S9NYy7KX zRrvq{!mrX;rfMeDDz8f6$ZbC&v5%G+2OVjwag};Araq=ZVihFIw2vm62#&)_IP3ECC`0nT1 z)%4HtNlpmO-xS>(uKm1J7vDxR`_>2Jp4Xn^apx=4{P(zq)ZCjGS2H^E4TXR|bN_9| z9-`g@k8M9qAuT&JXfaoH1J!vF3KJCE2nIa*&^nqKweb>@TE#P^;bN+r10et<8kNd!L_LZzGgS?(k$ObTW42+dUJ&3}VkJb{b7v;~VgIW^5D%y-`g|NC zpN%B=*z_y=Hlhdy<|P}B5r6>zG2lDmRwF@v@C|1L!g0wx(szW{YsJZUpaWJ%H?RQ3 zFvfT*$N(*vXLZrAjQ4 zs)IDM+i0fJ_<~hP20nm1kTL;uf_j=q#G!*kntwG0l=1)U9eWoB>yjWiG_=LJNnP^S za&a*n*K%3OMa|sQ26Ia1!il5{Um=@&zOcn2O!IyRXhf zgWE^-q4uH!c3T{;e>#M7rJ&A!U@H*jmPG+MV?7I%y3XSg#LU}&aR|sj&PHz|9d>o` zJ)ij;B}z6WH?Vt`19n9t~aFux^FU$N(xk4Z@U*c@plH z9KnNBq6I1|j)V9IIUvN#QRqOlWCpYz^NS)1MP!votxUwm}+=D+!~#a zE)4g|w1XPD;eR&tjxz{3_QPbRkxqc|LuJy?Ku2Ibl~f-w5`A82wz0TR8(LGyCHcu73r58Rc;#h<)$~ z!EWd>7>g%PGz>miQ-`39O#x`0Ll@u*SP68F>yye3*dKnN;~2oNH1}K?*!jTO07(b^ zi%W=tS~%l4Ck?|(@S+)yUf&Z*Xr9N(ACDIw(yucIq@TOrx%oQbdx^TCPTJF>mdIV}YE3b3XP2jV&`S3yk;sN;TgOJy1|1o?( zHnNrkcrqy#9bu51YSTGAQf^9^vB?mW z&r9}WwAI3%jbKuVW*3_;v0DoMKPH0TifT#-&e}lOgfX>nPDL%D<>kTzxdv#p%&xDL zr0^&p$OcmHZ$x;hoE%U?{-v?O${9*JKr(?^%7OG28vH;Cpb^nxE$}jqDXMt4l2ioC ziOd|RJGg|Rdx?t<9j6B#toc7xSFhtZ&IES>!yh}o{NtE311&JsST0H3KiD?e)f z_~^(nJogJ?B@s*`va*j5AT#>!KV8kB{gF`#0VIc7xsM^$L)uMe(r;VzQ_6m}B?<+Y)#e%X0d~?Wr(l3n zs|X4P|JWi|5@Za^m-OAs_p|VzFz2kFHOc^E_?~+bMpgFf(1TB=3r^qSrsk( z^0VY%Ti?%4J9_a(_Utd0()`+6$+YcFb*dADLNhq*0fBw~P9Z(3H z=zj`)WkxoO+20k%L#c843IB0Y9vch{Btzlp2ogXkLO|$cw2re{c`e={&hDW9Jy7i| z+jk0t!pa@_*vR87SLq6=gQ8Dy{j=gq!2DoG=;*W-zyKtAjc&aFZxGW$u<2L+HTw{< z^YL~qIptwZNYBwfd|YE*MZ2#@^WQXrpW-oQ2h<;rd! zq;_B(j3IAe7vm7QlMlH<0YTU{IsqUCz%R}!1>An2G}vhQ56}f8s0!Y*c-hPUtvBFRv5&0Ya@C2ws4|~N zi$A-|x5G?l2fR9gtW%sJVmSGmBMGo#rQ2RTHANqRvu9VkL$Q+xz;F1O{XDIA=+K0J zBlw~sT6UHDdwqTOE50hZAjl6-%l|nGxy?XeLhIGC(3?@y5EMm7$4T6M$>VJ_7B!^W z`Ksd{8s46^r4&3s9A0g6I&8l`^<{?$B`|&8s-mrvr_*t)6youqxbYGYdL{CLSwX1M z1}W+F>br4C&?DtS>1O19 z6XxtqDRyRezu^i!A@{S7fsHi~0o6EqcL)i&o1&-Ik2q$`WgW+Wd>Lla^l?s{UJP{2 z(}WMc)299{>r&KG!fYN7wPF`OBL`n2)9q_}; z?*-=$KYlJyHA|@*24T@*`zF=DH(h#`^Z(ySN@Zqi zyxUvgAZA=*J|c=B8?>b(LJV0tn#uA!cOqxZ;->2>ZW6$+xcL+53uk5a#Or4QK=X2f-f`nfDl(+G9=Ekxv7l zBeHV1%-+tR8;&)`2=vJ`pL@OmTZ}sKHkE-HnUi>NClv3s`eD0#V!XS*M9`BW^9{i9 z>n9E<2oBHy0R1(yxgWe8s=*^~(;Q@b5PN$HY5ToQnLCMa%dpHj34Viu$LQn6!%0C# z$@K&~$^THd!d-vLKw*JX87jCjaN^^hdz9Y?Z~<;6!03=EKqw9n42ETIhyY;&5;Gvp1?pO4G<^##5?R3O8H0>|jK=N}LuLW+7RWqUHc-X^ z2|=pGegRi7uo3b@v%yTne+See0QfFX20DM9IL0*O86XT?3dlK%d}MgQcf|uSA`sj> zG=vY6FE(fVz_CemFsMFJ7ZVHQ+>~#exhL*?0gRE1$MJz5_*syIlkovaBZUYvmmBlf z1ZIHWQlht>W^=cphV($*XT=?wLOKf&Ond+}7)MVMpZ(R-!vh~cV1ZIV1gI5=-)MLu zc#IM0JXaiFrP&8@#*!d_?oZsVh&4lc0bDU&0o!n)sbuldKa zVd#$^$p3}vV3C5O>;%Bw2Dx=0{tu?Vv8sXR$sv4XaRA34q}-R^+!*AYn15?K)V%H1 z|I2PCTc^=Ls{=YgNCLo%R+cF3`SnM(Kb&@@tA9uv`lioqL#TbqWz#iUs$b&9!1oe9 zzn;y0!Y}53w3)hQxGQg9z0aImNl##_sk!ePcW5v=wt~UFe6jcs$MaFg(@1sDRCu8M z0L~%Mk%`4$HHiJXjcM3Dbn)xnx)3zz^zMu1bi&cKz|Jd46_glLk|A%K*oVe6_5Lre zAZM9YF0kSnDlKTd+4eiT7eUWyH%0;1-eZjf3j7v;1ne>--M6j{Y?ax|xkBj;+ju4g zxY!618w~q-gaW9asUM(38^d_QSAr*|_VMr&GaSZpzb}bH$AY15Fd*oG z%lzUIAHBmP&;ZQ$co=fqAVkc}*r3&69T^sqgoc<+@D@pU^fM>@L8C)8KqEjMBrYCy z0s1pk04s0l0jgdvY}_5|XMz@gRKRtmdv7OT7uY9qSpe`{dJLFKJ*x_9Xwj%T(OiE-cT2Vycx9A>Ik$DXe01OTWv1EYu&9D{u6^gMt}FJs(a)U z?oD!HS(asWb#--3OPif7wHgdLoC&MqlW&_SXh2k$!r7V$`qf;5R#Uu$*GeuROV#m^ z6+DU=rZ3sF{>qM_vK4#QeNZ(Jqx+-GkswXgP^2h!R_%)-_|ewckV(-V)$AiuDE5P& zasw|F3QG`fNwoH|4Mw|YQ8G258gp|e2iMCOAJ`U#9Mw16N7n7^_4av>F&UT|G@0Inh&)A z(kQ6@&t>Uv79! zf)*dt1by3(ZEz?kwn8)~-HQM(1mL+X6bqIXAwSY5$SKD&k%KD1g4kYm>G&W9ILe)7 z-IlqZ5+(h@8>fS?97t>uupu~4DERk%T()n-Hdp*kEcFvt`v1PqTzSM{#4HKuNM2^% zJ_vu=02Kh7eY<~y8+`xyyyI!VEc(C7WI!Jd_~!m|>j}PVU78wu=cC(PTW>(}zC6B0 z2o7mLSEy7!dy?l2t4%AXuuf!S$=refhM;n7(bpCAnFb&wOAkCt$SOTV1E?{O+WUTd z+gPfRV~p7Q$#DTVAzbleU|5{rjS(NZouVFl8DcDAfmH^_0q4qIEyv^MQ5qbWWDrrC z8A(S}Taz#w0)$w)0ZRMYX=Tb?EUdtSv2x;JX}wk)YM_=8D?hH|WGeOhX|Q^u^2BW$ z1-*FrPmX?TUJ>pwGTQN5+Ah@vbAe0=|^||8GS)u3vXo88iJ9C9E3`Q z32=C_0Pq63|C)pfp`lX<6#-Ivg189SH%cxe!qRUi~K!PelGEomQhL~Xd4k5} z2410^(TIFWiwXlk1RXsHZ(s^lK!i7r0#*7ZJOKaa2y`y?kxZC~6};oeHtrH7+C)F^ z&M{#f{r=O&aR9ppjDhNZcXwF>fNT5x_of%vIolLfg}Q?T0P%iAzApymh?%$U?KvF; zm+D(>HNUl|$oi|YT&SRgiG)_kS`W%w+_hh{PkwKG@ygPNMN05oti1K2>|Yg+jXf_v zuT#6wj>|nC4MCd`P)s?2P67jgY;_3j`exuYFC5vv5$B=<`t##cjqsIAR*~2n`R6aO z!t{JaYbg?pdgSU!=ksBuB?8!y|E-1|<-8;`<>_+5o`j-e$6WQ0okZ2}b!C}2ZX33sx|Q@zx89B>d-F8+M_Mv zqhA1wyP*&GhM?`~_Mh6H9$~VAw)ZW95tTSa{1_KS^ld_d2P}XTAhl03mm2_O7IhX8 zrxPiAVt*3_c#>~#S~>S?Ar}zNAohF8_l#+91iT87ptX<|CqRjxs2pH#x;H3?5a3J9 zBhfcVyD?w^JEMVMnme`ty438cMdZ)(=QjVQUVs zx9+1D|Nh4+;LR2WcM=0M58&;q)cn$<>a%Va_f}Yf#eVHtczw9z{X*9TW^|a>?pgMr z)9L7n*_D<3(lf?bYH>@-Z*${oOl< zR!$fJb_MU~)8$u1)=@`@YFJybXohE_;?HYR9C?#KW5ZSBG6k#T4GZCl+AjQ-(-dV!(< z0EHDm&(fX}Bv%L~b`%qxI*7G2cU5A4kyte@mkU(@d{Hc1C`yn@(0Cw@uOUVgH3IB? zNf$s62>qN$5V$gcGskD%a|B!g1%5m3oJW|L|NFF&+V7n9(RN!)VxYB%X_@caXSZ;c z$bBbkAe{W_IveWHanjtEEeY(()IZ%6pqPSciGYO&yd6?uT^+^0I{@8ml1(GB>=Be8 ztlOrqTI=@nN!i%0xY8ofg?5s3VAs7ehr-6Gtw_L&XBE}fK83`_lb)Pyun09A2&S7e z1Z<(AN33~{toF5bzpYXdI-Oov{8vT&FVjwq2dEJso#14;;5irjf)s;ybwN$4izd|D zE)3*Cq3DNoUjcNmj(F7Ybtx2#*IZ2_)tj=`oF)91XkI?i_*lj+6kQ<3f^)G{NU>B) zCgJHs=|jpoyP=dc+0{G;=3sKaK|~>S+Pt!G53Qf~V6Q2#pmt~<7po~%{d!G{f292a zAQbo#p#e1i8m4NZn1{G*;}uLGany)b7pG>Woft7HnIE~HzF}(h939%!nP#I{*T9u^ z7#`R>)>WFWYp6L`G*pSJa1eTpcn2eGysYfojqLs7A@c1DW0Vy`-^c}ooV>`%!>T}O zoK*v|H~amF`g9>GEZ9bB!J?i#O8JFUUPL7=<{4Z_4<jDR50x17lzuDx7qdQo{J-?1|xpEPWR-`y} zkNK~JVi=(jg7#JUtUp~a($|!$UQ55NvPbm4`vfIZ8MU{ZsPz84JL##^0k6Re+pB`Y z%3(tQF3QUe0HtFyG7Nur&!=1Vclg$xP{R91qjW#4Ixs)*D7g^72px( z@PXugZJHR6`q#)oy)*{0AJ8^tBdqk9vn@#G+_x*BfIc9i0lNnj2zZUO5++uVhx8CD zn0YS{nr%VPNh(0xIZI^KXdyEXQ+=RgXQC;Xi}o69-%N9ZXdiC~PO1Z}_gOi#x1V0^ zg%K=&VexQVMiurH5Gef-DF`1UyA~=4MidRKJ!tSlBwv=6t8&>;z*BcRggCW(=FD<> z6&S2EA@P9vo$LRQ)WJYd*>e~WoxbeqZ+uPmCVMJ^Y8_6T0+y8M?{{+lj-|Lip z5#s=0;=kUAX=c%@=KO4qvL?60uM!$R8!K;~m6IfTA%w5444!vGQTm?J=#k&6{P*Lz zZ~^Y>0EVIDdYw&!szM`z^9L^jD9DwXjbxu;pINx^P?I1ouohP}BAS3F3|CbSfP)wt z5rdWY2xzGXsvCfGFT%_MKPmoWiumV>1We8k`c3-&0QtDK)B*IgDOE#$An+On_@ezf5HI!1S66-!GIyiRsvq)A~2zFh`+Wos`iB=KIkzt1J6PZFz@R~e4r*k zGt;zhyqW06HXtKBab76z{qqg(BG(}~19Sf_Kj1RbL(nq)|GtX_fDYU_DG*zIe*XFM zf2z)3#c?%>;xo|9MctQy9qk>ECuj+U$_x$!N(4%r3N~mQt5XM#_B9&(Fn+tO->Irk zUf;em-Tv41;5v2c)T#Q8-+VLF;S2!$J{kh(Ke79=AB@{x-45Vq$TWonWIx*NDl)F& z6FMB4l)qyCM>e_3tZJPizfa6&7p)NmsEQC5A4pGZb%|=vW@B6`R~CNeKEM#XqO^_* zqKI*II(L1*FFwBCs~_nn)Kss6I|AS@k2{66+`(yRc)*dX1(D#;1d%693^uVn}Mc60>)HbZJ5Li_9L>zIt-X>Ob z83=q%cTVL6EEwJGX&mAq8v4ba3zg8AhkEx`70g%!NZ_mgg%yaV{&bsg@G&Z|o^FfK zW5ryIuD^0`%mVzr6-2>_!|l=@G}*Ma-g-bZoW0#=v2OvqTHsn85711U1^~Oa-^+dv zh7D&`@$v`F=Ra4==EuWvvMZ(sCy}sWQ1T&*f>eaGkFWFm_uux|uP<#2y|!Q1`MPTW zY<)8lz(_!80AL9|2K#5Pq-%pQ#OguRgq1yQ0Qp1y6l1AxikxN-{+Nn6xP>ql36yY3 z-P!4CeA@QvIQs5SL7^n2EuM!+hoyD4kKjeuJZ^m{6+l;*ZTM=_%;eYqb-7&rb5SJ` zK^YQ${jA}4bsC%FS9kwcZpZU`HSehS)+9W3DZED$QEyxf>n#E_-f7Q@{BcjlE^idu zQ^vU~19gs5_+6@yQ(O@VT|eZ%@rl+u8o05+e{%p^9fgM@>KH-XEV$rCH z2BgP058B2WV?ZC5YAgkXc){2<1b*G3+F2Z1z*m*xABztGzw%QrF5vnBhJgM=0Z&xZ zK(L6{JytZr7HUttEmZ92bbMzqiNRm(`4eV6V5A?m0h*3|7(Bs+uWY~2CqO2EW3N;Q zCp8O@@krFG$UpH;zUPcE2?XeqR235WCaHv8^WSbaUJ?Qy&I1a6908ux(HD7QzMsVd zW`W9y)`G*s;1(bZfCds4;PW3^ep37B3BvMQwun-&JZKK;98vWEt`ANZ;EV#EqCEou zN5wdQ9ZT@*y5GK+R^ObphB9vP%V(lfg%KW&c0;b-(;@xJwH>@7IwCzeZ$uSK9!Hf$Epn|p)*TTO;B%(Yu2KPUNF^N(JX_&=0|kFt2- z<(9p-OC)xMzg-l(r87{KnBT!H8myb1Dq_DXz6&qUl>7;7h>N!y1TMXYF@FtA{#Pzn zD5tA0IJC9CVM2gs!Z-+2%&2{Yw7#LxKP%JEP6ifX0sRJd51zHwk4Ma$ z6VPg3K+;=61FblDZCeVjG&e~REuIB9d1wae0>iOlJ$Q0;>KLAv1XXe*mUJ-PiTeZe9* zU&PS6)DR2(PCH=tk_Q#MK;!Rg#cmu#TRdOb`9shCSQe3OdsR_9CZO4Qo-uYT&dmMv;;#>GDMcfSy%+vxvl z!Lc(#KfUkl6YP9pR0wWazx#!i^AT(Akzn!#>Cf zc2NnyFPJ()J&+E+9&m;0w||%e z4Ei4ckS3sa&U^L4!87QOVGb&`z-R;n35azRO;p^6(AjfKVAl1;r{bQ$&Oc|m?z_}} zRDna7hr6djIa_BQli^l(x|#ie?%8x)m%GNYKHv56mM)&osY!@xA;#Bk+Si#sFaP>i z^#edxfKiBw0W02kWBgpESquPA3HG zWOLs`!ut~gu>U9VfC43T5lTyL-__B2w?-#h^3Wc$p&uQ^Wc&ndlnMo7Q{{WQ)N0xz z0VDv_m0JMC2|Rqcx!3xS6c|wpHb6k_JutiLc4Koqo$=_a*YSgl6R81wIF220Fe$uh%@$KXLF|-qVK5`>rL?qR>j_$K}%gS*# zzxEb(%k8$@K0fbyw&LVXLetc#0~U)-$?8wG8Fj+Ouo&iEgyh%Z{}l;&dwXR*GtV)N zcZm$Z#b7|HTbG8tu_X1{rTHp+kfD~0nbHF*Ezko1>MF%V=M4QAR9t>u?0HTvJZZZm z!0(eL8OSq64>K)Fp66B63jl&DxX$2+AW%>}KVl!)g7x&kow z8ASpOKsKWJ%*;N|aB5FNv0#X$qs-W(lI{$Pg2IhXwM_qT7 z7~p+C-#5Qz39R@8rGe9SZK7x)+s(2mpk;N3ZL8 zV}OLl|0wPC=a2#31^@sCoyrb^y;n-MIBhF5K*c)med#0^#TL1FW7<}h(I8)I7vKMT?A;= zA275)Krp(%i9kyHq;*ID@gQ1R959$$O4x(a^4uAx3emp$>u?Non zgO&SSeH9=83_=U(g^$SnUKVhd$NAg4&jLrFhxX?s!LMKMapnK0x^^A6u`D>7EO6UE z2g7Xvpqjr(KtcguR5b8ib{wDqKH&w16Us(U)u zx&I|cf_shuqzE@FKv~svX2MS)X>s67m)6N9I+h1j+#cCLWTLLCY`iY}YZGp)J~NZ> z7?O8pfOG>B>|kb27i{&UB~t$PYFjT$c)(?RdHeYI@#nbxPktsyBKRLr|Nch;*u5$2 zV+)WTM|Hgxq1*`r|IfU1vVh0c*0-n{E=-{R-!WANBh+|Gb3Se769uRWCJ7S-Ufd@Zu zJ9rdDYj8GGg+&o?Z0RRWUga3KpvRE=K8UfHn z&~prwe?Ei^@x%{s2!IVfMFxT)kOl>{3eTGoz#UG5mHb3-U4-X~LdXlcXYqwSr7p6r6Z>fLx(j}q*XR1~V0uno0! z#;;%M0ahD#PpN+Ca-UF|(b%e7Ide?bwjce;%l9Jz92wxhfBtZ7Kp(4}=(GAo_|^@r zFjvicZ*gM;wMXh)@aIze>w2tIo0qm~>8uYi|rW?k}Ryug-Ka zwr6Z>G=T5UzW@4E7g4Gh5HFh*wZs~8MvU&$Vw(q*n z8Q8mpfb(p4j|reA2Im8|2D8fh!u3GWq7WQF<0J>paF>0S;rMX2k@>^&w+l{!cgEp3Om}0hnPJGdwz$9<^tvus{Ht-McspP z2^tv`e02C6H4=b8r6)%aP@Yu6<8d9{xp5TP*mpj#nE-D=AOOO9)F6QGe^b2k_)`Ic zo(s_OBN^ZwM+@=%t^VLQwgM0eD*>E^1jg(Sm+RqPN;Z%Eq;pJr|CzmO1KnE*b1{P^+b`yV8Lo=P-g&E%xb^3tgazeP$*?mkiye5hD9q>_P5LV7DJ&Vv2H1_{pUQgR;3bvwu9| zZTg-WLvf2J6uz%E-C%*{m!j!?jqEZb!WHqnr#?R~v!secPc?<#SpOb-{n@af2Z6c{ z^uR!LfP=wEAOZ=2)A~D6|HU}L)gO%rCh&%MUv%0S6TybzVaJql{0_0W5S8Dz4WwWs z0I`KonlBrof8#GChvU950;~<*FB0vC1N(sA=y1#|mpEI9WSrF5uLM z_uLd3A-m$*o5sPXm`dtg*V^@2uwwE46zlrZH4uS&0#Sm7*P$gHhU~TEzIruXPUir` zm31uM>H7yWzz2>@IFY6pb?U-GRXRKDi>%;aO!sdU@Sqozzyu@4L(<$p@} zlZS`cZMxl=O8gOmzvO}+8Pc72UD_pCs>=nQp!mHq`!wuF5uRg2U`M}u0f-{5!N8q_ z!`~nwp7K?fHTxSrw9X;?iwn%fzbQEqcq-@`o=^|~mPi^LCIA#J$4G`LK?6w~T|NfiH1mgrG2J!ZnSO9+;21xM#NC2=3KSyzQ z3J@s(559b%1K?0mAcLpK5vSoL8N=Qfgbu*9EbC_KVh0=ICR4Z)YLfwM##}Y5ik-ig zd0lG%;zH?SU7C0amw@Aaln@R6LX;333E*$`07niuQUDJ)AzZ6UbHsqo=y)B5{BwjF zZ>rOZ?E6Zv?wS#R;C<?$#+?k;teU$^wD^godkW=V$X=(FbX zzp&&6M|aH?V0&8)&?NW_<&p}z(Hsi4j-e$@htD*V`&8nPQVPZfN?}r|Cxq@=m&uFA-LID?E0r= zR@fGx`T_;SF1l(=2eW9ts;9^7frtgPaI_0Qe_ly9KnFk!VbcN;O9Nzrqp#;uk*}a= z7~}$UAEWumSLGUNiX}7HJhXEdAV_diZ?W;j0+I)qFt`?^=YZq{==kr?e9euFAt(rr zN6*CnmM4fnBOd+Bq5tNe=OhKmCa_Hk)D8OH%hv=j&`IcQ%J3lOAc4X-#wL%go4STE zGevo1O?CX6h@S>lr5f+8sc8?F(9ZJozDi)%m=mTX>K2;`l$^kgj>*vcwGW?5!GJDo zF@^vDAOJ~3K~yhC`*Vcea|ymSS?uRjtuak^E{i})b(FH_$=}*vJrx`0;(%vhceZ}(9&`*oox>mCQzTEYGCc@;MK*H2S`K=1VyL0KUvgDBb;JY+%v zM}9Q@yM_lU1F`p82m)RS9ZJk!!G@jAKb!?na@jN>>S@x6uHm?IWB_=IqBr2HxK89D zqWi@UXfX(ysSP%SFp~|)4I_lb+%Ccocu{t^juZltReUAnw~=8$fdOfW z!uN#qjba2x)kjKLGyxC=7)OxNg))K=)&rc*S{0?v)2!<1h@cNVa7gQKzR_idmAM|8>5<@VhnKj2$3ep zhW*a={;6nI*H6HKQI6`bL~(;q5UAh%#`QpR`+aBIe-0E-v%u}f4&d$VG2mQN0HXhm zGjI+1%noO{0}Kjz4gNt9_L0&mLACIxaFxihf~czgS|SrYhbJ(`&wqrehnHw_W` zhRI*OJ?sgb=zePTa+HaMeHa$xhNCxb8H$|>_BYT$n*apVu?{zlerAWfMwL$1xglS{ zr9Ol2lK`OdOoVAp5p$H>J@fS)@8pFz#SY@=w-# zZgHaEN83^=wi%ixDdD>|0d&DdsK*c_aj2SimV84=JYKZCT)!nZFL#1pZ!G|sa^r|E z6Afp@e{Bd%?e&t*A>G7r?F-_!mrs6BGgMR*un7J00>C7TJruqd{XX7w`O*-S&=}Mu z;x5)6#Xz$J!0hx3=zbU0dDd2ed;s_r`WGbwX?iwM0tn-CROcAI5%?EjVBxIol|EO1 z4^0FQYlEmOW{6*f2l~Pbe=L+EfggOOh7gy4eu(@8g!5AwLjg_)QB5aU2`~dZM|~?L z0E!5>#8j~#qx-)b>|dg5kch}@0Zsr^2xfWG0!%WN8S7B!#` zCcrR+5AZNV6nprWU--~k2W4Xrk)J*ow$mB%P_3>{`|yTYU#i(%5r6;X_2nCnxLwoJ zQXXWneyqE?x-OV%PO6jx9hzw)w3EgihIZdIhFWRa?Zf`^V6Pze#nFe|mmX&78gGse z+gjLP6F_~D|9tJv&+LI9_$KM68U5FhdYsd{Q>~ar9lMeng-g(+zWhW zGp`c8&n=kft|Ah^=V!o!;uibmS9Aet2tG;YOCf-+{`r5hu3fira|!2^^a5L$umJKD zCc%=O02Tt&2ynxeZEDu1$g}Lj`0b+kE;GM;0%WnaWl8}u*Y7gi6rO953B(D+-z5j$ zHi!c$4}#4wgF0R&P0^7A1b~N_`N7L!3SjAns)rUnoY)z`ksCzYnZN_&29HqxLEI2^ zUO$Q60iGTQh`}2)1{-q^eh{cX<;I~B*csT-1WZIF0Sz#|4+;jjikjAmsUg@)j{a2( zgA994`%|_DkNumC=6OBD_Joj0A=>Tx znM6J|2Df$!XgEF*-bw(b{0T5Pzp@2*W&$SwPY-v$A(F=FX(58$q#_YD?(7Bt=Wz;H zCvE)5C5X5=7WM-N8wD`%>CA)RdItTuNu$SzJXV$D`yufj^~J#o2ET}5elY%zO|$FOPk4!Ynt*#Cc+ zQ!_aJUjiVVPe*9vG%}99Gcb5zpaYr7ahGWq3ik*~PnKDFa?E~;v_|60y0YrzUV-%G z;Uk|DTOE|?zs*ZjzH^K)8F*-#nPfnCm8nL=XuM*OOr8=AmWfVzn=~1qRKDE{kH3xa z!0OJXRcK+m+y|V+;{mZZL%a&Qse4V(OOAXpn!o<2IA>ip9T?f6el6>L?*610)FPl} zfK&00EnfTk=O+CCUIH*B?Q_TVRf?Q&9 z10lVgoC{)r$I@+G$?7#a2jm`Y#L94wr`*vAOn?VqID#f1P{KGP909vd+W7+lTpv6f zuv+!^I4CZxc*n5;CX=nn06PYb1IxpZ6Os&wYr_%nDE!|61%A6h;3_c0Kp#K?uNZL=FC!eI1-imb{IXnity=KO z0k=HnJY^TJbU63|KtJS?q2zg%-BV%P$Zt)xZ6E{N02U3R%?%9}h~+(YcS<-hG#BAN zmjGwwgC(&$uk)nl1IAylJ#0zPBAi(1{fUB|1^#w(1Mtf5<=`)ZfD(h{{sQTX4U}9V zWPnYpLQs9~TQPz_%v_QuTsy=qH+Q7{02gGFj}ZXzk3ibU^NYIb{vD0{hF_cl5a4Uo z4RFzbnoOz>q`koK?}si65!NH~m7Z@FF_8z%+ynjbN-&b9!le6Q2?!oB zd4_Zo0aYOP1FY_QSc=o3Y@Jm3Bkl?OMHs_Dm`ot^gJKEz!3N-ie`pD?Bd}xnjQ}4b z704$b>B89~jQP!x`hbBuL7Wx%%uV5}nP3P9Qc(pi=^r@e1Yz&+AHHJf0mifn>au+= zORi)N&Anws9;(#=II{9iQM!yKl+X8XGzT*iz%V4yR%ZRFqOF=gG`T=YZ#16SP?K88 ze#UF($)=s*`TVjC`=QD2%c8qT1u4f9m9Oal8aO}$$SF3Ee(QF=4DZkbHvFJm`cWu^ zi5`XftY%@+lN!XY;CyQXJk@)vXQQt`>pCq5@u(FRK*A7Eet*N?!zBL<-h zjxk+tsn7%uIF1HvVe*NW1xW}`45c8WnvP;hI=D5$RUdiEo4`L(j)5fZjMW?&)<+_M z=m5|FTrmUe+5+w=82Bq9A5Fl^BJhGP;Q83+^nZ;u|M?b-aWn)`^lcXKe8DAE!)W;t z;+M<&XFL}S!3GQ@R}dFRLofjM;XE+JNxfbRLZOWYbb}{v39&lQ^Ej9K-%j`QP$!5< zF`^qm*95J)jk(78V&kcv)0V%y2|5~<^T(A==H4)am5*G8^gff8R%oU(xPfncw9;s+ zE7p!2`E{SOvDWQgrh~o~gL+EH^blo#D+4r}zx4RarvGoJfScEM?)N>QXd|x*&d@da z=TC&;-O)@VfKKJO;$JRaw~z>&)#i)5-?c1ZzaK|{lkOjs0i1XD0869-5d$#K-w^&7 z$PaJ=AQi$Ga57ja&AXHPBZWW&ZP)<^)pH{1x4DC7X_n{5G&QA{HGAXQe>lrhKMo)XKm)(|Zn6NG2n}KY!R`+q>4AEGMXL`s zuy%v|AppeZAK%ZS9_zuKnc(}|+ki*_m;gRR1$-9@5Nm*)r4>g%|;x#5{ zSNcG*{9MiZ;s*9VT7a9ci!`8r${k*MfPw*T1`R0PE9{P$NAa&w;3frbYV(kF(7^MY zS1t|yoJsXLh3);Q{~6rf`kES=X+iuQ>jT6Ip!*N1JXVey(o{_RF$Ba_kX0>!+1d-0 z+jrUaZFm{&J!sp(&ORtV=;$L{`pIG-wgAhaa<4)^t&`UQs^@&R-T@KJtRn0m_&yed z00md>6AmhcHbpQrgKAK)I3#`OkN^oVz?2Xl{DBEXB=Q%36Txo>^0$gl3=aaV{+>U7 z#y{qSNCVfn6)w)8cK|sByuT8DuKSfFKv#KA1ecLOA@+tly#nPNzzh%_10MMir-wNw zj2IEPQix0A@k?*KIP$yg_LTv0-uTV?Lt^cc>@eb=W-ff>UIM`*-2*k&yG#RGq@YXJT<<1MeRzEv{ofd(iNsP9^^E_Diq z^R;!z`yFZY>$O38a$@P^`)V)wV<^I`3OinFso6bxSg@^@tA z1O6XnJT(70Aqo-$$OWD)z`+8}Wj?=TWP&`zb{yRTH*i|t(J%ZU`DZ1IU{x*V`4Gwp zR)#o;zAF~}!Um7HD)7(Ou_nS#`aeDn0m+96g7G<@A0aM;d{d)B>yMo&0l)H)35me~ zwg@o5KBx}H z%YHKfX%m+0?+mi?%_(1k08AYHkYpb!i}Pl0(gpg$>Py7yonu!U{6hG9p8#uC`BlCb zGH;in>3P3Vtl&mO)Vlw4T@eF1MbWtwAFy@w=9fw9za>kch5StV%kG@`BUgXR%aGp| z^n?YyNVEu8(tc;1CP4`6Bb}!GuIf0(fg8yDKpn#aXd}BH0L0p*Tu_-njX7KR1$ck3 zdjI(cb{|^w*~2gNL906e=K!wgrfdmVcRgJva;RPWN(1qO`}%0$SI+N%0AMo~QG4Ks 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 literal 0 HcmV?d00001 diff --git a/assets/inputs/imgs/flf2v_input_last_frame-fs8.png b/assets/inputs/imgs/flf2v_input_last_frame-fs8.png new file mode 100644 index 0000000000000000000000000000000000000000..51f3fbc5233e4d4215cb4c536c6374a5058cd40a GIT binary patch literal 409871 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 E5gdT>qSf~eA4CM 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

    3IH+ku3g?xtd=b(I$hw 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

    fH%&`y&uL|=E`TeRtN!a1=bB6KBTU$6 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%0Af*`dY@0msLukGiQHkPU`X^q&OeoDTmI_ZuH0@c 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 n~p?!sOA-Z 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%0D307Gc4MCZwx~&EX8ire=0}d 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 literal 0 HcmV?d00001 diff --git a/assets/inputs/imgs/img_2.jpg b/assets/inputs/imgs/img_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..944f15ab131c77613c11c668a0ced4d531c5f9f5 GIT binary patch literal 36300 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≧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

    YX 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

    $Jp8xd+S>!lmQ* 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�yb!>@Q-CnEz?2qd5 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

    =REwM=!prGCiEAQ8anJVYYON-_gmLv=Z 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 F{{RzOD@_0Z literal 0 HcmV?d00001 diff --git a/configs/attentions/wan_i2v_flash.json b/configs/attentions/wan_i2v_flash.json new file mode 100644 index 0000000..24c7a57 --- /dev/null +++ b/configs/attentions/wan_i2v_flash.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_i2v_nbhd_480p.json b/configs/attentions/wan_i2v_nbhd_480p.json new file mode 100644 index 0000000..2ca3bca --- /dev/null +++ b/configs/attentions/wan_i2v_nbhd_480p.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "nbhd_attn", + "nbhd_attn_setting": { + "coefficient": [1.0, 0.5, 0.25, 0.25], + "min_width": 2.0 + }, + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_i2v_nbhd_720p.json b/configs/attentions/wan_i2v_nbhd_720p.json new file mode 100644 index 0000000..10a99cf --- /dev/null +++ b/configs/attentions/wan_i2v_nbhd_720p.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "nbhd_attn", + "nbhd_attn_setting": { + "coefficient": [1.0, 0.5, 0.25, 0.25], + "min_width": 2.0 + }, + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_i2v_radial.json b/configs/attentions/wan_i2v_radial.json new file mode 100644 index 0000000..428517a --- /dev/null +++ b/configs/attentions/wan_i2v_radial.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "radial_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_i2v_sage.json b/configs/attentions/wan_i2v_sage.json new file mode 100644 index 0000000..9a278a5 --- /dev/null +++ b/configs/attentions/wan_i2v_sage.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_i2v_svg.json b/configs/attentions/wan_i2v_svg.json new file mode 100644 index 0000000..e3d677d --- /dev/null +++ b/configs/attentions/wan_i2v_svg.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "svg_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_i2v_svg2.json b/configs/attentions/wan_i2v_svg2.json new file mode 100644 index 0000000..4f70707 --- /dev/null +++ b/configs/attentions/wan_i2v_svg2.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "svg2_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/attentions/wan_t2v_sparge.json b/configs/attentions/wan_t2v_sparge.json new file mode 100644 index 0000000..64cce21 --- /dev/null +++ b/configs/attentions/wan_t2v_sparge.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "sparge": true, + "sparge_ckpt": "/path/to/sparge_wan2.1_t2v_1.3B.pt" +} diff --git a/configs/bench/lightx2v_1.json b/configs/bench/lightx2v_1.json new file mode 100644 index 0000000..9a278a5 --- /dev/null +++ b/configs/bench/lightx2v_1.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/bench/lightx2v_2.json b/configs/bench/lightx2v_2.json new file mode 100644 index 0000000..9a278a5 --- /dev/null +++ b/configs/bench/lightx2v_2.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/bench/lightx2v_3.json b/configs/bench/lightx2v_3.json new file mode 100644 index 0000000..2ef4723 --- /dev/null +++ b/configs/bench/lightx2v_3.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "use_tiling_vae": true +} diff --git a/configs/bench/lightx2v_3_distill.json b/configs/bench/lightx2v_3_distill.json new file mode 100644 index 0000000..7cc8d37 --- /dev/null +++ b/configs/bench/lightx2v_3_distill.json @@ -0,0 +1,22 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "use_tiling_vae": true +} diff --git a/configs/bench/lightx2v_4.json b/configs/bench/lightx2v_4.json new file mode 100644 index 0000000..7d83a74 --- /dev/null +++ b/configs/bench/lightx2v_4.json @@ -0,0 +1,35 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "feature_caching": "Tea", + "coefficients": [ + [ + 2.57151496e05, + -3.54229917e04, + 1.40286849e03, + -1.35890334e01, + 1.32517977e-01 + ], + [ + -3.02331670e02, + 2.23948934e02, + -5.25463970e01, + 5.87348440e00, + -2.01973289e-01 + ] + ], + "use_ret_steps": false, + "teacache_thresh": 0.2, + "use_tiling_vae": true +} diff --git a/configs/bench/lightx2v_5.json b/configs/bench/lightx2v_5.json new file mode 100644 index 0000000..a9a7281 --- /dev/null +++ b/configs/bench/lightx2v_5.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 0.8, + "t5_cpu_offload": true, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "use_tiling_vae": true +} diff --git a/configs/bench/lightx2v_5_distill.json b/configs/bench/lightx2v_5_distill.json new file mode 100644 index 0000000..8d215c9 --- /dev/null +++ b/configs/bench/lightx2v_5_distill.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 0.8, + "t5_cpu_offload": true, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "use_tiling_vae": true +} diff --git a/configs/bench/lightx2v_6.json b/configs/bench/lightx2v_6.json new file mode 100644 index 0000000..a9a7281 --- /dev/null +++ b/configs/bench/lightx2v_6.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 0.8, + "t5_cpu_offload": true, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "use_tiling_vae": true +} diff --git a/configs/bench/lightx2v_6_distill.json b/configs/bench/lightx2v_6_distill.json new file mode 100644 index 0000000..8d215c9 --- /dev/null +++ b/configs/bench/lightx2v_6_distill.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 0.8, + "t5_cpu_offload": true, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "use_tiling_vae": true +} diff --git a/configs/caching/adacache/wan_i2v_ada.json b/configs/caching/adacache/wan_i2v_ada.json new file mode 100644 index 0000000..90e635c --- /dev/null +++ b/configs/caching/adacache/wan_i2v_ada.json @@ -0,0 +1,15 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "seed": 442, + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Ada" +} diff --git a/configs/caching/adacache/wan_t2v_ada.json b/configs/caching/adacache/wan_t2v_ada.json new file mode 100644 index 0000000..88ea178 --- /dev/null +++ b/configs/caching/adacache/wan_t2v_ada.json @@ -0,0 +1,15 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Ada" +} diff --git a/configs/caching/custom/wan_i2v_custom_480p.json b/configs/caching/custom/wan_i2v_custom_480p.json new file mode 100644 index 0000000..4980e8f --- /dev/null +++ b/configs/caching/custom/wan_i2v_custom_480p.json @@ -0,0 +1,21 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "seed": 442, + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Custom", + "coefficients": [ + [2.57151496e05, -3.54229917e04, 1.40286849e03, -1.35890334e01, 1.32517977e-01], + [-3.02331670e02, 2.23948934e02, -5.25463970e01, 5.87348440e00, -2.01973289e-01] + ], + "use_ret_steps": false, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/custom/wan_i2v_custom_720p.json b/configs/caching/custom/wan_i2v_custom_720p.json new file mode 100644 index 0000000..7a72be1 --- /dev/null +++ b/configs/caching/custom/wan_i2v_custom_720p.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 1280, + "target_width": 720, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Custom", + "coefficients": [ + [ + 8.10705460e03, + 2.13393892e03, + -3.72934672e02, + 1.66203073e01, + -4.17769401e-02 + ], + [ + -114.36346466, + 65.26524496, + -18.82220707, + 4.91518089, + -0.23412683 + ] + ], + "use_ret_steps": false, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/custom/wan_t2v_custom_14b.json b/configs/caching/custom/wan_t2v_custom_14b.json new file mode 100644 index 0000000..cdd2428 --- /dev/null +++ b/configs/caching/custom/wan_t2v_custom_14b.json @@ -0,0 +1,33 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Custom", + "coefficients": [ + [ + -3.03318725e05, + 4.90537029e04, + -2.65530556e03, + 5.87365115e01, + -3.15583525e-01 + ], + [ + -5784.54975374, + 5449.50911966, + -1811.16591783, + 256.27178429, + -13.02252404 + ] + ], + "use_ret_steps": false, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/custom/wan_t2v_custom_1_3b.json b/configs/caching/custom/wan_t2v_custom_1_3b.json new file mode 100644 index 0000000..1412ba2 --- /dev/null +++ b/configs/caching/custom/wan_t2v_custom_1_3b.json @@ -0,0 +1,33 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Custom", + "coefficients": [ + [ + -5.21862437e04, + 9.23041404e03, + -5.28275948e02, + 1.36987616e01, + -4.99875664e-02 + ], + [ + 2.39676752e03, + -1.31110545e03, + 2.01331979e02, + -8.29855975e00, + 1.37887774e-01 + ] + ], + "use_ret_steps": false, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/dualblock/wan_t2v_1_3b.json b/configs/caching/dualblock/wan_t2v_1_3b.json new file mode 100644 index 0000000..f81f56c --- /dev/null +++ b/configs/caching/dualblock/wan_t2v_1_3b.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "DualBlock", + "residual_diff_threshold": 0.03, + "downsample_factor": 2 +} diff --git a/configs/caching/dynamicblock/wan_t2v_1_3b.json b/configs/caching/dynamicblock/wan_t2v_1_3b.json new file mode 100644 index 0000000..fa24ba9 --- /dev/null +++ b/configs/caching/dynamicblock/wan_t2v_1_3b.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "DynamicBlock", + "residual_diff_threshold": 0.003, + "downsample_factor": 2 +} diff --git a/configs/caching/firstblock/wan_t2v_1_3b.json b/configs/caching/firstblock/wan_t2v_1_3b.json new file mode 100644 index 0000000..7dd393d --- /dev/null +++ b/configs/caching/firstblock/wan_t2v_1_3b.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "FirstBlock", + "residual_diff_threshold": 0.02, + "downsample_factor": 2 +} diff --git a/configs/caching/magcache/wan_i2v_dist_cfg_ulysses_mag_480p.json b/configs/caching/magcache/wan_i2v_dist_cfg_ulysses_mag_480p.json new file mode 100644 index 0000000..0c7329e --- /dev/null +++ b/configs/caching/magcache/wan_i2v_dist_cfg_ulysses_mag_480p.json @@ -0,0 +1,109 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + }, + "feature_caching": "Mag", + "magcache_calibration": false, + "magcache_K": 6, + "magcache_thresh": 0.24, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [ + [ + 1.0, + 0.98783, + 0.97559, + 0.98311, + 0.98202, + 0.9888, + 0.98762, + 0.98957, + 0.99052, + 0.99383, + 0.98857, + 0.99065, + 0.98845, + 0.99057, + 0.98957, + 0.98601, + 0.98823, + 0.98756, + 0.98808, + 0.98721, + 0.98571, + 0.98543, + 0.98157, + 0.98411, + 0.97952, + 0.98149, + 0.9774, + 0.97825, + 0.97355, + 0.97085, + 0.97056, + 0.96588, + 0.96113, + 0.9567, + 0.94961, + 0.93973, + 0.93217, + 0.91878, + 0.90955, + 0.92617 + ], + [ + 1.0, + 0.98993, + 0.97593, + 0.98319, + 0.98225, + 0.98878, + 0.98759, + 0.98971, + 0.99043, + 0.99384, + 0.9886, + 0.99068, + 0.98847, + 0.99057, + 0.98961, + 0.9861, + 0.98823, + 0.98759, + 0.98814, + 0.98724, + 0.98572, + 0.98544, + 0.98165, + 0.98413, + 0.97953, + 0.9815, + 0.97742, + 0.97826, + 0.97361, + 0.97087, + 0.97055, + 0.96587, + 0.96124, + 0.95681, + 0.94969, + 0.93988, + 0.93224, + 0.91896, + 0.90954, + 0.92616 + ] + ] +} diff --git a/configs/caching/magcache/wan_i2v_mag_480p.json b/configs/caching/magcache/wan_i2v_mag_480p.json new file mode 100644 index 0000000..c8588ac --- /dev/null +++ b/configs/caching/magcache/wan_i2v_mag_480p.json @@ -0,0 +1,104 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Mag", + "magcache_calibration": false, + "magcache_K": 6, + "magcache_thresh": 0.24, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [ + [ + 1.0, + 0.98783, + 0.97559, + 0.98311, + 0.98202, + 0.9888, + 0.98762, + 0.98957, + 0.99052, + 0.99383, + 0.98857, + 0.99065, + 0.98845, + 0.99057, + 0.98957, + 0.98601, + 0.98823, + 0.98756, + 0.98808, + 0.98721, + 0.98571, + 0.98543, + 0.98157, + 0.98411, + 0.97952, + 0.98149, + 0.9774, + 0.97825, + 0.97355, + 0.97085, + 0.97056, + 0.96588, + 0.96113, + 0.9567, + 0.94961, + 0.93973, + 0.93217, + 0.91878, + 0.90955, + 0.92617 + ], + [ + 1.0, + 0.98993, + 0.97593, + 0.98319, + 0.98225, + 0.98878, + 0.98759, + 0.98971, + 0.99043, + 0.99384, + 0.9886, + 0.99068, + 0.98847, + 0.99057, + 0.98961, + 0.9861, + 0.98823, + 0.98759, + 0.98814, + 0.98724, + 0.98572, + 0.98544, + 0.98165, + 0.98413, + 0.97953, + 0.9815, + 0.97742, + 0.97826, + 0.97361, + 0.97087, + 0.97055, + 0.96587, + 0.96124, + 0.95681, + 0.94969, + 0.93988, + 0.93224, + 0.91896, + 0.90954, + 0.92616 + ] + ] +} diff --git a/configs/caching/magcache/wan_i2v_mag_calibration_480p.json b/configs/caching/magcache/wan_i2v_mag_calibration_480p.json new file mode 100644 index 0000000..d331d33 --- /dev/null +++ b/configs/caching/magcache/wan_i2v_mag_calibration_480p.json @@ -0,0 +1,104 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Mag", + "magcache_calibration": true, + "magcache_K": 6, + "magcache_thresh": 0.24, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [ + [ + 1.0, + 0.98783, + 0.97559, + 0.98311, + 0.98202, + 0.9888, + 0.98762, + 0.98957, + 0.99052, + 0.99383, + 0.98857, + 0.99065, + 0.98845, + 0.99057, + 0.98957, + 0.98601, + 0.98823, + 0.98756, + 0.98808, + 0.98721, + 0.98571, + 0.98543, + 0.98157, + 0.98411, + 0.97952, + 0.98149, + 0.9774, + 0.97825, + 0.97355, + 0.97085, + 0.97056, + 0.96588, + 0.96113, + 0.9567, + 0.94961, + 0.93973, + 0.93217, + 0.91878, + 0.90955, + 0.92617 + ], + [ + 1.0, + 0.98993, + 0.97593, + 0.98319, + 0.98225, + 0.98878, + 0.98759, + 0.98971, + 0.99043, + 0.99384, + 0.9886, + 0.99068, + 0.98847, + 0.99057, + 0.98961, + 0.9861, + 0.98823, + 0.98759, + 0.98814, + 0.98724, + 0.98572, + 0.98544, + 0.98165, + 0.98413, + 0.97953, + 0.9815, + 0.97742, + 0.97826, + 0.97361, + 0.97087, + 0.97055, + 0.96587, + 0.96124, + 0.95681, + 0.94969, + 0.93988, + 0.93224, + 0.91896, + 0.90954, + 0.92616 + ] + ] +} diff --git a/configs/caching/magcache/wan_t2v_dist_cfg_ulysses_mag_1_3b.json b/configs/caching/magcache/wan_t2v_dist_cfg_ulysses_mag_1_3b.json new file mode 100644 index 0000000..3c5c5f8 --- /dev/null +++ b/configs/caching/magcache/wan_t2v_dist_cfg_ulysses_mag_1_3b.json @@ -0,0 +1,130 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + }, + "feature_caching": "Mag", + "magcache_calibration": false, + "magcache_K": 4, + "magcache_thresh": 0.12, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [ + [ + 1.0, + 1.0124, + 1.00166, + 0.99791, + 0.99682, + 0.99634, + 0.99567, + 0.99416, + 0.99578, + 0.9957, + 0.99511, + 0.99535, + 0.99552, + 0.99541, + 0.9954, + 0.99489, + 0.99518, + 0.99484, + 0.99481, + 0.99415, + 0.99419, + 0.99396, + 0.99388, + 0.99349, + 0.99309, + 0.9927, + 0.99228, + 0.99171, + 0.99137, + 0.99068, + 0.99005, + 0.98944, + 0.98849, + 0.98758, + 0.98644, + 0.98504, + 0.9836, + 0.98202, + 0.97977, + 0.97717, + 0.9741, + 0.97003, + 0.96538, + 0.9593, + 0.95086, + 0.94013, + 0.92402, + 0.90241, + 0.86821, + 0.81838 + ], + [ + 1.0, + 1.02213, + 1.0041, + 1.00061, + 0.99762, + 0.99685, + 0.99586, + 0.99422, + 0.99575, + 0.99563, + 0.99506, + 0.99531, + 0.99549, + 0.99539, + 0.99536, + 0.99485, + 0.99514, + 0.99478, + 0.99479, + 0.99413, + 0.99416, + 0.99393, + 0.99386, + 0.99349, + 0.99304, + 0.9927, + 0.99226, + 0.9917, + 0.99135, + 0.99063, + 0.99003, + 0.98942, + 0.98849, + 0.98757, + 0.98643, + 0.98503, + 0.98359, + 0.98201, + 0.97978, + 0.97718, + 0.97411, + 0.97002, + 0.96541, + 0.95933, + 0.95089, + 0.94019, + 0.92414, + 0.9026, + 0.86868, + 0.81939 + ] + ] +} diff --git a/configs/caching/magcache/wan_t2v_mag_1_3b.json b/configs/caching/magcache/wan_t2v_mag_1_3b.json new file mode 100644 index 0000000..aaec17e --- /dev/null +++ b/configs/caching/magcache/wan_t2v_mag_1_3b.json @@ -0,0 +1,125 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Mag", + "magcache_calibration": false, + "magcache_K": 4, + "magcache_thresh": 0.12, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [ + [ + 1.0, + 1.0124, + 1.00166, + 0.99791, + 0.99682, + 0.99634, + 0.99567, + 0.99416, + 0.99578, + 0.9957, + 0.99511, + 0.99535, + 0.99552, + 0.99541, + 0.9954, + 0.99489, + 0.99518, + 0.99484, + 0.99481, + 0.99415, + 0.99419, + 0.99396, + 0.99388, + 0.99349, + 0.99309, + 0.9927, + 0.99228, + 0.99171, + 0.99137, + 0.99068, + 0.99005, + 0.98944, + 0.98849, + 0.98758, + 0.98644, + 0.98504, + 0.9836, + 0.98202, + 0.97977, + 0.97717, + 0.9741, + 0.97003, + 0.96538, + 0.9593, + 0.95086, + 0.94013, + 0.92402, + 0.90241, + 0.86821, + 0.81838 + ], + [ + 1.0, + 1.02213, + 1.0041, + 1.00061, + 0.99762, + 0.99685, + 0.99586, + 0.99422, + 0.99575, + 0.99563, + 0.99506, + 0.99531, + 0.99549, + 0.99539, + 0.99536, + 0.99485, + 0.99514, + 0.99478, + 0.99479, + 0.99413, + 0.99416, + 0.99393, + 0.99386, + 0.99349, + 0.99304, + 0.9927, + 0.99226, + 0.9917, + 0.99135, + 0.99063, + 0.99003, + 0.98942, + 0.98849, + 0.98757, + 0.98643, + 0.98503, + 0.98359, + 0.98201, + 0.97978, + 0.97718, + 0.97411, + 0.97002, + 0.96541, + 0.95933, + 0.95089, + 0.94019, + 0.92414, + 0.9026, + 0.86868, + 0.81939 + ] + ] +} diff --git a/configs/caching/magcache/wan_t2v_mag_calibration_1_3b.json b/configs/caching/magcache/wan_t2v_mag_calibration_1_3b.json new file mode 100644 index 0000000..ac5b5fc --- /dev/null +++ b/configs/caching/magcache/wan_t2v_mag_calibration_1_3b.json @@ -0,0 +1,125 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Mag", + "magcache_calibration": true, + "magcache_K": 4, + "magcache_thresh": 0.12, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [ + [ + 1.0, + 1.0124, + 1.00166, + 0.99791, + 0.99682, + 0.99634, + 0.99567, + 0.99416, + 0.99578, + 0.9957, + 0.99511, + 0.99535, + 0.99552, + 0.99541, + 0.9954, + 0.99489, + 0.99518, + 0.99484, + 0.99481, + 0.99415, + 0.99419, + 0.99396, + 0.99388, + 0.99349, + 0.99309, + 0.9927, + 0.99228, + 0.99171, + 0.99137, + 0.99068, + 0.99005, + 0.98944, + 0.98849, + 0.98758, + 0.98644, + 0.98504, + 0.9836, + 0.98202, + 0.97977, + 0.97717, + 0.9741, + 0.97003, + 0.96538, + 0.9593, + 0.95086, + 0.94013, + 0.92402, + 0.90241, + 0.86821, + 0.81838 + ], + [ + 1.0, + 1.02213, + 1.0041, + 1.00061, + 0.99762, + 0.99685, + 0.99586, + 0.99422, + 0.99575, + 0.99563, + 0.99506, + 0.99531, + 0.99549, + 0.99539, + 0.99536, + 0.99485, + 0.99514, + 0.99478, + 0.99479, + 0.99413, + 0.99416, + 0.99393, + 0.99386, + 0.99349, + 0.99304, + 0.9927, + 0.99226, + 0.9917, + 0.99135, + 0.99063, + 0.99003, + 0.98942, + 0.98849, + 0.98757, + 0.98643, + 0.98503, + 0.98359, + 0.98201, + 0.97978, + 0.97718, + 0.97411, + 0.97002, + 0.96541, + 0.95933, + 0.95089, + 0.94019, + 0.92414, + 0.9026, + 0.86868, + 0.81939 + ] + ] +} diff --git a/configs/caching/taylorseer/wan_t2v_taylorseer.json b/configs/caching/taylorseer/wan_t2v_taylorseer.json new file mode 100644 index 0000000..bb4b441 --- /dev/null +++ b/configs/caching/taylorseer/wan_t2v_taylorseer.json @@ -0,0 +1,15 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "TaylorSeer" +} diff --git a/configs/caching/teacache/wan_i2v_tea_480p.json b/configs/caching/teacache/wan_i2v_tea_480p.json new file mode 100644 index 0000000..cde8fc6 --- /dev/null +++ b/configs/caching/teacache/wan_i2v_tea_480p.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Tea", + "coefficients": [ + [ + 2.57151496e05, + -3.54229917e04, + 1.40286849e03, + -1.35890334e01, + 1.32517977e-01 + ], + [ + -3.02331670e02, + 2.23948934e02, + -5.25463970e01, + 5.87348440e00, + -2.01973289e-01 + ] + ], + "use_ret_steps": true, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/teacache/wan_i2v_tea_720p.json b/configs/caching/teacache/wan_i2v_tea_720p.json new file mode 100644 index 0000000..2ff56d0 --- /dev/null +++ b/configs/caching/teacache/wan_i2v_tea_720p.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 1280, + "target_width": 720, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Tea", + "coefficients": [ + [ + 8.10705460e03, + 2.13393892e03, + -3.72934672e02, + 1.66203073e01, + -4.17769401e-02 + ], + [ + -114.36346466, + 65.26524496, + -18.82220707, + 4.91518089, + -0.23412683 + ] + ], + "use_ret_steps": true, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/teacache/wan_t2v_1_3b_tea_480p.json b/configs/caching/teacache/wan_t2v_1_3b_tea_480p.json new file mode 100644 index 0000000..cdb266e --- /dev/null +++ b/configs/caching/teacache/wan_t2v_1_3b_tea_480p.json @@ -0,0 +1,33 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "feature_caching": "Tea", + "coefficients": [ + [ + -5.21862437e04, + 9.23041404e03, + -5.28275948e02, + 1.36987616e01, + -4.99875664e-02 + ], + [ + 2.39676752e03, + -1.31110545e03, + 2.01331979e02, + -8.29855975e00, + 1.37887774e-01 + ] + ], + "use_ret_steps": true, + "teacache_thresh": 0.26 +} diff --git a/configs/caching/teacache/wan_ti2v_tea_720p.json b/configs/caching/teacache/wan_ti2v_tea_720p.json new file mode 100644 index 0000000..1ea5241 --- /dev/null +++ b/configs/caching/teacache/wan_ti2v_tea_720p.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [4, 16, 16], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "feature_caching": "Tea", + "coefficients": [ + [], + [ 1.57472669e+05, -1.15702395e+05, 3.10761669e+04, -3.83116651e+03, 2.21608777e+02, -4.81179567e+00] + ], + "use_ret_steps": false, + "teacache_thresh": 0.26, + "use_image_encoder": false +} diff --git a/configs/causvid/wan_i2v_causvid.json b/configs/causvid/wan_i2v_causvid.json new file mode 100644 index 0000000..3a1acf1 --- /dev/null +++ b/configs/causvid/wan_i2v_causvid.json @@ -0,0 +1,29 @@ +{ + "infer_steps": 20, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "num_fragments": 3, + "num_frames": 21, + "num_frame_per_block": 7, + "num_blocks": 3, + "frame_seq_length": 1560, + "denoising_step_list": [ + 999, + 934, + 862, + 756, + 603, + 410, + 250, + 140, + 74 + ] +} diff --git a/configs/causvid/wan_t2v_causvid.json b/configs/causvid/wan_t2v_causvid.json new file mode 100644 index 0000000..253f453 --- /dev/null +++ b/configs/causvid/wan_t2v_causvid.json @@ -0,0 +1,29 @@ +{ + "infer_steps": 9, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "num_fragments": 3, + "num_frames": 21, + "num_frame_per_block": 3, + "num_blocks": 7, + "frame_seq_length": 1560, + "denoising_step_list": [ + 999, + 934, + 862, + 756, + 603, + 410, + 250, + 140, + 74 + ] +} diff --git a/configs/changing_resolution/wan_i2v.json b/configs/changing_resolution/wan_i2v.json new file mode 100644 index 0000000..7b828d4 --- /dev/null +++ b/configs/changing_resolution/wan_i2v.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false, + "changing_resolution": true, + "resolution_rate": [ + 0.75 + ], + "changing_resolution_steps": [ + 20 + ] +} diff --git a/configs/changing_resolution/wan_i2v_U.json b/configs/changing_resolution/wan_i2v_U.json new file mode 100644 index 0000000..0f80775 --- /dev/null +++ b/configs/changing_resolution/wan_i2v_U.json @@ -0,0 +1,22 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false, + "changing_resolution": true, + "resolution_rate": [ + 1.0, + 0.75 + ], + "changing_resolution_steps": [ + 5, + 25 + ] +} diff --git a/configs/changing_resolution/wan_t2v.json b/configs/changing_resolution/wan_t2v.json new file mode 100644 index 0000000..7878277 --- /dev/null +++ b/configs/changing_resolution/wan_t2v.json @@ -0,0 +1,21 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "changing_resolution": true, + "resolution_rate": [ + 0.75 + ], + "changing_resolution_steps": [ + 25 + ] +} diff --git a/configs/changing_resolution/wan_t2v_U.json b/configs/changing_resolution/wan_t2v_U.json new file mode 100644 index 0000000..68531e6 --- /dev/null +++ b/configs/changing_resolution/wan_t2v_U.json @@ -0,0 +1,23 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "changing_resolution": true, + "resolution_rate": [ + 1.0, + 0.75 + ], + "changing_resolution_steps": [ + 10, + 35 + ] +} diff --git a/configs/changing_resolution/wan_t2v_U_teacache.json b/configs/changing_resolution/wan_t2v_U_teacache.json new file mode 100644 index 0000000..60ccc67 --- /dev/null +++ b/configs/changing_resolution/wan_t2v_U_teacache.json @@ -0,0 +1,42 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "changing_resolution": true, + "resolution_rate": [ + 1.0, + 0.75 + ], + "changing_resolution_steps": [ + 10, + 35 + ], + "feature_caching": "Tea", + "coefficients": [ + [ + -5.21862437e04, + 9.23041404e03, + -5.28275948e02, + 1.36987616e01, + -4.99875664e-02 + ], + [ + 2.39676752e03, + -1.31110545e03, + 2.01331979e02, + -8.29855975e00, + 1.37887774e-01 + ] + ], + "use_ret_steps": false, + "teacache_thresh": 0.1 +} diff --git a/configs/deploy/wan_i2v.json b/configs/deploy/wan_i2v.json new file mode 100644 index 0000000..9f1fbde --- /dev/null +++ b/configs/deploy/wan_i2v.json @@ -0,0 +1,30 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "sub_servers": { + "dit": [ + "http://localhost:9000" + ], + "prompt_enhancer": [ + "http://localhost:9001" + ], + "text_encoders": [ + "http://localhost:9002" + ], + "image_encoder": [ + "http://localhost:9003" + ], + "vae_model": [ + "http://localhost:9004" + ] + } +} diff --git a/configs/deploy/wan_t2v.json b/configs/deploy/wan_t2v.json new file mode 100644 index 0000000..43656d7 --- /dev/null +++ b/configs/deploy/wan_t2v.json @@ -0,0 +1,31 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "sub_servers": { + "dit": [ + "http://localhost:9000" + ], + "prompt_enhancer": [ + "http://localhost:9001" + ], + "text_encoders": [ + "http://localhost:9002" + ], + "image_encoder": [ + "http://localhost:9003" + ], + "vae_model": [ + "http://localhost:9004" + ] + } +} diff --git a/configs/dist_infer/wan22_moe_i2v_cfg.json b/configs/dist_infer/wan22_moe_i2v_cfg.json new file mode 100644 index 0000000..bafa409 --- /dev/null +++ b/configs/dist_infer/wan22_moe_i2v_cfg.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.900, + "use_image_encoder": false, + "parallel": { + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_moe_i2v_cfg_ulysses.json b/configs/dist_infer/wan22_moe_i2v_cfg_ulysses.json new file mode 100644 index 0000000..91a15a0 --- /dev/null +++ b/configs/dist_infer/wan22_moe_i2v_cfg_ulysses.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "boundary": 0.900, + "use_image_encoder": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_moe_i2v_ulysses.json b/configs/dist_infer/wan22_moe_i2v_ulysses.json new file mode 100644 index 0000000..eb0759b --- /dev/null +++ b/configs/dist_infer/wan22_moe_i2v_ulysses.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.900, + "use_image_encoder": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/dist_infer/wan22_moe_t2v_cfg.json b/configs/dist_infer/wan22_moe_t2v_cfg.json new file mode 100644 index 0000000..f47aad8 --- /dev/null +++ b/configs/dist_infer/wan22_moe_t2v_cfg.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 4.0, + 3.0 + ], + "sample_shift": 12.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.875, + "parallel": { + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_moe_t2v_cfg_ulysses.json b/configs/dist_infer/wan22_moe_t2v_cfg_ulysses.json new file mode 100644 index 0000000..645e6d7 --- /dev/null +++ b/configs/dist_infer/wan22_moe_t2v_cfg_ulysses.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 4.0, + 3.0 + ], + "sample_shift": 12.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.875, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_moe_t2v_ulysses.json b/configs/dist_infer/wan22_moe_t2v_ulysses.json new file mode 100644 index 0000000..03aaf92 --- /dev/null +++ b/configs/dist_infer/wan22_moe_t2v_ulysses.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 4.0, + 3.0 + ], + "sample_shift": 12.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.875, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/dist_infer/wan22_ti2v_i2v_cfg.json b/configs/dist_infer/wan22_ti2v_i2v_cfg.json new file mode 100644 index 0000000..4754ff3 --- /dev/null +++ b/configs/dist_infer/wan22_ti2v_i2v_cfg.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "use_image_encoder": false, + "parallel": { + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_ti2v_i2v_cfg_ulysses.json b/configs/dist_infer/wan22_ti2v_i2v_cfg_ulysses.json new file mode 100644 index 0000000..9e340f4 --- /dev/null +++ b/configs/dist_infer/wan22_ti2v_i2v_cfg_ulysses.json @@ -0,0 +1,27 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "use_image_encoder": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_ti2v_i2v_ulysses.json b/configs/dist_infer/wan22_ti2v_i2v_ulysses.json new file mode 100644 index 0000000..56d0f65 --- /dev/null +++ b/configs/dist_infer/wan22_ti2v_i2v_ulysses.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "use_image_encoder": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/dist_infer/wan22_ti2v_t2v_cfg.json b/configs/dist_infer/wan22_ti2v_t2v_cfg.json new file mode 100644 index 0000000..c88cb2a --- /dev/null +++ b/configs/dist_infer/wan22_ti2v_t2v_cfg.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "parallel": { + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_ti2v_t2v_cfg_ulysses.json b/configs/dist_infer/wan22_ti2v_t2v_cfg_ulysses.json new file mode 100644 index 0000000..79f4f03 --- /dev/null +++ b/configs/dist_infer/wan22_ti2v_t2v_cfg_ulysses.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan22_ti2v_t2v_ulysses.json b/configs/dist_infer/wan22_ti2v_t2v_ulysses.json new file mode 100644 index 0000000..12b1850 --- /dev/null +++ b/configs/dist_infer/wan22_ti2v_t2v_ulysses.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "fps": 24, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/dist_infer/wan_i2v_dist_cfg_ulysses.json b/configs/dist_infer/wan_i2v_dist_cfg_ulysses.json new file mode 100644 index 0000000..001f1f0 --- /dev/null +++ b/configs/dist_infer/wan_i2v_dist_cfg_ulysses.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan_i2v_dist_ring.json b/configs/dist_infer/wan_i2v_dist_ring.json new file mode 100644 index 0000000..fe2608a --- /dev/null +++ b/configs/dist_infer/wan_i2v_dist_ring.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ring" + } +} diff --git a/configs/dist_infer/wan_i2v_dist_ulysses.json b/configs/dist_infer/wan_i2v_dist_ulysses.json new file mode 100644 index 0000000..a8af879 --- /dev/null +++ b/configs/dist_infer/wan_i2v_dist_ulysses.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/dist_infer/wan_t2v_dist_cfg.json b/configs/dist_infer/wan_t2v_dist_cfg.json new file mode 100644 index 0000000..49bc481 --- /dev/null +++ b/configs/dist_infer/wan_t2v_dist_cfg.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan_t2v_dist_cfg_ring.json b/configs/dist_infer/wan_t2v_dist_cfg_ring.json new file mode 100644 index 0000000..50450f4 --- /dev/null +++ b/configs/dist_infer/wan_t2v_dist_cfg_ring.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ring", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan_t2v_dist_cfg_ulysses.json b/configs/dist_infer/wan_t2v_dist_cfg_ulysses.json new file mode 100644 index 0000000..bd6808d --- /dev/null +++ b/configs/dist_infer/wan_t2v_dist_cfg_ulysses.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +} diff --git a/configs/dist_infer/wan_t2v_dist_ring.json b/configs/dist_infer/wan_t2v_dist_ring.json new file mode 100644 index 0000000..a28549b --- /dev/null +++ b/configs/dist_infer/wan_t2v_dist_ring.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ring" + } +} diff --git a/configs/dist_infer/wan_t2v_dist_ulysses.json b/configs/dist_infer/wan_t2v_dist_ulysses.json new file mode 100644 index 0000000..c9b9bc2 --- /dev/null +++ b/configs/dist_infer/wan_t2v_dist_ulysses.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/distill/wan_i2v_distill_4step_cfg.json b/configs/distill/wan_i2v_distill_4step_cfg.json new file mode 100644 index 0000000..519f58a --- /dev/null +++ b/configs/distill/wan_i2v_distill_4step_cfg.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/distill/wan_i2v_distill_4step_cfg_4090.json b/configs/distill/wan_i2v_distill_4step_cfg_4090.json new file mode 100644 index 0000000..c6863a5 --- /dev/null +++ b/configs/distill/wan_i2v_distill_4step_cfg_4090.json @@ -0,0 +1,29 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "clip_cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f" +} diff --git a/configs/distill/wan_i2v_distill_4step_cfg_4090_lora.json b/configs/distill/wan_i2v_distill_4step_cfg_4090_lora.json new file mode 100644 index 0000000..100eb45 --- /dev/null +++ b/configs/distill/wan_i2v_distill_4step_cfg_4090_lora.json @@ -0,0 +1,35 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "clip_cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f", + "lora_configs": [ + { + "path": "lightx2v/Wan2.1-Distill-Loras/wan2.1_i2v_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/distill/wan_i2v_distill_4step_cfg_lora.json b/configs/distill/wan_i2v_distill_4step_cfg_lora.json new file mode 100644 index 0000000..51797dd --- /dev/null +++ b/configs/distill/wan_i2v_distill_4step_cfg_lora.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "denoising_step_list": [1000, 750, 500, 250], + "lora_configs": [ + { + "path": "lightx2v/Wan2.1-Distill-Loras/wan2.1_i2v_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/distill/wan_t2v_distill_4step_cfg.json b/configs/distill/wan_t2v_distill_4step_cfg.json new file mode 100644 index 0000000..89ea067 --- /dev/null +++ b/configs/distill/wan_t2v_distill_4step_cfg.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/distill/wan_t2v_distill_4step_cfg_4090.json b/configs/distill/wan_t2v_distill_4step_cfg_4090.json new file mode 100644 index 0000000..0255d09 --- /dev/null +++ b/configs/distill/wan_t2v_distill_4step_cfg_4090.json @@ -0,0 +1,30 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 6, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "clip_cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f" +} diff --git a/configs/distill/wan_t2v_distill_4step_cfg_dynamic.json b/configs/distill/wan_t2v_distill_4step_cfg_dynamic.json new file mode 100644 index 0000000..f05e728 --- /dev/null +++ b/configs/distill/wan_t2v_distill_4step_cfg_dynamic.json @@ -0,0 +1,22 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 5, + "enable_cfg": false, + "enable_dynamic_cfg": true, + "cfg_scale": 4.0, + "cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/distill/wan_t2v_distill_4step_cfg_lora.json b/configs/distill/wan_t2v_distill_4step_cfg_lora.json new file mode 100644 index 0000000..0388af4 --- /dev/null +++ b/configs/distill/wan_t2v_distill_4step_cfg_lora.json @@ -0,0 +1,21 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "denoising_step_list": [1000, 750, 500, 250], + "lora_configs": [ + { + "path": "lightx2v/Wan2.1-Distill-Loras/wan2.1_t2v_14b_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/distill/wan_t2v_distill_4step_cfg_lora_4090.json b/configs/distill/wan_t2v_distill_4step_cfg_lora_4090.json new file mode 100644 index 0000000..5e87e18 --- /dev/null +++ b/configs/distill/wan_t2v_distill_4step_cfg_lora_4090.json @@ -0,0 +1,36 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 6, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "clip_cpu_offload": false, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f", + "lora_configs": [ + { + "path": "lightx2v/Wan2.1-Distill-Loras/wan2.1_t2v_14b_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16.json b/configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16.json new file mode 100644 index 0000000..ce108bb --- /dev/null +++ b/configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2", + "cpu_offload": true, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16_dist.json b/configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16_dist.json new file mode 100644 index 0000000..8049eda --- /dev/null +++ b/configs/hunyuan_video_15/4090/hy15_t2v_480p_bf16_dist.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 7.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2", + "parallel": { + "seq_p_attn_type": "ulysses-4090", + "seq_p_size": 8 + } +} diff --git a/configs/hunyuan_video_15/4090/hy15_t2v_480p_fp8.json b/configs/hunyuan_video_15/4090/hy15_t2v_480p_fp8.json new file mode 100644 index 0000000..6096bf9 --- /dev/null +++ b/configs/hunyuan_video_15/4090/hy15_t2v_480p_fp8.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2", + "cpu_offload": true, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false, + "dit_quantized_ckpt": "/path/to/480p_t2v_fp8.safetensors", + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "qwen25vl_quantized_ckpt": "/path/to/qwen25vl_fp8.safetensors", + "qwen25vl_quantized": true, + "qwen25vl_quant_scheme": "fp8-q8f" +} diff --git a/configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16.json b/configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16.json new file mode 100644 index 0000000..2668b2b --- /dev/null +++ b/configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn3", + "cpu_offload": true, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16_dist.json b/configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16_dist.json new file mode 100644 index 0000000..d39a773 --- /dev/null +++ b/configs/hunyuan_video_15/5090/hy15_t2v_480p_bf16_dist.json @@ -0,0 +1,22 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn3", + "cpu_offload": true, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false, + "parallel": { + "seq_p_attn_type": "ulysses", + "seq_p_size": 8 + } +} diff --git a/configs/hunyuan_video_15/5090/hy15_t2v_480p_fp8.json b/configs/hunyuan_video_15/5090/hy15_t2v_480p_fp8.json new file mode 100644 index 0000000..303adcd --- /dev/null +++ b/configs/hunyuan_video_15/5090/hy15_t2v_480p_fp8.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn3", + "qwen25vl_cpu_offload": true, + "dit_quantized_ckpt": "/path/to/480p_t2v_fp8.safetensors", + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "qwen25vl_quantized_ckpt": "/path/to/qwen25vl_fp8.safetensors", + "qwen25vl_quantized": true, + "qwen25vl_quant_scheme": "fp8-sgl" +} diff --git a/configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache.json b/configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache.json new file mode 100644 index 0000000..91fe4b2 --- /dev/null +++ b/configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2", + "feature_caching": "Mag", + "magcache_calibration": false, + "magcache_K": 6, + "magcache_thresh": 0.24, + "magcache_retention_ratio": 0.2, + "magcache_ratios": [[1.0, 1.01562, 1.00781, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.99609, 1.0, 0.99609, 1.0, 0.99609, 1.0, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99219, 0.99219, 0.99219, 0.98828, 0.98828, 0.98828, 0.98828, 0.98438, 0.98438, 0.98047, 0.98047, 0.97656, 0.97266, 0.96484, 0.95703, 0.94922, 0.92969, 0.91016, 0.88672], [1.0, 1.02344, 1.00781, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.99609, 1.0, 0.99609, 1.0, 0.99609, 1.0, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99609, 0.99219, 0.99219, 0.99219, 0.99219, 0.98828, 0.98828, 0.98828, 0.98438, 0.98438, 0.98047, 0.98047, 0.97656, 0.97266, 0.96484, 0.95703, 0.94922, 0.93359, 0.91016, 0.88672]] +} diff --git a/configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache_calibration.json b/configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache_calibration.json new file mode 100644 index 0000000..ba18007 --- /dev/null +++ b/configs/hunyuan_video_15/cache/hy_15_i2v_480p_magcache_calibration.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2", + "feature_caching": "Mag", + "magcache_calibration": true +} diff --git a/configs/hunyuan_video_15/cache/hy_15_i2v_480p_teacache.json b/configs/hunyuan_video_15/cache/hy_15_i2v_480p_teacache.json new file mode 100644 index 0000000..6872b0b --- /dev/null +++ b/configs/hunyuan_video_15/cache/hy_15_i2v_480p_teacache.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "feature_caching": "Tea", + "coefficients": [8.08528429e+03 ,-2.44607178e+03, 2.49489589e+02, -9.10697865e+00, 1.20261379e-01], + "teacache_thresh": 0.15, + "cpu_offload": false, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/cache/hy_15_i2v_720p_teacache.json b/configs/hunyuan_video_15/cache/hy_15_i2v_720p_teacache.json new file mode 100644 index 0000000..252a80b --- /dev/null +++ b/configs/hunyuan_video_15/cache/hy_15_i2v_720p_teacache.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 50, + "transformer_model_name": "720p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 7.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "feature_caching": "Tea", + "coefficients": [3.84300014e+03, -1.39247433e+03, 1.69167679e+02, -7.07679232e+00, 1.02419011e-01], + "teacache_thresh": 0.15, + "cpu_offload": false, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/cache/hy_15_t2v_480p_teacache.json b/configs/hunyuan_video_15/cache/hy_15_t2v_480p_teacache.json new file mode 100644 index 0000000..d2925d3 --- /dev/null +++ b/configs/hunyuan_video_15/cache/hy_15_t2v_480p_teacache.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "feature_caching": "Tea", + "coefficients": [-2.97190924e+04, 2.22834983e+04, -4.37418360e+03, 3.39340251e+02, -1.01365855e+01, 1.29101768e-01], + "teacache_thresh": 0.15, + "cpu_offload": false, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/cache/hy_15_t2v_720p_teacache.json b/configs/hunyuan_video_15/cache/hy_15_t2v_720p_teacache.json new file mode 100644 index 0000000..97b24ea --- /dev/null +++ b/configs/hunyuan_video_15/cache/hy_15_t2v_720p_teacache.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 50, + "transformer_model_name": "729p_t2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "feature_caching": "Tea", + "coefficients": [-3.08907507e+04, 1.67786188e+04, -3.19178643e+03, 2.60740519e+02, -8.19205881e+00, 1.07913775e-01], + "teacache_thresh": 0.15, + "cpu_offload": false, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/fp8comm/hy15_i2v_480p_int8_offload_dist_fp8_comm.json b/configs/hunyuan_video_15/fp8comm/hy15_i2v_480p_int8_offload_dist_fp8_comm.json new file mode 100644 index 0000000..a9fc933 --- /dev/null +++ b/configs/hunyuan_video_15/fp8comm/hy15_i2v_480p_int8_offload_dist_fp8_comm.json @@ -0,0 +1,23 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": false, + "attn_type": "sage_attn3", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false, + "dit_quantized_ckpt": "/path/to/quant_model.safetensors", + "dit_quantized": true, + "dit_quant_scheme": "int8-q8f", + "parallel": { + "seq_p_size": 8, + "seq_p_fp8_comm": true, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/hunyuan_video_15/hunyuan_video_i2v_480p.json b/configs/hunyuan_video_15/hunyuan_video_i2v_480p.json new file mode 100644 index 0000000..3262459 --- /dev/null +++ b/configs/hunyuan_video_15/hunyuan_video_i2v_480p.json @@ -0,0 +1,11 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2" +} diff --git a/configs/hunyuan_video_15/hunyuan_video_i2v_720p.json b/configs/hunyuan_video_15/hunyuan_video_i2v_720p.json new file mode 100644 index 0000000..f993a5c --- /dev/null +++ b/configs/hunyuan_video_15/hunyuan_video_i2v_720p.json @@ -0,0 +1,11 @@ +{ + "infer_steps": 50, + "transformer_model_name": "720p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 7.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2" +} diff --git a/configs/hunyuan_video_15/hunyuan_video_i2v_720p_cfg_distilled.json b/configs/hunyuan_video_15/hunyuan_video_i2v_720p_cfg_distilled.json new file mode 100644 index 0000000..a467d44 --- /dev/null +++ b/configs/hunyuan_video_15/hunyuan_video_i2v_720p_cfg_distilled.json @@ -0,0 +1,11 @@ +{ + "infer_steps": 50, + "transformer_model_name": "720p_i2v_distilled", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 9.0, + "sample_guide_scale": 6.0, + "enable_cfg": false, + "attn_type": "sage_attn2" +} diff --git a/configs/hunyuan_video_15/hunyuan_video_t2v_480p.json b/configs/hunyuan_video_15/hunyuan_video_t2v_480p.json new file mode 100644 index 0000000..28ca4b9 --- /dev/null +++ b/configs/hunyuan_video_15/hunyuan_video_t2v_480p.json @@ -0,0 +1,12 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2" +} diff --git a/configs/hunyuan_video_15/hunyuan_video_t2v_480p_distill.json b/configs/hunyuan_video_15/hunyuan_video_t2v_480p_distill.json new file mode 100644 index 0000000..f4d9ceb --- /dev/null +++ b/configs/hunyuan_video_15/hunyuan_video_t2v_480p_distill.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 4, + "transformer_model_name": "480p_t2v", + "fps": 16, + "target_video_length": 81, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": -1.0, + "enable_cfg": false, + "attn_type": "sage_attn2", + "dit_original_ckpt": "hunyuanvideo-1.5/distill_models/480p_t2v/distill_model.safetensors", + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/hunyuan_video_15/hunyuan_video_t2v_720p.json b/configs/hunyuan_video_15/hunyuan_video_t2v_720p.json new file mode 100644 index 0000000..f8923c1 --- /dev/null +++ b/configs/hunyuan_video_15/hunyuan_video_t2v_720p.json @@ -0,0 +1,12 @@ +{ + "infer_steps": 50, + "transformer_model_name": "720p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 9.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2" +} diff --git a/configs/hunyuan_video_15/lightae/hy15_t2v_480p_bf16.json b/configs/hunyuan_video_15/lightae/hy15_t2v_480p_bf16.json new file mode 100644 index 0000000..6fc26bd --- /dev/null +++ b/configs/hunyuan_video_15/lightae/hy15_t2v_480p_bf16.json @@ -0,0 +1,14 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 7.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "use_tae": true, + "tae_path": "/path/to/lighttae" +} diff --git a/configs/hunyuan_video_15/offload/hy15_t2v_480p_bf16.json b/configs/hunyuan_video_15/offload/hy15_t2v_480p_bf16.json new file mode 100644 index 0000000..1055492 --- /dev/null +++ b/configs/hunyuan_video_15/offload/hy15_t2v_480p_bf16.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 7.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "sage_attn2", + "cpu_offload": true, + "offload_granularity": "block", + "vae_cpu_offload": false, + "byt5_cpu_offload": false, + "qwen25vl_cpu_offload": true, + "siglip_cpu_offload": false +} diff --git a/configs/hunyuan_video_15/quant/hy15_t2v_480p_fp8.json b/configs/hunyuan_video_15/quant/hy15_t2v_480p_fp8.json new file mode 100644 index 0000000..196a5b7 --- /dev/null +++ b/configs/hunyuan_video_15/quant/hy15_t2v_480p_fp8.json @@ -0,0 +1,15 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_t2v", + "fps": 24, + "target_video_length": 121, + "aspect_ratio": "16:9", + "vae_stride": [4, 16, 16], + "sample_shift": 7.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "dit_quantized_ckpt": "/path/to/quant_model.safetensors", + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl" +} diff --git a/configs/hunyuan_video_15/vsr/hy15_i2v_480p.json b/configs/hunyuan_video_15/vsr/hy15_i2v_480p.json new file mode 100644 index 0000000..4f774ff --- /dev/null +++ b/configs/hunyuan_video_15/vsr/hy15_i2v_480p.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 50, + "transformer_model_name": "480p_i2v", + "fps": 24, + "target_video_length": 121, + "vae_stride": [4, 16, 16], + "sample_shift": 5.0, + "sample_guide_scale": 6.0, + "enable_cfg": true, + "attn_type": "flash_attn3", + "video_super_resolution": { + "sr_version": "720p_sr_distilled", + "flow_shift": 2.0, + "base_resolution": "480p", + "guidance_scale": 1.0, + "num_inference_steps": 6, + "use_meanflow": true + } +} diff --git a/configs/matrix_game2/matrix_game2_gta_drive.json b/configs/matrix_game2/matrix_game2_gta_drive.json new file mode 100644 index 0000000..d1952d8 --- /dev/null +++ b/configs/matrix_game2/matrix_game2_gta_drive.json @@ -0,0 +1,72 @@ +{ + "infer_steps": 50, + "target_video_length": 150, + "num_output_frames": 150, + "text_len": 512, + "target_height": 352, + "target_width": 640, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "local_attn_size": 6, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 880, + "num_output_frames": 150, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 908.8427, 713.9794] + }, + "sub_model_folder": "gta_distilled_model", + "sub_model_name": "gta_keyboard2dim.safetensors", + "mode": "gta_drive", + "streaming": false, + "action_config": { + "blocks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "enable_keyboard": true, + "enable_mouse": true, + "heads_num": 16, + "hidden_size": 128, + "img_hidden_size": 1536, + "keyboard_dim_in": 4, + "keyboard_hidden_dim": 1024, + "mouse_dim_in": 2, + "mouse_hidden_dim": 1024, + "mouse_qk_dim_list": [ + 8, + 28, + 28 + ], + "patch_size": [ + 1, + 2, + 2 + ], + "qk_norm": true, + "qkv_bias": false, + "rope_dim_list": [ + 8, + 28, + 28 + ], + "rope_theta": 256, + "vae_time_compression_ratio": 4, + "windows_size": 3 + }, + "dim": 1536, + "eps": 1e-06, + "ffn_dim": 8960, + "freq_dim": 256, + "in_dim": 36, + "inject_sample_info": false, + "model_type": "i2v", + "num_heads": 12, + "num_layers": 30, + "out_dim": 16 +} diff --git a/configs/matrix_game2/matrix_game2_gta_drive_streaming.json b/configs/matrix_game2/matrix_game2_gta_drive_streaming.json new file mode 100644 index 0000000..584eab0 --- /dev/null +++ b/configs/matrix_game2/matrix_game2_gta_drive_streaming.json @@ -0,0 +1,72 @@ +{ + "infer_steps": 50, + "target_video_length": 360, + "num_output_frames": 360, + "text_len": 512, + "target_height": 352, + "target_width": 640, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "local_attn_size": 6, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 880, + "num_output_frames": 360, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 908.8427, 713.9794] + }, + "sub_model_folder": "gta_distilled_model", + "sub_model_name": "gta_keyboard2dim.safetensors", + "mode": "gta_drive", + "streaming": true, + "action_config": { + "blocks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "enable_keyboard": true, + "enable_mouse": true, + "heads_num": 16, + "hidden_size": 128, + "img_hidden_size": 1536, + "keyboard_dim_in": 4, + "keyboard_hidden_dim": 1024, + "mouse_dim_in": 2, + "mouse_hidden_dim": 1024, + "mouse_qk_dim_list": [ + 8, + 28, + 28 + ], + "patch_size": [ + 1, + 2, + 2 + ], + "qk_norm": true, + "qkv_bias": false, + "rope_dim_list": [ + 8, + 28, + 28 + ], + "rope_theta": 256, + "vae_time_compression_ratio": 4, + "windows_size": 3 + }, + "dim": 1536, + "eps": 1e-06, + "ffn_dim": 8960, + "freq_dim": 256, + "in_dim": 36, + "inject_sample_info": false, + "model_type": "i2v", + "num_heads": 12, + "num_layers": 30, + "out_dim": 16 +} diff --git a/configs/matrix_game2/matrix_game2_templerun.json b/configs/matrix_game2/matrix_game2_templerun.json new file mode 100644 index 0000000..63f1aab --- /dev/null +++ b/configs/matrix_game2/matrix_game2_templerun.json @@ -0,0 +1,65 @@ +{ + "infer_steps": 50, + "target_video_length": 150, + "num_output_frames": 150, + "text_len": 512, + "target_height": 352, + "target_width": 640, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "local_attn_size": 6, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 880, + "num_output_frames": 150, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 908.8427, 713.9794] + }, + "sub_model_folder": "templerun_distilled_model", + "sub_model_name": "templerun_7dim_onlykey.safetensors", + "mode": "templerun", + "streaming": false, + "action_config": { + "blocks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "enable_keyboard": true, + "enable_mouse": false, + "heads_num": 16, + "hidden_size": 128, + "img_hidden_size": 1536, + "keyboard_dim_in": 7, + "keyboard_hidden_dim": 1024, + "patch_size": [ + 1, + 2, + 2 + ], + "qk_norm": true, + "qkv_bias": false, + "rope_dim_list": [ + 8, + 28, + 28 + ], + "rope_theta": 256, + "vae_time_compression_ratio": 4, + "windows_size": 3 + }, + "dim": 1536, + "eps": 1e-06, + "ffn_dim": 8960, + "freq_dim": 256, + "in_dim": 36, + "inject_sample_info": false, + "model_type": "i2v", + "num_heads": 12, + "num_layers": 30, + "out_dim": 16 +} diff --git a/configs/matrix_game2/matrix_game2_templerun_streaming.json b/configs/matrix_game2/matrix_game2_templerun_streaming.json new file mode 100644 index 0000000..90fd295 --- /dev/null +++ b/configs/matrix_game2/matrix_game2_templerun_streaming.json @@ -0,0 +1,72 @@ +{ + "infer_steps": 50, + "target_video_length": 360, + "num_output_frames": 360, + "text_len": 512, + "target_height": 352, + "target_width": 640, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "local_attn_size": 6, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 880, + "num_output_frames": 360, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 908.8427, 713.9794] + }, + "sub_model_folder": "templerun_distilled_model", + "sub_model_name": "templerun_7dim_onlykey.safetensors", + "mode": "templerun", + "streaming": true, + "action_config": { + "blocks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "enable_keyboard": true, + "enable_mouse": true, + "heads_num": 16, + "hidden_size": 128, + "img_hidden_size": 1536, + "keyboard_dim_in": 4, + "keyboard_hidden_dim": 1024, + "mouse_dim_in": 2, + "mouse_hidden_dim": 1024, + "mouse_qk_dim_list": [ + 8, + 28, + 28 + ], + "patch_size": [ + 1, + 2, + 2 + ], + "qk_norm": true, + "qkv_bias": false, + "rope_dim_list": [ + 8, + 28, + 28 + ], + "rope_theta": 256, + "vae_time_compression_ratio": 4, + "windows_size": 3 + }, + "dim": 1536, + "eps": 1e-06, + "ffn_dim": 8960, + "freq_dim": 256, + "in_dim": 36, + "inject_sample_info": false, + "model_type": "i2v", + "num_heads": 12, + "num_layers": 30, + "out_dim": 16 +} diff --git a/configs/matrix_game2/matrix_game2_universal.json b/configs/matrix_game2/matrix_game2_universal.json new file mode 100644 index 0000000..0b801d8 --- /dev/null +++ b/configs/matrix_game2/matrix_game2_universal.json @@ -0,0 +1,72 @@ +{ + "infer_steps": 50, + "target_video_length": 150, + "num_output_frames": 150, + "text_len": 512, + "target_height": 352, + "target_width": 640, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "local_attn_size": 6, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 880, + "num_output_frames": 150, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 908.8427, 713.9794] + }, + "sub_model_folder": "base_distilled_model", + "sub_model_name": "base_distill.safetensors", + "mode": "universal", + "streaming": false, + "action_config": { + "blocks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "enable_keyboard": true, + "enable_mouse": true, + "heads_num": 16, + "hidden_size": 128, + "img_hidden_size": 1536, + "keyboard_dim_in": 4, + "keyboard_hidden_dim": 1024, + "mouse_dim_in": 2, + "mouse_hidden_dim": 1024, + "mouse_qk_dim_list": [ + 8, + 28, + 28 + ], + "patch_size": [ + 1, + 2, + 2 + ], + "qk_norm": true, + "qkv_bias": false, + "rope_dim_list": [ + 8, + 28, + 28 + ], + "rope_theta": 256, + "vae_time_compression_ratio": 4, + "windows_size": 3 + }, + "dim": 1536, + "eps": 1e-06, + "ffn_dim": 8960, + "freq_dim": 256, + "in_dim": 36, + "inject_sample_info": false, + "model_type": "i2v", + "num_heads": 12, + "num_layers": 30, + "out_dim": 16 +} diff --git a/configs/matrix_game2/matrix_game2_universal_streaming.json b/configs/matrix_game2/matrix_game2_universal_streaming.json new file mode 100644 index 0000000..f2c4575 --- /dev/null +++ b/configs/matrix_game2/matrix_game2_universal_streaming.json @@ -0,0 +1,72 @@ +{ + "infer_steps": 50, + "target_video_length": 360, + "num_output_frames": 360, + "text_len": 512, + "target_height": 352, + "target_width": 640, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "local_attn_size": 6, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 880, + "num_output_frames": 360, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 908.8427, 713.9794] + }, + "sub_model_folder": "base_distilled_model", + "sub_model_name": "base_distill.safetensors", + "mode": "universal", + "streaming": true, + "action_config": { + "blocks": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], + "enable_keyboard": true, + "enable_mouse": true, + "heads_num": 16, + "hidden_size": 128, + "img_hidden_size": 1536, + "keyboard_dim_in": 4, + "keyboard_hidden_dim": 1024, + "mouse_dim_in": 2, + "mouse_hidden_dim": 1024, + "mouse_qk_dim_list": [ + 8, + 28, + 28 + ], + "patch_size": [ + 1, + 2, + 2 + ], + "qk_norm": true, + "qkv_bias": false, + "rope_dim_list": [ + 8, + 28, + 28 + ], + "rope_theta": 256, + "vae_time_compression_ratio": 4, + "windows_size": 3 + }, + "dim": 1536, + "eps": 1e-06, + "ffn_dim": 8960, + "freq_dim": 256, + "in_dim": 36, + "inject_sample_info": false, + "model_type": "i2v", + "num_heads": 12, + "num_layers": 30, + "out_dim": 16 +} diff --git a/configs/model_pipeline.json b/configs/model_pipeline.json new file mode 100644 index 0000000..7f2f62b --- /dev/null +++ b/configs/model_pipeline.json @@ -0,0 +1,179 @@ +{ + "data": + { + "t2v": { + "wan2.1-1.3B": { + "single_stage": { + "pipeline": { + "inputs": [], + "outputs": ["output_video"] + } + }, + "multi_stage": { + "text_encoder": { + "inputs": [], + "outputs": ["text_encoder_output"] + }, + "dit": { + "inputs": ["text_encoder_output"], + "outputs": ["latents"] + }, + "vae_decoder": { + "inputs": ["latents"], + "outputs": ["output_video"] + } + } + }, + "self-forcing-dmd": { + "single_stage": { + "pipeline": { + "inputs": [], + "outputs": ["output_video"] + } + } + } + }, + "i2v": { + "wan2.1-14B-480P": { + "single_stage": { + "pipeline": { + "inputs": ["input_image"], + "outputs": ["output_video"] + } + }, + "multi_stage": { + "text_encoder": { + "inputs": ["input_image"], + "outputs": ["text_encoder_output"] + }, + "image_encoder": { + "inputs": ["input_image"], + "outputs": ["clip_encoder_output"] + }, + "vae_encoder": { + "inputs": ["input_image"], + "outputs": ["vae_encoder_output"] + }, + "dit": { + "inputs": [ + "clip_encoder_output", + "vae_encoder_output", + "text_encoder_output" + ], + "outputs": ["latents"] + }, + "vae_decoder": { + "inputs": ["latents"], + "outputs": ["output_video"] + } + } + }, + "matrix-game2-gta-drive": { + "single_stage": { + "pipeline": { + "inputs": ["input_image"], + "outputs": ["output_video"] + } + } + }, + "matrix-game2-universal": { + "single_stage": { + "pipeline": { + "inputs": ["input_image"], + "outputs": ["output_video"] + } + } + }, + "matrix-game2-templerun": { + "single_stage": { + "pipeline": { + "inputs": ["input_image"], + "outputs": ["output_video"] + } + } + } + }, + "s2v": { + "SekoTalk": { + "single_stage": { + "pipeline": { + "inputs": ["input_image", "input_audio"], + "outputs": ["output_video"] + } + }, + "multi_stage": { + "text_encoder": { + "inputs": ["input_image"], + "outputs": ["text_encoder_output"] + }, + "image_encoder": { + "inputs": ["input_image"], + "outputs": ["clip_encoder_output"] + }, + "vae_encoder": { + "inputs": ["input_image"], + "outputs": ["vae_encoder_output"] + }, + "segment_dit": { + "inputs": [ + "input_audio", + "clip_encoder_output", + "vae_encoder_output", + "text_encoder_output" + ], + "outputs": ["output_video"] + } + } + } + }, + "animate": { + "wan2.2_animate": { + "single_stage": { + "pipeline": { + "inputs": ["input_image","input_video"], + "outputs": ["output_video"] + } + } + } + } + + }, + "meta": { + "special_types": { + "input_image": "IMAGE", + "input_audio": "AUDIO", + "input_video": "VIDEO", + "latents": "TENSOR", + "output_video": "VIDEO" + }, + "model_name_inner_to_outer": { + "seko_talk": "SekoTalk" + }, + "model_name_outer_to_inner": {}, + "monitor": { + "subtask_created_timeout": 1800, + "subtask_pending_timeout": 1800, + "subtask_running_timeouts": { + "t2v-wan2.1-1.3B-multi_stage-dit": 300, + "t2v-wan2.1-1.3B-single_stage-pipeline": 300, + "t2v-self-forcing-dmd-single_stage-pipeline": 300, + "i2v-wan2.1-14B-480P-multi_stage-dit": 600, + "i2v-wan2.1-14B-480P-single_stage-pipeline": 600, + "i2v-SekoTalk-Distill-single_stage-pipeline": 3600, + "i2v-SekoTalk-Distill-multi_stage-segment_dit": 3600 + }, + "worker_avg_window": 20, + "worker_offline_timeout": 5, + "worker_min_capacity": 20, + "worker_min_cnt": 1, + "worker_max_cnt": 10, + "task_timeout": 3600, + "schedule_ratio_high": 0.25, + "schedule_ratio_low": 0.02, + "ping_timeout": 30, + "user_max_active_tasks": 3, + "user_max_daily_tasks": 100, + "user_visit_frequency": 0.05 + } + } +} diff --git a/configs/offload/block/qwen_image_i2i_2509_block.json b/configs/offload/block/qwen_image_i2i_2509_block.json new file mode 100644 index 0000000..7859a0a --- /dev/null +++ b/configs/offload/block/qwen_image_i2i_2509_block.json @@ -0,0 +1,66 @@ +{ + "batchsize": 1, + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 40, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "transformer_in_channels": 64, + "prompt_template_encode": "<|im_start|>system\nDescribe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 64, + "_auto_resize": true, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "sage_attn2", + "do_true_cfg": true, + "true_cfg_scale": 4.0, + "cpu_offload": true, + "offload_granularity": "block", + "CONDITION_IMAGE_SIZE": 147456, + "USE_IMAGE_ID_IN_PROMPT": true +} diff --git a/configs/offload/block/qwen_image_i2i_block.json b/configs/offload/block/qwen_image_i2i_block.json new file mode 100644 index 0000000..7153b4a --- /dev/null +++ b/configs/offload/block/qwen_image_i2i_block.json @@ -0,0 +1,66 @@ +{ + "batchsize": 1, + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 50, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "transformer_in_channels": 64, + "prompt_template_encode": "<|im_start|>system\nDescribe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 64, + "_auto_resize": true, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": true, + "true_cfg_scale": 4.0, + "cpu_offload": true, + "offload_granularity": "block", + "CONDITION_IMAGE_SIZE": 1048576, + "USE_IMAGE_ID_IN_PROMPT": false +} diff --git a/configs/offload/block/qwen_image_t2i_block.json b/configs/offload/block/qwen_image_t2i_block.json new file mode 100644 index 0000000..5b6313f --- /dev/null +++ b/configs/offload/block/qwen_image_t2i_block.json @@ -0,0 +1,86 @@ +{ + "batchsize": 1, + "_comment": "格式: '宽高比': [width, height]", + "aspect_ratios": { + "1:1": [ + 1328, + 1328 + ], + "16:9": [ + 1664, + 928 + ], + "9:16": [ + 928, + 1664 + ], + "4:3": [ + 1472, + 1140 + ], + "3:4": [ + 142, + 184 + ] + }, + "aspect_ratio": "16:9", + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 50, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "prompt_template_encode": "<|im_start|>system\nDescribe the image by detailing the color, shape, size, texture, quantity, text, spatial relationships of the objects and background:<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 34, + "_auto_resize": false, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": false, + "cpu_offload": true, + "offload_granularity": "block" +} diff --git a/configs/offload/block/wan_i2v_block.json b/configs/offload/block/wan_i2v_block.json new file mode 100644 index 0000000..4363093 --- /dev/null +++ b/configs/offload/block/wan_i2v_block.json @@ -0,0 +1,23 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f", + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "clip_cpu_offload": false +} diff --git a/configs/offload/block/wan_t2v_1_3b.json b/configs/offload/block/wan_t2v_1_3b.json new file mode 100644 index 0000000..e03f8a7 --- /dev/null +++ b/configs/offload/block/wan_t2v_1_3b.json @@ -0,0 +1,17 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "t5_cpu_offload": true, + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl", + "unload_modules": false, + "use_tiling_vae": false +} diff --git a/configs/offload/block/wan_t2v_block.json b/configs/offload/block/wan_t2v_block.json new file mode 100644 index 0000000..2f926bc --- /dev/null +++ b/configs/offload/block/wan_t2v_block.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f", + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "clip_cpu_offload": false +} diff --git a/configs/offload/disk/wan_i2v_phase_lazy_load_480p.json b/configs/offload/disk/wan_i2v_phase_lazy_load_480p.json new file mode 100644 index 0000000..fa0348e --- /dev/null +++ b/configs/offload/disk/wan_i2v_phase_lazy_load_480p.json @@ -0,0 +1,28 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "phase", + "dit_quantized_ckpt": "/path/to/dit_quant_model", + "dit_quantized": true, + "dit_quant_scheme": "fp8-vllm", + "t5_cpu_offload": true, + "t5_quantized": true, + "t5_quantized_ckpt": "/path/to/models_t5_umt5-xxl-enc-fp8.pth", + "t5_quant_scheme": "fp8", + "clip_quantized": true, + "clip_quantized_ckpt": "/path/to/clip-fp8.pth", + "clip_quant_scheme": "fp8", + "use_tiling_vae": true, + "use_tae": true, + "tae_path": "/path/to/taew2_1.pth", + "lazy_load": true +} diff --git a/configs/offload/disk/wan_i2v_phase_lazy_load_720p.json b/configs/offload/disk/wan_i2v_phase_lazy_load_720p.json new file mode 100644 index 0000000..0516a95 --- /dev/null +++ b/configs/offload/disk/wan_i2v_phase_lazy_load_720p.json @@ -0,0 +1,30 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 1280, + "target_width": 720, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "phase", + "dit_quantized_ckpt": "/path/to/dit_quant_model", + "dit_quantized": true, + "dit_quant_scheme": "fp8-vllm", + "t5_cpu_offload": true, + "t5_quantized": true, + "t5_quantized_ckpt": "/path/to/models_t5_umt5-xxl-enc-fp8.pth", + "t5_quant_scheme": "fp8", + "clip_quantized": true, + "clip_quantized_ckpt": "/path/to/clip-fp8.pth", + "clip_quant_scheme": "fp8", + "use_tiling_vae": true, + "use_tae": true, + "tae_path": "/path/to/taew2_1.pth", + "lazy_load": true, + "rotary_chunk": true, + "clean_cuda_cache": true +} diff --git a/configs/offload/phase/wan_i2v_phase.json b/configs/offload/phase/wan_i2v_phase.json new file mode 100644 index 0000000..c5bd698 --- /dev/null +++ b/configs/offload/phase/wan_i2v_phase.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "phase", + "t5_cpu_offload": false, + "clip_cpu_offload": false, + "vae_cpu_offload": false, + "use_tiling_vae": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f" +} diff --git a/configs/offload/phase/wan_t2v_phase.json b/configs/offload/phase/wan_t2v_phase.json new file mode 100644 index 0000000..b12036a --- /dev/null +++ b/configs/offload/phase/wan_t2v_phase.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "phase", + "t5_cpu_offload": false, + "clip_cpu_offload": false, + "vae_cpu_offload": false, + "use_tiling_vae": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f" +} diff --git a/configs/quantization/gguf/wan_i2v_q4_k.json b/configs/quantization/gguf/wan_i2v_q4_k.json new file mode 100644 index 0000000..e92f6b2 --- /dev/null +++ b/configs/quantization/gguf/wan_i2v_q4_k.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "dit_quantized": true, + "dit_quant_scheme": "gguf-Q4_K_S" +} diff --git a/configs/quantization/wan_i2v.json b/configs/quantization/wan_i2v.json new file mode 100644 index 0000000..7624495 --- /dev/null +++ b/configs/quantization/wan_i2v.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": true, + "cpu_offload": false, + "dit_quantized_ckpt": "/path/to/int8/model", + "dit_quantized": true, + "dit_quant_scheme": "int8-vllm" +} diff --git a/configs/quantization/wan_i2v_q8f.json b/configs/quantization/wan_i2v_q8f.json new file mode 100644 index 0000000..15c5b12 --- /dev/null +++ b/configs/quantization/wan_i2v_q8f.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "int8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "int8-q8f" +} diff --git a/configs/quantization/wan_i2v_torchao.json b/configs/quantization/wan_i2v_torchao.json new file mode 100644 index 0000000..ca561b8 --- /dev/null +++ b/configs/quantization/wan_i2v_torchao.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-torchao", + "t5_quantized": true, + "t5_quant_scheme": "int8-torchao", + "clip_quantized": true, + "clip_quant_scheme": "int8-torchao" +} diff --git a/configs/qwen_image/qwen_image_i2i.json b/configs/qwen_image/qwen_image_i2i.json new file mode 100644 index 0000000..0e0fd38 --- /dev/null +++ b/configs/qwen_image/qwen_image_i2i.json @@ -0,0 +1,64 @@ +{ + "batchsize": 1, + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 50, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "transformer_in_channels": 64, + "prompt_template_encode": "<|im_start|>system\nDescribe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 64, + "_auto_resize": true, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": true, + "true_cfg_scale": 4.0, + "CONDITION_IMAGE_SIZE": 1048576, + "USE_IMAGE_ID_IN_PROMPT": false +} diff --git a/configs/qwen_image/qwen_image_i2i_2509.json b/configs/qwen_image/qwen_image_i2i_2509.json new file mode 100644 index 0000000..974988e --- /dev/null +++ b/configs/qwen_image/qwen_image_i2i_2509.json @@ -0,0 +1,64 @@ +{ + "batchsize": 1, + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 40, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "transformer_in_channels": 64, + "prompt_template_encode": "<|im_start|>system\nDescribe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 64, + "_auto_resize": true, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": true, + "true_cfg_scale": 4.0, + "CONDITION_IMAGE_SIZE": 147456, + "USE_IMAGE_ID_IN_PROMPT": true +} diff --git a/configs/qwen_image/qwen_image_i2i_2509_quant.json b/configs/qwen_image/qwen_image_i2i_2509_quant.json new file mode 100644 index 0000000..c6e7358 --- /dev/null +++ b/configs/qwen_image/qwen_image_i2i_2509_quant.json @@ -0,0 +1,67 @@ +{ + "batchsize": 1, + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 40, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "transformer_in_channels": 64, + "prompt_template_encode": "<|im_start|>system\nDescribe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 64, + "_auto_resize": true, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": true, + "true_cfg_scale": 4.0, + "CONDITION_IMAGE_SIZE": 147456, + "USE_IMAGE_ID_IN_PROMPT": true, + "dit_quantized": true, + "dit_quantized_ckpt": "/path/to/qwen_2509_fp8.safetensors", + "dit_quant_scheme": "fp8-sgl" +} diff --git a/configs/qwen_image/qwen_image_i2i_lora.json b/configs/qwen_image/qwen_image_i2i_lora.json new file mode 100644 index 0000000..b0bbc49 --- /dev/null +++ b/configs/qwen_image/qwen_image_i2i_lora.json @@ -0,0 +1,70 @@ +{ + "batchsize": 1, + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 8, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "transformer_in_channels": 64, + "prompt_template_encode": "<|im_start|>system\nDescribe the key features of the input image (color, shape, size, texture, objects, background), then explain how the user's text instruction should alter or modify the image. Generate a new image that meets the user's requirements while maintaining consistency with the original input where appropriate.<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 64, + "_auto_resize": true, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": true, + "true_cfg_scale": 4.0, + "CONDITION_IMAGE_SIZE": 1048576, + "USE_IMAGE_ID_IN_PROMPT": false, + "lora_configs": [ + { + "path": "/path/to/Qwen-Image-Edit-Lightning-4steps-V1.0.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/qwen_image/qwen_image_t2i.json b/configs/qwen_image/qwen_image_t2i.json new file mode 100644 index 0000000..5581d50 --- /dev/null +++ b/configs/qwen_image/qwen_image_t2i.json @@ -0,0 +1,85 @@ +{ + "batchsize": 1, + "_comment": "格式: '宽高比': [width, height]", + "aspect_ratios": { + "1:1": [ + 1328, + 1328 + ], + "16:9": [ + 1664, + 928 + ], + "9:16": [ + 928, + 1664 + ], + "4:3": [ + 1472, + 1140 + ], + "3:4": [ + 142, + 184 + ] + }, + "aspect_ratio": "16:9", + "num_channels_latents": 16, + "vae_scale_factor": 8, + "infer_steps": 50, + "guidance_embeds": false, + "num_images_per_prompt": 1, + "vae_latents_mean": [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921 + ], + "vae_latents_std": [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.916 + ], + "vae_z_dim": 16, + "feature_caching": "NoCaching", + "prompt_template_encode": "<|im_start|>system\nDescribe the image by detailing the color, shape, size, texture, quantity, text, spatial relationships of the objects and background:<|im_end|>\n<|im_start|>user\n{}<|im_end|>\n<|im_start|>assistant\n", + "prompt_template_encode_start_idx": 34, + "_auto_resize": false, + "num_layers": 60, + "attention_out_dim": 3072, + "attention_dim_head": 128, + "axes_dims_rope": [ + 16, + 56, + 56 + ], + "_comment_attn": "in [torch_sdpa, flash_attn3, sage_attn2]", + "attn_type": "flash_attn3", + "do_true_cfg": true, + "true_cfg_scale": 4.0 +} diff --git a/configs/seko_talk/5090/seko_talk_5090_bf16.json b/configs/seko_talk/5090/seko_talk_5090_bf16.json new file mode 100644 index 0000000..a6cab78 --- /dev/null +++ b/configs/seko_talk/5090/seko_talk_5090_bf16.json @@ -0,0 +1,23 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn3", + "cross_attn_1_type": "sage_attn3", + "cross_attn_2_type": "sage_attn3", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": true, + "clip_cpu_offload": false, + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false, + "vae_cpu_offload": false +} diff --git a/configs/seko_talk/5090/seko_talk_5090_int8.json b/configs/seko_talk/5090/seko_talk_5090_int8.json new file mode 100644 index 0000000..664983b --- /dev/null +++ b/configs/seko_talk/5090/seko_talk_5090_int8.json @@ -0,0 +1,29 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn3", + "cross_attn_1_type": "sage_attn3", + "cross_attn_2_type": "sage_attn3", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": false, + "clip_cpu_offload": false, + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false, + "vae_cpu_offload": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-q8f", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "int8-q8f" +} diff --git a/configs/seko_talk/5090/seko_talk_5090_int8_8gpu.json b/configs/seko_talk/5090/seko_talk_5090_int8_8gpu.json new file mode 100644 index 0000000..3dfc9d5 --- /dev/null +++ b/configs/seko_talk/5090/seko_talk_5090_int8_8gpu.json @@ -0,0 +1,34 @@ + +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn3", + "cross_attn_1_type": "sage_attn3", + "cross_attn_2_type": "sage_attn3", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": false, + "clip_cpu_offload": false, + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false, + "vae_cpu_offload": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-q8f", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "int8-q8f", + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses-4090" + } +} diff --git a/configs/seko_talk/A800/seko_talk_A800_int8.json b/configs/seko_talk/A800/seko_talk_A800_int8.json new file mode 100644 index 0000000..a5da24c --- /dev/null +++ b/configs/seko_talk/A800/seko_talk_A800_int8.json @@ -0,0 +1,22 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-vllm", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-vllm", + "t5_quantized": true, + "t5_quant_scheme": "int8-vllm" +} diff --git a/configs/seko_talk/A800/seko_talk_A800_int8_dist_2gpu.json b/configs/seko_talk/A800/seko_talk_A800_int8_dist_2gpu.json new file mode 100644 index 0000000..f99ba12 --- /dev/null +++ b/configs/seko_talk/A800/seko_talk_A800_int8_dist_2gpu.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-vllm", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-vllm", + "t5_quantized": true, + "t5_quant_scheme": "int8-vllm", + "parallel": { + "seq_p_size": 2, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/A800/seko_talk_A800_int8_dist_4gpu.json b/configs/seko_talk/A800/seko_talk_A800_int8_dist_4gpu.json new file mode 100644 index 0000000..c0d0c45 --- /dev/null +++ b/configs/seko_talk/A800/seko_talk_A800_int8_dist_4gpu.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-vllm", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-vllm", + "t5_quantized": true, + "t5_quant_scheme": "int8-vllm", + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/A800/seko_talk_A800_int8_dist_8gpu.json b/configs/seko_talk/A800/seko_talk_A800_int8_dist_8gpu.json new file mode 100644 index 0000000..278d376 --- /dev/null +++ b/configs/seko_talk/A800/seko_talk_A800_int8_dist_8gpu.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-vllm", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-vllm", + "t5_quantized": true, + "t5_quant_scheme": "int8-vllm", + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/L40s/1gpu/seko_talk_bf16.json b/configs/seko_talk/L40s/1gpu/seko_talk_bf16.json new file mode 100644 index 0000000..fd1afa4 --- /dev/null +++ b/configs/seko_talk/L40s/1gpu/seko_talk_bf16.json @@ -0,0 +1,23 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 0.8, + "t5_cpu_offload": false, + "clip_cpu_offload": false, + "vae_cpu_offload": false, + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false +} diff --git a/configs/seko_talk/L40s/1gpu/seko_talk_fp8.json b/configs/seko_talk/L40s/1gpu/seko_talk_fp8.json new file mode 100644 index 0000000..d88f454 --- /dev/null +++ b/configs/seko_talk/L40s/1gpu/seko_talk_fp8.json @@ -0,0 +1,27 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8", + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true +} diff --git a/configs/seko_talk/L40s/2gpu/seko_talk_bf16.json b/configs/seko_talk/L40s/2gpu/seko_talk_bf16.json new file mode 100644 index 0000000..4cd8a3f --- /dev/null +++ b/configs/seko_talk/L40s/2gpu/seko_talk_bf16.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "parallel": { + "seq_p_size": 2, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/L40s/2gpu/seko_talk_fp8.json b/configs/seko_talk/L40s/2gpu/seko_talk_fp8.json new file mode 100644 index 0000000..b45e87f --- /dev/null +++ b/configs/seko_talk/L40s/2gpu/seko_talk_fp8.json @@ -0,0 +1,31 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8", + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "parallel": { + "seq_p_size": 2, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/L40s/4gpu/seko_talk_bf16.json b/configs/seko_talk/L40s/4gpu/seko_talk_bf16.json new file mode 100644 index 0000000..a3f7b6f --- /dev/null +++ b/configs/seko_talk/L40s/4gpu/seko_talk_bf16.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/L40s/4gpu/seko_talk_fp8.json b/configs/seko_talk/L40s/4gpu/seko_talk_fp8.json new file mode 100644 index 0000000..ec682a6 --- /dev/null +++ b/configs/seko_talk/L40s/4gpu/seko_talk_fp8.json @@ -0,0 +1,31 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8", + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/L40s/8gpu/seko_talk_bf16.json b/configs/seko_talk/L40s/8gpu/seko_talk_bf16.json new file mode 100644 index 0000000..079439f --- /dev/null +++ b/configs/seko_talk/L40s/8gpu/seko_talk_bf16.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/L40s/8gpu/seko_talk_fp8.json b/configs/seko_talk/L40s/8gpu/seko_talk_fp8.json new file mode 100644 index 0000000..d50f7eb --- /dev/null +++ b/configs/seko_talk/L40s/8gpu/seko_talk_fp8.json @@ -0,0 +1,31 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8", + "cpu_offload": false, + "t5_cpu_offload": true, + "clip_cpu_offload": true, + "vae_cpu_offload": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/mlu/seko_talk_bf16.json b/configs/seko_talk/mlu/seko_talk_bf16.json new file mode 100644 index 0000000..7174187 --- /dev/null +++ b/configs/seko_talk/mlu/seko_talk_bf16.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "mlu_sage_attn", + "cross_attn_1_type": "mlu_sage_attn", + "cross_attn_2_type": "mlu_sage_attn", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "rope_type": "torch", + "modulate_type": "torch" +} diff --git a/configs/seko_talk/mlu/seko_talk_int8.json b/configs/seko_talk/mlu/seko_talk_int8.json new file mode 100644 index 0000000..673acf8 --- /dev/null +++ b/configs/seko_talk/mlu/seko_talk_int8.json @@ -0,0 +1,29 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "mlu_sage_attn", + "cross_attn_1_type": "mlu_sage_attn", + "cross_attn_2_type": "mlu_sage_attn", + "seed": 42, + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "clip_quantized": false, + "clip_quant_scheme": "int8-tmo", + "dit_quantized": true, + "dit_quant_scheme": "int8-tmo", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-tmo", + "t5_quantized": true, + "t5_quant_scheme": "int8-tmo", + "modulate_type": "torch", + "rope_type": "torch", + "ln_type": "Default", + "rms_type": "Default" +} diff --git a/configs/seko_talk/mlu/seko_talk_int8_dist.json b/configs/seko_talk/mlu/seko_talk_int8_dist.json new file mode 100644 index 0000000..fe5f515 --- /dev/null +++ b/configs/seko_talk/mlu/seko_talk_int8_dist.json @@ -0,0 +1,33 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "mlu_sage_attn", + "cross_attn_1_type": "mlu_sage_attn", + "cross_attn_2_type": "mlu_sage_attn", + "seed": 42, + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "clip_quantized": false, + "clip_quant_scheme": "int8-tmo", + "dit_quantized": true, + "dit_quant_scheme": "int8-tmo", + "adapter_quantized": true, + "adapter_quant_scheme": "int8-tmo", + "t5_quantized": true, + "t5_quant_scheme": "int8-tmo", + "modulate_type": "torch", + "rope_type": "torch", + "ln_type": "Default", + "rms_type": "Default", + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/multi_person/01_base.json b/configs/seko_talk/multi_person/01_base.json new file mode 100644 index 0000000..417f62c --- /dev/null +++ b/configs/seko_talk/multi_person/01_base.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false +} diff --git a/configs/seko_talk/multi_person/02_base_fp8.json b/configs/seko_talk/multi_person/02_base_fp8.json new file mode 100644 index 0000000..232b398 --- /dev/null +++ b/configs/seko_talk/multi_person/02_base_fp8.json @@ -0,0 +1,22 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8", + "t5_quantized": true, + "t5_quant_scheme": "fp8" +} diff --git a/configs/seko_talk/multi_person/03_dist.json b/configs/seko_talk/multi_person/03_dist.json new file mode 100644 index 0000000..5cc4cbd --- /dev/null +++ b/configs/seko_talk/multi_person/03_dist.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/multi_person/04_dist_fp8.json b/configs/seko_talk/multi_person/04_dist_fp8.json new file mode 100644 index 0000000..f91b3fd --- /dev/null +++ b/configs/seko_talk/multi_person/04_dist_fp8.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8", + "t5_quantized": true, + "t5_quant_scheme": "fp8", + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/multi_person/15_base_compile.json b/configs/seko_talk/multi_person/15_base_compile.json new file mode 100644 index 0000000..73cb92a --- /dev/null +++ b/configs/seko_talk/multi_person/15_base_compile.json @@ -0,0 +1,27 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "compile": true, + "compile_shapes": [ + [ + 480, + 832 + ], + [ + 720, + 1280 + ] + ] +} diff --git a/configs/seko_talk/seko_talk_01_base.json b/configs/seko_talk/seko_talk_01_base.json new file mode 100644 index 0000000..417f62c --- /dev/null +++ b/configs/seko_talk/seko_talk_01_base.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false +} diff --git a/configs/seko_talk/seko_talk_02_fp8.json b/configs/seko_talk/seko_talk_02_fp8.json new file mode 100644 index 0000000..15cdbc0 --- /dev/null +++ b/configs/seko_talk/seko_talk_02_fp8.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "clip_quantized": true, + "clip_quant_scheme": "fp8-sgl", + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_03_dist.json b/configs/seko_talk/seko_talk_03_dist.json new file mode 100644 index 0000000..f754337 --- /dev/null +++ b/configs/seko_talk/seko_talk_03_dist.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + } +} diff --git a/configs/seko_talk/seko_talk_04_fp8_dist.json b/configs/seko_talk/seko_talk_04_fp8_dist.json new file mode 100644 index 0000000..4432951 --- /dev/null +++ b/configs/seko_talk/seko_talk_04_fp8_dist.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_05_offload_fp8_4090.json b/configs/seko_talk/seko_talk_05_offload_fp8_4090.json new file mode 100644 index 0000000..96f8629 --- /dev/null +++ b/configs/seko_talk/seko_talk_05_offload_fp8_4090.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": false, + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_cpu_offload": false, + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f", + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false, + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-q8f", + "vae_cpu_offload": false, + "use_tiling_vae": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f" +} diff --git a/configs/seko_talk/seko_talk_05_offload_fp8_4090_dist.json b/configs/seko_talk/seko_talk_05_offload_fp8_4090_dist.json new file mode 100644 index 0000000..a2d66f6 --- /dev/null +++ b/configs/seko_talk/seko_talk_05_offload_fp8_4090_dist.json @@ -0,0 +1,36 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": false, + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_cpu_offload": false, + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f", + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false, + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-q8f", + "vae_cpu_offload": false, + "use_tiling_vae": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses-4090" + } +} diff --git a/configs/seko_talk/seko_talk_06_offload_fp8_H100.json b/configs/seko_talk/seko_talk_06_offload_fp8_H100.json new file mode 100644 index 0000000..d5a5ae9 --- /dev/null +++ b/configs/seko_talk/seko_talk_06_offload_fp8_H100.json @@ -0,0 +1,30 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": true, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": true, + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl", + "clip_cpu_offload": false, + "audio_encoder_cpu_offload": false, + "audio_adapter_cpu_offload": false, + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "vae_cpu_offload": false, + "use_tiling_vae": false, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_07_dist_offload.json b/configs/seko_talk/seko_talk_07_dist_offload.json new file mode 100644 index 0000000..b6a64ea --- /dev/null +++ b/configs/seko_talk/seko_talk_07_dist_offload.json @@ -0,0 +1,28 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + }, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": true, + "clip_cpu_offload": false, + "vae_cpu_offload": false, + "offload_ratio": 1, + "use_tiling_vae": true, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": false +} diff --git a/configs/seko_talk/seko_talk_08_5B_base.json b/configs/seko_talk/seko_talk_08_5B_base.json new file mode 100644 index 0000000..855670f --- /dev/null +++ b/configs/seko_talk/seko_talk_08_5B_base.json @@ -0,0 +1,31 @@ +{ + "infer_steps": 4, + "target_fps": 24, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 121, + "resize_mode": "adaptive", + "text_len": 512, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": false, + "fps": 24, + "use_image_encoder": false, + "use_31_block": false, + "lora_configs": [ + { + "path": "/mnt/aigc/rtxiang/pretrain/qianhai_weights/lora_model.safetensors", + "strength": 0.125 + } + ] +} diff --git a/configs/seko_talk/seko_talk_09_base_fixed_min_area.json b/configs/seko_talk/seko_talk_09_base_fixed_min_area.json new file mode 100644 index 0000000..2b04ae5 --- /dev/null +++ b/configs/seko_talk/seko_talk_09_base_fixed_min_area.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "fixed_min_area", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false +} diff --git a/configs/seko_talk/seko_talk_10_fp8_dist_fixed_min_area.json b/configs/seko_talk/seko_talk_10_fp8_dist_fixed_min_area.json new file mode 100644 index 0000000..27f8afe --- /dev/null +++ b/configs/seko_talk/seko_talk_10_fp8_dist_fixed_min_area.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "fixed_min_area", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + }, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_11_fp8_dist_fixed_shape.json b/configs/seko_talk/seko_talk_11_fp8_dist_fixed_shape.json new file mode 100644 index 0000000..0ea9de6 --- /dev/null +++ b/configs/seko_talk/seko_talk_11_fp8_dist_fixed_shape.json @@ -0,0 +1,30 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "fixed_shape", + "fixed_shape": [ + 240, + 320 + ], + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + }, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.json b/configs/seko_talk/seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.json new file mode 100644 index 0000000..6952e86 --- /dev/null +++ b/configs/seko_talk/seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.json @@ -0,0 +1,31 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 17, + "prev_frame_length": 1, + "resize_mode": "fixed_shape", + "fixed_shape": [ + 480, + 480 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.json b/configs/seko_talk/seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.json new file mode 100644 index 0000000..7c9abea --- /dev/null +++ b/configs/seko_talk/seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.json @@ -0,0 +1,62 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "bucket_shape": { + "0.667": [ + [ + 480, + 832 + ], + [ + 544, + 960 + ] + ], + "1.500": [ + [ + 832, + 480 + ], + [ + 960, + 544 + ] + ], + "1.000": [ + [ + 480, + 480 + ], + [ + 576, + 576 + ], + [ + 704, + 704 + ] + ] + }, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.json b/configs/seko_talk/seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.json new file mode 100644 index 0000000..9ad4fd7 --- /dev/null +++ b/configs/seko_talk/seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.json @@ -0,0 +1,63 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 17, + "prev_frame_length": 1, + "resize_mode": "adaptive", + "bucket_shape": { + "0.667": [ + [ + 480, + 832 + ], + [ + 544, + 960 + ] + ], + "1.500": [ + [ + 832, + 480 + ], + [ + 960, + 544 + ] + ], + "1.000": [ + [ + 480, + 480 + ], + [ + 576, + 576 + ], + [ + 704, + 704 + ] + ] + }, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_15_base_compile.json b/configs/seko_talk/seko_talk_15_base_compile.json new file mode 100644 index 0000000..19547bc --- /dev/null +++ b/configs/seko_talk/seko_talk_15_base_compile.json @@ -0,0 +1,59 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "compile": true, + "compile_shapes": [ + [ + 480, + 832 + ], + [ + 544, + 960 + ], + [ + 720, + 1280 + ], + [ + 832, + 480 + ], + [ + 960, + 544 + ], + [ + 1280, + 720 + ], + [ + 480, + 480 + ], + [ + 576, + 576 + ], + [ + 704, + 704 + ], + [ + 960, + 960 + ] + ] +} diff --git a/configs/seko_talk/seko_talk_16_fp8_dist_compile.json b/configs/seko_talk/seko_talk_16_fp8_dist_compile.json new file mode 100644 index 0000000..f2ef9e4 --- /dev/null +++ b/configs/seko_talk/seko_talk_16_fp8_dist_compile.json @@ -0,0 +1,71 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "clip_quantized": true, + "clip_quant_scheme": "fp8-sgl", + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl", + "compile": true, + "compile_shapes": [ + [ + 480, + 832 + ], + [ + 544, + 960 + ], + [ + 720, + 1280 + ], + [ + 832, + 480 + ], + [ + 960, + 544 + ], + [ + 1280, + 720 + ], + [ + 480, + 480 + ], + [ + 576, + 576 + ], + [ + 704, + 704 + ], + [ + 960, + 960 + ] + ] +} diff --git a/configs/seko_talk/seko_talk_17_base_vsr.json b/configs/seko_talk/seko_talk_17_base_vsr.json new file mode 100644 index 0000000..7f39cc5 --- /dev/null +++ b/configs/seko_talk/seko_talk_17_base_vsr.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 2, + "target_fps": 25, + "video_duration": 1, + "audio_sr": 16000, + "target_video_length": 25, + "resize_mode": "fixed_shape", + "fixed_shape": [ + 192, + 320 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "video_super_resolution": { + "scale": 2.0, + "seed": 0, + "model_path": "/base_code/FlashVSR/examples/WanVSR/FlashVSR" + } +} diff --git a/configs/seko_talk/seko_talk_22_nbhd_attn.json b/configs/seko_talk/seko_talk_22_nbhd_attn.json new file mode 100644 index 0000000..f1ad262 --- /dev/null +++ b/configs/seko_talk/seko_talk_22_nbhd_attn.json @@ -0,0 +1,16 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "nbhd_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false +} diff --git a/configs/seko_talk/seko_talk_23_fp8_dist_nbhd_attn.json b/configs/seko_talk/seko_talk_23_fp8_dist_nbhd_attn.json new file mode 100644 index 0000000..fba7ca4 --- /dev/null +++ b/configs/seko_talk/seko_talk_23_fp8_dist_nbhd_attn.json @@ -0,0 +1,28 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "nbhd_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "clip_quantized": true, + "clip_quant_scheme": "fp8-sgl", + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/seko_talk/seko_talk_24_fp8_dist_compile_nbhd_attn.json b/configs/seko_talk/seko_talk_24_fp8_dist_compile_nbhd_attn.json new file mode 100644 index 0000000..cc812be --- /dev/null +++ b/configs/seko_talk/seko_talk_24_fp8_dist_compile_nbhd_attn.json @@ -0,0 +1,74 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 360, + "audio_sr": 16000, + "target_video_length": 81, + "resize_mode": "adaptive", + "self_attn_1_type": "nbhd_attn", + "nbhd_attn_setting": { + "coefficient": [1.0, 0.25, 0.056] + }, + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "parallel": { + "seq_p_size": 8, + "seq_p_attn_type": "ulysses" + }, + "clip_quantized": true, + "clip_quant_scheme": "fp8-sgl", + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "adapter_quantized": true, + "adapter_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl", + "compile": true, + "compile_shapes": [ + [ + 480, + 832 + ], + [ + 544, + 960 + ], + [ + 720, + 1280 + ], + [ + 832, + 480 + ], + [ + 960, + 544 + ], + [ + 1280, + 720 + ], + [ + 480, + 480 + ], + [ + 576, + 576 + ], + [ + 704, + 704 + ], + [ + 960, + 960 + ] + ] +} diff --git a/configs/seko_talk/seko_talk_25_int8_dist_fp8_comm.json b/configs/seko_talk/seko_talk_25_int8_dist_fp8_comm.json new file mode 100644 index 0000000..a509d5e --- /dev/null +++ b/configs/seko_talk/seko_talk_25_int8_dist_fp8_comm.json @@ -0,0 +1,40 @@ +{ + "infer_steps": 2, + "target_fps": 16, + "video_duration": 5, + "audio_sr": 16000, + "target_video_length": 81, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 1, + "sample_shift": 5, + "enable_cfg": false, + "use_31_block": false, + "cpu_offload": false, + "offload_granularity": "block", + "offload_ratio": 1, + "t5_cpu_offload": true, + "t5_quantized": true, + "t5_quant_scheme": "int8-q8f", + "clip_cpu_offload": true, + "clip_quantized": false, + "audio_encoder_cpu_offload": true, + "audio_adapter_cpu_offload": true, + "adapter_quantized": true, + "adapter_quant_scheme": "int8-q8f", + "vae_cpu_offload": true, + "use_tiling_vae": false, + "dit_quantized": true, + "dit_quant_scheme": "int8-q8f", + "resize_mode": "fixed_shape", + "fixed_shape": [ + 832, + 480 + ], + "parallel": { + "seq_p_size": 8, + "seq_p_fp8_comm": true, + "seq_p_attn_type": "ulysses-4090" + } +} diff --git a/configs/seko_talk/seko_talk_28_f2v.json b/configs/seko_talk/seko_talk_28_f2v.json new file mode 100644 index 0000000..cf9bebd --- /dev/null +++ b/configs/seko_talk/seko_talk_28_f2v.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 4, + "target_fps": 16, + "video_duration": 12, + "audio_sr": 16000, + "target_video_length": 81, + "prev_frame_length": 1, + "resize_mode": "adaptive", + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 1.0, + "sample_shift": 5, + "enable_cfg": false, + "cpu_offload": false, + "use_31_block": false, + "f2v_process": true, + "lora_configs": [ + { + "path": "lightx2v_I2V_14B_480p_cfg_step_distill_rank32_bf16.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/self_forcing/wan_t2v_sf.json b/configs/self_forcing/wan_t2v_sf.json new file mode 100644 index 0000000..df541f9 --- /dev/null +++ b/configs/self_forcing/wan_t2v_sf.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn2", + "cross_attn_1_type": "flash_attn2", + "cross_attn_2_type": "flash_attn2", + "seed": 0, + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": false, + "cpu_offload": false, + "sf_config": { + "sf_type": "dmd", + "local_attn_size": -1, + "shift": 5.0, + "num_frame_per_block": 3, + "num_transformer_blocks": 30, + "frame_seq_length": 1560, + "num_output_frames": 21, + "num_inference_steps": 1000, + "denoising_step_list": [1000.0000, 937.5000, 833.3333, 625.0000] + } +} diff --git a/configs/sparse_attn/spas_sage_attn/wan_i2v.json b/configs/sparse_attn/spas_sage_attn/wan_i2v.json new file mode 100644 index 0000000..5fffe94 --- /dev/null +++ b/configs/sparse_attn/spas_sage_attn/wan_i2v.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "sage_attn", + "cross_attn_1_type": "sage_attn", + "cross_attn_2_type": "sage_attn", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/sparse_attn/spas_sage_attn/wan_t2v.json b/configs/sparse_attn/spas_sage_attn/wan_t2v.json new file mode 100644 index 0000000..d2d0456 --- /dev/null +++ b/configs/sparse_attn/spas_sage_attn/wan_t2v.json @@ -0,0 +1,14 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "spas_sage_attn", + "cross_attn_1_type": "spas_sage_attn", + "cross_attn_2_type": "spas_sage_attn", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/video_frame_interpolation/wan_t2v.json b/configs/video_frame_interpolation/wan_t2v.json new file mode 100644 index 0000000..02cc549 --- /dev/null +++ b/configs/video_frame_interpolation/wan_t2v.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 24, + "model_path": "/path to flownet.pkl" + } +} diff --git a/configs/volcengine_voices_list.json b/configs/volcengine_voices_list.json new file mode 100644 index 0000000..5131610 --- /dev/null +++ b/configs/volcengine_voices_list.json @@ -0,0 +1,4727 @@ +{ + "voices": [ + { + "name": "Vivi 2.0", + "voice_type": "zh_female_vv_uranus_bigtts", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "可爱女生", + "voice_type": "ICL_zh_female_keainvsheng_tob", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "大壹", + "voice_type": "zh_male_dayi_saturn_bigtts", + "gender": "male", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "魅力女友", + "voice_type": "ICL_zh_female_tiaopigongzhu_tob", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "黑猫侦探社咪仔", + "voice_type": "zh_female_mizai_saturn_bigtts", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "爽朗少年", + "voice_type": "ICL_zh_male_shuanglangshaonian_tob", + "gender": "male", + "version": "2.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "鸡汤女", + "voice_type": "zh_female_jitangnv_saturn_bigtts", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "天才同桌", + "voice_type": "ICL_zh_male_tiancaitongzhuo_tob", + "gender": "male", + "version": "2.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "魅力女友", + "voice_type": "zh_female_meilinvyou_saturn_bigtts", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "流畅女声", + "voice_type": "zh_female_santongyongns_saturn_bigtts", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "儒雅逸辰", + "voice_type": "zh_male_ruyayichen_saturn_bigtts", + "gender": "male", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "知性灿灿", + "voice_type": "saturn_zh_female_cancan_tob", + "gender": "female", + "version": "2.0", + "resource_id": "seed-tts-2.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "温柔女神", + "voice_type": "ICL_zh_female_wenrounvshen_239eff5e8ffa_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "沪普男", + "voice_type": "zh_male_hupunan_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "纯真少女", + "voice_type": "ICL_zh_female_chunzhenshaonv_e588402fb8ad_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷酷哥哥", + "voice_type": "zh_male_lengkugege_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "sad", + "angry", + "fear", + "hate", + "coldness", + "neutral", + "depressed" + ] + }, + { + "name": "理性圆子", + "voice_type": "ICL_zh_female_lixingyuanzi_cs", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Tina老师", + "voice_type": "zh_female_yingyujiaoyu_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "教育场景", + "language": [ + "chinese", + "en_gb" + ], + "emotions": [] + }, + { + "name": "Lauren", + "voice_type": "en_female_lauren_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "内敛才俊", + "voice_type": "ICL_zh_male_neiliancaijun_e991be511569_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "悠悠君子", + "voice_type": "zh_male_M100_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Vivi", + "voice_type": "zh_female_vv_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "粤语小溏", + "voice_type": "zh_female_yueyunv_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "奶气小生", + "voice_type": "ICL_zh_male_xiaonaigou_edf58cf28b8b_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "甜心小美", + "voice_type": "zh_female_tianxinxiaomei_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "sad", + "fear", + "hate", + "neutral" + ] + }, + { + "name": "清甜桃桃", + "voice_type": "ICL_zh_female_qingtiantaotao_cs", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Energetic Male II", + "voice_type": "en_male_campaign_jamal_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "温暖少年", + "voice_type": "ICL_zh_male_yangyang_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "文静毛毛", + "voice_type": "zh_female_maomao_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "亲切女声", + "voice_type": "zh_female_qinqienvsheng_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "鲁班七号", + "voice_type": "zh_male_lubanqihao_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "精灵向导", + "voice_type": "ICL_zh_female_jinglingxiangdao_1beb294a9e3e_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "高冷御姐", + "voice_type": "zh_female_gaolengyujie_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "sad", + "angry", + "surprised", + "fear", + "hate", + "excited", + "coldness", + "neutral" + ] + }, + { + "name": "清晰小雪", + "voice_type": "ICL_zh_female_qingxixiaoxue_cs", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Gotham Hero", + "voice_type": "en_male_chris_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "儒雅公子", + "voice_type": "ICL_zh_male_flc_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "倾心少女", + "voice_type": "ICL_zh_female_qiuling_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "机灵小伙", + "voice_type": "ICL_zh_male_shenmi_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "林潇", + "voice_type": "zh_female_yangmi_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "闷油瓶小哥", + "voice_type": "ICL_zh_male_menyoupingxiaoge_ffed9fc2fee7_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲娇霸总", + "voice_type": "zh_male_aojiaobazong_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "angry", + "hate", + "neutral" + ] + }, + { + "name": "清甜莓莓", + "voice_type": "ICL_zh_female_qingtianmeimei_cs", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Flirty Female", + "voice_type": "en_female_product_darcie_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "悬疑解说", + "voice_type": "zh_male_changtianyi_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "醇厚低音", + "voice_type": "ICL_zh_male_buyan_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "元气甜妹", + "voice_type": "ICL_zh_female_wuxi_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "玲玲姐姐", + "voice_type": "zh_female_linzhiling_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "黯刃秦主", + "voice_type": "ICL_zh_male_anrenqinzhu_cd62e63dcdab_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "广州德哥", + "voice_type": "zh_male_guangzhoudege_emo_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "angry", + "fear", + "neutral" + ] + }, + { + "name": "开朗婷婷", + "voice_type": "ICL_zh_female_kailangtingting_cs", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Peaceful Female", + "voice_type": "en_female_emotional_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "儒雅青年", + "voice_type": "zh_male_ruyaqingnian_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "咆哮小哥", + "voice_type": "ICL_zh_male_BV144_paoxiaoge_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "知心姐姐", + "voice_type": "ICL_zh_female_wenyinvsheng_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "春日部姐姐", + "voice_type": "zh_female_jiyejizi2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "霸道总裁", + "voice_type": "ICL_zh_male_badaozongcai_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "京腔侃爷", + "voice_type": "zh_male_jingqiangkanye_emo_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "angry", + "surprised", + "hate", + "neutral" + ] + }, + { + "name": "清新沐沐", + "voice_type": "ICL_zh_male_qingxinmumu_cs", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Nara", + "voice_type": "en_female_nara_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "霸气青叔", + "voice_type": "zh_male_baqiqingshu_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "和蔼奶奶", + "voice_type": "ICL_zh_female_heainainai_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "阳光阿辰", + "voice_type": "zh_male_qingyiyuxuan_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "唐僧", + "voice_type": "zh_male_tangseng_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "妩媚可人", + "voice_type": "ICL_zh_female_ganli_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "邻居阿姨", + "voice_type": "zh_female_linjuayi_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "angry", + "surprised", + "coldness", + "neutral", + "depressed" + ] + }, + { + "name": "爽朗小阳", + "voice_type": "ICL_zh_male_shuanglangxiaoyang_cs", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Bruce", + "voice_type": "en_male_bruce_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "擎苍", + "voice_type": "zh_male_qingcang_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "邻居阿姨", + "voice_type": "ICL_zh_female_linjuayi_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "快乐小东", + "voice_type": "zh_male_xudong_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "庄周", + "voice_type": "zh_male_zhuangzhou_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "邪魅御姐", + "voice_type": "ICL_zh_female_xiangliangya_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "优柔公子", + "voice_type": "zh_male_yourougongzi_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "angry", + "fear", + "hate", + "excited", + "neutral", + "depressed" + ] + }, + { + "name": "清新波波", + "voice_type": "ICL_zh_male_qingxinbobo_cs", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Michael", + "voice_type": "en_male_michael_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "活力小哥", + "voice_type": "zh_male_yangguangqingnian_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "温柔小雅", + "voice_type": "zh_female_wenrouxiaoya_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷酷哥哥", + "voice_type": "ICL_zh_male_lengkugege_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "猪八戒", + "voice_type": "zh_male_zhubajie_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "嚣张小哥", + "voice_type": "ICL_zh_male_ms_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "儒雅男友", + "voice_type": "zh_male_ruyayichen_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "sad", + "angry", + "fear", + "excited", + "coldness", + "neutral" + ] + }, + { + "name": "温婉珊珊", + "voice_type": "ICL_zh_female_wenwanshanshan_cs", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Cartoon Chef", + "voice_type": "ICL_en_male_cc_sha_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "古风少御", + "voice_type": "zh_female_gufengshaoyu_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "天才童声", + "voice_type": "zh_male_tiancaitongsheng_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "纯澈女生", + "voice_type": "ICL_zh_female_feicui_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "感冒电音姐姐", + "voice_type": "zh_female_ganmaodianyin_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "油腻大叔", + "voice_type": "ICL_zh_male_you_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "俊朗男友", + "voice_type": "zh_male_junlangnanyou_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "sad", + "angry", + "surprised", + "fear", + "neutral" + ] + }, + { + "name": "甜美小雨", + "voice_type": "ICL_zh_female_tianmeixiaoyu_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Lucas", + "voice_type": "zh_male_M100_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "温柔淑女", + "voice_type": "zh_female_wenroushunv_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "猴哥", + "voice_type": "zh_male_sunwukong_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "初恋女友", + "voice_type": "ICL_zh_female_yuxin_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "直率英子", + "voice_type": "zh_female_naying_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "孤傲公子", + "voice_type": "ICL_zh_male_guaogongzi_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "北京小爷", + "voice_type": "zh_male_beijingxiaoye_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "angry", + "surprised", + "fear", + "excited", + "coldness", + "neutral" + ] + }, + { + "name": "热情艾娜", + "voice_type": "ICL_zh_female_reqingaina_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Sophie", + "voice_type": "zh_female_sophie_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "反卷青年", + "voice_type": "zh_male_fanjuanqingnian_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "audiobook", + "scene": "有声阅读", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "熊二", + "voice_type": "zh_male_xionger_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "贴心闺蜜", + "voice_type": "ICL_zh_female_xnx_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "女雷神", + "voice_type": "zh_female_leidian_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "胡子叔叔", + "voice_type": "ICL_zh_male_huzi_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "柔美女友", + "voice_type": "zh_female_roumeinvyou_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "sad", + "angry", + "surprised", + "fear", + "hate", + "excited", + "coldness", + "neutral" + ] + }, + { + "name": "甜美小橘", + "voice_type": "ICL_zh_female_tianmeixiaoju_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Daisy", + "voice_type": "en_female_dacey_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "佩奇猪", + "voice_type": "zh_female_peiqi_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "温柔白月光", + "voice_type": "ICL_zh_female_yry_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "豫州子轩", + "voice_type": "zh_male_yuzhouzixuan_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "性感魅惑", + "voice_type": "ICL_zh_female_luoqing_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "阳光青年", + "voice_type": "zh_male_yangguangqingnian_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "happy", + "sad", + "angry", + "fear", + "excited", + "coldness", + "neutral" + ] + }, + { + "name": "沉稳明仔", + "voice_type": "ICL_zh_male_chenwenmingzai_cs_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Owen", + "voice_type": "en_male_charlie_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "武则天", + "voice_type": "zh_female_wuzetian_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "开朗学长", + "voice_type": "en_male_jason_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "呆萌川妹", + "voice_type": "zh_female_daimengchuanmei_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病弱公子", + "voice_type": "ICL_zh_male_bingruogongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "魅力女友", + "voice_type": "zh_female_meilinvyou_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese" + ], + "emotions": [ + "sad", + "fear", + "neutral" + ] + }, + { + "name": "亲切小卓", + "voice_type": "ICL_zh_male_qinqiexiaozhuo_cs_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Luna", + "voice_type": "en_female_sarah_new_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "顾姐", + "voice_type": "zh_female_gujie_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "魅力苏菲", + "voice_type": "zh_female_sophie_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "广西远舟", + "voice_type": "zh_male_guangxiyuanzhou_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "邪魅女王", + "voice_type": "ICL_zh_female_bingjiao3_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "爽快思思", + "voice_type": "zh_female_shuangkuaisisi_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "chinese", + "en_gb" + ], + "emotions": [ + "happy", + "sad", + "angry", + "surprised", + "excited", + "coldness", + "neutral" + ] + }, + { + "name": "灵动欣欣", + "voice_type": "ICL_zh_female_lingdongxinxin_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Michael", + "voice_type": "ICL_en_male_michael_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "樱桃丸子", + "voice_type": "zh_female_yingtaowanzi_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "贴心妹妹", + "voice_type": "ICL_zh_female_yilin_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "双节棍小哥", + "voice_type": "zh_male_zhoujielun_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲慢青年", + "voice_type": "ICL_zh_male_aomanqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Candice", + "voice_type": "en_female_candice_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "en_us" + ], + "emotions": [ + "angry", + "neutral", + "ASMR", + "happy", + "chat", + "chat", + "warm", + "affectionate" + ] + }, + { + "name": "乖巧可儿", + "voice_type": "ICL_zh_female_guaiqiaokeer_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Charlie", + "voice_type": "ICL_en_female_cc_cm_v1_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "广告解说", + "voice_type": "zh_male_chunhui_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "甜美桃子", + "voice_type": "zh_female_tianmeitaozi_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "湾湾小何", + "voice_type": "zh_female_wanwanxiaohe_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "醋精男生", + "voice_type": "ICL_zh_male_cujingnansheng_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Serena", + "voice_type": "en_female_skye_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "en_us" + ], + "emotions": [ + "sad", + "angry", + "neutral", + "ASMR", + "happy", + "chat", + "chat", + "warm", + "affectionate" + ] + }, + { + "name": "暖心茜茜", + "voice_type": "ICL_zh_female_nuanxinqianqian_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Big Boogie", + "voice_type": "ICL_en_male_oogie2_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "少儿故事", + "voice_type": "zh_female_shaoergushi_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "清新女声", + "voice_type": "zh_female_qingxinnvsheng_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "湾区大叔", + "voice_type": "zh_female_wanqudashu_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "撒娇男友", + "voice_type": "ICL_zh_male_sajiaonanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Glen", + "voice_type": "en_male_glen_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "en_us" + ], + "emotions": [ + "sad", + "angry", + "neutral", + "ASMR", + "happy", + "chat", + "chat", + "warm", + "affectionate" + ] + }, + { + "name": "软萌团子", + "voice_type": "ICL_zh_female_ruanmengtuanzi_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Frosty Man", + "voice_type": "ICL_en_male_frosty1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "四郎", + "voice_type": "zh_male_silang_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "知性女声", + "voice_type": "zh_female_zhixingnvsheng_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "广州德哥", + "voice_type": "zh_male_guozhoudege_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "温柔男友", + "voice_type": "ICL_zh_male_wenrounanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Sylus", + "voice_type": "en_male_sylus_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "en_us" + ], + "emotions": [ + "sad", + "angry", + "neutral", + "ASMR", + "happy", + "chat", + "chat", + "warm", + "affectionate", + "authoritative" + ] + }, + { + "name": "阳光洋洋", + "voice_type": "ICL_zh_male_yangguangyangyang_cs_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "The Grinch", + "voice_type": "ICL_en_male_grinch2_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "俏皮女声", + "voice_type": "zh_female_qiaopinvsheng_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "清爽男大", + "voice_type": "zh_male_qingshuangnanda_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "浩宇小哥", + "voice_type": "zh_male_haoyuxiaoge_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "温顺少年", + "voice_type": "ICL_zh_male_wenshunshaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Corey", + "voice_type": "en_male_corey_emo_v2_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "en_gb" + ], + "emotions": [ + "sad", + "angry", + "neutral", + "ASMR", + "happy", + "chat", + "chat", + "warm", + "affectionate", + "authoritative" + ] + }, + { + "name": "软萌糖糖", + "voice_type": "ICL_zh_female_ruanmengtangtang_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Zayne", + "voice_type": "ICL_en_male_zayne_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "懒音绵宝", + "voice_type": "zh_male_lanxiaoyang_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "邻家女孩", + "voice_type": "zh_female_linjianvhai_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "北京小爷", + "voice_type": "zh_male_beijingxiaoye_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "粘人男友", + "voice_type": "ICL_zh_male_naigounanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Nadia", + "voice_type": "en_female_nadia_tips_emo_v2_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_emotion", + "scene": "多情感", + "language": [ + "en_gb" + ], + "emotions": [ + "sad", + "angry", + "neutral", + "ASMR", + "happy", + "chat", + "chat", + "warm", + "affectionate" + ] + }, + { + "name": "秀丽倩倩", + "voice_type": "ICL_zh_female_xiuliqianqian_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Jigsaw", + "voice_type": "ICL_en_male_cc_jigsaw_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "亮嗓萌仔", + "voice_type": "zh_male_dongmanhaimian_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "渊博小叔", + "voice_type": "zh_male_yuanboxiaoshu_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "京腔侃爷/Harmony", + "voice_type": "zh_male_jingqiangkanye_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "撒娇男生", + "voice_type": "ICL_zh_male_sajiaonansheng_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "开心小鸿", + "voice_type": "ICL_zh_female_kaixinxiaohong_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Chucky", + "voice_type": "ICL_en_male_cc_chucky_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "磁性解说男声/Morgan", + "voice_type": "zh_male_jieshuonansheng_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "阳光青年", + "voice_type": "zh_male_yangguangqingnian_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "妹坨洁儿", + "voice_type": "zh_female_meituojieer_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "accent", + "scene": "趣味口音", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "活泼男友", + "voice_type": "ICL_zh_male_huoponanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "轻盈朵朵", + "voice_type": "ICL_zh_female_qingyingduoduo_cs_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Clown Man", + "voice_type": "ICL_en_male_cc_penny_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "鸡汤妹妹/Hope", + "voice_type": "zh_female_jitangmeimei_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "甜美小源", + "voice_type": "zh_female_tianmeixiaoyuan_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "甜系男友", + "voice_type": "ICL_zh_male_tianxinanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "暖阳女声", + "voice_type": "zh_female_kefunvsheng_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "customer_service", + "scene": "客服场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Kevin McCallister", + "voice_type": "ICL_en_male_kevin2_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "贴心女声/Candy", + "voice_type": "zh_female_tiexinnvsheng_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "清澈梓梓", + "voice_type": "zh_female_qingchezizi_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "活力青年", + "voice_type": "ICL_zh_male_huoliqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Xavier", + "voice_type": "ICL_en_male_xavier1_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "萌丫头/Cutey", + "voice_type": "zh_female_mengyatou_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "video_dubbing", + "scene": "视频配音", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "解说小明", + "voice_type": "zh_male_jieshuoxiaoming_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "开朗青年", + "voice_type": "ICL_zh_male_kailangqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Noah", + "voice_type": "ICL_en_male_cc_dracula_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "开朗姐姐", + "voice_type": "zh_female_kailangjiejie_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷漠兄长", + "voice_type": "ICL_zh_male_lengmoxiongzhang_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Adam", + "voice_type": "en_male_adam_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "邻家男孩", + "voice_type": "zh_male_linjiananhai_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "翩翩公子", + "voice_type": "ICL_zh_male_pianpiangongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Amanda", + "voice_type": "en_female_amanda_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "甜美悦悦", + "voice_type": "zh_female_tianmeiyueyue_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "懵懂青年", + "voice_type": "ICL_zh_male_mengdongqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Jackson", + "voice_type": "en_male_jackson_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_us" + ], + "emotions": [] + }, + { + "name": "心灵鸡汤", + "voice_type": "zh_female_xinlingjitang_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷脸兄长", + "voice_type": "ICL_zh_male_lenglianxiongzhang_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Delicate Girl", + "voice_type": "en_female_daisy_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "知性温婉", + "voice_type": "ICL_zh_female_zhixingwenwan_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇少年", + "voice_type": "ICL_zh_male_bingjiaoshaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Dave", + "voice_type": "en_male_dave_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "暖心体贴", + "voice_type": "ICL_zh_male_nuanxintitie_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇男友", + "voice_type": "ICL_zh_male_bingjiaonanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Hades", + "voice_type": "en_male_hades_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "开朗轻快", + "voice_type": "ICL_zh_male_kailangqingkuai_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病弱少年", + "voice_type": "ICL_zh_male_bingruoshaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Onez", + "voice_type": "en_female_onez_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "活泼爽朗", + "voice_type": "ICL_zh_male_huoposhuanglang_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "意气少年", + "voice_type": "ICL_zh_male_yiqishaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Emily", + "voice_type": "en_female_emily_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "率真小伙", + "voice_type": "ICL_zh_male_shuaizhenxiaohuo_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "干净少年", + "voice_type": "ICL_zh_male_ganjingshaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Daniel", + "voice_type": "zh_male_xudong_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "温柔小哥", + "voice_type": "zh_male_wenrouxiaoge_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷漠男友", + "voice_type": "ICL_zh_male_lengmonanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Alastor", + "voice_type": "ICL_en_male_cc_alastor_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "灿灿/Shiny", + "voice_type": "zh_female_cancan_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "精英青年", + "voice_type": "ICL_zh_male_jingyingqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Smith", + "voice_type": "en_male_smith_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "爽快思思/Skye", + "voice_type": "zh_female_shuangkuaisisi_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "热血少年", + "voice_type": "ICL_zh_male_rexueshaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Anna", + "voice_type": "en_female_anna_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_gb" + ], + "emotions": [] + }, + { + "name": "温暖阿虎/Alvin", + "voice_type": "zh_male_wennuanahu_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "清爽少年", + "voice_type": "ICL_zh_male_qingshuangshaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Ethan", + "voice_type": "ICL_en_male_aussie_v1_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_au" + ], + "emotions": [] + }, + { + "name": "少年梓辛/Brayan", + "voice_type": "zh_male_shaonianzixin_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese", + "en_us" + ], + "emotions": [] + }, + { + "name": "中二青年", + "voice_type": "ICL_zh_male_zhongerqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Sarah", + "voice_type": "en_female_sarah_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_au" + ], + "emotions": [] + }, + { + "name": "温柔文雅", + "voice_type": "ICL_zh_female_wenrouwenya_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "general", + "scene": "通用场景", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "凌云青年", + "voice_type": "ICL_zh_male_lingyunqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Dryw", + "voice_type": "en_male_dryw_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "en_au" + ], + "emotions": [] + }, + { + "name": "自负青年", + "voice_type": "ICL_zh_male_zifuqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Diana", + "voice_type": "multi_female_maomao_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "es" + ], + "emotions": [] + }, + { + "name": "不羁青年", + "voice_type": "ICL_zh_male_bujiqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Lucía", + "voice_type": "multi_male_M100_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "es" + ], + "emotions": [] + }, + { + "name": "儒雅君子", + "voice_type": "ICL_zh_male_ruyajunzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Sofía", + "voice_type": "multi_female_sophie_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "es" + ], + "emotions": [] + }, + { + "name": "低音沉郁", + "voice_type": "ICL_zh_male_diyinchenyu_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "Daníel", + "voice_type": "multi_male_xudong_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "es" + ], + "emotions": [] + }, + { + "name": "冷脸学霸", + "voice_type": "ICL_zh_male_lenglianxueba_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "ひかる(光)", + "voice_type": "multi_zh_male_youyoujunzi_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja" + ], + "emotions": [] + }, + { + "name": "儒雅总裁", + "voice_type": "ICL_zh_male_ruyazongcai_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "さとみ(智美)", + "voice_type": "multi_female_sophie_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja" + ], + "emotions": [] + }, + { + "name": "深沉总裁", + "voice_type": "ICL_zh_male_shenchenzongcai_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "まさお(正男)", + "voice_type": "multi_male_xudong_conversation_wvae_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja" + ], + "emotions": [] + }, + { + "name": "小侯爷", + "voice_type": "ICL_zh_male_xiaohouye_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "つき(月)", + "voice_type": "multi_female_maomao_conversation_wvae_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja" + ], + "emotions": [] + }, + { + "name": "孤高公子", + "voice_type": "ICL_zh_male_gugaogongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "あけみ(朱美)", + "voice_type": "multi_female_gaolengyujie_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja" + ], + "emotions": [] + }, + { + "name": "仗剑君子", + "voice_type": "ICL_zh_male_zhangjianjunzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "かずね(和音)/Javier or Álvaro", + "voice_type": "multi_male_jingqiangkanye_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja", + "es" + ], + "emotions": [] + }, + { + "name": "温润学者", + "voice_type": "ICL_zh_male_wenrunxuezhe_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "はるこ(晴子)/Esmeralda", + "voice_type": "multi_female_shuangkuaisisi_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja", + "es" + ], + "emotions": [] + }, + { + "name": "亲切青年", + "voice_type": "ICL_zh_male_qinqieqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "ひろし(広志)/Roberto", + "voice_type": "multi_male_wanqudashu_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "multi_language", + "scene": "多语种", + "language": [ + "ja", + "es" + ], + "emotions": [] + }, + { + "name": "温柔学长", + "voice_type": "ICL_zh_male_wenrouxuezhang_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "高冷总裁", + "voice_type": "ICL_zh_male_gaolengzongcai_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷峻高智", + "voice_type": "ICL_zh_male_lengjungaozhi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "孱弱少爷", + "voice_type": "ICL_zh_male_chanruoshaoye_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "自信青年", + "voice_type": "ICL_zh_male_zixinqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "青涩青年", + "voice_type": "ICL_zh_male_qingseqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "学霸同桌", + "voice_type": "ICL_zh_male_xuebatongzhuo_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷傲总裁", + "voice_type": "ICL_zh_male_lengaozongcai_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "元气少年", + "voice_type": "ICL_zh_male_yuanqishaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "洒脱青年", + "voice_type": "ICL_zh_male_satuoqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "直率青年", + "voice_type": "ICL_zh_male_zhishuaiqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "斯文青年", + "voice_type": "ICL_zh_male_siwenqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "俊逸公子", + "voice_type": "ICL_zh_male_junyigongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "仗剑侠客", + "voice_type": "ICL_zh_male_zhangjianxiake_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "机甲智能", + "voice_type": "ICL_zh_male_jijiaozhineng_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "奶气萌娃", + "voice_type": "zh_male_naiqimengwa_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "婆婆", + "voice_type": "zh_female_popo_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "高冷御姐", + "voice_type": "zh_female_gaolengyujie_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲娇霸总", + "voice_type": "zh_male_aojiaobazong_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "魅力女友", + "voice_type": "zh_female_meilinvyou_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "深夜播客", + "voice_type": "zh_male_shenyeboke_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "柔美女友", + "voice_type": "zh_female_sajiaonvyou_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "撒娇学妹", + "voice_type": "zh_female_yuanqinvyou_moon_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病弱少女", + "voice_type": "ICL_zh_female_bingruoshaonv_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "活泼女孩", + "voice_type": "ICL_zh_female_huoponvhai_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "东方浩然", + "voice_type": "zh_male_dongfanghaoran_moon_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "绿茶小哥", + "voice_type": "ICL_zh_male_lvchaxiaoge_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "娇弱萝莉", + "voice_type": "ICL_zh_female_jiaoruoluoli_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷淡疏离", + "voice_type": "ICL_zh_male_lengdanshuli_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "憨厚敦实", + "voice_type": "ICL_zh_male_hanhoudunshi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "活泼刁蛮", + "voice_type": "ICL_zh_female_huopodiaoman_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "固执病娇", + "voice_type": "ICL_zh_male_guzhibingjiao_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "撒娇粘人", + "voice_type": "ICL_zh_male_sajiaonianren_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲慢娇声", + "voice_type": "ICL_zh_female_aomanjiaosheng_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "潇洒随性", + "voice_type": "ICL_zh_male_xiaosasuixing_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "诡异神秘", + "voice_type": "ICL_zh_male_guiyishenmi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "儒雅才俊", + "voice_type": "ICL_zh_male_ruyacaijun_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "正直青年", + "voice_type": "ICL_zh_male_zhengzhiqingnian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "娇憨女王", + "voice_type": "ICL_zh_female_jiaohannvwang_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇萌妹", + "voice_type": "ICL_zh_female_bingjiaomengmei_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "青涩小生", + "voice_type": "ICL_zh_male_qingsenaigou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "纯真学弟", + "voice_type": "ICL_zh_male_chunzhenxuedi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "优柔帮主", + "voice_type": "ICL_zh_male_youroubangzhu_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "优柔公子", + "voice_type": "ICL_zh_male_yourougongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "贴心男友", + "voice_type": "ICL_zh_male_tiexinnanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "少年将军", + "voice_type": "ICL_zh_male_shaonianjiangjun_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇哥哥", + "voice_type": "ICL_zh_male_bingjiaogege_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "学霸男同桌", + "voice_type": "ICL_zh_male_xuebanantongzhuo_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "幽默叔叔", + "voice_type": "ICL_zh_male_youmoshushu_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "假小子", + "voice_type": "ICL_zh_female_jiaxiaozi_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "温柔男同桌", + "voice_type": "ICL_zh_male_wenrounantongzhuo_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "幽默大爷", + "voice_type": "ICL_zh_male_youmodaye_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "枕边低语", + "voice_type": "ICL_zh_male_asmryexiu_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "神秘法师", + "voice_type": "ICL_zh_male_shenmifashi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "娇喘女声", + "voice_type": "zh_female_jiaochuan_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "开朗弟弟", + "voice_type": "zh_male_livelybro_mars_bigtts", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "谄媚女声", + "voice_type": "zh_female_flattery_mars_bigtts", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "冷峻上司", + "voice_type": "ICL_zh_male_lengjunshangsi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "醋精男友", + "voice_type": "ICL_zh_male_cujingnanyou_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "风发少年", + "voice_type": "ICL_zh_male_fengfashaonian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "磁性男嗓", + "voice_type": "ICL_zh_male_cixingnansang_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "成熟总裁", + "voice_type": "ICL_zh_male_chengshuzongcai_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲娇精英", + "voice_type": "ICL_zh_male_aojiaojingying_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲娇公子", + "voice_type": "ICL_zh_male_aojiaogongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "霸道少爷", + "voice_type": "ICL_zh_male_badaoshaoye_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "腹黑公子", + "voice_type": "ICL_zh_male_fuheigongzi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "暖心学姐", + "voice_type": "ICL_zh_female_nuanxinxuejie_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "成熟姐姐", + "voice_type": "ICL_zh_female_chengshujiejie_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇姐姐", + "voice_type": "ICL_zh_female_bingjiaojiejie_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "妩媚御姐", + "voice_type": "ICL_zh_female_wumeiyujie_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲娇女友", + "voice_type": "ICL_zh_female_aojiaonvyou_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "贴心女友", + "voice_type": "ICL_zh_female_tiexinnvyou_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "性感御姐", + "voice_type": "ICL_zh_female_xingganyujie_tob", + "gender": "female", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇弟弟", + "voice_type": "ICL_zh_male_bingjiaodidi_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲慢少爷", + "voice_type": "ICL_zh_male_aomanshaoye_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "傲气凌人", + "voice_type": "ICL_zh_male_aiqilingren_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + }, + { + "name": "病娇白莲", + "voice_type": "ICL_zh_male_bingjiaobailian_tob", + "gender": "male", + "version": "1.0", + "resource_id": "seed-tts-1.0", + "voice_category": "roleplay", + "scene": "角色扮演", + "language": [ + "chinese" + ], + "emotions": [] + } + ], + "languages": [ + { + "name": "chinese", + "zh": "中文", + "en": "Chinese" + }, + { + "name": "en_au", + "zh": "澳洲英语", + "en": "Australian English" + }, + { + "name": "en_gb", + "zh": "英式英语", + "en": "British English" + }, + { + "name": "en_us", + "zh": "美式英语", + "en": "American English" + }, + { + "name": "es", + "zh": "西语", + "en": "Spanish" + }, + { + "name": "ja", + "zh": "日语", + "en": "Japanese" + } + ], + "emotions": [ + { + "name": "ASMR", + "zh": "低语", + "en": "ASMR" + }, + { + "name": "affectionate", + "zh": "深情", + "en": "affectionate" + }, + { + "name": "angry", + "zh": "生气", + "en": "angry" + }, + { + "name": "authoritative", + "zh": "权威", + "en": "authoritative" + }, + { + "name": "chat", + "zh": "对话", + "en": "chat" + }, + { + "name": "coldness", + "zh": "冷漠", + "en": "coldness" + }, + { + "name": "depressed", + "zh": "沮丧", + "en": "depressed" + }, + { + "name": "excited", + "zh": "激动", + "en": "excited" + }, + { + "name": "fear", + "zh": "恐惧", + "en": "fear" + }, + { + "name": "happy", + "zh": "开心", + "en": "happy" + }, + { + "name": "hate", + "zh": "厌恶", + "en": "hate" + }, + { + "name": "neutral", + "zh": "中性", + "en": "neutral" + }, + { + "name": "sad", + "zh": "悲伤", + "en": "sad" + }, + { + "name": "surprised", + "zh": "惊讶", + "en": "surprised" + }, + { + "name": "warm", + "zh": "温暖", + "en": "warm" + } + ] +} diff --git a/configs/wan/wan_flf2v.json b/configs/wan/wan_flf2v.json new file mode 100644 index 0000000..998f38f --- /dev/null +++ b/configs/wan/wan_flf2v.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": 5, + "sample_shift": 16, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/wan/wan_i2v.json b/configs/wan/wan_i2v.json new file mode 100644 index 0000000..6c21070 --- /dev/null +++ b/configs/wan/wan_i2v.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 3, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/wan/wan_t2v.json b/configs/wan/wan_t2v.json new file mode 100644 index 0000000..2e28250 --- /dev/null +++ b/configs/wan/wan_t2v.json @@ -0,0 +1,14 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/wan/wan_t2v_enhancer.json b/configs/wan/wan_t2v_enhancer.json new file mode 100644 index 0000000..b27afdf --- /dev/null +++ b/configs/wan/wan_t2v_enhancer.json @@ -0,0 +1,19 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 6, + "sample_shift": 8, + "enable_cfg": true, + "cpu_offload": false, + "sub_servers": { + "prompt_enhancer": [ + "http://localhost:9001" + ] + } +} diff --git a/configs/wan/wan_vace.json b/configs/wan/wan_vace.json new file mode 100644 index 0000000..23fbff2 --- /dev/null +++ b/configs/wan/wan_vace.json @@ -0,0 +1,13 @@ +{ + "infer_steps": 50, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5, + "sample_shift": 16, + "enable_cfg": true, + "cpu_offload": false +} diff --git a/configs/wan22/wan_animate.json b/configs/wan22/wan_animate.json new file mode 100644 index 0000000..c4c3d59 --- /dev/null +++ b/configs/wan22/wan_animate.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 20, + "target_video_length": 77, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "adapter_attn_type": "flash_attn3", + "sample_shift": 5.0, + "sample_guide_scale": 5.0, + "enable_cfg": false, + "cpu_offload": false, + "refert_num": 1, + "replace_flag": false, + "fps": 30 +} diff --git a/configs/wan22/wan_animate_4090.json b/configs/wan22/wan_animate_4090.json new file mode 100644 index 0000000..e0f8965 --- /dev/null +++ b/configs/wan22/wan_animate_4090.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 20, + "target_video_length": 77, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "adapter_attn_type": "sage_attn2", + "sample_shift": 5.0, + "sample_guide_scale": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "phase", + "refert_num": 1, + "replace_flag": false, + "fps": 30, + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8", + "clip_quantized": true, + "clip_quant_scheme": "fp8" +} diff --git a/configs/wan22/wan_animate_lora.json b/configs/wan22/wan_animate_lora.json new file mode 100644 index 0000000..0e1c805 --- /dev/null +++ b/configs/wan22/wan_animate_lora.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 4, + "target_video_length": 77, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "adapter_attn_type": "flash_attn3", + "sample_shift": 5.0, + "sample_guide_scale": 1.0, + "enable_cfg": false, + "cpu_offload": false, + "refert_num": 1, + "replace_flag": false, + "fps": 30, + "lora_configs": [ + { + "path": "lightx2v_I2V_14B_480p_cfg_step_distill_rank32_bf16.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/wan22/wan_animate_replace.json b/configs/wan22/wan_animate_replace.json new file mode 100644 index 0000000..c4805a4 --- /dev/null +++ b/configs/wan22/wan_animate_replace.json @@ -0,0 +1,18 @@ +{ + "infer_steps": 20, + "target_video_length": 77, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "adapter_attn_type": "flash_attn3", + "sample_shift": 5.0, + "sample_guide_scale": 5.0, + "enable_cfg": false, + "cpu_offload": false, + "refert_num": 1, + "fps": 30, + "replace_flag": true +} diff --git a/configs/wan22/wan_animate_replace_4090.json b/configs/wan22/wan_animate_replace_4090.json new file mode 100644 index 0000000..fab2908 --- /dev/null +++ b/configs/wan22/wan_animate_replace_4090.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 20, + "target_video_length": 77, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "adapter_attn_type": "sage_attn2", + "sample_shift": 5.0, + "sample_guide_scale": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "phase", + "refert_num": 1, + "fps": 30, + "replace_flag": true, + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f", + "clip_quantized": true, + "clip_quant_scheme": "fp8-q8f" +} diff --git a/configs/wan22/wan_distill_moe_flf2v.json b/configs/wan22/wan_distill_moe_flf2v.json new file mode 100644 index 0000000..d3f9001 --- /dev/null +++ b/configs/wan22/wan_distill_moe_flf2v.json @@ -0,0 +1,28 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 16, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/wan22/wan_distill_moe_flf2v_fp8.json b/configs/wan22/wan_distill_moe_flf2v_fp8.json new file mode 100644 index 0000000..2e982f3 --- /dev/null +++ b/configs/wan22/wan_distill_moe_flf2v_fp8.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 16, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8" +} diff --git a/configs/wan22/wan_distill_moe_flf2v_int8.json b/configs/wan22/wan_distill_moe_flf2v_int8.json new file mode 100644 index 0000000..c3489b0 --- /dev/null +++ b/configs/wan22/wan_distill_moe_flf2v_int8.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 16, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "int8-vllm", + "t5_quantized": true, + "t5_quant_scheme": "int8" +} diff --git a/configs/wan22/wan_distill_moe_flf2v_with_lora.json b/configs/wan22/wan_distill_moe_flf2v_with_lora.json new file mode 100644 index 0000000..445ca8f --- /dev/null +++ b/configs/wan22/wan_distill_moe_flf2v_with_lora.json @@ -0,0 +1,40 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 16, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "lora_configs": [ + { + "name": "low_noise_model", + "path": "/path/to/low_noise_lora", + "strength": 1.0 + }, + { + "name": "high_noise_model", + "path": "/path/to/high_noise_lora", + "strength": 1.0 + } + ] +} diff --git a/configs/wan22/wan_moe_flf2v.json b/configs/wan22/wan_moe_flf2v.json new file mode 100644 index 0000000..73879fc --- /dev/null +++ b/configs/wan22/wan_moe_flf2v.json @@ -0,0 +1,21 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_shift": 16, + "enable_cfg": true, + "cpu_offload": true, + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.900, + "use_image_encoder": false +} diff --git a/configs/wan22/wan_moe_i2v.json b/configs/wan22/wan_moe_i2v.json new file mode 100644 index 0000000..eb29bfe --- /dev/null +++ b/configs/wan22/wan_moe_i2v.json @@ -0,0 +1,20 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "boundary": 0.900, + "use_image_encoder": false +} diff --git a/configs/wan22/wan_moe_i2v_4090.json b/configs/wan22/wan_moe_i2v_4090.json new file mode 100644 index 0000000..d37b928 --- /dev/null +++ b/configs/wan22/wan_moe_i2v_4090.json @@ -0,0 +1,27 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "phase", + "boundary": 0.900, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/wan22/wan_moe_i2v_audio.json b/configs/wan22/wan_moe_i2v_audio.json new file mode 100644 index 0000000..a0deb7c --- /dev/null +++ b/configs/wan22/wan_moe_i2v_audio.json @@ -0,0 +1,38 @@ +{ + "infer_steps": 6, + "target_fps": 16, + "video_duration": 16, + "audio_sr": 16000, + "text_len": 512, + "target_video_length": 81, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 1.0, + 1.0 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.900, + "use_image_encoder": false, + "use_31_block": false, + "lora_configs": [ + { + "name": "high_noise_model", + "path": "/mnt/Text2Video/wuzhuguanyu/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors", + "strength": 1.0 + }, + { + "name": "low_noise_model", + "path": "/mnt/Text2Video/wuzhuguanyu/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/wan22/wan_moe_i2v_distill.json b/configs/wan22/wan_moe_i2v_distill.json new file mode 100644 index 0000000..92f3360 --- /dev/null +++ b/configs/wan22/wan_moe_i2v_distill.json @@ -0,0 +1,28 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ] +} diff --git a/configs/wan22/wan_moe_i2v_distill_4090.json b/configs/wan22/wan_moe_i2v_distill_4090.json new file mode 100644 index 0000000..279a0f2 --- /dev/null +++ b/configs/wan22/wan_moe_i2v_distill_4090.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "fp8-q8f" +} diff --git a/configs/wan22/wan_moe_i2v_distill_5090.json b/configs/wan22/wan_moe_i2v_distill_5090.json new file mode 100644 index 0000000..04494c2 --- /dev/null +++ b/configs/wan22/wan_moe_i2v_distill_5090.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn3", + "cross_attn_1_type": "sage_attn3", + "cross_attn_2_type": "sage_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "int8-q8f", + "t5_quantized": true, + "t5_quant_scheme": "int8-q8f" +} diff --git a/configs/wan22/wan_moe_i2v_distill_quant.json b/configs/wan22/wan_moe_i2v_distill_quant.json new file mode 100644 index 0000000..ce4e1c4 --- /dev/null +++ b/configs/wan22/wan_moe_i2v_distill_quant.json @@ -0,0 +1,32 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl" +} diff --git a/configs/wan22/wan_moe_i2v_distill_with_lora.json b/configs/wan22/wan_moe_i2v_distill_with_lora.json new file mode 100644 index 0000000..f28ddc4 --- /dev/null +++ b/configs/wan22/wan_moe_i2v_distill_with_lora.json @@ -0,0 +1,40 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "sage_attn2", + "cross_attn_1_type": "sage_attn2", + "cross_attn_2_type": "sage_attn2", + "sample_guide_scale": [ + 3.5, + 3.5 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "block", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "use_image_encoder": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "lora_configs": [ + { + "name": "high_noise_model", + "path": "lightx2v/Wan2.2-Distill-Loras/wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step_1022.safetensors", + "strength": 1.0 + }, + { + "name": "low_noise_model", + "path": "lightx2v/Wan2.2-Distill-Loras/wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step_1022.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/wan22/wan_moe_t2v.json b/configs/wan22/wan_moe_t2v.json new file mode 100644 index 0000000..d8be0d1 --- /dev/null +++ b/configs/wan22/wan_moe_t2v.json @@ -0,0 +1,21 @@ +{ + "infer_steps": 40, + "target_video_length": 81, + "text_len": 512, + "target_height": 720, + "target_width": 1280, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 4.0, + 3.0 + ], + "sample_shift": 12.0, + "enable_cfg": true, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary": 0.875 +} diff --git a/configs/wan22/wan_moe_t2v_distill.json b/configs/wan22/wan_moe_t2v_distill.json new file mode 100644 index 0000000..eabdf11 --- /dev/null +++ b/configs/wan22/wan_moe_t2v_distill.json @@ -0,0 +1,34 @@ +{ + "infer_steps": 4, + "target_video_length": 81, + "text_len": 512, + "target_height": 480, + "target_width": 832, + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": [ + 4.0, + 3.0 + ], + "sample_shift": 5.0, + "enable_cfg": false, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "boundary_step_index": 2, + "denoising_step_list": [ + 1000, + 750, + 500, + 250 + ], + "lora_configs": [ + { + "name": "low_noise_model", + "path": "Wan2.1-T2V-14B/loras/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors", + "strength": 1.0 + } + ] +} diff --git a/configs/wan22/wan_ti2v_i2v.json b/configs/wan22/wan_ti2v_i2v.json new file mode 100644 index 0000000..44e9c4e --- /dev/null +++ b/configs/wan22/wan_ti2v_i2v.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "fps": 24, + "use_image_encoder": false +} diff --git a/configs/wan22/wan_ti2v_i2v_4090.json b/configs/wan22/wan_ti2v_i2v_4090.json new file mode 100644 index 0000000..742f8ab --- /dev/null +++ b/configs/wan22/wan_ti2v_i2v_4090.json @@ -0,0 +1,26 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "fps": 24, + "use_image_encoder": false, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "vae_offload_cache": true +} diff --git a/configs/wan22/wan_ti2v_t2v.json b/configs/wan22/wan_ti2v_t2v.json new file mode 100644 index 0000000..a1541e8 --- /dev/null +++ b/configs/wan22/wan_ti2v_t2v.json @@ -0,0 +1,24 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "cpu_offload": false, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "fps": 24 +} diff --git a/configs/wan22/wan_ti2v_t2v_4090.json b/configs/wan22/wan_ti2v_t2v_4090.json new file mode 100644 index 0000000..c1e5c49 --- /dev/null +++ b/configs/wan22/wan_ti2v_t2v_4090.json @@ -0,0 +1,25 @@ +{ + "infer_steps": 50, + "target_video_length": 121, + "text_len": 512, + "target_height": 704, + "target_width": 1280, + "num_channels_latents": 48, + "vae_stride": [ + 4, + 16, + 16 + ], + "self_attn_1_type": "flash_attn3", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3", + "sample_guide_scale": 5.0, + "sample_shift": 5.0, + "enable_cfg": true, + "fps": 24, + "cpu_offload": true, + "offload_granularity": "model", + "t5_cpu_offload": false, + "vae_cpu_offload": false, + "vae_offload_cache": true +} diff --git a/dockerfiles/Dockerfile b/dockerfiles/Dockerfile new file mode 100644 index 0000000..ca883dc --- /dev/null +++ b/dockerfiles/Dockerfile @@ -0,0 +1,105 @@ +FROM pytorch/pytorch:2.8.0-cuda12.8-cudnn9-devel AS base + +WORKDIR /app + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + +RUN apt-get update && apt-get install -y vim tmux zip unzip bzip2 wget git git-lfs build-essential libibverbs-dev ca-certificates \ + curl iproute2 libsm6 libxext6 kmod ccache libnuma-dev libssl-dev flex bison libgtk-3-dev libpango1.0-dev \ + libsoup2.4-dev libnice-dev libopus-dev libvpx-dev libx264-dev libsrtp2-dev libglib2.0-dev libdrm-dev libjpeg-dev libpng-dev \ + && apt-get clean && rm -rf /var/lib/apt/lists/* && git lfs install + +RUN conda install conda-forge::ffmpeg=8.0.0 -y && conda clean -all -y + +RUN pip install --no-cache-dir packaging ninja cmake scikit-build-core uv meson ruff pre-commit fastapi uvicorn requests -U + +RUN git clone https://github.com/vllm-project/vllm.git && cd vllm \ + && python use_existing_torch.py && pip install --no-cache-dir -r requirements/build.txt \ + && pip install --no-cache-dir --no-build-isolation -v -e . + +RUN git clone https://github.com/sgl-project/sglang.git && cd sglang/sgl-kernel \ + && make build && make clean + +RUN pip install --no-cache-dir diffusers transformers tokenizers accelerate safetensors opencv-python numpy imageio \ + imageio-ffmpeg einops loguru qtorch ftfy av decord matplotlib debugpy + +RUN git clone https://github.com/Dao-AILab/flash-attention.git --recursive + +RUN cd flash-attention && python setup.py install && rm -rf build + +RUN cd flash-attention/hopper && python setup.py install && rm -rf build + +RUN git clone https://github.com/ModelTC/SageAttention.git --depth 1 + +RUN cd SageAttention && CUDA_ARCHITECTURES="8.0,8.6,8.9,9.0,12.0" EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" MAX_JOBS=32 pip install --no-cache-dir -v -e . + +RUN git clone https://github.com/ModelTC/SageAttention-1104.git --depth 1 + +RUN cd SageAttention-1104/sageattention3_blackwell && python setup.py install && rm -rf build + +RUN git clone https://github.com/SandAI-org/MagiAttention.git --recursive + +RUN cd MagiAttention && TORCH_CUDA_ARCH_LIST="9.0" pip install --no-cache-dir --no-build-isolation -v -e . + +RUN git clone https://github.com/ModelTC/FlashVSR.git --depth 1 + +RUN cd FlashVSR && pip install --no-cache-dir -v -e . + +COPY lightx2v_kernel /app/lightx2v_kernel + +RUN git clone https://github.com/NVIDIA/cutlass.git --depth 1 && cd /app/lightx2v_kernel && MAX_JOBS=32 && CMAKE_BUILD_PARALLEL_LEVEL=4 \ + uv build --wheel \ + -Cbuild-dir=build . \ + -Ccmake.define.CUTLASS_PATH=/app/cutlass \ + --verbose \ + --color=always \ + --no-build-isolation \ + && pip install dist/*whl --force-reinstall --no-deps \ + && rm -rf /app/lightx2v_kernel && rm -rf /app/cutlass + +# cloud deploy +RUN pip install --no-cache-dir aio-pika asyncpg>=0.27.0 aioboto3>=12.0.0 PyJWT alibabacloud_dypnsapi20170525==1.2.2 redis==6.4.0 tos + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable +ENV PATH=/root/.cargo/bin:$PATH + +RUN cd /opt \ + && wget https://mirrors.tuna.tsinghua.edu.cn/gnu/libiconv/libiconv-1.15.tar.gz \ + && tar zxvf libiconv-1.15.tar.gz \ + && cd libiconv-1.15 \ + && ./configure \ + && make \ + && make install \ + && rm -rf /opt/libiconv-1.15 + +RUN cd /opt \ + && git clone https://github.com/GStreamer/gstreamer.git -b 1.27.2 --depth 1 \ + && cd gstreamer \ + && meson setup builddir \ + && meson compile -C builddir \ + && meson install -C builddir \ + && ldconfig \ + && rm -rf /opt/gstreamer + +RUN cd /opt \ + && git clone https://github.com/GStreamer/gst-plugins-rs.git -b gstreamer-1.27.2 --depth 1 \ + && cd gst-plugins-rs \ + && cargo build --package gst-plugin-webrtchttp --release \ + && install -m 644 target/release/libgstwebrtchttp.so $(pkg-config --variable=pluginsdir gstreamer-1.0)/ \ + && rm -rf /opt/gst-plugins-rs + +RUN ldconfig + + +# q8f for base docker +RUN git clone https://github.com/KONAKONA666/q8_kernels.git --depth 1 +RUN cd q8_kernels && git submodule init && git submodule update && python setup.py install && rm -rf build + +# q8f for 5090 docker +# RUN git clone https://github.com/ModelTC/LTX-Video-Q8-Kernels.git --depth 1 +# RUN cd LTX-Video-Q8-Kernels && git submodule init && git submodule update && python setup.py install && rm -rf build + +WORKDIR /workspace diff --git a/dockerfiles/Dockerfile_5090 b/dockerfiles/Dockerfile_5090 new file mode 100644 index 0000000..c8bce20 --- /dev/null +++ b/dockerfiles/Dockerfile_5090 @@ -0,0 +1,105 @@ +FROM pytorch/pytorch:2.8.0-cuda12.8-cudnn9-devel AS base + +WORKDIR /app + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + +RUN apt-get update && apt-get install -y vim tmux zip unzip bzip2 wget git git-lfs build-essential libibverbs-dev ca-certificates \ + curl iproute2 libsm6 libxext6 kmod ccache libnuma-dev libssl-dev flex bison libgtk-3-dev libpango1.0-dev \ + libsoup2.4-dev libnice-dev libopus-dev libvpx-dev libx264-dev libsrtp2-dev libglib2.0-dev libdrm-dev libjpeg-dev libpng-dev \ + && apt-get clean && rm -rf /var/lib/apt/lists/* && git lfs install + +RUN conda install conda-forge::ffmpeg=8.0.0 -y && conda clean -all -y + +RUN pip install --no-cache-dir packaging ninja cmake scikit-build-core uv meson ruff pre-commit fastapi uvicorn requests -U + +RUN git clone https://github.com/vllm-project/vllm.git && cd vllm \ + && python use_existing_torch.py && pip install --no-cache-dir -r requirements/build.txt \ + && pip install --no-cache-dir --no-build-isolation -v -e . + +RUN git clone https://github.com/sgl-project/sglang.git && cd sglang/sgl-kernel \ + && make build && make clean + +RUN pip install --no-cache-dir diffusers transformers tokenizers accelerate safetensors opencv-python numpy imageio \ + imageio-ffmpeg einops loguru qtorch ftfy av decord matplotlib debugpy + +RUN git clone https://github.com/Dao-AILab/flash-attention.git --recursive + +RUN cd flash-attention && python setup.py install && rm -rf build + +RUN cd flash-attention/hopper && python setup.py install && rm -rf build + +RUN git clone https://github.com/ModelTC/SageAttention.git --depth 1 + +RUN cd SageAttention && CUDA_ARCHITECTURES="8.0,8.6,8.9,9.0,12.0" EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" MAX_JOBS=32 pip install --no-cache-dir -v -e . + +RUN git clone https://github.com/ModelTC/SageAttention-1104.git --depth 1 + +RUN cd SageAttention-1104/sageattention3_blackwell && python setup.py install && rm -rf build + +RUN git clone https://github.com/SandAI-org/MagiAttention.git --recursive + +RUN cd MagiAttention && TORCH_CUDA_ARCH_LIST="9.0" pip install --no-cache-dir --no-build-isolation -v -e . + +RUN git clone https://github.com/ModelTC/FlashVSR.git --depth 1 + +RUN cd FlashVSR && pip install --no-cache-dir -v -e . + +COPY lightx2v_kernel /app/lightx2v_kernel + +RUN git clone https://github.com/NVIDIA/cutlass.git --depth 1 && cd /app/lightx2v_kernel && MAX_JOBS=32 && CMAKE_BUILD_PARALLEL_LEVEL=4 \ + uv build --wheel \ + -Cbuild-dir=build . \ + -Ccmake.define.CUTLASS_PATH=/app/cutlass \ + --verbose \ + --color=always \ + --no-build-isolation \ + && pip install dist/*whl --force-reinstall --no-deps \ + && rm -rf /app/lightx2v_kernel && rm -rf /app/cutlass + +# cloud deploy +RUN pip install --no-cache-dir aio-pika asyncpg>=0.27.0 aioboto3>=12.0.0 PyJWT alibabacloud_dypnsapi20170525==1.2.2 redis==6.4.0 tos + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable +ENV PATH=/root/.cargo/bin:$PATH + +RUN cd /opt \ + && wget https://mirrors.tuna.tsinghua.edu.cn/gnu/libiconv/libiconv-1.15.tar.gz \ + && tar zxvf libiconv-1.15.tar.gz \ + && cd libiconv-1.15 \ + && ./configure \ + && make \ + && make install \ + && rm -rf /opt/libiconv-1.15 + +RUN cd /opt \ + && git clone https://github.com/GStreamer/gstreamer.git -b 1.27.2 --depth 1 \ + && cd gstreamer \ + && meson setup builddir \ + && meson compile -C builddir \ + && meson install -C builddir \ + && ldconfig \ + && rm -rf /opt/gstreamer + +RUN cd /opt \ + && git clone https://github.com/GStreamer/gst-plugins-rs.git -b gstreamer-1.27.2 --depth 1 \ + && cd gst-plugins-rs \ + && cargo build --package gst-plugin-webrtchttp --release \ + && install -m 644 target/release/libgstwebrtchttp.so $(pkg-config --variable=pluginsdir gstreamer-1.0)/ \ + && rm -rf /opt/gst-plugins-rs + +RUN ldconfig + + +# q8f for base docker +# RUN git clone https://github.com/KONAKONA666/q8_kernels.git --depth 1 +# RUN cd q8_kernels && git submodule init && git submodule update && python setup.py install && rm -rf build + +# q8f for 5090 docker +RUN git clone https://github.com/ModelTC/LTX-Video-Q8-Kernels.git --depth 1 +RUN cd LTX-Video-Q8-Kernels && git submodule init && git submodule update && python setup.py install && rm -rf build + +WORKDIR /workspace diff --git a/dockerfiles/Dockerfile_cambricon_mlu590 b/dockerfiles/Dockerfile_cambricon_mlu590 new file mode 100644 index 0000000..3cfa027 --- /dev/null +++ b/dockerfiles/Dockerfile_cambricon_mlu590 @@ -0,0 +1,31 @@ +FROM cambricon-base/pytorch:v25.10.0-torch2.8.0-torchmlu1.29.1-ubuntu22.04-py310 AS base + +WORKDIR /workspace/LightX2V + +# Set envs +ENV PYTHONPATH=/workspace/LightX2V +ENV LD_LIBRARY_PATH=/usr/local/neuware/lib64:${LD_LIBRARY_PATH} + +# Install deps +RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && \ + pip install --no-cache-dir \ + ftfy \ + imageio \ + imageio-ffmpeg \ + loguru \ + aiohttp \ + gguf \ + diffusers \ + peft==0.17.0 \ + transformers==4.57.1 && + +# Copy files +COPY app app +COPY assets assets +COPY configs configs +COPY lightx2v lightx2v +COPY lightx2v_kernel lightx2v_kernel +COPY lightx2v_platform lightx2v_platform +COPY scripts scripts +COPY test_cases test_cases +COPY tools tools diff --git a/dockerfiles/Dockerfile_cu124 b/dockerfiles/Dockerfile_cu124 new file mode 100644 index 0000000..ada01a3 --- /dev/null +++ b/dockerfiles/Dockerfile_cu124 @@ -0,0 +1,76 @@ +FROM pytorch/pytorch:2.6.0-cuda12.4-cudnn9-devel AS base + +WORKDIR /app + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH + +RUN apt-get update && apt-get install -y vim tmux zip unzip wget git git-lfs build-essential libibverbs-dev ca-certificates \ + curl iproute2 libsm6 libxext6 kmod ccache libnuma-dev libssl-dev flex bison libgtk-3-dev libpango1.0-dev \ + libsoup2.4-dev libnice-dev libopus-dev libvpx-dev libx264-dev libsrtp2-dev libglib2.0-dev libdrm-dev\ + && apt-get clean && rm -rf /var/lib/apt/lists/* && git lfs install + +RUN pip install --no-cache-dir packaging ninja cmake scikit-build-core uv meson ruff pre-commit fastapi uvicorn requests -U + +RUN git clone https://github.com/vllm-project/vllm.git -b v0.10.0 && cd vllm \ + && python use_existing_torch.py && pip install -r requirements/build.txt \ + && pip install --no-cache-dir --no-build-isolation -v -e . + +RUN git clone https://github.com/sgl-project/sglang.git -b v0.4.10 && cd sglang/sgl-kernel \ + && make build && make clean + +RUN pip install --no-cache-dir diffusers transformers tokenizers accelerate safetensors opencv-python numpy imageio \ + imageio-ffmpeg einops loguru qtorch ftfy av decord + +RUN conda install conda-forge::ffmpeg=8.0.0 -y && ln -s /opt/conda/bin/ffmpeg /usr/bin/ffmpeg && conda clean -all -y + +RUN git clone https://github.com/Dao-AILab/flash-attention.git -b v2.8.3 --recursive + +RUN cd flash-attention && python setup.py install && rm -rf build + +RUN cd flash-attention/hopper && python setup.py install && rm -rf build + +RUN git clone https://github.com/ModelTC/SageAttention.git + +RUN cd SageAttention && CUDA_ARCHITECTURES="8.0,8.6,8.9,9.0" EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" MAX_JOBS=32 pip install --no-cache-dir -v -e . + +RUN git clone https://github.com/KONAKONA666/q8_kernels.git + +RUN cd q8_kernels && git submodule init && git submodule update && python setup.py install && rm -rf build + +# cloud deploy +RUN pip install --no-cache-dir aio-pika asyncpg>=0.27.0 aioboto3>=12.0.0 PyJWT alibabacloud_dypnsapi20170525==1.2.2 redis==6.4.0 tos + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable +ENV PATH=/root/.cargo/bin:$PATH + +RUN cd /opt \ + && wget https://mirrors.tuna.tsinghua.edu.cn/gnu//libiconv/libiconv-1.15.tar.gz \ + && tar zxvf libiconv-1.15.tar.gz \ + && cd libiconv-1.15 \ + && ./configure \ + && make \ + && make install \ + && rm -rf /opt/libiconv-1.15 + +RUN cd /opt \ + && git clone https://github.com/GStreamer/gstreamer.git -b 1.24.12 --depth 1 \ + && cd gstreamer \ + && meson setup builddir \ + && meson compile -C builddir \ + && meson install -C builddir \ + && ldconfig \ + && rm -rf /opt/gstreamer + +RUN cd /opt \ + && git clone https://github.com/GStreamer/gst-plugins-rs.git -b gstreamer-1.24.12 --depth 1 \ + && cd gst-plugins-rs \ + && cargo build --package gst-plugin-webrtchttp --release \ + && install -m 644 target/release/libgstwebrtchttp.so $(pkg-config --variable=pluginsdir gstreamer-1.0)/ \ + && rm -rf /opt/gst-plugins-rs + +RUN ldconfig + +WORKDIR /workspace diff --git a/dockerfiles/Dockerfile_deploy b/dockerfiles/Dockerfile_deploy new file mode 100644 index 0000000..ee4b1fa --- /dev/null +++ b/dockerfiles/Dockerfile_deploy @@ -0,0 +1,32 @@ +FROM node:alpine3.21 AS frontend_builder +COPY lightx2v /opt/lightx2v + +RUN cd /opt/lightx2v/deploy/server/frontend \ + && npm install \ + && npm run build + +FROM lightx2v/lightx2v:25111101-cu128 AS base + +RUN mkdir /workspace/LightX2V +WORKDIR /workspace/LightX2V +ENV PYTHONPATH=/workspace/LightX2V + +# for multi-person & animate +RUN pip install ultralytics moviepy pydub pyannote.audio onnxruntime decord peft onnxruntime pandas matplotlib loguru sentencepiece + +RUN export COMMIT=0e78a118995e66bb27d78518c4bd9a3e95b4e266 \ + && export TORCH_CUDA_ARCH_LIST="9.0" \ + && git clone --depth 1 https://github.com/facebookresearch/sam2.git \ + && cd sam2 \ + && git fetch --depth 1 origin $COMMIT \ + && git checkout $COMMIT \ + && python setup.py install + +COPY tools tools +COPY assets assets +COPY configs configs +COPY lightx2v lightx2v +COPY lightx2v_kernel lightx2v_kernel +COPY lightx2v_platform lightx2v_platform + +COPY --from=frontend_builder /opt/lightx2v/deploy/server/frontend/dist lightx2v/deploy/server/frontend/dist diff --git a/docs/EN/.readthedocs.yaml b/docs/EN/.readthedocs.yaml new file mode 100644 index 0000000..dda16a6 --- /dev/null +++ b/docs/EN/.readthedocs.yaml @@ -0,0 +1,17 @@ +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-20.04 + tools: + python: "3.10" + +formats: + - epub + +sphinx: + configuration: docs/EN/source/conf.py + +python: + install: + - requirements: requirements-docs.txt diff --git a/docs/EN/Makefile b/docs/EN/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/EN/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/EN/make.bat b/docs/EN/make.bat new file mode 100644 index 0000000..dc1312a --- /dev/null +++ b/docs/EN/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/EN/source/conf.py b/docs/EN/source/conf.py new file mode 100644 index 0000000..25f127e --- /dev/null +++ b/docs/EN/source/conf.py @@ -0,0 +1,128 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. + +import logging +import os +import sys +from typing import List + +import sphinxcontrib.redoc +from sphinx.ext import autodoc + +logger = logging.getLogger(__name__) +sys.path.append(os.path.abspath("../..")) + +# -- Project information ----------------------------------------------------- + +project = "Lightx2v" +copyright = "2025, Lightx2v Team" +author = "the Lightx2v Team" + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.napoleon", + "sphinx.ext.viewcode", + "sphinx.ext.intersphinx", + "sphinx_copybutton", + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.mathjax", + "myst_parser", + "sphinxarg.ext", + "sphinxcontrib.redoc", + "sphinxcontrib.openapi", +] + +myst_enable_extensions = [ + "dollarmath", + "amsmath", +] + +html_static_path = ["_static"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns: List[str] = ["**/*.template.rst"] + +# Exclude the prompt "$" when copying code +copybutton_prompt_text = r"\$ " +copybutton_prompt_is_regexp = True + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_title = project +html_theme = "sphinx_book_theme" +# html_theme = 'sphinx_rtd_theme' +html_logo = "../../../assets/img_lightx2v.png" +html_theme_options = { + "path_to_docs": "docs/EN/source", + "repository_url": "https://github.com/ModelTC/lightx2v", + "use_repository_button": True, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['_static'] + + +# Generate additional rst documentation here. +def setup(app): + # from docs.source.generate_examples import generate_examples + # generate_examples() + pass + + +# Mock out external dependencies here. +autodoc_mock_imports = [ + "cpuinfo", + "torch", + "transformers", + "psutil", + "prometheus_client", + "sentencepiece", + "lightllmnumpy", + "tqdm", + "tensorizer", +] + +for mock_target in autodoc_mock_imports: + if mock_target in sys.modules: + logger.info( + "Potentially problematic mock target (%s) found; autodoc_mock_imports cannot mock modules that have already been loaded into sys.modules when the sphinx build starts.", + mock_target, + ) + + +class MockedClassDocumenter(autodoc.ClassDocumenter): + """Remove note about base class when a class is derived from object.""" + + def add_line(self, line: str, source: str, *lineno: int) -> None: + if line == " Bases: :py:class:`object`": + return + super().add_line(line, source, *lineno) + + +autodoc.ClassDocumenter = MockedClassDocumenter + +navigation_with_keys = False diff --git a/docs/EN/source/deploy_guides/deploy_comfyui.md b/docs/EN/source/deploy_guides/deploy_comfyui.md new file mode 100644 index 0000000..afde7bd --- /dev/null +++ b/docs/EN/source/deploy_guides/deploy_comfyui.md @@ -0,0 +1,25 @@ +# ComfyUI Deployment + +## ComfyUI-Lightx2vWrapper + +The official ComfyUI integration nodes for LightX2V are now available in a dedicated repository, providing a complete modular configuration system and optimization features. + +### Project Repository + +- GitHub: [https://github.com/ModelTC/ComfyUI-Lightx2vWrapper](https://github.com/ModelTC/ComfyUI-Lightx2vWrapper) + +### Key Features + +- Modular Configuration System: Separate nodes for each aspect of video generation +- Support for both Text-to-Video (T2V) and Image-to-Video (I2V) generation modes +- Advanced Optimizations: + - TeaCache acceleration (up to 3x speedup) + - Quantization support (int8, fp8) + - Memory optimization with CPU offloading + - Lightweight VAE options +- LoRA Support: Chain multiple LoRA models for customization +- Multiple Model Support: wan2.1, hunyuan architectures + +### Installation and Usage + +Please visit the GitHub repository above for detailed installation instructions, usage tutorials, and example workflows. diff --git a/docs/EN/source/deploy_guides/deploy_gradio.md b/docs/EN/source/deploy_guides/deploy_gradio.md new file mode 100644 index 0000000..5be510f --- /dev/null +++ b/docs/EN/source/deploy_guides/deploy_gradio.md @@ -0,0 +1,240 @@ +# Gradio Deployment Guide + +## 📖 Overview + +Lightx2v is a lightweight video inference and generation engine that provides a web interface based on Gradio, supporting both Image-to-Video and Text-to-Video generation modes. + +For Windows systems, we provide a convenient one-click deployment solution with automatic environment configuration and intelligent parameter optimization. Please refer to the [One-Click Gradio Startup (Recommended)](./deploy_local_windows.md/#one-click-gradio-startup-recommended) section for detailed instructions. + +![Gradio English Interface](../../../../assets/figs/portabl_windows/pic_gradio_en.png) + +## 📁 File Structure + +``` +LightX2V/app/ +├── gradio_demo.py # English interface demo +├── gradio_demo_zh.py # Chinese interface demo +├── run_gradio.sh # Startup script +├── README.md # Documentation +├── outputs/ # Generated video save directory +└── inference_logs.log # Inference logs +``` + +This project contains two main demo files: +- `gradio_demo.py` - English interface version +- `gradio_demo_zh.py` - Chinese interface version + +## 🚀 Quick Start + +### Environment Requirements + +Follow the [Quick Start Guide](../getting_started/quickstart.md) to install the environment + +#### Recommended Optimization Library Configuration + +- ✅ [Flash attention](https://github.com/Dao-AILab/flash-attention) +- ✅ [Sage attention](https://github.com/thu-ml/SageAttention) +- ✅ [vllm-kernel](https://github.com/vllm-project/vllm) +- ✅ [sglang-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel) +- ✅ [q8-kernel](https://github.com/KONAKONA666/q8_kernels) (only supports ADA architecture GPUs) + +Install according to the project homepage tutorials for each operator as needed. + +### 📥 Model Download + +Refer to the [Model Structure Documentation](../getting_started/model_structure.md) to download complete models (including quantized and non-quantized versions) or download only quantized/non-quantized versions. + +#### wan2.1 Model Directory Structure + +``` +models/ +├── wan2.1_i2v_720p_lightx2v_4step.safetensors # Original precision +├── wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors # FP8 quantization +├── wan2.1_i2v_720p_int8_lightx2v_4step.safetensors # INT8 quantization +├── wan2.1_i2v_720p_int8_lightx2v_4step_split # INT8 quantization block storage directory +├── wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step_split # FP8 quantization block storage directory +├── Other weights (e.g., t2v) +├── t5/clip/xlm-roberta-large/google # text and image encoder +├── vae/lightvae/lighttae # vae +└── config.json # Model configuration file +``` + +#### wan2.2 Model Directory Structure + +``` +models/ +├── wan2.2_i2v_A14b_high_noise_lightx2v_4step_1030.safetensors # high noise original precision +├── wan2.2_i2v_A14b_high_noise_fp8_e4m3_lightx2v_4step_1030.safetensors # high noise FP8 quantization +├── wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step_1030.safetensors # high noise INT8 quantization +├── wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step_1030_split # high noise INT8 quantization block storage directory +├── wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors # low noise original precision +├── wan2.2_i2v_A14b_low_noise_fp8_e4m3_lightx2v_4step.safetensors # low noise FP8 quantization +├── wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors # low noise INT8 quantization +├── wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step_split # low noise INT8 quantization block storage directory +├── t5/clip/xlm-roberta-large/google # text and image encoder +├── vae/lightvae/lighttae # vae +└── config.json # Model configuration file +``` + +**📝 Download Instructions**: + +- Model weights can be downloaded from HuggingFace: + - [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) + - [Wan2.2-Distill-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) +- Text and Image Encoders can be downloaded from [Encoders](https://huggingface.co/lightx2v/Encoders) +- VAE can be downloaded from [Autoencoders](https://huggingface.co/lightx2v/Autoencoders) +- For `xxx_split` directories (e.g., `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step_split`), which store multiple safetensors by block, suitable for devices with insufficient memory. For example, devices with 16GB or less memory should download according to their own situation. + +### Startup Methods + +#### Method 1: Using Startup Script (Recommended) + +**Linux Environment:** +```bash +# 1. Edit the startup script to configure relevant paths +cd app/ +vim run_gradio.sh + +# Configuration items that need to be modified: +# - lightx2v_path: Lightx2v project root directory path +# - model_path: Model root directory path (contains all model files) + +# 💾 Important note: Recommend pointing model paths to SSD storage locations +# Example: /mnt/ssd/models/ or /data/ssd/models/ + +# 2. Run the startup script +bash run_gradio.sh + +# 3. Or start with parameters +bash run_gradio.sh --lang en --port 8032 +bash run_gradio.sh --lang zh --port 7862 +``` + +**Windows Environment:** +```cmd +# 1. Edit the startup script to configure relevant paths +cd app\ +notepad run_gradio_win.bat + +# Configuration items that need to be modified: +# - lightx2v_path: Lightx2v project root directory path +# - model_path: Model root directory path (contains all model files) + +# 💾 Important note: Recommend pointing model paths to SSD storage locations +# Example: D:\models\ or E:\models\ + +# 2. Run the startup script +run_gradio_win.bat + +# 3. Or start with parameters +run_gradio_win.bat --lang en --port 8032 +run_gradio_win.bat --lang zh --port 7862 +``` + +#### Method 2: Direct Command Line Startup + +```bash +pip install -v git+https://github.com/ModelTC/LightX2V.git +``` + +**Linux Environment:** + +**English Interface Version:** +```bash +python gradio_demo.py \ + --model_path /path/to/models \ + --server_name 0.0.0.0 \ + --server_port 7862 +``` + +**Chinese Interface Version:** +```bash +python gradio_demo_zh.py \ + --model_path /path/to/models \ + --server_name 0.0.0.0 \ + --server_port 7862 +``` + +**Windows Environment:** + +**English Interface Version:** +```cmd +python gradio_demo.py ^ + --model_path D:\models ^ + --server_name 127.0.0.1 ^ + --server_port 7862 +``` + +**Chinese Interface Version:** +```cmd +python gradio_demo_zh.py ^ + --model_path D:\models ^ + --server_name 127.0.0.1 ^ + --server_port 7862 +``` + +**💡 Tip**: Model type (wan2.1/wan2.2), task type (i2v/t2v), and specific model file selection are all configured in the Web interface. + +## 📋 Command Line Parameters + +| Parameter | Type | Required | Default | Description | +|-----------|------|----------|---------|-------------| +| `--model_path` | str | ✅ | - | Model root directory path (directory containing all model files) | +| `--server_port` | int | ❌ | 7862 | Server port | +| `--server_name` | str | ❌ | 0.0.0.0 | Server IP address | +| `--output_dir` | str | ❌ | ./outputs | Output video save directory | + +**💡 Note**: Model type (wan2.1/wan2.2), task type (i2v/t2v), and specific model file selection are all configured in the Web interface. + +## 🎯 Features + +### Model Configuration + +- **Model Type**: Supports wan2.1 and wan2.2 model architectures +- **Task Type**: Supports Image-to-Video (i2v) and Text-to-Video (t2v) generation modes +- **Model Selection**: Frontend automatically identifies and filters available model files, supports automatic quantization precision detection +- **Encoder Configuration**: Supports selection of T5 text encoder, CLIP image encoder, and VAE decoder +- **Operator Selection**: Supports multiple attention operators and quantization matrix multiplication operators, system automatically sorts by installation status + +### Input Parameters + +- **Prompt**: Describe the expected video content +- **Negative Prompt**: Specify elements you don't want to appear +- **Input Image**: Upload input image required in i2v mode +- **Resolution**: Supports multiple preset resolutions (480p/540p/720p) +- **Random Seed**: Controls the randomness of generation results +- **Inference Steps**: Affects the balance between generation quality and speed (defaults to 4 steps for distilled models) + +### Video Parameters + +- **FPS**: Frames per second +- **Total Frames**: Video length +- **CFG Scale Factor**: Controls prompt influence strength (1-10, defaults to 1 for distilled models) +- **Distribution Shift**: Controls generation style deviation degree (0-10) + +## 🔧 Auto-Configuration Feature + +The system automatically configures optimal inference options based on your hardware configuration (GPU VRAM and CPU memory) without manual adjustment. The best configuration is automatically applied on startup, including: + +- **GPU Memory Optimization**: Automatically enables CPU offloading, VAE tiling inference, etc. based on VRAM size +- **CPU Memory Optimization**: Automatically enables lazy loading, module unloading, etc. based on system memory +- **Operator Selection**: Automatically selects the best installed operators (sorted by priority) +- **Quantization Configuration**: Automatically detects and applies quantization precision based on model file names + + +### Log Viewing + +```bash +# View inference logs +tail -f inference_logs.log + +# View GPU usage +nvidia-smi + +# View system resources +htop +``` + +Welcome to submit Issues and Pull Requests to improve this project! + +**Note**: Please comply with relevant laws and regulations when using videos generated by this tool, and do not use them for illegal purposes. diff --git a/docs/EN/source/deploy_guides/deploy_local_windows.md b/docs/EN/source/deploy_guides/deploy_local_windows.md new file mode 100644 index 0000000..e675f9c --- /dev/null +++ b/docs/EN/source/deploy_guides/deploy_local_windows.md @@ -0,0 +1,127 @@ +# Windows Local Deployment Guide + +## 📖 Overview + +This document provides detailed instructions for deploying LightX2V locally on Windows environments, including batch file inference, Gradio Web interface inference, and other usage methods. + +## 🚀 Quick Start + +### Environment Requirements + +#### Hardware Requirements +- **GPU**: NVIDIA GPU, recommended 8GB+ VRAM +- **Memory**: Recommended 16GB+ RAM +- **Storage**: Strongly recommended to use SSD solid-state drives, mechanical hard drives will cause slow model loading + + +## 🎯 Usage Methods + +### Method 1: Using Batch File Inference + +Refer to [Quick Start Guide](../getting_started/quickstart.md) to install environment, and use [batch files](https://github.com/ModelTC/LightX2V/tree/main/scripts/win) to run. + +### Method 2: Using Gradio Web Interface Inference + +#### Manual Gradio Configuration + +Refer to [Quick Start Guide](../getting_started/quickstart.md) to install environment, refer to [Gradio Deployment Guide](./deploy_gradio.md) + +#### One-Click Gradio Startup (Recommended) + +**📦 Download Software Package** +- [Quark Cloud](https://pan.quark.cn/s/8af1162d7a15) + +**📁 Directory Structure** +After extraction, ensure the directory structure is as follows: + +``` +├── env/ # LightX2V environment directory +├── LightX2V/ # LightX2V project directory +├── start_lightx2v.bat # One-click startup script +├── lightx2v_config.txt # Configuration file +├── LightX2V使用说明.txt # LightX2V usage instructions +├── outputs/ # Generated video save directory +└── models/ # Model storage directory +``` + +**📥 Model Download**: + +Refer to [Model Structure Documentation](../getting_started/model_structure.md) or [Gradio Deployment Guide](./deploy_gradio.md) to download complete models (including quantized and non-quantized versions) or download only quantized/non-quantized versions. + + +**📋 Configuration Parameters** + +Edit the `lightx2v_config.txt` file and modify the following parameters as needed: + +```ini + +# Interface language (zh: Chinese, en: English) +lang=en + +# Server port +port=8032 + +# GPU device ID (0, 1, 2...) +gpu=0 + +# Model path +model_path=models/ +``` + +**🚀 Start Service** + +Double-click to run the `start_lightx2v.bat` file, the script will: +1. Automatically read configuration file +2. Verify model paths and file integrity +3. Start Gradio Web interface +4. Automatically open browser to access service + + +![Gradio English Interface](../../../../assets/figs/portabl_windows/pic_gradio_en.png) + +**⚠️ Important Notes**: +- **Display Issues**: If the webpage opens blank or displays abnormally, please run `pip install --upgrade gradio` to upgrade the Gradio version. + +### Method 3: Using ComfyUI Inference + +This guide will instruct you on how to download and use the portable version of the Lightx2v-ComfyUI environment, so you can avoid manual environment configuration steps. This is suitable for users who want to quickly start experiencing accelerated video generation with Lightx2v on Windows systems. + +#### Download the Windows Portable Environment: + +- [Baidu Cloud Download](https://pan.baidu.com/s/1FVlicTXjmXJA1tAVvNCrBw?pwd=wfid), extraction code: wfid + +The portable environment already packages all Python runtime dependencies, including the code and dependencies for ComfyUI and LightX2V. After downloading, simply extract to use. + +After extraction, the directory structure is as follows: + +```shell +lightx2v_env +├──📂 ComfyUI # ComfyUI code +├──📂 portable_python312_embed # Standalone Python environment +└── run_nvidia_gpu.bat # Windows startup script (double-click to start) +``` + +#### Start ComfyUI + +Directly double-click the run_nvidia_gpu.bat file. The system will open a Command Prompt window and run the program. The first startup may take a while, please be patient. After startup is complete, the browser will automatically open and display the ComfyUI frontend interface. + +![i2v example workflow](../../../../assets/figs/portabl_windows/pic1.png) + +The plugin used by LightX2V-ComfyUI is [ComfyUI-Lightx2vWrapper](https://github.com/ModelTC/ComfyUI-Lightx2vWrapper). Example workflows can be obtained from this project. + +#### Tested Graphics Cards (offload mode) + +- Tested model: `Wan2.1-I2V-14B-480P` + +| GPU Model | Task Type | VRAM Capacity | Actual Max VRAM Usage | Actual Max RAM Usage | +|:-----------|:------------|:--------------|:---------------------|:---------------------| +| 3090Ti | I2V | 24G | 6.1G | 7.1G | +| 3080Ti | I2V | 12G | 6.1G | 7.1G | +| 3060Ti | I2V | 8G | 6.1G | 7.1G | +| 4070Ti Super | I2V | 16G | 6.1G | 7.1G | +| 4070 | I2V | 12G | 6.1G | 7.1G | +| 4060 | I2V | 8G | 6.1G | 7.1G | + +#### Environment Packaging and Usage Reference +- [ComfyUI](https://github.com/comfyanonymous/ComfyUI) +- [Portable-Windows-ComfyUI-Docs](https://docs.comfy.org/zh-CN/installation/comfyui_portable_windows#portable-%E5%8F%8A%E8%87%AA%E9%83%A8%E7%BD%B2) diff --git a/docs/EN/source/deploy_guides/deploy_service.md b/docs/EN/source/deploy_guides/deploy_service.md new file mode 100644 index 0000000..b34b349 --- /dev/null +++ b/docs/EN/source/deploy_guides/deploy_service.md @@ -0,0 +1,88 @@ +# Service Deployment + +lightx2v provides asynchronous service functionality. The code entry point is [here](https://github.com/ModelTC/lightx2v/blob/main/lightx2v/api_server.py) + +### Start the Service + +```shell +# Modify the paths in the script +bash scripts/start_server.sh +``` + +The `--port 8000` option means the service will bind to port `8000` on the local machine. You can change this as needed. + +### Client Sends Request + +```shell +python scripts/post.py +``` + +The service endpoint is: `/v1/tasks/` + +The `message` parameter in `scripts/post.py` is as follows: + +```python +message = { + "prompt": "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage.", + "negative_prompt": "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + "image_path": "", +} +``` + +1. `prompt`, `negative_prompt`, and `image_path` are basic inputs for video generation. `image_path` can be an empty string, indicating no image input is needed. + + +### Client Checks Server Status + +```shell +python scripts/check_status.py +``` + +The service endpoints include: + +1. `/v1/service/status` is used to check the status of the service. It returns whether the service is `busy` or `idle`. The service only accepts new requests when it is `idle`. + +2. `/v1/tasks/` is used to get all tasks received and completed by the server. + +3. `/v1/tasks/{task_id}/status` is used to get the status of a specified `task_id`. It returns whether the task is `processing` or `completed`. + +### Client Stops the Current Task on the Server at Any Time + +```shell +python scripts/stop_running_task.py +``` + +The service endpoint is: `/v1/tasks/running` + +After terminating the task, the server will not exit but will return to waiting for new requests. + +### Starting Multiple Services on a Single Node + +On a single node, you can start multiple services using `scripts/start_server.sh` (Note that the port numbers under the same IP must be different for each service), or you can start multiple services at once using `scripts/start_multi_servers.sh`: + +```shell +num_gpus=8 bash scripts/start_multi_servers.sh +``` + +Where `num_gpus` indicates the number of services to start; the services will run on consecutive ports starting from `--start_port`. + +### Scheduling Between Multiple Services + +```shell +python scripts/post_multi_servers.py +``` + +`post_multi_servers.py` will schedule multiple client requests based on the idle status of the services. + +### API Endpoints Summary + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/v1/tasks/` | POST | Create video generation task | +| `/v1/tasks/form` | POST | Create video generation task via form | +| `/v1/tasks/` | GET | Get all task list | +| `/v1/tasks/{task_id}/status` | GET | Get status of specified task | +| `/v1/tasks/{task_id}/result` | GET | Get result video file of specified task | +| `/v1/tasks/running` | DELETE | Stop currently running task | +| `/v1/files/download/{file_path}` | GET | Download file | +| `/v1/service/status` | GET | Get service status | diff --git a/docs/EN/source/deploy_guides/for_low_latency.md b/docs/EN/source/deploy_guides/for_low_latency.md new file mode 100644 index 0000000..5e8df8a --- /dev/null +++ b/docs/EN/source/deploy_guides/for_low_latency.md @@ -0,0 +1,41 @@ +# Deployment for Low Latency Scenarios + +In low latency scenarios, we pursue faster speed, ignoring issues such as video memory and RAM overhead. We provide two solutions: + +## 💡 Solution 1: Inference with Step Distillation Model + +This solution can refer to the [Step Distillation Documentation](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/step_distill.html) + +🧠 **Step Distillation** is a very direct acceleration inference solution for video generation models. By distilling from 50 steps to 4 steps, the time consumption will be reduced to 4/50 of the original. At the same time, under this solution, it can still be combined with the following solutions: +1. [Efficient Attention Mechanism Solution](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/attention.html) +2. [Model Quantization](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/quantization.html) + +## 💡 Solution 2: Inference with Non-Step Distillation Model + +Step distillation requires relatively large training resources, and the model after step distillation may have degraded video dynamic range. + +For the original model without step distillation, we can use the following solutions or a combination of multiple solutions for acceleration: + +1. [Parallel Inference](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/parallel.html) for multi-GPU parallel acceleration. +2. [Feature Caching](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/cache.html) to reduce the actual inference steps. +3. [Efficient Attention Mechanism Solution](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/attention.html) to accelerate Attention inference. +4. [Model Quantization](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/quantization.html) to accelerate Linear layer inference. +5. [Variable Resolution Inference](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/changing_resolution.html) to reduce the resolution of intermediate inference steps. + +## 💡 Using Tiny VAE + +In some cases, the VAE component can be time-consuming. You can use a lightweight VAE for acceleration, which can also reduce some GPU memory usage. + +```python +{ + "use_tae": true, + "tae_path": "/path to taew2_1.pth" +} +``` +The taew2_1.pth weights can be downloaded from [here](https://github.com/madebyollin/taehv/raw/refs/heads/main/taew2_1.pth) + +## ⚠️ Note + +Some acceleration solutions currently cannot be used together, and we are working to resolve this issue. + +If you have any questions, feel free to report bugs or request features in [🐛 GitHub Issues](https://github.com/ModelTC/lightx2v/issues) diff --git a/docs/EN/source/deploy_guides/for_low_resource.md b/docs/EN/source/deploy_guides/for_low_resource.md new file mode 100644 index 0000000..ad11c74 --- /dev/null +++ b/docs/EN/source/deploy_guides/for_low_resource.md @@ -0,0 +1,219 @@ +# Lightx2v Low-Resource Deployment Guide + +## 📋 Overview + +This guide is specifically designed for hardware resource-constrained environments, particularly configurations with **8GB VRAM + 16/32GB RAM**, providing detailed instructions on how to successfully run Lightx2v 14B models for 480p and 720p video generation. + +Lightx2v is a powerful video generation model, but it requires careful optimization to run smoothly in resource-constrained environments. This guide provides a complete solution from hardware selection to software configuration, ensuring you can achieve the best video generation experience under limited hardware conditions. + +## 🎯 Target Hardware Configuration + +### Recommended Hardware Specifications + +**GPU Requirements**: +- **VRAM**: 8GB (RTX 3060/3070/4060/4060Ti, etc.) +- **Architecture**: NVIDIA graphics cards with CUDA support + +**System Memory**: +- **Minimum**: 16GB DDR4 +- **Recommended**: 32GB DDR4/DDR5 +- **Memory Speed**: 3200MHz or higher recommended + +**Storage Requirements**: +- **Type**: NVMe SSD strongly recommended +- **Capacity**: At least 50GB available space +- **Speed**: Read speed of 3000MB/s or higher recommended + +**CPU Requirements**: +- **Cores**: 8 cores or more recommended +- **Frequency**: 3.0GHz or higher recommended +- **Architecture**: Support for AVX2 instruction set + +## ⚙️ Core Optimization Strategies + +### 1. Environment Optimization + +Before running Lightx2v, it's recommended to set the following environment variables to optimize performance: + +```bash +# CUDA memory allocation optimization +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +# Enable CUDA Graph mode to improve inference performance +export ENABLE_GRAPH_MODE=true + +# Use BF16 precision for inference to reduce VRAM usage (default FP32 precision) +export DTYPE=BF16 +``` + +**Optimization Details**: +- `expandable_segments:True`: Allows dynamic expansion of CUDA memory segments, reducing memory fragmentation +- `ENABLE_GRAPH_MODE=true`: Enables CUDA Graph to reduce kernel launch overhead +- `DTYPE=BF16`: Uses BF16 precision to reduce VRAM usage while maintaining quality + +### 2. Quantization Strategy + +Quantization is a key optimization technique in low-resource environments, reducing memory usage by lowering model precision. + +#### Quantization Scheme Comparison + +**FP8 Quantization** (Recommended for RTX 40 series): +```python +# Suitable for GPUs supporting FP8, providing better precision +dit_quant_scheme = "fp8" # DIT model quantization +t5_quant_scheme = "fp8" # T5 text encoder quantization +clip_quant_scheme = "fp8" # CLIP visual encoder quantization +``` + +**INT8 Quantization** (Universal solution): +```python +# Suitable for all GPUs, minimal memory usage +dit_quant_scheme = "int8" # 8-bit integer quantization +t5_quant_scheme = "int8" # Text encoder quantization +clip_quant_scheme = "int8" # Visual encoder quantization +``` + +### 3. Efficient Operator Selection Guide + +Choosing the right operators can significantly improve inference speed and reduce memory usage. + +#### Attention Operator Selection + +**Recommended Priority**: +1. **[Sage Attention](https://github.com/thu-ml/SageAttention)** (Highest priority) + +2. **[Flash Attention](https://github.com/Dao-AILab/flash-attention)** (Universal solution) + +#### Matrix Multiplication Operator Selection + +**ADA Architecture GPUs** (RTX 40 series): + +Recommended priority: +1. **[q8-kernel](https://github.com/KONAKONA666/q8_kernels)** (Highest performance, ADA architecture only) +2. **[sglang-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel)** (Balanced solution) +3. **[vllm-kernel](https://github.com/vllm-project/vllm)** (Universal solution) + +**Other Architecture GPUs**: +1. **[sglang-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel)** (Recommended) +2. **[vllm-kernel](https://github.com/vllm-project/vllm)** (Alternative) + +### 4. Parameter Offloading Strategy + +Parameter offloading technology allows models to dynamically schedule parameters between CPU and disk, breaking through VRAM limitations. + +#### Three-Level Offloading Architecture + +```python +# Disk-CPU-GPU three-level offloading configuration +cpu_offload=True # Enable CPU offloading +t5_cpu_offload=True # Enable T5 encoder CPU offloading +offload_granularity=phase # DIT model fine-grained offloading +t5_offload_granularity=block # T5 encoder fine-grained offloading +lazy_load = True # Enable lazy loading mechanism +num_disk_workers = 2 # Disk I/O worker threads +``` + +#### Offloading Strategy Details + +**Lazy Loading Mechanism**: +- Model parameters are loaded from disk to CPU on demand +- Reduces runtime memory usage +- Supports large models running with limited memory + +**Disk Storage Optimization**: +- Use high-speed SSD to store model parameters +- Store model files grouped by blocks +- Refer to conversion script [documentation](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme.md), specify `--save_by_block` parameter during conversion + +### 5. VRAM Optimization Techniques + +VRAM optimization strategies for 720p video generation. + +#### CUDA Memory Management + +```python +# CUDA memory cleanup configuration +clean_cuda_cache = True # Timely cleanup of GPU cache +rotary_chunk = True # Rotary position encoding chunked computation +rotary_chunk_size = 100 # Chunk size, adjustable based on VRAM +``` + +#### Chunked Computation Strategy + +**Rotary Position Encoding Chunking**: +- Process long sequences in small chunks +- Reduce peak VRAM usage +- Maintain computational precision + +### 6. VAE Optimization + +VAE (Variational Autoencoder) is a key component in video generation, and optimizing VAE can significantly improve performance. + +#### VAE Chunked Inference + +```python +# VAE optimization configuration +use_tiling_vae = True # Enable VAE chunked inference +``` + +#### Lightweight VAE + +```python +# VAE optimization configuration +use_tae = True # Use lightweight VAE +tae_path = "/path to taew2_1.pth" +``` +You can download taew2_1.pth [here](https://github.com/madebyollin/taehv/blob/main/taew2_1.pth) + +**VAE Optimization Effects**: +- Standard VAE: Baseline performance, 100% quality retention +- Standard VAE chunked: Reduces VRAM usage, increases inference time, 100% quality retention +- Lightweight VAE: Extremely low VRAM usage, video quality loss + +### 7. Model Selection Strategy + +Choosing the right model version is crucial for low-resource environments. + +#### Recommended Model Comparison + +**Distilled Models** (Strongly recommended): +- ✅ **[Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v)** + +- ✅ **[Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v)** + +#### Performance Optimization Suggestions + +When using the above distilled models, you can further optimize performance: +- Disable CFG: `"enable_cfg": false` +- Reduce inference steps: `infer_step: 4` +- Reference configuration files: [config](https://github.com/ModelTC/LightX2V/tree/main/configs/distill) + +## 🚀 Complete Configuration Examples + +### Pre-configured Templates + +- **[14B Model 480p Video Generation Configuration](https://github.com/ModelTC/lightx2v/tree/main/configs/offload/disk/wan_i2v_phase_lazy_load_480p.json)** + +- **[14B Model 720p Video Generation Configuration](https://github.com/ModelTC/lightx2v/tree/main/configs/offload/disk/wan_i2v_phase_lazy_load_720p.json)** + +- **[1.3B Model 720p Video Generation Configuration](https://github.com/ModelTC/LightX2V/tree/main/configs/offload/block/wan_t2v_1_3b.json)** + - The inference bottleneck for 1.3B models is the T5 encoder, so the configuration file specifically optimizes for T5 + +**[Launch Script](https://github.com/ModelTC/LightX2V/tree/main/scripts/wan/run_wan_i2v_lazy_load.sh)** + +## 📚 Reference Resources + +- [Parameter Offloading Mechanism Documentation](../method_tutorials/offload.md) - In-depth understanding of offloading technology principles +- [Quantization Technology Guide](../method_tutorials/quantization.md) - Detailed explanation of quantization technology +- [Gradio Deployment Guide](deploy_gradio.md) - Detailed Gradio deployment instructions + +## ⚠️ Important Notes + +1. **Hardware Requirements**: Ensure your hardware meets minimum configuration requirements +2. **Driver Version**: Recommend using the latest NVIDIA drivers (535+) +3. **CUDA Version**: Ensure CUDA version is compatible with PyTorch (recommend CUDA 11.8+) +4. **Storage Space**: Reserve sufficient disk space for model caching (at least 50GB) +5. **Network Environment**: Stable network connection required for initial model download +6. **Environment Variables**: Be sure to set the recommended environment variables to optimize performance + +**Technical Support**: If you encounter issues, please submit an Issue to the project repository. diff --git a/docs/EN/source/deploy_guides/lora_deploy.md b/docs/EN/source/deploy_guides/lora_deploy.md new file mode 100644 index 0000000..769d1d5 --- /dev/null +++ b/docs/EN/source/deploy_guides/lora_deploy.md @@ -0,0 +1,214 @@ +# LoRA Model Deployment and Related Tools + +LoRA (Low-Rank Adaptation) is an efficient model fine-tuning technique that significantly reduces the number of trainable parameters through low-rank matrix decomposition. LightX2V fully supports LoRA technology, including LoRA inference, LoRA extraction, and LoRA merging functions. + +## 🎯 LoRA Technical Features + +- **Efficient Fine-tuning**: Dramatically reduces training parameters through low-rank adaptation +- **Flexible Deployment**: Supports dynamic loading and removal of LoRA weights +- **Multiple Formats**: Supports various LoRA weight formats and naming conventions +- **Comprehensive Tools**: Provides complete LoRA extraction and merging toolchain + +## 📜 LoRA Inference Deployment + +### Configuration File Method + +Specify LoRA path in configuration file: + +```json +{ + "lora_configs": [ + { + "path": "/path/to/your/lora.safetensors", + "strength": 1.0 + } + ] +} +``` + +**Configuration Parameter Description:** + +- `lora_path`: LoRA weight file path list, supports loading multiple LoRAs simultaneously +- `strength_model`: LoRA strength coefficient (alpha), controls LoRA's influence on the original model + +### Command Line Method + +Specify LoRA path directly in command line (supports loading single LoRA only): + +```bash +python -m lightx2v.infer \ + --model_cls wan2.1 \ + --task t2v \ + --model_path /path/to/model \ + --config_json /path/to/config.json \ + --lora_path /path/to/your/lora.safetensors \ + --lora_strength 0.8 \ + --prompt "Your prompt here" +``` + +### Multiple LoRAs Configuration + +To use multiple LoRAs with different strengths, specify them in the config JSON file: + +```json +{ + "lora_configs": [ + { + "path": "/path/to/first_lora.safetensors", + "strength": 0.8 + }, + { + "path": "/path/to/second_lora.safetensors", + "strength": 0.5 + } + ] +} +``` + +### Supported LoRA Formats + +LightX2V supports multiple LoRA weight naming conventions: + +| Format Type | Weight Naming | Description | +|-------------|---------------|-------------| +| **Standard LoRA** | `lora_A.weight`, `lora_B.weight` | Standard LoRA matrix decomposition format | +| **Down/Up Format** | `lora_down.weight`, `lora_up.weight` | Another common naming convention | +| **Diff Format** | `diff` | `weight` difference values | +| **Bias Diff** | `diff_b` | `bias` weight difference values | +| **Modulation Diff** | `diff_m` | `modulation` weight difference values | + +### Inference Script Examples + +**Step Distillation LoRA Inference:** + +```bash +# T2V LoRA Inference +bash scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh + +# I2V LoRA Inference +bash scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh +``` + +**Audio-Driven LoRA Inference:** + +```bash +bash scripts/wan/run_wan_i2v_audio.sh +``` + +### Using LoRA in API Service + +Specify through [config file](wan_t2v_distill_4step_cfg_lora.json), modify the startup command in [scripts/server/start_server.sh](https://github.com/ModelTC/lightx2v/blob/main/scripts/server/start_server.sh): + +```bash +python -m lightx2v.api_server \ + --model_cls wan2.1_distill \ + --task t2v \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg_lora.json \ + --port 8000 \ + --nproc_per_node 1 +``` + +## 🔧 LoRA Extraction Tool + +Use `tools/extract/lora_extractor.py` to extract LoRA weights from the difference between two models. + +### Basic Usage + +```bash +python tools/extract/lora_extractor.py \ + --source-model /path/to/base/model \ + --target-model /path/to/finetuned/model \ + --output /path/to/extracted/lora.safetensors \ + --rank 32 +``` + +### Parameter Description + +| Parameter | Type | Required | Default | Description | +|-----------|------|----------|---------|-------------| +| `--source-model` | str | ✅ | - | Base model path | +| `--target-model` | str | ✅ | - | Fine-tuned model path | +| `--output` | str | ✅ | - | Output LoRA file path | +| `--source-type` | str | ❌ | `safetensors` | Base model format (`safetensors`/`pytorch`) | +| `--target-type` | str | ❌ | `safetensors` | Fine-tuned model format (`safetensors`/`pytorch`) | +| `--output-format` | str | ❌ | `safetensors` | Output format (`safetensors`/`pytorch`) | +| `--rank` | int | ❌ | `32` | LoRA rank value | +| `--output-dtype` | str | ❌ | `bf16` | Output data type | +| `--diff-only` | bool | ❌ | `False` | Save weight differences only, without LoRA decomposition | + +### Advanced Usage Examples + +**Extract High-Rank LoRA:** + +```bash +python tools/extract/lora_extractor.py \ + --source-model /path/to/base/model \ + --target-model /path/to/finetuned/model \ + --output /path/to/high_rank_lora.safetensors \ + --rank 64 \ + --output-dtype fp16 +``` + +**Save Weight Differences Only:** + +```bash +python tools/extract/lora_extractor.py \ + --source-model /path/to/base/model \ + --target-model /path/to/finetuned/model \ + --output /path/to/weight_diff.safetensors \ + --diff-only +``` + +## 🔀 LoRA Merging Tool + +Use `tools/extract/lora_merger.py` to merge LoRA weights into the base model for subsequent quantization and other operations. + +### Basic Usage + +```bash +python tools/extract/lora_merger.py \ + --source-model /path/to/base/model \ + --lora-model /path/to/lora.safetensors \ + --output /path/to/merged/model.safetensors \ + --alpha 1.0 +``` + +### Parameter Description + +| Parameter | Type | Required | Default | Description | +|-----------|------|----------|---------|-------------| +| `--source-model` | str | ✅ | - | Base model path | +| `--lora-model` | str | ✅ | - | LoRA weights path | +| `--output` | str | ✅ | - | Output merged model path | +| `--source-type` | str | ❌ | `safetensors` | Base model format | +| `--lora-type` | str | ❌ | `safetensors` | LoRA weights format | +| `--output-format` | str | ❌ | `safetensors` | Output format | +| `--alpha` | float | ❌ | `1.0` | LoRA merge strength | +| `--output-dtype` | str | ❌ | `bf16` | Output data type | + +### Advanced Usage Examples + +**Partial Strength Merging:** + +```bash +python tools/extract/lora_merger.py \ + --source-model /path/to/base/model \ + --lora-model /path/to/lora.safetensors \ + --output /path/to/merged_model.safetensors \ + --alpha 0.7 \ + --output-dtype fp32 +``` + +**Multi-Format Support:** + +```bash +python tools/extract/lora_merger.py \ + --source-model /path/to/base/model.pt \ + --source-type pytorch \ + --lora-model /path/to/lora.safetensors \ + --lora-type safetensors \ + --output /path/to/merged_model.safetensors \ + --output-format safetensors \ + --alpha 1.0 +``` diff --git a/docs/EN/source/getting_started/benchmark.md b/docs/EN/source/getting_started/benchmark.md new file mode 100644 index 0000000..ecc8dc9 --- /dev/null +++ b/docs/EN/source/getting_started/benchmark.md @@ -0,0 +1,3 @@ +# Benchmark + +For a better display of video playback effects and detailed performance comparisons, you can get better presentation and corresponding documentation content on this [🔗 page](https://github.com/ModelTC/LightX2V/blob/main/docs/EN/source/getting_started/benchmark_source.md). diff --git a/docs/EN/source/getting_started/benchmark_source.md b/docs/EN/source/getting_started/benchmark_source.md new file mode 100644 index 0000000..35bafdf --- /dev/null +++ b/docs/EN/source/getting_started/benchmark_source.md @@ -0,0 +1,149 @@ +# 🚀 Benchmark + +> This document showcases the performance test results of LightX2V across different hardware environments, including detailed comparison data for H200 and RTX 4090 platforms. + +--- + +## 🖥️ H200 Environment (~140GB VRAM) + +### 📋 Software Environment Configuration + +| Component | Version | +|:----------|:--------| +| **Python** | 3.11 | +| **PyTorch** | 2.7.1+cu128 | +| **SageAttention** | 2.2.0 | +| **vLLM** | 0.9.2 | +| **sgl-kernel** | 0.1.8 | + +--- + +### 🎬 480P 5s Video Test + +**Test Configuration:** +- **Model**: [Wan2.1-I2V-14B-480P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v) +- **Parameters**: `infer_steps=40`, `seed=42`, `enable_cfg=True` + +#### 📊 Performance Comparison Table + +| Configuration | Inference Time(s) | GPU Memory(GB) | Speedup | Video Effect | +|:-------------|:-----------------:|:--------------:|:-------:|:------------:| +| **Wan2.1 Official** | 366 | 71 | 1.0x | | +| **FastVideo** | 292 | 26 | **1.25x** | | +| **LightX2V_1** | 250 | 53 | **1.46x** | | +| **LightX2V_2** | 216 | 50 | **1.70x** | | +| **LightX2V_3** | 191 | 35 | **1.92x** | | +| **LightX2V_3-Distill** | 14 | 35 | **🏆 20.85x** | | +| **LightX2V_4** | 107 | 35 | **3.41x** | | + +--- + +### 🎬 720P 5s Video Test + +**Test Configuration:** +- **Model**: [Wan2.1-I2V-14B-720P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v) +- **Parameters**: `infer_steps=40`, `seed=1234`, `enable_cfg=True` + +#### 📊 Performance Comparison Table + +| Configuration | Inference Time(s) | GPU Memory(GB) | Speedup | Video Effect | +|:-------------|:-----------------:|:--------------:|:-------:|:------------:| +| **Wan2.1 Official** | 974 | 81 | 1.0x | | +| **FastVideo** | 914 | 40 | **1.07x** | | +| **LightX2V_1** | 807 | 65 | **1.21x** | | +| **LightX2V_2** | 751 | 57 | **1.30x** | | +| **LightX2V_3** | 671 | 43 | **1.45x** | | +| **LightX2V_3-Distill** | 44 | 43 | **🏆 22.14x** | | +| **LightX2V_4** | 344 | 46 | **2.83x** | | + +--- + +## 🖥️ RTX 4090 Environment (~24GB VRAM) + +### 📋 Software Environment Configuration + +| Component | Version | +|:----------|:--------| +| **Python** | 3.9.16 | +| **PyTorch** | 2.5.1+cu124 | +| **SageAttention** | 2.1.0 | +| **vLLM** | 0.6.6 | +| **sgl-kernel** | 0.0.5 | +| **q8-kernels** | 0.0.0 | + +--- + +### 🎬 480P 5s Video Test + +**Test Configuration:** +- **Model**: [Wan2.1-I2V-14B-480P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v) +- **Parameters**: `infer_steps=40`, `seed=42`, `enable_cfg=True` + +#### 📊 Performance Comparison Table + +| Configuration | Inference Time(s) | GPU Memory(GB) | Speedup | Video Effect | +|:-------------|:-----------------:|:--------------:|:-------:|:------------:| +| **Wan2GP(profile=3)** | 779 | 20 | **1.0x** | | +| **LightX2V_5** | 738 | 16 | **1.05x** | | +| **LightX2V_5-Distill** | 68 | 16 | **11.45x** | | +| **LightX2V_6** | 630 | 12 | **1.24x** | | +| **LightX2V_6-Distill** | 63 | 12 | **🏆 12.36x** | + +--- + +### 🎬 720P 5s Video Test + +**Test Configuration:** +- **Model**: [Wan2.1-I2V-14B-720P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v) +- **Parameters**: `infer_steps=40`, `seed=1234`, `enable_cfg=True` + +#### 📊 Performance Comparison Table + +| Configuration | Inference Time(s) | GPU Memory(GB) | Speedup | Video Effect | +|:-------------|:-----------------:|:--------------:|:-------:|:------------:| +| **Wan2GP(profile=3)** | -- | OOM | -- | | +| **LightX2V_5** | 2473 | 23 | -- | | +| **LightX2V_5-Distill** | 183 | 23 | -- | | +| **LightX2V_6** | 2169 | 18 | -- | | +| **LightX2V_6-Distill** | 171 | 18 | -- | | + +--- + +## 📖 Configuration Descriptions + +### 🖥️ H200 Environment Configuration Descriptions + +| Configuration | Technical Features | +|:--------------|:------------------| +| **Wan2.1 Official** | Based on [Wan2.1 official repository](https://github.com/Wan-Video/Wan2.1) original implementation | +| **FastVideo** | Based on [FastVideo official repository](https://github.com/hao-ai-lab/FastVideo), using SageAttention2 backend optimization | +| **LightX2V_1** | Uses SageAttention2 to replace native attention mechanism, adopts DIT BF16+FP32 (partial sensitive layers) mixed precision computation, improving computational efficiency while maintaining precision | +| **LightX2V_2** | Unified BF16 precision computation, further reducing memory usage and computational overhead while maintaining generation quality | +| **LightX2V_3** | Introduces FP8 quantization technology to significantly reduce computational precision requirements, combined with Tiling VAE technology to optimize memory usage | +| **LightX2V_3-Distill** | Based on LightX2V_3 using 4-step distillation model(`infer_steps=4`, `enable_cfg=False`), further reducing inference steps while maintaining generation quality | +| **LightX2V_4** | Based on LightX2V_3 with TeaCache(teacache_thresh=0.2) caching reuse technology, achieving acceleration through intelligent redundant computation skipping | + +### 🖥️ RTX 4090 Environment Configuration Descriptions + +| Configuration | Technical Features | +|:--------------|:------------------| +| **Wan2GP(profile=3)** | Implementation based on [Wan2GP repository](https://github.com/deepbeepmeep/Wan2GP), using MMGP optimization technology. Profile=3 configuration is suitable for RTX 3090/4090 environments with at least 32GB RAM and 24GB VRAM, adapting to limited memory resources by sacrificing VRAM. Uses quantized models: [480P model](https://huggingface.co/DeepBeepMeep/Wan2.1/blob/main/wan2.1_image2video_480p_14B_quanto_mbf16_int8.safetensors) and [720P model](https://huggingface.co/DeepBeepMeep/Wan2.1/blob/main/wan2.1_image2video_720p_14B_quanto_mbf16_int8.safetensors) | +| **LightX2V_5** | Uses SageAttention2 to replace native attention mechanism, adopts DIT FP8+FP32 (partial sensitive layers) mixed precision computation, enables CPU offload technology, executes partial sensitive layers with FP32 precision, asynchronously offloads DIT inference process data to CPU, saves VRAM, with block-level offload granularity | +| **LightX2V_5-Distill** | Based on LightX2V_5 using 4-step distillation model(`infer_steps=4`, `enable_cfg=False`), further reducing inference steps while maintaining generation quality | +| **LightX2V_6** | Based on LightX2V_3 with CPU offload technology enabled, executes partial sensitive layers with FP32 precision, asynchronously offloads DIT inference process data to CPU, saves VRAM, with block-level offload granularity | +| **LightX2V_6-Distill** | Based on LightX2V_6 using 4-step distillation model(`infer_steps=4`, `enable_cfg=False`), further reducing inference steps while maintaining generation quality | + +--- + +## 📁 Configuration Files Reference + +Benchmark-related configuration files and execution scripts are available at: + +| Type | Link | Description | +|:-----|:-----|:------------| +| **Configuration Files** | [configs/bench](https://github.com/ModelTC/LightX2V/tree/main/configs/bench) | Contains JSON files with various optimization configurations | +| **Execution Scripts** | [scripts/bench](https://github.com/ModelTC/LightX2V/tree/main/scripts/bench) | Contains benchmark execution scripts | + +--- + +> 💡 **Tip**: It is recommended to choose the appropriate optimization solution based on your hardware configuration to achieve the best performance. diff --git a/docs/EN/source/getting_started/model_structure.md b/docs/EN/source/getting_started/model_structure.md new file mode 100644 index 0000000..6edfc28 --- /dev/null +++ b/docs/EN/source/getting_started/model_structure.md @@ -0,0 +1,573 @@ +# Model Format and Loading Guide + +## 📖 Overview + +LightX2V is a flexible video generation inference framework that supports multiple model sources and formats, providing users with rich options: + +- ✅ **Wan Official Models**: Directly compatible with officially released complete models from Wan2.1 and Wan2.2 +- ✅ **Single-File Models**: Supports single-file format models released by LightX2V (including quantized versions) +- ✅ **LoRA Models**: Supports loading distilled LoRAs released by LightX2V + +This document provides detailed instructions on how to use various model formats, configuration parameters, and best practices. + +--- + +## 🗂️ Format 1: Wan Official Models + +### Model Repositories +- [Wan2.1 Collection](https://huggingface.co/collections/Wan-AI/wan21-68ac4ba85372ae5a8e282a1b) +- [Wan2.2 Collection](https://huggingface.co/collections/Wan-AI/wan22-68ac4ae80a8b477e79636fc8) + +### Model Features +- **Official Guarantee**: Complete models officially released by Wan-AI with highest quality +- **Complete Components**: Includes all necessary components (DIT, T5, CLIP, VAE) +- **Original Precision**: Uses BF16/FP32 precision with no quantization loss +- **Strong Compatibility**: Fully compatible with Wan official toolchain + +### Wan2.1 Official Models + +#### Directory Structure + +Using [Wan2.1-I2V-14B-720P](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) as an example: + +``` +Wan2.1-I2V-14B-720P/ +├── diffusion_pytorch_model-00001-of-00007.safetensors # DIT model shard 1 +├── diffusion_pytorch_model-00002-of-00007.safetensors # DIT model shard 2 +├── diffusion_pytorch_model-00003-of-00007.safetensors # DIT model shard 3 +├── diffusion_pytorch_model-00004-of-00007.safetensors # DIT model shard 4 +├── diffusion_pytorch_model-00005-of-00007.safetensors # DIT model shard 5 +├── diffusion_pytorch_model-00006-of-00007.safetensors # DIT model shard 6 +├── diffusion_pytorch_model-00007-of-00007.safetensors # DIT model shard 7 +├── diffusion_pytorch_model.safetensors.index.json # Shard index file +├── models_t5_umt5-xxl-enc-bf16.pth # T5 text encoder +├── models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth # CLIP encoder +├── Wan2.1_VAE.pth # VAE encoder/decoder +├── config.json # Model configuration +├── xlm-roberta-large/ # CLIP tokenizer +├── google/ # T5 tokenizer +├── assets/ +└── examples/ +``` + +#### Usage + +```bash +# Download model +huggingface-cli download Wan-AI/Wan2.1-I2V-14B-720P \ + --local-dir ./models/Wan2.1-I2V-14B-720P + +# Configure launch script +model_path=./models/Wan2.1-I2V-14B-720P +lightx2v_path=/path/to/LightX2V + +# Run inference +cd LightX2V/scripts +bash wan/run_wan_i2v.sh +``` + +### Wan2.2 Official Models + +#### Directory Structure + +Using [Wan2.2-I2V-A14B](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) as an example: + +``` +Wan2.2-I2V-A14B/ +├── high_noise_model/ # High-noise model directory +│ ├── diffusion_pytorch_model-00001-of-00009.safetensors +│ ├── diffusion_pytorch_model-00002-of-00009.safetensors +│ ├── ... +│ ├── diffusion_pytorch_model-00009-of-00009.safetensors +│ └── diffusion_pytorch_model.safetensors.index.json +├── low_noise_model/ # Low-noise model directory +│ ├── diffusion_pytorch_model-00001-of-00009.safetensors +│ ├── diffusion_pytorch_model-00002-of-00009.safetensors +│ ├── ... +│ ├── diffusion_pytorch_model-00009-of-00009.safetensors +│ └── diffusion_pytorch_model.safetensors.index.json +├── models_t5_umt5-xxl-enc-bf16.pth # T5 text encoder +├── Wan2.1_VAE.pth # VAE encoder/decoder +├── configuration.json # Model configuration +├── google/ # T5 tokenizer +├── assets/ # Example assets (optional) +└── examples/ # Example files (optional) +``` + +#### Usage + +```bash +# Download model +huggingface-cli download Wan-AI/Wan2.2-I2V-A14B \ + --local-dir ./models/Wan2.2-I2V-A14B + +# Configure launch script +model_path=./models/Wan2.2-I2V-A14B +lightx2v_path=/path/to/LightX2V + +# Run inference +cd LightX2V/scripts +bash wan22/run_wan22_moe_i2v.sh +``` + +### Available Model List + +#### Wan2.1 Official Model List + +| Model Name | Download Link | +|---------|----------| +| Wan2.1-I2V-14B-720P | [Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) | +| Wan2.1-I2V-14B-480P | [Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) | +| Wan2.1-T2V-14B | [Link](https://huggingface.co/Wan-AI/Wan2.1-T2V-14B) | +| Wan2.1-T2V-1.3B | [Link](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) | +| Wan2.1-FLF2V-14B-720P | [Link](https://huggingface.co/Wan-AI/Wan2.1-FLF2V-14B-720P) | +| Wan2.1-VACE-14B | [Link](https://huggingface.co/Wan-AI/Wan2.1-VACE-14B) | +| Wan2.1-VACE-1.3B | [Link](https://huggingface.co/Wan-AI/Wan2.1-VACE-1.3B) | + +#### Wan2.2 Official Model List + +| Model Name | Download Link | +|---------|----------| +| Wan2.2-I2V-A14B | [Link](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) | +| Wan2.2-T2V-A14B | [Link](https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B) | +| Wan2.2-TI2V-5B | [Link](https://huggingface.co/Wan-AI/Wan2.2-TI2V-5B) | +| Wan2.2-Animate-14B | [Link](https://huggingface.co/Wan-AI/Wan2.2-Animate-14B) | + +### Usage Tips + +> 💡 **Quantized Model Usage**: To use quantized models, refer to the [Model Conversion Script](https://github.com/ModelTC/LightX2V/blob/main/tools/convert/readme_zh.md) for conversion, or directly use pre-converted quantized models in Format 2 below +> +> 💡 **Memory Optimization**: For devices with RTX 4090 24GB or smaller memory, it's recommended to combine quantization techniques with CPU offload features: +> - Quantization Configuration: Refer to [Quantization Documentation](../method_tutorials/quantization.md) +> - CPU Offload: Refer to [Parameter Offload Documentation](../method_tutorials/offload.md) +> - Wan2.1 Configuration: Refer to [offload config files](https://github.com/ModelTC/LightX2V/tree/main/configs/offload) +> - Wan2.2 Configuration: Refer to [wan22 config files](https://github.com/ModelTC/LightX2V/tree/main/configs/wan22) with `4090` suffix + +--- + +## 🗂️ Format 2: LightX2V Single-File Models (Recommended) + +### Model Repositories +- [Wan2.1-LightX2V](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan2.2-LightX2V](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) + +### Model Features +- **Single-File Management**: Single safetensors file, easy to manage and deploy +- **Multi-Precision Support**: Provides original precision, FP8, INT8, and other precision versions +- **Distillation Acceleration**: Supports 4-step fast inference +- **Tool Compatibility**: Compatible with ComfyUI and other tools + +**Examples**: +- `wan2.1_i2v_720p_lightx2v_4step.safetensors` - 720P I2V original precision +- `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors` - 720P I2V FP8 quantization +- `wan2.1_i2v_480p_int8_lightx2v_4step.safetensors` - 480P I2V INT8 quantization +- ... + +### Wan2.1 Single-File Models + +#### Scenario A: Download Single Model File + +**Step 1: Select and Download Model** + +```bash +# Create model directory +mkdir -p ./models/wan2.1_i2v_720p + +# Download 720P I2V FP8 quantized model +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p \ + --include "wan2.1_i2v_720p_lightx2v_4step.safetensors" +``` + +**Step 2: Manually Organize Other Components** + +Directory structure as follows: +``` +wan2.1_i2v_720p/ +├── wan2.1_i2v_720p_lightx2v_4step.safetensors # Original precision +└── t5/clip/vae/config.json/xlm-roberta-large/google and other components # Need manual organization +``` + +**Step 3: Configure Launch Script** + +```bash +# Set in launch script (point to directory containing model file) +model_path=./models/wan2.1_i2v_720p +lightx2v_path=/path/to/LightX2V + +# Run script +cd LightX2V/scripts +bash wan/run_wan_i2v_distill_4step_cfg.sh +``` + +> 💡 **Tip**: When there's only one model file in the directory, LightX2V will automatically load it. + +#### Scenario B: Download Multiple Model Files + +When you download multiple models with different precisions to the same directory, you need to explicitly specify which model to use in the configuration file. + +**Step 1: Download Multiple Models** + +```bash +# Create model directory +mkdir -p ./models/wan2.1_i2v_720p_multi + +# Download original precision model +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p_multi \ + --include "wan2.1_i2v_720p_lightx2v_4step.safetensors" + +# Download FP8 quantized model +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p_multi \ + --include "wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors" + +# Download INT8 quantized model +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p_multi \ + --include "wan2.1_i2v_720p_int8_lightx2v_4step.safetensors" +``` + +**Step 2: Manually Organize Other Components** + +Directory structure as follows: + +``` +wan2.1_i2v_720p_multi/ +├── wan2.1_i2v_720p_lightx2v_4step.safetensors # Original precision +├── wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors # FP8 quantization +└── wan2.1_i2v_720p_int8_lightx2v_4step.safetensors # INT8 quantization +└── t5/clip/vae/config.json/xlm-roberta-large/google and other components # Need manual organization +``` + +**Step 3: Specify Model in Configuration File** + +Edit configuration file (e.g., `configs/distill/wan_i2v_distill_4step_cfg.json`): + +```json +{ + // Use original precision model + "dit_original_ckpt": "./models/wan2.1_i2v_720p_multi/wan2.1_i2v_720p_lightx2v_4step.safetensors", + + // Or use FP8 quantized model + // "dit_quantized_ckpt": "./models/wan2.1_i2v_720p_multi/wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "fp8-vllm", + + // Or use INT8 quantized model + // "dit_quantized_ckpt": "./models/wan2.1_i2v_720p_multi/wan2.1_i2v_720p_int8_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "int8-vllm", + + // Other configurations... +} +``` +### Usage Tips + +> 💡 **Configuration Parameter Description**: +> - **dit_original_ckpt**: Used to specify the path to original precision models (BF16/FP32/FP16) +> - **dit_quantized_ckpt**: Used to specify the path to quantized models (FP8/INT8), must be used with `dit_quantized` and `dit_quant_scheme` parameters + +**Step 4: Start Inference** + +```bash +cd LightX2V/scripts +bash wan/run_wan_i2v_distill_4step_cfg.sh +``` + +> 💡 **Tip**: Other components (T5, CLIP, VAE, tokenizer, etc.) need to be manually organized into the model directory + +### Wan2.2 Single-File Models + +#### Directory Structure Requirements + +When using Wan2.2 single-file models, you need to manually create a specific directory structure: + +``` +wan2.2_models/ +├── high_noise_model/ # High-noise model directory (required) +│ └── wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors +├── low_noise_model/ # Low-noise model directory (required) +│ └── wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors +└── t5/clip/vae/config.json/... # Other components (manually organized) +``` + +#### Scenario A: Only One Model File Per Directory + +```bash +# Create required subdirectories +mkdir -p ./models/wan2.2_models/high_noise_model +mkdir -p ./models/wan2.2_models/low_noise_model + +# Download high-noise model to corresponding directory +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models/high_noise_model \ + --include "wan2.2_i2v_A14b_high_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors" + +# Download low-noise model to corresponding directory +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models/low_noise_model \ + --include "wan2.2_i2v_A14b_low_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors" + +# Configure launch script (point to parent directory) +model_path=./models/wan2.2_models +lightx2v_path=/path/to/LightX2V + +# Run script +cd LightX2V/scripts +bash wan22/run_wan22_moe_i2v_distill.sh +``` + +> 💡 **Tip**: When there's only one model file in each subdirectory, LightX2V will automatically load it. + +#### Scenario B: Multiple Model Files Per Directory + +When you place multiple models with different precisions in both `high_noise_model/` and `low_noise_model/` directories, you need to explicitly specify them in the configuration file. + +```bash +# Create directories +mkdir -p ./models/wan2.2_models_multi/high_noise_model +mkdir -p ./models/wan2.2_models_multi/low_noise_model + +# Download multiple versions of high-noise model +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models_multi/high_noise_model \ + --include "wan2.2_i2v_A14b_high_noise_*.safetensors" + +# Download multiple versions of low-noise model +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models_multi/low_noise_model \ + --include "wan2.2_i2v_A14b_low_noise_*.safetensors" +``` + +**Directory Structure**: + +``` +wan2.2_models_multi/ +├── high_noise_model/ +│ ├── wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors # Original precision +│ ├── wan2.2_i2v_A14b_high_noise_fp8_e4m3_lightx2v_4step.safetensors # FP8 quantization +│ └── wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step.safetensors # INT8 quantization +└── low_noise_model/ +│ ├── wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors # Original precision +│ ├── wan2.2_i2v_A14b_low_noise_fp8_e4m3_lightx2v_4step.safetensors # FP8 quantization +│ └── wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors # INT8 quantization +└── t5/vae/config.json/xlm-roberta-large/google and other components # Need manual organization +``` + +**Configuration File Settings**: + +```json +{ + // Use original precision model + "high_noise_original_ckpt": "./models/wan2.2_models_multi/high_noise_model/wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors", + "low_noise_original_ckpt": "./models/wan2.2_models_multi/low_noise_model/wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors", + + // Or use FP8 quantized model + // "high_noise_quantized_ckpt": "./models/wan2.2_models_multi/high_noise_model/wan2.2_i2v_A14b_high_noise_fp8_e4m3_lightx2v_4step.safetensors", + // "low_noise_quantized_ckpt": "./models/wan2.2_models_multi/low_noise_model/wan2.2_i2v_A14b_low_noise_fp8_e4m3_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "fp8-vllm" + + // Or use INT8 quantized model + // "high_noise_quantized_ckpt": "./models/wan2.2_models_multi/high_noise_model/wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step.safetensors", + // "low_noise_quantized_ckpt": "./models/wan2.2_models_multi/low_noise_model/wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "int8-vllm" +} +``` + +### Usage Tips + +> 💡 **Configuration Parameter Description**: +> - **high_noise_original_ckpt** / **low_noise_original_ckpt**: Used to specify the path to original precision models (BF16/FP32/FP16) +> - **high_noise_quantized_ckpt** / **low_noise_quantized_ckpt**: Used to specify the path to quantized models (FP8/INT8), must be used with `dit_quantized` and `dit_quant_scheme` parameters + + +### Available Model List + +#### Wan2.1 Single-File Model List + +**Image-to-Video Models (I2V)** + +| Filename | Precision | Description | +|--------|------|------| +| `wan2.1_i2v_480p_lightx2v_4step.safetensors` | BF16 | 4-step model original precision | +| `wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 4-step model FP8 quantization | +| `wan2.1_i2v_480p_int8_lightx2v_4step.safetensors` | INT8 | 4-step model INT8 quantization | +| `wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_4step_comfyui.safetensors` | FP8 | 4-step model ComfyUI format | +| `wan2.1_i2v_720p_lightx2v_4step.safetensors` | BF16 | 4-step model original precision | +| `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 4-step model FP8 quantization | +| `wan2.1_i2v_720p_int8_lightx2v_4step.safetensors` | INT8 | 4-step model INT8 quantization | +| `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step_comfyui.safetensors` | FP8 | 4-step model ComfyUI format | + +**Text-to-Video Models (T2V)** + +| Filename | Precision | Description | +|--------|------|------| +| `wan2.1_t2v_14b_lightx2v_4step.safetensors` | BF16 | 4-step model original precision | +| `wan2.1_t2v_14b_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 4-step model FP8 quantization | +| `wan2.1_t2v_14b_int8_lightx2v_4step.safetensors` | INT8 | 4-step model INT8 quantization | +| `wan2.1_t2v_14b_scaled_fp8_e4m3_lightx2v_4step_comfyui.safetensors` | FP8 | 4-step model ComfyUI format | + +#### Wan2.2 Single-File Model List + +**Image-to-Video Models (I2V) - A14B Series** + +| Filename | Precision | Description | +|--------|------|------| +| `wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors` | BF16 | High-noise model - 4-step original precision | +| `wan2.2_i2v_A14b_high_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | High-noise model - 4-step FP8 quantization | +| `wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step.safetensors` | INT8 | High-noise model - 4-step INT8 quantization | +| `wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors` | BF16 | Low-noise model - 4-step original precision | +| `wan2.2_i2v_A14b_low_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | Low-noise model - 4-step FP8 quantization | +| `wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors` | INT8 | Low-noise model - 4-step INT8 quantization | + +> 💡 **Usage Tips**: +> - Wan2.2 models use a dual-noise architecture, requiring both high-noise and low-noise models to be downloaded +> - Refer to the "Wan2.2 Single-File Models" section above for detailed directory organization + +--- + +## 🗂️ Format 3: LightX2V LoRA Models + +LoRA (Low-Rank Adaptation) models provide a lightweight model fine-tuning solution that enables customization for specific effects without modifying the base model. + +### Model Repositories + +- **Wan2.1 LoRA Models**: [lightx2v/Wan2.1-Distill-Loras](https://huggingface.co/lightx2v/Wan2.1-Distill-Loras) +- **Wan2.2 LoRA Models**: [lightx2v/Wan2.2-Distill-Loras](https://huggingface.co/lightx2v/Wan2.2-Distill-Loras) + +### Usage Methods + +#### Method 1: Offline Merging + +Merge LoRA weights offline into the base model to generate a new complete model file. + +**Steps**: + +Refer to the [Model Conversion Documentation](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md) for offline merging. + +**Advantages**: +- ✅ No need to load LoRA during inference +- ✅ Better performance + +**Disadvantages**: +- ❌ Requires additional storage space +- ❌ Switching different LoRAs requires re-merging + +#### Method 2: Online Loading + +Dynamically load LoRA weights during inference without modifying the base model. + +**LoRA Application Principle**: + +```python +# LoRA weight application formula +# lora_scale = (alpha / rank) +# W' = W + lora_scale * B @ A +# Where: B = up_proj (out_features, rank) +# A = down_proj (rank, in_features) + +if weights_dict["alpha"] is not None: + lora_scale = weights_dict["alpha"] / lora_down.shape[0] +elif alpha is not None: + lora_scale = alpha / lora_down.shape[0] +else: + lora_scale = 1.0 +``` + +**Configuration Method**: + +**Wan2.1 LoRA Configuration**: + +```json +{ + "lora_configs": [ + { + "path": "wan2.1_i2v_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0, + "alpha": null + } + ] +} +``` + +**Wan2.2 LoRA Configuration**: + +Since Wan2.2 uses a dual-model architecture (high-noise/low-noise), LoRA needs to be configured separately for both models: + +```json +{ + "lora_configs": [ + { + "name": "low_noise_model", + "path": "wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0, + "alpha": null + }, + { + "name": "high_noise_model", + "path": "wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0, + "alpha": null + } + ] +} +``` + +**Parameter Description**: + +| Parameter | Description | Default | +|------|------|--------| +| `path` | LoRA model file path | Required | +| `strength` | LoRA strength coefficient, range [0.0, 1.0] | 1.0 | +| `alpha` | LoRA scaling factor, uses model's built-in value when `null` | null | +| `name` | (Wan2.2 only) Specifies which model to apply to | Required | + +**Advantages**: +- ✅ Flexible switching between different LoRAs +- ✅ Saves storage space +- ✅ Can dynamically adjust LoRA strength + +**Disadvantages**: +- ❌ Additional loading time during inference +- ❌ Slightly increases memory usage + +--- + +## 📚 Related Resources + +### Official Repositories +- [LightX2V GitHub](https://github.com/ModelTC/LightX2V) +- [LightX2V Single-File Model Repository](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan-AI Official Model Repository](https://huggingface.co/Wan-AI) + +### Model Download Links + +**Wan2.1 Series** +- [Wan2.1 Collection](https://huggingface.co/collections/Wan-AI/wan21-68ac4ba85372ae5a8e282a1b) + +**Wan2.2 Series** +- [Wan2.2 Collection](https://huggingface.co/collections/Wan-AI/wan22-68ac4ae80a8b477e79636fc8) + +**LightX2V Single-File Models** +- [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan2.2-Distill-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) + +### Documentation Links +- [Quantization Documentation](../method_tutorials/quantization.md) +- [Parameter Offload Documentation](../method_tutorials/offload.md) +- [Configuration File Examples](https://github.com/ModelTC/LightX2V/tree/main/configs) + +--- + +Through this document, you should be able to: + +✅ Understand all model formats supported by LightX2V +✅ Select appropriate models and precisions based on your needs +✅ Correctly download and organize model files +✅ Configure launch parameters and successfully run inference +✅ Resolve common model loading issues + +If you have other questions, feel free to ask in [GitHub Issues](https://github.com/ModelTC/LightX2V/issues). diff --git a/docs/EN/source/getting_started/quickstart.md b/docs/EN/source/getting_started/quickstart.md new file mode 100644 index 0000000..799959e --- /dev/null +++ b/docs/EN/source/getting_started/quickstart.md @@ -0,0 +1,349 @@ +# LightX2V Quick Start Guide + +Welcome to LightX2V! This guide will help you quickly set up the environment and start using LightX2V for video generation. + +## 📋 Table of Contents + +- [System Requirements](#system-requirements) +- [Linux Environment Setup](#linux-environment-setup) + - [Docker Environment (Recommended)](#docker-environment-recommended) + - [Conda Environment Setup](#conda-environment-setup) +- [Windows Environment Setup](#windows-environment-setup) +- [Inference Usage](#inference-usage) + +## 🚀 System Requirements + +- **Operating System**: Linux (Ubuntu 18.04+) or Windows 10/11 +- **Python**: 3.10 or higher +- **GPU**: NVIDIA GPU with CUDA support, at least 8GB VRAM +- **Memory**: 16GB or more recommended +- **Storage**: At least 50GB available space + +## 🐧 Linux Environment Setup + +### 🐳 Docker Environment (Recommended) + +We strongly recommend using the Docker environment, which is the simplest and fastest installation method. + +#### 1. Pull Image + +Visit LightX2V's [Docker Hub](https://hub.docker.com/r/lightx2v/lightx2v/tags), select a tag with the latest date, such as `25111101-cu128`: + +```bash +docker pull lightx2v/lightx2v:25111101-cu128 +``` + +We recommend using the `cuda128` environment for faster inference speed. If you need to use the `cuda124` environment, you can use image versions with the `-cu124` suffix: + +```bash +docker pull lightx2v/lightx2v:25101501-cu124 +``` + +#### 2. Run Container + +```bash +docker run --gpus all -itd --ipc=host --name [container_name] -v [mount_settings] --entrypoint /bin/bash [image_id] +``` + +#### 3. China Mirror Source (Optional) + +For mainland China, if the network is unstable when pulling images, you can pull from Alibaba Cloud: + +```bash +# cuda128 +docker pull registry.cn-hangzhou.aliyuncs.com/yongyang/lightx2v:25111101-cu128 + +# cuda124 +docker pull registry.cn-hangzhou.aliyuncs.com/yongyang/lightx2v:25101501-cu124 +``` + +### 🐍 Conda Environment Setup + +If you prefer to set up the environment yourself using Conda, please follow these steps: + +#### Step 1: Clone Repository + +```bash +# Download project code +git clone https://github.com/ModelTC/LightX2V.git +cd LightX2V +``` + +#### Step 2: Create Conda Virtual Environment + +```bash +# Create and activate conda environment +conda create -n lightx2v python=3.11 -y +conda activate lightx2v +``` + +#### Step 3: Install Dependencies + +```bash +pip install -v -e . +``` + +#### Step 4: Install Attention Operators + +**Option A: Flash Attention 2** +```bash +git clone https://github.com/Dao-AILab/flash-attention.git --recursive +cd flash-attention && python setup.py install +``` + +**Option B: Flash Attention 3 (for Hopper architecture GPUs)** +```bash +cd flash-attention/hopper && python setup.py install +``` + +**Option C: SageAttention 2 (Recommended)** +```bash +git clone https://github.com/thu-ml/SageAttention.git +cd SageAttention && CUDA_ARCHITECTURES="8.0,8.6,8.9,9.0,12.0" EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" MAX_JOBS=32 pip install -v -e . +``` + +#### Step 4: Install Quantization Operators (Optional) + +Quantization operators are used to support model quantization, which can significantly reduce memory usage and accelerate inference. Choose the appropriate quantization operator based on your needs: + +**Option A: VLLM Kernels (Recommended)** +Suitable for various quantization schemes, supports FP8 and other quantization formats. + +```bash +pip install vllm +``` + +Or install from source for the latest features: + +```bash +git clone https://github.com/vllm-project/vllm.git +cd vllm +uv pip install -e . +``` + +**Option B: SGL Kernels** +Suitable for SGL quantization scheme, requires torch == 2.8.0. + +```bash +pip install sgl-kernel --upgrade +``` + +**Option C: Q8 Kernels** +Suitable for Ada architecture GPUs (such as RTX 4090, L40S, etc.). + +```bash +git clone https://github.com/KONAKONA666/q8_kernels.git +cd q8_kernels && git submodule init && git submodule update +python setup.py install +``` + +> 💡 **Note**: +> - You can skip this step if you don't need quantization functionality +> - Quantized models can be downloaded from [LightX2V HuggingFace](https://huggingface.co/lightx2v) +> - For more quantization information, please refer to the [Quantization Documentation](method_tutorials/quantization.html) + +#### Step 5: Verify Installation + +```python +import lightx2v +print(f"LightX2V Version: {lightx2v.__version__}") +``` + +## 🪟 Windows Environment Setup + +Windows systems only support Conda environment setup. Please follow these steps: + +### 🐍 Conda Environment Setup + +#### Step 1: Check CUDA Version + +First, confirm your GPU driver and CUDA version: + +```cmd +nvidia-smi +``` + +Record the **CUDA Version** information in the output, which needs to be consistent in subsequent installations. + +#### Step 2: Create Python Environment + +```cmd +# Create new environment (Python 3.12 recommended) +conda create -n lightx2v python=3.12 -y + +# Activate environment +conda activate lightx2v +``` + +> 💡 **Note**: Python 3.10 or higher is recommended for best compatibility. + +#### Step 3: Install PyTorch Framework + +**Method 1: Download Official Wheel Package (Recommended)** + +1. Visit the [PyTorch Official Download Page](https://download.pytorch.org/whl/torch/) +2. Select the corresponding version wheel package, paying attention to matching: + - **Python Version**: Consistent with your environment + - **CUDA Version**: Matches your GPU driver + - **Platform**: Select Windows version + +**Example (Python 3.12 + PyTorch 2.6 + CUDA 12.4):** + +```cmd +# Download and install PyTorch +pip install torch-2.6.0+cu124-cp312-cp312-win_amd64.whl + +# Install supporting packages +pip install torchvision==0.21.0 torchaudio==2.6.0 +``` + +**Method 2: Direct Installation via pip** + +```cmd +# CUDA 12.4 version example +pip install torch==2.6.0+cu124 torchvision==0.21.0+cu124 torchaudio==2.6.0+cu124 --index-url https://download.pytorch.org/whl/cu124 +``` + +#### Step 4: Install Windows Version vLLM + +Download the corresponding wheel package from [vllm-windows releases](https://github.com/SystemPanic/vllm-windows/releases). + +**Version Matching Requirements:** +- Python version matching +- PyTorch version matching +- CUDA version matching + +```cmd +# Install vLLM (please adjust according to actual filename) +pip install vllm-0.9.1+cu124-cp312-cp312-win_amd64.whl +``` + +#### Step 5: Install Attention Mechanism Operators + +**Option A: Flash Attention 2** + +```cmd +pip install flash-attn==2.7.2.post1 +``` + +**Option B: SageAttention 2 (Strongly Recommended)** + +**Download Sources:** +- [Windows Special Version 1](https://github.com/woct0rdho/SageAttention/releases) +- [Windows Special Version 2](https://github.com/sdbds/SageAttention-for-windows/releases) + +```cmd +# Install SageAttention (please adjust according to actual filename) +pip install sageattention-2.1.1+cu126torch2.6.0-cp312-cp312-win_amd64.whl +``` + +> ⚠️ **Note**: SageAttention's CUDA version doesn't need to be strictly aligned, but Python and PyTorch versions must match. + +#### Step 6: Clone Repository + +```cmd +# Clone project code +git clone https://github.com/ModelTC/LightX2V.git +cd LightX2V + +# Install Windows-specific dependencies +pip install -r requirements_win.txt +pip install -v -e . +``` + +#### Step 7: Install Quantization Operators (Optional) + +Quantization operators are used to support model quantization, which can significantly reduce memory usage and accelerate inference. + +**Install VLLM (Recommended):** + +Download the corresponding wheel package from [vllm-windows releases](https://github.com/SystemPanic/vllm-windows/releases) and install it. + +```cmd +# Install vLLM (please adjust according to actual filename) +pip install vllm-0.9.1+cu124-cp312-cp312-win_amd64.whl +``` + +> 💡 **Note**: +> - You can skip this step if you don't need quantization functionality +> - Quantized models can be downloaded from [LightX2V HuggingFace](https://huggingface.co/lightx2v) +> - For more quantization information, please refer to the [Quantization Documentation](method_tutorials/quantization.html) + +## 🎯 Inference Usage + +### 📥 Model Preparation + +Before starting inference, you need to download the model files in advance. We recommend: + +- **Download Source**: Download models from [LightX2V Official Hugging Face](https://huggingface.co/lightx2v/) or other open-source model repositories +- **Storage Location**: It's recommended to store models on SSD disks for better read performance +- **Available Models**: Including Wan2.1-I2V, Wan2.1-T2V, and other models supporting different resolutions and functionalities + +### 📁 Configuration Files and Scripts + +The configuration files used for inference are available [here](https://github.com/ModelTC/LightX2V/tree/main/configs), and scripts are available [here](https://github.com/ModelTC/LightX2V/tree/main/scripts). + +You need to configure the downloaded model path in the run script. In addition to the input arguments in the script, there are also some necessary parameters in the configuration file specified by `--config_json`. You can modify them as needed. + +### 🚀 Start Inference + +#### Linux Environment + +```bash +# Run after modifying the path in the script +bash scripts/wan/run_wan_t2v.sh +``` + +#### Windows Environment + +```cmd +# Use Windows batch script +scripts\win\run_wan_t2v.bat +``` + +#### Python Script Launch + +```python +from lightx2v import LightX2VPipeline + +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-T2V-14B", + model_cls="wan2.1", + task="t2v", +) + +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + height=480, # 720 + width=832, # 1280 + num_frames=81, + guidance_scale=5.0, + sample_shift=5.0, +) + +seed = 42 +prompt = "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +save_result_path="/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) +``` + +> 💡 **More Examples**: For more usage examples including quantization, offloading, caching, and other advanced configurations, please refer to the [examples directory](https://github.com/ModelTC/LightX2V/tree/main/examples). + +## 📞 Get Help + +If you encounter problems during installation or usage, please: + +1. Search for related issues in [GitHub Issues](https://github.com/ModelTC/LightX2V/issues) +2. Submit a new Issue describing your problem + +--- + +🎉 **Congratulations!** You have successfully set up the LightX2V environment and can now start enjoying video generation! diff --git a/docs/EN/source/index.rst b/docs/EN/source/index.rst new file mode 100644 index 0000000..3e244e6 --- /dev/null +++ b/docs/EN/source/index.rst @@ -0,0 +1,67 @@ +Welcome to Lightx2v! +================== + +.. figure:: ../../../assets/img_lightx2v.png + :width: 80% + :align: center + :alt: Lightx2v + :class: no-scaled-link + +.. raw:: html + +

    + + License + Ask DeepWiki + Doc + Doc + Docker + +
    + +
    + LightX2V: Light Video Generation Inference Framework +
    + +LightX2V is a lightweight video generation inference framework designed to provide an inference tool that leverages multiple advanced video generation inference techniques. As a unified inference platform, this framework supports various generation tasks such as text-to-video (T2V) and image-to-video (I2V) across different models. X2V means transforming different input modalities (such as text or images) to video output. + +GitHub: https://github.com/ModelTC/lightx2v + +HuggingFace: https://huggingface.co/lightx2v + +Documentation +------------- + +.. toctree:: + :maxdepth: 1 + :caption: Quick Start + + Quick Start + Model Structure + Benchmark + +.. toctree:: + :maxdepth: 1 + :caption: Method Tutorials + + Model Quantization + Feature Caching + Attention Module + Offload + Parallel Inference + Changing Resolution Inference + Step Distill + Autoregressive Distill + Video Frame Interpolation + +.. toctree:: + :maxdepth: 1 + :caption: Deployment Guides + + Low Latency Deployment + Low Resource Deployment + Lora Deployment + Service Deployment + Gradio Deployment + ComfyUI Deployment + Local Windows Deployment diff --git a/docs/EN/source/method_tutorials/attention.md b/docs/EN/source/method_tutorials/attention.md new file mode 100644 index 0000000..1396140 --- /dev/null +++ b/docs/EN/source/method_tutorials/attention.md @@ -0,0 +1,35 @@ +# Attention Mechanisms + +## Attention Mechanisms Supported by LightX2V + +| Name | Type Name | GitHub Link | +|--------------------|------------------|-------------| +| Flash Attention 2 | `flash_attn2` | [flash-attention v2](https://github.com/Dao-AILab/flash-attention) | +| Flash Attention 3 | `flash_attn3` | [flash-attention v3](https://github.com/Dao-AILab/flash-attention) | +| Sage Attention 2 | `sage_attn2` | [SageAttention](https://github.com/thu-ml/SageAttention) | +| Radial Attention | `radial_attn` | [Radial Attention](https://github.com/mit-han-lab/radial-attention) | +| Sparge Attention | `sparge_ckpt` | [Sparge Attention](https://github.com/thu-ml/SpargeAttn) | + +--- + +## Configuration Examples + +The configuration files for attention mechanisms are located [here](https://github.com/ModelTC/lightx2v/tree/main/configs/attentions) + +By specifying --config_json to a specific config file, you can test different attention mechanisms. + +For example, for radial_attn, the configuration is as follows: + +```json +{ + "self_attn_1_type": "radial_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3" +} +``` + +To switch to other types, simply replace the corresponding values with the type names from the table above. + +Tips: radial_attn can only be used in self attention due to the limitations of its sparse algorithm principle. + +For further customization of attention mechanism behavior, please refer to the official documentation or implementation code of each attention library. diff --git a/docs/EN/source/method_tutorials/autoregressive_distill.md b/docs/EN/source/method_tutorials/autoregressive_distill.md new file mode 100644 index 0000000..32b9ed5 --- /dev/null +++ b/docs/EN/source/method_tutorials/autoregressive_distill.md @@ -0,0 +1,53 @@ +# Autoregressive Distillation + +Autoregressive distillation is a technical exploration in LightX2V. By training distilled models, it reduces inference steps from the original 40-50 steps to **8 steps**, achieving inference acceleration while enabling infinite-length video generation through KV Cache technology. + +> ⚠️ Warning: Currently, autoregressive distillation has mediocre effects and the acceleration improvement has not met expectations, but it can serve as a long-term research project. Currently, LightX2V only supports autoregressive models for T2V. + +## 🔍 Technical Principle + +Autoregressive distillation is implemented through [CausVid](https://github.com/tianweiy/CausVid) technology. CausVid performs step distillation and CFG distillation on 1.3B autoregressive models. LightX2V extends it with a series of enhancements: + +1. **Larger Models**: Supports autoregressive distillation training for 14B models; +2. **More Complete Data Processing Pipeline**: Generates a training dataset of 50,000 prompt-video pairs; + +For detailed implementation, refer to [CausVid-Plus](https://github.com/GoatWu/CausVid-Plus). + +## 🛠️ Configuration Files + +### Configuration File + +Configuration options are provided in the [configs/causvid/](https://github.com/ModelTC/lightx2v/tree/main/configs/causvid) directory: + +| Configuration File | Model Address | +|-------------------|---------------| +| [wan_t2v_causvid.json](https://github.com/ModelTC/lightx2v/blob/main/configs/causvid/wan_t2v_causvid.json) | https://huggingface.co/lightx2v/Wan2.1-T2V-14B-CausVid | + +### Key Configuration Parameters + +```json +{ + "enable_cfg": false, // Disable CFG for speed improvement + "num_fragments": 3, // Number of video segments generated at once, 5s each + "num_frames": 21, // Frames per video segment, modify with caution! + "num_frame_per_block": 3, // Frames per autoregressive block, modify with caution! + "num_blocks": 7, // Autoregressive blocks per video segment, modify with caution! + "frame_seq_length": 1560, // Encoding length per frame, modify with caution! + "denoising_step_list": [ // Denoising timestep list + 999, 934, 862, 756, 603, 410, 250, 140, 74 + ] +} +``` + +## 📜 Usage + +### Model Preparation + +Place the downloaded model (`causal_model.pt` or `causal_model.safetensors`) in the `causvid_models/` folder under the Wan model root directory: +- For T2V: `Wan2.1-T2V-14B/causvid_models/` + +### Inference Script + +```bash +bash scripts/wan/run_wan_t2v_causvid.sh +``` diff --git a/docs/EN/source/method_tutorials/cache.md b/docs/EN/source/method_tutorials/cache.md new file mode 100644 index 0000000..953c36a --- /dev/null +++ b/docs/EN/source/method_tutorials/cache.md @@ -0,0 +1,3 @@ +# Feature Cache + +To demonstrate some video playback effects, you can get better display effects and corresponding documentation content on this [🔗 page](https://github.com/ModelTC/LightX2V/blob/main/docs/EN/source/method_tutorials/cache_source.md). diff --git a/docs/EN/source/method_tutorials/cache_source.md b/docs/EN/source/method_tutorials/cache_source.md new file mode 100644 index 0000000..3fd14c0 --- /dev/null +++ b/docs/EN/source/method_tutorials/cache_source.md @@ -0,0 +1,139 @@ +# Feature Caching + +## Cache Acceleration Algorithm +- In the inference process of diffusion models, cache reuse is an important acceleration algorithm. +- The core idea is to skip redundant computations at certain time steps by reusing historical cache results to improve inference efficiency. +- The key to the algorithm is how to decide which time steps to perform cache reuse, usually based on dynamic judgment of model state changes or error thresholds. +- During inference, key content such as intermediate features, residuals, and attention outputs need to be cached. When entering reusable time steps, the cached content is directly utilized, and the current output is reconstructed through approximation methods like Taylor expansion, thereby reducing repeated calculations and achieving efficient inference. + +### TeaCache +The core idea of `TeaCache` is to accumulate the **relative L1** distance between adjacent time step inputs. When the accumulated distance reaches a set threshold, it determines that the current time step should not use cache reuse; conversely, when the accumulated distance does not reach the set threshold, cache reuse is used to accelerate the inference process. +- Specifically, the algorithm calculates the relative L1 distance between the current input and the previous step input at each inference step and accumulates it. +- When the accumulated distance does not exceed the threshold, it indicates that the model state change is not obvious, so the most recently cached content is directly reused, skipping some redundant calculations. This can significantly reduce the number of forward computations of the model and improve inference speed. + +In practical effects, TeaCache achieves significant acceleration while ensuring generation quality. On a single H200 card, the time consumption and video comparison before and after acceleration are as follows: + + + + + + + + + + +
    + Before acceleration: 58s + + After acceleration: 17.9s +
    + + + +
    + + +- Acceleration ratio: **3.24** +- Config: [wan_t2v_1_3b_tea_480p.json](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/teacache/wan_t2v_1_3b_tea_480p.json) +- Reference paper: [https://arxiv.org/abs/2411.19108](https://arxiv.org/abs/2411.19108) + +### TaylorSeer Cache +The core of `TaylorSeer Cache` lies in using Taylor's formula to recalculate cached content as residual compensation for cache reuse time steps. +- The specific approach is to not only simply reuse historical cache at cache reuse time steps, but also approximately reconstruct the current output through Taylor expansion. This can further improve output accuracy while reducing computational load. +- Taylor expansion can effectively capture minor changes in model state, allowing errors caused by cache reuse to be compensated, thereby ensuring generation quality while accelerating. + +`TaylorSeer Cache` is suitable for scenarios with high output accuracy requirements and can further improve model inference performance based on cache reuse. + + + + + + + + + + +
    + Before acceleration: 57.7s + + After acceleration: 41.3s +
    + + + +
    + + +- Acceleration ratio: **1.39** +- Config: [wan_t2v_taylorseer](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/taylorseer/wan_t2v_taylorseer.json) +- Reference paper: [https://arxiv.org/abs/2503.06923](https://arxiv.org/abs/2503.06923) + +### AdaCache +The core idea of `AdaCache` is to dynamically adjust the step size of cache reuse based on partial cached content in specified block chunks. +- The algorithm analyzes feature differences between two adjacent time steps within specific blocks and adaptively determines the next cache reuse time step interval based on the difference magnitude. +- When model state changes are small, the step size automatically increases, reducing cache update frequency; when state changes are large, the step size decreases to ensure output quality. + +This allows flexible adjustment of caching strategies based on dynamic changes in the actual inference process, achieving more efficient acceleration and better generation results. AdaCache is suitable for application scenarios that have high requirements for both inference speed and generation quality. + + + + + + + + + + +
    + Before acceleration: 227s + + After acceleration: 83s +
    + + + +
    + + +- Acceleration ratio: **2.73** +- Config: [wan_i2v_ada](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/adacache/wan_i2v_ada.json) +- Reference paper: [https://arxiv.org/abs/2411.02397](https://arxiv.org/abs/2411.02397) + +### CustomCache +`CustomCache` combines the advantages of `TeaCache` and `TaylorSeer Cache`. +- It combines the real-time and reasonable cache decision-making of `TeaCache`, determining when to perform cache reuse through dynamic thresholds. +- At the same time, it utilizes `TaylorSeer`'s Taylor expansion method to make use of cached content. + +This not only efficiently determines the timing of cache reuse but also maximizes the utilization of cached content, improving output accuracy and generation quality. Actual testing shows that `CustomCache` produces video quality superior to using `TeaCache`, `TaylorSeer Cache`, or `AdaCache` alone across multiple content generation tasks, making it one of the currently optimal comprehensive cache acceleration algorithms. + + + + + + + + + + +
    + Before acceleration: 57.9s + + After acceleration: 16.6s +
    + + + +
    + + +- Acceleration ratio: **3.49** +- Config: [wan_t2v_custom_1_3b](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/custom/wan_t2v_custom_1_3b.json) + + +## Usage + +The config files for feature caching are located [here](https://github.com/ModelTC/lightx2v/tree/main/configs/caching) + +By specifying --config_json to the specific config file, you can test different cache algorithms. + +[Here](https://github.com/ModelTC/lightx2v/tree/main/scripts/cache) are some running scripts for use. diff --git a/docs/EN/source/method_tutorials/changing_resolution.md b/docs/EN/source/method_tutorials/changing_resolution.md new file mode 100644 index 0000000..9c93694 --- /dev/null +++ b/docs/EN/source/method_tutorials/changing_resolution.md @@ -0,0 +1,66 @@ +# Variable Resolution Inference + +## Overview + +Variable resolution inference is a technical strategy for optimizing the denoising process. It improves computational efficiency while maintaining generation quality by using different resolutions at different stages of the denoising process. The core idea of this method is to use lower resolution for coarse denoising in the early stages and switch to normal resolution for fine processing in the later stages. + +## Technical Principles + +### Multi-stage Denoising Strategy + +Variable resolution inference is based on the following observations: + +- **Early-stage denoising**: Mainly handles coarse noise and overall structure, requiring less detailed information +- **Late-stage denoising**: Focuses on detail optimization and high-frequency information recovery, requiring complete resolution information + +### Resolution Switching Mechanism + +1. **Low-resolution stage** (early stage) + - Downsample the input to a lower resolution (e.g., 0.75x of original size) + - Execute initial denoising steps + - Quickly remove most noise and establish basic structure + +2. **Normal resolution stage** (late stage) + - Upsample the denoising result from the first step back to original resolution + - Continue executing remaining denoising steps + - Restore detailed information and complete fine processing + +### U-shaped Resolution Strategy + +If resolution is reduced at the very beginning of the denoising steps, it may cause significant differences between the final generated video and the video generated through normal inference. Therefore, a U-shaped resolution strategy can be adopted, where the original resolution is maintained for the first few steps, then resolution is reduced for inference. + +## Usage + +The config files for variable resolution inference are located [here](https://github.com/ModelTC/LightX2V/tree/main/configs/changing_resolution) + +You can test variable resolution inference by specifying --config_json to the specific config file. + +You can refer to the scripts [here](https://github.com/ModelTC/LightX2V/blob/main/scripts/changing_resolution) to run. + +### Example 1: +``` +{ + "infer_steps": 50, + "changing_resolution": true, + "resolution_rate": [0.75], + "changing_resolution_steps": [25] +} +``` + +This means a total of 50 steps, with resolution at 0.75x original resolution from step 1 to 25, and original resolution from step 26 to the final step. + +### Example 2: +``` +{ + "infer_steps": 50, + "changing_resolution": true, + "resolution_rate": [1.0, 0.75], + "changing_resolution_steps": [10, 35] +} +``` + +This means a total of 50 steps, with original resolution from step 1 to 10, 0.75x original resolution from step 11 to 35, and original resolution from step 36 to the final step. + +Generally, if `changing_resolution_steps` is [A, B, C], the denoising starts at step 1, and the total number of steps is X, then the inference process will be divided into four segments. + +Specifically, these segments are (0, A], (A, B], (B, C], and (C, X], where each segment is a left-open, right-closed interval. diff --git a/docs/EN/source/method_tutorials/offload.md b/docs/EN/source/method_tutorials/offload.md new file mode 100644 index 0000000..0fff2dc --- /dev/null +++ b/docs/EN/source/method_tutorials/offload.md @@ -0,0 +1,177 @@ +# Parameter Offload + +## 📖 Overview + +LightX2V implements an advanced parameter offload mechanism specifically designed for large model inference under limited hardware resources. The system provides an excellent speed-memory balance by intelligently managing model weights across different memory hierarchies. + +**Core Features:** +- **Block/Phase-level Offload**: Efficiently manages model weights in block/phase units for optimal memory usage + - **Block**: The basic computational unit of Transformer models, containing complete Transformer layers (self-attention, cross-attention, feedforward networks, etc.), serving as a larger memory management unit + - **Phase**: Finer-grained computational stages within blocks, containing individual computational components (such as self-attention, cross-attention, feedforward networks, etc.), providing more precise memory control +- **Multi-tier Storage Support**: GPU → CPU → Disk hierarchy with intelligent caching +- **Asynchronous Operations**: Overlaps computation and data transfer using CUDA streams +- **Disk/NVMe Serialization**: Supports secondary storage when memory is insufficient + +## 🎯 Offload Strategies + +### Strategy 1: GPU-CPU Block/Phase Offload + +**Use Case**: Insufficient GPU memory but sufficient system memory + +**How It Works**: Manages model weights in block or phase units between GPU and CPU memory, utilizing CUDA streams to overlap computation and data transfer. Blocks contain complete Transformer layers, while Phases are individual computational components within blocks. + +
    +GPU-CPU block/phase offload workflow +
    + +
    +Swap operation +
    + +
    +Swap concept +
    + + +**Block vs Phase Explanation**: +- **Block Granularity**: Larger memory management unit containing complete Transformer layers (self-attention, cross-attention, feedforward networks, etc.), suitable for sufficient memory scenarios with reduced management overhead +- **Phase Granularity**: Finer-grained memory management containing individual computational components (such as self-attention, cross-attention, feedforward networks, etc.), suitable for memory-constrained scenarios with more flexible memory control + +**Key Features:** +- **Asynchronous Transfer**: Uses three CUDA streams with different priorities for parallel computation and transfer + - Compute stream (priority=-1): High priority, handles current computation + - GPU load stream (priority=0): Medium priority, handles CPU to GPU prefetching + - CPU load stream (priority=0): Medium priority, handles GPU to CPU offloading +- **Prefetch Mechanism**: Preloads the next block/phase to GPU in advance +- **Intelligent Caching**: Maintains weight cache in CPU memory +- **Stream Synchronization**: Ensures correctness of data transfer and computation +- **Swap Operation**: Rotates block/phase positions after computation for continuous execution + + + + +### Strategy 2: Disk-CPU-GPU Block/Phase Offload (Lazy Loading) + +**Use Case**: Both GPU memory and system memory are insufficient + +**How It Works**: Builds upon Strategy 1 by introducing disk storage, implementing a three-tier storage hierarchy (Disk → CPU → GPU). CPU continues to serve as a cache pool with configurable size, suitable for devices with limited CPU memory. + + +
    +Disk-CPU-GPU block/phase offload workflow +
    + + +
    +Working steps +
    + +**Key Features:** +- **Lazy Loading**: Model weights are loaded from disk on-demand, avoiding loading the entire model at once +- **Intelligent Caching**: CPU memory buffer uses FIFO strategy with configurable size +- **Multi-threaded Prefetch**: Uses multiple disk worker threads for parallel loading +- **Asynchronous Transfer**: Uses CUDA streams to overlap computation and data transfer +- **Swap Rotation**: Achieves continuous computation through position rotation, avoiding repeated loading/offloading + +**Working Steps**: +- **Disk Storage**: Model weights are stored on SSD/NVMe by block, one .safetensors file per block +- **Task Scheduling**: When a block/phase is needed, priority task queue assigns disk worker threads +- **Asynchronous Loading**: Multiple disk threads load weight files from disk to CPU memory buffer in parallel +- **Intelligent Caching**: CPU memory buffer manages cache using FIFO strategy with configurable size +- **Cache Hit**: If weights are already in cache, transfer directly to GPU without disk read +- **Prefetch Transfer**: Weights in cache are asynchronously transferred to GPU memory (using GPU load stream) +- **Compute Execution**: Weights on GPU perform computation (using compute stream) while background continues prefetching next block/phase +- **Swap Rotation**: After computation completes, rotate block/phase positions for continuous computation +- **Memory Management**: When CPU cache is full, automatically evict the least recently used weight block/phase + + + +## ⚙️ Configuration Parameters + +### GPU-CPU Offload Configuration + +```python +config = { + "cpu_offload": True, + "offload_ratio": 1.0, # Offload ratio (0.0-1.0) + "offload_granularity": "block", # Offload granularity: "block" or "phase" + "lazy_load": False, # Disable lazy loading +} +``` + +### Disk-CPU-GPU Offload Configuration + +```python +config = { + "cpu_offload": True, + "lazy_load": True, # Enable lazy loading + "offload_ratio": 1.0, # Offload ratio + "offload_granularity": "phase", # Recommended to use phase granularity + "num_disk_workers": 2, # Number of disk worker threads + "offload_to_disk": True, # Enable disk offload +} +``` + +**Intelligent Cache Key Parameters:** +- `max_memory`: Controls CPU cache size, affects cache hit rate and memory usage +- `num_disk_workers`: Controls number of disk loading threads, affects prefetch speed +- `offload_granularity`: Controls cache granularity (block or phase), affects cache efficiency + - `"block"`: Cache management in complete Transformer layer units + - `"phase"`: Cache management in individual computational component units + +**Offload Configuration for Non-DIT Model Components (T5, CLIP, VAE):** + +The offload behavior of these components follows these rules: +- **Default Behavior**: If not specified separately, T5, CLIP, VAE will follow the `cpu_offload` setting +- **Independent Configuration**: Can set offload strategy separately for each component for fine-grained control + +**Configuration Example**: +```json +{ + "cpu_offload": true, // DIT model offload switch + "t5_cpu_offload": false, // T5 encoder independent setting + "clip_cpu_offload": false, // CLIP encoder independent setting + "vae_cpu_offload": false // VAE encoder independent setting +} +``` + +For memory-constrained devices, a progressive offload strategy is recommended: + +1. **Step 1**: Only enable `cpu_offload`, disable `t5_cpu_offload`, `clip_cpu_offload`, `vae_cpu_offload` +2. **Step 2**: If memory is still insufficient, gradually enable CPU offload for T5, CLIP, VAE +3. **Step 3**: If memory is still not enough, consider using quantization + CPU offload or enable `lazy_load` + +**Practical Experience**: +- **RTX 4090 24GB + 14B Model**: Usually only need to enable `cpu_offload`, manually set other component offload to `false`, and use FP8 quantized version +- **Smaller Memory GPUs**: Need to combine quantization, CPU offload, and lazy loading +- **Quantization Schemes**: Refer to [Quantization Documentation](../method_tutorials/quantization.md) to select appropriate quantization strategy + + +**Configuration File Reference**: +- **Wan2.1 Series Models**: Refer to [offload config files](https://github.com/ModelTC/lightx2v/tree/main/configs/offload) +- **Wan2.2 Series Models**: Refer to [wan22 config files](https://github.com/ModelTC/lightx2v/tree/main/configs/wan22) with `4090` suffix + +## 🎯 Usage Recommendations +- 🔄 GPU-CPU Block/Phase Offload: Suitable for insufficient GPU memory (RTX 3090/4090 24G) but sufficient system memory (>64/128G) + +- 💾 Disk-CPU-GPU Block/Phase Offload: Suitable for both insufficient GPU memory (RTX 3060/4090 8G) and system memory (16/32G) + +- 🚫 No Offload: Suitable for high-end hardware configurations pursuing best performance + + +## 🔍 Troubleshooting + +### Common Issues and Solutions + +1. **Disk I/O Bottleneck** + - Solution: Use NVMe SSD, increase num_disk_workers + + +2. **Memory Buffer Overflow** + - Solution: Increase max_memory or reduce num_disk_workers + +3. **Loading Timeout** + - Solution: Check disk performance, optimize file system + + +**Note**: This offload mechanism is specifically designed for LightX2V, fully utilizing the asynchronous computing capabilities of modern hardware, significantly lowering the hardware threshold for large model inference. diff --git a/docs/EN/source/method_tutorials/parallel.md b/docs/EN/source/method_tutorials/parallel.md new file mode 100644 index 0000000..324ea7b --- /dev/null +++ b/docs/EN/source/method_tutorials/parallel.md @@ -0,0 +1,53 @@ +# Parallel Inference + +LightX2V supports distributed parallel inference, enabling the utilization of multiple GPUs for inference. The DiT component supports two parallel attention mechanisms: **Ulysses** and **Ring**, while also supporting **Cfg parallel inference**. Parallel inference significantly reduces inference time and alleviates memory overhead on each GPU. + +## DiT Parallel Configuration + +### 1. Ulysses Parallel + +**Configuration method:** +```json + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +``` + +### 2. Ring Parallel + +**Configuration method:** +```json + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ring" + } +``` + +## Cfg Parallel Configuration + +**Configuration method:** +```json + "parallel": { + "cfg_p_size": 2 + } +``` + +## Hybrid Parallel Configuration + +**Configuration method:** +```json + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +``` + +## Usage + +Parallel inference configuration files are available [here](https://github.com/ModelTC/lightx2v/tree/main/configs/dist_infer) + +By specifying --config_json to a specific config file, you can test parallel inference. + +[Here](https://github.com/ModelTC/lightx2v/tree/main/scripts/dist_infer) are some run scripts for your use. diff --git a/docs/EN/source/method_tutorials/quantization.md b/docs/EN/source/method_tutorials/quantization.md new file mode 100644 index 0000000..da355a9 --- /dev/null +++ b/docs/EN/source/method_tutorials/quantization.md @@ -0,0 +1,158 @@ +# Model Quantization Techniques + +## 📖 Overview + +LightX2V supports quantized inference for DIT, T5, and CLIP models, reducing memory usage and improving inference speed by lowering model precision. + +--- + +## 🔧 Quantization Modes + +| Quantization Mode | Weight Quantization | Activation Quantization | Compute Kernel | Supported Hardware | +|--------------|----------|----------|----------|----------| +| `fp8-vllm` | FP8 channel symmetric | FP8 channel dynamic symmetric | [VLLM](https://github.com/vllm-project/vllm) | H100/H200/H800, RTX 40 series, etc. | +| `int8-vllm` | INT8 channel symmetric | INT8 channel dynamic symmetric | [VLLM](https://github.com/vllm-project/vllm) | A100/A800, RTX 30/40 series, etc. | +| `fp8-sgl` | FP8 channel symmetric | FP8 channel dynamic symmetric | [SGL](https://github.com/sgl-project/sglang/tree/main/sgl-kernel) | H100/H200/H800, RTX 40 series, etc. | +| `int8-sgl` | INT8 channel symmetric | INT8 channel dynamic symmetric | [SGL](https://github.com/sgl-project/sglang/tree/main/sgl-kernel) | A100/A800, RTX 30/40 series, etc. | +| `fp8-q8f` | FP8 channel symmetric | FP8 channel dynamic symmetric | [Q8-Kernels](https://github.com/KONAKONA666/q8_kernels) | RTX 40 series, L40S, etc. | +| `int8-q8f` | INT8 channel symmetric | INT8 channel dynamic symmetric | [Q8-Kernels](https://github.com/KONAKONA666/q8_kernels) | RTX 40 series, L40S, etc. | +| `int8-torchao` | INT8 channel symmetric | INT8 channel dynamic symmetric | [TorchAO](https://github.com/pytorch/ao) | A100/A800, RTX 30/40 series, etc. | +| `int4-g128-marlin` | INT4 group symmetric | FP16 | [Marlin](https://github.com/IST-DASLab/marlin) | H200/H800/A100/A800, RTX 30/40 series, etc. | +| `fp8-b128-deepgemm` | FP8 block symmetric | FP8 group symmetric | [DeepGemm](https://github.com/deepseek-ai/DeepGEMM) | H100/H200/H800, RTX 40 series, etc.| + +--- + +## 🔧 Obtaining Quantized Models + +### Method 1: Download Pre-Quantized Models + +Download pre-quantized models from LightX2V model repositories: + +**DIT Models** + +Download pre-quantized DIT models from [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models): + +```bash +# Download DIT FP8 quantized model +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models \ + --include "wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors" +``` + +**Encoder Models** + +Download pre-quantized T5 and CLIP models from [Encoders-LightX2V](https://huggingface.co/lightx2v/Encoders-Lightx2v): + +```bash +# Download T5 FP8 quantized model +huggingface-cli download lightx2v/Encoders-Lightx2v \ + --local-dir ./models \ + --include "models_t5_umt5-xxl-enc-fp8.pth" + +# Download CLIP FP8 quantized model +huggingface-cli download lightx2v/Encoders-Lightx2v \ + --local-dir ./models \ + --include "models_clip_open-clip-xlm-roberta-large-vit-huge-14-fp8.pth" +``` + +### Method 2: Self-Quantize Models + +For detailed quantization tool usage, refer to: [Model Conversion Documentation](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md) + +--- + +## 🚀 Using Quantized Models + +### DIT Model Quantization + +#### Supported Quantization Modes + +DIT quantization modes (`dit_quant_scheme`) support: `fp8-vllm`, `int8-vllm`, `fp8-sgl`, `int8-sgl`, `fp8-q8f`, `int8-q8f`, `int8-torchao`, `int4-g128-marlin`, `fp8-b128-deepgemm` + +#### Configuration Example + +```json +{ + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "dit_quantized_ckpt": "/path/to/dit_quantized_model" // Optional +} +``` + +> 💡 **Tip**: When there's only one DIT model in the script's `model_path`, `dit_quantized_ckpt` doesn't need to be specified separately. + +### T5 Model Quantization + +#### Supported Quantization Modes + +T5 quantization modes (`t5_quant_scheme`) support: `int8-vllm`, `fp8-sgl`, `int8-q8f`, `fp8-q8f`, `int8-torchao` + +#### Configuration Example + +```json +{ + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl", + "t5_quantized_ckpt": "/path/to/t5_quantized_model" // Optional +} +``` + +> 💡 **Tip**: When a T5 quantized model exists in the script's specified `model_path` (such as `models_t5_umt5-xxl-enc-fp8.pth` or `models_t5_umt5-xxl-enc-int8.pth`), `t5_quantized_ckpt` doesn't need to be specified separately. + +### CLIP Model Quantization + +#### Supported Quantization Modes + +CLIP quantization modes (`clip_quant_scheme`) support: `int8-vllm`, `fp8-sgl`, `int8-q8f`, `fp8-q8f`, `int8-torchao` + +#### Configuration Example + +```json +{ + "clip_quantized": true, + "clip_quant_scheme": "fp8-sgl", + "clip_quantized_ckpt": "/path/to/clip_quantized_model" // Optional +} +``` + +> 💡 **Tip**: When a CLIP quantized model exists in the script's specified `model_path` (such as `models_clip_open-clip-xlm-roberta-large-vit-huge-14-fp8.pth` or `models_clip_open-clip-xlm-roberta-large-vit-huge-14-int8.pth`), `clip_quantized_ckpt` doesn't need to be specified separately. + +### Performance Optimization Strategy + +If memory is insufficient, you can combine parameter offloading to further reduce memory usage. Refer to [Parameter Offload Documentation](../method_tutorials/offload.md): + +> - **Wan2.1 Configuration**: Refer to [offload config files](https://github.com/ModelTC/LightX2V/tree/main/configs/offload) +> - **Wan2.2 Configuration**: Refer to [wan22 config files](https://github.com/ModelTC/LightX2V/tree/main/configs/wan22) with `4090` suffix + +--- + +## 📚 Related Resources + +### Configuration File Examples +- [INT8 Quantization Config](https://github.com/ModelTC/LightX2V/blob/main/configs/quantization/wan_i2v.json) +- [Q8F Quantization Config](https://github.com/ModelTC/LightX2V/blob/main/configs/quantization/wan_i2v_q8f.json) +- [TorchAO Quantization Config](https://github.com/ModelTC/LightX2V/blob/main/configs/quantization/wan_i2v_torchao.json) + +### Run Scripts +- [Quantization Inference Scripts](https://github.com/ModelTC/LightX2V/tree/main/scripts/quantization) + +### Tool Documentation +- [Quantization Tool Documentation](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md) +- [LightCompress Quantization Documentation](https://github.com/ModelTC/llmc/blob/main/docs/zh_cn/source/backend/lightx2v.md) + +### Model Repositories +- [Wan2.1-LightX2V Quantized Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan2.2-LightX2V Quantized Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) +- [Encoders Quantized Models](https://huggingface.co/lightx2v/Encoders-Lightx2v) + +--- + +Through this document, you should be able to: + +✅ Understand quantization schemes supported by LightX2V +✅ Select appropriate quantization strategies based on hardware +✅ Correctly configure quantization parameters +✅ Obtain and use quantized models +✅ Optimize inference performance and memory usage + +If you have other questions, feel free to ask in [GitHub Issues](https://github.com/ModelTC/LightX2V/issues). diff --git a/docs/EN/source/method_tutorials/step_distill.md b/docs/EN/source/method_tutorials/step_distill.md new file mode 100644 index 0000000..023a30b --- /dev/null +++ b/docs/EN/source/method_tutorials/step_distill.md @@ -0,0 +1,183 @@ +# Step Distillation + +Step distillation is an important optimization technique in LightX2V. By training distilled models, it significantly reduces inference steps from the original 40-50 steps to **4 steps**, dramatically improving inference speed while maintaining video quality. LightX2V implements step distillation along with CFG distillation to further enhance inference speed. + +## 🔍 Technical Principle + +### DMD Distillation + +The core technology of step distillation is [DMD Distillation](https://arxiv.org/abs/2311.18828). The DMD distillation framework is shown in the following diagram: + +
    +DMD Distillation Framework +
    + +The core idea of DMD distillation is to minimize the KL divergence between the output distributions of the distilled model and the original model: + +$$ +\begin{aligned} +D_{KL}\left(p_{\text{fake}} \; \| \; p_{\text{real}} \right) &= \mathbb{E}{x\sim p\text{fake}}\left(\log\left(\frac{p_\text{fake}(x)}{p_\text{real}(x)}\right)\right)\\ +&= \mathbb{E}{\substack{ +z \sim \mathcal{N}(0; \mathbf{I}) \\ +x = G_\theta(z) +}}-\big(\log~p_\text{real}(x) - \log~p_\text{fake}(x)\big). +\end{aligned} +$$ + +Since directly computing the probability density is nearly impossible, DMD distillation instead computes the gradient of this KL divergence: + +$$ +\begin{aligned} +\nabla_\theta D_{KL} +&= \mathbb{E}{\substack{ +z \sim \mathcal{N}(0; \mathbf{I}) \\ +x = G_\theta(z) +} } \Big[- +\big( +s_\text{real}(x) - s_\text{fake}(x)\big) +\hspace{.5mm} \frac{dG}{d\theta} +\Big], +\end{aligned} +$$ + +where $s_\text{real}(x) =\nabla_{x} \text{log}~p_\text{real}(x)$ and $s_\text{fake}(x) =\nabla_{x} \text{log}~p_\text{fake}(x)$ are score functions. Score functions can be computed by the model. Therefore, DMD distillation maintains three models in total: + +- `real_score`, computes the score of the real distribution; since the real distribution is fixed, DMD distillation uses the original model with fixed weights as its score function; +- `fake_score`, computes the score of the fake distribution; since the fake distribution is constantly updated, DMD distillation initializes it with the original model and fine-tunes it to learn the output distribution of the generator; +- `generator`, the student model, guided by computing the gradient of the KL divergence between `real_score` and `fake_score`. + +> References: +> 1. [DMD (One-step Diffusion with Distribution Matching Distillation)](https://arxiv.org/abs/2311.18828) +> 2. [DMD2 (Improved Distribution Matching Distillation for Fast Image Synthesis)](https://arxiv.org/abs/2405.14867) + +### Self-Forcing + +DMD distillation technology is designed for image generation. The step distillation in LightX2V is implemented based on [Self-Forcing](https://github.com/guandeh17/Self-Forcing) technology. The overall implementation of Self-Forcing is similar to DMD, but following DMD2, it removes the regression loss and uses ODE initialization instead. Additionally, Self-Forcing adds an important optimization for video generation tasks: + +Current DMD distillation-based methods struggle to generate videos in one step. Self-Forcing selects one timestep for optimization each time, with the generator computing gradients only at this step. This approach significantly improves Self-Forcing's training speed and enhances the denoising quality at intermediate timesteps, also improving its effectiveness. + +> References: +> 1. [Self-Forcing (Self Forcing: Bridging the Train-Test Gap in Autoregressive Video Diffusion)](https://arxiv.org/abs/2506.08009) + +### LightX2V + +Self-Forcing performs step distillation and CFG distillation on 1.3B autoregressive models. LightX2V extends it with a series of enhancements: + +1. **Larger Models**: Supports step distillation training for 14B models; +2. **More Model Types**: Supports standard bidirectional models and I2V model step distillation training; +3. **Better Results**: LightX2V uses high-quality prompts from approximately 50,000 data entries for training; + +For detailed implementation, refer to [Self-Forcing-Plus](https://github.com/GoatWu/Self-Forcing-Plus). + +## 🎯 Technical Features + +- **Inference Acceleration**: Reduces inference steps from 40-50 to 4 steps without CFG, achieving approximately **20-24x** speedup +- **Quality Preservation**: Maintains original video generation quality through distillation techniques +- **Strong Compatibility**: Supports both T2V and I2V tasks +- **Flexible Usage**: Supports loading complete step distillation models or loading step distillation LoRA on top of native models; compatible with int8/fp8 model quantization + +## 🛠️ Configuration Files + +### Basic Configuration Files + +Multiple configuration options are provided in the [configs/distill/](https://github.com/ModelTC/lightx2v/tree/main/configs/distill) directory: + +| Configuration File | Purpose | Model Address | +|-------------------|---------|---------------| +| [wan_t2v_distill_4step_cfg.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_t2v_distill_4step_cfg.json) | Load T2V 4-step distillation complete model | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-T2V-14B-StepDistill-CfgDistill-Lightx2v/blob/main/distill_models/distill_model.safetensors) | +| [wan_i2v_distill_4step_cfg.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_i2v_distill_4step_cfg.json) | Load I2V 4-step distillation complete model | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v/blob/main/distill_models/distill_model.safetensors) | +| [wan_t2v_distill_4step_cfg_lora.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_t2v_distill_4step_cfg_lora.json) | Load Wan-T2V model and step distillation LoRA | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-T2V-14B-StepDistill-CfgDistill-Lightx2v/blob/main/loras/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors) | +| [wan_i2v_distill_4step_cfg_lora.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_i2v_distill_4step_cfg_lora.json) | Load Wan-I2V model and step distillation LoRA | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v/blob/main/loras/Wan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors) | + +### Key Configuration Parameters + +- Since DMD distillation only trains a few fixed timesteps, we recommend using `LCM Scheduler` for inference. In [WanStepDistillScheduler](https://github.com/ModelTC/LightX2V/blob/main/lightx2v/models/schedulers/wan/step_distill/scheduler.py), `LCM Scheduler` is already fixed in use, requiring no user configuration. +- `infer_steps`, `denoising_step_list` and `sample_shift` are set to parameters matching those during training, and are generally not recommended for user modification. +- `enable_cfg` must be set to `false` (equivalent to setting `sample_guide_scale = 1`), otherwise the video may become completely blurred. +- `lora_configs` supports merging multiple LoRAs with different strengths. When `lora_configs` is not empty, the original `Wan2.1` model is loaded by default. Therefore, when using `lora_config` and wanting to use step distillation, please set the path and strength of the step distillation LoRA. + +```json +{ + "infer_steps": 4, // Inference steps + "denoising_step_list": [1000, 750, 500, 250], // Denoising timestep list + "sample_shift": 5, // Scheduler timestep shift + "enable_cfg": false, // Disable CFG for speed improvement + "lora_configs": [ // LoRA weights path (optional) + { + "path": "path/to/distill_lora.safetensors", + "strength": 1.0 + } + ] +} +``` + +## 📜 Usage + +### Model Preparation + +**Complete Model:** +Place the downloaded model (`distill_model.pt` or `distill_model.safetensors`) in the `distill_models/` folder under the Wan model root directory: + +- For T2V: `Wan2.1-T2V-14B/distill_models/` +- For I2V-480P: `Wan2.1-I2V-14B-480P/distill_models/` + +**LoRA:** + +1. Place the downloaded LoRA in any location +2. Modify the `lora_path` parameter in the configuration file to the LoRA storage path + +### Inference Scripts + +**T2V Complete Model:** + +```bash +bash scripts/wan/run_wan_t2v_distill_4step_cfg.sh +``` + +**I2V Complete Model:** + +```bash +bash scripts/wan/run_wan_i2v_distill_4step_cfg.sh +``` + +### Step Distillation LoRA Inference Scripts + +**T2V LoRA:** + +```bash +bash scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh +``` + +**I2V LoRA:** + +```bash +bash scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh +``` + +## 🔧 Service Deployment + +### Start Distillation Model Service + +Modify the startup command in [scripts/server/start_server.sh](https://github.com/ModelTC/lightx2v/blob/main/scripts/server/start_server.sh): + +```bash +python -m lightx2v.api_server \ + --model_cls wan2.1_distill \ + --task t2v \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg.json \ + --port 8000 \ + --nproc_per_node 1 +``` + +Run the service startup script: + +```bash +scripts/server/start_server.sh +``` + +For more details, see [Service Deployment](https://lightx2v-en.readthedocs.io/en/latest/deploy_guides/deploy_service.html). + +### Usage in Gradio Interface + +See [Gradio Documentation](https://lightx2v-en.readthedocs.io/en/latest/deploy_guides/deploy_gradio.html) diff --git a/docs/EN/source/method_tutorials/video_frame_interpolation.md b/docs/EN/source/method_tutorials/video_frame_interpolation.md new file mode 100644 index 0000000..f262f52 --- /dev/null +++ b/docs/EN/source/method_tutorials/video_frame_interpolation.md @@ -0,0 +1,246 @@ +# Video Frame Interpolation (VFI) + +> **Important Note**: Video frame interpolation is enabled through configuration files, not command-line parameters. Please add a `video_frame_interpolation` configuration block to your JSON config file to enable this feature. + +## Overview + +Video Frame Interpolation (VFI) is a technique that generates intermediate frames between existing frames to increase the frame rate and create smoother video playback. LightX2V integrates the RIFE (Real-Time Intermediate Flow Estimation) model to provide high-quality frame interpolation capabilities. + +## What is RIFE? + +RIFE is a state-of-the-art video frame interpolation method that uses optical flow estimation to generate intermediate frames. It can effectively: + +- Increase video frame rate (e.g., from 16 FPS to 32 FPS) +- Create smooth motion transitions +- Maintain high visual quality with minimal artifacts +- Process videos in real-time + +## Installation and Setup + +### Download RIFE Model + +First, download the RIFE model weights using the provided script: + +```bash +python tools/download_rife.py +``` + +For example, to download to the location: +```bash +python tools/download_rife.py /path/to/rife/train_log +``` + +This script will: +- Download RIFEv4.26 model from HuggingFace +- Extract and place the model files in the correct directory +- Clean up temporary files + +## Usage + +### Configuration File Setup + +Video frame interpolation is enabled through configuration files. Add a `video_frame_interpolation` configuration block to your JSON config file: + +```json +{ + "infer_steps": 50, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "fps": 16, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 32, + "model_path": "/path/to/rife/train_log" + } +} +``` + +### Command Line Interface + +Run inference using a configuration file that includes VFI settings: + +```bash +python lightx2v/infer.py \ + --model_cls wan2.1 \ + --task t2v \ + --model_path /path/to/model \ + --config_json ./configs/video_frame_interpolation/wan_t2v.json \ + --prompt "A beautiful sunset over the ocean" \ + --save_result_path ./output.mp4 +``` + +### Configuration Parameters + +In the `video_frame_interpolation` configuration block: + +- `algo`: Frame interpolation algorithm, currently supports "rife" +- `target_fps`: Target frame rate for the output video +- `model_path`: RIFE model path, typically "/path/to/rife/train_log" + +Other related configurations: +- `fps`: Source video frame rate (default 16) + +### Configuration Priority + +The system automatically handles video frame rate configuration with the following priority: +1. `video_frame_interpolation.target_fps` - If video frame interpolation is enabled, this frame rate is used as the output frame rate +2. `fps` (default 16) - If video frame interpolation is not enabled, this frame rate is used; it's always used as the source frame rate + + +## How It Works + +### Frame Interpolation Process + +1. **Source Video Generation**: The base model generates video frames at the source FPS +2. **Frame Analysis**: RIFE analyzes adjacent frames to estimate optical flow +3. **Intermediate Frame Generation**: New frames are generated between existing frames +4. **Temporal Smoothing**: The interpolated frames create smooth motion transitions + +### Technical Details + +- **Input Format**: ComfyUI Image tensors [N, H, W, C] in range [0, 1] +- **Output Format**: Interpolated ComfyUI Image tensors [M, H, W, C] in range [0, 1] +- **Processing**: Automatic padding and resolution handling +- **Memory Optimization**: Efficient GPU memory management + +## Example Configurations + +### Basic Frame Rate Doubling + +Create configuration file `wan_t2v_vfi_32fps.json`: + +```json +{ + "infer_steps": 50, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "seed": 42, + "sample_guide_scale": 6, + "enable_cfg": true, + "fps": 16, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 32, + "model_path": "/path/to/rife/train_log" + } +} +``` + +Run command: +```bash +python lightx2v/infer.py \ + --model_cls wan2.1 \ + --task t2v \ + --model_path ./models/wan2.1 \ + --config_json ./wan_t2v_vfi_32fps.json \ + --prompt "A cat playing in the garden" \ + --save_result_path ./output_32fps.mp4 +``` + +### Higher Frame Rate Enhancement + +Create configuration file `wan_i2v_vfi_60fps.json`: + +```json +{ + "infer_steps": 30, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "seed": 42, + "sample_guide_scale": 6, + "enable_cfg": true, + "fps": 16, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 60, + "model_path": "/path/to/rife/train_log" + } +} +``` + +Run command: +```bash +python lightx2v/infer.py \ + --model_cls wan2.1 \ + --task i2v \ + --model_path ./models/wan2.1 \ + --config_json ./wan_i2v_vfi_60fps.json \ + --image_path ./input.jpg \ + --prompt "Smooth camera movement" \ + --save_result_path ./output_60fps.mp4 +``` + +## Performance Considerations + +### Memory Usage + +- RIFE processing requires additional GPU memory +- Memory usage scales with video resolution and length +- Consider using lower resolutions for longer videos + +### Processing Time + +- Frame interpolation adds processing overhead +- Higher target frame rates require more computation +- Processing time is roughly proportional to the number of interpolated frames + +### Quality vs Speed Trade-offs + +- Higher interpolation ratios may introduce artifacts +- Optimal range: 2x to 4x frame rate increase +- For extreme interpolation (>4x), consider multiple passes + +## Best Practices + +### Optimal Use Cases + +- **Motion-heavy videos**: Benefit most from frame interpolation +- **Camera movements**: Smoother panning and zooming +- **Action sequences**: Reduced motion blur perception +- **Slow-motion effects**: Create fluid slow-motion videos + +### Recommended Settings + +- **Source FPS**: 16-24 FPS (generated by base model) +- **Target FPS**: 32-60 FPS (2x to 4x increase) +- **Resolution**: Up to 720p for best performance + +### Troubleshooting + +#### Common Issues + +1. **Out of Memory**: Reduce video resolution or target FPS +2. **Artifacts in output**: Lower the interpolation ratio +3. **Slow processing**: Check GPU memory and consider using CPU offloading + +#### Solutions + +Solve issues by modifying the configuration file: + +```json +{ + // For memory issues, use lower resolution + "target_height": 480, + "target_width": 832, + + // For quality issues, use moderate interpolation + "video_frame_interpolation": { + "target_fps": 24 // instead of 60 + }, + + // For performance issues, enable offloading + "cpu_offload": true +} +``` + +## Technical Implementation + +The RIFE integration in LightX2V includes: + +- **RIFEWrapper**: ComfyUI-compatible wrapper for RIFE model +- **Automatic Model Loading**: Seamless integration with the inference pipeline +- **Memory Optimization**: Efficient tensor management and GPU memory usage +- **Quality Preservation**: Maintains original video quality while adding frames diff --git a/docs/PAPERS_ZH_CN/.readthedocs.yaml b/docs/PAPERS_ZH_CN/.readthedocs.yaml new file mode 100644 index 0000000..784bfbe --- /dev/null +++ b/docs/PAPERS_ZH_CN/.readthedocs.yaml @@ -0,0 +1,17 @@ +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-20.04 + tools: + python: "3.10" + +formats: + - epub + +sphinx: + configuration: docs/PAPERS_ZH_CN/source/conf.py + +python: + install: + - requirements: requirements-docs.txt diff --git a/docs/PAPERS_ZH_CN/Makefile b/docs/PAPERS_ZH_CN/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/PAPERS_ZH_CN/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/PAPERS_ZH_CN/make.bat b/docs/PAPERS_ZH_CN/make.bat new file mode 100644 index 0000000..dc1312a --- /dev/null +++ b/docs/PAPERS_ZH_CN/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/PAPERS_ZH_CN/source/conf.py b/docs/PAPERS_ZH_CN/source/conf.py new file mode 100644 index 0000000..b9d499d --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/conf.py @@ -0,0 +1,122 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. + +import logging +import os +import sys +from typing import List + +import sphinxcontrib.redoc +from sphinx.ext import autodoc + +logger = logging.getLogger(__name__) +sys.path.append(os.path.abspath("../..")) + +# -- Project information ----------------------------------------------------- + +project = "Lightx2v" +copyright = "2025, Lightx2v Team" +author = "the Lightx2v Team" + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.napoleon", + "sphinx.ext.viewcode", + "sphinx.ext.intersphinx", + "sphinx_copybutton", + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "myst_parser", + "sphinxarg.ext", + "sphinxcontrib.redoc", + "sphinxcontrib.openapi", +] + +html_static_path = ["_static"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns: List[str] = ["**/*.template.rst"] + +# Exclude the prompt "$" when copying code +copybutton_prompt_text = r"\$ " +copybutton_prompt_is_regexp = True + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_title = project +html_theme = "sphinx_book_theme" +# html_theme = 'sphinx_rtd_theme' +html_logo = "../../../assets/img_lightx2v.png" +html_theme_options = { + "path_to_docs": "docs/ZH_CN/source", + "repository_url": "https://github.com/ModelTC/lightx2v", + "use_repository_button": True, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['_static'] + + +# Generate additional rst documentation here. +def setup(app): + # from docs.source.generate_examples import generate_examples + # generate_examples() + pass + + +# Mock out external dependencies here. +autodoc_mock_imports = [ + "cpuinfo", + "torch", + "transformers", + "psutil", + "prometheus_client", + "sentencepiece", + "lightllmnumpy", + "tqdm", + "tensorizer", +] + +for mock_target in autodoc_mock_imports: + if mock_target in sys.modules: + logger.info( + "Potentially problematic mock target (%s) found; autodoc_mock_imports cannot mock modules that have already been loaded into sys.modules when the sphinx build starts.", + mock_target, + ) + + +class MockedClassDocumenter(autodoc.ClassDocumenter): + """Remove note about base class when a class is derived from object.""" + + def add_line(self, line: str, source: str, *lineno: int) -> None: + if line == " Bases: :py:class:`object`": + return + super().add_line(line, source, *lineno) + + +autodoc.ClassDocumenter = MockedClassDocumenter + +navigation_with_keys = False diff --git a/docs/PAPERS_ZH_CN/source/index.rst b/docs/PAPERS_ZH_CN/source/index.rst new file mode 100644 index 0000000..cb4414a --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/index.rst @@ -0,0 +1,53 @@ +欢迎了解 Lightx2v 论文收藏集! +================== + +.. figure:: ../../../assets/img_lightx2v.png + :width: 80% + :align: center + :alt: Lightx2v + :class: no-scaled-link + +.. raw:: html + +
    + + License + Ask DeepWiki + Doc + Doc + Papers + Docker + +
    + +
    + LightX2V: 一个轻量级的视频生成推理框架 +
    + + +LightX2V 是一个轻量级的视频生成推理框架。这里是我们维护的一个视频生成推理加速相关的论文收藏集,帮助你快速了解视频生成推理加速相关的经典方法和最新进展。 + +GitHub: https://github.com/ModelTC/lightx2v + +HuggingFace: https://huggingface.co/lightx2v + +论文收藏集 +------------- + +.. toctree:: + :maxdepth: 1 + :caption: 论文分类 + + 图像视频生成基础 + 开源模型 + 模型量化 + 特征缓存 + 注意力机制 + 参数卸载 + 并行推理 + 变分辨率推理 + 步数蒸馏 + 自回归模型 + vae加速 + prompt增强 + 强化学习 diff --git a/docs/PAPERS_ZH_CN/source/papers/RL.md b/docs/PAPERS_ZH_CN/source/papers/RL.md new file mode 100644 index 0000000..0081f92 --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/RL.md @@ -0,0 +1,3 @@ +# 强化学习 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/attention.md b/docs/PAPERS_ZH_CN/source/papers/attention.md new file mode 100644 index 0000000..a17d295 --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/attention.md @@ -0,0 +1,113 @@ +# 注意力机制 + +### Sparse VideoGen: Accelerating Video Diffusion Transformers with Spatial-Temporal Sparsity + +[paper](https://arxiv.org/abs/2502.01776) | [code](https://github.com/svg-project/Sparse-VideoGen) + +### Sparse VideoGen2: Accelerate Video Generation with Sparse Attention via Semantic-Aware Permutation + +[paper](https://arxiv.org/abs/2505.18875) + +### Training-free and Adaptive Sparse Attention for Efficient Long Video Generation + +[paper](https://arxiv.org/abs/2502.21079) + +### DSV: Exploiting Dynamic Sparsity to Accelerate Large-Scale Video DiT Training + +[paper](https://arxiv.org/abs/2502.07590) + +### MMInference: Accelerating Pre-filling for Long-Context VLMs via Modality-Aware Permutation Sparse Attention + +[paper](https://github.com/microsoft/MInference) + +### FPSAttention: Training-Aware FP8 and Sparsity Co-Design for Fast Video Diffusion + +[paper](https://arxiv.org/abs/2506.04648) + +### VORTA: Efficient Video Diffusion via Routing Sparse Attention + +[paper](https://arxiv.org/abs/2505.18809) + +### Training-Free Efficient Video Generation via Dynamic Token Carving + +[paper](https://arxiv.org/abs/2505.16864) + +### RainFusion: Adaptive Video Generation Acceleration via Multi-Dimensional Visual Redundancy + +[paper](https://arxiv.org/abs/2505.21036) + +### Radial Attention: O(nlogn) Sparse Attention with Energy Decay for Long Video Generation + +[paper](https://arxiv.org/abs/2506.19852) + +### VMoBA: Mixture-of-Block Attention for Video Diffusion Models + +[paper](https://arxiv.org/abs/2506.23858) + +### SpargeAttention: Accurate and Training-free Sparse Attention Accelerating Any Model Inference + +[paper](https://arxiv.org/abs/2502.18137) | [code](https://github.com/thu-ml/SpargeAttn) + +### Fast Video Generation with Sliding Tile Attention + +[paper](https://arxiv.org/abs/2502.04507) | [code](https://github.com/hao-ai-lab/FastVideo) + +### PAROAttention: Pattern-Aware ReOrdering for Efficient Sparse and Quantized Attention in Visual Generation Models + +[paper](https://arxiv.org/abs/2506.16054) + +### Generalized Neighborhood Attention: Multi-dimensional Sparse Attention at the Speed of Light + +[paper](https://arxiv.org/abs/2504.16922) + +### Astraea: A GPU-Oriented Token-wise Acceleration Framework for Video Diffusion Transformers + +[paper](https://arxiv.org/abs/2506.05096) + +### ∇NABLA: Neighborhood Adaptive Block-Level Attention + +[paper](https://arxiv.org/abs/2507.13546v1) [code](https://github.com/gen-ai-team/Wan2.1-NABLA) + +### Compact Attention: Exploiting Structured Spatio-Temporal Sparsity for Fast Video Generation + +[paper](https://arxiv.org/abs/2508.12969) + +### A Survey of Efficient Attention Methods: Hardware-efficient, Sparse, Compact, and Linear Attention + +[paper](https://attention-survey.github.io/files/Attention_Survey.pdf) + +### Bidirectional Sparse Attention for Faster Video Diffusion Training + +[paper](https://arxiv.org/abs/2509.01085) + +### Mixture of Contexts for Long Video Generation + +[paper](https://arxiv.org/abs/2508.21058) + +### LoViC: Efficient Long Video Generation with Context Compression + +[paper](https://arxiv.org/abs/2507.12952) + +### MagiAttention: A Distributed Attention Towards Linear Scalability for Ultra-Long Context, Heterogeneous Mask Training + +[paper](https://sandai-org.github.io/MagiAttention/blog/) [code](https://github.com/SandAI-org/MagiAttention) + +### DraftAttention: Fast Video Diffusion via Low-Resolution Attention Guidance + +[paper](https://arxiv.org/abs/2505.14708) [code](https://github.com/shawnricecake/draft-attention) + +### XAttention: Block Sparse Attention with Antidiagonal Scoring + +[paper](https://arxiv.org/abs/2503.16428) [code](https://github.com/mit-han-lab/x-attention) + +### VSA: Faster Video Diffusion with Trainable Sparse Attention + +[paper](https://arxiv.org/abs/2505.13389) [code](https://github.com/hao-ai-lab/FastVideo) + +### QuantSparse: Comprehensively Compressing Video Diffusion Transformer with Model Quantization and Attention Sparsification + +[paper](https://arxiv.org/abs/2509.23681) + +### SLA: Beyond Sparsity in Diffusion Transformers via Fine-Tunable Sparse-Linear Attention + +[paper](https://arxiv.org/abs/2509.24006) diff --git a/docs/PAPERS_ZH_CN/source/papers/autoregressive.md b/docs/PAPERS_ZH_CN/source/papers/autoregressive.md new file mode 100644 index 0000000..27c2d1d --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/autoregressive.md @@ -0,0 +1,3 @@ +# 自回归模型 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/cache.md b/docs/PAPERS_ZH_CN/source/papers/cache.md new file mode 100644 index 0000000..661ef10 --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/cache.md @@ -0,0 +1,3 @@ +# 特征缓存 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/changing_resolution.md b/docs/PAPERS_ZH_CN/source/papers/changing_resolution.md new file mode 100644 index 0000000..175eea9 --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/changing_resolution.md @@ -0,0 +1,3 @@ +# 变分辨率推理 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/generation_basics.md b/docs/PAPERS_ZH_CN/source/papers/generation_basics.md new file mode 100644 index 0000000..6d5b97f --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/generation_basics.md @@ -0,0 +1,3 @@ +# 图像视频生成基础 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/models.md b/docs/PAPERS_ZH_CN/source/papers/models.md new file mode 100644 index 0000000..de9e00c --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/models.md @@ -0,0 +1,276 @@ + +
    + +# Open-Source Models + +📢: Collections of Awesome Open-Source Model Resources. + +
    + + +## 📚 *Contents* + +- Open-Source Models + - [Foundation Models](#foundation-models) + - [World Models](#world-models) + + +### Foundation Models: + +- **Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets**, Technical Report 2023. + + *Andreas Blattmann, Tim Dockhorn, Sumith Kulal, Daniel Mendelevitch, Maciej Kilian, et al.* + + [[Paper](https://arxiv.org/abs/2311.15127)] [[Code](https://github.com/Stability-AI/generative-models)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/UNet-brown) + +
    BibTex + + ```text + @article{blattmann2023stable, + title={Stable video diffusion: Scaling latent video diffusion models to large datasets}, + author={Blattmann, Andreas and Dockhorn, Tim and Kulal, Sumith and Mendelevitch, Daniel and Kilian, Maciej and Lorenz, Dominik and Levi, Yam and English, Zion and Voleti, Vikram and Letts, Adam and others}, + journal={arXiv preprint arXiv:2311.15127}, + year={2023} + } + ``` +
    + +- **Wan: Open and Advanced Large-Scale Video Generative Models**, Technical Report 2025. + + *Team Wan, Ang Wang, Baole Ai, Bin Wen, Chaojie Mao, Chen-Wei Xie, et al.* + + [[Paper](https://arxiv.org/abs/2503.20314)] [[Code](https://github.com/Wan-Video/Wan2.1)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/DIT-brown) + +
    BibTex + + ```text + @article{wan2025wan, + title={Wan: Open and advanced large-scale video generative models}, + author={Wan, Team and Wang, Ang and Ai, Baole and Wen, Bin and Mao, Chaojie and Xie, Chen-Wei and Chen, Di and Yu, Feiwu and Zhao, Haiming and Yang, Jianxiao and others}, + journal={arXiv preprint arXiv:2503.20314}, + year={2025} + } + ``` +
    + +- **HunyuanVideo: A Systematic Framework For Large Video Generation Model**, Technical Report 2024. + + *Weijie Kong, Qi Tian, Zijian Zhang, Rox Min, Zuozhuo Dai, Jin Zhou, et al.* + + [[Paper](https://arxiv.org/abs/2412.03603)] [[Code](https://github.com/Tencent-Hunyuan/HunyuanVideo)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/DIT-brown) + +
    BibTex + + ```text + @article{kong2024hunyuanvideo, + title={Hunyuanvideo: A systematic framework for large video generative models}, + author={Kong, Weijie and Tian, Qi and Zhang, Zijian and Min, Rox and Dai, Zuozhuo and Zhou, Jin and Xiong, Jiangfeng and Li, Xin and Wu, Bo and Zhang, Jianwei and others}, + journal={arXiv preprint arXiv:2412.03603}, + year={2024} + } + ``` +
    + +- **CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer**, ICLR 2025. + + *Zhuoyi Yang, Jiayan Teng, Wendi Zheng, Ming Ding, Shiyu Huang, Jiazheng Xu, et al.* + + [[Paper](https://arxiv.org/abs/2408.06072)] [[Code](https://github.com/zai-org/CogVideo)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/DIT-brown) + +
    BibTex + + ```text + @article{yang2024cogvideox, + title={Cogvideox: Text-to-video diffusion models with an expert transformer}, + author={Yang, Zhuoyi and Teng, Jiayan and Zheng, Wendi and Ding, Ming and Huang, Shiyu and Xu, Jiazheng and Yang, Yuanming and Hong, Wenyi and Zhang, Xiaohan and Feng, Guanyu and others}, + journal={arXiv preprint arXiv:2408.06072}, + year={2024} + } + ``` +
    + + +- **SkyReels V2: Infinite-Length Film Generative Model**, Technical Report 2025. + + *Guibin Chen, Dixuan Lin, Jiangping Yang, Chunze Lin, Junchen Zhu, Mingyuan Fan, et al.* + + [[Paper](https://arxiv.org/abs/2504.13074)] [[Code](https://github.com/SkyworkAI/SkyReels-V2)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/DIT-brown) + +
    BibTex + + ```text + @misc{chen2025skyreelsv2infinitelengthfilmgenerative, + title={SkyReels-V2: Infinite-length Film Generative Model}, + author={Guibin Chen and Dixuan Lin and Jiangping Yang and Chunze Lin and Junchen Zhu and Mingyuan Fan and Hao Zhang and Sheng Chen and Zheng Chen and Chengcheng Ma and Weiming Xiong and Wei Wang and Nuo Pang and Kang Kang and Zhiheng Xu and Yuzhe Jin and Yupeng Liang and Yubing Song and Peng Zhao and Boyuan Xu and Di Qiu and Debang Li and Zhengcong Fei and Yang Li and Yahui Zhou}, + year={2025}, + eprint={2504.13074}, + archivePrefix={arXiv}, + primaryClass={cs.CV}, + url={https://arxiv.org/abs/2504.13074}, + } + ``` +
    + + +- **Open-Sora: Democratizing Efficient Video Production for All**, Technical Report 2025. + + *Xiangyu Peng, Zangwei Zheng, Chenhui Shen, Tom Young, Xinying Guo, et al.* + + [[Paper](https://arxiv.org/abs/2503.09642v2)] [[Code](https://github.com/hpcaitech/Open-Sora)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/DIT-brown) ![](https://img.shields.io/badge/V2V-orange) + +
    BibTex + + ```text + @article{peng2025open, + title={Open-sora 2.0: Training a commercial-level video generation model in $200 k}, + author={Peng, Xiangyu and Zheng, Zangwei and Shen, Chenhui and Young, Tom and Guo, Xinying and Wang, Binluo and Xu, Hang and Liu, Hongxin and Jiang, Mingyan and Li, Wenjun and others}, + journal={arXiv preprint arXiv:2503.09642}, + year={2025} + } + ``` +
    + +- **Pyramidal Flow Matching for Efficient Video Generative Modeling**, Technical Report 2024. + + *Yang Jin, Zhicheng Sun, Ningyuan Li, Kun Xu, Kun Xu, et al.* + + [[Paper](https://arxiv.org/abs/2410.05954)] [[Code](https://github.com/jy0205/Pyramid-Flow)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/AR-brown) +
    BibTex + + ```text + @article{jin2024pyramidal, + title={Pyramidal flow matching for efficient video generative modeling}, + author={Jin, Yang and Sun, Zhicheng and Li, Ningyuan and Xu, Kun and Jiang, Hao and Zhuang, Nan and Huang, Quzhe and Song, Yang and Mu, Yadong and Lin, Zhouchen}, + journal={arXiv preprint arXiv:2410.05954}, + year={2024} + } + ``` +
    + +- **MAGI-1: Autoregressive Video Generation at Scale**, Technical Report 2025. + + *Sand.ai, Hansi Teng, Hongyu Jia, Lei Sun, Lingzhi Li, Maolin Li, Mingqiu Tang, et al.* + + [[Paper](https://arxiv.org/pdf/2505.13211)] [[Code](https://github.com/SandAI-org/Magi-1)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/AR-brown) ![](https://img.shields.io/badge/V2V-orange) +
    BibTex + + ```text + @article{teng2025magi, + title={MAGI-1: Autoregressive Video Generation at Scale}, + author={Teng, Hansi and Jia, Hongyu and Sun, Lei and Li, Lingzhi and Li, Maolin and Tang, Mingqiu and Han, Shuai and Zhang, Tianning and Zhang, WQ and Luo, Weifeng and others}, + journal={arXiv preprint arXiv:2505.13211}, + year={2025} + } + ``` +
    + +- **From Slow Bidirectional to Fast Autoregressive Video Diffusion Models**, CVPR 2025. + + *Tianwei Yin, Qiang Zhang, Richard Zhang, William T. Freeman, Fredo Durand, et al.* + + [[Paper](http://arxiv.org/abs/2412.07772)] [[Code](https://github.com/tianweiy/CausVid)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/AR-brown) +
    BibTex + + ```text + @inproceedings{yin2025slow, + title={From slow bidirectional to fast autoregressive video diffusion models}, + author={Yin, Tianwei and Zhang, Qiang and Zhang, Richard and Freeman, William T and Durand, Fredo and Shechtman, Eli and Huang, Xun}, + booktitle={Proceedings of the Computer Vision and Pattern Recognition Conference}, + pages={22963--22974}, + year={2025} + } + ``` +
    + +- **Packing Input Frame Context in Next-Frame Prediction Models for Video Generation**, arxiv 2025. + + *Lvmin Zhang, Maneesh Agrawala.* + + [[Paper](https://arxiv.org/abs/2504.12626)] [[Code](https://github.com/lllyasviel/FramePack)] ![](https://img.shields.io/badge/T2V-blue) ![](https://img.shields.io/badge/I2V-green) ![](https://img.shields.io/badge/AR-brown) +
    BibTex + + ```text + @article{zhang2025packing, + title={Packing input frame context in next-frame prediction models for video generation}, + author={Zhang, Lvmin and Agrawala, Maneesh}, + journal={arXiv preprint arXiv:2504.12626}, + year={2025} + } + ``` +
    + +### World Models: + +- **Matrix-Game 2.0: An Open-Source, Real-Time, and Streaming Interactive World Model**, Technical Report 2025. + + *Xianglong He, Chunli Peng, Zexiang Liu, Boyang Wang, Yifan Zhang, et al.* + + [[Paper](https://arxiv.org/abs/2508.13009)] [[Code](https://matrix-game-v2.github.io/)] ![](https://img.shields.io/badge/keyboard-blue) ![](https://img.shields.io/badge/mouse-green) ![](https://img.shields.io/badge/DIT-brown) +
    BibTex + + ```text + @article{he2025matrix, + title={Matrix-Game 2.0: An Open-Source, Real-Time, and Streaming Interactive World Model}, + author={He, Xianglong and Peng, Chunli and Liu, Zexiang and Wang, Boyang and Zhang, Yifan and Cui, Qi and Kang, Fei and Jiang, Biao and An, Mengyin and Ren, Yangyang and others}, + journal={arXiv preprint arXiv:2508.13009}, + year={2025} + } + ``` +
    + +- **HunyuanWorld 1.0: Generating Immersive, Explorable, and Interactive 3D Worlds from Words or Pixels**, Technical Report 2025. + + *HunyuanWorld Team, Zhenwei Wang, Yuhao Liu, Junta Wu, Zixiao Gu, Haoyuan Wang, et al.* + + [[Paper](https://arxiv.org/abs/2507.21809)] [[Code](https://github.com/Tencent-Hunyuan/HunyuanWorld-1.0)] ![](https://img.shields.io/badge/image-blue) ![](https://img.shields.io/badge/text-green) ![](https://img.shields.io/badge/DIT-brown) +
    BibTex + + ```text + @article{team2025hunyuanworld, + title={HunyuanWorld 1.0: Generating Immersive, Explorable, and Interactive 3D Worlds from Words or Pixels}, + author={Team, HunyuanWorld and Wang, Zhenwei and Liu, Yuhao and Wu, Junta and Gu, Zixiao and Wang, Haoyuan and Zuo, Xuhui and Huang, Tianyu and Li, Wenhuan and Zhang, Sheng and others}, + journal={arXiv preprint arXiv:2507.21809}, + year={2025} + } + ``` +
    + +- **Cosmos-Drive-Dreams: Scalable Synthetic Driving Data Generation with World Foundation Models**, Technical Report 2025. + + *Xuanchi Ren, Yifan Lu, Tianshi Cao, Ruiyuan Gao, Shengyu Huang, Amirmojtaba Sabour, et al.* + + [[Paper](https://arxiv.org/abs/2506.09042)] [[Code](https://research.nvidia.com/labs/toronto-ai/cosmos_drive_dreams)] ![](https://img.shields.io/badge/drive-blue) ![](https://img.shields.io/badge/DIT-brown) +
    BibTex + + ```text + @article{ren2025cosmos, + title={Cosmos-Drive-Dreams: Scalable Synthetic Driving Data Generation with World Foundation Models}, + author={Ren, Xuanchi and Lu, Yifan and Cao, Tianshi and Gao, Ruiyuan and Huang, Shengyu and Sabour, Amirmojtaba and Shen, Tianchang and Pfaff, Tobias and Wu, Jay Zhangjie and Chen, Runjian and others}, + journal={arXiv preprint arXiv:2506.09042}, + year={2025} + } + ``` +
    + +- **Genie 3: A new frontier for world models**, Blog 2025. + + *Google DeepMind* + + [[Blog](https://deepmind.google/discover/blog/genie-3-a-new-frontier-for-world-models/)] ![](https://img.shields.io/badge/event-blue) ![](https://img.shields.io/badge/DIT-brown) + +- **GAIA-2: A Controllable Multi-View Generative World Model for Autonomous Driving.**, Technical Report 2025. + + *Lloyd Russell, Anthony Hu, Lorenzo Bertoni, George Fedoseev, Jamie Shotton, et al.* + + [[Paper](https://arxiv.org/abs/2503.20523)] [[Code](https://github.com/Tencent-Hunyuan/HunyuanWorld-1.0)] ![](https://img.shields.io/badge/drive-blue) ![](https://img.shields.io/badge/transformer-brown) +
    BibTex + + ```text + @article{russell2025gaia, + title={Gaia-2: A controllable multi-view generative world model for autonomous driving}, + author={Russell, Lloyd and Hu, Anthony and Bertoni, Lorenzo and Fedoseev, George and Shotton, Jamie and Arani, Elahe and Corrado, Gianluca}, + journal={arXiv preprint arXiv:2503.20523}, + year={2025} + } + ``` +
    diff --git a/docs/PAPERS_ZH_CN/source/papers/offload.md b/docs/PAPERS_ZH_CN/source/papers/offload.md new file mode 100644 index 0000000..302f0b6 --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/offload.md @@ -0,0 +1,3 @@ +# 参数卸载 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/parallel.md b/docs/PAPERS_ZH_CN/source/papers/parallel.md new file mode 100644 index 0000000..b68de1c --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/parallel.md @@ -0,0 +1,3 @@ +# 并行推理 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/prompt_enhance.md b/docs/PAPERS_ZH_CN/source/papers/prompt_enhance.md new file mode 100644 index 0000000..d51d77b --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/prompt_enhance.md @@ -0,0 +1,3 @@ +# prompt增强 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/quantization.md b/docs/PAPERS_ZH_CN/source/papers/quantization.md new file mode 100644 index 0000000..d29d8f6 --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/quantization.md @@ -0,0 +1,3 @@ +# 模型量化 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/step_distill.md b/docs/PAPERS_ZH_CN/source/papers/step_distill.md new file mode 100644 index 0000000..e5e772f --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/step_distill.md @@ -0,0 +1,3 @@ +# 步数蒸馏 + +xxx diff --git a/docs/PAPERS_ZH_CN/source/papers/vae.md b/docs/PAPERS_ZH_CN/source/papers/vae.md new file mode 100644 index 0000000..914d54d --- /dev/null +++ b/docs/PAPERS_ZH_CN/source/papers/vae.md @@ -0,0 +1,3 @@ +# vae加速 + +xxx diff --git a/docs/ZH_CN/.readthedocs.yaml b/docs/ZH_CN/.readthedocs.yaml new file mode 100644 index 0000000..c3677c6 --- /dev/null +++ b/docs/ZH_CN/.readthedocs.yaml @@ -0,0 +1,17 @@ +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-20.04 + tools: + python: "3.10" + +formats: + - epub + +sphinx: + configuration: docs/ZH_CN/source/conf.py + +python: + install: + - requirements: requirements-docs.txt diff --git a/docs/ZH_CN/Makefile b/docs/ZH_CN/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/ZH_CN/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/ZH_CN/make.bat b/docs/ZH_CN/make.bat new file mode 100644 index 0000000..dc1312a --- /dev/null +++ b/docs/ZH_CN/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/ZH_CN/source/conf.py b/docs/ZH_CN/source/conf.py new file mode 100644 index 0000000..659c313 --- /dev/null +++ b/docs/ZH_CN/source/conf.py @@ -0,0 +1,128 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. + +import logging +import os +import sys +from typing import List + +import sphinxcontrib.redoc +from sphinx.ext import autodoc + +logger = logging.getLogger(__name__) +sys.path.append(os.path.abspath("../..")) + +# -- Project information ----------------------------------------------------- + +project = "Lightx2v" +copyright = "2025, Lightx2v Team" +author = "the Lightx2v Team" + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.napoleon", + "sphinx.ext.viewcode", + "sphinx.ext.intersphinx", + "sphinx_copybutton", + "sphinx.ext.autodoc", + "sphinx.ext.autosummary", + "sphinx.ext.mathjax", + "myst_parser", + "sphinxarg.ext", + "sphinxcontrib.redoc", + "sphinxcontrib.openapi", +] + +myst_enable_extensions = [ + "dollarmath", + "amsmath", +] + +html_static_path = ["_static"] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns: List[str] = ["**/*.template.rst"] + +# Exclude the prompt "$" when copying code +copybutton_prompt_text = r"\$ " +copybutton_prompt_is_regexp = True + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_title = project +html_theme = "sphinx_book_theme" +# html_theme = 'sphinx_rtd_theme' +html_logo = "../../../assets/img_lightx2v.png" +html_theme_options = { + "path_to_docs": "docs/ZH_CN/source", + "repository_url": "https://github.com/ModelTC/lightx2v", + "use_repository_button": True, +} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['_static'] + + +# Generate additional rst documentation here. +def setup(app): + # from docs.source.generate_examples import generate_examples + # generate_examples() + pass + + +# Mock out external dependencies here. +autodoc_mock_imports = [ + "cpuinfo", + "torch", + "transformers", + "psutil", + "prometheus_client", + "sentencepiece", + "lightllmnumpy", + "tqdm", + "tensorizer", +] + +for mock_target in autodoc_mock_imports: + if mock_target in sys.modules: + logger.info( + "Potentially problematic mock target (%s) found; autodoc_mock_imports cannot mock modules that have already been loaded into sys.modules when the sphinx build starts.", + mock_target, + ) + + +class MockedClassDocumenter(autodoc.ClassDocumenter): + """Remove note about base class when a class is derived from object.""" + + def add_line(self, line: str, source: str, *lineno: int) -> None: + if line == " Bases: :py:class:`object`": + return + super().add_line(line, source, *lineno) + + +autodoc.ClassDocumenter = MockedClassDocumenter + +navigation_with_keys = False diff --git a/docs/ZH_CN/source/deploy_guides/deploy_comfyui.md b/docs/ZH_CN/source/deploy_guides/deploy_comfyui.md new file mode 100644 index 0000000..9355731 --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/deploy_comfyui.md @@ -0,0 +1,25 @@ +# ComfyUI 部署 + +## ComfyUI-Lightx2vWrapper + +LightX2V 的官方 ComfyUI 集成节点已经发布在独立仓库中,提供了完整的模块化配置系统和优化功能。 + +### 项目地址 + +- GitHub: [https://github.com/ModelTC/ComfyUI-Lightx2vWrapper](https://github.com/ModelTC/ComfyUI-Lightx2vWrapper) + +### 主要特性 + +- 模块化配置系统:为视频生成的各个方面提供独立节点 +- 支持文生视频(T2V)和图生视频(I2V)两种生成模式 +- 高级优化功能: + - TeaCache 加速(最高 3 倍加速) + - 量化支持(int8、fp8) + - CPU 卸载内存优化 + - 轻量级 VAE 选项 +- LoRA 支持:可链式组合多个 LoRA 模型 +- 多模型支持:wan2.1、hunyuan 等架构 + +### 安装和使用 + +请访问上述 GitHub 仓库查看详细的安装说明、使用教程和示例工作流。 diff --git a/docs/ZH_CN/source/deploy_guides/deploy_gradio.md b/docs/ZH_CN/source/deploy_guides/deploy_gradio.md new file mode 100644 index 0000000..a2f16b5 --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/deploy_gradio.md @@ -0,0 +1,241 @@ +# Gradio 部署指南 + +## 📖 概述 + +Lightx2v 是一个轻量级的视频推理和生成引擎,提供基于 Gradio 的 Web 界面,支持图像到视频(Image-to-Video)和文本到视频(Text-to-Video)两种生成模式。 + +对于Windows系统,我们提供了便捷的一键部署方式,支持自动环境配置和智能参数优化。详细操作请参考[一键启动Gradio](./deploy_local_windows.md/#一键启动gradio推荐)章节。 + +![Gradio中文界面](../../../../assets/figs/portabl_windows/pic_gradio_zh.png) + +## 📁 文件结构 + +``` +LightX2V/app/ +├── gradio_demo.py # 英文界面演示 +├── gradio_demo_zh.py # 中文界面演示 +├── run_gradio.sh # 启动脚本 +├── README.md # 说明文档 +├── outputs/ # 生成视频保存目录 +└── inference_logs.log # 推理日志 +``` + +本项目包含两个主要演示文件: +- `gradio_demo.py` - 英文界面版本 +- `gradio_demo_zh.py` - 中文界面版本 + +## 🚀 快速开始 + +### 环境要求 + +按照[快速开始文档](../getting_started/quickstart.md)安装环境 + +#### 推荐优化库配置 + +- ✅ [Flash attention](https://github.com/Dao-AILab/flash-attention) +- ✅ [Sage attention](https://github.com/thu-ml/SageAttention) +- ✅ [vllm-kernel](https://github.com/vllm-project/vllm) +- ✅ [sglang-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel) +- ✅ [q8-kernel](https://github.com/KONAKONA666/q8_kernels) (仅支持ADA架构的GPU) + +可根据需要,按照各算子的项目主页教程进行安装。 + +### 📥 模型下载 + +可参考[模型结构文档](../getting_started/model_structure.md)下载完整模型(包含量化和非量化版本)或仅下载量化/非量化版本。 + +#### wan2.1 模型目录结构 + +``` +models/ +├── wan2.1_i2v_720p_lightx2v_4step.safetensors # 原始精度 +├── wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors # FP8 量化 +├── wan2.1_i2v_720p_int8_lightx2v_4step.safetensors # INT8 量化 +├── wan2.1_i2v_720p_int8_lightx2v_4step_split # INT8 量化分block存储目录 +├── wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step_split # FP8 量化分block存储目录 +├── 其他权重(例如t2v) +├── t5/clip/xlm-roberta-large/google # text和image encoder +├── vae/lightvae/lighttae # vae +└── config.json # 模型配置文件 +``` + +#### wan2.2 模型目录结构 + +``` +models/ +├── wan2.2_i2v_A14b_high_noise_lightx2v_4step_1030.safetensors # high noise 原始精度 +├── wan2.2_i2v_A14b_high_noise_fp8_e4m3_lightx2v_4step_1030.safetensors # high noise FP8 量化 +├── wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step_1030.safetensors # high noise INT8 量化 +├── wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step_1030_split # high noise INT8 量化分block存储目录 +├── wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors # low noise 原始精度 +├── wan2.2_i2v_A14b_low_noise_fp8_e4m3_lightx2v_4step.safetensors # low noise FP8 量化 +├── wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors # low noise INT8 量化 +├── wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step_split # low noise INT8 量化分block存储目录 +├── t5/clip/xlm-roberta-large/google # text和image encoder +├── vae/lightvae/lighttae # vae +└── config.json # 模型配置文件 +``` + +**📝 下载说明**: + +- 模型权重可从 HuggingFace 下载: + - [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) + - [Wan2.2-Distill-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) +- Text 和 Image Encoder 可从 [Encoders](https://huggingface.co/lightx2v/Encoders) 下载 +- VAE 可从 [Autoencoders](https://huggingface.co/lightx2v/Autoencoders) 下载 +- 对于 `xxx_split` 目录(例如 `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step_split`),即按照 block 存储的多个 safetensors,适用于内存不足的设备。例如内存 16GB 以内,请根据自身情况下载 + + +### 启动方式 + +#### 方式一:使用启动脚本(推荐) + +**Linux 环境:** +```bash +# 1. 编辑启动脚本,配置相关路径 +cd app/ +vim run_gradio.sh + +# 需要修改的配置项: +# - lightx2v_path: Lightx2v项目根目录路径 +# - model_path: 模型根目录路径(包含所有模型文件) + +# 💾 重要提示:建议将模型路径指向SSD存储位置 +# 例如:/mnt/ssd/models/ 或 /data/ssd/models/ + +# 2. 运行启动脚本 +bash run_gradio.sh + +# 3. 或使用参数启动 +bash run_gradio.sh --lang zh --port 8032 +bash run_gradio.sh --lang en --port 7862 +``` + +**Windows 环境:** +```cmd +# 1. 编辑启动脚本,配置相关路径 +cd app\ +notepad run_gradio_win.bat + +# 需要修改的配置项: +# - lightx2v_path: Lightx2v项目根目录路径 +# - model_path: 模型根目录路径(包含所有模型文件) + +# 💾 重要提示:建议将模型路径指向SSD存储位置 +# 例如:D:\models\ 或 E:\models\ + +# 2. 运行启动脚本 +run_gradio_win.bat + +# 3. 或使用参数启动 +run_gradio_win.bat --lang zh --port 8032 +run_gradio_win.bat --lang en --port 7862 +``` + +#### 方式二:直接命令行启动 + +```bash +pip install -v git+https://github.com/ModelTC/LightX2V.git +``` + +**Linux 环境:** + +**中文界面版本:** +```bash +python gradio_demo_zh.py \ + --model_path /path/to/models \ + --server_name 0.0.0.0 \ + --server_port 7862 +``` + +**英文界面版本:** +```bash +python gradio_demo.py \ + --model_path /path/to/models \ + --server_name 0.0.0.0 \ + --server_port 7862 +``` + +**Windows 环境:** + +**中文界面版本:** +```cmd +python gradio_demo_zh.py ^ + --model_path D:\models ^ + --server_name 127.0.0.1 ^ + --server_port 7862 +``` + +**英文界面版本:** +```cmd +python gradio_demo.py ^ + --model_path D:\models ^ + --server_name 127.0.0.1 ^ + --server_port 7862 +``` + +**💡 提示**:模型类型(wan2.1/wan2.2)、任务类型(i2v/t2v)以及具体的模型文件选择均在 Web 界面中进行配置。 + +## 📋 命令行参数 + +| 参数 | 类型 | 必需 | 默认值 | 说明 | +|------|------|------|--------|------| +| `--model_path` | str | ✅ | - | 模型根目录路径(包含所有模型文件的目录) | +| `--server_port` | int | ❌ | 7862 | 服务器端口 | +| `--server_name` | str | ❌ | 0.0.0.0 | 服务器IP地址 | +| `--output_dir` | str | ❌ | ./outputs | 输出视频保存目录 | + +**💡 说明**:模型类型(wan2.1/wan2.2)、任务类型(i2v/t2v)以及具体的模型文件选择均在 Web 界面中进行配置。 + +## 🎯 功能特性 + +### 模型配置 + +- **模型类型**: 支持 wan2.1 和 wan2.2 两种模型架构 +- **任务类型**: 支持图像到视频(i2v)和文本到视频(t2v)两种生成模式 +- **模型选择**: 前端自动识别并筛选可用的模型文件,支持自动检测量化精度 +- **编码器配置**: 支持选择 T5 文本编码器、CLIP 图像编码器和 VAE 解码器 +- **算子选择**: 支持多种注意力算子和量化矩阵乘法算子,系统会根据安装状态自动排序 + +### 输入参数 + +- **提示词 (Prompt)**: 描述期望的视频内容 +- **负向提示词 (Negative Prompt)**: 指定不希望出现的元素 +- **输入图像**: i2v 模式下需要上传输入图像 +- **分辨率**: 支持多种预设分辨率(480p/540p/720p) +- **随机种子**: 控制生成结果的随机性 +- **推理步数**: 影响生成质量和速度的平衡(蒸馏模型默认为 4 步) + +### 视频参数 + +- **FPS**: 每秒帧数 +- **总帧数**: 视频长度 +- **CFG缩放因子**: 控制提示词影响强度(1-10,蒸馏模型默认为 1) +- **分布偏移**: 控制生成风格偏离程度(0-10) + +## 🔧 自动配置功能 + +系统会根据您的硬件配置(GPU 显存和 CPU 内存)自动配置最优推理选项,无需手动调整。启动时会自动应用最佳配置,包括: + +- **GPU 内存优化**: 根据显存大小自动启用 CPU 卸载、VAE 分块推理等 +- **CPU 内存优化**: 根据系统内存自动启用延迟加载、模块卸载等 +- **算子选择**: 自动选择已安装的最优算子(按优先级排序) +- **量化配置**: 根据模型文件名自动检测并应用量化精度 + + +### 日志查看 + +```bash +# 查看推理日志 +tail -f inference_logs.log + +# 查看GPU使用情况 +nvidia-smi + +# 查看系统资源 +htop +``` + +欢迎提交Issue和Pull Request来改进这个项目! + +**注意**: 使用本工具生成的视频内容请遵守相关法律法规,不得用于非法用途。 diff --git a/docs/ZH_CN/source/deploy_guides/deploy_local_windows.md b/docs/ZH_CN/source/deploy_guides/deploy_local_windows.md new file mode 100644 index 0000000..e2baabb --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/deploy_local_windows.md @@ -0,0 +1,129 @@ +# Windows 本地部署指南 + +## 📖 概述 + +本文档将详细指导您在Windows环境下完成LightX2V的本地部署配置,包括批处理文件推理、Gradio Web界面推理等多种使用方式。 + +## 🚀 快速开始 + +### 环境要求 + +#### 硬件要求 +- **GPU**: NVIDIA GPU,建议 8GB+ VRAM +- **内存**: 建议 16GB+ RAM +- **存储**: 强烈建议使用 SSD 固态硬盘,机械硬盘会导致模型加载缓慢 + +## 🎯 使用方式 + +### 方式一:使用批处理文件推理 + +参考[快速开始文档](../getting_started/quickstart.md)安装环境,并使用[批处理文件](https://github.com/ModelTC/LightX2V/tree/main/scripts/win)运行。 + +### 方式二:使用Gradio Web界面推理 + +#### 手动配置Gradio + +参考[快速开始文档](../getting_started/quickstart.md)安装环境,参考[Gradio部署指南](./deploy_gradio.md) + +#### 一键启动Gradio(推荐) + +**📦 下载软件包** +- [夸克网盘](https://pan.quark.cn/s/8af1162d7a15) + +**📁 目录结构** +解压后,确保目录结构如下: + +``` +├── env/ # LightX2V 环境目录 +├── LightX2V/ # LightX2V 项目目录 +├── start_lightx2v.bat # 一键启动脚本 +├── lightx2v_config.txt # 配置文件 +├── LightX2V使用说明.txt # LightX2V使用说明 +├── outputs/ # 生成的视频保存目录 +└── models/ # 模型存放目录 +``` + +**📥 下载模型**: + +可参考[模型结构文档](../getting_started/model_structure.md)或者[gradio部署文档](./deploy_gradio.md)下载完整模型(包含量化和非量化版本)或仅下载量化/非量化版本。 + + +**📋 配置参数** + +编辑 `lightx2v_config.txt` 文件,根据需要修改以下参数: + +```ini + +# 界面语言 (zh: 中文, en: 英文) +lang=zh + +# 服务器端口 +port=8032 + +# GPU设备ID (0, 1, 2...) +gpu=0 + +# 模型路径 +model_path=models/ +``` + +**🚀 启动服务** + +双击运行 `start_lightx2v.bat` 文件,脚本将: +1. 自动读取配置文件 +2. 验证模型路径和文件完整性 +3. 启动 Gradio Web 界面 +4. 自动打开浏览器访问服务 + + +![Gradio中文界面](../../../../assets/figs/portabl_windows/pic_gradio_zh.png) + +**⚠️ 重要提示**: +- **页面显示问题**: 如果网页打开空白或显示异常,请运行 `pip install --upgrade gradio` 升级Gradio版本。 + + +### 方式三:使用ComfyUI推理 + +此说明将指导您如何下载与使用便携版的Lightx2v-ComfyUI环境,如此可以免去手动配置环境的步骤,适用于想要在Windows系统下快速开始体验使用Lightx2v加速视频生成的用户。 + +#### 下载Windows便携环境: + +- [百度网盘下载](https://pan.baidu.com/s/1FVlicTXjmXJA1tAVvNCrBw?pwd=wfid),提取码:wfid + +便携环境中已经打包了所有Python运行相关的依赖,也包括ComfyUI和LightX2V的代码及其相关依赖,下载后解压即可使用。 + +解压后对应的文件目录说明如下: + +```shell +lightx2v_env +├──📂 ComfyUI # ComfyUI代码 +├──📂 portable_python312_embed # 独立的Python环境 +└── run_nvidia_gpu.bat # Windows启动脚本(双击启动) +``` + +#### 启动ComfyUI + +直接双击run_nvidia_gpu.bat文件,系统会打开一个Command Prompt窗口并运行程序,一般第一次启动时间会比较久,请耐心等待,启动完成后会自动打开浏览器并出现ComfyUI的前端界面。 + +![i2v示例工作流](../../../../assets/figs/portabl_windows/pic1.png) + +LightX2V-ComfyUI的插件使用的是,[ComfyUI-Lightx2vWrapper](https://github.com/ModelTC/ComfyUI-Lightx2vWrapper),示例工作流可以从此项目中获取。 + +#### 已测试显卡(offload模式) + +- 测试模型`Wan2.1-I2V-14B-480P` + +| 显卡型号 | 任务类型 | 显存容量 | 实际最大显存占用 | 实际最大内存占用 | +|:----------|:-----------|:-----------|:-------- |:---------- | +| 3090Ti | I2V | 24G | 6.1G | 7.1G | +| 3080Ti | I2V | 12G | 6.1G | 7.1G | +| 3060Ti | I2V | 8G | 6.1G | 7.1G | +| 4070Ti Super | I2V | 16G | 6.1G | 7.1G | +| 4070 | I2V | 12G | 6.1G | 7.1G | +| 4060 | I2V | 8G | 6.1G | 7.1G | + + + +#### 环境打包和使用参考 +- [ComfyUI](https://github.com/comfyanonymous/ComfyUI) +- [Portable-Windows-ComfyUI-Docs](https://docs.comfy.org/zh-CN/installation/comfyui_portable_windows#portable-%E5%8F%8A%E8%87%AA%E9%83%A8%E7%BD%B2) diff --git a/docs/ZH_CN/source/deploy_guides/deploy_service.md b/docs/ZH_CN/source/deploy_guides/deploy_service.md new file mode 100644 index 0000000..b0111b3 --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/deploy_service.md @@ -0,0 +1,88 @@ +# 服务化部署 + +lightx2v 提供异步服务功能。代码入口点在 [这里](https://github.com/ModelTC/lightx2v/blob/main/lightx2v/api_server.py) + +### 启动服务 + +```shell +# 修改脚本中的路径 +bash scripts/start_server.sh +``` + +`--port 8000` 选项表示服务将绑定到本地机器的 `8000` 端口。您可以根据需要更改此端口。 + +### 客户端发送请求 + +```shell +python scripts/post.py +``` + +服务端点:`/v1/tasks/` + +`scripts/post.py` 中的 `message` 参数如下: + +```python +message = { + "prompt": "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage.", + "negative_prompt": "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + "image_path": "" +} +``` + +1. `prompt`、`negative_prompt` 和 `image_path` 是视频生成的基本输入。`image_path` 可以是空字符串,表示不需要图像输入。 + + +### 客户端检查服务器状态 + +```shell +python scripts/check_status.py +``` + +服务端点包括: + +1. `/v1/service/status` 用于检查服务状态。返回服务是 `busy` 还是 `idle`。服务只有在 `idle` 时才接受新请求。 + +2. `/v1/tasks/` 用于获取服务器接收和完成的所有任务。 + +3. `/v1/tasks/{task_id}/status` 用于获取指定 `task_id` 的任务状态。返回任务是 `processing` 还是 `completed`。 + +### 客户端随时停止服务器上的当前任务 + +```shell +python scripts/stop_running_task.py +``` + +服务端点:`/v1/tasks/running` + +终止任务后,服务器不会退出,而是返回等待新请求的状态。 + +### 在单个节点上启动多个服务 + +在单个节点上,您可以使用 `scripts/start_server.sh` 启动多个服务(注意同一 IP 下的端口号必须不同),或者可以使用 `scripts/start_multi_servers.sh` 同时启动多个服务: + +```shell +num_gpus=8 bash scripts/start_multi_servers.sh +``` + +其中 `num_gpus` 表示要启动的服务数量;服务将从 `--start_port` 开始在连续端口上运行。 + +### 多个服务之间的调度 + +```shell +python scripts/post_multi_servers.py +``` + +`post_multi_servers.py` 将根据服务的空闲状态调度多个客户端请求。 + +### API 端点总结 + +| 端点 | 方法 | 描述 | +|------|------|------| +| `/v1/tasks/` | POST | 创建视频生成任务 | +| `/v1/tasks/form` | POST | 通过表单创建视频生成任务 | +| `/v1/tasks/` | GET | 获取所有任务列表 | +| `/v1/tasks/{task_id}/status` | GET | 获取指定任务状态 | +| `/v1/tasks/{task_id}/result` | GET | 获取指定任务的结果视频文件 | +| `/v1/tasks/running` | DELETE | 停止当前运行的任务 | +| `/v1/files/download/{file_path}` | GET | 下载文件 | +| `/v1/service/status` | GET | 获取服务状态 | diff --git a/docs/ZH_CN/source/deploy_guides/for_low_latency.md b/docs/ZH_CN/source/deploy_guides/for_low_latency.md new file mode 100644 index 0000000..b101f64 --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/for_low_latency.md @@ -0,0 +1,42 @@ +# 低延迟场景部署 + +在低延迟的场景,我们会追求更快的速度,忽略显存和内存开销等问题。我们提供两套方案: + +## 💡 方案一:步数蒸馏模型的推理 + +该方案可以参考[步数蒸馏文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/step_distill.html) + +🧠 **步数蒸馏**是非常直接的视频生成模型的加速推理方案。从50步蒸馏到4步,耗时将缩短到原来的4/50。同时,该方案下,仍然可以和以下方案结合使用: +1. [高效注意力机制方案](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/attention.html) +2. [模型量化](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/quantization.html) + +## 💡 方案二:非步数蒸馏模型的推理 + +步数蒸馏需要比较大的训练资源,以及步数蒸馏后的模型,可能会出现视频动态范围变差的问题。 + +对于非步数蒸馏的原始模型,我们可以使用以下方案或者多种方案结合的方式进行加速: + +1. [并行推理](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/parallel.html) 进行多卡并行加速。 +2. [特征缓存](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/cache.html) 降低实际推理步数。 +3. [高效注意力机制方案](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/attention.html) 加速 Attention 的推理。 +4. [模型量化](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/quantization.html) 加速 Linear 层的推理。 +5. [变分辨率推理](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/changing_resolution.html) 降低中间推理步的分辨率。 + +## 💡 使用Tiny VAE + +在某些情况下,VAE部分耗时会比较大,可以使用轻量级VAE进行加速,同时也可以降低一部分显存。 + +```python +{ + "use_tae": true, + "tae_path": "/path to taew2_1.pth" +} +``` +taew2_1.pth 权重可以从[这里](https://github.com/madebyollin/taehv/raw/refs/heads/main/taew2_1.pth)下载 + + +## ⚠️ 注意 + +有一部分的加速方案之间目前无法结合使用,我们目前正在致力于解决这一问题。 + +如有问题,欢迎在 [🐛 GitHub Issues](https://github.com/ModelTC/lightx2v/issues) 中进行错误报告或者功能请求 diff --git a/docs/ZH_CN/source/deploy_guides/for_low_resource.md b/docs/ZH_CN/source/deploy_guides/for_low_resource.md new file mode 100644 index 0000000..c5e50de --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/for_low_resource.md @@ -0,0 +1,223 @@ +# Lightx2v 低资源部署指南 + +## 📋 概述 + +本指南专门针对硬件资源受限的环境,特别是**8GB显存 + 16/32GB内存**的配置,详细说明如何成功运行Lightx2v 14B模型进行480p和720p视频生成。 + +Lightx2v是一个强大的视频生成模型,但在资源受限的环境下需要精心优化才能流畅运行。本指南将为您提供从硬件选择到软件配置的完整解决方案,确保您能够在有限的硬件条件下获得最佳的视频生成体验。 + +## 🎯 目标硬件配置详解 + +### 推荐硬件规格 + +**GPU要求**: +- **显存**: 8GB (RTX 3060/3070/4060/4060Ti 等) +- **架构**: 支持CUDA的NVIDIA显卡 + +**系统内存**: +- **最低要求**: 16GB DDR4 +- **推荐配置**: 32GB DDR4/DDR5 +- **内存速度**: 建议3200MHz及以上 + +**存储要求**: +- **类型**: 强烈推荐NVMe SSD +- **容量**: 至少50GB可用空间 +- **速度**: 读取速度建议3000MB/s以上 + +**CPU要求**: +- **核心数**: 建议8核心及以上 +- **频率**: 建议3.0GHz及以上 +- **架构**: 支持AVX2指令集 + +## ⚙️ 核心优化策略详解 + +### 1. 环境优化 + +在运行Lightx2v之前,建议设置以下环境变量以优化性能: + +```bash +# CUDA内存分配优化 +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +# 启用CUDA Graph模式,提升推理性能 +export ENABLE_GRAPH_MODE=true + +# 使用BF16精度推理,减少显存占用(默认FP32精度) +export DTYPE=BF16 +``` + +**优化说明**: +- `expandable_segments:True`: 允许CUDA内存段动态扩展,减少内存碎片 +- `ENABLE_GRAPH_MODE=true`: 启用CUDA Graph,减少内核启动开销 +- `DTYPE=BF16`: 使用BF16精度,在保持质量的同时减少显存占用 + +### 2. 量化策略 + +量化是低资源环境下的关键优化技术,通过降低模型精度来减少内存占用。 + +#### 量化方案对比 + +**FP8量化** (推荐用于RTX 40系列): +```python +# 适用于支持FP8的GPU,提供更好的精度 +dit_quant_scheme = "fp8" # DIT模型量化 +t5_quant_scheme = "fp8" # T5文本编码器量化 +clip_quant_scheme = "fp8" # CLIP视觉编码器量化 +``` + +**INT8量化** (通用方案): +```python +# 适用于所有GPU,内存占用最小 +dit_quant_scheme = "int8" # 8位整数量化 +t5_quant_scheme = "int8" # 文本编码器量化 +clip_quant_scheme = "int8" # 视觉编码器量化 +``` +### 3. 高效算子选择指南 + +选择合适的算子可以显著提升推理速度和减少内存占用。 + +#### 注意力算子选择 + +**推荐优先级**: +1. **[Sage Attention](https://github.com/thu-ml/SageAttention)** (最高优先级) + +2. **[Flash Attention](https://github.com/Dao-AILab/flash-attention)** (通用方案) + + +#### 矩阵乘算子选择 + +**ADA架构显卡** (RTX 40系列): + +推荐优先级: +1. **[q8-kernel](https://github.com/KONAKONA666/q8_kernels)** (最高性能,仅支持ADA架构) +2. **[sglang-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel)** (平衡方案) +3. **[vllm-kernel](https://github.com/vllm-project/vllm)** (通用方案) + +**其他架构显卡**: +1. **[sglang-kernel](https://github.com/sgl-project/sglang/tree/main/sgl-kernel)** (推荐) +2. **[vllm-kernel](https://github.com/vllm-project/vllm)** (备选) + +### 4. 参数卸载策略详解 + +参数卸载技术允许模型在CPU和磁盘之间动态调度参数,突破显存限制。 + +#### 三级卸载架构 + +```python +# 磁盘-CPU-GPU三级卸载配置 +cpu_offload=True # 启用CPU卸载 +t5_cpu_offload=True # 启用T5编码器CPU卸载 +offload_granularity=phase # DIT模型细粒度卸载 +t5_offload_granularity=block # T5编码器细粒度卸载 +lazy_load = True # 启用延迟加载机制 +num_disk_workers = 2 # 磁盘I/O工作线程数 +``` + +#### 卸载策略详解 + +**延迟加载机制**: +- 模型参数按需从磁盘加载到CPU +- 减少运行时内存占用 +- 支持大模型在有限内存下运行 + +**磁盘存储优化**: +- 使用高速SSD存储模型参数 +- 按照block分组存储模型文件 +- 参考转换脚本[文档](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md),转换时指定`--save_by_block`参数 + +### 5. 显存优化技术详解 + +针对720p视频生成的显存优化策略。 + +#### CUDA内存管理 + +```python +# CUDA内存清理配置 +clean_cuda_cache = True # 及时清理GPU缓存 +rotary_chunk = True # 旋转位置编码分块计算 +rotary_chunk_size = 100 # 分块大小,可根据显存调整 +``` + +#### 分块计算策略 + +**旋转位置编码分块**: +- 将长序列分成小块处理 +- 减少峰值显存占用 +- 保持计算精度 + +### 6. VAE优化详解 + +VAE (变分自编码器) 是视频生成的关键组件,优化VAE可以显著提升性能。 + +#### VAE分块推理 + +```python +# VAE优化配置 +use_tiling_vae = True # 启用VAE分块推理 +``` + +#### 轻量级VAE + +```python +# VAE优化配置 +use_tae = True +tae_path = "/path to taew2_1.pth" +``` +taew2_1.pth 权重可以从[这里](https://github.com/madebyollin/taehv/raw/refs/heads/main/taew2_1.pth)下载 + +**VAE优化效果**: +- 标准VAE: 基准性能,100%质量保持 +- 标准VAE分块: 降低显存,增加推理时间,100%质量保持 +- 轻量VAE: 极低显存,视频质量有损 + + +### 7. 模型选择策略 + +选择合适的模型版本对低资源环境至关重要。 + +#### 推荐模型对比 + +**蒸馏模型** (强烈推荐): +- ✅ **[Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v)** + +- ✅ **[Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v)** + + +#### 性能优化建议 + +使用上述蒸馏模型时,可以进一步优化性能: +- 关闭CFG: `"enable_cfg": false` +- 减少推理步数: `infer_step: 4` +- 参考配置文件: [config](https://github.com/ModelTC/LightX2V/tree/main/configs/distill) + +## 🚀 完整配置示例 + +### 预配置模板 + +- **[14B模型480p视频生成配置](https://github.com/ModelTC/lightx2v/tree/main/configs/offload/disk/wan_i2v_phase_lazy_load_480p.json)** + +- **[14B模型720p视频生成配置](https://github.com/ModelTC/lightx2v/tree/main/configs/offload/disk/wan_i2v_phase_lazy_load_720p.json)** + +- **[1.3B模型720p视频生成配置](https://github.com/ModelTC/LightX2V/tree/main/configs/offload/block/wan_t2v_1_3b.json)** + - 1.3B模型推理瓶颈是T5 encoder,配置文件专门针对T5进行优化 + +**[启动脚本](https://github.com/ModelTC/LightX2V/tree/main/scripts/wan/run_wan_i2v_lazy_load.sh)** + + +## 📚 参考资源 + +- [参数卸载机制文档](../method_tutorials/offload.md) - 深入了解卸载技术原理 +- [量化技术指南](../method_tutorials/quantization.md) - 量化技术详细说明 +- [Gradio部署指南](deploy_gradio.md) - Gradio部署详细说明 + +## ⚠️ 重要注意事项 + +1. **硬件要求**: 确保您的硬件满足最低配置要求 +2. **驱动版本**: 建议使用最新的NVIDIA驱动 (535+) +3. **CUDA版本**: 确保CUDA版本与PyTorch兼容 (建议CUDA 11.8+) +4. **存储空间**: 预留足够的磁盘空间用于模型缓存 (至少50GB) +5. **网络环境**: 首次下载模型需要稳定的网络连接 +6. **环境变量**: 务必设置推荐的环境变量以优化性能 + + +**技术支持**: 如遇到问题,请提交Issue到项目仓库。 diff --git a/docs/ZH_CN/source/deploy_guides/lora_deploy.md b/docs/ZH_CN/source/deploy_guides/lora_deploy.md new file mode 100644 index 0000000..c75b71d --- /dev/null +++ b/docs/ZH_CN/source/deploy_guides/lora_deploy.md @@ -0,0 +1,213 @@ +# LoRA 模型部署与相关工具 + +LoRA (Low-Rank Adaptation) 是一种高效的模型微调技术,通过低秩矩阵分解显著减少可训练参数数量。LightX2V 全面支持 LoRA 技术,包括 LoRA 推理、LoRA 提取和 LoRA 合并等功能。 + +## 🎯 LoRA 技术特性 + +- **灵活部署**:支持动态加载和移除 LoRA 权重 +- **多种格式**:支持多种 LoRA 权重格式和命名约定 +- **工具完善**:提供完整的 LoRA 提取、合并工具链 + +## 📜 LoRA 推理部署 + +### 配置文件方式 + +在配置文件中指定 LoRA 路径: + +```json +{ + "lora_configs": [ + { + "path": "/path/to/your/lora.safetensors", + "strength": 1.0 + } + ] +} +``` + +**配置参数说明:** + +- `lora_path`: LoRA 权重文件路径列表,支持多个 LoRA 同时加载 +- `strength_model`: LoRA 强度系数 (alpha),控制 LoRA 对原模型的影响程度 + +### 命令行方式 + +直接在命令行中指定 LoRA 路径(仅支持加载单个 LoRA): + +```bash +python -m lightx2v.infer \ + --model_cls wan2.1 \ + --task t2v \ + --model_path /path/to/model \ + --config_json /path/to/config.json \ + --lora_path /path/to/your/lora.safetensors \ + --lora_strength 0.8 \ + --prompt "Your prompt here" +``` + +### 多LoRA配置 + +要使用多个具有不同强度的LoRA,请在配置JSON文件中指定: + +```json +{ + "lora_configs": [ + { + "path": "/path/to/first_lora.safetensors", + "strength": 0.8 + }, + { + "path": "/path/to/second_lora.safetensors", + "strength": 0.5 + } + ] +} +``` + +### 支持的 LoRA 格式 + +LightX2V 支持多种 LoRA 权重命名约定: + +| 格式类型 | 权重命名 | 说明 | +|----------|----------|------| +| **标准 LoRA** | `lora_A.weight`, `lora_B.weight` | 标准的 LoRA 矩阵分解格式 | +| **Down/Up 格式** | `lora_down.weight`, `lora_up.weight` | 另一种常见的命名约定 | +| **差值格式** | `diff` | `weight` 权重差值 | +| **偏置差值** | `diff_b` | `bias` 权重差值 | +| **调制差值** | `diff_m` | `modulation` 权重差值 | + +### 推理脚本示例 + +**步数蒸馏 LoRA 推理:** + +```bash +# T2V LoRA 推理 +bash scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh + +# I2V LoRA 推理 +bash scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh +``` + +**音频驱动 LoRA 推理:** + +```bash +bash scripts/wan/run_wan_i2v_audio.sh +``` + +### API 服务中使用 LoRA + +在 API 服务中通过 [config 文件](wan_t2v_distill_4step_cfg_lora.json) 指定,对 [scripts/server/start_server.sh](https://github.com/ModelTC/lightx2v/blob/main/scripts/server/start_server.sh) 中的启动命令进行修改: + +```bash +python -m lightx2v.api_server \ + --model_cls wan2.1_distill \ + --task t2v \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg_lora.json \ + --port 8000 \ + --nproc_per_node 1 +``` + +## 🔧 LoRA 提取工具 + +使用 `tools/extract/lora_extractor.py` 从两个模型的差异中提取 LoRA 权重。 + +### 基本用法 + +```bash +python tools/extract/lora_extractor.py \ + --source-model /path/to/base/model \ + --target-model /path/to/finetuned/model \ + --output /path/to/extracted/lora.safetensors \ + --rank 32 +``` + +### 参数说明 + +| 参数 | 类型 | 必需 | 默认值 | 说明 | +|------|------|------|--------|------| +| `--source-model` | str | ✅ | - | 基础模型路径 | +| `--target-model` | str | ✅ | - | 微调后模型路径 | +| `--output` | str | ✅ | - | 输出 LoRA 文件路径 | +| `--source-type` | str | ❌ | `safetensors` | 基础模型格式 (`safetensors`/`pytorch`) | +| `--target-type` | str | ❌ | `safetensors` | 微调模型格式 (`safetensors`/`pytorch`) | +| `--output-format` | str | ❌ | `safetensors` | 输出格式 (`safetensors`/`pytorch`) | +| `--rank` | int | ❌ | `32` | LoRA 秩值 | +| `--output-dtype` | str | ❌ | `bf16` | 输出数据类型 | +| `--diff-only` | bool | ❌ | `False` | 仅保存权重差值,不进行 LoRA 分解 | + +### 高级用法示例 + +**提取高秩 LoRA:** + +```bash +python tools/extract/lora_extractor.py \ + --source-model /path/to/base/model \ + --target-model /path/to/finetuned/model \ + --output /path/to/high_rank_lora.safetensors \ + --rank 64 \ + --output-dtype fp16 +``` + +**仅保存权重差值:** + +```bash +python tools/extract/lora_extractor.py \ + --source-model /path/to/base/model \ + --target-model /path/to/finetuned/model \ + --output /path/to/weight_diff.safetensors \ + --diff-only +``` + +## 🔀 LoRA 合并工具 + +使用 `tools/extract/lora_merger.py` 将 LoRA 权重合并到基础模型中,以进行后续量化等操作。 + +### 基本用法 + +```bash +python tools/extract/lora_merger.py \ + --source-model /path/to/base/model \ + --lora-model /path/to/lora.safetensors \ + --output /path/to/merged/model.safetensors \ + --alpha 1.0 +``` + +### 参数说明 + +| 参数 | 类型 | 必需 | 默认值 | 说明 | +|------|------|------|--------|------| +| `--source-model` | str | ✅ | 无 | 基础模型路径 | +| `--lora-model` | str | ✅ | 无 | LoRA 权重路径 | +| `--output` | str | ✅ | 无 | 输出合并模型路径 | +| `--source-type` | str | ❌ | `safetensors` | 基础模型格式 | +| `--lora-type` | str | ❌ | `safetensors` | LoRA 权重格式 | +| `--output-format` | str | ❌ | `safetensors` | 输出格式 | +| `--alpha` | float | ❌ | `1.0` | LoRA 合并强度 | +| `--output-dtype` | str | ❌ | `bf16` | 输出数据类型 | + +### 高级用法示例 + +**部分强度合并:** + +```bash +python tools/extract/lora_merger.py \ + --source-model /path/to/base/model \ + --lora-model /path/to/lora.safetensors \ + --output /path/to/merged_model.safetensors \ + --alpha 0.7 \ + --output-dtype fp32 +``` + +**多格式支持:** + +```bash +python tools/extract/lora_merger.py \ + --source-model /path/to/base/model.pt \ + --source-type pytorch \ + --lora-model /path/to/lora.safetensors \ + --lora-type safetensors \ + --output /path/to/merged_model.safetensors \ + --output-format safetensors \ + --alpha 1.0 +``` diff --git a/docs/ZH_CN/source/getting_started/benchmark.md b/docs/ZH_CN/source/getting_started/benchmark.md new file mode 100644 index 0000000..6adc116 --- /dev/null +++ b/docs/ZH_CN/source/getting_started/benchmark.md @@ -0,0 +1,3 @@ +# 基准测试 + +由于要展示一些视频的播放效果和详细的性能对比,您可以在这个[🔗 页面](https://github.com/ModelTC/LightX2V/blob/main/docs/ZH_CN/source/getting_started/benchmark_source.md)获得更好的展示效果以及相对应的文档内容。 diff --git a/docs/ZH_CN/source/getting_started/benchmark_source.md b/docs/ZH_CN/source/getting_started/benchmark_source.md new file mode 100644 index 0000000..c399d18 --- /dev/null +++ b/docs/ZH_CN/source/getting_started/benchmark_source.md @@ -0,0 +1,149 @@ +# 🚀 基准测试 + +> 本文档展示了LightX2V在不同硬件环境下的性能测试结果,包括H200和RTX 4090平台的详细对比数据。 + +--- + +## 🖥️ H200 环境 (~140GB显存) + +### 📋 软件环境配置 + +| 组件 | 版本 | +|:-----|:-----| +| **Python** | 3.11 | +| **PyTorch** | 2.7.1+cu128 | +| **SageAttention** | 2.2.0 | +| **vLLM** | 0.9.2 | +| **sgl-kernel** | 0.1.8 | + +--- + +### 🎬 480P 5s视频测试 + +**测试配置:** +- **模型**: [Wan2.1-I2V-14B-480P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v) +- **参数**: `infer_steps=40`, `seed=42`, `enable_cfg=True` + +#### 📊 性能对比表 + +| 配置 | 推理时间(s) | GPU显存占用(GB) | 加速比 | 视频效果 | +|:-----|:----------:|:---------------:|:------:|:--------:| +| **Wan2.1 Official** | 366 | 71 | 1.0x | | +| **FastVideo** | 292 | 26 | **1.25x** | | +| **LightX2V_1** | 250 | 53 | **1.46x** | | +| **LightX2V_2** | 216 | 50 | **1.70x** | | +| **LightX2V_3** | 191 | 35 | **1.92x** | | +| **LightX2V_3-Distill** | 14 | 35 | **🏆 20.85x** | | +| **LightX2V_4** | 107 | 35 | **3.41x** | | + +--- + +### 🎬 720P 5s视频测试 + +**测试配置:** +- **模型**: [Wan2.1-I2V-14B-720P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v) +- **参数**: `infer_steps=40`, `seed=1234`, `enable_cfg=True` + +#### 📊 性能对比表 + +| 配置 | 推理时间(s) | GPU显存占用(GB) | 加速比 | 视频效果 | +|:-----|:----------:|:---------------:|:------:|:--------:| +| **Wan2.1 Official** | 974 | 81 | 1.0x | | +| **FastVideo** | 914 | 40 | **1.07x** | | +| **LightX2V_1** | 807 | 65 | **1.21x** | | +| **LightX2V_2** | 751 | 57 | **1.30x** | | +| **LightX2V_3** | 671 | 43 | **1.45x** | | +| **LightX2V_3-Distill** | 44 | 43 | **🏆 22.14x** | | +| **LightX2V_4** | 344 | 46 | **2.83x** | | + +--- + +## 🖥️ RTX 4090 环境 (~24GB显存) + +### 📋 软件环境配置 + +| 组件 | 版本 | +|:-----|:-----| +| **Python** | 3.9.16 | +| **PyTorch** | 2.5.1+cu124 | +| **SageAttention** | 2.1.0 | +| **vLLM** | 0.6.6 | +| **sgl-kernel** | 0.0.5 | +| **q8-kernels** | 0.0.0 | + +--- + +### 🎬 480P 5s视频测试 + +**测试配置:** +- **模型**: [Wan2.1-I2V-14B-480P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v) +- **参数**: `infer_steps=40`, `seed=42`, `enable_cfg=True` + +#### 📊 性能对比表 + +| 配置 | 推理时间(s) | GPU显存占用(GB) | 加速比 | 视频效果 | +|:-----|:----------:|:---------------:|:------:|:--------:| +| **Wan2GP(profile=3)** | 779 | 20 | **1.0x** | | +| **LightX2V_5** | 738 | 16 | **1.05x** | | +| **LightX2V_5-Distill** | 68 | 16 | **11.45x** | | +| **LightX2V_6** | 630 | 12 | **1.24x** | | +| **LightX2V_6-Distill** | 63 | 12 | **🏆 12.36x** | | + +--- + +### 🎬 720P 5s视频测试 + +**测试配置:** +- **模型**: [Wan2.1-I2V-14B-720P-Lightx2v](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v) +- **参数**: `infer_steps=40`, `seed=1234`, `enable_cfg=True` + +#### 📊 性能对比表 + +| 配置 | 推理时间(s) | GPU显存占用(GB) | 加速比 | 视频效果 | +|:-----|:----------:|:---------------:|:------:|:--------:| +| **Wan2GP(profile=3)** | -- | OOM | -- | | +| **LightX2V_5** | 2473 | 23 | -- | | +| **LightX2V_5-Distill** | 183 | 23 | -- | | +| **LightX2V_6** | 2169 | 18 | -- | | +| **LightX2V_6-Distill** | 171 | 18 | -- | | + +--- + +## 📖 配置说明 + +### 🖥️ H200 环境配置说明 + +| 配置 | 技术特点 | +|:-----|:---------| +| **Wan2.1 Official** | 基于[Wan2.1官方仓库](https://github.com/Wan-Video/Wan2.1)的原始实现 | +| **FastVideo** | 基于[FastVideo官方仓库](https://github.com/hao-ai-lab/FastVideo),使用SageAttention2后端优化 | +| **LightX2V_1** | 使用SageAttention2替换原生注意力机制,采用DIT BF16+FP32(部分敏感层)混合精度计算,在保持精度的同时提升计算效率 | +| **LightX2V_2** | 统一使用BF16精度计算,进一步减少显存占用和计算开销,同时保持生成质量 | +| **LightX2V_3** | 引入FP8量化技术显著减少计算精度要求,结合Tiling VAE技术优化显存使用 | +| **LightX2V_3-Distill** | 在LightX2V_3基础上使用4步蒸馏模型(`infer_steps=4`, `enable_cfg=False`),进一步减少推理步数并保持生成质量 | +| **LightX2V_4** | 在LightX2V_3基础上加入TeaCache(teacache_thresh=0.2)缓存复用技术,通过智能跳过冗余计算实现加速 | + +### 🖥️ RTX 4090 环境配置说明 + +| 配置 | 技术特点 | +|:-----|:---------| +| **Wan2GP(profile=3)** | 基于[Wan2GP仓库](https://github.com/deepbeepmeep/Wan2GP)实现,使用MMGP优化技术。profile=3配置适用于至少32GB内存和24GB显存的RTX 3090/4090环境,通过牺牲显存来适应有限的内存资源。使用量化模型:[480P模型](https://huggingface.co/DeepBeepMeep/Wan2.1/blob/main/wan2.1_image2video_480p_14B_quanto_mbf16_int8.safetensors)和[720P模型](https://huggingface.co/DeepBeepMeep/Wan2.1/blob/main/wan2.1_image2video_720p_14B_quanto_mbf16_int8.safetensors) | +| **LightX2V_5** | 使用SageAttention2替换原生注意力机制,采用DIT FP8+FP32(部分敏感层)混合精度计算,启用CPU offload技术,将部分敏感层执行FP32精度计算,将DIT推理过程中异步数据卸载到CPU上,节省显存,offload粒度为block级别 | +| **LightX2V_5-Distill** | 在LightX2V_5基础上使用4步蒸馏模型(`infer_steps=4`, `enable_cfg=False`),进一步减少推理步数并保持生成质量 | +| **LightX2V_6** | 在LightX2V_3基础上启用CPU offload技术,将部分敏感层执行FP32精度计算,将DIT推理过程中异步数据卸载到CPU上,节省显存,offload粒度为block级别 | +| **LightX2V_6-Distill** | 在LightX2V_6基础上使用4步蒸馏模型(`infer_steps=4`, `enable_cfg=False`),进一步减少推理步数并保持生成质量 | + +--- + +## 📁 配置文件参考 + +基准测试相关的配置文件和运行脚本可在以下位置获取: + +| 类型 | 链接 | 说明 | +|:-----|:-----|:-----| +| **配置文件** | [configs/bench](https://github.com/ModelTC/LightX2V/tree/main/configs/bench) | 包含各种优化配置的JSON文件 | +| **运行脚本** | [scripts/bench](https://github.com/ModelTC/LightX2V/tree/main/scripts/bench) | 包含基准测试的执行脚本 | + +--- + +> 💡 **提示**: 建议根据您的硬件配置选择合适的优化方案,以获得最佳的性能表现。 diff --git a/docs/ZH_CN/source/getting_started/model_structure.md b/docs/ZH_CN/source/getting_started/model_structure.md new file mode 100644 index 0000000..8ceb48a --- /dev/null +++ b/docs/ZH_CN/source/getting_started/model_structure.md @@ -0,0 +1,571 @@ +# 模型格式与加载指南 + +## 📖 概述 + +LightX2V 是一个灵活的视频生成推理框架,支持多种模型来源和格式,为用户提供丰富的选择: + +- ✅ **Wan 官方模型**:直接兼容 Wan2.1 和 Wan2.2 官方发布的完整模型 +- ✅ **单文件模型**:支持 LightX2V 发布的单文件格式模型(包含量化版本) +- ✅ **LoRA 模型**:支持加载 LightX2V 发布的蒸馏 LoRA + +本文档将详细介绍各种模型格式的使用方法、配置参数和最佳实践。 + +--- + +## 🗂️ 格式一:Wan 官方模型 + +### 模型仓库 +- [Wan2.1 Collection](https://huggingface.co/collections/Wan-AI/wan21-68ac4ba85372ae5a8e282a1b) +- [Wan2.2 Collection](https://huggingface.co/collections/Wan-AI/wan22-68ac4ae80a8b477e79636fc8) + +### 模型特点 +- **官方保证**:Wan-AI 官方发布的完整模型,质量最高 +- **完整组件**:包含所有必需的组件(DIT、T5、CLIP、VAE) +- **原始精度**:使用 BF16/FP32 精度,无量化损失 +- **兼容性强**:与 Wan 官方工具链完全兼容 + +### Wan2.1 官方模型 + +#### 目录结构 + +以 [Wan2.1-I2V-14B-720P](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) 为例: + +``` +Wan2.1-I2V-14B-720P/ +├── diffusion_pytorch_model-00001-of-00007.safetensors # DIT 模型分片 1 +├── diffusion_pytorch_model-00002-of-00007.safetensors # DIT 模型分片 2 +├── diffusion_pytorch_model-00003-of-00007.safetensors # DIT 模型分片 3 +├── diffusion_pytorch_model-00004-of-00007.safetensors # DIT 模型分片 4 +├── diffusion_pytorch_model-00005-of-00007.safetensors # DIT 模型分片 5 +├── diffusion_pytorch_model-00006-of-00007.safetensors # DIT 模型分片 6 +├── diffusion_pytorch_model-00007-of-00007.safetensors # DIT 模型分片 7 +├── diffusion_pytorch_model.safetensors.index.json # 分片索引文件 +├── models_t5_umt5-xxl-enc-bf16.pth # T5 文本编码器 +├── models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth # CLIP 编码器 +├── Wan2.1_VAE.pth # VAE 编解码器 +├── config.json # 模型配置 +├── xlm-roberta-large/ # CLIP tokenizer +├── google/ # T5 tokenizer +├── assets/ +└── examples/ +``` + +#### 使用方法 + +```bash +# 下载模型 +huggingface-cli download Wan-AI/Wan2.1-I2V-14B-720P \ + --local-dir ./models/Wan2.1-I2V-14B-720P + +# 配置启动脚本 +model_path=./models/Wan2.1-I2V-14B-720P +lightx2v_path=/path/to/LightX2V + +# 运行推理 +cd LightX2V/scripts +bash wan/run_wan_i2v.sh +``` + +### Wan2.2 官方模型 + +#### 目录结构 + +以 [Wan2.2-I2V-A14B](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) 为例: + +``` +Wan2.2-I2V-A14B/ +├── high_noise_model/ # 高噪声模型目录 +│ ├── diffusion_pytorch_model-00001-of-00009.safetensors +│ ├── diffusion_pytorch_model-00002-of-00009.safetensors +│ ├── ... +│ ├── diffusion_pytorch_model-00009-of-00009.safetensors +│ └── diffusion_pytorch_model.safetensors.index.json +├── low_noise_model/ # 低噪声模型目录 +│ ├── diffusion_pytorch_model-00001-of-00009.safetensors +│ ├── diffusion_pytorch_model-00002-of-00009.safetensors +│ ├── ... +│ ├── diffusion_pytorch_model-00009-of-00009.safetensors +│ └── diffusion_pytorch_model.safetensors.index.json +├── models_t5_umt5-xxl-enc-bf16.pth # T5 文本编码器 +├── Wan2.1_VAE.pth # VAE 编解码器 +├── configuration.json # 模型配置 +├── google/ # T5 tokenizer +├── assets/ # 示例资源(可选) +└── examples/ # 示例文件(可选) +``` + +#### 使用方法 + +```bash +# 下载模型 +huggingface-cli download Wan-AI/Wan2.2-I2V-A14B \ + --local-dir ./models/Wan2.2-I2V-A14B + +# 配置启动脚本 +model_path=./models/Wan2.2-I2V-A14B +lightx2v_path=/path/to/LightX2V + +# 运行推理 +cd LightX2V/scripts +bash wan22/run_wan22_moe_i2v.sh +``` + +### 可用模型列表 + +#### Wan2.1 官方模型列表 + +| 模型名称 | 下载链接 | +|---------|----------| +| Wan2.1-I2V-14B-720P | [链接](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) | +| Wan2.1-I2V-14B-480P | [链接](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) | +| Wan2.1-T2V-14B | [链接](https://huggingface.co/Wan-AI/Wan2.1-T2V-14B) | +| Wan2.1-T2V-1.3B | [链接](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) | +| Wan2.1-FLF2V-14B-720P | [链接](https://huggingface.co/Wan-AI/Wan2.1-FLF2V-14B-720P) | +| Wan2.1-VACE-14B | [链接](https://huggingface.co/Wan-AI/Wan2.1-VACE-14B) | +| Wan2.1-VACE-1.3B | [链接](https://huggingface.co/Wan-AI/Wan2.1-VACE-1.3B) | + +#### Wan2.2 官方模型列表 + +| 模型名称 | 下载链接 | +|---------|----------| +| Wan2.2-I2V-A14B | [链接](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) | +| Wan2.2-T2V-A14B | [链接](https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B) | +| Wan2.2-TI2V-5B | [链接](https://huggingface.co/Wan-AI/Wan2.2-TI2V-5B) | +| Wan2.2-Animate-14B | [链接](https://huggingface.co/Wan-AI/Wan2.2-Animate-14B) | + +### 使用提示 + +> 💡 **量化模型使用**:如需使用量化模型,可参考[模型转换脚本](https://github.com/ModelTC/LightX2V/blob/main/tools/convert/readme_zh.md)进行转换,或直接使用下方格式二中的预转换量化模型 +> +> 💡 **显存优化**:对于 RTX 4090 24GB 或更小显存的设备,建议结合量化技术和 CPU 卸载功能: +> - 量化配置:参考[量化技术文档](../method_tutorials/quantization.md) +> - CPU 卸载:参考[参数卸载文档](../method_tutorials/offload.md) +> - Wan2.1 配置:参考 [offload 配置文件](https://github.com/ModelTC/LightX2V/tree/main/configs/offload) +> - Wan2.2 配置:参考 [wan22 配置文件](https://github.com/ModelTC/LightX2V/tree/main/configs/wan22) 中以 `4090` 结尾的配置 + +--- + +## 🗂️ 格式二:LightX2V 单文件模型(推荐) + +### 模型仓库 +- [Wan2.1-LightX2V](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan2.2-LightX2V](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) + +### 模型特点 +- **单文件管理**:单个 safetensors 文件,易于管理和部署 +- **多精度支持**:提供原始精度、FP8、INT8 等多种精度版本 +- **蒸馏加速**:支持 4-step 快速推理 +- **工具兼容**:兼容 ComfyUI 等其他工具 + +**示例**: +- `wan2.1_i2v_720p_lightx2v_4step.safetensors` - 720P 图生视频原始精度 +- `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors` - 720P 图生视频 FP8 量化 +- `wan2.1_i2v_480p_int8_lightx2v_4step.safetensors` - 480P 图生视频 INT8 量化 +- ... + +### Wan2.1 单文件模型 + +#### 场景 A:下载单个模型文件 + +**步骤 1:选择并下载模型** + +```bash +# 创建模型目录 +mkdir -p ./models/wan2.1_i2v_720p + +# 下载 720P 图生视频 FP8 量化模型 +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p \ + --include "wan2.1_i2v_720p_lightx2v_4step.safetensors" +``` + +**步骤 2:手动组织其他模块** + +目录结构如下 +``` +wan2.1_i2v_720p/ +├── wan2.1_i2v_720p_lightx2v_4step.safetensors # 原始精度 +└── t5/clip/vae/config.json/xlm-roberta-large/google等其他组件 # 需要手动组织 +``` + +**步骤 3:配置启动脚本** + +```bash +# 在启动脚本中设置(指向包含模型文件的目录) +model_path=./models/wan2.1_i2v_720p +lightx2v_path=/path/to/LightX2V + +# 运行脚本 +cd LightX2V/scripts +bash wan/run_wan_i2v_distill_4step_cfg.sh +``` + +> 💡 **提示**:当目录下只有一个模型文件时,LightX2V 会自动加载该文件。 + +#### 场景 B:下载多个模型文件 + +当您下载了多个不同精度的模型到同一目录时,需要在配置文件中明确指定使用哪个模型。 + +**步骤 1:下载多个模型** + +```bash +# 创建模型目录 +mkdir -p ./models/wan2.1_i2v_720p_multi + +# 下载原始精度模型 +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p_multi \ + --include "wan2.1_i2v_720p_lightx2v_4step.safetensors" + +# 下载 FP8 量化模型 +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p_multi \ + --include "wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors" + +# 下载 INT8 量化模型 +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models/wan2.1_i2v_720p_multi \ + --include "wan2.1_i2v_720p_int8_lightx2v_4step.safetensors" +``` + +**步骤 2:手动组织其他模块** + +目录结构如下: + +``` +wan2.1_i2v_720p_multi/ +├── wan2.1_i2v_720p_lightx2v_4step.safetensors # 原始精度 +├── wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors # FP8 量化 +└── wan2.1_i2v_720p_int8_lightx2v_4step.safetensors # INT8 量化 +└── t5/clip/vae/config.json/xlm-roberta-large/google等其他组件 # 需要手动组织 +``` + +**步骤 3:在配置文件中指定模型** + +编辑配置文件(如 `configs/distill/wan_i2v_distill_4step_cfg.json`): + +```json +{ + // 使用原始精度模型 + "dit_original_ckpt": "./models/wan2.1_i2v_720p_multi/wan2.1_i2v_720p_lightx2v_4step.safetensors", + + // 或使用 FP8 量化模型 + // "dit_quantized_ckpt": "./models/wan2.1_i2v_720p_multi/wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "fp8-vllm", + + // 或使用 INT8 量化模型 + // "dit_quantized_ckpt": "./models/wan2.1_i2v_720p_multi/wan2.1_i2v_720p_int8_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "int8-vllm", + + // 其他配置... +} +``` +### 使用提示 + +> 💡 **配置参数说明**: +> - **dit_original_ckpt**:用于指定原始精度模型(BF16/FP32/FP16)的路径 +> - **dit_quantized_ckpt**:用于指定量化模型(FP8/INT8)的路径,需配合 `dit_quantized` 和 `dit_quant_scheme` 参数使用 + +**步骤 4:启动推理** + +```bash +cd LightX2V/scripts +bash wan/run_wan_i2v_distill_4step_cfg.sh +``` + +### Wan2.2 单文件模型 + +#### 目录结构要求 + +使用 Wan2.2 单文件模型时,需要手动创建特定的目录结构: + +``` +wan2.2_models/ +├── high_noise_model/ # 高噪声模型目录(必须) +│ └── wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors # 高噪声模型文件 +└── low_noise_model/ # 低噪声模型目录(必须) +│ └── wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors # 低噪声模型文件 +└── t5/vae/config.json/xlm-roberta-large/google等其他组件 # 需要手动组织 +``` + +#### 场景 A:每个目录下只有一个模型文件 + +```bash +# 创建必需的子目录 +mkdir -p ./models/wan2.2_models/high_noise_model +mkdir -p ./models/wan2.2_models/low_noise_model + +# 下载高噪声模型到对应目录 +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models/high_noise_model \ + --include "wan2.2_i2v_A14b_high_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors" + +# 下载低噪声模型到对应目录 +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models/low_noise_model \ + --include "wan2.2_i2v_A14b_low_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors" + +# 配置启动脚本(指向父目录) +model_path=./models/wan2.2_models +lightx2v_path=/path/to/LightX2V + +# 运行脚本 +cd LightX2V/scripts +bash wan22/run_wan22_moe_i2v_distill.sh +``` + +> 💡 **提示**:当每个子目录下只有一个模型文件时,LightX2V 会自动加载。 + +#### 场景 B:每个目录下有多个模型文件 + +当您在 `high_noise_model/` 和 `low_noise_model/` 目录下分别放置了多个不同精度的模型时,需要在配置文件中明确指定。 + +```bash +# 创建目录 +mkdir -p ./models/wan2.2_models_multi/high_noise_model +mkdir -p ./models/wan2.2_models_multi/low_noise_model + +# 下载高噪声模型的多个版本 +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models_multi/high_noise_model \ + --include "wan2.2_i2v_A14b_high_noise_*.safetensors" + +# 下载低噪声模型的多个版本 +huggingface-cli download lightx2v/Wan2.2-Distill-Models \ + --local-dir ./models/wan2.2_models_multi/low_noise_model \ + --include "wan2.2_i2v_A14b_low_noise_*.safetensors" +``` + +**目录结构**: + +``` +wan2.2_models_multi/ +├── high_noise_model/ +│ ├── wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors # 原始精度 +│ ├── wan2.2_i2v_A14b_high_noise_fp8_e4m3_lightx2v_4step.safetensors # FP8 量化 +│ └── wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step.safetensors # INT8 量化 +└── low_noise_model/ +│ ├── wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors # 原始精度 +│ ├── wan2.2_i2v_A14b_low_noise_fp8_e4m3_lightx2v_4step.safetensors # FP8 量化 +│ └── wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors # INT8 量化 +└── t5/vae/config.json/xlm-roberta-large/google等其他组件 # 需要手动组织 +``` + +**配置文件设置**: + +```json +{ + // 使用原始精度模型 + "high_noise_original_ckpt": "./models/wan2.2_models_multi/high_noise_model/wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors", + "low_noise_original_ckpt": "./models/wan2.2_models_multi/low_noise_model/wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors", + + // 或使用 FP8 量化模型 + // "high_noise_quantized_ckpt": "./models/wan2.2_models_multi/high_noise_model/wan2.2_i2v_A14b_high_noise_fp8_e4m3_lightx2v_4step.safetensors", + // "low_noise_quantized_ckpt": "./models/wan2.2_models_multi/low_noise_model/wan2.2_i2v_A14b_low_noise_fp8_e4m3_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "fp8-vllm" + + // 或使用 INT8 量化模型 + // "high_noise_quantized_ckpt": "./models/wan2.2_models_multi/high_noise_model/wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step.safetensors", + // "low_noise_quantized_ckpt": "./models/wan2.2_models_multi/low_noise_model/wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors", + // "dit_quantized": true, + // "dit_quant_scheme": "int8-vllm" +} +``` + +### 使用提示 + +> 💡 **配置参数说明**: +> - **high_noise_original_ckpt** / **low_noise_original_ckpt**:用于指定原始精度模型(BF16/FP32/FP16)的路径 +> - **high_noise_quantized_ckpt** / **low_noise_quantized_ckpt**:用于指定量化模型(FP8/INT8)的路径,需配合 `dit_quantized` 和 `dit_quant_scheme` 参数使用 + + +### 可用模型列表 + +#### Wan2.1 单文件模型列表 + +**图生视频模型(I2V)** + +| 文件名 | 精度 | 说明 | +|--------|------|------| +| `wan2.1_i2v_480p_lightx2v_4step.safetensors` | BF16 | 4步模型原始精度 | +| `wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 4步模型FP8 量化 | +| `wan2.1_i2v_480p_int8_lightx2v_4step.safetensors` | INT8 | 4步模型INT8 量化 | +| `wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_4step_comfyui.safetensors` | FP8 | 4步模型ComfyUI 格式 | +| `wan2.1_i2v_720p_lightx2v_4step.safetensors` | BF16 | 4步模型原始精度 | +| `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 4步模型FP8 量化 | +| `wan2.1_i2v_720p_int8_lightx2v_4step.safetensors` | INT8 | 4步模型INT8 量化 | +| `wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step_comfyui.safetensors` | FP8 | 4步模型ComfyUI 格式 | + +**文生视频模型(T2V)** + +| 文件名 | 精度 | 说明 | +|--------|------|------| +| `wan2.1_t2v_14b_lightx2v_4step.safetensors` | BF16 | 4步模型原始精度 | +| `wan2.1_t2v_14b_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 4步模型FP8 量化 | +| `wan2.1_t2v_14b_int8_lightx2v_4step.safetensors` | INT8 | 4步模型INT8 量化 | +| `wan2.1_t2v_14b_scaled_fp8_e4m3_lightx2v_4step_comfyui.safetensors` | FP8 | 4步模型ComfyUI 格式 | + +#### Wan2.2 单文件模型列表 + +**图生视频模型(I2V)- A14B 系列** + +| 文件名 | 精度 | 说明 | +|--------|------|------| +| `wan2.2_i2v_A14b_high_noise_lightx2v_4step.safetensors` | BF16 | 高噪声模型-4步原始精度 | +| `wan2.2_i2v_A14b_high_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 高噪声模型-4步FP8量化 | +| `wan2.2_i2v_A14b_high_noise_int8_lightx2v_4step.safetensors` | INT8 | 高噪声模型-4步INT8量化 | +| `wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors` | BF16 | 低噪声模型-4步原始精度 | +| `wan2.2_i2v_A14b_low_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors` | FP8 | 低噪声模型-4步FP8量化 | +| `wan2.2_i2v_A14b_low_noise_int8_lightx2v_4step.safetensors` | INT8 | 低噪声模型-4步INT8量化 | + +> 💡 **使用提示**: +> - Wan2.2 模型采用双噪声架构,需要同时下载高噪声(high_noise)和低噪声(low_noise)模型 +> - 详细的目录组织方式请参考上方"Wan2.2 单文件模型"部分 + +--- + +## 🗂️ 格式三:LightX2V LoRA 模型 + +LoRA(Low-Rank Adaptation)模型提供了一种轻量级的模型微调方案,可以在不修改基础模型的情况下实现特定效果的定制化。 + +### 模型仓库 + +- **Wan2.1 LoRA 模型**:[lightx2v/Wan2.1-Distill-Loras](https://huggingface.co/lightx2v/Wan2.1-Distill-Loras) +- **Wan2.2 LoRA 模型**:[lightx2v/Wan2.2-Distill-Loras](https://huggingface.co/lightx2v/Wan2.2-Distill-Loras) + +### 使用方式 + +#### 方式一:离线合并 + +将 LoRA 权重离线合并到基础模型中,生成新的完整模型文件。 + +**操作步骤**: + +参考 [模型转换文档](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md) 进行离线合并。 + +**优点**: +- ✅ 推理时无需额外加载 LoRA +- ✅ 性能更优 + +**缺点**: +- ❌ 需要额外存储空间 +- ❌ 切换不同 LoRA 需要重新合并 + +#### 方式二:在线加载 + +在推理时动态加载 LoRA 权重,无需修改基础模型。 + +**LoRA 应用原理**: + +```python +# LoRA 权重应用公式 +# lora_scale = (alpha / rank) +# W' = W + lora_scale * B @ A +# 其中:B = up_proj (out_features, rank) +# A = down_proj (rank, in_features) + +if weights_dict["alpha"] is not None: + lora_scale = weights_dict["alpha"] / lora_down.shape[0] +elif alpha is not None: + lora_scale = alpha / lora_down.shape[0] +else: + lora_scale = 1.0 +``` + +**配置方法**: + +**Wan2.1 LoRA 配置**: + +```json +{ + "lora_configs": [ + { + "path": "wan2.1_i2v_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0, + "alpha": null + } + ] +} +``` + +**Wan2.2 LoRA 配置**: + +由于 Wan2.2 采用双模型架构(高噪声/低噪声),需要分别为两个模型配置 LoRA: + +```json +{ + "lora_configs": [ + { + "name": "low_noise_model", + "path": "wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0, + "alpha": null + }, + { + "name": "high_noise_model", + "path": "wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step.safetensors", + "strength": 1.0, + "alpha": null + } + ] +} +``` + +**参数说明**: + +| 参数 | 说明 | 默认值 | +|------|------|--------| +| `path` | LoRA 模型文件路径 | 必填 | +| `strength` | LoRA 强度系数,范围 [0.0, 1.0] | 1.0 | +| `alpha` | LoRA 缩放因子,`null` 时使用模型内置值 | null | +| `name` | (仅 Wan2.2)指定应用到哪个模型 | 必填 | + +**优点**: +- ✅ 灵活切换不同 LoRA +- ✅ 节省存储空间 +- ✅ 可动态调整 LoRA 强度 + +**缺点**: +- ❌ 推理时需额外加载时间 +- ❌ 略微增加显存占用 + +--- + +## 📚 相关资源 + +### 官方仓库 +- [LightX2V GitHub](https://github.com/ModelTC/LightX2V) +- [LightX2V 单文件模型仓库](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan-AI 官方模型仓库](https://huggingface.co/Wan-AI) + +### 模型下载链接 + +**Wan2.1 系列** +- [Wan2.1 Collection](https://huggingface.co/collections/Wan-AI/wan21-68ac4ba85372ae5a8e282a1b) + +**Wan2.2 系列** +- [Wan2.2 Collection](https://huggingface.co/collections/Wan-AI/wan22-68ac4ae80a8b477e79636fc8) + +**LightX2V 单文件模型** +- [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan2.2-Distill-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) + +### 文档链接 +- [量化技术文档](../method_tutorials/quantization.md) +- [参数卸载文档](../method_tutorials/offload.md) +- [配置文件示例](https://github.com/ModelTC/LightX2V/tree/main/configs) + +--- + +通过本文档,您应该能够: + +✅ 理解 LightX2V 支持的所有模型格式 +✅ 根据需求选择合适的模型和精度 +✅ 正确下载和组织模型文件 +✅ 配置启动参数并成功运行推理 +✅ 解决常见的模型加载问题 + +如有其他问题,欢迎在 [GitHub Issues](https://github.com/ModelTC/LightX2V/issues) 中提问。 diff --git a/docs/ZH_CN/source/getting_started/quickstart.md b/docs/ZH_CN/source/getting_started/quickstart.md new file mode 100644 index 0000000..a62a193 --- /dev/null +++ b/docs/ZH_CN/source/getting_started/quickstart.md @@ -0,0 +1,352 @@ +# LightX2V 快速入门指南 + +欢迎使用 LightX2V!本指南将帮助您快速搭建环境并开始使用 LightX2V 进行视频生成。 + +## 📋 目录 + +- [系统要求](#系统要求) +- [Linux 系统环境搭建](#linux-系统环境搭建) + - [Docker 环境(推荐)](#docker-环境推荐) + - [Conda 环境搭建](#conda-环境搭建) +- [Windows 系统环境搭建](#windows-系统环境搭建) +- [推理使用](#推理使用) + +## 🚀 系统要求 + +- **操作系统**: Linux (Ubuntu 18.04+) 或 Windows 10/11 +- **Python**: 3.10 或更高版本 +- **GPU**: NVIDIA GPU,支持 CUDA,至少 8GB 显存 +- **内存**: 建议 16GB 或更多 +- **存储**: 至少 50GB 可用空间 + +## 🐧 Linux 系统环境搭建 + +### 🐳 Docker 环境(推荐) + +我们强烈推荐使用 Docker 环境,这是最简单快捷的安装方式。 + +#### 1. 拉取镜像 + +访问 LightX2V 的 [Docker Hub](https://hub.docker.com/r/lightx2v/lightx2v/tags),选择一个最新日期的 tag,比如 `25111101-cu128`: + +```bash +docker pull lightx2v/lightx2v:25111101-cu128 +``` + +我们推荐使用`cuda128`环境,以获得更快的推理速度,若需要使用`cuda124`环境,可以使用带`-cu124`后缀的镜像版本: + +```bash +docker pull lightx2v/lightx2v:25101501-cu124 +``` + +#### 2. 运行容器 + +```bash +docker run --gpus all -itd --ipc=host --name [容器名] -v [挂载设置] --entrypoint /bin/bash [镜像id] +``` + +#### 3. 中国镜像源(可选) + +对于中国大陆地区,如果拉取镜像时网络不稳定,可以从阿里云上拉取: + +```bash +# cuda128 +docker pull registry.cn-hangzhou.aliyuncs.com/yongyang/lightx2v:25111101-cu128 + +# cuda124 +docker pull registry.cn-hangzhou.aliyuncs.com/yongyang/lightx2v:25101501-cu124 +``` + +### 🐍 Conda 环境搭建 + +如果您希望使用 Conda 自行搭建环境,请按照以下步骤操作: + +#### 步骤 1: 克隆项目 + +```bash +# 下载项目代码 +git clone https://github.com/ModelTC/LightX2V.git +cd LightX2V +``` + +#### 步骤 2: 创建 conda 虚拟环境 + +```bash +# 创建并激活 conda 环境 +conda create -n lightx2v python=3.11 -y +conda activate lightx2v +``` + +#### 步骤 3: 安装依赖及代码 + +```bash +pip install -v -e . +``` + +#### 步骤 4: 安装注意力机制算子 + +**选项 A: Flash Attention 2** +```bash +git clone https://github.com/Dao-AILab/flash-attention.git --recursive +cd flash-attention && python setup.py install +``` + +**选项 B: Flash Attention 3(用于 Hopper 架构显卡)** +```bash +cd flash-attention/hopper && python setup.py install +``` + +**选项 C: SageAttention 2(推荐)** +```bash +git clone https://github.com/thu-ml/SageAttention.git +cd SageAttention && CUDA_ARCHITECTURES="8.0,8.6,8.9,9.0,12.0" EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" MAX_JOBS=32 pip install -v -e . +``` + +#### 步骤 4: 安装量化算子(可选) + +量化算子用于支持模型量化功能,可以显著降低显存占用并加速推理。根据您的需求选择合适的量化算子: + +**选项 A: VLLM Kernels(推荐)** +适用于多种量化方案,支持 FP8 等量化格式。 + +```bash +pip install vllm +``` + +或者从源码安装以获得最新功能: + +```bash +git clone https://github.com/vllm-project/vllm.git +cd vllm +uv pip install -e . +``` + +**选项 B: SGL Kernels** +适用于 SGL 量化方案,需要 torch == 2.8.0。 + +```bash +pip install sgl-kernel --upgrade +``` + +**选项 C: Q8 Kernels** +适用于 Ada 架构显卡(如 RTX 4090、L40S 等)。 + +```bash +git clone https://github.com/KONAKONA666/q8_kernels.git +cd q8_kernels && git submodule init && git submodule update +python setup.py install +``` + +> 💡 **提示**: +> - 如果不需要使用量化功能,可以跳过此步骤 +> - 量化模型可以从 [LightX2V HuggingFace](https://huggingface.co/lightx2v) 下载 +> - 更多量化相关信息请参考 [量化文档](method_tutorials/quantization.html) + +#### 步骤 5: 验证安装 +```python +import lightx2v +print(f"LightX2V 版本: {lightx2v.__version__}") +``` + +## 🪟 Windows 系统环境搭建 + +Windows 系统仅支持 Conda 环境搭建方式,请按照以下步骤操作: + +### 🐍 Conda 环境搭建 + +#### 步骤 1: 检查 CUDA 版本 + +首先确认您的 GPU 驱动和 CUDA 版本: + +```cmd +nvidia-smi +``` + +记录输出中的 **CUDA Version** 信息,后续安装时需要保持版本一致。 + +#### 步骤 2: 创建 Python 环境 + +```cmd +# 创建新环境(推荐 Python 3.12) +conda create -n lightx2v python=3.12 -y + +# 激活环境 +conda activate lightx2v +``` + +> 💡 **提示**: 建议使用 Python 3.10 或更高版本以获得最佳兼容性。 + +#### 步骤 3: 安装 PyTorch 框架 + +**方法一:下载官方 wheel 包(推荐)** + +1. 访问 [PyTorch 官方下载页面](https://download.pytorch.org/whl/torch/) +2. 选择对应版本的 wheel 包,注意匹配: + - **Python 版本**: 与您的环境一致 + - **CUDA 版本**: 与您的 GPU 驱动匹配 + - **平台**: 选择 Windows 版本 + +**示例(Python 3.12 + PyTorch 2.6 + CUDA 12.4):** + +```cmd +# 下载并安装 PyTorch +pip install torch-2.6.0+cu124-cp312-cp312-win_amd64.whl + +# 安装配套包 +pip install torchvision==0.21.0 torchaudio==2.6.0 +``` + +**方法二:使用 pip 直接安装** + +```cmd +# CUDA 12.4 版本示例 +pip install torch==2.6.0+cu124 torchvision==0.21.0+cu124 torchaudio==2.6.0+cu124 --index-url https://download.pytorch.org/whl/cu124 +``` + +#### 步骤 4: 安装 Windows 版 vLLM + +从 [vllm-windows releases](https://github.com/SystemPanic/vllm-windows/releases) 下载对应的 wheel 包。 + +**版本匹配要求:** +- Python 版本匹配 +- PyTorch 版本匹配 +- CUDA 版本匹配 + +```cmd +# 安装 vLLM(请根据实际文件名调整) +pip install vllm-0.9.1+cu124-cp312-cp312-win_amd64.whl +``` + +#### 步骤 5: 安装注意力机制算子 + +**选项 A: Flash Attention 2** + +```cmd +pip install flash-attn==2.7.2.post1 +``` + +**选项 B: SageAttention 2(强烈推荐)** + +**下载源:** +- [Windows 专用版本 1](https://github.com/woct0rdho/SageAttention/releases) +- [Windows 专用版本 2](https://github.com/sdbds/SageAttention-for-windows/releases) + +```cmd +# 安装 SageAttention(请根据实际文件名调整) +pip install sageattention-2.1.1+cu126torch2.6.0-cp312-cp312-win_amd64.whl +``` + +> ⚠️ **注意**: SageAttention 的 CUDA 版本可以不严格对齐,但 Python 和 PyTorch 版本必须匹配。 + +#### 步骤 6: 克隆项目 + +```cmd +# 克隆项目代码 +git clone https://github.com/ModelTC/LightX2V.git +cd LightX2V + +# 安装 Windows 专用依赖 +pip install -r requirements_win.txt +pip install -v -e . +``` + +#### 步骤 7: 安装量化算子(可选) + +量化算子用于支持模型量化功能,可以显著降低显存占用并加速推理。 + +**安装 VLLM(推荐):** + +从 [vllm-windows releases](https://github.com/SystemPanic/vllm-windows/releases) 下载对应的 wheel 包并安装。 + +```cmd +# 安装 vLLM(请根据实际文件名调整) +pip install vllm-0.9.1+cu124-cp312-cp312-win_amd64.whl +``` + +> 💡 **提示**: +> - 如果不需要使用量化功能,可以跳过此步骤 +> - 量化模型可以从 [LightX2V HuggingFace](https://huggingface.co/lightx2v) 下载 +> - 更多量化相关信息请参考 [量化文档](method_tutorials/quantization.html) + +#### 步骤 8: 验证安装 +```python +import lightx2v +print(f"LightX2V 版本: {lightx2v.__version__}") +``` + +## 🎯 推理使用 + +### 📥 模型准备 + +在开始推理之前,您需要提前下载好模型文件。我们推荐: + +- **下载源**: 从 [LightX2V 官方 Hugging Face](https://huggingface.co/lightx2v/)或者其他开源模型库下载模型 +- **存储位置**: 建议将模型存储在 SSD 磁盘上以获得更好的读取性能 +- **可用模型**: 包括 Wan2.1-I2V、Wan2.1-T2V 等多种模型,支持不同分辨率和功能 + +### 📁 配置文件与脚本 + +推理会用到的配置文件都在[这里](https://github.com/ModelTC/LightX2V/tree/main/configs),脚本都在[这里](https://github.com/ModelTC/LightX2V/tree/main/scripts)。 + +需要将下载的模型路径配置到运行脚本中。除了脚本中的输入参数,`--config_json` 指向的配置文件中也会包含一些必要参数,您可以根据需要自行修改。 + +### 🚀 开始推理 + +#### Linux 环境 + +```bash +# 修改脚本中的路径后运行 +bash scripts/wan/run_wan_t2v.sh +``` + +#### Windows 环境 + +```cmd +# 使用 Windows 批处理脚本 +scripts\win\run_wan_t2v.bat +``` +#### Python脚本启动 + +```python +from lightx2v import LightX2VPipeline + +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-T2V-14B", + model_cls="wan2.1", + task="t2v", +) + +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + height=480, # 720 + width=832, # 1280 + num_frames=81, + guidance_scale=5.0, + sample_shift=5.0, +) + +seed = 42 +prompt = "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +save_result_path="/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) +``` + + +## 📞 获取帮助 + +如果您在安装或使用过程中遇到问题,请: + +1. 在 [GitHub Issues](https://github.com/ModelTC/LightX2V/issues) 中搜索相关问题 +2. 提交新的 Issue 描述您的问题 + +--- + +🎉 **恭喜!** 现在您已经成功搭建了 LightX2V 环境,可以开始享受视频生成的乐趣了! diff --git a/docs/ZH_CN/source/index.rst b/docs/ZH_CN/source/index.rst new file mode 100644 index 0000000..3ea4ebd --- /dev/null +++ b/docs/ZH_CN/source/index.rst @@ -0,0 +1,68 @@ +欢迎了解 Lightx2v! +================== + +.. figure:: ../../../assets/img_lightx2v.png + :width: 80% + :align: center + :alt: Lightx2v + :class: no-scaled-link + +.. raw:: html + +
    + + License + Ask DeepWiki + Doc + Doc + Docker + +
    + +
    + LightX2V: 一个轻量级的视频生成推理框架 +
    + + +LightX2V 是一个轻量级的视频生成推理框架,集成多种先进的视频生成推理技术,统一支持 文本生成视频 (T2V)、图像生成视频 (I2V) 等多种生成任务及模型。X2V 表示将不同的输入模态(X,如文本或图像)转换(to)为视频输出(V)。 + +GitHub: https://github.com/ModelTC/lightx2v + +HuggingFace: https://huggingface.co/lightx2v + +文档列表 +------------- + +.. toctree:: + :maxdepth: 1 + :caption: 快速入门 + + 快速入门 + 模型结构 + 基准测试 + +.. toctree:: + :maxdepth: 1 + :caption: 方法教程 + + 模型量化 + 特征缓存 + 注意力机制 + 参数卸载 + 并行推理 + 变分辨率推理 + 步数蒸馏 + 自回归蒸馏 + 视频帧插值 + +.. toctree:: + :maxdepth: 1 + :caption: 部署指南 + + 低延迟场景部署 + 低资源场景部署 + Lora模型部署 + 服务化部署 + Gradio部署 + ComfyUI部署 + 本地windows电脑部署 diff --git a/docs/ZH_CN/source/method_tutorials/attention.md b/docs/ZH_CN/source/method_tutorials/attention.md new file mode 100644 index 0000000..06f9570 --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/attention.md @@ -0,0 +1,35 @@ +# 注意力机制 + +## LightX2V支持的注意力机制 + +| 名称 | 类型名称 | GitHub 链接 | +|--------------------|------------------|-------------| +| Flash Attention 2 | `flash_attn2` | [flash-attention v2](https://github.com/Dao-AILab/flash-attention) | +| Flash Attention 3 | `flash_attn3` | [flash-attention v3](https://github.com/Dao-AILab/flash-attention) | +| Sage Attention 2 | `sage_attn2` | [SageAttention](https://github.com/thu-ml/SageAttention) | +| Radial Attention | `radial_attn` | [Radial Attention](https://github.com/mit-han-lab/radial-attention) | +| Sparge Attention | `sparge_ckpt` | [Sparge Attention](https://github.com/thu-ml/SpargeAttn) | + +--- + +## 配置示例 + +注意力机制的config文件在[这里](https://github.com/ModelTC/lightx2v/tree/main/configs/attentions) + +通过指定--config_json到具体的config文件,即可以测试不同的注意力机制 + +比如对于radial_attn,配置如下: + +```json +{ + "self_attn_1_type": "radial_attn", + "cross_attn_1_type": "flash_attn3", + "cross_attn_2_type": "flash_attn3" +} +``` + +如需更换为其他类型,只需将对应值替换为上述表格中的类型名称即可。 + +tips: radial_attn因为稀疏算法原理的限制只能用在self attention + +如需进一步定制注意力机制的行为,请参考各注意力库的官方文档或实现代码。 diff --git a/docs/ZH_CN/source/method_tutorials/autoregressive_distill.md b/docs/ZH_CN/source/method_tutorials/autoregressive_distill.md new file mode 100644 index 0000000..19845ce --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/autoregressive_distill.md @@ -0,0 +1,53 @@ +# 自回归蒸馏 + +自回归蒸馏是 LightX2V 中的一个技术探索,通过训练蒸馏模型将推理步数从原始的 40-50 步减少到 **8 步**,在实现推理加速的同时能够通过 KV Cache 技术生成无限长视频。 + +> ⚠️ 警告:目前自回归蒸馏的效果一般,加速效果也没有达到预期,但是可以作为一个长期的研究项目。目前 LightX2V 仅支持 T2V 的自回归模型。 + +## 🔍 技术原理 + +自回归蒸馏通过 [CausVid](https://github.com/tianweiy/CausVid) 技术实现。CausVid 针对 1.3B 的自回归模型进行步数蒸馏、CFG蒸馏。LightX2V 在其基础上,进行了一系列扩展: + +1. **更大的模型**:支持 14B 模型的自回归蒸馏训练; +2. **更完整的数据处理流程**:生成 50,000 个提示词-视频对的训练数据集; + +具体实现可参考 [CausVid-Plus](https://github.com/GoatWu/CausVid-Plus)。 + +## 🛠️ 配置文件说明 + +### 配置文件 + +在 [configs/causvid/](https://github.com/ModelTC/lightx2v/tree/main/configs/causvid) 目录下提供了配置选项: + +| 配置文件 | 模型地址 | +|----------|------------| +| [wan_t2v_causvid.json](https://github.com/ModelTC/lightx2v/blob/main/configs/causvid/wan_t2v_causvid.json) | https://huggingface.co/lightx2v/Wan2.1-T2V-14B-CausVid | + +### 关键配置参数 + +```json +{ + "enable_cfg": false, // 关闭CFG以提升速度 + "num_fragments": 3, // 一次生成视频的段数,每段5s + "num_frames": 21, // 每段视频的帧数,谨慎修改! + "num_frame_per_block": 3, // 每个自回归块的帧数,谨慎修改! + "num_blocks": 7, // 每段视频的自回归块数,谨慎修改! + "frame_seq_length": 1560, // 每帧的编码长度,谨慎修改! + "denoising_step_list": [ // 去噪时间步列表 + 999, 934, 862, 756, 603, 410, 250, 140, 74 + ] +} +``` + +## 📜 使用方法 + +### 模型准备 + +将下载好的模型(`causal_model.pt` 或者 `causal_model.safetensors`)放到 Wan 模型根目录的 `causvid_models/` 文件夹下即可 +- 对于 T2V:`Wan2.1-T2V-14B/causvid_models/` + +### 推理脚本 + +```bash +bash scripts/wan/run_wan_t2v_causvid.sh +``` diff --git a/docs/ZH_CN/source/method_tutorials/cache.md b/docs/ZH_CN/source/method_tutorials/cache.md new file mode 100644 index 0000000..a867119 --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/cache.md @@ -0,0 +1,3 @@ +# 特征缓存 + +由于要展示一些视频的播放效果,你可以在这个[🔗 页面](https://github.com/ModelTC/LightX2V/blob/main/docs/ZH_CN/source/method_tutorials/cache_source.md)获得更好的展示效果以及相对应的文档内容。 diff --git a/docs/ZH_CN/source/method_tutorials/cache_source.md b/docs/ZH_CN/source/method_tutorials/cache_source.md new file mode 100644 index 0000000..37624af --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/cache_source.md @@ -0,0 +1,139 @@ +# 特征缓存 + +## 缓存加速算法 +- 在扩散模型的推理过程中,缓存复用是一种重要的加速算法。 +- 其核心思想是在部分时间步跳过冗余计算,通过复用历史缓存结果提升推理效率。 +- 算法的关键在于如何决策在哪些时间步进行缓存复用,通常基于模型状态变化或误差阈值动态判断。 +- 在推理过程中,需要缓存如中间特征、残差、注意力输出等关键内容。当进入可复用时间步时,直接利用已缓存的内容,通过泰勒展开等近似方法重构当前输出,从而减少重复计算,实现高效推理。 + +### TeaCache +`TeaCache`的核心思想是通过对相邻时间步输入的**相对L1**距离进行累加,当累计距离达到设定阈值时,判定当前时间步不使用缓存复用;相反,当累计距离未达到设定阈值时则使用缓存复用加速推理过程。 +- 具体来说,算法在每一步推理时计算当前输入与上一步输入的相对L1距离,并将其累加。 +- 当累计距离未超过阈值,说明模型状态变化不明显,则直接复用最近一次缓存的内容,跳过部分冗余计算。这样可以显著减少模型的前向计算次数,提高推理速度。 + +实际效果上,TeaCache 在保证生成质量的前提下,实现了明显的加速。在单卡H200上,加速前后的用时与视频对比如下: + + + + + + + + + + +
    + 加速前:58s + + 加速后:17.9s +
    + + + +
    + + +- 加速比为:**3.24** +- config:[wan_t2v_1_3b_tea_480p.json](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/teacache/wan_t2v_1_3b_tea_480p.json) +- 参考论文:[https://arxiv.org/abs/2411.19108](https://arxiv.org/abs/2411.19108) + +### TaylorSeer Cache +`TaylorSeer Cache`的核心在于利用泰勒公式对缓存内容进行再次计算,作为缓存复用时间步的残差补偿。 +- 具体做法是在缓存复用的时间步,不仅简单地复用历史缓存,还通过泰勒展开对当前输出进行近似重构。这样可以在减少计算量的同时,进一步提升输出的准确性。 +- 泰勒展开能够有效捕捉模型状态的微小变化,使得缓存复用带来的误差得到补偿,从而在加速的同时保证生成质量。 + +`TaylorSeer Cache`适用于对输出精度要求较高的场景,能够在缓存复用的基础上进一步提升模型推理的表现。 + + + + + + + + + + +
    + 加速前:57.7s + + 加速后:41.3s +
    + + + +
    + + +- 加速比为:**1.39** +- config:[wan_t2v_taylorseer](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/taylorseer/wan_t2v_taylorseer.json) +- 参考论文:[https://arxiv.org/abs/2503.06923](https://arxiv.org/abs/2503.06923) + +### AdaCache +`AdaCache`的核心思想是根据指定block块中的部分缓存内容,动态调整缓存复用的步长。 +- 算法会分析相邻两个时间步在特定 block 内的特征差异,根据差异大小自适应地决定下一个缓存复用的时间步间隔。 +- 当模型状态变化较小时,步长自动加大,减少缓存更新频率;当状态变化较大时,步长缩小,保证输出质量。 + +这样可以根据实际推理过程中的动态变化,灵活调整缓存策略,实现更高效的加速和更优的生成效果。AdaCache 适合对推理速度和生成质量都有较高要求的应用场景。 + + + + + + + + + + +
    + 加速前:227s + + 加速后:83s +
    + + + +
    + + +- 加速比为:**2.73** +- config:[wan_i2v_ada](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/adacache/wan_i2v_ada.json) +- 参考论文:[https://arxiv.org/abs/2411.02397](https://arxiv.org/abs/2411.02397) + +### CustomCache +`CustomCache`综合了`TeaCache`和`TaylorSeer Cache`的优势。 +- 它结合了`TeaCache`在缓存决策上的实时性和合理性,通过动态阈值判断何时进行缓存复用. +- 同时利用`TaylorSeer`的泰勒展开方法对已缓存内容进行利用。 + +这样不仅能够高效地决定缓存复用的时机,还能最大程度地利用缓存内容,提升输出的准确性和生成质量。实际测试表明,`CustomCache`在多个内容生成任务上,生成的视频质量优于单独使用`TeaCache、TaylorSeer Cache`或`AdaCache`的方案,是目前综合性能最优的缓存加速算法之一。 + + + + + + + + + + +
    + 加速前:57.9s + + 加速后:16.6s +
    + + + +
    + + +- 加速比为:**3.49** +- config:[wan_t2v_custom_1_3b](https://github.com/ModelTC/lightx2v/tree/main/configs/caching/custom/wan_t2v_custom_1_3b.json) + + +## 使用方式 + +特征缓存的config文件在[这里](https://github.com/ModelTC/lightx2v/tree/main/configs/caching) + +通过指定--config_json到具体的config文件,即可以测试不同的cache算法 + +[这里](https://github.com/ModelTC/lightx2v/tree/main/scripts/cache)有一些运行脚本供使用。 diff --git a/docs/ZH_CN/source/method_tutorials/changing_resolution.md b/docs/ZH_CN/source/method_tutorials/changing_resolution.md new file mode 100644 index 0000000..e4a5149 --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/changing_resolution.md @@ -0,0 +1,68 @@ +# 变分辨率推理 + +## 概述 + +变分辨率推理是一种优化去噪过程的技术策略,通过在不同的去噪阶段采用不同的分辨率来提升计算效率并保持生成质量。该方法的核心思想是:在去噪过程的前期使用较低分辨率进行粗略去噪,在后期切换到正常分辨率进行精细化处理。 + +## 技术原理 + +### 分阶段去噪策略 + +变分辨率推理基于以下观察: + +- **前期去噪**:主要处理粗糙的噪声和整体结构,不需要过多的细节信息 +- **后期去噪**:专注于细节优化和高频信息恢复,需要完整的分辨率信息 + +### 分辨率切换机制 + +1. **低分辨率阶段**(前期) + - 将输入降采样到较低分辨率(如原尺寸的0.75) + - 执行初始的去噪步骤 + - 快速移除大部分噪声,建立基本结构 + +2. **正常分辨率阶段**(后期) + - 将第一步的去噪结果上采样回原始分辨率 + - 继续执行剩余的去噪步骤 + - 恢复细节信息,完成精细化处理 + + +### U型分辨率策略 + +如果在刚开始的去噪步,降低分辨率,可能会导致最后的生成的视频和正常推理的生成的视频,整体差异偏大。因此可以采用U型的分辨率策略,即最一开始保持几步的原始分辨率,再降低分辨率推理。 + +## 使用方式 + +变分辨率推理的config文件在[这里](https://github.com/ModelTC/LightX2V/tree/main/configs/changing_resolution) + +通过指定--config_json到具体的config文件,即可以测试变分辨率推理。 + +可以参考[这里](https://github.com/ModelTC/LightX2V/blob/main/scripts/changing_resolution)的脚本运行。 + + +### 举例1: +``` +{ + "infer_steps": 50, + "changing_resolution": true, + "resolution_rate": [0.75], + "changing_resolution_steps": [25] +} +``` + +表示总步数为50,1到25步的分辨率为0.75倍原始分辨率,26到最后一步的分辨率为原始分辨率。 + +### 举例2: +``` +{ + "infer_steps": 50, + "changing_resolution": true, + "resolution_rate": [1.0, 0.75], + "changing_resolution_steps": [10, 35] +} +``` + +表示总步数为50,1到10步的分辨率为原始分辨率,11到35步的分辨率为0.75倍原始分辨率,36到最后一步的分辨率为原始分辨率。 + +通常来说,假设`changing_resolution_steps`为[A, B, C],去噪的起始步为1,总步数为X,则推理会被分成4个部分。 + +分别是,(0, A], (A, B]. (B, C], (C, X],每个部分是左开右闭集合。 diff --git a/docs/ZH_CN/source/method_tutorials/offload.md b/docs/ZH_CN/source/method_tutorials/offload.md new file mode 100644 index 0000000..2f30f47 --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/offload.md @@ -0,0 +1,177 @@ +# 参数卸载 + +## 📖 概述 + +Lightx2v 实现了先进的参数卸载机制,专为在有限硬件资源下处理大型模型推理而设计。该系统通过智能管理不同内存层次中的模型权重,提供了优秀的速度-内存平衡。 + +**核心特性:** +- **分block/phase卸载**:高效地以block/phase为单位管理模型权重,实现最优内存使用 + - **Block**:Transformer模型的基本计算单元,包含完整的Transformer层(自注意力、交叉注意力、前馈网络等),是较大的内存管理单位 + - **Phase**:Block内部的更细粒度计算阶段,包含单个计算组件(如自注意力、交叉注意力、前馈网络等),提供更精细的内存控制 +- **多级存储支持**:GPU → CPU → 磁盘层次结构,配合智能缓存 +- **异步操作**:使用 CUDA 流实现计算和数据传输的重叠 +- **磁盘/NVMe 序列化**:当内存不足时支持二级存储 + +## 🎯 卸载策略 + +### 策略一:GPU-CPU 分block/phase卸载 + +**适用场景**:GPU 显存不足但系统内存充足 + +**工作原理**:在 GPU 和 CPU 内存之间以block或phase为单位管理模型权重,利用 CUDA 流实现计算和数据传输的重叠。Block包含完整的Transformer层,而Phase则是Block内部的单个计算组件。 + +
    +GPU-CPU block/phase卸载流程图 +
    + +
    +Swap操作 +
    + +
    +Swap思想 +
    + + +**Block vs Phase 说明**: +- **Block粒度**:较大的内存管理单位,包含完整的Transformer层(自注意力、交叉注意力、前馈网络等),适合内存充足的情况,减少管理开销 +- **Phase粒度**:更细粒度的内存管理,包含单个计算组件(如自注意力、交叉注意力、前馈网络等),适合内存受限的情况,提供更灵活的内存控制 + +**关键特性:** +- **异步传输**:使用三个不同优先级的CUDA流实现计算和传输的并行 + - 计算流(priority=-1):高优先级,负责当前计算 + - GPU加载流(priority=0):中优先级,负责从CPU到GPU的预取 + - CPU加载流(priority=0):中优先级,负责从GPU到CPU的卸载 +- **预取机制**:提前将下一个block/phase加载到 GPU +- **智能缓存**:在 CPU 内存中维护权重缓存 +- **流同步**:确保数据传输和计算的正确性 +- **Swap操作**:计算完成后轮换block/phase位置,实现连续计算 + + + + +### 策略二:磁盘-CPU-GPU 分block/phase卸载(延迟加载) + +**适用场景**:GPU 显存和系统内存都不足 + +**工作原理**:在策略一的基础上引入磁盘存储,实现三级存储层次(磁盘 → CPU → GPU)。CPU继续作为缓存池,但大小可配置,适用于CPU内存受限的设备。 + + +
    +磁盘-CPU-GPU 分block/phase卸载工作流程 +
    + + +
    +工作步骤 +
    + +**关键特性:** +- **延迟加载**:模型权重按需从磁盘加载,避免一次性加载全部模型 +- **智能缓存**:CPU内存缓冲区使用FIFO策略管理,可配置大小 +- **多线程预取**:使用多个磁盘工作线程并行加载 +- **异步传输**:使用CUDA流实现计算和数据传输的重叠 +- **Swap轮换**:通过位置轮换实现连续计算,避免重复加载/卸载 + +**工作步骤**: +- **磁盘存储**:模型权重按block存储在SSD/NVMe上,每个block一个.safetensors文件 +- **任务调度**:当需要某个block/phase时,优先级任务队列分配磁盘工作线程 +- **异步加载**:多个磁盘线程并行从磁盘读取权重文件到CPU内存缓冲区 +- **智能缓存**:CPU内存缓冲区使用FIFO策略管理缓存,可配置大小 +- **缓存命中**:如果权重已在缓存中,直接传输到GPU,无需磁盘读取 +- **预取传输**:缓存中的权重异步传输到GPU内存(使用GPU加载流) +- **计算执行**:GPU上的权重进行计算(使用计算流),同时后台继续预取下一个block/phase +- **Swap轮换**:计算完成后轮换block/phase位置,实现连续计算 +- **内存管理**:当CPU缓存满时,自动淘汰最早使用的权重block/phase + + + +## ⚙️ 配置参数 + +### GPU-CPU 卸载配置 + +```python +config = { + "cpu_offload": True, + "offload_ratio": 1.0, # 卸载比例(0.0-1.0) + "offload_granularity": "block", # 卸载粒度:"block"或"phase" + "lazy_load": False, # 禁用延迟加载 +} +``` + +### 磁盘-CPU-GPU 卸载配置 + +```python +config = { + "cpu_offload": True, + "lazy_load": True, # 启用延迟加载 + "offload_ratio": 1.0, # 卸载比例 + "offload_granularity": "phase", # 推荐使用phase粒度 + "num_disk_workers": 2, # 磁盘工作线程数 + "offload_to_disk": True, # 启用磁盘卸载 +} +``` + +**智能缓存关键参数:** +- `max_memory`:控制CPU缓存大小,影响缓存命中率和内存使用 +- `num_disk_workers`:控制磁盘加载线程数,影响预取速度 +- `offload_granularity`:控制缓存粒度(block或phase),影响缓存效率 + - `"block"`:以完整的Transformer层为单位进行缓存管理 + - `"phase"`:以单个计算组件为单位进行缓存管理 + +**非 DIT 模型组件(T5、CLIP、VAE)的卸载配置:** + +这些组件的卸载行为遵循以下规则: +- **默认行为**:如果没有单独指定,T5、CLIP、VAE 会跟随 `cpu_offload` 的设置 +- **独立配置**:可以为每个组件单独设置卸载策略,实现精细控制 + +**配置示例**: +```json +{ + "cpu_offload": true, // DIT 模型卸载开关 + "t5_cpu_offload": false, // T5 编码器独立设置 + "clip_cpu_offload": false, // CLIP 编码器独立设置 + "vae_cpu_offload": false // VAE 编码器独立设置 +} +``` + +在显存受限的设备上,建议采用渐进式卸载策略: + +1. **第一步**:仅开启 `cpu_offload`,关闭 `t5_cpu_offload`、`clip_cpu_offload`、`vae_cpu_offload` +2. **第二步**:如果显存仍不足,逐步开启 T5、CLIP、VAE 的 CPU 卸载 +3. **第三步**:如果显存仍然不够,考虑使用量化 + CPU 卸载或启用 `lazy_load` + +**实践经验**: +- **RTX 4090 24GB + 14B 模型**:通常只需开启 `cpu_offload`,其他组件卸载需要手动设为 `false`,同时使用 FP8 量化版本 +- **更小显存的 GPU**:需要组合使用量化、CPU 卸载和延迟加载 +- **量化方案**:建议参考[量化技术文档](../method_tutorials/quantization.md)选择合适的量化策略 + + +**配置文件参考**: +- **Wan2.1 系列模型**:参考 [offload 配置文件](https://github.com/ModelTC/lightx2v/tree/main/configs/offload) +- **Wan2.2 系列模型**:参考 [wan22 配置文件](https://github.com/ModelTC/lightx2v/tree/main/configs/wan22) 中以 `4090` 结尾的配置文件 + +## 🎯 使用建议 +- 🔄 GPU-CPU分block/phase卸载:适合GPU显存不足(RTX 3090/4090 24G)但系统内存(>64/128G)充足 + +- 💾 磁盘-CPU-GPU分block/phase卸载:适合GPU显存(RTX 3060/4090 8G)和系统内存(16/32G)都不足 + +- 🚫 无Offload:适合高端硬件配置,追求最佳性能 + + +## 🔍 故障排除 + +### 常见问题及解决方案 + +1. **磁盘I/O瓶颈** + - 解决方案:使用NVMe SSD,增加num_disk_workers + + +2. **内存缓冲区溢出** + - 解决方案:增加max_memory或减少num_disk_workers + +3. **加载超时** + - 解决方案:检查磁盘性能,优化文件系统 + + +**注意**:本卸载机制专为Lightx2v设计,充分利用了现代硬件的异步计算能力,能够显著降低大模型推理的硬件门槛。 diff --git a/docs/ZH_CN/source/method_tutorials/parallel.md b/docs/ZH_CN/source/method_tutorials/parallel.md new file mode 100644 index 0000000..a6ff0df --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/parallel.md @@ -0,0 +1,55 @@ +# 并行推理 + +LightX2V 支持分布式并行推理,能够利用多个 GPU 进行推理。DiT部分支持两种并行注意力机制:**Ulysses** 和 **Ring**,同时还支持 **Cfg 并行推理**。并行推理,显著降低推理耗时和减轻每个GPU的显存开销。 + +## DiT 并行配置 + +### 1. Ulysses 并行 + +**配置方式:** +```json + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses" + } +``` + +### 2. Ring 并行 + + +**配置方式:** +```json + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ring" + } +``` + +## Cfg 并行配置 + +**配置方式:** +```json + "parallel": { + "cfg_p_size": 2 + } +``` + +## 混合并行配置 + +**配置方式:** +```json + "parallel": { + "seq_p_size": 4, + "seq_p_attn_type": "ulysses", + "cfg_p_size": 2 + } +``` + + +## 使用方式 + +并行推理的config文件在[这里](https://github.com/ModelTC/lightx2v/tree/main/configs/dist_infer) + +通过指定--config_json到具体的config文件,即可以测试并行推理 + +[这里](https://github.com/ModelTC/lightx2v/tree/main/scripts/dist_infer)有一些运行脚本供使用。 diff --git a/docs/ZH_CN/source/method_tutorials/quantization.md b/docs/ZH_CN/source/method_tutorials/quantization.md new file mode 100644 index 0000000..311367c --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/quantization.md @@ -0,0 +1,158 @@ +# 模型量化技术 + +## 📖 概述 + +LightX2V 支持对 DIT、T5 和 CLIP 模型进行量化推理,通过降低模型精度来减少显存占用并提升推理速度。 + +--- + +## 🔧 量化模式 + +| 量化模式 | 权重量化 | 激活量化 | 计算内核 | 适用硬件 | +|--------------|----------|----------|----------|----------| +| `fp8-vllm` | FP8 通道对称 | FP8 通道动态对称 | [VLLM](https://github.com/vllm-project/vllm) | H100/H200/H800, RTX 40系等 | +| `int8-vllm` | INT8 通道对称 | INT8 通道动态对称 | [VLLM](https://github.com/vllm-project/vllm) | A100/A800, RTX 30/40系等 | +| `fp8-sgl` | FP8 通道对称 | FP8 通道动态对称 | [SGL](https://github.com/sgl-project/sglang/tree/main/sgl-kernel) | H100/H200/H800, RTX 40系等 | +| `int8-sgl` | INT8 通道对称 | INT8 通道动态对称 | [SGL](https://github.com/sgl-project/sglang/tree/main/sgl-kernel) | A100/A800, RTX 30/40系等 | +| `fp8-q8f` | FP8 通道对称 | FP8 通道动态对称 | [Q8-Kernels](https://github.com/KONAKONA666/q8_kernels) | RTX 40系, L40S等 | +| `int8-q8f` | INT8 通道对称 | INT8 通道动态对称 | [Q8-Kernels](https://github.com/KONAKONA666/q8_kernels) | RTX 40系, L40S等 | +| `int8-torchao` | INT8 通道对称 | INT8 通道动态对称 | [TorchAO](https://github.com/pytorch/ao) | A100/A800, RTX 30/40系等 | +| `int4-g128-marlin` | INT4 分组对称 | FP16 | [Marlin](https://github.com/IST-DASLab/marlin) | H200/H800/A100/A800, RTX 30/40系等 | +| `fp8-b128-deepgemm` | FP8 分块对称 | FP8 分组对称 | [DeepGemm](https://github.com/deepseek-ai/DeepGEMM) | H100/H200/H800, RTX 40系等| + +--- + +## 🔧 量化模型获取 + +### 方式一:下载预量化模型 + +从 LightX2V 模型仓库下载预量化的模型: + +**DIT 模型** + +从 [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) 下载预量化的 DIT 模型: + +```bash +# 下载 DIT FP8 量化模型 +huggingface-cli download lightx2v/Wan2.1-Distill-Models \ + --local-dir ./models \ + --include "wan2.1_i2v_720p_scaled_fp8_e4m3_lightx2v_4step.safetensors" +``` + +**Encoder 模型** + +从 [Encoders-LightX2V](https://huggingface.co/lightx2v/Encoders-Lightx2v) 下载预量化的 T5 和 CLIP 模型: + +```bash +# 下载 T5 FP8 量化模型 +huggingface-cli download lightx2v/Encoders-Lightx2v \ + --local-dir ./models \ + --include "models_t5_umt5-xxl-enc-fp8.pth" + +# 下载 CLIP FP8 量化模型 +huggingface-cli download lightx2v/Encoders-Lightx2v \ + --local-dir ./models \ + --include "models_clip_open-clip-xlm-roberta-large-vit-huge-14-fp8.pth" +``` + +### 方式二:自行量化模型 + +详细量化工具使用方法请参考:[模型转换文档](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md) + +--- + +## 🚀 量化模型使用 + +### DIT 模型量化 + +#### 支持的量化模式 + +DIT 量化模式(`dit_quant_scheme`)支持:`fp8-vllm`、`int8-vllm`、`fp8-sgl`、`int8-sgl`、`fp8-q8f`、`int8-q8f`、`int8-torchao`、`int4-g128-marlin`、`fp8-b128-deepgemm` + +#### 配置示例 + +```json +{ + "dit_quantized": true, + "dit_quant_scheme": "fp8-sgl", + "dit_quantized_ckpt": "/path/to/dit_quantized_model" // 可选 +} +``` + +> 💡 **提示**:当运行脚本的 `model_path` 中只有一个 DIT 模型时,`dit_quantized_ckpt` 可以不用单独指定。 + +### T5 模型量化 + +#### 支持的量化模式 + +T5 量化模式(`t5_quant_scheme`)支持:`int8-vllm`、`fp8-sgl`、`int8-q8f`、`fp8-q8f`、`int8-torchao` + +#### 配置示例 + +```json +{ + "t5_quantized": true, + "t5_quant_scheme": "fp8-sgl", + "t5_quantized_ckpt": "/path/to/t5_quantized_model" // 可选 +} +``` + +> 💡 **提示**:当运行脚本指定的 `model_path` 中存在 T5 量化模型(如 `models_t5_umt5-xxl-enc-fp8.pth` 或 `models_t5_umt5-xxl-enc-int8.pth`)时,`t5_quantized_ckpt` 可以不用单独指定。 + +### CLIP 模型量化 + +#### 支持的量化模式 + +CLIP 量化模式(`clip_quant_scheme`)支持:`int8-vllm`、`fp8-sgl`、`int8-q8f`、`fp8-q8f`、`int8-torchao` + +#### 配置示例 + +```json +{ + "clip_quantized": true, + "clip_quant_scheme": "fp8-sgl", + "clip_quantized_ckpt": "/path/to/clip_quantized_model" // 可选 +} +``` + +> 💡 **提示**:当运行脚本指定的 `model_path` 中存在 CLIP 量化模型(如 `models_clip_open-clip-xlm-roberta-large-vit-huge-14-fp8.pth` 或 `models_clip_open-clip-xlm-roberta-large-vit-huge-14-int8.pth`)时,`clip_quantized_ckpt` 可以不用单独指定。 + +### 性能优化策略 + +如果显存不够,可以结合参数卸载来进一步减少显存占用,参考[参数卸载文档](../method_tutorials/offload.md): + +> - **Wan2.1 配置**:参考 [offload 配置文件](https://github.com/ModelTC/LightX2V/tree/main/configs/offload) +> - **Wan2.2 配置**:参考 [wan22 配置文件](https://github.com/ModelTC/LightX2V/tree/main/configs/wan22) 中以 `4090` 结尾的配置 + +--- + +## 📚 相关资源 + +### 配置文件示例 +- [INT8 量化配置](https://github.com/ModelTC/LightX2V/blob/main/configs/quantization/wan_i2v.json) +- [Q8F 量化配置](https://github.com/ModelTC/LightX2V/blob/main/configs/quantization/wan_i2v_q8f.json) +- [TorchAO 量化配置](https://github.com/ModelTC/LightX2V/blob/main/configs/quantization/wan_i2v_torchao.json) + +### 运行脚本 +- [量化推理脚本](https://github.com/ModelTC/LightX2V/tree/main/scripts/quantization) + +### 工具文档 +- [量化工具文档](https://github.com/ModelTC/lightx2v/tree/main/tools/convert/readme_zh.md) +- [LightCompress 量化文档](https://github.com/ModelTC/llmc/blob/main/docs/zh_cn/source/backend/lightx2v.md) + +### 模型仓库 +- [Wan2.1-LightX2V 量化模型](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- [Wan2.2-LightX2V 量化模型](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) +- [Encoders 量化模型](https://huggingface.co/lightx2v/Encoders-Lightx2v) + +--- + +通过本文档,您应该能够: + +✅ 理解 LightX2V 支持的量化方案 +✅ 根据硬件选择合适的量化策略 +✅ 正确配置量化参数 +✅ 获取和使用量化模型 +✅ 优化推理性能和显存使用 + +如有其他问题,欢迎在 [GitHub Issues](https://github.com/ModelTC/LightX2V/issues) 中提问。 diff --git a/docs/ZH_CN/source/method_tutorials/step_distill.md b/docs/ZH_CN/source/method_tutorials/step_distill.md new file mode 100644 index 0000000..2ed48c8 --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/step_distill.md @@ -0,0 +1,183 @@ +# 步数蒸馏 + +步数蒸馏是 LightX2V 中的一项重要优化技术,通过训练蒸馏模型将推理步数从原始的 40-50 步大幅减少到 **4 步**,在保持视频质量的同时显著提升推理速度。LightX2V 在实现步数蒸馏的同时也加入了 CFG 蒸馏,进一步提升推理速度。 + +## 🔍 技术原理 + +### DMD 蒸馏 + +步数蒸馏的核心技术是 [DMD 蒸馏](https://arxiv.org/abs/2311.18828)。DMD 蒸馏的框架如下图所示: + +
    +DMD 蒸馏框架 +
    + +DMD蒸馏的核心思想是最小化蒸馏模型与原始模型输出分布的 KL 散度: + +$$ +\begin{aligned} +D_{KL}\left(p_{\text{fake}} \; \| \; p_{\text{real}} \right) &= \mathbb{E}{x\sim p\text{fake}}\left(\log\left(\frac{p_\text{fake}(x)}{p_\text{real}(x)}\right)\right)\\ +&= \mathbb{E}{\substack{ +z \sim \mathcal{N}(0; \mathbf{I}) \\ +x = G_\theta(z) +}}-\big(\log~p_\text{real}(x) - \log~p_\text{fake}(x)\big). +\end{aligned} +$$ + +由于直接计算概率密度几乎是不可能的,因此 DMD 蒸馏改为计算这个 KL 散度的梯度: + +$$ +\begin{aligned} +\nabla_\theta D_{KL} +&= \mathbb{E}{\substack{ +z \sim \mathcal{N}(0; \mathbf{I}) \\ +x = G_\theta(z) +} } \Big[- +\big( +s_\text{real}(x) - s_\text{fake}(x)\big) +\hspace{.5mm} \frac{dG}{d\theta} +\Big], +\end{aligned} +$$ + +其中 $s_\text{real}(x) =\nabla_{x} \text{log}~p_\text{real}(x)$ 和 $s_\text{fake}(x) =\nabla_{x} \text{log}~p_\text{fake}(x)$ 为得分函数。得分函数可以由模型进行计算。因此,DMD 蒸馏一共维护三个模型: + +- `real_score`,计算真实分布的得分;由于真实分布是固定的,因此 DMD 蒸馏使用固定权重的原始模型作为其得分函数; +- `fake_score`,计算伪分布的得分;由于伪分布是不断更新的,因此 DMD 蒸馏使用原始模型对其初始化,并对其进行微调以学习生成器的输出分布; +- `generator`,学生模型,通过计算 `real_score` 与 `fake_score` KL 散度的梯度指导其优化方向。 + +> 参考文献: +> 1. [DMD (One-step Diffusion with Distribution Matching Distillation)](https://arxiv.org/abs/2311.18828) +> 2. [DMD2 (Improved Distribution Matching Distillation for Fast Image Synthesis)](https://arxiv.org/abs/2405.14867) + +### Self-Forcing + +DMD 蒸馏技术是针对图像生成的。Lightx2v 中的步数蒸馏基于 [Self-Forcing](https://github.com/guandeh17/Self-Forcing) 技术实现。Self-Forcing 的整体实现与 DMD 类似,但是仿照 DMD2,去掉了它的回归损失,而是使用了 ODE 初始化。此外,Self-Forcing 针对视频生成任务加入了一个重要优化: + +目前基于 DMD 蒸馏的方法难以一步生成视频。Self-Forcing 每次选择一个时间步进行优化,generator 仅仅在这一步计算梯度。这种方法使得 Self-Forcing 的训练速度显著提升,并且提升了中间时间步的去噪质量,其效果亦有所提升。 + +> 参考文献: +> 1. [Self-Forcing (Self Forcing: Bridging the Train-Test Gap in Autoregressive Video Diffusion)](https://arxiv.org/abs/2506.08009) + +### Lightx2v + +Self-Forcing 针对 1.3B 的自回归模型进行步数蒸馏、CFG蒸馏。LightX2V 在其基础上,进行了一系列扩展: + +1. **更大的模型**:支持 14B 模型的步数蒸馏训练; +2. **更多的模型**:支持标准的双向模型,以及 I2V 模型的步数蒸馏训练; +3. **更好的效果**:Lightx2v 使用了约 50,000 条数据的高质量 prompt 进行训练; + +具体实现可参考 [Self-Forcing-Plus](https://github.com/GoatWu/Self-Forcing-Plus)。 + +## 🎯 技术特性 + +- **推理加速**:推理步数从 40-50 步减少到 4 步且无需 CFG,速度提升约 **20-24x** +- **质量保持**:通过蒸馏技术保持原有的视频生成质量 +- **兼容性强**:支持 T2V 和 I2V 任务 +- **使用灵活**:支持加载完整步数蒸馏模型,或者在原生模型的基础上加载步数蒸馏LoRA;支持与 int8/fp8 模型量化相兼容 + +## 🛠️ 配置文件说明 + +### 基础配置文件 + +在 [configs/distill/](https://github.com/ModelTC/lightx2v/tree/main/configs/distill) 目录下提供了多种配置选项: + +| 配置文件 | 用途 | 模型地址 | +|----------|------|------------| +| [wan_t2v_distill_4step_cfg.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_t2v_distill_4step_cfg.json) | 加载 T2V 4步蒸馏完整模型 | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-T2V-14B-StepDistill-CfgDistill-Lightx2v/blob/main/distill_models/distill_model.safetensors) | +| [wan_i2v_distill_4step_cfg.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_i2v_distill_4step_cfg.json) | 加载 I2V 4步蒸馏完整模型 | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v/blob/main/distill_models/distill_model.safetensors) | +| [wan_t2v_distill_4step_cfg_lora.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_t2v_distill_4step_cfg_lora.json) | 加载 Wan-T2V 模型和步数蒸馏 LoRA | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-T2V-14B-StepDistill-CfgDistill-Lightx2v/blob/main/loras/Wan21_T2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors) | +| [wan_i2v_distill_4step_cfg_lora.json](https://github.com/ModelTC/lightx2v/blob/main/configs/distill/wan_i2v_distill_4step_cfg_lora.json) | 加载 Wan-I2V 模型和步数蒸馏 LoRA | [hugging-face](https://huggingface.co/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v/blob/main/loras/Wan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors) | + +### 关键配置参数 + +- 由于 DMD 蒸馏仅训练几个固定的时间步,因此我们推荐使用 `LCM Scheduler` 进行推理。[WanStepDistillScheduler](https://github.com/ModelTC/LightX2V/blob/main/lightx2v/models/schedulers/wan/step_distill/scheduler.py) 中,已经固定使用 `LCM Scheduler`,无需用户进行配置。 +- `infer_steps`, `denoising_step_list` 和 `sample_shift` 设置为与训练时相匹配的参数,一般不建议用户修改。 +- `enable_cfg` 一定设置为 `false`(等价于设置 `sample_guide_scale = 1`),否则可能出现视频完全模糊的现象。 +- `lora_configs` 支持融合不同强度的多个 lora。当 `lora_configs` 不为空时,默认加载原始的 `Wan2.1` 模型。因此使用 `lora_config` 并且想要使用步数蒸馏时,请设置步数蒸馏lora的路径与强度。 + +```json +{ + "infer_steps": 4, // 推理步数 + "denoising_step_list": [1000, 750, 500, 250], // 去噪时间步列表 + "sample_shift": 5, // 调度器 timestep shift + "enable_cfg": false, // 关闭CFG以提升速度 + "lora_configs": [ // LoRA权重路径(可选) + { + "path": "path/to/distill_lora.safetensors", + "strength": 1.0 + } + ] +} +``` + +## 📜 使用方法 + +### 模型准备 + +**完整模型:** +将下载好的模型(`distill_model.pt` 或者 `distill_model.safetensors`)放到 Wan 模型根目录的 `distill_models/` 文件夹下即可 + +- 对于 T2V:`Wan2.1-T2V-14B/distill_models/` +- 对于 I2V-480P:`Wan2.1-I2V-14B-480P/distill_models/` + +**LoRA:** + +1. 将下载好的 LoRA 放到任意位置 +2. 修改配置文件中的 `lora_path` 参数为 LoRA 存放路径即可 + +### 推理脚本 + +**T2V 完整模型:** + +```bash +bash scripts/wan/run_wan_t2v_distill_4step_cfg.sh +``` + +**I2V 完整模型:** + +```bash +bash scripts/wan/run_wan_i2v_distill_4step_cfg.sh +``` + +### 步数蒸馏 LoRA 推理脚本 + +**T2V LoRA:** + +```bash +bash scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh +``` + +**I2V LoRA:** + +```bash +bash scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh +``` + +## 🔧 服务化部署 + +### 启动蒸馏模型服务 + +对 [scripts/server/start_server.sh](https://github.com/ModelTC/lightx2v/blob/main/scripts/server/start_server.sh) 中的启动命令进行修改: + +```bash +python -m lightx2v.api_server \ + --model_cls wan2.1_distill \ + --task t2v \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg.json \ + --port 8000 \ + --nproc_per_node 1 +``` + +运行服务启动脚本: + +```bash +scripts/server/start_server.sh +``` + +更多详细信息见[服务化部署](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_service.html)。 + +### 在 Gradio 界面中使用 + +见 [Gradio 文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/deploy_guides/deploy_gradio.html) diff --git a/docs/ZH_CN/source/method_tutorials/video_frame_interpolation.md b/docs/ZH_CN/source/method_tutorials/video_frame_interpolation.md new file mode 100644 index 0000000..7df2b6b --- /dev/null +++ b/docs/ZH_CN/source/method_tutorials/video_frame_interpolation.md @@ -0,0 +1,246 @@ +# 视频帧插值 (VFI) + +> **重要说明**: 视频帧插值功能通过配置文件启用,而不是通过命令行参数。请在配置 JSON 文件中添加 `video_frame_interpolation` 配置块来启用此功能。 + +## 概述 + +视频帧插值(VFI)是一种在现有帧之间生成中间帧的技术,用于提高帧率并创建更流畅的视频播放效果。LightX2V 集成了 RIFE(Real-Time Intermediate Flow Estimation)模型,提供高质量的帧插值能力。 + +## 什么是 RIFE? + +RIFE 是一种最先进的视频帧插值方法,使用光流估计来生成中间帧。它能够有效地: + +- 提高视频帧率(例如,从 16 FPS 提升到 32 FPS) +- 创建平滑的运动过渡 +- 保持高视觉质量,最少伪影 +- 实时处理视频 + +## 安装和设置 + +### 下载 RIFE 模型 + +首先,使用提供的脚本下载 RIFE 模型权重: + +```bash +python tools/download_rife.py <目标目录> +``` + +例如,下载到指定位置: +```bash +python tools/download_rife.py /path/to/rife/train_log +``` + +此脚本将: +- 从 HuggingFace 下载 RIFEv4.26 模型 +- 提取并将模型文件放置在正确的目录中 +- 清理临时文件 + +## 使用方法 + +### 配置文件设置 + +视频帧插值功能通过配置文件启用。在你的配置 JSON 文件中添加 `video_frame_interpolation` 配置块: + +```json +{ + "infer_steps": 50, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "fps": 16, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 32, + "model_path": "/path/to/rife/train_log" + } +} +``` + +### 命令行使用 + +使用包含 VFI 配置的配置文件运行推理: + +```bash +python lightx2v/infer.py \ + --model_cls wan2.1 \ + --task t2v \ + --model_path /path/to/model \ + --config_json ./configs/video_frame_interpolation/wan_t2v.json \ + --prompt "美丽的海上日落" \ + --save_result_path ./output.mp4 +``` + +### 配置参数说明 + +在 `video_frame_interpolation` 配置块中: + +- `algo`: 帧插值算法,目前支持 "rife" +- `target_fps`: 输出视频的目标帧率 +- `model_path`: RIFE 模型路径,通常为 "train_log" + +其他相关配置: +- `fps`: 源视频帧率(默认 16) + +### 配置优先级 + +系统会自动处理视频帧率配置,优先级如下: +1. `video_frame_interpolation.target_fps` - 如果启用视频帧插值,使用此帧率作为输出帧率 +2. `fps`(默认 16)- 如果未启用视频帧插值,使用此帧率;同时总是用作源帧率 + + +## 工作原理 + +### 帧插值过程 + +1. **源视频生成**: 基础模型以源 FPS 生成视频帧 +2. **帧分析**: RIFE 分析相邻帧以估计光流 +3. **中间帧生成**: 在现有帧之间生成新帧 +4. **时序平滑**: 插值帧创建平滑的运动过渡 + +### 技术细节 + +- **输入格式**: ComfyUI 图像张量 [N, H, W, C],范围 [0, 1] +- **输出格式**: 插值后的 ComfyUI 图像张量 [M, H, W, C],范围 [0, 1] +- **处理**: 自动填充和分辨率处理 +- **内存优化**: 高效的 GPU 内存管理 + +## 示例配置 + +### 基础帧率翻倍 + +创建配置文件 `wan_t2v_vfi_32fps.json`: + +```json +{ + "infer_steps": 50, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "seed": 42, + "sample_guide_scale": 6, + "enable_cfg": true, + "fps": 16, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 32, + "model_path": "/path/to/rife/train_log" + } +} +``` + +运行命令: +```bash +python lightx2v/infer.py \ + --model_cls wan2.1 \ + --task t2v \ + --model_path ./models/wan2.1 \ + --config_json ./wan_t2v_vfi_32fps.json \ + --prompt "一只小猫在花园里玩耍" \ + --save_result_path ./output_32fps.mp4 +``` + +### 更高帧率增强 + +创建配置文件 `wan_i2v_vfi_60fps.json`: + +```json +{ + "infer_steps": 30, + "target_video_length": 81, + "target_height": 480, + "target_width": 832, + "seed": 42, + "sample_guide_scale": 6, + "enable_cfg": true, + "fps": 16, + "video_frame_interpolation": { + "algo": "rife", + "target_fps": 60, + "model_path": "/path/to/rife/train_log" + } +} +``` + +运行命令: +```bash +python lightx2v/infer.py \ + --model_cls wan2.1 \ + --task i2v \ + --model_path ./models/wan2.1 \ + --config_json ./wan_i2v_vfi_60fps.json \ + --image_path ./input.jpg \ + --prompt "平滑的相机运动" \ + --save_result_path ./output_60fps.mp4 +``` + +## 性能考虑 + +### 内存使用 + +- RIFE 处理需要额外的 GPU 内存 +- 内存使用量与视频分辨率和长度成正比 +- 对于较长的视频,考虑使用较低的分辨率 + +### 处理时间 + +- 帧插值会增加处理开销 +- 更高的目标帧率需要更多计算 +- 处理时间大致与插值帧数成正比 + +### 质量与速度权衡 + +- 更高的插值比率可能引入伪影 +- 最佳范围:2x 到 4x 帧率增加 +- 对于极端插值(>4x),考虑多次处理 + +## 最佳实践 + +### 最佳使用场景 + +- **运动密集视频**: 从帧插值中受益最多 +- **相机运动**: 更平滑的平移和缩放 +- **动作序列**: 减少运动模糊感知 +- **慢动作效果**: 创建流畅的慢动作视频 + +### 推荐设置 + +- **源 FPS**: 16-24 FPS(基础模型生成) +- **目标 FPS**: 32-60 FPS(2x 到 4x 增加) +- **分辨率**: 最高 720p 以获得最佳性能 + +### 故障排除 + +#### 常见问题 + +1. **内存不足**: 减少视频分辨率或目标 FPS +2. **输出中有伪影**: 降低插值比率 +3. **处理缓慢**: 检查 GPU 内存并考虑使用 CPU 卸载 + +#### 解决方案 + +通过修改配置文件来解决问题: + +```json +{ + // 内存问题解决:使用较低分辨率 + "target_height": 480, + "target_width": 832, + + // 质量问题解决:使用适中的插值 + "video_frame_interpolation": { + "target_fps": 24 // 而不是 60 + }, + + // 性能问题解决:启用卸载 + "cpu_offload": true +} +``` + +## 技术实现 + +LightX2V 中的 RIFE 集成包括: + +- **RIFEWrapper**: 与 ComfyUI 兼容的 RIFE 模型包装器 +- **自动模型加载**: 与推理管道的无缝集成 +- **内存优化**: 高效的张量管理和 GPU 内存使用 +- **质量保持**: 在添加帧的同时保持原始视频质量 diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..8bee25d --- /dev/null +++ b/examples/README.md @@ -0,0 +1,284 @@ +# LightX2V Usage Examples + +This document introduces how to use LightX2V for video generation, including basic usage and advanced configurations. + +## 📋 Table of Contents + +- [Environment Setup](#environment-setup) +- [Basic Usage Examples](#basic-usage-examples) +- [Model Path Configuration](#model-path-configuration) +- [Creating Generator](#creating-generator) +- [Advanced Configurations](#advanced-configurations) + - [Parameter Offloading](#parameter-offloading) + - [Model Quantization](#model-quantization) + - [Parallel Inference](#parallel-inference) + - [Feature Caching](#feature-caching) + - [Lightweight VAE](#lightweight-vae) + +## 🔧 Environment Setup + +Please refer to the main project's [Quick Start Guide](../docs/EN/source/getting_started/quickstart.md) for environment setup. + +## 🚀 Basic Usage Examples + +A minimal code example can be found in `examples/wan_t2v.py`: + +```python +from lightx2v import LightX2VPipeline + +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-T2V-14B", + model_cls="wan2.1", + task="t2v", +) + +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + height=480, + width=832, + num_frames=81, + guidance_scale=5.0, + sample_shift=5.0, +) + +seed = 42 +prompt = "Your prompt here" +negative_prompt = "" +save_result_path="/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) +``` + +## 📁 Model Path Configuration + +### Basic Configuration + +Pass the model path to `LightX2VPipeline`: + +```python +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe", # For wan2.1, use "wan2.1" + task="i2v", +) +``` + +### Specifying Multiple Model Weight Versions + +When there are multiple versions of bf16 precision DIT model safetensors files in the `model_path` directory, you need to use the following parameters to specify which weights to use: + +- **`dit_original_ckpt`**: Used to specify the original DIT weight path for models like wan2.1 and hunyuan15 +- **`low_noise_original_ckpt`**: Used to specify the low noise branch weight path for wan2.2 models +- **`high_noise_original_ckpt`**: Used to specify the high noise branch weight path for wan2.2 models + +**Usage Example:** + +```python +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe", + task="i2v", + low_noise_original_ckpt="/path/to/low_noise_model.safetensors", + high_noise_original_ckpt="/path/to/high_noise_model.safetensors", +) +``` + +## 🎛️ Creating Generator + +### Loading from Configuration File + +The generator can be loaded directly from a JSON configuration file. Configuration files are located in the `configs` directory: + +```python +pipe.create_generator(config_json="../configs/wan/wan_t2v.json") +``` + +### Creating Generator Manually + +You can also create the generator manually and configure multiple parameters: + +```python +pipe.create_generator( + attn_mode="flash_attn2", # Options: flash_attn2, flash_attn3, sage_attn2, sage_attn3 (B-architecture GPUs) + infer_steps=50, # Number of inference steps + num_frames=81, # Number of video frames + height=480, # Video height + width=832, # Video width + guidance_scale=5.0, # CFG guidance strength (CFG disabled when =1) + sample_shift=5.0, # Sample shift + fps=16, # Frame rate + aspect_ratio="16:9", # Aspect ratio + boundary=0.900, # Boundary value + boundary_step_index=2, # Boundary step index + denoising_step_list=[1000, 750, 500, 250], # Denoising step list +) +``` + +**Parameter Description:** +- **Resolution**: Specified via `height` and `width` +- **CFG**: Specified via `guidance_scale` (set to 1 to disable CFG) +- **FPS**: Specified via `fps` +- **Video Length**: Specified via `num_frames` +- **Inference Steps**: Specified via `infer_steps` +- **Sample Shift**: Specified via `sample_shift` +- **Attention Mode**: Specified via `attn_mode`, options include `flash_attn2`, `flash_attn3`, `sage_attn2`, `sage_attn3` (for B-architecture GPUs) + +## ⚙️ Advanced Configurations + +**⚠️ Important: When manually creating a generator, you can configure some advanced options. All advanced configurations must be specified before `create_generator()`, otherwise they will not take effect!** + +### Parameter Offloading + +Significantly reduces memory usage with almost no impact on inference speed. Suitable for RTX 30/40/50 series GPUs. + +```python +pipe.enable_offload( + cpu_offload=True, # Enable CPU offloading + offload_granularity="block", # Offload granularity: "block" or "phase" + text_encoder_offload=False, # Whether to offload text encoder + image_encoder_offload=False, # Whether to offload image encoder + vae_offload=False, # Whether to offload VAE +) +``` + +**Notes:** +- For Wan models, `offload_granularity` supports both `"block"` and `"phase"` +- For HunyuanVideo-1.5, only `"block"` is currently supported + +### Model Quantization + +Quantization can significantly reduce memory usage and accelerate inference. + +```python +pipe.enable_quantize( + dit_quantized=False, # Whether to use quantized DIT model + text_encoder_quantized=False, # Whether to use quantized text encoder + image_encoder_quantized=False, # Whether to use quantized image encoder + dit_quantized_ckpt=None, # DIT quantized weight path (required when model_path doesn't contain quantized weights or has multiple weight files) + low_noise_quantized_ckpt=None, # Wan2.2 low noise branch quantized weight path + high_noise_quantized_ckpt=None, # Wan2.2 high noise branch quantized weight path + text_encoder_quantized_ckpt=None, # Text encoder quantized weight path (required when model_path doesn't contain quantized weights or has multiple weight files) + image_encoder_quantized_ckpt=None, # Image encoder quantized weight path (required when model_path doesn't contain quantized weights or has multiple weight files) + quant_scheme="fp8-sgl", # Quantization scheme +) +``` + +**Parameter Description:** +- **`dit_quantized_ckpt`**: When the `model_path` directory doesn't contain quantized weights, or has multiple weight files, you need to specify the specific DIT quantized weight path +- **`text_encoder_quantized_ckpt`** and **`image_encoder_quantized_ckpt`**: Similarly, used to specify encoder quantized weight paths +- **`low_noise_quantized_ckpt`** and **`high_noise_quantized_ckpt`**: Used to specify dual-branch quantized weights for Wan2.2 models + +**Quantized Model Downloads:** + +- **Wan-2.1 Quantized Models**: Download from [Wan2.1-Distill-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) +- **Wan-2.2 Quantized Models**: Download from [Wan2.2-Distill-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) +- **HunyuanVideo-1.5 Quantized Models**: Download from [Hy1.5-Quantized-Models](https://huggingface.co/lightx2v/Hy1.5-Quantized-Models) + - `hy15_qwen25vl_llm_encoder_fp8_e4m3_lightx2v.safetensors` is the quantized weight for the text encoder + +**Usage Examples:** + +```python +# HunyuanVideo-1.5 Quantization Example +pipe.enable_quantize( + quant_scheme='fp8-sgl', + dit_quantized=True, + dit_quantized_ckpt="/path/to/hy15_720p_i2v_fp8_e4m3_lightx2v.safetensors", + text_encoder_quantized=True, + image_encoder_quantized=False, + text_encoder_quantized_ckpt="/path/to/hy15_qwen25vl_llm_encoder_fp8_e4m3_lightx2v.safetensors", +) + +# Wan2.1 Quantization Example +pipe.enable_quantize( + dit_quantized=True, + dit_quantized_ckpt="/path/to/wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_4step.safetensors", +) + +# Wan2.2 Quantization Example +pipe.enable_quantize( + dit_quantized=True, + low_noise_quantized_ckpt="/path/to/wan2.2_i2v_A14b_low_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors", + high_noise_quantized_ckpt="/path/to/wan2.2_i2v_A14b_high_noise_scaled_fp8_e4m3_lightx2v_4step_1030.safetensors", +) +``` + +**Quantization Scheme Reference:** For detailed information, please refer to the [Quantization Documentation](../docs/EN/source/method_tutorials/quantization.md) + +### Parallel Inference + +Supports multi-GPU parallel inference. Requires running with `torchrun`: + +```python +pipe.enable_parallel( + seq_p_size=4, # Sequence parallel size + seq_p_attn_type="ulysses", # Sequence parallel attention type +) +``` + +**Running Method:** +```bash +torchrun --nproc_per_node=4 your_script.py +``` + +### Feature Caching + +You can specify the cache method as Mag or Tea, using MagCache and TeaCache methods: + +```python +pipe.enable_cache( + cache_method='Tea', # Cache method: 'Tea' or 'Mag' + coefficients=[-3.08907507e+04, 1.67786188e+04, -3.19178643e+03, + 2.60740519e+02, -8.19205881e+00, 1.07913775e-01], # Coefficients + teacache_thresh=0.15, # TeaCache threshold +) +``` + +**Coefficient Reference:** Refer to configuration files in `configs/caching` or `configs/hunyuan_video_15/cache` directories + +### Lightweight VAE + +Using lightweight VAE can accelerate decoding and reduce memory usage. + +```python +pipe.enable_lightvae( + use_lightvae=False, # Whether to use LightVAE + use_tae=False, # Whether to use LightTAE + vae_path=None, # Path to LightVAE + tae_path=None, # Path to LightTAE +) +``` + +**Support Status:** +- **LightVAE**: Currently only supports wan2.1, wan2.2 moe +- **LightTAE**: Currently only supports wan2.1, wan2.2-ti2v, wan2.2 moe, HunyuanVideo-1.5 + +**Model Downloads:** Lightweight VAE models can be downloaded from [Autoencoders](https://huggingface.co/lightx2v/Autoencoders) + +- LightVAE for Wan-2.1: [lightvaew2_1.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lightvaew2_1.safetensors) +- LightTAE for Wan-2.1: [lighttaew2_1.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaew2_1.safetensors) +- LightTAE for Wan-2.2-ti2v: [lighttaew2_2.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaew2_2.safetensors) +- LightTAE for HunyuanVideo-1.5: [lighttaehy1_5.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaehy1_5.safetensors) + +**Usage Example:** + +```python +# Using LightTAE for HunyuanVideo-1.5 +pipe.enable_lightvae( + use_tae=True, + tae_path="/path/to/lighttaehy1_5.safetensors", + use_lightvae=False, + vae_path=None +) +``` + +## 📚 More Resources + +- [Full Documentation](https://lightx2v-en.readthedocs.io/en/latest/) +- [GitHub Repository](https://github.com/ModelTC/LightX2V) +- [HuggingFace Model Hub](https://huggingface.co/lightx2v) diff --git a/examples/README_zh.md b/examples/README_zh.md new file mode 100644 index 0000000..124b527 --- /dev/null +++ b/examples/README_zh.md @@ -0,0 +1,284 @@ +# LightX2V 使用示例 + +本文档介绍如何使用 LightX2V 进行视频生成,包括基础使用和进阶配置。 + +## 📋 目录 + +- [环境安装](#环境安装) +- [基础运行示例](#基础运行示例) +- [模型路径配置](#模型路径配置) +- [创建生成器](#创建生成器) +- [进阶配置](#进阶配置) + - [参数卸载 (Offload)](#参数卸载-offload) + - [模型量化 (Quantization)](#模型量化-quantization) + - [并行推理 (Parallel Inference)](#并行推理-parallel-inference) + - [特征缓存 (Cache)](#特征缓存-cache) + - [轻量 VAE (Light VAE)](#轻量-vae-light-vae) + +## 🔧 环境安装 + +请参考主项目的[快速入门文档](../docs/ZH_CN/source/getting_started/quickstart.md)进行环境安装。 + +## 🚀 基础运行示例 + +最小化代码示例可参考 `examples/wan_t2v.py`: + +```python +from lightx2v import LightX2VPipeline + +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-T2V-14B", + model_cls="wan2.1", + task="t2v", +) + +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + height=480, + width=832, + num_frames=81, + guidance_scale=5.0, + sample_shift=5.0, +) + +seed = 42 +prompt = "Your prompt here" +negative_prompt = "" +save_result_path="/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) +``` + +## 📁 模型路径配置 + +### 基础配置 + +将模型路径传入 `LightX2VPipeline`: + +```python +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe", # 对于 wan2.1,使用 "wan2.1" + task="i2v", +) +``` + +### 多版本模型权重指定 + +当 `model_path` 目录下存在多个不同版本的 bf16 精度 DIT 模型 safetensors 文件时,需要使用以下参数指定具体使用哪个权重: + +- **`dit_original_ckpt`**: 用于指定 wan2.1 和 hunyuan15 等模型的原始 DIT 权重路径 +- **`low_noise_original_ckpt`**: 用于指定 wan2.2 模型的低噪声分支权重路径 +- **`high_noise_original_ckpt`**: 用于指定 wan2.2 模型的高噪声分支权重路径 + +**使用示例:** + +```python +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe", + task="i2v", + low_noise_original_ckpt="/path/to/low_noise_model.safetensors", + high_noise_original_ckpt="/path/to/high_noise_model.safetensors", +) +``` + +## 🎛️ 创建生成器 + +### 从配置文件加载 + +生成器可以从 JSON 配置文件直接加载,配置文件位于 `configs` 目录: + +```python +pipe.create_generator(config_json="../configs/wan/wan_t2v.json") +``` + +### 手动创建生成器 + +也可以手动创建生成器,并配置多个参数: + +```python +pipe.create_generator( + attn_mode="flash_attn2", # 可选: flash_attn2, flash_attn3, sage_attn2, sage_attn3 (B架构显卡适用) + infer_steps=50, # 推理步数 + num_frames=81, # 视频帧数 + height=480, # 视频高度 + width=832, # 视频宽度 + guidance_scale=5.0, # CFG引导强度 (=1时弃用CFG) + sample_shift=5.0, # 采样偏移 + fps=16, # 帧率 + aspect_ratio="16:9", # 宽高比 + boundary=0.900, # 边界值 + boundary_step_index=2, # 边界步索引 + denoising_step_list=[1000, 750, 500, 250], # 去噪步列表 +) +``` + +**参数说明:** +- **分辨率**: 通过 `height` 和 `width` 指定 +- **CFG**: 通过 `guidance_scale` 指定(设置为 1 时禁用 CFG) +- **FPS**: 通过 `fps` 指定帧率 +- **视频长度**: 通过 `num_frames` 指定帧数 +- **推理步数**: 通过 `infer_steps` 指定 +- **采样偏移**: 通过 `sample_shift` 指定 +- **注意力模式**: 通过 `attn_mode` 指定,可选 `flash_attn2`, `flash_attn3`, `sage_attn2`, `sage_attn3`(B架构显卡适用) + +## ⚙️ 进阶配置 + +**⚠️ 重要提示:手动创建生成器时,可以配置一些进阶选项,所有进阶配置必须在 `create_generator()` 之前指定,否则会失效!** + +### 参数卸载 (Offload) + +显著降低显存占用,几乎不影响推理速度,适用于 RTX 30/40/50 系列显卡。 + +```python +pipe.enable_offload( + cpu_offload=True, # 启用 CPU 卸载 + offload_granularity="block", # 卸载粒度: "block" 或 "phase" + text_encoder_offload=False, # 文本编码器是否卸载 + image_encoder_offload=False, # 图像编码器是否卸载 + vae_offload=False, # VAE 是否卸载 +) +``` + +**说明:** +- 对于 Wan 模型,`offload_granularity` 支持 `"block"` 和 `"phase"` +- 对于 HunyuanVideo-1.5,目前只支持 `"block"` + +### 模型量化 (Quantization) + +量化可以显著降低显存占用并加速推理。 + +```python +pipe.enable_quantize( + dit_quantized=False, # 是否使用量化的 DIT 模型 + text_encoder_quantized=False, # 是否使用量化的文本编码器 + image_encoder_quantized=False, # 是否使用量化的图像编码器 + dit_quantized_ckpt=None, # DIT 量化权重路径(当 model_path 下没有量化权重或存在多个权重时需要指定) + low_noise_quantized_ckpt=None, # Wan2.2 低噪声分支量化权重路径 + high_noise_quantized_ckpt=None, # Wan2.2 高噪声分支量化权重路径 + text_encoder_quantized_ckpt=None, # 文本编码器量化权重路径(当 model_path 下没有量化权重或存在多个权重时需要指定) + image_encoder_quantized_ckpt=None, # 图像编码器量化权重路径(当 model_path 下没有量化权重或存在多个权重时需要指定) + quant_scheme="fp8-sgl", # 量化方案 +) +``` + +**参数说明:** +- **`dit_quantized_ckpt`**: 当 `model_path` 目录下没有量化权重,或存在多个权重文件时,需要指定具体的 DIT 量化权重路径 +- **`text_encoder_quantized_ckpt`** 和 **`image_encoder_quantized_ckpt`**: 类似地,用于指定编码器的量化权重路径 +- **`low_noise_quantized_ckpt`** 和 **`high_noise_quantized_ckpt`**: 用于指定 Wan2.2 模型的双分支量化权重 + +**量化模型下载:** + +- **Wan-2.1 量化模型**: 从 [Hy1.5-Quantized-Models](https://huggingface.co/lightx2v/Wan2.1-Distill-Models) 下载 +- **Wan-2.2 量化模型**: 从 [Hy1.5-Quantized-Models](https://huggingface.co/lightx2v/Wan2.2-Distill-Models) 下载 +- **HunyuanVideo-1.5 量化模型**: 从 [Hy1.5-Quantized-Models](https://huggingface.co/lightx2v/Hy1.5-Quantized-Models) 下载 + - `hy15_qwen25vl_llm_encoder_fp8_e4m3_lightx2v.safetensors` 是文本编码器的量化权重 + +**使用示例:** + +```python +# HunyuanVideo-1.5 量化示例 +pipe.enable_quantize( + quant_scheme='fp8-sgl', + dit_quantized=True, + dit_quantized_ckpt="/path/to/hy15_720p_i2v_fp8_e4m3_lightx2v.safetensors", + text_encoder_quantized=True, + image_encoder_quantized=False, + text_encoder_quantized_ckpt="/path/to/hy15_qwen25vl_llm_encoder_fp8_e4m3_lightx2v.safetensors", +) + +# Wan2.1 量化示例 +pipe.enable_quantize( + dit_quantized=True, + dit_quantized_ckpt="/path/to/wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_4step.safetensors", +) + +# Wan2.2 量化示例 +pipe.enable_quantize( + dit_quantized=True, + low_noise_quantized_ckpt="/path/to/wan2.2_i2v_A14b_low_noise_scaled_fp8_e4m3_lightx2v_4step.safetensors", + high_noise_quantized_ckpt="/path/to/wan2.2_i2v_A14b_high_noise_scaled_fp8_e4m3_lightx2v_4step_1030.safetensors", +) +``` + +**量化方案参考:** 详细说明请参考 [量化文档](../docs/ZH_CN/source/method_tutorials/quantization.md) + +### 并行推理 (Parallel Inference) + +支持多 GPU 并行推理,需要使用 `torchrun` 运行: + +```python +pipe.enable_parallel( + seq_p_size=4, # 序列并行大小 + seq_p_attn_type="ulysses", # 序列并行注意力类型 +) +``` + +**运行方式:** +```bash +torchrun --nproc_per_node=4 your_script.py +``` + +### 特征缓存 (Cache) + +可以指定缓存方法为 Mag 或 Tea,使用 MagCache 和 TeaCache 方法: + +```python +pipe.enable_cache( + cache_method='Tea', # 缓存方法: 'Tea' 或 'Mag' + coefficients=[-3.08907507e+04, 1.67786188e+04, -3.19178643e+03, + 2.60740519e+02, -8.19205881e+00, 1.07913775e-01], # 系数 + teacache_thresh=0.15, # TeaCache 阈值 +) +``` + +**系数参考:** 可参考 `configs/caching` 或 `configs/hunyuan_video_15/cache` 目录下的配置文件 + +### 轻量 VAE (Light VAE) + +使用轻量 VAE 可以加速解码并降低显存占用。 + +```python +pipe.enable_lightvae( + use_lightvae=False, # 是否使用 LightVAE + use_tae=False, # 是否使用 LightTAE + vae_path=None, # LightVAE 的路径 + tae_path=None, # LightTAE 的路径 +) +``` + +**支持情况:** +- **LightVAE**: 目前只支持 wan2.1、wan2.2 moe +- **LightTAE**: 目前只支持 wan2.1、wan2.2-ti2v、wan2.2 moe、HunyuanVideo-1.5 + +**模型下载:** 轻量 VAE 模型可从 [Autoencoders](https://huggingface.co/lightx2v/Autoencoders) 下载 + +- Wan-2.1 的 LightVAE: [lightvaew2_1.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lightvaew2_1.safetensors) +- Wan-2.1 的 LightTAE: [lighttaew2_1.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaew2_1.safetensors) +- Wan-2.2-ti2v 的 LightTAE: [lighttaew2_2.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaew2_2.safetensors) +- HunyuanVideo-1.5 的 LightTAE: [lighttaehy1_5.safetensors](https://huggingface.co/lightx2v/Autoencoders/blob/main/lighttaehy1_5.safetensors) + +**使用示例:** + +```python +# 使用 HunyuanVideo-1.5 的 LightTAE +pipe.enable_lightvae( + use_tae=True, + tae_path="/path/to/lighttaehy1_5.safetensors", + use_lightvae=False, + vae_path=None +) +``` + +## 📚 更多资源 + +- [完整文档](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/) +- [GitHub 仓库](https://github.com/ModelTC/LightX2V) +- [HuggingFace 模型库](https://huggingface.co/lightx2v) diff --git a/examples/hunyuan_video/hunyuan_i2v.py b/examples/hunyuan_video/hunyuan_i2v.py new file mode 100644 index 0000000..654b1f7 --- /dev/null +++ b/examples/hunyuan_video/hunyuan_i2v.py @@ -0,0 +1,63 @@ +""" +HunyuanVideo-1.5 image-to-video generation example with quantization. +This example demonstrates how to use LightX2V with HunyuanVideo-1.5 model for I2V generation, +including quantized model usage for reduced memory consumption. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for HunyuanVideo-1.5 I2V task +pipe = LightX2VPipeline( + model_path="/path/to/ckpts/hunyuanvideo-1.5/", + model_cls="hunyuan_video_1.5", + transformer_model_name="720p_i2v", + task="i2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator(config_json="../configs/hunyuan_video_15/hunyuan_video_i2v_720p.json") + +# Enable offloading to significantly reduce VRAM usage with minimal speed impact +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", # For HunyuanVideo-1.5, only "block" is supported + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Enable quantization for reduced memory usage +# Quantized models can be downloaded from: https://huggingface.co/lightx2v/Hy1.5-Quantized-Models +pipe.enable_quantize( + quant_scheme="fp8-sgl", + dit_quantized=True, + dit_quantized_ckpt="/path/to/hy15_720p_i2v_fp8_e4m3_lightx2v.safetensors", + text_encoder_quantized=True, + image_encoder_quantized=False, + text_encoder_quantized_ckpt="/path/to/hy15_qwen25vl_llm_encoder_fp8_e4m3_lightx2v.safetensors", +) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + num_frames=121, + guidance_scale=6.0, + sample_shift=7.0, + fps=24, +) + +# Generation parameters +seed = 42 +prompt = "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." +negative_prompt = "" +save_result_path = "/path/to/save_results/output2.mp4" + +# Generate video +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/hunyuan_video/hunyuan_t2v.py b/examples/hunyuan_video/hunyuan_t2v.py new file mode 100644 index 0000000..7283bde --- /dev/null +++ b/examples/hunyuan_video/hunyuan_t2v.py @@ -0,0 +1,60 @@ +""" +HunyuanVideo-1.5 text-to-video generation example. +This example demonstrates how to use LightX2V with HunyuanVideo-1.5 model for T2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for HunyuanVideo-1.5 +pipe = LightX2VPipeline( + model_path="/path/to/ckpts/hunyuanvideo-1.5/", + model_cls="hunyuan_video_1.5", + transformer_model_name="720p_t2v", + task="t2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator(config_json="../configs/hunyuan_video_15/hunyuan_video_t2v_720p.json") + +# Enable offloading to significantly reduce VRAM usage with minimal speed impact +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", # For HunyuanVideo-1.5, only "block" is supported + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Use lighttae +pipe.enable_lightvae( + use_tae=True, + tae_path="/path/to/lighttaehy1_5.safetensors", + use_lightvae=False, + vae_path=None, +) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + num_frames=121, + guidance_scale=6.0, + sample_shift=9.0, + aspect_ratio="16:9", + fps=24, +) + +# Generation parameters +seed = 123 +prompt = "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." +negative_prompt = "" +save_result_path = "/path/to/save_results/output.mp4" + +# Generate video +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/hunyuan_video/hunyuan_t2v_distill.py b/examples/hunyuan_video/hunyuan_t2v_distill.py new file mode 100644 index 0000000..d7c7cdd --- /dev/null +++ b/examples/hunyuan_video/hunyuan_t2v_distill.py @@ -0,0 +1,55 @@ +""" +HunyuanVideo-1.5 text-to-video generation example. +This example demonstrates how to use LightX2V with HunyuanVideo-1.5 4-step distilled model for T2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for HunyuanVideo-1.5 +pipe = LightX2VPipeline( + model_path="/path/to/ckpts/hunyuanvideo-1.5/", + model_cls="hunyuan_video_1.5", + transformer_model_name="480p_t2v", + task="t2v", + # 4-step distilled model ckpt + dit_original_ckpt="/path/to/hy1.5_t2v_480p_lightx2v_4step.safetensors", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator(config_json="../configs/hunyuan_video_15/hunyuan_video_t2v_720p.json") + +# Enable offloading to significantly reduce VRAM usage with minimal speed impact +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", # For HunyuanVideo-1.5, only "block" is supported + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Use lighttae +pipe.enable_lightvae( + use_tae=True, + tae_path="/path/to/lighttaehy1_5.safetensors", + use_lightvae=False, + vae_path=None, +) + +# Create generator with specified parameters +pipe.create_generator(attn_mode="sage_attn2", infer_steps=4, num_frames=81, guidance_scale=1, sample_shift=9.0, aspect_ratio="16:9", fps=16, denoising_step_list=[1000, 750, 500, 250]) + + +# Generation parameters +seed = 123 +prompt = "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." +negative_prompt = "" +save_result_path = "/data/nvme0/gushiqiao/LightX2V/save_results/output.mp4" + +# Generate video +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_animate.py b/examples/wan/wan_animate.py new file mode 100644 index 0000000..317f34d --- /dev/null +++ b/examples/wan/wan_animate.py @@ -0,0 +1,72 @@ +""" +Wan2.2 animate video generation example. +This example demonstrates how to use LightX2V with Wan2.2 model for animate video generation. + +First, run preprocessing: +1. Set up environment: pip install -r ../requirements_animate.txt +2. For animate mode: + python ../tools/preprocess/preprocess_data.py \ + --ckpt_path /path/to/Wan2.1-FLF2V-14B-720P/process_checkpoint \ + --video_path /path/to/video \ + --refer_path /path/to/ref_img \ + --save_path ../save_results/animate/process_results \ + --resolution_area 1280 720 \ + --retarget_flag +3. For replace mode: + python ../tools/preprocess/preprocess_data.py \ + --ckpt_path /path/to/Wan2.1-FLF2V-14B-720P/process_checkpoint \ + --video_path /path/to/video \ + --refer_path /path/to/ref_img \ + --save_path ../save_results/replace/process_results \ + --resolution_area 1280 720 \ + --iterations 3 \ + --k 7 \ + --w_len 1 \ + --h_len 1 \ + --replace_flag +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for animate task +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-FLF2V-14B-720P", + model_cls="wan2.2_animate", + task="animate", +) +pipe.replace_flag = True # Set to True for replace mode, False for animate mode + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="../configs/wan/wan_animate_replace.json" +# ) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=20, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=77, + guidance_scale=1, + sample_shift=5.0, + fps=30, +) + +seed = 42 +prompt = "视频中的人在做动作" +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +src_pose_path = "../save_results/animate/process_results/src_pose.mp4" +src_face_path = "../save_results/animate/process_results/src_face.mp4" +src_ref_images = "../save_results/animate/process_results/src_ref.png" +save_result_path = "/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + src_pose_path=src_pose_path, + src_face_path=src_face_path, + src_ref_images=src_ref_images, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_flf2v.py b/examples/wan/wan_flf2v.py new file mode 100644 index 0000000..1f18ccf --- /dev/null +++ b/examples/wan/wan_flf2v.py @@ -0,0 +1,55 @@ +""" +Wan2.1 first-last-frame-to-video generation example. +This example demonstrates how to use LightX2V with Wan2.1 model for FLF2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for FLF2V task +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-FLF2V-14B-720P", + model_cls="wan2.1", + task="flf2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="../configs/wan/wan_flf2v.json" +# ) + +# Optional: enable offloading to significantly reduce VRAM usage +# Suitable for RTX 30/40/50 consumer GPUs +# pipe.enable_offload( +# cpu_offload=True, +# offload_granularity="block", +# text_encoder_offload=True, +# image_encoder_offload=False, +# vae_offload=False, +# ) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=40, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=5, + sample_shift=5.0, +) + +seed = 42 +prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird’s feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +image_path = "../assets/inputs/imgs/flf2v_input_first_frame-fs8.png" +last_frame_path = "../assets/inputs/imgs/flf2v_input_last_frame-fs8.png" +save_result_path = "/path/to/save_results/output.mp4" + +pipe.generate( + image_path=image_path, + last_frame_path=last_frame_path, + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_i2v.py b/examples/wan/wan_i2v.py new file mode 100644 index 0000000..632566b --- /dev/null +++ b/examples/wan/wan_i2v.py @@ -0,0 +1,56 @@ +""" +Wan2.2 image-to-video generation example. +This example demonstrates how to use LightX2V with Wan2.2 model for I2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for Wan2.2 I2V task +# For wan2.1, use model_cls="wan2.1" +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe", + task="i2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="../configs/wan22/wan_moe_i2v.json" +# ) + +# Enable offloading to significantly reduce VRAM usage with minimal speed impact +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", # For Wan models, supports both "block" and "phase" + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Create generator manually with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=40, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=[3.5, 3.5], # For wan2.1, guidance_scale is a scalar (e.g., 5.0) + sample_shift=5.0, +) + +# Generation parameters +seed = 42 +prompt = "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +image_path = "/path/to/img_0.jpg" +save_result_path = "/path/to/save_results/output.mp4" + +# Generate video +pipe.generate( + seed=seed, + image_path=image_path, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_i2v_distilled.py b/examples/wan/wan_i2v_distilled.py new file mode 100644 index 0000000..be89488 --- /dev/null +++ b/examples/wan/wan_i2v_distilled.py @@ -0,0 +1,57 @@ +""" +Wan2.2 distilled model image-to-video generation example. +This example demonstrates how to use LightX2V with Wan2.2 distilled model for I2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for Wan2.2 distilled I2V task +# For wan2.1, use model_cls="wan2.1_distill" +pipe = LightX2VPipeline( + model_path="/path/to/wan2.2/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe_distill", + task="i2v", + # Distilled weights: For wan2.1, only need to specify dit_original_ckpt="/path/to/wan2.1_i2v_720p_lightx2v_4step.safetensors" + low_noise_original_ckpt="/path/to/wan2.2_i2v_A14b_low_noise_lightx2v_4step.safetensors", + high_noise_original_ckpt="/path/to/wan2.2_i2v_A14b_high_noise_lightx2v_4step_1030.safetensors", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="../configs/wan22/wan_moe_i2v_distill.json" +# ) + +# Enable offloading to significantly reduce VRAM usage +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Create generator manually with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=4, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=1, + sample_shift=5.0, +) + +seed = 42 +prompt = "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +save_result_path = "/path/to/save_results/output.mp4" +image_path = "/path/to/img_0.jpg" + +pipe.generate( + seed=seed, + image_path=image_path, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_i2v_with_distill_loras.py b/examples/wan/wan_i2v_with_distill_loras.py new file mode 100644 index 0000000..0d629d5 --- /dev/null +++ b/examples/wan/wan_i2v_with_distill_loras.py @@ -0,0 +1,62 @@ +""" +Wan2.2 distilled model with LoRA image-to-video generation example. +This example demonstrates how to use LightX2V with Wan2.2 distilled model and LoRA for I2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for Wan2.2 distilled I2V task with LoRA +# For wan2.1, use model_cls="wan2.1_distill" +pipe = LightX2VPipeline( + model_path="/path/to/wan2.2/Wan2.2-I2V-A14B", + model_cls="wan2.2_moe_distill", + task="i2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="../configs/wan22/wan_moe_i2v_distill_with_lora.json" +# ) + +# Enable offloading to significantly reduce VRAM usage +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Load distilled LoRA weights +pipe.enable_lora( + [ + {"name": "high_noise_model", "path": "/path/to/wan2.2_i2v_A14b_high_noise_lora_rank64_lightx2v_4step_1022.safetensors", "strength": 1.0}, + {"name": "low_noise_model", "path": "/path/to/wan2.2_i2v_A14b_low_noise_lora_rank64_lightx2v_4step_1022.safetensors", "strength": 1.0}, + ] +) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=4, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=1, + sample_shift=5.0, +) + +seed = 42 +prompt = "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +save_result_path = "/path/to/save_results/output.mp4" +image_path = "/path/to/img_0.jpg" + +pipe.generate( + seed=seed, + image_path=image_path, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_t2v.py b/examples/wan/wan_t2v.py new file mode 100644 index 0000000..ea2e71b --- /dev/null +++ b/examples/wan/wan_t2v.py @@ -0,0 +1,39 @@ +""" +Wan2.1 text-to-video generation example. +This example demonstrates how to use LightX2V with Wan2.1 model for T2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for Wan2.1 T2V task +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-T2V-14B", + model_cls="wan2.1", + task="t2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator(config_json="../configs/wan/wan_t2v.json") + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=5.0, + sample_shift=5.0, +) + +seed = 42 +prompt = "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +save_result_path = "/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/examples/wan/wan_vace.py b/examples/wan/wan_vace.py new file mode 100644 index 0000000..8bbf88c --- /dev/null +++ b/examples/wan/wan_vace.py @@ -0,0 +1,52 @@ +""" +Wan2.1 VACE (Video Animate Character Exchange) generation example. +This example demonstrates how to use LightX2V with Wan2.1 VACE model for character exchange in videos. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for VACE task +pipe = LightX2VPipeline( + model_path="/path/to/Wan2.1-VACE-1.3B", + src_ref_images="../assets/inputs/imgs/girl.png,../assets/inputs/imgs/snake.png", + model_cls="wan2.1_vace", + task="vace", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator( +# config_json="../configs/wan/wan_vace.json" +# ) + +# Optional: enable offloading to significantly reduce VRAM usage +# Suitable for RTX 30/40/50 consumer GPUs +# pipe.enable_offload( +# cpu_offload=True, +# offload_granularity="block", +# text_encoder_offload=True, +# image_encoder_offload=False, +# vae_offload=False, +# ) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=40, + height=480, # Can be set to 720 for higher resolution + width=832, # Can be set to 1280 for higher resolution + num_frames=81, + guidance_scale=5, + sample_shift=16, +) + +seed = 42 +prompt = "在一个欢乐而充满节日气氛的场景中,穿着鲜艳红色春服的小女孩正与她的可爱卡通蛇嬉戏。她的春服上绣着金色吉祥图案,散发着喜庆的气息,脸上洋溢着灿烂的笑容。蛇身呈现出亮眼的绿色,形状圆润,宽大的眼睛让它显得既友善又幽默。小女孩欢快地用手轻轻抚摸着蛇的头部,共同享受着这温馨的时刻。周围五彩斑斓的灯笼和彩带装饰着环境,阳光透过洒在她们身上,营造出一个充满友爱与幸福的新年氛围。" +negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +save_result_path = "/path/to/save_results/output.mp4" + +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) diff --git a/lightx2v/__init__.py b/lightx2v/__init__.py new file mode 100644 index 0000000..7298b04 --- /dev/null +++ b/lightx2v/__init__.py @@ -0,0 +1,18 @@ +__version__ = "0.1.0" +__author__ = "LightX2V Contributors" +__license__ = "Apache 2.0" + +import lightx2v_platform.set_ai_device +from lightx2v import common, deploy, models, utils +from lightx2v.pipeline import LightX2VPipeline + +__all__ = [ + "__version__", + "__author__", + "__license__", + "models", + "common", + "deploy", + "utils", + "LightX2VPipeline", +] diff --git a/lightx2v/common/__init__.py b/lightx2v/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/common/modules/__init__.py b/lightx2v/common/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/common/modules/weight_module.py b/lightx2v/common/modules/weight_module.py new file mode 100644 index 0000000..59d646c --- /dev/null +++ b/lightx2v/common/modules/weight_module.py @@ -0,0 +1,175 @@ +class WeightModule: + def __init__(self): + self._modules = {} + self._parameters = {} + + def is_empty(self): + return len(self._modules) == 0 and len(self._parameters) == 0 + + def add_module(self, name, module): + self._modules[name] = module + setattr(self, name, module) + + def register_parameter(self, name, param): + self._parameters[name] = param + setattr(self, name, param) + + def load(self, weight_dict): + for _, module in self._modules.items(): + if hasattr(module, "load"): + module.load(weight_dict) + + for _, parameter in self._parameters.items(): + if hasattr(parameter, "load"): + parameter.load(weight_dict) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + for _, param in self._parameters.items(): + if param is not None: + param.state_dict(destination) + for _, module in self._modules.items(): + if module is not None: + module.state_dict(destination) + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if destination is None: + destination = {} + for _, param in self._parameters.items(): + if param is not None: + param.load_state_dict(destination, block_index, adapter_block_index) + for _, module in self._modules.items(): + if module is not None: + module.load_state_dict(destination, block_index, adapter_block_index) + return destination + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + for _, param in self._parameters.items(): + if param is not None: + param.load_state_dict_from_disk(block_index, adapter_block_index) + for _, module in self._modules.items(): + if module is not None: + module.load_state_dict_from_disk(block_index, adapter_block_index) + + def named_parameters(self, prefix=""): + for name, param in self._parameters.items(): + if param is not None: + yield prefix + name, param + for name, module in self._modules.items(): + if module is not None: + yield from module.named_parameters(prefix + name + ".") + + def to_cpu(self): + for name, param in self._parameters.items(): + if param is not None: + if hasattr(param, "cpu"): + self._parameters[name] = param.cpu() + setattr(self, name, self._parameters[name]) + elif hasattr(param, "to_cpu"): + self._parameters[name].to_cpu() + setattr(self, name, self._parameters[name]) + for module in self._modules.values(): + if isinstance(module, WeightModuleList): + for i in range(len(module)): + for m in module[i]._modules.values(): + if m is not None and hasattr(m, "to_cpu"): + m.to_cpu() + for m in module[i]._parameters.values(): + if m is not None and hasattr(m, "to_cpu"): + m.to_cpu() + else: + if module is not None and hasattr(module, "to_cpu"): + module.to_cpu() + + def to_cuda(self): + for name, param in self._parameters.items(): + if param is not None: + if hasattr(param, "cuda"): + self._parameters[name] = param.cuda() + elif hasattr(param, "to_cuda"): + self._parameters[name].to_cuda() + setattr(self, name, self._parameters[name]) + for module in self._modules.values(): + if isinstance(module, WeightModuleList): + for i in range(len(module)): + for m in module[i]._modules.values(): + if m is not None and hasattr(m, "to_cuda"): + m.to_cuda() + for m in module[i]._parameters.values(): + if m is not None and hasattr(m, "to_cuda"): + m.to_cuda() + else: + if module is not None and hasattr(module, "to_cuda"): + module.to_cuda() + + def to_cpu_async(self): + for name, param in self._parameters.items(): + if param is not None: + if hasattr(param, "cpu"): + self._parameters[name] = param.cpu(non_blocking=True) + setattr(self, name, self._parameters[name]) + elif hasattr(param, "to_cpu"): + self._parameters[name].to_cpu(non_blocking=True) + setattr(self, name, self._parameters[name]) + for module in self._modules.values(): + if isinstance(module, WeightModuleList): + for i in range(len(module)): + for m in module[i]._modules.values(): + if m is not None and hasattr(m, "to_cpu"): + m.to_cpu(non_blocking=True) + for m in module[i]._parameters.values(): + if m is not None and hasattr(m, "to_cpu"): + m.to_cpu(non_blocking=True) + else: + if module is not None and hasattr(module, "to_cpu"): + module.to_cpu(non_blocking=True) + + def to_cuda_async(self): + for name, param in self._parameters.items(): + if param is not None: + if hasattr(param, "cuda"): + self._parameters[name] = param.cuda(non_blocking=True) + elif hasattr(param, "to_cuda"): + self._parameters[name].to_cuda(non_blocking=True) + setattr(self, name, self._parameters[name]) + for module in self._modules.values(): + if isinstance(module, WeightModuleList): + for i in range(len(module)): + for m in module[i]._modules.values(): + if m is not None and hasattr(m, "to_cuda"): + m.to_cuda(non_blocking=True) + for m in module[i]._parameters.values(): + if m is not None and hasattr(m, "to_cuda"): + m.to_cuda(non_blocking=True) + else: + if module is not None and hasattr(module, "to_cuda"): + module.to_cuda(non_blocking=True) + + +class WeightModuleList(WeightModule): + def __init__(self, modules=None): + super().__init__() + self._list = [] + if modules is not None: + for idx, module in enumerate(modules): + self.append(module) + + def append(self, module): + idx = len(self._list) + self._list.append(module) + self.add_module(str(idx), module) + + def __getitem__(self, idx): + return self._list[idx] + + def __setitem__(self, idx, module): + self._list[idx] = module + self.add_module(str(idx), module) + + def __len__(self): + return len(self._list) + + def __iter__(self): + return iter(self._list) diff --git a/lightx2v/common/offload/manager.py b/lightx2v/common/offload/manager.py new file mode 100644 index 0000000..c1671eb --- /dev/null +++ b/lightx2v/common/offload/manager.py @@ -0,0 +1,133 @@ +from concurrent.futures import ThreadPoolExecutor + +import torch +from loguru import logger +from packaging.version import parse +from tqdm import tqdm + +from lightx2v.utils.profiler import ExcludedProfilingContext +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +class WeightAsyncStreamManager(object): + def __init__(self, offload_granularity): + self.offload_granularity = offload_granularity + self.init_stream = torch_device_module.Stream(priority=0) + self.need_init_first_buffer = True + self.lazy_load = False + torch_version = parse(torch.__version__.split("+")[0]) + if AI_DEVICE == "cuda" and torch_version >= parse("2.7"): + self.cuda_load_stream = torch_device_module.Stream(priority=1) + self.compute_stream = torch_device_module.Stream(priority=1) + else: + self.cuda_load_stream = torch_device_module.Stream(priority=0) + self.compute_stream = torch_device_module.Stream(priority=-1) + + def init_cpu_buffer(self, blocks_cpu_buffer=None, phases_cpu_buffer=None): + self.need_init_first_buffer = True + if self.offload_granularity == "block": + assert blocks_cpu_buffer is not None + self.cpu_buffers = [blocks_cpu_buffer[i] for i in range(len(blocks_cpu_buffer))] + elif self.offload_granularity == "phase": + assert phases_cpu_buffer is not None + self.cpu_buffers = [phases_cpu_buffer[i] for i in range(len(phases_cpu_buffer))] + else: + raise NotImplementedError + + def init_cuda_buffer(self, blocks_cuda_buffer=None, phases_cuda_buffer=None): + self.need_init_first_buffer = True + if self.offload_granularity == "block": + assert blocks_cuda_buffer is not None + self.cuda_buffers = [blocks_cuda_buffer[i] for i in range(len(blocks_cuda_buffer))] + elif self.offload_granularity == "phase": + assert phases_cuda_buffer is not None + self.cuda_buffers = [phases_cuda_buffer[i] for i in range(len(phases_cuda_buffer))] + else: + raise NotImplementedError + + def init_first_buffer(self, blocks, adapter_block_idx=None): + with torch_device_module.stream(self.init_stream): + if hasattr(self, "cpu_buffers"): + self.cuda_buffers[0].load_state_dict(self.cpu_buffers[0][0].state_dict(), 0, adapter_block_idx) + else: + if self.offload_granularity == "block": + self.cuda_buffers[0].load_state_dict(blocks[0].state_dict(), 0, adapter_block_idx) + else: + self.cuda_buffers[0].load_state_dict(blocks[0].compute_phases[0].state_dict(), 0, adapter_block_idx) + self.init_stream.synchronize() + self.need_init_first_buffer = False + + def prefetch_weights(self, block_idx, blocks, adapter_block_idx=None): + with torch_device_module.stream(self.cuda_load_stream): + if hasattr(self, "cpu_buffers"): + self.cpu_buffers[1].load_state_dict_from_disk(block_idx, adapter_block_idx) + self.cuda_buffers[1].load_state_dict(self.cpu_buffers[1].state_dict(), block_idx, adapter_block_idx) + else: + self.cuda_buffers[1].load_state_dict(blocks[block_idx].state_dict(), block_idx, adapter_block_idx) + + def prefetch_phase(self, block_idx, phase_idx, blocks, adapter_block_idx=None): + with torch_device_module.stream(self.cuda_load_stream): + if hasattr(self, "cpu_buffers"): + self.cuda_buffers[phase_idx].load_state_dict(self.cpu_buffers[0][phase_idx].state_dict(), block_idx, adapter_block_idx) + else: + self.cuda_buffers[phase_idx].load_state_dict(blocks[block_idx].compute_phases[phase_idx].state_dict(), block_idx, adapter_block_idx) + + def swap_blocks(self): + self.cuda_load_stream.synchronize() + self.compute_stream.synchronize() + self.cuda_buffers[0], self.cuda_buffers[1] = ( + self.cuda_buffers[1], + self.cuda_buffers[0], + ) + + def swap_phases(self): + self.cuda_load_stream.synchronize() + self.compute_stream.synchronize() + + @ExcludedProfilingContext("🔥 warm_up_cpu_buffers") + def warm_up_cpu_buffers(self, blocks_num): + logger.info("🔥 Warming up cpu buffers...") + for i in tqdm(range(blocks_num)): + for phase in self.cpu_buffers[0]: + phase.load_state_dict_from_disk(i, None) + for phase in self.cpu_buffers[1]: + phase.load_state_dict_from_disk(i, None) + + for phase in self.cpu_buffers[0]: + phase.load_state_dict_from_disk(0, None) + for phase in self.cpu_buffers[1]: + phase.load_state_dict_from_disk(1, None) + logger.info("✅ CPU buffers warm-up completed.") + + def init_lazy_load(self, num_workers=6): + self.lazy_load = True + self.executor = ThreadPoolExecutor(max_workers=num_workers) + self.prefetch_futures = [] + self.prefetch_block_idx = -1 + + def start_prefetch_block(self, block_idx, adapter_block_idx=None): + self.prefetch_block_idx = block_idx + self.prefetch_futures = [] + for phase in self.cpu_buffers[1]: + future = self.executor.submit(phase.load_state_dict_from_disk, block_idx, adapter_block_idx) + self.prefetch_futures.append(future) + + def swap_cpu_buffers(self): + # wait_start = time.time() + # already_done = all(f.done() for f in self.prefetch_futures) + for f in self.prefetch_futures: + f.result() + # wait_time = time.time() - wait_start + # logger.debug(f"[Prefetch] block {self.prefetch_block_idx}: wait={wait_time:.3f}s, already_done={already_done}") + self.cpu_buffers = [self.cpu_buffers[1], self.cpu_buffers[0]] + + def __del__(self): + if hasattr(self, "executor") and self.executor is not None: + for f in self.prefetch_futures: + if not f.done(): + f.result() + self.executor.shutdown(wait=False) + self.executor = None + logger.debug("ThreadPoolExecutor shut down successfully.") diff --git a/lightx2v/common/ops/__init__.py b/lightx2v/common/ops/__init__.py new file mode 100644 index 0000000..aab2983 --- /dev/null +++ b/lightx2v/common/ops/__init__.py @@ -0,0 +1,6 @@ +from .attn import * +from .conv import * +from .embedding import * +from .mm import * +from .norm import * +from .tensor import * diff --git a/lightx2v/common/ops/attn/__init__.py b/lightx2v/common/ops/attn/__init__.py new file mode 100644 index 0000000..65e23dd --- /dev/null +++ b/lightx2v/common/ops/attn/__init__.py @@ -0,0 +1,10 @@ +from .flash_attn import FlashAttn2Weight, FlashAttn3Weight +from .nbhd_attn import NbhdAttnWeight, NbhdAttnWeightFlashInfer +from .radial_attn import RadialAttnWeight +from .ring_attn import RingAttnWeight +from .sage_attn import SageAttn2Weight, SageAttn3Weight +from .spassage_attn import SageAttnWeight +from .svg2_attn import Svg2AttnWeight +from .svg_attn import SvgAttnWeight +from .torch_sdpa import TorchSDPAWeight +from .ulysses_attn import Ulysses4090AttnWeight, UlyssesAttnWeight diff --git a/lightx2v/common/ops/attn/flash_attn.py b/lightx2v/common/ops/attn/flash_attn.py new file mode 100644 index 0000000..dc8150b --- /dev/null +++ b/lightx2v/common/ops/attn/flash_attn.py @@ -0,0 +1,89 @@ +from loguru import logger + +try: + import flash_attn # noqa: F401 + from flash_attn.flash_attn_interface import flash_attn_varlen_func +except ImportError: + logger.info("flash_attn_varlen_func not found, please install flash_attn2 first") + flash_attn_varlen_func = None + +try: + from flash_attn_interface import flash_attn_varlen_func as flash_attn_varlen_func_v3 +except ImportError: + logger.info("flash_attn_varlen_func_v3 not found, please install flash_attn3 first") + flash_attn_varlen_func_v3 = None + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + + +@ATTN_WEIGHT_REGISTER("flash_attn2") +class FlashAttn2Weight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + if len(q.shape) == 3: + bs = 1 + elif len(q.shape) == 4: + bs = q.shape[0] + q = q.reshape(-1, q.shape[-2], q.shape[-1]) + k = k.reshape(-1, k.shape[-2], k.shape[-1]) + v = v.reshape(-1, v.shape[-2], v.shape[-1]) + x = flash_attn_varlen_func( + q, + k, + v, + cu_seqlens_q, + cu_seqlens_kv, + max_seqlen_q, + max_seqlen_kv, + ).reshape(bs * max_seqlen_q, -1) + return x + + +@ATTN_WEIGHT_REGISTER("flash_attn3") +class FlashAttn3Weight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + if len(q.shape) == 3: + bs = 1 + elif len(q.shape) == 4: + bs = q.shape[0] + if model_cls is not None and model_cls in ["hunyuan_video_1.5"]: + q = q.reshape(-1, q.shape[-2], q.shape[-1]) + k = k.reshape(-1, k.shape[-2], k.shape[-1]) + v = v.reshape(-1, v.shape[-2], v.shape[-1]) + x = flash_attn_varlen_func_v3( + q, + k, + v, + cu_seqlens_q, + cu_seqlens_kv, + max_seqlen_q, + max_seqlen_kv, + ).reshape(bs * max_seqlen_q, -1) + return x diff --git a/lightx2v/common/ops/attn/nbhd_attn.py b/lightx2v/common/ops/attn/nbhd_attn.py new file mode 100644 index 0000000..a7f32b8 --- /dev/null +++ b/lightx2v/common/ops/attn/nbhd_attn.py @@ -0,0 +1,196 @@ +import torch +from loguru import logger + +try: + from magi_attention.functional import flex_flash_attn_func as magi_ffa_func +except ImportError: + magi_ffa_func = None + +try: + import flashinfer +except ImportError: + flashinfer = None + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + + +def generate_nbhd_mask(a, block_num, attnmap_frame_num, coefficient=[1.0, 0.5, 0.056], min_width=1.0, device="cpu"): + """ + a : block num per frame + block_num : block num per col/row + attnmap_frame_num : total frame num + """ + i_indices = torch.arange(block_num, device=device).unsqueeze(1) # [block_num, 1] + j_indices = torch.arange(block_num, device=device).unsqueeze(0) # [1, block_num] + + assert len(coefficient) <= attnmap_frame_num, f"coefficient length {len(coefficient)} should <= attnmap_frame_num {attnmap_frame_num}" + width_list = [max(min_width, coefficient[i] * a) for i in range(len(coefficient))] + [min_width] * (attnmap_frame_num - len(coefficient)) + logger.info(f"nbhd_attn width_list: {width_list}, len={len(width_list)}") + + # attention sink frame: j <= a + mask_sink = j_indices <= a + + mask_sparse = torch.zeros((block_num, block_num), dtype=torch.bool, device=device) + for interval in range(0, attnmap_frame_num): + n = i_indices // a + mask_sparse_base_1 = (j_indices >= (n + interval) * a) & (j_indices <= (n + interval + 1) * a) + n = j_indices // a + mask_sparse_base_2 = (i_indices >= (n + interval) * a) & (i_indices <= (n + interval + 1) * a) + + width = width_list[interval] + + mask_1 = mask_sparse_base_1 & (i_indices - j_indices + (interval * a + width) >= 0) & (i_indices - j_indices + (interval * a - width) <= 0) + mask_2 = mask_sparse_base_2 & (i_indices - j_indices - (interval * a - width) >= 0) & (i_indices - j_indices - (interval * a + width) <= 0) + + mask_sparse = mask_sparse | mask_1 | mask_2 + + mask = mask_sink | mask_sparse + return mask + + +def generate_qk_ranges(mask, block_size, seqlen): + indices = torch.nonzero(mask, as_tuple=False) # shape: [N, 2] + + i_indices = indices[:, 0] # [N] + j_indices = indices[:, 1] # [N] + + q_start = i_indices * block_size # [N] + q_end = torch.clamp((i_indices + 1) * block_size, max=seqlen) # [N] + + k_start = j_indices * block_size # [N] + k_end = torch.clamp((j_indices + 1) * block_size, max=seqlen) # [N] + + q_ranges = torch.stack([q_start, q_end], dim=1) # [N, 2] + k_ranges = torch.stack([k_start, k_end], dim=1) # [N, 2] + + return q_ranges, k_ranges + + +@ATTN_WEIGHT_REGISTER("nbhd_attn") +class NbhdAttnWeight(AttnWeightTemplate): + block_size = 128 + seqlen = None + attnmap_frame_num = None + q_ranges = None + k_ranges = None + attn_type_map = None + coefficient = [1.0, 0.5, 0.056] + min_width = 1.0 + + def __init__(self): + self.config = {} + + @classmethod + @torch.compiler.disable + def prepare_mask(cls, seqlen): + if seqlen == cls.seqlen: + return + block_num = (seqlen + cls.block_size - 1) // cls.block_size + block_num_per_frame = seqlen / cls.attnmap_frame_num / cls.block_size + mask = generate_nbhd_mask(block_num_per_frame, block_num, cls.attnmap_frame_num, coefficient=cls.coefficient, min_width=cls.min_width, device="cpu") + q_ranges, k_ranges = generate_qk_ranges(mask, cls.block_size, seqlen) + attn_type_map = torch.zeros(len(q_ranges), dtype=torch.int32, device="cuda") + q_ranges = q_ranges.to(torch.int32).to("cuda") + k_ranges = k_ranges.to(torch.int32).to("cuda") + cls.seqlen = seqlen + cls.q_ranges = q_ranges + cls.k_ranges = k_ranges + cls.attn_type_map = attn_type_map + logger.info(f"NbhdAttnWeight Update: seqlen={seqlen}") + sparsity = 1 - mask.sum().item() / mask.numel() + logger.info(f"Attention sparsity: {sparsity}") + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + """ + q: [seqlen, head_num, head_dim] + k: [seqlen, head_num, head_dim] + v: [seqlen, head_num, head_dim] + """ + self.prepare_mask(seqlen=q.shape[0]) + out = magi_ffa_func( + q, + k, + v, + q_ranges=self.q_ranges, + k_ranges=self.k_ranges, + attn_type_map=self.attn_type_map, + auto_range_merge=True, + )[0] + return out.reshape(out.shape[0], -1) + + +@ATTN_WEIGHT_REGISTER("nbhd_attn_flashinfer") +class NbhdAttnWeightFlashInfer(AttnWeightTemplate): + block_size = 128 + seqlen = None + attnmap_frame_num = None + coefficient = [1.0, 0.5, 0.056] + min_width = 1.0 + sparse_wrapper = None + + def __init__(self): + self.config = {} + + @classmethod + @torch.compiler.disable + def prepare_mask(cls, seqlen, head_num, head_dim): + if seqlen == cls.seqlen: + return + block_num = (seqlen + cls.block_size - 1) // cls.block_size + block_num_per_frame = seqlen / cls.attnmap_frame_num / cls.block_size + mask = generate_nbhd_mask(block_num_per_frame, block_num, cls.attnmap_frame_num, coefficient=cls.coefficient, min_width=cls.min_width, device="cpu") + mask = mask.unsqueeze(0).repeat(head_num, 1, 1) + block_rowcol_size = torch.ones(block_num, dtype=torch.int32) * cls.block_size + block_rowcol_size[-1] = seqlen - cls.block_size * (block_num - 1) + block_rowcol_size = block_rowcol_size.unsqueeze(0).repeat(head_num, 1) + float_workspace_buffer = torch.empty(1024 * 1024 * 1024, dtype=torch.uint8, device="cuda:0") + cls.sparse_wrapper = flashinfer.sparse.VariableBlockSparseAttentionWrapper(float_workspace_buffer, backend="fa2") + cls.sparse_wrapper.plan( + block_mask_map=mask, + block_row_sz=block_rowcol_size, + block_col_sz=block_rowcol_size, + num_qo_heads=head_num, + num_kv_heads=head_num, + head_dim=head_dim, + q_data_type=torch.bfloat16, + ) + cls.seqlen = seqlen + logger.info(f"NbhdAttnWeight Update: seqlen={seqlen}") + sparsity = 1 - mask.sum().item() / mask.numel() + logger.info(f"Attention sparsity: {sparsity}") + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + """ + q: [seqlen, head_num, head_dim] + k: [seqlen, head_num, head_dim] + v: [seqlen, head_num, head_dim] + """ + self.prepare_mask(seqlen=q.shape[0], head_num=q.shape[1], head_dim=q.shape[2]) + q = q.transpose(0, 1) + k = k.transpose(0, 1) + v = v.transpose(0, 1) + out = self.sparse_wrapper.run(q, k, v) + out = out.transpose(0, 1) + return out.reshape(out.shape[0], -1) diff --git a/lightx2v/common/ops/attn/radial_attn.py b/lightx2v/common/ops/attn/radial_attn.py new file mode 100644 index 0000000..002f149 --- /dev/null +++ b/lightx2v/common/ops/attn/radial_attn.py @@ -0,0 +1,185 @@ +import torch +from loguru import logger + +try: + from magi_attention.functional import flex_flash_attn_func as magi_ffa_func +except ImportError: + magi_ffa_func = None + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + + +def shrinkMaskStrict(mask, block_size=128): + seqlen = mask.shape[0] + block_num = seqlen // block_size + mask = mask[: block_num * block_size, : block_num * block_size].view(block_num, block_size, block_num, block_size) + col_densities = mask.sum(dim=1) / block_size + # we want the minimum non-zero column density in the block + non_zero_densities = col_densities > 0 + high_density_cols = col_densities > 1 / 3 + frac_high_density_cols = high_density_cols.sum(dim=-1) / (non_zero_densities.sum(dim=-1) + 1e-9) + block_mask = frac_high_density_cols > 0.6 + block_mask[0:0] = True + block_mask[-1:-1] = True + return block_mask + + +def get_window_width(i, j, token_per_frame, sparse_type, num_frame, decay_factor=1, block_size=128, model_type=None): + assert sparse_type in ["radial"] + dist = abs(i - j) + if model_type == "wan": + if dist < 1: + return token_per_frame + if dist == 1: + return token_per_frame // 2 + elif model_type == "hunyuan": + if dist <= 1: + return token_per_frame + else: + raise ValueError(f"Unknown model type: {model_type}") + group = dist.bit_length() + decay_length = 2 ** token_per_frame.bit_length() / 2**group * decay_factor + threshold = block_size + if decay_length >= threshold: + return decay_length + else: + return threshold + + +def get_diagonal_split_mask(i, j, token_per_frame, sparse_type, device): + assert sparse_type in ["radial"] + dist = abs(i - j) + group = dist.bit_length() + threshold = 128 # hardcoded threshold for now, which is equal to block-size + decay_length = 2 ** token_per_frame.bit_length() / 2**group + if decay_length >= threshold: + return torch.ones((token_per_frame, token_per_frame), device=device, dtype=torch.bool) + + split_factor = int(threshold / decay_length) + modular = dist % split_factor + if modular == 0: + return torch.ones((token_per_frame, token_per_frame), device=device, dtype=torch.bool) + else: + return torch.zeros((token_per_frame, token_per_frame), device=device, dtype=torch.bool) + + +def gen_log_mask_shrinked(device, s, video_token_num, num_frame, block_size=128, sparse_type="log", decay_factor=0.5, model_type=None): + """ + A more memory friendly version, we generate the attention mask of each frame pair at a time, + shrinks it, and stores it into the final result + """ + final_log_mask = torch.zeros(((s + block_size - 1) // block_size, (s + block_size - 1) // block_size), device=device, dtype=torch.bool) + token_per_frame = video_token_num // num_frame + video_text_border = video_token_num // block_size + + col_indices = torch.arange(0, token_per_frame, device=device).view(1, -1) + row_indices = torch.arange(0, token_per_frame, device=device).view(-1, 1) + final_log_mask[video_text_border:] = True + final_log_mask[:, video_text_border:] = True + for i in range(num_frame): + for j in range(num_frame): + local_mask = torch.zeros((token_per_frame, token_per_frame), device=device, dtype=torch.bool) + if j == 0 and model_type == "wan": # this is attention sink + local_mask = torch.ones((token_per_frame, token_per_frame), device=device, dtype=torch.bool) + else: + window_width = get_window_width(i, j, token_per_frame, sparse_type, num_frame, decay_factor=decay_factor, block_size=block_size, model_type=model_type) + local_mask = torch.abs(col_indices - row_indices) <= window_width + split_mask = get_diagonal_split_mask(i, j, token_per_frame, sparse_type, device) + local_mask = torch.logical_and(local_mask, split_mask) + + remainder_row = (i * token_per_frame) % block_size + remainder_col = (j * token_per_frame) % block_size + # get the padded size + all_length_row = remainder_row + ((token_per_frame - 1) // block_size + 1) * block_size + all_length_col = remainder_col + ((token_per_frame - 1) // block_size + 1) * block_size + padded_local_mask = torch.zeros((all_length_row, all_length_col), device=device, dtype=torch.bool) + padded_local_mask[remainder_row : remainder_row + token_per_frame, remainder_col : remainder_col + token_per_frame] = local_mask + # shrink the mask + block_mask = shrinkMaskStrict(padded_local_mask, block_size=block_size) + # set the block mask to the final log mask + block_row_start = (i * token_per_frame) // block_size + block_col_start = (j * token_per_frame) // block_size + block_row_end = block_row_start + block_mask.shape[0] + block_col_end = block_col_start + block_mask.shape[1] + final_log_mask[block_row_start:block_row_end, block_col_start:block_col_end] = torch.logical_or(final_log_mask[block_row_start:block_row_end, block_col_start:block_col_end], block_mask) + return final_log_mask + + +def generate_qk_ranges(mask, block_size, seqlen): + indices = torch.nonzero(mask, as_tuple=False) # shape: [N, 2] + + i_indices = indices[:, 0] # [N] + j_indices = indices[:, 1] # [N] + + q_start = i_indices * block_size # [N] + q_end = torch.clamp((i_indices + 1) * block_size, max=seqlen) # [N] + + k_start = j_indices * block_size # [N] + k_end = torch.clamp((j_indices + 1) * block_size, max=seqlen) # [N] + + q_ranges = torch.stack([q_start, q_end], dim=1) # [N, 2] + k_ranges = torch.stack([k_start, k_end], dim=1) # [N, 2] + + return q_ranges, k_ranges + + +@ATTN_WEIGHT_REGISTER("radial_attn") +class RadialAttnWeight(AttnWeightTemplate): + block_size = 128 + seqlen = None + attnmap_frame_num = None + q_ranges = None + k_ranges = None + attn_type_map = None + + def __init__(self): + self.config = {} + + @classmethod + def prepare_mask(cls, seqlen): + if seqlen == cls.seqlen: + return + mask = gen_log_mask_shrinked( + device="cuda", s=seqlen, video_token_num=seqlen, num_frame=cls.attnmap_frame_num, block_size=cls.block_size, sparse_type="radial", decay_factor=0.2, model_type="wan" + ) + q_ranges, k_ranges = generate_qk_ranges(mask, cls.block_size, seqlen) + attn_type_map = torch.zeros(len(q_ranges), dtype=torch.int32, device="cuda") + q_ranges = q_ranges.to(torch.int32).to("cuda") + k_ranges = k_ranges.to(torch.int32).to("cuda") + cls.seqlen = seqlen + cls.q_ranges = q_ranges + cls.k_ranges = k_ranges + cls.attn_type_map = attn_type_map + logger.info(f"NbhdAttnWeight Update: seqlen={seqlen}") + sparsity = 1 - mask.sum().item() / mask.numel() + logger.info(f"Attention sparsity: {sparsity}") + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + """ + q: [seqlen, head_num, head_dim] + k: [seqlen, head_num, head_dim] + v: [seqlen, head_num, head_dim] + """ + self.prepare_mask(seqlen=q.shape[0]) + out = magi_ffa_func( + q, + k, + v, + q_ranges=self.q_ranges, + k_ranges=self.k_ranges, + attn_type_map=self.attn_type_map, + auto_range_merge=True, + )[0] + return out.reshape(out.shape[0], -1) diff --git a/lightx2v/common/ops/attn/ring_attn.py b/lightx2v/common/ops/attn/ring_attn.py new file mode 100644 index 0000000..8e96117 --- /dev/null +++ b/lightx2v/common/ops/attn/ring_attn.py @@ -0,0 +1,179 @@ +import torch +import torch.distributed as dist +import torch.nn.functional as F +from loguru import logger + +from lightx2v.utils.envs import * +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate +from .utils.ring_comm import RingComm + +try: + import flash_attn + from flash_attn.flash_attn_interface import flash_attn_varlen_func +except ImportError: + logger.info("flash_attn_varlen_func not found, please install flash_attn2 first") + flash_attn_varlen_func = None + + +@torch.jit.script +def _update_out_and_lse( + out, + lse, + block_out, + block_lse, +): + block_out = block_out.to(torch.float32) + block_lse = block_lse.transpose(-2, -1).unsqueeze(dim=-1) + + # new_lse = lse + torch.log(1 + torch.exp(block_lse - lse)) + # torch.exp(lse - new_lse) * out + torch.exp(block_lse - new_lse) * block_out + # For additional context and discussion, please refer to: + # https://github.com/zhuzilin/ring-flash-attention/pull/34#issuecomment-2076126795 + out = out - F.sigmoid(block_lse - lse) * (out - block_out) + lse = lse - F.logsigmoid(lse - block_lse) + return out, lse + + +@ATTN_WEIGHT_REGISTER("ring") +class RingAttnWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply(self, q, k, v, img_qkv_len, cu_seqlens_qkv, attention_module=None, seq_p_group=None, model_cls=None, use_fp8_comm=False): + """ + 执行 Ring 注意力机制,结合图像和文本的查询、键和值。 + + 参数: + q (torch.Tensor): 查询张量,形状为 [shard_seqlen, heads, hidden_dims] + k (torch.Tensor): 键张量,形状为 [shard_seqlen, heads, hidden_dims] + v (torch.Tensor): 值张量,形状为 [shard_seqlen, heads, hidden_dims] + img_qkv_len (int): 图像查询、键和值的长度 + cu_seqlens_qkv (torch.Tensor): 累积序列长度,包含文本和图像的长度信息 + attention_type (str): 注意力类型,默认为 "flash_attn2" + + 返回: + torch.Tensor: 计算得到的注意力结果 + """ + assert not use_fp8_comm, "RingAttn can't support fp8 comm now." + + # 获取当前进程的排名和全局进程数 + cur_rank = dist.get_rank(seq_p_group) + world_size = dist.get_world_size(seq_p_group) + + if len(cu_seqlens_qkv) == 3: + txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + txt_mask_len = cu_seqlens_qkv[2] - img_qkv_len # 文本掩码长度 + elif len(cu_seqlens_qkv) == 2: + txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + txt_mask_len = 0 + + # if RING_COMM is None: + # init_ring_comm() + + RING_COMM = RingComm(seq_p_group) + + # if len(cu_seqlens_qkv) == 3: + # txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + # txt_mask_len = cu_seqlens_qkv[2] - img_qkv_len # 文本掩码长度 + # elif len(cu_seqlens_qkv) == 2: + # txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + # txt_mask_len = None + q = q.unsqueeze(0) + k = k.unsqueeze(0) + v = v.unsqueeze(0) + + img_q, img_k, img_v = q[:, :img_qkv_len, :, :].contiguous(), k[:, :img_qkv_len, :, :].contiguous(), v[:, :img_qkv_len, :, :].contiguous() + txt_q, txt_k, txt_v = ( + q[:, img_qkv_len : img_qkv_len + txt_qkv_len, :, :].contiguous(), + k[:, img_qkv_len : img_qkv_len + txt_qkv_len, :, :].contiguous(), + v[:, img_qkv_len : img_qkv_len + txt_qkv_len, :, :].contiguous(), + ) + + out, lse, next_k, next_v = None, None, None, None + + if len(cu_seqlens_qkv) == 3: + q = torch.cat((img_q, txt_q), dim=1) + k = img_k + v = img_v + + for step in range(world_size): + if step + 1 != world_size: + next_k = RING_COMM.send_recv(k) + next_v = RING_COMM.send_recv(v) + RING_COMM.commit() + + if step + 1 == world_size: + k = torch.cat((k, txt_k), dim=1) + v = torch.cat((v, txt_v), dim=1) + + block_out, block_lse = self.ring_attn_sub(q, k, v) + + out, lse = self.update_out_and_lse(out, lse, block_out, block_lse) + + if step + 1 != world_size: + RING_COMM.wait() + k = next_k + v = next_v + + attn1 = out.to(GET_DTYPE()).squeeze(0).reshape(img_qkv_len + txt_qkv_len, -1) + + if txt_mask_len > 0: + attn2, *_ = flash_attn.flash_attn_interface._flash_attn_forward( + q[:, -(txt_mask_len - txt_qkv_len) :, :, :].contiguous(), + k[:, -(txt_mask_len - txt_qkv_len) :, :, :].contiguous(), + v[:, -(txt_mask_len - txt_qkv_len) :, :, :].contiguous(), + dropout_p=0.0, + softmax_scale=q.shape[-1] ** (-0.5), + causal=False, + window_size_left=-1, + window_size_right=-1, + softcap=0.0, + alibi_slopes=None, + return_softmax=False, + ) + + attn2 = attn2.to(GET_DTYPE()).squeeze(0).reshape((txt_mask_len - txt_qkv_len), -1) + attn1 = torch.cat([attn1, attn2], dim=0) + + return attn1 + + def ring_attn_sub(self, q, k, v, dropout_p=0.0, softmax_scale=None, causal=False, window_size=(-1, -1), softcap=0.0, alibi_slopes=None, return_softmax=False): + if softmax_scale is None: + softmax_scale = q.shape[-1] ** (-0.5) + block_out, block_lse, _, _ = flash_attn.flash_attn_interface._flash_attn_forward( + q, + k, + v, + dropout_p=dropout_p, + softmax_scale=softmax_scale, + causal=causal, + window_size_left=window_size[0], + window_size_right=window_size[1], + softcap=softcap, + alibi_slopes=alibi_slopes, + return_softmax=return_softmax, + ) + return block_out, block_lse + + def update_out_and_lse( + self, + out, + lse, + block_out, + block_lse, + slice_=None, + ): + if out is None: + if slice_ is not None: + raise RuntimeError("first update_out_and_lse should not pass slice_ args") + out = block_out.to(torch.float32) + lse = block_lse.transpose(-2, -1).unsqueeze(dim=-1) + elif slice_ is not None: + slice_out, slice_lse = out[slice_], lse[slice_] + slice_out, slice_lse = _update_out_and_lse(slice_out, slice_lse, block_out, block_lse) + out[slice_], lse[slice_] = slice_out, slice_lse + else: + out, lse = _update_out_and_lse(out, lse, block_out, block_lse) + return out, lse diff --git a/lightx2v/common/ops/attn/sage_attn.py b/lightx2v/common/ops/attn/sage_attn.py new file mode 100644 index 0000000..7cde1ea --- /dev/null +++ b/lightx2v/common/ops/attn/sage_attn.py @@ -0,0 +1,83 @@ +import torch +from loguru import logger + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + +if torch.cuda.is_available() and torch.cuda.get_device_capability(0) in [(8, 9), (12, 0)]: + try: + from sageattention import sageattn_qk_int8_pv_fp16_triton as sageattn + except ImportError: + logger.info("sageattn not found, please install sageattention first") + sageattn = None +else: + try: + from sageattention import sageattn + except ImportError: + logger.info("sageattn not found, please install sageattention first") + sageattn = None + +try: + from sageattn3 import sageattn3_blackwell +except ImportError: + logger.info("sageattn3 not found, please install sageattention first") + sageattn3_blackwell = None + + +@ATTN_WEIGHT_REGISTER("sage_attn2") +class SageAttn2Weight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + q, k, v = q.contiguous(), k.contiguous(), v.contiguous() + if len(q.shape) == 3: + bs = 1 + q, k, v = q.unsqueeze(0), k.unsqueeze(0), v.unsqueeze(0) + elif len(q.shape) == 4: + bs = q.shape[0] + x = sageattn( + q, + k, + v, + tensor_layout="NHD", + ).view(bs * max_seqlen_q, -1) + return x + + +@ATTN_WEIGHT_REGISTER("sage_attn3") +class SageAttn3Weight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + q, k, v = q.contiguous(), k.contiguous(), v.contiguous() + if len(q.shape) == 3: + bs = 1 + q, k, v = q.unsqueeze(0), k.unsqueeze(0), v.unsqueeze(0) + elif len(q.shape) == 4: + bs = q.shape[0] + + x = sageattn3_blackwell(q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2)).transpose(1, 2).reshape(bs * max_seqlen_q, -1) + return x diff --git a/lightx2v/common/ops/attn/spassage_attn.py b/lightx2v/common/ops/attn/spassage_attn.py new file mode 100644 index 0000000..b7fbf46 --- /dev/null +++ b/lightx2v/common/ops/attn/spassage_attn.py @@ -0,0 +1,76 @@ +import os + +import torch + +try: + import spas_sage_attn +except ImportError: + spas_sage_attn = None + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + + +@ATTN_WEIGHT_REGISTER("spas_sage_attn") +class SageAttnWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + @classmethod + def apply(self, q, k, v, cu_seqlens_q=None, cu_seqlens_kv=None, max_seqlen_q=None, max_seqlen_kv=None, model_cls=None, tensor_layout="HND"): + q = q.unsqueeze(0) + k = k.unsqueeze(0) + v = v.unsqueeze(0) + q = q.transpose(1, 2) + k = k.transpose(1, 2) + v = v.transpose(1, 2) + attn_out = spas_sage_attn.core.spas_sage2_attn_meansim_cuda(q, k, v, tensor_layout) + _, H, N, D = attn_out.shape + attn_out = attn_out.permute(2, 1, 3, 0).contiguous().view(N, H * D) + return attn_out + + +if __name__ == "__main__": + import matplotlib.pyplot as plt + + # 1. 构造输入 + q = torch.randn(32760, 12, 128, dtype=torch.bfloat16).cuda() + k = torch.randn(32760, 12, 128, dtype=torch.bfloat16).cuda() + v = torch.randn(32760, 12, 128, dtype=torch.bfloat16).cuda() + + # 2. 直接用PyTorch计算注意力 + q_ = q.float() + k_ = k.float() + v_ = v.float() + attn_weights = torch.matmul(q_, k_.transpose(-2, -1)) / (128**0.5) + attn_weights = torch.softmax(attn_weights, dim=-1) + output_pt = torch.matmul(attn_weights, v_) + + # 3. 用spas_sage2_attn_meansim_cuda计算注意力 + q = q.unsqueeze(0) # shape: (1, 32760, 12, 128) + k = k.unsqueeze(0) + v = v.unsqueeze(0) + q = q.transpose(1, 2) # shape: (1, 12, 32760, 128) + k = k.transpose(1, 2) + v = v.transpose(1, 2) + output_cuda = spas_sage_attn.core.spas_sage2_attn_meansim_cuda(q, k, v, tensor_layout="HND") + output_cuda = output_cuda.float() + + # 4. 取左上角[3000, 3000],只取第一个head + output_pt_crop = output_pt[0, :3000, :3000].cpu().detach().numpy() + output_cuda_crop = output_cuda[0, 0, :3000, :3000].cpu().detach().numpy() + + # 5. 保存图片 + save_dir = os.path.expanduser("~/Log/10-22/") + os.makedirs(save_dir, exist_ok=True) + + plt.imshow(output_pt_crop, aspect="auto") + plt.title("PyTorch Attention (left-top 3000x3000)") + plt.savefig(os.path.join(save_dir, "attn.png")) + plt.close() + + plt.imshow(output_cuda_crop, aspect="auto") + plt.title("spas_sage2_attn_meansim_cuda (left-top 3000x3000)") + plt.savefig(os.path.join(save_dir, "spas_attn.png")) + plt.close() diff --git a/lightx2v/common/ops/attn/svg2_attn.py b/lightx2v/common/ops/attn/svg2_attn.py new file mode 100644 index 0000000..2fed193 --- /dev/null +++ b/lightx2v/common/ops/attn/svg2_attn.py @@ -0,0 +1,355 @@ +from typing import Optional + +# Please reinstall flashinfer by referring to https://github.com/svg-project/Sparse-VideoGen +try: + import flashinfer +except ImportError: + flashinfer = None + +import torch +import triton +import triton.language as tl + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .svg2_attn_utils import ( + batch_kmeans_Euclid, + identify_dynamic_map, +) +from .template import AttnWeightTemplate + + +@triton.jit +def _permute_kernel( + X_ptr, + IDX_ptr, + Y_ptr, + S: tl.constexpr, + D: tl.constexpr, + BLOCK_S: tl.constexpr, +): + """Each program permutes BLOCK_S tokens *all* hidden features (D). No inner python loop.""" + + pid_bh = tl.program_id(0) + tile_s = tl.program_id(1) + + # Offsets along sequence + s_offsets = tile_s * BLOCK_S + tl.arange(0, BLOCK_S) + token_mask = s_offsets < S + + # Gather source indices for these tokens + idx_ptrs = IDX_ptr + pid_bh * S + s_offsets + src_row_idx = tl.load(idx_ptrs, mask=token_mask, other=0).to(tl.int32) + + # Broadcast to create 2-D pointer matrix (BLOCK_S, D) + d_offsets = tl.arange(0, D) + + src_ptrs = X_ptr + (pid_bh * S + src_row_idx[:, None]) * D + d_offsets[None, :] + dst_ptrs = Y_ptr + (pid_bh * S + s_offsets[:, None]) * D + d_offsets[None, :] + + full_mask = token_mask[:, None] + + values = tl.load(src_ptrs, mask=full_mask, other=0.0) + tl.store(dst_ptrs, values, mask=full_mask) + + +def permute_tensor_by_labels_triton( + tensor: torch.Tensor, + labels: Optional[torch.Tensor], + dim: int, + *, + sorted_indices: Optional[torch.Tensor] = None, +): + """ + Permute `tensor` along `dim` according to ascending order of `labels`. + + This is a Triton-accelerated replacement for the original implementation. + It currently supports 4-D tensors of shape [B, H, S, D] and `dim == 2`. + If these conditions are not met or the tensors reside on CPU, we fall back + to the reference PyTorch implementation. + """ + + # Assertions – we only support the optimized CUDA path. + assert dim == 2, "permute_tensor_by_labels currently only supports dim==2 (sequence dimension)" + assert tensor.dim() == 4, "Expected tensor shape [B,H,S,D]" + assert tensor.is_cuda, "permute_tensor_by_labels requires CUDA tensors" + + B, H, S, D = tensor.shape + BH = B * H + + # Determine sorted indices + if sorted_indices is not None: + sorted_indices = sorted_indices.to(torch.int32).contiguous() + else: + assert labels is not None, "Either `labels` or `sorted_indices` must be provided." + labels = labels.to(tensor.device) + sorted_indices = torch.argsort(labels, dim=-1).to(torch.int32).contiguous() + + # Flatten tensor and allocate output + inp_flat = tensor.reshape(BH, S, D).contiguous() + out_flat = torch.empty_like(inp_flat) + + # Triton kernel tile size + BLOCK_S = 64 # number of tokens per program, tunable + + n_s_tiles = triton.cdiv(S, BLOCK_S) + grid = (BH, n_s_tiles) + + _permute_kernel[grid](inp_flat, sorted_indices, out_flat, S, D, BLOCK_S, num_warps=4) + + permuted_tensor = out_flat.reshape(B, H, S, D) + return permuted_tensor, sorted_indices + + +@triton.jit +def _inverse_permute_kernel( + X_ptr, + IDX_ptr, + Y_ptr, + S: tl.constexpr, + D: tl.constexpr, + BLOCK_S: tl.constexpr, +): + """Inverse permutation: scatter BLOCK_S tokens back in one shot.""" + + pid_bh = tl.program_id(0) + tile_s = tl.program_id(1) + + s_offsets = tile_s * BLOCK_S + tl.arange(0, BLOCK_S) + token_mask = s_offsets < S + + idx_ptrs = IDX_ptr + pid_bh * S + s_offsets + src_pos_idx = s_offsets.to(tl.int32) + dst_pos_idx = tl.load(idx_ptrs, mask=token_mask, other=0).to(tl.int32) + + d_offsets = tl.arange(0, D) + + src_ptrs = X_ptr + (pid_bh * S + src_pos_idx[:, None]) * D + d_offsets[None, :] + dst_ptrs = Y_ptr + (pid_bh * S + dst_pos_idx[:, None]) * D + d_offsets[None, :] + + full_mask = token_mask[:, None] + + values = tl.load(src_ptrs, mask=full_mask, other=0.0) + tl.store(dst_ptrs, values, mask=full_mask) + + +def apply_inverse_permutation_triton( + permuted_tensor: torch.Tensor, + sorted_indices: torch.Tensor, + dim: int, +): + """ + Triton implementation of inverse permutation. Inverse the permutation applied by `permute_tensor_by_labels`. + + Args: + permuted_tensor: (B, H, S, D). + sorted_indices: (B, H, S). + dim: Dimension along which to apply inverse permutation. Typically 2, meaning the sequence lengthdimension. + + Returns: + Tensor of shape (B, H, S, D). + """ + + assert dim == 2, "apply_inverse_permutation currently only supports dim==2" + assert permuted_tensor.dim() == 4, "Expected tensor shape [B,H,S,D]" + assert permuted_tensor.is_cuda, "apply_inverse_permutation requires CUDA tensors" + + B, H, S, D = permuted_tensor.shape + BH = B * H + + # Ensure index dtype + sorted_indices = sorted_indices.to(torch.int32).contiguous() + + # Flatten inputs + inp_flat = permuted_tensor.reshape(BH, S, D).contiguous() + out_flat = torch.empty_like(inp_flat) + + BLOCK_S = 64 + n_s_tiles = triton.cdiv(S, BLOCK_S) + grid = (BH, n_s_tiles) + + _inverse_permute_kernel[grid](inp_flat, sorted_indices, out_flat, S, D, BLOCK_S, num_warps=4) + + original_tensor = out_flat.reshape(B, H, S, D) + return original_tensor + + +@ATTN_WEIGHT_REGISTER("svg2_attn") +class Svg2AttnWeight(AttnWeightTemplate): + centroids_init = False + num_q_centroids = 300 + num_k_centroids = 1000 + kmeans_iter_init = 50 + top_p_kmeans = 0.9 + min_kc_ratio = 0.10 + kmeans_iter_step = 2 + + def __init__(self): + self.config = {} + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + q = q.unsqueeze(0).transpose(1, 2) + k = k.unsqueeze(0).transpose(1, 2) + v = v.unsqueeze(0).transpose(1, 2) + bs, num_heads, seq_len, dim = q.size() + q_perm, k_perm, v_perm, dyn_map, qc_sz_s, kc_sz_s, q_sorted_indices = self.semantic_aware_permutation(q, k, v) + + output_permuted = self.dynamic_block_sparse_fwd_flashinfer(q_perm, k_perm, v_perm, dyn_map, qc_sz_s, kc_sz_s, is_cpu=False) + + attn_output = apply_inverse_permutation_triton(output_permuted, q_sorted_indices, dim=2) + + return attn_output.reshape(bs, num_heads, seq_len, dim).transpose(1, 2).reshape(bs * seq_len, -1) + + def dynamic_block_sparse_fwd_flashinfer( + self, + q: torch.Tensor, + k: torch.Tensor, + v: torch.Tensor, + block_mask_map: torch.Tensor, + block_row_sz: torch.Tensor, + block_col_sz: torch.Tensor, + is_cpu: bool = True, + ): + """ + Launcher for the Flashinfer dynamic block sparse attention kernel. + + Args: + q (torch.Tensor): Query tensor, shape [B, H, S, D]. + k (torch.Tensor): Key tensor, shape [B, H, S, D]. + v (torch.Tensor): Value tensor, shape [B, H, S, D]. + block_mask_map (torch.Tensor): Boolean mask, shape [B, H, qc_num, kc_num]. Currently must on CPU. + block_row_sz (torch.Tensor): Query block sizes, shape [B, H, qc_num]. Currently must on CPU. + block_col_sz (torch.Tensor): Key block sizes, shape [B, H, kc_num]. Currently must on CPU. + is_cpu (bool): Whether to run on CPU. Flashinfer default is to run on CPU. We switch to GPU for faster planning. Default is True. + """ + # Input shape check + B, H, S, D = q.shape + qc_num = block_row_sz.shape[-1] + kc_num = block_col_sz.shape[-1] + assert block_mask_map.shape == (B, H, qc_num, kc_num) + + assert all(t.device == torch.device("cpu") for t in [block_mask_map, block_row_sz, block_col_sz]) if is_cpu else True + + # Check if block_col_sz and block_row_sz are the same for each head + assert torch.all(block_col_sz.sum(dim=2) == block_col_sz.sum(dim=2)[0, 0]) + assert torch.all(block_row_sz.sum(dim=2) == block_row_sz.sum(dim=2)[0, 0]) + + # Prepare flashinfer wrapper + float_workspace_buffer = torch.empty(128 * 1024 * 1024, device=q.device) + vector_sparse_indices_buffer = torch.empty(1024 * 1024 * 1024, device=q.device) + wrapper = flashinfer.sparse.VariableBlockSparseAttentionWrapper(float_workspace_buffer, backend="auto") + wrapper.reset_workspace_buffer( + float_workspace_buffer=wrapper._float_workspace_buffer, + int_workspace_buffer=wrapper._int_workspace_buffer, + vector_sparse_indices_buffer=vector_sparse_indices_buffer, # Only reset this buffer size + vector_sparse_indptr_buffer=wrapper._vector_sparse_indptr_buffer, + ) + + block_mask_map = block_mask_map.reshape(B * H, qc_num, kc_num) + block_row_sz = block_row_sz.reshape(B * H, qc_num) + block_col_sz = block_col_sz.reshape(B * H, kc_num) + + wrapper.plan( + block_mask_map=block_mask_map, + block_row_sz=block_row_sz, + block_col_sz=block_col_sz, + num_qo_heads=B * H, + num_kv_heads=B * H, + head_dim=D, + q_data_type=q.dtype, + kv_data_type=k.dtype, + ) + + # print_memory_usage("After plan") + + q = q.reshape(B * H, S, D) + k = k.reshape(B * H, S, D) + v = v.reshape(B * H, S, D) + o = wrapper.run(q, k, v) # [num_qo_heads, qo_len, head_dim] + o = o.reshape(B, H, S, D) + return o + + def semantic_aware_permutation(self, query, key, value): + cfg, num_heads, seq_len, dim = query.size() + + # 1. Kmeans clustering + qlabels, qcentroids, qcluster_sizes, qiter, klabels, kcentroids, kcluster_sizes, kiter = self.kmeans_clustering(query, key) + + # 2. Identify dynamic map + q_cluster_sizes = qcluster_sizes.view(cfg, num_heads, self.num_q_centroids) + k_cluster_sizes = kcluster_sizes.view(cfg, num_heads, self.num_k_centroids) + + dynamic_map = identify_dynamic_map( + qcentroids.view(cfg, num_heads, self.num_q_centroids, dim), + kcentroids.view(cfg, num_heads, self.num_k_centroids, dim), + q_cluster_sizes, + k_cluster_sizes, + self.top_p_kmeans, + self.min_kc_ratio, + ) + + # 3. Permute the query, key, value + q_permuted, q_sorted_indices = permute_tensor_by_labels_triton(query, qlabels, dim=2) + k_permuted, k_sorted_indices = permute_tensor_by_labels_triton(key, klabels, dim=2) + v_permuted, v_sorted_indices = permute_tensor_by_labels_triton(value, klabels, dim=2, sorted_indices=k_sorted_indices) + + return q_permuted, k_permuted, v_permuted, dynamic_map, q_cluster_sizes, k_cluster_sizes, q_sorted_indices + + def kmeans_clustering(self, query, key): + if not self.centroids_init: + qlabels, qcentroids, qcluster_sizes, qiter, klabels, kcentroids, kcluster_sizes, kiter = self.kmeans_init(query, key) + self.centroids_init = True + else: + qlabels, qcentroids, qcluster_sizes, qiter, klabels, kcentroids, kcluster_sizes, kiter = self.kmeans_step(query, key) + + return qlabels, qcentroids, qcluster_sizes, qiter, klabels, kcentroids, kcluster_sizes, kiter + + def kmeans_init(self, query, key): + cfg, num_heads, seq_len, dim = query.size() + qlabels, qcentroids, qcluster_sizes, qiter = batch_kmeans_Euclid(query.view(cfg * num_heads, seq_len, dim), n_clusters=self.num_q_centroids, max_iters=self.kmeans_iter_init) + klabels, kcentroids, kcluster_sizes, kiter = batch_kmeans_Euclid(key.view(cfg * num_heads, seq_len, dim), n_clusters=self.num_k_centroids, max_iters=self.kmeans_iter_init) + + self.q_centroids = qcentroids + self.k_centroids = kcentroids + + return qlabels, qcentroids, qcluster_sizes, qiter, klabels, kcentroids, kcluster_sizes, kiter + + def kmeans_step(self, query, key): + cfg, num_heads, seq_len, dim = query.size() + qlabels, qcentroids, qcluster_sizes, qiter = batch_kmeans_Euclid( + query.view(cfg * num_heads, seq_len, dim), + n_clusters=self.num_q_centroids, + max_iters=self.kmeans_iter_step, + init_centroids=self.q_centroids, + ) + klabels, kcentroids, kcluster_sizes, kiter = batch_kmeans_Euclid( + key.view(cfg * num_heads, seq_len, dim), + n_clusters=self.num_k_centroids, + max_iters=self.kmeans_iter_step, + init_centroids=self.k_centroids, + ) + + self.q_centroids = qcentroids + self.k_centroids = kcentroids + + return qlabels, qcentroids, qcluster_sizes, qiter, klabels, kcentroids, kcluster_sizes, kiter + + +if __name__ == "__main__": + q, k, v = torch.randn(32130, 40, 128, dtype=torch.bfloat16).cuda(), torch.randn(32130, 40, 128, dtype=torch.bfloat16).cuda(), torch.randn(32130, 40, 128, dtype=torch.bfloat16).cuda() + + svg2_attn = Svg2AttnWeight() + print("Svg2AttnWeight initialized.") + + out = svg2_attn.apply(q, k, v) + print(f"out: {out.shape}, {out.dtype}, {out.device}") diff --git a/lightx2v/common/ops/attn/svg2_attn_utils.py b/lightx2v/common/ops/attn/svg2_attn_utils.py new file mode 100644 index 0000000..3e65815 --- /dev/null +++ b/lightx2v/common/ops/attn/svg2_attn_utils.py @@ -0,0 +1,1359 @@ +import torch +import torch.nn.functional as F +import triton +import triton.language as tl + +try: + from cuvs.cluster.kmeans import KMeansParams, fit +except ImportError: + KMeansParams = None + fit = None + +# --- New functions --- + + +def density_calculation(dynamic_map, q_cluster_sizes, k_cluster_sizes): + """ + Calculate the density of the dynamic map. Currently only batch size = 1 and head size = 1 are supported. + + Input: + dynamic_map: [cfg, num_heads, qc_num, kc_num] + q_cluster_sizes: [cfg, num_heads, qc_num] + k_cluster_sizes: [cfg, num_heads, kc_num] + """ + cfg, num_heads, qc_num, kc_num = dynamic_map.shape + + # Calculate the block size of each block + clustered_block_size = q_cluster_sizes[:, :, :, None] * k_cluster_sizes[:, :, None, :] + masked_block_size = clustered_block_size * dynamic_map + + # Calculate the density of each block + density = torch.sum(masked_block_size, dim=(2, 3)) / torch.sum(clustered_block_size, dim=(2, 3)) + return density + + +# --- Functions from analyze/kmeans_rapidai.py --- + + +def pairwise_distance(x, y): + """ + Computes pairwise squared Euclidean distance between two sets of points. + """ + x_norm = (x**2).sum(1).view(-1, 1) + y_norm = (y**2).sum(1).view(1, -1) + dist = torch.clamp(x_norm + y_norm - 2.0 * torch.mm(x, torch.transpose(y, 0, 1)), min=0.0) + return dist + + +def kmeans_predict(centroids, input_tensor): # Removed unused params argument + """ + Predict the labels for the input tensor using the centroids. + """ + input_tensor = input_tensor.to(torch.float32) + dist = pairwise_distance(input_tensor, centroids) + labels = torch.argmin(dist, dim=1) + return labels + + +def kmeans_rapidai(tensor, k, max_iter=5, tol=1e-4, init_method="Array", centroids_init=None): # Renamed centroids to centroids_init + """ + Performs K-means clustering using cuVS. + """ + + assert tensor.dtype == torch.float32, "Tensor must be float32 for cuVS KMeans" + assert tensor.ndim == 2, f"Tensor must be 2D, but got {tensor.shape}" + # assert init_method == "Array", "init_method must be 'Array' for now" + + L, D = tensor.shape + + # cuVS KMeans in RAPIDS >=23.10 uses 'centroids_init' for initial centroids + current_centroids = centroids_init + if current_centroids is None: + # Default init: cuVS handles KMeansPlusPlus if centroids_init is None and init_method is KMeansPlusPlus + # If you need to pass an empty tensor for cuVS to initialize: + current_centroids = torch.empty(k, D, device=tensor.device, dtype=torch.float32) # Or pass None + else: + assert current_centroids.dtype == torch.float32, "Initial centroids must be float32" + assert current_centroids.shape == ( + k, + D, + ), f"Initial centroids shape mismatch, got {current_centroids.shape}, expected ({k}, {D})" + # cuVS uses 'init_method="Array"' when 'centroids_init' is provided. + + # import IPython; IPython.embed() + + params = KMeansParams(n_clusters=k, max_iter=max_iter, tol=tol, init_method=init_method) # Changed init_method to init + + # Call fit with centroids_init (can be None) + new_centroids, inertia, n_iter_ = fit(params, tensor, current_centroids) # Added handle=None + + labels = kmeans_predict(new_centroids, tensor) + return labels, new_centroids, n_iter_ + + +@triton.jit +def _centroid_update_kernel( + x_ptr, # *f16 [B, N, D] + cluster_ptr, # *i32 [B, N] + sum_ptr, # *f32 [B, K, D] + count_ptr, # *i32 [B, K] + B: tl.constexpr, + N: tl.constexpr, + D: tl.constexpr, + K: tl.constexpr, + BLOCK_D: tl.constexpr, # number of dims processed per program +): + """Each program processes 1 point (token) across BLOCK_D dimensions with atomics.""" + pid = tl.program_id(axis=0) + token_idx = pid # range: [0, B * N) + + # Derive (b, n) indices + b = token_idx // N + n = token_idx % N + + # Pointers to the token features and its cluster id + x_offset = (b * N + n) * D + x_ptr = x_ptr + x_offset + + cluster_idx = tl.load(cluster_ptr + b * N + n) # int32 + + # Guard for invalid cluster ids (should not happen) + cluster_idx = tl.where(cluster_idx < K, cluster_idx, 0) + + # Base pointer for this centroid in the output sum tensor + centroid_base = (b * K + cluster_idx) * D + + # Process feature vector in chunks of BLOCK_D + offs = tl.arange(0, BLOCK_D) + for d_start in range(0, D, BLOCK_D): + mask = offs + d_start < D + feats = tl.load(x_ptr + d_start + offs, mask=mask, other=0.0) + feats = feats.to(tl.float32) + + dest_ptr = sum_ptr + centroid_base + d_start + offs + tl.atomic_add(dest_ptr, feats, mask=mask) + + # Update counts (only once per point) + tl.atomic_add(count_ptr + b * K + cluster_idx, 1) + + +def triton_centroid_update_cosine(x_norm: torch.Tensor, cluster_ids: torch.Tensor, old_centroids: torch.Tensor): + """Compute centroids using custom Triton kernel. + + Args: + x_norm (Tensor): (B, N, D) normalized input vectors (float16/float32) + cluster_ids (LongTensor): (B, N) cluster assignment per point + old_centroids (Tensor): (B, K, D) previous centroids (same dtype as x_norm) + + Returns: + Tensor: (B, K, D) updated and L2-normalized centroids (dtype == x_norm.dtype) + """ + assert x_norm.is_cuda and cluster_ids.is_cuda, "Input tensors must be on CUDA device" + B, N, D = x_norm.shape + K = old_centroids.shape[1] + assert cluster_ids.shape == (B, N) + + # Allocate accumulation buffers + centroid_sums = torch.zeros((B, K, D), device=x_norm.device, dtype=torch.float32) + centroid_counts = torch.zeros((B, K), device=x_norm.device, dtype=torch.int32) + + # Launch Triton kernel – one program per token + total_tokens = B * N + BLOCK_D = 128 # tuneable + + grid = (total_tokens,) + _centroid_update_kernel[grid]( + x_norm, + cluster_ids.to(torch.int32), + centroid_sums, + centroid_counts, + B, + N, + D, + K, + BLOCK_D=BLOCK_D, + ) + + # Compute means; keep old centroid if empty cluster + counts_f = centroid_counts.to(torch.float32).unsqueeze(-1).clamp(min=1.0) + centroids = centroid_sums / counts_f + + # For clusters with zero count, revert to old centroids + zero_mask = (centroid_counts == 0).unsqueeze(-1) + centroids = torch.where(zero_mask, old_centroids.to(torch.float32), centroids) + + centroids = centroids.to(x_norm.dtype) + centroids = F.normalize(centroids, p=2, dim=-1) + return centroids + + +def torch_loop_centroid_update_cosine(x_norm: torch.Tensor, cluster_ids: torch.Tensor, old_centroids: torch.Tensor): + """Reference Python implementation (double for-loop)""" + B, N, D = x_norm.shape + K = old_centroids.shape[1] + new_centroids = torch.zeros_like(old_centroids) + for b in range(B): + for k in range(K): + mask = cluster_ids[b] == k + if mask.any(): + new_centroids[b, k] = F.normalize(x_norm[b][mask].mean(dim=0, dtype=x_norm.dtype), p=2, dim=0) + else: + new_centroids[b, k] = old_centroids[b, k] + return new_centroids + + +def triton_centroid_update_euclid(x: torch.Tensor, cluster_ids: torch.Tensor, old_centroids: torch.Tensor): + """Compute centroids for Euclidean KMeans using Triton. + + Args: + x (Tensor): (B, N, D) input vectors (float16/float32) + cluster_ids (LongTensor): (B, N) cluster assignment per point + old_centroids (Tensor): (B, K, D) previous centroids (same dtype as x) + + Returns: + Tensor: (B, K, D) updated centroids (dtype == x.dtype) + """ + assert x.is_cuda and cluster_ids.is_cuda, "Input tensors must be on CUDA device" + B, N, D = x.shape + K = old_centroids.shape[1] + assert cluster_ids.shape == (B, N) + + # Allocate accumulation buffers + centroid_sums = torch.zeros((B, K, D), device=x.device, dtype=torch.float32) + centroid_counts = torch.zeros((B, K), device=x.device, dtype=torch.int32) + + total_tokens = B * N + BLOCK_D = 128 # tuneable + grid = (total_tokens,) + + _centroid_update_kernel[grid]( + x, + cluster_ids.to(torch.int32), + centroid_sums, + centroid_counts, + B, + N, + D, + K, + BLOCK_D=BLOCK_D, + ) + + # Compute means; keep old centroid if empty cluster + counts_f = centroid_counts.to(torch.float32).unsqueeze(-1).clamp(min=1.0) + centroids = centroid_sums / counts_f + + # For clusters with zero count, revert to old centroids + zero_mask = (centroid_counts == 0).unsqueeze(-1) + centroids = torch.where(zero_mask, old_centroids.to(torch.float32), centroids) + + return centroids.to(x.dtype) + + +# ------------------------------ NEW: chunk-wise centroid update (sorted ids) ------------------------------ + + +@triton.jit +def _centroid_update_chunk_kernel( + x_ptr, # *f16 / *f32 [B, N, D] – ORIGINAL ORDER + sorted_idx_ptr, # *i32 [B, N] – indices after sort + sorted_cluster_ptr, # *i32 [B, N] – cluster ids in sorted order + sum_ptr, # *f32 [B, K, D] + count_ptr, # *i32 [B, K] + B: tl.constexpr, + N: tl.constexpr, + D: tl.constexpr, + K: tl.constexpr, + BLOCK_N: tl.constexpr, # how many tokens (points) each program processes +): + """Each program processes **BLOCK_N consecutive, already-sorted tokens**. + + Because the tokens are sorted by cluster id, identical ids appear in + contiguous runs. We therefore accumulate a local sum/count for the + current run and perform **a single atomic update per run**, instead of + per-token. + """ + # program indices – 2-D launch grid: (chunk_id, batch_id) + pid_chunk = tl.program_id(axis=0) + pid_b = tl.program_id(axis=1) + + b = pid_b + chunk_start = pid_chunk * BLOCK_N # position of the first token handled by this program + + # Nothing to do – out of range + if chunk_start >= N: + return + + # base pointers for this batch + idx_batch_base = sorted_idx_ptr + b * N + cid_batch_base = sorted_cluster_ptr + b * N + x_batch_base = x_ptr + b * N * D # for pointer arithmetic + + # helper aranges + offs_token = tl.arange(0, BLOCK_N) + offs_dim = tl.arange(0, D) + + # first token index & validity mask + token_idx = chunk_start + offs_token + valid_tok = token_idx < N + first_token_idx = chunk_start + last_token_idx = tl.minimum(chunk_start + BLOCK_N, N) - 1 + + # Load first cluster id to initialise the running accumulator + first_id = tl.load(cid_batch_base + first_token_idx) + last_id = tl.load(cid_batch_base + last_token_idx) + all_ids = tl.load(cid_batch_base + token_idx, mask=valid_tok, other=-1) + + all_tokens_idxs = tl.load(idx_batch_base + token_idx, mask=valid_tok, other=-1) # [BLOCK_N] + + load_mask = all_tokens_idxs[:, None] * D + offs_dim[None, :] + + for cid in range(first_id, last_id + 1): + cluster_mask = all_ids == cid + cluster_size = tl.sum(cluster_mask.to(tl.int32)) + if cluster_size != 0: + cluster_feats = tl.load(x_batch_base + load_mask, mask=cluster_mask[:, None], other=0.0) # [BLOCK_N, D] + cluster_feats = cluster_feats.to(tl.float32) + sum_feats = tl.sum(cluster_feats, axis=0) + dest_ptr = sum_ptr + (b * K + cid) * D + offs_dim + tl.atomic_add(dest_ptr, sum_feats) + tl.atomic_add(count_ptr + b * K + cid, cluster_size) + + +# --------------------------------------------------------------------------------------------- + + +def triton_centroid_update_sorted_cosine(x_norm: torch.Tensor, cluster_ids: torch.Tensor, old_centroids: torch.Tensor, *, BLOCK_N: int = 256): + """Fast centroid update assuming **cluster_ids are sorted along N**. + + This helper will sort the assignments (together with `x_norm`) and launch the + chunk kernel above. Compared to the naive per-token kernel it performs *one + atomic add per run of identical ids* instead of per token, providing large + speed-ups when clusters are reasonably sized. + """ + assert x_norm.is_cuda and cluster_ids.is_cuda, "Inputs must be on CUDA" + B, N, D = x_norm.shape + K = old_centroids.shape[1] + assert cluster_ids.shape == (B, N) + + # -------- sort per-batch -------- + sorted_cluster_ids, sorted_idx = torch.sort(cluster_ids, dim=-1) + sorted_idx_int = sorted_idx.to(torch.int32) + + # accumulation buffers + centroid_sums = torch.zeros((B, K, D), device=x_norm.device, dtype=torch.float32) + centroid_cnts = torch.zeros((B, K), device=x_norm.device, dtype=torch.int32) + + grid = (triton.cdiv(N, BLOCK_N), B) + _centroid_update_chunk_kernel[grid]( + x_norm, + sorted_idx_int, + sorted_cluster_ids.to(torch.int32), + centroid_sums, + centroid_cnts, + B, + N, + D, + K, + BLOCK_N=BLOCK_N, + ) + + # finalise – convert to means, handle empty clusters, renormalise + counts_f = centroid_cnts.to(torch.float32).unsqueeze(-1).clamp(min=1.0) + centroids = centroid_sums / counts_f + empty_mask = (centroid_cnts == 0).unsqueeze(-1) + centroids = torch.where(empty_mask, old_centroids.to(torch.float32), centroids) + centroids = centroids.to(x_norm.dtype) + centroids = F.normalize(centroids, p=2, dim=-1) + return centroids + + +def triton_centroid_update_sorted_euclid(x: torch.Tensor, cluster_ids: torch.Tensor, old_centroids: torch.Tensor, *, BLOCK_N: int = 256): + """Fast centroid update for *Euclidean* KMeans assuming cluster IDs are pre-sorted. + + Parameters + ---------- + x : Tensor [B, N, D] + Input feature vectors (no normalization assumed). + cluster_ids : LongTensor [B, N] + Cluster assignment for each point. + old_centroids : Tensor [B, K, D] + Previous centroids (used to fill empty clusters). + BLOCK_N : int, optional + Tokens per Triton program (affects occupancy/perf). + """ + assert x.is_cuda and cluster_ids.is_cuda, "Inputs must be on CUDA device" + B, N, D = x.shape + K = old_centroids.shape[1] + + # Batch-wise sort of cluster assignments + sorted_cluster_ids, sorted_idx = torch.sort(cluster_ids, dim=-1) + sorted_idx_int = sorted_idx.to(torch.int32) + + centroid_sums = torch.zeros((B, K, D), device=x.device, dtype=torch.float32) + centroid_cnts = torch.zeros((B, K), device=x.device, dtype=torch.int32) + + grid = (triton.cdiv(N, BLOCK_N), B) + _centroid_update_chunk_kernel[grid]( + x, # original features + sorted_idx_int, # gather indices + sorted_cluster_ids.to(torch.int32), + centroid_sums, + centroid_cnts, + B, + N, + D, + K, + BLOCK_N=BLOCK_N, + ) + + # Convert sums to means; replace empty clusters with old centroids + counts_f = centroid_cnts.to(torch.float32).unsqueeze(-1).clamp(min=1.0) + centroids = centroid_sums / counts_f + empty_mask = (centroid_cnts == 0).unsqueeze(-1) + centroids = torch.where(empty_mask, old_centroids.to(torch.float32), centroids) + return centroids.to(x.dtype), centroid_cnts + + +# =============================================================== +# Triton kernel: compute nearest-centroid IDs (Euclidean distance) +# Inputs: +# x : (B, N, D) float16 / float32 +# centroids : (B, K, D) same dtype as x +# x_sq : (B, N) float32 – pre-computed ||x||^2 per point +# Output: +# cluster_ids : (B, N) int32 – nearest centroid index per point +# =============================================================== + + +def _ceil_div(a: int, b: int) -> int: + return (a + b - 1) // b + + +# ----------------------------------------------------------------------------- +# Auto-tuning setup – explore various tile sizes / warp counts +# ----------------------------------------------------------------------------- + +_TUNE_CONFIGS = [triton.Config({"BLOCK_N": BN, "BLOCK_K": BK}, num_stages=4, num_warps=wp) for BN in [32, 64, 128] for BK in [32, 64, 128] for wp in [4, 8]] + + +def _cfg_keep(conf): + """Basic heuristic to prune unbalanced configs.""" + BN = conf.kwargs["BLOCK_N"] + BK = conf.kwargs["BLOCK_K"] + # Avoid tiny tiles on many warps + if BN * BK < 32 * 32 and conf.num_warps > 4: + return False + return True + + +_TUNE_CONFIGS = list(filter(_cfg_keep, _TUNE_CONFIGS)) + + +@triton.autotune(_TUNE_CONFIGS, key=["N", "K"]) +@triton.jit +def _euclid_assign_kernel( + x_ptr, # *f16 / *f32 [B, N, D] + c_ptr, # *f16 / *f32 [B, K, D] + x_sq_ptr, # *f32 [B, N] + out_ptr, # *i32 [B, N] + B: tl.constexpr, + N: tl.constexpr, + K: tl.constexpr, + D: tl.constexpr, + stride_x_b: tl.constexpr, + stride_x_n: tl.constexpr, + stride_x_d: tl.constexpr, + stride_c_b: tl.constexpr, + stride_c_k: tl.constexpr, + stride_c_d: tl.constexpr, + stride_xsq_b: tl.constexpr, + stride_xsq_n: tl.constexpr, + stride_out_b: tl.constexpr, + stride_out_n: tl.constexpr, + BLOCK_N: tl.constexpr, + BLOCK_K: tl.constexpr, +): + """Each program handles a tile of BLOCK_N points for a given batch element. + + The kernel iterates over the centroid dimension K in chunks of BLOCK_K and + maintains the running minimum distance as well as the corresponding index + for every point in the tile. + """ + pid_n = tl.program_id(0) # tile index along N dimension + pid_b = tl.program_id(1) # batch index + + n_start = pid_n * BLOCK_N + n_offsets = n_start + tl.arange(0, BLOCK_N) + n_mask = n_offsets < N + + # ------------------------------------------------------------------ + # Load x tile (BLOCK_N, D) + # ------------------------------------------------------------------ + offs_d = tl.arange(0, D) + # Compute pointer for x block: base + b*stride_x_b + n*stride_x_n + d*stride_x_d + x_ptrs = x_ptr + pid_b * stride_x_b + n_offsets[:, None] * stride_x_n + offs_d[None, :] * stride_x_d + x_tile = tl.load(x_ptrs, mask=n_mask[:, None], other=0.0) + x_tile = x_tile # compute in f32 + + # Pre-load x_sq for the tile (BLOCK_N,) + xsq_ptrs = x_sq_ptr + pid_b * stride_xsq_b + n_offsets * stride_xsq_n + x_sq_tile = tl.load(xsq_ptrs, mask=n_mask, other=0.0).to(tl.float32) + + # Init best distance / index + best_dist = tl.full((BLOCK_N,), 3.4e38, tl.float32) # large number + best_idx = tl.zeros((BLOCK_N,), tl.int32) + + # ------------------------------------------------------------------ + # Iterate over centroids in chunks of BLOCK_K + # ------------------------------------------------------------------ + for k_start in range(0, K, BLOCK_K): + k_offsets = k_start + tl.arange(0, BLOCK_K) + k_mask = k_offsets < K + + # Load centroid tile (D, BLOCK_K) + c_ptrs = c_ptr + pid_b * stride_c_b + k_offsets[None, :] * stride_c_k + offs_d[:, None] * stride_c_d + c_tile = tl.load(c_ptrs, mask=k_mask[None, :], other=0.0) + c_tile = c_tile + + # Compute centroid squared norms (BLOCK_K,) + cent_sq = tl.sum(c_tile * c_tile, axis=0).to(tl.float32) + + # Compute cross term (BLOCK_N, BLOCK_K) = x_tile @ c_tile + cross = tl.dot(x_tile, c_tile).to(tl.float32) # float32 + + # Squared Euclidean distance + dist = x_sq_tile[:, None] + cent_sq[None, :] - 2.0 * cross + dist = tl.maximum(dist, 0.0) + + # Mask out invalid centroid columns before reduction + dist = tl.where(k_mask[None, :], dist, 3.4e38) + + curr_min = tl.min(dist, axis=1) + curr_idx = tl.argmin(dist, axis=1) + + update = curr_min < best_dist + best_dist = tl.where(update, curr_min, best_dist) + best_idx = tl.where(update, k_start + curr_idx, best_idx) + + # ------------------------------------------------------------------ + # Write results + # ------------------------------------------------------------------ + out_ptrs = out_ptr + pid_b * stride_out_b + n_offsets * stride_out_n + tl.store(out_ptrs, best_idx, mask=n_mask) + + +# --------------------------------------------------------------- +# Python wrapper +# --------------------------------------------------------------- + + +def euclid_assign_triton( + x: torch.Tensor, + centroids: torch.Tensor, + x_sq: torch.Tensor, + out: torch.Tensor = None, + *, + BLOCK_N: int = 128, + BLOCK_K: int = 128, +) -> torch.Tensor: + """Return nearest-centroid indices using Triton kernel. + + Args: + x : (B, N, D) float16 / float32 (on CUDA) + centroids : (B, K, D) same dtype/device as x + x_sq : (B, N) float32 – ||x||^2 per point (on CUDA) + + Returns: + cluster_ids (B, N) int32 (callers can cast to int64 if desired) + """ + assert x.is_cuda and centroids.is_cuda and x_sq.is_cuda, "All tensors must be on CUDA" + # assert x.dtype in (torch.float16, torch.float32), "x must be fp16/fp32" + assert centroids.dtype == x.dtype, "centroids dtype mismatch" + + B, N, D = x.shape + K = centroids.shape[1] + assert centroids.shape == (B, K, D), "centroids shape mismatch" + assert x_sq.shape == (B, N), "x_sq shape mismatch" + + # x = x.contiguous() + # centroids = centroids.contiguous() + # x_sq = x_sq.contiguous() + + if out is None: + out = torch.empty((B, N), device=x.device, dtype=torch.int64) + + # Strides (in elements) + stride_x_b, stride_x_n, stride_x_d = x.stride() + stride_c_b, stride_c_k, stride_c_d = centroids.stride() + stride_xsq_b, stride_xsq_n = x_sq.stride() + stride_out_b, stride_out_n = out.stride() + + grid = lambda META: (triton.cdiv(N, META["BLOCK_N"]), B) # noqa + + _euclid_assign_kernel[grid]( + x, + centroids, + x_sq, + out, + B, + N, + K, + D, + stride_x_b, + stride_x_n, + stride_x_d, + stride_c_b, + stride_c_k, + stride_c_d, + stride_xsq_b, + stride_xsq_n, + stride_out_b, + stride_out_n, + ) + return out + + +# 1. Euclidean +def _euclid_iter(x, x_sq, centroids): + # cent_sq = (centroids ** 2).sum(dim=-1) + # cross = torch.einsum('bnd,bkd->bnk', x, centroids) + # dist_sq = (x_sq[:,:,None] + cent_sq[:,None,:] - 2.0 * cross).clamp_min_(0.0) + + # cluster_ids = dist_sq.argmin(dim=-1) + cluster_ids = euclid_assign_triton(x, centroids, x_sq) + centroids_new, cluster_sizes = triton_centroid_update_sorted_euclid(x, cluster_ids, centroids) + # centroids_new = triton_centroid_update_euclid(x, cluster_ids, centroids) + + # centroids_new = centroids_new.clone() # avoid CUDA graphs aliasing + + shift = (centroids_new - centroids).norm(dim=-1).max() + return centroids_new, shift, cluster_ids, cluster_sizes + + +# 2. Cosine +def _cosine_iter(x_norm, centroids): + cos_sim = torch.einsum("bnd,bkd->bnk", x_norm, centroids) + cluster_ids = cos_sim.argmax(dim=-1) + centroids_new = triton_centroid_update_cosine(x_norm, cluster_ids, centroids) + # centroids_new = centroids_new.clone() + shift = (centroids_new - centroids).norm(dim=-1).max() + return centroids_new, shift, cluster_ids + + +# 3. Dot-product +def _dot_iter(x, centroids): + sim = torch.einsum("bnd,bkd->bnk", x, centroids) + cluster_ids = sim.argmax(dim=-1) + centroids_new = triton_centroid_update_cosine(x, cluster_ids, centroids) + # centroids_new = centroids_new.clone() + shift = (centroids_new - centroids).norm(dim=-1).max() + return centroids_new, shift, cluster_ids + + +COMPILE_FLAG = False + +# Try to compile; if PyTorch < 2.0 or compile is not available, fallback to original function +try: + if COMPILE_FLAG: + _euclid_iter_compiled = torch.compile(_euclid_iter, dynamic=True, mode="reduce-overhead") + _cosine_iter_compiled = torch.compile(_cosine_iter, dynamic=True, mode="reduce-overhead") + _dot_iter_compiled = torch.compile(_dot_iter, dynamic=True, mode="reduce-overhead") + else: + _euclid_iter_compiled = _euclid_iter + _cosine_iter_compiled = _cosine_iter + _dot_iter_compiled = _dot_iter +except Exception: # pragma: no cover + _euclid_iter_compiled = _euclid_iter + _cosine_iter_compiled = _cosine_iter + _dot_iter_compiled = _dot_iter + + +def batch_kmeans_Euclid(x, n_clusters, max_iters=100, tol=1e-4, init_centroids=None, verbose=False): + """ + Batched KMeans clustering in PyTorch using Euclidean distance. + + Args: + x: Tensor of shape (B, N, D), batch_size B, N points per batch, D dims. + n_clusters: Number of clusters. + max_iters: Max number of iterations. + tol: Relative tolerance for center movement. + verbose: Print loss for each iter. + Returns: + cluster_ids: (B, N) LongTensor, cluster assignment for each point. + centroids: (B, n_clusters, D) final cluster centers. + cluster_sizes: (B, n_clusters) LongTensor, number of points per cluster. + n_iters: actual number of iterations executed (int) + """ + B, N, D = x.shape + + # Pre-compute squared L2 norm of all points (constant during iterations) + x_sq = (x**2).sum(dim=-1) # (B, N) + + if init_centroids is None: + # Randomly select initial centers from x + indices = torch.randint(0, N, (B, n_clusters), device=x.device) + centroids = torch.gather(x, dim=1, index=indices[..., None].expand(-1, -1, D)) # (B, n_clusters, D) + else: + # centroids = init_centroids.clone() + centroids = init_centroids + + centroids = centroids.view(B, n_clusters, D) + + for it in range(max_iters): + # ---- compiled single iteration ---- + centroids_new, center_shift, cluster_ids, cluster_sizes = _euclid_iter_compiled(x, x_sq, centroids) + + # 4. Check for convergence + if verbose: + print(f"Iter {it}, center shift: {center_shift.item():.6f}") + if center_shift < tol: + break + # centroids = centroids_new.clone() + centroids = centroids_new + + # # --- compute cluster sizes --- + # ones = torch.ones_like(cluster_ids, dtype=torch.int64) + # cluster_sizes = torch.zeros(B, n_clusters, dtype=torch.int64, device=x.device) + # cluster_sizes.scatter_add_(1, cluster_ids, ones) + + return cluster_ids, centroids, cluster_sizes, it + 1 + # return cluster_ids.clone(), centroids.clone(), cluster_sizes.clone(), it + 1 + + +# batch_kmeans_Euclid = torch.compile(batch_kmeans_Euclid, dynamic=True, mode="reduce-overhead") + + +def batch_kmeans_Cosine(x, n_clusters, max_iters=100, tol=1e-4, init_centroids=None, verbose=False): + """ + Batched KMeans clustering in PyTorch using Cosine similarity. + + Args: + x: Tensor of shape (B, N, D), batch_size B, N points per batch, D dims. + n_clusters: Number of clusters. + max_iters: Max number of iterations. + tol: Relative tolerance for center movement. + verbose: Print loss for each iter. + Returns: + cluster_ids: (B, N) LongTensor, cluster assignment for each point. + centroids: (B, n_clusters, D) final cluster centers. + cluster_sizes: (B, n_clusters) LongTensor, number of points per cluster. + n_iters: actual number of iterations executed (int) + """ + B, N, D = x.shape + + # Normalize input vectors for cosine similarity + x_norm = F.normalize(x, p=2, dim=-1) # (B, N, D) + + if init_centroids is None: + # Randomly select initial centers from x_norm + indices = torch.randint(0, N, (B, n_clusters), device=x.device) + centroids = torch.gather(x_norm, dim=1, index=indices[..., None].expand(-1, -1, D)) # (B, n_clusters, D) + else: + centroids = init_centroids + + centroids = centroids.view(B, n_clusters, D) + centroids = F.normalize(centroids, p=2, dim=-1) # Ensure centroids are normalized + + for it in range(max_iters): + # ---- compiled single iteration ---- + centroids_new, center_shift, cluster_ids = _cosine_iter_compiled(x_norm, centroids) + + # 4. Check for convergence + if verbose: + print(f"Iter {it}, center shift: {center_shift.item():.6f}") + if center_shift < tol: + break + centroids = centroids_new.clone() + + # --- compute cluster sizes --- + ones = torch.ones_like(cluster_ids, dtype=torch.int64) + cluster_sizes = torch.zeros(B, n_clusters, dtype=torch.int64, device=x.device) + cluster_sizes.scatter_add_(1, cluster_ids, ones) + + return cluster_ids, centroids, cluster_sizes, it + 1 + + +def batch_kmeans_Dot(x, n_clusters, max_iters=100, tol=1e-4, init_centroids=None, verbose=False): + """ + Batched KMeans clustering in PyTorch using raw dot-product as similarity. + + """ + B, N, D = x.shape + + if init_centroids is None: + # Randomly initialize centroids + indices = torch.randint(0, N, (B, n_clusters), device=x.device) + centroids = torch.gather(x, dim=1, index=indices[..., None].expand(-1, -1, D)) + else: + centroids = init_centroids + + centroids = centroids.view(B, n_clusters, D) + + for it in range(max_iters): + # ---- compiled single iteration ---- + centroids_new, center_shift, cluster_ids = _dot_iter_compiled(x, centroids) + + # 4. Check for convergence + if verbose: + print(f"Iter {it} (dot), center shift: {center_shift.item():.6f}") + if center_shift < tol: + break + centroids = centroids_new.clone() + + # --- compute cluster sizes --- + ones = torch.ones_like(cluster_ids, dtype=torch.int64) + cluster_sizes = torch.zeros(B, n_clusters, dtype=torch.int64, device=x.device) + cluster_sizes.scatter_add_(1, cluster_ids, ones) + + return cluster_ids, centroids, cluster_sizes, it + 1 + + +# --- Functions from analyze/kmeans_block_sparse_attention.py (helpers) --- + + +def permute_tensor_by_labels(tensor, labels, dim): + labels = labels.to(tensor.device) + sorted_indices = torch.argsort(labels, dim=-1) + gather_indices = sorted_indices + for i in range(dim + 1, tensor.dim()): + gather_indices = gather_indices.unsqueeze(-1) + expand_shape = list(tensor.shape) + gather_indices = gather_indices.expand(expand_shape) + permuted_tensor = torch.gather(tensor, dim, gather_indices) + return permuted_tensor, sorted_indices + + +def apply_inverse_permutation(permuted_tensor, sorted_indices, dim): + inverse_indices = torch.argsort(sorted_indices, dim=-1) + gather_indices = inverse_indices + for i in range(dim + 1, permuted_tensor.dim()): + gather_indices = gather_indices.unsqueeze(-1) + gather_indices = gather_indices.expand(permuted_tensor.shape) + original_tensor = torch.gather(permuted_tensor, dim, gather_indices) + return original_tensor + + +def weighted_softmax(scores, weights): + input_dtype = scores.dtype + scores = scores.float() + weights = weights.float() + max_score = torch.max(scores, dim=-1, keepdim=True)[0] + exp_scores = torch.exp(scores - max_score) + weighted_exp = weights * exp_scores + softmax_out = weighted_exp / torch.sum(weighted_exp, dim=-1, keepdim=True).clamp(min=1e-12) + return softmax_out.to(input_dtype) + + +def identify_dynamic_map( + query_centroids, + key_centroids, + q_cluster_sizes, + k_cluster_sizes, + p, + min_kc_ratio=0, +): + B, H, qc_num, D = query_centroids.shape + kc_num = key_centroids.shape[2] + device = query_centroids.device + + attn_scores = torch.matmul(query_centroids, key_centroids.transpose(-2, -1)) / (D**0.5) + k_weights = k_cluster_sizes.unsqueeze(-2).float() + + weighted_attn_probs = weighted_softmax(attn_scores, k_weights) + sorted_probs, sorted_indices = torch.sort(weighted_attn_probs, dim=-1, descending=True) + + cumsum_probs = torch.cumsum(sorted_probs, dim=-1) + remove_indices = cumsum_probs > p + remove_indices[..., 1:] = remove_indices[..., :-1].clone() + remove_indices[..., 0] = False + + if min_kc_ratio > 0: + preserve_length = int(min_kc_ratio * kc_num) + remove_indices[..., :preserve_length] = False + + sorted_clusters_to_keep = ~remove_indices + + dynamic_map = torch.zeros(B, H, qc_num, kc_num, dtype=torch.bool, device=device) + dynamic_map.scatter_(-1, sorted_indices, sorted_clusters_to_keep) + return dynamic_map + + +# --- Functions from analyze/dynamic_block_sparse_attention.py --- + + +def dynamic_block_sparse_fwd_torch(q, k, v, dynamic_map, qc_size, kc_size): + """ + Computes dynamic block sparse attention using pure PyTorch. + + Args: + q (torch.Tensor): Query tensor, shape [B, H, S, D]. + k (torch.Tensor): Key tensor, shape [B, H, S, D]. + v (torch.Tensor): Value tensor, shape [B, H, S, D]. + dynamic_map (torch.Tensor): Boolean mask, shape [B, H, qc_num, kc_num]. + qc_size (torch.Tensor): Query block sizes, shape [B, H, qc_num]. + kc_size (torch.Tensor): Key block sizes, shape [B, H, kc_num]. + + Returns: + torch.Tensor: Output tensor, shape [B, H, S, D]. + """ + B, H, S, D = q.shape + qc_num = qc_size.shape[-1] + kc_num = kc_size.shape[-1] + device = q.device + dtype = q.dtype + + # Ensure sequence lengths match sum of block sizes + assert S == torch.sum(qc_size[0, 0, :]), "Sum of qc_size must equal S" + assert S == torch.sum(kc_size[0, 0, :]), "Sum of kc_size must equal S" + + # Precompute cumulative sizes for block indexing + # Add a 0 at the beginning for easier slicing + qc_cum_size = torch.cumsum(torch.cat([torch.zeros_like(qc_size[..., :1]), qc_size], dim=-1), dim=-1) + kc_cum_size = torch.cumsum(torch.cat([torch.zeros_like(kc_size[..., :1]), kc_size], dim=-1), dim=-1) + + out = torch.zeros_like(q) + scale = D**-0.5 + + # Naive implementation: Iterate through batch, head, and blocks + for b in range(B): + for h in range(H): + # Precompute start/end indices for this batch/head + q_starts = qc_cum_size[b, h, :-1] + q_ends = qc_cum_size[b, h, 1:] + k_starts = kc_cum_size[b, h, :-1] + k_ends = kc_cum_size[b, h, 1:] + + # Iterate through query blocks + for i in range(qc_num): + q_start, q_end = q_starts[i], q_ends[i] + q_block = q[b, h, q_start:q_end, :] # Shape: [qc_i, D] + + if q_block.shape[0] == 0: + continue # Skip empty blocks + + m_i = torch.full((q_block.shape[0], 1), -float("inf"), device=device, dtype=dtype) + l_i = torch.zeros((q_block.shape[0], 1), device=device, dtype=dtype) + acc_o_i = torch.zeros_like(q_block) # Shape: [qc_i, D] + + # Iterate through key/value blocks for the current query block + for j in range(kc_num): + # Check if this block needs computation + if dynamic_map[b, h, i, j]: + k_start, k_end = k_starts[j], k_ends[j] + k_block = k[b, h, k_start:k_end, :] # Shape: [kc_j, D] + v_block = v[b, h, k_start:k_end, :] # Shape: [kc_j, D] + + if k_block.shape[0] == 0: + continue # Skip empty blocks + + # Compute attention scores for the block + # QK^T: [qc_i, D] @ [D, kc_j] -> [qc_i, kc_j] + s_ij = (q_block @ k_block.transpose(-1, -2)) * scale + + # --- Online Softmax --- + # Find max score per query token in this block + m_ij = torch.max(s_ij, dim=-1, keepdim=True)[0] # Shape: [qc_i, 1] + + # Update overall max score (m_i) + m_new = torch.maximum(m_i, m_ij) # Shape: [qc_i, 1] + + # Calculate scaling factors for previous accumulator and current block + p_ij = torch.exp(s_ij - m_new) # Shape: [qc_i, kc_j] + exp_m_diff = torch.exp(m_i - m_new) # Shape: [qc_i, 1] + + # Update softmax denominator (l_i) + l_i = (l_i * exp_m_diff) + torch.sum(p_ij, dim=-1, keepdim=True) # Shape: [qc_i, 1] + + # Update output accumulator (acc_o_i) + # P_ij @ V_j: [qc_i, kc_j] @ [kc_j, D] -> [qc_i, D] + acc_o_i = (acc_o_i * exp_m_diff) + (p_ij @ v_block) # Shape: [qc_i, D] + + # Update max score for next iteration + m_i = m_new + + # Normalize the accumulated output + out[b, h, q_start:q_end, :] = acc_o_i / l_i.clamp(min=1e-12) # Avoid division by zero + + return out + + +# --- Triton Implementation --- + + +@triton.jit +def _dynamic_block_sparse_fwd_kernel( + Q, + K, + V, + Out, + dynamic_map, + qc_cum_size, + kc_cum_size, + stride_qb, + stride_qh, + stride_qs, + stride_qd, + stride_kb, + stride_kh, + stride_ks, + stride_kd, + stride_vb, + stride_vh, + stride_vs, + stride_vd, + stride_ob, + stride_oh, + stride_os, + stride_od, + stride_dmap_b, + stride_dmap_h, + stride_dmap_qc, + stride_dmap_kc, + stride_qcs_b, + stride_qcs_h, + stride_qcs_qc, + stride_kcs_b, + stride_kcs_h, + stride_kcs_kc, + B, + H, + S, + D, + scale, + QC_NUM: tl.constexpr, + KC_NUM: tl.constexpr, + BLOCK_M: tl.constexpr, + BLOCK_N: tl.constexpr, + BLOCK_D: tl.constexpr, +): + """ + Triton kernel for dynamic block sparse attention. + Each program computes attention for one query block within a batch/head. + Processes query block in chunks of BLOCK_M. + Iterates through key blocks, checking dynamic_map. + Processes key/value blocks in chunks of BLOCK_N. + Uses online softmax. + """ + # --- Grid Calculation --- + # Each program instance handles one query block for a specific batch and head + pid = tl.program_id(axis=0) + B * H * QC_NUM + + # Calculate batch, head, and query block index + pid_q_block_global = pid # 0 to B*H*QC_NUM - 1 + # pid_bh = pid // QC_NUM # Deprecated: Causes issues if QC_NUM is not constant across BH + # pid_q_block_idx = pid % QC_NUM + + # Need to map pid (0.. B*H*QC_NUM-1) back to (b, h, q_block_idx) + # q_block_idx changes fastest, then h, then b + q_block_idx = pid_q_block_global % QC_NUM + pid_h_temp = pid_q_block_global // QC_NUM + h = pid_h_temp % H + b = pid_h_temp // H + + # --- Load Q block info (start/end offsets) --- + qcs_offset = b * stride_qcs_b + h * stride_qcs_h + q_start_offset = tl.load(qc_cum_size + qcs_offset + q_block_idx * stride_qcs_qc) + q_end_offset = tl.load(qc_cum_size + qcs_offset + (q_block_idx + 1) * stride_qcs_qc) + q_block_size = q_end_offset - q_start_offset + + # Early exit if the query block is empty + if q_block_size == 0: + return + + # --- Pointers setup --- + q_ptr_base = Q + b * stride_qb + h * stride_qh + q_start_offset * stride_qs + k_ptr_base = K + b * stride_kb + h * stride_kh + v_ptr_base = V + b * stride_vb + h * stride_vh + out_ptr_base = Out + b * stride_ob + h * stride_oh + q_start_offset * stride_os + dmap_ptr = dynamic_map + b * stride_dmap_b + h * stride_dmap_h + q_block_idx * stride_dmap_qc + kcs_ptr = kc_cum_size + b * stride_kcs_b + h * stride_kcs_h + + # --- Iterate over the query block rows in chunks of BLOCK_M --- + offs_qm = tl.arange(0, BLOCK_M) # Query block row offsets [0, 1, ..., BLOCK_M-1] + offs_d = tl.arange(0, BLOCK_D) # Dimension offsets [0, 1, ..., BLOCK_D-1] + + for q_chunk_start in range(0, q_block_size, BLOCK_M): + q_chunk_rows = offs_qm + q_chunk_start + q_rows_mask = q_chunk_rows < q_block_size # Mask for valid rows in this Q chunk [BLOCK_M] + + # --- Initialize accumulators for this Q chunk --- + m_i = tl.zeros([BLOCK_M], dtype=tl.float32) - float("inf") # Max score + l_i = tl.zeros([BLOCK_M], dtype=tl.float32) # Sum of exp(scores - max) + acc_o = tl.zeros([BLOCK_M, BLOCK_D], dtype=tl.float32) # Accumulated output + + # --- Load Q chunk --- + q_ptr = q_ptr_base + q_chunk_rows[:, None] * stride_qs + offs_d[None, :] + # Mask ensures we don't read out of bounds for the query block or dimension D + mask_q = q_rows_mask[:, None] & (offs_d[None, :] < D) + q_chunk = tl.load(q_ptr, mask=mask_q, other=0.0) # Shape: [BLOCK_M, BLOCK_D] + + # --- Inner loop over K blocks (columns in the block sparse map) --- + for k_block_idx in range(KC_NUM): + # --- Check dynamic_map: Is this block active? --- + is_active = tl.load(dmap_ptr + k_block_idx * stride_dmap_kc) + if is_active: # Process block only if it's active + # --- Load K block info (start/end offsets) --- + k_start_offset = tl.load(kcs_ptr + k_block_idx * stride_kcs_kc) + k_end_offset = tl.load(kcs_ptr + (k_block_idx + 1) * stride_kcs_kc) + k_block_size = k_end_offset - k_start_offset + + # Skip if the key block is empty (inside the active block check) + if k_block_size > 0: + k_block_ptr_base = k_ptr_base + k_start_offset * stride_ks + v_block_ptr_base = v_ptr_base + k_start_offset * stride_vs + + # --- Loop over K block chunks (size BLOCK_N) --- + offs_kn = tl.arange(0, BLOCK_N) # Key block row offsets [0, ..., BLOCK_N-1] + for k_chunk_start in range(0, k_block_size, BLOCK_N): + k_chunk_rows = offs_kn + k_chunk_start + k_rows_mask = k_chunk_rows < k_block_size # Mask for valid rows in this K/V chunk [BLOCK_N] + + # --- Load K, V chunks --- + k_ptr = k_block_ptr_base + k_chunk_rows[:, None] * stride_ks + offs_d[None, :] + v_ptr = v_block_ptr_base + k_chunk_rows[:, None] * stride_vs + offs_d[None, :] + + # Mask ensures we don't read out of bounds for the key block or dimension D + mask_kv = k_rows_mask[:, None] & (offs_d[None, :] < D) + k_chunk = tl.load(k_ptr, mask=mask_kv, other=0.0) # Shape: [BLOCK_N, BLOCK_D] + v_chunk = tl.load(v_ptr, mask=mask_kv, other=0.0) # Shape: [BLOCK_N, BLOCK_D] + + # --- Compute Scores (Attention) --- + # QK^T: [BLOCK_M, BLOCK_D] @ [BLOCK_D, BLOCK_N] -> [BLOCK_M, BLOCK_N] + s_ij_chunk = tl.dot(q_chunk, k_chunk.T) * scale + + # IMPORTANT: Mask out scores corresponding to padding in K before max/softmax + # Set scores for invalid K elements to -inf + s_ij_chunk = tl.where(k_rows_mask[None, :], s_ij_chunk, -float("inf")) + # Mask out scores for invalid Q elements as well (although q_chunk elements are 0, avoid potential issues) + s_ij_chunk = tl.where(q_rows_mask[:, None], s_ij_chunk, -float("inf")) + + # --- Online Softmax Update --- + # Current max for this Q-K chunk interaction + m_ij_chunk = tl.max(s_ij_chunk, axis=1) # Shape: [BLOCK_M] + + # Update overall max (across K chunks seen so far for this Q chunk) + m_new = tl.maximum(m_i, m_ij_chunk) # Shape: [BLOCK_M] + + # Calculate scaled probabilities P_ij = exp(S_ij - m_new) + p_ij_chunk = tl.exp(s_ij_chunk - m_new[:, None]) # Shape: [BLOCK_M, BLOCK_N] + # Zero out probabilities for masked K elements before summing + p_ij_chunk = tl.where(k_rows_mask[None, :], p_ij_chunk, 0.0) + + # Calculate scaling factor for previous accumulator state + exp_m_diff = tl.exp(m_i - m_new) # Shape: [BLOCK_M] + + # Update sum accumulator (denominator L) + l_i_chunk = tl.sum(p_ij_chunk, axis=1) # Sum probabilities for this chunk, shape [BLOCK_M] + l_i = (l_i * exp_m_diff) + l_i_chunk # Shape: [BLOCK_M] + + # Update output accumulator O + # P_ij @ V_j: [BLOCK_M, BLOCK_N] @ [BLOCK_N, BLOCK_D] -> [BLOCK_M, BLOCK_D] + # Ensure p_ij_chunk is the correct dtype for dot product + p_ij_chunk_casted = p_ij_chunk.to(V.dtype.element_ty) + o_chunk = tl.dot(p_ij_chunk_casted, v_chunk) # Shape: [BLOCK_M, BLOCK_D] + + acc_o = (acc_o * exp_m_diff[:, None]) + o_chunk # Shape: [BLOCK_M, BLOCK_D] + + # Update max for the next K chunk/block + m_i = m_new + # End of 'if is_active:' block + # --- End of loop over K blocks --- + + # --- Finalize output for this Q chunk --- + # Normalize the accumulated output: O = acc_o / l_i + # Add epsilon to l_i to avoid division by zero + l_i_safe = tl.where(l_i == 0, 1.0, l_i) # Avoid 0/0 -> NaN + o_final_chunk = acc_o / (l_i_safe[:, None]) + o_final_chunk = tl.where(l_i[:, None] == 0, 0.0, o_final_chunk) # Ensure output is 0 if l_i was 0 + + # --- Write output chunk to global memory --- + out_ptr = out_ptr_base + q_chunk_rows[:, None] * stride_os + offs_d[None, :] + # Mask ensures we don't write out of bounds for the query block or dimension D + mask_out = q_rows_mask[:, None] & (offs_d[None, :] < D) + tl.store(out_ptr, o_final_chunk.to(Out.dtype.element_ty), mask=mask_out) + + # --- (Optional: Write L and M stats if needed) --- + # Example: + # l_ptr = L + b * stride_lb + h * stride_lh + (q_start_offset + q_chunk_rows) * stride_ls + # tl.store(l_ptr, l_i, mask=q_rows_mask) + # m_ptr = M + ... + # tl.store(m_ptr, m_i, mask=q_rows_mask) + + # --- End of loop over Q chunks --- + + +def dynamic_block_sparse_fwd_triton(q, k, v, dynamic_map, qc_size, kc_size): + """ + Launcher for the Triton dynamic block sparse attention kernel. + + Args: + q (torch.Tensor): Query tensor, shape [B, H, S, D]. + k (torch.Tensor): Key tensor, shape [B, H, S, D]. + v (torch.Tensor): Value tensor, shape [B, H, S, D]. + dynamic_map (torch.Tensor): Boolean mask, shape [B, H, qc_num, kc_num]. + qc_size (torch.Tensor): Query block sizes, shape [B, H, qc_num]. + kc_size (torch.Tensor): Key block sizes, shape [B, H, kc_num]. + + Returns: + torch.Tensor: Output tensor, shape [B, H, S, D]. + """ + B, H, S, D = q.shape + qc_num = qc_size.shape[-1] + kc_num = kc_size.shape[-1] + dtype = q.dtype + + # Assertions and checks + assert q.is_cuda and k.is_cuda and v.is_cuda, "Inputs must be CUDA tensors" + assert dynamic_map.is_cuda and qc_size.is_cuda and kc_size.is_cuda + assert q.dtype == k.dtype == v.dtype, "Input dtypes must match" + assert dtype in [torch.float16, torch.bfloat16, torch.float32], "Unsupported dtype" + assert D in [16, 32, 64, 128], "Head dimension D must be 16, 32, 64, or 128 for efficient Triton dot" + # Ensure sequence lengths match sum of block sizes (check on one batch/head for simplicity) + assert S == torch.sum(qc_size[0, 0, :]), "Sum of qc_size must equal S" + assert S == torch.sum(kc_size[0, 0, :]), "Sum of kc_size must equal S" + # Ensure dynamic_map is boolean + assert dynamic_map.dtype == torch.bool + + # Calculate scale factor (using float32 for stability) + scale = D**-0.5 + + # Precompute cumulative sizes (on CPU/GPU, keep on device) + qc_cum_size = torch.cumsum(torch.cat([torch.zeros_like(qc_size[..., :1]), qc_size], dim=-1), dim=-1).int() + kc_cum_size = torch.cumsum(torch.cat([torch.zeros_like(kc_size[..., :1]), kc_size], dim=-1), dim=-1).int() + + # Output tensor + out = torch.empty_like(q) + + # Triton kernel config + # BLOCK_M/N can be tuned. Larger blocks may increase occupancy but need more shared memory. + # Let's start with reasonably sized blocks. + BLOCK_D = D + if S <= 512: # Smaller sequence, smaller blocks might be ok + BLOCK_M = 64 + BLOCK_N = 64 + elif S <= 1024: + BLOCK_M = 64 + BLOCK_N = 64 + else: # Larger sequence, potentially larger blocks + BLOCK_M = 128 # Or keep 64? Test + BLOCK_N = 64 + + # Adjust block size if sequence length is smaller + BLOCK_M = min(BLOCK_M, S) + BLOCK_N = min(BLOCK_N, S) + + # Launch grid: One program per query block per batch/head + grid = (B * H * qc_num,) + + # Call the kernel + _dynamic_block_sparse_fwd_kernel[grid]( + q, + k, + v, + out, + dynamic_map, + qc_cum_size, + kc_cum_size, + q.stride(0), + q.stride(1), + q.stride(2), + q.stride(3), + k.stride(0), + k.stride(1), + k.stride(2), + k.stride(3), + v.stride(0), + v.stride(1), + v.stride(2), + v.stride(3), + out.stride(0), + out.stride(1), + out.stride(2), + out.stride(3), + dynamic_map.stride(0), + dynamic_map.stride(1), + dynamic_map.stride(2), + dynamic_map.stride(3), + qc_cum_size.stride(0), + qc_cum_size.stride(1), + qc_cum_size.stride(2), + kc_cum_size.stride(0), + kc_cum_size.stride(1), + kc_cum_size.stride(2), + B, + H, + S, + D, + scale, + QC_NUM=qc_num, + KC_NUM=kc_num, + BLOCK_M=BLOCK_M, + BLOCK_N=BLOCK_N, + BLOCK_D=BLOCK_D, + # num_warps=4 # Can tune this + ) + + return out + + +# ---------------- Batch wrapper for cuVS KMeans ----------------- + + +def batch_kmeans_rapidai(x, n_clusters, max_iters=100, tol=1e-4, init_centroids=None, verbose=False): + """Batched K-Means using RAPIDS cuVS implementation. + + Args: + x (Tensor): (B, N, D) float32 tensor on CUDA. + n_clusters (int): K. + max_iters (int): maximum iterations. + tol (float): tolerance. + init_centroids (Tensor|None): optional initial centroids (B,K,D) float32. + verbose (bool): print per-batch info. + + Returns: + cluster_ids (B, N) LongTensor + centroids (B, K, D) float32 + cluster_sizes (B, K) LongTensor + n_iters_list (List[int]) iterations per batch + """ + B, N, D = x.shape + if init_centroids is not None: + assert init_centroids.shape == (B, n_clusters, D) + + cluster_ids_list = [] + centroids_list = [] + # cluster_sizes_list = [] + n_iters_list = [] + + x_float = x.float() + if init_centroids is not None: + init_centroids_float = init_centroids.float() + + for b in range(B): + xb = x_float[b] + if init_centroids is None: + centroids_init_b = None + init_method = "KMeansPlusPlus" + else: + centroids_init_b = init_centroids_float[b] + init_method = "Array" + labels_b, centroids_b, n_iter_b = kmeans_rapidai(xb, n_clusters, max_iter=max_iters, tol=tol, init_method=init_method, centroids_init=centroids_init_b) + + cluster_ids_list.append(labels_b.to(torch.int64)) # (N,) + centroids_list.append(centroids_b) + # cluster_sizes_b = torch.bincount(labels_b, minlength=n_clusters).to(torch.int64) + # cluster_sizes_list.append(cluster_sizes_b) + # n_iters_list.append(n_iter_b) + # if verbose: + # print(f"Batch {b}: iters={n_iter_b}, cluster sizes min={cluster_sizes_b.min().item()} max={cluster_sizes_b.max().item()}") + + cluster_ids = torch.stack(cluster_ids_list, dim=0) # (B,N) + centroids = torch.stack(centroids_list, dim=0).to(x.dtype) # (B,K,D) + # cluster_sizes = torch.stack(cluster_sizes_list, dim=0) # (B,K) + # --- compute cluster sizes --- + ones = torch.ones_like(cluster_ids, dtype=torch.int64) + cluster_sizes = torch.zeros(B, n_clusters, dtype=torch.int64, device=x.device) + cluster_sizes.scatter_add_(1, cluster_ids, ones) + + return cluster_ids, centroids, cluster_sizes, n_iters_list diff --git a/lightx2v/common/ops/attn/svg_attn.py b/lightx2v/common/ops/attn/svg_attn.py new file mode 100644 index 0000000..66db7d1 --- /dev/null +++ b/lightx2v/common/ops/attn/svg_attn.py @@ -0,0 +1,409 @@ +import math +from functools import lru_cache +from math import ceil + +import torch +import torch.nn.functional as F +import triton +import triton.language as tl +from loguru import logger +from torch.nn.attention.flex_attention import create_block_mask, flex_attention + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + + +@triton.jit +def wan_hidden_states_placement_kernel( + hidden_states_ptr, # [cfg, num_heads, seq_len, head_dim] seq_len = context_length + num_frame * frame_size + hidden_states_out_ptr, # [cfg, num_heads, seq_len, head_dim] + best_mask_idx_ptr, # [cfg, num_heads] + hidden_states_stride_b, + hidden_states_stride_h, + hidden_states_stride_s, + hidden_states_stride_d, + mask_idx_stride_b, + mask_idx_stride_h, + seq_len: tl.constexpr, + head_dim: tl.constexpr, + context_length: tl.constexpr, + num_frame: tl.constexpr, + frame_size: tl.constexpr, + BLOCK_SIZE: tl.constexpr, +): + # Copy hidden_states to output + # range: [b, h, block_id * block_size: block_id * block_size + block_size, :] + cfg = tl.program_id(0) + head = tl.program_id(1) + block_id = tl.program_id(2) + + start_id = block_id * BLOCK_SIZE + end_id = start_id + BLOCK_SIZE + end_id = tl.where(end_id > seq_len, seq_len, end_id) + + # Load best mask idx (0 is spatial, 1 is temporal) + is_temporal = tl.load(best_mask_idx_ptr + cfg * mask_idx_stride_b + head * mask_idx_stride_h) + + offset_token = tl.arange(0, BLOCK_SIZE) + start_id + offset_mask = offset_token < seq_len + offset_d = tl.arange(0, head_dim) + + if is_temporal: + patch_id = offset_token // num_frame + frame_id = offset_token - patch_id * num_frame + offset_store_token = tl.where(offset_token >= seq_len - context_length, offset_token, frame_id * frame_size + patch_id) + + offset_load = (cfg * hidden_states_stride_b + head * hidden_states_stride_h + offset_token[:, None] * hidden_states_stride_s) + offset_d[None, :] * hidden_states_stride_d + offset_hidden_states = hidden_states_ptr + offset_load + + offset_store = (cfg * hidden_states_stride_b + head * hidden_states_stride_h + offset_store_token[:, None] * hidden_states_stride_s) + offset_d[None, :] * hidden_states_stride_d + offset_hidden_states_out = hidden_states_out_ptr + offset_store + + # Maybe tune the pipeline here + hidden_states = tl.load(offset_hidden_states, mask=offset_mask[:, None]) + tl.store(offset_hidden_states_out, hidden_states, mask=offset_mask[:, None]) + else: + offset_load = (cfg * hidden_states_stride_b + head * hidden_states_stride_h + offset_token[:, None] * hidden_states_stride_s) + offset_d[None, :] * hidden_states_stride_d + offset_hidden_states = hidden_states_ptr + offset_load + + offset_store = offset_load + offset_hidden_states_out = hidden_states_out_ptr + offset_store + + # Maybe tune the pipeline here + hidden_states = tl.load(offset_hidden_states, mask=offset_mask[:, None]) + tl.store(offset_hidden_states_out, hidden_states, mask=offset_mask[:, None]) + + +def wan_hidden_states_placement(hidden_states, hidden_states_out, best_mask_idx, context_length, num_frame, frame_size): + cfg, num_heads, seq_len, head_dim = hidden_states.shape + BLOCK_SIZE = 128 + assert seq_len == context_length + num_frame * frame_size + + grid = (cfg, num_heads, (seq_len + BLOCK_SIZE - 1) // BLOCK_SIZE) + + wan_hidden_states_placement_kernel[grid]( + hidden_states, + hidden_states_out, + best_mask_idx, + hidden_states.stride(0), + hidden_states.stride(1), + hidden_states.stride(2), + hidden_states.stride(3), + best_mask_idx.stride(0), + best_mask_idx.stride(1), + seq_len, + head_dim, + context_length, + num_frame, + frame_size, + BLOCK_SIZE, + ) + + return hidden_states_out + + +@triton.jit +def wan_sparse_head_placement_kernel( + query_ptr, + key_ptr, + value_ptr, # [cfg, num_heads, seq_len, head_dim] seq_len = context_length + num_frame * frame_size + query_out_ptr, + key_out_ptr, + value_out_ptr, # [cfg, num_heads, seq_len, head_dim] + best_mask_idx_ptr, # [cfg, num_heads] + query_stride_b, + query_stride_h, + query_stride_s, + query_stride_d, + mask_idx_stride_b, + mask_idx_stride_h, + seq_len: tl.constexpr, + head_dim: tl.constexpr, + context_length: tl.constexpr, + num_frame: tl.constexpr, + frame_size: tl.constexpr, + BLOCK_SIZE: tl.constexpr, +): + # Copy query, key, value to output + # range: [b, h, block_id * block_size: block_id * block_size + block_size, :] + cfg = tl.program_id(0) + head = tl.program_id(1) + block_id = tl.program_id(2) + + start_id = block_id * BLOCK_SIZE + end_id = start_id + BLOCK_SIZE + end_id = tl.where(end_id > seq_len, seq_len, end_id) + + # Load best mask idx (0 is spatial, 1 is temporal) + is_temporal = tl.load(best_mask_idx_ptr + cfg * mask_idx_stride_b + head * mask_idx_stride_h) + + offset_token = tl.arange(0, BLOCK_SIZE) + start_id + offset_mask = offset_token < seq_len + offset_d = tl.arange(0, head_dim) + + if is_temporal: + frame_id = offset_token // frame_size + patch_id = offset_token - frame_id * frame_size + offset_store_token = tl.where(offset_token >= seq_len - context_length, offset_token, patch_id * num_frame + frame_id) + + offset_load = (cfg * query_stride_b + head * query_stride_h + offset_token[:, None] * query_stride_s) + offset_d[None, :] * query_stride_d + offset_query = query_ptr + offset_load + offset_key = key_ptr + offset_load + offset_value = value_ptr + offset_load + + offset_store = (cfg * query_stride_b + head * query_stride_h + offset_store_token[:, None] * query_stride_s) + offset_d[None, :] * query_stride_d + offset_query_out = query_out_ptr + offset_store + offset_key_out = key_out_ptr + offset_store + offset_value_out = value_out_ptr + offset_store + + # Maybe tune the pipeline here + query = tl.load(offset_query, mask=offset_mask[:, None]) + tl.store(offset_query_out, query, mask=offset_mask[:, None]) + key = tl.load(offset_key, mask=offset_mask[:, None]) + tl.store(offset_key_out, key, mask=offset_mask[:, None]) + value = tl.load(offset_value, mask=offset_mask[:, None]) + tl.store(offset_value_out, value, mask=offset_mask[:, None]) + + else: + offset_load = (cfg * query_stride_b + head * query_stride_h + offset_token[:, None] * query_stride_s) + offset_d[None, :] * query_stride_d + offset_query = query_ptr + offset_load + offset_key = key_ptr + offset_load + offset_value = value_ptr + offset_load + + offset_store = offset_load + offset_query_out = query_out_ptr + offset_store + offset_key_out = key_out_ptr + offset_store + offset_value_out = value_out_ptr + offset_store + + # Maybe tune the pipeline here + query = tl.load(offset_query, mask=offset_mask[:, None]) + tl.store(offset_query_out, query, mask=offset_mask[:, None]) + key = tl.load(offset_key, mask=offset_mask[:, None]) + tl.store(offset_key_out, key, mask=offset_mask[:, None]) + value = tl.load(offset_value, mask=offset_mask[:, None]) + tl.store(offset_value_out, value, mask=offset_mask[:, None]) + + +def wan_sparse_head_placement(query, key, value, query_out, key_out, value_out, best_mask_idx, context_length, num_frame, frame_size): + cfg, num_heads, seq_len, head_dim = query.shape + BLOCK_SIZE = 128 + assert seq_len == context_length + num_frame * frame_size + + grid = (cfg, num_heads, (seq_len + BLOCK_SIZE - 1) // BLOCK_SIZE) + + wan_sparse_head_placement_kernel[grid]( + query, + key, + value, + query_out, + key_out, + value_out, + best_mask_idx, + query.stride(0), + query.stride(1), + query.stride(2), + query.stride(3), + best_mask_idx.stride(0), + best_mask_idx.stride(1), + seq_len, + head_dim, + context_length, + num_frame, + frame_size, + BLOCK_SIZE, + ) + + +def generate_temporal_head_mask_mod(context_length: int = 226, prompt_length: int = 226, num_frames: int = 13, token_per_frame: int = 1350, mul: int = 2): + def round_to_multiple(idx): + return ceil(idx / 128) * 128 + + def temporal_mask_mod(b, h, q_idx, kv_idx): + two_frame = round_to_multiple(mul * token_per_frame) + temporal_head_mask = torch.abs(q_idx - kv_idx) <= two_frame + + # return temporal_head_mask + first_frame_mask = kv_idx < token_per_frame + video_mask = first_frame_mask | temporal_head_mask + return video_mask + + return temporal_mask_mod + + +@lru_cache +def create_block_mask_cached(score_mod, B, H, M, N, device="cuda", _compile=False): + block_mask = create_block_mask(score_mod, B, H, M, N, device=device, _compile=_compile) + return block_mask + + +def prepare_flexattention(cfg_size, num_head, head_dim, dtype, device, context_length, prompt_length, num_frame, frame_size, diag_width=1, multiplier=2): + assert diag_width == multiplier, f"{diag_width} is not equivalent to {multiplier}" + seq_len = context_length + num_frame * frame_size + mask_mod = generate_temporal_head_mask_mod(context_length, prompt_length, num_frame, frame_size, mul=multiplier) + block_mask = create_block_mask_cached(mask_mod, None, None, seq_len, seq_len, device=device, _compile=True) + return block_mask + + +def sparsity_to_width(sparsity, context_length, num_frame, frame_size): + seq_len = context_length + num_frame * frame_size + total_elements = seq_len**2 + + sparsity = (sparsity * total_elements - 2 * seq_len * context_length) / total_elements + + width = seq_len * (1 - math.sqrt(1 - sparsity)) + width_frame = width / frame_size + + return width_frame + + +def get_attention_mask(mask_name, sample_mse_max_row, context_length, num_frame, frame_size): + attention_mask = torch.zeros((context_length + num_frame * frame_size, context_length + num_frame * frame_size), device="cpu") + + # TODO: fix hard coded mask + if mask_name == "spatial": + pixel_attn_mask = torch.zeros_like(attention_mask, dtype=torch.bool, device="cpu") + + pixel_attn_mask[:, :frame_size] = 1 # First Frame Sink + + block_size, block_thres = 128, frame_size * 2 + num_block = math.ceil(num_frame * frame_size / block_size) + for i in range(num_block): + for j in range(num_block): + if abs(i - j) < block_thres // block_size: + pixel_attn_mask[i * block_size : (i + 1) * block_size, j * block_size : (j + 1) * block_size] = 1 + attention_mask = pixel_attn_mask + else: + pixel_attn_mask = torch.zeros_like(attention_mask, dtype=torch.bool, device="cpu") + + pixel_attn_mask[:, :frame_size] = 1 # First Frame Sink + + block_size, block_thres = 128, frame_size * 2 + num_block = math.ceil(num_frame * frame_size / block_size) + for i in range(num_block): + for j in range(num_block): + if abs(i - j) < block_thres // block_size: + pixel_attn_mask[i * block_size : (i + 1) * block_size, j * block_size : (j + 1) * block_size] = 1 + + pixel_attn_mask = pixel_attn_mask.reshape(frame_size, num_frame, frame_size, num_frame).permute(1, 0, 3, 2).reshape(frame_size * num_frame, frame_size * num_frame) + attention_mask = pixel_attn_mask + + attention_mask = attention_mask[:sample_mse_max_row].cuda() + return attention_mask + + +@ATTN_WEIGHT_REGISTER("svg_attn") +class SvgAttnWeight(AttnWeightTemplate): + head_num = None + head_dim = None + sample_mse_max_row = None + num_sampled_rows = None + context_length = None + attnmap_frame_num = None + seqlen = None + sparsity = None + mask_name_list = ["spatial", "temporal"] + attention_masks = None + block_mask = None + + @classmethod + def prepare(cls, head_num, head_dim, sample_mse_max_row, num_sampled_rows, context_length, sparsity): + cls.head_num = head_num + cls.head_dim = head_dim + cls.sample_mse_max_row = sample_mse_max_row + cls.num_sampled_rows = num_sampled_rows + cls.context_length = context_length + cls.sparsity = sparsity + torch._dynamo.config.cache_size_limit = 192 * 3 + torch._dynamo.config.accumulated_cache_size_limit = 192 * 3 + logger.info( + f"SvgAttnWeight Prepare: head_num={head_num}, head_dim={head_dim}, sample_mse_max_row={sample_mse_max_row}, num_sampled_rows={num_sampled_rows}, context_length={context_length}, sparsity={sparsity}" + ) + + def __init__(self): + self.config = {} + self.sparse_attention = torch.compile(flex_attention, dynamic=False, mode="max-autotune-no-cudagraphs") + + @classmethod + def prepare_mask(cls, seqlen): + # Use class attributes so updates affect all instances of this class + if seqlen == cls.seqlen: + return + frame_size = seqlen // cls.attnmap_frame_num + cls.attention_masks = [get_attention_mask(mask_name, cls.sample_mse_max_row, cls.context_length, cls.attnmap_frame_num, frame_size) for mask_name in cls.mask_name_list] + multiplier = diag_width = sparsity_to_width(cls.sparsity, cls.context_length, cls.attnmap_frame_num, frame_size) + cls.block_mask = prepare_flexattention( + 1, cls.head_num, cls.head_dim, torch.bfloat16, "cuda", cls.context_length, cls.context_length, cls.attnmap_frame_num, frame_size, diag_width=diag_width, multiplier=multiplier + ) + cls.seqlen = seqlen + logger.info(f"SvgAttnWeight Update: seqlen={seqlen}") + + def apply( + self, + q, + k, + v, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + q = q.unsqueeze(0).transpose(1, 2) + k = k.unsqueeze(0).transpose(1, 2) + v = v.unsqueeze(0).transpose(1, 2) + bs, num_heads, seq_len, dim = q.size() + + self.prepare_mask(seq_len) + sampled_mses = self.sample_mse(q, k, v) + best_mask_idx = torch.argmin(sampled_mses, dim=0) + + output_hidden_states = torch.zeros_like(q) + query_out, key_out, value_out = torch.zeros_like(q), torch.zeros_like(k), torch.zeros_like(v) + + query_out, key_out, value_out = self.fast_sparse_head_placement( + q, k, v, query_out, key_out, value_out, best_mask_idx, self.context_length, self.attnmap_frame_num, seq_len // self.attnmap_frame_num + ) + + hidden_states = self.sparse_attention(query_out, key_out, value_out) + wan_hidden_states_placement(hidden_states, output_hidden_states, best_mask_idx, self.context_length, self.attnmap_frame_num, seq_len // self.attnmap_frame_num) + + return output_hidden_states.reshape(bs, num_heads, seq_len, dim).transpose(1, 2).reshape(bs * seq_len, -1) + + def fast_sparse_head_placement(self, query, key, value, query_out, key_out, value_out, best_mask_idx, context_length, num_frame, frame_size): + wan_sparse_head_placement(query, key, value, query_out, key_out, value_out, best_mask_idx, context_length, num_frame, frame_size) + return query_out, key_out, value_out + + def sample_mse(self, query, key, value): + cfg, num_heads, seq_len, dim = query.size() + num_sampled_rows = min(self.num_sampled_rows, seq_len) + sampled_rows = torch.randint(low=0, high=self.sample_mse_max_row, size=(num_sampled_rows,)) + sampled_q = query[:, :, sampled_rows, :] + sampled_qk_scores = torch.matmul(sampled_q, key.transpose(-2, -1)) / (dim**0.5) + + sampled_attn_weights = F.softmax(sampled_qk_scores, dim=-1) + sampled_golden_hidden_states = torch.matmul(sampled_attn_weights, value) # (1, seq_len, dim) + + sampled_mses = torch.zeros(len(self.attention_masks), cfg, num_heads, device=query.device, dtype=query.dtype) + + # Only have Tri-diagonal and Striped + for mask_idx, attn_mask in enumerate(self.attention_masks): + sampled_attention_mask = attn_mask[sampled_rows, :] + sampled_attention_scores = sampled_qk_scores.masked_fill(sampled_attention_mask == 0, float("-inf")) + sampled_attn_weights = F.softmax(sampled_attention_scores, dim=-1) + sampled_hidden_states = torch.matmul(sampled_attn_weights, value) + mse = torch.mean((sampled_hidden_states - sampled_golden_hidden_states) ** 2, dim=(2, 3)) + sampled_mses[mask_idx] = mse + + return sampled_mses + + +if __name__ == "__main__": + q, k, v = torch.randn(32130, 40, 128, dtype=torch.bfloat16).cuda(), torch.randn(32130, 40, 128, dtype=torch.bfloat16).cuda(), torch.randn(32130, 40, 128, dtype=torch.bfloat16).cuda() + + SvgAttnWeight.prepare(head_num=40, head_dim=128, sample_mse_max_row=10000, num_sampled_rows=64, context_length=0, sparsity=0.25) + svg_attn = SvgAttnWeight() + print("SvgAttnWeight initialized.") + + out = svg_attn.apply(q, k, v) + print(f"out: {out.shape}, {out.dtype}, {out.device}") diff --git a/lightx2v/common/ops/attn/template.py b/lightx2v/common/ops/attn/template.py new file mode 100644 index 0000000..9e1f447 --- /dev/null +++ b/lightx2v/common/ops/attn/template.py @@ -0,0 +1,35 @@ +from abc import ABCMeta, abstractmethod + + +class AttnWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name): + self.weight_name = weight_name + self.config = {} + + def load(self, weight_dict): + pass + + @abstractmethod + def apply(self, input_tensor): + pass + + def set_config(self, config=None): + if config is not None: + self.config = config + + def to_cpu(self, non_blocking=False): + pass + + def to_cuda(self, non_blocking=False): + pass + + def state_dict(self, destination=None): + if destination is None: + destination = {} + return destination + + def load_state_dict(self, destination, block_index, adapter_block_inde=None): + return {} + + def load_state_dict_from_disk(self, block_index, adapter_block_inde=None): + pass diff --git a/lightx2v/common/ops/attn/torch_sdpa.py b/lightx2v/common/ops/attn/torch_sdpa.py new file mode 100644 index 0000000..65a002b --- /dev/null +++ b/lightx2v/common/ops/attn/torch_sdpa.py @@ -0,0 +1,39 @@ +import torch +import torch.nn.functional as F + +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER + +from .template import AttnWeightTemplate + + +@ATTN_WEIGHT_REGISTER("torch_sdpa") +class TorchSDPAWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply( + self, + q, + k, + v, + drop_rate=0, + attn_mask=None, + causal=False, + cu_seqlens_q=None, + cu_seqlens_kv=None, + max_seqlen_q=None, + max_seqlen_kv=None, + model_cls=None, + ): + if q.ndim == 3: + q, k, v = q.unsqueeze(0), k.unsqueeze(0), v.unsqueeze(0) + q = q.transpose(1, 2) + k = k.transpose(1, 2) + v = v.transpose(1, 2) + if attn_mask is not None and attn_mask.dtype != torch.bool: + attn_mask = attn_mask.to(q.dtype) + x = F.scaled_dot_product_attention(q, k, v, attn_mask=attn_mask, dropout_p=drop_rate, is_causal=causal) + x = x.transpose(1, 2) + b, s, a, d = x.shape + out = x.reshape(b, s, -1) + return out.squeeze(0) diff --git a/lightx2v/common/ops/attn/ulysses_attn.py b/lightx2v/common/ops/attn/ulysses_attn.py new file mode 100644 index 0000000..197998b --- /dev/null +++ b/lightx2v/common/ops/attn/ulysses_attn.py @@ -0,0 +1,415 @@ +import torch +import torch.distributed as dist +from loguru import logger + +from lightx2v.utils.quant_utils import dequant_fp8_vllm, quant_fp8_vllm +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + +from .template import AttnWeightTemplate +from .utils.all2all import all2all_head2seq, all2all_seq2head + + +@ATTN_WEIGHT_REGISTER("ulysses") +class UlyssesAttnWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + + def apply(self, q, k, v, img_qkv_len, cu_seqlens_qkv, attention_module=None, seq_p_group=None, model_cls=None, use_fp8_comm=False): + """ + 执行 Ulysses 注意力机制,结合图像和文本的查询、键和值。 + + 参数: + q (torch.Tensor): 查询张量,形状为 [shard_seqlen, heads, hidden_dims] + k (torch.Tensor): 键张量,形状为 [shard_seqlen, heads, hidden_dims] + v (torch.Tensor): 值张量,形状为 [shard_seqlen, heads, hidden_dims] + img_qkv_len (int): 图像查询、键和值的长度 + cu_seqlens_qkv (torch.Tensor): 累积序列长度,包含文本和图像的长度信息 + attention_type (str): 注意力类型,默认为 "flash_attn2" + + 返回: + torch.Tensor: 计算得到的注意力结果 + """ + if len(q.shape) == 4: + q = q.reshape(-1, q.shape[-2], q.shape[-1]) + k = k.reshape(-1, k.shape[-2], k.shape[-1]) + v = v.reshape(-1, v.shape[-2], v.shape[-1]) + + # 获取当前进程的排名和全局进程数 + world_size = dist.get_world_size(seq_p_group) + cur_rank = dist.get_rank(seq_p_group) + + # 获取序列长度和文本相关的长度 + seq_len = q.shape[0] + if len(cu_seqlens_qkv) == 3: + txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + txt_mask_len = cu_seqlens_qkv[2] - img_qkv_len # 文本掩码长度 + elif len(cu_seqlens_qkv) == 2: + txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + txt_mask_len = None + + # 获取查询张量的头数和隐藏维度 + _, heads, hidden_dims = q.shape + shard_heads = heads // world_size # 每个进程处理的头数 + shard_seqlen = img_qkv_len # 每个进程处理的序列长度 + + # 分割图像和文本的查询、键和值 + img_q, img_k, img_v = q[:img_qkv_len, :, :].contiguous(), k[:img_qkv_len, :, :].contiguous(), v[:img_qkv_len, :, :].contiguous() + txt_q, txt_k, txt_v = q[img_qkv_len:, :, :].contiguous(), k[img_qkv_len:, :, :].contiguous(), v[img_qkv_len:, :, :].contiguous() + + # 将图像的查询、键和值转换为头的格式 + if use_fp8_comm: + original_dtype = img_q.dtype + original_shape = img_q.shape + img_q_fp8, q_scale = quant_fp8_vllm(img_q.reshape(-1, original_shape[-1])) + img_k_fp8, k_scale = quant_fp8_vllm(img_k.reshape(-1, original_shape[-1])) + img_v_fp8, v_scale = quant_fp8_vllm(img_v.reshape(-1, original_shape[-1])) + img_q_fp8 = all2all_seq2head(img_q_fp8.reshape(original_shape), group=seq_p_group) + img_k_fp8 = all2all_seq2head(img_k_fp8.reshape(original_shape), group=seq_p_group) + img_v_fp8 = all2all_seq2head(img_v_fp8.reshape(original_shape), group=seq_p_group) + q_scale = all2all_seq2head(q_scale.reshape(original_shape[0], original_shape[1], 1), group=seq_p_group) + k_scale = all2all_seq2head(k_scale.reshape(original_shape[0], original_shape[1], 1), group=seq_p_group) + v_scale = all2all_seq2head(v_scale.reshape(original_shape[0], original_shape[1], 1), group=seq_p_group) + img_q = dequant_fp8_vllm(img_q_fp8, q_scale, original_dtype) + img_k = dequant_fp8_vllm(img_k_fp8, k_scale, original_dtype) + img_v = dequant_fp8_vllm(img_v_fp8, v_scale, original_dtype) + else: + img_q = all2all_seq2head(img_q, group=seq_p_group) + img_k = all2all_seq2head(img_k, group=seq_p_group) + img_v = all2all_seq2head(img_v, group=seq_p_group) + + # 处理文本的查询、键和值,选择当前进程的头 + txt_q = txt_q[:, cur_rank * shard_heads : (cur_rank + 1) * shard_heads, :] + txt_k = txt_k[:, cur_rank * shard_heads : (cur_rank + 1) * shard_heads, :] + txt_v = txt_v[:, cur_rank * shard_heads : (cur_rank + 1) * shard_heads, :] + + # 合并图像和文本的查询、键和值 + q = torch.cat((img_q, txt_q), dim=0) + k = torch.cat((img_k, txt_k), dim=0) + v = torch.cat((img_v, txt_v), dim=0) + + # 初始化累积序列长度张量 + cu_seqlens_qkv = torch.zeros([2], dtype=torch.int32, device=AI_DEVICE) + s = txt_qkv_len + img_q.shape[0] # 计算文本和图像的总长度 + s1 = s # 当前样本的结束位置 + cu_seqlens_qkv[1] = s1 # 设置累积序列长度 + if txt_mask_len: + s2 = txt_mask_len + img_q.shape[0] # 文本掩码的结束位置 + cu_seqlens_qkv = torch.cat(cu_seqlens_qkv, s2) + max_seqlen_qkv = img_q.shape[0] + txt_q.shape[0] # 最大序列长度 + + # 调用注意力函数计算注意力结果 + # attn = attention(attention_type=attention_type, q=q, k=k, v=v, cu_seqlens_q=cu_seqlens_qkv, cu_seqlens_kv=cu_seqlens_qkv, max_seqlen_q=max_seqlen_qkv, max_seqlen_kv=max_seqlen_qkv) + attn = attention_module.apply(q=q, k=k, v=v, cu_seqlens_q=cu_seqlens_qkv, cu_seqlens_kv=cu_seqlens_qkv, max_seqlen_q=max_seqlen_qkv, max_seqlen_kv=max_seqlen_qkv, model_cls=model_cls) + + # 分割图像和文本的注意力结果 + img_attn, txt_attn = attn[: img_q.shape[0], :], attn[img_q.shape[0] :,] + + # 收集所有进程的文本注意力结果 + gathered_txt_attn = [torch.empty_like(txt_attn) for _ in range(world_size)] + dist.all_gather(gathered_txt_attn, txt_attn, group=seq_p_group) + + img_attn = self._reshape_img_attn(img_attn, world_size, shard_seqlen, shard_heads, hidden_dims, seq_p_group, use_fp8_comm) + + txt_attn = torch.cat(gathered_txt_attn, dim=1) # 合并所有进程的文本注意力结果 + + # 合并图像和文本的注意力结果 + attn = torch.cat([img_attn, txt_attn], dim=0) + + return attn # 返回最终的注意力结果 + + @torch.compiler.disable + def _reshape_img_attn(self, img_attn, world_size, shard_seqlen, shard_heads, hidden_dims, seq_p_group, use_fp8_comm): + img_attn = img_attn.reshape(world_size * shard_seqlen, shard_heads, hidden_dims) # 重塑图像注意力结果 + + # 将头的格式转换回序列格式 + if use_fp8_comm: + original_dtype = img_attn.dtype + original_shape = img_attn.shape + img_attn_fp8, attn_scale = quant_fp8_vllm(img_attn.reshape(-1, original_shape[-1])) + img_attn_fp8 = all2all_head2seq(img_attn_fp8.reshape(original_shape), group=seq_p_group) + attn_scale = all2all_head2seq(attn_scale.reshape(original_shape[0], original_shape[1], 1), group=seq_p_group) + img_attn = dequant_fp8_vllm(img_attn_fp8, attn_scale, original_dtype) + else: + img_attn = all2all_head2seq(img_attn, group=seq_p_group) + + img_attn = img_attn.reshape(shard_seqlen, -1) # 重塑为 [shard_seqlen, -1] 形状 + return img_attn + + +@ATTN_WEIGHT_REGISTER("ulysses-4090") +class Ulysses4090AttnWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + self.rounds = [] + + def generate_round_robin_pairs(self, seq_p_group=None): + """ + 生成循环赛配对表,并确保每个配对中的第一个元素小于第二个 + 这样我们可以用简单的规则确定通信顺序 + """ + cur_rank = dist.get_rank(seq_p_group) + world_size = dist.get_world_size(seq_p_group) + if world_size % 2 != 0: + raise ValueError("world_size必须是偶数,奇数情况需要特殊处理") + + teams = list(range(world_size)) + for _ in range(world_size - 1): + round_schedule = {} + for i in range(world_size // 2): + team1, team2 = teams[i], teams[world_size - 1 - i] + smaller, larger = min(team1, team2), max(team1, team2) + round_schedule[smaller] = (larger, True) + round_schedule[larger] = (smaller, False) + self.rounds.append(round_schedule) + # 旋转列表(固定第一个元素) + teams = [teams[0]] + [teams[-1]] + teams[1:-1] + + # if cur_rank == 0: + # self.print_pairing_schedule(seq_p_group) + + def print_pairing_schedule(self, seq_p_group): + """打印通信调度表""" + world_size = dist.get_world_size(seq_p_group) + logger.info("循环赛通信调度表:") + logger.info("=" * 50) + for i, round_schedule in enumerate(self.rounds): + logger.info(f"第 {i + 1} 轮:") + for cur_rank in range(world_size): + partner, is_smaller_in_pair = round_schedule[cur_rank] + logger.info(f" 进程 {cur_rank} ←→ 进程 {partner}") + logger.info("=" * 50) + + def load_balanced_all_to_all(self, shards, seq_p_group=None): + """ + 负载均衡all-to-all通信实现 + """ + world_size = dist.get_world_size(seq_p_group) + cur_rank = dist.get_rank(seq_p_group) + global_rank = dist.get_global_rank(seq_p_group, cur_rank) + cfg_p_group_index = global_rank // world_size + + # 准备接收缓冲区 + gathered_shards = [None] * world_size + for target_rank in range(world_size): + if target_rank != cur_rank: + gathered_shards[target_rank] = torch.empty_like(shards[target_rank]) + else: + gathered_shards[cur_rank] = shards[cur_rank] + + for i, round_schedule in enumerate(self.rounds): + # 查找当前进程在本轮的配对 + partner = None + is_smaller_in_pair = False + if cur_rank in round_schedule: + partner, is_smaller_in_pair = round_schedule[cur_rank] + + # 如果没有找到配对,说明本轮当前进程空闲 + if partner is None: + continue + + # 计算全局rank + partner_global_rank = cfg_p_group_index * world_size + partner + + if is_smaller_in_pair: + # 当前进程是配对中的较小者,先发送后接收 + send_req = dist.isend(shards[partner], dst=partner_global_rank, group=seq_p_group) + recv_req = dist.irecv(gathered_shards[partner], src=partner_global_rank, group=seq_p_group) + send_req.wait() + recv_req.wait() + else: + # 当前进程是配对中的较大者,先接收后发送 + recv_req = dist.irecv(gathered_shards[partner], src=partner_global_rank, group=seq_p_group) + send_req = dist.isend(shards[partner], dst=partner_global_rank, group=seq_p_group) + recv_req.wait() + send_req.wait() + + return gathered_shards + + def apply(self, q, k, v, img_qkv_len, cu_seqlens_qkv, attention_module=None, seq_p_group=None, model_cls=None, use_fp8_comm=False): + """ + 执行 Ulysses 注意力机制,结合图像和文本的查询、键和值。 + + 参数: + q (torch.Tensor): 查询张量,形状为 [shard_seqlen, heads, hidden_dims] + k (torch.Tensor): 键张量,形状为 [shard_seqlen, heads, hidden_dims] + v (torch.Tensor): 值张量,形状为 [shard_seqlen, heads, hidden_dims] + img_qkv_len (int): 图像查询、键和值的长度 + cu_seqlens_qkv (torch.Tensor): 累积序列长度,包含文本和图像的长度信息 + attention_type (str): 注意力类型,默认为 "flash_attn2" + + 返回: + torch.Tensor: 计算得到的注意力结果 + """ + if len(self.rounds) == 0: + self.generate_round_robin_pairs(seq_p_group) + + if len(q.shape) == 4: + q = q.reshape(-1, q.shape[-2], q.shape[-1]) + k = k.reshape(-1, k.shape[-2], k.shape[-1]) + v = v.reshape(-1, v.shape[-2], v.shape[-1]) + # 获取当前进程的排名和全局进程数 + world_size = dist.get_world_size(seq_p_group) + cur_rank = dist.get_rank(seq_p_group) + global_world_size = dist.get_world_size() + global_rank = dist.get_global_rank(seq_p_group, cur_rank) + cfg_p_group_index = global_rank // world_size + + # 获取序列长度和文本相关的长度 + seq_len = q.shape[0] + if len(cu_seqlens_qkv) == 3: + txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + txt_mask_len = cu_seqlens_qkv[2] - img_qkv_len # 文本掩码长度 + elif len(cu_seqlens_qkv) == 2: + txt_qkv_len = cu_seqlens_qkv[1] - img_qkv_len # 文本查询、键和值的长度 + txt_mask_len = None + + # 获取查询张量的头数和隐藏维度 + _, heads, hidden_dims = q.shape + shard_heads = heads // world_size # 每个进程处理的头数 + shard_seqlen = img_qkv_len # 每个进程处理的序列长度 + + # 分割图像和文本的查询、键和值 + img_q, img_k, img_v = q[:img_qkv_len, :, :].contiguous(), k[:img_qkv_len, :, :].contiguous(), v[:img_qkv_len, :, :].contiguous() + txt_q, txt_k, txt_v = q[img_qkv_len:, :, :].contiguous(), k[img_qkv_len:, :, :].contiguous(), v[img_qkv_len:, :, :].contiguous() + + # 计算每个进程应该持有的头数分片 + num_heads = img_q.shape[1] + shard_heads = num_heads // world_size + + # 将 image QKV 拼接后,按头维度切分成 N 份,每份大小为 D/N + img_qkv = torch.stack([img_q, img_k, img_v], dim=0) + qkv_shards = [img_qkv[:, :, i * shard_heads : (i + 1) * shard_heads, :].contiguous() for i in range(world_size)] + qkv_dtype = img_qkv.dtype + + if use_fp8_comm: + qkv_fp8_byte_tensors = [] + qkv_fp8_bytes = 0 + qkv_fp8_dtype = None + qkv_scale_dtype = None + for i in range(world_size): + qkv_fp8, qkv_scale = quant_fp8_vllm(qkv_shards[i].reshape(-1, hidden_dims)) + if i == 0: + qkv_fp8_bytes = qkv_fp8.numel() * qkv_fp8.element_size() + qkv_fp8_dtype = qkv_fp8.dtype + qkv_scale_dtype = qkv_scale.dtype + qkv_fp8_byte_tensors.append(torch.cat([qkv_fp8.contiguous().reshape(-1).view(torch.uint8), qkv_scale.contiguous().reshape(-1).view(torch.uint8)], dim=0)) + + gathered_qkv_fp8_byte_tensors = self.load_balanced_all_to_all(qkv_fp8_byte_tensors, seq_p_group) + + gathered_q_shards = [] + gathered_k_shards = [] + gathered_v_shards = [] + for i in range(world_size): + qkv_fp8_byte_tensor = gathered_qkv_fp8_byte_tensors[i] + qkv_fp8 = qkv_fp8_byte_tensor[:qkv_fp8_bytes].view(qkv_fp8_dtype).reshape(3, -1, hidden_dims) + qkv_scale = qkv_fp8_byte_tensor[qkv_fp8_bytes:].view(qkv_scale_dtype).reshape(3, -1, 1) + q_shards_new = dequant_fp8_vllm(qkv_fp8[0], qkv_scale[0], qkv_dtype).reshape(-1, shard_heads, hidden_dims) + k_shards_new = dequant_fp8_vllm(qkv_fp8[1], qkv_scale[1], qkv_dtype).reshape(-1, shard_heads, hidden_dims) + v_shards_new = dequant_fp8_vllm(qkv_fp8[2], qkv_scale[2], qkv_dtype).reshape(-1, shard_heads, hidden_dims) + gathered_q_shards.append(q_shards_new) + gathered_k_shards.append(k_shards_new) + gathered_v_shards.append(v_shards_new) + else: + gathered_qkv_byte_tensors = self.load_balanced_all_to_all(qkv_shards, seq_p_group) + + gathered_q_shards = [] + gathered_k_shards = [] + gathered_v_shards = [] + for i in range(world_size): + qkv_tensor = gathered_qkv_byte_tensors[i].view(qkv_dtype).reshape(3, -1, shard_heads, hidden_dims) + gathered_q_shards.append(qkv_tensor[0]) + gathered_k_shards.append(qkv_tensor[1]) + gathered_v_shards.append(qkv_tensor[2]) + + # 拼接所有分片 (在序列维度上) + # 每个 gathered_*_shards[i] 的形状是 (seq_len/N, num_heads/N, head_dim) + # 拼接后形状是 (seq_len, num_heads/N, head_dim) + img_q = torch.cat(gathered_q_shards, dim=0) + img_k = torch.cat(gathered_k_shards, dim=0) + img_v = torch.cat(gathered_v_shards, dim=0) + + # 处理文本的查询、键和值,选择当前进程的头 + txt_q = txt_q[:, cur_rank * shard_heads : (cur_rank + 1) * shard_heads, :] + txt_k = txt_k[:, cur_rank * shard_heads : (cur_rank + 1) * shard_heads, :] + txt_v = txt_v[:, cur_rank * shard_heads : (cur_rank + 1) * shard_heads, :] + + # 合并图像和文本的查询、键和值 + q = torch.cat((img_q, txt_q), dim=0) + k = torch.cat((img_k, txt_k), dim=0) + v = torch.cat((img_v, txt_v), dim=0) + + # 初始化累积序列长度张量 + cu_seqlens_qkv = torch.zeros([2], dtype=torch.int32, device="cuda") + s = txt_qkv_len + img_q.shape[0] # 计算文本和图像的总长度 + s1 = s # 当前样本的结束位置 + cu_seqlens_qkv[1] = s1 # 设置累积序列长度 + if txt_mask_len: + s2 = txt_mask_len + img_q.shape[0] # 文本掩码的结束位置 + cu_seqlens_qkv = torch.cat(cu_seqlens_qkv, s2) + max_seqlen_qkv = img_q.shape[0] + txt_q.shape[0] # 最大序列长度 + + # 调用注意力函数计算注意力结果 + # attn = attention(attention_type=attention_type, q=q, k=k, v=v, cu_seqlens_q=cu_seqlens_qkv, cu_seqlens_kv=cu_seqlens_qkv, max_seqlen_q=max_seqlen_qkv, max_seqlen_kv=max_seqlen_qkv) + attn = attention_module.apply(q=q, k=k, v=v, cu_seqlens_q=cu_seqlens_qkv, cu_seqlens_kv=cu_seqlens_qkv, max_seqlen_q=max_seqlen_qkv, max_seqlen_kv=max_seqlen_qkv, model_cls=model_cls) + + # 分割图像和文本的注意力结果 + img_attn, txt_attn = attn[: img_q.shape[0], :], attn[img_q.shape[0] :,] + + # 收集所有进程的文本注意力结果 + gathered_txt_attn = [torch.empty_like(txt_attn) for _ in range(world_size)] + dist.all_gather(gathered_txt_attn, txt_attn, group=seq_p_group) + + img_attn = self._reshape_img_attn(img_attn, world_size, shard_seqlen, shard_heads, hidden_dims, seq_p_group, use_fp8_comm) + + txt_attn = torch.cat(gathered_txt_attn, dim=1) # 合并所有进程的文本注意力结果 + + # 合并图像和文本的注意力结果 + attn = torch.cat([img_attn, txt_attn], dim=0) + + return attn # 返回最终的注意力结果 + + @torch.compiler.disable + def _reshape_img_attn(self, img_attn, world_size, shard_seqlen, shard_heads, hidden_dims, seq_p_group, use_fp8_comm): + cur_rank = dist.get_rank(seq_p_group) + global_world_size = dist.get_world_size() + global_rank = dist.get_global_rank(seq_p_group, cur_rank) + cfg_p_group_index = global_rank // world_size + + img_attn = img_attn.reshape(world_size * shard_seqlen, shard_heads, hidden_dims) # 重塑图像注意力结果 + attn_dtype = img_attn.dtype + + # 按序列维度切分成 N 份 + attn_shards = [img_attn[i * shard_seqlen : (i + 1) * shard_seqlen, :, :].contiguous() for i in range(world_size)] + + if use_fp8_comm: + attn_fp8_byte_tensors = [] + attn_fp8_bytes = 0 + attn_fp8_dtype = None + attn_scale_dtype = None + for i in range(world_size): + attn_fp8, attn_scale = quant_fp8_vllm(attn_shards[i].reshape(-1, hidden_dims)) + if i == 0: + attn_fp8_bytes = attn_fp8.numel() * attn_fp8.element_size() + attn_fp8_dtype = attn_fp8.dtype + attn_scale_dtype = attn_scale.dtype + attn_fp8_byte_tensors.append(torch.cat([attn_fp8.contiguous().reshape(-1).view(torch.uint8), attn_scale.contiguous().reshape(-1).view(torch.uint8)], dim=0)) + + gathered_attn_fp8_byte_tensors = self.load_balanced_all_to_all(attn_fp8_byte_tensors, seq_p_group) + + gathered_attn_shards = [] + for i in range(world_size): + attn_fp8_byte_tensor = gathered_attn_fp8_byte_tensors[i] + attn_fp8 = attn_fp8_byte_tensor[:attn_fp8_bytes].view(attn_fp8_dtype).reshape(-1, hidden_dims) + attn_scale = attn_fp8_byte_tensor[attn_fp8_bytes:].view(attn_scale_dtype).reshape(-1, 1) + attn_shards_new = dequant_fp8_vllm(attn_fp8, attn_scale, attn_dtype).reshape(-1, shard_heads, hidden_dims) + gathered_attn_shards.append(attn_shards_new) + + else: + gathered_attn_shards = self.load_balanced_all_to_all(attn_shards, seq_p_group) + + # 拼接所有分片 (在头维度上) + img_attn = torch.cat(gathered_attn_shards, dim=1) + img_attn = img_attn.reshape(shard_seqlen, -1) # 重塑为 [shard_seqlen, -1] 形状 + + return img_attn diff --git a/lightx2v/common/ops/attn/utils/all2all.py b/lightx2v/common/ops/attn/utils/all2all.py new file mode 100644 index 0000000..757ce74 --- /dev/null +++ b/lightx2v/common/ops/attn/utils/all2all.py @@ -0,0 +1,89 @@ +import torch +import torch._dynamo as dynamo +import torch.distributed as dist + + +@dynamo.disable +def all2all_seq2head(input, group=None): + """ + 将输入张量从 [seq_len/N, heads, hidden_dims] 转换为 [seq_len, heads/N, hidden_dims] 的格式。 + + 参数: + input (torch.Tensor): 输入张量,形状为 [seq_len/N, heads, hidden_dims] + + 返回: + torch.Tensor: 转换后的输出张量,形状为 [seq_len, heads/N, hidden_dims] + """ + # 确保输入是一个3D张量 + assert input.dim() == 3, f"input must be 3D tensor" + + # 获取当前进程的世界大小 + world_size = dist.get_world_size(group=group) + + # 获取输入张量的形状 + shard_seq_len, heads, hidden_dims = input.shape + seq_len = shard_seq_len * world_size # 计算总序列长度 + shard_heads = heads // world_size # 计算每个进程处理的头数 + + # 重塑输入张量以便进行 all-to-all 操作 + input_t = ( + input.reshape(shard_seq_len, world_size, shard_heads, hidden_dims) # 重塑为 [shard_seq_len, world_size, shard_heads, hidden_dims] + .transpose(0, 1) # 转置以便进行 all-to-all 操作 + .contiguous() # 确保内存连续 + ) + + # 创建一个与输入张量相同形状的输出张量 + output = torch.empty_like(input_t) + + # 执行 all-to-all 操作,将输入张量的内容分发到所有进程 + dist.all_to_all_single(output, input_t, group=group) + + # 重塑输出张量为 [seq_len, heads/N, hidden_dims] 形状 + output = output.reshape(seq_len, shard_heads, hidden_dims).contiguous() + + return output # 返回转换后的输出张量 + + +@dynamo.disable +def all2all_head2seq(input, group=None): + """ + 将输入张量从 [seq_len, heads/N, hidden_dims] 转换为 [seq_len/N, heads, hidden_dims] 的格式。 + + 参数: + input (torch.Tensor): 输入张量,形状为 [seq_len, heads/N, hidden_dims] + + 返回: + torch.Tensor: 转换后的输出张量,形状为 [seq_len/N, heads, hidden_dims] + """ + # 确保输入是一个3D张量 + assert input.dim() == 3, f"input must be 3D tensor" + + # 获取当前进程的世界大小 + world_size = dist.get_world_size(group=group) + + # 获取输入张量的形状 + seq_len, shard_heads, hidden_dims = input.shape + heads = shard_heads * world_size # 计算总头数 + shard_seq_len = seq_len // world_size # 计算每个进程处理的序列长度 + + # 重塑输入张量以便进行 all-to-all 操作 + input_t = ( + input.reshape(world_size, shard_seq_len, shard_heads, hidden_dims) # 重塑为 [world_size, shard_seq_len, shard_heads, hidden_dims] + .transpose(1, 2) # 转置以便进行 all-to-all 操作 + .contiguous() # 确保内存连续 + .reshape(world_size, shard_heads, shard_seq_len, hidden_dims) # 再次重塑为 [world_size, shard_heads, shard_seq_len, hidden_dims] + ) + + # 创建一个与输入张量相同形状的输出张量 + output = torch.empty_like(input_t) + + # 执行 all-to-all 操作,将输入张量的内容分发到所有进程 + dist.all_to_all_single(output, input_t, group=group) + + # 重塑输出张量为 [heads, shard_seq_len, hidden_dims] 形状 + output = output.reshape(heads, shard_seq_len, hidden_dims) + + # 转置输出张量并重塑为 [shard_seq_len, heads, hidden_dims] 形状 + output = output.transpose(0, 1).contiguous().reshape(shard_seq_len, heads, hidden_dims) + + return output # 返回转换后的输出张量 diff --git a/lightx2v/common/ops/attn/utils/ring_comm.py b/lightx2v/common/ops/attn/utils/ring_comm.py new file mode 100644 index 0000000..8a0f30a --- /dev/null +++ b/lightx2v/common/ops/attn/utils/ring_comm.py @@ -0,0 +1,46 @@ +from typing import Optional + +import torch +import torch.distributed as dist + + +class RingComm: + def __init__(self, process_group: dist.ProcessGroup = None): + self._process_group = process_group + self._ops = [] + self.rank = dist.get_rank(self._process_group) + self.world_size = dist.get_world_size(self._process_group) + self._reqs = None + + self.send_rank = (self.rank + 1) % self.world_size + self.recv_rank = (self.rank - 1) % self.world_size + + if process_group is not None: + self.send_rank = dist.get_global_rank(self._process_group, self.send_rank) + self.recv_rank = dist.get_global_rank(self._process_group, self.recv_rank) + + def send_recv(self, to_send: torch.Tensor, recv_tensor: Optional[torch.Tensor] = None) -> torch.Tensor: + if recv_tensor is None: + res = torch.empty_like(to_send) + # logger.info(f"send_recv: empty_like {to_send.shape}") + else: + res = recv_tensor + + send_op = dist.P2POp(dist.isend, to_send, self.send_rank, group=self._process_group) + recv_op = dist.P2POp(dist.irecv, res, self.recv_rank, group=self._process_group) + self._ops.append(send_op) + self._ops.append(recv_op) + return res + + def commit(self): + if self._reqs is not None: + raise RuntimeError("commit called twice") + self._reqs = dist.batch_isend_irecv(self._ops) + + def wait(self): + if self._reqs is None: + raise RuntimeError("wait called before commit") + for req in self._reqs: + req.wait() + self._reqs = None + self._ops = [] diff --git a/lightx2v/common/ops/conv/__init__.py b/lightx2v/common/ops/conv/__init__.py new file mode 100644 index 0000000..a4cf739 --- /dev/null +++ b/lightx2v/common/ops/conv/__init__.py @@ -0,0 +1,2 @@ +from .conv2d import * +from .conv3d import * diff --git a/lightx2v/common/ops/conv/conv2d.py b/lightx2v/common/ops/conv/conv2d.py new file mode 100644 index 0000000..d666508 --- /dev/null +++ b/lightx2v/common/ops/conv/conv2d.py @@ -0,0 +1,61 @@ +from abc import ABCMeta, abstractmethod + +import torch + +from lightx2v.utils.registry_factory import CONV2D_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + + +class Conv2dWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name, bias_name, stride, padding, dilation, groups): + self.weight_name = weight_name + self.bias_name = bias_name + self.stride = stride + self.padding = padding + self.dilation = dilation + self.groups = groups + self.config = {} + + @abstractmethod + def load(self, weight_dict): + pass + + @abstractmethod + def apply(self, input_tensor): + pass + + def set_config(self, config=None): + if config is not None: + self.config = config + + +@CONV2D_WEIGHT_REGISTER("Default") +class Conv2dWeight(Conv2dWeightTemplate): + def __init__(self, weight_name, bias_name, stride=1, padding=0, dilation=1, groups=1): + super().__init__(weight_name, bias_name, stride, padding, dilation, groups) + + def load(self, weight_dict): + self.weight = weight_dict[self.weight_name].to(AI_DEVICE) + self.bias = weight_dict[self.bias_name].to(AI_DEVICE) if self.bias_name is not None else None + + def apply(self, input_tensor): + input_tensor = torch.nn.functional.conv2d(input_tensor, weight=self.weight, bias=self.bias, stride=self.stride, padding=self.padding, dilation=self.dilation, groups=self.groups) + return input_tensor + + def to_cpu(self, non_blocking=False): + self.weight = self.weight.cpu(non_blocking=non_blocking) + if self.bias is not None: + self.bias = self.bias.cpu(non_blocking=non_blocking) + + def to_cuda(self, non_blocking=False): + self.weight = self.weight.to(AI_DEVICE, non_blocking=non_blocking) + if self.bias is not None: + self.bias = self.bias.to(AI_DEVICE, non_blocking=non_blocking) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.weight.cpu().detach().clone() + if self.bias is not None: + destination[self.bias_name] = self.bias.cpu().detach().clone() + return destination diff --git a/lightx2v/common/ops/conv/conv3d.py b/lightx2v/common/ops/conv/conv3d.py new file mode 100644 index 0000000..4e45f33 --- /dev/null +++ b/lightx2v/common/ops/conv/conv3d.py @@ -0,0 +1,94 @@ +from abc import ABCMeta, abstractmethod + +import torch + +from lightx2v.utils.registry_factory import CONV3D_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + + +class Conv3dWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name, bias_name, stride=1, padding=0, dilation=1, groups=1): + self.weight_name = weight_name + self.bias_name = bias_name + self.stride = stride + self.padding = padding + self.dilation = dilation + self.groups = groups + self.config = {} + + @abstractmethod + def load(self, weight_dict): + pass + + @abstractmethod + def apply(self, input_tensor): + pass + + def set_config(self, config=None): + if config is not None: + self.config = config + + +@CONV3D_WEIGHT_REGISTER("Default") +class Conv3dWeight(Conv3dWeightTemplate): + def __init__(self, weight_name, bias_name, stride=1, padding=0, dilation=1, groups=1): + super().__init__(weight_name, bias_name, stride, padding, dilation, groups) + + def load(self, weight_dict): + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + if self.bias_name is not None: + bias_shape = weight_dict[self.bias_name].shape + bias_dtype = weight_dict[self.bias_name].dtype + self.pin_bias = torch.empty(bias_shape, pin_memory=True, dtype=bias_dtype) + self.pin_bias.copy_(weight_dict[self.bias_name]) + else: + self.bias = None + self.pin_bias = None + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + if self.bias_name is not None: + self.bias = weight_dict[self.bias_name] + else: + self.bias = None + + def apply(self, input_tensor): + input_tensor = torch.nn.functional.conv3d( + input_tensor, + weight=self.weight, + bias=self.bias, + stride=self.stride, + padding=self.padding, + dilation=self.dilation, + groups=self.groups, + ) + return input_tensor + + def to_cuda(self, non_blocking=False): + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_bias") and self.pin_bias is not None: + self.bias = self.pin_bias.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight"): + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + if self.bias is not None: + self.bias = self.pin_bias.copy_(self.bias, non_blocking=non_blocking).cpu() + else: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + if hasattr(self, "bias") and self.bias is not None: + self.bias = self.bias.to("cpu", non_blocking=non_blocking) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight # .cpu().detach().clone().contiguous() + if self.bias_name is not None: + destination[self.bias_name] = self.pin_bias if hasattr(self, "pin_bias") else self.bias # .cpu().detach().clone() + return destination diff --git a/lightx2v/common/ops/embedding/__init__.py b/lightx2v/common/ops/embedding/__init__.py new file mode 100644 index 0000000..df915a3 --- /dev/null +++ b/lightx2v/common/ops/embedding/__init__.py @@ -0,0 +1 @@ +from .embedding_weight import * diff --git a/lightx2v/common/ops/embedding/embedding_weight.py b/lightx2v/common/ops/embedding/embedding_weight.py new file mode 100644 index 0000000..8268d18 --- /dev/null +++ b/lightx2v/common/ops/embedding/embedding_weight.py @@ -0,0 +1,72 @@ +import re +from abc import ABCMeta + +import torch +import torch.nn.functional as F + +from lightx2v.utils.registry_factory import EMBEDDING_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + + +class EmbeddingWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + self.weight_name = weight_name + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.is_post_adapter = is_post_adapter + self.config = {} + + def load(self, weight_dict): + if not self.lazy_load: + if self.create_cuda_buffer: + self.weight_cuda_buffer = weight_dict[self.weight_name].to(AI_DEVICE) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + + def to_cuda(self, non_blocking=False): + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight"): + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + else: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + if weight_name not in destination: + self.weight = None + return + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + + +@EMBEDDING_WEIGHT_REGISTER("Default") +class EmbeddingWeight(EmbeddingWeightTemplate): + def __init__(self, weight_name=None, lazy_load=False, lazy_load_file=None): + super().__init__(weight_name, lazy_load, lazy_load_file) + + def apply(self, input_indices): + output = F.embedding(input=input_indices, weight=self.weight, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False) + + return output diff --git a/lightx2v/common/ops/mm/__init__.py b/lightx2v/common/ops/mm/__init__.py new file mode 100644 index 0000000..3f98981 --- /dev/null +++ b/lightx2v/common/ops/mm/__init__.py @@ -0,0 +1 @@ +from .mm_weight import * diff --git a/lightx2v/common/ops/mm/mm_weight.py b/lightx2v/common/ops/mm/mm_weight.py new file mode 100644 index 0000000..330a50e --- /dev/null +++ b/lightx2v/common/ops/mm/mm_weight.py @@ -0,0 +1,1325 @@ +import os +import re +from abc import ABCMeta, abstractmethod +from pathlib import Path + +import torch +from safetensors import safe_open + +from lightx2v.utils.envs import * +from lightx2v.utils.ggml_tensor import GGMLTensor +from lightx2v.utils.ggml_tensor import dequantize_tensor as gguf_dequantize_tensor +from lightx2v.utils.global_paras import CALIB +from lightx2v.utils.quant_utils import FloatQuantizer, IntegerQuantizer +from lightx2v.utils.registry_factory import MM_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + +try: + from lightx2v_kernel.gemm import ( + cutlass_scaled_mxfp4_mm, + cutlass_scaled_mxfp6_mxfp8_mm, + cutlass_scaled_mxfp8_mm, + cutlass_scaled_nvfp4_mm, + scaled_mxfp4_quant, + scaled_mxfp6_quant, + scaled_mxfp8_quant, + scaled_nvfp4_quant, + ) +except ImportError: + scaled_nvfp4_quant, cutlass_scaled_nvfp4_mm = None, None + scaled_mxfp4_quant, cutlass_scaled_mxfp4_mm = None, None + scaled_mxfp6_quant, cutlass_scaled_mxfp6_mxfp8_mm = None, None + scaled_mxfp8_quant, cutlass_scaled_mxfp8_mm = None, None + +try: + from vllm import _custom_ops as ops +except ImportError: + ops = None + +try: + import sgl_kernel +except ImportError: + sgl_kernel = None + +try: + from q8_kernels.functional.linear import q8_linear +except ImportError: + q8_linear = None + +try: + from q8_kernels.functional.linear import fp8_linear +except ImportError: + fp8_linear = None + +try: + import deep_gemm +except ImportError: + deep_gemm = None + +try: + from torchao.quantization.utils import quant_int8_per_token_matmul, quantize_activation_per_token_absmax +except ImportError: + quant_int8_per_token_matmul, quantize_activation_per_token_absmax = None, None + +try: + import gguf +except ImportError: + gguf = None + +try: + import marlin_cuda_quant +except ImportError: + marlin_cuda_quant = None + + +class MMWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + self.weight_name = weight_name + self.bias_name = bias_name + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.is_post_adapter = is_post_adapter + self.config = {} + + @abstractmethod + def load(self, weight_dict): + pass + + @abstractmethod + def apply(self): + pass + + def set_config(self, config={}): + self.config = config + + def to_cuda(self, non_blocking=False): + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_weight_scale"): + self.weight_scale = self.pin_weight_scale.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_bias") and self.pin_bias is not None: + self.bias = self.pin_bias.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight"): + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + if hasattr(self, "weight_scale_name"): + self.weight_scale = self.pin_weight_scale.copy_(self.weight_scale, non_blocking=non_blocking).cpu() + if self.bias is not None: + self.bias = self.pin_bias.copy_(self.bias, non_blocking=non_blocking).cpu() + else: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + if hasattr(self, "weight_scale"): + self.weight_scale = self.weight_scale.to("cpu", non_blocking=non_blocking) + if hasattr(self, "bias") and self.bias is not None: + self.bias = self.bias.to("cpu", non_blocking=non_blocking) + + +@MM_WEIGHT_REGISTER("Default") +class MMWeight(MMWeightTemplate): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + + def load(self, weight_dict): + if self.create_cuda_buffer: + self._load_cuda_buffers(weight_dict) + elif self.create_cpu_buffer: + self._load_cpu_pin_buffers() + else: + self._load_default_tensors(weight_dict) + + def _get_source_tensor(self, source_name, weight_dict=None): + if self.lazy_load: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{source_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + return lazy_load_file.get_tensor(source_name) + return weight_dict[source_name] + + def _create_pin_tensor(self, tensor, transpose=False): + pin_tensor = torch.empty(tensor.shape, pin_memory=True, dtype=tensor.dtype) + pin_tensor = pin_tensor.copy_(tensor) + if transpose: + pin_tensor = pin_tensor.t() + del tensor + return pin_tensor + + def _load_cuda_buffers(self, weight_dict): + self.weight_cuda_buffer = self._get_source_tensor(self.weight_name, weight_dict).t().to(AI_DEVICE) + if self.bias_name is not None: + self.bias_cuda_buffer = self._get_source_tensor(self.bias_name, weight_dict).to(AI_DEVICE) + + def _load_cpu_pin_buffers(self): + if self.lazy_load: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{self.weight_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + weight_tensor = lazy_load_file.get_tensor(self.weight_name) + self.pin_weight = self._create_pin_tensor(weight_tensor, transpose=True) + + if self.bias_name is not None: + bias_tensor = lazy_load_file.get_tensor(self.bias_name) + self.pin_bias = self._create_pin_tensor(bias_tensor) + else: + self.bias = None + self.pin_bias = None + + def _load_default_tensors(self, weight_dict): + if not self.lazy_load: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_tensor = weight_dict[self.weight_name] + self.pin_weight = self._create_pin_tensor(weight_tensor, transpose=True) + + if self.bias_name is not None: + bias_tensor = weight_dict[self.bias_name] + self.pin_bias = self._create_pin_tensor(bias_tensor) + else: + self.bias = None + self.pin_bias = None + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name].t() + self.bias = weight_dict[self.bias_name] if self.bias_name is not None else None + + def apply(self, input_tensor): + shape = (input_tensor.shape[0], self.weight.shape[1]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + if self.bias is None: + return torch.mm(input_tensor, self.weight, out=output_tensor) + return torch.addmm(self.bias, input_tensor, self.weight, out=output_tensor) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + if self.bias_name is not None: + destination[self.bias_name] = self.pin_bias if hasattr(self, "pin_bias") else self.bias + return destination + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + self.weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + if self.bias_name is not None: + if self.is_post_adapter: + assert adapter_block_index is not None + self.bias_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.bias_name, count=1) + else: + self.bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{block_index}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + weight_tensor = lazy_load_file.get_tensor(self.weight_name).t() + self.pin_weight = self.pin_weight.copy_(weight_tensor) + del weight_tensor + + if self.bias_name is not None: + bias_tensor = lazy_load_file.get_tensor(self.bias_name) + self.pin_bias.copy_(bias_tensor) + del bias_tensor + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + if weight_name not in destination: + self.weight = None + return + + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + + if self.bias_name is not None: + if self.is_post_adapter: + assert adapter_block_index is not None + bias_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.bias_name, count=1) + else: + bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + self.bias = self.bias_cuda_buffer.copy_(destination[bias_name], non_blocking=True) + else: + self.bias = None + + +@MM_WEIGHT_REGISTER("Default-Force-FP32") +class MMWeightForceFP32(MMWeight): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + + def load(self, weight_dict): + if not self.lazy_load: + super().load(weight_dict) + self.weight = self.weight.to(torch.float32) + if hasattr(self, "bias") and self.bias is not None: + self.bias = self.bias.to(torch.float32) + + +class MMWeightQuantTemplate(MMWeightTemplate): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.weight_scale_name = self.weight_name.removesuffix(".weight") + ".weight_scale" + self.load_func = None + self.weight_need_transpose = True + self.act_quant_func = None + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.infer_dtype = GET_DTYPE() + self.bias_force_fp32 = False + + # ========================= + # weight load functions + # ========================= + def load(self, weight_dict): + self.load_quantized(weight_dict) + if self.weight_need_transpose: + if hasattr(self, "weight") and self.weight is not None: + self.weight = self.weight.t() + if hasattr(self, "pin_weight") and self.pin_weight is not None: + self.pin_weight = self.pin_weight.t() + if hasattr(self, "weight_cuda_buffer") and self.weight_cuda_buffer is not None: + self.weight_cuda_buffer = self.weight_cuda_buffer.t() + + def load_quantized(self, weight_dict): + if self.create_cuda_buffer: + self._load_cuda_buffers(weight_dict) + elif self.create_cpu_buffer: + self._load_cpu_pin_buffers() + else: + self._load_default_tensors(weight_dict) + + def _load_cuda_buffers(self, weight_dict): + if self.lazy_load: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{self.weight_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as source: + self.weight_cuda_buffer, self.weight_scale_cuda_buffer = self._get_cuda_tensor_pair(source, self.lazy_load) + self.bias_cuda_buffer = self._get_cuda_bias_tensor(source, self.lazy_load) + else: + source = weight_dict + self.weight_cuda_buffer, self.weight_scale_cuda_buffer = self._get_cuda_tensor_pair(source, self.lazy_load) + self.bias_cuda_buffer = self._get_cuda_bias_tensor(source, self.lazy_load) + + def _get_cuda_tensor_pair(self, source, is_lazy): + if is_lazy: + weight = source.get_tensor(self.weight_name).to(AI_DEVICE) + scale = source.get_tensor(self.weight_scale_name).float().to(AI_DEVICE) + else: + weight = source[self.weight_name].to(AI_DEVICE) + scale = source[self.weight_scale_name].float().to(AI_DEVICE) + return weight, scale + + def _get_cuda_bias_tensor(self, source, is_lazy): + if self.bias_name is None: + return None + if is_lazy: + bias = source.get_tensor(self.bias_name) + dtype = self.infer_dtype + else: + bias = source[self.bias_name] + dtype = bias.dtype + if self.bias_force_fp32: + bias = bias.to(torch.float32) + else: + bias = bias.to(dtype) + return bias.to(AI_DEVICE) + + def _load_cpu_pin_buffers(self): + self.pin_weight, self.pin_weight_scale = self._get_cpu_pin_tensor_pair(self.lazy_load_file, is_lazy=True) + self.pin_bias = self._get_cpu_pin_bias_tensor(self.lazy_load_file, is_lazy=True) + self.bias = None + + def _get_cpu_pin_tensor_pair(self, source, is_lazy): + if is_lazy: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{self.weight_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as source: + weight_tensor = source.get_tensor(self.weight_name) + scale_tensor = source.get_tensor(self.weight_scale_name) + scale_dtype = torch.float + pin_weight = self._create_pin_tensor(weight_tensor) + pin_scale = self._create_pin_tensor(scale_tensor, scale_dtype) + else: + weight_tensor = source[self.weight_name] + scale_tensor = source[self.weight_scale_name] + scale_dtype = torch.float + pin_weight = self._create_pin_tensor(weight_tensor) + pin_scale = self._create_pin_tensor(scale_tensor, scale_dtype) + return pin_weight, pin_scale + + def _get_cpu_pin_bias_tensor(self, source, is_lazy): + if self.bias_name is None: + return None + if is_lazy: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{self.weight_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as source: + bias_tensor = source.get_tensor(self.bias_name) + if not self.bias_force_fp32: + bias_tensor = bias_tensor.to(self.infer_dtype) + if self.bias_force_fp32: + bias_tensor = bias_tensor.to(torch.float32) + return self._create_pin_tensor(bias_tensor) + else: + bias_tensor = source[self.bias_name] + if self.bias_force_fp32: + bias_tensor = bias_tensor.to(torch.float32) + return self._create_pin_tensor(bias_tensor) + + def _create_pin_tensor(self, tensor, dtype=None): + dtype = dtype or tensor.dtype + pin_tensor = torch.empty(tensor.shape, pin_memory=True, dtype=dtype) + pin_tensor.copy_(tensor) + del tensor + return pin_tensor + + def _load_default_tensors(self, weight_dict): + if not self.lazy_load: + self.weight, self.weight_scale, self.pin_weight, self.pin_weight_scale = self._get_device_tensor_pair(weight_dict) + self._load_default_bias(weight_dict) + else: + self.bias = None + self.pin_bias = None + + def _get_device_tensor_pair(self, source): + device = source[self.weight_name].device + if device.type == "cpu": + pin_weight, pin_scale = self._get_cpu_pin_tensor_pair(source, is_lazy=False) + return None, None, pin_weight, pin_scale + else: + return source[self.weight_name], source[self.weight_scale_name].float(), None, None + + def _load_default_bias(self, source): + if self.bias_name is None: + self.bias = None + self.pin_bias = None + self.bias_cuda_buffer = None + return + + if self.create_cuda_buffer: + self.bias_cuda_buffer = self._get_cuda_bias_tensor(source, is_lazy=False) + self.bias = None + self.pin_bias = None + else: + bias_tensor = source[self.bias_name].float() if self.bias_force_fp32 else source[self.bias_name] + device = bias_tensor.device + if device.type == "cpu": + self.pin_bias = self._get_cpu_pin_bias_tensor(source, is_lazy=False) + self.bias = None + else: + self.bias = bias_tensor + self.pin_bias = None + + def load_fp8_perchannel_sym(self, weight_dict): + if self.config.get("weight_auto_quant", False): + self.weight = weight_dict[self.weight_name].to(torch.float32) + w_quantizer = FloatQuantizer("e4m3", True, "per_channel") + self.weight, self.weight_scale, _ = w_quantizer.real_quant_tensor(self.weight) + self.weight = self.weight.to(torch.float8_e4m3fn) + self.weight_scale = self.weight_scale.to(torch.float32) + else: + self.load_quantized(weight_dict) + + def load_int8_perchannel_sym(self, weight_dict): + if self.config.get("weight_auto_quant", False): + self.weight = weight_dict[self.weight_name].to(torch.float32) + w_quantizer = IntegerQuantizer(8, True, "per_channel") + self.weight, self.weight_scale, _ = w_quantizer.real_quant_tensor(self.weight) + self.weight = self.weight.to(torch.int8) + self.weight_scale = self.weight_scale.to(torch.float32) + else: + self.load_quantized(weight_dict) + + def load_mxfp4(self, weight_dict): + if self.config.get("weight_auto_quant", False): + device = weight_dict[self.weight_name].device + self.weight = weight_dict[self.weight_name].to(AI_DEVICE).to(torch.bfloat16) + self.weight, self.weight_scale = scaled_mxfp4_quant(self.weight) + self.weight, self.weight_scale = self.weight.to(device), self.weight_scale.to(device) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + + def load_mxfp6(self, weight_dict): + if self.config.get("weight_auto_quant", False): + device = weight_dict[self.weight_name].device + self.weight = weight_dict[self.weight_name].to(AI_DEVICE).to(torch.bfloat16) + self.weight, self.weight_scale = scaled_mxfp6_quant(self.weight) + self.weight, self.weight_scale = self.weight.to(device), self.weight_scale.to(device) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + + def load_mxfp8(self, weight_dict): + if self.config.get("weight_auto_quant", False): + device = weight_dict[self.weight_name].device + self.weight = weight_dict[self.weight_name].to(AI_DEVICE).to(torch.bfloat16) + self.weight, self.weight_scale = scaled_mxfp8_quant(self.weight) + self.weight, self.weight_scale = self.weight.to(device), self.weight_scale.to(device) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + + def load_nvfp4(self, weight_dict): + device = weight_dict[self.weight_name].device + + input_absmax = weight_dict[self.weight_name.replace(".weight", ".input_absmax")] + input_global_scale = (2688.0 / input_absmax).to(torch.float32) + weight_global_scale = weight_dict[f"{self.weight_name}_global_scale"] + alpha = 1.0 / (input_global_scale * weight_global_scale) + + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + + input_global_scale_shape = input_global_scale.shape + input_global_scale_dtype = input_global_scale.dtype + self.pin_input_global_scale = torch.empty(input_global_scale_shape, pin_memory=True, dtype=input_global_scale_dtype) + self.pin_input_global_scale.copy_(input_global_scale) + + alpha_shape = alpha.shape + alpha_dtype = alpha.dtype + self.pin_alpha = torch.empty(alpha_shape, pin_memory=True, dtype=alpha_dtype) + self.pin_alpha.copy_(alpha) + + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + self.input_global_scale = input_global_scale + self.alpha = alpha + + if self.bias_name is not None: + if self.create_cuda_buffer: + self.bias_cuda_buffer = weight_dict[self.bias_name].to(AI_DEVICE) + else: + device = weight_dict[self.bias_name].device + if device.type == "cpu": + bias_shape = weight_dict[self.bias_name].shape + bias_dtype = weight_dict[self.bias_name].dtype + self.pin_bias = torch.empty(bias_shape, pin_memory=True, dtype=bias_dtype) + self.pin_bias.copy_(weight_dict[self.bias_name]) + else: + self.bias = weight_dict[self.bias_name] + else: + self.bias = None + self.pin_bias = None + + def load_fp8_perblock128_sym(self, weight_dict): + if self.config.get("weight_auto_quant", False): + self.weight = weight_dict[self.weight_name] + self.weight, self.weight_scale = self.per_block_cast_to_fp8(self.weight) + else: + self.load_quantized(weight_dict) + + def per_block_cast_to_fp8(self, x): + assert x.dim() == 2 + m, n = x.shape + x_padded = torch.zeros( + (deep_gemm.ceil_div(m, 128) * 128, deep_gemm.ceil_div(n, 128) * 128), + dtype=x.dtype, + device=x.device, + ) + x_padded[:m, :n] = x + x_view = x_padded.view(-1, 128, x_padded.size(1) // 128, 128) + x_amax = x_view.abs().float().amax(dim=(1, 3), keepdim=True).clamp(1e-4) + x_scaled = (x_view * (448.0 / x_amax)).to(torch.float8_e4m3fn) + return x_scaled.view_as(x_padded)[:m, :n].contiguous(), (x_amax / 448.0).view(x_view.size(0), x_view.size(2)) + + # ========================= + # act quant kernels + # ========================= + def act_quant_int8_perchannel_sym_torchao(self, x): + input_tensor_quant, input_tensor_scale = quantize_activation_per_token_absmax(x) + return input_tensor_quant, input_tensor_scale + + def act_quant_fp8_perchannel_sym_vllm(self, x): + input_tensor_quant, input_tensor_scale = ops.scaled_fp8_quant(x, None, scale_ub=None, use_per_token_if_dynamic=True) + return input_tensor_quant, input_tensor_scale + + def act_quant_fp8_perchannel_sym_sgl(self, x): + m, k = x.shape + input_tensor_quant = torch.empty((m, k), dtype=torch.float8_e4m3fn, device="cuda", requires_grad=False) + input_tensor_scale = torch.empty((m, 1), dtype=torch.float32, device="cuda", requires_grad=False) + sgl_kernel.sgl_per_token_quant_fp8(x, input_tensor_quant, input_tensor_scale) + return input_tensor_quant, input_tensor_scale + + def act_quant_int8_perchannel_sym_vllm(self, x): + input_tensor_quant, input_tensor_scale, _ = ops.scaled_int8_quant(x, scale=None, azp=None, symmetric=True) + return input_tensor_quant, input_tensor_scale + + def act_quant_nvfp4(self, x): + input_tensor_quant, input_tensor_scale = scaled_nvfp4_quant(x, self.input_global_scale) + return input_tensor_quant, input_tensor_scale + + def act_quant_mxfp4(self, x): + input_tensor_quant, input_tensor_scale = scaled_mxfp4_quant(x) + return input_tensor_quant, input_tensor_scale + + def act_quant_mxfp8(self, x): + input_tensor_quant, input_tensor_scale = scaled_mxfp8_quant(x) + return input_tensor_quant, input_tensor_scale + + def act_quant_fp8_perchannelgroup128_sym_deepgemm(self, x): + assert x.dim() == 2 and x.size(1) % 128 == 0 + m, n = x.shape + x_view = x.view(m, -1, 128) + x_amax = x_view.abs().float().amax(dim=2).view(m, -1).clamp(1e-4) + return (x_view * (448.0 / x_amax.unsqueeze(2))).to(torch.float8_e4m3fn).view(m, n), (x_amax / 448.0).view(m, -1) + + def act_quant_fp8_perchannelgroup128_sym_sgl(self, x): + m, k = x.shape + input_tensor_quant = torch.empty((m, k), dtype=torch.float8_e4m3fn, device="cuda", requires_grad=False) + input_tensor_scale = torch.empty((m, k // 128), dtype=torch.float32, device="cuda", requires_grad=False) + sgl_kernel.sgl_per_token_group_quant_fp8( + x, + input_tensor_quant, + input_tensor_scale, + group_size=128, + eps=1e-10, + fp8_min=-448.0, + fp8_max=448.0, + ) + return input_tensor_quant, input_tensor_scale + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + if self.bias_name is not None: + destination[self.bias_name] = self.pin_bias if hasattr(self, "pin_bias") else self.bias + destination[self.weight_scale_name] = self.pin_weight_scale if hasattr(self, "pin_weight_scale") else self.weight_scale + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + weight_scale_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_scale_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + weight_scale_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_scale_name, count=1) + + if weight_name not in destination: + self.weight = None + return + + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + self.weight_scale = self.weight_scale_cuda_buffer.copy_(destination[weight_scale_name], non_blocking=True) + + if self.bias_name is not None: + bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + self.bias = self.bias_cuda_buffer.copy_(destination[bias_name], non_blocking=True) + else: + self.bias = None + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + if self.is_post_adapter: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + self.weight_scale_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_scale_name, count=1) + else: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + self.weight_scale_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_scale_name, count=1) + + if self.bias_name is not None: + if self.is_post_adapter: + assert adapter_block_index is not None + self.bias_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.bias_name, count=1) + else: + self.bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{block_index}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + if self.weight_need_transpose: + weight_tensor = lazy_load_file.get_tensor(self.weight_name).t() + else: + weight_tensor = lazy_load_file.get_tensor(self.weight_name) + + self.pin_weight = self.pin_weight.copy_(weight_tensor) + del weight_tensor + + weight_scale_tensor = lazy_load_file.get_tensor(self.weight_scale_name) + self.pin_weight_scale = self.pin_weight_scale.copy_(weight_scale_tensor) + del weight_scale_tensor + + if self.bias_name is not None: + bias_tensor = lazy_load_file.get_tensor(self.bias_name) + self.pin_bias.copy_(bias_tensor) + del bias_tensor + + +@MM_WEIGHT_REGISTER("fp8-vllm") +class MMWeightWfp8channelAfp8channeldynamicVllm(MMWeightQuantTemplate): + """ + Name: W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Vllm + + Quant MM: + Weight: fp8 perchannel sym + Act: fp8 perchannel dynamic sym + Kernel: vllm + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_fp8_perchannel_sym + self.weight_need_transpose = True + self.act_quant_func = self.act_quant_fp8_perchannel_sym_vllm + + def apply(self, input_tensor): + shape = (input_tensor.shape[0], self.weight.shape[1]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + torch.ops._C.cutlass_scaled_mm( + output_tensor, + input_tensor_quant, + self.weight, + input_tensor_scale, + self.weight_scale, + self.bias if self.bias is not None else None, + ) + return output_tensor + + +@MM_WEIGHT_REGISTER("int8-vllm") +class MMWeightWint8channelAint8channeldynamicVllm(MMWeightQuantTemplate): + """ + Name: W-int8-channel-sym-A-int8-channel-sym-dynamic-Vllm + + Quant MM: + Weight: int8 perchannel sym + Act: int8 perchannel dynamic sym + Kernel: vllm + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_int8_perchannel_sym + self.weight_need_transpose = True + self.act_quant_func = self.act_quant_int8_perchannel_sym_vllm + + def apply(self, input_tensor): + shape = (input_tensor.shape[0], self.weight.shape[1]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + torch.ops._C.cutlass_scaled_mm( + output_tensor, + input_tensor_quant, + self.weight, + input_tensor_scale, + self.weight_scale, + self.bias if self.bias is not None else None, + ) + return output_tensor + + +@MM_WEIGHT_REGISTER("mxfp4") +class MMWeightWmxfp4Amxfp4dynamic(MMWeightQuantTemplate): + """ + Name: W-mxfp4-A-mxfp4-dynamic + + Quant MM: + Weight: mxfp4 + Act: mxfp4 + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_mxfp4 + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_mxfp4 + self.set_alpha() + + def set_alpha(self): + self.alpha = torch.tensor(1.0, dtype=torch.float32) + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + self.alpha = self.alpha.to(self.weight.device) + output_tensor = cutlass_scaled_mxfp4_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + +@MM_WEIGHT_REGISTER("mxfp6-mxfp8") +class MMWeightWmxfp6Amxfp8dynamic(MMWeightQuantTemplate): + """ + Name: W-mxfp6-A-nvfp8-dynamic + + Quant MM: + Weight: mxfp6 + Act: mxfp8 + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_mxfp6 + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_mxfp8 + self.set_alpha() + + def set_alpha(self): + self.alpha = torch.tensor(1.0, dtype=torch.float32) + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + self.alpha = self.alpha.to(self.weight.device) + output_tensor = cutlass_scaled_mxfp6_mxfp8_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + +@MM_WEIGHT_REGISTER("mxfp8") +class MMWeightWmxfp8Amxfp8dynamic(MMWeightQuantTemplate): + """ + Name: W-mxfp8-A-nvfp8-dynamic + + Quant MM: + Weight: mxfp8 + Act: mxfp8 + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_mxfp8 + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_mxfp8 + self.set_alpha() + + def set_alpha(self): + self.alpha = torch.tensor(1.0, dtype=torch.float32) + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + self.alpha = self.alpha.to(self.weight.device) + output_tensor = cutlass_scaled_mxfp8_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + +@MM_WEIGHT_REGISTER("nvfp4") +class MMWeightWnvfp4Anvfp4dynamic(MMWeightQuantTemplate): + """ + Name: W-nvfp4-A-nvfp4-dynamic + + Quant MM: + Weight: nvfp4 + Act: nvfp4 + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_nvfp4 + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_nvfp4 + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = cutlass_scaled_nvfp4_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + def to_cuda(self, non_blocking=False): + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_weight_scale"): + self.weight_scale = self.pin_weight_scale.to(AI_DEVICE, non_blocking=non_blocking) + self.input_global_scale = self.pin_input_global_scale.to(AI_DEVICE, non_blocking=non_blocking) + self.alpha = self.pin_alpha.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_bias") and self.pin_bias is not None: + self.bias = self.pin_bias.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight"): + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + if hasattr(self, "weight_scale_name"): + self.weight_scale = self.pin_weight_scale.copy_(self.weight_scale, non_blocking=non_blocking).cpu() + self.input_global_scale = self.pin_input_global_scale.copy_(self.input_global_scale, non_blocking=non_blocking).cpu() + self.alpha = self.pin_alpha.copy_(self.alpha, non_blocking=non_blocking).cpu() + if self.bias is not None: + self.bias = self.pin_bias.copy_(self.bias, non_blocking=non_blocking).cpu() + else: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + if hasattr(self, "weight_scale"): + self.weight_scale = self.weight_scale.to("cpu", non_blocking=non_blocking) + self.input_global_scale = self.input_global_scale.to("cpu", non_blocking=non_blocking) + self.alpha = self.alpha.to("cpu", non_blocking=non_blocking) + if hasattr(self, "bias") and self.bias is not None: + self.bias = self.bias.to("cpu", non_blocking=non_blocking) + + +@MM_WEIGHT_REGISTER("Calib") +class MMCalibNvfp4(MMWeight): + """ + Name: calib + + Calib: + absmax: torch.max(torch.abs(input_tensor)) + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.running_absmax = None + self.count = 0 + self.decay = 0.9 + + def apply(self, input_tensor): + shape = (input_tensor.shape[0], self.weight.shape[1]) + dtype, device = input_tensor.dtype, input_tensor.device + + current_absmax = torch.max(torch.abs(input_tensor)).to("cpu") + if self.count % 2 == 0: + if self.running_absmax is None: + self.running_absmax = current_absmax + else: + self.running_absmax = self.decay * self.running_absmax + (1 - self.decay) * current_absmax + CALIB["absmax"][self.weight_name] = self.running_absmax + self.count = self.count + 1 + + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + if self.bias is None: + return torch.mm(input_tensor, self.weight, out=output_tensor) + return torch.addmm(self.bias, input_tensor, self.weight, out=output_tensor) + + +@MM_WEIGHT_REGISTER("fp8-q8f") +class MMWeightWfp8channelAfp8channeldynamicQ8F(MMWeightQuantTemplate): + """ + Name: W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Q8F + + Quant MM: + Weight: fp8 perchannel sym + Act: fp8 perchannel dynamic sym + Kernel: Q8F + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_fp8_perchannel_sym + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_fp8_perchannel_sym_vllm + self.bias_force_fp32 = True + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = fp8_linear( + input_tensor_quant, + self.weight, + self.bias.float() if self.bias is not None else None, + input_tensor_scale, + self.weight_scale, + out_dtype=self.infer_dtype, + ) + return output_tensor.squeeze(0) if len(output_tensor.shape) == 3 else output_tensor + + +@MM_WEIGHT_REGISTER("int8-q8f") +class MMWeightWint8channelAint8channeldynamicQ8F(MMWeightQuantTemplate): + """ + Name: W-int8-channel-sym-A-int8-channel-sym-dynamic-Q8F + + Quant MM: + Weight: int8 perchannel sym + Act: int8 perchannel dynamic sym + Kernel: Q8F + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_int8_perchannel_sym + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_int8_perchannel_sym_vllm + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = q8_linear( + input_tensor_quant, + self.weight, + self.bias.float() if self.bias is not None else None, + input_tensor_scale, + self.weight_scale, + fuse_gelu=False, + out_dtype=self.infer_dtype, + ) + return output_tensor.squeeze(0) if len(output_tensor.shape) == 3 else output_tensor + + +@MM_WEIGHT_REGISTER("fp8-b128-deepgemm") +class MMWeightWfp8block128Afp8channelgroup128dynamicDeepgemmActSgl(MMWeightQuantTemplate): + """ + Name: W-fp8-block128-sym-A-fp8-channel-group128-sym-dynamic-Deepgemm-ActSgl + + Quant MM: + Weight: fp8 perblock 128x128 sym + Act: fp8 pertoken-pergroup group=128 dynamic sym + Kernel: quant-mm using Deepgemm, act dynamic quant using Sgl-kernel + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_fp8_perblock128_sym + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_fp8_perchannelgroup128_sym_sgl + + def apply(self, input_tensor): + shape = (input_tensor.shape[0], self.weight.shape[0]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + deep_gemm.gemm_fp8_fp8_bf16_nt( + (input_tensor_quant, input_tensor_scale), + (self.weight, self.weight_scale), + output_tensor, + ) + if hasattr(self, "bias") and self.bias is not None: + output_tensor.add_(self.bias) + return output_tensor + + +@MM_WEIGHT_REGISTER("fp8-sgl") +class MMWeightWfp8channelAfp8channeldynamicSgl(MMWeightQuantTemplate): + """ + Name: W-fp8-channel-sym-A-fp8-channel-sym-dynamic-Sgl + + Quant MM: + Weight: fp8 perchannel sym + Act: fp8 perchannel dynamic sym + Kernel: Sgl-kernel + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_fp8_perchannel_sym + self.weight_need_transpose = True + self.act_quant_func = self.act_quant_fp8_perchannel_sym_sgl + + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = sgl_kernel.fp8_scaled_mm( + input_tensor_quant, + self.weight, + input_tensor_scale, + self.weight_scale, + self.infer_dtype, + self.bias if self.bias is not None else None, + ) + return output_tensor + + +@MM_WEIGHT_REGISTER("int8-sgl") +class MMWeightWint8channelAint8channeldynamicSglActVllm(MMWeightQuantTemplate): + """ + Name: W-int8-channel-sym-A-int8-channel-sym-dynamic-Sgl-ActVllm + + Quant MM: + Weight: int8 perchannel sym + Act: int8 perchannel dynamic sym + Kernel: quant-mm using Sgl-kernel, act dynamic quant using vllm + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_int8_perchannel_sym + self.weight_need_transpose = True + self.act_quant_func = self.act_quant_int8_perchannel_sym_vllm + + def apply(self, input_tensor): + shape = (input_tensor.shape[0], self.weight.shape[1]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = sgl_kernel.int8_scaled_mm( + input_tensor_quant, + self.weight, + input_tensor_scale, + self.weight_scale, + self.infer_dtype, + self.bias if self.bias is not None else None, + ) + return output_tensor + + +@MM_WEIGHT_REGISTER("int8-torchao") +class MMWeightWint8channelAint8channeldynamicTorchao(MMWeightQuantTemplate): + """ + Name: W-int8-channel-sym-A-int8-channel-sym-dynamic-Torchao + + Quant MM: + Weight: int8 perchannel sym + Act: int8 perchannel dynamic sym + Kernel: Torchao + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_int8_perchannel_sym + self.weight_need_transpose = True + self.act_quant_func = self.act_quant_int8_perchannel_sym_torchao + + def apply(self, input_tensor): + input_tensor = input_tensor + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = quant_int8_per_token_matmul(input_tensor_quant, input_tensor_scale, self.weight, self.weight_scale.t().float(), output_dtype=self.infer_dtype) + if self.bias is not None: + output_tensor = output_tensor + self.bias + + return output_tensor + + +class MMWeightGGUFTemplate(MMWeightTemplate): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + + def load(self, weight_dict): + if not self.lazy_load: + assert not self.create_cuda_buffer, "GGUF Unsupported offload block" + self.weight = weight_dict[self.weight_name] + + weight_shape = self.weight.shape + weight_dtype = self.weight.dtype + + if isinstance(self.weight, GGMLTensor): + self.pin_weight = GGMLTensor.empty_pinned(weight_shape, orig_shape=self.weight.orig_shape, dtype=weight_dtype, gguf_type=self.weight.gguf_type) + self.pin_weight.copy_from(self.weight) + else: + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + if self.bias_name is not None: + self.bias = weight_dict[self.bias_name] + if isinstance(self.bias, GGMLTensor): + self.pin_bias = GGMLTensor.empty_pinned(self.bias.shape, orig_shape=self.bias.orig_shape, dtype=self.bias.dtype, gguf_type=self.bias.gguf_type) + self.pin_bias.copy_from(self.bias) + else: + self.pin_bias = torch.empty(self.bias.shape, pin_memory=True, dtype=self.bias.dtype) + self.pin_bias.copy_(weight_dict[self.bias_name]) + else: + self.bias = None + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + if weight_name not in destination: + self.weight = None + return + + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + + if self.bias_name is not None: + if self.is_post_adapter: + assert adapter_block_index is not None + bias_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.bias_name, count=1) + else: + bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + self.bias = self.bias_cuda_buffer.copy_(destination[bias_name], non_blocking=True) + else: + self.bias = None + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + if self.bias_name is not None: + destination[self.bias_name] = self.pin_bias if hasattr(self, "pin_bias") else self.bias + + return destination + + def get_weight(self, tensor, dtype): + if tensor is None: + return + + weight = gguf_dequantize_tensor(tensor, dtype) + if isinstance(weight, GGMLTensor): + weight = torch.Tensor(weight) + + return weight + + def cast_bias_weight(self, input_tensor=None, dtype=None, device=None, bias_dtype=None): + if input_tensor is not None: + if dtype is None: + dtype = getattr(input_tensor, "dtype", torch.float32) + + bias = None + if self.bias is not None: + bias = self.get_weight(self.bias, dtype) + + weight = self.get_weight(self.weight, dtype) + return weight, bias + + def apply(self, input_tensor): + weight, bias = self.cast_bias_weight(input_tensor) + return torch.nn.functional.linear(input_tensor, weight, bias) + + +@MM_WEIGHT_REGISTER("gguf-BF16") +class MMWeightGGUFBF16(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.BF16 + + +@MM_WEIGHT_REGISTER("gguf-Q8_0") +class MMWeightGGUFQ80(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q8_0 + + +@MM_WEIGHT_REGISTER("gguf-Q6_K") +class MMWeightGGUFQ6K(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q6_K + + +@MM_WEIGHT_REGISTER("gguf-Q5_K_S") +class MMWeightGGUFQ5KS(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q6_K + + +@MM_WEIGHT_REGISTER("gguf-Q5_K_M") +class MMWeightGGUFQ5KM(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q6_K + + +@MM_WEIGHT_REGISTER("gguf-Q5_1") +class MMWeightGGUFQ51(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q5_1 + + +@MM_WEIGHT_REGISTER("gguf-Q5_0") +class MMWeightGGUFQ50(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q5_0 + + +@MM_WEIGHT_REGISTER("gguf-Q4_K_M") +class MMWeightGGUFQ4KM(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q5_0 + + +@MM_WEIGHT_REGISTER("gguf-Q4_K_S") +class MMWeightGGUFQ4KS(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q4_K + + +@MM_WEIGHT_REGISTER("gguf-Q4_1") +class MMWeightGGUFQ41(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q4_1 + + +@MM_WEIGHT_REGISTER("gguf-Q4_0") +class MMWeightGGUFQ40(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q4_0 + + +@MM_WEIGHT_REGISTER("gguf-Q3_K_M") +class MMWeightGGUFQ3KM(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q3_K + + +@MM_WEIGHT_REGISTER("gguf-Q3_K_S") +class MMWeightGGUFQ3KS(MMWeightGGUFTemplate): + qtype = gguf.GGMLQuantizationType.Q2_K + + +@MM_WEIGHT_REGISTER("int4-g128-marlin") +class MMWeightWint4group128Marlin(MMWeightQuantTemplate): + """ + Name: "W-int4-group128-sym-Marlin + + Quant int4 x FP16: + Weight: int4 pergroup sym + Kernel: Marlin + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_quantized + + def load(self, weight_dict): + assert not self.lazy_load + self.load_func(weight_dict) + self.workspace = weight_dict[f"{self.weight_name}_workspace"] + + if self.bias_name is not None: + bias_shape = weight_dict[self.bias_name].shape + bias_dtype = weight_dict[self.bias_name].dtype + self.bias = torch.empty(bias_shape, pin_memory=True, dtype=bias_dtype) + self.bias.copy_(weight_dict[self.bias_name]) + else: + self.bias = None + + def apply(self, input_tensor): + output_tensor = torch.empty(input_tensor.shape[:-1] + (self.weight_scale.shape[1],), dtype=input_tensor.dtype, device=input_tensor.device) + marlin_cuda_quant.mul(input_tensor, self.weight, output_tensor, self.weight_scale.half(), self.workspace, -1, -1, -1, -1) + if hasattr(self, "bias") and self.bias is not None: + output_tensor.add_(self.bias) + return output_tensor diff --git a/lightx2v/common/ops/norm/__init__.py b/lightx2v/common/ops/norm/__init__.py new file mode 100644 index 0000000..1e72479 --- /dev/null +++ b/lightx2v/common/ops/norm/__init__.py @@ -0,0 +1,2 @@ +from .layer_norm_weight import * +from .rms_norm_weight import * diff --git a/lightx2v/common/ops/norm/layer_norm_weight.py b/lightx2v/common/ops/norm/layer_norm_weight.py new file mode 100644 index 0000000..38db511 --- /dev/null +++ b/lightx2v/common/ops/norm/layer_norm_weight.py @@ -0,0 +1,220 @@ +import os +import re +from abc import ABCMeta, abstractmethod +from pathlib import Path + +import torch +from safetensors import safe_open + +from lightx2v.utils.envs import * +from lightx2v.utils.registry_factory import LN_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + +from .triton_ops import norm_infer + + +class LNWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name=None, bias_name=None, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + self.weight_name = weight_name + self.bias_name = bias_name + self.eps = eps + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.is_post_adapter = is_post_adapter + self.config = {} + self.infer_dtype = GET_DTYPE() + self.sensitive_layer_dtype = GET_SENSITIVE_DTYPE() + + def load(self, weight_dict): + if self.create_cuda_buffer: + self._load_cuda_buffers(weight_dict) + elif self.create_cpu_buffer: + self._load_cpu_pin_buffers() + else: + self._load_default_tensors(weight_dict) + + def _load_default_tensors(self, weight_dict): + if not self.lazy_load and self.weight_name is not None: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_tensor = weight_dict[self.weight_name] + self.pin_weight = self._create_cpu_pin_tensor(weight_tensor) + bias_tensor = weight_dict[self.bias_name] if self.bias_name is not None else None + self.pin_bias = self._create_cpu_pin_tensor(bias_tensor) if bias_tensor is not None else None + self.bias = None + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.bias = weight_dict[self.bias_name] if self.bias_name is not None else None + else: + self.weight = None + self.bias = None + + def _get_tensor(self, name, weight_dict=None, use_infer_dtype=False): + if name is None: + return None + if self.lazy_load: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + tensor = lazy_load_file.get_tensor(name) + if use_infer_dtype: + tensor = tensor.to(self.infer_dtype) + else: + tensor = weight_dict[name] + return tensor + + def _create_cpu_pin_tensor(self, tensor): + if tensor is None: + return None + pin_tensor = torch.empty(tensor.shape, pin_memory=True, dtype=tensor.dtype) + pin_tensor.copy_(tensor) + del tensor + return pin_tensor + + def _load_cuda_buffers(self, weight_dict): + weight_tensor = self._get_tensor(self.weight_name, weight_dict, use_infer_dtype=self.lazy_load) + if weight_tensor is not None: + self.weight_cuda_buffer = weight_tensor.to(AI_DEVICE) + + bias_tensor = self._get_tensor(self.bias_name, weight_dict, use_infer_dtype=self.lazy_load) + if bias_tensor is not None: + self.bias_cuda_buffer = bias_tensor.to(AI_DEVICE) + + def _load_cpu_pin_buffers(self): + weight_tensor = self._get_tensor(self.weight_name, use_infer_dtype=True) + if weight_tensor is not None: + self.pin_weight = self._create_cpu_pin_tensor(weight_tensor) + else: + self.weight = None + + bias_tensor = self._get_tensor(self.bias_name, use_infer_dtype=True) + if bias_tensor is not None: + self.pin_bias = self._create_cpu_pin_tensor(bias_tensor) + else: + self.bias = None + self.pin_bias = None + + @abstractmethod + def apply(self, input_tensor): + pass + + def set_config(self, config=None): + if config is not None: + self.config = config + + def to_cuda(self, non_blocking=False): + if hasattr(self, "pin_weight") and self.pin_weight is not None: + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + else: + self.weight = None + if hasattr(self, "pin_bias") and self.pin_bias is not None: + self.bias = self.pin_bias.to(AI_DEVICE, non_blocking=non_blocking) + else: + self.bias = None + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight") and self.pin_weight is not None: + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + if self.bias is not None: + self.bias = self.pin_bias.copy_(self.bias, non_blocking=non_blocking).cpu() + elif hasattr(self, "weight") and self.weight is not None: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + if hasattr(self, "bias") and self.bias is not None: + self.bias = self.bias.to("cpu", non_blocking=non_blocking) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + if self.weight_name is not None: + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + if self.bias_name is not None: + destination[self.bias_name] = self.pin_bias if hasattr(self, "pin_bias") else self.bias + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.weight_name is not None: + if self.is_post_adapter: + assert adapter_block_index is not None + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + if weight_name not in destination: + self.weight = None + return + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + else: + self.weight = None + + if self.bias_name is not None: + bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + self.bias = self.bias_cuda_buffer.copy_(destination[bias_name], non_blocking=True) + else: + self.bias = None + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + if self.weight_name is not None: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{block_index}.safetensors") + if self.is_post_adapter: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + weight_tensor = lazy_load_file.get_tensor(self.weight_name).to(self.infer_dtype) + self.pin_weight = self.pin_weight.copy_(weight_tensor) + del weight_tensor + + if self.bias_name is not None: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{block_index}.safetensors") + if self.is_post_adapter: + assert adapter_block_index is not None + self.bias_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.bias_name, count=1) + else: + self.bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + bias_tensor = lazy_load_file.get_tensor(self.bias_name).to(self.infer_dtype) + self.pin_bias.copy_(bias_tensor) + del bias_tensor + + +@LN_WEIGHT_REGISTER("Default") +class LNWeight(LNWeightTemplate): + def __init__(self, weight_name=None, bias_name=None, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter, eps) + + def apply(self, input_tensor): + if self.sensitive_layer_dtype != self.infer_dtype: + input_tensor = torch.nn.functional.layer_norm( + input_tensor.float(), + (input_tensor.shape[-1],), + self.weight, + self.bias, + self.eps, + ).to(self.infer_dtype) + else: + input_tensor = torch.nn.functional.layer_norm(input_tensor, (input_tensor.shape[-1],), self.weight, self.bias, self.eps) + + return input_tensor + + +@LN_WEIGHT_REGISTER("Triton") +class LNWeight(LNWeightTemplate): + def __init__(self, weight_name=None, bias_name=None, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter, eps) + + def apply(self, input_tensor): + input_tensor = norm_infer(input_tensor, self.weight, self.bias, self.eps) + return input_tensor diff --git a/lightx2v/common/ops/norm/rms_norm_weight.py b/lightx2v/common/ops/norm/rms_norm_weight.py new file mode 100644 index 0000000..98d60ef --- /dev/null +++ b/lightx2v/common/ops/norm/rms_norm_weight.py @@ -0,0 +1,204 @@ +import os +import re +from abc import ABCMeta, abstractmethod +from pathlib import Path + +import torch +from safetensors import safe_open + +from lightx2v.utils.envs import * +from lightx2v.utils.registry_factory import RMS_WEIGHT_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + +try: + import sgl_kernel +except ImportError: + sgl_kernel = None + + +class RMSWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + self.weight_name = weight_name + self.eps = eps + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.is_post_adapter = is_post_adapter + self.infer_dtype = GET_DTYPE() + self.sensitive_layer_dtype = GET_SENSITIVE_DTYPE() + self.config = {} + + def load(self, weight_dict): + if self.create_cuda_buffer: + self._load_cuda_buffer(weight_dict) + elif self.create_cpu_buffer: + self._load_cpu_pin_buffer() + else: + self._load_default_tensors(weight_dict) + + def _load_default_tensors(self, weight_dict): + if not self.lazy_load: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_tensor = weight_dict[self.weight_name] + self.pin_weight = self._create_cpu_pin_weight(weight_tensor) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + + def _get_weight_tensor(self, weight_dict=None, use_infer_dtype=False): + if self.lazy_load: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{self.weight_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + tensor = lazy_load_file.get_tensor(self.weight_name) + if use_infer_dtype: + tensor = tensor.to(self.infer_dtype) + else: + tensor = weight_dict[self.weight_name] + return tensor + + def _create_cpu_pin_weight(self, tensor): + pin_tensor = torch.empty(tensor.shape, pin_memory=True, dtype=tensor.dtype) + pin_tensor.copy_(tensor) + del tensor + return pin_tensor + + def _load_cuda_buffer(self, weight_dict): + weight_tensor = self._get_weight_tensor(weight_dict, use_infer_dtype=self.lazy_load) + self.weight_cuda_buffer = weight_tensor.to(AI_DEVICE) + + def _load_cpu_pin_buffer(self): + weight_tensor = self._get_weight_tensor(use_infer_dtype=True) + self.pin_weight = self._create_cpu_pin_weight(weight_tensor) + + @abstractmethod + def apply(self, input_tensor): + pass + + def set_config(self, config=None): + if config is not None: + self.config = config + + def to_cuda(self, non_blocking=False): + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight"): + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + else: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + + if weight_name not in destination: + self.weight = None + return + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + if self.is_post_adapter: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + else: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{block_index}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + weight_tensor = lazy_load_file.get_tensor(self.weight_name).to(self.infer_dtype) + self.pin_weight = self.pin_weight.copy_(weight_tensor) + del weight_tensor + + +@RMS_WEIGHT_REGISTER("Default") +class RMSWeight(RMSWeightTemplate): + def __init__(self, weight_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + super().__init__(weight_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter, eps) + + def _norm(self, x): + return x * torch.rsqrt(x.pow(2).mean(dim=-1, keepdim=True) + self.eps) + + def apply(self, input_tensor): + if GET_SENSITIVE_DTYPE() != GET_DTYPE(): + input_tensor = self._norm(input_tensor).type_as(input_tensor) * self.weight + else: + input_tensor = self._norm(input_tensor.float()).type_as(input_tensor) * self.weight + return input_tensor + + +@RMS_WEIGHT_REGISTER("sgl-kernel") +class RMSWeightSgl(RMSWeight): + def __init__( + self, + weight_name, + create_cuda_buffer=False, + create_cpu_buffer=False, + lazy_load=False, + lazy_load_file=None, + is_post_adapter=False, + eps=1e-6, + ): + super().__init__(weight_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter, eps) + + def apply(self, input_tensor): + if sgl_kernel is not None and self.sensitive_layer_dtype == self.infer_dtype: + input_tensor = input_tensor.contiguous() + orig_shape = input_tensor.shape + input_tensor = input_tensor.view(-1, orig_shape[-1]) + input_tensor = sgl_kernel.rmsnorm(input_tensor, self.weight, self.eps).view(orig_shape) + else: + # sgl_kernel is not available or dtype!=torch.bfloat16/float16, fallback to default implementation + if self.sensitive_layer_dtype != self.infer_dtype: + input_tensor = input_tensor * torch.rsqrt(input_tensor.float().pow(2).mean(-1, keepdim=True) + self.eps).to(self.infer_dtype) + input_tensor = (input_tensor * self.weight).to(self.infer_dtype) + else: + input_tensor = input_tensor * torch.rsqrt(input_tensor.pow(2).mean(-1, keepdim=True) + self.eps) + input_tensor = input_tensor * self.weight + + return input_tensor + + +@RMS_WEIGHT_REGISTER("fp32_variance") +class RMSWeightFP32(RMSWeight): + def __init__(self, weight_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + super().__init__(weight_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter, eps) + + def apply(self, input_tensor): + input_dtype = input_tensor.dtype + variance = input_tensor.to(torch.float32).pow(2).mean(-1, keepdim=True) + hidden_states = input_tensor * torch.rsqrt(variance + self.eps) + + if self.weight.dtype in [torch.float16, torch.bfloat16]: + hidden_states = hidden_states.to(self.weight.dtype) + if self.weight is not None: + hidden_states = hidden_states * self.weight + hidden_states = hidden_states.to(input_dtype) + + return hidden_states + + +@RMS_WEIGHT_REGISTER("self_forcing") +class RMSWeightSF(RMSWeight): + def __init__(self, weight_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False, eps=1e-6): + super().__init__(weight_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter, eps) + + def _norm(self, x): + return x * torch.rsqrt(x.pow(2).mean(dim=-1, keepdim=True) + self.eps) + + def apply(self, x): + return self._norm(x.float()).type_as(x) * self.weight diff --git a/lightx2v/common/ops/norm/triton_ops.py b/lightx2v/common/ops/norm/triton_ops.py new file mode 100644 index 0000000..2e0ad50 --- /dev/null +++ b/lightx2v/common/ops/norm/triton_ops.py @@ -0,0 +1,900 @@ +# Copied and adapted from: https://github.com/hao-ai-lab/FastVideo & https://github.com/sgl-project/sglang + +# TODO: for temporary usage, expecting a refactor +from typing import Optional + +import torch +import triton # type: ignore +import triton.language as tl # type: ignore +from torch import Tensor + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_N": 64}, num_warps=2), + triton.Config({"BLOCK_N": 128}, num_warps=4), + triton.Config({"BLOCK_N": 256}, num_warps=4), + triton.Config({"BLOCK_N": 512}, num_warps=4), + triton.Config({"BLOCK_N": 1024}, num_warps=8), + ], + key=["inner_dim"], +) +@triton.jit +def _fused_scale_shift_4d_kernel( + output_ptr, + normalized_ptr, + scale_ptr, + shift_ptr, + rows, + inner_dim, + seq_len, + num_frames, + frame_seqlen, + BLOCK_N: tl.constexpr, +): + pid_row = tl.program_id(0) + pid_col = tl.program_id(1) + + col_offsets = pid_col * BLOCK_N + tl.arange(0, BLOCK_N) + mask = col_offsets < inner_dim + + # Pointers for normalized and output + row_base = pid_row * inner_dim + norm_ptrs = normalized_ptr + row_base + col_offsets + out_ptrs = output_ptr + row_base + col_offsets + + # Pointers for scale and shift for 4D + b_idx = pid_row // seq_len + t_idx = pid_row % seq_len + frame_idx_in_batch = t_idx // frame_seqlen + + scale_row_idx = b_idx * num_frames + frame_idx_in_batch + scale_ptrs = scale_ptr + scale_row_idx * inner_dim + col_offsets + shift_ptrs = shift_ptr + scale_row_idx * inner_dim + col_offsets + + normalized = tl.load(norm_ptrs, mask=mask, other=0.0) + scale = tl.load(scale_ptrs, mask=mask, other=0.0) + shift = tl.load(shift_ptrs, mask=mask, other=0.0) + + one = tl.full([BLOCK_N], 1.0, dtype=scale.dtype) + output = normalized * (one + scale) + shift + + tl.store(out_ptrs, output, mask=mask) + + +@triton.jit +def fuse_scale_shift_kernel_blc_opt( + x_ptr, + shift_ptr, + scale_ptr, + y_ptr, + B, + L, + C, + stride_x_b, + stride_x_l, + stride_x_c, + stride_s_b, + stride_s_l, + stride_s_c, + stride_sc_b, + stride_sc_l, + stride_sc_c, + SCALE_IS_SCALAR: tl.constexpr, + SHIFT_IS_SCALAR: tl.constexpr, + BLOCK_L: tl.constexpr, + BLOCK_C: tl.constexpr, +): + pid_l = tl.program_id(0) + pid_c = tl.program_id(1) + pid_b = tl.program_id(2) + + l_offsets = pid_l * BLOCK_L + tl.arange(0, BLOCK_L) + c_offsets = pid_c * BLOCK_C + tl.arange(0, BLOCK_C) + + mask_l = l_offsets < L + mask_c = c_offsets < C + mask = mask_l[:, None] & mask_c[None, :] + + x_off = pid_b * stride_x_b + l_offsets[:, None] * stride_x_l + c_offsets[None, :] * stride_x_c + x = tl.load(x_ptr + x_off, mask=mask, other=0) + + if SHIFT_IS_SCALAR: + shift_val = tl.load(shift_ptr) + shift = tl.full((BLOCK_L, BLOCK_C), shift_val, dtype=shift_val.dtype) + else: + s_off = pid_b * stride_s_b + l_offsets[:, None] * stride_s_l + c_offsets[None, :] * stride_s_c + shift = tl.load(shift_ptr + s_off, mask=mask, other=0) + + if SCALE_IS_SCALAR: + scale_val = tl.load(scale_ptr) + scale = tl.full((BLOCK_L, BLOCK_C), scale_val, dtype=scale_val.dtype) + else: + sc_off = pid_b * stride_sc_b + l_offsets[:, None] * stride_sc_l + c_offsets[None, :] * stride_sc_c + scale = tl.load(scale_ptr + sc_off, mask=mask, other=0) + + y = x * (1 + scale) + shift + tl.store(y_ptr + x_off, y, mask=mask) + + +def fuse_scale_shift_kernel( + x: torch.Tensor, + scale: torch.Tensor, + shift: torch.Tensor, + block_l: int = 128, + block_c: int = 128, +): + assert x.is_cuda and scale.is_cuda + assert x.is_contiguous() + + B, L, C = x.shape + output = torch.empty_like(x) + + if scale.dim() == 4: + # scale/shift: [B, F, 1, C] + rows = B * L + x_2d = x.view(rows, C) + output_2d = output.view(rows, C) + grid = lambda META: (rows, triton.cdiv(C, META["BLOCK_N"])) # noqa + num_frames = scale.shape[1] + assert L % num_frames == 0, "seq_len must be divisible by num_frames for 4D scale/shift" + frame_seqlen = L // num_frames + + # Compact [B, F, C] without the singleton dim into [B*F, C] + scale_reshaped = scale.squeeze(2).reshape(-1, C).contiguous() + shift_reshaped = shift.squeeze(2).reshape(-1, C).contiguous() + + _fused_scale_shift_4d_kernel[grid]( + output_2d, + x_2d, + scale_reshaped, + shift_reshaped, + rows, + C, + L, + num_frames, + frame_seqlen, + ) + else: + # 2D: [B, C] or [1, C] -> treat as [B, 1, C] and broadcast over L + # 3D: [B, L, C] (or broadcastable variants like [B, 1, C], [1, L, C], [1, 1, C]) + # Also support scalar (0D or 1-element) + if scale.dim() == 0 or (scale.dim() == 1 and scale.numel() == 1): + scale_blc = scale.reshape(1) + elif scale.dim() == 2: + scale_blc = scale[:, None, :] + elif scale.dim() == 3: + scale_blc = scale + else: + raise ValueError("scale must be 0D/1D(1)/2D/3D or 4D") + + if shift.dim() == 0 or (shift.dim() == 1 and shift.numel() == 1): + shift_blc = shift.reshape(1) + elif shift.dim() == 2: + shift_blc = shift[:, None, :] + elif shift.dim() == 3: + shift_blc = shift + else: + # broadcast later via expand if possible + shift_blc = shift + + need_scale_scalar = scale_blc.dim() == 1 and scale_blc.numel() == 1 + need_shift_scalar = shift_blc.dim() == 1 and shift_blc.numel() == 1 + + if not need_scale_scalar: + scale_exp = scale_blc.expand(B, L, C) + s_sb, s_sl, s_sc = scale_exp.stride() + else: + s_sb = s_sl = s_sc = 0 + + if not need_shift_scalar: + shift_exp = shift_blc.expand(B, L, C) + sh_sb, sh_sl, sh_sc = shift_exp.stride() + else: + sh_sb = sh_sl = sh_sc = 0 + + # If both scalars and both zero, copy fast-path + if need_scale_scalar and need_shift_scalar: + if (scale_blc.abs().max() == 0) and (shift_blc.abs().max() == 0): + output.copy_(x) + return output + + grid = (triton.cdiv(L, block_l), triton.cdiv(C, block_c), B) + fuse_scale_shift_kernel_blc_opt[grid]( + x, + shift_blc if need_shift_scalar else shift_exp, + scale_blc if need_scale_scalar else scale_exp, + output, + B, + L, + C, + x.stride(0), + x.stride(1), + x.stride(2), + sh_sb, + sh_sl, + sh_sc, + s_sb, + s_sl, + s_sc, + SCALE_IS_SCALAR=need_scale_scalar, + SHIFT_IS_SCALAR=need_shift_scalar, + BLOCK_L=block_l, + BLOCK_C=block_c, + num_warps=4, + num_stages=2, + ) + return output + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_HS_HALF": 32}, num_warps=2), + triton.Config({"BLOCK_HS_HALF": 64}, num_warps=4), + triton.Config({"BLOCK_HS_HALF": 128}, num_warps=4), + triton.Config({"BLOCK_HS_HALF": 256}, num_warps=8), + ], + key=["head_size", "interleaved"], +) +@triton.jit +def _rotary_embedding_kernel( + output_ptr, + x_ptr, + cos_ptr, + sin_ptr, + num_heads, + head_size, + num_tokens, + stride_x_row, + stride_cos_row, + stride_sin_row, + interleaved: tl.constexpr, + BLOCK_HS_HALF: tl.constexpr, +): + row_idx = tl.program_id(0) + token_idx = (row_idx // num_heads) % num_tokens + + x_row_ptr = x_ptr + row_idx * stride_x_row + cos_row_ptr = cos_ptr + token_idx * stride_cos_row + sin_row_ptr = sin_ptr + token_idx * stride_sin_row + output_row_ptr = output_ptr + row_idx * stride_x_row + + # half size for x1 and x2 + head_size_half = head_size // 2 + + for block_start in range(0, head_size_half, BLOCK_HS_HALF): + offsets_half = block_start + tl.arange(0, BLOCK_HS_HALF) + mask = offsets_half < head_size_half + + cos_vals = tl.load(cos_row_ptr + offsets_half, mask=mask, other=0.0) + sin_vals = tl.load(sin_row_ptr + offsets_half, mask=mask, other=0.0) + + offsets_x1 = 2 * offsets_half + offsets_x2 = 2 * offsets_half + 1 + + x1_vals = tl.load(x_row_ptr + offsets_x1, mask=mask, other=0.0) + x2_vals = tl.load(x_row_ptr + offsets_x2, mask=mask, other=0.0) + + x1_fp32 = x1_vals.to(tl.float32) + x2_fp32 = x2_vals.to(tl.float32) + cos_fp32 = cos_vals.to(tl.float32) + sin_fp32 = sin_vals.to(tl.float32) + o1_vals = tl.fma(-x2_fp32, sin_fp32, x1_fp32 * cos_fp32) + o2_vals = tl.fma(x1_fp32, sin_fp32, x2_fp32 * cos_fp32) + + tl.store(output_row_ptr + offsets_x1, o1_vals.to(x1_vals.dtype), mask=mask) + tl.store(output_row_ptr + offsets_x2, o2_vals.to(x2_vals.dtype), mask=mask) + + +def apply_rotary_embedding(x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor, interleaved: bool = False) -> torch.Tensor: + output = torch.empty_like(x) + + if x.dim() > 3: + bsz, num_tokens, num_heads, head_size = x.shape + else: + num_tokens, num_heads, head_size = x.shape + bsz = 1 + + assert head_size % 2 == 0, "head_size must be divisible by 2" + + x_reshaped = x.view(-1, head_size) + output_reshaped = output.view(-1, head_size) + + # num_tokens per head, 1 token per block + grid = (bsz * num_tokens * num_heads,) + + if interleaved and cos.shape[-1] == head_size: + cos = cos[..., ::2].contiguous() + sin = sin[..., ::2].contiguous() + else: + cos = cos.contiguous() + sin = sin.contiguous() + + _rotary_embedding_kernel[grid]( + output_reshaped, + x_reshaped, + cos, + sin, + num_heads, + head_size, + num_tokens, + x_reshaped.stride(0), + cos.stride(0), + sin.stride(0), + interleaved, + ) + + return output + + +# RMSNorm-fp32 +def maybe_contiguous_lastdim(x): + return x.contiguous() if x is not None and x.stride(-1) != 1 else x + + +def maybe_contiguous(x): + return x.contiguous() if x is not None else None + + +def triton_autotune_configs(): + if not torch.cuda.is_available(): + return [] + # Return configs with a valid warp count for the current device + configs = [] + # Maximum threads per block is architecture-dependent in theory, but in reality all are 1024 + max_threads_per_block = 1024 + # Default to warp size 32 if not defined by device + warp_size = getattr(torch.cuda.get_device_properties(torch.cuda.current_device()), "warp_size", 32) + # Autotune for warp counts which are powers of 2 and do not exceed thread per block limit + return [triton.Config({}, num_warps=warp_count) for warp_count in [1, 2, 4, 8, 16, 32] if warp_count * warp_size <= max_threads_per_block] + # return [triton.Config({}, num_warps=8)] + + +# Copied from flash-attn +@triton.autotune( + configs=triton_autotune_configs(), + key=[ + "N", + "HAS_RESIDUAL", + "STORE_RESIDUAL_OUT", + "IS_RMS_NORM", + "HAS_BIAS", + "HAS_WEIGHT", + "HAS_X1", + "HAS_W1", + "HAS_B1", + ], +) +# torch compile doesn't like triton.heuristics, so we set these manually when calling the kernel +# @triton.heuristics({"HAS_BIAS": lambda args: args["B"] is not None}) +# @triton.heuristics({"HAS_RESIDUAL": lambda args: args["RESIDUAL"] is not None}) +# @triton.heuristics({"HAS_X1": lambda args: args["X1"] is not None}) +# @triton.heuristics({"HAS_W1": lambda args: args["W1"] is not None}) +# @triton.heuristics({"HAS_B1": lambda args: args["B1"] is not None}) +@triton.jit +def _layer_norm_fwd_1pass_kernel( + X, # pointer to the input + Y, # pointer to the output + W, # pointer to the weights + B, # pointer to the biases + RESIDUAL, # pointer to the residual + X1, + W1, + B1, + Y1, + RESIDUAL_OUT, # pointer to the residual + ROWSCALE, + SEEDS, # Dropout seeds for each row + DROPOUT_MASK, + DROPOUT_MASK1, + Mean, # pointer to the mean + Rstd, # pointer to the 1/std + stride_x_row, # how much to increase the pointer when moving by 1 row + stride_y_row, + stride_res_row, + stride_res_out_row, + stride_x1_row, + stride_y1_row, + M, # number of rows in X + N, # number of columns in X + eps, # epsilon to avoid division by zero + dropout_p, # Dropout probability + zero_centered_weight, # If true, add 1.0 to the weight + IS_RMS_NORM: tl.constexpr, + BLOCK_N: tl.constexpr, + HAS_RESIDUAL: tl.constexpr, + STORE_RESIDUAL_OUT: tl.constexpr, + HAS_WEIGHT: tl.constexpr, + HAS_BIAS: tl.constexpr, + HAS_DROPOUT: tl.constexpr, + STORE_DROPOUT_MASK: tl.constexpr, + HAS_ROWSCALE: tl.constexpr, + HAS_X1: tl.constexpr, + HAS_W1: tl.constexpr, + HAS_B1: tl.constexpr, +): + # Map the program id to the row of X and Y it should compute. + row = tl.program_id(0) + X += row * stride_x_row + Y += row * stride_y_row + if HAS_RESIDUAL: + RESIDUAL += row * stride_res_row + if STORE_RESIDUAL_OUT: + RESIDUAL_OUT += row * stride_res_out_row + if HAS_X1: + X1 += row * stride_x1_row + if HAS_W1: + Y1 += row * stride_y1_row + # Compute mean and variance + cols = tl.arange(0, BLOCK_N) + x = tl.load(X + cols, mask=cols < N, other=0.0).to(tl.float32) + if HAS_ROWSCALE: + rowscale = tl.load(ROWSCALE + row).to(tl.float32) + x *= rowscale + if HAS_DROPOUT: + # Compute dropout mask + # 7 rounds is good enough, and reduces register pressure + keep_mask = tl.rand(tl.load(SEEDS + row).to(tl.uint32), cols, n_rounds=7) > dropout_p + x = tl.where(keep_mask, x / (1.0 - dropout_p), 0.0) + if STORE_DROPOUT_MASK: + tl.store(DROPOUT_MASK + row * N + cols, keep_mask, mask=cols < N) + if HAS_X1: + x1 = tl.load(X1 + cols, mask=cols < N, other=0.0).to(tl.float32) + if HAS_ROWSCALE: + rowscale = tl.load(ROWSCALE + M + row).to(tl.float32) + x1 *= rowscale + if HAS_DROPOUT: + # Compute dropout mask + # 7 rounds is good enough, and reduces register pressure + keep_mask = tl.rand(tl.load(SEEDS + M + row).to(tl.uint32), cols, n_rounds=7) > dropout_p + x1 = tl.where(keep_mask, x1 / (1.0 - dropout_p), 0.0) + if STORE_DROPOUT_MASK: + tl.store(DROPOUT_MASK1 + row * N + cols, keep_mask, mask=cols < N) + x += x1 + if HAS_RESIDUAL: + residual = tl.load(RESIDUAL + cols, mask=cols < N, other=0.0).to(tl.float32) + x += residual + if STORE_RESIDUAL_OUT: + tl.store(RESIDUAL_OUT + cols, x, mask=cols < N) + if not IS_RMS_NORM: + mean = tl.sum(x, axis=0) / N + tl.store(Mean + row, mean) + xbar = tl.where(cols < N, x - mean, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + else: + xbar = tl.where(cols < N, x, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + rstd = 1 / tl.sqrt(var + eps) + tl.store(Rstd + row, rstd) + # Normalize and apply linear transformation + mask = cols < N + if HAS_WEIGHT: + w = tl.load(W + cols, mask=mask).to(tl.float32) + if zero_centered_weight: + w += 1.0 + if HAS_BIAS: + b = tl.load(B + cols, mask=mask).to(tl.float32) + x_hat = (x - mean) * rstd if not IS_RMS_NORM else x * rstd + if HAS_WEIGHT: + y = x_hat * w + b if HAS_BIAS else x_hat * w + else: + y = x_hat + b if HAS_BIAS else x_hat + # Write output + tl.store(Y + cols, y, mask=mask) + if HAS_W1: + w1 = tl.load(W1 + cols, mask=mask).to(tl.float32) + if zero_centered_weight: + w1 += 1.0 + if HAS_B1: + b1 = tl.load(B1 + cols, mask=mask).to(tl.float32) + y1 = x_hat * w1 + b1 if HAS_B1 else x_hat * w1 + tl.store(Y1 + cols, y1, mask=mask) + + +def _layer_norm_fwd( + x: Tensor, + weight: Tensor, + bias: Tensor, + eps: float, + residual: Optional[Tensor] = None, + x1: Optional[Tensor] = None, + weight1: Optional[Tensor] = None, + bias1: Optional[Tensor] = None, + dropout_p: float = 0.0, + rowscale: Optional[Tensor] = None, + out_dtype: Optional[torch.dtype] = None, + residual_dtype: Optional[torch.dtype] = None, + zero_centered_weight: bool = False, + is_rms_norm: bool = False, + return_dropout_mask: bool = False, + out: Optional[Tensor] = None, + residual_out: Optional[Tensor] = None, +) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor, Tensor, Tensor): + # Need to wrap to handle the case where residual_out is a alias of x, which makes torch.library + # and torch.compile unhappy. Also allocate memory for out and residual_out if they are None + # so that _layer_norm_fwd_impl doesn't have to return them. + if out is None: + out = torch.empty_like(x, dtype=x.dtype if out_dtype is None else out_dtype) + if residual is not None: + residual_dtype = residual.dtype + if residual_out is None and (residual is not None or (residual_dtype is not None and residual_dtype != x.dtype) or dropout_p > 0.0 or rowscale is not None or x1 is not None): + residual_out = torch.empty_like(x, dtype=residual_dtype if residual_dtype is not None else x.dtype) + else: + residual_out = None + y1, mean, rstd, seeds, dropout_mask, dropout_mask1 = _layer_norm_fwd_impl( + x, + weight, + bias, + eps, + out, + residual=residual, + x1=x1, + weight1=weight1, + bias1=bias1, + dropout_p=dropout_p, + rowscale=rowscale, + zero_centered_weight=zero_centered_weight, + is_rms_norm=is_rms_norm, + return_dropout_mask=return_dropout_mask, + residual_out=residual_out, + ) + # residual_out is None if residual is None and residual_dtype == input_dtype and dropout_p == 0.0 + if residual_out is None: + residual_out = x + return out, y1, mean, rstd, residual_out, seeds, dropout_mask, dropout_mask1 + + +# [2025-04-28] torch.library.triton_op ignores the schema argument, but here we need the schema +# since we're returning a tuple of tensors +def _layer_norm_fwd_impl( + x: Tensor, + weight: Optional[Tensor], + bias: Tensor, + eps: float, + out: Tensor, + residual: Optional[Tensor] = None, + x1: Optional[Tensor] = None, + weight1: Optional[Tensor] = None, + bias1: Optional[Tensor] = None, + dropout_p: float = 0.0, + rowscale: Optional[Tensor] = None, + zero_centered_weight: bool = False, + is_rms_norm: bool = False, + return_dropout_mask: bool = False, + residual_out: Optional[Tensor] = None, +) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor): + M, N = x.shape + assert x.stride(-1) == 1 + if residual is not None: + assert residual.stride(-1) == 1 + assert residual.shape == (M, N) + if weight is not None: + assert weight.shape == (N,) + assert weight.stride(-1) == 1 + if bias is not None: + assert bias.stride(-1) == 1 + assert bias.shape == (N,) + if x1 is not None: + assert x1.shape == x.shape + assert rowscale is None + assert x1.stride(-1) == 1 + if weight1 is not None: + assert weight1.shape == (N,) + assert weight1.stride(-1) == 1 + if bias1 is not None: + assert bias1.shape == (N,) + assert bias1.stride(-1) == 1 + if rowscale is not None: + assert rowscale.is_contiguous() + assert rowscale.shape == (M,) + assert out.shape == x.shape + assert out.stride(-1) == 1 + if residual_out is not None: + assert residual_out.shape == x.shape + assert residual_out.stride(-1) == 1 + if weight1 is not None: + y1 = torch.empty_like(out) + assert y1.stride(-1) == 1 + else: + y1 = None + mean = torch.empty((M,), dtype=torch.float32, device=x.device) if not is_rms_norm else None + rstd = torch.empty((M,), dtype=torch.float32, device=x.device) + if dropout_p > 0.0: + seeds = torch.randint(2**32, (M if x1 is None else 2 * M,), device=x.device, dtype=torch.int64) + else: + seeds = None + if return_dropout_mask and dropout_p > 0.0: + dropout_mask = torch.empty(M, N, device=x.device, dtype=torch.bool) + if x1 is not None: + dropout_mask1 = torch.empty(M, N, device=x.device, dtype=torch.bool) + else: + dropout_mask1 = None + else: + dropout_mask, dropout_mask1 = None, None + # Less than 64KB per feature: enqueue fused kernel + MAX_FUSED_SIZE = 65536 // x.element_size() + BLOCK_N = min(MAX_FUSED_SIZE, triton.next_power_of_2(N)) + if N > BLOCK_N: + raise RuntimeError("This layer norm doesn't support feature dim >= 64KB.") + with torch.cuda.device(x.device.index): + torch.library.wrap_triton(_layer_norm_fwd_1pass_kernel)[(M,)]( + x, + out, + weight if weight is not None else x, # unused when HAS_WEIGHT == False + bias, + residual, + x1, + weight1, + bias1, + y1, + residual_out, + rowscale, + seeds, + dropout_mask, + dropout_mask1, + mean, + rstd, + x.stride(0), + out.stride(0), + residual.stride(0) if residual is not None else 0, + residual_out.stride(0) if residual_out is not None else 0, + x1.stride(0) if x1 is not None else 0, + y1.stride(0) if y1 is not None else 0, + M, + N, + eps, + dropout_p, + # Passing bool make torch inductor very unhappy since it then tries to compare to int_max + int(zero_centered_weight), + is_rms_norm, + BLOCK_N, + residual is not None, + residual_out is not None, + weight is not None, + bias is not None, + dropout_p > 0.0, + dropout_mask is not None, + rowscale is not None, + HAS_X1=x1 is not None, + HAS_W1=weight1 is not None, + HAS_B1=bias1 is not None, + ) + return y1, mean, rstd, seeds, dropout_mask, dropout_mask1 + + +class LayerNormFn: + @staticmethod + def forward( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + is_rms_norm=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, + ): + x_shape_og = x.shape + # reshape input data into 2D tensor + x = maybe_contiguous_lastdim(x.reshape(-1, x.shape[-1])) + if residual is not None: + assert residual.shape == x_shape_og + residual = maybe_contiguous_lastdim(residual.reshape(-1, residual.shape[-1])) + if x1 is not None: + assert x1.shape == x_shape_og + assert rowscale is None, "rowscale is not supported with parallel LayerNorm" + x1 = maybe_contiguous_lastdim(x1.reshape(-1, x1.shape[-1])) + # weight can be None when elementwise_affine=False for LayerNorm + if weight is not None: + weight = weight.contiguous() + bias = maybe_contiguous(bias) + weight1 = maybe_contiguous(weight1) + bias1 = maybe_contiguous(bias1) + if rowscale is not None: + rowscale = rowscale.reshape(-1).contiguous() + residual_dtype = residual.dtype if residual is not None else (torch.float32 if residual_in_fp32 else None) + if out is not None: + out = out.reshape(-1, out.shape[-1]) + if residual_out is not None: + residual_out = residual_out.reshape(-1, residual_out.shape[-1]) + y, y1, mean, rstd, residual_out, seeds, dropout_mask, dropout_mask1 = _layer_norm_fwd( + x, + weight, + bias, + eps, + residual, + x1, + weight1, + bias1, + dropout_p=dropout_p, + rowscale=rowscale, + out_dtype=out_dtype, + residual_dtype=residual_dtype, + zero_centered_weight=zero_centered_weight, + is_rms_norm=is_rms_norm, + return_dropout_mask=return_dropout_mask, + out=out, + residual_out=residual_out, + ) + y = y.reshape(x_shape_og) + return y + + +def layer_norm_fn( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + is_rms_norm=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, +): + return LayerNormFn.forward( + x, + weight, + bias, + residual, + x1, + weight1, + bias1, + eps, + dropout_p, + rowscale, + prenorm, + residual_in_fp32, + zero_centered_weight, + is_rms_norm, + return_dropout_mask, + out_dtype, + out, + residual_out, + ) + + +@triton.jit +def _norm_infer_kernel( + X, + Y, + W, + B, + stride_x_row, + stride_y_row, + M, + N, + eps, + IS_RMS_NORM: tl.constexpr, + HAS_WEIGHT: tl.constexpr, + HAS_BIAS: tl.constexpr, + BLOCK_N: tl.constexpr, +): + row = tl.program_id(0) + X += row * stride_x_row + Y += row * stride_y_row + if HAS_WEIGHT: + W += 0 + if HAS_BIAS: + B += 0 + cols = tl.arange(0, BLOCK_N) + x = tl.load(X + cols, mask=cols < N, other=0.0).to(tl.float32) + if not IS_RMS_NORM: + mean = tl.sum(x, axis=0) / N + xbar = tl.where(cols < N, x - mean, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + else: + xbar = tl.where(cols < N, x, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + rstd = 1 / tl.sqrt(var + eps) + x_hat = (x - mean) * rstd if not IS_RMS_NORM else x * rstd + if HAS_WEIGHT: + w = tl.load(W + cols, mask=cols < N, other=1.0).to(tl.float32) + y = x_hat * w + else: + y = x_hat + if HAS_BIAS: + b = tl.load(B + cols, mask=cols < N, other=0.0).to(tl.float32) + y += b + tl.store(Y + cols, y, mask=cols < N) + + +def norm_infer( + x: Tensor, + weight: Optional[Tensor], + bias: Optional[Tensor], + eps: float, + is_rms_norm: bool = False, + out: Optional[Tensor] = None, +): + M, N = x.shape + assert x.stride(-1) == 1 + if weight is not None: + assert weight.shape == (N,) + assert weight.stride(-1) == 1 + if bias is not None: + assert bias.shape == (N,) + assert bias.stride(-1) == 1 + if out is None: + out = torch.empty_like(x) + MAX_FUSED_SIZE = 65536 // x.element_size() + BLOCK_N = min(MAX_FUSED_SIZE, triton.next_power_of_2(N)) + if N > BLOCK_N: + raise RuntimeError("This layer norm doesn't support feature dim >= 64KB.") + num_warps = min(max(BLOCK_N // 256, 1), 8) + _norm_infer_kernel[(M,)]( + x, + out, + weight if weight is not None else x, # dummy when HAS_WEIGHT=False + bias if bias is not None else x, # dummy when HAS_BIAS=False + x.stride(0), + out.stride(0), + M, + N, + eps, + IS_RMS_NORM=is_rms_norm, + HAS_WEIGHT=weight is not None, + HAS_BIAS=bias is not None, + BLOCK_N=BLOCK_N, + num_warps=num_warps, + ) + return out + + +def rms_norm_fn( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, +): + return LayerNormFn.forward( + x, + weight, + bias, + residual, + x1, + weight1, + bias1, + eps, + dropout_p, + rowscale, + prenorm, + residual_in_fp32, + zero_centered_weight, + True, + return_dropout_mask, + out_dtype, + out, + residual_out, + ) diff --git a/lightx2v/common/ops/tensor/__init__.py b/lightx2v/common/ops/tensor/__init__.py new file mode 100644 index 0000000..fa13fae --- /dev/null +++ b/lightx2v/common/ops/tensor/__init__.py @@ -0,0 +1 @@ +from .tensor import DefaultTensor diff --git a/lightx2v/common/ops/tensor/tensor.py b/lightx2v/common/ops/tensor/tensor.py new file mode 100644 index 0000000..069d5e3 --- /dev/null +++ b/lightx2v/common/ops/tensor/tensor.py @@ -0,0 +1,110 @@ +import os +import re +from pathlib import Path + +import torch +from safetensors import safe_open + +from lightx2v.utils.envs import * +from lightx2v.utils.registry_factory import TENSOR_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + + +@TENSOR_REGISTER("Default") +class DefaultTensor: + def __init__(self, tensor_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + self.tensor_name = tensor_name + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.is_post_adapter = is_post_adapter + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.infer_dtype = GET_DTYPE() + self.sensitive_layer_dtype = GET_SENSITIVE_DTYPE() + + def load(self, weight_dict): + if self.create_cuda_buffer: + self._load_cuda_buffer(weight_dict) + elif self.create_cpu_buffer: + self._load_cpu_pin_buffer() + else: + self._load_default_tensors(weight_dict) + + def _load_default_tensors(self, weight_dict): + if not self.lazy_load: + device = weight_dict[self.tensor_name].device + if device.type == "cpu": + tensor = weight_dict[self.tensor_name] + self.pin_tensor = self._create_cpu_pin_tensor(tensor) + del weight_dict[self.tensor_name] + else: + self.tensor = weight_dict[self.tensor_name] + + def _get_tensor(self, weight_dict=None, use_infer_dtype=False): + if self.lazy_load: + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{self.tensor_name.split('.')[1]}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + tensor = lazy_load_file.get_tensor(self.tensor_name) + if use_infer_dtype: + tensor = tensor.to(self.infer_dtype) + else: + tensor = weight_dict[self.tensor_name] + return tensor + + def _create_cpu_pin_tensor(self, tensor): + pin_tensor = torch.empty(tensor.shape, pin_memory=True, dtype=tensor.dtype) + pin_tensor.copy_(tensor) + del tensor + return pin_tensor + + def _load_cuda_buffer(self, weight_dict): + tensor = self._get_tensor(weight_dict, use_infer_dtype=self.lazy_load) + self.tensor_cuda_buffer = tensor.to(AI_DEVICE) + + def _load_cpu_pin_buffer(self): + tensor = self._get_tensor(use_infer_dtype=True) + self.pin_tensor = self._create_cpu_pin_tensor(tensor) + + def to_cuda(self, non_blocking=False): + self.tensor = self.pin_tensor.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_tensor"): + self.tensor = self.pin_tensor.copy_(self.tensor, non_blocking=non_blocking).cpu() + else: + self.tensor = self.tensor.to("cpu", non_blocking=non_blocking) + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.tensor_name] = self.pin_tensor if hasattr(self, "pin_tensor") else self.tensor + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + tensor_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.tensor_name, count=1) + else: + tensor_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.tensor_name, count=1) + if tensor_name not in destination: + self.tensor = None + return + self.tensor = self.tensor_cuda_buffer.copy_(destination[tensor_name], non_blocking=True) + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + if self.is_post_adapter: + assert adapter_block_index is not None + self.tensor_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.tensor_name, count=1) + else: + self.tensor_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.tensor_name, count=1) + if Path(self.lazy_load_file).is_file(): + lazy_load_file_path = self.lazy_load_file + else: + lazy_load_file_path = os.path.join(self.lazy_load_file, f"block_{block_index}.safetensors") + with safe_open(lazy_load_file_path, framework="pt", device="cpu") as lazy_load_file: + tensor = lazy_load_file.get_tensor(self.tensor_name).to(self.infer_dtype) + self.pin_tensor = self.pin_tensor.copy_(tensor) + del tensor diff --git a/lightx2v/common/transformer_infer/transformer_infer.py b/lightx2v/common/transformer_infer/transformer_infer.py new file mode 100644 index 0000000..424f79b --- /dev/null +++ b/lightx2v/common/transformer_infer/transformer_infer.py @@ -0,0 +1,46 @@ +import math +from abc import ABC, abstractmethod + + +class BaseTransformerInfer(ABC): + @abstractmethod + def infer(self): + pass + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + self.scheduler.transformer_infer = self + + +class BaseTaylorCachingTransformerInfer(BaseTransformerInfer): + @abstractmethod + def infer_calculating(self): + pass + + @abstractmethod + def infer_using_cache(self): + pass + + @abstractmethod + def get_taylor_step_diff(self): + pass + + # 1. when fully calcualted, stored in cache + def derivative_approximation(self, block_cache, module_name, out): + if module_name not in block_cache: + block_cache[module_name] = {0: out} + else: + step_diff = self.get_taylor_step_diff() + + previous_out = block_cache[module_name][0] + block_cache[module_name][0] = out + block_cache[module_name][1] = (out - previous_out) / step_diff + + def taylor_formula(self, tensor_dict): + x = self.get_taylor_step_diff() + + output = 0 + for i in range(len(tensor_dict)): + output += (1 / math.factorial(i)) * tensor_dict[i] * (x**i) + + return output diff --git a/lightx2v/deploy/__init__.py b/lightx2v/deploy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/deploy/common/__init__.py b/lightx2v/deploy/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/deploy/common/aliyun.py b/lightx2v/deploy/common/aliyun.py new file mode 100644 index 0000000..6aaff6b --- /dev/null +++ b/lightx2v/deploy/common/aliyun.py @@ -0,0 +1,81 @@ +import asyncio +import json +import os +import sys + +from alibabacloud_dypnsapi20170525 import models as dypnsapi_models +from alibabacloud_dypnsapi20170525.client import Client +from alibabacloud_tea_openapi import models as openapi_models +from alibabacloud_tea_util import models as util_models +from loguru import logger + + +class AlibabaCloudClient: + def __init__(self): + config = openapi_models.Config( + access_key_id=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), + access_key_secret=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), + https_proxy=os.getenv("auth_https_proxy", None), + ) + self.client = Client(config) + self.runtime = util_models.RuntimeOptions() + + def check_ok(self, res, prefix): + logger.info(f"{prefix}: {res}") + if not isinstance(res, dict) or "statusCode" not in res or res["statusCode"] != 200: + logger.warning(f"{prefix}: error response: {res}") + return False + if "body" not in res or "Code" not in res["body"] or "Success" not in res["body"]: + logger.warning(f"{prefix}: error body: {res}") + return False + if res["body"]["Code"] != "OK" or res["body"]["Success"] is not True: + logger.warning(f"{prefix}: sms error: {res}") + return False + return True + + async def send_sms(self, phone_number): + try: + req = dypnsapi_models.SendSmsVerifyCodeRequest( + phone_number=phone_number, + sign_name="速通互联验证服务", + template_code="100001", + template_param=json.dumps({"code": "##code##", "min": "5"}), + valid_time=300, + ) + res = await self.client.send_sms_verify_code_with_options_async(req, self.runtime) + ok = self.check_ok(res.to_map(), "AlibabaCloudClient send sms") + logger.info(f"AlibabaCloudClient send sms for {phone_number}: {ok}") + return ok + + except Exception as e: + logger.warning(f"AlibabaCloudClient send sms for {phone_number}: {e}") + return False + + async def check_sms(self, phone_number, verify_code): + try: + req = dypnsapi_models.CheckSmsVerifyCodeRequest( + phone_number=phone_number, + verify_code=verify_code, + ) + res = await self.client.check_sms_verify_code_with_options_async(req, self.runtime) + ok = self.check_ok(res.to_map(), "AlibabaCloudClient check sms") + logger.info(f"AlibabaCloudClient check sms for {phone_number} with {verify_code}: {ok}") + return ok + + except Exception as e: + logger.warning(f"AlibabaCloudClient check sms for {phone_number} with {verify_code}: {e}") + return False + + +async def test(args): + assert len(args) in [1, 2], "Usage: python aliyun_sms.py [verify_code]" + phone_number = args[0] + client = AlibabaCloudClient() + if len(args) == 1: + await client.send_sms(phone_number) + else: + await client.check_sms(phone_number, args[1]) + + +if __name__ == "__main__": + asyncio.run(test(sys.argv[1:])) diff --git a/lightx2v/deploy/common/audio_separator.py b/lightx2v/deploy/common/audio_separator.py new file mode 100644 index 0000000..36f06d6 --- /dev/null +++ b/lightx2v/deploy/common/audio_separator.py @@ -0,0 +1,376 @@ +# -*- coding: utf-8 -*- +""" +Audio Source Separation Module +Separates different voice tracks in audio, supports multi-person audio separation +""" + +import base64 +import io +import os +import tempfile +import traceback +from collections import defaultdict +from typing import Dict, Optional, Union + +import torch +import torchaudio +from loguru import logger + +# Import pyannote.audio for speaker diarization +from pyannote.audio import Audio, Pipeline + +_origin_torch_load = torch.load + + +def our_torch_load(checkpoint_file, *args, **kwargs): + kwargs["weights_only"] = False + return _origin_torch_load(checkpoint_file, *args, **kwargs) + + +class AudioSeparator: + """ + Audio separator for separating different voice tracks in audio using pyannote.audio + Supports multi-person conversation separation, maintains duration (other speakers' tracks are empty) + """ + + def __init__( + self, + model_path: str = None, + device: str = None, + sample_rate: int = 16000, + ): + """ + Initialize audio separator + + Args: + model_path: Model path (if using custom model), default uses pyannote/speaker-diarization-community-1 + device: Device ('cpu', 'cuda', etc.), None for auto selection + sample_rate: Target sample rate, default 16000 + """ + self.sample_rate = sample_rate + self.device = device if device else ("cuda" if torch.cuda.is_available() else "cpu") + self._init_pyannote(model_path) + + def _init_pyannote(self, model_path: str = None): + """Initialize pyannote.audio pipeline""" + try: + huggingface_token = os.getenv("HUGGINGFACE_TOKEN") or os.getenv("HF_TOKEN") + model_name = model_path or "pyannote/speaker-diarization-community-1" + + try: + torch.load = our_torch_load + # Try loading with token if available + if huggingface_token: + self.pipeline = Pipeline.from_pretrained(model_name, token=huggingface_token) + else: + # Try without token (may work for public models) + self.pipeline = Pipeline.from_pretrained(model_name) + except Exception as e: + if "gated" in str(e).lower() or "token" in str(e).lower(): + raise RuntimeError(f"Model requires authentication. Set HUGGINGFACE_TOKEN or HF_TOKEN environment variable: {e}") + raise RuntimeError(f"Failed to load pyannote model: {e}") + finally: + torch.load = _origin_torch_load + + # Move pipeline to specified device + if self.device: + self.pipeline.to(torch.device(self.device)) + + # Initialize Audio helper for waveform loading + self.pyannote_audio = Audio() + + logger.info("Initialized pyannote.audio speaker diarization pipeline") + except Exception as e: + logger.error(f"Failed to initialize pyannote: {e}") + raise RuntimeError(f"Failed to initialize pyannote.audio pipeline: {e}") + + def separate_speakers( + self, + audio_path: Union[str, bytes], + num_speakers: Optional[int] = None, + min_speakers: int = 1, + max_speakers: int = 5, + ) -> Dict: + """ + Separate different speakers in audio + + Args: + audio_path: Audio file path or bytes data + num_speakers: Specified number of speakers, None for auto detection + min_speakers: Minimum number of speakers + max_speakers: Maximum number of speakers + + Returns: + Dict containing: + - speakers: List of speaker audio segments, each containing: + - speaker_id: Speaker ID (0, 1, 2, ...) + - audio: torch.Tensor audio data [channels, samples] + - segments: List of (start_time, end_time) tuples + - sample_rate: Sample rate + """ + try: + # Load audio + if isinstance(audio_path, bytes): + # 尝试从字节数据推断音频格式 + # 检查是否是 WAV 格式(RIFF 头) + is_wav = audio_path[:4] == b"RIFF" and audio_path[8:12] == b"WAVE" + # 检查是否是 MP3 格式(ID3 或 MPEG 头) + is_mp3 = audio_path[:3] == b"ID3" or audio_path[:2] == b"\xff\xfb" or audio_path[:2] == b"\xff\xf3" + + # 根据格式选择后缀 + if is_wav: + suffix = ".wav" + elif is_mp3: + suffix = ".mp3" + else: + # 默认尝试 WAV,如果失败会抛出错误 + suffix = ".wav" + + with tempfile.NamedTemporaryFile(suffix=suffix, delete=False) as tmp_file: + tmp_file.write(audio_path) + tmp_audio_path = tmp_file.name + try: + result = self._separate_speakers_internal(tmp_audio_path, num_speakers, min_speakers, max_speakers) + finally: + # 确保临时文件被删除 + try: + os.unlink(tmp_audio_path) + except Exception as e: + logger.warning(f"Failed to delete temp file {tmp_audio_path}: {e}") + return result + else: + return self._separate_speakers_internal(audio_path, num_speakers, min_speakers, max_speakers) + + except Exception as e: + logger.error(f"Speaker separation failed: {traceback.format_exc()}") + raise RuntimeError(f"Audio separation error: {e}") + + def _separate_speakers_internal( + self, + audio_path: str, + num_speakers: Optional[int] = None, + min_speakers: int = 1, + max_speakers: int = 5, + ) -> Dict: + """Internal method: execute speaker separation""" + + # Load audio + waveform, original_sr = torchaudio.load(audio_path) + if original_sr != self.sample_rate: + resampler = torchaudio.transforms.Resample(original_sr, self.sample_rate) + waveform = resampler(waveform) + + # Convert to mono if stereo + if waveform.shape[0] > 1: + waveform = waveform.mean(dim=0, keepdim=True) + + # Ensure waveform is float32 and normalized (pyannote expects this format) + if waveform.dtype != torch.float32: + waveform = waveform.float() + + # Ensure waveform is in range [-1, 1] (normalize if needed) + if waveform.abs().max() > 1.0: + waveform = waveform / waveform.abs().max() + + if self.pipeline is None: + raise RuntimeError("Pyannote pipeline not initialized") + + return self._separate_with_pyannote(audio_path, waveform, num_speakers, min_speakers, max_speakers) + + def _separate_with_pyannote( + self, + audio_path: str, + waveform: torch.Tensor, + num_speakers: Optional[int], + min_speakers: int, + max_speakers: int, + ) -> Dict: + """Use pyannote.audio for speaker diarization""" + try: + # Use waveform dict to avoid AudioDecoder dependency issues + # Pipeline can accept either file path or waveform dict + # Using waveform dict is more reliable when torchcodec is not properly installed + audio_input = { + "waveform": waveform, + "sample_rate": self.sample_rate, + } + + # Run speaker diarization + output = self.pipeline( + audio_input, + min_speakers=min_speakers if num_speakers is None else num_speakers, + max_speakers=max_speakers if num_speakers is None else num_speakers, + ) + + # Extract audio segments for each speaker + speakers_dict = defaultdict(list) + for turn, speaker in output.speaker_diarization: + print(f"Speaker: {speaker}, Start time: {turn.start}, End time: {turn.end}") + start_time = turn.start + end_time = turn.end + start_sample = int(start_time * self.sample_rate) + end_sample = int(end_time * self.sample_rate) + + # Extract audio segment for this time period + segment_audio = waveform[:, start_sample:end_sample] + speakers_dict[speaker].append((start_time, end_time, segment_audio)) + + # Generate complete audio for each speaker (other speakers' segments are empty) + speakers = [] + audio_duration = waveform.shape[1] / self.sample_rate + num_samples = waveform.shape[1] + + for speaker_id, segments in speakers_dict.items(): + # Create zero-filled audio + speaker_audio = torch.zeros_like(waveform) + + # Fill in this speaker's segments + for start_time, end_time, segment_audio in segments: + start_sample = int(start_time * self.sample_rate) + end_sample = int(end_time * self.sample_rate) + # Ensure no out-of-bounds + end_sample = min(end_sample, num_samples) + segment_len = end_sample - start_sample + if segment_len > 0 and segment_audio.shape[1] > 0: + actual_len = min(segment_len, segment_audio.shape[1]) + speaker_audio[:, start_sample : start_sample + actual_len] = segment_audio[:, :actual_len] + + speakers.append( + { + "speaker_id": speaker_id, + "audio": speaker_audio, + "segments": [(s[0], s[1]) for s in segments], + "sample_rate": self.sample_rate, + } + ) + + logger.info(f"Separated audio into {len(speakers)} speakers using pyannote") + return {"speakers": speakers, "method": "pyannote"} + + except Exception as e: + logger.error(f"Pyannote separation failed: {e}") + raise RuntimeError(f"Audio separation failed: {e}") + + def save_speaker_audio(self, speaker_audio: torch.Tensor, output_path: str, sample_rate: int = None): + """ + Save speaker audio to file + + Args: + speaker_audio: Audio tensor [channels, samples] + output_path: Output path + sample_rate: Sample rate, if None uses self.sample_rate + """ + sr = sample_rate if sample_rate else self.sample_rate + torchaudio.save(output_path, speaker_audio, sr) + logger.info(f"Saved speaker audio to {output_path}") + + def speaker_audio_to_base64(self, speaker_audio: torch.Tensor, sample_rate: int = None, format: str = "wav") -> str: + """ + Convert speaker audio tensor to base64 encoded string without saving to file + + Args: + speaker_audio: Audio tensor [channels, samples] + sample_rate: Sample rate, if None uses self.sample_rate + format: Audio format (default: "wav") + + Returns: + Base64 encoded audio string + """ + sr = sample_rate if sample_rate else self.sample_rate + + # Use BytesIO to save audio to memory + buffer = io.BytesIO() + torchaudio.save(buffer, speaker_audio, sr, format=format) + + # Get the audio bytes + audio_bytes = buffer.getvalue() + + # Encode to base64 + audio_base64 = base64.b64encode(audio_bytes).decode("utf-8") + + logger.debug(f"Converted speaker audio to base64, size: {len(audio_bytes)} bytes") + return audio_base64 + + def separate_and_save( + self, + audio_path: Union[str, bytes], + output_dir: str, + num_speakers: Optional[int] = None, + min_speakers: int = 1, + max_speakers: int = 5, + ) -> Dict: + """ + Separate audio and save to files + + Args: + audio_path: Input audio path or bytes data + output_dir: Output directory + num_speakers: Specified number of speakers + min_speakers: Minimum number of speakers + max_speakers: Maximum number of speakers + + Returns: + Separation result dictionary, containing output file paths + """ + os.makedirs(output_dir, exist_ok=True) + + result = self.separate_speakers(audio_path, num_speakers, min_speakers, max_speakers) + + output_paths = [] + for speaker in result["speakers"]: + speaker_id = speaker["speaker_id"] + output_path = os.path.join(output_dir, f"{speaker_id}.wav") + self.save_speaker_audio(speaker["audio"], output_path, speaker["sample_rate"]) + output_paths.append(output_path) + speaker["output_path"] = output_path + + result["output_paths"] = output_paths + return result + + +def separate_audio_tracks( + audio_path: str, + output_dir: str = None, + num_speakers: int = None, + model_path: str = None, +) -> Dict: + """ + Convenience function: separate different audio tracks + + Args: + audio_path: Audio file path + output_dir: Output directory, if None does not save files + num_speakers: Number of speakers + model_path: Model path (optional) + + Returns: + Separation result dictionary + """ + separator = AudioSeparator(model_path=model_path) + + if output_dir: + return separator.separate_and_save(audio_path, output_dir, num_speakers=num_speakers) + else: + return separator.separate_speakers(audio_path, num_speakers=num_speakers) + + +if __name__ == "__main__": + # Test code + import sys + + if len(sys.argv) < 2: + print("Usage: python audio_separator.py [output_dir] [num_speakers]") + sys.exit(1) + + audio_path = sys.argv[1] + output_dir = sys.argv[2] if len(sys.argv) > 2 else "./separated_audio" + num_speakers = int(sys.argv[3]) if len(sys.argv) > 3 else None + + separator = AudioSeparator() + result = separator.separate_and_save(audio_path, output_dir, num_speakers=num_speakers) + + print(f"Separated audio into {len(result['speakers'])} speakers:") + for speaker in result["speakers"]: + print(f" Speaker {speaker['speaker_id']}: {len(speaker['segments'])} segments") + if "output_path" in speaker: + print(f" Saved to: {speaker['output_path']}") diff --git a/lightx2v/deploy/common/face_detector.py b/lightx2v/deploy/common/face_detector.py new file mode 100644 index 0000000..24240e3 --- /dev/null +++ b/lightx2v/deploy/common/face_detector.py @@ -0,0 +1,277 @@ +# -*- coding: utf-8 -*- +""" +Face Detection Module using YOLO +Supports detecting faces in images, including human faces, animal faces, anime faces, sketches, etc. +""" + +import io +import traceback +from typing import Dict, List, Union + +import numpy as np +from PIL import Image, ImageDraw +from loguru import logger +from ultralytics import YOLO + + +class FaceDetector: + """ + Face detection using YOLO models + Supports detecting: human faces, animal faces, anime faces, sketch faces, etc. + """ + + def __init__(self, model_path: str = None, conf_threshold: float = 0.25, device: str = None): + """ + Initialize face detector + + Args: + model_path: YOLO model path, if None uses default pretrained model + conf_threshold: Confidence threshold, default 0.25 + device: Device ('cpu', 'cuda', '0', '1', etc.), None for auto selection + """ + + self.conf_threshold = conf_threshold + self.device = device + + if model_path is None: + # Use YOLO11 pretrained model, can detect COCO dataset classes (including person) + # Or use dedicated face detection model + logger.info("Loading default YOLO11n model for face detection") + try: + self.model = YOLO("yolo11n.pt") # Lightweight model + except Exception as e: + logger.warning(f"Failed to load default model, trying yolov8n: {e}") + self.model = YOLO("yolov8n.pt") + else: + logger.info(f"Loading YOLO model from {model_path}") + self.model = YOLO(model_path) + + # Person class ID in COCO dataset is 0 + # YOLO can detect person, for more precise face detection, recommend using dedicated face detection models + # Such as YOLOv8-face or RetinaFace, can be specified via model_path parameter + # First use YOLO to detect person region, then can further detect faces within + self.target_classes = { + "person": 0, # Face (by detecting person class) + # Can be extended to detect animal faces (cat, dog, etc.) and other classes + } + + def detect_faces( + self, + image: Union[str, Image.Image, bytes, np.ndarray], + return_image: bool = False, + ) -> Dict: + """ + Detect faces in image + + Args: + image: Input image, can be path, PIL Image, bytes or numpy array + return_image: Whether to return annotated image with detection boxes + return_boxes: Whether to return detection box information + + Returns: + Dict containing: + - faces: List of face detection results, each containing: + - bbox: [x1, y1, x2, y2] bounding box coordinates (absolute pixel coordinates) + - confidence: Confidence score (0.0-1.0) + - class_id: Class ID + - class_name: Class name + - image (optional): PIL Image with detection boxes drawn (if return_image=True) + """ + try: + # Load image + if isinstance(image, str): + img = Image.open(image).convert("RGB") + elif isinstance(image, bytes): + img = Image.open(io.BytesIO(image)).convert("RGB") + elif isinstance(image, np.ndarray): + img = Image.fromarray(image).convert("RGB") + elif isinstance(image, Image.Image): + img = image.convert("RGB") + else: + raise ValueError(f"Unsupported image type: {type(image)}") + + # Use YOLO for detection + # Note: YOLO by default detects person, we focus on person detection + # For more precise face detection, can train or use dedicated face detection models + results = self.model.predict( + source=img, + conf=self.conf_threshold, + device=self.device, + verbose=False, + ) + + faces = [] + annotated_img = img.copy() if return_image else None + + if len(results) > 0: + result = results[0] + boxes = result.boxes + + if boxes is not None and len(boxes) > 0: + for i in range(len(boxes)): + # Get bounding box coordinates (xyxy format) + bbox = boxes.xyxy[i].cpu().numpy().tolist() + confidence = float(boxes.conf[i].cpu().numpy()) + class_id = int(boxes.cls[i].cpu().numpy()) + + # Get class name + class_name = result.names.get(class_id, "unknown") + + # Process target classes (person, etc.) + # For person, the entire body box contains face region + # For more precise face detection, can: + # 1. Use dedicated face detection models (RetinaFace, YOLOv8-face) + # 2. Further use face detection model within current person box + # 3. Use specifically trained multi-class detection models (faces, animal faces, anime faces, etc.) + if class_id in self.target_classes.values(): + face_info = { + "bbox": bbox, # [x1, y1, x2, y2] - absolute pixel coordinates + "confidence": confidence, + "class_id": class_id, + "class_name": class_name, + } + faces.append(face_info) + + # Draw annotations on image if needed + if return_image and annotated_img is not None: + draw = ImageDraw.Draw(annotated_img) + x1, y1, x2, y2 = bbox + # Draw bounding box + draw.rectangle( + [x1, y1, x2, y2], + outline="red", + width=2, + ) + # Draw label + label = f"{class_name} {confidence:.2f}" + draw.text((x1, y1 - 15), label, fill="red") + + result_dict = {"faces": faces} + + if return_image and annotated_img is not None: + result_dict["image"] = annotated_img + + logger.info(f"Detected {len(faces)} faces in image") + return result_dict + + except Exception as e: + logger.error(f"Face detection failed: {traceback.format_exc()}") + raise RuntimeError(f"Face detection error: {e}") + + def detect_faces_from_bytes(self, image_bytes: bytes, **kwargs) -> Dict: + """ + Detect faces from byte data + + Args: + image_bytes: Image byte data + **kwargs: Additional parameters passed to detect_faces + + Returns: + Detection result dictionary + """ + return self.detect_faces(image_bytes, **kwargs) + + def extract_face_regions(self, image: Union[str, Image.Image, bytes], expand_ratio: float = 0.1) -> List[Image.Image]: + """ + Extract detected face regions + + Args: + image: Input image + expand_ratio: Bounding box expansion ratio to include more context + + Returns: + List of extracted face region images + """ + result = self.detect_faces(image) + faces = result["faces"] + + # Load original image + if isinstance(image, str): + img = Image.open(image).convert("RGB") + elif isinstance(image, bytes): + img = Image.open(io.BytesIO(image)).convert("RGB") + elif isinstance(image, Image.Image): + img = image.convert("RGB") + else: + raise ValueError(f"Unsupported image type: {type(image)}") + + face_regions = [] + img_width, img_height = img.size + + for face in faces: + x1, y1, x2, y2 = face["bbox"] + + # Expand bounding box + width = x2 - x1 + height = y2 - y1 + expand_x = width * expand_ratio + expand_y = height * expand_ratio + + x1 = max(0, int(x1 - expand_x)) + y1 = max(0, int(y1 - expand_y)) + x2 = min(img_width, int(x2 + expand_x)) + y2 = min(img_height, int(y2 + expand_y)) + + # Crop region + face_region = img.crop((x1, y1, x2, y2)) + face_regions.append(face_region) + + return face_regions + + def count_faces(self, image: Union[str, Image.Image, bytes]) -> int: + """ + Count number of faces in image + + Args: + image: Input image + + Returns: + Number of detected faces + """ + result = self.detect_faces(image, return_image=False) + return len(result["faces"]) + + +def detect_faces_in_image( + image_path: str, + model_path: str = None, + conf_threshold: float = 0.25, + return_image: bool = False, +) -> Dict: + """ + Convenience function: detect faces in image + + Args: + image_path: Image path + model_path: YOLO model path + conf_threshold: Confidence threshold + return_image: Whether to return annotated image + + Returns: + Detection result dictionary containing: + - faces: List of face detection results with bbox coordinates [x1, y1, x2, y2] + - image (optional): Annotated image with detection boxes + """ + detector = FaceDetector(model_path=model_path, conf_threshold=conf_threshold) + return detector.detect_faces(image_path, return_image=return_image) + + +if __name__ == "__main__": + # Test code + import sys + + if len(sys.argv) < 2: + print("Usage: python face_detector.py ") + sys.exit(1) + + image_path = sys.argv[1] + detector = FaceDetector() + result = detector.detect_faces(image_path, return_image=True) + + print(f"Detected {len(result['faces'])} faces:") + for i, face in enumerate(result["faces"]): + print(f" Face {i + 1}: {face}") + + output_path = "detected_faces.png" + result["image"].save(output_path) + print(f"Annotated image saved to: {output_path}") diff --git a/lightx2v/deploy/common/pipeline.py b/lightx2v/deploy/common/pipeline.py new file mode 100644 index 0000000..7d4868d --- /dev/null +++ b/lightx2v/deploy/common/pipeline.py @@ -0,0 +1,167 @@ +import json +import sys + +from loguru import logger + + +class Pipeline: + def __init__(self, pipeline_json_file): + self.pipeline_json_file = pipeline_json_file + x = json.load(open(pipeline_json_file)) + self.data = x["data"] + self.meta = x["meta"] + self.inputs = {} + self.outputs = {} + self.temps = {} + self.model_lists = [] + self.types = {} + self.queues = set() + self.model_name_inner_to_outer = self.meta.get("model_name_inner_to_outer", {}) + self.model_name_outer_to_inner = self.meta.get("model_name_outer_to_inner", {}) + self.tidy_pipeline() + + def init_dict(self, base, task, model_cls): + if task not in base: + base[task] = {} + if model_cls not in base[task]: + base[task][model_cls] = {} + + # tidy each task item eg, ['t2v', 'wan2.1', 'multi_stage'] + def tidy_task(self, task, model_cls, stage, v3): + out2worker = {} + out2num = {} + cur_inps = set() + cur_temps = set() + cur_types = {} + for worker_name, worker_item in v3.items(): + prevs = [] + for inp in worker_item["inputs"]: + cur_types[inp] = self.get_type(inp) + if inp in out2worker: + prevs.append(out2worker[inp]) + out2num[inp] -= 1 + if out2num[inp] <= 0: + cur_temps.add(inp) + else: + cur_inps.add(inp) + worker_item["previous"] = prevs + + for out in worker_item["outputs"]: + cur_types[out] = self.get_type(out) + out2worker[out] = worker_name + if out not in out2num: + out2num[out] = 0 + out2num[out] += 1 + + if "queue" not in worker_item: + worker_item["queue"] = "-".join([task, model_cls, stage, worker_name]) + self.queues.add(worker_item["queue"]) + + cur_outs = [out for out, num in out2num.items() if num > 0] + self.inputs[task][model_cls][stage] = list(cur_inps) + self.outputs[task][model_cls][stage] = cur_outs + self.temps[task][model_cls][stage] = list(cur_temps) + self.types[task][model_cls][stage] = cur_types + + # tidy previous dependence workers and queue name + def tidy_pipeline(self): + for task, v1 in self.data.items(): + for model_cls, v2 in v1.items(): + for stage, v3 in v2.items(): + self.init_dict(self.inputs, task, model_cls) + self.init_dict(self.outputs, task, model_cls) + self.init_dict(self.temps, task, model_cls) + self.init_dict(self.types, task, model_cls) + self.tidy_task(task, model_cls, stage, v3) + self.model_lists.append({"task": task, "model_cls": model_cls, "stage": stage}) + logger.info(f"pipelines: {json.dumps(self.data, indent=4)}") + logger.info(f"inputs: {self.inputs}") + logger.info(f"outputs: {self.outputs}") + logger.info(f"temps: {self.temps}") + logger.info(f"types: {self.types}") + logger.info(f"model_lists: {self.model_lists}") + logger.info(f"queues: {self.queues}") + + def get_item_by_keys(self, keys): + item = self.data + for k in keys: + if k not in item: + raise Exception(f"{keys} are not in {self.pipeline_json_file}!") + item = item[k] + return item + + # eg. keys: ['t2v', 'wan2.1', 'multi_stage', 'text_encoder'] + def get_worker(self, keys): + return self.get_item_by_keys(keys) + + # eg. keys: ['t2v', 'wan2.1', 'multi_stage'] + def get_workers(self, keys): + return self.get_item_by_keys(keys) + + # eg. keys: ['t2v', 'wan2.1', 'multi_stage'] + def get_inputs(self, keys): + item = self.inputs + for k in keys: + if k not in item: + raise Exception(f"{keys} are not in inputs!") + item = item[k] + return item + + # eg. keys: ['t2v', 'wan2.1', 'multi_stage'] + def get_outputs(self, keys): + item = self.outputs + for k in keys: + if k not in item: + raise Exception(f"{keys} are not in outputs!") + item = item[k] + return item + + # eg. keys: ['t2v', 'wan2.1', 'multi_stage'] + def get_temps(self, keys): + item = self.temps + for k in keys: + if k not in item: + raise Exception(f"{keys} are not in temps!") + item = item[k] + return item + + # eg. keys: ['t2v', 'wan2.1', 'multi_stage'] + def get_types(self, keys): + item = self.types + for k in keys: + if k not in item: + raise Exception(f"{keys} are not in types!") + item = item[k] + return item + + def check_item_by_keys(self, keys): + item = self.data + for k in keys: + if k not in item: + return False + item = item[k] + return True + + def get_model_lists(self): + return self.model_lists + + def get_type(self, name): + return self.meta["special_types"].get(name, "OBJECT") + + def get_monitor_config(self): + return self.meta["monitor"] + + def get_queues(self): + return self.queues + + def inner_model_name(self, name): + return self.model_name_outer_to_inner.get(name, name) + + def outer_model_name(self, name): + return self.model_name_inner_to_outer.get(name, name) + + +if __name__ == "__main__": + pipeline = Pipeline(sys.argv[1]) + print(pipeline.get_workers(["t2v", "wan2.1", "multi_stage"])) + print(pipeline.get_worker(["i2v", "wan2.1", "multi_stage", "dit"])) diff --git a/lightx2v/deploy/common/podcasts.py b/lightx2v/deploy/common/podcasts.py new file mode 100644 index 0000000..52d255d --- /dev/null +++ b/lightx2v/deploy/common/podcasts.py @@ -0,0 +1,696 @@ +# -*- coding: utf-8 -*- + +import asyncio +import io +import json +import os +import struct +import uuid +from dataclasses import dataclass +from enum import IntEnum +from typing import Callable, List, Optional + +import websockets +from loguru import logger +from pydub import AudioSegment + + +# Protocol definitions (from podcasts_protocols) +class MsgType(IntEnum): + """Message type enumeration""" + + Invalid = 0 + FullClientRequest = 0b1 + AudioOnlyClient = 0b10 + FullServerResponse = 0b1001 + AudioOnlyServer = 0b1011 + FrontEndResultServer = 0b1100 + Error = 0b1111 + ServerACK = AudioOnlyServer + + +class MsgTypeFlagBits(IntEnum): + """Message type flag bits""" + + NoSeq = 0 + PositiveSeq = 0b1 + LastNoSeq = 0b10 + NegativeSeq = 0b11 + WithEvent = 0b100 + + +class VersionBits(IntEnum): + """Version bits""" + + Version1 = 1 + + +class HeaderSizeBits(IntEnum): + """Header size bits""" + + HeaderSize4 = 1 + HeaderSize8 = 2 + HeaderSize12 = 3 + HeaderSize16 = 4 + + +class SerializationBits(IntEnum): + """Serialization method bits""" + + Raw = 0 + JSON = 0b1 + Thrift = 0b11 + Custom = 0b1111 + + +class CompressionBits(IntEnum): + """Compression method bits""" + + None_ = 0 + Gzip = 0b1 + Custom = 0b1111 + + +class EventType(IntEnum): + """Event type enumeration""" + + None_ = 0 + StartConnection = 1 + StartTask = 1 + FinishConnection = 2 + FinishTask = 2 + ConnectionStarted = 50 + TaskStarted = 50 + ConnectionFailed = 51 + TaskFailed = 51 + ConnectionFinished = 52 + TaskFinished = 52 + StartSession = 100 + CancelSession = 101 + FinishSession = 102 + SessionStarted = 150 + SessionCanceled = 151 + SessionFinished = 152 + SessionFailed = 153 + UsageResponse = 154 + ChargeData = 154 + TaskRequest = 200 + UpdateConfig = 201 + AudioMuted = 250 + SayHello = 300 + TTSSentenceStart = 350 + TTSSentenceEnd = 351 + TTSResponse = 352 + TTSEnded = 359 + PodcastRoundStart = 360 + PodcastRoundResponse = 361 + PodcastRoundEnd = 362 + PodcastEnd = 363 + + +@dataclass +class Message: + """Message object""" + + version: VersionBits = VersionBits.Version1 + header_size: HeaderSizeBits = HeaderSizeBits.HeaderSize4 + type: MsgType = MsgType.Invalid + flag: MsgTypeFlagBits = MsgTypeFlagBits.NoSeq + serialization: SerializationBits = SerializationBits.JSON + compression: CompressionBits = CompressionBits.None_ + event: EventType = EventType.None_ + session_id: str = "" + connect_id: str = "" + sequence: int = 0 + error_code: int = 0 + payload: bytes = b"" + + @classmethod + def from_bytes(cls, data: bytes) -> "Message": + """Create message object from bytes""" + if len(data) < 3: + raise ValueError(f"Data too short: expected at least 3 bytes, got {len(data)}") + type_and_flag = data[1] + msg_type = MsgType(type_and_flag >> 4) + flag = MsgTypeFlagBits(type_and_flag & 0b00001111) + msg = cls(type=msg_type, flag=flag) + msg.unmarshal(data) + return msg + + def marshal(self) -> bytes: + """Serialize message to bytes""" + buffer = io.BytesIO() + header = [ + (self.version << 4) | self.header_size, + (self.type << 4) | self.flag, + (self.serialization << 4) | self.compression, + ] + header_size = 4 * self.header_size + if padding := header_size - len(header): + header.extend([0] * padding) + buffer.write(bytes(header)) + writers = self._get_writers() + for writer in writers: + writer(buffer) + return buffer.getvalue() + + def unmarshal(self, data: bytes) -> None: + """Deserialize message from bytes""" + buffer = io.BytesIO(data) + version_and_header_size = buffer.read(1)[0] + self.version = VersionBits(version_and_header_size >> 4) + self.header_size = HeaderSizeBits(version_and_header_size & 0b00001111) + buffer.read(1) + serialization_compression = buffer.read(1)[0] + self.serialization = SerializationBits(serialization_compression >> 4) + self.compression = CompressionBits(serialization_compression & 0b00001111) + header_size = 4 * self.header_size + read_size = 3 + if padding_size := header_size - read_size: + buffer.read(padding_size) + readers = self._get_readers() + for reader in readers: + reader(buffer) + remaining = buffer.read() + if remaining: + raise ValueError(f"Unexpected data after message: {remaining}") + + def _get_writers(self) -> List[Callable[[io.BytesIO], None]]: + """Get list of writer functions""" + writers = [] + if self.flag == MsgTypeFlagBits.WithEvent: + writers.extend([self._write_event, self._write_session_id]) + if self.type in [MsgType.FullClientRequest, MsgType.FullServerResponse, MsgType.FrontEndResultServer, MsgType.AudioOnlyClient, MsgType.AudioOnlyServer]: + if self.flag in [MsgTypeFlagBits.PositiveSeq, MsgTypeFlagBits.NegativeSeq]: + writers.append(self._write_sequence) + elif self.type == MsgType.Error: + writers.append(self._write_error_code) + else: + raise ValueError(f"Unsupported message type: {self.type}") + writers.append(self._write_payload) + return writers + + def _get_readers(self) -> List[Callable[[io.BytesIO], None]]: + """Get list of reader functions""" + readers = [] + if self.type in [MsgType.FullClientRequest, MsgType.FullServerResponse, MsgType.FrontEndResultServer, MsgType.AudioOnlyClient, MsgType.AudioOnlyServer]: + if self.flag in [MsgTypeFlagBits.PositiveSeq, MsgTypeFlagBits.NegativeSeq]: + readers.append(self._read_sequence) + elif self.type == MsgType.Error: + readers.append(self._read_error_code) + if self.flag == MsgTypeFlagBits.WithEvent: + readers.extend([self._read_event, self._read_session_id, self._read_connect_id]) + readers.append(self._read_payload) + return readers + + def _write_event(self, buffer: io.BytesIO) -> None: + buffer.write(struct.pack(">i", self.event)) + + def _write_session_id(self, buffer: io.BytesIO) -> None: + if self.event in [EventType.StartConnection, EventType.FinishConnection, EventType.ConnectionStarted, EventType.ConnectionFailed]: + return + session_id_bytes = self.session_id.encode("utf-8") + size = len(session_id_bytes) + if size > 0xFFFFFFFF: + raise ValueError(f"Session ID size ({size}) exceeds max(uint32)") + buffer.write(struct.pack(">I", size)) + if size > 0: + buffer.write(session_id_bytes) + + def _write_sequence(self, buffer: io.BytesIO) -> None: + buffer.write(struct.pack(">i", self.sequence)) + + def _write_error_code(self, buffer: io.BytesIO) -> None: + buffer.write(struct.pack(">I", self.error_code)) + + def _write_payload(self, buffer: io.BytesIO) -> None: + size = len(self.payload) + if size > 0xFFFFFFFF: + raise ValueError(f"Payload size ({size}) exceeds max(uint32)") + buffer.write(struct.pack(">I", size)) + buffer.write(self.payload) + + def _read_event(self, buffer: io.BytesIO) -> None: + event_bytes = buffer.read(4) + if event_bytes: + self.event = EventType(struct.unpack(">i", event_bytes)[0]) + + def _read_session_id(self, buffer: io.BytesIO) -> None: + if self.event in [EventType.StartConnection, EventType.FinishConnection, EventType.ConnectionStarted, EventType.ConnectionFailed, EventType.ConnectionFinished]: + return + size_bytes = buffer.read(4) + if size_bytes: + size = struct.unpack(">I", size_bytes)[0] + if size > 0: + session_id_bytes = buffer.read(size) + if len(session_id_bytes) == size: + self.session_id = session_id_bytes.decode("utf-8") + + def _read_connect_id(self, buffer: io.BytesIO) -> None: + if self.event in [EventType.ConnectionStarted, EventType.ConnectionFailed, EventType.ConnectionFinished]: + size_bytes = buffer.read(4) + if size_bytes: + size = struct.unpack(">I", size_bytes)[0] + if size > 0: + self.connect_id = buffer.read(size).decode("utf-8") + + def _read_sequence(self, buffer: io.BytesIO) -> None: + sequence_bytes = buffer.read(4) + if sequence_bytes: + self.sequence = struct.unpack(">i", sequence_bytes)[0] + + def _read_error_code(self, buffer: io.BytesIO) -> None: + error_code_bytes = buffer.read(4) + if error_code_bytes: + self.error_code = struct.unpack(">I", error_code_bytes)[0] + + def _read_payload(self, buffer: io.BytesIO) -> None: + size_bytes = buffer.read(4) + if size_bytes: + size = struct.unpack(">I", size_bytes)[0] + if size > 0: + self.payload = buffer.read(size) + + +async def receive_message(websocket: websockets.WebSocketClientProtocol) -> Message: + """Receive message from websocket""" + try: + data = await websocket.recv() + if isinstance(data, str): + raise ValueError(f"Unexpected text message: {data}") + elif isinstance(data, bytes): + msg = Message.from_bytes(data) + # logger.debug(f"Received: {msg}") + return msg + else: + raise ValueError(f"Unexpected message type: {type(data)}") + except Exception as e: + logger.error(f"Failed to receive message: {e}") + raise + + +async def wait_for_event(websocket: websockets.WebSocketClientProtocol, msg_type: MsgType, event_type: EventType) -> Message: + """Wait for specific event""" + while True: + msg = await receive_message(websocket) + if msg.type != msg_type or msg.event != event_type: + raise ValueError(f"Unexpected message: {msg}") + if msg.type == msg_type and msg.event == event_type: + return msg + + +async def start_connection(websocket: websockets.WebSocketClientProtocol) -> None: + """Start connection""" + msg = Message(type=MsgType.FullClientRequest, flag=MsgTypeFlagBits.WithEvent) + msg.event = EventType.StartConnection + msg.payload = b"{}" + logger.debug(f"Sending: {msg}") + await websocket.send(msg.marshal()) + + +async def finish_connection(websocket: websockets.WebSocketClientProtocol) -> None: + """Finish connection""" + msg = Message(type=MsgType.FullClientRequest, flag=MsgTypeFlagBits.WithEvent) + msg.event = EventType.FinishConnection + msg.payload = b"{}" + logger.debug(f"Sending: {msg}") + await websocket.send(msg.marshal()) + + +async def start_session(websocket: websockets.WebSocketClientProtocol, payload: bytes, session_id: str) -> None: + """Start session""" + msg = Message(type=MsgType.FullClientRequest, flag=MsgTypeFlagBits.WithEvent) + msg.event = EventType.StartSession + msg.session_id = session_id + msg.payload = payload + logger.debug(f"Sending: {msg}") + await websocket.send(msg.marshal()) + + +async def finish_session(websocket: websockets.WebSocketClientProtocol, session_id: str) -> None: + """Finish session""" + msg = Message(type=MsgType.FullClientRequest, flag=MsgTypeFlagBits.WithEvent) + msg.event = EventType.FinishSession + msg.session_id = session_id + msg.payload = b"{}" + logger.debug(f"Sending: {msg}") + await websocket.send(msg.marshal()) + + +class PodcastRoundPostProcessor: + def __init__(self, session_id, data_manager): + self.session_id = session_id + self.data_manager = data_manager + + self.temp_merged_audio_name = "merged_audio.mp3" + self.output_merged_audio_name = f"{session_id}-merged_audio.mp3" + self.subtitle_timestamps = [] # 记录字幕时间戳 + self.current_audio_duration = 0.0 # 当前音频时长 + self.merged_audio = None # 用于存储合并的音频对象 + self.merged_audio_bytes = None + + async def init(self): + if self.data_manager: + await self.data_manager.create_podcast_temp_session_dir(self.session_id) + + async def postprocess_round(self, current_round, voice, audio, podcast_texts): + text = "" + if podcast_texts: + text = podcast_texts[-1].get("text", "") + logger.debug(f"Processing round: {current_round}, voice: {voice}, text: {text}, audio: {len(audio)} bytes") + + new_segment = AudioSegment.from_mp3(io.BytesIO(bytes(audio))) + round_duration = len(new_segment) / 1000.0 + + if self.merged_audio is None: + self.merged_audio = new_segment + else: + self.merged_audio = self.merged_audio + new_segment + + # 保存合并后的音频到临时文件(用于前端实时访问) + merged_io = io.BytesIO() + self.merged_audio.export(merged_io, format="mp3") + self.merged_audio_bytes = merged_io.getvalue() + if self.data_manager: + await self.data_manager.save_podcast_temp_session_file(self.session_id, self.temp_merged_audio_name, self.merged_audio_bytes) + merged_file_size = len(self.merged_audio_bytes) + + # 记录字幕时间戳 + self.subtitle_timestamps.append( + { + "start": self.current_audio_duration, + "end": self.current_audio_duration + round_duration, + "text": text, + "speaker": voice, + } + ) + self.current_audio_duration += round_duration + logger.debug(f"Merged audio updated: {merged_file_size} bytes, duration: {self.current_audio_duration:.2f}s") + + return { + "url": f"/api/v1/podcast/audio?session_id={self.session_id}&filename={self.temp_merged_audio_name}", + "size": merged_file_size, + "duration": self.current_audio_duration, + "round": current_round, + "text": text, + "speaker": voice, + } + + async def postprocess_final(self): + if self.data_manager: + await self.data_manager.save_podcast_output_file(self.output_merged_audio_name, self.merged_audio_bytes) + return { + "subtitles": self.subtitle_timestamps, + "audio_name": self.output_merged_audio_name, + } + + async def cleanup(self): + if self.data_manager: + await self.data_manager.clear_podcast_temp_session_dir(self.session_id) + self.data_manager = None + + +class VolcEnginePodcastClient: + """ + VolcEngine Podcast客户端 + + 支持多种播客类型: + - action=0: 文本转播客 + - action=3: NLP文本转播客 + - action=4: 提示词生成播客 + """ + + def __init__(self): + self.endpoint = "wss://openspeech.bytedance.com/api/v3/sami/podcasttts" + self.appid = os.getenv("VOLCENGINE_PODCAST_APPID") + self.access_token = os.getenv("VOLCENGINE_PODCAST_ACCESS_TOKEN") + self.app_key = "aGjiRDfUWi" + self.proxy = os.getenv("HTTPS_PROXY", None) + if self.proxy: + logger.info(f"volcengine podcast use proxy: {self.proxy}") + + async def podcast_request( + self, + session_id: str, + data_manager=None, + text: str = "", + input_url: str = "", + prompt_text: str = "", + nlp_texts: str = "", + action: int = 0, + resource_id: str = "volc.service_type.10050", + encoding: str = "mp3", + input_id: str = "test_podcast", + speaker_info: str = '{"random_order":false}', + use_head_music: bool = False, + use_tail_music: bool = False, + only_nlp_text: bool = False, + return_audio_url: bool = False, + skip_round_audio_save: bool = False, + on_round_complete: Optional[Callable] = None, + ): + """ + 执行播客请求 + + Args: + text: 输入文本 (action=0时使用) + input_url: Web URL或文件URL (action=0时使用) + prompt_text: 提示词文本 (action=4时必须) + nlp_texts: NLP文本 (action=3时必须) + action: 播客类型 (0/3/4) + resource_id: 音频资源ID + encoding: 音频格式 (mp3/wav) + input_id: 唯一输入标识 + speaker_info: 播客说话人信息 + use_head_music: 是否使用开头音乐 + use_tail_music: 是否使用结尾音乐 + only_nlp_text: 是否只返回播客文本 + return_audio_url: 是否返回音频URL + skip_round_audio_save: 是否跳过单轮音频保存 + output_dir: 输出目录 + on_round_complete: 轮次完成回调函数 + """ + if not self.appid or not self.access_token: + logger.error("APP ID or Access Key is required") + return None, None + + headers = { + "X-Api-App-Id": self.appid, + "X-Api-App-Key": self.app_key, + "X-Api-Access-Key": self.access_token, + "X-Api-Resource-Id": resource_id, + "X-Api-Connect-Id": str(uuid.uuid4()), + } + + is_podcast_round_end = True + audio_received = False + last_round_id = -1 + task_id = "" + websocket = None + retry_num = 5 + audio = bytearray() + voice = "" + current_round = 0 + podcast_texts = [] + + post_processor = PodcastRoundPostProcessor(session_id, data_manager) + await post_processor.init() + + try: + while retry_num > 0: + # 建立WebSocket连接 + websocket = await websockets.connect(self.endpoint, additional_headers=headers) + logger.debug(f"WebSocket connected: {websocket.response.headers}") + + # 构建请求参数 + if input_url: + req_params = { + "input_id": input_id, + "nlp_texts": json.loads(nlp_texts) if nlp_texts else None, + "prompt_text": prompt_text, + "action": action, + "use_head_music": use_head_music, + "use_tail_music": use_tail_music, + "input_info": { + "input_url": input_url, + "return_audio_url": return_audio_url, + "only_nlp_text": only_nlp_text, + }, + "speaker_info": json.loads(speaker_info) if speaker_info else None, + "audio_config": {"format": encoding, "sample_rate": 24000, "speech_rate": 0}, + } + else: + req_params = { + "input_id": input_id, + "input_text": text, + "nlp_texts": json.loads(nlp_texts) if nlp_texts else None, + "prompt_text": prompt_text, + "action": action, + "use_head_music": use_head_music, + "use_tail_music": use_tail_music, + "input_info": { + "input_url": input_url, + "return_audio_url": return_audio_url, + "only_nlp_text": only_nlp_text, + }, + "speaker_info": json.loads(speaker_info) if speaker_info else None, + "audio_config": {"format": encoding, "sample_rate": 24000, "speech_rate": 0}, + } + + logger.debug(f"Request params: {json.dumps(req_params, indent=2, ensure_ascii=False)}") + + if not is_podcast_round_end: + req_params["retry_info"] = {"retry_task_id": task_id, "last_finished_round_id": last_round_id} + + # Start connection + await start_connection(websocket) + await wait_for_event(websocket, MsgType.FullServerResponse, EventType.ConnectionStarted) + + session_id = str(uuid.uuid4()) + if not task_id: + task_id = session_id + + # Start session + await start_session(websocket, json.dumps(req_params).encode(), session_id) + await wait_for_event(websocket, MsgType.FullServerResponse, EventType.SessionStarted) + + # Finish session + await finish_session(websocket, session_id) + + while True: + msg = await receive_message(websocket) + + # 音频数据块 + if msg.type == MsgType.AudioOnlyServer and msg.event == EventType.PodcastRoundResponse: + if not audio_received and audio: + audio_received = True + audio.extend(msg.payload) + + # 错误信息 + elif msg.type == MsgType.Error: + raise RuntimeError(f"Server error: {msg.payload.decode()}") + + elif msg.type == MsgType.FullServerResponse: + # 播客 round 开始 + if msg.event == EventType.PodcastRoundStart: + data = json.loads(msg.payload.decode()) + if data.get("text"): + filtered_payload = {"text": data.get("text"), "speaker": data.get("speaker")} + podcast_texts.append(filtered_payload) + voice = data.get("speaker") + current_round = data.get("round_id") + if current_round == -1: + voice = "head_music" + if current_round == 9999: + voice = "tail_music" + is_podcast_round_end = False + logger.debug(f"New round started: {data}") + + # 播客 round 结束 + if msg.event == EventType.PodcastRoundEnd: + data = json.loads(msg.payload.decode()) + logger.debug(f"Podcast round end: {data}") + if data.get("is_error"): + break + is_podcast_round_end = True + last_round_id = current_round + if audio: + round_info = await post_processor.postprocess_round(current_round, voice, audio, podcast_texts) + if on_round_complete: + await on_round_complete(round_info) + audio.clear() + + # 播客结束 + if msg.event == EventType.PodcastEnd: + data = json.loads(msg.payload.decode()) + logger.info(f"Podcast end: {data}") + + # 会话结束 + if msg.event == EventType.SessionFinished: + break + + if not audio_received and not only_nlp_text: + raise RuntimeError("No audio data received") + + # 保持连接 + await finish_connection(websocket) + await wait_for_event(websocket, MsgType.FullServerResponse, EventType.ConnectionFinished) + + # 播客结束, 保存最终音频文件 + if is_podcast_round_end: + podcast_info = await post_processor.postprocess_final() + return podcast_info + else: + logger.error(f"Current podcast not finished, resuming from round {last_round_id}") + retry_num -= 1 + await asyncio.sleep(1) + if websocket: + await websocket.close() + + finally: + await post_processor.cleanup() + if websocket: + await websocket.close() + return None + + +async def test(args): + """ + Podcast测试函数 + + Args: + args: dict, 包含所有podcast参数 + """ + client = VolcEnginePodcastClient() + + # 设置默认参数 + params = { + "text": "", + "input_url": "https://zhuanlan.zhihu.com/p/607822576", + "prompt_text": "", + "nlp_texts": "", + "action": 0, + "resource_id": "volc.service_type.10050", + "encoding": "mp3", + "input_id": "test_podcast", + "speaker_info": '{"random_order":false}', + "use_head_music": False, + "use_tail_music": False, + "only_nlp_text": False, + "return_audio_url": True, + "skip_round_audio_save": False, + "output_dir": "output", + } + + # 覆盖默认参数 + if args: + params.update(args) + + await client.podcast_request(**params) + + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument("--text", default="", help="Input text Use when action in [0]") + parser.add_argument("--input_url", default="", help="Web url or file url Use when action in [0]") + parser.add_argument("--prompt_text", default="", help="Input Prompt Text must not empty when action in [4]") + parser.add_argument("--nlp_texts", default="", help="Input NLP Texts must not empty when action in [3]") + parser.add_argument("--resource_id", default="volc.service_type.10050", help="Audio Resource ID") + parser.add_argument("--encoding", default="mp3", choices=["mp3", "wav"], help="Audio format") + parser.add_argument("--input_id", default="test_podcast", help="Unique input identifier") + parser.add_argument("--speaker_info", default='{"random_order":false}', help="Podcast Speaker Info") + parser.add_argument("--use_head_music", default=False, action="store_true", help="Enable head music") + parser.add_argument("--use_tail_music", default=False, action="store_true", help="Enable tail music") + parser.add_argument("--only_nlp_text", default=False, action="store_true", help="Enable only podcast text when action in [0, 4]") + parser.add_argument("--return_audio_url", default=False, action="store_true", help="Enable return audio url that can download") + parser.add_argument("--action", default=0, type=int, choices=[0, 3, 4], help="different podcast type") + parser.add_argument("--skip_round_audio_save", default=False, action="store_true", help="skip round audio save") + parser.add_argument("--output_dir", default="output", help="Output directory") + + args = parser.parse_args() + + kwargs = {k: v for k, v in vars(args).items() if v is not None and not (isinstance(v, bool) and not v)} + + asyncio.run(test(kwargs)) diff --git a/lightx2v/deploy/common/utils.py b/lightx2v/deploy/common/utils.py new file mode 100644 index 0000000..6258cc9 --- /dev/null +++ b/lightx2v/deploy/common/utils.py @@ -0,0 +1,253 @@ +import asyncio +import base64 +import io +import os +import subprocess +import tempfile +import time +import traceback +from datetime import datetime + +import httpx +import torchaudio +from PIL import Image +from loguru import logger + +FMT = "%Y-%m-%d %H:%M:%S" + + +def current_time(): + return datetime.now().timestamp() + + +def time2str(t): + d = datetime.fromtimestamp(t) + return d.strftime(FMT) + + +def str2time(s): + d = datetime.strptime(s, FMT) + return d.timestamp() + + +def try_catch(func): + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except Exception: + logger.error(f"Error in {func.__name__}:") + traceback.print_exc() + return None + + return wrapper + + +def class_try_catch(func): + def wrapper(self, *args, **kwargs): + try: + return func(self, *args, **kwargs) + except Exception: + logger.error(f"Error in {self.__class__.__name__}.{func.__name__}:") + traceback.print_exc() + return None + + return wrapper + + +def class_try_catch_async(func): + async def wrapper(self, *args, **kwargs): + try: + return await func(self, *args, **kwargs) + except Exception: + logger.error(f"Error in {self.__class__.__name__}.{func.__name__}:") + traceback.print_exc() + return None + + return wrapper + + +def data_name(x, task_id): + if x == "input_image": + x = x + ".png" + elif x == "input_video": + x = x + ".mp4" + elif x == "output_video": + x = x + ".mp4" + return f"{task_id}-{x}" + + +async def fetch_resource(url, timeout): + logger.info(f"Begin to download resource from url: {url}") + t0 = time.time() + async with httpx.AsyncClient() as client: + async with client.stream("GET", url, timeout=timeout) as response: + response.raise_for_status() + ans_bytes = [] + async for chunk in response.aiter_bytes(chunk_size=1024 * 1024): + ans_bytes.append(chunk) + if len(ans_bytes) > 128: + raise Exception(f"url {url} recv data is too big") + content = b"".join(ans_bytes) + logger.info(f"Download url {url} resource cost time: {time.time() - t0} seconds") + return content + + +# check, resize, read rotate meta info +def format_image_data(data, max_size=1280): + image = Image.open(io.BytesIO(data)).convert("RGB") + exif = image.getexif() + changed = False + w, h = image.size + assert w > 0 and h > 0, "image is empty" + logger.info(f"load image: {w}x{h}, exif: {exif}") + + if w > max_size or h > max_size: + ratio = max_size / max(w, h) + w = int(w * ratio) + h = int(h * ratio) + image = image.resize((w, h)) + logger.info(f"resize image to: {image.size}") + changed = True + + orientation_key = 274 + if orientation_key and orientation_key in exif: + orientation = exif[orientation_key] + if orientation == 2: + image = image.transpose(Image.FLIP_LEFT_RIGHT) + elif orientation == 3: + image = image.rotate(180, expand=True) + elif orientation == 4: + image = image.transpose(Image.FLIP_TOP_BOTTOM) + elif orientation == 5: + image = image.transpose(Image.FLIP_LEFT_RIGHT).rotate(90, expand=True) + elif orientation == 6: + image = image.rotate(270, expand=True) + elif orientation == 7: + image = image.transpose(Image.FLIP_LEFT_RIGHT).rotate(270, expand=True) + elif orientation == 8: + image = image.rotate(90, expand=True) + + # reset orientation to 1 + if orientation != 1: + logger.info(f"reset orientation from {orientation} to 1") + exif[orientation_key] = 1 + changed = True + + if not changed: + return data + output = io.BytesIO() + image.save(output, format=image.format or "JPEG", exif=exif.tobytes()) + return output.getvalue() + + +def media_to_wav(data): + with tempfile.NamedTemporaryFile() as fin: + fin.write(data) + fin.flush() + cmd = ["ffmpeg", "-i", fin.name, "-f", "wav", "-acodec", "pcm_s16le", "-ar", "44100", "-ac", "2", "pipe:1"] + p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + assert p.returncode == 0, f"media to wav failed: {p.stderr.decode()}" + return p.stdout + + +def format_audio_data(data): + if len(data) < 4: + raise ValueError("Audio file too short") + data = media_to_wav(data) + waveform, sample_rate = torchaudio.load(io.BytesIO(data), num_frames=10) + logger.info(f"load audio: {waveform.size()}, {sample_rate}") + assert waveform.numel() > 0, "audio is empty" + assert sample_rate > 0, "audio sample rate is not valid" + return data + + +async def preload_data(inp, inp_type, typ, val): + try: + if typ == "url": + timeout = int(os.getenv("REQUEST_TIMEOUT", "5")) + data = await fetch_resource(val, timeout=timeout) + elif typ == "base64": + # Decode base64 in background thread to avoid blocking event loop + data = await asyncio.to_thread(base64.b64decode, val) + # For multi-person audio directory, val should be a dict with file structure + elif typ == "directory": + data = {} + for fname, b64_data in val.items(): + data[fname] = await asyncio.to_thread(base64.b64decode, b64_data) + return {"type": "directory", "data": data} + elif typ == "stream": + # no bytes data need to be saved by data_manager + data = None + else: + raise ValueError(f"cannot read {inp}[{inp_type}] which type is {typ}!") + + # check if valid image bytes + if inp_type == "IMAGE": + data = await asyncio.to_thread(format_image_data, data) + elif inp_type == "AUDIO": + if typ != "stream" and typ != "directory": + data = await asyncio.to_thread(format_audio_data, data) + elif inp_type == "VIDEO": + # Video data doesn't need special formatting, just validate it's not empty + if len(data) == 0: + raise ValueError("Video file is empty") + logger.info(f"load video: {len(data)} bytes") + else: + raise Exception(f"cannot parse inp_type={inp_type} data") + return data + + except Exception as e: + raise ValueError(f"Failed to read {inp}, type={typ}, val={val[:100]}: {e}!") + + +async def load_inputs(params, raw_inputs, types): + inputs_data = {} + for inp in raw_inputs: + item = params.pop(inp) + bytes_data = await preload_data(inp, types[inp], item["type"], item["data"]) + + # Handle multi-person audio directory + if bytes_data is not None and isinstance(bytes_data, dict) and bytes_data.get("type") == "directory": + fs = [] + for fname, fdata in bytes_data["data"].items(): + inputs_data[f"{inp}/{fname}"] = fdata + fs.append(f"{inp}/{fname}") + params["extra_inputs"] = {inp: fs} + elif bytes_data is not None: + inputs_data[inp] = bytes_data + else: + params[inp] = item + return inputs_data + + +def check_params(params, raw_inputs, raw_outputs, types): + stream_audio = os.getenv("STREAM_AUDIO", "0") == "1" + stream_video = os.getenv("STREAM_VIDEO", "0") == "1" + for x in raw_inputs + raw_outputs: + if x in params and "type" in params[x]: + if params[x]["type"] == "stream": + if types[x] == "AUDIO": + assert stream_audio, "stream audio is not supported, please set env STREAM_AUDIO=1" + elif types[x] == "VIDEO": + assert stream_video, "stream video is not supported, please set env STREAM_VIDEO=1" + elif params[x]["type"] == "directory": + # Multi-person audio directory is only supported for AUDIO type + assert types[x] == "AUDIO", f"directory type is only supported for AUDIO input, got {types[x]}" + + +if __name__ == "__main__": + # https://github.com/recurser/exif-orientation-examples + exif_dir = "/data/nvme0/liuliang1/exif-orientation-examples" + out_dir = "/data/nvme0/liuliang1/exif-orientation-examples/outs" + os.makedirs(out_dir, exist_ok=True) + + for base_name in ["Landscape", "Portrait"]: + for i in range(9): + fin_name = os.path.join(exif_dir, f"{base_name}_{i}.jpg") + fout_name = os.path.join(out_dir, f"{base_name}_{i}_formatted.jpg") + logger.info(f"format image: {fin_name} -> {fout_name}") + with open(fin_name, "rb") as f: + data = f.read() + data = format_image_data(data) + with open(fout_name, "wb") as f: + f.write(data) diff --git a/lightx2v/deploy/common/va_controller.py b/lightx2v/deploy/common/va_controller.py new file mode 100644 index 0000000..688bce6 --- /dev/null +++ b/lightx2v/deploy/common/va_controller.py @@ -0,0 +1,202 @@ +import math +import os + +import torch +import torch.distributed as dist +from loguru import logger + +from lightx2v.models.runners.vsr.vsr_wrapper import compute_scaled_and_target_dims +from lightx2v_platform.base.global_var import AI_DEVICE + + +class NextControl: + def __init__(self, action: str, data: any = None): + # action: switch, data: prev_video tensor + # action: wait, data: None + # action: fetch, data: None + self.action = action + self.data = data + + +class VAController: + def __init__(self, model_runner): + self.reader = None + self.recorder = None + self.rank = 0 + self.world_size = 1 + if dist.is_initialized(): + self.rank = dist.get_rank() + self.world_size = dist.get_world_size() + self.target_reader_rank = int(os.getenv("READER_RANK", "0")) % self.world_size + self.target_recorder_rank = int(os.getenv("RECORDER_RANK", "0")) % self.world_size + self.init_base(model_runner.config, model_runner.input_info, model_runner.vfi_model is not None, model_runner.vsr_model is not None) + self.init_recorder() + self.init_reader(model_runner) + + def init_base(self, config, input_info, has_vfi_model, has_vsr_model): + self.audio_path = input_info.audio_path + self.output_video_path = input_info.save_result_path + if isinstance(self.output_video_path, dict): + self.output_video_path = self.output_video_path["data"] + + self.audio_sr = config.get("audio_sr", 16000) + self.target_fps = config.get("target_fps", 16) + self.max_num_frames = config.get("target_video_length", 81) + self.prev_frame_length = config.get("prev_frame_length", 5) + + self.record_fps = config.get("target_fps", 16) + if "video_frame_interpolation" in config and has_vfi_model: + self.record_fps = config["video_frame_interpolation"]["target_fps"] + self.record_fps = config.get("record_fps", self.record_fps) + + self.tgt_h = input_info.target_shape[0] + self.tgt_w = input_info.target_shape[1] + self.record_h, self.record_w = self.tgt_h, self.tgt_w + if "video_super_resolution" in config and has_vsr_model: + _, _, self.record_w, self.record_h = compute_scaled_and_target_dims( + self.record_w, + self.record_h, + scale=config["video_super_resolution"]["scale"], + multiple=128, + ) + + # how many frames to publish stream as a batch + self.slice_frame = config.get("slice_frame", self.prev_frame_length) + # estimate the max infer seconds, for immediate switch with local omni + slice_interval = self.slice_frame / self.record_fps + est_max_infer_secs = config.get("est_max_infer_secs", 0.6) + self.est_infer_end_idx = math.ceil(est_max_infer_secs / slice_interval) + self.min_stay_queue_num = self.est_infer_end_idx * 2 + 1 + + def init_recorder(self): + if not self.output_video_path or self.rank != self.target_recorder_rank: + return + logger.info(f"Rank {self.rank} init recorder with: {self.output_video_path}") + whip_shared_path = os.getenv("WHIP_SHARED_LIB", None) + if whip_shared_path and self.output_video_path.startswith("http"): + from lightx2v.deploy.common.va_recorder_x264 import X264VARecorder + + self.recorder = X264VARecorder( + whip_shared_path=whip_shared_path, + livestream_url=self.output_video_path, + fps=self.record_fps, + sample_rate=self.audio_sr, + slice_frame=self.slice_frame, + prev_frame=self.prev_frame_length, + ) + else: + from lightx2v.deploy.common.va_recorder import VARecorder + + self.recorder = VARecorder( + livestream_url=self.output_video_path, + fps=self.record_fps, + sample_rate=self.audio_sr, + slice_frame=self.slice_frame, + prev_frame=self.prev_frame_length, + ) + + def init_reader(self, model_runner=None): + if not isinstance(self.audio_path, dict): + return + assert self.audio_path["type"] == "stream", f"unexcept audio_path: {self.audio_path}" + segment_duration = self.max_num_frames / self.target_fps + prev_duration = self.prev_frame_length / self.target_fps + omni_work_dir = os.getenv("OMNI_WORK_DIR", None) + if omni_work_dir: + from lightx2v.deploy.common.va_reader_omni import OmniVAReader + + self.reader = OmniVAReader( + rank=self.rank, + world_size=self.world_size, + stream_url=self.audio_path["data"], + sample_rate=self.audio_sr, + segment_duration=segment_duration, + prev_duration=prev_duration, + target_rank=self.target_reader_rank, + model_runner=model_runner, + huoshan_tts_voice_type=self.audio_path.get("huoshan_tts_voice_type", None), + ) + else: + from lightx2v.deploy.common.va_reader import VAReader + + self.reader = VAReader( + rank=self.rank, + world_size=self.world_size, + stream_url=self.audio_path["data"], + sample_rate=self.audio_sr, + segment_duration=segment_duration, + prev_duration=prev_duration, + target_rank=self.target_reader_rank, + ) + + def start(self): + self.reader.start() + if self.rank == self.target_recorder_rank: + assert self.recorder is not None, f"recorder is required for stream audio input for rank {self.rank}" + self.recorder.start(self.record_w, self.record_h) + if self.world_size > 1: + dist.barrier() + + def next_control(self): + from lightx2v.deploy.common.va_reader_omni import OmniVAReader + + if isinstance(self.reader, OmniVAReader): + return self.omni_reader_next_control() + return NextControl(action="fetch") + + def before_control(self): + from lightx2v.deploy.common.va_reader_omni import OmniVAReader + + if isinstance(self.reader, OmniVAReader): + self.len_tensor = torch.tensor([0], dtype=torch.int32, device=AI_DEVICE) + self.flag_tensor = torch.tensor([0], dtype=torch.int32, device=AI_DEVICE) + self.prev_tensor = torch.zeros((1, 3, self.prev_frame_length, self.tgt_h, self.tgt_w), dtype=torch.float, device=AI_DEVICE) + + def omni_reader_next_control(self): + immediate_switch = self.reader.get_immediate_switch() + if immediate_switch == 1: + # truncate the stream buffer to keep the max infer time length + # and broadcast the prev video tensor to all ranks + if self.rank == self.target_recorder_rank: + logger.warning(f"runner recv immediate switch, truncate stream buffer") + video_tensor = self.recorder.truncate_stream_buffer(self.est_infer_end_idx) + if video_tensor is not None: + self.flag_tensor.fill_(1) + self.prev_tensor.copy_(video_tensor) + else: + self.flag_tensor.fill_(0) + dist.broadcast(self.flag_tensor, src=self.target_recorder_rank) + if self.flag_tensor.item() == 1: + dist.broadcast(self.prev_tensor, src=self.target_recorder_rank) + return NextControl(action="switch", data=self.prev_tensor) + else: + # get the length of stream buffer, broadcast to all ranks + if self.rank == self.target_recorder_rank: + stream_buffer_length = self.recorder.get_buffer_stream_size() + self.len_tensor.copy_(stream_buffer_length) + dist.broadcast(self.len_tensor, src=self.target_recorder_rank) + buffer_length = self.len_tensor.item() + # stream buffer is enough, skip infer + if buffer_length >= self.min_stay_queue_num: + return NextControl(action="wait") + return NextControl(action="fetch") + + def pub_livestream(self, images: torch.Tensor, audios: torch.Tensor, gen_video: torch.Tensor): + if self.recorder.realtime: + self.recorder.buffer_stream(images, audios, gen_video) + else: + self.recorder.pub_livestream(images, audios) + + def clear(self): + self.len_tensor = None + self.flag_tensor = None + self.prev_tensor = None + if self.reader is not None: + self.reader.stop() + self.reader = None + if self.recorder is not None: + self.recorder.stop() + self.recorder = None + + def __del__(self): + self.clear() diff --git a/lightx2v/deploy/common/va_reader.py b/lightx2v/deploy/common/va_reader.py new file mode 100644 index 0000000..6579d51 --- /dev/null +++ b/lightx2v/deploy/common/va_reader.py @@ -0,0 +1,274 @@ +import os +import queue +import signal +import subprocess +import threading +import time +import traceback + +import numpy as np +import torch +import torch.distributed as dist +from loguru import logger + + +class VAReader: + def __init__( + self, + rank: int, + world_size: int, + stream_url: str, + segment_duration: float = 5.0, + sample_rate: int = 16000, + audio_channels: int = 1, + buffer_size: int = 1, + prev_duration: float = 0.3125, + target_rank: int = 0, + ): + self.rank = rank + self.world_size = world_size + self.stream_url = stream_url + self.segment_duration = segment_duration + self.sample_rate = sample_rate + self.audio_channels = audio_channels + self.prev_duration = prev_duration + # int16 = 2 bytes + self.chunk_size = int(self.segment_duration * self.sample_rate) * 2 + self.prev_size = int(self.prev_duration * self.sample_rate) * 2 + self.prev_chunk = None + self.buffer_size = buffer_size + + self.audio_queue = queue.Queue(maxsize=self.buffer_size) + self.audio_thread = None + self.ffmpeg_process = None + self.bytes_buffer = bytearray() + + self.target_rank = target_rank % self.world_size + + self.flag_tensor = torch.tensor([0], dtype=torch.int32).to(device="cuda") + self.audio_tensor = torch.zeros(self.chunk_size, dtype=torch.uint8, device="cuda") + + logger.info(f"VAReader initialized for stream: {stream_url} target_rank: {self.target_rank}") + logger.info(f"Audio duration per chunk: {segment_duration}s, sample rate: {sample_rate}Hz") + + def start(self): + if self.rank == self.target_rank: + if self.stream_url.startswith("rtmp://"): + self.start_ffmpeg_process_rtmp() + elif self.stream_url.startswith("http"): + self.start_ffmpeg_process_whep() + else: + raise Exception(f"Unsupported stream URL: {self.stream_url}") + self.audio_thread = threading.Thread(target=self.audio_worker, daemon=True) + self.audio_thread.start() + logger.info(f"VAReader {self.rank}/{self.world_size} started successfully") + else: + logger.info(f"VAReader {self.rank}/{self.world_size} wait only") + if self.world_size > 1: + logger.info(f"VAReader {self.rank}/{self.world_size} wait barrier") + dist.barrier() + logger.info(f"VAReader {self.rank}/{self.world_size} end barrier") + + def start_ffmpeg_process_rtmp(self): + """Start ffmpeg process read audio from stream""" + ffmpeg_cmd = [ + "ffmpeg", + "-i", + self.stream_url, + "-vn", + # "-acodec", + # "pcm_s16le", + "-ar", + str(self.sample_rate), + "-ac", + str(self.audio_channels), + "-f", + "s16le", + "-", + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, bufsize=0) + logger.info(f"FFmpeg audio pull process started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg process: {e}") + raise + + def start_ffmpeg_process_whep(self): + """Start gstream process read audio from stream""" + ffmpeg_cmd = [ + "gst-launch-1.0", + "-q", + "whepsrc", + f"whep-endpoint={self.stream_url}", + "video-caps=none", + "!rtpopusdepay", + "!opusdec", + "plc=false", + "!audioconvert", + "!audioresample", + f"!audio/x-raw,format=S16LE,channels={self.audio_channels},rate={self.sample_rate}", + "!fdsink", + "fd=1", + ] + try: + self.ffmpeg_process = subprocess.Popen( + ffmpeg_cmd, + stdout=subprocess.PIPE, + # stderr=subprocess.PIPE, + bufsize=0, + ) + logger.info(f"FFmpeg audio pull process started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg process: {e}") + raise + + def audio_worker(self): + logger.info("Audio pull worker thread started") + try: + while True: + if not self.ffmpeg_process or self.ffmpeg_process.poll() is not None: + logger.warning("FFmpeg process exited, audio worker thread stopped") + break + self.fetch_audio_data() + time.sleep(0.01) + except: # noqa + logger.error(f"Audio pull worker error: {traceback.format_exc()}") + finally: + logger.warning("Audio pull worker thread stopped") + + def fetch_audio_data(self): + """Fetch audio data from ffmpeg process""" + try: + audio_bytes = self.ffmpeg_process.stdout.read(self.chunk_size) + if not audio_bytes: + return + self.bytes_buffer.extend(audio_bytes) + # logger.info(f"Fetch audio data: {len(audio_bytes)} bytes, bytes_buffer: {len(self.bytes_buffer)} bytes") + + if len(self.bytes_buffer) >= self.chunk_size: + audio_data = self.bytes_buffer[: self.chunk_size] + self.bytes_buffer = self.bytes_buffer[self.chunk_size :] + + # first chunk, read original 81 frames + # for other chunks, read 81 - 5 = 76 frames, concat with previous 5 frames + if self.prev_chunk is None: + logger.info(f"change chunk_size: from {self.chunk_size} to {self.chunk_size - self.prev_size}") + self.chunk_size -= self.prev_size + else: + audio_data = self.prev_chunk + audio_data + self.prev_chunk = audio_data[-self.prev_size :] + + try: + self.audio_queue.put_nowait(audio_data) + except queue.Full: + logger.warning(f"Audio queue full:{self.audio_queue.qsize()}, discarded oldest chunk") + self.audio_queue.get_nowait() + self.audio_queue.put_nowait(audio_data) + logger.info(f"Put audio data: {len(audio_data)} bytes, audio_queue: {self.audio_queue.qsize()}, chunk_size:{self.chunk_size}") + + except: # noqa + logger.error(f"Fetch audio data error: {traceback.format_exc()}") + + def braodcast_audio_data(self, audio_data): + if self.rank == self.target_rank: + if audio_data is None: + self.flag_tensor.fill_(0) + else: + self.flag_tensor.fill_(1) + self.audio_tensor.copy_(torch.frombuffer(bytearray(audio_data), dtype=torch.uint8)) + logger.info(f"rank {self.rank} send audio_tensor: {self.audio_tensor.shape}") + + dist.broadcast(self.flag_tensor, src=self.target_rank) + if self.flag_tensor.item() == 0: + return None + + dist.broadcast(self.audio_tensor, src=self.target_rank) + if self.rank != self.target_rank: + logger.info(f"rank {self.rank} recv audio_tensor: {self.audio_tensor.shape}") + audio_data = self.audio_tensor.cpu().numpy().tobytes() + return audio_data + + def bytes_to_ndarray(self, audio_data): + if audio_data is None: + return None + audio_data = np.frombuffer(audio_data, dtype=np.int16) + audio_data = audio_data.astype(np.float32) / 32768.0 + logger.info(f"Got segment audio rank={self.rank}: {audio_data.shape} {audio_data.dtype} {audio_data.min()} {audio_data.max()}") + return audio_data + + def get_audio_segment(self, timeout: float = 1.0): + audio_data = None + if self.rank == self.target_rank: + try: + audio_data = self.audio_queue.get(timeout=timeout) + except: # noqa + logger.warning(f"Failed to get audio segment: {traceback.format_exc()}") + if self.world_size > 1: + audio_data = self.braodcast_audio_data(audio_data) + audio_data = self.bytes_to_ndarray(audio_data) + return audio_data + + def stop(self): + # Stop ffmpeg process + if self.ffmpeg_process: + self.ffmpeg_process.send_signal(signal.SIGINT) + try: + self.ffmpeg_process.wait(timeout=5) + except subprocess.TimeoutExpired: + self.ffmpeg_process.kill() + logger.warning("FFmpeg reader process stopped") + + # Wait for threads to finish + if self.audio_thread and self.audio_thread.is_alive(): + self.audio_thread.join(timeout=5) + if self.audio_thread.is_alive(): + logger.error("Audio pull thread did not stop gracefully") + + while self.audio_queue and self.audio_queue.qsize() > 0: + self.audio_queue.get_nowait() + self.audio_queue = None + logger.warning("Audio pull queue cleaned") + + def __del__(self): + self.stop() + + +if __name__ == "__main__": + WORLD_SIZE = int(os.environ.get("WORLD_SIZE", 1)) + RANK = int(os.environ.get("RANK", 0)) + if WORLD_SIZE > 1: + dist.init_process_group(backend="nccl") + torch.cuda.set_device(dist.get_rank()) + logger.info(f"Distributed initialized: rank={RANK}, world_size={WORLD_SIZE}") + + reader = VAReader( + RANK, + WORLD_SIZE, + # "rtmp://localhost/live/test_audio", + "https://reverse.st-oc-01.chielo.org/10.5.64.49:8000/rtc/v1/whep/?app=live&stream=ll_test_audio&eip=10.120.114.76:8000", + segment_duration=1.0, + sample_rate=16000, + audio_channels=1, + prev_duration=1 / 16, + ) + reader.start() + fail_count = 0 + max_fail_count = 2 + + try: + while True: + audio_data = reader.get_audio_segment(timeout=2) + if audio_data is not None: + # logger.info(f"Got audio chunk, shape: {audio_data.shape}, range: [{audio_data.min()}, {audio_data.max()}]") + fail_count = 0 + else: + fail_count += 1 + if fail_count > max_fail_count: + logger.warning("Failed to get audio chunk, stop reader") + reader.stop() + break + time.sleep(0.95) + finally: + reader.stop() diff --git a/lightx2v/deploy/common/va_reader_omni.py b/lightx2v/deploy/common/va_reader_omni.py new file mode 100644 index 0000000..cdec87a --- /dev/null +++ b/lightx2v/deploy/common/va_reader_omni.py @@ -0,0 +1,508 @@ +import datetime +import json +import os +import random +import subprocess +import threading +import time +import traceback +from collections import deque +from copy import deepcopy + +import jsonschema +import numpy as np +import torch +import torch.distributed as dist +import zmq +from loguru import logger + +try: + from bson import BSON +except ImportError: + BSON = None + logger.warning("BSON is not installed") +from scipy.signal import resample + + +class AudioInfo: + def __init__(self, info: dict): + self.sample_count = info["sample_count"] + self.sample_rate = info["sample_rate"] + self.channel_count = info["channel_count"] + self.sample_fmt = info["sample_fmt"] + self.pts = info["pts"] + + def is_spec_equal(self, other: "AudioInfo") -> bool: + return self.sample_fmt == other.sample_fmt and self.sample_rate == other.sample_rate and self.channel_count == other.channel_count + + def duration(self) -> datetime.timedelta: + return datetime.timedelta(seconds=self.sample_count / self.sample_rate) + + def __str__(self): + return "AudioInfo(sample_count={}, sample_rate={}, channel_count={}, sample_fmt={}, pts={})".format(self.sample_count, self.sample_rate, self.channel_count, self.sample_fmt, self.pts) + + +class ByteBuffer: + def __init__(self): + self.buffer = deque() + self.current_size = 0 + # is the audio belonging to current turn finished + self.audio_finished = False + + def add(self, byte_data: bytes): + self.buffer.append(byte_data) + self.current_size += len(byte_data) + + def get(self, size=1024): + data = bytearray() + + while size > 0 and len(self.buffer) > 0: + chunk = self.buffer.popleft() + if len(chunk) <= size: + # 如果当前数据小于size,则将当前数据全部添加到data中 + data.extend(chunk) + self.current_size -= len(chunk) + size -= len(chunk) + else: + # 如果当前数据大于size,则将当前数据的一部分添加到data中,剩余部分留在缓冲区 + data.extend(chunk[:size]) + self.buffer.appendleft(chunk[size:]) # 剩余部分留在缓冲区 + self.current_size -= size + size = 0 + + return bytes(data) + + def mark_finished(self): + self.audio_finished = True + + def has_more_voice(self): + return not self.audio_finished + + def __len__(self): + return self.current_size + + +class ChatAdapter: + def __init__( + self, + omni_work_dir: str, + whep_url: str, + session_id: str, + account: str, + config_files: list[str], + config_schema_path: str, + seg_duration: float, + model_runner, + huoshan_tts_voice_type, + ): + assert os.path.exists(omni_work_dir), f"OMNI work directory {omni_work_dir} does not exist" + self.omni_work_dir = omni_work_dir + self.context = zmq.Context() + self.w2f_socket = self.context.socket(zmq.PULL) + self.w2f_url = ChatAdapter.select_and_bind(self.w2f_socket) + self.f2w_socket = self.context.socket(zmq.PUSH) + self.f2w_url = ChatAdapter.select_and_bind(self.f2w_socket) + self.recv_thread = None + self.audio_buffer = ByteBuffer() + self.audio_info = None + self.chat_server_cmd = [ + os.path.join(self.omni_work_dir, "bin", "seko-chatter"), + "--session-id", + session_id, + "--account", + account, + "--whep-server-url", + whep_url, + "--w2f-endpoint", + self.w2f_url, + "--f2w-endpoint", + self.f2w_url, + "--config-files", + *config_files, + ] + override_config = {} + if huoshan_tts_voice_type is not None: + logger.info(f"Use Huoshan TTS voice type: {huoshan_tts_voice_type}") + override_config["TTS"] = { + "default_voice_info": { + "voice_type": huoshan_tts_voice_type, + "provider": "huoshan_stream_tts", + } + } + with open(config_schema_path, "r") as f: + schema = json.load(f) + jsonschema.validate(instance=override_config, schema=schema) + if override_config is not None: + self.chat_server_cmd.extend(["--override-config", json.dumps(override_config)]) + self.chatter_proc = None + + self.seg_duration = seg_duration + self.reset_prev = False + self.status = "blank" + self.immediate_switch = 0 + self.model_runner = model_runner + + def launch_chat_server(self): + env = { + "RUST_LOG": "info,duplex_server=debug,backend_5o=debug", + "LD_LIBRARY_PATH": os.environ.get("LD_LIBRARY_PATH", "") + ":" + os.path.join(self.omni_work_dir, "lib/"), + "PATH": os.environ["PATH"] + ":" + os.path.join(self.omni_work_dir, "bin/"), + } + self.chatter_proc = subprocess.Popen(self.chat_server_cmd, env=env, cwd=self.omni_work_dir) + + @staticmethod + def select_and_bind(socket: zmq.Socket) -> str: + # randomly select a port between 1024 and 6553 + retry_count = 20 + err = None + while retry_count > 0: + try: + port = random.randint(1024, 65535) + # port = 5555 + url = f"tcp://localhost:{port}" + socket.bind(url) + return url + except zmq.error.ZMQError as e: + retry_count -= 1 + err = e + raise err + + # immediate switch to status, discard prev_bytes, set immediate_switch to 1 + def immediate_switch_to(self, status): + logger.warning(f"VA reader immediate switch to {status}") + self.reset_prev = True + self.status = status + self.immediate_switch = 1 + if self.model_runner is not None: + self.model_runner.pause_signal = True + logger.warning(f"Model runner pause signal set to True") + + def recv_loop(self): + while True: + try: + message = self.w2f_socket.recv() + except Exception: + logger.error(f"Error receiving message: {traceback.format_exc()}") + break + try: + message = BSON.decode(message) + msg_type = message["type"] + logger.debug("Received message type: {}".format(msg_type)) + if msg_type == "AgentAudio": + audio = message["audio"] + if audio["type"] != "Pcm": + logger.error("Unsupported audio type: {}".format(audio["type"])) + continue + pcm_data = audio["data"] + audio_info = AudioInfo(audio["info"]) + logger.debug("Received audio with duration: {}".format(audio_info.duration())) + if self.audio_info is None: + self.audio_info = audio_info + else: + # check if the audio info is the same + if not self.audio_info.is_spec_equal(audio_info): + raise ValueError("Audio info mismatch") + self.audio_buffer.add(pcm_data) + # if status is blank and has voice, set immediate switch to 1 + if self.status == "blank" and self.has_voice(self.seg_duration): + self.immediate_switch_to("voice") + elif msg_type == "AgentStartPlay": + logger.debug("Received AgentStartPlay, create new audio buffer") + self.audio_buffer = ByteBuffer() + elif msg_type == "AgentEndPlay": + logger.debug("Received AgentEndPlay, mark audio finished") + self.audio_buffer.mark_finished() + elif msg_type == "ClearAgentAudio": + logger.warning("Received ClearAgentAudio, clear audio buffer") + self.audio_buffer = None + self.audio_info = None + if self.status == "voice": + self.status = "blank" + # self.immediate_switch_to("blank") + except Exception as e: + logger.error("Error decoding message: {}, continue".format(e)) + continue + logger.warning("recv loop interrupted") + + def start(self): + self.launch_chat_server() + self.recv_thread = threading.Thread(target=self.recv_loop) + self.recv_thread.start() + + def has_voice(self, duration) -> bool: + if self.audio_info is None or self.audio_buffer.current_size == 0: + return False + bytes_count = round(duration * self.audio_info.sample_rate) * self.audio_info.channel_count * 2 # S16LE assumed + # if not has enough bytes and maybe has more voice, return False + if self.audio_buffer.current_size < bytes_count and self.audio_buffer.has_more_voice(): + logger.warning(f"Not enough bytes and maybe has more voice, content_size: {self.audio_buffer.current_size}, bytes_count: {bytes_count}") + return False + return bytes_count + + def get_audio(self, fetch_duration) -> (bytes, AudioInfo): + bytes_count = self.has_voice(fetch_duration) + if bytes_count is False: + return None + pcm_data = self.audio_buffer.get(bytes_count) + + # the actual sample count fetched + sample_count = len(pcm_data) // (self.audio_info.channel_count * 2) + logger.debug("Fetched {} bytes audio".format(sample_count)) + logger.debug("After fetch, there are {} bytes left".format(self.audio_buffer.current_size)) + audio_info = deepcopy(self.audio_info) + audio_info.sample_count = sample_count + return (pcm_data, audio_info) + + def stop(self): + self.model_runner = None + if self.chatter_proc is not None: + self.chatter_proc.terminate() + self.chatter_proc.wait() + self.chatter_proc = None + self.w2f_socket.close() + self.f2w_socket.close() + + def __del__(self): + self.stop() + + +class OmniVAReader: + def __init__( + self, + rank: int, + world_size: int, + stream_url: str, + segment_duration: float = 5.0625, + sample_rate: int = 16000, + audio_channels: int = 1, + buffer_size: int = 1, + prev_duration: float = 0.3125, + target_rank: int = 0, + model_runner=None, + huoshan_tts_voice_type=None, + ): + self.rank = rank + self.world_size = world_size + self.stream_url = stream_url + self.segment_duration = segment_duration + self.sample_rate = sample_rate + + self.audio_channels = audio_channels + self.prev_duration = prev_duration + self.all_seg_sample_count = int(self.segment_duration * self.sample_rate) + self.prev_seg_sample_count = int(self.prev_duration * self.sample_rate) + self.prev_seg_chunk = None + + self.target_rank = target_rank % self.world_size + self.flag_tensor = torch.tensor([0], dtype=torch.int32).to(device="cuda") + self.immediate_switch_tensor = torch.tensor([0], dtype=torch.int32).to(device="cuda") + chunk_size = int(self.segment_duration * self.sample_rate) * 2 + self.audio_tensor = torch.zeros(chunk_size, dtype=torch.uint8, device="cuda") + self.chat_adapter = None + self.model_runner = model_runner + self.huoshan_tts_voice_type = huoshan_tts_voice_type + + assert self.audio_channels == 1, "Only mono audio is supported for OmniVAReader" + logger.info(f"VAReader initialized for stream: {stream_url} target_rank: {self.target_rank}") + logger.info(f"Audio duration per chunk: {segment_duration}s, sample rate: {sample_rate}Hz") + + def init_omni_env(self): + self.omni_work_dir = os.getenv("OMNI_WORK_DIR", "/path/of/seko_chatter/") + self.session_id = os.getenv("OMNI_SESSION_ID", "") + self.account = os.getenv("OMNI_ACCOUNT", "") + self.config_files = os.getenv("OMNI_CONFIG_FILES", "").split(",") + self.config_schema_path = os.getenv("OMNI_CONFIG_SCHEMA_PATH", None) + assert os.path.exists(self.omni_work_dir), f"OMNI work directory {self.omni_work_dir} does not exist" + assert self.session_id and self.account, "OMNI_SESSION_ID and OMNI_ACCOUNT are required" + logger.info( + f"OMNI work directory: {self.omni_work_dir}, session_id: {self.session_id}, account: {self.account}, config_files: {self.config_files}, config_schema_path: {self.config_schema_path}" + ) + + def start(self): + if self.rank == self.target_rank: + self.init_omni_env() + assert self.stream_url.startswith("http"), "Only HTTP stream is supported for OmniVAReader" + self.chat_adapter = ChatAdapter( + omni_work_dir=self.omni_work_dir, + whep_url=self.stream_url, + session_id=self.session_id, + account=self.account, + config_files=self.config_files, + config_schema_path=self.config_schema_path, + seg_duration=self.segment_duration, + model_runner=self.model_runner, + huoshan_tts_voice_type=self.huoshan_tts_voice_type, + ) + self.chat_adapter.start() + logger.info(f"OmniVAReader {self.rank}/{self.world_size} started successfully") + else: + logger.info(f"OmniVAReader {self.rank}/{self.world_size} wait only") + if self.world_size > 1: + logger.info(f"OmniVAReader {self.rank}/{self.world_size} wait barrier") + dist.barrier() + logger.info(f"OmniVAReader {self.rank}/{self.world_size} end barrier") + + def braodcast_audio_data(self, audio_data): + if self.rank == self.target_rank: + if audio_data is None: + self.flag_tensor.fill_(0) + else: + self.flag_tensor.fill_(1) + self.audio_tensor.copy_(torch.frombuffer(bytearray(audio_data), dtype=torch.uint8)) + # logger.info(f"rank {self.rank} send audio_tensor: {self.audio_tensor.shape}") + + dist.broadcast(self.flag_tensor, src=self.target_rank) + if self.flag_tensor.item() == 0: + return None + + dist.broadcast(self.audio_tensor, src=self.target_rank) + if self.rank != self.target_rank: + # logger.info(f"rank {self.rank} recv audio_tensor: {self.audio_tensor.shape}") + audio_data = self.audio_tensor.cpu().numpy().tobytes() + return audio_data + + def bytes_to_ndarray(self, audio_data): + if audio_data is None: + return None + audio_data = np.frombuffer(audio_data, dtype=np.int16) + audio_data = audio_data.astype(np.float32) / 32768.0 + # logger.info(f"Got segment audio rank={self.rank}: {audio_data.shape} {audio_data.dtype} {audio_data.min()} {audio_data.max()}") + return audio_data + + def convert_pcm_s16le_to_mono_resampled(self, audio_data, audio_info): + audio = np.frombuffer(audio_data, dtype=np.int16) + sample_count = audio_info.sample_count + assert len(audio) == sample_count * audio_info.channel_count, f"audio length {len(audio)} != sample_count * channel_count {sample_count * audio_info.channel_count}" + # convert to mono + if audio_info.channel_count > 1: + audio = audio.reshape(-1, audio_info.channel_count).mean(axis=1) + + # logger.info(f"audio: {audio.shape} {audio.dtype} {audio.min()} {audio.max()}") + if audio_info.sample_rate != self.sample_rate: + sample_count = int(len(audio) * self.sample_rate / audio_info.sample_rate) + audio = resample(audio, sample_count).astype(np.int16) + # logger.info(f"resampled audio: {audio.shape} {audio.dtype} {audio.min()} {audio.max()} {sample_count}") + logger.warning(f"valid audio: {audio.shape} {audio.dtype} {audio.min()} {audio.max()} {sample_count}") + return audio, sample_count + + def prepare_audio_data(self, chat_audio_result): + sample_count = 0 + audio = np.array([], dtype=np.int16) + + # convert chat audio result to mono and target sample rate + if chat_audio_result is not None: + audio_data, audio_info = chat_audio_result + audio, sample_count = self.convert_pcm_s16le_to_mono_resampled(audio_data, audio_info) + + # if is not the first segment, concat with previous segment + if self.prev_seg_chunk is not None: + audio = np.concatenate([self.prev_seg_chunk, audio]) + sample_count = len(audio) + assert sample_count <= self.all_seg_sample_count, f"audio length {sample_count} > all_seg_sample_count {self.all_seg_sample_count}" + + # pad 0 to the audio to make it the same length as all_seg_sample_count + if sample_count < self.all_seg_sample_count: + pad_count = self.all_seg_sample_count - sample_count + # logger.info(f"pad {pad_count} samples to audio") + audio = np.pad(audio, (0, pad_count), mode="constant", constant_values=0) + sample_count = len(audio) + + # update prev seg chunk + self.prev_seg_chunk = audio[-self.prev_seg_sample_count :] + # logger.info(f"audio: {audio.shape} {audio.dtype} {audio.min()} {audio.max()} {sample_count}, prev seg chunk: {self.prev_seg_chunk.shape}") + return audio.tobytes() + + def get_fetch_duration(self): + fetch_duration = self.segment_duration + # after immediate switch, reset prev seg chunk + if self.chat_adapter.reset_prev: + self.prev_seg_chunk = None + self.chat_adapter.reset_prev = False + logger.warning(f"Reset prev seg chunk") + # first segment, fetch segment_duration, else fetch segment_duration - prev_duration + if self.prev_seg_chunk is not None: + fetch_duration -= self.prev_duration + return fetch_duration + + def get_audio_segment(self): + audio_data = None + if self.rank == self.target_rank: + try: + fetch_duration = self.get_fetch_duration() + # logger.info(f"Get segment, fetch_duration: {fetch_duration}") + if self.chat_adapter.status == "voice": + audio_result = self.chat_adapter.get_audio(fetch_duration) + audio_data = self.prepare_audio_data(audio_result) + # think all voice segments inferred, naturally switch to blank + if audio_result is None: + logger.info(f"Think all voice segments inferred, naturally switch to blank") + self.chat_adapter.status = "blank" + else: + audio_data = self.prepare_audio_data(None) + except Exception as e: + logger.warning(f"Failed to get voice segment: {e}") + return None + if self.world_size > 1: + audio_data = self.braodcast_audio_data(audio_data) + audio_data = self.bytes_to_ndarray(audio_data) + return audio_data + + def get_immediate_switch(self): + if self.rank == self.target_rank: + if self.chat_adapter.immediate_switch == 1: + self.immediate_switch_tensor.fill_(1) + # reset immediate switch + self.chat_adapter.immediate_switch = 0 + else: + self.immediate_switch_tensor.fill_(0) + dist.broadcast(self.immediate_switch_tensor, src=self.target_rank) + immediate_switch = self.immediate_switch_tensor.item() + return immediate_switch + + def stop(self): + self.model_runner = None + if self.chat_adapter is not None: + self.chat_adapter.stop() + self.chat_adapter = None + logger.warning("OmniVAReader stopped") + + def __del__(self): + self.stop() + + +if __name__ == "__main__": + WORLD_SIZE = int(os.environ.get("WORLD_SIZE", 1)) + RANK = int(os.environ.get("RANK", 0)) + if WORLD_SIZE > 1: + dist.init_process_group(backend="nccl") + torch.cuda.set_device(dist.get_rank()) + logger.info(f"Distributed initialized: rank={RANK}, world_size={WORLD_SIZE}") + + reader = OmniVAReader( + RANK, + WORLD_SIZE, + "https://reverse.st-oc-01.chielo.org/10.5.64.49:8000/rtc/v1/whep/?app=publish&stream=test_stream_ll&eip=10.120.114.82:8000", + segment_duration=17 / 16, + sample_rate=16000, + audio_channels=1, + prev_duration=1 / 16, + ) + reader.start() + fail_count = 0 + max_fail_count = 100000000 + + try: + while True: + audio_data = reader.get_audio_segment(timeout=1) + if audio_data is not None: + logger.info(f"Got audio chunk, shape: {audio_data.shape}, range: [{audio_data.min()}, {audio_data.max()}]") + fail_count = 0 + else: + fail_count += 1 + if fail_count > max_fail_count: + logger.warning("Failed to get audio chunk, stop reader") + reader.stop() + break + time.sleep(0.95) + finally: + reader.stop() diff --git a/lightx2v/deploy/common/va_recorder.py b/lightx2v/deploy/common/va_recorder.py new file mode 100644 index 0000000..de551d3 --- /dev/null +++ b/lightx2v/deploy/common/va_recorder.py @@ -0,0 +1,657 @@ +import os +import queue +import socket +import subprocess +import threading +import time +import traceback + +import numpy as np +import torch +import torchaudio as ta +from loguru import logger + + +def pseudo_random(a, b): + x = str(time.time()).split(".")[1] + y = int(float("0." + x) * 1000000) + return a + (y % (b - a + 1)) + + +class VARecorder: + def __init__( + self, + livestream_url: str, + fps: float = 16.0, + sample_rate: int = 16000, + slice_frame: int = 1, + prev_frame: int = 1, + ): + self.livestream_url = livestream_url + self.fps = fps + self.sample_rate = sample_rate + self.audio_port = pseudo_random(32000, 40000) + self.video_port = self.audio_port + 1 + self.ffmpeg_log_level = os.getenv("FFMPEG_LOG_LEVEL", "error") + logger.info(f"VARecorder audio port: {self.audio_port}, video port: {self.video_port}, ffmpeg_log_level: {self.ffmpeg_log_level}") + + self.width = None + self.height = None + self.stoppable_t = None + self.realtime = False + if self.livestream_url.startswith("rtmp://") or self.livestream_url.startswith("http"): + self.realtime = True + + # ffmpeg process for mix video and audio data and push to livestream + self.ffmpeg_process = None + + # TCP connection objects + self.audio_socket = None + self.video_socket = None + self.audio_conn = None + self.video_conn = None + self.audio_thread = None + self.video_thread = None + + # queue for send data to ffmpeg process + self.audio_queue = queue.Queue() + self.video_queue = queue.Queue() + + # buffer for stream data + self.audio_samples_per_frame = round(self.sample_rate / self.fps) + self.stream_buffer = [] + self.stream_buffer_lock = threading.Lock() + self.stop_schedule = False + self.schedule_thread = None + self.slice_frame = slice_frame + self.prev_frame = prev_frame + assert self.slice_frame >= self.prev_frame, "Slice frame must be greater than previous frame" + + def init_sockets(self): + # TCP socket for send and recv video and audio data + self.video_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.video_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.video_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + self.video_socket.bind(("127.0.0.1", self.video_port)) + self.video_socket.listen(1) + + self.audio_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.audio_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.audio_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + self.audio_socket.bind(("127.0.0.1", self.audio_port)) + self.audio_socket.listen(1) + + def audio_worker(self): + try: + logger.info("Waiting for ffmpeg to connect to audio socket...") + self.audio_conn, _ = self.audio_socket.accept() + logger.info(f"Audio connection established from {self.audio_conn.getpeername()}") + fail_time, max_fail_time = 0, 10 + while True: + try: + if self.audio_queue is None: + break + data = self.audio_queue.get() + if data is None: + logger.info("Audio thread received stop signal") + break + # Convert audio data to 16-bit integer format + audios = torch.clamp(torch.round(data * 32767), -32768, 32767).to(torch.int16) + try: + self.audio_conn.send(audios[None].cpu().numpy().tobytes()) + except (BrokenPipeError, OSError, ConnectionResetError) as e: + logger.info(f"Audio connection closed, stopping worker: {type(e).__name__}") + return + fail_time = 0 + except (BrokenPipeError, OSError, ConnectionResetError): + logger.info("Audio connection closed during queue processing") + break + except Exception: + logger.error(f"Send audio data error: {traceback.format_exc()}") + fail_time += 1 + if fail_time > max_fail_time: + logger.error(f"Audio push worker thread failed {fail_time} times, stopping...") + break + except Exception: + logger.error(f"Audio push worker thread error: {traceback.format_exc()}") + finally: + logger.info("Audio push worker thread stopped") + + def video_worker(self): + try: + logger.info("Waiting for ffmpeg to connect to video socket...") + self.video_conn, _ = self.video_socket.accept() + logger.info(f"Video connection established from {self.video_conn.getpeername()}") + fail_time, max_fail_time = 0, 10 + packet_secs = 1.0 / self.fps + while True: + try: + if self.video_queue is None: + break + data = self.video_queue.get() + if data is None: + logger.info("Video thread received stop signal") + break + + # Convert to numpy and scale to [0, 255], convert RGB to BGR for OpenCV/FFmpeg + for i in range(data.shape[0]): + t0 = time.time() + frame = (data[i] * 255).clamp(0, 255).to(torch.uint8).cpu().numpy() + try: + self.video_conn.send(frame.tobytes()) + except (BrokenPipeError, OSError, ConnectionResetError) as e: + logger.info(f"Video connection closed, stopping worker: {type(e).__name__}") + return + if self.realtime and i < data.shape[0] - 1: + time.sleep(max(0, packet_secs - (time.time() - t0))) + + fail_time = 0 + except (BrokenPipeError, OSError, ConnectionResetError): + logger.info("Video connection closed during queue processing") + break + except Exception: + logger.error(f"Send video data error: {traceback.format_exc()}") + fail_time += 1 + if fail_time > max_fail_time: + logger.error(f"Video push worker thread failed {fail_time} times, stopping...") + break + except Exception: + logger.error(f"Video push worker thread error: {traceback.format_exc()}") + finally: + logger.info("Video push worker thread stopped") + + def start_ffmpeg_process_local(self): + """Start ffmpeg process that connects to our TCP sockets""" + ffmpeg_cmd = [ + "ffmpeg", + "-fflags", + "nobuffer", + "-analyzeduration", + "0", + "-probesize", + "32", + "-flush_packets", + "1", + "-f", + "s16le", + "-ar", + str(self.sample_rate), + "-ac", + "1", + "-i", + f"tcp://127.0.0.1:{self.audio_port}", + "-f", + "rawvideo", + "-pix_fmt", + "rgb24", + "-color_range", + "pc", + "-colorspace", + "rgb", + "-color_primaries", + "bt709", + "-color_trc", + "iec61966-2-1", + "-r", + str(self.fps), + "-s", + f"{self.width}x{self.height}", + "-i", + f"tcp://127.0.0.1:{self.video_port}", + "-ar", + "44100", + "-b:v", + "4M", + "-c:v", + "libx264", + "-preset", + "ultrafast", + "-tune", + "zerolatency", + "-g", + f"{self.fps}", + "-pix_fmt", + "yuv420p", + "-f", + "mp4", + self.livestream_url, + "-y", + "-loglevel", + self.ffmpeg_log_level, + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd) + logger.info(f"FFmpeg streaming started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg: {e}") + + def start_ffmpeg_process_rtmp(self): + """Start ffmpeg process that connects to our TCP sockets""" + ffmpeg_cmd = [ + "ffmpeg", + "-re", + "-f", + "s16le", + "-ar", + str(self.sample_rate), + "-ac", + "1", + "-i", + f"tcp://127.0.0.1:{self.audio_port}", + "-f", + "rawvideo", + "-re", + "-pix_fmt", + "rgb24", + "-r", + str(self.fps), + "-s", + f"{self.width}x{self.height}", + "-i", + f"tcp://127.0.0.1:{self.video_port}", + "-ar", + "44100", + "-b:v", + "2M", + "-c:v", + "libx264", + "-preset", + "ultrafast", + "-tune", + "zerolatency", + "-g", + f"{self.fps}", + "-pix_fmt", + "yuv420p", + "-f", + "flv", + self.livestream_url, + "-y", + "-loglevel", + self.ffmpeg_log_level, + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd) + logger.info(f"FFmpeg streaming started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg: {e}") + + def start_ffmpeg_process_whip(self): + """Start ffmpeg process that connects to our TCP sockets""" + ffmpeg_cmd = [ + "ffmpeg", + "-re", + "-fflags", + "nobuffer", + "-analyzeduration", + "0", + "-probesize", + "32", + "-flush_packets", + "1", + "-f", + "s16le", + "-ar", + str(self.sample_rate), + "-ac", + "1", + "-ch_layout", + "mono", + "-i", + f"tcp://127.0.0.1:{self.audio_port}", + "-f", + "rawvideo", + "-re", + "-pix_fmt", + "rgb24", + "-r", + str(self.fps), + "-s", + f"{self.width}x{self.height}", + "-i", + f"tcp://127.0.0.1:{self.video_port}", + "-ar", + "48000", + "-c:a", + "libopus", + "-ac", + "2", + "-b:v", + "2M", + "-c:v", + "libx264", + "-preset", + "ultrafast", + "-tune", + "zerolatency", + "-g", + f"{self.fps}", + "-pix_fmt", + "yuv420p", + "-threads", + "1", + "-bf", + "0", + "-f", + "whip", + self.livestream_url, + "-y", + "-loglevel", + self.ffmpeg_log_level, + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd) + logger.info(f"FFmpeg streaming started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg: {e}") + + def start(self, width: int, height: int): + self.set_video_size(width, height) + duration = 1.0 + frames = int(self.fps * duration) + samples = int(self.sample_rate * (frames / self.fps)) + self.pub_livestream(torch.zeros((frames, height, width, 3), dtype=torch.float16), torch.zeros(samples, dtype=torch.float16)) + time.sleep(duration) + + def set_video_size(self, width: int, height: int): + if self.width is not None and self.height is not None: + assert self.width == width and self.height == height, "Video size already set" + return + self.width = width + self.height = height + self.init_sockets() + if self.livestream_url.startswith("rtmp://"): + self.start_ffmpeg_process_rtmp() + elif self.livestream_url.startswith("http"): + self.start_ffmpeg_process_whip() + else: + self.start_ffmpeg_process_local() + self.audio_thread = threading.Thread(target=self.audio_worker) + self.video_thread = threading.Thread(target=self.video_worker) + self.audio_thread.start() + self.video_thread.start() + if self.realtime: + self.schedule_thread = threading.Thread(target=self.schedule_stream_buffer) + self.schedule_thread.start() + + # Publish ComfyUI Image tensor and audio tensor to livestream + def pub_livestream(self, images: torch.Tensor, audios: torch.Tensor): + N, height, width, C = images.shape + M = audios.reshape(-1).shape[0] + assert C == 3, "Input must be [N, H, W, C] with C=3" + + logger.info(f"Publishing video [{N}x{width}x{height}], audio: [{M}]") + audio_frames = round(M * self.fps / self.sample_rate) + if audio_frames != N: + logger.warning(f"Video and audio frames mismatch, {N} vs {audio_frames}") + + self.set_video_size(width, height) + self.audio_queue.put(audios) + self.video_queue.put(images) + logger.info(f"Published {N} frames and {M} audio samples") + + self.stoppable_t = time.time() + M / self.sample_rate + 3 + + def buffer_stream(self, images: torch.Tensor, audios: torch.Tensor, gen_video: torch.Tensor): + N, height, width, C = images.shape + M = audios.reshape(-1).shape[0] + assert N % self.slice_frame == 0, "Video frames must be divisible by slice_frame" + assert C == 3, "Input must be [N, H, W, C] with C=3" + + audio_frames = round(M * self.fps / self.sample_rate) + if audio_frames != N: + logger.warning(f"Video and audio frames mismatch, {N} vs {audio_frames}") + self.set_video_size(width, height) + + # logger.info(f"Buffer stream images {images.shape} {audios.shape} {gen_video.shape}") + rets = [] + for i in range(0, N, self.slice_frame): + end_frame = i + self.slice_frame + img = images[i:end_frame] + aud = audios[i * self.audio_samples_per_frame : end_frame * self.audio_samples_per_frame] + gen = gen_video[:, :, (end_frame - self.prev_frame) : end_frame] + rets.append((img, aud, gen)) + + with self.stream_buffer_lock: + origin_size = len(self.stream_buffer) + self.stream_buffer.extend(rets) + logger.info(f"Buffered {origin_size} + {len(rets)} = {len(self.stream_buffer)} stream segments") + + def get_buffer_stream_size(self): + return len(self.stream_buffer) + + def truncate_stream_buffer(self, size: int): + with self.stream_buffer_lock: + self.stream_buffer = self.stream_buffer[:size] + logger.info(f"Truncated stream buffer to {len(self.stream_buffer)} segments") + if len(self.stream_buffer) > 0: + return self.stream_buffer[-1][2] # return the last video tensor + else: + return None + + def schedule_stream_buffer(self): + schedule_interval = self.slice_frame / self.fps + logger.info(f"Schedule stream buffer with interval: {schedule_interval} seconds") + t = None + while True: + try: + if self.stop_schedule: + break + img, aud, gen = None, None, None + with self.stream_buffer_lock: + if len(self.stream_buffer) > 0: + img, aud, gen = self.stream_buffer.pop(0) + + if t is not None: + wait_secs = schedule_interval - (time.time() - t) + if wait_secs > 0: + time.sleep(wait_secs) + t = time.time() + + if img is not None and aud is not None: + self.audio_queue.put(aud) + self.video_queue.put(img) + # logger.info(f"Scheduled {img.shape[0]} frames and {aud.shape[0]} audio samples to publish") + del gen + self.stoppable_t = time.time() + aud.shape[0] / self.sample_rate + 3 + else: + logger.warning(f"No stream buffer to schedule") + except Exception: + logger.error(f"Schedule stream buffer error: {traceback.format_exc()}") + break + logger.info("Schedule stream buffer thread stopped") + + def stop(self, wait=True): + if wait and self.stoppable_t: + t = self.stoppable_t - time.time() + if t > 0: + logger.warning(f"Waiting for {t} seconds to stop ...") + time.sleep(t) + self.stoppable_t = None + + if self.schedule_thread: + self.stop_schedule = True + self.schedule_thread.join(timeout=5) + if self.schedule_thread and self.schedule_thread.is_alive(): + logger.error(f"Schedule thread did not stop after 5s") + + # Send stop signals to queues + if self.audio_queue: + self.audio_queue.put(None) + if self.video_queue: + self.video_queue.put(None) + + # Wait for threads to finish processing queued data (increased timeout) + queue_timeout = 30 # Increased from 5s to 30s to allow sufficient time for large video frames + if self.audio_thread and self.audio_thread.is_alive(): + self.audio_thread.join(timeout=queue_timeout) + if self.audio_thread.is_alive(): + logger.error(f"Audio push thread did not stop after {queue_timeout}s") + if self.video_thread and self.video_thread.is_alive(): + self.video_thread.join(timeout=queue_timeout) + if self.video_thread.is_alive(): + logger.error(f"Video push thread did not stop after {queue_timeout}s") + + # Shutdown connections to signal EOF to FFmpeg + # shutdown(SHUT_WR) will wait for send buffer to flush, no explicit sleep needed + if self.audio_conn: + try: + self.audio_conn.getpeername() + self.audio_conn.shutdown(socket.SHUT_WR) + logger.info("Audio connection shutdown initiated") + except OSError: + # Connection already closed, skip shutdown + pass + + if self.video_conn: + try: + self.video_conn.getpeername() + self.video_conn.shutdown(socket.SHUT_WR) + logger.info("Video connection shutdown initiated") + except OSError: + # Connection already closed, skip shutdown + pass + + if self.ffmpeg_process: + is_local_file = not self.livestream_url.startswith(("rtmp://", "http")) + # Local MP4 files need time to write moov atom and finalize the container + timeout_seconds = 30 if is_local_file else 10 + logger.info(f"Waiting for FFmpeg to finalize file (timeout={timeout_seconds}s, local_file={is_local_file})") + logger.info(f"FFmpeg output: {self.livestream_url}") + + try: + returncode = self.ffmpeg_process.wait(timeout=timeout_seconds) + if returncode == 0: + logger.info(f"FFmpeg process exited successfully (exit code: {returncode})") + else: + logger.warning(f"FFmpeg process exited with non-zero code: {returncode}") + except subprocess.TimeoutExpired: + logger.warning(f"FFmpeg process did not exit within {timeout_seconds}s, sending SIGTERM...") + try: + self.ffmpeg_process.terminate() # SIGTERM + returncode = self.ffmpeg_process.wait(timeout=5) + logger.warning(f"FFmpeg process terminated with SIGTERM (exit code: {returncode})") + except subprocess.TimeoutExpired: + logger.error("FFmpeg process still running after SIGTERM, killing with SIGKILL...") + self.ffmpeg_process.kill() + self.ffmpeg_process.wait() # Wait for kill to complete + logger.error("FFmpeg process killed with SIGKILL") + finally: + self.ffmpeg_process = None + + if self.audio_conn: + try: + self.audio_conn.close() + except Exception as e: + logger.debug(f"Error closing audio connection: {e}") + finally: + self.audio_conn = None + + if self.video_conn: + try: + self.video_conn.close() + except Exception as e: + logger.debug(f"Error closing video connection: {e}") + finally: + self.video_conn = None + + if self.audio_socket: + try: + self.audio_socket.close() + except Exception as e: + logger.debug(f"Error closing audio socket: {e}") + finally: + self.audio_socket = None + + if self.video_socket: + try: + self.video_socket.close() + except Exception as e: + logger.debug(f"Error closing video socket: {e}") + finally: + self.video_socket = None + + if self.audio_queue: + while self.audio_queue.qsize() > 0: + try: + self.audio_queue.get_nowait() + except: # noqa + break + if self.video_queue: + while self.video_queue.qsize() > 0: + try: + self.video_queue.get_nowait() + except: # noqa + break + self.audio_queue = None + self.video_queue = None + logger.info("VARecorder stopped and resources cleaned up") + + def __del__(self): + self.stop(wait=False) + + +def create_simple_video(frames=10, height=480, width=640): + video_data = [] + for i in range(frames): + frame = np.zeros((height, width, 3), dtype=np.float32) + stripe_height = height // 8 + colors = [ + [1.0, 0.0, 0.0], # 红色 + [0.0, 1.0, 0.0], # 绿色 + [0.0, 0.0, 1.0], # 蓝色 + [1.0, 1.0, 0.0], # 黄色 + [1.0, 0.0, 1.0], # 洋红 + [0.0, 1.0, 1.0], # 青色 + [1.0, 1.0, 1.0], # 白色 + [0.5, 0.5, 0.5], # 灰色 + ] + for j, color in enumerate(colors): + start_y = j * stripe_height + end_y = min((j + 1) * stripe_height, height) + frame[start_y:end_y, :] = color + offset = int((i / frames) * width) + frame = np.roll(frame, offset, axis=1) + frame = torch.tensor(frame, dtype=torch.float32) + video_data.append(frame) + return torch.stack(video_data, dim=0) + + +if __name__ == "__main__": + sample_rate = 16000 + fps = 16 + width = 640 + height = 480 + + recorder = VARecorder( + # livestream_url="rtmp://localhost/live/test", + # livestream_url="https://reverse.st-oc-01.chielo.org/10.5.64.49:8000/rtc/v1/whip/?app=live&stream=ll_test_video&eip=127.0.0.1:8000", + livestream_url="/path/to/output_video.mp4", + fps=fps, + sample_rate=sample_rate, + ) + + audio_path = "/path/to/test_b_2min.wav" + audio_array, ori_sr = ta.load(audio_path) + audio_array = ta.functional.resample(audio_array.mean(0), orig_freq=ori_sr, new_freq=16000) + audio_array = audio_array.reshape(-1) + secs = audio_array.shape[0] // sample_rate + interval = 1 + + for i in range(0, secs, interval): + logger.info(f"{i} / {secs} s") + start = i * sample_rate + end = (i + interval) * sample_rate + cur_audio_array = audio_array[start:end] + logger.info(f"audio: {cur_audio_array.shape} {cur_audio_array.dtype} {cur_audio_array.min()} {cur_audio_array.max()}") + + num_frames = int(interval * fps) + images = create_simple_video(num_frames, height, width) + logger.info(f"images: {images.shape} {images.dtype} {images.min()} {images.max()}") + + recorder.pub_livestream(images, cur_audio_array) + time.sleep(interval) + recorder.stop() diff --git a/lightx2v/deploy/common/va_recorder_x264.py b/lightx2v/deploy/common/va_recorder_x264.py new file mode 100644 index 0000000..93a82a7 --- /dev/null +++ b/lightx2v/deploy/common/va_recorder_x264.py @@ -0,0 +1,321 @@ +import ctypes +import queue +import threading +import time +import traceback + +import numpy as np +import torch +import torchaudio as ta +from loguru import logger +from scipy.signal import resample + + +class X264VARecorder: + def __init__( + self, + whip_shared_path: str, + livestream_url: str, + fps: float = 16.0, + sample_rate: int = 16000, + slice_frame: int = 1, + prev_frame: int = 1, + ): + assert livestream_url.startswith("http"), "X264VARecorder only support whip http livestream" + self.livestream_url = livestream_url + self.fps = fps + self.sample_rate = sample_rate + + self.width = None + self.height = None + self.stoppable_t = None + + # only enable whip shared api for whip http livestream + self.whip_shared_path = whip_shared_path + self.whip_shared_lib = None + self.whip_shared_handle = None + + assert livestream_url.startswith("http"), "X264VARecorder only support whip http livestream" + self.realtime = True + + # queue for send data to whip shared api + self.queue = queue.Queue() + self.worker_thread = None + + # buffer for stream data + self.target_sample_rate = 48000 + self.target_samples_per_frame = round(self.target_sample_rate / self.fps) + self.target_chunks_per_frame = self.target_samples_per_frame * 2 + self.stream_buffer = [] + self.stream_buffer_lock = threading.Lock() + self.stop_schedule = False + self.schedule_thread = None + self.slice_frame = slice_frame + self.prev_frame = prev_frame + assert self.slice_frame >= self.prev_frame, "Slice frame must be greater than previous frame" + + def worker(self): + try: + fail_time, max_fail_time = 0, 10 + packet_secs = 1.0 / self.fps + while True: + try: + if self.queue is None: + break + data = self.queue.get() + if data is None: + logger.info("Worker thread received stop signal") + break + audios, images = data + + for i in range(images.shape[0]): + t0 = time.time() + cur_audio = audios[i * self.target_chunks_per_frame : (i + 1) * self.target_chunks_per_frame].flatten() + audio_ptr = cur_audio.ctypes.data_as(ctypes.POINTER(ctypes.c_int16)) + self.whip_shared_lib.pushWhipRawAudioFrame(self.whip_shared_handle, audio_ptr, self.target_samples_per_frame) + + cur_video = images[i].flatten() + video_ptr = cur_video.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)) + self.whip_shared_lib.pushWhipRawVideoFrame(self.whip_shared_handle, video_ptr, self.width, self.height) + + if self.realtime and i < images.shape[0] - 1: + time.sleep(max(0, packet_secs - (time.time() - t0))) + + fail_time = 0 + except: # noqa + logger.error(f"Send audio data error: {traceback.format_exc()}") + fail_time += 1 + if fail_time > max_fail_time: + logger.error(f"Audio push worker thread failed {fail_time} times, stopping...") + break + except: # noqa + logger.error(f"Audio push worker thread error: {traceback.format_exc()}") + finally: + logger.info("Audio push worker thread stopped") + + def start_libx264_whip_shared_api(self, width: int, height: int): + self.whip_shared_lib = ctypes.CDLL(self.whip_shared_path) + + # define function argtypes and restype + self.whip_shared_lib.initWhipStream.argtypes = [ctypes.c_char_p, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.c_int] + self.whip_shared_lib.initWhipStream.restype = ctypes.c_void_p + + self.whip_shared_lib.pushWhipRawAudioFrame.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int16), ctypes.c_int] + self.whip_shared_lib.pushWhipRawVideoFrame.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_uint8), ctypes.c_int, ctypes.c_int] + + self.whip_shared_lib.destroyWhipStream.argtypes = [ctypes.c_void_p] + + whip_url = ctypes.c_char_p(self.livestream_url.encode("utf-8")) + self.whip_shared_handle = ctypes.c_void_p(self.whip_shared_lib.initWhipStream(whip_url, 1, 1, 0, width, height)) + logger.info(f"WHIP shared API initialized with handle: {self.whip_shared_handle}") + + def convert_data(self, audios, images): + # Convert audio data to 16-bit integer format + audio_datas = torch.clamp(torch.round(audios * 32767), -32768, 32767).to(torch.int16).cpu().numpy().reshape(-1) + # Convert to numpy and scale to [0, 255], convert RGB to BGR for OpenCV/FFmpeg + image_datas = (images * 255).clamp(0, 255).to(torch.uint8).cpu().numpy() + + logger.info(f"image_datas: {image_datas.shape} {image_datas.dtype} {image_datas.min()} {image_datas.max()}") + reample_audios = resample(audio_datas, int(len(audio_datas) * 48000 / self.sample_rate)) + stereo_audios = np.stack([reample_audios, reample_audios], axis=-1).astype(np.int16).reshape(-1) + return stereo_audios, image_datas + + def start(self, width: int, height: int): + self.set_video_size(width, height) + + def set_video_size(self, width: int, height: int): + if self.width is not None and self.height is not None: + assert self.width == width and self.height == height, "Video size already set" + return + self.width = width + self.height = height + self.start_libx264_whip_shared_api(width, height) + self.worker_thread = threading.Thread(target=self.worker) + self.worker_thread.start() + if self.realtime: + self.schedule_thread = threading.Thread(target=self.schedule_stream_buffer) + self.schedule_thread.start() + + def buffer_stream(self, images: torch.Tensor, audios: torch.Tensor, gen_video: torch.Tensor): + N, height, width, C = images.shape + M = audios.reshape(-1).shape[0] + assert N % self.slice_frame == 0, "Video frames must be divisible by slice_frame" + assert C == 3, "Input must be [N, H, W, C] with C=3" + + audio_frames = round(M * self.fps / self.sample_rate) + if audio_frames != N: + logger.warning(f"Video and audio frames mismatch, {N} vs {audio_frames}") + self.set_video_size(width, height) + audio_datas, image_datas = self.convert_data(audios, images) + + # logger.info(f"Buffer stream images {images.shape} {audios.shape} {gen_video.shape}") + rets = [] + for i in range(0, N, self.slice_frame): + end_frame = i + self.slice_frame + img = image_datas[i:end_frame] + aud = audio_datas[i * self.target_chunks_per_frame : end_frame * self.target_chunks_per_frame] + gen = gen_video[:, :, (end_frame - self.prev_frame) : end_frame] + rets.append((img, aud, gen)) + + with self.stream_buffer_lock: + origin_size = len(self.stream_buffer) + self.stream_buffer.extend(rets) + logger.info(f"Buffered {origin_size} + {len(rets)} = {len(self.stream_buffer)} stream segments") + + def get_buffer_stream_size(self): + return len(self.stream_buffer) + + def truncate_stream_buffer(self, size: int): + with self.stream_buffer_lock: + self.stream_buffer = self.stream_buffer[:size] + logger.info(f"Truncated stream buffer to {len(self.stream_buffer)} segments") + if len(self.stream_buffer) > 0: + return self.stream_buffer[-1][2] # return the last video tensor + else: + return None + + def schedule_stream_buffer(self): + schedule_interval = self.slice_frame / self.fps + logger.info(f"Schedule stream buffer with interval: {schedule_interval} seconds") + t = None + while True: + try: + if self.stop_schedule: + break + img, aud, gen = None, None, None + with self.stream_buffer_lock: + if len(self.stream_buffer) > 0: + img, aud, gen = self.stream_buffer.pop(0) + + if t is not None: + wait_secs = schedule_interval - (time.time() - t) + if wait_secs > 0: + time.sleep(wait_secs) + t = time.time() + + if img is not None and aud is not None: + self.queue.put((aud, img)) + # logger.info(f"Scheduled {img.shape[0]} frames and {aud.shape[0]} audio samples to publish") + del gen + self.stoppable_t = time.time() + img.shape[0] / self.fps + 3 + else: + logger.warning(f"No stream buffer to schedule") + except Exception: + logger.error(f"Schedule stream buffer error: {traceback.format_exc()}") + break + logger.info("Schedule stream buffer thread stopped") + + def stop(self, wait=True): + if wait and self.stoppable_t: + t = self.stoppable_t - time.time() + if t > 0: + logger.warning(f"Waiting for {t} seconds to stop ...") + time.sleep(t) + self.stoppable_t = None + + if self.schedule_thread: + self.stop_schedule = True + self.schedule_thread.join(timeout=5) + if self.schedule_thread and self.schedule_thread.is_alive(): + logger.error(f"Schedule thread did not stop after 5s") + + # Send stop signals to queues + if self.queue: + self.queue.put(None) + + # Wait for threads to finish + if self.worker_thread and self.worker_thread.is_alive(): + self.worker_thread.join(timeout=5) + if self.worker_thread.is_alive(): + logger.warning("Worker thread did not stop gracefully") + + # Destroy WHIP shared API + if self.whip_shared_lib and self.whip_shared_handle: + self.whip_shared_lib.destroyWhipStream(self.whip_shared_handle) + self.whip_shared_handle = None + self.whip_shared_lib = None + logger.warning("WHIP shared API destroyed") + + def __del__(self): + self.stop() + + +def create_simple_video(frames=10, height=480, width=640): + video_data = [] + for i in range(frames): + frame = np.zeros((height, width, 3), dtype=np.float32) + stripe_height = height // 8 + colors = [ + [1.0, 0.0, 0.0], # 红色 + [0.0, 1.0, 0.0], # 绿色 + [0.0, 0.0, 1.0], # 蓝色 + [1.0, 1.0, 0.0], # 黄色 + [1.0, 0.0, 1.0], # 洋红 + [0.0, 1.0, 1.0], # 青色 + [1.0, 1.0, 1.0], # 白色 + [0.5, 0.5, 0.5], # 灰色 + ] + for j, color in enumerate(colors): + start_y = j * stripe_height + end_y = min((j + 1) * stripe_height, height) + frame[start_y:end_y, :] = color + offset = int((i / frames) * width) + frame = np.roll(frame, offset, axis=1) + frame = torch.tensor(frame, dtype=torch.float32) + video_data.append(frame) + return torch.stack(video_data, dim=0) + + +if __name__ == "__main__": + sample_rate = 16000 + fps = 16 + width = 452 + height = 352 + + recorder = X264VARecorder( + whip_shared_path="/data/nvme0/liuliang1/lightx2v/test_deploy/test_whip_so/0.1.1/go_whxp.so", + livestream_url="https://reverse.st-oc-01.chielo.org/10.5.64.49:8000/rtc/v1/whip/?app=subscribe&stream=ll2&eip=10.120.114.82:8000", + fps=fps, + sample_rate=sample_rate, + ) + recorder.start(width, height) + + # time.sleep(5) + audio_path = "/data/nvme0/liuliang1/lightx2v/test_deploy/media_test/mangzhong.wav" + audio_array, ori_sr = ta.load(audio_path) + audio_array = ta.functional.resample(audio_array.mean(0), orig_freq=ori_sr, new_freq=16000) + audio_array = audio_array.numpy().reshape(-1) + secs = audio_array.shape[0] // sample_rate + interval = 1 + space = 10 + + i = 0 + while i < space: + t0 = time.time() + logger.info(f"space {i} / {space} s") + cur_audio_array = np.zeros(int(interval * sample_rate), dtype=np.float32) + num_frames = int(interval * fps) + images = create_simple_video(num_frames, height, width) + recorder.buffer_stream(images, torch.tensor(cur_audio_array, dtype=torch.float32), images) + i += interval + time.sleep(interval - (time.time() - t0)) + + started = True + + i = 0 + while i < secs: + t0 = time.time() + start = int(i * sample_rate) + end = int((i + interval) * sample_rate) + cur_audio_array = torch.tensor(audio_array[start:end], dtype=torch.float32) + num_frames = int(interval * fps) + images = create_simple_video(num_frames, height, width) + logger.info(f"{i} / {secs} s") + if started: + logger.warning(f"start pub_livestream !!!!!!!!!!!!!!!!!!!!!!!") + started = False + recorder.buffer_stream(images, cur_audio_array, images) + i += interval + time.sleep(interval - (time.time() - t0)) + + recorder.stop() diff --git a/lightx2v/deploy/common/video_recorder.py b/lightx2v/deploy/common/video_recorder.py new file mode 100644 index 0000000..e58a18e --- /dev/null +++ b/lightx2v/deploy/common/video_recorder.py @@ -0,0 +1,422 @@ +import os +import queue +import socket +import subprocess +import threading +import time +import traceback + +import numpy as np +import torch +from loguru import logger + + +def pseudo_random(a, b): + x = str(time.time()).split(".")[1] + y = int(float("0." + x) * 1000000) + return a + (y % (b - a + 1)) + + +class VideoRecorder: + def __init__( + self, + livestream_url: str, + fps: float = 16.0, + ): + self.livestream_url = livestream_url + self.fps = fps + self.video_port = pseudo_random(32000, 40000) + self.ffmpeg_log_level = os.getenv("FFMPEG_LOG_LEVEL", "error") + logger.info(f"VideoRecorder video port: {self.video_port}, ffmpeg_log_level: {self.ffmpeg_log_level}") + + self.width = None + self.height = None + self.stoppable_t = None + self.realtime = True + + # ffmpeg process for video data and push to livestream + self.ffmpeg_process = None + + # TCP connection objects + self.video_socket = None + self.video_conn = None + self.video_thread = None + + # queue for send data to ffmpeg process + self.video_queue = queue.Queue() + + def init_sockets(self): + # TCP socket for send and recv video data + self.video_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.video_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.video_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) + self.video_socket.bind(("127.0.0.1", self.video_port)) + self.video_socket.listen(1) + + def video_worker(self): + try: + logger.info("Waiting for ffmpeg to connect to video socket...") + self.video_conn, _ = self.video_socket.accept() + logger.info(f"Video connection established from {self.video_conn.getpeername()}") + fail_time, max_fail_time = 0, 10 + packet_secs = 1.0 / self.fps + while True: + try: + if self.video_queue is None: + break + data = self.video_queue.get() + if data is None: + logger.info("Video thread received stop signal") + break + + # Convert to numpy and scale to [0, 255], convert RGB to BGR for OpenCV/FFmpeg + for i in range(data.shape[0]): + t0 = time.time() + frame = (data[i] * 255).clamp(0, 255).to(torch.uint8).cpu().numpy() + try: + self.video_conn.send(frame.tobytes()) + except (BrokenPipeError, OSError, ConnectionResetError) as e: + logger.info(f"Video connection closed, stopping worker: {type(e).__name__}") + return + if self.realtime: + time.sleep(max(0, packet_secs - (time.time() - t0))) + + fail_time = 0 + except (BrokenPipeError, OSError, ConnectionResetError): + logger.info("Video connection closed during queue processing") + break + except Exception: + logger.error(f"Send video data error: {traceback.format_exc()}") + fail_time += 1 + if fail_time > max_fail_time: + logger.error(f"Video push worker thread failed {fail_time} times, stopping...") + break + except Exception: + logger.error(f"Video push worker thread error: {traceback.format_exc()}") + finally: + logger.info("Video push worker thread stopped") + + def start_ffmpeg_process_local(self): + """Start ffmpeg process that connects to our TCP sockets""" + ffmpeg_cmd = [ + "ffmpeg", + "-fflags", + "nobuffer", + "-analyzeduration", + "0", + "-probesize", + "32", + "-flush_packets", + "1", + "-f", + "rawvideo", + "-pix_fmt", + "rgb24", + "-color_range", + "pc", + "-colorspace", + "rgb", + "-color_primaries", + "bt709", + "-color_trc", + "iec61966-2-1", + "-r", + str(self.fps), + "-s", + f"{self.width}x{self.height}", + "-i", + f"tcp://127.0.0.1:{self.video_port}", + "-b:v", + "4M", + "-c:v", + "libx264", + "-preset", + "ultrafast", + "-tune", + "zerolatency", + "-g", + f"{self.fps}", + "-pix_fmt", + "yuv420p", + "-f", + "mp4", + self.livestream_url, + "-y", + "-loglevel", + self.ffmpeg_log_level, + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd) + logger.info(f"FFmpeg streaming started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg: {e}") + + def start_ffmpeg_process_rtmp(self): + """Start ffmpeg process that connects to our TCP sockets""" + ffmpeg_cmd = [ + "ffmpeg", + "-f", + "rawvideo", + "-re", + "-pix_fmt", + "rgb24", + "-r", + str(self.fps), + "-s", + f"{self.width}x{self.height}", + "-i", + f"tcp://127.0.0.1:{self.video_port}", + "-b:v", + "2M", + "-c:v", + "libx264", + "-preset", + "ultrafast", + "-tune", + "zerolatency", + "-g", + f"{self.fps}", + "-pix_fmt", + "yuv420p", + "-f", + "flv", + self.livestream_url, + "-y", + "-loglevel", + self.ffmpeg_log_level, + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd) + logger.info(f"FFmpeg streaming started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg: {e}") + + def start_ffmpeg_process_whip(self): + """Start ffmpeg process that connects to our TCP sockets""" + ffmpeg_cmd = [ + "ffmpeg", + "-re", + "-fflags", + "nobuffer", + "-analyzeduration", + "0", + "-probesize", + "32", + "-flush_packets", + "1", + "-f", + "rawvideo", + "-re", + "-pix_fmt", + "rgb24", + "-r", + str(self.fps), + "-s", + f"{self.width}x{self.height}", + "-i", + f"tcp://127.0.0.1:{self.video_port}", + "-b:v", + "2M", + "-c:v", + "libx264", + "-preset", + "ultrafast", + "-tune", + "zerolatency", + "-g", + f"{self.fps}", + "-pix_fmt", + "yuv420p", + "-threads", + "1", + "-bf", + "0", + "-f", + "whip", + self.livestream_url, + "-y", + "-loglevel", + self.ffmpeg_log_level, + ] + try: + self.ffmpeg_process = subprocess.Popen(ffmpeg_cmd) + logger.info(f"FFmpeg streaming started with PID: {self.ffmpeg_process.pid}") + logger.info(f"FFmpeg command: {' '.join(ffmpeg_cmd)}") + except Exception as e: + logger.error(f"Failed to start FFmpeg: {e}") + + def start(self, width: int, height: int): + self.set_video_size(width, height) + duration = 1.0 + self.pub_video(torch.zeros((int(self.fps * duration), height, width, 3), dtype=torch.float16)) + time.sleep(duration) + + def set_video_size(self, width: int, height: int): + if self.width is not None and self.height is not None: + assert self.width == width and self.height == height, "Video size already set" + return + self.width = width + self.height = height + self.init_sockets() + if self.livestream_url.startswith("rtmp://"): + self.start_ffmpeg_process_rtmp() + elif self.livestream_url.startswith("http"): + self.start_ffmpeg_process_whip() + else: + self.start_ffmpeg_process_local() + self.realtime = False + self.video_thread = threading.Thread(target=self.video_worker) + self.video_thread.start() + + # Publish ComfyUI Image tensor to livestream + def pub_video(self, images: torch.Tensor): + N, height, width, C = images.shape + assert C == 3, "Input must be [N, H, W, C] with C=3" + + logger.info(f"Publishing video [{N}x{width}x{height}]") + + self.set_video_size(width, height) + self.video_queue.put(images) + logger.info(f"Published {N} frames") + + self.stoppable_t = time.time() + N / self.fps + 3 + + def stop(self, wait=True): + if wait and self.stoppable_t: + t = self.stoppable_t - time.time() + if t > 0: + logger.warning(f"Waiting for {t} seconds to stop ...") + time.sleep(t) + self.stoppable_t = None + + # Send stop signals to queues + if self.video_queue: + self.video_queue.put(None) + + # Wait for threads to finish processing queued data (increased timeout) + queue_timeout = 30 # Increased from 5s to 30s to allow sufficient time for large video frames + if self.video_thread and self.video_thread.is_alive(): + self.video_thread.join(timeout=queue_timeout) + if self.video_thread.is_alive(): + logger.error(f"Video push thread did not stop after {queue_timeout}s") + + # Shutdown connections to signal EOF to FFmpeg + # shutdown(SHUT_WR) will wait for send buffer to flush, no explicit sleep needed + if self.video_conn: + try: + self.video_conn.getpeername() + self.video_conn.shutdown(socket.SHUT_WR) + logger.info("Video connection shutdown initiated") + except OSError: + # Connection already closed, skip shutdown + pass + + if self.ffmpeg_process: + is_local_file = not self.livestream_url.startswith(("rtmp://", "http")) + # Local MP4 files need time to write moov atom and finalize the container + timeout_seconds = 30 if is_local_file else 10 + logger.info(f"Waiting for FFmpeg to finalize file (timeout={timeout_seconds}s, local_file={is_local_file})") + logger.info(f"FFmpeg output: {self.livestream_url}") + + try: + returncode = self.ffmpeg_process.wait(timeout=timeout_seconds) + if returncode == 0: + logger.info(f"FFmpeg process exited successfully (exit code: {returncode})") + else: + logger.warning(f"FFmpeg process exited with non-zero code: {returncode}") + except subprocess.TimeoutExpired: + logger.warning(f"FFmpeg process did not exit within {timeout_seconds}s, sending SIGTERM...") + try: + self.ffmpeg_process.terminate() # SIGTERM + returncode = self.ffmpeg_process.wait(timeout=5) + logger.warning(f"FFmpeg process terminated with SIGTERM (exit code: {returncode})") + except subprocess.TimeoutExpired: + logger.error("FFmpeg process still running after SIGTERM, killing with SIGKILL...") + self.ffmpeg_process.kill() + self.ffmpeg_process.wait() # Wait for kill to complete + logger.error("FFmpeg process killed with SIGKILL") + finally: + self.ffmpeg_process = None + + if self.video_conn: + try: + self.video_conn.close() + except Exception as e: + logger.debug(f"Error closing video connection: {e}") + finally: + self.video_conn = None + + if self.video_socket: + try: + self.video_socket.close() + except Exception as e: + logger.debug(f"Error closing video socket: {e}") + finally: + self.video_socket = None + + if self.video_queue: + while self.video_queue.qsize() > 0: + try: + self.video_queue.get_nowait() + except: # noqa + break + self.video_queue = None + logger.info("VideoRecorder stopped and resources cleaned up") + + def __del__(self): + self.stop(wait=False) + + +def create_simple_video(frames=10, height=480, width=640): + video_data = [] + for i in range(frames): + frame = np.zeros((height, width, 3), dtype=np.float32) + stripe_height = height // 8 + colors = [ + [1.0, 0.0, 0.0], # 红色 + [0.0, 1.0, 0.0], # 绿色 + [0.0, 0.0, 1.0], # 蓝色 + [1.0, 1.0, 0.0], # 黄色 + [1.0, 0.0, 1.0], # 洋红 + [0.0, 1.0, 1.0], # 青色 + [1.0, 1.0, 1.0], # 白色 + [0.5, 0.5, 0.5], # 灰色 + ] + for j, color in enumerate(colors): + start_y = j * stripe_height + end_y = min((j + 1) * stripe_height, height) + frame[start_y:end_y, :] = color + offset = int((i / frames) * width) + frame = np.roll(frame, offset, axis=1) + frame = torch.tensor(frame, dtype=torch.float32) + video_data.append(frame) + return torch.stack(video_data, dim=0) + + +if __name__ == "__main__": + fps = 16 + width = 640 + height = 480 + + recorder = VideoRecorder( + # livestream_url="rtmp://localhost/live/test", + # livestream_url="https://reverse.st-oc-01.chielo.org/10.5.64.49:8000/rtc/v1/whip/?app=live&stream=ll_test_video&eip=127.0.0.1:8000", + livestream_url="/path/to/output_video.mp4", + fps=fps, + ) + + secs = 10 # 10秒视频 + interval = 1 + + for i in range(0, secs, interval): + logger.info(f"{i} / {secs} s") + + num_frames = int(interval * fps) + images = create_simple_video(num_frames, height, width) + logger.info(f"images: {images.shape} {images.dtype} {images.min()} {images.max()}") + + recorder.pub_video(images) + time.sleep(interval) + recorder.stop() diff --git a/lightx2v/deploy/common/volcengine_tts.py b/lightx2v/deploy/common/volcengine_tts.py new file mode 100644 index 0000000..d0e60d3 --- /dev/null +++ b/lightx2v/deploy/common/volcengine_tts.py @@ -0,0 +1,241 @@ +# -*- coding: utf-8 -*- + +import asyncio +import base64 +import json +import os +import sys + +import aiohttp +from loguru import logger + + +class VolcEngineTTSClient: + """ + VolcEngine TTS客户端 + + 参数范围说明: + - speech_rate: -50~100 (100代表2倍速, -50代表0.5倍速, 0为正常语速) + - loudness_rate: -50~100 (100代表2倍音量, -50代表0.5倍音量, 0为正常音量) + - emotion_scale: 1-5 + """ + + def __init__(self, voices_list_file=None): + self.url = "https://openspeech.bytedance.com/api/v3/tts/unidirectional" + self.appid = os.getenv("VOLCENGINE_TTS_APPID") + self.access_token = os.getenv("VOLCENGINE_TTS_ACCESS_TOKEN") + self.proxy = os.getenv("HTTPS_PROXY", None) + if self.proxy: + logger.info(f"volcengine tts use proxy: {self.proxy}") + if voices_list_file is not None: + with open(voices_list_file, "r", encoding="utf-8") as f: + self.voices_list = json.load(f) + else: + self.voices_list = None + + def get_voice_list(self): + return self.voices_list + + async def tts_http_stream(self, headers, params, audio_save_path): + """执行TTS流式请求""" + try: + logger.info(f"volcengine tts params: {params}") + audio_data = bytearray() + total_audio_size = 0 + + async with aiohttp.ClientSession() as session: + async with session.post(self.url, json=params, headers=headers, proxy=self.proxy) as response: + response.raise_for_status() + async for chunk in response.content: + if not chunk: + continue + try: + data = json.loads(chunk.decode("utf-8").strip()) + if data.get("code", 0) == 0 and "data" in data and data["data"]: + chunk_audio = base64.b64decode(data["data"]) + audio_size = len(chunk_audio) + total_audio_size += audio_size + audio_data.extend(chunk_audio) + continue + if data.get("code", 0) == 0 and "sentence" in data and data["sentence"]: + continue + if data.get("code", 0) == 20000000: + break + if data.get("code", 0) > 0: + logger.warning(f"volcengine tts error response: {data}") + break + except Exception as e: + logger.warning(f"Failed to parse volcengine tts chunk: {e}") + + # save audio file + if audio_data: + with open(audio_save_path, "wb") as f: + f.write(audio_data) + logger.info(f"audio saved to {audio_save_path}, audio size: {len(audio_data) / 1024:.2f} KB") + # set correct permissions + os.chmod(audio_save_path, 0o644) + return True + else: + logger.warning("No tts audio data received") + return False + + except Exception as e: + logger.warning(f"VolcEngineTTSClient tts request failed: {e}") + return False + + async def tts_request( + self, + text, + voice_type="zh_female_vv_uranus_bigtts", + context_texts="", + emotion="", + emotion_scale=4, + speech_rate=0, + loudness_rate=0, + pitch=0, + output="tts_output.mp3", + resource_id="seed-tts-2.0", + app_key="aGjiRDfUWi", + uid="123123", + format="mp3", + sample_rate=24000, + enable_timestamp=True, + ): + """ + 执行TTS请求 + + Args: + text: 要转换的文本 + voice_type: 声音类型 + emotion: 情感类型 + emotion_scale: 情感强度 (1-5) + speech_rate: 语速调节 (-50~100, 100代表2倍速, -50代表0.5倍速, 0为正常语速) + loudness_rate: 音量调节 (-50~100, 100代表2倍音量, -50代表0.5倍音量, 0为正常音量) + pitch: 音调调节 (-12~12, 12代表高音调, -12代表低音调, 0为正常音调) + output: 输出文件路径 + resource_id: 资源ID + app_key: 应用密钥 + uid: 用户ID + format: 音频格式 + sample_rate: 采样率 + enable_timestamp: 是否启用时间戳 + """ + # 验证参数范围 + if not (-50 <= speech_rate <= 100): + logger.warning(f"speech_rate {speech_rate} 超出有效范围 [-50, 100],将使用默认值 0") + speech_rate = 0 + + if not (-50 <= loudness_rate <= 100): + logger.warning(f"loudness_rate {loudness_rate} 超出有效范围 [-50, 100],将使用默认值 0") + loudness_rate = 0 + + if not (1 <= emotion_scale <= 5): + logger.warning(f"emotion_scale {emotion_scale} 超出有效范围 [1, 5],将使用默认值 3") + emotion_scale = 3 + + if not (-12 <= pitch <= 12): + logger.warning(f"pitch {pitch} 超出有效范围 [-12, 12],将使用默认值 0") + pitch = 0 + + headers = { + "X-Api-App-Id": self.appid, + "X-Api-Access-Key": self.access_token, + "X-Api-Resource-Id": resource_id, + "X-Api-App-Key": app_key, + "Content-Type": "application/json", + "Connection": "keep-alive", + } + additions = json.dumps( + {"explicit_language": "zh", "disable_markdown_filter": True, "enable_timestamp": True, "context_texts": [context_texts] if context_texts else None, "post_process": {"pitch": pitch}} + ) + payload = { + "user": {"uid": uid}, + "req_params": { + "text": text, + "speaker": voice_type, + "audio_params": { + "format": format, + "sample_rate": sample_rate, + "enable_timestamp": enable_timestamp, + "emotion": emotion, + "emotion_scale": emotion_scale, + "speech_rate": speech_rate, + "loudness_rate": loudness_rate, + }, + "additions": additions, + }, + } + success = await self.tts_http_stream(headers=headers, params=payload, audio_save_path=output) + if success: + logger.info(f"VolcEngineTTSClient tts request for '{text}': success") + else: + logger.warning(f"VolcEngineTTSClient tts request for '{text}': failed") + return success + + +async def test(args): + """ + TTS测试函数 + + Args: + args: list, e.g. [text, voice_type, emotion, emotion_scale, speech_rate, loudness_rate, output, resource_id, app_key, uid, format, sample_rate, enable_timestamp] + Provide as many as needed, from left to right. + + Parameter ranges: + - speech_rate: -50~100 (100代表2倍速, -50代表0.5倍速, 0为正常语速) + - loudness_rate: -50~100 (100代表2倍音量, -50代表0.5倍音量, 0为正常音量) + - emotion_scale: 1-5 + - pitch: -12~12 (12代表高音调, -12代表低音调, 0为正常音调) + """ + client = VolcEngineTTSClient() + # 设置默认参数 + params = { + "text": "", + "voice_type": "zh_female_vv_uranus_bigtts", + "context_texts": "", + "emotion": "", + "emotion_scale": 4, + "speech_rate": 0, + "loudness_rate": 0, + "pitch": 12, + "output": "tts_output.mp3", + "resource_id": "seed-tts-2.0", + "app_key": "aGjiRDfUWi", + "uid": "123123", + "format": "mp3", + "sample_rate": 24000, + "enable_timestamp": True, + } + keys = list(params.keys()) + # 覆盖默认参数 + for i, arg in enumerate(args): + # 类型转换 + if keys[i] == "sample_rate": + params[keys[i]] = int(arg) + elif keys[i] == "enable_timestamp": + # 支持多种布尔输入 + params[keys[i]] = str(arg).lower() in ("1", "true", "yes", "on") + else: + params[keys[i]] = arg + + await client.tts_request( + params["text"], + params["voice_type"], + params["context_texts"], + params["emotion"], + params["emotion_scale"], + params["speech_rate"], + params["loudness_rate"], + params["pitch"], + params["output"], + params["resource_id"], + params["app_key"], + params["uid"], + params["format"], + params["sample_rate"], + params["enable_timestamp"], + ) + + +if __name__ == "__main__": + asyncio.run(test(sys.argv[1:])) diff --git a/lightx2v/deploy/data_manager/__init__.py b/lightx2v/deploy/data_manager/__init__.py new file mode 100644 index 0000000..14ee9d3 --- /dev/null +++ b/lightx2v/deploy/data_manager/__init__.py @@ -0,0 +1,248 @@ +import io +import json +import os + +import torch +from PIL import Image + +from lightx2v.deploy.common.utils import class_try_catch_async + + +class BaseDataManager: + def __init__(self): + self.template_images_dir = None + self.template_audios_dir = None + self.template_videos_dir = None + self.template_tasks_dir = None + self.podcast_temp_session_dir = None + self.podcast_output_dir = None + + async def init(self): + pass + + async def close(self): + pass + + def fmt_path(self, base, filename, abs_path=None): + if abs_path: + return abs_path + else: + return os.path.join(base, filename) + + def to_device(self, data, device): + if isinstance(data, dict): + return {key: self.to_device(value, device) for key, value in data.items()} + elif isinstance(data, list): + return [self.to_device(item, device) for item in data] + elif isinstance(data, torch.Tensor): + return data.to(device) + else: + return data + + async def save_bytes(self, bytes_data, filename, abs_path=None): + raise NotImplementedError + + async def load_bytes(self, filename, abs_path=None): + raise NotImplementedError + + async def delete_bytes(self, filename, abs_path=None): + raise NotImplementedError + + async def presign_url(self, filename, abs_path=None): + return None + + async def recurrent_save(self, data, prefix): + if isinstance(data, dict): + return {k: await self.recurrent_save(v, f"{prefix}-{k}") for k, v in data.items()} + elif isinstance(data, list): + return [await self.recurrent_save(v, f"{prefix}-{idx}") for idx, v in enumerate(data)] + elif isinstance(data, torch.Tensor): + save_path = prefix + ".pt" + await self.save_tensor(data, save_path) + return save_path + elif isinstance(data, Image.Image): + save_path = prefix + ".png" + await self.save_image(data, save_path) + return save_path + else: + return data + + async def recurrent_load(self, data, device, prefix): + if isinstance(data, dict): + return {k: await self.recurrent_load(v, device, f"{prefix}-{k}") for k, v in data.items()} + elif isinstance(data, list): + return [await self.recurrent_load(v, device, f"{prefix}-{idx}") for idx, v in enumerate(data)] + elif isinstance(data, str) and data == prefix + ".pt": + return await self.load_tensor(data, device) + elif isinstance(data, str) and data == prefix + ".png": + return await self.load_image(data) + else: + return data + + async def recurrent_delete(self, data, prefix): + if isinstance(data, dict): + return {k: await self.recurrent_delete(v, f"{prefix}-{k}") for k, v in data.items()} + elif isinstance(data, list): + return [await self.recurrent_delete(v, f"{prefix}-{idx}") for idx, v in enumerate(data)] + elif isinstance(data, str) and data == prefix + ".pt": + await self.delete_bytes(data) + elif isinstance(data, str) and data == prefix + ".png": + await self.delete_bytes(data) + + @class_try_catch_async + async def save_object(self, data, filename): + data = await self.recurrent_save(data, filename) + bytes_data = json.dumps(data, ensure_ascii=False).encode("utf-8") + await self.save_bytes(bytes_data, filename) + + @class_try_catch_async + async def load_object(self, filename, device): + bytes_data = await self.load_bytes(filename) + data = json.loads(bytes_data.decode("utf-8")) + data = await self.recurrent_load(data, device, filename) + return data + + @class_try_catch_async + async def delete_object(self, filename): + bytes_data = await self.load_bytes(filename) + data = json.loads(bytes_data.decode("utf-8")) + await self.recurrent_delete(data, filename) + await self.delete_bytes(filename) + + @class_try_catch_async + async def save_tensor(self, data: torch.Tensor, filename): + buffer = io.BytesIO() + torch.save(data.to("cpu"), buffer) + await self.save_bytes(buffer.getvalue(), filename) + + @class_try_catch_async + async def load_tensor(self, filename, device): + bytes_data = await self.load_bytes(filename) + buffer = io.BytesIO(bytes_data) + t = torch.load(io.BytesIO(bytes_data)) + t = t.to(device) + return t + + @class_try_catch_async + async def save_image(self, data: Image.Image, filename): + buffer = io.BytesIO() + data.save(buffer, format="PNG") + await self.save_bytes(buffer.getvalue(), filename) + + @class_try_catch_async + async def load_image(self, filename): + bytes_data = await self.load_bytes(filename) + buffer = io.BytesIO(bytes_data) + img = Image.open(buffer).convert("RGB") + return img + + def get_delete_func(self, type): + maps = { + "TENSOR": self.delete_bytes, + "IMAGE": self.delete_bytes, + "OBJECT": self.delete_object, + "VIDEO": self.delete_bytes, + } + return maps[type] + + def get_template_dir(self, template_type): + if template_type == "audios": + return self.template_audios_dir + elif template_type == "images": + return self.template_images_dir + elif template_type == "videos": + return self.template_videos_dir + elif template_type == "tasks": + return self.template_tasks_dir + else: + raise ValueError(f"Invalid template type: {template_type}") + + @class_try_catch_async + async def list_template_files(self, template_type): + template_dir = self.get_template_dir(template_type) + if template_dir is None: + return [] + return await self.list_files(base_dir=template_dir) + + @class_try_catch_async + async def load_template_file(self, template_type, filename): + template_dir = self.get_template_dir(template_type) + if template_dir is None: + return None + return await self.load_bytes(None, abs_path=os.path.join(template_dir, filename)) + + @class_try_catch_async + async def template_file_exists(self, template_type, filename): + template_dir = self.get_template_dir(template_type) + if template_dir is None: + return None + return await self.file_exists(None, abs_path=os.path.join(template_dir, filename)) + + @class_try_catch_async + async def delete_template_file(self, template_type, filename): + template_dir = self.get_template_dir(template_type) + if template_dir is None: + return None + return await self.delete_bytes(None, abs_path=os.path.join(template_dir, filename)) + + @class_try_catch_async + async def save_template_file(self, template_type, filename, bytes_data): + template_dir = self.get_template_dir(template_type) + if template_dir is None: + return None + abs_path = os.path.join(template_dir, filename) + return await self.save_bytes(bytes_data, None, abs_path=abs_path) + + @class_try_catch_async + async def presign_template_url(self, template_type, filename): + template_dir = self.get_template_dir(template_type) + if template_dir is None: + return None + return await self.presign_url(None, abs_path=os.path.join(template_dir, filename)) + + @class_try_catch_async + async def list_podcast_temp_session_files(self, session_id): + session_dir = os.path.join(self.podcast_temp_session_dir, session_id) + return await self.list_files(base_dir=session_dir) + + @class_try_catch_async + async def save_podcast_temp_session_file(self, session_id, filename, bytes_data): + fpath = os.path.join(self.podcast_temp_session_dir, session_id, filename) + await self.save_bytes(bytes_data, None, abs_path=fpath) + + @class_try_catch_async + async def load_podcast_temp_session_file(self, session_id, filename): + fpath = os.path.join(self.podcast_temp_session_dir, session_id, filename) + return await self.load_bytes(None, abs_path=fpath) + + @class_try_catch_async + async def delete_podcast_temp_session_file(self, session_id, filename): + fpath = os.path.join(self.podcast_temp_session_dir, session_id, filename) + return await self.delete_bytes(None, abs_path=fpath) + + @class_try_catch_async + async def save_podcast_output_file(self, filename, bytes_data): + fpath = os.path.join(self.podcast_output_dir, filename) + await self.save_bytes(bytes_data, None, abs_path=fpath) + + @class_try_catch_async + async def load_podcast_output_file(self, filename): + fpath = os.path.join(self.podcast_output_dir, filename) + return await self.load_bytes(None, abs_path=fpath) + + @class_try_catch_async + async def delete_podcast_output_file(self, filename): + fpath = os.path.join(self.podcast_output_dir, filename) + return await self.delete_bytes(None, abs_path=fpath) + + @class_try_catch_async + async def presign_podcast_output_url(self, filename): + fpath = os.path.join(self.podcast_output_dir, filename) + return await self.presign_url(None, abs_path=fpath) + + +# Import data manager implementations +from .local_data_manager import LocalDataManager # noqa +from .s3_data_manager import S3DataManager # noqa + +__all__ = ["BaseDataManager", "LocalDataManager", "S3DataManager"] diff --git a/lightx2v/deploy/data_manager/local_data_manager.py b/lightx2v/deploy/data_manager/local_data_manager.py new file mode 100644 index 0000000..6e11e6c --- /dev/null +++ b/lightx2v/deploy/data_manager/local_data_manager.py @@ -0,0 +1,120 @@ +import asyncio +import os +import shutil + +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.data_manager import BaseDataManager + + +class LocalDataManager(BaseDataManager): + def __init__(self, local_dir, template_dir): + super().__init__() + self.local_dir = local_dir + self.name = "local" + if not os.path.exists(self.local_dir): + os.makedirs(self.local_dir) + if template_dir: + self.template_images_dir = os.path.join(template_dir, "images") + self.template_audios_dir = os.path.join(template_dir, "audios") + self.template_videos_dir = os.path.join(template_dir, "videos") + self.template_tasks_dir = os.path.join(template_dir, "tasks") + assert os.path.exists(self.template_images_dir), f"{self.template_images_dir} not exists!" + assert os.path.exists(self.template_audios_dir), f"{self.template_audios_dir} not exists!" + assert os.path.exists(self.template_videos_dir), f"{self.template_videos_dir} not exists!" + assert os.path.exists(self.template_tasks_dir), f"{self.template_tasks_dir} not exists!" + + # podcast temp session dir and output dir + self.podcast_temp_session_dir = os.path.join(self.local_dir, "podcast_temp_session") + self.podcast_output_dir = os.path.join(self.local_dir, "podcast_output") + os.makedirs(self.podcast_temp_session_dir, exist_ok=True) + os.makedirs(self.podcast_output_dir, exist_ok=True) + + @class_try_catch_async + async def save_bytes(self, bytes_data, filename, abs_path=None): + out_path = self.fmt_path(self.local_dir, filename, abs_path) + with open(out_path, "wb") as fout: + fout.write(bytes_data) + return True + + @class_try_catch_async + async def load_bytes(self, filename, abs_path=None): + inp_path = self.fmt_path(self.local_dir, filename, abs_path) + with open(inp_path, "rb") as fin: + return fin.read() + + @class_try_catch_async + async def delete_bytes(self, filename, abs_path=None): + inp_path = self.fmt_path(self.local_dir, filename, abs_path) + os.remove(inp_path) + logger.info(f"deleted local file {filename}") + return True + + @class_try_catch_async + async def file_exists(self, filename, abs_path=None): + filename = self.fmt_path(self.local_dir, filename, abs_path) + return os.path.exists(filename) + + @class_try_catch_async + async def list_files(self, base_dir=None): + prefix = base_dir if base_dir else self.local_dir + return os.listdir(prefix) + + @class_try_catch_async + async def create_podcast_temp_session_dir(self, session_id): + dir_path = os.path.join(self.podcast_temp_session_dir, session_id) + os.makedirs(dir_path, exist_ok=True) + return dir_path + + @class_try_catch_async + async def clear_podcast_temp_session_dir(self, session_id): + session_dir = os.path.join(self.podcast_temp_session_dir, session_id) + if os.path.isdir(session_dir): + shutil.rmtree(session_dir) + logger.info(f"cleared podcast temp session dir {session_dir}") + return True + + +async def test(): + import torch + from PIL import Image + + m = LocalDataManager("/data/nvme1/liuliang1/lightx2v/local_data", None) + await m.init() + + img = Image.open("/data/nvme1/liuliang1/lightx2v/assets/img_lightx2v.png") + tensor = torch.Tensor([233, 456, 789]).to(dtype=torch.bfloat16, device="cuda:0") + + await m.save_image(img, "test_img.png") + print(await m.load_image("test_img.png")) + + await m.save_tensor(tensor, "test_tensor.pt") + print(await m.load_tensor("test_tensor.pt", "cuda:0")) + + await m.save_object( + { + "images": [img, img], + "tensor": tensor, + "list": [ + [2, 0, 5, 5], + { + "1": "hello world", + "2": "world", + "3": img, + "t": tensor, + }, + "0609", + ], + }, + "test_object.json", + ) + print(await m.load_object("test_object.json", "cuda:0")) + + await m.get_delete_func("OBJECT")("test_object.json") + await m.get_delete_func("TENSOR")("test_tensor.pt") + await m.get_delete_func("IMAGE")("test_img.png") + + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/lightx2v/deploy/data_manager/s3_data_manager.py b/lightx2v/deploy/data_manager/s3_data_manager.py new file mode 100644 index 0000000..0d928fc --- /dev/null +++ b/lightx2v/deploy/data_manager/s3_data_manager.py @@ -0,0 +1,254 @@ +import asyncio +import hashlib +import json +import os + +import aioboto3 +import tos +from botocore.client import Config +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.data_manager import BaseDataManager + + +class S3DataManager(BaseDataManager): + def __init__(self, config_string, template_dir, max_retries=3): + super().__init__() + self.name = "s3" + self.config = json.loads(config_string) + self.max_retries = max_retries + self.bucket_name = self.config["bucket_name"] + self.aws_access_key_id = self.config["aws_access_key_id"] + self.aws_secret_access_key = self.config["aws_secret_access_key"] + self.endpoint_url = self.config["endpoint_url"] + self.base_path = self.config["base_path"] + self.connect_timeout = self.config.get("connect_timeout", 60) + self.read_timeout = self.config.get("read_timeout", 60) + self.write_timeout = self.config.get("write_timeout", 10) + self.addressing_style = self.config.get("addressing_style", None) + self.region = self.config.get("region", None) + self.cdn_url = self.config.get("cdn_url", "") + self.session = None + self.s3_client = None + self.presign_client = None + if template_dir: + self.template_images_dir = os.path.join(template_dir, "images") + self.template_audios_dir = os.path.join(template_dir, "audios") + self.template_videos_dir = os.path.join(template_dir, "videos") + self.template_tasks_dir = os.path.join(template_dir, "tasks") + + # podcast temp session dir and output dir + self.podcast_temp_session_dir = os.path.join(self.base_path, "podcast_temp_session") + self.podcast_output_dir = os.path.join(self.base_path, "podcast_output") + + async def init_presign_client(self): + # init tos client for volces.com + if "volces.com" in self.endpoint_url: + self.presign_client = tos.TosClientV2( + self.aws_access_key_id, + self.aws_secret_access_key, + self.endpoint_url.replace("tos-s3-", "tos-"), + self.region, + ) + + async def init(self): + for i in range(self.max_retries): + try: + logger.info(f"S3DataManager init with config: {self.config} (attempt {i + 1}/{self.max_retries}) ...") + s3_config = {"payload_signing_enabled": True} + if self.addressing_style: + s3_config["addressing_style"] = self.addressing_style + self.session = aioboto3.Session() + self.s3_client = await self.session.client( + "s3", + aws_access_key_id=self.aws_access_key_id, + aws_secret_access_key=self.aws_secret_access_key, + endpoint_url=self.endpoint_url, + config=Config( + signature_version="s3v4", + s3=s3_config, + connect_timeout=self.connect_timeout, + read_timeout=self.read_timeout, + parameter_validation=False, + max_pool_connections=50, + ), + ).__aenter__() + + try: + await self.s3_client.head_bucket(Bucket=self.bucket_name) + logger.info(f"check bucket {self.bucket_name} success") + except Exception as e: + logger.info(f"check bucket {self.bucket_name} error: {e}, try to create it...") + await self.s3_client.create_bucket(Bucket=self.bucket_name) + + await self.init_presign_client() + logger.info(f"Successfully init S3 bucket: {self.bucket_name} with timeouts - connect: {self.connect_timeout}s, read: {self.read_timeout}s, write: {self.write_timeout}s") + return + except Exception as e: + logger.warning(f"Failed to connect to S3: {e}") + await asyncio.sleep(1) + + async def close(self): + if self.s3_client: + await self.s3_client.__aexit__(None, None, None) + if self.session: + self.session = None + + @class_try_catch_async + async def save_bytes(self, bytes_data, filename, abs_path=None): + filename = self.fmt_path(self.base_path, filename, abs_path) + content_sha256 = hashlib.sha256(bytes_data).hexdigest() + await self.s3_client.put_object( + Bucket=self.bucket_name, + Key=filename, + Body=bytes_data, + ChecksumSHA256=content_sha256, + ContentType="application/octet-stream", + ) + return True + + @class_try_catch_async + async def load_bytes(self, filename, abs_path=None): + filename = self.fmt_path(self.base_path, filename, abs_path) + response = await self.s3_client.get_object(Bucket=self.bucket_name, Key=filename) + return await response["Body"].read() + + @class_try_catch_async + async def delete_bytes(self, filename, abs_path=None): + filename = self.fmt_path(self.base_path, filename, abs_path) + await self.s3_client.delete_object(Bucket=self.bucket_name, Key=filename) + logger.info(f"deleted s3 file {filename}") + return True + + @class_try_catch_async + async def file_exists(self, filename, abs_path=None): + filename = self.fmt_path(self.base_path, filename, abs_path) + try: + await self.s3_client.head_object(Bucket=self.bucket_name, Key=filename) + return True + except Exception: + return False + + @class_try_catch_async + async def list_files(self, base_dir=None): + if base_dir: + prefix = self.fmt_path(self.base_path, None, abs_path=base_dir) + else: + prefix = self.base_path + prefix = prefix + "/" if not prefix.endswith("/") else prefix + + # Handle pagination for S3 list_objects_v2 + files = [] + continuation_token = None + page = 1 + + while True: + list_kwargs = {"Bucket": self.bucket_name, "Prefix": prefix, "MaxKeys": 1000} + if continuation_token: + list_kwargs["ContinuationToken"] = continuation_token + response = await self.s3_client.list_objects_v2(**list_kwargs) + + if "Contents" in response: + page_files = [] + for obj in response["Contents"]: + # Remove the prefix from the key to get just the filename + key = obj["Key"] + if key.startswith(prefix): + filename = key[len(prefix) :] + if filename: # Skip empty filenames (the directory itself) + page_files.append(filename) + files.extend(page_files) + else: + logger.warning(f"[S3DataManager.list_files] Page {page}: No files found in this page.") + + # Check if there are more pages + if response.get("IsTruncated", False): + continuation_token = response.get("NextContinuationToken") + page += 1 + else: + break + return files + + @class_try_catch_async + async def presign_url(self, filename, abs_path=None): + filename = self.fmt_path(self.base_path, filename, abs_path) + if self.cdn_url: + return f"{self.cdn_url}/{filename}" + + if self.presign_client: + expires = self.config.get("presign_expires", 24 * 60 * 60) + out = await asyncio.to_thread(self.presign_client.pre_signed_url, tos.HttpMethodType.Http_Method_Get, self.bucket_name, filename, expires) + return out.signed_url + else: + return None + + @class_try_catch_async + async def create_podcast_temp_session_dir(self, session_id): + pass + + @class_try_catch_async + async def clear_podcast_temp_session_dir(self, session_id): + session_dir = os.path.join(self.podcast_temp_session_dir, session_id) + fs = await self.list_files(base_dir=session_dir) + logger.info(f"clear podcast temp session dir {session_dir} with files: {fs}") + for f in fs: + await self.delete_bytes(f, abs_path=os.path.join(session_dir, f)) + + +async def test(): + import torch + from PIL import Image + + s3_config = { + "aws_access_key_id": "xxx", + "aws_secret_access_key": "xx", + "endpoint_url": "xxx", + "bucket_name": "xxx", + "base_path": "xxx", + "connect_timeout": 10, + "read_timeout": 10, + "write_timeout": 10, + } + + m = S3DataManager(json.dumps(s3_config), None) + await m.init() + + img = Image.open("../../../assets/img_lightx2v.png") + tensor = torch.Tensor([233, 456, 789]).to(dtype=torch.bfloat16, device="cuda:0") + + await m.save_image(img, "test_img.png") + print(await m.load_image("test_img.png")) + + await m.save_tensor(tensor, "test_tensor.pt") + print(await m.load_tensor("test_tensor.pt", "cuda:0")) + + await m.save_object( + { + "images": [img, img], + "tensor": tensor, + "list": [ + [2, 0, 5, 5], + { + "1": "hello world", + "2": "world", + "3": img, + "t": tensor, + }, + "0609", + ], + }, + "test_object.json", + ) + print(await m.load_object("test_object.json", "cuda:0")) + + print("all files:", await m.list_files()) + await m.get_delete_func("OBJECT")("test_object.json") + await m.get_delete_func("TENSOR")("test_tensor.pt") + await m.get_delete_func("IMAGE")("test_img.png") + print("after delete all files", await m.list_files()) + await m.close() + + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/lightx2v/deploy/queue_manager/__init__.py b/lightx2v/deploy/queue_manager/__init__.py new file mode 100644 index 0000000..dee49b8 --- /dev/null +++ b/lightx2v/deploy/queue_manager/__init__.py @@ -0,0 +1,25 @@ +class BaseQueueManager: + def __init__(self): + pass + + async def init(self): + pass + + async def close(self): + pass + + async def put_subtask(self, subtask): + raise NotImplementedError + + async def get_subtasks(self, queue, max_batch, timeout): + raise NotImplementedError + + async def pending_num(self, queue): + raise NotImplementedError + + +# Import queue manager implementations +from .local_queue_manager import LocalQueueManager # noqa +from .rabbitmq_queue_manager import RabbitMQQueueManager # noqa + +__all__ = ["BaseQueueManager", "LocalQueueManager", "RabbitMQQueueManager"] diff --git a/lightx2v/deploy/queue_manager/local_queue_manager.py b/lightx2v/deploy/queue_manager/local_queue_manager.py new file mode 100644 index 0000000..9a87529 --- /dev/null +++ b/lightx2v/deploy/queue_manager/local_queue_manager.py @@ -0,0 +1,113 @@ +import asyncio +import json +import os +import time +import traceback + +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.queue_manager import BaseQueueManager + + +class LocalQueueManager(BaseQueueManager): + def __init__(self, local_dir): + self.local_dir = local_dir + if not os.path.exists(self.local_dir): + os.makedirs(self.local_dir) + + async def get_conn(self): + pass + + async def del_conn(self): + pass + + async def declare_queue(self, queue): + pass + + @class_try_catch_async + async def put_subtask(self, subtask): + out_name = self.get_filename(subtask["queue"]) + keys = ["queue", "task_id", "worker_name", "inputs", "outputs", "params"] + msg = json.dumps({k: subtask[k] for k in keys}) + "\n" + logger.info(f"Local published subtask: ({subtask['task_id']}, {subtask['worker_name']}) to {subtask['queue']}") + with open(out_name, "a") as fout: + fout.write(msg) + return True + + def read_first_line(self, queue): + out_name = self.get_filename(queue) + if not os.path.exists(out_name): + return None + lines = [] + with open(out_name) as fin: + lines = fin.readlines() + if len(lines) <= 0: + return None + subtask = json.loads(lines[0]) + msgs = "".join(lines[1:]) + fout = open(out_name, "w") + fout.write(msgs) + fout.close() + return subtask + + @class_try_catch_async + async def get_subtasks(self, queue, max_batch, timeout): + try: + t0 = time.time() + subtasks = [] + while True: + subtask = self.read_first_line(queue) + if subtask: + subtasks.append(subtask) + if len(subtasks) >= max_batch: + return subtasks + else: + continue + else: + if len(subtasks) > 0: + return subtasks + if time.time() - t0 > timeout: + return None + await asyncio.sleep(1) + except asyncio.CancelledError: + logger.warning(f"local queue get_subtasks for {queue} cancelled") + return None + except: # noqa + logger.warning(f"local queue get_subtasks for {queue} failed: {traceback.format_exc()}") + return None + + def get_filename(self, queue): + return os.path.join(self.local_dir, f"{queue}.jsonl") + + @class_try_catch_async + async def pending_num(self, queue): + out_name = self.get_filename(queue) + if not os.path.exists(out_name): + return 0 + lines = [] + with open(out_name) as fin: + lines = fin.readlines() + return len(lines) + + +async def test(): + q = LocalQueueManager("/data/nvme1/liuliang1/lightx2v/local_queue") + await q.init() + subtask = { + "task_id": "test-subtask-id", + "queue": "test_queue", + "worker_name": "test_worker", + "inputs": {}, + "outputs": {}, + "params": {}, + } + await q.put_subtask(subtask) + await asyncio.sleep(5) + for i in range(2): + subtask = await q.get_subtasks("test_queue", 3, 5) + print("get subtask:", subtask) + + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/lightx2v/deploy/queue_manager/rabbitmq_queue_manager.py b/lightx2v/deploy/queue_manager/rabbitmq_queue_manager.py new file mode 100644 index 0000000..fe8c3f1 --- /dev/null +++ b/lightx2v/deploy/queue_manager/rabbitmq_queue_manager.py @@ -0,0 +1,124 @@ +import asyncio +import json +import traceback + +import aio_pika +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.queue_manager import BaseQueueManager + + +class RabbitMQQueueManager(BaseQueueManager): + def __init__(self, conn_url, max_retries=3): + self.conn_url = conn_url + self.max_retries = max_retries + self.conn = None + self.chan = None + self.queues = set() + + async def init(self): + await self.get_conn() + + async def close(self): + await self.del_conn() + + async def get_conn(self): + if self.chan and self.conn: + return + for i in range(self.max_retries): + try: + logger.info(f"Connect to RabbitMQ (attempt {i + 1}/{self.max_retries}..)") + self.conn = await aio_pika.connect_robust(self.conn_url) + self.chan = await self.conn.channel() + self.queues = set() + await self.chan.set_qos(prefetch_count=10) + logger.info("Successfully connected to RabbitMQ") + return + except Exception as e: + logger.warning(f"Failed to connect to RabbitMQ: {e}") + if i < self.max_retries - 1: + await asyncio.sleep(1) + else: + raise + + async def declare_queue(self, queue): + if queue not in self.queues: + await self.get_conn() + await self.chan.declare_queue(queue, durable=True) + self.queues.add(queue) + return await self.chan.get_queue(queue) + + @class_try_catch_async + async def put_subtask(self, subtask): + queue = subtask["queue"] + await self.declare_queue(queue) + keys = ["queue", "task_id", "worker_name", "inputs", "outputs", "params"] + msg = json.dumps({k: subtask[k] for k in keys}).encode("utf-8") + message = aio_pika.Message(body=msg, delivery_mode=aio_pika.DeliveryMode.PERSISTENT, content_type="application/json") + await self.chan.default_exchange.publish(message, routing_key=queue) + logger.info(f"Rabbitmq published subtask: ({subtask['task_id']}, {subtask['worker_name']}) to {queue}") + return True + + async def get_subtasks(self, queue, max_batch, timeout): + try: + q = await self.declare_queue(queue) + subtasks = [] + async with q.iterator() as qiter: + async for message in qiter: + await message.ack() + subtask = json.loads(message.body.decode("utf-8")) + subtasks.append(subtask) + if len(subtasks) >= max_batch: + return subtasks + while True: + message = await q.get(no_ack=False, fail=False) + if message: + await message.ack() + subtask = json.loads(message.body.decode("utf-8")) + subtasks.append(subtask) + if len(subtasks) >= max_batch: + return subtasks + else: + return subtasks + except asyncio.CancelledError: + logger.warning(f"rabbitmq get_subtasks for {queue} cancelled") + return None + except: # noqa + logger.warning(f"rabbitmq get_subtasks for {queue} failed: {traceback.format_exc()}") + return None + + @class_try_catch_async + async def pending_num(self, queue): + q = await self.declare_queue(queue) + return q.declaration_result.message_count + + async def del_conn(self): + if self.chan: + await self.chan.close() + if self.conn: + await self.conn.close() + + +async def test(): + conn_url = "amqp://username:password@127.0.0.1:5672" + q = RabbitMQQueueManager(conn_url) + await q.init() + subtask = { + "task_id": "test-subtask-id", + "queue": "test_queue", + "worker_name": "test_worker", + "inputs": {}, + "outputs": {}, + "params": {}, + } + await q.put_subtask(subtask) + await asyncio.sleep(5) + for i in range(2): + subtask = await q.get_subtasks("test_queue", 3, 5) + print("get subtask:", subtask) + await q.close() + + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/lightx2v/deploy/server/__init__.py b/lightx2v/deploy/server/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/deploy/server/__main__.py b/lightx2v/deploy/server/__main__.py new file mode 100644 index 0000000..348fe07 --- /dev/null +++ b/lightx2v/deploy/server/__main__.py @@ -0,0 +1,1490 @@ +import argparse +import asyncio +import base64 +import copy +import json +import mimetypes +import os +import re +import tempfile +import traceback +import uuid +from contextlib import asynccontextmanager + +import uvicorn +from fastapi import Depends, FastAPI, HTTPException, Request, WebSocket, WebSocketDisconnect +from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse, HTMLResponse, JSONResponse, Response +from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer +from fastapi.staticfiles import StaticFiles +from loguru import logger +from pydantic import BaseModel + +from lightx2v.deploy.common.audio_separator import AudioSeparator +from lightx2v.deploy.common.face_detector import FaceDetector +from lightx2v.deploy.common.pipeline import Pipeline +from lightx2v.deploy.common.podcasts import VolcEnginePodcastClient +from lightx2v.deploy.common.utils import check_params, data_name, fetch_resource, format_image_data, load_inputs +from lightx2v.deploy.common.volcengine_tts import VolcEngineTTSClient +from lightx2v.deploy.data_manager import LocalDataManager, S3DataManager +from lightx2v.deploy.queue_manager import LocalQueueManager, RabbitMQQueueManager +from lightx2v.deploy.server.auth import AuthManager +from lightx2v.deploy.server.metrics import MetricMonitor +from lightx2v.deploy.server.monitor import ServerMonitor, WorkerStatus +from lightx2v.deploy.server.redis_monitor import RedisServerMonitor +from lightx2v.deploy.task_manager import FinishedStatus, LocalTaskManager, PostgresSQLTaskManager, TaskStatus +from lightx2v.utils.service_utils import ProcessManager + +# ========================= +# Pydantic Models +# ========================= + + +class TTSRequest(BaseModel): + text: str + voice_type: str + context_texts: str = "" + emotion: str = "" + emotion_scale: int = 3 + speech_rate: int = 0 + pitch: int = 0 + loudness_rate: int = 0 + resource_id: str = "seed-tts-1.0" + + +class RefreshTokenRequest(BaseModel): + refresh_token: str + + +# ========================= +# FastAPI Related Code +# ========================= + +model_pipelines = None +task_manager = None +data_manager = None +queue_manager = None +server_monitor = None +auth_manager = None +metrics_monitor = MetricMonitor() +volcengine_tts_client = None +volcengine_podcast_client = None +face_detector = None +audio_separator = None + + +@asynccontextmanager +async def lifespan(app: FastAPI): + await task_manager.init() + await task_manager.mark_server_restart() + await data_manager.init() + await queue_manager.init() + await server_monitor.init() + asyncio.create_task(server_monitor.loop()) + yield + await server_monitor.close() + await queue_manager.close() + await data_manager.close() + await task_manager.close() + + +app = FastAPI(lifespan=lifespan) + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + + +@app.exception_handler(HTTPException) +async def http_exception_handler(request: Request, exc: HTTPException): + logger.error(f"HTTP Exception: {exc.status_code} - {exc.detail} for {request.url}") + return JSONResponse(status_code=exc.status_code, content={"message": exc.detail}) + + +static_dir = os.path.join(os.path.dirname(__file__), "static") +app.mount("/static", StaticFiles(directory=static_dir), name="static") + +# 添加assets目录的静态文件服务 +assets_dir = os.path.join(os.path.dirname(__file__), "static", "assets") +app.mount("/assets", StaticFiles(directory=assets_dir), name="assets") +security = HTTPBearer() + + +async def verify_user_access(credentials: HTTPAuthorizationCredentials = Depends(security)): + token = credentials.credentials + payload = auth_manager.verify_jwt_token(token) + user_id = payload.get("user_id", None) + if not user_id: + raise HTTPException(status_code=401, detail="Invalid user") + user = await task_manager.query_user(user_id) + # logger.info(f"Verfiy user access: {payload}") + if user is None or user["user_id"] != user_id: + raise HTTPException(status_code=401, detail="Invalid user") + return user + + +async def verify_user_access_from_query(request: Request): + """从查询参数中验证用户访问权限""" + # 首先尝试从 Authorization 头部获取 token + auth_header = request.headers.get("Authorization") + token = None + + if auth_header and auth_header.startswith("Bearer "): + token = auth_header[7:] # 移除 "Bearer " 前缀 + else: + # 如果没有 Authorization 头部,尝试从查询参数获取 + token = request.query_params.get("token") + + payload = auth_manager.verify_jwt_token(token) + user_id = payload.get("user_id", None) + if not user_id: + raise HTTPException(status_code=401, detail="Invalid user") + user = await task_manager.query_user(user_id) + if user is None or user["user_id"] != user_id: + raise HTTPException(status_code=401, detail="Invalid user") + return user + + +async def verify_worker_access(credentials: HTTPAuthorizationCredentials = Depends(security)): + token = credentials.credentials + if not auth_manager.verify_worker_token(token): + raise HTTPException(status_code=403, detail="Invalid worker token") + return True + + +def error_response(e, code): + return JSONResponse({"message": f"error: {e}!"}, status_code=code) + + +def format_user_response(user): + return { + "user_id": user.get("user_id"), + "id": user.get("id"), + "source": user.get("source"), + "username": user.get("username") or "", + "email": user.get("email") or "", + "homepage": user.get("homepage") or "", + "avatar_url": user.get("avatar_url") or "", + } + + +def guess_file_type(name, default_type): + content_type, _ = mimetypes.guess_type(name) + if content_type is None: + content_type = default_type + return content_type + + +@app.get("/", response_class=HTMLResponse) +async def root(): + with open(os.path.join(static_dir, "index.html"), "r", encoding="utf-8") as f: + return HTMLResponse(content=f.read()) + + +@app.get("/sitemap.xml", response_class=HTMLResponse) +async def sitemap(): + with open(os.path.join(os.path.dirname(__file__), "frontend", "dist", "sitemap.xml"), "r", encoding="utf-8") as f: + return HTMLResponse(content=f.read()) + + +@app.get("/auth/login/github") +async def github_auth(request: Request): + client_id = auth_manager.github_client_id + redirect_uri = f"{request.base_url}" + auth_url = f"https://github.com/login/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}" + return {"auth_url": auth_url} + + +@app.get("/auth/callback/github") +async def github_callback(request: Request): + try: + code = request.query_params.get("code") + if not code: + return error_response("Missing authorization code", 400) + user_info = await auth_manager.auth_github(code) + user_id = await task_manager.create_user(user_info) + user_info["user_id"] = user_id + user_response = format_user_response(user_info) + access_token, refresh_token = auth_manager.create_tokens(user_response) + logger.info(f"GitHub callback: user_info: {user_response}, access token issued") + return {"access_token": access_token, "refresh_token": refresh_token, "user_info": user_response} + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/auth/login/google") +async def google_auth(request: Request): + client_id = auth_manager.google_client_id + redirect_uri = auth_manager.google_redirect_uri + auth_url = f"https://accounts.google.com/o/oauth2/v2/auth?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&scope=openid%20email%20profile&access_type=offline" + logger.info(f"Google auth: auth_url: {auth_url}") + return {"auth_url": auth_url} + + +@app.get("/auth/callback/google") +async def google_callback(request: Request): + try: + code = request.query_params.get("code") + if not code: + return error_response("Missing authorization code", 400) + user_info = await auth_manager.auth_google(code) + user_id = await task_manager.create_user(user_info) + user_info["user_id"] = user_id + user_response = format_user_response(user_info) + access_token, refresh_token = auth_manager.create_tokens(user_response) + logger.info(f"Google callback: user_info: {user_response}, access token issued") + return {"access_token": access_token, "refresh_token": refresh_token, "user_info": user_response} + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/auth/login/sms") +async def sms_auth(request: Request): + try: + phone_number = request.query_params.get("phone_number") + if not phone_number: + return error_response("Missing phone number", 400) + ok = await auth_manager.send_sms(phone_number) + if not ok: + return error_response("SMS send failed", 400) + return {"msg": "SMS send successfully"} + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/auth/callback/sms") +async def sms_callback(request: Request): + try: + phone_number = request.query_params.get("phone_number") + verify_code = request.query_params.get("verify_code") + if not phone_number or not verify_code: + return error_response("Missing phone number or verify code", 400) + user_info = await auth_manager.check_sms(phone_number, verify_code) + if not user_info: + return error_response("SMS verify failed", 400) + + user_id = await task_manager.create_user(user_info) + user_info["user_id"] = user_id + user_response = format_user_response(user_info) + access_token, refresh_token = auth_manager.create_tokens(user_response) + logger.info(f"SMS callback: user_info: {user_response}, access token issued") + return {"access_token": access_token, "refresh_token": refresh_token, "user_info": user_response} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.post("/auth/refresh") +async def refresh_access_token(request: RefreshTokenRequest): + try: + payload = auth_manager.verify_refresh_token(request.refresh_token) + user_id = payload.get("user_id") + if not user_id: + raise HTTPException(status_code=401, detail="Invalid refresh token") + user = await task_manager.query_user(user_id) + if user is None or user.get("user_id") != user_id: + raise HTTPException(status_code=401, detail="Invalid user") + user_info = format_user_response(user) + access_token, refresh_token = auth_manager.create_tokens(user_info) + return {"access_token": access_token, "refresh_token": refresh_token, "user_info": user_info} + except HTTPException as exc: + raise exc + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +async def prepare_subtasks(task_id): + # schedule next subtasks and pend, put to message queue + subtasks = await task_manager.next_subtasks(task_id) + for sub in subtasks: + logger.info(f"Prepare ready subtask: ({task_id}, {sub['worker_name']})") + r = await queue_manager.put_subtask(sub) + assert r, "put subtask to queue error" + await server_monitor.pending_subtasks_add(sub["queue"], sub["task_id"]) + + +def format_task(task): + task["status"] = task["status"].name + task["model_cls"] = model_pipelines.outer_model_name(task["model_cls"]) + + +@app.get("/api/v1/model/list") +async def api_v1_model_list(user=Depends(verify_user_access)): + try: + return {"models": model_pipelines.get_model_lists()} + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.post("/api/v1/task/submit") +async def api_v1_task_submit(request: Request, user=Depends(verify_user_access)): + task_id = None + try: + msg = await server_monitor.check_user_busy(user["user_id"], active_new_task=True) + if msg is not True: + return error_response(msg, 400) + params = await request.json() + keys = [params.pop("task"), params.pop("model_cls"), params.pop("stage")] + keys[1] = model_pipelines.inner_model_name(keys[1]) + assert len(params["prompt"]) > 0, "valid prompt is required" + + # get worker infos, model input names + workers = model_pipelines.get_workers(keys) + inputs = model_pipelines.get_inputs(keys) + outputs = model_pipelines.get_outputs(keys) + types = model_pipelines.get_types(keys) + check_params(params, inputs, outputs, types) + + # check if task can be published to queues + queues = [v["queue"] for v in workers.values()] + wait_time = await server_monitor.check_queue_busy(keys, queues) + if wait_time is None: + return error_response(f"Queue busy, please try again later", 500) + + # process multimodal inputs data + inputs_data = await load_inputs(params, inputs, types) + + # init task (we need task_id before preprocessing to save processed files) + task_id = await task_manager.create_task(keys, workers, params, inputs, outputs, user["user_id"]) + logger.info(f"Submit task: {task_id} {params}") + + # save multimodal inputs data + for inp, data in inputs_data.items(): + await data_manager.save_bytes(data, data_name(inp, task_id)) + + await prepare_subtasks(task_id) + return {"task_id": task_id, "workers": workers, "params": params, "wait_time": wait_time} + + except Exception as e: + traceback.print_exc() + if task_id: + await task_manager.finish_subtasks(task_id, TaskStatus.FAILED, fail_msg=f"submit failed: {e}") + return error_response(str(e), 500) + + +@app.get("/api/v1/task/query") +async def api_v1_task_query(request: Request, user=Depends(verify_user_access)): + try: + if "task_ids" in request.query_params: + task_ids = request.query_params["task_ids"].split(",") + tasks = [] + for task_id in task_ids: + task_id = task_id.strip() + if task_id: + task, subtasks = await task_manager.query_task(task_id, user["user_id"], only_task=False) + if task is not None: + task["subtasks"] = await server_monitor.format_subtask(subtasks) + format_task(task) + tasks.append(task) + return {"tasks": tasks} + + # 单个任务查询 + task_id = request.query_params["task_id"] + task, subtasks = await task_manager.query_task(task_id, user["user_id"], only_task=False) + if task is None: + return error_response(f"Task {task_id} not found", 404) + task["subtasks"] = await server_monitor.format_subtask(subtasks) + format_task(task) + return task + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/task/list") +async def api_v1_task_list(request: Request, user=Depends(verify_user_access)): + try: + user_id = user["user_id"] + page = int(request.query_params.get("page", 1)) + page_size = int(request.query_params.get("page_size", 10)) + assert page > 0 and page_size > 0, "page and page_size must be greater than 0" + status_filter = request.query_params.get("status", None) + + query_params = {"user_id": user_id} + if status_filter and status_filter != "ALL": + query_params["status"] = TaskStatus[status_filter.upper()] + + total_tasks = await task_manager.list_tasks(count=True, **query_params) + total_pages = (total_tasks + page_size - 1) // page_size + page_info = {"page": page, "page_size": page_size, "total": total_tasks, "total_pages": total_pages} + if page > total_pages: + return {"tasks": [], "pagination": page_info} + + query_params["offset"] = (page - 1) * page_size + query_params["limit"] = page_size + + tasks = await task_manager.list_tasks(**query_params) + for task in tasks: + format_task(task) + + return {"tasks": tasks, "pagination": page_info} + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/task/result_url") +async def api_v1_task_result_url(request: Request, user=Depends(verify_user_access)): + try: + name = request.query_params["name"] + task_id = request.query_params["task_id"] + task = await task_manager.query_task(task_id, user_id=user["user_id"]) + assert task is not None, f"Task {task_id} not found" + assert task["status"] == TaskStatus.SUCCEED, f"Task {task_id} not succeed" + assert name in task["outputs"], f"Output {name} not found in task {task_id}" + assert name not in task["params"], f"Output {name} is a stream" + + url = await data_manager.presign_url(task["outputs"][name]) + if url is None: + url = f"./assets/task/result?task_id={task_id}&name={name}" + return {"url": url} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/task/input_url") +async def api_v1_task_input_url(request: Request, user=Depends(verify_user_access)): + try: + name = request.query_params["name"] + task_id = request.query_params["task_id"] + filename = request.query_params.get("filename", None) + + task = await task_manager.query_task(task_id, user_id=user["user_id"]) + assert task is not None, f"Task {task_id} not found" + assert name in task["inputs"], f"Input {name} not found in task {task_id}" + if name in task["params"]: + return error_response(f"Input {name} is a stream", 400) + + # eg, multi person audio directory input + if filename is not None: + extra_inputs = task["params"]["extra_inputs"][name] + name = f"{name}/{filename}" + assert name in task["inputs"], f"Extra input {name} not found in task {task_id}" + assert name in extra_inputs, f"Filename {filename} not found in extra inputs" + + url = await data_manager.presign_url(task["inputs"][name]) + if url is None: + url = f"./assets/task/input?task_id={task_id}&name={name}" + if filename is not None: + url += f"&filename={filename}" + return {"url": url} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/assets/task/result") +async def assets_task_result(request: Request, user=Depends(verify_user_access_from_query)): + try: + name = request.query_params["name"] + task_id = request.query_params["task_id"] + task = await task_manager.query_task(task_id, user_id=user["user_id"]) + assert task is not None, f"Task {task_id} not found" + assert task["status"] == TaskStatus.SUCCEED, f"Task {task_id} not succeed" + assert name in task["outputs"], f"Output {name} not found in task {task_id}" + assert name not in task["params"], f"Output {name} is a stream" + data = await data_manager.load_bytes(task["outputs"][name]) + + # set correct Content-Type + content_type = guess_file_type(name, "application/octet-stream") + headers = {"Content-Disposition": f'attachment; filename="{name}"'} + headers["Cache-Control"] = "public, max-age=3600" + return Response(content=data, media_type=content_type, headers=headers) + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/assets/task/input") +async def assets_task_input(request: Request, user=Depends(verify_user_access_from_query)): + try: + name = request.query_params["name"] + task_id = request.query_params["task_id"] + filename = request.query_params.get("filename", None) + + task = await task_manager.query_task(task_id, user_id=user["user_id"]) + assert task is not None, f"Task {task_id} not found" + assert name in task["inputs"], f"Input {name} not found in task {task_id}" + if name in task["params"]: + return error_response(f"Input {name} is a stream", 400) + + # eg, multi person audio directory input + if filename is not None: + extra_inputs = task["params"]["extra_inputs"][name] + name = f"{name}/{filename}" + assert name in task["inputs"], f"Extra input {name} not found in task {task_id}" + assert name in extra_inputs, f"Filename {filename} not found in extra inputs" + data = await data_manager.load_bytes(task["inputs"][name]) + + # set correct Content-Type + content_type = guess_file_type(name, "application/octet-stream") + headers = {"Content-Disposition": f'attachment; filename="{name}"'} + headers["Cache-Control"] = "public, max-age=3600" + return Response(content=data, media_type=content_type, headers=headers) + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/task/cancel") +async def api_v1_task_cancel(request: Request, user=Depends(verify_user_access)): + try: + task_id = request.query_params["task_id"] + ret = await task_manager.cancel_task(task_id, user_id=user["user_id"]) + logger.warning(f"Task {task_id} cancelled: {ret}") + if ret is True: + return {"msg": "Task cancelled successfully"} + else: + return error_response({"error": f"Task {task_id} cancel failed: {ret}"}, 400) + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/task/resume") +async def api_v1_task_resume(request: Request, user=Depends(verify_user_access)): + try: + task_id = request.query_params["task_id"] + + task = await task_manager.query_task(task_id, user_id=user["user_id"]) + keys = [task["task_type"], task["model_cls"], task["stage"]] + if not model_pipelines.check_item_by_keys(keys): + return error_response(f"Model {keys} is not supported now, please submit a new task", 400) + + ret = await task_manager.resume_task(task_id, user_id=user["user_id"], all_subtask=False) + if ret is True: + await prepare_subtasks(task_id) + return {"msg": "ok"} + else: + return error_response(f"Task {task_id} resume failed: {ret}", 400) + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.delete("/api/v1/task/delete") +async def api_v1_task_delete(request: Request, user=Depends(verify_user_access)): + try: + task_id = request.query_params["task_id"] + + task = await task_manager.query_task(task_id, user["user_id"], only_task=True) + if not task: + return error_response("Task not found", 404) + + if task["status"] not in FinishedStatus: + return error_response("Only finished tasks can be deleted", 400) + + # delete task record + success = await task_manager.delete_task(task_id, user["user_id"]) + if success: + logger.info(f"Task {task_id} deleted by user {user['user_id']}") + return JSONResponse({"message": "Task deleted successfully"}) + else: + return error_response("Failed to delete task", 400) + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.post("/api/v1/worker/fetch") +async def api_v1_worker_fetch(request: Request, valid=Depends(verify_worker_access)): + try: + params = await request.json() + logger.info(f"Worker fetching: {params}") + keys = params.pop("worker_keys") + identity = params.pop("worker_identity") + max_batch = params.get("max_batch", 1) + timeout = params.get("timeout", 5) + + # check client disconnected + async def check_client(request, fetch_task, identity, queue): + while True: + msg = await request.receive() + if msg["type"] == "http.disconnect": + logger.warning(f"Worker {identity} {queue} disconnected, req: {request.client}, {msg}") + fetch_task.cancel() + await server_monitor.worker_update(queue, identity, WorkerStatus.DISCONNECT) + return + await asyncio.sleep(1) + + # get worker info + worker = model_pipelines.get_worker(keys) + await server_monitor.worker_update(worker["queue"], identity, WorkerStatus.FETCHING) + + fetch_task = asyncio.create_task(queue_manager.get_subtasks(worker["queue"], max_batch, timeout)) + check_task = asyncio.create_task(check_client(request, fetch_task, identity, worker["queue"])) + try: + subtasks = await asyncio.wait_for(fetch_task, timeout=timeout) + except asyncio.TimeoutError: + subtasks = [] + fetch_task.cancel() + check_task.cancel() + + subtasks = [] if subtasks is None else subtasks + for sub in subtasks: + await server_monitor.pending_subtasks_sub(sub["queue"], sub["task_id"]) + valid_subtasks = await task_manager.run_subtasks(subtasks, identity) + valids = [sub["task_id"] for sub in valid_subtasks] + + if len(valid_subtasks) > 0: + await server_monitor.worker_update(worker["queue"], identity, WorkerStatus.FETCHED) + logger.info(f"Worker {identity} {keys} {request.client} fetched {valids}") + else: + await server_monitor.worker_update(worker["queue"], identity, WorkerStatus.DISCONNECT) + return {"subtasks": valid_subtasks} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.post("/api/v1/worker/report") +async def api_v1_worker_report(request: Request, valid=Depends(verify_worker_access)): + try: + params = await request.json() + logger.info(f"{params}") + task_id = params.pop("task_id") + worker_name = params.pop("worker_name") + status = TaskStatus[params.pop("status")] + identity = params.pop("worker_identity") + queue = params.pop("queue") + fail_msg = params.pop("fail_msg", None) + await server_monitor.worker_update(queue, identity, WorkerStatus.REPORT) + + ret = await task_manager.finish_subtasks(task_id, status, worker_identity=identity, worker_name=worker_name, fail_msg=fail_msg, should_running=True) + + # not all subtasks finished, prepare new ready subtasks + if ret not in [TaskStatus.SUCCEED, TaskStatus.FAILED]: + await prepare_subtasks(task_id) + + # all subtasks succeed, delete temp data + elif ret == TaskStatus.SUCCEED: + logger.info(f"Task {task_id} succeed") + task = await task_manager.query_task(task_id) + keys = [task["task_type"], task["model_cls"], task["stage"]] + temps = model_pipelines.get_temps(keys) + for temp in temps: + type = model_pipelines.get_type(temp) + name = data_name(temp, task_id) + await data_manager.get_delete_func(type)(name) + + elif ret == TaskStatus.FAILED: + logger.warning(f"Task {task_id} failed") + + return {"msg": "ok"} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.post("/api/v1/worker/ping/subtask") +async def api_v1_worker_ping_subtask(request: Request, valid=Depends(verify_worker_access)): + try: + params = await request.json() + logger.info(f"{params}") + task_id = params.pop("task_id") + worker_name = params.pop("worker_name") + identity = params.pop("worker_identity") + queue = params.pop("queue") + + task = await task_manager.query_task(task_id) + if task is None or task["status"] != TaskStatus.RUNNING: + return {"msg": "delete"} + + assert await task_manager.ping_subtask(task_id, worker_name, identity) + await server_monitor.worker_update(queue, identity, WorkerStatus.PING) + return {"msg": "ok"} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/metrics") +async def api_v1_monitor_metrics(): + try: + return Response(content=metrics_monitor.get_metrics(), media_type="text/plain") + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/template/asset_url/{template_type}/{filename}") +async def api_v1_template_asset_url(template_type: str, filename: str): + """get template asset URL - no authentication required""" + try: + url = await data_manager.presign_template_url(template_type, filename) + if url is None: + url = f"./assets/template/{template_type}/{filename}" + headers = {"Cache-Control": "public, max-age=3600"} + return Response(content=json.dumps({"url": url}), media_type="application/json", headers=headers) + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +# Template API endpoints +@app.get("/assets/template/{template_type}/{filename}") +async def assets_template(template_type: str, filename: str): + """get template file - no authentication required""" + try: + if not await data_manager.template_file_exists(template_type, filename): + return error_response(f"template file {template_type} {filename} not found", 404) + data = await data_manager.load_template_file(template_type, filename) + + # set media type according to file type + if template_type == "images": + if filename.lower().endswith(".png"): + media_type = "image/png" + elif filename.lower().endswith((".jpg", ".jpeg")): + media_type = "image/jpeg" + else: + media_type = "application/octet-stream" + elif template_type == "audios": + if filename.lower().endswith(".mp3"): + media_type = "audio/mpeg" + elif filename.lower().endswith(".wav"): + media_type = "audio/wav" + else: + media_type = "application/octet-stream" + elif template_type == "videos": + if filename.lower().endswith(".mp4"): + media_type = "video/mp4" + elif filename.lower().endswith(".webm"): + media_type = "video/webm" + elif filename.lower().endswith(".avi"): + media_type = "video/x-msvideo" + else: + media_type = "video/mp4" # default to mp4 + else: + media_type = "application/octet-stream" + + headers = {"Cache-Control": "public, max-age=3600"} + return Response(content=data, media_type=media_type, headers=headers) + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/template/list") +async def api_v1_template_list(request: Request): + """get template file list (support pagination) - no authentication required""" + try: + # check page params + page = int(request.query_params.get("page", 1)) + page_size = int(request.query_params.get("page_size", 12)) + if page < 1 or page_size < 1: + return error_response("page and page_size must be greater than 0", 400) + # limit page size + page_size = min(page_size, 100) + + all_images = await data_manager.list_template_files("images") + all_audios = await data_manager.list_template_files("audios") + all_videos = await data_manager.list_template_files("videos") + all_images = [] if all_images is None else all_images + all_audios = [] if all_audios is None else all_audios + all_videos = [] if all_videos is None else all_videos + + # 创建图片文件名(不含扩展名)到图片信息的映射 + all_images_sorted = sorted(all_images) + image_map = {} # 文件名(不含扩展名) -> {"filename": 完整文件名, "url": URL} + for img_name in all_images_sorted: + img_name_without_ext = img_name.rsplit(".", 1)[0] if "." in img_name else img_name + url = await data_manager.presign_template_url("images", img_name) + if url is None: + url = f"./assets/template/images/{img_name}" + image_map[img_name_without_ext] = {"filename": img_name, "url": url} + + # 创建音频文件名(不含扩展名)到音频信息的映射 + all_audios_sorted = sorted(all_audios) + audio_map = {} # 文件名(不含扩展名) -> {"filename": 完整文件名, "url": URL} + for audio_name in all_audios_sorted: + audio_name_without_ext = audio_name.rsplit(".", 1)[0] if "." in audio_name else audio_name + url = await data_manager.presign_template_url("audios", audio_name) + if url is None: + url = f"./assets/template/audios/{audio_name}" + audio_map[audio_name_without_ext] = {"filename": audio_name, "url": url} + + # 合并音频和图片模板,基于文件名前缀匹配 + # 获取所有唯一的基础文件名(不含扩展名) + all_base_names = set(list(image_map.keys()) + list(audio_map.keys())) + all_base_names_sorted = sorted(all_base_names) + + # 构建合并后的模板列表 + merged_templates = [] + for base_name in all_base_names_sorted: + template_item = { + "id": base_name, # 使用基础文件名作为ID + "image": image_map.get(base_name), + "audio": audio_map.get(base_name), + } + merged_templates.append(template_item) + + # 分页处理 + total = len(merged_templates) + total_pages = (total + page_size - 1) // page_size if total > 0 else 1 + + paginated_templates = [] + if page <= total_pages: + start_idx = (page - 1) * page_size + end_idx = start_idx + page_size + paginated_templates = merged_templates[start_idx:end_idx] + + # 为了保持向后兼容,仍然返回images和audios字段(但可能为空) + # 同时添加新的merged字段 + return { + "templates": { + "images": [], # 保持向后兼容,但设为空 + "audios": [], # 保持向后兼容,但设为空 + "videos": [], # 保持向后兼容 + "merged": paginated_templates, # 新的合并列表 + }, + "pagination": {"page": page, "page_size": page_size, "total": total, "total_pages": total_pages}, + } + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/template/tasks") +async def api_v1_template_tasks(request: Request): + """get template task list (support pagination) - no authentication required""" + try: + # check page params + page = int(request.query_params.get("page", 1)) + page_size = int(request.query_params.get("page_size", 12)) + category = request.query_params.get("category", None) + search = request.query_params.get("search", None) + if page < 1 or page_size < 1: + return error_response("page and page_size must be greater than 0", 400) + # limit page size + page_size = min(page_size, 100) + + all_templates = [] + all_categories = set() + template_files = await data_manager.list_template_files("tasks") + template_files = [] if template_files is None else template_files + + for template_file in template_files: + try: + bytes_data = await data_manager.load_template_file("tasks", template_file) + template_data = json.loads(bytes_data) + template_data["task"]["model_cls"] = model_pipelines.outer_model_name(template_data["task"]["model_cls"]) + all_categories.update(template_data["task"]["tags"]) + if category and category not in template_data["task"]["tags"]: + continue + if search and search not in template_data["task"]["params"]["prompt"] + template_data["task"]["params"]["negative_prompt"] + template_data["task"]["model_cls"] + template_data["task"][ + "stage" + ] + template_data["task"]["task_type"] + ",".join(template_data["task"]["tags"]): + continue + all_templates.append(template_data["task"]) + except Exception as e: + logger.warning(f"Failed to load template file {template_file}: {e}") + + # page info + total_templates = len(all_templates) + total_pages = (total_templates + page_size - 1) // page_size + paginated_templates = [] + + if page <= total_pages: + start_idx = (page - 1) * page_size + end_idx = start_idx + page_size + paginated_templates = all_templates[start_idx:end_idx] + + return {"templates": paginated_templates, "pagination": {"page": page, "page_size": page_size, "total": total_templates, "total_pages": total_pages}, "categories": list(all_categories)} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/template/{template_id}") +async def api_v1_template_get(template_id: str, user=None): + try: + template_files = await data_manager.list_template_files("tasks") + template_files = [] if template_files is None else template_files + + for template_file in template_files: + try: + bytes_data = await data_manager.load_template_file("tasks", template_file) + template_data = json.loads(bytes_data) + if template_data["task"]["task_id"] == template_id: + return template_data["task"] + except Exception as e: + logger.warning(f"Failed to load template file {template_file}: {e}") + continue + return error_response("Template not found", 404) + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.post("/api/v1/share/create") +async def api_v1_share_create(request: Request, user=Depends(verify_user_access)): + try: + params = await request.json() + task_id = params["task_id"] + valid_days = params.get("valid_days", 7) + auth_type = params.get("auth_type", "public") + auth_value = params.get("auth_value", "") + share_type = params.get("share_type", "task") + assert auth_type == "public", "Only public share is supported now" + + if share_type == "template": + template = await api_v1_template_get(task_id, user) + assert isinstance(template, dict) and template["task_id"] == task_id, f"Template {task_id} not found" + else: + task = await task_manager.query_task(task_id, user["user_id"], only_task=True) + assert task, f"Task {task_id} not found" + + if auth_type == "user_id": + assert auth_value != "", "Target user is required for auth_type = user_id" + target_user = await task_manager.query_user(auth_value) + assert target_user and target_user["user_id"] == auth_value, f"Target user {auth_value} not found" + + share_id = await task_manager.create_share(task_id, user["user_id"], share_type, valid_days, auth_type, auth_value) + return {"share_id": share_id, "share_url": f"/share/{share_id}"} + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/share/{share_id}") +async def api_v1_share_get(share_id: str): + try: + share_data = await task_manager.query_share(share_id) + assert share_data, f"Share {share_id} not found or expired or deleted" + task_id = share_data["task_id"] + share_type = share_data["share_type"] + assert share_data["auth_type"] == "public", "Only public share is supported now" + + if share_type == "template": + task = await api_v1_template_get(task_id, None) + assert isinstance(task, dict) and task["task_id"] == task_id, f"Template {task_id} not found" + else: + task = await task_manager.query_task(task_id, only_task=True) + assert task, f"Task {task_id} not found" + + user_info = await task_manager.query_user(share_data["user_id"]) + username = user_info.get("username", "用户") if user_info else "用户" + + share_info = { + "task_id": task_id, + "share_type": share_type, + "user_id": share_data["user_id"], + "username": username, + "task_type": task["task_type"], + "model_cls": task["model_cls"], + "stage": task["stage"], + "prompt": task["params"].get("prompt", ""), + "negative_prompt": task["params"].get("negative_prompt", ""), + "inputs": task["inputs"], + "outputs": task["outputs"], + "create_t": task["create_t"], + "valid_days": share_data["valid_days"], + "valid_t": share_data["valid_t"], + "auth_type": share_data["auth_type"], + "auth_value": share_data["auth_value"], + "output_video_url": None, + "input_urls": {}, + } + + for input_name, input_filename in task["inputs"].items(): + if share_type == "template": + template_type = "images" if "image" in input_name else "audios" + input_url = await data_manager.presign_template_url(template_type, input_filename) + else: + input_url = await data_manager.presign_url(input_filename) + share_info["input_urls"][input_name] = input_url + + for output_name, output_filename in task["outputs"].items(): + if share_type == "template": + assert "video" in output_name, "Only video output is supported for template share" + output_url = await data_manager.presign_template_url("videos", output_filename) + else: + output_url = await data_manager.presign_url(output_filename) + share_info["output_video_url"] = output_url + + return share_info + + except Exception as e: + traceback.print_exc() + return error_response(str(e), 500) + + +@app.get("/api/v1/voices/list") +async def api_v1_voices_list(request: Request): + try: + version = request.query_params.get("version", "all") + if volcengine_tts_client is None: + return error_response("Volcengine TTS client not loaded", 500) + voices = volcengine_tts_client.get_voice_list() + if voices is None: + return error_response("No voice list found", 404) + if version != "all": + voices = copy.deepcopy(voices) + voices["voices"] = [v for v in voices["voices"] if v["version"] == version] + return voices + except Exception as e: + traceback.print_exc() + return error_response("Failed to get voice list", 500) + + +@app.post("/api/v1/tts/generate") +async def api_v1_tts_generate(request: TTSRequest): + """Generate TTS audio from text""" + try: + # Validate parameters + if not request.text.strip(): + return JSONResponse({"error": "Text cannot be empty"}, status_code=400) + + if not request.voice_type: + return JSONResponse({"error": "Voice type is required"}, status_code=400) + + # Generate unique output filename + output_filename = f"tts_output_{uuid.uuid4().hex}.mp3" + output_path = os.path.join(tempfile.gettempdir(), output_filename) + + # Generate TTS + success = await volcengine_tts_client.tts_request( + text=request.text, + voice_type=request.voice_type, + context_texts=request.context_texts, + emotion=request.emotion, + emotion_scale=request.emotion_scale, + speech_rate=request.speech_rate, + loudness_rate=request.loudness_rate, + pitch=request.pitch, + output=output_path, + resource_id=request.resource_id, + ) + + if success and os.path.exists(output_path): + # Return the audio file + return FileResponse(output_path, media_type="audio/mpeg", filename=output_filename) + else: + return JSONResponse({"error": "TTS generation failed"}, status_code=500) + + except Exception as e: + logger.error(f"TTS generation error: {e}") + return JSONResponse({"error": f"TTS generation failed: {str(e)}"}, status_code=500) + + +@app.websocket("/api/v1/podcast/generate") +async def api_v1_podcast_generate_ws(websocket: WebSocket): + await websocket.accept() + + def ws_get_user_id(): + token = websocket.query_params.get("token") + if not token: + token = websocket.headers.get("authorization") or websocket.headers.get("Authorization") + if token and token.startswith("Bearer "): + token = token[7:] + payload = auth_manager.verify_jwt_token(token) + user_id = payload["user_id"] + return user_id + + async def safe_send_json(payload): + try: + await websocket.send_json(payload) + except (WebSocketDisconnect, RuntimeError) as e: + logger.warning(f"WebSocket send skipped: {e}") + + try: + user_id = ws_get_user_id() + data = await websocket.receive_text() + request_data = json.loads(data) + + # stop request + if request_data.get("type") == "stop": + logger.info("Received stop signal from client") + await safe_send_json({"type": "stopped"}) + return + + # user input prompt + input_text = request_data.get("input", "") + is_url = input_text.startswith(("http://", "https://")) + if not input_text: + await safe_send_json({"error": "输入不能为空"}) + return + + session_id = "session_" + str(uuid.uuid4()) + params = { + "session_id": session_id, + "data_manager": data_manager, + "text": "" if is_url else input_text, + "input_url": input_text if is_url else "", + "action": 0, + "use_head_music": False, + "use_tail_music": False, + "skip_round_audio_save": False, + } + logger.info(f"WebSocket generating podcast with params: {params}") + + # 使用回调函数实时推送音频 + async def on_round_complete(round_info): + await safe_send_json({"type": "audio_update", "data": round_info}) + + params["on_round_complete"] = on_round_complete + + # 创建一个任务来处理停止信号 + async def listen_for_stop(podcast_task): + while True: + try: + if podcast_task.done(): + return + data = await asyncio.wait_for(websocket.receive_text(), timeout=0.1) + request = json.loads(data) + if request.get("type") == "stop": + logger.warning("Stop signal received during podcast generation") + podcast_task.cancel() + return + except asyncio.TimeoutError: + continue + except Exception as e: + logger.warning(f"Stop listener ended: {e}") + return + + podcast_task = asyncio.create_task(volcengine_podcast_client.podcast_request(**params)) + stop_listener_task = asyncio.create_task(listen_for_stop(podcast_task)) + podcast_info = None + + try: + podcast_info = await podcast_task + except asyncio.CancelledError: + logger.warning("Podcast generation cancelled by user") + await safe_send_json({"type": "stopped"}) + return + finally: + stop_listener_task.cancel() + if podcast_info is None: + await safe_send_json({"error": "播客生成失败,请稍后重试"}) + return + + audio_path = podcast_info["audio_name"] + rounds = podcast_info["subtitles"] + await task_manager.create_podcast(session_id, user_id, input_text, audio_path, rounds) + audio_url = await data_manager.presign_podcast_output_url(audio_path) + if not audio_url: + audio_url = f"/api/v1/podcast/audio?session_id={session_id}&filename={audio_path}" + logger.info(f"completed podcast generation (session: {session_id})") + + await safe_send_json( + { + "type": "complete", + "data": { + "audio_url": audio_url, + "subtitles": podcast_info["subtitles"], + "session_id": session_id, + "user_id": user_id, + }, + } + ) + + except WebSocketDisconnect: + logger.info("WebSocket disconnected") + + except Exception: + logger.error(f"Error in websocket: {traceback.format_exc()}") + await safe_send_json({"error": "websocket internal error, please try again later!"}) + + +@app.get("/api/v1/podcast/audio") +async def api_v1_podcast_audio(request: Request, user=Depends(verify_user_access_from_query)): + try: + user_id = user["user_id"] + session_id = request.query_params.get("session_id") + filename = request.query_params.get("filename") + if not session_id or not filename: + return JSONResponse({"error": "session_id and filename are required"}, status_code=400) + + ext = os.path.splitext(filename)[1].lower() + assert ext == ".mp3", f"Unsupported file extension: {ext}" + + # 解析 Range 头,格式:bytes=start-end 或 bytes=start- + range_header = request.headers.get("Range") + start_byte, end_byte = None, None + if range_header: + match = re.match(r"bytes=(\d+)-(\d*)", range_header) + if match: + start_byte = int(match.group(1)) + end_byte = int(match.group(2)) + 1 if match.group(2) else None + + podcast_data = await task_manager.query_podcast(session_id, user_id) + if podcast_data: + # generate is finished and save info to database + func = data_manager.load_podcast_output_file + filename = podcast_data["audio_path"] + func_args = (filename,) + else: + func = data_manager.load_podcast_temp_session_file + func_args = (session_id, filename) + + logger.debug(f"Serving audio file from {func.__name__} with args: {func_args}, start_byte: {start_byte}, end_byte: {end_byte}") + file_bytes = await func(*func_args) + file_size = len(file_bytes) + file_bytes = file_bytes[start_byte:end_byte] + + content_length = len(file_bytes) + media_type = "audio/mpeg" + status_code = 200 + headers = {"Content-Length": str(content_length), "Accept-Ranges": "bytes", "Content-Type": media_type, "Content-Disposition": f'attachment; filename="{filename}"'} + + if start_byte is not None and start_byte > 0: + status_code = 206 # Partial Content + headers["Content-Range"] = f"bytes {start_byte}-{start_byte + content_length - 1}/{file_size}" + return Response(content=file_bytes, media_type=media_type, status_code=status_code, headers=headers) + + except Exception as e: + logger.error(f"Error serving audio: {e}") + traceback.print_exc() + return JSONResponse({"error": str(e)}, status_code=500) + + +@app.get("/api/v1/podcast/history") +async def api_v1_podcast_history(request: Request, user=Depends(verify_user_access)): + try: + user_id = user["user_id"] + page = int(request.query_params.get("page", 1)) + page_size = int(request.query_params.get("page_size", 10)) + assert page > 0 and page_size > 0, "page and page_size must be greater than 0" + status = request.query_params.get("status", None) # has_audio, no_audio + + query_params = {"user_id": user_id} + if status == "has_audio": + query_params["has_audio"] = True + elif status == "no_audio": + query_params["has_audio"] = False + + total_tasks = await task_manager.list_podcasts(count=True, **query_params) + total_pages = (total_tasks + page_size - 1) // page_size + page_info = {"page": page, "page_size": page_size, "total": total_tasks, "total_pages": total_pages} + if page > total_pages: + return {"sessions": [], "pagination": page_info} + + query_params["offset"] = (page - 1) * page_size + query_params["limit"] = page_size + sessions = await task_manager.list_podcasts(**query_params) + return {"sessions": sessions, "pagination": page_info} + + except Exception as e: + logger.error(f"Error getting podcast history: {e}") + traceback.print_exc() + return {"sessions": []} + + +@app.get("/api/v1/podcast/session/{session_id}/audio_url") +async def api_v1_podcast_session_audio_url(session_id: str, user=Depends(verify_user_access)): + try: + user_id = user["user_id"] + podcast_data = await task_manager.query_podcast(session_id, user_id) + if not podcast_data: + return JSONResponse({"error": "Podcast session not found"}, status_code=404) + + audio_path = podcast_data["audio_path"] + audio_url = await data_manager.presign_podcast_output_url(audio_path) + if not audio_url: + audio_url = f"/api/v1/podcast/audio?session_id={session_id}&filename={audio_path}" + return {"audio_url": audio_url} + + except Exception as e: + logger.error(f"Error getting podcast session audio URL: {e}") + traceback.print_exc() + return JSONResponse({"error": str(e)}, status_code=500) + + +class FaceDetectRequest(BaseModel): + image: str # Base64 encoded image + + +class AudioSeparateRequest(BaseModel): + audio: str # Base64 encoded audio + num_speakers: int = None # Optional: number of speakers to separate + + +@app.post("/api/v1/face/detect") +async def api_v1_face_detect(request: FaceDetectRequest, user=Depends(verify_user_access)): + """Detect faces in image (only detection, no cropping - cropping is done on frontend) + Supports both base64 encoded images and URLs (blob URLs, http URLs, etc.) + """ + try: + if not face_detector: + return error_response("Face detector not initialized", 500) + + # 验证输入 + if not request.image or not request.image.strip(): + logger.error("Face detection request: image is empty") + return error_response("Image input is empty", 400) + + image_bytes = None + try: + # Check if input is a URL (blob:, http:, https:, or data: URL) + if request.image.startswith(("http://", "https://")): + timeout = int(os.getenv("REQUEST_TIMEOUT", "10")) + image_bytes = await fetch_resource(request.image, timeout=timeout) + logger.debug(f"Fetched image from URL for face detection: {request.image[:100]}... (size: {len(image_bytes)} bytes)") + else: + encoded = request.image + # Data URL format: "data:image/png;base64,..." + if encoded.startswith("data:image"): + _, encoded = encoded.split(",", 1) + image_bytes = base64.b64decode(encoded) + logger.debug(f"Decoded base64 image: {request.image[:100]}... (size: {len(image_bytes)} bytes)") + + # Validate image format before passing to face detector + image_bytes = await asyncio.to_thread(format_image_data, image_bytes) + + except Exception as e: + logger.error(f"Failed to decode base64 image: {e}, image length: {len(request.image) if request.image else 0}") + return error_response(f"Invalid image format: {str(e)}", 400) + + # Detect faces only (no cropping) + result = await asyncio.to_thread(face_detector.detect_faces, image_bytes, return_image=False) + faces_data = [] + for i, face in enumerate(result["faces"]): + faces_data.append( + { + "index": i, + "bbox": face["bbox"], # [x1, y1, x2, y2] - absolute pixel coordinates in original image + "confidence": face["confidence"], + "class_id": face["class_id"], + "class_name": face["class_name"], + # Note: face_image is not included - frontend will crop it based on bbox + } + ) + return {"faces": faces_data, "total": len(faces_data)} + + except Exception as e: + logger.error(f"Face detection error: {traceback.format_exc()}") + return error_response(f"Face detection failed: {str(e)}", 500) + + +@app.post("/api/v1/audio/separate") +async def api_v1_audio_separate(request: AudioSeparateRequest, user=Depends(verify_user_access)): + """Separate different speakers in audio""" + try: + if not audio_separator: + return error_response("Audio separator not initialized", 500) + audio_bytes = None + try: + encoded = request.audio + if encoded.startswith("data:"): + # Remove data URL prefix (e.g., "data:audio/mpeg;base64," or "data:application/octet-stream;base64,") + _, encoded = encoded.split(",", 1) + audio_bytes = await asyncio.to_thread(base64.b64decode, encoded, validate=True) + logger.debug(f"Successfully decoded base64 audio, size: {len(audio_bytes)} bytes") + + except Exception as e: + logger.error(f"Failed to decode base64 audio {request.audio[:100]}..., error: {str(e)}") + return error_response(f"Invalid base64 audio data", 400) + + # Separate speakers + result = await asyncio.to_thread(audio_separator.separate_speakers, audio_bytes, num_speakers=request.num_speakers) + + # Convert audio tensors to base64 strings (without saving to file) + speakers_data = [] + for speaker in result["speakers"]: + # Convert audio tensor directly to base64 + audio_base64 = await asyncio.to_thread(audio_separator.speaker_audio_to_base64, speaker["audio"], speaker["sample_rate"], format="wav") + speakers_data.append( + { + "speaker_id": speaker["speaker_id"], + "audio": audio_base64, # Base64 encoded audio + "segments": speaker["segments"], + "sample_rate": speaker["sample_rate"], + } + ) + return {"speakers": speakers_data, "total": len(speakers_data), "method": result.get("method", "pyannote")} + + except Exception as e: + logger.error(f"Audio separation error: {traceback.format_exc()}") + return error_response(f"Audio separation failed: {str(e)}", 500) + + +# 所有未知路由 fallback 到 index.html (必须在所有API路由之后) +@app.get("/{full_path:path}", response_class=HTMLResponse) +async def vue_fallback(full_path: str): + index_path = os.path.join(static_dir, "index.html") + if os.path.exists(index_path): + return FileResponse(index_path) + return HTMLResponse("

    Frontend not found

    ", status_code=404) + + +# ========================= +# Main Entry +# ========================= + +if __name__ == "__main__": + ProcessManager.register_signal_handler() + parser = argparse.ArgumentParser() + + cur_dir = os.path.dirname(os.path.abspath(__file__)) + base_dir = os.path.abspath(os.path.join(cur_dir, "../../..")) + dft_pipeline_json = os.path.join(base_dir, "configs/model_pipeline.json") + dft_task_url = os.path.join(base_dir, "local_task") + dft_data_url = os.path.join(base_dir, "local_data") + dft_queue_url = os.path.join(base_dir, "local_queue") + dft_volcengine_tts_list_json = os.path.join(base_dir, "configs/volcengine_voices_list.json") + + parser.add_argument("--pipeline_json", type=str, default=dft_pipeline_json) + parser.add_argument("--task_url", type=str, default=dft_task_url) + parser.add_argument("--data_url", type=str, default=dft_data_url) + parser.add_argument("--queue_url", type=str, default=dft_queue_url) + parser.add_argument("--redis_url", type=str, default="") + parser.add_argument("--template_dir", type=str, default="") + parser.add_argument("--volcengine_tts_list_json", type=str, default=dft_volcengine_tts_list_json) + parser.add_argument("--ip", type=str, default="0.0.0.0") + parser.add_argument("--port", type=int, default=8080) + parser.add_argument("--face_detector_model_path", type=str, default=None) + parser.add_argument("--audio_separator_model_path", type=str, default="") + args = parser.parse_args() + logger.info(f"args: {args}") + + model_pipelines = Pipeline(args.pipeline_json) + volcengine_tts_client = VolcEngineTTSClient(args.volcengine_tts_list_json) + volcengine_podcast_client = VolcEnginePodcastClient() + face_detector = FaceDetector(model_path=args.face_detector_model_path) + audio_separator = AudioSeparator(model_path=args.audio_separator_model_path) + auth_manager = AuthManager() + if args.task_url.startswith("/"): + task_manager = LocalTaskManager(args.task_url, metrics_monitor) + elif args.task_url.startswith("postgresql://"): + task_manager = PostgresSQLTaskManager(args.task_url, metrics_monitor) + else: + raise NotImplementedError + if args.data_url.startswith("/"): + data_manager = LocalDataManager(args.data_url, args.template_dir) + elif args.data_url.startswith("{"): + data_manager = S3DataManager(args.data_url, args.template_dir) + else: + raise NotImplementedError + if args.queue_url.startswith("/"): + queue_manager = LocalQueueManager(args.queue_url) + elif args.queue_url.startswith("amqp://"): + queue_manager = RabbitMQQueueManager(args.queue_url) + else: + raise NotImplementedError + if args.redis_url: + server_monitor = RedisServerMonitor(model_pipelines, task_manager, queue_manager, args.redis_url) + else: + server_monitor = ServerMonitor(model_pipelines, task_manager, queue_manager) + + uvicorn.run(app, host=args.ip, port=args.port, reload=False, workers=1) diff --git a/lightx2v/deploy/server/auth.py b/lightx2v/deploy/server/auth.py new file mode 100644 index 0000000..1180125 --- /dev/null +++ b/lightx2v/deploy/server/auth.py @@ -0,0 +1,205 @@ +import os +import time +import uuid + +import aiohttp +import jwt +from fastapi import HTTPException +from loguru import logger + +from lightx2v.deploy.common.aliyun import AlibabaCloudClient + + +class AuthManager: + def __init__(self): + # Worker access token + self.worker_secret_key = os.getenv("WORKER_SECRET_KEY", "worker-secret-key-change-in-production") + + # GitHub OAuth + self.github_client_id = os.getenv("GITHUB_CLIENT_ID", "") + self.github_client_secret = os.getenv("GITHUB_CLIENT_SECRET", "") + + # Google OAuth + self.google_client_id = os.getenv("GOOGLE_CLIENT_ID", "") + self.google_client_secret = os.getenv("GOOGLE_CLIENT_SECRET", "") + self.google_redirect_uri = os.getenv("GOOGLE_REDIRECT_URI", "") + + self.jwt_algorithm = os.getenv("JWT_ALGORITHM", "HS256") + self.jwt_secret_key = os.getenv("JWT_SECRET_KEY", "your-secret-key-change-in-production") + self.jwt_expiration_hours = int(os.getenv("JWT_EXPIRATION_HOURS", "168")) + self.refresh_token_expiration_days = int(os.getenv("REFRESH_TOKEN_EXPIRATION_DAYS", "30")) + self.refresh_jwt_secret_key = os.getenv("REFRESH_JWT_SECRET_KEY", self.jwt_secret_key) + + # Aliyun SMS + self.aliyun_client = AlibabaCloudClient() + + logger.info(f"AuthManager: GITHUB_CLIENT_ID: {self.github_client_id}") + logger.info(f"AuthManager: GITHUB_CLIENT_SECRET: {self.github_client_secret}") + logger.info(f"AuthManager: GOOGLE_CLIENT_ID: {self.google_client_id}") + logger.info(f"AuthManager: GOOGLE_CLIENT_SECRET: {self.google_client_secret}") + logger.info(f"AuthManager: GOOGLE_REDIRECT_URI: {self.google_redirect_uri}") + logger.info(f"AuthManager: JWT_SECRET_KEY: {self.jwt_secret_key}") + logger.info(f"AuthManager: WORKER_SECRET_KEY: {self.worker_secret_key}") + + def _create_token(self, data, expires_in_seconds, token_type, secret_key): + now = int(time.time()) + payload = { + "user_id": data["user_id"], + "username": data["username"], + "email": data["email"], + "homepage": data["homepage"], + "token_type": token_type, + "iat": now, + "exp": now + expires_in_seconds, + "jti": str(uuid.uuid4()), + } + return jwt.encode(payload, secret_key, algorithm=self.jwt_algorithm) + + def create_access_token(self, data): + return self._create_token(data, self.jwt_expiration_hours * 3600, "access", self.jwt_secret_key) + + def create_refresh_token(self, data): + return self._create_token(data, self.refresh_token_expiration_days * 24 * 3600, "refresh", self.refresh_jwt_secret_key) + + def create_tokens(self, data): + return self.create_access_token(data), self.create_refresh_token(data) + + def create_jwt_token(self, data): + # Backwards compatibility for callers that still expect this name + return self.create_access_token(data) + + async def auth_github(self, code): + try: + logger.info(f"GitHub OAuth code: {code}") + token_url = "https://github.com/login/oauth/access_token" + token_data = {"client_id": self.github_client_id, "client_secret": self.github_client_secret, "code": code} + headers = {"Accept": "application/json"} + + proxy = os.getenv("auth_https_proxy", None) + if proxy: + logger.info(f"auth_github use proxy: {proxy}") + async with aiohttp.ClientSession() as session: + async with session.post(token_url, data=token_data, headers=headers, proxy=proxy) as response: + response.raise_for_status() + token_info = await response.json() + + if "error" in token_info: + raise HTTPException(status_code=400, detail=f"GitHub OAuth error: {token_info['error']}") + + access_token = token_info.get("access_token") + if not access_token: + raise HTTPException(status_code=400, detail="Failed to get access token") + + user_url = "https://api.github.com/user" + user_headers = {"Authorization": f"token {access_token}", "Accept": "application/vnd.github.v3+json"} + async with aiohttp.ClientSession() as session: + async with session.get(user_url, headers=user_headers, proxy=proxy) as response: + response.raise_for_status() + user_info = await response.json() + + return { + "source": "github", + "id": str(user_info["id"]), + "username": user_info["login"], + "email": user_info.get("email", ""), + "homepage": user_info.get("html_url", ""), + "avatar_url": user_info.get("avatar_url", ""), + } + + except aiohttp.ClientError as e: + logger.error(f"GitHub API request failed: {e}") + raise HTTPException(status_code=500, detail="Failed to authenticate with GitHub") + + except Exception as e: + logger.error(f"Authentication error: {e}") + raise HTTPException(status_code=500, detail="Authentication failed") + + async def auth_google(self, code): + try: + logger.info(f"Google OAuth code: {code}") + token_url = "https://oauth2.googleapis.com/token" + token_data = { + "client_id": self.google_client_id, + "client_secret": self.google_client_secret, + "code": code, + "redirect_uri": self.google_redirect_uri, + "grant_type": "authorization_code", + } + headers = {"Content-Type": "application/x-www-form-urlencoded"} + + proxy = os.getenv("auth_https_proxy", None) + if proxy: + logger.info(f"auth_google use proxy: {proxy}") + async with aiohttp.ClientSession() as session: + async with session.post(token_url, data=token_data, headers=headers, proxy=proxy) as response: + response.raise_for_status() + token_info = await response.json() + + if "error" in token_info: + raise HTTPException(status_code=400, detail=f"Google OAuth error: {token_info['error']}") + + access_token = token_info.get("access_token") + if not access_token: + raise HTTPException(status_code=400, detail="Failed to get access token") + + # get user info + user_url = "https://www.googleapis.com/oauth2/v2/userinfo" + user_headers = {"Authorization": f"Bearer {access_token}"} + async with aiohttp.ClientSession() as session: + async with session.get(user_url, headers=user_headers, proxy=proxy) as response: + response.raise_for_status() + user_info = await response.json() + return { + "source": "google", + "id": str(user_info["id"]), + "username": user_info.get("name", user_info.get("email", "")), + "email": user_info.get("email", ""), + "homepage": user_info.get("link", ""), + "avatar_url": user_info.get("picture", ""), + } + + except aiohttp.ClientError as e: + logger.error(f"Google API request failed: {e}") + raise HTTPException(status_code=500, detail="Failed to authenticate with Google") + + except Exception as e: + logger.error(f"Google authentication error: {e}") + raise HTTPException(status_code=500, detail="Google authentication failed") + + async def send_sms(self, phone_number): + return await self.aliyun_client.send_sms(phone_number) + + async def check_sms(self, phone_number, verify_code): + ok = await self.aliyun_client.check_sms(phone_number, verify_code) + if not ok: + return None + return { + "source": "phone", + "id": phone_number, + "username": phone_number, + "email": "", + "homepage": "", + "avatar_url": "", + } + + def _verify_token(self, token, expected_type, secret_key): + try: + payload = jwt.decode(token, secret_key, algorithms=[self.jwt_algorithm]) + token_type = payload.get("token_type") + if token_type and token_type != expected_type: + raise HTTPException(status_code=401, detail="Token type mismatch") + return payload + except jwt.ExpiredSignatureError: + raise HTTPException(status_code=401, detail="Token has expired") + except Exception as e: + logger.error(f"verify_jwt_token error: {e}") + raise HTTPException(status_code=401, detail="Could not validate credentials") + + def verify_jwt_token(self, token): + return self._verify_token(token, "access", self.jwt_secret_key) + + def verify_refresh_token(self, token): + return self._verify_token(token, "refresh", self.refresh_jwt_secret_key) + + def verify_worker_token(self, token): + return token == self.worker_secret_key diff --git a/lightx2v/deploy/server/frontend/.gitignore b/lightx2v/deploy/server/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/lightx2v/deploy/server/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/lightx2v/deploy/server/frontend/README.md b/lightx2v/deploy/server/frontend/README.md new file mode 100644 index 0000000..1511959 --- /dev/null +++ b/lightx2v/deploy/server/frontend/README.md @@ -0,0 +1,5 @@ +# Vue 3 + Vite + +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + + +
    + +
    +
    +

    LightX2V

    +

    免费、轻量、快速的AI数字人视频生成平台,由 Light AI 工具链提供端到端加速支持。

    +

    了解更多关于工具链与最新动态,请访问 Light AI 官网LightX2V GitHub

    +
    +
    +

    功能亮点

    +
      +
    • 电影级数字人视频生成
    • +
    • 20倍生成提速
    • +
    • 超低成本生成
    • +
    • 精准口型对齐
    • +
    • 分钟级视频时长
    • +
    • 多场景应用
    • +
    • 最新tts语音合成技术,支持多种语言,支持100+种音色,支持语音指令控制合成语音细节
    • +
    +
    +
    +

    快速开始

    +
      +
    1. 上传图片及音频,输入视频生成提示词,点击开始生成
    2. +
    3. 生成并下载视频
    4. +
    5. 应用模版,一键生成同款数字人视频
    6. +
    +
    +
    +
    + + + diff --git a/lightx2v/deploy/server/frontend/package-lock.json b/lightx2v/deploy/server/frontend/package-lock.json new file mode 100644 index 0000000..fa8a049 --- /dev/null +++ b/lightx2v/deploy/server/frontend/package-lock.json @@ -0,0 +1,2143 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@flaticon/flaticon-uicons": "^3.3.1", + "@headlessui/vue": "^1.7.23", + "@heroicons/vue": "^2.2.0", + "@tailwindcss/vite": "^4.1.13", + "pinia": "^3.0.3", + "tailwindcss": "^4.1.13", + "vue": "^3.5.21", + "vue-i18n": "^11.1.12", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "vite": "^7.1.7" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@flaticon/flaticon-uicons": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@flaticon/flaticon-uicons/-/flaticon-uicons-3.3.1.tgz", + "integrity": "sha512-WN2zuECCdjuGBQrjzN0kpeSygzC5fgF8Q7pDR+FUuGtYWczSdIhIwoD+/fKBEfwqKfNIMZ1WouidevGQ4OJORg==", + "license": "SEE LICENSE IN LICENSE", + "optionalDependencies": { + "esbuild-linux-64": "^0.14.5" + } + }, + "node_modules/@headlessui/vue": { + "version": "1.7.23", + "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz", + "integrity": "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==", + "license": "MIT", + "dependencies": { + "@tanstack/vue-virtual": "^3.0.0-beta.60" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@heroicons/vue": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/vue/-/vue-2.2.0.tgz", + "integrity": "sha512-G3dbSxoeEKqbi/DFalhRxJU4mTXJn7GwZ7ae8NuEQzd1bqdd0jAbdaBZlHPcvPD2xI1iGzNVB4k20Un2AguYPw==", + "license": "MIT", + "peerDependencies": { + "vue": ">= 3" + } + }, + "node_modules/@intlify/core-base": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.12.tgz", + "integrity": "sha512-whh0trqRsSqVLNEUCwU59pyJZYpU8AmSWl8M3Jz2Mv5ESPP6kFh4juas2NpZ1iCvy7GlNRffUD1xr84gceimjg==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "11.1.12", + "@intlify/shared": "11.1.12" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.12.tgz", + "integrity": "sha512-Fv9iQSJoJaXl4ZGkOCN1LDM3trzze0AS2zRz2EHLiwenwL6t0Ki9KySYlyr27yVOj5aVz0e55JePO+kELIvfdQ==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "11.1.12", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.12.tgz", + "integrity": "sha512-Om86EjuQtA69hdNj3GQec9ZC0L0vPSAnXzB3gP/gyJ7+mA7t06d9aOAiqMZ+xEOsumGP4eEBlfl8zF2LOTzf2A==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.29.tgz", + "integrity": "sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.15.tgz", + "integrity": "sha512-HF4+7QxATZWY3Jr8OlZrBSXmwT3Watj0OogeDvdUY/ByXJHQ+LBtqA2brDb3sBxYslIFx6UP94BJ4X6a4L9Bmw==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.0", + "lightningcss": "1.30.2", + "magic-string": "^0.30.19", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.15" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.15.tgz", + "integrity": "sha512-krhX+UOOgnsUuks2SR7hFafXmLQrKxB4YyRTERuCE59JlYL+FawgaAlSkOYmDRJdf1Q+IFNDMl9iRnBW7QBDfQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.15", + "@tailwindcss/oxide-darwin-arm64": "4.1.15", + "@tailwindcss/oxide-darwin-x64": "4.1.15", + "@tailwindcss/oxide-freebsd-x64": "4.1.15", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.15", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.15", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.15", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.15", + "@tailwindcss/oxide-linux-x64-musl": "4.1.15", + "@tailwindcss/oxide-wasm32-wasi": "4.1.15", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.15", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.15" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.15.tgz", + "integrity": "sha512-TkUkUgAw8At4cBjCeVCRMc/guVLKOU1D+sBPrHt5uVcGhlbVKxrCaCW9OKUIBv1oWkjh4GbunD/u/Mf0ql6kEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.15.tgz", + "integrity": "sha512-xt5XEJpn2piMSfvd1UFN6jrWXyaKCwikP4Pidcf+yfHTSzSpYhG3dcMktjNkQO3JiLCp+0bG0HoWGvz97K162w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.15.tgz", + "integrity": "sha512-TnWaxP6Bx2CojZEXAV2M01Yl13nYPpp0EtGpUrY+LMciKfIXiLL2r/SiSRpagE5Fp2gX+rflp/Os1VJDAyqymg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.15.tgz", + "integrity": "sha512-quISQDWqiB6Cqhjc3iWptXVZHNVENsWoI77L1qgGEHNIdLDLFnw3/AfY7DidAiiCIkGX/MjIdB3bbBZR/G2aJg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.15.tgz", + "integrity": "sha512-ObG76+vPlab65xzVUQbExmDU9FIeYLQ5k2LrQdR2Ud6hboR+ZobXpDoKEYXf/uOezOfIYmy2Ta3w0ejkTg9yxg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.15.tgz", + "integrity": "sha512-4WbBacRmk43pkb8/xts3wnOZMDKsPFyEH/oisCm2q3aLZND25ufvJKcDUpAu0cS+CBOL05dYa8D4U5OWECuH/Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.15.tgz", + "integrity": "sha512-AbvmEiteEj1nf42nE8skdHv73NoR+EwXVSgPY6l39X12Ex8pzOwwfi3Kc8GAmjsnsaDEbk+aj9NyL3UeyHcTLg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.15.tgz", + "integrity": "sha512-+rzMVlvVgrXtFiS+ES78yWgKqpThgV19ISKD58Ck+YO5pO5KjyxLt7AWKsWMbY0R9yBDC82w6QVGz837AKQcHg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.15.tgz", + "integrity": "sha512-fPdEy7a8eQN9qOIK3Em9D3TO1z41JScJn8yxl/76mp4sAXFDfV4YXxsiptJcOwy6bGR+70ZSwFIZhTXzQeqwQg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.15.tgz", + "integrity": "sha512-sJ4yd6iXXdlgIMfIBXuVGp/NvmviEoMVWMOAGxtxhzLPp9LOj5k0pMEMZdjeMCl4C6Up+RM8T3Zgk+BMQ0bGcQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.0.7", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.15.tgz", + "integrity": "sha512-sJGE5faXnNQ1iXeqmRin7Ds/ru2fgCiaQZQQz3ZGIDtvbkeV85rAZ0QJFMDg0FrqsffZG96H1U9AQlNBRLsHVg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.15.tgz", + "integrity": "sha512-NLeHE7jUV6HcFKS504bpOohyi01zPXi2PXmjFfkzTph8xRxDdxkRsXm/xDO5uV5K3brrE1cCwbUYmFUSHR3u1w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.15.tgz", + "integrity": "sha512-B6s60MZRTUil+xKoZoGe6i0Iar5VuW+pmcGlda2FX+guDuQ1G1sjiIy1W0frneVpeL/ZjZ4KEgWZHNrIm++2qA==", + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.15", + "@tailwindcss/oxide": "4.1.15", + "tailwindcss": "4.1.15" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", + "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/vue-virtual": { + "version": "3.13.12", + "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.12.tgz", + "integrity": "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", + "integrity": "sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.29" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz", + "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz", + "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", + "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/runtime-core": "3.5.22", + "@vue/shared": "3.5.22", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz", + "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "vue": "3.5.22" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/birpc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz", + "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.15.tgz", + "integrity": "sha512-k2WLnWkYFkdpRv+Oby3EBXIyQC8/s1HOFMBUViwtAh6Z5uAozeUSMQlIsn/c6Q2iJzqG6aJT3wdPaRNj70iYxQ==", + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.22", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", + "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-sfc": "3.5.22", + "@vue/runtime-dom": "3.5.22", + "@vue/server-renderer": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-i18n": { + "version": "11.1.12", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.12.tgz", + "integrity": "sha512-BnstPj3KLHLrsqbVU2UOrPmr0+Mv11bsUZG0PyCOzsawCivk8W00GMXHeVUWIDOgNaScCuZah47CZFE+Wnl8mw==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "11.1.12", + "@intlify/shared": "11.1.12", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz", + "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + } + } +} diff --git a/lightx2v/deploy/server/frontend/package.json b/lightx2v/deploy/server/frontend/package.json new file mode 100644 index 0000000..a73da99 --- /dev/null +++ b/lightx2v/deploy/server/frontend/package.json @@ -0,0 +1,26 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@flaticon/flaticon-uicons": "^3.3.1", + "@headlessui/vue": "^1.7.23", + "@heroicons/vue": "^2.2.0", + "@tailwindcss/vite": "^4.1.13", + "pinia": "^3.0.3", + "tailwindcss": "^4.1.13", + "vue": "^3.5.21", + "vue-i18n": "^11.1.12", + "vue-router": "^4.5.1" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.1", + "vite": "^7.1.7" + } +} diff --git a/lightx2v/deploy/server/frontend/public/cover.png b/lightx2v/deploy/server/frontend/public/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..75d5f2dc8ba46e8c4785e4658d00f60a76d15f7e GIT binary patch literal 1235899 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�Xg7bi%Ji`bOl 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 z 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%0DxQY@~7V|*D=wkNQ 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

    ~B#(WBFS9ovLz%v&6FL#;SPR4mbf(2In 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
    p`xw#bv~m zg!rR(+U^D3J)&!(>4D#REz@OX%D2^MTpOI(##hb+a0=N|+a}Gu#a3R2ZewyrqWbk^ z6>($sIa`~}g6=q#jBmH^5~nq>+X=5-!}Mi;8|o*0ZW8Kej!nR8lU&R+VcAQ~E9^kp zW_{*7`QazcIuGsa%rmDpQYVD59rVh@0(aKV(0NKc;plJg1PWoEoz$5)p-KaMuTxJf z^H78WsPY0k)=TCvptZ1lrw^V7F=p3mEq}>QZ}(RXK43vzKFXeGkJ|Iw#Lxk(A}A9z z(9U6un;$ypR%mF0!%SG9r#2KMsof{dj$MUzP zm);!Rk5auTn*5;UyCQ&mCDcfdGp+k==v+Fsnbcu+Z0mN25ALurOAoC9I-}7N$~p;L z4vFKP5Wr{c_C%yZy-qIOIBH^JDhgoW5M-S;YfrG&7BlhmMJHRULgv#M!66}=`pR2>01YxD1e57 zxhLt<+&FvzORJRy`7qP(TVEtMOAZrC^}9HE*z~DgM0)CU!6Lt?Bar^Adhm(j;KSS< zAJp#nP;qy6L^+PiabVY7?hx%F`>u{?x2_{ZL601A@D8v-j)QzPQpb_I)2GUD$KFUy z33-JasT9~9IR}^67@0NZ2coi1$OMIWB5g0B~+~jm9w`opJK+@Qu2^@v2Id0>WPg9LM7v=sWb? z@hAs!$GzMgNAASyQ6BNZ&U?GNyUS5WOBHqy_{VXV!Vj?mD|HJv@gjbQ9B>ZsJ9HgK z4zyC(<{aeeAMAODE${9q_CF|%bgsH`lyY!ITwW?cfH-l283IvP@urf;C8dr^Re@jf zJOAMC&)dG?8=#R7R#kzCpMz#kNB_rmt7Br{iijnc^CRgQe|EkOQVXKMyL2+fK)Ci?uM^bK{?bu zz)0k9fMei|u)xb4@CNvR+al@*aqvQqN00M`pZauu_CNdU)Hrh76>YK)Juy>tBt?j& zs1ZPBMAA6>jgg4~Gl5h5>Ejhl#D(>*t15Iyxe?6t zLXVyWr)SpK_f_~6{;UtAWP)6fK_lV32ZBvie^o%io<4yDZ(`D^b7T(Q#f}#)Vn5uV zQ~>h17YvdJwh>OCd%zhy&&2N$mMiyI998Xw;4ZVF^kt0rXJhPkQ=zkIZEB44Uku^a z$@1MdD43Bv=`0Ku-bF3&_! z)d)iaMR=}&{cP}J27Z4LYq#Xr948%v3D>s>wdTZ@gL3;TMi)4&2?5%KF{idNJxJ5& zj!v(z6k=Ti9h0`x+J1_=V~dQG9PVkQWylvxKMmpouUY6h3$&(55#!rIpRNpq+K>pa zcFelqjU;FzjtHa6IEMxI(bI)iYkrr&pfA9vN!Mpn3A zg8>x?n{!|v@bm#PM|-&t(_gB?{j~uoW8-13>)DN@$88)+W3iF-?PLP3=2S{^3l4KV z!40CJRs~~DIS&&j-mB+o!n`JmH5@Mhi_`bY(uAfOvqy`z?r3!LV9*FtXemr8Ffnq) z@E$n$Z<^KRn^tK%Yv3+xsV0rZ84Fx$lRZO2#z*!swvN0OVgsVGI+nw$m*#{a4>hMm zziUsgSD`j2pnc`*5kZ~b_pA;Cm6ZUicIWgWa3dRA)Scc8V$5YOLVGN_=Oy5K8ZpgN z7O;x6=LQ-rE+JC_Hn*~0ay9Q(9P=fr{$>=|FcWkb#^mEgkCb###uo&)y`+I$+-KhOBBt z@v77<29)%Yt-_eUqm7$)0dUa*(K<>T!{t|zGsn0@0H$83>6(I2A}JR;I?v?R)XX6C-3gYR-kJsN5aS0G$F_BA^#!Ae}3bdtZ+d;sr{B z{ex4^2*U+u{>xsGom^ab*1$~|Aj4X6TeuxGlOMVT2f-OMGSE<&8ie@d02^b@qBf<8 zmm7s}`iFMYdzVSO&AH zv>qRTL(S32fW{2*TQ5h9Feq9E!JaI9c$v>1nSIlW@FEh*f#wy;>$g93cAgyTjm4 z``o_ohYU|s^4%+|OKc`7#Tz?PRq+o1jJ1L-$1;MrqwT`0X=1I3Kds`fur3oARPH3Q zL3^6t2FtCD8@F}Ycx(G7IBkqQN77i<&;g6h-9(1ijqe_X->`j6gEr|Mf4i8@KqZzQ z)vF8KCW0^}_O^|sThR3DPch!U2DhFbBnr0u^g{g&LEC0GVvYjnmr+%9i?}(BN>01? z99K8j;TzH3=rxksB%i6<62|W6%mHgIdQLI~*7ItU#ryAEY#2~k0f#)Wu){!)KF65f zV+GQuWn~g)?btFCe$H1>%fOASRFIoaO_JIViI6t?V$Es1t(_yGu8c}Xns8mtoCU3o zZ{fKe$;^H!n(A#RIN)1Za+_6hZk zsFfAu>w0-hO?>p8LuVeARv@^K*pkz2;sjw$W3K>D^RD#uUfedh^TfPB@*C=;UfQK0 zqBnk{H~!9pm_AJ#H-y}d$u>GBxr2RnLrNoaIS7#S0!?ju zF#w%pH+h`Ge`^p-V2pHu0}P5kcP}2&;m?0%2N)2#78={$bw`F>KwyIRrFkf1YzXbw;i^oA zSzLuU(m7O#pJMo&!M0IcDwT`BG4bA473`5#Sk5Xi_8mIGMh`B&`)j{KE4>+?%ZOGc zjGhMl6r2LDX}ce8sC^*03?@&8f0ZBe8*taN@7|Y%78aHs(t2M!OZkz9P5PIiaJLg< zrGBLrtKxpO;&BwkiF<$UF)s87eb7#awK42#81tdv+sw!yb7;CX0@>Mna?#DJ6!(?T z;gcu%C;!FYo8R!i{Y@Ng1X_+t?l7u*s>X29*deF;C@RgqzWT<+zb0X4@@-f$_h%CW z7KJ-DjM1-QLQi0iXNRRM^9{q3~aPK1UENw1rplpO7mXpp@Grz6tLMl#CLVjVh z4{P_xd*&XxMj<6`G~`wM)A0)QnddP|GQ#h-eCU5QKl$(fM|tCyzL-3EOwJ{ih>b#o zMs87{K+p|bBB@Ow45%5vgAE4SeUBuB5!W!(klVs`B61;RxN-Y~y&y5~2=MnwL1hjI zgE(BQcm=#Hghr}Bc<-kVq)QX?S(p>*HjpChEG*xf(S<-R2=)89je;M}kM#5o$saiG zrPhSc%yL1P0;qnr)G;$)_Tu|g#7sDhk?4LX(CYS^kGH4aZ?BEeL*doTkaKVjAWH@l z!DG5t9N1Si^GsL7w@CA7RNoMKbwhA;aiasA>Ai6V;YL`hO4s9_8YYt<$UqE^g{Uzp zI``q4+I7)x!6^h1+3-jbZ>*ON&gI63*%);4c0f;f>0|1S(z}r@<~P291EYbN0!q*Eq|r9IzR4C7@bzv;9J*@*a}OEwp#gyOVI% zJ&nxqz$feE5@1RK;y$cIMX+J*5q|O%61=SYujXYB6H5oOYM-fXmX4+KrwNZakx(=p z%N|W~Q8q|VZPw&2TeTzF+0oqt55Q*~hP)Q{R=|35bf0Kp+iusz^U1+3v=ejgqyeyT z%w2Nnt`^C(k{-9@Tf2j|%gpsC=FY8Vf><*RSiGIdZ?l&Xzh6ImSgS4Lvy@g->Z}7~ z;@l8tPVaF;erbai64Itlk6SzGMu9q!1#@Cq11x~d26Wq4z}N*Eyj>*7F4J3XqtiA% zE!XMIHD=tHbDN4|u3E}~IW&SXC3`G<2fU${fQ%e2-z3oyuN)%{@M%Nd$2v(EH)o{YeZgHUZ-e|FtgFV*YA z<-7;r6|d5u7*MqN`xxsUK-A4B5;ersftBkZ%v?Seb2+HxEVT-C{(i2I@F6hU-WpVY zt8msz#p!~T;Iw8L*nuOKH3pgxaLxCj00g6vwdQ7Y@aivjz?|2C>GyP zi%EkSjzrFo$)#fQ=o=fGOX8rw=%OSuwJ*e>PcD_lpq83=;a1Szg|3e+0uYx@hj4pbC#|}1v zV5Q+Qj$9CCg+HFH6658$u}QX-EOXlJB!TGp!|3-0ovdIh`h#$>E*saSa&X;ofJd(Q ziVt<>fSOT!)v-q%WgA{=4$jDxq|hbReDpx00wJ1(Gu%rDJJe1plnZMd-7~=S3uq7v zqFo`RgVYi-*q7U87I9=?W)19G`-s3+J&-}8;$%jB28-n76uLbZWJE-9ukCR+@DlV8 z$3Yj$i|TUi@C?MX8yu;s_(xd5rI&zZjY7j~G~k7#$6&20)->iB+H+BIGvG0s*C=;0 z1g2w~ZB4@LbCz(I8R~U{{SIgvZMFvY*&K@KYRl=?Hvrfe8k%c|gENqBWTZ#wV^uAy z(#ROqI*z`_q{=QTbBt_jYw-eYI!ghVflA0_=|0*_Vmyq}+8}<H1#jtp5 zYLq=2Z(u#CwkN;Oea08oYIZ4gOT)dGu--TP>0!8^N&$2?Alr#YDGM1x4}iHtItGN% z6Tg$Q2VR?UNXuxTtJ8#Nhq1T5V&iIdaHNx?8o7>X&sZ7EMBHVxUul)OO>m4&k688? z+X$4{Z&tW4Dh@NJRVP*k5c9D+F=^!@9Cy%lEfXs$fmPQu$7^Ez+9c@x|)lRetqVYOoS zyKgw&%~`AC)0>py8)Q+eQdQySLQ*{wjH*giX`+*8BH2URxPIH)PzO3-H+kR;{Hy`K ztTd`WW#l@xJvBAXkX+g}Kz)B9*HoGU<`;dpCKbQ&zKq3c9CYj5M|0&EFpg$oaaSYO z+`mXP%-bqP4?oU<#`7tp|tPxY!iln8`8>grc|2Gb(s{ zU--`RQgm*GoSojf=%}uQ?its+Ic@z)yS3UxZ@)?>DgRW0dMKGgTE}puML71zm^PwEi6ntGFjX11t(qUp_d+FE$m&gbUMOPOHi|@#uSgiLy5Wy;ud}} zZ3e#Yk(}xGn(|L+7ghr8O#&Ln{&14;jWc0Qj|VO4Y*|hE8VKnYPIXrJ0K$6!SVcW> zul&I7u)jfL$TinrN^t|dRWByg$N_1m&87rksC+Ha<`sKHfm9`^BvojoW9d<~FjS~f zHbJEN>kdbtIe?LLZEbq`)2fb>bK$)9Yzm^O$i!X0>&PzLN>!oBvjHq;rQ#IDTB+0x zru8ovA!>h^e!!SlDH{PO3LMs!Q;?Vge}D%WVha0eH_o}EpE=x-l*FZy@TsYeiasW) z(tn5_;Pd;{0d^$RnNrala0<9wMtDW{cJA;^ zX#uBT4({-kC!_xd6z}LMo+B{8?X?@iJ^YtJbC7~F4nR2a1D}@D16Ugss0oID!GTJ2 zxCQqOL!NH+0)u+J=O99|=fCHEFzqZemUtF10GytfmpBIRP$;FX9uUW<%zLXo&HxKR z?*kS8wf~oX?Bn_QANgCkJbEtt%~uXMbb-ypt}0-V3WIt>1C3|>a4D6e%Z0JR!0<|0 z?*q2115Q`4i^yIgei~%#o)N$FeVyK?NZ8T|G z_Ni63n7|g=)Kn>LYtVOgj=mD^Zs{01?aWaq#P1n9G~@x38BN0IkseEVwtf@@t4bQ- z5zLleDq+Uax`R~peZd}xu}LBqr+K4SykC2stU=9174zL$?o=IT;bQ04DzGj-7RhF{ zg`L?>ZU*;i-e$G#1&$i=C|%NQ9k6Y-hUzq=Kl%<5eczpdQAH9`RgKR@PNm0IXlBAf zYl()Nlh=0MJmhuwL5L(~L#-(|kSo9q5nu|Hv9?*X-8W^Ztq~5@-d=XC<&#Fi<~BmO z>IkY`zwV~s3hsunw@DQD?3j}YrAFd?)tqc>J zZpANRmbAr0mS5+ns8ro=~Q9&rU`*Ke9zQP(J+pl{gJm) z*c{Y3Qg>=eu@qnPLz*yl(D)=(ReJORv@Y=s*81B05{_swXcv<$}A*u~~ zAwY`tErFMl&;1aZY2R(Oy8}y?}nD?;<_o!Sv zQ%3mv8NrSWR_hIL!)&EB_a@)x=sSAf_DpL`7UyXGdW4h$tym}CVN5F5mccqC@pT>I zNhRbC65N9Zdjs5r!g8;ol|-drI)_AzvKG4I*zHrJz^vUpgoDoQ0GjULT+^~_=&xIme_6S3i+v``fR*iQrKn`L)YEF_3DFU9Zb95jQ#?r_M-yA=CxbKxP(XOT0L5(R?yD@5} z?FPDd5f|867k{~R zAay--_Ams<%y7Al$?0YU6@Weq8kdRT9F~shdcGfRH=&n?qp6HQ>1CcrEDRvlH8;52 z+n6?C_prU)Qow5v=#-_GYUpM;OvYadYt7AXJyKQ3ilO|z>lWwx12*>`SV?6KK)x&D zfS8aK!o_mkNX}uxj0Das=%JL2U%z{v2;9tzM9oKz!CVz)9RH~dkf&x7cGhj|A@_A`H$!bK%oKr9g9F=oGvefBou!+1bk8cW!d%$AGJrhUDb9d*iWSpk+!Ai?cdt-k;}Z6#=jf#zaj>TqcYwl=ZRf)5_-RyQ&IxJekq4Y>m*z?@=( zWnxCbQDf&}ckKc0#OJED5FA$L4r`z2X@EjtVywBHttr|kX}^~T+lmaAjbi(Ax2v&F z=eEN_jMb~-ewTxq`RS8sD-aS8O0Yso(0b`HxEor_V5wT~=os;L)f7Cx(ZL)@g*fkt z9|WvB$`**A3HKy5AT5C(Nm)Z4H3yiczmxN2$oq56@H5FEZ;;Ywo(3Kn%=jq^&z7Q?B}}dR{D$B1oAX1DO$F0{-0SckCm)#cIHZ*fc5cM`kBN5hu*xQri9hL$*Lv(pN|Z3gP$Ii_kwtXb zg}y_;gMF0zqz?Irp~1hItH}y@mv_OgB!~Exs^ozXE%I~4hc*I|b8wDO&-)#|9h}qK z@hs(DL*_x)Eb6Jo;06k|F+$D3Ze1DV4Q;+}`C~Th=`@QVZmoCBTu~)Gs#lV0z!`Xl zspuUM3s@n^T(U;B9t}>rNIizyZVwJ~0_@8LO?!hkDVmBQrRgkHpbe1P z8Xxn)6uOlML7khRhsS01d18Gj))rLjw^RzPoaZEN3E(;L+d%h~HnB6>>X;UBRr?Uz zm8LX!yIeteu?ydOVT4yLWA}~L_iMtw&hG&;F~i)fG149-rlAKGhnfI$-iw%GaY5ty zi2t=Nh0VsBQ(7m=Qzm?__I5f?)w5Q=8{$Y63*=T7CiyHmc;AV=d76X3?{|F>tT9-a z6S)?eJ}GT%jU%O9joDn{X{k+^+0j03Ms@3e%tGd*sPoI;|JMB@g@uPAD126=hFB_MLY%BmVr7rF;;gdx}k4OTkl7-Q%CT0q8lpwjA0{9e#c9&t?e%dV(rJ# zH=zN8dRQ}#p}QPSkY~(amq6WX+N{GJUm+~fC0&li`0wmaRYV}$2J+3V8ebV$8&G;?#pb?rIFB%E$PpVQlh#pWLUH2Q!yiH5h3 z(k5YbpVy-JL5q32^9Np6Bf|-SAQZaA0P1bhM>(SuI?I z42l{9(zl`^Z(BQzf@h71NmdB-1m#X?OIE51lwt=ss`Jo(h%nLz(rDfh&G^f?&4T%# zx(i~?J0+Kbw89-xY#2oRrOsy$gx8G3Brap1nJdRW26kGEg-z>@#ioJxG)IwGk_eEQ za9qkJe3(1H{HZ%QU*J%kBNZ`3-vrIf;TGfmNq*Zq-z5R z{7mT5Y$6s4_zTBZpImae@ZpUEmubjAaG6-^2m3MTXyp*FqAYquL8H-WXnQXDAp&(@ zH`EJffER6gQa49`ZDY7atea@>y1?rY2xhuHfZhi^0fJ5m>RXYch;6OC9_Uqy3nGaLG8BG$B}N31tE7bwbut0HbFj0s>&TEk*) zqBf$|?_lP;&pRa4TX#H94G0@qdDE3Vt=o0hS~2;Ggsr>h!!<6#UV+E1(hFmRr4Q0y ztE*f{&{Wc6S#D~o8i?6Z3kZ3(DKp|;O_*+nT>M$+-D-FIW@&0KZgdkkO>p~f&I!KB zfR(wwL}gJXxEvHAzq2(N+tQ#ty9SmRAuLuM19;({vd4)5XhX&7*}wk{GA4eq*4I$Oy{!0Y!(28NHFOZ> zVsh@~aNmv5v8F(D`Ks|nYt~FVf7C% z^qf}R5fJLQR|a-ZV%kf1oQ+=NS#7`z19ft6agW>hHF=?uFi)QT z=@6K=`Cum~ycuWA{Z7ZrQ5s;O6!Zra(2QG7AOY5ZInBK(=*=YNYk->IGRSJb-P74d zhk9|#Mw{5s*;lvlEF4 zeGY0u{XM%iv9zS`t*|={b~w`bHGgODQmR7Iq3dgw~N3TNC5dgVCKCcNoe8o(mPwm+RlQS{XGh@ z_7c4r-WFc>j*r=;;5LLlXK&~p!_H1v!{<0OwzLEHEJAJOeyBxXx-&eYE_5G&69ReyCEZo9sdfW_sULXsJ^g3uEOLF}%5!R&wy(RaoG>_3iJ-Km9MgGsRy7 zTwu*U5{^Z^N>RArwSXn}QmZl?*V;E9&JK#nbjahs7KxM$GJSG|0wmA$JBkCfj*wY1~1~;$8)?9LZbix5CBO;K~!(aBe3J~b2*-SE|1>& z)*NpILqB@UTXOdeZ_Q)m5%T!0-+=wLJbK&P&~MFiZ~KNk_lP%nS7T!+Ybq>j!>rGhADY`3e?GLF#Kx_!x&>$0d`g@%~d1fJ8X0o@k z*&;x?=f=t?zOFQoVh7sHK(jf>o&$rZ3d`AN(=V2y7t}DBASN|1z*iWDi35ZoW2=ea zF`u%fDMX&0LtHUH8Z)*{C+X2ZTMrj;MO3|O=r7rjcke;k-y4#{Oz&j?sVgZCuc7HW z$hM*4bvF7La}xRpvbwG`aqjNiW?{4LMeo^Sk=w}jIhf_zWno%+G2M(71Q#-cH^4Ic z9oU?{kkgsQY_RQFwM`ZafG|x{%{`(UhuAnhktyBxpg&xW!J3n`s^)eSQRp*)fIe!? zT6(MLpKW*Ij-@M=4PX_LJ>W67ht^ZhFT5KJv#0Sk&ffIOrKPSrlt3?&ODeOktQM<$ z>Do3T|0;DgZ>(FMHo}Eox%kb#BD&RkWUZN_Pzvh7q+XC+DR8!psXOUjxcw`hYLmn# z1x7nJdp*|l~TIc5bcSjSewFxKD%RXPjjm#K<>m(?O zT9_UuJueU6piN`OI@)5Hqr^1pTr_UPfH$tT$a;L5%^FlN)(*=+m_W>=dqG7{N!nbr zw!@&WhI+wwE_!o_3uzDDv@T10(=ijlHa5yFUd=ohPw{SJhB~bmBd3uNWab?762Tja zUngNaA_}mc%X2 z5=pd2uhYKr2bXI!J@8t09C&{{isPnBXec2S`PHU5XKeA?zqK1+;cKc-XAHsZt-QxE zEl6_?l?PPYsDKIj*rfAIVx3w2Xo(f#R9Cs%I5{Vdu}fh-nEP);1vkf9wjdU3vRS{^ zetC_gX=R&>5^>j zJ<79WYls(qnGU1bE@1NKC2U86HXjzKW4_*i=m*&TTriTO;DH@2*zFTA2UXxGKHL)1 zwpRobfQT1`ikN!&9zT3&c3=JhHQ`@lt<@ir3^sSraz!k?ANNXCO#&!2|A~@KZDOuPF3*mMheN!o!c2N?gD^cjKetBcG5fTcUi9 z7r8}7f8q>*zy-LZZPqpCK5QIQ(xZ4h6l!}egP@P+K(~zKANyy2M}FUTe@Ff=-}y)L z&hLE}^6tFz``(@3hrILs>hH<#|G<0l`#$)d{DBX?H~-hAfB*M?U;e-!|Gs?754<;j z@CUvx-}(dZ%eVgE`|>S62=;^T&$s-^59C|$zx7XkFn{Pzd?5ca{pL+`Q!P&|7(9df8>Y$ME>v({qcO;zwsyXZGUFUxBr(rl5C19TU(dJyIpohHf8k%txBZ2GJ>UKpe+d0=g_hw^Rz zHvW=t|9AdO{>Z=kXY+0U&cB&I{BQl){NaE5&qnP3@$bU>;Xj%G=b!(f{N~^BJ9GcW z>)cdj)EyVdz2mJfD*U8M%->^p96U#^GmeHcLS{0Z5DqLPU7}Lh2oHboq?!w3l=QJeZ}MGke!Xxuo}|m z!D&9E9Z)MkY??`P7lEYs6GyphnT}rvN-fT;KBhM|cNx36+Bk;ED@=zgAb{8t6ejpu zfpO9sOen!=nB{~rNBiK@(@>_@YZKa<3x4f-eG$Us6k0(M=34-caa07t&{si6d6lY; z3N;l}t#q)XSON;B&^G6tkj){g>>*K_7y0jV8u z>7WL3rQB>cL30#XYvM7}8z)<(2LXF0)wi@E>{%3Jg&Sun8V17pUpf1?SX;Z~JP&(o z?)`T+**x`$O^T$tNvbJZA|;Z2pe$RFa*@DyxkxSo1POAPn;^+e60wg=Y#AbwhzVjN z2p}Xu9OS|dkOPziplwM!HATugfuwj4#e+o36h*VyfAi3L?=^>?r)qrPoNN8NW!d8& zHLB{Zw`$ZF-#6D@bMF?_N9t0m*YP{Ra&R!u=!q@43ml~1yCooXbm0?)7 zaQ`B40gVv1FBH(sr4mrI@5K5Z@N&eaN|(Q*jcIJG+qzDw6%;?*OF}OijcOo(z2`Pj zJ)6?YoV!66eu9vq70%T<2QVHlJ_dKe>b#G3#RgbrO35@$6fBNIV;?3v$Fth?6~D?8H9Y^8@v$&UHn#<7h~)z?t8TPDlC+jRljY3zn0hSjQAl}!Qz+OfbvLKq#DqF}7@d`K40?i_euniGfL7FPO+sh7YzzhK zZhBbAb$kHO(ocp7#7`fCHd!Ct^b?1$b#@_NU(0|d8w>GU5_d*Xx0$djo+^(AOaNl6 z{~~j_;ex5Wre4GecP}0HH`esy?Ns6ohk?z?9OJ~BXa!G7_?Xf-=Z!Z3VcFvy>t?AS zsAAnP#)+)?h}r>q^?u&Tc(Z1|?AM&ErmJUG0#cl&uf$^e`}3q@6)B?c3l zRTMSp#6%Ub0hd+U?S+K-QjtIpZk~<|!|E5l)b_u};V;B8hYu_1jf$@v6z&>kt^RECT_indgo#;fSrCY0VPuiN zF7p!u0)BFZGCi(jrs_@rA^R5|C^(fe$%`N~du4X0iam#M@P!O67p^Cqaji-{d!BFm zvwtRU)QY7@kF2*2qJDG0^r1{`>aZJqR$tq~H+H30E+MTMKaQI?K zk4f=g@Db+HgS4=t#;`rzmg<$I@+`@FzwsOSOMnmM>;I*1&HMkzhw{D;eQVzLt>2vY zBJcZV^tXI--mU&1`hy?Ld+^_b{~qjjAz$;sZ;Af9{_qF$t`B@L?*@DK2R?xPfxP<< zqrd5!u>Wwr2L0}D_(t?M=BvN)8}c>Z@D2IuKZO5>{!qT^>$iN}*XOI=kFEZC?XSyM zeeL`6mG6K5XzZ`T{z|miJKz6x`O2^T+AZ(TJKy{Me8v0TpD+K~ugh0}zZ3mVxL*bK zmG6UxHvSdwGY%L2JK=rV``$y1_v9V#dRN}__1~1A`wxF4zx=oVW}fqYh5L*D(~wGh zEMai1tX#RV@O)ac^kgv#sfwg20HRF}Rzv9HUjjuJb&BU%=#WQxW)x_o#LvURjEJ20 z9*?BLyLH(-dMcTKVPKE7pb=Y5Bd{m_#J7(sKRoP#+0$J}W)EHVac}C93Q*u+3&HE& zCxAEebWh`P57o2@jy>xj2FJGtJ+^OkRxvDD*^x)8@m`YST)3tI630$37tkKgyd46Tcqc~y z$OhZ(1%OGTM-9UuJ^lQ&!P4v|^}@Z^+1Bb_Ac2@)nul!1J{#J8_juSHpf0mN5ok65 z)j*nu25J1R--htJUOOyJW$C=G82<1G?I8`O|IEoA18oPTPdXN5b+qne$GRSjy9g%y zRTC=QV{$R=n%hQ(6Gr>J;4tN&&UqISJ6(*XqPrOSd=wHDuvX~icE4i*CG^^HmwV|# z%{Wo7Ii@P09Eo+N(B+`(Pz z(sp*c!(0aj+!H!8{E36)9F1*HTN!tMR1aVc+UtR}^K?0giw+jSLZgl;w2`{Ua8^G* z2-t?OR3nd^f$rCx0tB(&P|V|g2!aZL;4otk@D5YIZShUsYTs*KGbZCc@c8lW_@UNW zk;ky@18cVzekf59bJ+{O0sADRb(uws$*&`<%>kkJd%Jf#rH|bw<3S z9GvU{NT)c3FdwPa?15OBFgU;%MYI5>Hw@-N&S~&;0^3v>)pmMdSK9B03!XJm$t<(> z9YPMH3Fti=b>Tc4I+c&XvT9`lB7TKkyld%yt)5u%M$uq9w>kZ}zT)!*z;kpiu4k}@r9$k2bj*_0sy1R1TGla5*sxo0 zm8mM=g-(k9dcD5NyFc*F`G$Y_kMXbnY%Ve3_o8BD>Mt~R67u~8Nq41eiT7yb_g=1C ziIp3P7kqTc?YE1Vy(LXBh%BV~8m{ngCM*@r-7o+E5CBO;K~#(s`BjxksRT@pYF-5} z09R>|PjIOL*Ol5PbyF8n_98&R;qQ_w3CCuYjli)VWRaED%W%x=JH=}aHCcg@D}PC` z9v-qDc)sh(T|VUcu<`)*upaUX>;XM;&8zD}9>{sPuK52x{@QW)=vU&@c|cpEeGc6| z{8w-u$j96@u6Y%5;ma}hz;m^x|BH?XW7NBnp#92PNc-xRD}4~9$EA2c@~+52)DQBw z*VbIgV!y7z1wK&w8Taw>6*Zo{J%8u_^H=hd|EK?J))&cK&*tuU7R9G(agjb9=;>iC zY7d6P-W>z;B~u+dLYQzO8`G()PhC_}JkS;bVqsvih8GsKn&z{^Nj9gd(!)*KhPRT9 zW`-VrX#{RSPvMFt%zAXzxV6A;6VzOiJJdfo0CalKgSk@Y!O3CXB3j2Tq0*eB+S0B# z7Rw>_ci3H4hi9hB&g<<50Gb+Mi0dha)xeb0(_+sy7d_*z#GF9HM7ic1zyTz`twg6K zJsz_gn&k|P(R&c_CfYvAfjylQx?9J5N;?kH_(_@V8tXPY0LbU?cHjy7S!vF=)Wd+v z+Ea6We0PyFS5RYZERL~V6%j71)fCkvv4gz`Y|%%U_S4UMN66R~in!Yzb^Y0Xt4*AK z3PQh{xW}x+pcpg!NPsn<|G&M670CJi_B~DI8k*5K1W^9o^7-E=jz-wjuH8a z_Hlr=T?kZ?Y;N|@RX7)a7y#;^;CWAD9hlyh4ITGL_0HJQN6P*Qg85dWobIPqyiBw; z(!|Z%dxSADjAIgO41GX1ZKS%ASX)9mTS|R2uWb*TvlVEw(0gvTur-5PRvEcaKjmuOEcSjM4;r^|4vIHVT0`?}~&iV%tQGw@e;0 z(GEkui(yAcJ+ijH#@&67H!A^C_GOD{F7kxuBLHV-wl6{GPS$B-F;Dj}R#7oXk# z+FPh!@O!T&-*RM}t#s_RcpV)-Akvt(GU5l}&|+_q&PptpZRa*jRl4wf7;xNK?bDA6 zux8Fu0_p7ZF}ICskmI*G%dRyJtNtMr;wLjJc)I*yhaoGCCh4=}923L6Pr!Bd{wF~M z*}PHJ<XPzEHbT7N#oC*rnYwXN@LxBlf&>M|R#*VVTWr1&W><^$f<9r1E$S z+Sm^H^U9pY9xW1(BL(ve9~kwgAF6nVNYeoAW)bfkL4~;f#4=Iw1RHc^2KjC57{PJR zc)Jl7A~QK&twgwg5}QtE1GqQj>gYgmAEe@#H92&m>6ciFB|3NSUiRp?Db}_JIQAoy zzF0lT15ic3&|nv&5IoX18=o2h%kB-8q=}hPsj4=9>MQj#u*ko{S>(s$LvMSnMiczCg|A3C{xG%DD*xXFU_rL# zm0zH)N%%e)Qucm)3Bg&{#qTmjUn_KlIB!kYD)?YPtTV0KXH9=e{Ud+oU&}kb{L2#d zp=1cR6pmFXj^7rV64aFA(XP4X3oq%Ha7iS5n~MrX-8Eu>`bU*-D7JMs^H@Q3m@{_X!Gcfr2?>p#0yRl+{ui+P*6G+gu+>K$0SEQZCy@Etc5 zGf)#2pJzCrdTNN0#q52Oh_fARz;@E3=(h?C&-<_jCVVz#qwyC$l@`*$;p-I~)76B- z1|qG)XbkP%#^mAdd8=d0GpIQV`;l4hj)q+Xv|3nb8+3u%#lpVLx|to<6|>K_bud&_ zbVT|>>syV`o+1hakhT_l?4AO>L-pF2OQn6NZFIH^vO1C(@W#j;dOLF%cNDzaq}}bn z!09{V<{MnB3hL>EeS>tA8xk%)GbnJxFjsfThiihfu2H=n+;$f1N5H<;jjbk~izhxE z4dXofNir&McoL9~quI$d+(GNUgW>o4)F3`HDgMih%Gl_(j4PclVn9ic4z=}o>1PaN zTy}rK!_oGcOgR81wA+MmK>dZjBY^02p2af{20W!O2AMT;ip&6elnU~;Hp>e>2u2CVQB@_$JOR(P-_(x2=>}hoe^DSJk~;H z-mLMDwX8#*rWN38I^qtE5^OHI-O_6T*|Ty3*3Hb_fO2?TEeAThbr_Gd^yW2sa6s3( zK7!g|AwV!gWmut~f-!BK7#bidrojUiXLRg<8BwxBO<(+2}E-=^x~s zFSAmHm$rria_<5iFVN5quLG35Ba=D>15W&$n`8VQ+wefQAlHzVaB4Wrp|EOm%yWYU z$IZ^{1!+4fB^CodW|gRNB4e04hs19OJ?|t2KSw90S9q%%N!quGFig9t>|ow9Ht#%0 z6Q+{pBF-aC=L_qopiYeg(VK^F|}IQt2MlaSq>&i&S}&8g4i)RoO3^}<{Wm~ zOAlz#RV!U638{JO=*k&hT5As)2IsQZ28f`$B{acZ8V(N8)8|+q;2UgZ^?nU^vWnWU za)z>pvBNZ3nWBjY@!)bA2jVpnU&bQ1MIW<@C61Lgm-fi~ZGLwFuz1FoG`kleew99K zdg$}_If(7KwvNS5?z~M)zmxDK@|SUZ2+5c|g>a~xz~Ji#2=&)dt8>$LTT6z5-x!RB9Z!@qQfe-({?W@+=Uui6W{#Mpys6k+mP zznBv0wSa{k6>qJ;FJMK@BEP@NTZ?_m82?&Z?E4HU_Ns@KXJBv8mOWl*w*Nu?8F%yi z5^H)C`w2Dr&kDFolSn1pqN?#B(xP2)cJMI?`k_y+u3hfFHtEyQE zy%&DOtz|eG1zC+UCQf}3S_CAYeuSIuLQ1HcZigOe!XC_l4Wm+>;IdM636om-DE3)x z7S~=`1sh>a`5*gV78Z4bf63~9fQFKmYx0cPGjOtVi2sr<7kFdWT&yL4EDld6@s9m7 z!Mw#j?m-yb-e9eehuu}!ObsSyq5FNou@2Xos*1Hx=!!jvToU?TU<=E7XbLP4t3G=M zyk6z`+uxC2|Ir`M-~3De+m!!LLI_-VtDfi25_Bc%L zpi_YxVqvD!T$C&Qsk34Ud(R$=dux+W;HWGajL}vjAAmB+Gy(vD&u18AQS^dCiSY;n z^%R$LA!2-~HH@m)(rW21L4^r^>AiG9Mly@44zr)Dh=6E?*6sw8kZ3kHJqF3ddV3bY z0?9Ehhe3?9)pqq}7v79X??15$g$0?#4#VN?&8#t(H)LMonehJqO)REBooa@LpFE zm`UD3d3Tsv{9&ut=CO1Lp3g!Xb3&&v?zuu@p6)!@J9nFxqd_m^B<;+thRR0Fxm*I; zN(WD)y+_LtBISl3A2<->x7f$T#BYqZ4 zZ6|B*ym0wN6F>Zsd)^P|{jAL%ta5Y7pLv4_Pn|1w=^x|L`&H4%#6k?o)6vP9V%yF! zd^HX`Ly3b1RLXI=2h=54n1)U2D*DPD&s3#(EQYWG~Ym@8Dd9OLAt)Ti(%3QFA&TK#k)H6?C#? z2Pyko1n^mz+!L#>P?zpFtY?+L@Bd5d{4#&xi}hE0!#Cyw|Be4@-i-jC-afBw(oWB>W@#YVtBM*L&wk9_>&`4}Q! z|6|`v?kB`PneX}J$MZeZ`kwFoWIp!EPv%d3lKS}C-}8x262k}o*vGNa-}CWLfPFF_ z`Q#_^QFtGr&PPA>seJ4+pU(Gu->37@&wO7#_I(KYPkrWpnSbTq_zU?n`0xDM_a+ao z(u2F;q};ntLW#e^#`|cIqb$9&n!&O*+lI2!B_VWuy6!9pQf7>^%E)*${xM%wh5)T zb0OdtbpH~7H#U@MmL=;hU$8NaE>Nr&J_l=`5CBO;K~$y+Mw8JECfs(y83NvP zyq-{~kg(WG8y(md_;yE;FSi}`=__+-;L>Z~3!6}yeFtjeQk+NMZgyc5QxM@Es09mq z?_ZiXM%Q6q(YEPlVHDDR6%hp$VydYGi`vp!2=sY3chmxvJ$iUVwyU!9Cb1A<6-7xt z_5*S&t{|8egaBIyg~Oy0B%vm?0qn$PY9S^lafdh-d1(*)M(i><#&Ji7e@4kM*XHDq zzx<1n-8)^K8Er_{K%d)^bC$DKI}pU>K9PnAH?8>)^xGziZ9C~6aF}hM8^VX?>x-36 z%iWN#D@VPh)3LiO+PU_bwI9imOH%iOezXtq)%&o_e3T9}zJ`M5Rw$nT0F;Q*OB-Pe zW7}y}U}5Og)_k^cml2z@upy%TSwl~67$=T>H+|Pv`?KDg{TGYCrYarFC2NdXd*9dr z=YgC(c0w5uE^q}~g?F3Y>CMA}WF8hpS@B6?HtLprR{}&mHVmv`52@YTvI(YalM+}= zjGZW5#@57+z0P|ygb-rA&CWW&?dY}%O&i5lPd-Wag`3<9kM9Z3g0ip=Dg5oCdKRmKI_E(bFs84q z*tD1psLvPpSB+K=p3Df9OA`N= z;gvlwy1p@N%j^q*0AL>|oU_+(KIvhvQ){>5$t(9Y4JnDS%qWx~M9YO(+91G;F&AuM zlwQ-)W00X?Gmi#sIV5!~vzl^JgcM?I&(1n4+G!G%(90yG>!FWW@yp_R`H(lh^2_s~ z|IU9mf9l`*{(Sp?@4uf9{+U0UumA8z^ZxJru6*5hemGx`y#G5tlJ|ethx0z{ultFg~dDpl7(Y*Ux zK9sNd)<4q!$K}5210TqXR}cC9-~3NfnJ;*J4N3gQ%^f-Wo#4mI;$FijWIc1arr!3p zeCvPZUn8^fK!r2ynhbqG3=y-!KocVhmb_RizxPnse5Rom_gk>y13|2@(nyy0A;cP1 zgI)Y`RWP7Z5+og-b>6*eS6K84DhV#z*-9+aU)m|rf7V7A0>0E_YJ|aeS%Ub4ulR(z zvL_vJFWs`~-wto=}1<-u4CjvVY=W8iR(qq=ydV zMNU=G3Hu!N65bagP>Ty)&)=TU{o*g?$N#Orm=~Y>-Q@WjxzwvXhrb@+k>6X8x2PFp zVN*IIMpqhJX!xi^L=Zm;$W~ZHsnZ5vl{NG#3wx#b4^AOj23T=KRd@?s_zDUHS|y~% zK_`j6={AIIwI+hiGXTVnNoZyqo!bs^X6G5`WR0s!`1_OA^7|d{oQ7_T`8InO6H1Ez zvPW%=ve&x^NPGA2T`9tP3MOUT$^^`)r+4DaI4ESyBkM*(z_=Q4AON_y=cyA2!1?Em zx5Rm-yMlFB*H}^U0ZI3Vi}84hZRs;U%Lvxq;fj?8BmalRJ$`;o0-xf=Soy7=Fl`$HtD> zLWeX@M*~?+7Pylmr!@=ntbNdyMwyM2&X<&e;f%}9Ydefm8r)k5tjuam3u%fAHZVVE zom$+7IHtOszz`0LY9R?h2NLeBQ!(q-3pY-ry3uSW- zJs2y~ANhS}^o%?ANcN(l6Z6E{rii>X&ctw57dh_g&<6>cN$v7e$CrjW?YbCKsG~b_ z=WKJTZU@rwgnW^3-!d&Z;E{vwxg)I_fVMUF5DwnQ$qZ@U<#_PgIJAzoEbT+?u^kgq z4ocrau^T`kZF$PVLe6_SPD*m!c(GS~;E>TOjNNRXVcVcETn{19`kjO=tTG9#WEUVd zlLv?`rn=vE2U{7tmjgsw>I@xDYk~xpeYPKV84M$F*>3I!nDi=F9Oi`eV^(JDz`$JD z_78^cn&7N+)V5ieQ^s}k7P(7*%V{6v4X6}p-KNGN-ZS>17HZ}il@qhz@$5l&Tr}9~ zl8e36cbil)9}A7#Mt`BweS(|bVvLWdN}1ie`VQYEE*QQ;-HZ-*XIM;^e%8)9)a@^r zAbOuF%J>txuS6daYFX4o+Ge3-mlARtw+2pw{3WM&V_l=Yn9~H@V$YT0zfc$%O9SDv zSDbjI(annahn-3S03|a3m~FSVMtfbqp>`*us#5r{_)*Q5DZc!F*?ZrWKlwlYpXQJL zxBlDtvM+mk>ctn4msu}f{rBIsvicwVn6UN?+^S- z`oqH&4m|9u*!30vs*dml{Yvc0x5O(kx!3ChUmBHHSzwJ5e*k}l|MJz!t5?^&)bd#^pBsM=UAc?* zecOlf{%`$I>}m0=$m)#izPF&Q(q+9!UTB~=tn)ixe3b=eUBip#X)Mu80=aWp?7=40 zT@x-_n#!J_q!eFDl?C5k=Fd4C&Q7uDU*Y-wS_?q96)ft6vD`L(AQ$_$L%~`mu8pI? zvIpO(x0R-|hK^$T3KsX(7&We)#|a2}-j$^I46E&_G!AjgF!WJ%_iTrd2JF{qF16p3K_rmq2CM4N*Y&dk>rfo z1fnb!-i|aWPAs8OF4P`EafFtC?xL12T}> zf^zmj7Td2B|K%#UT)=AdUgtBi9aV?>ba*=lt7jkP3DyCY1KxV8+x-bp`?#xchGUn5 zB!x;(rf4V9yEb85R_6GJ+j{j%%t;)V$rji`N}of6lC5@ZtA>un~1#|ta0g@s~jDLD~2xgRFzFP5{50|YxJ@j9yr0;mx2 zo5w{_XCZ_-!-uDx_L5d6D87JlDJLtz0h<0Ju@1maPw#`%b=GRv zUVyqJ&%&8>BniLl#TpBcy^sR z8w~nQh*@;UqD=@iJ(`0B#+q#2#1AlxdmGnzcCq|#%R1395LkH1?7++Guu7)0BhjT?XXaT%`r&rb(W^FFbS|SkBIM& zX#`^KqpM=Wrm~3RHs^ReYI7HfK4I+~!-TdM>mi$g%LLE-`C)zoz3|x3x8hzSLN0KS z#l4!`Ti|QAKnbe$nYq%_ax-$Bgc5p#8uxm|8T()VFM5kxN#E7vT$=;JT%@e|wn7KN8eUBI0@4W`Ud2H=8}h+*2)G`xJ7{37>d6hQYkV(<0#1Zh>T4$P8})tGCndrXK(R5CBO;K~$*p&x*o#s*gJQh)~zT z9&P?uK({FoZzAKkD!_EWx*dBN(^cV?P|VO!T4#p4H9%o;1+yXTVNL#FKhlzCci?u= z@Tstn4y}d~&wkjx`)+{m>%aI}nY&>~NiP$aUaO%Rs8>p~e#-*M$0y#oO%xPSwk<9Z z*Sqt5QR7O|ZQYAJgdY?1QAj8EG4-0mQnfvZ&;zlhZBndnQr*9^;9}`<=V%_-VWUf| z7dFvGj&hiLLfqD=nnWT!_7Ad>!_S1=>fE?v!OnRRIK_b$62?M&;%UF~rN;1xo(49v z-R^-ZI8y!An8xZ6Q7NpOV|MxO_LH#@q+efI))@zXqTxovBtx6G3UrRkU+AI@@Ij`bS?NrpG$1cF)Ca6o7^7d1r1UXa3ZmHOF|AFwPum69#H$ z@76ZAoulv_B@TD!!($jLi5dp)<=ChWP!f(WD%4fM+a5(+v^h^QbgXraxm9zD)tXAM-6f6zK<*sPN@FNCgrtFLFnb)nT7lyg^xf%i zS}T3-`q;OhJeXH%ymQRgK^7aW)+^S;q>o+`cnak*Ltv~(-fqWd*}<)dU&5lhD2vI| zJJ7au4!rMm(1`DaG3pW7fz4LwV%Qt_=cW3#(PT=Rz z#qvd*c9?jJwglQFkTi!XRh2KixbpA3Vb7HwJZS%nA++)P>xP_@8sVnK02RK(+8 z98&|iBFoTd0*k_f6windzRv|~_Mn*kQKswFg2z+yU!mo+ki(1xtYvI9JF}8gRMSz* znLOSGT56kkao^@$_h!x8xr?|nMK@)}a$$qja9CH8OI1k0BIK%5;f~m-WMKEh&utL$ z%!^#A2Sv3foA`h9E&xI41O8vbb@ghrJ&`>+(m;3Z{b2B3=luPj?rht5- zp4CI@QhDRWLq7W#{$l>=-~E}?^S4punhSsVRJ>#ESxJf{zvRaukmA1}SEO=`I=lr^ z!OIN%Rh&uP2nNkA-dR)@Tu;fPCZ~|J%qgo?4Jqx!e9SB2^Mh@#sHAu%guPqsIN$)C zE)-A^)Sh~mkh^OShoJk?0`rK#N{bJp`!2J^V2zp81y-uSq9l>0sjMU&OCL!WD~Hw& zyn7$Fx#AsnX;5RBx?_RiFmLoTK&)qXf7`R;EX*BFx<{*ECK+qmh(iFm9qmXS&LVcu zye~JqY|LU^9>M_`$DPS@lVe_2g=D=d3>d3}+SL}&Eq&=JHH~O)>5z-k*lDCZ2vsT- zXD&&u*nW=PT&e>6*6I5b+kI>3b%=E+J)y&xXVO^5UGO|JCKHD}dPM^;@ouZuRGV6> z4UK0n`iYUMXDPQlYYQTivR8_7GSFj!n@|0P zbnp6vm)fG(WzqI=oZ9HEu$YD1&30KV>veSK{=?J2Uf{Kbo|+g9umBYM7bc1o;9N0| zIq>0)-q<|tKGEP`YIT#o)F%Y-1G1)a_;2AKWVHhE(Iqr?Ujaf-0>UWWtuzq>Z&B$F zyu=-j8)5e!DC!Vo`ihNELkv~uLZdnay-lG80>W&tiAFHQFtJ#1_DeE9IY18|6GA#a zjP_Z03Gr?d$hO^X_T8bQ&UQyZ#+Vgj7pIGCGsozfhtq%9T7AF%CUg-Og9lO0w&iS7 zb=;|a-aB#33=euE1<1G-xsMW3ukZoj^IE1XA-Lh-6a_OHDi;O~KE@*{lx9WusvI%+1kZ#%z z+?ny5h7E~V_^-km2FA9QM3DRA=pOJ>TfaM`C^P=TE4Q!2vJzSw#X&JKlH+HxIRXcM z)XVNE$B=MHe{^&VqHFYABTmP~ZUXC8I_*8(0W!JFESD`F=n3;Y-=_4>AWDiWx#v$) zIff~Q)uco_44mj*vw*F*Fz~^MSH}|q z={$_)xg>bW9FEg~G1G${uNco7Sh;@ji}}ZY{Xe1xwR=mdT{R#9*GB__QB?`7%s4-Jj9hh}RZOWUkg3TTEMtngtK#%bk-pugl z*Tsv#E!ZBtT;!40Khuvm`&5$R15s75M`%1VRzi+jL0efCNx(J9}I_%9d-Mt#A)3{>4DC=`)V;0J+%bCw}1H&aeH*-;Dp)|BL&1W_>te zU$RnuUf|2Egp5LxRB?|LN3Z7SAhwo(im|u$3IjIj%F(+Ho`(D+i-+ z${=S%v*vDy++4Yl-K_Cgndt#rd##MC-=E}mA1xlzdqA6#K1W;h)N?P7vcRZ$2d&_9 zmWDKuwil~{x}U2%--vNVmm1Ro1(-rlrOJRpkG}bj) zn3Ef`(*u5E{L%`&A^oOq?@$vb!lXc^|3QaCfZ6s%qf+gpHMg7@p!Q9w*y?C<)LYz5 z7*+BX*70^>p3~Tfj9}V#+Q4Zri8ZnvRJ%!F#BpeC^KZVELQ)6SBfS!0b|jpos3<-F zYaszSHq?D8cN~95n{b0;TGME^of^2%$l-q&57~f_q z@>}`0~tAei{n?FeKhXJo>;<}1JT+wv9fd0(!t7XNa6K^C9(Tkhfum^H!|88YJ+Dxzs2 zaOM0950gAfvS)VhYwM~CGfDM?jyCJ~IdTnUz>=om6#MFs(RURK;IwL88&8jQp~f3; zV#`jVHAq4%03tUE-(b&U!dRi zp1=El_{;gZ|L=d0ddEAHXT_vfFUjpMmAc?#Cp4w5ViWet9=rqA%mN2ma?rFEwn>2( zen?FR271gijyYLHRfKebz#3Sx+m(B7I8bSs?0dF zJ1L;2D&9r>V{V*MAUX;rti#H&zjp+2aCf{#;+TNe2!4@Udf2MB2p8IM0!wZ?6_2u9 zN|Ye`dQPp@`#x)c=5I5D>Aj{$g3A#4jwsSs-UhMGWbdqY8a|dqV#kSH4=`);Q9`zN zm3PI1$I2{Or%VE{JkXsgF!Bg^=McyScV*g3HXT1CmDvHCMt zFzOK=kbKGUw9d^xsb|U!DB*o6&N`^=v)hz34WhP9YTQj zv!5P-*|%s>9dOSZzJb@PbFb?7E$e1=V8U%)syl5)te!Xk01yC4L_t)$ms@Nnwd!RK z^n`DpwZrBXKy{_ta{3wy7jcVfHHdL&%>N>@_n+LOmxg*7+;aUPAA>G6Jdz}3{4;=C z_fGpP&SFteGZ)O&=D^xxg@~4tyYa~94}|c`K;YWr#EusuJsOkO-u>cUhrjLP5;nZ3 zYre7}4}O~I58S%**;}_lX7<3@*1ZyyI*$~uo!sSJZ+7>;39$wC>BPy?3m-fgATWlL z=xym5Ad(PsjHCyijzY}Rst)Ohs~c=5mTouh#lrL%NE<|+3^hS!$8RpkB~|t42O$7> z0-CO~`^EutJ%paytX^Fxg<==CZFU=A&atb8KOQ)S5NcWna#rsP%Iuxcq2^?Rw4Xf& zeFW{uqoN01Hi=g*yCOIw^ntt^)1R2<%RH!T6a}=K#%2#>FOwmCaq@ zsB$-e^n{hb*B>eRT~i7GkCnL)P`7Opw>qzSAF+E0zW_towcy04=UzLq8VNNPb(dsC z>O}(~R>YJ*@bxQUuxrNvv4dQ?v6V0XhCh_c^Gfm0*H<1~C8oAu?s?^3n2dzXySNY~ znQ`cvcxAcza}8jz?{(2Tl3LOb0>leRS1is*4DQnJ-U_R|^e9&1ter&=Q!sg^V~o6C z|DnH{^^%`^*hL@C;>*v1ZRb^$!tPc8=?ss^!>hdSkN@$!`vV`y1NU$>2GOz-F4&}! z+f};7+u|iFU#V&9Sq0gLS(klMtiC}S8=J0)=J57)3m8Hovi!L@S>n|N*)n2NKO%yOf zUX1tGn*!T9FIuh-m13{ua|Z0Y38Qn08rV)>l6DOUpqawf_UHTM8T4l>&)@d8{LKID z-^)+`d;jk|d*jREnaW&xtg6(7-gzEX)(I_DswzENQJ6WkE8gMa8B~AEhlS0WMUGc5 zug?a!UQ(EBQWI~7RaWM>wc#@C?A}B|ZWwIK8az3(ZyjExhmqCT!oOglSo{6c z+;u~^Q&`v?20`pGu#X9k56|H}*76VJ&Nk&W@By8A-o;6rl@Q6VeWHDMf=xs-VS5Rg zo(WKpHGE__-ir1Lqm31Q91PyPwFBqr@zXg|GnbdCGWg3*WVa5@o) z8HZu@h$zDJ1XJdICD7*`Y;s(|Rb9Ld)6?z|%9k1vl!@Q0@qL(s73FG!H+@(;uob9D z_p&4Lf|T~>#H=+KR9#{rUaw|u$+F#@R@p1HxXPLU@I(Ao5a!}n$x%jeL@fgsgetKM3Z_N8gPT-$A&#dl$sADdEPVV!p%ueXzK>qSF=zy-rN&PtWyEWkC z#xc7I+oO8+GKR+-hJHE^D7RtsF>=JJ*?1N%^x^aC$LY~jhx!nr85Sj(IfqR(QItC% zKx!Y)v&AgmBg5Ha`=&NxOs6%-VY9dYQ`g7`j-}s-1BZ2JOBkR9)PY(>0g`Z-xJw`1(|4~8 zmWAx8shFnt%l{6wTGX(|g?IeEjtNZ!YpZ$K3pSW@u_&l;{$Q_;@`HK-KDq<^V-jvt zj)q#XIW>juk0R`syii*^4vgZnb$P@8H_CjAG1gf4C7({+n_5iHQ30VU>#;Y8fX`Fy z7dKP1%UT+p9A2MF?y!cbGk1o^l+iv#{689Z{(K^4sp>C%Q>9mN0@V#%Q+&bt-QW1l z{MO(5yIKBUT)#l5sY=&yW&th}Jd{$Cw{niH1cg#7fV_}3%&HbAA$_Su(M-$48xBtCbrxW7d% zF^g%E2OS<5dvi^VMvjUyN1!nF`%Zx%bvM@Lc>urj4zZ!FA zTAoYzM#N$ZcWZn|cWwijE1^#h+mfdD3S~p>?&VaQ$VOj!E>1Vm6;02UbBxz3chTC| zab^IfX`**>d4kCz%oZVH&ovXPBJZxs?6>-sY1E9jhZqYEJ@xH*CS0KwmO6a7ZNuC; zUa)q@wt-@I5st+Djzy)LF>zN!zMCjF)+RqykeT6@ayO`gSD=M{{q$%ZF(2`D!zba0 z0D7JrFSZ&C(rrR-2mLhEy@N+-(q^dK#F$O)Pjp9(- zKg9im*RXJF7ezqPR_<~R#IB2$uR63g6i=drUPp5$ zWe|^eG}TA#jvdauE?@VihyEW&lFE}Ipq#K9;hflMgw_Z+H%C)B0!`g9mC|vRZL9h! zfYJ_zT1VaD!ueH5@x#q6FadccrcgwGzR2x60zYQQsHtwOd#gTw3G|X&jyvl6qz#H}*6LP*Z=6d@1DD*!6>}l(f$BK=9>Sd|M={@m*bi_14lS%sv+vR>>BSc!zO1g^ z6;6#9H}}Bty`QM*Qys>p(7Jg5;XLGMjf_8gf)FzYi%Mbd#4qMzQ?~j$kFA$r!smk; z*K3~B@3YG#|MVw5n^(W{W-iZRUD=nrAruGY$;WfDDU*G02wWc?^6qc?rhMbKe|xUi z2k3*(HtZpX{z>Rq_Y?N82#D|AoBpp3_}BgZISU^++MFVbUkv;8q~N+xn`w=X)2AFu z^}ibLT>lngvEhQaET$|hL~hjdG0*y-o#ZJsA!W4>UD|me5(}V3>69oj z8Y~hCv4SxB%m9VZSaQ{ng$PoEzmG{3b$py%pL8b}0qPT@wy9UhnBB?>I5paLF^7C0 zB3ItIWL+!I_>#Z!kjvZOo`3Y$ek4EszyHfgp6Bw$CH^e4P8I!J_{oAUw8>S}54gLj zwAIR@gt|G}WfX(Jx}w>e)%%htsyXtbyhDoniONLjmd2QgDKwo zXf)mi%LL0Dya^o+z=ScJ;sV7<^w}TRqfKpb-!t$j)TG)g)V6NRL}YhC3CfMoq0{Y+ z@ZijTJB)v~9R%h-OU$jmUqp@ zegfkr=BVQkodn^U53GSLqM8-g!^_S$lPl{s^JrW*Bj{TePO8kxYsTi$?^vu-m4gj5 zrhQ`>6GJpPCLm55>TzY?;)AjFWIK9lbCz3LI;R&x;MH}p!EiC0Soj^X*kl>lLj1tC z`PM5qE2m3zrsOu#7JD!UVAb}g7pAi*y^R4g8tKLONWTXoI9&1f6! z(F9~p|MvlMyxfMcnQitnGT{(V&x`6QjB(Nr{sy+%+Z9Ktgo97ota;6VmGp8&U%B2J zx8Z!Lv7_vx;Zx!iy8Wj z8p>Snc4$w(z1wn7M}tEnb5G9Lk72v^d6*|}omNxz4zXwzMemc^?S*n`#f*al+@^RN zd)XXR(O01joaIk?xvimu;Q2`_+^~e9BIch-Rn_R2t?4cR01yC4L_t(?U12R3bQl%F zeJ&h6BM{oCqe;9lV^c&SwLcxl0mRmUTui}5O>AuT?0qu*0TzF@JiG8s4E^xpMgGa(_-q!wd(Mjx zM#VJ0ge;6&)a1t$ftg^7Z-L+Pul}p~@~`|#jz`l)NC^vkynw3G5T5leiEe(MFOYA( zbk}PhsBMbhz2orxsMU2fkB4877Q(4y#eb>S=zZLl${m-p1vtRe@)j`x%4a614R2wu z%mBh*ZG1O|T{K<=&N-md!q~GPDa@jX6cq8<@5)~y$m9lL7~x!4H17%zC83qZqCA`N zg?WLowL50*!eYSDtyJcjtuBX`h=sCiyznJ>DU>ucC@b;qNfZ7xoE7c7NTlx-cH?iV zeD`==LP{2~J||kPG5>E#Ebf$+q18kxt&5A}>wKQ`7b%MeTyJ|v{>e}N?flUH`hS;K zJpVj@PP12zK|(O+V9B`A)!A-lEQm>Cm^lYX`{*kmiiR=LeT9sopHP%zQDcFNVrGWv zN>YHuTEPe@=(`DgZ5Kmr5~lYNv{JJejb`^!nIT`xBG|%;P)S~wa4AR_n=lsZ%t9&l zmjwr3C00Do{(SK4fuR^Tq81r@xfhMuw`cSjLr!#j(2vpe838TvsG|qwvt3RG zqu5kONWQP%XEIFw?L?fcXeJ z&eN?LG!gEaU44whKh||X7+~w*Vdvha#v?xt!CQupLo|1JGP3e$EaDfDbuLE}&>JLh zXiR4xY=_;b!}!LYZb1Fl!VR)?F4}Y@B#13H!Fc>Cg#pOK*mJT-Yky&^wvJ`>&(*23 z0F|ACH&bjZ(&qw%6k!fo1_}qUHH$86ke-dfU+|WQF+m)aP)olJS`d0lKpNtMz+Rez ztoRGwG$g8YlExPNZK;+^z{ZGX80#>w|BFxR?WCI}u;M+W2lm#F&f5vSa11o_zLjxj zje$0;g+U>$#huObOQZxm4k&plzJSDqJBE)7yDM#t;t!zaXu_enp0mj90L#I;VQUH# zTS#8xfgfp^(T^3_ttRAeDa1G%Yfqj&wW=jHt(a4U6;uw*%cnWQDwj>Fu;I08vnHhg zore~shER*RB7OoG?tfEQ&JAiJy%*4V6l~AgzY!cZyt&&p-nz&WRd*jaYR(ikV0JlB zCIP1P#H)&bf#UYibEN&Yz+pmjMXa3!s~70$0WhDl5W6FZhk<6DiOuibW1p)z1l(NV z@FEmTOP&mW;_h=r!oIkz(t~n_XujQ9s4A|biOtl5ie&**@chj5XA_=&_HbL;bLR2+ zlj1*T9L0hZfO3J%#G8&Rd!>pRW;#&Bx(A;{bXaB*YD0c;NB(kb&HfFC!oT|~zm)&< zXMZNw=Wovi@-u4l-G-dirPIH3FMP_f?oUrVr%#)dP<8|wGjsuyweTRgXXoJ(=*iaE z8=xR1y+4Y4_9`qMc=Iq#^U<35 z0$lhgR!+dZz5T1dDj)n)f4a|<0;6wczuS?FfWi+yy;drG4dl=d1X1}sU;eJ3ajalf zE)?)zvM87P!L5X}hKjqTCHS~k1dG;Lu{BVg59xy40qSe2T8PQf?!xS=2BwFQvd}AX z#C;ZVNC@Y+CdC8427qsp_P00`6MBKJKtqQ?bSan=#A+OqBTnDGHvbreh|d=*8btXim*m>b6m?O`k=>6zmgbMy~!&yF?GnPGJOWq0U)WZ_XHJppA0v zMPuD43tu_ZwsB|LC&J(Tc21Y*Wy1HXFx2URKwm9jV=Vo-vc8zruopPgo}QHu`O7F6 z-acy@_Z+x>Ogx-55~HNRV4^$ z*HCv~{oJc}kkEpgocDp}++w8;;X`7Av>nE2BzNXxyV||qo(gev-8N=9IC_u8jQttn zjBV9sv^Ktdl-^NmehS^rYYfW2z+C>xl5XDRXtp=c9=*9X#*@km$jBj2{R8JbV;=cC zZ>x#*x@@DLpN8IJ&SUR9@*2yi(xq5{Sw$2~i_*;DiKMYPaq|tfxTMGYVOQN(b9y0! z_96Jbb{UKUo{7bULczsmZ4P?8!c|THADdZ-b2Xy3I3Sw(;tC!LoV6zalhfT{=L5OJ z4sz>%-eQh&XB2mvbfoQNp zDAp!*(gUwBP^{+^N?6%rsat4a<;f86d8-YfNz*#SXm&moG6P;4hfZkC4wD=Oh%s+| zW^mpySfQ35JNoQ2{8%WrancW*n#>`<7hahzxj68J*y)O~ZfXH>pR7GeYu$@Dn=tbT z@8I1+aKR|#hSoOM=&jtn_Z4jl3sZM~(C4gD+p6qw8u-@Z5cX!9AXBzE#c|hU!&wCV zrtrBK9H49aT>!@w4m-)GeFTA-ZTzWsd`to*~di8#y!$$k7T zgUc6E)|Gglk*DB$LhoH|xwK=jQi*STs(5GFr!IxfA3g<}FEg)RT=T2{{{KBMzVQ3G zKI6+X{AcBtIi>gx1(AOaU3_L1dojcJMUshS#688Kkj=ajM##kAsS;cSSL=p4(|5Bm zQf5}4kv55w4Zmws>w*+$7;RJUIcHL;p5-?_`=fby#TPIif_a=lv*5=YfE#jrM^j-+ zqL&vh@`3OE?!4<8zMgj2B#HHL(hPEd67%EWJgAPLUvYrXzvRm!wwQFFEcmOazwuxf zivmP>*~Y1-S=eZEt~_x2T-E@COua>R5Qw=O3maaDP>Ho#R#7hwQAzk)xUEIgCYZrkO9rO&e=>apVJR1HL) z&p+1i0SZ7MlPHs*AuPJB6z``0MaYfhmcch3C_@d{z?bK*yL_ z{#mI>tmxOW&qDrs$dxbuzyIsMk-z>I{$l>%x8F=Xe}jDg76U~c_YK9asbp0skt%HK zwQ}Jg`lo;~NeC&)l>kOVm_2t5D-r@)97Rt_@DdWL$~QjeI1ahw1PY{Js}$_}NjkN7 zZ#s6_{C1#Ggf)_2r5nw-VGw4fJHl94&PC`p4-d^0AGN49*6em6q;+6rDRvz{SS@oI z!?mvh^?`xRln=PGTQyG{h9Q)mf=T7dP!@Jlaj;T%-MqFy;ecW=-CQzQCfSUi&VabL8D?^WpXL1#g~p z!DwebYvAXEFMjx5Mcd+S%(A!Tax4V471mtQ9se#gF@cUBU72;04&h2uFzM5+)_rTj zr!1^~`!ulE)|fN##d=5V^ugH4ySSjIvjo$yB4vK0>LqF5M!=$}jI@J&&I70vSl>Ik z$(FNL`x6Z;;W!SXFWIOr@Y`_T~=Ca^0vv8aH_j7L-x46q8(QZ%>j;`q#Jdvy=2joc-V&l-4@8Sb+% z49ys78=F^pbMz8()!^%m&@ zZ$TdcucHj+4$63;Z@u&o8&6Albm;=#GF%>UwwZoPNj%Srq?}`6%`p}c{{&6^Wk+rt zix&m$tKT&PfOHj2Vl#CVJ)&I{4Oird99r0DrQ+-bGv~N>%z7#(@y@u<+3*38?iuDZ z#K3`U<8**%MHZI*BYNg|AD&-Z>AMvqdlmO4mo#G|?GQz~5ekRtD?C+k(s#YPz!5@D zG7*!3dTzUwi#%&ps{b@QFvx|FO~9$sKfoIn2U&9ntel*HS)~EU3#ZSG%@G@p!?S}C zj#94VmW*lwuboCm1dOzn-_5kgZAsHUw04s;w%}9VT{iG~H6z1{HgSckb8ap|DR?A()I`^anP- zYOmx9?)fm|4NyAam!NAKl_~{ND!~rLSE{+`VHUB4gNhu?q@7SIUX9*`ng#HzE_r?d zLBIOk@8qBTt-qCe{`Ou&H zbE!*lj)FlBwtit2y@r|uoRp~K3XcL8YQ4!{puD<dH!Ocv z3WZIW!~vQ8KP@M~U%#Z-11PEmws2N0{{0yv^q@knYsGp6=O|Q*0Q-e!Nf^hun&C&f8`4GT6PtE;{akPX6E9CpH@BGbFWB3sar!cNf9v;MyQan*NN#re-<%i_q zLY!Te3O0FoS=R+4{N)B;{x8q-@cG}(fA|-^KX3l}KTCgJ@+#%V3r;FM*!QA=dl5rZ zmDxrDA38cc8s&a;+P+{>gLO|(;;i9n2BQF7Cfw0-4^UGUx=9*{SG~+#INU>;TcH_f zYD^VjuFMIL%`$*Zzu7}XX?GizZod~ngy}hjJWgy*r?s7PyK-`2FE{U?3x2EkzK^w6 zXl8B?9tD`e@;uq2p>0znq!HekILn4x7j0EKeJd^{-dPx2TWD|cSqnf(Dh^6yHJP&r zAnl@^#?>R{Aon2d#BQtMx4?ooO7DKn2DiEkV|rEtm44(PN6kY6F)P#WN>NW)pczn$ zdkc3IMztLjPGf~rosjl%bB>LlKE`XH966Pwij^59uOCw05?LfT5o5E@I7P7nR8Y4G zsb2%MV4p)9Q02W@cDYc)DKFcw-hybJKdZevt}y3?C(V>MRv2qAz~*;y!<~wiCamND zpx&Ir>Yi|XIk^z&!*46rn7rhCFei|NoOb!yfs@w{YuTktW&E=-lZ0ktKQ_sxc`xZ9 z!FQ1?Osh%9R7L)B34`2)>dz)N=1goR_SEspwWBCjGonEV;y~84mWP!-qRxYN!epIi#c)Jat?N#2PQ7a z!OjO_y4Vh(W*#}?^?Fh@8u>4?xY>OH{hZw&ml5};&oG9eK_0VVGzin^K63%$s=6RH z2%H^nYjz+M>&RWvBiOoM$#hI8i`BS-dCX1}Gd`eRGOO*!LAZB6FML4jYuU}}oXH#P z@w!g;#%ZhcKX*cI>7Ol9^fY5%Cvjtz>IRlNozj= z6%dM@!r~THrKj7PgwY#uuLj_EZ0MG0w_}^zfN|x(ww@l+ zlnv!ej$l;@(%Rf*I90F*pT^D?3WBM3O zN*ATtN-D1(Pw{@oq?)G=sge%K40{IZqcs)BNdL^$Q2Z>Zk>;SCQr!ovsO}WL3GYdt zxzaIIdZX>)SKo0z?jw{yrlbmi6g*}aI~|K0{wdDCba(&wyxjui6{XF&TSuW3&H_*@X zjDPWbj$EES+p*_)4)@u!i9N%9PV5cz1x%^S^X3-#W!o2Gg|A$mSszg&#eUC}H>T#L z_j_BO@fQ@u7yW05{axSjW%-T2_jmL1^Pi*sCC_{omwhzXyf7>6;@-G93mZ^7g1q+#c2Mmt_&k8(q3cTdK_}okEXJj$wt}pR9Eto48 zOybn@mm2f0m#ZFl(tU+NZqiGl#=g&Ld5fOpEHPrtu$>;VsE-h2;?t4@ zoJA6m#^e_kaFz>udu5smq4XaSI7JNAf61X%s*|vaip3u6>S{4VolBpj#ygLVyD3-T zErvlh>rCras!NDam5N1$74M>GuE<~1ksBh{1wSK2Ji+!a2*lxq3bS_-eQ>|f#{qTr zz`;&>=@d%0et_>Q<^B(sOD-=S@*jQw|0cin^S_*W<85T{FaHZFXTk}8OOPJq^}ae~ z98%lr1r?BWffarGeu&s^3%D`M<_G|IuY|Y-R&fP0_xr(1CtcG=4kVvZ_MiyU#{>Y` zaC71sM;#Vn?}$npAyS;DFG%JVu(n#8K_WJ@uVI;e^a!|UjFyPuQ0v;skrk^iR&~uw z)SkO?!&q=IJ|w1l6KNk89$Pd3#13N~)rcjXN+>;s zfVmBeV6Luozzc(E3^i32bt?C5`{ACQg1G`A!$moPROjA0<#I0qtLu8UL_Z94Z-!pD zPIN=sz^4sWj^=ScVYwvCh>4M9E{)S+aTTAQQab}s|^2Yi!o zjUP7dqiM>-Z?L}dcx#br=saVY!@|^3__38Hv9vv(WV&{zYpRAkYZ%*VTuvgQ+B~>VWMsU($VFJ00CkQ_^8aXbYiJYnRqK1Og@ru91#hmtU z__4>Zy``1;fjN=IFDPLYaz81R0K(1;9E@2p4CaW6B8O`jdE)L3?|A!pK_ym?DmKZac{95bm?M5D~;^Qx2q*A@IFc)4Sn5=!LV+NNViLWp=hrL3ep*RXo zfnW>reaXE9R$r)i!9nkdw=I-8S2S~(gzmX>7tZjpGN&;J}a{?Gq>KK~Dp zU-*T5{uh5SpZ|xynBV=Sf0!@)@-O8Jzw}Fa^H+bl<@5jOm-4w^{gwRAKl+vYr(nPR zkNv-QZ*KypzhyLuJ%iH-&1g-*F4c+@m zr0`>a4C+jzdLM2+zW2ZTYUTGI;K6^Oz*?6)U|+FGOi=-soP;WQsQ4&DAYoZNCm(~k z@rww2-~gxd;Af8_?!FzE1uCrOxRXSDR24pAsKVP+gJ+MTPdZ7XeKtIu#SSzI6jQDn z3$?U$F{vU6ZrF!r{a+NIf}7RJnARd;O#%R1c3k3NKgl*oduwapzNa*xhj8vtW5s;@ ztazbKA=fY5{>7;K+K~*)Epj3ky#U;|^GFx&n7t6oGr>kk*JiJpYK#4guB`E#<%fRY z-^s6i_V1+li>bxKgVuMoh}9Gh^aw6`ju@n>N)?i7s2A`s7SeP3FwAPGc?V&~JvQ6z zcv3zbGA`6^+yX5w#EG@VLJLvi(6}VPFlLjr_ed8?(!Me8qu^Gz6yK{1eyAKd*<+cr z={INqQ>o^JhH3y-ZPC|W#Lx@4Cw6NV%r%z{N59ZY&`CUBd@2<;bsu#$K7WY>(g8NG ze`9@Sb4XL|cohyDm|6TcbrMjEAh{a_UUz=*b8;R>tayaRZVytoLfX@Luo~YE^mdQs zvA;=2u(g=?gP!TBrq5ojph#XI6|caBYY1L^KPn6sE1^;}y?~sD)~=MQ*S1_BR3jbg z{o4{pI@I^y=xs5kxAl^vW zBV^z1$P3HeAb0aU`vf+Cqvd;I3EUjopE1f2Z%)`!z|FLgK9YJTvKvuJSZ;_SyeGIm z3ev_FzlzUr$ z3oNWzG17a70iTJ%)Hnn;lI%K1e+F?V!^B|jlb=4&qiFzHhky8G<`2 zjrigXyw@GEI40B1J0{c*qK!F+aj^}hkBC$LA%%{EJq})LW8$YA#1k0f9_DVkUpDhZ zL!gH#n1iYdH75W+_k&*?$ht>P`=~K-D`|m_xq0|)@rzjN70)a>{b4Z;Rh2)Z5jepv z(DQl0Uiff?41oZ!C->C`il&M)71$B0`aUvd8LMli8v_MXk( zD5~9F;HVKM$#wlzDV;YK@i-))7hDw=Fp*h-CQoDE85w$y zq_f?q@6pgon`>-WHXp?v+enkxJ9{*J+c$MXn_5O#n3nQ~ZMJPhtQu&KZON}~9~u{w z)$oG7+II0d=(W}mJcR;Gzv&q2SKXMHnmh6?%8CUb3FW-B5774nf@!Z~K!P;Vw(*X+Z? zpIZ1`%_?atjQ+!cGc~y{M$3u>uh>3lYWmCn+IBh{kX>N(+E5(sV^#NA4ZAKv#lLJ` z`AdL@x4kXD|K=C+OF#I7`8z-G1Noc(#%J=ApZO&6@%+T6KAs={)c5AI%BMe(A4fj> z8TF^~W1sm{KKp&2%x6E1Mt)TJ)Ti@f=pP|pt$g-VpURIRKl738xhspop&!CC_=%+rDA3^^Z*pGY$KAayV=f~LphyNF!$Zzr&3HAI9KF?Rq z#W}fKCiXRe;i2@`1ivSVFAt6L&aZu6KKS7e=el0Ott?*FzVb@EDU#a&&eP%FqkQfq z^?5etdD*KM|A)D3KvMCurbw)!Hai$j>tbCkVYsIPP{-2%01yC4L_t(N6?Q-gkVWx)})p29i@VN&>RR4+{hJNuc&7%w2C9I@PF^-YA2b?R1Tk8_X)x`$U z9Em)Pn8}$;RfOD37++Iq8ZluMx#Xm8X+m)Md#bp%eB4yQ(IDZ-^Z$Fqh12_kJ8`Lp zMQ??yCS0fvOulg{ML0M>oHd$g04#qlc5a9Yp|9ehh8ozvuv^@EJ$s&?{LBBB{NfM( z)%bt#Z(XmvRy^yK&~k8ikBUSAggM;+WyT6|_HZ_`CT2b+eSu0r&8*ItWf0e^%a+co z#HY1zYU5U3B(C;v={{j(p!3Tht0c1$-?m-I8d{`)Ux=@8iTItI&J*t zEuCPO?8Q9jB4aO}d8oI8oP8x=u68AJ$6$rA`V!Ngk?qDYS)7$~x9xJ)q@MUyP&PaZ z=-wAGM0FvCs2Y&r0D_Hx;ps$@?_Ly&LYBZrbklxDIJXPt@74Aoi%I<^xtYK{|8 zmY!8NrhxGU@jx+$zB(E%8pu1&f6nNHlha-=Ngko>#2n}_4lRn^d1&1hfP0sY2HxPR zMqoAE2hc&55#kFeqJ>|rS(pn6SnfvQ^GY;A8eW@dBiNl(7|gBa1GsWrulfufMh@f9 zivo}D);z#R^XQ?odbtZzqPp&^efDmq19!xU96({f=%3k`=@Qwy8}Nr#*Kv`Zq?N%W zQZ;SA@i6REg}h}-GQq&1wXNU!>9R?W)l*XYO|kx23xsLV2f580A3U+(Wsi<`elHsh zjD;k#q{muwk#&Ft?77h@!t;kHP9ckgC3nGt(=DP)>~IJLZscfhsjVNWJI zI>uma6ChB3%p&hg|v&G!zK1wcvR&6aesGthj)Oai=kz zw>Xu3od8PlxBDho4PgQYmS_vtNoyPN`8CP{H~8|S4b)njv#Aa!_{|g8;{Fj-AgkK9 z2(Qk~KN8TL1X&_AL1fQ+-3iAv$kE=Km_N5o@pl++(R2BwMTXLUpj#iuxP?76scu6t zte&Dm6^jJT4X{ z2PBR`dXVCa{qOUy|G$Tj39)A^e_^A`f&_70jgq&nxnw>RBEBc-v1C~uEl{oPH*K-5 zFp4is7y7y6Ld}4wbd)sUK-q86=je(VFT?43hjICyf*zy$0Q zq-{VZ<^?X(BgS#7XN3i6xzIsz6IN)KV5dAJTzwpVDfb@hIEMttP*09rAnD;zgzw^P z&L$T`qV3SMpTk9+ASI^kxbJ}YlEfZY_$l(K>UtH&_W#z!<&C%Jr~m!`XMXzs@&8J_ z@di)wA(j~mr=k7=S@4(Ipc>yfWsT6L&F{FlEmM$yOoe(VS7j}nJvFOLRt|7QXz2pW z@4V;$8bHKbHtgO--?)&%(F;kB;aR2KS-2z0aAg=G<$|!ee7Exu%>m8;vzBOjOd6|m z=EmpCPN?@63?bLjEAsf)kR?dIWqsf!bm*i~=Ct?=PMR2DLSU@@f^Tzm5y3?rwbF?gXyDo$E8UTZC$m73Q|Z#_ zG3?>58xE(j))F!J$a}krvCiz5%DBkr*RG_y_2SIyAZRFukG7m*ZK!8aX)Vi$M1(1Z zn&}=`s}s*ukhpaku{hRH&E^jS|18o3cTP-e#L!L~;4P~evUYFxapA+ix53(Fv4h>< zfvUM?KbY3WJtq7%yCEKkiBb-{4=F=XeaQAl&Dx>Ym%i)8})@iIqBXXq)NQTPQ=dLSaN+?)bq*P+~lBk zC{M-_1lDAy&6lkZV2Y!9+Me8YHaq=WCa5XhBsPRI&)(!3KcwRI( zkv*0;H#0s&>-!8AwI>GR)+Pe@!(M)jcL9PccLV1UgmXrXDcL_vu&og)Y987Y_QKs$ z0FFu#g@2g3BR9me4#o$eYmopTV=NqI+nlWsTsCo)rRd7w4tAd+GFlVr(#FikPd_&e z8EElBo1~hudf^Jqlz7@w;<)2kLg}n?xx3wIcN`mcyLY#e5WC$9Amsva!3EcF&jsQVffU?rJHmZ3 zSXL56fIvhDgainQg9Hdi*s&eQ#UbH3|ayW{bV z8ddeLf7Pflo@c)6oojiw0o_!=Z0fe>g@LB85VySQg&1q0t{Qcn0Ea+$znk~7&nDi@ zSWkxv@EX$XjloFN)oSVFwjRsHO(>rp)KW|LNwN#AQfcGHS`O4db#a)DKQCaFiZ5_) z%pP_Tnuh=6-Alpk)UQ_7zfT@co)D>iDIB?_H9IGjvKof=yLo)-ii)`@oe- ziI_iZsPsFZY3$}TYid)EFspT_eDl{V<8VP^5nLkCF3DveTtVU8@~U2?kQ?7@U)Af} zZuohX8<;UAV$VX%oGNP6EjRf35ywk&Zz=HLS83lezxDXE%uopMcJQ603)-ni2#M}{z;$vP zPgRwGdX~_T&w^kUSn!t|{_>&pTUL5c^0c}($Q{Ek@&WV>*Es6bA@yDpUAvrW7gqP*@?yHccBEAfB6LFxFvlo7t?)7)Nvm|yw7{9p4o z{)hjQEZ+ZhTZC5b{;k8ZFx4obHGh6;33O1WWla_U%;xEoB3Fhn>f)>LAZhyqF%iB9z= zZTv9kvsV@-yUYsJYN*bNn-g>wd*bct5*@dRW?4&t0hcu`ZDY#8?ixPCPG;$Rn8ako zLjrrgs0EKc_U1|zvc1{4yV*W9>&RXaXoo zcI(gSCo};`ohg;FeIwE7p7S)CwzJu@BaM-U(`GN@w8_$S(4aG)Z4n8IwzA{Gom7IJdy#5ESqey?@$x~=(K6KoLOfm!Uo zSQa(s{?`Qh0X@An`+lLqdET96o9lp!8jZ|C zDwV{z4IRbM(b@_>{1-hf@^#C4+tw6|hM1&E5C2@Y`rHc;aVC3iLOYAk`s}};5bPAo zwJr8A+SAvy)g!zu zUo))>_THaCX2eYYS?CO^7 zYePZVL0c@ctc3X;=JF8GWTBo|wd-z3!a=kPTtV4{Wz_w{mAKEiG22MqrM9Dy1bI@^L#`M^u3t*qx&k3d(+PXt7V5XUEsKrZZ!$pEx*|z=b zDx7Pb{Vas6MK!64dw4)?bi3vuLJDSI1F3DgT)55=lMSd3*7`F*qmO0c-KM5BuAl(h zAFN3yII-hRe-gnt_u%?iLa296W6&P&763$j;7nZ<4p&Dr>Cr5(6X#`Y{9254f(Um$ zYSRo}rSdq|;8Gs~#%#YgZEG*oU4ZPvI<+x8{z++2XUlxS(AgzaCZJa;_Hqf>nG2&3 zUXv-=06#DIg3-Tl(8oZFxJ!-32VOqqOZRUheoH-bz`5;aB_Jnz6?^j>IGx&}O(m#buvvS(o%)@?4n z+{-3#=UjePF`2U23!djmyG06TBMO{!GMuE(8_tCpTS|dtrE>*qcp$+f0!Wbxcm)UbuT7Fn6H46000mGNklVEDF2(fozW)WGyzLhnl9SO%H@uH>y!> zNta^!*wmvOyM`nL$66@LrU#U+i*6pVSU`awPYAP1@NhJ@RNu!qvUm@vbC=oqI1^+o z(8{`SY*4vc?&I+btf%F0n6sq@0pU<7jJ0*2wS5*RT&5NbEM~CsVl+62<_dRso4rKw z3#6X&R)hJ>s0ZR%9$u)ogDNF^XnPmR9ZWye$L!gM!f(70YK`udP`Ad#S)#G0r8@Wo zz-Izf42_+~5MWQDU^=Mo$DcylW!mnc1Ufn(t|<-o0-zRDbVrNUX}BF?XL1&ypbs>g zT;5BAlEY8br)(JW3E_?QnYAwigW60Cl3CAeuTIvWi>hnP&#t@Nb6_>!Rg^aYjy?HD zpa@~qN^4Z!HOM)zKkCdMDyxkXFW$@SF%TgBtQc+py)Dk9UKY|gB;qBn1qWTm`@+2k zu%!S}gVSIzyAI6W7@vv9dL}s+u&5ej-nQmij-t_x`;ISwopCX`5v{qesY^^bKrhs|GI{gK7P8 z(Qd+CYV^P*BmKZm_XKJvtSk0%{G$o<9DmjZyy(>ydFUNF=hZFW5<(KB&fWk7{euaM zpC-Ms)b)SfqH}C;H8PU7c4zb!$!p5_!!EBN~)-d4x<%5CKGS-g}n9ztOgXTs=2FyGJT@t z@q>-9TLDN=FrDS1h+R%hYp*wJD?OyOu^0T^#s*ZwUl!4Ql8Fq^HjS-u_qsim1m!t$ za4CsIs%mPCyXayrP+Hp?$<=NYw5Z1zfhj*NV3dCJ%)> zE5%#z-!ACf5u_3;6`^V5CL*j^Wt*S~D0?_Tf3O2*h+7+`FL<9zyFd~d;wh(fQK^YTAkbZCr)@k zfVM|3ly|aH{HKHPZcXmW0V^{Whh!UHssVakLu2#FYjChJXFWymx&}HI%izj2Fnyy$ z`x##WjkyP7dM)hT+GRJ>X+K1yB-cyKn|UB@No|8tqhn%bbhMYf;am24;!Z|DR(h!V zfEta=GN-u?zXMD^KMjx)1b{6=;a<(?42(&cXRxkEpe@~p_E^7JK zRy~5NlUOjAeIZwrhrZx4ArK-UN3m3cPfH!J0F@^0$3u~I;z!GY`f^rB7oZ>3w3j`K zCbp@fKUH5aKk&3`^Vim5%LO_5DFnJ_J@nFMSw6%KtAx#c{z2C@JAlQsL7)4Axcbay zDow)h6Ax=)cH;-fzf6OdLqLC51wO}S3u0%=!6v?~yo?iw<7n+IB#5E_W~IY;PI17; ze1xUIiLX?8(3oA8KTsQB*?dBLHgpi~m8&7>WCwh$5q##@a52W+_8JfPvvVljR|lmk z;zx7mMUB~V-mvC^kDk?(7Z5oXHqSFA7R)s+ejC7s-x5PD#fo?bSdibICTLW1Wl65^hyfI&4UKc_AK={@<4PXW5r zO7Sy;HFq}RdnUJe%bi>+tuQznDcwTcfg+2>@J5?aZpP|WD&5ouIEu-B3Th2xJqZ~@eH=T z&_djYy=gXK!(wbfV@zrQ4+Ou8=W7CoT-2HWR|;f{p+da>f&kku@u;4Ly-QN)14y79 z_E`IDY$W`~JA+*4_4;*w=l}N~Tb_>s#byhE)icDRFPFGJ zJ9NyPmYhKZKCA6+5FjKnL-N$lJBGZ-NLb?la%;_7*8m{4p9C<6!LNODY1=gk&z?0v zBNSTg#7gP$d@l=x^2`iPAU)dZK)Wm=8^B!4jw)=CMRFlP>GB1g*@{IDZjKIER$Ap< zgIL4zG`2o)+{Dd{We3}K8DFj<@T;TXyZ#7B8dt*Um`(S#PJfF=(18Rf}`YS#T2Rxdfvk0q^ z4?e@}#%jzP-IV;d+fZ(vk0(r+c;SS+=|MY^Dpz}Ni%+zj&=!);e+I=jL zo`g@jSif5sa>X&5HisBh4Gl?hfPOY0VXqN80aL81=E1`);xHv>`3-F%+-DoEi7d#1IXI>9qEPmo^HFy zTr2$W$_#AJ^Ptv_5nxIx7nAz%IE{021iZJnXJesy9%EwyP*DKPc%gXSPGSVHK1yGu zXy?V~Bt0t~q*h9Ym)CV&CBj!4=8Svhv&Ag%L`K}^&*=8OKtr~@nm!D3>( zH47FHXS{myg#yY%!ijof4CT2Fw)<8Gbu4Stpp(gTk2+vvi zg{2T)hf4zw*5dQHAZ?MOura^yU%$IT==VtCJ!U@*i>I(8%vG|AcWgr+T>6*u?Awzunt~!0-NVNm5L7GXOs`AtrC0#Oc-#jmBz&^QPqG`W6t>%-<3KY5 zZoZ{-760#XY@?`Q|~*- zL}$%afmG~+9-SBCfzp3R9*B2ojT6yt%C#81oS50dLsvf{|2WppK>2!g#*{A((e8`I zX4vN?Cer{#${Qx?^C`3w7&R-#XQmOwGFl@##lxQ+){dyg9$cSf)S#h9 zBMRWm9n#TMv?mV>GBXNZG?q(dEYx{W4YLQ(b9x5fii9Q5JgfS{d&P549c^4gmjd%b zyXpyS4aeM89oKur$RzaeabC{uL&!elDY3)MSllzBGocu)k{^cPN@FgW(d}vyh8o4r z8UhPKRxX`A3Y6Hzl`zRb9oR$_Tot0FK*HOrbcK6SO`Ncfb&pAadA!*B!yjw)%Sht5 zdxMiwyBfaJGqh&0ccd_TYA87Uys0;(E70ha027auV4;{*+&6AF#}}MRi6Vl>Rs+Gk z8axp2XXg%H0eq(JqW)@Q11be>vv>?BfihG^!1jrwOl! zDUH^gZtksv0~jP$<${A^oe3@cel`$yIcU!BdxJyLP%x#m@)ziK@Oo1nx5U?M)eD}< zMYou}f-_}{@L@_z9;3s}-I(uB?_-^(sMxrhh$=)(!R&p^$6nMddT+NEK%a>}>CMAc z-MAM^<3`QzvspS%BF}5>IC#IiXy=klP`%J|J~Eu_Th^C|_=_`Y>hCZA5 z@@f_35FEZQ@hcih_OGuASlH$jzR!5sLvWZkGA!&@nk5Ome*qw8Aq94W&*bVj6-Bg- zDY#}J9cJM$>~GAv=1-6iwbHWfCJj=Vu{11d5~be%=%f6TKl8_P^9u%8kzY{RBE=U~ zsrE}}po#Xb-hYwf|JQ%={X#pnV>kgcH;mB>s9M50l4#DSq1x_e5XM5Bz`hTGSOpWj z+z7kCR=nBFp5kD@da3MEGV>2_{NiPp=4)i-j<0!my`g`;X;wf{tVc;78 z-9;uY8Xye%SRo=0m-0Nedw|i&8}XIgYNd!bh`#JL0EiaJh2|T7FtHYaM$mg!z^mhN z;JXDcaby0ah;}$Dp?z=^4J|VL<(lkZayKx(_09a1U;1tTq~800t?#5Zqd8%8 zeRN1#$*f}}uvvO?Z6TPdilY@~KZ8tywHoJuHw>oKjwVIxD`J&INsqQpno{za0g3aR+ITQn#jtu}mz9C#;YR6LAJk|io&l8}D;~dH7jwn6 zZRq&q3&ll&Q>CHcyfr%{X4nm|H926qMi>HJzZU?b+eR@P8`|;I^(ay1NW)MeoQU;l z+KgeP;mc?*#<6yrF?wv^^nE1{oEDhrG>jE9@^ZW=u!x^^W@9n`PD4BAGnv-{o>TXWB zo*0i8DR7cm@^V;vBc1Eg;<5uWc;em1-b1zVt;h(O zcx=WRD=ZL8)UtzC{-Kpws~Smf%e`m9Co8fYG14qgS|#z+C`R%Y~-j5(_T z#Xl?tdB;j2>YR4;6#qaC_pBY`)@hQ49UB=tJ@gfvt*~ZF>lzpxL*tj?J1wTb_B<&5 zuqu@Ms0ix9#|nyBsY0%^RTB7Om{l$!32=17a68mYC~c^@ypC<+3ZNJSaRt*W8Cl`6 zELjQn!p^Gri$=^_!VAA)oJz4Sqza4AqVI?AJ5UUkc}dDI!2JgaJifgYiV&2Fc9nXi zlH7>1UFMCuvC4zD14!r=F z;hp^LPglN)c-JlGFA-{`IFnnk3+#n3DN&s9W-VN*M=8$K`Nl;^6!-rcerTpriS^X@ zi+B)!@x>LT*NQbLn{uH}$M)8?rca@cs_)c*hQB6Hqex{A>C5|H{9W+xs8J zcQWi@-rR$Qlp?b*7SEk@tgK+OIFUHe%s`HV@{m`!qSUH}Z@U+OjuCC$L1NySeL$x~ z5o79b_<~eb;LgG$hF`??n@wAl%*-Md$E{L@guARIGJdt$%i{gxp|(9RJZ9e)Xr+2( zM>GLyVLVMRroigAM~Ses)!wZZ0p7hN@+jGfr#WW`r+alK)sm85U+Ib=`>d0LfiXHp1Ub|3^cp>id0${WL zNwGl^E!N%&US@>`wveg{GsW}unO363>Xe~qj}*+Fz{~+zt%2$(uE>jlN~@q-!g#j3 zEBXd|Z5dv0$+y)Npt@zzp}*M$ymwQr?1SYQl@{f{#zm#nw} zAE7YbQGpv>GG077sLW1ApSiZd&yj6CDW7WZBCDuaIhUIr;sFn1>})TN3+f+HA|sR; z+7NV?PwVP;@F72~{lXJtKA~-zF05`~Hb?;c0{}I4ivQB1SdU;b>9dL19HRQD^M_gg zIB}yemH~9LkFBpjavr!ffT0!vALw9J`q<14zqJUi+tJi_o zsJ(g|S)TDlU7g+>{*ZEtfJ7)gJWm^YF{v`?GB>Ph_ierbcOTt}Z9-=7NRqo(QeK-HT;Df3^$o? z2ez3RpiHyno()mLxI*fQgJQ*@D3)s|-S(SX4|Q~@ZyuqF_k315I&COt)*5ZYcSlf@ns5bW3- zpkVl~-<4pExCcH-SOejv2Zw0zma6U|82N+${C_6zz5hX`X865jg=aGicBTs94*!hf}>mmYHb!tMWFJ;Yin49P2XyHf%d7%QdjA)R9{><~xz zqAZqz6o$%g5$t)V+a+WS-;k$Ny4yY!HQ7a9uGiY}`$l%2l*L}5W^filBk4x4i|2fE zFQn_xgMNrnB8NwKp0gwzd%9t-VATRysj5^bcN2}pI=+yFg+%EH-7bv{sK_leEkHJ= z0HDk(iW|3_&!*E^WQd1LP}?`9_zMD0%a{LpmB0P3|IhL(|A+r`Zm-_wChjrb`_NxV zT6>RvP@V_CJv2Qy*OW($AbIXfF|4SFbEXFM9~}20n82*MWhe{HJ5OPM#-aj{Dxw^q zQb|{Zhsk7n?iJKO+i(gGAJa)k7?rFLELwhdwjSti6$ zE>vhWi~VZJF_E2HHEXQtm7Pdm)SD1@W!@Ic+zBl5qrhbbhzzZjKw1N&1FS|8SL&gl z;0-rCWvnLrzHVAhkr)`^Vay7~nJ*C{l! zA#Jca`9)w)-xuKvYNHnz-b3FK_DsrP6e(JTz2`B3HI)U+D_&4q0AJh>I1uZZvR)z` z;Sl!OQNnbUD%ZJNAh#JRt2|!Z!~l!FlDEde`h@M2uh*~&)fk!@t}X0)NLRQ6ECL+R z)Sypy`i5d19A;)zx?JhO;3Mg&bn()C8Hz}H6;F?%jq$4ew-;i})5D3bu7cM|D_ApE zPJ|SLN5as~#BX6tXV*JO?gUAtYY2V)>K5ZjpA{`joX4u#(t&gx1G8n$=qLqdXK%^K z(b}hKC?USknXyLo`c_@B>l`|rWx^3aa^#5M^`w>7F3-4KK<5?~&qqrHR+}yg{(r(; z#1#}jd0e}(>@_pGmb5koW9x13qtDp!M)T*|6Js~W%ewd*{d9G6l=QH2H9lOZ8TY}- z83gOtmlja~I;9t!r}-IZ^Hp!fd=O?{+SBmC@s0Dn8GO;=yefygFcj2Ga<1|uU2H*W zwvuU*g|VL>I_}Jlk9n<~Y(Qix7ai%%En-8^8RmXCo7<6#fEl84tv11WjIZ)!XR$gr@FzT~Gn3000mGNklj z5!}{w483wm9>-qk8Ui~8(9=j8E;@5Sy)8UQEo11du=Z?#g_)e<>V=2qosDCK4{R71 ztbIg2dU{I^#zH!TUt|Zp&OX@S7mIW>Fq&z?%>`=z+A^UWd-<_D~0CFWBr_+(;okEb8CaaNYL? z_Z9{ip~!)R5;ZA3pb1AEi1WXpUAa-XiZ7a>Cd{JF9g?3xAP^i@E7{8(+kIou5K@R| z?U)W^|9?olyPE;x@)z&Na__}nK4);KUQ7BfOYnX64RB9$iJ8&GBbweCZaXwP{TRDv zzmf@i*owDc>cQC-&g{=?n0ozQ{=NV0|1ST||Kfj@djI`+AEEZ5?%BV45{m=Ff|wqy zxj?b0K1>)I?A&KljKfs2|Xme1&T6LwC~-*x_1g-FSt~bmVS{a)}N)APgQu( zs6k+*>o51fjt3^vCSg)SIcItpXd|%hjeBotD?QjDp23=y;1R+Vo#gU|+-4@le~Eo+ z`Oa8bKa9!1h$p%=cWy!~+fRo7U@y!{IzB5|VB&YWDeK{90FX3yc@LojVy8{a23o@^ z1mH|^_t_vU1Ylx1N&^)A4%3vkLyeUv7Mh8J&3dNyI`%}L*KTowX}eQ*pJB9*CfFtm zQy{sk@R(gwAKPQh^T}Ly9Mm+1c^wsBTQMJ(s8%LVz?zw%+wYJG-oLQOh;A=geyKARSL0 zsvf39wgou#FwcAonl!-OMElx6Ppy*8&S1>8JBG7w$1OKreTT*ggE_ZFQ$z`^%~=NV zy&FtiCcf*&fOGCi`;y`4?r>6JfCE%Jg}{5QK%tO#0g~=jN68E+V?EZ-U_Kq{ z_^S1-Z<{xeq;}Bh^4DEl@B-RD30K}40L?=)`#>z^bT6dAVvVFZ%MOr&$1-yxJ{o+0Ea33LJoHH4!-5S zyq*(OBely%d*{DU;Ko|y8dM|vS)_;X_Tn?KXXSv*Ib)w`!(IWTIk$IV5ILs5Y@WE; z!(WfzE1v4KdHT~i(gg@GS2qr@kUcdCbq{5{46yWNU}HvHVwx7+u{M}@3_}RViRbAY z{2)vfNfduL_^a=!gN-jf*RvBr4E;yW0#vTM$6@k|_zvhuM|+pu3wB@Nz2a;B{8|O1 zX!aG&-jI$}Td7x-faPfzX}5?W=8DzkQ7XV3hc9~7%sd}xW!{y>upx#+B9aT3Jc=w3 zZe~^w!2$fGx^b5xM6#ig1%rUoAB(m6UcG~G?xl2HagyOwZEXQAl+wEf{tXndil`5>BV^`lZTVB{LzxJ(r3OsT{0CBIi zyf-A7y5M*0xB;yE1sEX)sDs1s=As1qXm< zc8VN?RfufV~A9|p1Z zK;SH-YY<6uG0>~;h&CW_6yA8w6b`RX&ccK#Ar0fW&)N>OShsm_@8EX;OjZiO_e;Eg z9?%I~FpN9O|LMYlRj*&?SO1N_n7{cy_#eUMe);7ZVv7H!ekJr;DKv@X&}eL3=tfL5 z4EIqYCa8owVoqRHs#c0#=SvI_8!c2oE$_>5*N&as-LC%v$-Y-(EO$g_^Hg2mixj6O z+gJc1Jv4^dnuU1pC7*EN-1{O;A#OqFPQ7t&aSwgPSf%0&f&Pn&L^BSzP=^!9hmurY z4t$@3aa!2nim$2l8V7}DnD=Y5ClEO-QU7uzsjv_m90u+MH7=&e;QVf;=^eAT zS0o=3^aMv+3Xm{97tX4iK5JW#<;0>vBD2klLH^i8;IOuP!C(!r80)h?VKhO6{yh^S zN1)%yHe7am%w8`Z1xVwL8^%KuG@sjPAD1{QlS&YnZKIjyqnKpa8yCUEKNAo>lec1H zKw9#uaGZ!(xFMn5T-yx*sw!2A469WfTEo>-R*dvB)DUWH00ixwjZ-y>pZK^GHtT%VS4<1S>PN`V-o2 zKPN3Xsun34M{6tWC(X8Wy_(R+=rEoWupu+SAG5g!M4xw^GIre(9V{v&+GFGzG;l%G z=o@GagC5(*ytFYA_|vt~Uc@egVCS)^`!&u2Eb@Rlsh0-^?|E|VPwsF9tfhW5^@ugT z38S7@dHBrc?WNsbHXuz?Ok2@@#;}D^eJ-^krf9e5C^~B7Duvz20*aiY+s5%J%X_{h z;Ixm?v0S6Bx6s=mensA4nA;Q#_j#r?{x$%Q*{E^$nr96nu3+{w{w#u9 z1YU?y$a{0F7c@&X9a{eqi-XzQU3b|45XsF)<8>WFx(cb+Y`>Qcc?sL>8YH%EY;~Q~YZ8Ednb^zi4j z?z%}tn7mz-#E`+4u8=4v{OYv$4S79ba$o#1kQwr=?fLxTDLUr`A!r_(#Ls=}UO*)g z_YXvvS+`!{%@Yno4AmLopuVr9@Lszkma{?q$zSKvmKgh_;uoHXi{YL<)A^a!wjIF) z?4BxmsfA9$T@=5%75P<_{tr#taeVlNFXTsm`j2A1>HY$v=fXmoSJ;B=0o0cJ{qCE4 ze$)Tc|047_tfB{5VQ`klHNoy^=8gS>oKS%k=e(sYb^%~k;gd#VY=>Q|89Zk6%8j#0 zo-b%CfT=13b6oOz1~j)DII`|(uux@W=its(PmNWB;Y>uReZRX zQi^122W>o-O+N$E{ zr=A8EaX}?d12_`Ik#+SG&H{i+W0lfYUKkb_pf+Q*uCz)*dM|yBFa!u=B}eD2vEK4u zxJ8=s1lGe|+UBc;wbfg6ZDCyBsbitZVPYf~$Arvi_I+$W_lM-45#~u9S%fS8XFp|% z0T3TWyZTByERg1jEm-)@6+b5Nvlm9e;lXGj&l94qaYfsgSdHINbf&o6HOM zS)D#Nm_t|h59~0SWC3jU^Y!icxRcsp_7Y?NbrA#}vM}fT8OFId10tt{b{OIt!@DM1 zu&+VSbO@(1G()H}i+UI2c@}@YBA_kFLluS?XT+MdeZ4JknCSD7n>ekab`X{ZL@foiN<$qo7Bo& zLS0BG=Zq~CphZC+LGJ8Mg5X+HD+H|2tsbj&Kyqtlr z3CD2Bb1xn7azRYJ6i#yh&ICH9sh8XLaw5g&6*+E`>Ui`uwxw%+BO%r#G}AD0mBa?6 z<1xxJxH(`Ql=~@s+^~6~aY`DfbDMzpQ$yAYsYrw9Fcxx0oZ##w5>0H;n3M*RXFGe4 zz#KNlb(S4&1+Lyo^QCn8UJ{i=MLSPJUvU%Se#&i0=*ojGhMH+mkw50k9XKw1uk}}K?)c`k&0Hcn35>{hW3Wz#=1PaE{f000mGNkleiU)!7?uaTOmtiMe3bpeflOp@Z&$8FMjO@bN|+-NeU8&%wvG0=x^RQ zy-*qs`~1eYu&D!q+KVK*MfqOiFpG+>vf$h+@s9$z-bKL+a_TOafv41>&IDu5#3&bW z^r99vR_azQK#kn0fGbs;8GA*$NLYb?BNzx(gyul~}X&70rm0pk~cL&nD~eYa1!S78i~ zzuXu5#dL!%4k`&nXW{bGqhE}5xik}wlA~ao z*=EPc@;m}$nUjbq_t;t$HZP$y9`AKO^aSn=vCVmpWrZy&x1gwrn%QS3-g=G z%(}`ztT-K@Hhe1r;`E9JbOTgh4Rj-0X~IEuoO{QdDS(CQXJ8H7$0R^cll(xZuCa~n z-kJ(D@nekFt4r@uX$9pnN@t{F_;!i{tQ2dX?P!5+fknF+*gU_cV77Kanj(i@n?hWz zR1swY%~7$X_TwYhch1kK@f|WuJ0h!X@iyT1T)p<<9&Pjj)BUtDZ-{1d+(@6epBWUP zN>y#0cqicuVHBRzrsV_SvTwCc2J4Nf< z3w<)go3t@L?;gCN9aAY{%4TNYK^o(t)XIrJ>pt%W;LLSd6u}R*`o7R}7(w{0ddayi z(4kAyS-78t>6S{c+x%N4*g)_xnZG?YdYO(k!S z*_B%(V4i~63F0)xbXCSfO4hn*Isi(&RCCi*H=wgi?A=_cifTqnb%!y;JJaP z3)xj6o$f}{az48aos-~=H47VL^V&&Y(sLs4xMP$K#jpG#@0#K(c!bEVtt zvTI|g;}fi^6i{5HjFaexf$xVNg#!VDlx^c<1+LEumCS-N26^8_7)5L$nCVMjnW65+ zH3m8~y>da+hq0as#NItu!;f3D0?<}iGl%wgrHs!Zb8WM+rna5tYhv{@C zY`Ayj4gVnjCQG}yZ*s?eL(UuaU0d$0@9|%y#qZQszu}9%_MI9k8H9oy_4)=c(^YPd(e8g59i<)y?i@N~<<`(DjaYL|ueyjTfKl3wr zeY=rgu}&DKqhOsB3J7#HZ05J=@z=lgCRLT*Z-3uncQTqV2$N`coMnWY~T-0?V8$1rb z@ln@U+#lQ;Qw|=SLfDQo+kN%^a)cF9dQUm}nPTA)$58}09%xr$m(CzmsjAjc!ox%= z{vSD)1y$Tfl3ei&^OX^Y?Tdfn)1H9!9*eegDwbiKMSx}*`R(Wf1J{}(+QH#Rwe!#l|Fc2n& zEQ0!r&meC4Gn=I8VQ^Pa66qHRGMl7_u{P2)-ssGLhoRrCu+h>0>l7D-TN);95j%Dl z!+$a1&(;_QREkMzdNi&nB&FraF(%fUp0o|~HclsC-LnDTPl;fCxP|yNM0& z_gLw3S4i5^h04pZJ-fx+D$NhW1O*f93hTBI6I3|qKpSi4ED)~qVpFSo?LOg4 zQz`r$(QQf_^4oY?nn(#=rnB!;^pPt#`8z`Z87!M<>>v#t$3UJ(b+|6*VRakii6{>W zpjoK>suFrI9u@>5pPe!)H&q;-S^azQjU!i18z(_$*%FL}IJZ{$pwR0umT?7xsTE>Y z$@4hC(H(o?^c^+KVk!UN?RVgch!S*OsbEaD6m8}e645cP=pPZsegVI5^7u?_+zG$uYh#-9;k`aZFbNW4 zVn3!olr9enJEWV+84Ysh=MRljLA*9qtVmE$&Nf{Xfe~68V`ox$`_|azvoif1A>pQB zoU?ZC4JOx>$I(AZ0~Kdh45s+__N4%3h~jK~KuiOzBw(Do!vt{+gS^gp_JLo_i7m3? zgE!`9j;5EkIJ#{YO5$e2aXg@Bf)Q^)Z0uQw{XnsVP!nI2M!>ug9E*$$VXxJp&jjiv zvS52Rqj8*lCm3);pg1oIzzO(p1V)4r9q6WoD@yqJ_k!L|Nt;I6?2~kkfu?AHJZu0R zgt>FE%y&aI6z9s+>mL{b$U^wm6+%>1k-iY@ZdA$!r`_Lwo z#g|OEw3o)|fhk?6r3B#hH)(7p?}=4c`b#Q6bJ*B^x(@G>Eqhd6J!%_F{0o#t)x(Pf zUR+9q6#9l2nw%NGQi+S&f<1S?JD$xI?|rSEJ>cLvFF;A!z@+mx6H-}mMw z-zGM--7v&j68~ZdIsF_=_54f{yj&A*HNg+Hct?SW^sQdyFy{`%FrL6mHR~ zUM}Cg4OkUVC{Ckn@P(G$DClc{#pg09vQ_f^+8a)$37rO?<0ydKFQ0)`PFhjd{?8-ACAG zy?pO{_tzM_SOI6lxrUc!J^`Q2!ExIx@_ah(Cr|})Yb#Y`P*bnt*hJ~B8p3_(pE&k+n2YzLLz}i$L*4gS?64!2*HpB3{HTEpf^3CFzH8r{ zH9K#M3dL05Iq58bCN>%_=f` z=qnCp=)jq$~wZBDsQ&+ zS&VZXxQBtcdlMHu?~)PkQEgrqd+{udJjC3GN2b7)xFdZh+613tZHr?NV$Po-7`)X6 z@CzZ1x2WR}?!rD|fBdQ#NJtpVlcoL4SSoTuq<^tb()Vc*ep_En5W`@D;y2Ixrz`#+ zEBo%B_-FD@{nvjs-}smQmHgPB_~rcJ|JHveKmIQwf8x*N$A9)0^JD+*U(7dt?ice% ze)gC1Y#F#ry>JH^}=5?4Lq@ z5?lW#;r`^${zAS%-cN}A?9Y??3;D@EK@Rp$g8w9Vi@cxv`TW$+{u%f`pP&4b@TmKf z)cZ!;`oEB$qUJySr?lbxsb9=b{^_63H~#eKpZL?i)Op`9j{F2Qe}c396np)|zxZeJ z&-^$4rF{Io-D|S#a^9W$xyS{6=j+3#-^%a*>7UL=pZ{EcxmY}d zLJY&`dHky!sK1Ne;r;rz!ZYBjT_+U#2SF$7xwQ`xZY5yJD_8uysm(=~6)PcjTd#6M zYgd08EWBI4xHm0xk>cBHg#o9))6$HryIPdq+_Bh|oEzNa1{G<$#`M->AOHXm07*na zRKBCS&!o%HgLe`7S^!IK!3~2tp~fA~U7UF3b>zscMXO3!psQB@`9Lp1Yms39DFnjW zQtVe2z^|I8hRKwOfb}n#ni#{-K`3Qw3(e_v&h&BzT;}rG0fCWp1~_j4&*4q@rknal z-^^eB<^NuO{onnS+}?jbRd3=KKJzP;aPF!~6m|$^9MoZIA=^?Zn`8|xskdL`bqUy( z2^{aBI1{%7rxQB_wWIR2yy(_Np>pd7zLD zAj`TYT0qj06;OLfFygqiArWtLux8Rrh#y#1XH)aeXC(|v}n(PQJr zP@V=MyiLBW?Qdnyav}cqG~fNJxXHz9z`c9tSd$?EYb!pPke-S({^Y-mrtgx{agP|> z37XkMNRB$}HL>x+FxD8oO+mmt#TEPAP%E+OgDffnVfQ=#D4Pi+Q`6{ka7{^695m5C z1GKM1g9;$2>)^PLS&c4$LZa7~k!WU*r2~PPZ6+Fupt90~R?y@0`{BioF+F$G1dPv2 za8tX;N~_Oso&e}URzn!AlPhlmc96t405jJ(&eo`N{HEZm%~ZE+OnbO5qQbpX8^71` zcG^?jllJuKCEBN&tXU6jyk4Olly?e~4-RWj@(s5%xzTI6pv$h%&I~9$e2v> zX6-b*)j^Ci*Jlg>LGu*tkcHNb16#G_^l*hYKB~w~y0z?4XiF%Vx~QI&YMrf@dgb>V zlfkRUF9VU^o0+8K8hVPrJX3P`lOQ_WtMGkr{b7|^K3<8+@O*fZAyjM_P{jA6yHB?@_Y%_k=J*++FRV~ zwz7zwb7HoyZeuRDO)<7rbq#iG`+2ce<6}I91}HMwy756UYYQsGbB&8}ArIpz)+Q%t z{a|z-&+fJt`!TOG$+M@%`hXPTb<#J5$|?kekonntnioc=p&t|OcC?gsF_@V@Sg|ao z^5_)DGzhTFdwYF{Nx?${~r$(!jCeuHVfnz#CkY(M^$ zt6f9ki`U|xe&7H2gZvZ!<^O8_@PFe^<*WbcKc0`i>$~&b?Y+FN*SR6DUVV^PH{|t4 zsrNp~?Y)orQltJ{()QA+J6FLmC4QSjqYDyHX#0A-9h{ zpI79+0)O=({)eB-D=_ifhs5B$`uGcM^js>4?p+${Ky~uqpACwNGk~a%r<4tiZz#hpr*>ZPCO^H*02If3s}roc-A)W70<5lUwxYV zwSW0v&ENa$e~Zt``+fhOHS}_;1WNqBxxt&09_$;X9ZGMVg3QLu2Fpf?fwCnlak1hq zc!cRuunDC%YUEmk!?Jdr4y?`B!CVsHRP`bn?+g!ncPxMx>MZocX64i}(Je^^#2=O!^_z z`vm)zWV*0cXK}{C@R(s3d;576d4y)xs9t;jwyyn`+%=f1eJnAZExV=m-i|fsveI{z zYXDsKF~lAX=@}W#%G7^r`-Xby^B+0NUVu$oX-^&^hOEe%_l)DqGO~-pT`dH4p~#&eX*}e-Z~u4 zbm88S4)NJ3dHLdXfSpgL`bwGgB!ju0k_NB4Z^vbe>5xxL8%=iK^GTJI9#C8NvN`s< z2prbFiKbi&@##kv4zpuN>li{0G|t$7XS(MGuj{)u-+{y3+DiU>dslSD=q5fXOX~K$ zEKc}D^Uo>}!!3qx_SLl@i?*+EWaGNWJlX={Z;SXP8i#OB-UWI&5%j~aZm7V{oX6ST zfgkj|P51Ck+Z=5r&!Z1oPpOiX7o;>Hj;9`Q3ps3U+|0=gF7`{XUF?2VfX_80u$%=m=d1Ob81_TQ>adBR}oT}xRa-?0CXqn7LzrO*1i~K zOn$>>xwyu;t=|0k;|O6wWZdEpn0cAQSXAFN_c^4txd`{f5Nz9J_@FwRcn6gW!KJpgPBba-NNL?)c0O(&R)&!Rr(%$(zwKEZJZ_Y#P z>}W*0X?uD0p*H%AQN-E!i{+3w1T$AFc?_T2!c|avom--C9OB5?aUZx)*%i4Scx$ozS&0%Ah=A@v6*u9 z0Wdd!bxneU`abRUc}hM%al%kND;{S!4Dsrs&v{Ut@)S~*96nzC3pHQ<-+S-9{J#In ze=T48FZ`GC0l%f!H-9Jo3;6PX&!0EEmUmWVy$i5@1DqL3_3uEnAT30^e+wKp2{&l|o z@vHpc=ikc@Az%OGJ$yv{$*X+rMC`8blATb<{doNuq~^Q@#=Yw;`>_uu|r{7VY|GK5g% zgt5wcy=Va6CySS((|Fm4=H`OD;xEqr=KuI#&;REy{6)U}e;5*MDXV#Y@E|e6nA#XJ z_)A?%Y5~w0=VR?W-zLD>7sgT`bDTiyzT`~Vf|n4^Vgt{eGa#(hbPycsIB^Z?mMaZ58vAM7)I4(1bycM7up_%4dFAha$Op=l8Q~ZVlexYgANhUt6r1) zjB(%=3{4M>o8DVMhdj+Aa_cy)AU}cZRnb~-I zs^Mx~0>s>|`P)>jl_?31O)H=aNkFprFAid=5#uL;Pb9GT5sVHk*rL5clfv5O> zl7KsCOpy=zJiWJgIfBj62uyOH{4hXRonsl+dT}Jfmvj_QjXIM=<~hco&y=g6EWXQj3Ylvjc3K z{V>78dso3tU=U+syxdyg$c{hq4{!)-uNzeJ)M)^2>Or%~{p}%@R2$^98{#;WD zJOX+zgl4Y}o@mEB`pTi?!7wj4G;n<5$`!nvIkuPCF>n!7yVvpr)N_9l*o5hJeF56a zQwrrptc+>Sk%6~|W9{u-cYsfXl}XXISug>fCtyUCgNu#5I=04X`@t)H?yGjR4|43* z_g-i59M;)v%??~fdv7o09#VWe43-NbhI%o<){d)i`#O#uE}lW1qk&%Da04=0q$##? zc;LI*Dk%s91^0rYHtd6o=2DWn%eH#l{GE1)U%vz!>z7pb?w2Y;}vzoAu z7Sbm1=bHjEzoFjDxB?$V7-LV)^@4)$O+Y(@cj(nAU4KpZZGJz;2blJuZaNn8DW0jA z9*2Zp7j9RovJqkIQ{cElEdokAEDNXe z(KbrGb_w;w_m`QrU7#7CUo^&X+qm?%;^M~(a(=n3@Gq11eCa>?FXW5=x&M4#@g;VB z`f0wMl{;Sm+|n-<{$6WJ*QFu~@eVy2A_ABs$IQWYHqHJyJHbzkSqcB5NE-VT zyS&ct{)2yzfB3ildhV}YQ|S&KUYUEi4C3C&>U=;ZIOv`86#wF0`~v)=Kl3xW-EO(_ zTP71uSw6lVC)l6kpTR$meC}YcU*!{Qh419~ z`2EU9d};m|?4#F}kBNT>|HJpfUnT^9A(anbt$f5kyYsyoTR#t7E0hV}!NG1wVI#MM zvU#7}_h04WywBO*r~3~%(EB{__jZ134)Oji`G8X?@1ynKlZU*|*+v7Ci*p>0iX;3~E4(Ur@tyk{b#&%ro}l=KrJq3= zVjfr9&$*fpOM1hr)-8@xLpx0v+#1~jgh}ZR6FE@YBj7#@3>u-8YhZeQ)P`=dqJMYk zyOO~!)Mk6-&cO@nWwTwe_pLl_SF)@1fEeh)$t*z)Q z*jr)k`5EA;=%$=rUPNBxJx9Eh3EqGU@w2h|q2`pDa}djm0kGD^X%f(bGEOrV@63aV zb7GhzxF>2)?pe!b&<`dK`%wymJOX30G6mPQ$4Yj7JPTZaw94~75XEEic2U*1tbw5>P$T_Z)Ik9(BX_Z^ zL1(=j8JBaN;0YPN>joFKbVu+kfwPotTd1EY*wwi9mWy^71T28+d2lhM!Ka0|&ux(Y z5jS0d50>-~%$%`O{fF!(bn+souSR?!bQK~q!JB)#j^Vka5E%-qcCiEIUbPSds6xDx zm%#?(wqxzpoK9fDW_Ie1zO)6Q@z!ePQNOd23()tTMxx8odz+u6>KFtuSpkz^x5TlX ztwbop_ONFTgxy9jk_VWz!D|ugJ}|snRL9KHP>X9{e^QcA-Bk5`n4`4Q#JzYXC=VP~ z`yiKz;UP$=s#I0N%r#CNO^kI%{G$Y-?+4O1TVgPPy9SyNo0$UsqzLJ~LpHAq7}kfa zQtXxUyPr|r)+`-HKQQvP-+W!=5RaCl7(+L#-9|5<90P2ASSMUXuF($&Uh9M6KN@+m zC?bW6v4*S(f?t4yhcxHmZVSHFR&=L_Z1z^gT}2^M*`TVp5p=hV?$CaGP#@F!O&aJj z&FLg?I4dk|&MvFpg={oE>gEQRw}4lR_xZv1e0RS1FZ>tt9zUb};`%N6<@;>-mfW8$ zZ6KnFUv}NL67rFi88(K^soI~N^Z-HRPagg0aDHGuQaEjcLtSiC1!mA4#L!lXF>$cS zfyPmS$~r5+gv_W$15j0gG-3^$sv<%I5#AN{Srns5EauZQnQsXnp)Zw{!n zR_B(v*vxPl;ey~*)|-1i|JASO%YW#{^XAh#A+UZ1<|&fMXFrC4w9)R=2)H`L@56d=&kDs8ZoU7(%CvMzt&^*jbe+l1!vP#t#Zdm&h4 z`#vb#mZ2;#7A9SAAL;(*87CEocMoCTxtLrvZBrZ%17_#q`L_dXax7Pb{mx0GE3lJ%=9iyli-V^9mhW@Tz9 z>F4X=3bdz&GU0|kvlvqdtQ(&($;8+^+={R+3(P#d#M`g*kf zRAv~g2UFL&0Bie>4)nkw^yK)hySU*wP-B)dznyDo5_B|0y_Lc<&Ch5i z3c45;Y_ss*E)J)N4yU5Y7F~x>hTax2b!JG?BE_7r94HQ{#F!zJzTS3{wC=@iBQ>8H zD|N61 za%FB_=%J9zcnS~r3_#%~4q{1=U8mY~TQ6765d+%lktgq%YD=`>Fs(KGS*_dGs{yp8 z!5p<3w?G(2Kg@-h{>?%I;VdzkJWVCnxEpEjsZ#rA>3TRvW9B5SZLEBD^t}PtUzyf+A;}ORSB~f z^@h?z;CgV?JmVd6*-k6>F2P><2ee-A=jM`>4*Ma)F?eF)^zL>GO_X$aZ4g`bGS*)$AC6+B{9qrmyIWTU-B08WtZTbKdOY=(lH|O|r6s7nVLpyJ5_q2N=WU_w0DY z<(cenVB(MY4v3%!*lL?$r!iScDt_czI}V`B)`#o4x-Yl~A|-}$26<^fQahP73^7zs z-Zk{KhX&z=_Gq1CqR!e}Vtnt-M?dlh^U>G7p5kBsKfMzpe&ZMN@Xa5ycUQ;es8Q^5 zCwD1C^}|7!FdpyV9bVwHNIDYsfVm= zHQyD;Gv;wHAv5doD&6I>R8{WZ{73ow|K?xFy9tt3U$Ms(O2QNjxxmJGT(@)zymv~FXyGfB}65=1B1^)&VHT5*5 z9Bhh!3QB67F5{OvpUX0jLLD-ZTJtjj9-tf)4sFY$zgi&t&5ZQW$l_oA|G$6vujOz4 zYybV+Zm*NquW|#gf|py01KyFv&i%ZT)CvU=C-rn~G2CtSFUJhdpuP@SM>h)ElbhAjkBcETzy2?gZ_%drGJ{7-pA&ga#AvFm3h%E?-q~>o_nM zj`fShy{0w+@R}X4Rve{*r>)}JG3BC|T2e@0VhMl;FVBMzv(aL$j=Az&u&r&UttBep zvp)t+c5F=7P$oSrv-!Tc0fbY);O-Mjbd1)NDK zNgRj?=Y(1tk%PF0hm|7ywm_j2(J?6YV1Qob0?Qc(0jAc-lt&0{;u1rg77 zI=*c}*K7`6hqeRvMSa50vtHDEj&Lk;8!1;7UjP*@iuGM{_U*X*&rpo>j(i3eFovGw zW1!!f#&>U;6Mb0YyG}iRyy$EZdy9J@;kI2iebnN|bLOfbJ;GWDGd(UN{Sr+^M|u(5 zl&$ihEZ@0AfIaeJ0IUI8^@5MKBvwp|V_&+e1x(H3#M;x#qh!eMJnaq%XdI0_$!T6@ zEFE&L$GE^1)INk3EJ29;@!TJBT)p0RGvaTk;JUV@Xh-9Eb2ouN=Rax8&(154Q$JFh zXTB1;YnuCnvCrA}x$W+A$Pk#=Obn)mvQ1RCtY%m29UOr5;de{NRqtOE)0;zWLN8aH z=~XguCt)UWop2g=-Ejj+W1?Z~$hg}X<;O#dB<4;^>vK1m(LHEN&uWV9dFK8hT^nt# z_gKwfaUT?OAlHR=rv9Zu%f`^{a)K9o+^Mnh{?~pmulU!>{vu0y-zAx?;rnGaJ@|J( z>WKS}Ljfg$^_^3quRAq5PHt;)58bJNPHfbKDU2I`9Jsf50jOy>`$G}0riEJGbr_cB zlpruksN#$kA=W=6zzoXq*;IdCR^GgNmEZh-{y*|t|L{~AY?1c&WY-9%Al zbqiJ6_pCQ>^5N$`m*4--{&TtUh0yP9_HHlAJ@An9SbU#dZBZ6&v^pxw-jqQI;}q|5 zVfOx{`j-R1w6?krLW$>W0Vdf0FEzqg2xnZqgRyL@TDxau#*OpbG^x{HMs5X1N$WVc z1O8r!9jH|Z*iw#7-1C#*gkTf}&M{MGDC(oAgOqcmE89>-e19~DxNnqa#rTQeh%jG zUcC}~^J(h!hxvzp`|sqh|M@?k`=>O>zx?~0iaf60HI%bZD4CUx^je@Ei%STB1j0&C zl}fg_H{rfSdaBj9=wdr_<)#M~vtw+^ks93x!6uhD)q18Yjk$t0hEbd`SLoKKWdzd=_ zzb64U-!z;9qBlsmakT=>Y$)6%#JJ_#Egp_3P2R?+6HWBT)5;9qmCiY^=Kuf@07*na zR5p0Nyp*&&?}xA~J;3zCbz?wP7{0-{U02-(xIJF}YzUeY?s8LOf^xM6^OTu!niy{a zcNH0(a02KJVKHm=DomzS)HTPSwL#3Lp2Y(g0C%^oV$nnCL+BvPga>5*&Bg0DdL@>? zCBno2J+p7OoyALCZO!sb)gJUeVZDeL7E>^D&U4Zm!||D;dV1FwonjpOF;~R(yW{49 zv<5vI*23+wgoEGb1-vME8r>H}=KS2k*x|Ow+pd*bj&I%O^k#!D!8RvxRsbJNllxHs ze1}Otp07V@*KRv;Qm&Fbu0dQyO*BV47&fEWlO+zG9^whOYu33i?b_1=b>Q?p)gCj~0~v(7tHKu{H1A(F?aKH7OM zjStjj2e)->!XQ>eQPouuSG0$#Cl8JC7u%+LS4{$J?E*(7L^G-u7Uq;At}Ro+rCfzu z(Y!>?3rC;^S+LV`l|1efkTm7W$zv?cjbo*GVThw%OwQ3oH-GLvJLM^Xcs-+s*py0) zUC%aMk`;8vbQE29rfK>IAs1w1q`@&m_7oB{BaG3r;&%V)G<%jz8mfIc{XG5rl4&_( z&%$|_gET*#nzx1(LWC-`J%zM^(whS5D-fLEXPzKc?qHC5D>WgIbRF#dyJ=2M3~CY3 zkhINpHBCT_S`f$S-{9HEe@!6PE|FzE`pl(aT#dLlDnldCgv`M0&j`WUnxKauij@E| z=X0GI{v}6?KgnrlP)nVJ3cDpd_fp$8KYnw0RMy?+LW2V+N3fw#;E{X&NP9fHQ z1^z9J`G5Lfyv2*Vp(+gkM_#(;jJ=Xn?SA;m4Pk`^ER4lHM1M`2+L&28&IVcc1;d;) zX=xG{H7+Pdl(}%(kH6@lD|%b058lsj{_3yh-}yJFdCM&bRdN$Ym_@8B zVOyu#VbKsnFY9;VbiQzURQoLH;$YlJq>K6UXB^f-h%W=^+B#@IL$!>v;E$!98JZOy z!9CRt7w0RETM4uKV^e7YK<%l+=$@Kboi{uJ&PuK;B)}^Ub0GwYv66HAmGI2sI5BJ? zpUEwPHxN65%f#tf9m9OW@R$M$rW4a_`Bik@z5#4iH;Vy&O6Flict0u*me71=6zT{j zb38M)gX&xZ?$ZunPr)rHW~03!4s-7Z+z$Gh0`=784piR4=8V939)s>a4Lq5-DsXEi zDxsB&a{x60&Kj;35=0GOJ~giAF`g9vLC({7c5BihLBL@>*JU|e=A-jwn16(5SI}>p z1ycWvK;wlU4Vn6=jfGLzXD?i)MF6p!?kdvt2RLOihS9mN1<;wjh^<^hvxS8XJy+8< z0W`I68gvl}6_Z)Q@bi#|n;8XCnk-DOT@RTWgqcK`7~q^nTdUtq4dh^$GwaZCi={BhURncnnY?4Hx3H!+ z*w&6>`(UGKhYP#fa(T9{j0Xti;k?VD z7@TZ%Dx}BopRqyav4G<;oBNrC@Mo~MfT28B5E(5BkA25v z?K{b})61L!hr`pX%s4tm2R!XE+Jn3x)1-XxO@%is!T7>SaY023Dsx_tks(-T(jJ z%dh>7f158Gub}w%_BU9CU3}q4Zn#wyfGcnMs@z^xe*Yi;=kwlcbEyp1HevU*w4N%7 z1(N>WpW2jH5Jm7Rp}nU`?FtZUjw#RTXAtV?M()LL>`NoyubzyETgh z1=D*YCGr=(a2(hw}D9|5FlwlYjc}|6_iF zO09X`%^;&RxFOzyMXkj~cWW#HYmPp9;`350F*xxVsPT975I{@S1Y@8-Av!GD;%{~o)nyk;%=)x=Ca6ux(BZ8{A! zR3#9+N1XU0UL@TJMd+DT%Jhq~j~YVsW)=b-62;<}COg2J07B42tmP(6#xcQMO$8b% zhFjQm(jI}aSj~-FY+K*Hk>b+?N_N5(?oulSXg{ck--5+lNeb;!T+EtHb*W(hMiVjv z8)R(OepcwD`o9zN&%d?s`dvUL+!>rU@6Eksj|x6QY_=~R10WrMCPei(aU-4sYV-%k z>^WY?G|vXw#?|ysBWba}#;BxCqTx8Orxy%gDio|-aq{T$;qRP)AL+RGmM)>ajjoT) z6eW%1YXeYwBGNoG1Xilbfr?{Gt@=D-iU{edzOXi)mJ<`&{H;K=6wK%O3~5_K!LFjG zX^xBrqWd2c_UApjZpV2ac-8a1dmqMtWxG3Q11+QN*a;d9v=cX=PLT1RAYUk-APJHn zj-+U^sF8ytXFw!*k`+xHMUk2kIdPC!fBOMB${gCTUsHt6dB!x9GjcP8k7G2td(!To zvl7~&`i@l!L_u|f+uq80ZT14kxpVvZf-{qiRoX!QADSiluCMvxV zhU5cl_vWQvI_D+4jr=^u@R*ee#7f*?AGSA@$y2Em!Z=yDxS_ZYU?|-p;5DT zw9TUdki$GQP|ibf5Bggg&JbOz0j%QYtc%$h_@*3gfBFzWq#Y8^uLFKg{g%#-X4ix; z_V%`OvNRg&W!Rd&&wQBzgx`D9?aLJ~-oQA095IEQ@{`bnT%U>@5T7-QF9nNo4|dGC z&RW!$Y8#kP+lz5605Z&-)+p45@o)UyFXi2LzXi8K$;eX7X>>Z)zyECB{o2=3Rp~$SOh6WhZXd4=zIXB57WLNkz5KC1^{4Xf|MI_* zT(7xSU|*4NY#Hbvy(j0#z9P=mEG^dqZ5C_6qDgFWo7uJFl^fkU3 z7|vXX+otFECchbegTF1Rjx5#{ldk)IxZ*wvAk!F8R2A+q@tNCOF*e}^`Gni>Tnhr* zMsb@{_`388yvG$Ql#du|ZeHu+g~j8CDftQ#UijbC;;^b8Fc&F_NC|VGQ|#sO$@I$vvk|Qt>0(q_Te0CGHF%HxGp=u6q z)eiAlCiGeWMsqK+bU`(vLRZjsr=H`XW)68vn=9~9Y?kzCq!Y}He zm<5Jx|9CO_84|rsIe16uLjyT?R5S56MXaG55j=Iev2V-F>M9giRc|NF5KP&O}?wW+A3cWP+=KI>CcxOjzm3X8d|*~#)Hz|M<8a%? z=`&fo0T(4)2buy;?uh9)(7EUSarYi{je z&RkDamjm+a!vLm`W*@((bicK~{7R4~so%MazhPE_{>EEh%-4Va%Xzo>cgvl4m1IIq zJHp;0t|hieSnQ^32-O^xTJ8Y=BMaT~nD6hrDm+Gqc!`z?Zid!xD;e?gw#&}7zr zPY6k>X7ysvH}{$w?3CEwtbp2cZ)TXda$YQe=d&0JyXE{ zWB3>E=Fk0`|5pC!AN`{?K8gET8DkwMjOO$weZ3HFg@q91OSQs0RvLkMfZeH24_t!au8={k;ZJAi#GJM zOcQC$pq36*B0}4+sV3oIu!Cc|S`5G+wn&{$Q!lv^V5}cJYy7_S@#weUnCyYXz zY9Uf_@tD0kASO+$)XI@Y2^`j=ZiPQ^QINuW?3^FGwNI4kwy%6wBHY4Qzwrnj;1Zn0vPmh*ZZn zS}t2a+jUu~QWIJTlWa1RYJbOaKfsvw->AIy2hruI<75Y>V!~eR-jBB8PSAJ(v<1x# zhhHt3vB)669G@B*?Yqz@lu&LYw_&)w%7o!&gFs<-WGsxA=0QX=Cr<;uN;amdi?@-} zJVJTR=zb5JvyMqo0?ctKV7u;nViTFRhu+BYYf0j{d&7gkYeOx(HRWGo2OpFf##Wt* z8-h2I0?$8Nn0&v<2xbF|U#osMGYsUC0boyVIM?yJV;rS%cs?WDJg{m)`Q3v&W( z>5Y(lB5m}-qwuZ?20024TE`~XQ^0jQ3(X`0(0mkk=(J2+;4ou%P|*?1IY?&Wt`lE) zgJJNq!1F!D#I1O*`MTHb#9kn5ExzSt!fIH8DQ3dPX0Ye=)~QG7!&kK0`vA}5$g-&7m1Az$5oc~4}k#P+lbE_dm`fU0h|MBwJZZ;68nyc=f>SG3R7#@&gGHPOZ1jqyClXYF6eq+GkW96dNFC{&Y$vN)K( zcpe{kbUV#(i}`KL@`TV%?)f*iF(v7^4}mY5{^c4{0an5q8rw47;m{rVOn{k(Z5?bT zc#&0TJm(gR_9=ZP*TVzhmu(71*#9qp)xQvtPJez5S}gB<{cHKBzxY>ky6ngKId2jH*ig)Ikve(Cl{J~d#FJJ$?x3Vsese*AuR&f{e zeG3mh8-UM-+$&Z5%YZ-fZGSX>?qB~m;zz=3U3R$86k;W-d-ubw_92IFZU2JCii^$7 zB8}=y>aq3|Z(-@Dfrj4Hwe2S2^d1I7pv8zi^=>%gsLs|_66L(kh7<5g|5psTjn%Al%yqGUYjDk~ z(#o`rT}h}3=wzRe8^&TYq=JuTk_v|$*7RVvwKD(J5jNb0SysVY$<>V-XTdj>2#jd9 zw9~s#L#I}l#K_TKED8t~vEi*noM+r260Z0lUAU-MkPDsFjK;$SHb%@@eRxCGT(FUq zV8pSwk#;!`v*9w(RvRobE+7+G_KDeuNkonoAmb5awXdZX+|s$*uC)#8Df-CH?o8Z+ zgf@Z#>|B|%y7@u%o7@q_og!=pmbO{~v zEb^*xP)>bP_9h0zbQgw~Bi4d{?A!kRVk0IUSlcEjILssTihdFsr@V}Usi5ws45fP+ zBhWJg;K)H&6+gUuag3G=4*;D&V!y9djvP@XaMMN@7)-xsiY*LXZGxdF(nv#E3(Hr4 z0G3E*EIPIJc<0)8ODwR%=#0Z}O*J*rF*um4hllykm}F11=`73vSlfPjF9Y=oVNd%; zm;gnmmEd$HX1^mzFcG@b2l-hA8POJ-GkB|dpcIoIi3w{1aa3VzfG#fyS0%K-)HyiD z08p%Z>KwA6n_8F(N)9Ti_(4RSyW#iPMeL;A#Wa^o?p95u@mW0aSobR=``?8%o9Bj2 z!^4J^{#waxRGEZ0vE_J=(D~&RUSlh$Kxqli6(JhF6j7BhvxlbAKjl`~vc1d@xbtxb zXKk2XxdXq(L3UXK;_7+3Zr|wfyO;Yyw@j^;No|vcsB1l3(n_zenU-2EVDehA^yf$L zj*%0AB1s_+O5|T3p67r2>?iV%KJ!a?_wfUKm`$ENuooY6eE0kXrtj`dUA)zc6LXFQ zh_G5p09~mnY|5wLV#iVBAn>o(B7zNky*8Dr-!=8uB9EpE0*b@{w2#FJU!rt1`OFzx~?p^ty?xliT=|MI*zZ&k$)NB*$1cEz#chy73hOCXC6gZ}6L z|Ifeh|H~i$Q{SHJyYCT&&Ae2__tEVnRs@U zf6>=xOR@o(SL(Cfq*6n70mvcDqrl^DLhS9~+4Fq4^hcXVI}S6gWMtgtn4qRx4J*u2ABD zq=F-=cbp4iN7l7+Il#W0FuEi3p7i7X?NOwtXD0}NxnHZhok zV04%2k!3@g)Ohl?;CBaVgh}~b#fOB50g}x@x{lvhw`~v+t|k@bh_y`$?qTA!Ib1#W zDX@i*CZw!N4qX_CcX7u6Jmxx#(Gty91|jX*mZ3Jd8%kpC+;Q-sp0Re%rSA;hXbkQ} z_DN`?ILAs=;rR}_?`oTc%88LMx(@oNAxrUVs5NZ$aSW?TciW?e#n#@-7%6EiuNfpU zCtzW${#rvnohR!C!)LayR@%8=cG|@Tp5oA%JANM;Do^D;1~vSg=-7da33%4FcNOEu zg&a8Lc62KVm~zjb5{FOGc@VP#Kb@;!0M!=MZIZ)gtDmt1ja&4oHQg2bvtZkU_e($t z&*uvur)`T!AttUVbRR!?aQr6xlmplaEdAXnk#nG&p#AL8{k1LQ5`syz_eybQx7#mU z91|CBaS=WV0t%qYa~sn}Pd2fh*Kp-+dEPPh+C-Lp;HAdx=+;#l6js?c|AJCz1r;Jm za|+FDJBcnbghc;|otFlAYjHnOOe8+VF`VA)OV=cPNOQNNt>|vO)wFOp#u2{}oL{)S z+so~JwrFO$cb2O5wx9HU!q0)nIK@%^plZ06Bxoi&3GtSp-uy7YSecdPW8F`;OR6uz z$KHK+PA@q|pMlfPt$`X=#9D*h&l5WhqJ1-H=4>3d?#;uX4SkhbSu|Z$VWxFJi(vo& z5CBO;K~$GYawo^vN<%IN(H9?kk}4c#9NP5je@WYW-nG^tc%E;e^?hW%LbypUA?-d1 z|Cs%)rJyOpIo8n<%O$>&-nEYXt6vfCr$7}H8}A7~bH#5I_U5)t^-zY`43+YQ;jEKX zyjs;&Qal3^R>-7@ihq&^@OmW1zrKF;qu-x@{OMoFwVvhr;Qu*5@RExq6@3{?CZn#wi)n!aqa`<1zM zgZgU(|H==+tJG(Y`Ir9Pe=oT_q^c4svJES}66c!dOhkHemPo@P+^hd0-B1JMv2VIo z=whW{wXj%wq;B|*qs&B2jlyy+mQ$#^6tdNFWCvdxmAK$Q%Z0mQw&sK#GJGLeRk^@3 zf1!(j`U=kE4yyZEfQts22Pb=6Ya1xdZ@hSsZ<1lI&((9@(dV&P2o9G@h>FxDePTWk zV@529NN0N}60f=LcSX$lRM@etp!vVR-@WaxD;*0Ad8^uj3dq`V z>umm_hu{|yM(@MYe#xFZYw2b4VtzIPFMA(N;COLnQYue|;3oMVWZTWrHjcB)VKKp( zX$&_y=%xxP4H9UO;4$&b7`pGL2q3yxSsn~OeGj16^Dbcb8PP$Qr@B8BeCxbUmI=s7 z!C3YJxl7>JvA>$w90gX#lJU_=fLJPGD`}ld*n(wdm%*$ufWbU0za*;g5c3H!S8xN0 z&0NTyeSGaBc*I(>Fb%iB=`-PA?s^gw!1tSyjiJ}k2=*>O#C!q2J8!L$fHnovo&eCr z6uxYd{yIyf-vpi$38OlI(FtjHU z=57#b?~EV7YIrX=%MAG^+x%Ef1TSO*I;acVyU|+ILX| zJE$R`U^5#&D}a0PDlu(1VWZwJ42{M#*vSIKr4vn62Q{}GK77rNd%O4%*fdlXzA$$7 z-oAW(!3=bJF{c82rZG!(w2p6BqK#-6PSqW`QThjBVgP7x=dp*j!JOI$hVR}}N)X_f zeHS?PPRKMRaRp%JpEaZrKgw(u#Ce=WRNcn1#Jtip{ zYxKI$6~FltVr3o$o-jBB?U5iM)EkKdsJUp}ktfcEs`IA)K)sf$e4hliCMwP5o_b@z z){vQ911SCA1i}zNok46MCWcdHr<^1=?#q1rASFN2J z>8T}|v<9`6PS7CWCkaho2Q)K&z<8A}($PHa3(R{e^sc)gtR!<)7Oqs%$7(~KXDq(@4T7!-g`GMxU0oq5QI;I>-i{f?MIY!oqU;OFc;Xg(?|Xd;q&#-^(BW7yeBCXY# zt?@cSxFwamOP#O3_kz9(cclk;B@?$l5Nz8zKtqA!xoC>q9RbsFFLi&Qf?bII($Gd% zv9Ndepd+rteW<}Br5EGL1H9#b7xVmizWUq0lfU(m4=0xg=l)A73c~hlyR2mm#L}b^ zx#)FidyuVMh?JW`^h2_QKHFXjlCs^zV)E755f#8;VV!!S!Tva^hq@)sN22#uYy>?u*39D-rD-iY9qy#O1KCCpyN+OGW&aAAmlQ4>W z`Ut$gE|1|VUTB|J(aYED+fzqN)Iw1u+m=x zx5c`vI;}Pe)e_qqWzSN_+vnXxV}lD|sXRXgnOz(7l_~82*U9q!K*?V!HNxDCI`tT` zAojes1>}mY+)=IuVi{WyvClZLsj798d(11; zN0{8VtJI_N;fqlT_&ftP2_2y8!%QI9e~!`3un`aFzS`Ipi7DiRFwkhN$!A--9qwX8*0G!rFN6s@5qPhOMRv*#P207a}do@$@zMvd^_&r&m^eWtk zXb+T^0e{hBBgWexqz1=g;xI7+-PxLN3UQogG`|7JOwA`^TzLX=Q(`Ay2LjKQb7r8M>$z_%mr|e=X(Z0io`(b^BRGhz>%j^k}~=798^wypyASdq8;bSQ|RH`YqmZ z8<~8$O>)r*LmTz-Z1~{Zf&+6{45P|R(e!4^$Z9jk@B*<(?S69~-LW_%C<_N!@Xq%E z=r;FDxDJHAFx|TO;%$Tqebs0=7S909(FSjrMa+IMyHWHa6Be^#2qWbpVP)INX@F&q z;jdIp#%#QUry{m{J)kPE?Tp2F*At+f%KY)%V*$fs@?x@{bvYxUa}v_7te(JGCHXjLZeCb=J9XST64k$ctzx@ z6S8~c`!sSDV{)~vt*vZ))yjEHaAx}z>JYOJsWEr8#ZqZM z08D_MiyUjUUcvJX$G{>Z96r~+JMqN5`;49qG2}1di=QS+`0Yn5#t{G0-^=0y*uz8K zeQ)Kfzw!(DJOAOopD!Tqe9wQBcRu)?dFzM2JMa9^cjqnaH$V8@dGm+9Ghg_@@64O{ zUqIgcq3_BU!N2&!-Cgp}d2d^GRC|H{w&*YU%ix5~{W+^JKU+XP+d zrMR#w7weC=%6s`U|MtI=H{SR_9(g!SJ}9pEf$4%%Remmw_CwOTT4(Hjee}qNBsMc#w(ScykCUlpu2DcO+v(tEnG}yE)Yk; zJ_RSauwE+hU%89-$1jY^%Eh!|p`d4mmVWQ>ufTpi@|s}<9Kq^)=EY;;t;{=n%{Q(u z@-6x(bGhG6XvRv{PVt8teBCU1#>(Q4du01XLsdmq_;y0HH-p(d(-FBuvI5qt8pq0j zCAJnGHK-|ly?0IT&xgOu;~V+Mzx!r>`-4B2>$@*fJc#8U_IstyO31Vdnh*SZc-7}f zk=J%da~tHa6+V1wbSW_q6l=)9Vs<|LHR#fS26Au1@hnw>i(Xb(EELC}V1V)hzi|TH z3)M) z^5GYez%$1RFro-61!p1JefMpMR$IO^o*~po^D6y}b7Z-%5%3g-{;?A-7{|$NtTCbT z;)U={j&l*y^eD~752GMg_kqLgzRXXBrEn1U4tpt5fiPG4 z9P2KV0B&aBXt=4Sy8TR^Sb71V#x@TqdmL%HLz&gPn!YAdBpycr2Sf zA*U03Ui3rM8cpTBR0J7plSVU3I;t}zg4yEn1Qxsh%CT+7BT*1fTNfHB2RMOy&#gqChy+Eji)f5g5%2+`D*QA&OTGXA z5CBO;K~%zz4nw7+H_RS`w8KXIgPnM5e0#hxW~1_Kngl#MDg!NkpTCCm^x)^|Dn9JP zT@d8@p>{#&XG-Fge{KKPH@}&G_~z&H_dffp`Rd1iA%FMde=}eC*w5$pKkc@(X`Gzt{S&<@bK!ujI==|5x&RKmRlN($D{NzVvhIpULn2&7Z;k*}U^}V1HBn zvw0ir?VtNAdF$u?YTo*J1pF=JZRE|y|4P0H=Zio0v-u+a7ykzS&;7Nwzwq;aEpL+Z zrr2Nq>HP11_sgk=XS_PApEoNvf!Qm1trT~X#qA+nAK;68;E(-@{EOf5Z{`I*o!?vj z7Y&bD^_VCLIX+`<)K8{)NbxVmb$LW9`j=cDupcH@`|@x}H75R;hsS5R^nV5M2>y`E zGjwCmI`@&-1DJ9-a53!1#|QEsBj@t)(EJPaFW~j?(Dmx!G4<>*M{d`7_AC$2p2xk_ zkJfqsyFBLk^EdL$oFtr#_iCZJjxe|JAqS|swZjiSZhD2P`s32gnv{mTeLJ2cUItw_UQ z7D7HXwW?ULne>QFwA=_&g-icLnLzziJnkU@WJWFaf@L8jF$>teNT#}^s_Ggca^<-~ z%DOH*kd-~=HjD{aMbU1dMvW27wuZ}I>|?BQ{2@|XkY8u1&Ok^A9;N^vtrw!;Jm7R2;6y*9Nyk4X&ZzD;fcSBZg`gm%5OSfz5<~ z;ktUUCV&cAZg`)-9ed9)a859tp7$Gc#W&O^dF(Z*tn|vH1omBtlaJ9i zi4Lqi6Ak4qZCMDP9djE?7CVA0gxO~U*{%pj9Iv<0Y=aPYK@ell#v!Ot>FRkh3^h!= z?IVh>DW)_>gT7U1Ag>J5l>5N&K`{8yiorY$*i4W;Au%~}o^IjBCs79R?f1EJH^h|_ zTD#Udkv3j(pIlxO?v~l|DbN^2)TjyK+}X>W`ARPJ5MHxZV{57U74m)7nU=t1bi~6V zTt~-!fvSwQo8E@_iICe|7EJE7pj0f}KPa%uA0Dk)oYRQbh>2wO{)4=BwdyUGQRH1kubzRmITS3$Rvv zq56Db0CpUWN7gpD!Q-6(#N!4bE**#q=_&nmM4mX=^j0rLsOei|fz0qZout({v+QtZ z95#9(C*iJ+aK|u!4>Kn>90uvRqwpxt)F_zZ)eM~B+aE{?R9Jf73E1QrRmGCvh z!hH}6V-oPS!Spd_!soMxdlTtWRmb@@L%!1AcbeSR>R+VHTAdd@{XF`?@A>mQyzxdJ z(T~qRkp58k42%zs56H9rz{m$p;?J?4JwAu~$cM#eG4|~FW1hY7yzR#~o^|XQ*y9Ht z!1WRHsQHYz^8EQ5dE*1mi9gTd8_&^j&=2hKsJuZxZ#*YPZGG||kVpElheu-e`3&sg z4RfDSL#}y`d3^pXk8faqfb%@~!TriL7Z+5c{Q+6HJ^h}5VAo>dx%(;Q`r?{j|M3sz zm;aOhAiwyZ{>S+Rl%ir~%=a>Hr^>^l1{)_L* z$G+#g^DE!;J^9%8es4bZeczvtf8Srq$A922)|Im-*<3Ic( z`NR+XXg={HKbBAa=#S=8KlbDK^pAchpZxJ3M?REKedxn2pZ@WWIFSA}sf1S^Z@3TriD9K4p5@(t^iT3Rp4T`2w|~fAmON7bMc47eDTgIzAy@hiW3?{o z;V?0nq1oxPEj)6-*)3H?&Gf)(Jqxu`amF(iIrfD%VRfLg65PUDNcCULtk8xFNGn)m z_X?T0a-B;El+Z%UiuI~v$M*!k9MazHLLIV8lUq5xe@3@w>i6Fx;L6*Q?u3ywbMCG0eBO;CCuy z{mwfu>s5jqhw=2~=~bHtHuch2EEtAbNyVAY)i$fU=Gq`IZ#m#J3#%bpFq!svj!6t8 zhiXpl#tu_APdR6Rko$$v+5o}~89qByW;8hFv6?eYQ7F?>o(@iM1CA1CQ%x#1Xq&|= z;kaj=G83Gsg;=e~7!APW{zx=0XzvCv{qj z-%CkM$@>j?C&5I-_aJ}^iG#wF?XORtgwUMh@L(>`E{5)TIBJBM{k^5E+l@Do#blH? z;$Hpigtjz;2g3}M%;3feh+z%nS}e$Hfk6VaT@s(Uoe<*s0A{8~Cjzv?qHh7r&btc< zwH)zw-e-9^@AQv*40kN}w3tX&JdI`BEsgJ`!z=r#(!R?pK z+wtvz?K1{W6%1Z@pefx%u|~|`A!*aM@X|)m%i_Q1TgSTg))Ybz6CHK54v0!9z%0M6*XGtK5-NI)ga4+1S?O5lz{g6^K{%W ziy%xHwJ=On$Q4^+ZOkb&Zx;LkdOf|)Z)lb?kX;pknLXNMSwxpu^%`8Zs!=({YQHJf zVeV>TMXyyAe_5>+cq|La<_XFk2sCgqW5*~tKI{A0gnBOaI!Z0bhh1H@(u)1OZ=a`M z|9*q$mLw}VhAeIJ`j=X51eY~ktLnmx?pUq|_y^9|(S%5;m~I}FaKZ?Z95K<=hN ze#=4k2bxA%XtZ-B7Qg0BZ5C-?=3E#75)C0muh|08%1`BZN^H zMXXBe64&x_sb$TOu<-p1lpYs071XKzHG(kL?0M*Zt@PC_;w>vhZxwWjt)%w?p>IAp z>8AYSbLcP&{LmM09E(l9_4RM$E5H5Q`SNcezx|u}z2EwceCfA7hx~fJ^qZf}JNWPX z#&6{9-$Z@`?6-bB@1WoQ_0OR{o40@cvw7=tznU+8_A~k7uYEdieFpniKb0^1+Nbh) z3se($frM<&x8Li`gecz6ZyiYl#l20=+A%hldXUElb^`n`Q*p*yU6E1@o_l6 zk~h^K$Nt18@_FK4_~gg(7V$5B8VvtU>b?1?Pv(oC{1p68wpjDcPw9U;?*ArzeSyAy zmwnv#o!|JiTppftP25l|pGqFqig$eBPA(uy6>;q9JFI?2(9rvyiIbIY@u~a|-t+w} zK5!EDg0JWmp5@B5c)p0A>DHo-adaV}1_U0*WR`}FPh?h~@9 zlpcf$jf-)_ZOeGyg@$!HSlzM^^zeu@IXfkcBSrn?{c|Tlv@aD^9mSC9BA@(3IIMU1XsjUad51e#QWaF3R;n>y<(Z9 zm`EJ-veXN-QhlD#!U9A}JE_7511Q@(AW%rX_EIIGhK7BlsGGoI$3u9M`jS&H-)G*1 zib6iS<@McfVyXc(oL1=GyPZ4oof$akabqSt>&9HT&mw`z#R{}4?rw43;}At;-dPNs zgTAbf4;tyUw33Ff7XUkqABSGr_l!__ztstuae#OY>tmnChwNUHXy9extVa$ZYsgpQ zGACHw1+IFaE;$Q$A;wy$scUd^b?u3E!pnyAY_|KgF-xi{{t2TH94GH)(AHk9`*ygq zI1b{r+m*Edbf}s3E3X?;2FGfyi6ZO*q~&o!jpI2Vdi9|ekrgr5bPe2)+(0h^2sK#^ zsmuwEDaUcjt3>FKOEzHIIIc!#dnGJe<;61bP;$0)RR$5b&iral3`)GbXMzy9t~R z(>IKZ=?EGklYG|6*H!>5L9(hv{tmV31>X5s03?zl>K@A+9b|d7)+}d^_Lj9Zs>}3( zBd%aN*S#&U>qgx%mm@h(hQ~i66!Kqq?9;RN%StLU-8RO_C9&@xz?=nvNg6B}WdZ;I z5CBO;K~y9r2D?wCb3?hO6XIb2%3m(HQ7hW_a>aqWv#bvgzCxoty)2>&-zi@`a%S%E zRugnRfTIt5yGI$_g2&9>rKx@=X)LyJw1Y#oxZ;_%wvTX8tz|Wiq2^A#%k28;0dpp4 zk{Zlm5gMS^1J&V1>`j6~MypGM;fP0dkrAV8Y+CqsG|a`1&hAWf-o6j%}BIpc*Faq*6Dse1YP{@4Hc zg`Wgs3)R70mE@$Xfu+KhQmHsfN88+nToC+-%jbE9v9S9!>6|OC%#~K)vigPP-U>~_ zPU_tk`K=%Pk^FZn&-=SsiROE3)fTW)92iXC$(_}#iur3t`Y6~J z35aKu6)(f!qL`PAO=bcooFEKCg)L+srU3U`Ua9~EjrZ{|n8dvcvYDY^W4)wlMh7pV zxsAfK(ayt$Eu`qFi~TO^L6_)M@-MThzqeU`u;w-k45wgc@7Cp6n2GN#hH(`B&ga1X zW&U`qMF^3D7mrWnEbahmP~poZC1I$I`F#&J)>mV+x-BG7_vRlKIHq3;)^{)5m_L!+ z2AjWJq9h&+6O;l_qi(bAm=i35Ez5N~S?Ad>8)Vx|^5)U#asDuB=Pz*FK7!D~nb^+5 zcX~%n6_#{}z69S5H`TY0SSMh}z3^nz3Or_}zs%svw2*OTm3ov&lc|wl5pka! z#%{RY+>I9b%%alvP}Bws1(@6?4wJy1-oTiJIzo#Y3*Xv@?#tYmO5Yr7w-n4G0ytGM zfIyy38`%hqZK2vBfr%Gdh@)Y?W>y2^^?n8wp}u&|YQrsbw+xD5Yi_(1&$5t)UAm`E z(CdWB9M|=vY?|AOhrT+NPCHkO5X${n0&5WSZQFe|G=Z1aS7Iif;AvR-rOY%YJ;%T~ zGSmuCxLz2AI!|I-*`u~b?RX=7ftCQjpB)S@TY7lNHcsj$G#HvZ{6nX2vb|pLdp>a* zd3jk>OG~;&FWtZb@U=vrWw3o4w#v@a&67di%OEv`x-{I@0^SL+bS;7IfL#it64o$^ zkP;JtO#^P8x>BlB=4ptT2&}1U4TgQ2f?~=Iy|-lC`_tt{y0Niq_i?MFRTHG!Z9G*{ zKo*BuonNfQ7D(r)A%HHG0=JL}7ZE^%-cOsA22tmWl^N2;I@YI1mo?9D8QTtaf1v42 z4f>-`y#<9#4Y2!8VM#pPd68=7w>w76%v$r)%+EX(C+`Exge7jLM;pxUsN! zEhs4Tyo2Kd?M)T{6S^xn`@3cr?KHSX>xfAxmzM>QDY{k6)4vIbjU9x80i65#aX{)m z&<9T#do`DJH4vZC+!Wl68NpNSN5O4#;Knuwm!A_l2(!;ihAkSyWKLy_-nENaL;+cd zGm8ik9s8z0Q}n|yreOAL+n(A>zq96rappFO&_cu!iZYL?058o&A3|tVtciX8!jsjx z{t~#F;KCU>Jlhi8J?$WoxcPQF7gBcFjvb(wful}(kjXDW-s!lDa_qq`@iCEoje+JI z3rj)WCIGX{Q5O;P?1@bs9wvvkwn2ZZQm<@1KeUIYxBordn=O_%Myp&j%o1}kh7n&&b@reKJkN!ly`q|Is!e5Xq?t`>glMHFJ zqO}^sVV4zOsq8vaouh?%2!(O5S7Ph1lUxy|he9Rn()QxqVW3%cmN@6Dl7oo1R6OT$ zU*4&%TLctT&uyz(){3uz_7QJ;CH)s`wdkZG31(~`r>S!epoQDQNx7dzZ{y;V9s9h( zOQrt`$RL)rG?j4AVN{hwtV8uFLTbWNNaTb#z4cvCsCcofj3PxaT~$LOqG`Z-_I3E^ zrcO+vt{#!tW~JKnyvD{!%6lf((OOt$^L>Ony=`BO!w&7G$4ci`5yKv?MtT%={R_-? zSbV0a+a#Wl8~5`(ZLqvFkCFw>UaZM+&pZ!Gc%;lY$m5x!bwfpNp0N^AaN0&&Q>6@h z_XnUqp4I@%gjzU>HMIKrG{V4H^nBzUoZ|_KE4ES9tCuq8I%5o_AS<&S%ljXZ^08pmVF>pVNHvaW1E$i#y!yxgz^s1y3v-?mD)&~e&K|%A*?+C zn8N`&>jY>V!-7uqBJyf&z+=K;9^Po)fi^f(>-%M`vx9YyYrg^r+Q9@aIXXcL8=fl} zt5R_eeb(F$!rU1Mv7^ZWVqP3_)X11{v2SxOaAG&~w9de3oS|E#!+M$XvTv%7UeV69 zdGW>J~sF7iZ}AZ^u{^PG|1y=u{Y?gzh6Kgn6A?TJ zw}6PAQMIxns^}qi`{mvyG;@v0UCu^Y37>b?NV*L8ks0jF!Vfv$s)e_Jkj(JIo}TY@ zo%K5Lyr+4a9z=^hu6(WU4nTZQRKr}D zFVCV@;}^1&qt+%G_kC#%w%7wTStQoAaFu{1y^KrRHrCO{0)w(LL(MORd~Rr8R$1Wa z;r^E-xqI*MNl320h!^KAv(3>!2Cwq7TmZ7??*h+SMLfpiD^19r@xrm`r z!W6?|j??Z$ucTOj*jcbL+pO*#LTk&~mu#g-F?N*X(?4#}o8@5;(5sSoZF~w7Yb@M; zz-=~+14rw@;jQSJkU$c9XoIE5UIf@C3*Y5}pUXHtQ>8r!l%oJ%8!R3Y9OS$@ZR<#^ zHYC7p+o*onWib13kJ11QLtlx$hc7%Y&Kmdy4$^yuQRIrveig!Qk76(80O?`g?GE9> z>UWQ*RLZ+cfb+_b4p;sMCb5qebu@)8)>DeD*S0z?qoE6;Z|BA$ezGg8PLF1DJIoSA-T=hlAlX zq(Jg&H96z!W-N~cL! z@O1+^(2BLZPHs9qpxyT(W;Y6#CpA!n(bsf7Ue`m{;!J2%ia%+|Z5Yrimn0@0_J&4D zB%n$!ZojQzxYI-qe{0UU_P*A{g&pG%Y0ORO{6_`12TvF@Tg@O5OYw3R(@x%2Z7 zH`M2b#|^MDj~D0!z?>GKg62)`>oviUpfa|WqL;l{+b7uGURF1~@O%ML%pr=cGhdI; z-E3CFoZxV_-$ggKp>3XzhJ zd-5{aK{AjTrk&f|j0v9KwPbCmEAfKv8r%qhiTh+4<$|ac z%)s$1Q*`#}Hi`SlP%vaA8dY?J#9$Z@YTHDzBms9lW7w#6G5Nt-e36!BEMv|YY;=|i z5$e{sco+-WlV}Fa|HZI^iORjbI=y-gJt1+3d(#U?sWb(};o`7wd%nHXc*L26D;+P* zl~$Tsr-R`{gcVI_(T-ysOB*^jImyOwP|REW-ZG%vW7{TktkdA!>t*uxfr243~y{6lA-o{IlN6$DIGf& z&W+hj&Tn}2E{zaziWF$+@E)tM7aHXYwETM31`6+Ph;`4@0hyg%E;O6WmA)k5%^>OWz$Ra0*9 zOslTx52nOc7a+C`YvLsqqL1Tw8J22(awX0Ru=-&nQvLAg2VAxPOX^onxl*t>KXy2u zb*>;Q^T)*HUU5`b_sOCgIiW&vqOge*jPp0|#Tt;c_k8hg{^bAn&*$6z#GgnJGunH( zDV(aJ76x_M345ieWe=$r1jdIJKS=){{OkYM-+K|y$cYpF2E}`e^)7I;Xo!ALYzK@% z74NJSwS8mkHI-DkgdButpiyvw-68C*zzYmhQuofRAVO*QTn?ZTso_qliYoZ5 zm>TK9p_rJ3tn`_&D*mwrZkK!@w&Xs+F`QThVe!To4V{b*m)c+BD{#_d#Xp*MO`y%{ z_@xrXW(%XpFXKp6g_-42Q)5+{57m@d&8jI9oN&dG3m$@BJ1B3e1f*Qz5Stt@B2m~c zjHTVO@SaW)rMRQ=-Pn6Aau+vawF|j*#gd5K$}$?w-_Bvz1z_>mAdp5%6g)HlGhTwA zIRw})(GSBo!o*=}9D?iARcGgTFL`-zrcirig{^qr%v&bL|oF69d(1uzq_5#J86$8Ze zC7I3d>XLb;tS4mO^A7c$YAH~<#&AW(qBEV|6{A2=ejiU`nPD#Y?VP}3n`0>3j$;6= zM*V6(nmdu>iHbXCaMwASHXs#g{arVJ0O2AsJa z?+nUdR10!^BZ-6H0@KX#q>i3V4g}`Jd%ZP%;u;9k%jh(zJ_)e)v6YOPAP-l zBYut>gD}s!jpjH)ULNuk8*DAXe6`|D;A6MTO&~7$y8fbT_6TTU?Ozg$c+Z+Pg99U$u%CrNsDt8dBbjUL*;2_qtjvK1G40uTn1LD-dhAdv>cP>!) zkk@fAsASP8|N4so#fmF#UsY}q*4EJ?q5VsGRN+x4FN!F2R_HfzS#09HQIz~^E*Oiw zi+}CLNxbtVl|1&ZLc<{t%w!Q{HpHjkiV%Pk$8g7}v&fh4ISK9j*hci_(R!$mWpQN@ zp;m2u)SD0Zi}#2pDM;;yhiCaS-|_#?19={o2-~eJKCDyJvcb!27RE~dGH*k8kmKo+ zYp%t={=fSkC^zDNFVER*fo{_89(M%Ux%)Q~N-P)h*onSao1>=1^nN@SLV+3kOxzX5 zl+dLPq)>{p6dPYjrW0`fLgLx;{Qckjt^Cg)`f!SubUl!G6!f8$wX9A7@4RgzbyXi6hURdEuj&7_YjBDUrXO(xD1Ma>i+i!zHIbkG#>9+&qhge*2Q zSB=Yr=X;0+ofUtsC7s({QkI~P*j&6Um^6phs(wC$<8zl?za))NwGF>7#hP42=c^AM zy@}~IpFPvPQIj0q?9p-f#a`|!Y`^LjQi>dH%f}8=x?C@ee!b>i`sxgg2I_RR*jiq~V(EW8<8i-WGds{=--$I2$?J#VClU5w0udQwY+MUBBzjypp|x$gPj2 zh_^vZ8x@O-DT&^hw8Tzc7y?^uyb+dhF$mjRs8q-xImi8-9UE0Y%^S01_X5U@akT2l zkhUvMJ}%MpM!S^$}*f{EARW zdbqce3FU4G`<9)M1#}LrJtDHK(EPPQ3bfe^7{8<(5O>nw)Y0KU-VKB_Q%)N$%c_|r zub$Zq_y!hXdG{?u0BK5sl^G3mhN+F+LpP$Kg;c2|>Y>_FJ;h@WuBSdIW@ zw|5ZGOwm{62)wMVC8j>)Nj5?8d#wHC)-+E%+uodoZt3OD(U%T%&cin*h|kfr5F92( z@3l>K18HY99xiwRIU61{Yin`kK1Pt<7qDVv!Bzu<1}}_3FcxAGF9+Wl`d!oYcf!Nz zU!>)=EMO&6;@yaKskYiU7Bn#qOj!w(lu*&vA_NA_SxwQ}m|xH2hkyx07I#tlZL{pz zSZ#;+VeYgpy!a*JNN^h$dU6_~VRNI0^sim>xz}@8q^EBrz$+`Q!+e#&t^IQ-QNB z&V|!4=v|YX%SG~?RCp}ycfS{&IUB4iT+(T$YwKmG6r z^WHb#&6VrBc6$3W+!iwa{U}XQg!eYi(i`UBfX( za2;m*EC7^G(_QdqBV*}44RQrtH^-oSmttXy&yW5a75(i1_ z4<(DhvN3uF?Y*fCz91?D;R1|rQWGyZ`bo%uD(pRm2VU^p8#rAQP9Z@ECF&`fV^mdu zGyKVJF1R1qSFKdRfiZJzSNByWw^IFv&=)yZ&StDAR`lk*ufVLNJtlmkd#cb=ig@8v> zhrDLHn2WAr2}55wI6$wPo822qSDJSkdgCl=>9riq=-k^UhZ|l5m2;Eri;>gk&;}mL zcJR4ER#2gn$W34i^?S!&eQz*_e;6?O9_T@c;K|dchN=&Z0h{&p)32?GtaQnRr_dS} z^E9xX1{LjN2W>G$JL%4f^JE6*7({5d?cVPwzk5F1Cb)oem1f~hz1hVTF#*mHuKoQK z6fV8(M8gf7i%G;=u^b6UW6c9(W(p@;!*0{kdEIEj4xDxu3g3=)00nfr6MQC6Y@s#& zF)xR4Y6~ke)nsXQ+|D@hQa5lc5NE$W!%<^~DihBP@8ygEnWkX&7aa$1`=<0_ z00OfuF@&kRWd~p0Ye!p|&@>GZ9YymS-1ETOVL5%s6ww9U^QqS$G|$nIwi^{nH#SRp9C7OA z#04+7RA@X5v0Z`#5dm|qomKG{YVRfmk9&aD-#{AkzMwC}2?d%fUW0e3EF-P^8)ixnaZEyn`rg^$u3S&#%qTmcf^Cw`wqc;`O>lgG&f5@xCHioP%V6zWCc7Mp={Ct)So5qC7j0^u#O9-4s7k41J_XIjf)@5HV zC4Sz67V8UJ%M_(+3$UjpP{}M4iUrAHtG=)>aD(u9nerGfzySOZ>F4nx$47S5=LrQU zxBrr3#Sh3zY>X0dRK-0!+vFxOh8XG?6j0!WVA%wl`AS;KeL!al5FnlXNTkShvbygp zdB>gji=h4j`_td?9eMV~^St2x%w6Oa=U)_GR;HA_DAPsdT9Dc6#IV<@{L^n;b0N3q zkwvKh01yC4L_t&!g4SNtxKiBnx3H&i%UVy2275QQMqhKK@70%b#a}JD1*uV+16XnP?vMu94;V#8gW!Q8A1k*gq8 z+@jcWVUSzI`V6?W(tEC?$XICal#=)f4`MVX;hU|mbOK34D8-oo3vr^mwl)+d7GN7J zOaSJJzo1*HTok^L?14zq26;*RuR3%wc&wlhhTGP1L;PwXnHLNofFj$8zPOW?Q z-uBs@Z&Wa4>c!07aODM;inOe+D=yAYndMNh?k zZau#7qUL=?{1QEFtPhQ z3xIRj9evMb0QDs1Y^s$2@ujxFrvxeH8-s{4w&b;q!MoO2_mO!NlNd*5LDL?}cD5SK zXfrXk-U@)JqhP)=Da54FGcxY&xplvnGu#G$Puu#*!WPUMgwttV5T_$L%AC3(LyG5K zTnN)>$Ihj5PH!7zt?E0tg=@zK@%jfDe+N;6x^{%ceF>a%KUREM`-<9x4BGQB)&8)u z9||pgG|wSOAjX<*6tD`9*%zB*RD=(2w29#3#C~eqtq7krOhy*u-Cjm$0Lcaquw@RKQi5A>-z^^A10c&00w zNN-Q-hOn4A$lMhM&@oNX7VUT&B1D+FdhaJtUJ3EFA0EXk_yH_`sgNXaYIb7wAsf%s z;G9#-AWy3|WC0HllW!XMV~~`HpVynG114KgXT$nMLL=i4nfn$O8YysR#ePcjbz*=7 zW=FfORs#kTS0#?dHJ-}A)5jSZFv|u`kV;J539q~Qdw1eX!j?{7fJ`nUTwn%E0>(_^ ztWK%@ZfHob*eS#A#|XynxH2YvLY8=qOpuh}@6|+Wb>{|m=CHRD0u7*n#_TnH4&r@t z<4}@VQ%7I<-qdk&kJ(g~rgc6Y=zx)xDU8Joa{eH{65?JwcO39d>krxZo~7?@+o+j> z5Gh4}E2M=TTL5NKyA3jmh|kHsm)~a#P)yaj0Zv8+wXL;?6|qA5!TN$tw7(7Uc`5G6 z=XkyvEAor%kQY^K2^Gmcdv%>4a2OI*b)`z; zhh*G6>C$K6z55~4CW{c*?Zco2Mwa^$FVZlbkgGMvNgD}juw^}J`=R^#-g|le$G>P^}fjm{eHGt`_IJUO96RN1B6+` z(?V(#z&$xk11`$Iy)ULEuGBj2wejT&SNw{G7yc&b`tXn|ANv2+4}5?A;H!T>d3cQX z$PV!g<;9r_-xAiYYsO8zhl0@E*-KFfzcxY^fp#VV$V8?E#GfGeXXu*4<{(c}1HF5#GzV5AV7v40})@5nAy+3*5O} zPU$A$3_!Ip;(IpC3(pld%G@EiO>)30s$Q;aLndbLNjTwaREP7FiIpeAki81KllG!k z!9`8IRh`o-HQl@IUSdke3AH1=ZO~1@qA%9h&Vx+Q9>$%ui)$*xdjqs}PpA(eQglu5 zrFrnw%R_M&X{JbSqw$-Y=A=ilJ`o+#RhA^YC*ZbJMU5$2x(N3mMKKYW2`epe7`tk` zEHIgat{Y!q<*A=Nyc@-fMEmUMUlJoQ9_r%V-zq{x6tT z79IP>oEqU9yV3SaYYPB#oW}8dD^P+B^`du3^?vbX^a0DQdo^NV3t^1iL?Uw)9U-?Y)nte8g`qO$%R!-YKyv7lKSI)?;$l?x7Iy z8(}~H?E^Kj`v$WNYA{yq=GY(pZJrUzX-}lNW1j0^v)+S8)}bksIae5% z;XT?12~2{`p5*`%xo1Zuqtqxe99Lc6K=AbQ{}O$?&{!&>u64 zLij3SW$N&}{qpkzx~}~w!23RAo4n2)jf+sBC%=BS_FI{!=-2|<()Yh@P`6TbJ=^OK zdc7fg$ur6?!mAmy!C|VXinwoFfmCd5FGYoP2}o_L1-{&xWcRJ`4%9HsJ(QK9BNav;1nTK6w06m(Dq+Y6)$RC zU*y~W{J)ZK`@jA3+~3LzYEd~?YLJBIN^N|%3p$i4bQRT(=LyaC>}&k%fAPX!uPbyD zDTI33s?WL|7VANa&%|e^uY_e0PpFS9_EJKzOL#)SOx%k9gNZL*B<{y`$8&KcTMTXF zy~oOX?|v)4^J71jfBc2FQ_r5K2OC_eOOX_RaAQ(cq3s;RhKcC`l2*KCs}X&?NG}f1 z?@_-AM63%&LeJ$|E(nfyhea*dr1(QtXZya^f|O%mcRl>V?j~1f$knxwXN5tHN(X0& zqhr)K@BX@gSN#8C;WKmZa1hb1XOuEx))up+6+zz)MAHCLR}vJ|>N?z*y)J+!(>%dW zCW6f@9$b}}B7nXijp4)WiMfPvFr#3ismp4wWsgU|pgy*t~#Xbv$ zf^uSdB}2slTWqRT$3w<1GUF)vMl|EOAj)sM!IciXC}L`bQ&edn%K)`hjU}!8Izjvz zuM}X;frov!QloP~a~NQW97St%7#%`8t2tWlFU_yrqcm)lqN$wG)oepsZvJ64#mjDE z(pfu8t zvMrYb)!ri1z2n=T{$ZNjJ`0oUVXm_cXnfP$SG4rTZj*&M=fq%=oA$L$^z8`4ZBa9i zUi7f#_LG2gv@@85SEYJ~8!q?o>M-COzwq3!9W=pxi|*RqxC-Cz6ZT^-p-vdU99*;& z$gWC26xC;U(T31>sLd{31rW?*Pdq9~Z*d!cp_3n-WUuK_dfiZ&)>vGQ*{1Vr_^5M+qym}!DkMew}Q?U{| zWD9CfY=K0sn(Azw-+pM;iBR~u z(wK*%p!eF%uMl4&#-M_9D2}6e;aET&7leHlwRVGXZy(6&#^LvrhjCz#7I|z4$n1P{ zR+rHVx4$qH;8-)}fyEwDaVC=^Z=_-vYC6X1ae50Dw_OCuGCXo22i~H9mV%pd0b2wP zTU`@zXBdlPAXr`#YG#dEJTvLK7mb}2>?+Wn1&Yz@)WS?Rw*oT^IXHNQ06@_n@jf}$ zzQ60qaC^DI;288uwnRYvPz94&nWROHg^8b_(-e2d8hf?Xw$|xlFtf{tN-b9M-dmIN ztq+?301yC4L_t)bUQ;1fyRA?H!k%+M2GVtfSFkx5HM9&azNU>UjosyiK?-+@;YMdnwqgZEmYnd6kO_q^ zgE)$X*EDRNCxbq!h%!6TJz8Lip^nP6ll2Qc+s~6>L=p6<-`HAR8pG!)qy08m!22X> z1;{xjYoDFknBu+tVH>-cjqrVn8*a+69JIrKqF)Mn9aKrc+3l{y>Mft-zRoE@7N*w7 zc6QCdSU238Y#U0uVYl;pNA3pCOix~G43FP7OW!Ta+CL*Ovs3z5f!_i*2K2SJ+}v%^ z7nA6$80TE{csgyoge<{c5--;M!Vo&jVUNiJ90S7BY3eOBPq)uZZkI#{p+djLm{S0f z*f_bBsLm1wJK4$8jpn{AoO8fuo^B53&=aYRmo7!=BSN;`SRC8hN+ghMN68)wOv=Jn zqjqC@R5Z|_i(ho;#*Ab46bGD{@J**-mSz2weaylGWK#LI636MOskF1RhC4`&da@q; zL%Z9_!?3$fX#03%b@pP6YgDl#Rn`?7%{sGM&6+29w~;iz{Uoh>$@`8S?nm=<15#cAXmhZg28Ve#U4+iOr+%4;L1)s6 zw~@J1zW#jQyxEamKqA8AhyKQr&aot$r$;+&^vZo;1at#4G39xDb#Iz$+BS}~ zO%XZwzicHITl`Bu&-}u_e(^!NzoMyaPC>qq#GFv0f@dx3P`Uq$lXtJl{Of-Sha(}E;KgfbNmA69+)xES>V>_CWu(w# zhT+$QH5PemrE3R$^j7eyFOJ@?mt5)FA}`?Na>-kN{cq$ezx=U0JUk=!n$*-NcEr>L z2cxLHU3-%x9AJT2&fYEOorlqR0LRzfErkeu772~9EZ$AZxB*h}k9CWDap*@yG?dkU zO^1QYGht;~vCzUh(LIR!%&iv+4TF{5eJEHaB)f+NF4qd7lg`yam|WWxGz>iy)BBGu z(mh`R+on&>cf{BP^P0K@y>^{;@X6^}*hLIo1)>b!6<|-|+q#fJWBrUagv}|~o7uJa zvLZw+ru6WjG?n%jVJDiIJ_p8SvY}j!W&(7w%!EM18HbyxI~haH{?HMgS@TRWL|y50 z*>Kv?BgoW6!D8Jx?x=vwyt|(#ct@*SZHhbW8XaoeMQNm$#csC_s96Jv39RO2rA zAU$>6N^PC$^N&Yqj7gjnR%W03c=zy`@GQskH6L%8j15Bh1u}Ci)}Bii0r$|Bje9re zF2YweU?FCx6J4WYeEMkqr{QuhZ{CV=O##V^*t_CaYEMbK&)@IU@%zduuo@jLxuO)ij1YX#nw4?r(C1HUEUzj&d|zdQ3mA$-`oa$}1Rf(zdsSO4P5eqdK@ ztj@jWnu$}=7mWB)2gZvldr%+FkrQpVCmy*4QY#Y=HCNp8YRr9Fue7hNkh{=gq{rtl&;r%CB^ve-2>~(Qpi?T(PhOmPaKjRh#_&x&woJy$0E0I6@ zum9V5;{$JyAI2hQp_%Z5M@tEMBt3jL3{$0j?XU5#|JTLy;Ve~^OCH$jlJGC`CC+)& zmRi_sPpoGmh%6*4=b-Ccs3lAL*zejT5viOVRb_PL!j|&${CR%=)1S!~e)^}u9#apM zDu~QWia$wJrAP0HJ+tp(s#pB8Sa~E}ww4*aV8E&vO%*nMEgs?`jNAO|;k!W?k6^DW zW{^HGn6nD>+SbOG4tE*&2yqKnRhaZ@ywX^TKdU9VfH4>n`3uuZV5Uc5U64>uU||0z?5c35~;lYcP5_O!nArie)qIP(Q2+wh2l z!S!#Jo?;xWI)be$Tn~W+D~|R{YYRC{oCOE9*GQDNrF<@8_Z00c*2?_RPTPxTfZ>dT zuMF(c%#<0s0T)u48B`09XSOXaWbGJuPnmUxtw!$`5gE!oPBC1bDQmjIFw;XDgLi_p zPp7u$!f2SKZ5J@7&(kxSt(=Jldym8#$Nx!N$ZZ~mx%Q-AoEc{B2h@A_wB;wk*E(4L zCu4seto?S?cVgf5ocFy~*MN}(GT49^G)o9E$=!}|byAhe;8bO(?yBxeB`#Mg`NLI7 zY$V1|N$0O_(1aLFyW0jlw3ANS>7>&(uBJT#W=4|1Oa>c-5E7cul|aLN-}CHzK5Os& zd!BQyL}$Ny?X}i-eb?G+@89p7_dMslh@v9UT8(7ce%A}+HYclLRsO!B6Q6e=0l4HOQP#V<9-67QRyKvLJQ)M)v z7g%O&!Cg~inM-Z{a#7vm9oUl!C=k{ZT@BDXG3NFs#S^EYy{|p)H!{cQXfHrpV_r`# z(MwC0%iZC|3$gj5!b~6n(wtuKo!a2EuGez#@eC{M*FOjV9n-Y!v|X^$k~Iq5>1ZEL zc4OXv!N!v|eM!P_e}EG*uMX^l^aPaMsG%#@JNC5 zqb0mFkZl7nb)fVdyqoF}wp;f2v+5p0gd$ooi1~x~+U}BqJaHnkyq}r2i$08dWtD;;^`a zjWQILs!}DDD7bO7?u8$X)bugbd=o7`&H3S@Q^b%5rw3g34N@sS8Qr)C1$`#-7fEGV zkjm+5trEXU@xAj@H#yx*siNLPK1`jSNcb1k(}O37J>LA=}ft7b`U+2de{=drO zLw(G}&v=CCFIyg`h@HtfQ)7^GCU@|mFz^aFndjdj{*R5ZgWXlg!}fnG;fD9;CWEs) z&I7QHbM6~$K7`#os3^Ii^CwOz?rns@xnkau=u?Z!iQgLvfGgpsSS2%g>IKiw3%}|$ zL>_m6Q3RO&>oGrTQK>6;{w?P?H!`R}{)nf~iOf&3!S6r5r4Ar=9#iBN@#{(G40qsT z2UZw`9$+>6Iwio~1wN<YO4P_`y(Fr|naSCternaj(W>wSZG|WRcJ{r4`RO+)ekzUeaQZ;2aMk z6Td8Iaoj2wYD-4k7Yd-Wax$KDMkwMPRh>fyrAc7oBor#h#?7~f^ss;=G&2ZPA{FZt zRycDos$2lvM;maekrTDuGh)P1nymt9?!a3?iCm3JwP#B2qgVYMFg)1AL@{(V2?$$g z3U57kDzCZ#^@umsgC=W-l}Ai2mje#Be6r)R6;K$enhZQAUS;nP9<&q2K#%zD`Oalz zM4B7`01yC4L_t&-;=(E+&{FJCoQY18z9(Sr#CR()q>@xs$fnt}9Y9LP^I!rdffHHk z${#ZB1-p<7DHcTeKA_Uf73$5`-5EPz9psL`9SZdMh|jqKYoEsKHzTcjX*3}>4z#f1 z@q)n&aB?xQbBx{-0yF6)jDg@VF*wdPFdJY2^6bYkulppNRcxqN%)NNhoFEJeENkFp zakR&Jo3vxTz2|z6%e=&~@SjEHy%7tG;p{p%yiOUx;AIikFZ|X;27=41R4suU25t)7 zE{1*sV1ufoH39UUX&@Wfju~Rxzh_^=gmjhkrU2L57*K%cGzhR%Qv6BglEfMuqR~qH zdWtVjC9Nu9vW!Trs`v*W$0*+k7J#t?8rH-}!2WNa=1vxQv%qw@Pv0}t@=+Hu&i!eS z8u#Jl&&XUC!~x9N-c{^)xo1q)dQJOST%FJ*I4##zjj+RtJVTbN3*qEsTs6u*ac3u4Ma)Q~*2Usqa|l<#f$4ZJaeOiW+wktzz! znV{4D@QCR}3@d8j1M4DOv3%oh)_N^+w=8HA*)gO*O+{^D$%E>*oID&cA5 zGRTX;c%wXv_Fa?^p+cK1%uu8Z3czW%s!SB?ZY7~hIm%%^%*p%EsZTx zRR|*WOz91s^U`m5OJ4RZ--Y0RtNwT9WyD_g zt#8T8zvVmgQu1F;?#sle^Ac-X!x-30)k|LdP2a`7Z_Sr}Bl4HNBY*tg`QPTL&;Np) zpZNrT-&f9jkitmu!!%cr{(9A}^eA*?{y{|Y7nCE}hpUjK? z-2X1Ge%-g_)!+Dk$ya{k|2bdz4gaUS=Jns2uXx?J{w~e!m37k6S>OVMOu0oCK>v4<$$#V&ef#_f}x3X zmgbBAPpH>fc4&JS@l-nCHdWd+b4V--Q;9Xl0B*ag(4)C+;-&A#3>}2C`K{47On^1n z+w4jK5J5r3+qttZ^8js*Tj7=|<{1b109-kVRB+n<)p5uHl`IjFSzQdgXR(e~!h^2DLQjdt4nlmdYG( zrojp}U5!j?ulRAeTT)fX#m=ZCh`8F2Zte|nM~D}p6k*4BO}Ivcsyc?&@7}^<(lvfC6SyzWXv>bU2_CI*@AJ0B@1KM z)7RZ;T+GEK$dn4a8GooQ$raa@Fgh0ulX)1}mwELaEJxyOd$ptL+{*rjB$Pf;CKYut zh!#NARXzMYYa18smti)W^lctk7%NXD1teQvjEVNar|C*~F-;c1WnQ)sQ?AZ5&1%kk zlyoU*A{Ct-WGQm{*&5Tq58NWAnZ_&A)d>Ti^)hRQO9T!Dxk8;KU|N0`Z=LymhMVsk zjIE_AK+l>7&ZBon{kt2{E``8ZXF7J|hQYbgeC`9n2n+r&gpf=_8W$l941?J}f#J>Q zFuVEv%;rL9OlkiNM<1y3*bj3)6YzFfn6q}^he3>WI?Kjy8oF`6!M6>{)C|pD*p2ie z))ddLBMP9|ZE6Hy;cbC+Obo&87VpFWnSHWhZFoE0AWMPE!JN@{FxjuUGjO~QeW8Zo z&A5)jGgEEZ!L7x$6>@dM-bcL#@Qh=tl;cqC5FnR1Q*m=R8rLL!2td=CPZi`c2^7-6 z);Mjl6#eac1MaO_6H~X05gsch8)2|!0wX z|H(Y(Wv|V1UjEuV`BF6YQ|Kqr&w1(B<~c8g`{J+8Q!hf)U-p_j=gVH5=X~i`oXT>{F z+(q#hR$=#rc}Ie&tIq{R$h$JIH22>hF8x0WfBYz)^|Dv+f&bsV1MqbUmN9fz5)&Q zd}7ai)^f~^rWbnQW&N}=sweHN)HCD1iSh*<^RjS-+we>4pDSP zT$zt*#wce-d=?l?9w4DOsM!j13~-zgo+V_@q!e(0Ly5fvhaU|?OX**NM8bo7;yv%n zKmWe(%`?CEk(~UmO~B<0nlXxM1D7kM zGDfja)4)Rw^W!LkZKRKgYYat)ftg({mWV;oCKF@7*%vgEfYNbLxxGF8qvK^6Q{*aP zAshx7IUa<*`Gmz$GM9KO6cmIfC`YpeoM^;-7QG#{fIHl0(CGsSo#R!W4?i(qiZ#Mb z7;mr__aC4zs9U9a`Fo-u`_pfwi%1i zXCc8K$o~Hha55kA84k({Q}8tkuuZmPk_ieHH|u)Kw+`kcECXJF>)jFX_N&)sa2?r_ z6n{di+);175(-S2(T;<#<&3*_Sa6Hr7MP|E`vy}9QAijC*Z@@wA|eEKwJQy0dEV!k zL>_|%!rkLg4V$%X&6T5?74Cw&j(jGXj$AaHD`%P#eOKI0JG~@V#SIq9f(%T-5M*H>p?OX)3;!AhNK}x zGK;j8uElzPLhaYNSuRS0J7eBK*Aj0dIo&UG_`8v-+uVP*G-t)DolmiN>AjH+T(h*5 znWN=1@~fli4YV~0SEiK|DF$Z?cL=~Wj|SWqD#GPXkn93rs>T5VFuRX|VGtF*1N%ke z6%5W}k1+>MbHe~r^c7xgihMUJCN&fA2C0jXpREgv!K`_+dT51XkWGg zkehuI?W|>F=O0@Pc0=@ASxBQZ4r7vZ5nrqG^^38$w0Yvbl`3mmrtNJ|Uz)Dcv0i2o z!tB-4a7$xYm14a&flRljK%BJ!<*J|?M~NVS%zHZ!ZZOTAFB#Zf)&Vq04?}KmN(ZgQ z5klU>EV%0o_8(!{a5_TX8JLMbXTN*Xythu)T*;noFOCjkP-*lq;=Wk}*0NCC8*7gE z3UZ?C;W61Q^XtKyko*fsGmb%MG(}ItAMj&Q&Uf6!egUDT2X(aRK_ySEcu7QI;W06K z+SkO{1)Pb|p*xG)8t^ZO-nNO0vI-3Qb0guw0?x$9iU=aU?-txaqg^zYal|GhonzsU z&jk)7e1E}<=TxSR+bmDUrCO&0;Z8$vIhao074@~am%bIkrgc8&bn_se`)~h+eBS@^ zFXhP>{E0lgeUt}}p2>+1xpjU--NzZ{+lRW1@;oMSV`s5J51>acLr0#hO|B|dd@yS2KKT~I@t&J_`FN)xRfA@c%Kk+~N^BMl11aJXoB=DkEcs{DeGU6i(qn0tarxVYk1~LD0bb9&R zKlNww>c9AHdEQH35$`F_Jd@i;kMdYq_APh#m_2XBysKv(rO(ct^}TVQgI*ug_nGtD zdKUK3enjjRc?|avG36QV`5F9Yz#nm!kErZlea|MmTrh#ppHM1)t;7gS|fgr7zE% zxH5+T01yC4L_t*Nz3@vy3J`yvP@ANFC(FAVz)WFOPw%$aPe)wJhq<3eB>MbmBmVdJ z{%6yJ{YGvR{@zTDR0USn68u8K7)b@ZP)K3I1Pwq-VGMezFbK4*#ytrRoSRc_Kl0JM z{d>PBAA9$Eb9(rY=pb{}qoi$sF=^BfB7EwpP=OP9CGAjCdpV(SJhYXC03 zhlE>52jF#GL$G>^vB8j2AlTggq~Vu1-zGw>L6PQ>Gr!-$f7Yyo8Afx_@q>;S(lu&D z{OOQ;q^vA@cFI8eoJRVNpm#s=*gCv=nmO|)4rB0sU*L}8`?7EAvT}g)>O5i|Y z#b#nl8RiQr(h#B%z9VrgQU~-qJF!PYOSqo-E`%ZGfiMO8Ty3*#9MfJhAcOIx)-7ZZ zz-Mh=ciUc;bU6p!L25*4rC~U6g4tA5SWdl-MxDzeoXJF$s&+YLe|xrc4jvMiC1Vt z*<%o`p|=YS5Pf7r>M>^C0PlGi?b(~O>tucLCb$SJU4=7eyaIcj6#?b6c2=yVR(cWbdR6v%(y3AdRMz^U}B=Mxf7CDABXo3l(gIcq( z4OsxGZhjGVAvj&PVMrTq-vxpSxmcV~D%hUxN86cOOy==-e5Sv-=&NjFHRiTgFr;Uv z9bmy%f*#q!Z;FSF(GeG<@aNpt0&%ejVNlK4zOK%v?829(34R@L8>ExOF)*e(zY1_C zZGrgK>zfMI`)@%s$#JO1Oda|wt!?)NBX{pZqQI5p0>!a6-}dx-UCZU+%UQxxWSiwI zMGvO~?#As+o%cX0oaxWiCnc50LD|Nll~SM$C*u42)FfGTRV_yc8A z8pQI$T8JVY1IKecS9;I+m4^ek-xa(LmRxZE#q+cOhyPxl`#<=1^TZQ3Iq_k&9|+(5 z3-Lpd_rY%QYf!nNKl5gMfQQd&xBSNVoPN4|uxUO&=x*&JwW;C<=dM{J>7VG#IVa%e z_TDy2Sl_&^LCunnmQ#G%Jn^B>-qQRL?Hl%VkI-ZIfcb#fi4PMm__P13Jnw71F2x6O zHp?D^2Ua+?Gtfgr0K3pdJbfy=IAJ}L&v?~WZz*@AmxtwC*c()uRhJW7Sf0G2DE-k3hejUU?kuEIDY)V+b-&j{D5 z3MMtN$n89M=hK6H;8%Y+pZwkT<(B&z^dE5J_BZ&&K|d$%FvNIFl%WPQ+|6L0mwery z$rF4?9^@7Ne7?}emcpn$=P7$ktaCW~C-~(@|LZ^D!GZfZP%qTe_I#Mk5$~`4aLaIL zBca@xW#A0@JjYm4RjDM^Ulen9zlWURfkJXxjk+AVs&f0uPv-4^?XTqNfAz0ZPs|Vh zH{g_wXSN;&?2$8v<=Qg%Bc>YBVjU9=@2Wl72oTXdtppD>43azyd47pFge;bUkBiMm zQVz$J$?PmZY;e||1p7qhtOBaW*yG%V5{`t77z1|3;a>4vBP#}jJ>vjV#Rza5V(c02 zv~$tI?x*(FrDzAkaP^1b5qn_eF4rjrn!b~Y_Zo-TwI&v@35}F{huwxqxdb;3pMYWC zq1cEHfo2_iyq*B9lPc;Z!EFg+B36XQ1Y*jdus$-Q7&KU9R?RGkOrvK}>_X(BoSu2P zOHsjqa^n3(6PQ^T@_{ZB3}>wB+#;TA)SY<`)1}9zU^5f$$WBM*P&ZC(Uc{(!HD)Zp zBeRre9<-nYoyZxz<`~l-)1Qe6dLg+pz^##9R%8+D>Mk^CzX{@tlFr)!UO>;+jm0rK zeDT2s9)dLu_ibTeHjZXyB`3UK#p;~;q&bB>>mcsJgzTxCE}YpF#xaYWW_PK!X6!JR zL7Xl6@kp?wI-L(^1DKUL+*%8$-!-mS_aX+`yWf}3mjLly3oj`=CR=vB#&lY^MgV)1 zg2|k9DTBSHeM(SY1?oKGhP13>S!td_JvSvuk|J?SC*U*@O)|`RUu}S?QO7*E8!57| zyH?Eu;U076UtOdnHoUd{b`B-%dEz>acHPE=b^-QmY*8d_pU{C`j2*SeJ(SSV19nHz zS8X@MUjeNz3#4|o#%Yso1;d)W}he&R4%!jfABX|9K zUhWKEKoYvnodEYM4yIDt#9-giHTjC`#(RMe;cAX$ceIyu)+8>VNuKrMd(=hD96Q!z zAo$DlAubbq&So3XAgG!V91Yb0>IiN*0sz>Y6{9B}+Vy@;XjkkK^H#&K4I`LyE~m&y zOV(I{ zBe<~X&n|`Z6>Y=@P|o2dLyNj-RvlzpfO0^b6BX0DD~-BH+HytNP<1_t1h18LfiYX* z`*anczS72Zx(0@4fj8ZG;{HL_5Yl&PT+zQ2&}$KL51&bY4O>jUe{mV?ouOiP+!(Gf zkXCOqjfu<^SZ+HOlc6*CaRb{J$~ykw2D{aU?I|>MLZro14g3@Tvi#HwUz+FrkN>?q zcyP}7legjDStI9$JLwOp{AkX1I%*b@{xE7>?1oMFtb&UHA8NPZ`6`)sBVnA8fEgL_ z!@M6*{ebNEi59pWWwG3F0ZR`+X1gQQL0XS+lqJ|ntb0?TSN7zC#to;sdGH`F_@Df_ zoSuA6&YZiS@<_ZNKS1{fgf1@PEfQn@?rUw}J8|_SY(uox z`w#G*oPimxgN&@blY;QRfA&xF_%RjukY9e_M{L9YVqmN)-f4wF!U^MS1$dwR`Jb0B zdF3mU+sC+YLl^&fpII#ozoJ`QY2$k@4VR ztW#AyYNM4Cb{GJLKzYB=$*<^o4xpS;$qb;G9KhNgJCTnc0cc{8Pl2H(Z?Ku+F_MNn zTQ1{7d>DW$kvbOi~zCEIi*#fZHGwi1kFM!z5TsRDFWlkEwIW*gOb? zINUU}*$$^Tf2bG+d{=rx^|U4>+HTE$)ro@~WEdK4hc&aQxY5}j1}3v}!&@;8EWn-s z=Je&61&2J)_`9DXzlAQ<-C=VH!0QrMroOpuP%QG5U~fN;3W$m7iY@drKH+n|I=7L* z7sO!W;!;}zH}*MmgRfN9*al(muF-`p)leUyt-X-2&5W*kxZ7As*726?qKN|ZylGnt zZ#xo4KJB=K$YM(OKKcy$SDAfRO#rl~2~32$nzdHabh_2~9LV8(u2Uooa^;T+QBSWO zzo9J{l9MmhQq@j^Di>vA`P5?obM0LLb87Z2onAB)nQG3p%nl3b zE82?ZQeO!r@m7XPnY&Hg{N1ZIsO_s1p#tFcvuPVoX)S5nMFAtRAfRx z!gM{(D@6gnOmh(SohQ(q(Rpu|1TCVggUO!EfEf(~EeQmN*$x{1I>SU<5$GK}76I_X z*YH&VGoL<-zhtw9XCu;{dS+{R@`hPNQO7h+KZma|u^fHp-k=6^f^fA_S$y5{!Wzpg zj?G*S>gtK>W#wLUI&bD+YAC?Y!P)PWa8m;{ayK+UE8b05!x*DjnP|DnaOr~bm87BU zF>_{QViTEmulIx7zeB`nd}(Z~PQNT7)!#H5E7x8!SN$dT0h^}giuQ@}tgK1!PJA=Q zbn~gl+Q7OJwtH1`L79+M(?i_SV+JP1>)WLU?tsDb!n&FZLv66guXZ}AEf@RlS~?P} zt-VgI5^m_)Irg+(xaX^$N$4M-*fR|6!nRf3LJ%gK&JqPudl z@L_eFsYd~O=)K@Oiy!X9PSl8UQyCN+*rz1VeZ^PgvtRV$l>ezc0lA(hgCKK=!5#RA zaPh+~sncAwarjW3Sd|mO;x9%|QQ;38;wIoM0ZCY`RUz1WB_Tdi{o|z{{DHyJWAy4- z10!akt$=^?ARqtT_vVAY^h>nQu3icjKN<7>ougS6#PGgb^a;7!nS1=Q*Z#?T#%FyN z{6Sr6X71rev=#g3_@IRZ9umgB9BO}@U&#EyOF~4t6HSl&lDpgeNc{Hr%DQ; zhVc^X&3vNgoUvgiTnM2!q?^$;%b70(PM%on=9FLk&;L%|^G|*x;ln>)9=U2DMJ=6?j?E8{AyphuGA6Bb zJU%}q0(eE_000mGNklc z!_ox=5c*|}B|;7*V9*%dKFZ{5Z5kj=2BQp&f*(q zQ7FDEec42`fzsvdM(30@EMhJom)^(6Op}dejRwtbSzxOfX>%@J1d{+0gK2G4Ps?uE z1bk+!y|;h3E_^}*ntuI$OUx32r4R*w2z zk=(1RZm5@BhPB7aTIg7MHiF~pgktWHSy@>d+keThDG?b;7zYE~={YBO?w94Zxw@-4vb< z2ve)2SQXS|7Tm&BP}*Ybpf|s&daDqtW{T1w`2LzcPe%C1rup|{7fG5D z$4K!fW7;>*`6GGq#jnoE|J!=%p1DvIVQWLeXNQEZp+QlQ#D5x0!sq$srB@;qE62UG zMhXsf%*`6sV*`$~0J2FK3do>_b#W6G>6DK@D4zp&N#KPa=+FKq2-pLhZGZ;?K*9iX zTJsUfw;1E*VV=V;08V`98v&G1E=VWz!iPRJaf%M|q!g9y;Im)xsyv5Z3g}<%i+tvQ z1HG+5COqWy5xh<>5{VRVp>nQ(TFm*S86yKlh!_8LY}I|WLAYTYsL ziJ|y+@gc;H0BwawIF=-QmyY}SKWz8AZ~Lh{`q(GJ??}Khi=gcBWCa_c_&{_GbxH2{ z;ZslKC13km?#oje87_n`x=boy&rS{&(>OhXTlVQsBxnAm^vvZAB*<7V!r(*SpkwcP zHdv{U&nzlw7yPnM@gi_KlM&7fqhySnhkFc<6-SkL#aAffoWUR|0wCdDJhvfNC zO^}Rz)?vdzlY?3(@PP!(^Ckm^5>U>I2`vsayVEfq`BDoLV#3*l3Vt^&IShabb%^72 z$h-kr>Mgv{!p`&%pMnA6rSxRraXZwTRf+MSsI%uZ{)Eu3S5F*$7`n&yT=YLB4qqA={See8{C z9zp@;wY%&ii>*BEf>l=`f<4!AC~3JW+$k&vWMep&$^=OQO6N`YQ?{Jz(Fq$^Ny{~) z+%3|`VyI>Za}8TlL(0h|;l+)I0!0^b)LO;Uwm9PD=iVs%Q&OeD*G3$LuUNHa13Tvuj;69a_8D=^Rcng9D$`3iRxU%fB7)w;^tF#P2u)cZKi)XkQZJKDizpleECAcdbJUZpD4IepZo*`nu(a zbsjayBR*%` z%k2IKz7iNy&oyi8s>^LvaFtoxdvA}#>-V&&V6D5EGGV%|#6Yx=Wi7=9V3!H?0^w}h zxS$8wm~sFbV{Sd<_qhcTz9Y$1@F0y=y$Ehstr$=%oXN8bwfL|w?qK-PT+>_Q4EF5w z%yGSq$dHIJt^{*V$g_P6=Aw4Yea#7AA!=pvIhuRNaf#{yqh=-svyeHplrGoM6%TU| z7>%=ND44V6eB*?=2MuE_MW%)z!qn@$GgcwY3F|Crz;BUDdYb`F3TkzNPu@V>&|ck>Ko3@rR~a7ytff!04uVkLfR=|dW;Jp3b{od=)Izy9AQ zd<0rtdkyx~B(3~}=BQZ->-@iScVGSVC~#-GhXOkxY82DkpfVN{4s%j*&C@qN{Pfb~ ziNs*8hA;;!B*@-jRM{fzq6~tS=B7UY63*$5J`X2GICC}LPLkpWhpyRsC*ppum^!(+ zxyi%N{k)tgxlkU0z1vH+`Ca0f(Y zNR2vcpR+)y49LVt&hCjbI%d6sUEyPB`29t0PB(e{u|LQMereE1E~*{@0I(P!kB zCGA)b$$2nG#^Xo%V=sMaKIaR+DC2gJeOf(fC!WivABMX_2%E#92*Cn4p+ElkoR2*w zrz&37nSRfFUJ)vEJ~f}5CdV8xF=m^a1kX|?2D#6y;b}_Z}1%+ z9C|!_n0NiikLB0?AOE-1g9pj!)cO9`AVrS#rlLNx3X~7EVx*_z;2|q+fNe`kv=i>E zj7DD>EK)O3yvp@(3%@2i;Y5TwtnIFavx$sURm&LRmE`2;)Qrh3&%Q9>LGLFFAvSg{ zdZh|6wOq)iX!AJCm<@a5N6r`{#UH1lO^FnI-w5MLQ7BU|J5Gg@INEa-bzme0!A2ac zJa0LAkIl34jZ0EEt>)cge zapTrfk+yrW47I@IsFW4bw5!%RtWO=i#M5ImU#`+n8j5?ag^=$73Xq=Hp+}#yQHVUB zF|u>hcYblN`-YWH4MPXzyfR}|cFI_mahz6jk&%wpQ1kVLH_>#TMN0vj0*L~1Uu`J( zu3?C8H0DsKu?Zeb;Pl}2X%NR_H?0!@jw!n%2hzs6o3>eGq1=^sM++g%JI7*r6SLF3 z7h!-wP9d1|)Avx&Y0QXL!rEBkwzf!^1pGXE__gRw&K>W?SDi*}Wcx#8IGFlGq?dMT*@bsZ z9WJ(r)dummIW@J9pvZk+Y{|icv!H9`x3sWVE`toX!#AKo{7t|d*eKQ@BR!UC`_2OM zIDOz}4e(`MtFai|WjwQTiQj#V#wC!M2Ey#OF&fDIZS;Yyzmi%N1$K49xr~}7U{MoA z`CcdPirXx-Zc!_oxpb6;YhGl7*Lv9`w$%&HB`FuLgY>e3JD~38RtI++RyCQ{W?maW z4UaSpmFuzmF4=@jaAJI?5MMP^D@BwW6CvlWTEGHfH5qizem*?>X6%B3+R7%9>vP+X zJzc-IoiEp1HT>+&j$jyfoayhPM=tQEnO>#R;prXfLGX zSpyE&G@mCyYt|;(zXE>D%8Fuy!Pzd9;|(WpcN)2i;9U~gpL*NJEOsd<1cI3!0Q-)r za2mW`C?MPi60c4z&1->{j%1C=u*bHHYbcAM;;8-fEw70A)18mVx7f7CT-ssjzw`yJ z1$-ClifqITXR1_!wr)$uCuDzNRKY>-*2U^V5re8IQG(Whnp)OJ3&aa(qDc16B9{(Z0ksIKfD6<-_sbeBWYh2+kVY zs?w@d)eMj;)x23!T+ojY{iXm{?tcBABTFH`aSEB`V#H#Um_KUI8hjSa`7yukSVyCx z%s^`bt%uK^{I$KlbM$>tt-{au11=f-tvDc^=>0|nje?Y@M;JBuz=vK_%xf6zRA5S< z1;ZF>^8Fw!!2LqInu2FO+$FTmIjdu?Cl)_!b$#p^sB~K+Q=ikhVN{A51Rgxhhkp5A zid#&qKOmrt)P%iudG$6 zDvV4`P4D6s{)a!w6EemNFzBpOl)}P?&29x!U`+A?cSL{moz0#Sq4cQU^Nd{zdkplT zwwyYT48&hPjPv8shxqBL;;v zhQo!R7ovh+++94AenK4S0xZmqwNB^zuAcN4e~>%K>i35JITjvwXQLw-zPzMjg#ewS z%w=!F+|{{5lt~X`I7}@Qk~N1V-0=v1N#8gk|++=7wTrcfYz%qU(h;bG6S<4YDt z_q!mZfDQE$pWh%)x7bB(-1n&6p_ka(2#m#zx{~fyJJ+3E+gvy?5$S5(;gY$w=>oxh zHb;mp54YbPL3$bx2Yf4FHb?Dw+OakO6f^D#Syutg%e~kHHy-F*droC6KE+O#o`$%XZMb9TeKns*i?mpqW=?#KL|p9n57M{$Zr4 z+2dJ-I?#Xr^rr2uMeb2YLzyu{)B5!59gc5?a;KY1y}MNwey6})#`Z20a+r-b=u)XF zZWa{9x+X+?=JYjyBx(w(8`4-0LOdz{By-7S!0CrqLM~%c0QGFcNQ0v-79%Kq1@l=` z$`QMKYxG%F7bBw(ISOXaw(q`*O_vLy9|hVv;Q&)45vj;MNzIvRAj(?ySRT zZ!I#m2x+62!n*WfgW_Hwy34sJO=JOQU6Y=Sftj+?aWM((gA1&Tivon=eTZpZH6nD# zj4fA3A-$1h^XS`U)iIOr3HV)P0+h-8v^9MS^+ATsd;eXqE?tl6 zc#N-tAZ=N}l*kF_36baPLQqqu^p}_=vxad&Kf`H5i$C1M zj4%AKkb$_2_(6@<@L-IrQ7J7JAyXRgs+wsq@q=&KJfAS%`x8Gxzr0NN1$m0u^h(5i zTlg1xpKZX-ms}xbj@zb#~$70 zAY#f=O&QAWbX_=!sqzvYs93yPol z@c-d|^{?~u|M6eW`IFBi{30a%Upx%6<2?^@yn~&89@gq5{fr8~-wh04JH?G%aHPy$ z2eoLSM3)TmDCRFCutGM3EUgD`s`UP0&@*fJd>!w3z%GQ%0;$y*zXrK@ori7AzEUH6 zp;H16(-2Oo@ZqQQ5MtXjrK&tiihkK>65yDEvnCl#_Z+gZ4X8-JLv4CII?oG+w;OqZ(DFqa51 zR>Dy*14FQT5)@bBz%bpu)$}p=dT3e^gW~Dq3+4tjG2pusxOyL9&Y{8w4khslNp{5g zEi-7q7N>413o|S3wz}ya0+-4i6IFnK=Oi|bV>Q2>6&f*TG}Mcx5Kb90!M&6iT%uom zf0P4v?n=zdMMF zu_n(Qrhm1=jG(N5L7>#7Dag1Dh*#o#u_35zM zV6mnVOlP0#$`_jg$ei|GO`cbDXJ=tfsA?v8%r;#Jss8^KbLRz_!Ue1DN%t)#x!;=1 zmahDUkEU{ruGqW-nz`-XPniB(A#`3ZUA`@rx~c%HXJe(w0!QnPa52mU!O=q9q2dd- z+zDJekaST@s5(=%HNo6z(T%~GnM3Bah!Tb8T^kWuPybL8+bjHS_U+*8M709c^O}mi zznI-?r`m6I0D_J--^_HfWSaP=D&WGh!R6B7P z78mUr4fJAoitgS>d!=j6pK7SEu$jPWP;BMdl2Ce+%mFYCzp%!{uhznDl(Pm#u7?2y zthZUVKe)BYQlmNx6Be@&9kqhn1T|7uPT@<9*fbJse<)9n&DcS-2Q`LiALs6Sa7~H< zgtQvm8PBN0Ku%z)V`-qKqk%NPE>M9nTXDw6ANy#=JAXCjdKf<#5~6xFzi@gVYYcv% zK^Hl|a0b2kR>?~9!x##X8gtD-oP4q{_&dI$*C&BH@5MK1zz1N}LM7e{j-NZunXx!l zAJ=ACA7KBmF5L{z@Ss11o$}}pK9NuSt6$7G-E1})kxF0T4$^pc(|hyLwD$s`5Hlb9 zrJv6&ABe-S%KS^R@WP!ag&s)mjKL4u1H^NvF?&|8N%6gjHPDiPN@8#KEd4k*CD<7e z7ik&>9rA&P{sFv$vzWFTDJ0~niVwaY{hi;*@BPbPOKu)?uT>RhdZ|RsZgE&|P*Ckf zoo{dR#b5KZ1vSVzgR4jD zt~bjB0`Xi1c)Ykpt-*U}6rUNNi(zS*KmZY)b8bBZfuWl@+H|oYVxoS{mt1hqvH62I zP`B6`a>sclJgmfL0M@a!^m(xhoOEb7+BBx6V1md%nC?@613B-_VK}QiWvCOPBYRYt zL9B?e(R#Ju6e0_5SsA4u>nf>dJ{*YsGGQw6g|&iv_J z$PLd4a`V#u&YN0@#2F75v+v(hjbf-#{ym_XPSOHYEh%!BnHW;y*ntBOoU&^flE%4t ziD`fIJ@;bFcY=)GLtb1IK&BKju*4KhrdQHbY-eu=xp8#Iwr&E;PFExDi6Q{;;&hLI zOrrLUH7C4ja1GOj(Ma!)!`nhW5Mf*lW(Ng8m>^6Hn>9wrq|QAW=PR!9Uf7QmCut$1 zxn(j=7tRiV7&B!;SXY2Y>%R&No?Oyz7-?yt7c#QPuvZ*0#ZtJL+%QDbuGiTXq>1tr zF@|T(9sukyJ#1#XgCxM}N*K;!AwCj}G_8$Z403zK+x;{Pj99Y2f0&XzNL+gwzY~(u z0L$WFiC&r@y)Vvywt9D{EoMe*7lrh}oopU)si>azdhxX?eRb7gmczhiQnFHU9wl+p zgCKkLGdVB=1-&qcW95)A#88c)mn%D9>ILB*Rzl2E5~CA@oIt3yaF(xF)^3~na6$gH$sC7;ZHq_BNBmAsKPVPccbueT|bR9W5ql& ze)kUK1Gc&_9y(}ju^ta4|7;ICR(b58VP z7rA=nl6IDvJ@Csk?~=3Q9?zm}dBzc@-joiGE-BFI8q{dj@#^?o8|`JdvJ`seVQGK? z^=uQkbtBgcD6zQ}HX+y1yV*X$A?Si;UM%7`J|^Hfp|{Z&LA)Ioh;x$(l2q&=8lM@I zfsdN;JNCF>m{BBl-qp9hTC|QYr)|mjDA_ZA`qL&LuLTCZY4#5tgqqm^j+*$92ehZ5 z*+F&pwF67f_;h?kavN(Riy&%aRXEK4%VMU*uRXVSgB@O>so-~9&q9X-K+GI0CXPk0 zg4VO2DOm%QJGKmz83JmX#UK6qF+{Oj5ua@U$ zi0(mfxJVAsgp{@97)6Dq1s*aW4VqA&VJX9qF?|~GUy*NaP63Ml+WXO8_=!C8-ghOZ zo5XsvV84Qt6G5m{>7R?kr;9V3qVRw)sP)lb`h`6GuYWD)C!Uj&r3(TnY&YxRX3(t? zcbO7S1{z8GbHYlE{f!LN2n4LPN&xY$P~fmma{SmaH}wZ6P|Job*(I@OSuLDpSQ%{% zj*&Cx_?@5q@jUwECldfevwy6fBeP)82y^hEx!but=iyUN?#}*GuH;c8?!`r#7slXSu&>GEAaaQJ zFR--Xm`wq!k*dO^_g;w%;0kyWbR1x9vKKTFgdFy=E@9x}d7eYtp=A8fE?(ge0F&a? zdEsvDvA86v1PTZ!^=D4V52He1=7`*5uK^4f!kPeDTM=W1q`-`N*w~7TwMltq9QI+3 zd$1u841*{f`qLQk94#sS7#Wm9Fsq7nPL7tA7!$AP2UqQ0(a5R)SZtimA&d;%LT0UF zJr#T5)nIYb^;xY9j!B$sy>10}=(J4B^8qIkFua#xJ;LRCNxq!yVN9F%*LN);DSHe& z{4xEiQ#fTi4fTSnhK6-D0mRvlq$q=)K-(4;3qwrlJ`GHV2orliB(oNWxhr*K zOnel23+Dalw#o(fSt%PKS;7*$9hh3Y?-YY+eBRZVozQcK(IrxGZK!$p)8W>}jA7*% zU~QxMT+pU3T;We=vnj-k)!D1>h{6qp!FOF&=1lCBATy>6mn3I%$(wV4T&8=@o8f7j zNEj>Y=ZTmj`}XExKKzS6osa+QKhEQu=fr35@MdP7+2_m;p65X(dkuVZaMR|PDvZ7# z0%x%BW4DC{Ich%3G(E%ygtIj#0#x*(%p%6^-LpaOe(grvJq{s-45|=eYEvxd^J)F3 z;}TAJ$Pf0#KT-Q%I6QjqZ|8&m-@ln#dkDikWSr$rA2*@zb7%`^V0S(nkKu=iQyzcf znf%WG>u=-}fAH}FvIq}CsINi1OwC1Rxa!Fq<@%>3Rn zXRLvQQIxk%q_Ci@*@*+6E>y5pXO_Xf!4I2^oKi{7Z4c}UX5UBTtq%bH65||Vj~?e= z{3m}UPygDlrXD_FX5xP5q|cuOGybCfL?Q37PQ@-s#+ZVc6m}Ts*dsAaR%lirBnRbt zaHL8gTpUD&fYnTee@yC zDQ(pzpF-b_Z5GLkYo}C_nsO#E5ilm;dHaNLV{OdzD9_N=-hMiJZ6aA{){Pz-*mBdqM>zU}#H1N$ZJ;^a zHq#aKl;#8n79qRj)LUD(z|aX3Ni~7;+{IX&QIVpDwVV3%QxP-Sk!JB@j|>0Z|omttJ)^PRutYv5S zUh858nX9YCA4{(**{3y{?ITvfCg)z^qF*!}bbsjX%GyTQUQ6#LGciB-eTQuCY8fHCP{H3ri z^C)yl4m~gD7O!uf^yD-8aW|cSq96P zP0*Ed1QJchE5|&?!Rb+zs>*5uJ2~MqlT=Pfg>kaR%!n9Z@4=o#LT4FVE?2_c!ZS{Q zDVsVYr#h!jH~G*n{X(Akzz4BU^mInZ1|l#tPf6)x+^u_w6u^F#y~@9%Z#><#joE%tYD#7*_jpQgcI*) z*`u-oYJ?tGn?lp^Wg6Z+&5TG+ue?_MZj1!I7c`W;UlW16hSI6&48I<*DJdEsuaOpT zDz<6uss`}Y1%IBe8kuY0jQ)Bvg8;KUm{No7Ctmu~1cTITr7)}4aAd8Dl z>!=k`w2)?t4p`gW!(HnLmBI&9GfA5TFlwz#nuGS&nMwLe2S3HK zV?$$0`s{kyqicq97ZQ3wqb`%%?u5EP+iIw0-W68cPA9f^U3$@5RCO9T*m?FC ze5Gyl;9*dh+39;<{Y{-39>!cT7ExYfE{K0Q8g03}P19uuC|p##a}hwe%T;m07l$Cw zTrsHOx>eiP%Z0f1nE;Q1%bxb6UwG|qCMqcaHb>DH?OxvmZEQ-4@%J%NBdG~ zD!86Qc9#NUf`YVhUlRf^l86N5%p8s2Z#_}hiOe-Hl-@6U)HW_!0uQA&--x}Vccl)w za3{dbLYSzA$j4)P*Fz@uNW|f!_sAS#5riw=He9u8vN~m&!$<~>VkYLjNv(Uxbj_I7 zdP%0^zMfGnB2B^eDPHe!ZD)6K4R)SDr3$fT<<53V@h5YveSJ?SAeACDy;@9=v{{L| zl^_P&#DSTrLXrw~So{m3zl&>w9TR`rhcR7NTSi@``*`D<+P>k#(0P_r7cxn?A1=Nw zpN%zAy|Q36uFy)n;iGF%9fv_J*VjbT32e zkm_vQ9V>0bDQ14__;WFBjR+aOmh*D_AsN#228y5RO~*>()UWWzSQo-J2jtjBe83iq8Z4(%a=J;hx11^)JA(~tQ1h0Y z$JmdM$B!T7qd)zR^Um-3wtVzo{zAsXCv!gEri!l|-m^OOCFJr_aY4)zvH6M3x4|$V zcP0JtxaD4+%6tCl59e3j@_)^Te)U)K`1E9MpWt7Tk@DOR9_9vp!dD(V@g)8e(N=D_ zL*oz7CwMp9hRD13HO*a{JQeCMq_3Yz&@$CKAv7~co`q@A@u1-=bVbjfH%vojg0SR?M_bm8xVlfAYo%Kd%%w@nQmw0n&stmwwUt1|W z1?6+;I_>u&8XhyXN_OUw9>vNItn76Jw4t{TgXc35PL2zihz7!RKcz3FBY={Y7%TAU zRy1e5Fz|cj1z%tz#~C|lGt=M>%x?jilMMK*>E~#0)r$NuTGKz~XxoyKIt!GE%bX=} zldD+vxQCIzTtTcsoT*yiJq4!`^zdeIG*NeF9lMu-F31lfrNo#9 zdujGFS{xoL;q8P`oLw@e-GlNg3%tuT18MR?al0OQOkQ7B zUWNFK+>9fG_^>*`P#Z4fGG}Za22{ih1$QY?+H7v6X23p{2@qjjb#rm%{dQVHz@HC+ zJDfxW8L{0MKrCwpW<$9*IzATIx|a*LU6;Z0SiEaBbb6tW`3}{Q4bGI&$=hy#W%;V^ zqbn2vriUO<)Ka2f;7*@KbRe|PqPqo`QXacinj3}$bNJfRTq3fFa7Yus2DaVA9d9a? z=b5)>n=p1p+V6UmlC)}Q2IM;1yfEY`vq;Tv-8+~bcd9hfi&=LH`HE%ui zk;@=>aj=?+zMhkFCvxrd16mz#+!Sr)x|B8;k3{R9ki^^|H15Q8A;y$;i(^zw8=teXe6D$>(9M%PpmzCRc2IeZ>ftVorC zK_`w;nghG%0-z_AhuXR(Km%t#8Cn*dc)-qu4~za-Z5?5rP8@OcK7tTHztd7 zEqwIXz$(;AhC-e8S^Oz!@u%XQa8K@q*$^yrrSAODNS$gpDUC3ucH7;BA(%YgjX-k> zPC9=X2`n*L(>SsyB1`Ur)CDrQlqNEAH+SR?fP2S3$UM2j&Ki=ZStNNT6aag(I-Ajf zu|vWM7!#eOGRNTlaoTlJhyb%P+wUb_#~{Gp&ji-QkFwmm%Dmmzv^%cZMtWyH<0M$! z2`{YWdJhcT`K<&y43!vW&o0GlGG7Pw5LbnAO6qs(SQ11|$ zKTqR-v<3f1|9<369}fJd$@|EU{oQ=zM-(vpr?Ef!BY!U~?f<M{Du7Tw|`rH`Az?R-t}Mn?Y!@w{5N_3PyARu_%lDA5B$`R=l6c< zpXEb8`Og~rz|!yg$sf!6iM#NPKa{|x&l@_w-Q|MZXN{XdP3{=m;- z|IAP2gFpL|`2hMuKmAkr(9ivJKJ>Fcoe!fw{I;LVhu{9Q$j{|z?YC+FY(DgkpUVf| z@w55R+kYk>0QhONvxc+!#oq4{=PzGwaWx;f zPX%~>oR|EmKb_C`%+G9kjKT2(dI)okjSs4ax6G;dfqg(YagR?wbIzF`q^kqIgIWmr z=Up!hITlpNDNcm-gS_h>{p0-lfBAP( z{9;62f6%>^UHwiB_aB2ZDCba>Ahs(wle&cYmv=J4c9X+9v{-SBstoRH6kf}W;$`Mg zLqmaUk8zM7-A&Xd;&mc`11%?f9tErUX97(3K{<kZwfAR(<#&Y@rb4#l`8IqeLEMTd0mf~sYDa( zq^;~Rc9Rt%#9D_jC~xLS_uH2R>^`WVRf9!IDrbn=Tf!LN85qpk#`0+h)Vm(>P7Sj? z7?b+ib|IeCdxlxPK+2z}c5pz(^&L8w|ccSkuF2gx~f8yOjo9ih5|a z>eegmqjC&l%<1-?n!}xr2chQ&?C{F<_toy@2xHu-*jvp4gvP8lK^;YGibtp-p9wpi zr!9t4$O#FfkO8jF!ZIq|Taj)5=ma}FHEh=O=xz1dAlm3!Ce{u)YRak*b5K36c=&os zR*t)7Ikj}hMUIn%*1ZTR{)=u?t1VpI>%QckqHqkU9 zS5!R_S7jsGq)3`(D3t3l1p2wcQ;+K?cKf~H1h)5+Il8WkG9lLii}o~IIy%~%OWVER z8{L9?HD!2OqjWbTK1l1cL7{7+y=t4IRtSgB8vMm=m8Q(4gCSgqnk;4*T^{Xz7rTL8 z4$K!(WaS-ZVSzC*n9EqOWn+y>5xknX%oy`KMW^vR)V);)({YZ@&l3QW4MJkZak>#7 z@s|LP_?P3SfBT*Joge-$^6tO+-Ff#9e0zTT`@cQ!`u^|8Z~wp>^RB=Cro8J1-jH|w z;2ZKzu-{UC@H?=-J@5K~@5nom-$Z_kym$WK8{7Xa`0s4a8}ggq|Hk|#b&Rzp_M1QW zrpA8b`_+mZ^bfwd@!$Nxx8yglf8z(Ikcm37> zAn&H%cmJo~mG}JpzmpID#;@m=PY-85{BunImHf;d1>w6=E>C$`;1%9izL-wvAVB>- zv~32ls>&@ldVct19zDLz@BaKd^6UTk|2@C>SKgXm`rbF>7r*n{^Go0ThWz|@y)i%k z-EYb-eD9m`^DS@5JHF>Fc^lZ)->3`Ro^R~CX zIX{QI1N`mkx4xp=vCE#7Z${iBV$2l;VMzRLAbrCBH7IjMlOr=d3>aa5y*98NE zY44!WMqi%`726-IY{put{r5*I{%e2tU4)pU^<;N#Hv^x!BUP2sA0V773TGVaOmlw; zHF;O7zc`UjW=Rj2NdR z%xW2YQ0z|1Xob!aB4NzC8T3^tF0a61vigwD4vCF;Cu3Ss5BP;IOMjLIVb1yiDkN6} zCezNRxC+QqZ|Xc>ZMXH9wXVR?_+07=pU7T$IvtyA*U4>gla?mROz$*%u)}cHh8xE+ zb*MGMSbC{6&vgQGzc9#Q-Ls><7y^Xak2iYR+c4YbQUmfNCTjBH&_*wXHF&5MX9*MIq|Xn5foB zTfLCozd)>s8AkL>QwIJHiuYN>mWXMV%aXP`aRF_MDqs|`c6-<$i4DgaldRyR831xX zjlUYmz}x=7pR@DzdL^^f&fgjm?DADA(8~IJ2RvW!Kq|l%@-4D1fb8ko^s_DZXVib<}|?eh~n2 z`egkg;`<#!LgQwN0jQAv0>;qtSptTDfs62D)UM7Vc zy>?joCIyzvpQp(ub~LqP4d~E^6X`35tBKN0({dSROpm|)Wo$Bbn-Y+=CHgM#o!8zP z^YXeVNCS}2Obo7O<)Y&EvWep{`Bcz9qZauk+w+6(cjL?*@fncES$rT1#m+hTgEYSg z@IU!K-`oTs^?*A;>Qu=M=Rlv-h*;goyNOx}ep!bP-gy9yE^1cWm5_J3xyk9kA7I0K zh&=Hyg}!-sIr>~1UB#I)ayoH_kyI6utR;Ms4`GD+ z_3xibg7|?7mEs2;uB|EJ9pr;-=@1yyJ9U2#b7Ifj+@u~pi03{%IHkNd;<>@TA&byS zjPum;YhgF!o=)jrPY)|MhMbeNz)m+wPE7O(zpyXDnTunA$>~0G!=Dpp zsSG|C4?h5NC$LhZQibsDr4qM=$Og$RcW}Nv=Y?PO)%l!1{srU?D3#PX<|+g0%)$)U zA_T%-Q26*9O5{Tyzs=+GDaAdD^;QHnpNiyI!StzbX=3ccrx})Kj(8E5J%u>)%(?up z4#LZQIz5>W{>rc97ry^L&Uo}V-rb4h&Z}LJCanX1*Wo%i2R#s~=DVxH2Ec=NAWg#W z{&;`T^J@!Cjy~s$HZ@QLnA+6!zbK(q!xw?%egf7~a?8H#M>$~jp#;sPbE(tkC6eH* zm~k!|4?Z=|+&NX!|EDb++q%GMjt0*@N-FVOD77l$(}+|E4f*{h3`6W9jF&DM$0Tb- zj_tM9v!)R^Tn84B)xMhy$l~)A8<(2o4%mm#>*xg54Z;a{@C&gqs*~jk09bIU5q%8& ztQ;x<43I)Fox=qomzBAJz?r;Wi`}?u)}$lbN^mp1wYncjI4fyw9)Gio8{s(7eO0gBSL=RKbHtN*vy#-&?B+Ru0h^EF%e_%z;Vw2fwEv;`ak0eOANzp0@39zFXNv&58I90Y_A> zuRJZ8!XBcSQ0=+B>UF0qy+A{no2)I?f&)g^x4x`eEwhh~QR)Z6Dc@{Db#?R~%dOBs;adGeM`xxSuuU5I%% z^4fJX`}VT52^c?O@b{cMb%dH|_#-Tb$gEVA26Ck}6;KGQ)9H2KI<%DV|-`c*8Fac=UsG+1(&r;x>&~&Ed~&;O~Jf3ZEix{ zt_5(tnjPu#IvQ%?J-031z+N^0;mX|6-hxnT<2I&-AdKR<^*S~2(T5og&Z8g9=0IuP zHDSqY;UIky@&wqL8}3AHV5SpjY3un$8NfoSs4mvOKenJasTc-J-@hL?;zmIg_G z3mSkrD9=~eeC71x#=JTkkKB}f<4t(`Vb`tHm7RZTx%sO>F zV(6+$* zZekt#uuge@^i;jS9KHjw;h;`Spj%^*hpwu0O>}Zf3jB0RwXPIr3wNbH@f(3cvg1{` zK`IqKic{E+-MjaMgS4D5?M>BElT+=m(A&)uPvm8P=D+LjBB)l#K#HIfJ-QTS26zq$ zgO2m@$G3U<@tHo7Tk81()wzGD8ZhQOb2p=fTIe*J&bhBpk+!IxoH^6LkJ{J>N2&C{ zcE8;6tAo?SeDt^8)&KAQZa?<%oF4GYrGQh#7Dyt61ZLZ6d!jCZun}$644E*_DdLqP zjKDt~`va|MpPDE8KcA_ihrqX(ak4SFXM2G%sLf_gl14Cu5@O=>>ywBt4l4FQpH`s5 zM6$Sb)c6IbO`>gk2Cy3a#Mxp{x?-D9C^0ZARj059C+2(RHXymz?&Z{ViaY{sqnRLG znZnOaxh)mz5u1_l48t9%3WxvN04Mj4C zWUQsG^Mu%%ptFvUUbbg(FRsF1IU2=nPIsi!QeuT^o^~*pmqrQdZ&~$pv(L~DHOL>w z*MmN?VoPQ2zHgq|%)z0Uv0R$S!kl+YCj|ZFSI6OpeR6L!-1xLiZ+9-uHlpaPV`#EL zU=4&QGi$Id?TqDJ)D@+3jfi=U@UC@6FNAv|qWZI-ASn|Q!eLII4LvqKlOPkH`y!l? z%y){IvulR9jsj0ib8GYPE5&+uifoB-oy_4~AFj0yhxqn6D;{&q*H_Mnm2!+#sIP(8 zZg%rRNs{v^qBgcW0#{(2*i}JH`IQ%j04)%Ok-^TeK0VtUVioVXajd zFIj&v3R41V6EBypEAd*xk}IUCt*)vtsX02omqA2H#TiDs=si1UId@|1%*Py)+fNUw z^`q!JSk6_rIi^e_Z5p4l5=7a&1cl-`bM#7D zTC{T+?64dXnIVsP!L;t>2wAqZi+L2#uY?pq>2|K?7lW@d9-Dh;5T1DB6L6C;2ArEVmbVVXUd z!+qQT=pw8`nt_?4JL6h`#dlY7wZiD1MWrkFZ0X;7;Y*Y6c7AovyzZlekc1RWCoRK= z+Yg9+O*R1kpt+}U08PVWM9A+*)+a=AQvB)CGsF8FO1<(m`n{eX};hkFHUYBAN%<)>0QsZO{88w6Pt!*FV-0J_`y#M zK5T}FdyQ083n^?nz{T(?;3pPDYWHH^l2P!nM?40$M$o|@AxiG!jGLQ0^TGG$=f3Yd z^T`ijmP#0dvl1x(pTI5vI3(wb5a?r}x4Ea-!J+V?)-q$ekKs zO)E`v5Z!x-bnDXFh%K^Y4zV#!DWp09+Dkj#6TUoD9ALVdTPzh5rjcmJK~lj+>Gd;e z&X^4G5p0$?w$43l;r&31ShzT3T61m6XuJAm6X{u_)Gk}1k+p`QuLNv#ee+vzKl*?6|ga1ay$TgGnN7*0#rXaM3dw9yJardyW);lKy^`>rt^pjAF(yqL&^UYlnpx zYc|1_Ea3an)Lur!N7m2~=vX?oOq?(vFcZuUEJvlU5W1Ua5Rmt1?vLGb;ycCHWFmYI zY-2^RnO7NY9?LAd8S710ZpUP{--}-QPImdFm%79Nc7~7FdyB*Sv03dVK-6B+o(aou zr4N@mT@8pwe>_;BbYq!=_#NXyzGhu0v%vJRO;<4E_A|f=VEd?S4H~&>@l$(^=uUB! za4k*g3Rp=#$3#4OGD8q7ZOn>x`7Y}P=PYxin}3Zh$$+9E4QtrlX{86 zlIoTP?>v8?Y@B6==8Ahv9wRoJK05?Hw;prTY!%0FnQ^UIXFa@hLc4IH|ED6E7nSTdW$$4U;3(aAh*%=Ex82{q5t;N6AS+BC&L z6=a_q&e`G}=mmsn7@5xr!@@r6MX4&YRt5OXLIl+VqmX{-%77w@)>oG4H+c71P&#Mi zGT7JcdoxHrtvY!Mv_@y_kK7KJH@Dme2Fun?*v$(InMCGmBukAMqk_!knWG7i@6rWbM1?lqYtk$fPASJWW@t6+wjQoez3s z(sghF>4PF^A*HO3cAwF|2;gIf95Lzi(RW9YDgbn}$ogi1%#ll*)<3stPkQT!u~((1R@00-7F0th_Fe zO7Y8#kyFmU|M9&2`@TDW@a}iVfBBCe{weD5N$AYWLLNoSIMS0}%yg^Xjl?3$#?byE zh+BgOfFFKvDf%C&{?jRZx|@4}ohdNLrzS}l`0jU8F*n*siV%N4R$;W5lxXG{^L;2! zEKThvc&NCOtIeAdasHa{?mXKT$c&OBs8C61)Utcz5gQgLiO(m*RB%rLrN zwAVf$R2di`Ow6if;}TAX!F8vjRor<}VYraO#9`v^obGN1TC*5LMGZaj^|f(uxr=t@ z(lNVL42{jgfjuS-Fg67ep*{wVHi2Xk;+UA0vOVkn{}}tXpINu;ybpUut-ZU+=1CG6 z+km7d#g@8B%8FzpjvQNx1Sdgqm&^PEz6%mqKHTJ_ILf7fC& z)@IXp97#-TEqYwoy%X$~Fa=Dtg?wV}CpA4mY-3&RMX6H)mRhkxf|{UMO~3AjqM$)F zl3>N5YmWND#2<-u_Oc{yv#YK`?&7eT;vT1)1FY7>ATYJF*O9@J;9sn*0RUGzN?~C> zd~Jl8a>LM3)>)>ko&W$407*naRD@Ol_MECytM;|LV4HLWKGq+^ugtCYTFN%b$6$(~ z@I7l@9{ChwnfNPWlLnuO!^B`7=qP||%DB)=6Z0KI#a;lgEKsH|4ir<25Z0crHmQKK z-wRlsvzxEo1wefY=?#gBaHS2@Vi`m-O7p1eMY8yTPdez~oEM(=vUi@eT*F5PNt zt%}&vfkHUfXfBRFti%=E$bU#)$GIzr%oEVsIOPwv{o}OjM~pMs%I^P_aoNwvKIetc z+q-Yo!<~z>{l&r7S{%W^+Ci`Z0Zyu`XSWgAUzJ0Z#dnO?F_KQj7N#<0i;-%1!b2Ja~1>pDWa7avT!jsuQ?EEbX=f22a*wYKJB!L_bjN|3h7Cqf^tgMUvyVEM%^OOTY6!BSAEV~l-jdqAa5 zdat*kWU*i%_r=0gf!l*0??NNjYljpFObpwGhQlOxkQNdo$2{*Pa0jxl9qTNB8@;2T z6C{1lg~A^+Z{Zt)1qYa#L=ryr?3(v9zJMx3<(TWa!K^>*>z?fm%AA^`9mYM-I3;|4 z#tgcj0I3y*do6wr+k|@fVkd08QFrE^F*pFi=3`PU zw432i#Nqm11o*F)ZGrohy2SZH{R2Pp59GJ~?tdi1Ul=rp;I!`KHVJO5Iq}a8bMOaz zDj~1ipW#IAjL0yYPw0|)Yjf| z=gfD^JCAm;)s{uVDlcFmPC=fHI0f;=*3JQ3u-4rgCj=cv<2;(MN$qf;6-MKW9fnMN zT3}@^{8hbI%xek^^*z7OS>Z$=FdhZmiW(c;y>c^#%{Nkeh4k<^=mDDwW>7x9w|#y1 zh(=Olp)NdqB^Fb_NfO!~9DK-@gN4J?F)ojc&{3|@up1JTv;Cb>n|`Ye+AZ4Gx%s51 z5Gq;&;!qtA%sCVyfll;rwqji#P>qBf&rSCUb}t9*K4PbIW~i4vc-mCOr~LS)!7F!% z@i2H+&lI>ootoz1*ef)wM4Kg#95^k6HYF^~JcbwW26#Q;W|6u#TFq^3k34NU;fgW6p6>Ukrj>D*re$16TY>k!7z+&cgJbVZiM6{CO zPw07A_AG7cVlab$V(X zTfaF1N|TOZ;M%u%&Mw)*IM#zw!zW|Y>E3vK#wq+vRV^(@$!tk1dqy*@6N@Xo$)fX5`lyxcOnoa~pF$a>?4 z4)ZcjBFG0cuJ1xF&gDbqTHJVKFSyXKbn9q zZ9(H~!{Y*EVr20nZLK?e847uO@;eg}mw;=4&j46JB-P&w*p+SZ7uWi_@=Q~IEEi)( zwzt=`?y;?%J&L$I-h?_kmi@_=Ofh!l(5pP-_^KY@*hhtPM!Wgk*bL_lb>cDh(l{nH z1AmZ~h6`Grl-e)L##kkj6RK*4F$$q->`we@mX;=X@k4GLaF|-ivEW@{z{eaxDM}W9 z2-O~pFP<|ercw^ACb?=r1H6mqufawNqQ#PaXSk#N z(E^&lo4(Eg<@6zxkw=`6b7lVtky0gSSd2Px@biNo7Rimi-~}0Cl?k_(NN3&C{fxs4 zdVj!~XtRdzW!vsPm}KqyU9DyMklQd@jxz8@gugnX=FMm1-JQRD@IUvzPUtgmuLaKx z$}_R>LoxUAJa_#29sJr0og)jqR@l^u!TtgBoVKC6xDO)nHMLG1_bpE@LBGtlRech> zH>X_Le|&iN&p*r8{;_{NKlB@aWA1(d=OEo1PQTF2go&4s8ebuvk@DEdFMs=ezV-RC zHOfu0xFa@oFOJwexp#^#0m`(7#jrcsU`CYO0(&t}p=kD=c<}zxpZb&e`G4=<&h67L z#Rob()WsL-nSqz=C5-*G%lyh6$P!37@`V=nfs}(kgFkv`xtzlD_}ru!ANy}?^MyeqwmWN3T-rkZiwYZd?B)M zJF%JeJu_j(#eOKCWSI07+QAm92XSV{Sc!6`g<>vv8(VnbtWIlI-x96>R(hIZ7N*{S zF0`&^vaf)JQHn@;6z=#b98)MaA*?SE+IPtZz^^I1_hCcB%G6bxK;*d;$mElj3 zEYu*KLtUH;Qs&aMX?B+Z zL(Y?-1qfb%K}@0?o=G#C12S5Q`=c)&p}>Q!MTH%M9vo-GX31$9uc^kv5TKW+WorX> zYJ;olvs`(=Ck2aogqYeW=OK_-$*G!v$Q0%61t_ULByl42x1e+(@0 zc#l(k6bvm&2xA8q2+o<;ubCa&tEbBwRv5cavlkw6-IYnWDh0D|3}0{%-_*Gtg1CWw zwV)(2g&KM+fXqAs?iuSWj_cSi&CrH9UlC;d+Ed7@eQ!oG3<36_H`G* zUmSF0kNpdCM>jGL#VJp*TE$64A0O(mLRn|_u=*9z-ssRt$ze8tHb=R~Oi+3nzJP^T zECf_-`1Hhgr3}A>ufBYpDN>u~yLqnw!%kWBZ0@^6c*ObgYpv;-Al%Yn+<$$RW1jWQ zUgS?19G-n~39S?(cM-drK=+xl~$t7|}8AL+~51UdeGn1jvO3=z8v`9z$q*({{f|s=+*1^Y3pT!CY(t{@)qW*GS zNe({v+Z05YKw0!K&;|z+>rCQ4mwMw0po;nu1Bh;m-(lz@)Z+lG+Q3X{_E(|K(A>c2 zxnph!O(Mp#USQ^U-ns6DJnQ-{fQGra2kr-=nZ7Tk0T|vtKc8*QbSQC57ghlSm{g!v z*Jk5XdneM|c9mzu0ti0qeyqpd4jKAN2`oUYoX-`h-zDw=!WPG`vu$_t9)!MF*o0|p zQNgJlo3(@*V7SX}E*IQAmFNe6IXd14eCMj449{XhCksKFhl#a)*UPt50-GtW8Al0S z^fv7g1UjLf0r#47@a?~GHgqZ(>6W6LL0b_|_tD$(sENyLo8{Hn>_yIkScql6uF~Oa z(K{I8O$Ob*M#xNuSHHBnB;~}66-w^T1$}{rfb-7My6A;ya~^BOEEAh)FcxF^aFzs! zW|oe($>fPC#aac-h;y03 z(ik==5ziU*k6i_KpOIG&L1y9CCjBh_3+Sl(JfoYc3 zTe-!X12e%F7iKOjUo^Y{c3+u3JJzy3)JqhwTKfYbRAgDF77HMA8;=#^Wv&;yrU?kM z?(6b~Yu^Ni9~>y=YX(dwB08@+;`M0k;a z9ZK&Nw?DVVWa#G@Ro8hMc%&Q;Wuk)lMYEwUuensF@3(v~0r%_Oog}fET@ubB(-*CJ zGO@C&cR(2bnj|mTkpKV?07*naRNN(|nZ+U12K%m4!U@(SC+wj;=)4)b{$u|WlPjj{ zzOp>-2q2fX-^~U5a2ha4Tw851b;T-IKtLajn(1Qs-7&uRrGpu@udDq&JT*uO!yoX0 zu-zSVeY8TLHrhuO#=u8)%B?Y7&ovyhiE-;V4yySgPtN4KY_h{R%(T8M&Z4GVB@7_exb-@`RltSdE@Zfz98RuboP;ILC9J+r z4HhA9HE$7@iZXbF-|lR&@RXhd8;CqsrdVU*_Kt21LH3J9wJ$NJcN#)C%sV_%+lPxE zu&tXj{4lfpaEx#J3oW*_<%VZIG2Kwy8gYQ(YDL__>rSyy51}M0Y!IYLZuH~vZrbeNGt;-U*f0M2J>NEsc(?NZogL>0Uvffk_Cct9tr<L7{X&VA0zbtx2arUXAY?<&wx$cX- z8fPV+A5$&$S{f!^WL#q za)>B$r}sc)CpCf>j4fff=Ov30a6K*g3tk)CYN8JTD4>Xw0^m2y+tG5NfiN-H1tX0PtFL=GVfda9 z>sdLd)ua$&i$R@iUP$&g1e@#oVuA;aJ;LDS6KGUPnnm2_ABL3cS=DA?9xep9toVyu zEE__+Giwq6WF8(C8+Xl42!mkBYTRc)=dD*>VU`=>TrO{A4px2DJrvwsRO4U*4|nMi z05E?Y6Xl%8;fNPF`sJ{uHN-Mj8w{tl^tILCqpr_loce?LD2F|ArUuKNx*uA7#)8(N zfW6ifdvkXJMz(aNpxTJr@fcN=JaRYV5hG{wedQp83&Eek!e^G^a@mG_J;R{O=S!k- z7I6b(l8@OJB)D!GWDzfLEnqvif$~|H8~9+A{sHvtk6`Vyf?r(Y3xCgPyk{8@1tmvCjVG0B5JN8PVy8vou+kI0>QoDxsg`Qe zu-MoXxE3y1Q?mL+z5r_N7s@szB380CX7NkwJa7$wDhN!xy@vkWz#fm8=RGt7|B2M` zH~W>o0oMKYABq_2FYqyMKnM?lwUC;)I|Bpkxnf-eOy_cWksW5`g@3_#m>)8MuK5T( zjGS$c0;hXU)2vfBf3w!iGb2ji9DPx?in_c}WiQ9qcj@O6eI4EE@~ zS;N{0kj%IYAFd6Ji@-^XW5UrED7WMn3YzzW`qkq~LOV%6RNxU0%Kt<18(Bo-&(4{5 z+#en>wu?V<3k(JLm-U;6y{`;^^8VKN5DGY7<pl64 zzJndcLf=npwAYHI#|QAqr}_DR|KH1B`jh`M{oFV|_rr$%7Y*qys})*Ki`?D9{@V%K z1(gYJ(Ch;xp$08eQyigk@v>R&$^<$Fx5)-;*n4o9`?MjxLNu|LJ3;Q)`>Sukg(VK- z22+}M!uAAK`d%uJifDUZ^g?4~Sb6lY;gZY_QAqB!l0q!GyNAj3SRgIboB0B4(-ncs zOwY;!@+M8kdz4d~KGHXHcup(BAGf}9XLoJxD)uA!$e?ASV1x=w^F?mhn`Lz0OReP5 z)0Kmknlm0Yc!odXr~!OH6}&q9~5 zN90Vf2=YS1%<|`uMi}hP3W1tX0{@O?<{FmMe#P`J8FG9rP3yuM%Au~(7w@63g79E6 zAx8mFJ&2cafoLcj|i9XXc>gX#J**A4q6dr2>+izS zVt%Yws}y%(gGH6=p<%vEBPlyiw!1o$qKBb|sD`wZ)xZ;mcuT#c+gs=6$A1Xdn(zyNr@u1~Q~z2)+d zL#Fq}ub>)WpK+6MQ_&^v*?Tzb2Ea9oVLLCM^0@A$V7`!^HH|68FOA(IJ#s!el!vCc zuRZ0k@^)BYvg20-?Brqr`jOOZJwD9%X%IC;Y}Fn;qpu+fflgcDv!zK;%uD>-O(d}= z@~`-iu^FzbxpHnKSlhVuuP=hoTVqit)L8&1Of0bS!5)*~efdO)pP=XU`T4;u!0}8q zCgYbWlKrA*NM4)r!z{m@yqfGKYzLEeAl~gjGIqhR%dw^ResX}SE52ep)Xq?ACu7)i zgpLhwC2T`G1Dyo@=E&us)bA?J{q^2L3Y>T#HnPRpRb%|l*%huRe7wzq;IkR>6gd#X zripogJ{$KLzFk3&gMR=gy3Yg!Nc$c;Yd)59^I@=Izr>&+#~$vVz0VK-*pKBm|HMz_ zJ@%sFd;5c6ojbnwsI7P;)2%tge&N?X&u4tw(|6A?h^%>^JK&-Yw0Oql!vnAfKXf#|l*yqmk6v_EHWPh2-^~e6@nK8N1AAM2$!XlIX z78;eH(IW0*Zf!7IXAy+_Cd*Ag7 z(K-#Xi}oX={|2C&6XZUQwKsn_#~^K=!Wsu-b3B~AVq_PTtYi;+!R6uBm)&#VSyO*V z^j?4xdNBoqUIqyRo#78A>v~AAa>hEE6wO@(42S1IyD51RwJHw6Dy0~{8YNWGS1hSk z*u^r$ADv@^k|=`emTJ((Oz;tlsRb9{4d$*XVs?1fEgS{KeB9X*QvkgyR3YkMp4Zi> zhO%ezoVXe|Nw!!D+1OrjiMcA6OrI5P)?(@0?3#Nyz){7X6%Kj<$NhkWy948UF?)=M zQ0ktCsc)?cIqJq=7C5_a;xF*i1TW`_>@s^T3Ps)DeH!}`^0>}0=7o>jdGczrhwgr| zMOfbEy!8m1fa-j$FAkZRtB2Z`lf1ERaqKnW1rx?jU}fU=NGn!OZL#kr>m^Wor)B?5 z{WCb$o2MWB?9n{TOJjB}IKG%yJ(sJ%rNu7!0<4LPDx0%Via<5Kvo8t_#Qov}g7Bz# z?ul?Gp~uBQ-9O6;60Yv@e#ce*vyAy6o^V11XN)uLi{)G5sUJp-jGT{QZM$x~uN>!z$j%6O%*R zpZ(ZYp5q*H9ggLLbKJB-K~mOEta8Ei z3pgZx4wXpr@jH;eUKNUlmdK-m04j2`%H3~Q*g-7sm+HpTQtpCvYzS)| zB45~h;I(q+pXR^zPyGIT@ArOB76$|JL?`LiD;8TU!$#g)xPRKoH~HuLU;f-3Z&}oY z5)+m?&x(cmmjIY?@16%|lGr=-rgt~=(JcPX>6Spbzn|RX-0r!*dzWAPnV-p@{}=yQ zKKtdrli=Hryme=9YOhN6Ab(MNK~UedjpN(aCWTgEOxO>7M;!@#sPT*;FDnE)k6{w# z3Eb~@&JSrJeUNfDXTK&XT$ea$u2N~Bd(2GM+;a!q{mHP#lPqp6I^Cc^HgD_^H0G<> zOP-R{ajnDwqzcH)u%5k!3`#N+QDR|C#U7Vvx_Hio$QAQ-2Yi0+&W76_>W1xxN@-OnoOwYZ>-DCu1T=k<+4*c9!F>H9yT>uTNV?HZZ%3c5qu^b{DoK-PmF~0A^0F@W|p5Kl)NqmJW_g*Vhx>OtsZRl@;qMRbc$Kb*C1^kQ%>zP@hd znP2x!tOyGr6C;*YEB38c3@h3Xc>|n%q9$V!a?VgguY#nI7eLB&{1t%kiL;*cb*=TNp~aQh%{nfCxE#KA2xP5ABMz z_5&li0W=sZjTMM}_`JtMB%1vNkCl!d%nTCSsWy?(M|W;}D0aPqPr2?h5L}_;0i&VyT9(xp%tYJ*iR$gs=<%wNcq7_4mj{3;sxF=!5IFBZbso9c-b>%#G~qkhdQzX9U8JuM^BZs(vUlvU3hP+ZLW;#E z;rCA*n5s0n{HYlREwG-++e&L(%9ylleHL>EeMcS>keLuTWIu<83jxW2;+Tvon|=?J z`jI5K!{_x%2;Vy}BzO7c3yjF-7&yMIYs%}36q3FYmx>Dk@|f)Jnz%hqk{!RJy~4bV zMpzaXwm2XrJ&+GkdsFGQkO)RrKg&^$Fuq)WnQjvdKJ{eF85ht_IPD8(i4O+AJ|8xd z@5UT;Rs4TB==I>y*WD;MiuuT)#=`LomLx=n3%;`H)?9o;@{3<^?udLp>^6rQbe$Ot zY6az&;v2@yWWbc@+sq^pXQwcZn?-Dp!Z^z>)#Sc^|32UQ!@n^<{$KmA$1ky;$KA5; zF(Hp$DYE|u@bIx)gFP(w^S|~!pTi@PfQ6b9YM@s&5%;@;Wsi-+0<$OIyIFxf{Q{;< zO5AhS``p(p_h0?H`49h(|J(f9fA+VMPrnTJp5Xy3ET2WtRP23((Olk;3tMsb8G2#Q z1vm6Z2q5V{N~~4eg|fK?AGsI5Ln66(n7D+X!a26*5F0Yv7kdxF?WJ3hJ~LJbi6Jw6 z&U#leU`;TeG4xzMQykt>`0@iTBqt+g+R8mo#C(A$w13dy#AGMsAdYo4#^O#E{;X^>~lujJ{7S zK#n!c;o4;*ZnLTzGiL>#1>(jAA0E)1n_GCp>rGaD_X`88e|el0AIiePl8rkFmOhm- zgYP{RSiF9T0x>ZFok$$$;@Ft1&VvY0OYai5zZhbO3daT_89FWqMs{-)BTx@8>XNUQSHpNA`(1lSlnrX}3OAJ4+1>!Jam7=$4tjs); zjcoBz8fpTmr3ffez^<6C@CEr?w-`x`@oOm#Icnvx2aX(6=aaLo^>S``_M(&waD_K} z?_A87;3Xsgu{yEDF|FmDFZ||-A>Nk0g6ofr^e|x$xV)ILoYe9%D)`1K;`mHmROb`D z;~&o^@SN*x;wwr2xKEQtSH0)r`#2Yo;HkPh@}lGLMCvU)7ewd)7@N)Ej;l}52*`5^ zfS1_X08VXm@xzuTM9W1U#}t(B9z=9edy;hV1)3uPT>qrheC+j_;5}U2vP_0q47)nA z(gCDCO0!bh0qsEvS^M{0_GsLt>=$gCZ`U3eNIuHBD5$2rtz4H2;-M7z#kvqU?5Dc{ zd5yBX+PH5oO(5Ob@?pH8TUP-ui6C>Az?ktD4Z+?BL@-tWrmrf`Y2kt_VwXU%&>~lw zZiQb|tG~eNCGIg4j)JRR+s+vek1d3J!yHq$vdqJJrtUXE-|*m%X}=a!PENXiQfP(Y zqGV%n;7c%HmtTwx0(;K=VBAwcBBY~2ea%K#m;{pthQUk+2JFd5!Tz%9B{&{`zo-R@fq1hI;g8A zFlJJuG4coe5=^F^YRRnNz08%j;Q5)6xaD3b(GR6bF}BM!d`T)E23mYu`KXpfSK{+m zusS1tPeQ{xFME*uxHoL${V~Jkd0OZ|liBR_1G%2fAj8k4a`-Y7_SIfjGaiXVz8}V4 zz=U@d0Y3CvW&@KM1ZR-AQ2Wt8Sf6hjZ?KdrF4BkA|I_T1O=Gtm*ys1`$b?@{ge)*a zRn8e4`x_E_KJ#X!U;F}@e-$2L*Qf8H_uiR2a;3Bk)G#QUaQ30t7*L8&2Ha9RjRazY z3SZoBdvG6S>De z{9?EUKF%F9nam(b#@^$g(mEI>r2r>k_Ra;^KYY1<|Ji5xZU5-+%@6*_kK{A{HUG{f z_(LOC`q|2_AR!Jdp}w*0a{_S6P=E`xH+@J{h_d@nfHLIX z!ovO>KLgii_8#W?{GPw`ul(`+>RhCU;zBDZ zJ;Xz*pn49<=XPw0z+-J7+~W~YA$gdIySmS#)=KXqXF#4-O)x{nwAc!!ecB!Nnd^}( z0r2>X=C1s$iP6BeXYW7{&_EY^QFpP0o?!N{j+S`?OIy|!JaSl>8WSm3Py5Tic=!ve z8^@T0=eUqaWUngWFwjiU-HWjvM-bVSB77E*MSw}t!NO}YDM>sGXsn@u#DKV%I*dzW zIt{5SIu(~9UG$dCz1-C!fYFkY+z)>%0YzYKNV9V95o)?vV1ZSn8hn$7({h0*;or<9VuZ^qHNB%WXUDJA3OjxwA8Tug@>5LJQY;6y!iK+KC3t8CH5F|N zY;{)gHllF@B(R`$R&xbSPbTvFz7t_z2^6W^|HU>i031{6>LnObkeZ2-O~1pIcslCHiE z!`pCsh4wev+Am4^FR~7?cWB1qUe(~&2b;QQG4+@qDPyF6gg*cXk9{uC1f{+w(157& z;Z(E85$@sewNb*T&PC5Pi1ljDW~(4SLIFq403hO)Qy(e;CNb9TPKp`0uu8gmT;SWb z22L+-!E_eWKsL75DRDp*RCl?4PWUs2FGj)@a-^Xac}mc3w0GWloGfB#j0Br*U0DcF zFdk)_qI6(aJnEu{|&YXl92l__cAz}K_nFRA%FWuhn{a8%M ztl>j0-C@D?iwBBy{IE||%a`qb;mJVe0M=lN0_xTj(H* zf)mD)xn<}RH-uym1mDF1;LOY*VGNS&b!7%i@lI$OFJx!2hJyTKVC;5jfK7%KWR-y} z+t)>6nS1Dl(EYx0zrWA@{pWfA`Dc~S(4W8G_UC*Ve^2a=f9GH3mtV;B;jGW!XMy$q zM*r9OH+S$GvflrC-t%pa@}V`vUJ%a88izjZ62@$4k*{G zMZ~x%%LU@rtjw^(Lu>^8_F3Vwa;L6TfxoDa5=g1!*H1EI!o)vu7*OQ286t~&0z>s4 z!e3eu=IqJiy?tjdz@Z;YPAiTT*>}q2<%A71iJW+I@R_kTyToTBPd^N<>ycAZXaxLz zbTWGilc?%u$x##UdlzXmlOU7fFZi@>iJh_xE_O$mZ6G)(Gg zDRMx-Lp@9aQO+(!q-~@FM-8UQx-PFxEF zC6eb~E+!2dOj5Nec^wBz36lB(-fq5d?2NAR+x$f=a5?Bj*~Rm~G=!<63G#LlW5Pet zqc(|%hjA~Sk?J)pw0X~UsHFFdQ3GHWk?|?(@H&BD=^X`oor7agv0i;JrY7pl%iC34 z*`_hJs(xKA_ABPS#69vHdy&s%vZ-aW~s*weciS+{Zls9() z|6r2Pmj^dD{xX4Ee;467QRnpBJ{q4duGP}RN-~pVZ0CCLm+p5FGv9`ur`>t1B~55I zna;Gmo+AuEX{ew9UZ&u)s|Lucwiw1vfyV~gilOd79JoKLA8Bp^y;ZrO;`ru01&b*) z6w?gDd$u0X6^izDs3`G>+%PCzO3r$5a}5dF^kSo?Q%NN0X30a}@(8^cfO$}Mxm{)N z^?WAzqG1AbW`fO3hkMmv0c2u)IL+E8ZM=&d@Q1CxrFXqeRtX9wjgp~(RkfEZtalNx zUt!!cFT$lS*47(kWuAmLs<*VMN$(w^ew79{-UGk{i{t3R+8BL|Ieb)a$9lx5(1=uR zOI+I5EA&@r+pO{x%$K=81jbKa9|T9%h1CJ*{%EI|J!zY-l+VH}%t1=CvHSEF_fGLd zh>nD$XY#>~TqP;ymP#D0+eK>pKwYm3w}56Q*5u3C-Z0S@%FA#IrI1N%qH1Bmldwo$ z_``>W{j<_LTY0p;*mst1JB-A%6^G|jDH_JbR$>{>~7Y)X~HcG55x7PKA z;Y;iH{H7nt_y5?}^Mk+RAI=Z{#6O%L`1BJe)zY2jlV=#d7u3ryAxb+ViEKp zF@`^AKTQ70x07#vHtd-ArIM87dN?@CFKGIeJ0vUKbEm1ni!QYml3iuzlY4Umzn$Jb z$$$E<|LOeA|Hr?c+oxYD)ARMd>sg4NQF~pKn%pLgiO+*0Qx}&F<@ox)@!++?UNjVm zu&bdJzH+6Al^03@G{#ngAI=jnUsps+4ZRImjNR{eccJvT;Kf0_=a56Kor^JP{{!zP zuN61mFQ%AAhR>ghYI_Da@>|D|74Yp|gvoqz&cs=oXw@Z8SEP*eZ9ucfGw>py6Ru$Ep!9MLVwY*`5f;}`bD`}~ zqL^AShNgAamwE8#^Cos-n4z1eq{Dl%^mHT0I!4sP6Q~y8pbZ0{MgCq=3e?T1x6LnD zjVf0Q+MD*Yw*M%IyKNbZ#0o7Eh`-O&bg!x`=##1KkMeEom20j6<*A|aj?>3tUb!L< zA%ls#S7|tryX_~weM8%7L{l-LVm$twimnHEgmXrLW}g={_MV6ER`nN7b6)Wef$e({ z+oGVa%14Tw=q%gPcnS%95t$5%%X+2`FCtYF<=`yB1Hg0JXT|UIDeWNcoS4;doyN#} zm>NeKqGz&-Z2in_+{J*J&6lqP?Pj>(7}u;eAMEV;fR8`u5qu-^6~HTq%LL#^FLyw? zKpr}0T;#fwrcBUp0-QFFLAW-@LNB-|K?T#-fw6_nrd_+7c+?Wqbu?hRd5J7Sue<6a zGc1H#mz0a*;~Z-?7OJlEn#~?f8*tpoQ)63WCGd4ZY4o0kHW&EKY#%W0uf-gHu22kwIJkv zln!tlVoLbpG61&NxK#yO7X~(K?6n;H)&R7}{npZ#Cwcl@D0oNxToe>h+NL;uU#U;k(R zaJ~Wd6U4s$&-@GdN%T+rvwtK%@y~Dh#y|H*^7Vi2e?#sciFx1nr~g;^ssG9UBH#EQ z{m=4y{?NaW-|*Gnmi77P?egya_JlWn6Q&(q+p{O{ge%M4g**9)fAYVZPrmeNbnkHe zTyclo9BY9sYI$3W%Nd@#|JDD`ed|3(UNO;}xZuuWVR8itnk!-Mr?;qM$pxZN04tQ( zPs#rLSLF5n^YD#7KllInH}g0CFMlfY?o)U}w<}yHX_H-l#XTk{O$`o0i|hozTAt0} zx(mrMPKX+SkNj1NUpbAoZo*z6<|M*h zc_XH84)q|iLVB4cSk(wSNLC?b>3abR_fCnp(O^g6F5EF^__L-T7>(u5ebP&92uJVI z?1w>{@oc%q!cg3=roCbKIztI>q$E-)!d)@r>rMfL3BC<%dSG=n*AR|5QmiDjj3adRQ(hY(P+%|hjMdoK>nf~t!@Ze=&=iM`4`K zp(L-7*TR@N-g-Z z?Dz}tLRv5Old+D;{b4fc{6IRG);wlElUz0-AEoLcR0+p?@e}j+>nUf5Y#F1oVef79 z>%QzV00dJ3F{ zyf4r?l!;;ui@UE<(B=@T)J?ERXC-%Kh9HMn2{v+%B@pl^_-JX$oo{^Rh6Mks1VV7( zxFL10n5*}K!5%wYp8p5rxkr$60$q7OP?4=X9bo!}ntkHnVE*g+yYKmOe#`&xpURK_ zQ~!K^;3s}}-hJi!@{TXF@A#MPnNRZ0KkJj+=3VCYDe_6)eez}Gd-BOUv~v5NyqhoO zlYE+Y{EOtf+YNj2?iToyZ~pAhQexGlCzJa@YK_SGQa2vo=Y*CMZ z_MKO-Z-hmQ>bp2LF(7!<=gX>l=gy0SJNSh^|L^Cg|Ky)&&AHvu|0)2!wf!R73cL^( zU%2n@sn1!xe*Y4ov0XUbPMf%R&2evfC7+Twpv=aJg*yPmT{~><3VpJ$3EhTkh*Wud z&pT-={a1eOO+07J(cyJ*gEH>h|H8oleSm4*i3eLgD6c81SnG(YaX3VniymN;$BNIY zjlu~Hr`jZvna5orF>&L`dF%iH5CBO;K~$j^_sa7?uvdmZaWpA-lMdA2Eu5*ax@UnQ zlK6OMhUlIPw0oevyX*Ot!O|F-FbObL+5@VP+B;U~&dRj>dPd1>6%y4$ggUHx1hK$| zFy}S0v8xkU{>>8LY$p4|WnExegC5UG+TxD~LY?HQcYZuxo?};>U1`I! zRSq`Poy$J;SN)ByJcqk-jZs85Lkk%su)P3n1xQtKp|0WGBwTzbXT_qhv`auzzQz$K z?6S{wj?Nts^dKmLt`+OJOE9X7LVs~Q(}qXdHeDZ_N!~Ou@lP0o*w2g>4pSesr?9fU zkQm20#==ohxk_yMM(wRQp!yaJq$>+E;;CVkr#!9Ia9E`+-{Bgs7Zrw=xx%AqFna)O zV_({f8|qzB*yW_I#=-ztsLo^bIbqW{(MVM*+HABHKasT+??K|aau1_EiOe`IUi~f` z)vUM(HGeyME%?EW&|~4Fj}ofc1&@2vMB!Z37PYVqfI9sd2%;H|UY!HH&^FF$NWtv9 z?1w%-hpcfc<7KhnA~MK^7iy3c(R+QN`a?gCeG072eYhqx)5lQ<&c}0SZM-ZOh3h!! zJ9s%wDB<9$<3Bdf#kNZ9fTdGrAG!vJDK#-X-@fQ>LK+W6lYsbG^`o1k2-6s}T9Frr z=x7wNMje+8Yh?%XcC;y4xX|NocagHT`O$g`qZX_krfK|_Y8!6cz^cF3DH_(9$w%Y7 zh^~lw$$cR%>;;BOs3E6!o<#dRlsx(YTzJL%hQ-;JiSaTa4bKVsuJaPQ>c2oOr*Ek- zgM9q}Xbz5g3oBC^aMZMp2DB#~^7v_&=dc2ITR?lIANJzw2A_%9=+0Zm-pbXo-hn1k$zWfJ0^73`3ijuWr_x`68*rMcxJpzxe}GZRhL z*bO(rhkMKoWXDF8nMr~$^U)AoMzd+FjJ+mC!!UN)xLiAoJ#i;9V;k5HFd+ECV8;q* zulRi6Tlf@{gz~4}s=c45A1JMYFb(tx)DA;K3025@R=^6wn1b0k{Hk4Wbta21LPIlH z<$H%-BHs(sUt}<4Lop%oj7fGyBVlY0gSoQ%rV{YLTY%n; z8*{?UK)fM@#d~MIU4<6A(8vvu7BLR7=+JypfEE(=UNP76k;Nkrr_+VU7nJ*FpXD82 zqQA;4`Fpb%y>?YE5u)N z&^ce`!(V#*>R@XW?SsJ_)CO4P5EDn z40^y!hDsN9hp;)<9&yte!x$JL&>VcWNYIliRwm%xd;;PiSdds{c~8wJP?UufDzh&M z#%Zg5;@yzN0SCU*-a`UxDqd*dW7At4)C33*AdsY^1Q93onva%Vl7=x8t5;^MNr3$* z;6#QSZ#DrY7pxbk*5Qc*CZ>k5kb8z6cBChw9*;envtlZY)~>hG*28&*=uksJCH$;? z*x7?}NiU7a%bD&Ciy_*rr=hS3b8IAgcZwK5@E>(>;WgHcl6llw*!Xu(#m{%%W4`yp z80t>^bXL`@sztBFonR;GSSL(5x<;32+8gX5<`~w0^f1lZ9lmC*Q|E-q^+pQ5rWnSbA-XOH4VD+O zZo{pU#~>}LrulQA2Cv8TLq zfAX%dP?;>;#-m$ah4J-c+Jrw7)^yxBSM=)K`M`)s8mXTywjuo4Z;N_hlYz6JjH=Nf?u1z2>@% z>Q}E90JV*u9NhBS$isOU#H?`nm-ZCmguh^Z7%^+P-(r_;zVx=NpsClhtnj<4$Ff)R z;#lPID|DKBfIf8csy7pwL1blG57SwDX(30?*6ss%CKyxaD9s~#4?8IU;hBrW3@14= zjw_=!as8d+O7CFC9yN7}5z|KMa>fhUe%NLqX8IvvMTI?xLa#G+;(bm+dMt?9%mZimL*O|n%iR7NQjlf{VLyY!!~lfhF2ozm zo0@|Mx*Ir^@WU8{bU|+8QSX9@o=FsNsFYJ@8UZ&Sd;7_y3wNQcppr9cpP-x9CszG} z13l&i3%uI;2%WI9*CL2q{+y10`ZDkffiYNpKe-rd^0f#koSTF#Y7?1hZ^&{qD2T?U$Y9a&bo~m?N`DhHtD|~EUXGD_o+(I)_WBf>eCIAu& zKTfzO0vz}bfR#XA=G!9Qm3;O1^GI%@Cu`NMwJer?@LtW$9tN?F^6K&6(WEJEL1wYN zSUXg}gL5n#CjB))g1NM@U2x{E?M8~Z@W_fhiJrNzWPsH`7;A5HUm2vY7l`&oFqqU{ zW5%qr5)bxJjdI|1j9T;S=5?|(_DaO5##H0*$Y1BFjCP4fj|MI7qwH9Aq z7hg~oy~TfB|AYU%{Lt_HgSox`EMj+Y@|fN0MqPjD`hjih@KsRZZo9wzunYSwe8n2? zxzzit+~-}s^Q~{^7yjJ;7yHxQA}OyNtzma?H?7leTSAOG<n(CI8&XRf2n%D1zR$XS zDc}0ppUGeR<9{^Y`Q^Wxy!(W{cwrOw?28&)GnfFfOkVp4xPw?b^dV_IA2#laf6=jc z4p`|yBRrRxMV|3c*CP+*VZdU=-ad8_w6!GKfjJ08NFNvqiaF!WvMcxQYvsO(F_$_Q zemHAo`iDg4xFj=!BrffP#n(hjXcNB$PUwr8G~vW!j^d&Yth)?|?9G1LNe5+!+ruL6 zoIKud5T#3$2P2EU!yQm5i_9^Ir7gD_?9x_L7I(J5o#rfZ<)@2`fNUK{H-u>%+jA?1 zQl=|a=!b9<7k$NH4n1i`t^`YEj~lP?K|IUyHM0Wi){OQEH;hH?Wi4dbyaIDkkCfdy zhB)*yO$NNLjCt@4EUGVz3iv}~%QFteNnN9m>#1LayZRFVr>19oFT2 zpzZlBG_SShZLF95A@q^&{;!GK-}f2rW{`BOMQp9J<7)YZXU9bLEi9-AH2f(Cgu4pN zExCrg%dYk(SIX|QS~6ZlNC`u&cy8R$=4^d2;CG4%Xkvpjzze_n%`$ij>dmBpeAE->rLM04_6L;u5^yFSSB=5kHfwEPc-T&J zsit{uwq_H{J#OgTHsW}+c^Mz*b0?%Qi7`#Xsd}?C=7KQu5s5DLjN_&C_N#x1fag(v zBql4=YRm=OTunur_cUkUL~Hr`x%VS?!&0#T=+za6sdWkNnLSc%EG8*<8gkXR%-Mld zO&BL$8~5C4-SbX3jcg?yn$vUi5E_q%27zSH`@7CZ=DxWJ(mg#d`Qh!_cdnII>>b#^-!OTa@)&5(4&TZ^A7<41>>i;Vo90{ zY`iu(%QppB94*R1QK5e3wh@f_ax~(y$QJ0$rN?4_Ul`s)qvTR866-_qNPbC`T3n8# z{X?hRyFOd^KGe3J=a9dJJvo3haj0yIN8c9Md@MJkMfYBO;s4T){BVBwzx_WT@Okch z>3dHT9-nHk&eWlxUo%h%`{c$A;%EYNTJui+oxb^s%*pPl&6nd}`H%lXzWuX*Gi`@| z#V1IA_fUmgGqVTzo-s!F@_zsPeSYhI;~&cp{)7Ku?jAgxsb?V5MniK#;Rx)D3Gbe7 zeSXi+fAbC~FEQ18Wl`7t2fb{Fq}79raI%KpP}B^4413(+y6x?L&&s>J|CL|PU;G#U zXukdP|9R%qPa(gDneG#6`JS2Kf`ZUuZq(FXD|c$dhS+z+!Vsr&&(8iJ6pN3tVq-qT zJ3MHO1>OopsBsTNQv;5sq1MwtF55jDf6wYfJh11x_irr{N(*67m$Oq6Un2gni6#kH z0=dxxMpt`MLetWcRou8TERB0VIz(rNa}LynKwx5Jfn%~avAx-j<1YL~W6UgSEQnrf z)=&$FNsF70O*>ieyhoqLg15vMt6~&woDF0By9LFFok@nTfmkk~MyQ#NJCAkYExbwW zT{A4q$)p2y$6m?;!DnJH@t-AUpX2OrxsU@I$MQMcv_uBOQ=$A}!k!y(^|rT!T5JKy zX^bOKQ%}n?liGb3uhV@OY+@2Zy0k42t%|zR(^4Pu@Z)H*#umFZw7b|?S036MjDwGb z!BrKAqqv~2`PRkjWnS3CaUK8w5CBO;K~zyS*q)TZU~OAA@(>Kc{(K<^*L&+Zu{|@Y zP`of4>Bg&Ta7D#Er9vIf5eSPtqp&@$P#lXzLA^}w9^L~uc6r)_E!8;w)S0?nFsB&( z0IU}q_Y3BFVw#h_7Vqiu=TvQCX_0k9bbvpjA0sk3=k%}a}xqVbV%3)T|v>jH;^ zuGSUY;&HTya@6OF(?gN6?@JP5`iC)gfJjN>-@YSt-lBf|fuYL0{lE{;WFw@~3Hm6<}V^ZsMnWjeW6gZ0xV!}bn(FSJ5 z#Ga{67*Dd$3@eiW6DH5Ht~7-L{wGwa4MknTu~AT>kXjuFy!zVmb=3Mi{F?3!PpI|z zpjVq^hYTtJPHU(yc?lKrerlZMig&Y(ZF6XM3UK0Te_+(uFeU~wuQgxm9ee)(+bc@Ef6;Q{>(Rw}vM_s0v|w9+r~RQwF|KGEZznp6fi|Nd00YIuIFrqc9`C6R$(Yi> zhX($k5xy)yyglg#w~=ZsJ~3c>B(D}mJLDyC9swK!aH{Ap8h0uxzA!L_lwP{#mAfiER+4g8r|RG)Y2Skt7B4dlD!h&Mj8o2?!&o)_P*1a*w1zp zEadB6Loty8ElZ!{hiq!@Bn)y&VOf%>4}E_~S|c?VV>M+B16{_kJ;%{?) z?wjxPxpz)2^W?<)I(K@vBKISH_tF(Gvg6rjRysJWoW<+l#=X5K=l-4VO=uxxxqOoI({uWIPB8^fgxRdx_jx0Pw;mpjqk9I{eyd1gV+Y2v7H^_25G0n>t zY7Rhcg5JozpvVm*C;yJ!F3`qML>7&Zjw7aQj<}i2S~d)$5$-8s2`l`ypxv=oW;ic3 zF$fZ4_6!R*I86WRoiI#mjGqsycS*1CC}xx@*4!Qd(>MjJL-Kw`qnDYjA?-(M9XJCp zV^11LMAT1_x;NXK>#RA8&ged?VAN8 zRZt!}XPBZKw{aWUPvPAAD?y@#(7v~8b^%~srYZKJZczfeXGqrsyUfjj?e7CrL!8eV z?ZN|ZpX!>gj1AS7b)&{5|M{bNei zRC_ZkR}jrKR`H@PUmNgpG51_3L3Qisfc^dEMN=!>+1-A9jW(BpzJZK^Gh_MJF9Z4o zlWm4kKDrZ!`3Sa%f!WY#Cl5Fbwq<4dP*6SDay0xxKKFw1rSCPIeA>4->J;d@iA_n9=mfHa4$ zW`?XSq}9H&Hh;-t;g_=AZ4cjqB~K{9J|Sbe4~De74z|e5ExX19BfU3FswFLQi@3}F z?6M=1#A}%5hcU6;_;S4vU~{;LR%YpIpGJT<4Z%I* ze`@U`#7%pK^SuAXZKU|ReUfkft^Xvy`j`KMtp4vp_}>OB&UQ!GAc1#;FSsJNnOJMy zf0lpfr+#Ptp&$QR?)Uex&kV6l;#q<+0Uf&2q;h`sJNNw3w*jF6V;F%kMgf_N11)N0 z=_tfFLrT3%b{G0cJm)(Cclht`lmGbt^e^Ra|Al`i^XZp~Pk`h9xE~uOoCvV zIZ)pV5O2k(0m0Y8kaGhc3p`|P>jAFJ;4ERfA$Nr)&;$}gwQEKiP&zP}F+CcBYUCr# z*p*GZE{pY0ovTGY2y*d7mXt30zK$sx&KUgVQouzI5Oc2>Z{k#CrhBqJ>>BClAp+xI z-b2{_;Fz8MOe~{IqMr@`d(*y}07}IrnVC!&E{Z)iXKft6@N-FDV~akrM??5f0rU{= zOHDZXz-sD6bWh^Cs6A(^z|9$jnwY4R6ij>% z`7gR++P#X&9#>&~2^-z37}g}L*W@)|&LzUy>gO%^BZM>h)4>4mpVN#bJ$I=!ibyI{ z<8?8tuXZ1`B4&oRV(gN}*#5%RFY-9%3)U2U`&3J6e?-(`m_DP+)OAa>Csc2N(M#Um za|N$+Wz}KPA9qd{+@;~ONBsGe$C!t;YF)m1BZVJ}c;a!quKi$+AMPkSj(I}6#%(KC z2r3yB93WG5H9<5HEap|y7~p@2xtTV}%d33LxQCH#>ls><2VK})PEp+Io)G*@>uD}B zoZ7iSoP|7RizG*-W9r(|%(ewSe73DKO&~nTw!8A;nHpz#aVYtgdng~P1#b{f`SMa* zFcnni7dB>OToB2ZjoW#A`mF2Hdli?T?i-tp`?Fvhjf-4`yVq?Qjh*WICH-YhTEG^$ znlV{kq7_F&#ayl*9(lwyD3RR-ob5y$PnA4YkxkIbWB4>Ld4SuHev$crfBeH-(Ex;8%W^B0W{@&0^(Fs+S29ah-Sb;l$xS;V?a_KPUn@s1Yu zAl$EYHSw5Q2sjRWiM6_LmDF7==RM-IPg;q#vce#rslks2zY;8R_Pb>9rF1}3vU^R2 z2Q=UFm0gRU2{PriMwg+Np~l4F+WpyhGQCalcs336U1{zDS-H=<{NkVef9C$pZ@~wn zkG;oY-<9FZE(RLSi+cnPJSC2Sd#piw1CO8>`Pk}aI`|hXsf|IaoS)FG&(krvx-I$J~ncE^bYq_l~?>uLDVH z5e)QtoQHSDARH2ymGp{I>fK1%yKB1W2C6wHo7chI*yLbU-mPVoI+uqD* z#xX7kP&R0twM~O79nVKp_bd{Q`H|YOu9YZQA;>M{fq{)%P>!%^lc~Mfn`GmAh zP?JPDYxu>PY~I@HksJo(MJ`t1J{TQk71F8!HEjY!8|5Uu;ft-GK;WE9ojpt){L$?` zODjNIa*d6bC-g9Mc1){zHLisiv$#Kb*?*sm&e;45%Ut}c#H(%scdJIEzJ|MxK+mE9 zgINoH9)#?1VmdD-Exvg4X}lMD<+oPR@49TtUM00+7rk7Sat&@I8-&!fF1f~zgPneQ zMBG&a7B*|=qR@-GTR$tIa`qzgSk&3xUSD~;)+*8cjFZ}hjje5OCBa9xy_PEp4teYJfY}ger?8o7vUle#u?}wu7r%on zzd)J^tg4)SmW2v@yxiEJ&+z2ghedY^uW9h>=LjZ0lI|2Sy7pb*Io)Hqbk9X^i>`>2 z+66~=xwu7r7b`Acitn0y!Rr09m}w!}Y)*a1)g~+O+}b{en045MG>S?@c08Gx+>sUw zI}`IiIbYxYW}*EhFN~>=!R!s8KbYjYPolB;ZXY)5HH0X@oiE{^{o>!rFa6v9|M;)} z>9e9HnsBp8p=~g~^igi!O>8so@A(bC`M2b&zvmyxx_=HfeCb{2P&|Q^nZcOcQA#-0 zul)MTuYBho(DciHptITHi=A;(aJg^x46-1gdwM-f20YzQM6R@=4Wg9Fy>1Qh%#dKn6gH49{q+1Z75G4Oim zx3j44b#jbs^EllU6qkv?w4O;`JobgFg&$`Zfc}{EH-ol;1@_O1m8}6^rg6`qZ2KiB z_~O3A-GWGwE;t?v#Vh+d5jRFqu2NJ3Y&Z9;&pG)~Lbh?#nJ}q=qhWo++CW?j>z?c3 zKwyTf{%)?F4qpOoq239cT7{m$?WRRN&hB%k>{Ui{>%!qcrPnw51@cj>6(AmcR1R;U znZ(a*T;zy~&{5&cPs#2XRru0_r|3V03L}59b&Y2Ti=#!sWWt4okwDFN8JlH22s~WY zPVpKfKkP^GtKbz;D`s%Vj~sb}XU{`WK^0Ly#jFi)PFMP=KD6!tR^Am5^Z^u@|eKPK0URf zQ!NR8ZM1F$TTCfe15DevZ!%qN8coGTUZO>V=tJ_F!|;_+3V1bG$_8MjV~XsxKx-9z zagVvxppabx1Glq){xrQVfkF1vLax9DuVbS7N^0&2RrR^oVlkHz%)VCCZCISJ^MO&( zJLu000@KPbM6hd$DpO#uq#y4@gl(n;7uD#u7_@byN#M96ukSlafuD4dTSHs{P=!JL zot-k$amCTZV_nR^a1TGM3GF;q9X<>hkAvDmy(e-)?h>FkOc@WEnck~7W~4PZU0Y%i z)K!9Q#2%_yhP{2w-YkIMEk`2198Yp{yHHYHk%P~d1HV|9+GhBzVjoJNY^vwv>Eg!? z1Vb(#z{mTpSMKj*bwyALT7YgM9iJul7_&KADh_X{fi6gCt1|+m%s`tW{K#OX3v$+X zt~&Bx^W1U^#6k8XpKW=*jqQahK_DcYU}2{chN-r=u)7x#pNSaIu0U|W-GAuKyYChx zFr{soq|X~pt^szrn7qDL)Ww>-E@rx!t^}n(jdC7zlBL~y8amo`!|C^YIuU1$79f z;f0j!VKJd1NM+X)KP$HIUsb24$$%P>H_l3$qL*27P8p+b-JW@?U~NmwRcOyZG1_tiIq} z`wLn_sl6FoCH)jIf?dV(#Bi9K?``4ah4|g=yo^UV>djn$Ktk27kD(& zO+>bQ;F4I}iznrBi&3%rK2t7BJ;Ww436*P@blK>J#1x$UOIl|I7sfSTy_GA7l^kbP z%TumaSDxe5PHc@eo^4<6&MUsnT*DvwW`6(^ej>&Js0Vf~`ocEON~oRjEby2G$Vq=7 z4A#zRSCKocZ>9vm-6zHsWY50e@E3JF(-mD{5fe}hR<0dn7*J$xo$ofJKVot>uvco* z%OhOFh&&w3_Ks;wm1E0zo`E_B0lh9%X7;^kpY{_RN^TdshB`4+cU#s=hgA+`$E_Dpy4gy5OtnvLKv^LGE~Yx`Vu_V5W{N%p7S(6@3D zF=Nv7L;1dA^L-t_jACl|pcr!uz%_5_AJJDr@=7wJrhT(=7Bdk6B0LC}#Rt)T7H&LbWDgIc zC5=8btH`GdCW!#{7qVt1eyI2LcK06HWQO`-4B}*uo$d(%@#!$K%#)%3Qy<=Q_CBNa9izv6_L3kfycm9t2s#yb1wb-0bb90i|A zH-H$V)xIyfv#hd1tUBB%${tGO0pM=a)dDb`Lr3bMsiu;Vj$t*|Wa75c+u?i>FLN4^ z(tJ|Flipj1DuD0@b))Cj;Cay{NXR#nd$BI~n9nl{5gsInH6}9%v5XbSu1*5ZLN_Zw z6??tAr?Hjic(tEsbKZn_L^}*>QJj%QP0y|j*q&I>Xu!s38J{VA$6Y0;pCYB+BLrf< zsN&c1#($8B?tm#c>3)XkaYw=^Kx^KJ0`!>1LYi!B@^IqlW7-c9h!_=Q8B??sZKFN- z!?}=)LBQHnq6`jrDd++?nwKr3e$1dW@t}}vij;z}+tf&U7X7~bRo zuNNyFD-S5a#1C~#aA~;232LC6($tqgBRTLSov5ag#p{RHcJ?T=&93$5I@ zyvB}Wmh*C#HHi{pJ#&*n6LI_(jQ#EJw%xYZ2YttR-D_>S6@>6Y*i^C4V%nw}6Czk7 z^2UEi{{fRG5Nav4Q4#@5oAiYbl|)|%6)K`Yt2L&fVrjtr0PII(FW7tSz1Dr5)6eHS z=W(3p@4D|5nAaS0jPV`cG3J=_IDQZ3b=`aI53x2VVN35+qON4W2GP0$KG@f^PW|@C z7g3!n8rU+>jpvI&?B-*e<8Dd--CNwF$JLIH)XHIw;8JXb1JXlab=jMCUO*9oIQ|*Mg%MQR5n|DHiIiir>7`0lu59cR%NPF7k&QcUS=Ed6Yp(Okog9%=SSjzj0Bb)!KlBzns8G2@`r(ER5o|ttTw_lk}rq7 zwpPv>XlGAN?;m|5Y}ry^oo`N43FplK01yC4L_t(d7s<-Wy?B138+V!Hy25k-RKKV!M&r$2in{0KwSaDN`c#`w@)XAnC4abwX~z(w#v#m zMHu=D=0QK+3pl{V*c;jvIL?K${mB;BQ*Yk(h95}Ve?_*n*IjA9!ywzm*g1Y!e1rC0 zLs%hjo!ej5L79RmnQ)jodeyJR2L`vm{wkBZt+O|=jbU`Yd*r^k!ww^dJHynf(%sdP zZOa;Lf4D95iE;sruK>`+pto~AZ2pRpm#1fx2RrK|B0$bJZV0hDf?^$w+pPrhQ2 z{cWB71DE_KLTh+aTIviwaaT;!>J4WC>%Zor39&X(J*~jrO+be|eGD9&Sq>0-NLqP5 zR{H$m$c~F!pyk_&|2o&Q1p77aFa8GPSw^9vv!4%mVMgP@2ZnuE_L_W(YGwE^`|H2- zOZnb^@PEj9d^g^|KU^)jl4dNNN*>z>H%7P6*>HxItS_P@{_FqnujJqVslS&cI65C-t6T$>LxC|11CEzm(tl+kZ#qYp^^rGsFAvR6L`z6X;)L!Vc(&RP# zS_(Ohl5Y$ZB{&}Er!DxRv$^dj~C~f<$&=8AMBYj8l zKg=CG(5|ta9q1~2i-rs|Q_I@QcK5n*Q7SO+vo`F#4-n6g*ix}8-H2)bGzKoa9WUe67Drg z*Sw-Vk^r)Fh!1<_B7k3WFnWhq44~%1Al94$+uy6t<^+ws^=q12cDs^YBtr)MzQ7^lfhI__r!<9+NdzDisN$Ab&P7L741^`yhL^{ zTFQ=n+iKK1Hm05K%06LS-x!MFpXqMBRxh;J`2kj&#bD1o&6KYYIrH1SjSiek_9*~b zN6jUmjEA2qbKBrL_%AA#q5qE{q%Imh$IikxtA3q+djdKEtgz4aUTxor`8ZnQ4bu0U zmXLSV3SB@1P&-_u5 zCYH}}pbrNd-jB1-)i4oA%=sWY7wB}PRk;K3J6#a!v?RK`E|S@wMzso^#f+3YA&j~E zibJw;*=ps&M(0fq-u)Zn$1NChlQjBrZ1;VYZurJ{7sd21ygs;Cufreuf^D4hHQ+)9 zQ_dYeu&QD}0G6}UmC%0%@k%zwT9lHtQ&Dp%xHb&5XHI={#W9WPQ-UK*cD9~$O-lc~?D^fhLtEhZz zX;Knm82Vvgvhsaz_-Mf|NcCBmfw@KUJ}E5$4UtI){cUT)<7u6Z4-JsVtdHAfa0>On zYyU86(H-#4bQg8`%{r#dwGyxkg=R@$Qp|m^D8EPn&{5!9PqQU7sJn2cY^((c>4~D@ zqLO$HJ|iTiut^YLT(g@6A~=O6q(|8M#F(~r~E$|veAa-RGmu-NNad$pDe zVbDhggTJ=`noRJM_@Phn^T{v&hkrin2fq$BNN6PN8wRzWE6rHjW{dbUq91bki-~{s zU;gjqL7_!_2o5`BC69R|2w7;p#{mwUU;35L`L!Pq$9EGTkB{k1B~2e&pokjv1S}7o z@b35lYYhA_U$3w7!@u{-`G5bhKa}tP;?L&s6@Nj(Umr}Uv6IM}O6U{#HHq63O!lW< zd(vyyA<0=C1}9?OywTG1j9j8U0+DP4i@U%f|I}iy`iAL!H3Cu|eCB|mdLOounJ7(t zrq6uEv4rzVg_o76&?6I<6p{+YqFO#DC>Iqx2xKOgfD>XX4^}N@=Y^^{u~R*PhkwBi9gp*_U-|_S*JkpqU$UUAx@DtiQjev6wO{C%zV- zHYzq2hk#FD4zhinG3*(2w2}2@=h!O@o(n5;fi4STdp@fuxWKHtXCX!4mJPTn_S+Pk zYBDilA5TXC`B8Jx&5w$`;|oVYU9S|oaSYG@EqloAk-vyNEzrywN!5JO#e^@6yvE$| z8SEkAtB-QJm)hG@)74h2`wh4l0Qa=W3gr^bd@~E^KC8#9&qCI{Vw}@hWa-vlnhMC> zmlVYfTM$AUfYfQXUtqWmeOOwgh?Y|4EZ^pDY}|RXW~=zU=9ph@_0d1xhkkeBpcK@e z9{$jK8KU|nZKK}?#T9YkS9d%NL4$81RGt`y`)F>QYsTok3U+5nfb~BvH;MtPY#GZY zmev-++jz$X-#CXr)3=2I>5YRIOI$Cup?7KU0wgPO05ZQQ-cm*@jceUWI+cciKRh@5 z2H%$wLwguZtWNJ(`u@h5KuAY9wO$Jt^Ua@|E@-WOMGc-r<(Md@0hGAnDR1Z)JSor8 za2NRBGCzb&?TaC*L&8y5ZD}`39GoeM@iscJMN?o07r z<%tomNsP}cG=N7wlUIbbZWm&?kAy|MQ0u{nj0{nx@^ddgr|bN=V^nJ53Cu)hAB-~8ME@%;Ax z#y^k$%$iRmQ;|9F_x3oQ6ax4)@_zAGICq)kWZ6*`{e`;jJ5T|3b87_xg64zJ!tuWl z81RAk^?a4*um7O`+5bQI$^Sf`K7E&8b)Nb3nC8z+W+tKU(9@Q+{V=!#|7(&!p(HpM zeaPEg;(uC%7cmh3YXHp9x05L9N%=WuS!A(K`D~)O#kjGQO$dIFmElDsjdDxC^5x)R+s_n-0RNZ)BBV}Q}&{{IYhxy0Xa!W#hyJC5h#y{FZU#^Sdqz9a|BOJ^~{RcxKeBp zH@^ZlJ_A5P@xOxDeTK&|3Gr)h%q-r=E3O|0@08Db1O`B1PwP<@z*XU{s-BmTaOTp( z_=YhVV3%IEHnJ#88Z~g7kXn{Kbt_;oF^2}B5WZK}P>W=nxyHg@b?$T5W7+U2i0>3r zv@1Lx`>XB3o8vw=M?={$E;-Bianlf;E{x%x#ObI?Ou`~wU@v;Gw{uppW0HM5lw0-u z1baR(%*-4E=T!>}nAKe?g!lYL4-j|cAG-Gap=giuUKLFD>hCJl%3W5fAaSc#80|^c zt+jAq?bWY~#rgL8o_Oa*e2`*yt!4E&dt3~(1r;k&=S3KT3JUPDw&zNcH5KC72S$k# zM_oB%9B5Ah7<)Yix%!?Igw_Wof@W%6+Yq2rKn)bB_%d+BG}XB4?7Q@}!7j6!Wyf3% zDuB*!eNYCrm_egBT1wm@@8hl74R1{TwrHN%YVJV_Ezqm}BD(6cTqMj+pBWjCI%ioV z6hHp0ysg{W##K+gBD!1*)X>oo!1iK}DauxWyVYDyHBn|?K={n0csly9H&}n~O#+80 z@V)>uUkJ{}qX68|FKqS@QFfOAhbyKWcke6!Wxe$pZLplN)Lk?#kpQSV5ME5pH2~hi z`)d`f;rGCYq(-~+j^rsI_0juW7zf8<;&4ert-3KKr$IV!4tpEpR1p-#&*sSB`SU|vU7CGB71%;}rc1qy;~PR|w!M0v_Ps=Rbz%!?2$Y|W z(Y_dJfo4%=DPf>lFS=&Ti{r#1KmlF1*e^34^SoS%oG>hms(ar(M9wk=3C)Owa2CQ;an!`aP=^ge$&wb2 zE(|%S41Xd=Cu{$qi6yQ~*rP#WPmq;7gT3NkB&=HDJpjk%Nf6Y2#$Sr*xc z5YnnaJKLZo0D5@tvYuzGi@+wvl!`NOg3W6N2%oykrojX_4#>d;B$Km>dRxn2BVDX1 z2Zu>ANom5Y{tX+jU(wZP9TVbnFb1-J7f)GctggV`ZC@n z{GH&C;yJ<~#@Sk~b>kYxqF+V(64;n~r3yAv7jDSZOvm8WU}1v>2HQ!mn#g$XLbpg% zZlH$!^*Hrd-YMFbTqJ4>!F)}C)q6=)xUU#|oueS=Ap#QB$9+54;qj!2OS5pb+&NYi z1h8Nq3-4G}J1`W-BDUA`;JAZ)F=sZ&Z6=!C&peR&EX+92em|eVI6mJbv|{e{Hq^;K zY%Ej$AtZXZ8SKfdTivB@3*q`ayqgMG9R=E1Rt(OEk4PCxeW_$N{*QKgRKz?#akMgNk)uoS9OADTZ?QM+0L_u_Tq7&1}8?Zw^60{gyZ0L$H2sOn9GAsph>_||}} zh1@9iHFwQ#L|#c(>7BsaWXNxZ&B4*$K~{X$MEx#FpAL`*<2Yn?D|IUfrY zeJyf#5ilI4XRm;CicwgaX0h`!^LzI$ZvcTt>Ul0DhA)QM93nN$g=?5A&&IgVM-l-g zXAD{~W{#q-Ce*3_!FUf6uyOaqys7qr-6;Qe*hB+I^x4-S zH%6%yK4XQ(^I^cVR55J%+Pf}aCpy$&tI#U)gfiQN)Z8wK;9@8BgV^|xh^?5D4nM%P z2Y)FBe%ysyHjO=2m8Di3D~r2Zqpe^NU<-JQulbc{<145TrC5m7$_g%D)5gN$_YpqZ z@*yD^{zM>fkO%&vxApkMhyG`N?$7@3^Edv`|1dxOul|qn)Bm&oaen%L@rU!%fAWvy zrz(FmKlvyB4dh?XPyLB4KdJtc|9XDj{gTxE~}xsIMpS&j@(!(3dvYlYc@VK0$t__LF<~$^Y%2%FqAh|8pK+ z{aDC|{XR{yMnJj=$?%=Qr69dYWdzxLMg*}hIl*Se zfu=1jWF28|Oe$~Re1*KlJ2!3;2Dz-vF@k1uR{Np>u+iJX-s{LI6-w}K7oXtFP#cM3k*R1S3t?W-=*v&v zDDslJT@0oeD^#;MOk*NP=z}1AN|kf)DsKX;rC2ZvV^+I}y$e{wV%R}5ReHCS!^T_R z@HV~y3MfOJxjDRE_~33}DqyTj;&)tW1o~<;ud;LcR=ce`090hyC?F$3ET8(VLdu)mnH=V%MY61j#1QI@q0&Tq|h5Bgs;cUuL8JJxhbdbxdE+RWuN^HY-5Mgn(Rlh z*Ja4K(;+Ut&xj#-n|I>%v3-LHzs*MK6Rz$a5m$g3I5w`KmxtB3i?V&K*stW1lN8N0 z2LE)tljIIjJl2m>tT7DchhXu8XxBWX+b?*Q6VvO((uj8D#O!^WtmmN}RhrA|fxULo zxy+%p`p;pcK}S_dq- zjFqcqbJjW96b#+TWb>P1cIKBhnaf-E->+pohZ52 zFQgj>=rpcu^kwOP^h9oP51gJa@)Q7OEov9WzoxiS|H^*>955%vueDpnukzW_H&EhNzEes|*vHl~@Q>&@k7%E;w zD^^~WuAmHUwNY%DC|}wA!&e+R-`yL=h61?fx;8P0w3>H>vHZoGuMf}H^MG-k{nq6* zS1dz8%7*lqs)PZ&R}F=HRb2SOQhl*Kd?o>=+u|_$evr&2{sjj}OSoTUdx<<~?mwYp zePZ@Jp`1lAR6RE_U;=>fUG;lpj2UX+3_#v;P z*Prtf|Kfi$zv(A_N5200Nk{tw2}jG*g-X*;f5S(W;6391@ZS&l5WkrT#Qn^Pdba*W zaNi9=VBv*h%gurCd_F;+QD?rJpZ&9cIzNMidmv!Jm`*d!xY!D(;kBiI^234nJA}se z&p`@9U@aC5aUkk39{_@!!u|%ANq|{W7ji|Bt6>|d4UhaqgA3n&Xa;bRWA4Q7nRx5~ z?4-v*U*ZMad4jwAGb~3z@9&~$q1x+Zj zuFa@ti5YJpjLpO4`ml|o2qb_r0_;T(EnzaY`-U+?oQ?JEhK4fdPtfA=d1B9V;#hPX zeIyLZnU?Ji3TY1ue9N#0D4fZ4#zVfc}4N+bb0Z&yR)#Flx1aNbnB8y55T@(t?W^Jo8=u-b%*Si+!kvABZ|n@*OR`q z`5|wGxEHp9HT!+c+ZgR>OzVS??+!OMdMpCe)7z%bmcF)v$WS!^%u@TA?TIOsc+{hD zME{t#viIYBTiA3;!rIR!WqjtX&C24YiEi5!=RT|c z5xbw=W?(vklm0U~QfQEnpEA2vBMt+2lAYXyey?~g7-r{2Yr1@Us*(2J@STFeY(PeX8i@CA3^O+&sVPsXleZy=yq_O87f;)o+=F-G z!!5+ZOv;-yU7pu7$p-Q^czVPqQ;c#sX6~^=Zb1k#vksaWk5{fvxhvgQo9Ep)I`zvu zFADaT*yS%`ALjL}3?NMF9hL4^z6CH;FAyNS7h#Y=FRa*-vT>V)&jd(fNX!e_(T}4+8&^C{OYPd@ydvOzf0X@!EUF`&;e3F^D z#QI2oDS=|ID1OjF<~%XR9Z28jtd(o{W%Zkm5|5G4p{_~Cbd?R>^kvVEvt0;Uz@&yPn=Ihtl{^5{1BU7XR!$bA}fK$ zUG^_R;w2E8ZlU+cCu)6_?|k>GeD&S$i`P>Xn*`j}sLVc5 z#XkLoj%a+B)zEo%#K~VAYEfT~c-U`YESAL{n1}l`LKx%}QH3)?CAQCpQGW9|4+%mc zD{*Bn|B_{4tF6%(b%4rg?15>fO+yf)T_|-ZB_ao3j@$|%VQgy$y^x{)Ggl04)0aOm z)^_ZPXeY>i7b(QFN=4lCMNQLsV2Zb8f|R@SX*m7=M!{bgO#={^58gdgQ`HpCes*}P zRWYtI!?TFwtF$cNkw%r>cuOz_T4plI`^)1iL z7(^^U3T4>>1BeNV%}QqaJ*zGeCUB~XtyoIT8hHhTvi(b~M1Wp;a9!S0Hm=)P^K*|< z@SaFhUE(POkXc2r@-iq#9VSdqkk=4AUiJ`xS!^)KHhl;=*d7 zv5#5x?ozw?1m5$dh*uM%NatB%U-zNy|v>JbDtry z>{S?9__(fNiDQ!ZeRJbWs3E`i`L*NovDSj9T^!ab3&ZK5)e1b-j}!|TT%Ns)P|y!myIi)_e)P9IcNs zvC^jIH3XC!frovHVeNUJ0e3U9@8ERxp+wHOh;_e((Ks)AA6lIvTZ@GtU(zktF4 zSFtYf#gKMd#6R;2Ujclk^h$G}s*7WniZkq?+i&nw>unjL6P9%FLUFp9ANg?JFLX0L zt{jBziY@BYurR62?XJ7}_Kjm1?>9&6ds@Rl0V*@M3F!T!>fg&nxPhDpo(}oSmo%_B zeaKtxyCzpIRP>Bn9&7tuSD$CiE--*JyRSCC_;~!- zqu%a zzSx#Venf0DTFPglOHEaURAx;%?Md$jb#h=pW_btMcJ?r~t=Ia#mv%WCFG_2?Lvre4 zc!?!=yy>nZMyT*mN8!r!g+cZNm#Xst2l(KRo2Lr?s$E&2ls1j;~`4` zVfJg@W-7Udp*rU|xPv0iSlhtq^EM!_nk)#qgmIYoY>L4oVbfggk)Y;v_(L?Ge~*h_ zllMD$a{b+vtTOvcvdt*@I6U*tWdq}UkZMoI74idyJnO7hoUYrp-nej0er(jl_fwUo zLf^DS9H#}Tw$d8uz=5!{S7yvlc3-?F#BhRzTGcFk8N<^+s7Tw3IIIPL=Niw0vG@>+ zYS3TO++xADomhVn{h+Dn8O%rb7c%40c#S@T@7-NVwh-on!l>>JEx7E-Nj`s_-|}Dk zC-M`&>tD$F?0<|87KL1D#`lo#VKJf5BY*qv|1f-xCc1o_)X_9Yjj+L(!~G`UVVyWw=_N{*TW7Jq{V#md*bk1>TpEZ*hyKF- zENsJLeT=d=tNKCC@Qfdi*a=Z4v9JeKaJmE9sXb{cxb_ht_Za|Zbr*Ic$iy&`OAFn3 zMxc9^WA6Hrtcwif;jV&R4*byV=omwStPJ;F5O*bQbg`{Ak`$UaR@SWgdJ0IC34gc~ zR{VX_<9<&rDGo3`04~fKS>W(-;Zwl?cSr~bpVj%~4BPWWB8#1t#!J3%1B0TRCkT0i z7OP;_M?0}$Xoan+L%rR{#P65MB#3c)S==d;+MqSiNt#1$9G9lpHd(nlL+^4!gvH%M zow#SZ2PKYi6r^>CovI?dlNtkH@ zMlp0J4zuQmrPacgi3?w5alCO4LzL!GZ!x?xJ;^aYsEd46Ir@TQo|u4|WR)(aQ`gqw z_t@efYn|^y=F1|$)FOn!x$Xncxm=XX@SgNryv9D?F}J$O+oj)Qyjcff%lA@OvGauP z(Ec)#Y;CpqLwxZaP)z@l`YcQf&V^qZoEfrn4ZjKX8!td(-)MECcdhNdN*w>bA0nH( zSNouJfOCx6xepU7w z2RXp!IB$6#yor#Gys9OF$9`=ZhguC2OiD>z%RdLb&X>$Rapy?syA-Od*)IesToH9{R`b9&=f9zWEL zUp0FsiFYE=Cvwm6q?wtGT!~k60WXFYQ*CDV*7OnTbPE@1shTQ5DWLHtV)SNtR0E5o zrNur>%f3WhfiTmk9&rGy-a~bGAJVZSHP2$+gYVjxwP1VFDVn|YY!${38@9B6O*X`B7EuC#HCPOoc|k{4U5)#0 zUvjEE8zcYBG0r{|&o1XJS;Y<3Zaa-)^HvF;J~asu#9CO?+2xN9)NP3k#R*5jOdex2 z+JxgUS6iW|5Nf(F22_4g&*|alf#vTJZOH|k1Xd$dqNo-COwX2hy$UZ4W#I&dJk0AC zXv`4o%x4t9;+u{?>o9lBl>_x11YB;Srd+7$2dagx8-|0G< z`m(1@D$K%8J!`0rP&1IN_FSLyPyN2%pWpDCeq)vx5+3qCxeWLrKZzd_zxV6UeDC|= zU;iH&{|tf7MOt4D`UIdaKU~u&{)Eq=e8^w8EA#n>$*1q+SO3O;mjCpR|G|9y{qJWi zPA|h=95%g+o+Wv%1QVe?cH;taAMEAXhD>75wKW+;0fu-dHj^TR0LxpPU?tXoGYWOj zkAXbBhk^uTLe;8(d;icwDasBEN}r%N<{3nc7cOHkkyESr&*Ko+ELQ071js5BDq{?1 zUhsEl5j~R>tr-plC-_(#abXT(6fqXQJ}iK}Y;u7s>=7^(h)1Yu@`At|5UxBuBMy`B zAnrCq(-J1jQ^I~E0#QOpe+zj_W0Yie(ma&H? zF#;hrEcaZu^`&8-abtS(FLlanE|!NyH3$1Lp>7CX?*wnP2^dV{mJD(4himY9IeBUp7(gJAwl^NTzG>>8Wu%`X2wR;aY69;D#p`>_clS^y!5)`=-D*PR4*2U z*|ShBN4$?>{Y%NjBFlUwdn}%%soqn$zzatVlk*>|s!Oq@iG0~-bIxLH=!Ijl0uHID zYvNuetyyd%Sjn9fMiI36Z#L%6NW6{OV9e_%#TymGD<=$nWQlPf;v73Pk}UVZysKmb z@U}5zr4q&Zz5rT0BnXr>6wY{hCR1vA~a z9F{lmHsio!`q*GK#iq24z68>a0%+v$U(x9P80w2ae3j30 zhDTS_#5TSfB#L%69$UgqaGIn&U}hOx#8Z@<>~i2E2I!K;TK_lPY(Nj&A)*Dt?zxE&*X@F9qzAD>Ino zzx+SGlOO!--^yS6WB*Ei@b~_1@`?B6`87#T{*qvy&1&;loM9CYg(yc2;#qbdm+}m_ zfwIDog92Zk1Rd{Tz|W}d|WLK}k$qV{C7Ss^|9nfbH=I&t)#O&~`lMiA;k zSz!TfZa}NlN@3P zLgCAS3mcyr*ps3EZO1sKb7>#zyWmRz01yC4L_t)MFIHLZN(#C@%h?8N&vn(L^ku4# zyGd{B;_PlEXTuj0y}~u3gHZ`XALXps<&Fx|A^w%42Bqh9(D1!zqkARV$k@cVZsr(Z zA(gmJc0Z);d(Ivn0N&nra{a|gGI0#rZ_y~-k21Ij^ES3kHTHRZo#GRqJ$Ov*b~P8TZ7=Fj>UtcLHBJt~bwsnAYdG#mX9G>?=hi`W4a_&sN z*BtDMT~})Eg{6EvW*GNg_}4Injc@4K#a*`Fwe?w;;d;Ho zfzpS9?i9c%AN@X0=pCx<_o<6-&4Mf&Ba4Z<=eu2k%iMSOp1%`btIW6=Uj^D^5!6Cm zQ+K#I1xz>lVzTX=0pUWrss0Z6Ot-h!81G}C0uVD|``+|c%mGA)v7$knoGXd>(!${7 zzsyU6Cj9cyc1R6@b>(0)qig8;#fUOZ>%uQ;)n}1^%q*QtE>L}A7$pgA0ZF(i+9Dp%QC6rvabN~0GuzLHL6lj@ur^xdcQs54 zHB7;+kFnBdF|Ac=uQk71Bq7XQQ>p^5*jd(HcM&<0nCC+QfcK~Lf_WqDN^i038wv5( zR(yE^kVD+S3PT%bKl?g>Z&Q+Tpo_8ksfhrau{LU~SL`$8<@3oj(9WKDo$q!^8R`U~0O1M4b>FJOp!4~!(hv2X7v zjG_{F9%}%cz8l&NCVnXMU6w}0c=i^u$1wV}z6yEc{g=ka;-E|()?n^W!*ID<;}04c z+=La*j!%H&DNP|e`!TkEq|D8O(`c8&tmVvR-N3-CYqb51a;80CLaWSr_ zMG_`TO6=z$G<*dC(g(=^*mo{`z}5y{+`k_-Niz@|01hqSKiC7sT$~dX0plLIy=h1` zjyC2ygUK#o??DgR2tt4v8Z?Ncd#zp=Tqq#qXdpcU`7m8CX%Y_eM0OSxXi*ed%0j5l;fX%w?9ec8CLJ8u|s{^9U8-ZZN z3QFAU#5ZSU_!DL2ZETbsIQs=dcm(FKU~DU`%j%q&qLXH_?x|mk5}v!ynFQYf{o$Qa z12K0+3|<{G5%SEh>SFzs8DdO5K5zx#^KD1#n_}#sHBYiV zAGpfc4so_3E}~m|HmytKUQw}kd*9N^^p9S!lD({C8`(X`f-_-sL9gtyE^M&vU?+I_ zIKGM8@wd==vIl{of>qhP9!qDjT6_7@-)P9r+nB59jq&aP>QbS}-7-BF}`=soH@{34zuPC4^sCVpzO%7k?aaBcWZa#+2Ns#hKXrXX3Wk8~RIuoI$mDJKR+eVfGBhYqt&?qGtwJ zNidU49JPsS+t&WNsdtt+%;Qpy32hGGmfOC|NHAK>!n|FKvJZyaZEx+p;9T#{rQ3vw zh*gNm)=2{c~gw@8zcc{Fzx0t*Q9pw$eT!{0& z4+?EtuJ7QwYb}XgG>9|PpM-9FFcmfIt)`0wmD(-{eYO-e`~a%>!}@_QRqRxwCS zP5moAU~Em*K@uKeR$3n2(!mZIl;piH9y6B-U)++iNTxiclV)EK7_wqfrBY0o^h9Ap6_xt}qK2gUtcb8B$COzQ~XIcQ(3HF0ZPxk)$>tD-%{=fX645K)j&Z)B^XYaOTWvz7d>?TuE zP<$2+n?E_6b(WymRohJNOx0pDnNf;#tI=dJO~BNNe+(eh7sm>4`V1$@r(|X_c^mXP z{7u#r9RkPz;@gJ5uPAvu(yw(uqwZZiecB$6+(niWG-9dN;&xX2?7Q3QnbYxv`NSgJ zRoyVlGkU<*pl`ocL=@1F8n?gv>PhS^9Yyk(-J^W(B6(&8BEn3Yl2XVe9cE7^fy7%9 z|7CtQn1pT~ItUw%5?J#j#=DIg{3x8IeC{sP3PV0B^@keND+fJcSPv;iJ`<1$buz*@ zY{L3+5@UYA>{E;)J~JisNvVXr+mdnju1?%y{{?0C05?xAX2WsSNw6Mi44;_~17I=- z>aO)fDlSB?$kqVG@v8BeczfLjwsRABA~*#0+%{)Av%X(%eqX|2LS&8IP{QjT?MfIs z{uoRS$BcrP6icd;6lY-`JIOoe4kQIa2htY%J{K^zAdww-3tj?q?56m&w8;2HrE_F_V}cml*(N z)M3;PE(S9Um4eBf3~O$FJ&;Rd+Ek9Ot?Vv(P8gluVSz)vCBR-Y7{_ zJ?#sIciS6zdvL>LCYesv`9YO(%)??*gf(U443dsz*^9BEIdx~dUH6fTK=!h_39(}6 zcrdkcgE$AT@_<0sET+?fdyl(Kxr%Z2-1RA}Ep`)efIs#FNz6-VZ8>15eK-w#IhRlm z#6U2eaom`WA|H^chrBGDJMS`#nqusdmv3};zAYFA6@a4vog28WMC2P{f@0ukvenV$%V;9!=?V2wZC=7xTMGCcH8jBl1xvSxgZw65 zNqz+(hHkk4tw2)0IPWzKg16*pzP80M2+4?UHw@zjvESxMnhhL!PGeen$s4o!hGaR(P94<6Gw#RT1U~0XvdV7)Iz_e~nBEq9S z&l_`34pRud$Z#t6d&y67+d1T|x-Qm%s;tZme$ZP|m#2lMbRShZR(322IfT=pfxm*m z%&n6=?OsWgP2pu?yai zuUp}ZRz|=HvkqUYuvW4!fR8V1*82duCai=H;g{b{$!-n!A)%a5osEP>vWpJ!AodOe zlhv3U_g3?P=lV;Av1u?Vl&ke%Kl5#aY}(~u*7k#QO`c^Mfgjkzhc}87gNz>repfyi zlJ{T!=YCgy+dunX=WO6S+Xt~d*_oNv3%QT{{I7h@ulz8Ky$2a5iX|5r5jC~SqCcYf z#CaA~7JL5Wzx{9Km;aOhD37ncOZgT53;aC8l|JH!HS=&Ao7L@N+%w>1YXf>~Kfli_ z7`X=9V-5n|uTeWA6&oaDVS1z8a7hSU17ey;6e@H-aqO`XbGw0r1#L2e5MM}Z4u*n? zfFJI$JzFxFLBuC}oSG}cpVgEH?~9as|ABghSA`HfAg9mGP!n5$82Ns1;#T9mvL)2h z0q0r7DdLH`Maa{y4#T2|d1FiixX%XSkUwmbgKO^nAvuR-xnB(&=9}re9Nvp7$52?T ziGqAZmT(q_?sIE|m_+QM4^*eSWfu03GvovpR7{?|?r`>)K!CTn2Li+gp7*xGANr?I z@*HRrAovMR9IHY0fyWf8Py$Vq6ec#Q5-N3BuE@K&a6Zn}JuYlA+(R!jEzQ5sNv{M8_G>Nh8#-XXm^V&yH zd2=poYuJ0r+G4U+3F8(Sd}yq16OftqRf8B>-pqjSTgxQ4+3#x-{5aIgWuqtLTp0d6 zEpR)>fM-o*28X^Ex^Dsce8V~9ceU;oHcIX`?sY~C@!r-A=Q1zd2(+Avt9BCdYnEt7 zIRk(`?-+K1$ILzCYzGVD0RsYa*Wakkuub}Xf><1vmhvV(Bf}J`>LOR6P}{h{8XuPB z#&DVZ3{7TUXX-W-SRuOd&G7{W>u}xz^p4CJ000mGNkly^%1p;?PzReysYU>f$&X%sIbVFkrbIDm$|mjyRiA|)H>U28D_Gm0C-u^|5HU)o z_o*)qCMN;VSHkczcL0Z3ybI1X$-yj&Y2Dtx2Dl{^j-rP^g3S7{UjSg@P8|02gjX3{ z_~4!g%2sB8slYnlT@U>pD`79tVqeu42hGeq2rlm6?%kkr5w7Oo`SSIPQQJ7Ynq36a zujlmT24r#|z;r-Ivx2i_>@DvD+&kFkeh(bmxc#Vss6+|Y77I4J9k)=IFh~H$fY9~B z;(N7>L-UO9LE-JgY8+4SvfWi*A*B1|CRZp89?$$R)E-#4_Q77N))m5eo1o@hh_?5m zRtTqirbEcy)D3yrjc>26ObE7g`(X9eN1#}03s?>B+rTBo&(aG%wuS3MWNYRX*xEBF zzDQ8oVk3UFXq<1eB$g(GxIGXSD|xKjW#_qG{_MV4NtT0kUV$N3FJ*atB@B5A zW(nF#%3Se7s>kD_GI8pxF#1K2QnKONgmF9PvTIyUO5+G2>zbimd?vLAhBv|+8dC>2 zT?lF)DMVmKOR=1s0afc`Pa?&7elF{|X@9z@LE<^17`6wVl|CUTR$9OSuDDhUEJLC=&Y zICo}SZs0y)tObsXsqVd~4@Q z_7eaEGkiX+P*NCp#5_NW>vE6mpC5VdzNp!F=yf6Zu9(E>Jz55LE@>dz)B7ZX&&mc= zBnP`SsL~&J>HtGwb%M*ej*fd67O*FD6$^Z8_5Lt) z2R2=K1Q0FwV9ypDoh_0TVzPP*9ALqF$Uuu%xMKSdw&-HRrZyL}&KTOxA&+tE3^38s zSRUZhdpo$7)@M9M5+1&Pk+L|&3JIA!z=EEEGhrAZwh%CYGPy|11+$%FJD1A_j+y4* zP-{^GYeSoPR#8miteuy6>27*EdyB43rFgUUa@|nlLU5Rob(auOj8|Tcy!YIOS!5`f z)LIBE$;xgpf<1B=#nl5$S3Iww0hA!J5T|-DRvO3J<#-`#kh=gCR3Y?sU6DOO&&0Q4 zJ?zkdvl7M$HpIf@EdaMT4eBeo6SO`ek7P$ZF!dVce7VMjp)aTjB_2fkieoby;KW>R zxR2~{1$fW9#qqb=Yja>5x8#-`1Mb#pkEkph-)g4<)eL%&9_1Ks(%xU z-kv>>a(pcWkYgMS1=Qxit1SwwtAA;rPU#wcDXZ@tOS}*@z(uxUH^pZf{D$z@EmeHv zZtKQ&9yP^v6zrq0m?w;7>q*}Yo{S_V*a(4KqwwXRO+nq$c(J?oF{+H-)NdHez2GrF z#@2Qp#x-xk7sedo4NLx3fx)G*wxn7^y=!RY^+M-I3~9$$j2IK<>@(r`g)oo@6qj|vLTEcz*1Qge3*7)cW8rVdRR;mqy9J*awx)06 zct?eS#~r!iNK)zYh0fgj+!zMAtl*vZQtsX%{cdfIn~1~Q7YT^nGHAR#58!b(z$#XG zBOY_}48r@i`4+lO4Mlz*oCX5MZ1^d1E{6GR$*#Ab*T!7C|7ab-?mgHDw%e1c*E^_x z_BCS})HuSC;8B&_C5Bej)}WHMeVh;|2$N9ymtr8-lxL`ZH?PHVqu4y3SFzaAt|N#r z!`K#x1LWboSW^m=Ay438H7)gsuTPbtX_^|7woO z^CLw48Uo192V{of7Tt@+s1S3PysXw9KFqEswgESL@cu#EdC)cZz|Kx&xTeFLwIK3g zlFu3qEF(a|{lELB?v5GZV=VhhH178xxAT9@E}s)aJzFN)#v_sYS@Z~6*Z=(8&n3W= zqF0{VC`t2H#6k>9($ao{J~A_T_?yp!0gu%)tk2K;4d%%>OU3LhEsyxN1mFhxd zt@sxL7|pZ1w$BFulZw>$#d*^3^7(+a?jko@aL}DAlwXKH`V&B+SjIWf6Lm zZ3*=z4E(fTYYzd-7+V7P!QoLSXvHJcbkii34#U2mJk!PbaG5-0HnV0j{0SR%w(@E} z!`@Ty^843TOS)5$lB!D16j?JM}*>ht(FS{uV0t?eBrf6le#n1_sL#VZ!KZm z@F0=lyU&L0O&J=pWIA9nf$CN3(_h$7m5{;3tn+N+XuusM3n0fF%uammMZVLvn`Y2+ zEDQx@yfOVFs^Z3#0-ojUdwdbY?xn8ioI`3V#m_R09kgn()jH94wZQS^D42WlUes7A zp|LLbylKZInn3VuZmI7xh(iE91+P=!FoE~HZ1jE?(#P7n%xhdV#My2K=z+A`4uOS~ z6UTDd0@sj^y>8CB_Y%M2+PoUM{MunyLy%@X+S)~4Yvb^kFH_c-RUy>*+y$E3eniJ5 zF+*$PfK2`C24kg_?b1t&+#GR(XnCs3y?n5R?OTSzGZ|T!_J!&MvbI}vv+E)bZp;*8 zYGL!V)uH&t-q$cL#-)MSq%5H~(ImPj4%6*I>56wXy(l7`Rza{?v&lz+Ve!3;_2hiu zw5TK{w-?8Tis^o;Xmg`^vW?_67Xr+_c1UVW`Cv+GMWjhFpXh z@1Z=S0_ffa;B=D%isNr@VHIF;i$T*fYbS1N)JeHBfcavqH0B*_%M~6?tsRNgSvrZJ zS(yv#%Sl@4Z$GXNWu13}#2Z=LdO`KSa9eLsLT~)+H*#de!h+E)Ja?(Ib_!lkMf;_@RW~f3@N>gk4%oVqL!5xSyQp z5ZjXz=p!>j8b$->O_)0A2S?0B0d^0>En$$t>5}%87z64LNYjU$I2LG|ZG{M%=lzaJ zAwHhfI5s)Bp{)#moZ;8>Cm|X7ei&RD3N3RQvR3@e780#(U$cM*VfG! z(8EFih%n)ejlRN!_|PFo3`)&o59gC^jUgAZ)n#!Xiw|Ie*FHq+;@j~0Oet!MaaTj8 zE%r>Gzs^7X-}$}yjsK=umf3zoNbG?Ph)`F4g(Tv zdMQuN&wiYf6=>x_<{+UYJE#a@Sz}C8Mn-^;MGeRU-V1()E5|u=lk)T>u^Ln#YpKLw z2UW4e&XTk;^f-&{$z6{JAs9>ofVi!<0!=63UaV!%`!8;OL|nWD3NVu{ahPMzR04e> zBpHBmy_=ZeVQXWnTFl1#Bb`QRvz#!jSv*TGp|>;vGYkpDgvHw{@DrSg#XS5#uu3E& zSG-{Y=JaF&#Az-G4n46&W~PvN-b)xWV2T6-)dV_Mtk-8_4X~MEWvUd+79~D3?^%69 zPaf{`@#MmXcj-Z$Fu2)Kp7m$(4)YfS1Oi$iVaEiq+-}ugc!&UgTSW&n4j&v9a$i2p zVS7%6)?k4#eO57#oH0O6sJVvr?kAigGUHe-$TA0!gUcksjQdxBn1#^JciZocW7RRD z+=kAnV8)VF?BfD|7Lc-c#W{IeKT6~)CxWlT_Ov~ zJ?41oT}R@yWv!mA1`xWBf^5%-o2v(+r;++-i+6iDg&m31s6{S zF)c7vks4h%ZS`G|`@SfrMA$s{IG}3Whrl3Lj*wqFp|9e`-o?brKLp=x`72j9JFw*S z;xv>ZSF3x=O%18rPcQ-5Kb(b$ABNagImlgzP_A)rA*l1bBDvCx#1M;i&EyK_HH^+j zd|uIQoosNQ?D0P4u#XRspX}KI4=0#wto@AEZ;*?ufESL8|I9}xAfclzhg|n>G$fZ`kIS!+NzWW~l z;hpuqites9*<)?Y^_;*2`(yLFF4#yW4O4Om$02-SO%s%N3Bi4f6XQc%jmp9p;@aM; zvD)7>3U|3;3&UK+z@=|n0AYi@zX5VCg-KNJmfJtZQ9BNw$r-Hn7Acshx^O02s~v}2 z?iK>G*I&)TjJ)ccLBA37@(Hw77}%_x$dJH&000mGNkl{kTIk+Od-le zn}VIjE98cAt<*^14$CCH($JfCWYqfQf!WgX|1&^BC!lP`Kdw?`kqrpv$A0|B`3r#G z$7?g0;qVy(L){@s-XgXV8v8qc|Lgpa&;MgJpeM`ufChV z_n-Wg{LH`mKMkqLrw2P}Jrd3q#;^xu_I?6QbO#EPC@rvBS1f`GSTf`!q0Y`BR|4c^ zL3qt^`SgSbfC?AxUp_3kvHr>vn=%=EpIv`uLmw{F_oG(?#~Fx?%SB=m8aiumhr0{I zx(ReP88G^jgxGHb8We-IUf&tMcDN$V zv@ZAKzQZlBd4^1$4l9W}tE<2KDFY)Wl9x$%y)qQ^PVzpQZXX!%Sc$I8;IP5cBd?9< z1RN}!T{Ya;1FrRR##0W@MAtn--U3?yW?K$3K!~WKIhh%br-ZTlvi4+(7ZD(3iUG?U zH6ZrT+k@C3B8xjyN1vF?IA~lr2eEwU?Km~qNcjT%D?;M&R~arw>l zLkywXS1w64#Wy$jdSSfl%MNi)!8T!t9up9NDOM7;a~-F+HpVi5V6vX+AuzuYyMX&H zA(?oKhWEJAGkB;|%Xde!QE1vT7?enk=CX{3agZ1)?EtEZOZG7SAXo3PSh@R|F*U*? z#KO!HT>ws-P=i*vTrur8x!`%vZ=49T=8sqwy_C}BB5lXDHG#Ds6TX__E^*AUjM?T0 z>a_Rilh}9GNG1{x+(j>l^F!aSnm%+ar;4_it``aJ|4gHlPGaREdHY_*34-~`+=rikPUVSID{?0Yhx$W`(_ zD0qr_o*iE7s`t*rUI>$nK#1c&ns!iqEsdSp=R&T~n{KuGFAEpv)d3FE?|np=yeOUr z>z>^Vk^rv-{Vn9REh#jZc)#gbT}?4ohebcJLiX4I_HAG@cRI#37g^Y)b-{TZ;nfN7 z+q@Xpj#uWUyu7u6y+`dG8<2$*x|YRmgTuj8`>Oevt%QXa)Q@SuV^QP5?!)(~)ZChQ$sLYV}veO|hrgLfSk77ioXpf8G zyHt!I6C`}$ECkJodp2|!Hy1mni-ri4XQ7qXMO>Sd1pdYRa7J^DA8i@75V>Um3=(AP zFc$KfgLxyj0cZeq&4#*wsN0Oj7JsSo7tpru;ecNye1pRojSA!2Vh|4GV)UFlLl#rt1mf zZ_B&e*6uOsJrWP_QalqrOsXPHiUDVL^u&T@>|fCa9&KAX*8FojzILmCiStj142gur4}OvaIo0a|L+H1 z|M2Vl#P9m&^IQL`zccHzU+cqPoKT?WlaiOda+g>o4}>A#of6p&s|_2GlZth^be3VUWCMAm<)zLP@EGsLFP9aSH3( zC$y8cZXNp|%UD4D5K}II_vY0MxU#b**I)-byw4~E2M*st#O&p66hF6wb7{cqt1WWtvn=_`8SZ^TB^#e>5d?wU$5Pt!Zt z+>p!jnI^#GK=wA2ir4}hz8=8wdpG4KGZX)?B*aof2HryO8*eNf)0G7SO6&y>G6z2U zipNF4fLh8xUe<(%+3O~&F>yt%0*%au_Oeh4%9!edo-3Fe)@rRVFqpgMi%Q@)Hq_|x ziF}wQ1Kiu--%QREcAfWpgGUyzbeIGSRTmtutEs|%tv1%L5uQcC;rqr4L}+NIk_d74 zi3ZSZ=gZ;wN+58wZ66bmIS6yBz2e5&c^j6}ePiU}Y>bsjv$==JS^sRhF@hWH`tr1t!p*oF5hCO>KBo|=T+i#p(qrG7w^uhA z!R#T*Q`#kGW8YZ)n%gl~ge=z0!(i^d!Q-2w-qA1C6F3~bce%+ec)WMp?kgvz>Q|jr zbhhZNn7B6J`ey1Xh0YVN-P)J6T0vg4>{;=Nl$Sl0M`thU_@Hq27b=hhF|{dQrWQAV z;S(74F&{UWaSV$!)cc1Uz%>gdwiWF#D8Ou0@!G~TAl;_64k^J-hol=UvX=`(OKJ5T z@$|a(FS36L5-pL?+SNIHAC*mk%2gKNTJjOJ*si665ZAxz#(d#TWF?9pT8lA|&I=>| zwH@4)2n8*l_)P_UadDvBbX;RXr09J^jB$#l>_rNw2P~jHSQCCb=@0sBFFMkQV28m| zw=qN<0H$m9`;{+;XWLk7)C9X7zRZic^v8xqWm8uAel4~~vO$lWZEt{z*<<@sw|}i5 z%**?rcZx?XY^?*ah1SPJ&%KC9=F5x5u8bvwtVV~`|C{RFY~k+Vb6U8B6QA{@!@4&Y zq;QEiC!l+YXi`@0p{v}0Y#qSeY~r55k7Mh}^F~t3Jf1ZL9I%qgcA^nN#FS@8b z;WW0kJNE83Yh2Gr3KpwzRKwH)15WD;L|@|P-40aC$Bx?HaiB-$;M4(kY7 zmS4KTjC0h4+M!Sx=>1><5vNUFc^d+ijuU=4m*=lKxP#pZpJ`*=qZo0u9Bc9+>4CVH z`x@H!c0BIQnE5@Dz9jPf1z}5iKHHCj*k#ZDRI)d1F9tDG6z%t_?oT3c4`ZWE*x~Mv?hCKlt>WeE(;ECV%r!{GojPy zJgJXnv)(&#idrNT4M7xf`k&tYByv#uF9e2uPQ6J|aUqqO`Py9VB)qeb!{0(A)}SU0 zumvZ;=9GB^?yyv-tEoaJgGZdT7CA$K_BHN99b(cJcTGyJ?~~A&Amm6X4iz18esHBk%SwbZS344S5Y<6dWN+_P4xpBVV?b94 zpuL8%jH!`si%b3dan z7LkQ^s=XiWfX5+-uHs_Y0WUjx?dA8>62Ku`EuQUcC$C{=dJt8+(zaUT!s`^jmlHaQ zx?0E^^<};+h#wv$8M`C~x6<&_K1lJ~p1~)m=Xl}($9Jl>4zZ(%zDi$MuSJLZ^0XIe zoeOEm;?!}5KC+hty&&wrh)s(du7HDt2bdkW05uF$%WgB2%4+~J6Hg(kqmX11muX1I zoqRfdqkBPp#yN6Aoiz7@aTgWf7<|JM-i%ydf0yK3h^V*YIJc(7c|0 zvXS%XcZHQbc1Fr@U09nj@qWZ^nRMHQa;p2Hhzop>3*6dO{%HbcJv7r^>vjQPYATp9 zUd=+G56=bPrY`D78-8a=d2tGUTuSM(aSvbDZ&_ANbcfYC6R~Y=8-Q34{cn>+%&F{q z+bq`)&7A|@xW4_w0lL_Gd~)=LYc3W+0y^c#ZT2E8FJBCCp~lwzJ%;L{TQ#=buB+=_ z?w&T-j^ran(4h;JEnNlm!?<+dgkgU3us=+QH;!!`j$g`+*K5!lz}t4Hy{`8sjE@O$ z-+-oUza~pl(ah}Q8rP#1^MxgEXzY>Y%pF;#9%L(l{p8AEVeSyC_G$y%42~wM`^;c1 z@~@vShmZO&&3Om>!Rn4=AD9}oE}hoT`!J+5^2$v8bhu9`#pLjPSH*)eR(LbJ?!}BJ zp(pO__Yd+y0t(XS!|CzDSa61`MMzm7oosao#6^f#t$0nepm&5A)06@Pne0=KWiqU< zxoV0jA*%KR#qz(k*1575TxKD7ao{kuZh?ZmSB&sENQH3H7o4j^-UkPI7+|knQR!#w32Ng2zgSLzW_rKs5;_F`Xl*A-tziu3H9ptU&!of+dbXW{U!g*bo`Gv{{T) zCIBlTri_r7{@m>j{6ae;J_L9>7pN)Epr5dc000mGNklJlJr@@=`Wkq#iSO-e9qU8@8s)W{$76aPyWID z+Ryz=hQDZd@S$nOLgcDE5Op44%qSt<4{vlzWUm;pL+K)mjhCA#)M?L|7l%*MtDW#N zo20WDFJ8@%gJ6jU^l~N5@ymj#JwLkGX(U*LNw@628&P}a>mG|npuj9r zy%xRbz6+$gmxEI(iv{{Y!j0c1hDl~E>MBBu<(WBW4lm9FngZB*v7qAjfK30eFv*?p zmwbbr_`yP&4w0zCaK}N9MLjci2+oMYRE2zGz`Gx|dCE{!S;n|pG1+pr;0=;RRt+39 z69ZH{W@pIHHwJO0u=hs-rU23!Rsqtc7Yohon7v>%Wev}14Pnta3Bez~{gg9tn6a(P zb6-(~1mViFx^z?^1K z_&XAuI5xuS9FZ=B0m#Atyf94WY!Hh%dGpLUzD-{dIQEW;Z_*rmYi`dpgh?Efd#=s- zTV^}Nn3J8Yo=JyxjkRNoU8r%OsxIJAH%9}%xQo8}OW~cST1>j=rCv_XXrn}!cAbHH=&;zE~I|R!n`UNRe(&Y#I54+{ZYRJuIVT-eyva~ z5-7M5dkCX(4v3lY&uD!Vxx$K(>MngOLf;hjI6YGJJ!~L1*25Qap||Ye5A#1hXHQu(`g9OmLY2-a?$Sgrw1$uvg{AGTHkPkb;Y7s@_x zm;uf`B;cqT>oSK@hp2O0b}@_V30>lMvO~WhDVK=V?geAP-6oMe0nfxg4IJR54Cyr& zXSc%H1o3wshSLiYhwLlGmf7)i)Yp=Wo|1+yx;f_rbmG1g4paXY>Ti2j98^0(x6nIZ zTY?G3^|db%vyaQKzDNX(xt|d3`+07vxFVp2KSKhxN@-ulfti_c6;LFi>C^2(Xl7J^ zOmS4_p*DzJj79Tx2NNze4lLCXS+B3L18zm=0~db>&Wg{mdJN3{^+6N0O+;F`2RJ#0 z70y!RItN^RshWP{o@w`+Di{_pc|D7+4!E7dKDav6U=n*GZ<82v1GkY~-Mwnnz*^~yj|Br2o>ax382pfgFDc zHOXzRm^#06o&41xH|CSxk;)7K({7Lu;HrUVb59g2ko$q~}#Xfx>l5_s-;l^+& z&u2OAj2Gb3r)NITr+ohYujMEItv{Ua|INRa$5-EJo=1kl!FGB~tgM_PwS!ND*)r># z+n8qwQMSuMFA6R8_q{OwT+=ad!pQ7hQwkV5W)hX5}&v4;N@!IOVUClC&j>a`WC zH-ZA-PTbFG9tZ?;S(!MKM$Rus5wy0NtyHE+q6ZYcvw~0h4kdYbLCOl)yjlWtA)S-!W%Zk43rqtwYaOo2(6y;Cef5_j_r{L%&OJ~f zh_g=7<0cK{8^d_7NkjPtW9`gk;3DWKV0^Qh>jzE(7tVM+#zpHiw^sOFwYcGj(e%Ku)upq*vxJR6nePaVlX+u%ZwyI z6`99-Lv%L)nUWpD8s4MA?*D(I!M@7+NSn<+xSnzWNDBO5@aE)-9>ly_nK> zp$G(~X%#SCROh>Wm2AKw7(4!GpS3+ZL?%(^vACGVg|3aXsk69?h#hJk$EY%E1=@ZN zD~WgkO!UkYY7+_eCM_(nwUTWP8V6Os0ie8wAw4xr%{KvQuN%VKMvIYg>b21mT*QdL zV_m^R&|%!A@QH#raZp@W_Rk=ErZvX|ZOHH6rVEQ_^>rt``xHN4lSFom+y#Lv<7*d# z*7OvjnPTLty8l~!%#s#6EiH0)!36@)LcHM%+ey6p)Mjb?1gl&WcS4LK{a{C~ z{f5f^<;r(|{KxZ8{hr^K@Qd-xgqchd4~!n12jDOL%IEy*50+l~PWhv44sWIR(a+7E zkv$&N`2%J>OhM**`XxfIt! z48Vg+2d(j>wmkqrBhG}FnX%;x0U$DnEv(5T#N$BY#k~~c%X@6>UNUcgib7-tIIT}k zIwswezZekr9T2{_Tq!W#o`$yI55*R`z|o#7_Bd&tK4vK*;r#0EW8mbKa2LZfhU%nV zGHDJRL(~4X!dONT%ty914p(Pp^HeMB?xLnc-wzPf@NFGlW8VFf)CK;ifWZEYJd=R! z|GSX->jB1okEi&9I2Cyj{hl&2)O}E6!a@LU81Tamad0O+n>GRy9)^?rizaR#Y3_?6 zZOOxM&x`*s0c_9hEFG3Zzo@wkLfBp3Ho#}bvCC+sIq!bnhWM5925T-8jU&t~!L!z6 z5l5Z58E*}3_BUVvrsZ#;!Z*&^;H%o;PxD4L-a=}!yv>EZDHwU<%(i{sE>6yv>{#B% zmn35FULE28$Z763gQhF#ZY!Qye=>zwwc@bNmzIkxkS1xY)HDe=Z~A_}#BR}mcvPBj zI~=QTZI;l2$J7k(J!a>ILC=>*K^FrGHTjYf31-p-{&g74LV1m*>E4D8-$yQ@hYUe; z4OQku!S%-lk?Tux`EQ5W&|Xchb<)Y)Q}B|T)T^-rj7_TnZ>Mi#gMGIdy2_jaxE4Gqv*?9`xm17EC8{mBjoqb(19!RDIdQCcLkYcjslB z>;cv6VoyrW*(DCP;tzwy3c9=tjnqYt#nAYgW72j(m|k2dT>zNIbusTL7Qq@^ED=p) zKcy4Hr*(o(Fn!HSzk;Gi7U(+mQ8a67A(DGsob^H%K?RkakhoXRc?EKhWpL^GMUK`+ zMjSVn2HU2_KJNB6W8qxe<%_Y7KSx*n{~7zcpIetMy$`y^v)}GEX=5w4WQz_E;}0xA zI0;BW;3Oo(MB*RA2t^_X5hvjzRt^&N0g{Q}z(C*tkfNXnMFNBf7HPNbxZ8HOyOaKS z_g=I3{jRE-b3SXYx0Bj6YK(D>Ym6FI_x;TE%(dU%t)u9WxOk3>8oHGeJF3uPJzZku zot@}?Mb=gNn8Lv6hcRX`3u3eNJ`nNHOJm?0tg#pP-5Q5 zSo5%p<97~i43=`#r#RUAlx7_@_)$rX*(yQ5-c0GagEK$rbP8^<@V7^=O=K5e{93IvnHy_g}Mc5SHj&y7GbIu0SKdJ8B zgB zt_$_eHKJ}w9BUZHEY#R_s)_pTiNNP;;#P?d2f(5McuZ)!&Y-xTMGw6|_qUGvlH?$C zy7P@Iq;?XcJSK&i`NDGI-O~shZSQ^B;K~de7niW|`0^!x^1t#I^2h$s|5E%9+VzSE z?KYMckMohAQvYx9Z~wy&ieGLOznr?|;@?C+Nbo%7EBS8a2eKFcw)AiR)&F^Zy)s(J8m>hEW7xl$B@rlzMCy9%2e{84 z1+r_Ff@iOfFJbR3VHi^uadVVB@D{-{XC^a)_lSS#5x!iHL?KYWn0W+D8f6!9*AI`q z59bGr&QN#Jq^W`Plsp&fSS`i_-vK%s`*4F9Yc z!UbFvSBy?hmyF$lqQk&q1-k~xi@mxhj?lB*000mGNklhM_}i66Sm%@VyBQ_L>Am)JG>)a z)+!njo#}vk9nGGpfxWB~oVER~t;-@tlAp($2F8pI+HlUO4OiD%^>wbm7dLe`OrQWA zmAo2iY#Bp3NvviOM}3~N^8g2l-Zy#a*c|q(7uZwDkH#G2v)21&dGG&Z^u5L|bnb*l z6E@0m`4OXv(?IWmpQ|T<_bh+#u#e4Xk(la!mII07+LzmH4CFHEye{LoKT^^W<_Te0 z6vaH)R%0XE%s%Uj;d|uC?4ugqf>cHqfVX_Tr!;Ps$hf4?@|~~S<#`x`(3n(Q2$mOw z#g=gOkHTz~#=%x{O&(MnI|qyXSof4f?rCIWXBF0b=IKD33>F)(M*Gct_AU6jjdd!zQdMu16*NR{+gJz(P2D~1h{TOy$-*h24T6UIWEXu{3YML^Qry>!355Om7F zqW=sE3e3*O^qoL;PS?bz+~*O74ZY>Nr968edM2LW8_%C6K2CR>@K?rl_g38l$O~#6 zZKQ{OCKm|ZA#>l0M8MmY*BwvmlNhSx>jBv~aFrWBn+JTKCFHFPfVU94qYfJ6WN#nn zOe4p%N6qeq@fPwWx?v)FFH0$xhuu`PJMRr~m^%R?1YN~Cm0Q?LHUMq&8*M3}8baIA zdb?v23%!vU! zUf_cA7YZPBmj91;W|&_=~@1wmYbQKIvhjR-dgL(8vv(dA#L;wpFikBek$*= zFg$(-Z*k1(O(IG&s{%q01mnzaItM(ey&U@Mo+!lJFvNvipI&p43ejYtgQbHADX%vI zr*{s1URGKbfql+ykposy*MrWG!~Sc7JExG ztSQIZI=ie^#g^>B3Z8**@w*roTY3!FZ+>2rJ~XND84Zj~M%N|LkAN&;Q(a@n_(%=0qWoqWAIL zclq1D{UyK47iF@D(>Y}xCfE$$c0WY5(ckfIE&jsbOMX7T_Sb$nfA`<|t63jE7rzh> zHBGZ_u=SM>{x$r}gi;9s|A;4yHJO1u?2LrL)=3GA*a{2(uJ(hoO~Q?>^A`dSv@y}J ze2jf>d64$7Uo=U~Z9q%FUp;ZWBH+_A>ST_I!-2pC*>*bYly!HoKfPevP@^KI*_>?d`(JcVuyBhZVI z8TYMkP8h@uT0JyS_dN#1xk%jb(%qu@CYrB+Y(=EiH9pCW_QB?r{UTlL>K)O$x!N1$ zyw^}m=s|Vf1gyUsHW88&S)4CC_x3XKK^7W5>#KNQA`oI+*Asv60DUdY$LwjKKujxN zTix#nDzH^X!3A@nFaX#IO;T%k{g zS>b($E9cl@?6YGerF##s&a{eqnE=NRa?IRrYKI}ODXrlafM-5QPl9{yj6=Egj(cNQ z9~fn=cT^u?wge%~)Y+B|9V^cPV2=x)x{Z-*oYSIK!W~BpGYsAO*r}5k?xiNRH+8S+ zz-Gp%WNcM^8_VZG7~nFt2k@HR_u@yZlqYN0ZJyrCfW$k(+PGSI#jmx|zOO>BQd){= zC<2k0j)h<2ZGp>t0@{nK-Zy?=058IrKcH06^d;OMiqc*dVF8M4)wP$>th#rxa!x`i z?xVOr^dTlLZ$I=f25}xOK@qAP{M4}ASZ5c(Dk*&_c*~_d!J%!0V0aGO(Kk1ac~T>$ z2rK+Sr6TFcx#6e2Mu`)NPY5@Rqp;rRlhtjXk&?Su>Iq+GM}%)a2=m6PxdR#T4vpbd zky5R%aU~d?5RCN#vB7W?>%?&YLV7Ai`;#2-^?cu=zHcX9R9msMT2QUezM4XqsO$Me zLR-G05-*O;?1ie6z7jt7amnyc80bMU51btU^z0~R_RxAe$=T|trpdVe&e2o0*KWH} zEfzBL6)B~jJ!%Ugwc%>k?!xiFwn^lD0uo{tYo@Kv+K{`ONl$qQs=_6HYmxDWQ@ftp#D;AUw6?k%V%$lbnDmSA05AcW z+g|jwp;q zi@kt$VGUA+2V=zVm(I zUx`0{@(cW1|G$?1@ZbDb`D(@60N!)EH_edMv)IdH(X}{7p(P4?1_b9p?S~bJaiqu( z_yS+8vx@l_4x!F^-UB=IN{HJVxVd<}J3`goG2L-L@aZ90F}4?4aV{1G<>Xq^d-V%u z3_K{aNFkGbticab_<;g@)Qzv>N*oZW$1DVM zCleZaSZqrH`r5pd#cJ_B=JjmJ8tx(ggFDrhW{TVA49a40Ta;uH9t7xplGu7JvWQQk zeYJ=MWYOH>4&qoY2sCC!;^FBp>PTVN4FA9^vhf9S(8ci)Ko5Uou|P?Ky}$g+Uimy|gG8}$3GJY_jj`u- zEk?Bjp!=Y+hoLDx)I*$zP(_-XE7*o0J}o(h#4SyrQ%u7knx zM0D*g^nSM3)!}V3CskEDjE43FLY~IF7eZ&U8SzEL^DNLo`V7z{u@*t!iT@A9CrDtkL9q*C-ua9@jT=z|GPPo&{p1XA%L$9r4j^}>uUV}@kXaYT)&Ps- zp=Qr53I-HY;<;ymB20{p*O+~OB^O{Bs;n*nWT)xiUx+zeN zC`PWSqDFA-|dOV z8Vzu&>NMWx_vDD_DA;HE=#NPbG4pq$S=2oy7OZsy&zA7^lthf|<9|}yd9JS=pL}EF zt0TdL<4GX|v-zK~t$k7O`a_R_V_nm*&und}b;b;w3bw6vlNT+Ti= z_bQ+mtgJMK%_M@)s=d%|=NB}pr-hOj^MlJh@-}8iKmdk7dA|lBTcub8$ zADK6yTc^*5gB}#viX@(?=amr1@|P0<_U&0`aX)lx1AJ+H zHd_t_R{UO<;^s`ZWm)8fG1+M=1yIsZxUT6SjqSNCg3Nd~28Je#QBb#PdDnWRzj%qf z1xBITfj3wS9mnDvZow~O95fHKbSNQ`$CsbxPyM(5sr*C#@E^$!>%rITW!D_9{OxDGgw1TxX*+QSneE*g=EKDI}9Y~($;?oFg{nyeL!r)uSm1>5uy@bt-o>bTZFqRFm>S?#l^#ll#p8QW z|MJA@?N4qTFdr*o<34mmL--O_KB(U^)RC>gj%Rx4ATmSTKMOYh1J9k(VLux3tkv`4 zSVtd|UH2-l$;YrKdxMaxLxbj(;&L5J*p%9Y#sG|Sj_{5NfuwtsN6=V8MuB`_gR*YF zYd3FZ0)I037?~jvhH>ss+`C@%2t_j=8qfmfXRFUao>Ib)&+dU4Yv4}#80JKs?ESPC zcQIw8F)`dKVwho1e?&sPIHVKrvp`co^py_QzR;v*v2e^C$99^qsONKTz?yVDGuOS zP`O(BT_&8<8^XxvLD?rjNlEyJr&2)DVB8ToP8{#{C7(_Sc^+9Lp#WT^DcIS8v#)A% z3Tw(cTC;dB2T(xC9`9!n*)(`Kz9YWtJqI~EM!+dWId)B#@}_sU^A_7LS-4y0BVg&U z=6ZVutC4B!xk!3CdDYGxU-5qge-+nN)*&8y+{rtU@c;l207*naRC~l&-eb5i76vvG zj};CpAV06|aeDwhlt4;cJRe-md>VjnDLd&92x%Qf2x1+y0i;&<#d({h)j#i4ZI@{a zqlp-O*#K|zRpSjj=8loMw#9=bvV5%Q&ee_XlY)vbrd2`!_M!4NmiB6hpw3IZrS1&_ z?+xT4>bW2*XI$exgafOfsg6igj!Si|jj%Ff4Zzn?t*~G|K$#0+N;~HBGujVkLV+9y zuT08$UZO|{TQeO`>vD>krPOJSMb@hO%qT7-Vn5nX5j>2YM+EHo!Grrg3B9|uzlDW9 z;&>L_XA*kJ4(|Kdc3Z*pgO)@^Kh%WxCIsZ`-D=-C$JvR>-BBkm-c>>TPExIX zImKMWE7W&Ou)1hmR;GZ-6%Pi+bRQH`!n^Rk>kp?-pD830otO-aWFyWI_f zznN(atW)P1BPS;s~=P&|?AKFMjugr~?y!*#j4`2zWbl zzc>&EW}SX)8;iwE<+sp12|FKRGH*JLz_UwHP9A0GMc5C7r(>Hp3@9lwYVUx-%xdbhIwA&+zX z_U}FN_kQO~hA&_X=+4c=V{`eWXU&)V@RL83-}{ySPk!~U{EPYWd%u@_{Dk%?G;ow>}@?$p_l^Fq)1*M`K ztx_8PK243cWf~^sbLlcfYp_ftcCXXJ0ya&K%W@ciqiH4#mMd;a=WW~nR#ExQXEyWB1Oue_QK%7P4V;`!B zeW^j8Dcx7FM)tcyPF;JDiJv>LIpXzF3f?-rC4fBd2z)iplH`5eSLf!SM`6)7&WGLB zdo6E;K1U6_Xlxk~+IWKRwqX0ysK~}(TNCvZ>wvyy!I%5AinHvw;f156Qm~I=i+D+BOLzNp=PfgQNNIrB)r?(Be6c72&vQ(@+5WkcI@YbR7u3Oq&K;~;LaHqiTg2$s0;TWH!ByoZg_EuQgEViWyf+`y=Y>j)b)C`X_u}UVjN9StMCD5a`#@6J(FY9cDS-z& z?_>FmW~CW}j^pg>Zhap<0Clp;LtOx!loJLVZRrV47#}O!T&Up>mN2mIW~(mC5JxeG zKD$R_T|gJ_4eHE=zOO+O3#6vElQaBfG1P0A=DG`s-b*P2nEN?_@7{Gqy~8K-)DCA5 z-|>KwmOBPx#?=})C&=$jI=Pt`@#os_owP?RR8od7Ww0p0JeYe;KB&tIM%*u?JUgs7 z_%4z!`~|>&?!Wer|8#t=Ur6&&F7g(|{H1?k|BZj}L%#oExKE;Rtbqz4WMW?# zt3L7r|K|VuU;p*|%K!3zl%M|AZ)QGzfxIsUvrz6M-@jP#s8=2s5Bo!h;)~D0K@a{a zfP+mjwgPcKpuzLz7BOb(k~o9eC4}u8GSgCovyAJbqjsr=ZxJ6XF($xX&7qjgNQuLo zb?P@#pq5lh1Y$@n*l=_Dkg;<;hU z8u~iHD$g7-dJUTn(ldco^WxjrdVC3HLR??E8kZ~lK(RrtSOwu_XJ>BLEPPnI^GAHg z!&qQWc}wO>e|`vc;u4;?Lu#c%Jo33$W3-!%<*7?#@f|G)X=$KCtt}ye%+6I5Ko;j( zm}U%mcdi$n#U_ZEkC3SclUIQ}{EHSdLAaNuLCH-xhR%_lV8#Kyq2$2mJ+>wsF<(ke zZFGx|U2kCT+(4I^jo0~lIpoDzmN6IU?#CUrDp>Cqe92o9*%iIuaEZMSTms%uU=a_( zOH>Z$zy)9~s|F4kOv=WAd0DzghW8?Hk#mkGpEHBTVQyp<+g|>_aXDAhSNXgDnrG>L zrPXSWy89K;I&#ic&xNzM1U8|XcNZP2+3xZK0N?{z2`ke8>Q1@WPS2V6j*8Emp4kU9 zHdx$(asl;GOh`CB0Tj>86<9?G>p6v<&Z%QC|5*{IM5{2WGhZayYKj{+(zw?Bz`=;e0 z5>TQ49wm1ykW_NVX|0cO_e*;gkWh`Ut<=|eNuhO~2@aDW7s=WQz^vJ&&Z3D`chv&q z1?&E+Fadwqh%cKoahZCIf;9#at2`ECQ~R+`X^Z4vvKb3X4ohe(~iID>H@ z)%IL3Q4~3@KR8Ca`Ch!F?!lvk__{rPy)jCXwkD)bpz2|5FKBJlo;r|JyB1sN>}XfQ z)t{Cp_(py+%U$cel|s+ua@R(-V!im)JIvaXp-%uR4u78Eb1-|?2XJDp%n-wx_zwoW zAWQQIDuk20WDgnF(jFYO>gZez_O!(irsxx{^S(f6Z`8%yk!^U&MK45x%Fi6<9OXgs z(`BJolZJKS@hn-5p_tnuwSoIuE}j#?EP66idt8oOdudRXdFtEkC7mFVgH(yucw5ZZ z{S@2(+7$RkF|(+4S?{*7m&oYJG=!_+_YZ5F1&A;)m>!(7_O}%lU1Kl_ay1&n7r$|f z3l^%wVuHWeq4CmtkyI(NEln+Suh=5^xQX?{(6IoT3E+e%cFYjC`Ra!Flcu`C@XG;0 zng-ux(wKfY5BaoOqfZRKabnR%{M|j-3A+32Sj>2j)#>Q_QmWOKTT(kGds=F^pP~2) zqfJA(8r&qVfFRR9JS8@+0np&$_ofxTx8$Q=gjdO)Z}x$#l*M6|A%)-c+I#y8PnQ&f zh$)s;mYMRA?|zc}*?;c8pYMMD=RoaxGHmkTL=VzK{lE7+kNkcA?LS2x)ao6OyWkjq zu&-46`r#)($q&E%5Arwu%KtFG_aFYve0=u{gucL>^#4Oa%)$n>7jyI~D-rXH1TAFb z0t^vB>LotM7lX;5Z+nblWxSJrR z#Qj4Mrv0N*ylLP}H!Q7-48h^PM+aHtU^njR@p;z)6EOSmeZaKTk(Kyu80BB8*uuj0 zkxV9gv#t zq5Jn@i7>eob|fGJf6>r_xcU9dVTWC`O$RHuh&1|jBD z?kZ^!#a{%r#Wr<$qN-UG$U zh&egK)4zu{49fi#r_9D&MF6;GEfG9b?{7T|lMg!j)S22W%-UTzADY>F*m}&^GQ_dg z$w77MyO~-kcozNM2^FgqAaHek9aKRK#s*13w=dKOE8vbp+PZwW~ z7uc+fIwc_F3Mi41G1E7SY#63yZ1u!3z%9Id*-P&f>&6 zA>6x|eB^!1aoXFl%}JMGorE=KoNnF_0{*o6+W@9#RaKX4J_t7R?cDVUY^YaQ@7qiJ zH}rOPn`rfCP(pyMO@!G$RI9TGchM^V^Z$L+z@8am=AbZVCNqO$Z&TZ-5FS3E*`mVw zH035IvYmY$$F37NTMB{6`C2b-X&K34Zx5S&?Eeq z&3D+u2ejNaGr409UKr5F5Qu}FxK7tNE@?jrHWU0>20%fiA4=Bl= zR`oMNOqS867Gs@vx9CavrKZ!X|^D$!l2(E)MG#KF}=wP3j-{rT=37^Z(dCk$mCbs^&W~ zho5-z`KD=!?>X$R@NfSg=tUhrvx&mvHrx~O7tHUtw=W+*$@=N{`J4ax|0MtMU;lq5 zKl%C0$0Of;d}J+lM33Z;WQN{Cdkf9P%upkl%p~D#enDHD&r~){g;1w?Hb{_3%$3ei z-Kz_*oF=eX7X?Z`66aNty*-<;c%S{BLRb&sF4`3L=jThyP#2eK{Thv?-f&LO78&@= z^f35LNS&=gY~nvad=_CQa(7Ye&Ug>QS(Gq5woOYjdxh0J^nLyVuMoWmFZ|{m$Kx%Y zvOH^H!g!k$Uj*b~1~ctLheGBlX~62SGJ*{U$_7B}L)lzloB270W;J{DQ)3wwt#T;+W? ze7-;w7?iVgoF$w0pp6wwbR%AYeezcK-K!?)$!>IO0p7tlunj4RPNGT&{&9?-Z4(_r z%nbj8pEIGb)K4-=r3()80C^7R+kO_tU5ZQMkAg?zmCXLE$v!U1X-!3rezmD496-06 z`g^&zy}hJ;l+=YXXu!!3%pSZzK*S~;iMNkn7$RydLH1@cWjk>NLUyBz7h0nTq7;ke?u^fW6jq&hmFCFD+ zyy}|A(|<Y!f!LMmWm$0N&=sHs>vXxiJ~OH)D4?XoCHG@^h;YfE-k8Z#1&kb+jG5 zYzW?qXOgz?nVJFTH4sriI~ND2u{F$vt6)C20Ls&$Bja&=O?n0l9{C3L4ajqBA#KO^ zdiSm8ei~|cdjjYy0G!hmaRM^6l-a>}nfhsre4PH$rGEv?OH&DzJDa<0BUfNBa{`0* zmxz6-`;VO5RC+k(KJVl;o`DN(z!&1uigdXgw82l&yOET4pUY@6pK&KF|8koChzAF<6)$FlascjefZwPwg?2GOKc776{Oo&Eem z7rq4j*?;Dr$uIuVKN|OjDlPusUEiOwU;CY(<~M&AkKoFKe->1o2YQ8)84mvCeMX@2Yf{(nur^UME=|IxDrlW-u$joJe__NC~{SsB7Bc|?ocqz3uNNa!6_FcR+7 z{MuXsB@^z6V3vtXEAgEw4kw8FO&si61EP7vsyI|(7lp8Sp{iNd>T6+)eN@(5G(K>& zXC}ccU%xyT+Jz7pWc(YD zJjcwy#YG2eaj(gWJyM$=IIi`_$#(G{o^0axJDFr_aRWa;N-nD&+)-W3A3rY5pj^!$a zW>vR_wme`IEbGawG#X>k)L0tuh-;w;=_|?j2yY&T!4GH;`kx<*7p@_O{|kWHoom%^K0jZ+E zp@FPd=>~ylZkwzNU%}ij8~&Z*3NbG^oKe?;dw&AVCGgBy*VO z$o-bc`C8!F8|oF&QC`TlE~d6IG&6hO&=?s>UtWet^2O!mHTiVadA z5S%%H*Zs1wI$Oei^~mkH(71#W{V=Y^Om;jS+GQ5ii`F(0ZAHqFhO{weShRDy#E`G5 z5U+kMMa;W*Z$2PbQpCk8^HjjQ8l1&1$x1(+@#U$kym0ziYy!63+%4oZE^eH=w!UWE z6vKbJW==N~;~SJ;#0Xh_i;fa2)&N%{)J&7Jhns^D$rILbW7CtuLSgLwFgg!rZ;x!K3S%KL0G5u?i$^r2 z_YP@vjKA%ZHd2tKq^()wJzpr?z$AWY54Pbg^hQ0Rd|#0~`Cwyza)%? zc;r0jySrjjv2!HNX4#{?<^zC6`geddV!M=wzv$3f^5O8813f#Ch|TOChI<5IGc58% z5q=m}Bv0H{!2$tegYJz62pgpu|KnZaAj_0wK;#=oxRSmT z3mZ~;*4ivMo4MCe=<+tQJ@Z1hie)CU-!|&Baf`g2RsYPBtU%v zv4-!+j+mG|pol2~-P42u{Japai?1oiS`~T@2BBV&yvq?Ilny{>_kV^WS#fe6JRz5{w##F=$Ug1{ue9fKablr9?+ z#yS&^d7N10N!4i6hfoDrojsOLPaSg=5w%iVgL@=XD|_f^@xEzpV*74MLkH8mVoc#F zlq=4gjoLjJGp%idI(;tJUn@IL5)Wv#qa`hTu*AD7w2`_s;qLdU-d;#!!dWMUgDgX6 zm2!UWH7#x*{!HqRS%byhXksxbpf6wy*R6HgXvbM=6VrT(hu0BTu8p=7Dy@u{)vYJ*S@RfT5O{*G>p3Cdrl~97On4`$APeq{6^triOdwX~3)&8R zjI>Wll~5O98deGz11lF@+Cr253{y5=VQ%r7g@(Le)WAcEiZahuc zp4%ATo|ZDS`9kO*;TI|MCVR|G_P?Fkem96YR}ybB9mBd`#v!Z+kWeEIFjWj{T;F=f zUZGn1mOzE2eiQtjnUHDiNB+T$VJ7T3BdHAhF!Yg4XkhJ+wqrvH@fKF=A8`+2bEK%B zii4%7)Yi5MZLrVNAOYsZHTQK8GwXE!>bV-Msz*T(H*?!;Reqz;^{jY_Ep=MFN1Njmhb=W}lw%G~_E*K1*}Z zfwOaUlwBhPOtT$pD7ga)vz~f-1`8?P4xyn7lO-VCn}R}=PB?$0hhe^f3O+d5TnQ_= zhT9|g`cfP?3TOBd$s5caI2T_(z~3hvYxqbOMr#@eAAcD_=Ys6t_E<0}NM*kJ zJcvtc-+nQwlW4Lgd@=l`f8xK9KmK3%Q}jg+@07AkdjJ3s07*naRQTOXsxANR-})i{ z(N9Bs<@?7M`rP-m=>Lbuq81r^k@_iL_tQmF+( z+(8(^+HIIs6MJ26|42@ZidVf(}d(=DwRmf9^w0Dt5l9${uc65Mo5*Ry;88)qMI zt$=K?au@^}Uaf<#0!lc*hj*`m7 zXbi`_uq}@Q2wfXTm~4zYmmof7L!Y#l=(|I_!J~&- z_3cYT{Kzw=e~aO~OyuBn80VmAW4`l+;eH%BKN`8H3iegc659gXudU zhvS7qBTR_Q?P@3`Xdvc86YA&Cu}vTvKIV5_oNl95QqMFqpaU|!%MB23?b-PSCw1gy zkFnv2Yb6ez`3#`;64_bM#tHQ>6t zZZ!6m(?@mFCZC7@Yr`A!+Hd@$G%Bnf90S0h(#ypE*4#`Z9$dDzqOacl-E|{({kpRG zRAjywWO`~sg}Z!;9_Lelq1p>odHK!N5pt-QCu z4mTd&x~Vl!^jdAaF+vyYzv0M!us)yG4rAZnr2%w)?H7D5ujsaJk5}&wu2(I~BC+O=eOq2=0+Ic{?kZ)w&dst=cYq}qJkmkgj zBjxh6l{f!#XT}J^`%8RLLjm~aeAa$OS4c^Rr68#4yAY-|D5C6vmF|hZr>q~#c}E(c zre*Smk(vq@NO<1`Wd8uHkNx$OpJpw7>abc=^h%y%;2Bm5zU{4Fe6V^Jbf-X#$o7q?M|2O|@{gCg;|IL5r|CGP`SO1m#@Ss39T^O&) z4U&Z~OzyfD$-cOW4<`hfD*uo&hYVs}(F98-NeCBED(b<#0J{I)X|Mb(fHdVntm!@_ z44*qEBZ-~x{X*{-{CM~H#=4Wg)lk5e?QOMC;$NhYiNW?kB#^r}%Yr{9_XmI=iL0?~ zPqVM4u^Ft`X5rdtvNVuEs) zoXqp!@9AwM56;6)XGVX}@FWZi4Xq6SgnG-Rb)XWI4~A8OT4QQxZKD=E<~Fx6I9l$u zpBv@bkByu=m)?ZfG&D*E4~|P&`4WHLLV+nkx|Q}_j4p3^RTqd%@j(kwCKR+p_Ba8Y zF@V0)oL3Z70Oc&VJ-`?d^s_2`(TC8&sl)H>L;4Ef z)=$=rPKga6*L9?lsCf;7jW$Hdd7|ce+pCa$b*ys(2 z&2hBJJZkTWf1+C%y}jzwIm&3-2oZedTP|29D09EM0?pERibyG+5F7(aSa{+0 zR)+}$WAAq$eWmY>7#!x_x`t83pn8Y46?e&Vw8+!jhIjZ%g-_8pza*Lj4Z%|!LMKb^ z;G^l1eA_wOjeOGOfLx7f6=fe>z#zgb)*$%Tlk*tbA{l}XCKKnhTPtnfdhaowdVenp z!_<;4;bQ3GN1LM=LGC6UqE^^?8CwMCk(H@~Vh%9{6AOH{g+qHf3b^nQA5%?35^*lW zEuPmc2uF2jFuyVBo0)HNo}1+i3S!+oTDuD%9ruq4BwnlKkY zGie0)BQp{pQp;!e`tx5>GHg@^J@)4`To)L0jd;&96J|2$U4=17C&rCgn`=8)PJLe- zf*#Xi?zP11zcL|QX)PAA(pOvKh<$(1kk2kx!=+89P+a_rAu4WcgiZnXBoBzJX@8H< zO~Wq2t7jWbk)}{d8)|xnIxDIr2v>dqe70Z}nXQ|&NsqTfdFFH>##~5ifHCph;}IME zNMg0c>iNBkmEh$JxV&3B!+x8e9f!!|BB%v2oKOz5EPft>SUbGu14yM*Cei1HLNXWt zxj5LYx)g4&Xi5V*@9t!A8Oy*DS1`b|h*r6m29ZeZQYWE-Ejxf6h8vSTWNx$l;1YXH zOW50?oPa2~$20b9M@#@c-EXn|ik}Y{peZ_GEaXg0rA>S?a7vc=(cG{Wa#2Dr&`>{~ zC*Huj%`@_>o~(|bC-T+JVQ_8fn~iPvo=EbRL|DH z``$6a;4n;#GdZL8>1WXg6y^zJ=M&u6emlc(|J-PUpAaJY1{Cf+IaoT3YRt?N$2>a? zAs9>yF!HfQm5`A$J}H9=po$+cm{?38invnfO=(tunQ$Q2DEeGJLvZ@pLfE@Q?J0hk zD%~9jjU-(J5vG(l_QQ$i*R2q*{%ToyJ%fhIo1!DIT>bzdE>C%~&KU>+?G@uW`%X5& zMR|s{LCVmzy_3Fe>%fb^nVN%*E+snn{)U3OlW@%) zoy+3lg$IpjmWZw9nY@TlaEQp-B8N?x1~=wvUYpiY#-FE%u-a<%AypmPJ_HW4xJ2x&KFA$}Kl<3rtFYHGcm@2L z{$kqHE}|NXe0RB7OQ%?kW3{#m;o{ZQxbMzM-|h~&wJGs_pf<1iWyy(jh1gM8KVw2T zTkX#34ECI&{A9p+Zb_NhQLOXM4c>FAd$EQ`IxPV~J* zNNPLAKIChVBW{4UxT3*Spbui4Dy8Gs<@KDM1c8+7FJ!lRcD58v z1j8WC+F5fj5hljoM*BhIZ-1u{F~y&cP2?Tww?{l`^W6l_s`Q;%yB5cUfQ|1nszV{N z!xnWlRz9!^Jm8{2rJP@sdaudZnjkZcul$$)*?&I2_=|s-;J_YGHsXb0&2Rkfm;9aI z;@|#H_VLW_lY&k3bn`)5G$#6rglQZ~=+Qda< z5HvM?;VU~3G?lJ8w~U`=wiOWn*3G*-0|pwJvVn$H*fO$~zn&e2TH| zX@za&>*Ly`W)PYF2LWBMkU$;}pa zL6~Xt#F)_!;~da?5^inaPZO>&b1+pWTol_oFp_qYJ2v#MK&$y@UhGQ9^yEKM(TKfwiY01c$XD^dQNc{y+!W#kdP>rk{ta zxQha49y}k{_V_u#c(!KXP>&)SvP=p?6uaMZj*Ei83a)V!08>Z7{F!t2up8gp=aqhy z@NQB z)V?Gf&7lrvuF4s!!0N~ShNh}(m%7={Y04H^E>D@KmG?>{`7EA4pwFate*Cjz=Re~b zSBUqrrR>L`rN~fMD7oaJTkr;LK-*X}sAqyWddWvW52pR*tZSFQQWw=y=$pP8*x`$X zQJkNqVlK)GzkDo8a31T*yNddkSdZkj?r46gJ5r5`z8LZ>&wHE zi^!eX25S_WhH&euK~M_`-c+a51N$wQTPpOJDkHlv@iEkp3l<2b#Abj3vznG z%05^a5)r21F&~=%6rYuUJm9&pI3lml=D_xa84{Qfm|<+*WdeL-9;&D7>sz*ohki>z+5qp1g^eEeOf_sN5K@IyNZr-MR+Q z*AuwVPQYANwG4L7RqoxMlrSir&3tmxvG9@FcPY8|xg(1Y=8c8tyINm=c7 zLTdIn7V%o>HIK}Po&rk+PRW?)y{RkNLyB?tD$;{tkw>}o`9Wgx2v^u)Kl5{Gi{#1- zXGwnXkNxrdssGkr3}lLkJz~IfKKLc;um8R8^JV>{VYZ0h75xhUKDo2_^8fvOHE8G8$^Of#PnjpoL}5L7TPd|e^? zX^+&=?}iYjDu~7gpc{H z?A;a-c;lIRStfA*z*;`q+wp<6Tc=sj262v65PKPc;N*^z@`MI!Zm@blFg*9(n7x_> z7~e$V)=obM`g3-}_HJI87p%iFAu*o@P~JiP*2o@~5IdYXdIwpJBc|YWPFL=ZixvOy z1uFJh9>+W^m_fFeP|&!Aj;R~YCFBdz&tWpmYRrXTw^9>Bu^vVPl8(Pk)}b7Nl}zVZ z(%}KbTdBw{(0cIS`#a&Q8tMX%-o=m7d=t<8a{D==OPWe)8I3ng_bKfY&v@mTLFWR* zoX0fku8XtXR6jE>WoaN+W5RSrP7SQix+SvUFpKAA9DrzYu{cDgh`or|!+x{ty%sNS zlKt6f9-;dTFr&SLdRHc`?s9W-$KF!-)b0;f1fU#+wddR#Zvo9+WguO_WZpxF;+m~O zE`qrW)Yx?}nVtp3l&fHVV=k+HBfQETqZQupB6}H>g7UDC@7|bwx%X#|9A)!*9xrOU zuHTl^d}~l}>c7`9ZTmw!C%zG5U&-_B+_)*>ROSvk4mmrZ2f8ZvFbi~n?7gB@$x5~{ zc@06muQZg4WGCg07cK%()pO;^oTp`1X6#$nilcWsSc)iG1!9H@M3uKvgq~>bcp@6g zvknY>RL_pSA2y4kgREjKgE#@aYt72V>kzDV=^KI}L7_D~A5Eyc1&q+t$BtuMKyIz8 z3qP05()}F&>>2+oJHG$88Fp#ZyFSk+{vtb|5dC6s?*)Vj$eQLsG7qKu9tlI(+>1vp z_?46;ZD7R@?ehZx1`sqS}L;g>t%u%ehbs zwc=teXtKOVuNU`xrfNx0Btfy<#r=pt0hQ)0ZE<&!74y|6=~=Fa0BZ{>%ON#%jK$f9*f|KEL(5 zEB8FJCjOg$O0wq<`6>SI|AXJkul|+4oZtJ^zn)v#9;@6yH4)|_&}2V*#Pby!W^IqO*9?veQkg`9%0o>rvK7l!8TCU4mytPPUW{)E2AwpFG z%%Y1oVXPhFvW|s6NT@xz<66)Tw6-R|guil- zjq4d8BB06J$+o;-^fU*TR`V1d$zRJYe1e;L!ArKTJ~+w%PYi( z#YHWk=u3F}0l;OliLp0tprs6E;p|ieZlH?rmT1WWg98|ZFxms z;1lCaZPG-3nx;-zVT>9<$D!Vz)Oz0#3BXl5pMwKnQ*jiZpNC`LAyU&t`zgL(_pN|s z`iWhW^n<(<%&h@sLT`8?SB`5AvBZDX#7#%5ytXi7chvx`ey+w3K-gNK35+WBVIKTEI260NYG z(W;%UhLkX9-IdQ-5St*GnN0*sFnOU?`kMG<0PAPWiMdj}zljivET8AyN-?5fa^Ii(Lw_iL{xAKdo&PW?>7SiR z{15;A%HRK1&75cJ1^mujZEv!yBH=dXu0DC}$zs7@doQD{*`^^lR%}~&=7w4}E=x3}JQhi)HnYL5@!UDXIR5r{2Gpv(x@L2)6Y{6Mq>z2*Ii?o9*aL?dn{7q|XBm)G z_B!kl#s?TSJ+sD^7QIl7SQ;agZkynTV@-7!`#FvlvL`Lnc+Zg`I8+*5&iW%`rM6YK zffdfGBb#@WoG`}b(42lFQkMM#b}m)~`~&M8u+~l>rbk>=0U8=+);-PevqeCpTrO5u z5xZjS^mL)Sk0G%gUZ?EJF?eS-!&S-K&{u@iiZ8VG=$k7l zIiH7n#YG_mg^6+J%PXU<@1Sutb-6g!_*|8gLmbV-U}`9s&w2dTeS#QoxbI=x18!Z( zihlRi$dh7dr(+Q}a8y1GK;Gc=(i3P4;XI^aB#z~Rh@p5vU3u_ZeO}3h&)jY9;!s3T zqL}_np#-+Hwzr3S16Kn*r@Z2mK3aa5hhS|DV~PN0BlI)+Y~(B^YN`>YZ6+Aj${x$6 zF+o|G#GbZXAmFm4`P^W-Mb0pO%zZAdKEFPA)@+ga_j*Ly#iZ5wh z7Q@P+r(>N!9Twb3fXEi1Dsm?vrfbhsE`U=|ZFAKu#uZI91y#7`=Ybbr=UpxV&5W(& zZHPU$axWY)NtoB=w$!6v9NdK}Z8(;_NL6$D-a3Y^ULO{k3gwLgFQcfqM>n zoTJ1so6|i2&JT;Q0+P0%gXou!ea}*pr7?r2R(+DIjUQv?7;sCaSGPsMqUyT?vLau> zaV{4`jWB)10REHav=Tc&9E5ok)}DMYZG)AVtRAM9cD0BCW}WiN#^fIGE~ z*Lhotb$NoHyuRQjD^LiwAMpc$(v2&C8&~uppNQV;0Q>R0(7^xz5CBO;K~(g`SjhSW z?5suRwxGPG(0d^xw-;mllDUhKzYHSW32XX*%E_gKO}6BHNK(K!>@6eLqjh_n{bf}o$zG0H`MlTlOUGgEdhpKlI1L~F8E13pyZ$@lWpAsjlP$vM3%LchyGsb@S1+(Z za3|_-h4AG~m($@4B_Dy534_|fVw+olk00`>BxmtuW~||UVQgn}z*>WHM3{JTkBUE^ z#+nn$v9JxBxvkU!VdyCCi>xC=LJL(clqM4P*F%~UPq0CH>X%wsk`cG}>}tY0S0j$K z`_i;maDRVT_zK^Zh-(3O9_rPDXJ23VSNVVP&;M8RC;sf8&-&p@hCi|U7d?>t5C8q@ zKlo|B|LMwi^h4_TVx#{_dpKi3Pwz@tnm#*`k6nYf-rC z+(8;87)BNQs*Ou_bIb7a5$+3C?;vtmR2=`n<|5!coxa+b@E>_RzJx=un_Up47Aucq z6&u*y1}_~e&2|6w3kdWOM5nyznmgc$OluD)0w(?5?+m-nqLtOX12^+Q9sI~t%!5Y- zJrom+yhUbUPyZ+WaKOT6%vxVi*5NO)c!wTf_B!0#zz<`^e>8@(k&6k$1ZSfGwt_I= z;Q*4q5P*h^EzV^m#ff;1vH-Aa*x_lc4E7>h=Jw z)3~BTU#d@H>`DVXSA1r@t*xr16#l#vUYua<^PMPOXtmy)rfk8_9DnvhhCQqDHiks$ zim{fzaUJ5S4dHC#toX0s#(XJS442~efVJnv@k~>eo8s>Yvb1{RMDTU7LarV^Iw?gA zODqX2EM^X#J4&9Sy)b=yB)1fOjP}_j`yRz7If+d@OL9TuVW2rG#+mq$qgJwqCA)=& zxS}mrivGKZRRl4rntG9Cc_Voe9v?~U#h)Gg|^<6nOSs=`(k8Q8#SqLva z8}C&b{h4xFz47ht)jHd{(W41`#__=TsVM=k`qOejc)S0V`{xh59erI;S>Q}eAC9jc zrpM%5$1)9JLQG@Vt|Kk)<5c+?H;ISQ9PRfMb}Rmly>V)Gc_&=^1XRyG?=`(RhJCx$ zPudCBH=tifW6S!~7$l~Vt)|f>@Fs(;pc=3CMbl93Lx9A*&x#0@-gw?5VC*|*lz(iC zlW{%tjiQ?VdG57nuCr2y9@SG&549s!kPFlOs=HqG{|VHldP(=m76(|NgX5E*9* zDlPbiX)ZSKT*hkyUb}}Q4)mP3wAT%#rJS4rVjK*`y5WzfwR*fJ6WU*HF_=X9ipO4> z%);C)uS7eJW2k^*&%iZZuse-wT&=CVbM%o7y%D`=B|8G8EuXFG-hN~}K-9%7bDZ82 zzUN&1-+V*-H2H~gA2=C*jmEc#8zGkQI>Hx8VN-#lZA!@1=U=?Vq5X_$06yfPu?8He54YmC~Ht#;A-#ZyFNcJHze4-)$RetQCQs*SzFQ`3kO<&38bP; zI#_oO7q)GB!(f6-z-q!wtdaLY5ua;ue}2k`_s-$$A@>7mDPmMkpc#q-dl6rP__(ah zLs*!W=2mHiivyRVggh^(_fY`ynexreBJd#yLT@aLu+ePdP+zl2URXcJA0_olyWlL@eM=(*cMWs71k8wRSD zQbU0Ab9&s(8fuy6^DE*VSrBJnJtw|!H@ILi7Ky0B&&@o;1se%lWe;%XwgXIoH{X3g z@*3Au5BwK-ASozt)>jCJd4it#m5BHd+<3JF#Qbs!*4m4{qPI0{9mE@`I*)Lktpv-b700lU%7n+N4^)MVndkO8 zh#wWGaILBY@}VX=c^@Z;ViFz1I2lfgw+^+U5{|ET}7=^MVwz5p##bB4Zh+^1Sx*j(a|2tNXv$2)TZc3kK#bB$PY=FN}K@gw~Y z>R{g~!)i(~jSB)SZFE|YATwt)^yVM9s zh7TYF`$;M6B1!EJP4!)1lf(qr>(>-f@4_oz=RA<}G*>!kv8i$kd|DRtK>#mdVKc2e z=nG@MrW}JJUupLfj%UNU;bQn|Yu@_#OnBW9I8%E1!&PhE))%#)r=+mkYFghmwV!*C zzJDno!ytSteitGj$z*Xs<=rM;_v9F^kUGR_moQIrAGaWFEcR)LWg$$cZrOBfkREF1 zW%Elt!73L(Rra_a)u0z>ojR9i(8BmVLj5wHiyt6Mk)z|}TMv!)f-XbeNG7*H$P zPx%q>jMOl!)JbM^sLR|3!C(?$F5(MV$sW=({fET~PW)In@Pj87UZ+Wi$`?gP8@(AA zXAW8UQ9nCaSo0)}c37Exc*Sv;Tq@B5=+`t<@5hFf8rloF%v}dW8&%S^^_BWv`e$+a zz*DNn^*QfodM~wEd_6$+q#xg_MHVLO0^j1fR}m_$)M}wH@L8WzR}pA^7QY0fAUp62 zK}`vWd$nB+{BqHoANI0QdidFBmcqQ{VDn<@qY;r<9sRq_{qdC|Bvtf zQ2ze^{@=)N{~v!j`N=<&e0*@muq7KfN1Oee_^S3bEAxRzoEFkA<@6C`Ln}Q$ePcmk zZEV$+gONLED}4_zc;jMe<0H|%7EEf5@nZPktfAR0brN$*aS5ZjFN$z`H<5a5tfdN9 z6XRs1M&smCgBiE9ejE~cp7vdu1V!AqHUZcA+@ecF(;;w}@$z!25c9*kyytH-om3z|I)3|e)q0GFGtMnmG%!(zhl-^g=e-p6>M zLR^qvo*_hbrG*KCh->w-vx>;Ep+&8L4DW3H5B_4Z*az+qLdcP~*k}C4;F+^RbEyf1 zUskPxfYKb3I04o@wGk$a4ZW>CuU@TKIqxjqPBFxPGc09qqy<<<`{sbz9{3=QOxJq_ z+xfIM;f26|A?)ACP;FJhI&thZOZ)DRt*>A@2flhkgNZOP_UuI_y*F)Qo4eP1V?cRB z;Rz_BxH)!T1u&tDwNo~ef~p($RRkI!>1xcIyWibb1C@Yk@Y~o$&nEq>n;9}*k@>pB z^&8l{o}>N_@;YklXL|6>EZn7jW3|Ap4)1q5JkPT>T;^`IQ5I5|7{CqIOgMvhbHl)4 zW>d5_Mixd69>!r{ZB{$La}xVdBdw3m#7hhKe3Yba7mHjDx&86Y-u2!Q?w)XWI)=!@ z<%l(uBMWd*yZf!K zFnFk}`%kZU6qagE^=iNDG5$+IL1 zDDJ`&-!EZwTTl_FPcrLU5Km5!~3GYzR+V9-WT<>C(#{;h1ds4;fM zWC3*l@P0gEPOn}LxIgz&f_+85C$|s89O;;e!O+S9O)G9uW8&42I@eBFIP}L1hheMz zg`oQ+{pBq(Ck)7H6g%OMDVUQ`zcq~20OmJ*etIyBqr$+9g6V9JkA(DeaFr_%$c?zQ z&K+7yx4gS7j4PPkr8Pot)=43(v@9Df-+8q4IWWA$n1=6H!#RTKV>?f-@R_W$j#m6^c`+fsyD_JS3M$L|;ZFCZ2aq%kv4^pGs>Wf|iO@^~@SoB5#3AjHjS z9Gk?M$;>27w<9eaB+J|+edmbHkk7Vx3I@1&{Xbif3uIK9?1}&Y5CBO;K~%hdS)hI5 zM-c*a0~8LaMiNTLm#Uvl#_TUcfT==smr2GK3v&QxT+`9~=HfPv?xc71gnQ*ooXs}y zGIL@9r~cypa(E(`qU1fe7CNBrA_qDXM{)&s^n*8*FhmyK!tPGw4mOo6&*L-_7;_|y zL7c`ACYv|TgURAO3SMQwWiALlt1zaqMc-fW)E4-7qJY>hmW%-$P!xG0;mkviygS_K zYJChigM@RypdD*t(MK(o6&Z5D!x+RlixpwAiL(M&?PD#K#k-P**%*y<$_;x}yL_-f zlAA7J_b_mZufk0MB9PNMCIr?!Z*Y5`S9vS0HlejjaNW`s0#iz(Ce+9C=$=nr2zb61 zF=y|h&okJG8Dj0ZDrSjAS!Uo9vF>e+>oFQ?aV1v5F z!dShiWM(q?dXT^@YS5n{9s9qyzOlt3reN+33HJW7Yro^v(9PGw{AV&jNxlS_e2924 z70WKG8aJj~o;I;n{dsw(-^lZ4$e=>*s|5ghmAmV)0^PW#bmLog-0P_SV*+qNH1lba zhug!cpLkk+yR6JU26PywwY+0Zcou@R=K@!@=LH5N9rLv6E>;DVXJq2wJwZK#=N^nH zpF(-2#&P1B?*h!sXKsGRD6_F|SvRoWi>;z8H{)ucZ%z1q#O%;eX|@Uee5fF}_h$tKgy^y+R&^R>vQ*iH;(s%OKu4DA%X?{cYj)$|I zPplV&Wlc9Ky-T@%xYl@IZun}_`()5hNCUrVM|TSW_dyOEujD15<|>$ZA1z=2kl)sK zcp@C?*@IU!gx}}M03vc7H3E{jVCNg7pPN650W@GDNqoX|dkbj@``a-b&4{HI5z~hgZLlF}X(wm(Ci5J#wh1+t z;OD@B->`I)rzL^fw_42;91C$T)>fn|Hj|Wh%&eZ-nT7yMA<s!jC0B(5Kq=_+Mm`6J;G{9o18|MJMs|Kcy^&;4`%LLNW-Kw|jv z|Dg7l{O*^@|L-@x$L8q|S3vT2AKbzEAwT@&7xKIR?|(PH_RIeg$KbCAe)4nh67S=| zA#4L?9HgQa?XBtv*f(G30VoXcfK3uA#_cZ*K4L;S_TZ_lNBE{0Q|V}H46=!npA~Hv zwYdZ4tgt*n4TIFCq0Hbc9OTjWc-M)r8>2~!0tK}Uk-%K3?PtQyVg(DsG?ZI3SDWLV zKJ`NG2XdL@w)z4i2Fy(AQG%Cn>>Un8;^0-{?;A!0cjrCe+qPe#-H$-0f9@+G_yICA zFsTb^>4VP<7Fg&7ybgJFJNgy5uiGww^w_l8~FJi|*M zP8-fF^2v~eXoW!mR=wt74^b3+Q7qITSWFC@HJVfAV)gbGcZ*4YIS8Z$7b}~S9bRdF zfEZ4);R@1X;q`dHh1fdj6Vu#mSLD>j3gk4g%fekb0NP15&~U?8*{J|wpnOcIlMQw% z6woEe#4;PziGBL63t`vA!)D#-&?whEODC`dcC?=Rzqw$aXX9^>CFQ$c?Z&W}HCsR3 zGk?HX#=2;jtY9C7^>&SdiV)AN!R?F0J*la7WZlHBYPBZ*{wIF5iF)?l@z71x20GY%A=XjXcMpZ zRiK~wRwpj6O<_CnnOff#OZ_YY_}6b*xbpm zY>JDr$z8jMDRs_*Z~6PU)V}9=Hc!+EFK4{Wby#zBLYr~;XO6n!p_57ccvN9IOYNEh@q$=lA^_1@$LTm6{dR5$(V7wI6V zUD=(-P7j5E)+aS0^!Ww?>9v2l=^yH46|I$X>mmz#Es~4~;O{t30pCA(3laDCF{!|K z%#()on$O_VXl#9QKRNUd1&E2^d==gpJ_lkN{Du%e=)Sw-^nG<+t;o`&@M)IA?r z3o*Lx0%3_!Yk?`KJ!zaU{ovk!z_n>w*K`=ndT1sbx7=5ZLw(SsS{|5*_*$A_JU{fI zEcRdA=M0Vk6qGX;DVz*!A;AmAC`o_8av5x;`!1Z$kk}#VyGvJH( zAeXZ+n1gg`h^Yb0Rhf&8xhE9wW)}j|M|IMF^!+6V?HQgt2$os5qhdpQ5z@AZ> zAHlFKB@A4likN5TZp@91e!!tlXYsHjm^}HIp3gt?9_$n30q*_Z(zv@k#*LY#a5@y5 zKxVQfJHL}!X!2o@OREwK#jXIdZK%RN;7nS@4r9f0L%|O9lbeQ>0t7!GjYU@WK({wy zgr1nW!~TRxUGcfKpqm>kbMcn|FsSFFgBZ#j!LlG>k7>%n-+KcJKxvt3F$@%IYb-es z>KE4npf7&t+D;Mbg6?^EA677kPnT4}@h_030IlLPR~~s#Z@~yT!}}HoJece;-1mg1 zm9Q#$n+^ls_#gb^f)@7TbB1y-KavOk=AZZZkuU7=$l$+n**6Z65BS>1AWZL`atT{l zZ;4+i#$pi6cT$h!cM`C`kaRxli3DfEJSSHgYI&)Xq9l z5d@IA$;3dIE9t=+!6tmnbPP47mMONo9ai!<-cGmysgxuM!kJ>n{HD6`YLhAXM%<;r znQw6J9!<;F1JuMe_;qaiFt*{rj-|P}xS97oT+hnqG6NgdLK)CKx)5+r!2R5JMT)Tc zLj#$?lfZshO~H(96Mjx>uGmXhx8!Xs?bni$QsCIxwU08wPXaV{)d9z1z4L%|cjSF7 z?6SdAoBOCA>LRsSD8)6TXY#B)Gk6%pPBL+@UJP2?9~w+pF-0AGznAEbKTHJ^eb($+ zCSzvny%gWkQfNR(2-Mjb<;(6S5?<(@3o%k=W~rY zzxVyTYgP4JbIdWuHLfw{nDhI+@ArA$wRTmIYYJ21CcSh6xN=cW%xMY3JNTLhD2Y73 zD^PADGIGLSLCeV;%G4X;E^!kWALI9*-%|8VJsEur+T!Zgu93OxvAg zHLm7~gl~ep55qn@n6b8>*5z7>OT3SV94EGMoSWW~~Job-`g=W5=#%`=c!T1mIU z)s3*=GcgkLl{i*itr{y?Yaxfc@?~(+$G;)yVCOk-FDv}B!a7eFvvw~%gQ1=|`MAe; z__m-!=!t5vq;Byk_2QL8z#UVs?(d*ro1S+;JkwS}O^{{pXGw)F-5i zg0)im!SV1XT6_^ev{9Llw7VrMzyGj8-WdW)-pAJpPZ*<54BaQ<=DnSw6u5a3uATSY z;%LM>(BRn*8waef;bY5BYxmJm3G7znowFC;zMY{x|+={N+FS%v!8mmf1=ij}fu~;IQ`h zMi<|>^dvoN$k!st5#$Gj;Ak7-xZIEZF+4o)F7nuK z;%4R<-uXC2jUjO7VvKCFHK@65p|(3L_v9~DAb_pP#-ExSc=3q2&28FeHhr$Lz=%3G z@1W7RCxB5YqGrCH{z+%GCAY2xYoDqiyqRAJn&;cur@wD zvj&w}cAjPlh@-%g#Xn*AEZYphVhfPjUa*;wN;vPs%8gd|E^+_>5CBO;K~&v?pWx;) z20y?j8jQ7bVq`O4sXB($Z=wmTQZS#XKeb$ykJ#f{*p(fuL_0}sR}HZbFb|oC#<5x6 zT8%X6iElv|i%%VjIZqMe#vn8CQpp*UpJJb^-6IYwY!K{{T#$|L#i*4F0b`cGStlEi zxslhDbv+_80WiqJI4c%+@N$v>d48F`H=ZY5f?B*LMwBEgQdpSS%<(Z6-=CmRmM761 zA$2QnsQv^=B%?N*XbZ(L#sXWq-^#1VL?E?f_#}`%9lE2_i?q-XK9*c%sBetW>LmILbC zC4(+%9=tSz$9P2m!8U3p&KO__9X{_9yW81-nS! z@Aw8*iq!x}y_Gwzb@W^F2XV(se(46i6(CCMqF&tNyp{VJBkh?cKaPgUY64DOw8*z2 zY?!CVm*+&q#!9h?ml4PHwZE0gUEI-X$RAdw$oMf*b7AQv8h%8qTYe&x8EX_l=7Vov zl=~bBFli8O4N|IEm@!MONWg);L^+K7@%1O|$^+XttP269k`WRH+B) zhNq)F6?ga{Wc9I6k+OfZ*rW0Fqe%M0tg%eRbewxz{1U+i)L(r9=CfsTxc<^*?G1QR zf|)cvmNDNobK`)>)GEt-C3t>Hhj(*#7QeK$C`mgrE@v&?iyNO%LNTr@j`Cd;fTOb3 z=Xe1Aj%EG+odJ8q11r=K_r7Ppke8%Rm)f*59i(CaS)ZVlr{R$y3P;ZAf{_{W1# zV>jpQOh1F;n z8!-=c3a*~V-lvxDN$Z5MBdU<_EZlY|Bg>2sN$qWmR#p(`px-j1;cvDB?3LNI~4%tKeh&lImuHn@P zypt8o;*Ss6wsr$y*waRzc{U!z`hj`CFbFU)-mrRuV$L+I2qVl_o#N~Z@{lFeF<7I0 zPX|x%$ry%QpP-&Ly3{V^*6Q8u`eEHX_jK&8lgZl20_tjX$=5%hCCmVEi(xFJZT2H2 zzW|H2QS~qY&s?tpPiT0Dpn3;34s(f{Tm1(tp3gIr=PkR5xs;fsYX~M0l)lygrn^l& zYk;q%cM>&8Duf=c;KchqgDIj|?{f9$@*tS2I-;`Ii5pa!p%M3KOyYre!8DC^JU7%i zl!UgJ&7!o64u|qWz&6U-M)!e^dr+f?-b_X3iiBYgUXihcN4nUHyeJ4n(8potdrd z5qtD)0yFA_j5z(%*%EKgcy_lFnWR5V%yqV8xzbrdF?%Sxe_3eKk%-Cr{vZxJx30QMXK!-*7U8O|Fp#O^`3)9Bq>Jvj|^ zF>adISzE`*IN|4w7!!Jo#<~>#>16>Qj!GBAqpPaLi~(q-V9wa#in8?xGPS^p)Sl%= z@_K$y`i0|RvExwVulSF^5%BE+(Y-h?ACA)+SBy!UhVbC`hp(35g;aw*P3W&srV9o^ zOn^8%+pSgI7z@+*mpT$i*f+U^yX;T96Z9Z=O7}p6uV5wI+juO#V9|%`3q+jIfJi}jLw>_}of@xr}%$<-=jOnIC z@#&+JbIYR{CbuDpuwUr_@G0U1Z|DBfO5$hlD0~Dqk{J}*SmljDiIv43z-Mmu$KXpWo+C|0Dls{^;NI?+21Wh-Uu1-})hc`L}kyBd;HSe);$R62K3?`+a`( zfA(L?Z~wV}CHq(YFgc%o9p;mMk~PU1<*o1!T>0ML?6^V0+0h%N`NIlD znK0l3w`3Q54w{z!lpNe)bTz;khD*FQ5lZ6CJb5INtOLx;TM7#^y>io#^E)kEcrC0( zjM0yLx2*uHdp=^E03@7oaR(pOaj>mF=x*L(U8T>i$-EmD6;#;AZB?PB_J#FL(GS%d z{$WGmlcN(x6VaWVp8XO=Mz5^3 zl8+TO3#ZCj*l|#gf1B@?A@5dPZcxexg;y3-m|+Y24}6e?hb;2EvxWO<-u8dG61Mt? zuGlA;WRM4za9xnmSc!jGq^p4W`SrPly7qNo+-oIc?QlidJVf&lHi+Ugo&ECr45L30 zdSHzm4uLH8$lF+M@#c>SdyKmRFzb0YF-xF_(#Q-=&gw23ty{i^A`8vbs%&bti@oc& z!D9+&-q7o|o=8Z~mtn#e;2US*`{>YLsQ65RXX-2${n2ZAvav;fBsS`YyM76!(RTH-7*I@BD+VFndutsr<;Dvx)+=ml{0j9J z_U)}vu#hp5*N|kBAf>!>8Y6J##8Za$4OgEU9zDRQ-n!@WoB)&!1H-<%_2n2X>x_w<6BO8qfc9CsZpa^*oDV)*(Lv|O!w|&gJPd%h=6XJOYl&0BJHd~fYBAb7w&7q`6Vg^G z#VDgKUSCJ-eA&i*idjS>KoauP;|XCfqsX)#CFo4=2mok+}>w z&g-i!=El_q5pW^P;GqPtP^>fG?VcjfY6t092gC7@3*Gq`^=3H*t0umhy(Y}6W!QV5 zDUjC`m#$XQ10?rZiS^xyRv1*{yJYc0wMX~6#P9sQ00j`{muss-T1ykOkGc9&Q{{$K zcS323`|8`DBF(_Z7!A39&Kt5KV5#3Kw5midR1IUH9sYZZ+f6o%NO66N4ERpI{Qo7!AVWIESqFu%i^|=YLbd? z*Bwfo7B-QU#rjA8mOq|9`49X<`R;puaT5OFGr#1Q?|<{(`(?tv{WoFrOWOCue))a! z7yg<5c7F3;`InMk`J?@c_>RrDLM

    85WgwHs?n(V^gE)5}Yf6$1I5M#32Sb7FyI@ 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

    2-1KB3n$+Gk!D5QF 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

    u7!_-;IC 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

    FENo`-nv)x5|T9qk}I6f;Yi@n#Xg&R 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�c_9>|@h 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

    PAR4? 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⁣}AOhEmEc`gIh^6s9Rr@7H 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≺baS8)%5r!<)L3_tWRL)jjqvvauMKpXu{;Q4*) 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

    J4iliA=CWh$4g$dC1_S%&1EBKVrc&yx5; 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 SA1k^50000 + + diff --git a/lightx2v/deploy/server/frontend/public/logo.svg b/lightx2v/deploy/server/frontend/public/logo.svg new file mode 100644 index 0000000..fc1c012 --- /dev/null +++ b/lightx2v/deploy/server/frontend/public/logo.svg @@ -0,0 +1 @@ + diff --git a/lightx2v/deploy/server/frontend/public/logo_black.png b/lightx2v/deploy/server/frontend/public/logo_black.png new file mode 100644 index 0000000000000000000000000000000000000000..71f1e37eb0b65a8da9280f76abf907fb38a8c467 GIT binary patch literal 30640 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 Yc+ZERP&wJ-2f#la4TFoX)Ew^qABJ6DRR910 literal 0 HcmV?d00001 diff --git a/lightx2v/deploy/server/frontend/public/logo_black.svg b/lightx2v/deploy/server/frontend/public/logo_black.svg new file mode 100644 index 0000000..6b48e31 --- /dev/null +++ b/lightx2v/deploy/server/frontend/public/logo_black.svg @@ -0,0 +1 @@ + diff --git a/lightx2v/deploy/server/frontend/public/male.svg b/lightx2v/deploy/server/frontend/public/male.svg new file mode 100644 index 0000000..5a8e879 --- /dev/null +++ b/lightx2v/deploy/server/frontend/public/male.svg @@ -0,0 +1,3 @@ + + + diff --git a/lightx2v/deploy/server/frontend/public/robots.txt b/lightx2v/deploy/server/frontend/public/robots.txt new file mode 100644 index 0000000..f99277b --- /dev/null +++ b/lightx2v/deploy/server/frontend/public/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Allow: / +Sitemap: https://x2v.light-ai.top/sitemap.xml diff --git a/lightx2v/deploy/server/frontend/public/sitemap.xml b/lightx2v/deploy/server/frontend/public/sitemap.xml new file mode 100644 index 0000000..64ff8fd --- /dev/null +++ b/lightx2v/deploy/server/frontend/public/sitemap.xml @@ -0,0 +1,14 @@ + + + + https://x2v.light-ai.top/ + daily + 1.0 + + + https://x2v.light-ai.top/examples + + + https://x2v.light-ai.top/docs + + diff --git a/lightx2v/deploy/server/frontend/public/vite.svg b/lightx2v/deploy/server/frontend/public/vite.svg new file mode 100644 index 0000000..ee9fada --- /dev/null +++ b/lightx2v/deploy/server/frontend/public/vite.svg @@ -0,0 +1 @@ + diff --git a/lightx2v/deploy/server/frontend/src/App.vue b/lightx2v/deploy/server/frontend/src/App.vue new file mode 100644 index 0000000..fa7a9e7 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/App.vue @@ -0,0 +1,125 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/Alert.vue b/lightx2v/deploy/server/frontend/src/components/Alert.vue new file mode 100644 index 0000000..0d86e1a --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Alert.vue @@ -0,0 +1,311 @@ + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/AudioPreviewTest.vue b/lightx2v/deploy/server/frontend/src/components/AudioPreviewTest.vue new file mode 100644 index 0000000..21ab03b --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/AudioPreviewTest.vue @@ -0,0 +1,67 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/Confirm.vue b/lightx2v/deploy/server/frontend/src/components/Confirm.vue new file mode 100644 index 0000000..1dfff45 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Confirm.vue @@ -0,0 +1,70 @@ + + diff --git a/lightx2v/deploy/server/frontend/src/components/DropdownMenu.vue b/lightx2v/deploy/server/frontend/src/components/DropdownMenu.vue new file mode 100644 index 0000000..3c33259 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/DropdownMenu.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/FloatingParticles.vue b/lightx2v/deploy/server/frontend/src/components/FloatingParticles.vue new file mode 100644 index 0000000..2afd56b --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/FloatingParticles.vue @@ -0,0 +1,73 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/Generate.vue b/lightx2v/deploy/server/frontend/src/components/Generate.vue new file mode 100644 index 0000000..d2a92f2 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Generate.vue @@ -0,0 +1,3517 @@ + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/Inspirations.vue b/lightx2v/deploy/server/frontend/src/components/Inspirations.vue new file mode 100644 index 0000000..9772301 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Inspirations.vue @@ -0,0 +1,289 @@ + + diff --git a/lightx2v/deploy/server/frontend/src/components/LeftBar.vue b/lightx2v/deploy/server/frontend/src/components/LeftBar.vue new file mode 100644 index 0000000..ca678b2 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/LeftBar.vue @@ -0,0 +1,56 @@ + + diff --git a/lightx2v/deploy/server/frontend/src/components/Loading.vue b/lightx2v/deploy/server/frontend/src/components/Loading.vue new file mode 100644 index 0000000..41d0e6e --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Loading.vue @@ -0,0 +1,15 @@ + + diff --git a/lightx2v/deploy/server/frontend/src/components/LoginCard.vue b/lightx2v/deploy/server/frontend/src/components/LoginCard.vue new file mode 100644 index 0000000..684d389 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/LoginCard.vue @@ -0,0 +1,124 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/MediaTemplate.vue b/lightx2v/deploy/server/frontend/src/components/MediaTemplate.vue new file mode 100644 index 0000000..1a343e2 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/MediaTemplate.vue @@ -0,0 +1,466 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/ModelDropdown.vue b/lightx2v/deploy/server/frontend/src/components/ModelDropdown.vue new file mode 100644 index 0000000..bc2d12e --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/ModelDropdown.vue @@ -0,0 +1,57 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/Projects.vue b/lightx2v/deploy/server/frontend/src/components/Projects.vue new file mode 100644 index 0000000..ba7b0db --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Projects.vue @@ -0,0 +1,609 @@ + + diff --git a/lightx2v/deploy/server/frontend/src/components/PromptTemplate.vue b/lightx2v/deploy/server/frontend/src/components/PromptTemplate.vue new file mode 100644 index 0000000..7f9b39b --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/PromptTemplate.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/SiteFooter.vue b/lightx2v/deploy/server/frontend/src/components/SiteFooter.vue new file mode 100644 index 0000000..e66df66 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/SiteFooter.vue @@ -0,0 +1,38 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/TaskCarousel.vue b/lightx2v/deploy/server/frontend/src/components/TaskCarousel.vue new file mode 100644 index 0000000..2916382 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/TaskCarousel.vue @@ -0,0 +1,497 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/TaskDetails.vue b/lightx2v/deploy/server/frontend/src/components/TaskDetails.vue new file mode 100644 index 0000000..51550ac --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/TaskDetails.vue @@ -0,0 +1,1154 @@ + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/TemplateDetails.vue b/lightx2v/deploy/server/frontend/src/components/TemplateDetails.vue new file mode 100644 index 0000000..d46e768 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/TemplateDetails.vue @@ -0,0 +1,335 @@ + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/TemplateDisplay.vue b/lightx2v/deploy/server/frontend/src/components/TemplateDisplay.vue new file mode 100644 index 0000000..b36096f --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/TemplateDisplay.vue @@ -0,0 +1,294 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/TopBar.vue b/lightx2v/deploy/server/frontend/src/components/TopBar.vue new file mode 100644 index 0000000..ec4ebe1 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/TopBar.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/VoiceSelector.vue b/lightx2v/deploy/server/frontend/src/components/VoiceSelector.vue new file mode 100644 index 0000000..dc42a70 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/VoiceSelector.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/components/VoiceTtsHistoryPanel.vue b/lightx2v/deploy/server/frontend/src/components/VoiceTtsHistoryPanel.vue new file mode 100644 index 0000000..f38a6a5 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/VoiceTtsHistoryPanel.vue @@ -0,0 +1,308 @@ + + + diff --git a/lightx2v/deploy/server/frontend/src/components/Voice_tts.vue b/lightx2v/deploy/server/frontend/src/components/Voice_tts.vue new file mode 100644 index 0000000..131f085 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/components/Voice_tts.vue @@ -0,0 +1,2511 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/locales/en.json b/lightx2v/deploy/server/frontend/src/locales/en.json new file mode 100644 index 0000000..77974b7 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/locales/en.json @@ -0,0 +1,651 @@ +{ + "faceEdit": "Face Edit", + "adjustFaceBox": "Adjust Character", + "rolesAndAudio": "Multiple roles mode (drag and drop to adjust the role and audio pairing)", + "roleModeInfo": { + "title": "Role Mode Guide", + "singleMode": { + "title": "Single Role Mode", + "points": [ + "All characters use the same audio track for lip-sync", + "Ideal for single-person dialogue or unified voice-over scenarios", + "Simple operation, no manual pairing required" + ] + }, + "multiMode": { + "title": "Multi-Role Mode", + "points": [ + "Image and audio tracks are automatically separated", + "Manually pair each character with its corresponding audio track", + "Each character will only speak the content of its assigned track" + ] + } + }, + "useImage": "Use Image", + "detectingCharacters": "Detecting characters...", + "waitingForMultipleRolesAudio": "Waiting for multiple roles audio...", + "deleteAudio": "Delete Audio", + "deleteImage": "Delete Image", + "addNewRole": "Add New Role", + "adjustFaceBoxDescription": "Adjust the face box to ensure the face is fully displayed.", + "adjustFaceBoxConfirm": "Adjust Face Box", + "adjustFaceBoxConfirmDescription": "Adjust the face box to ensure the face is fully displayed.", + "adjustFaceBoxConfirmButton": "Confirm Adjust", + "adjustFaceBoxCancelButton": "Cancel", + "adjustFaceBoxSaveButton": "Save", + "detectedCharacters": "Detected Characters", + "starOnGitHub": "Star on GitHub", + "pageNotFound": "Page Not Found", + "pageNotFoundDescription": "The page you are looking for does not exist.", + "goBackHome": "Home", + "goBack": "Go back", + "viewErrorDetails": "Error Details", + "viewAll": "All", + "stop": "Stop", + "preview": "Preview", + "share": "Share", + "noAvailableTemplates": "No available templates", + "pleaseSelectTaskType": "Please select task type first", + "textToSpeech": "Text to Speech", + "historyTask": "History Task", + "total": "Total", + "tasks": "tasks", + "records": "records", + "goToHome": "Go to Home", + "imageTemplates": "Image Templates", + "audioTemplates": "Audio Templates", + "noImageTemplates": "No image templates", + "noAudioTemplates": "No audio templates", + "templateDetail": "Template detail", + "viewTemplateDetail": "View Template Detail", + "viewTaskDetails": "View Task Details", + "templateInfo": "Template Info", + "model": "Model", + "type": "Type", + "inputMaterials": "Input Materials", + "inputImage": "Input Image", + "inputAudio": "Input Audio", + "optional": "(Optional)", + "pageTitle": "LightX2V Service", + "uploadVideo": "Upload Video", + "supportedVideoFormats": "Supported MP4, WebM, QuickTime formats", + "pleaseEnterThePromptForVideoGeneration": "Please enter the prompt for video generation", + "describeTheContentStyleSceneOfTheVideo": "Describe the content, style, and scene of the video...", + "describeTheDigitalHumanImageBackgroundStyleActionRequirements": "Describe the digital human expression, tone, and action...", + "describeTheContentActionRequirementsBasedOnTheImage": "Describe the content and action requirements based on the image...", + "loginSubtitle": "A powerful video generation platform", + "whatDoYouWantToDo": "What do you want to do today?", + "whatMaterialsDoYouNeed": "What materials do you need to create a video?", + "pleaseEnterTheMostDetailedVideoScript": "Please enter the most detailed video script", + "pleaseUploadAnImageAsTheFirstFrameOfTheVideoAndTheMostDetailedVideoScript": "Please upload an image as the first frame of the video and the most detailed video script", + "pleaseUploadARoleImageAnAudioAndTheGeneralVideoRequirements": "Please upload a role image, an audio, and the general video requirements", + "collapseCreationArea": "Collapse creation area", + "startCreatingVideo": "Start creating video···", + "loginWithGitHub": "GitHub", + "loginWithGoogle": "Google", + "loginWithSMS": "SMS", + "loggingIn": "Logging in...", + "logout": "Logout", + "loggedOut": "Logged out", + "loginFailed": "Login failed", + "loginError": "Error occurred during login", + "authFailed": "Authentication failed, please login again", + "loginExpired": "Login expired, please login again", + "orLoginWith": "Or login with", + "login": "Login / Register", + "loginLoading": "Logging in···", + "sendSmsCode": "Send SMS", + "phoneNumber": "Phone Number", + "verifyCode": "Verify Code", + "feature1": "Cinema-grade digital human videos", + "feature2": "20x faster generation", + "feature3": "Ultra-low cost generation", + "feature4": "Precise lip-sync alignment", + "feature5": "Minute-level video duration", + "feature6": "Multi-scenario applications", + "generateVideo": "Generate Video", + "history": "History", + "inspiration": "Inspiration", + "discoverCreativity": "Discover creativity, inspire ideas", + "searchTasks": "Search history tasks...", + "searchInspiration": "Search inspiration...", + "refresh": "Refresh task list", + "noHistoryTasks": "No history tasks", + "startToCreateYourFirstAIVideo": "Start creating your first AI video", + "switchLanguage": "Switch Language", + "selectTaskType": "Select Task Type", + "selectTaskTypeFirst": "Please select task type first", + "noHistoryRecords": "No history records", + "imageHistoryAutoSave": "Image history will be automatically saved when you start using images", + "audioHistoryAutoSave": "Audio history will be automatically saved when you start using audio", + "clearHistory": "Clear history", + "clear": "Clear", + "promptHistoryAutoSave": "Prompt history will be automatically saved when you start creating tasks", + "promptTip": "Describe the video content you want in detail", + "viewFailureReason": "View Failure Reason", + "failureReason": "Failure Reason", + "noPrompt": "No Prompt", + "uploadMaterials": "Upload Materials", + "image": "Image", + "video": "Video", + "historyAudio": "History Audio", + "historyAudioApplied": "History audio applied", + "myProjects": "My Projects", + "initializationFailed": "Initialization Failed, Please Refresh The Page", + "browserNotSupported": "Browser Not Supported", + "videoLoadFailed": "Video Load Failed", + "loadingVideo": "Loading Video···", + "videoGenerating": "Video Generating", + "taskProgress": "Task Progress", + "subtask": "Subtask", + "queuePosition": "Waiting for", + "availableWorker": "Available Worker", + "videoGeneratingFailed": "Video Generating Failed", + "sorryYourVideoGenerationTaskFailed": "Sorry Your Video Generation Task Failed", + "thisTaskHasBeenCancelledYouCanRegenerateOrViewTheMaterialsYouUploadedBefore": "This Task Has Been Cancelled You Can Regenerate Or View The Materials You Uploaded Before", + "taskCompleted": "Task Completed", + "taskFailed": "Task Failed", + "taskCancelled": "Cancelled", + "taskRunning": "Task Running", + "taskPending": "Task Pending", + "taskInfo": "Task Info", + "taskID": "Task ID", + "modelName": "Model Name", + "createTime": "Create Time", + "updateTime": "Update Time", + "aiIsGeneratingYourVideo": "LightX2V is generating your video...", + "taskSubmittedSuccessfully": "Task submitted successfully, accelerating processing...", + "taskQueuePleaseWait": "The task is a little bit, accelerating queueing...", + "success": "Success", + "failed": "Failed", + "pending": "Waiting", + "cancelled": "Cancelled", + "all": "All", + "created": "Created", + "status": "Status", + "reuseTask": "Reuse", + "regenerateTask": "Retry", + "retryTask": "Retry", + "downloadTask": "Download Video", + "downloadVideo": "Download Video", + "deleteTask": "Delete", + "cancelTask": "Cancel", + "download": "Download", + "downloadPreparing": "Preparing download...", + "downloadFetching": "Fetching file...", + "downloadSaving": "Saving file...", + "mobileSaveToAlbumTip": "Long press the video in the new tab to save it to your gallery.", + "mobileSavePreviewTitle": "Preview & Save", + "mobileSaveInstruction": "Tap the full-screen button or long press the video to save it to your photo library.", + "mute": "Mute", + "unmute": "Unmute", + "unsupportedAudioOrVideo": "Please select an audio or video file.", + "unsupportedVideoFormat": "Only MP4/M4V/MPEG video files are supported for audio extraction.", + "downloadInProgressNotice": "A download is already in progress. Please wait.", + "downloadCancelledAlert": "Download cancelled", + "createVideo": "Create Video", + "selectTemplate": "Select Template", + "uploadImage": "Upload Image", + "uploadAudio": "Upload Audio or Video", + "recordAudio": "Record Audio", + "recording": "Recording...", + "takePhoto": "Take Photo", + "retake": "Retake", + "usePhoto": "Use Photo", + "upload": "Upload", + "stopRecording": "Stop Recording", + "recordingStarted": "Recording started", + "recordingStopped": "Recording stopped", + "recordingCompleted": "Recording completed", + "recordingFailed": "Recording failed", + "enterPrompt": "Enter Prompt", + "selectModel": "Select Model", + "startGeneration": "Start Generation", + "templates": "Templates", + "useTemplate": "Use Template", + "applyImage": "Apply Image", + "applyAudio": "Apply Audio", + "featuredTemplates": "Featured Templates", + "discoverFeaturedCreativity": "Discover Featured Creativity", + "refreshRandomTemplates": "Refresh Random Templates", + "discover": "Discover", + "viewMoreTemplates": "View More Templates", + "searchTemplates": "Search Templates", + "browseCategories": "Browse Categories", + "inspirationGallery": "Inspirations", + "viewMore": "View More", + "more": "More", + "applyPrompt": "Apply Prompt", + "imageApplied": "Image applied", + "audioApplied": "Audio applied", + "promptApplied": "Prompt applied", + "copy": "Copy", + "view": "View", + "promptCopied": "Prompt copied to clipboard", + "outputVideo": "Output Video", + "textToVideo": "Text to Video", + "imageToVideo": "Image to Video", + "speechToVideo": "Speech to Video", + "animate": "Character Replacement", + "prompt": "Prompt (Optional)", + "negativePrompt": "Negative Prompt", + "promptTemplates": "Prompt Templates", + "promptHistory": "Prompt History", + "t2vHint1": "Enter text description, AI will generate精彩的视频内容", + "t2vHint2": "Support multiple styles: realistic, animation, art, etc.", + "t2vHint3": "Can describe scenes, actions, emotions, etc.", + "t2vHint4": "Let your creativity become a vivid video", + "i2vHint1": "Upload an image, AI will generate dynamic video", + "i2vHint2": "Support multiple image formats: JPG, PNG, WebP, etc.", + "i2vHint3": "Can generate various dynamic effects.", + "i2vHint4": "Let static image become dynamic, create infinite possibilities", + "s2vHint1": "Upload a role image + an audio", + "s2vHint2": "AI will make the role speak and move according to the audio content.", + "s2vHint3": "Let your role become alive.", + "s2vHint4": "Create your own digital person.", + "uploadImageFile": "Upload Image File", + "uploadAudioFile": "Upload Audio or Video File", + "dragDropHere": "Drag and drop files here or click to upload", + "supportedImageFormats": "Supported jpg, png, webp image formats (< 10MB)", + "supportedAudioFormats": "Supports audio or video formats (< 120s).", + "supportedAudioFormatsShort": "Supports audio or video formats (< 120s).", + "prefillLoadingDefault": "Preparing materials...", + "prefillLoadingTemplate": "Loading template assets...", + "prefillLoadingTask": "Loading task materials...", + "clearCharacterImageTip": "Upload a clear character image", + "maxFileSize": "Max file size", + "taskDetail": "Task Details", + "taskId": "Task ID", + "taskType": "Task Type", + "taskStatus": "Task Status", + "createdAt": "Created At", + "completedAt": "Completed At", + "duration": "Duration", + "confirm": "Confirm", + "cancel": "Cancel", + "save": "Save", + "edit": "Edit", + "delete": "Delete", + "close": "Close", + "copyLink": "Copy Link", + "pleaseCopyManually": "Please manually select and copy the text below", + "back": "Back", + "next": "Next", + "previous": "Previous", + "finish": "Finish", + "submitting": "Submitting...", + "operationSuccess": "Operation successful", + "operationFailed": "Operation failed", + "pleaseWait": "Please wait...", + "loading": "Loading···", + "noData": "No data", + "errorOccurred": "Error occurred", + "networkError": "Network error", + "serverError": "Server error", + "seconds": "seconds", + "deleteTaskConfirm": "Delete Task?", + "deleteTaskConfirmMessage": "This action cannot be undone. It will delete the task record, generated files, and related data.", + "confirmDelete": "Delete", + "regenerateTaskConfirm": "Regenerate Task?", + "regenerateTaskConfirmMessage": "Regenerating will delete the current task and generated content, then create a new task with the same parameters. This action cannot be undone!", + "confirmRegenerate": "Regenerate", + "regeneratingTaskAlert": "Regenerating task...", + "deletingTaskAlert": "Deleting task...", + "taskDeletedSuccessAlert": "Task deleted successfully", + "deleteTaskFailedAlert": "Delete task failed", + "getTaskDetailFailedAlert": "Get task detail failed", + "taskNotExistAlert": "Task not exist", + "loadTaskFilesFailedAlert": "Load task files failed", + "taskMaterialReuseSuccessAlert": "Task material reuse successfully", + "loadTaskDataFailedAlert": "Load task data failed", + "fileUnavailableAlert": "File unavailable", + "downloadFailedAlert": "Download failed. Please try again.", + "taskSubmitSuccessAlert": "Task submit successfully", + "taskSubmitFailedAlert": "Task submit failed", + "submitTaskFailedAlert": "Submit task failed", + "downloadSuccessAlert": "File download successfully", + "getTaskResultFailedAlert": "Get task result failed", + "downloadTaskResultFailedAlert": "Download task result failed", + "viewTaskResultFailedAlert": "View task result failed", + "cancelTaskConfirm": "Cancel task?", + "cancelTaskConfirmMessage": "Cancel task will stop the task execution, and the generated part of the result may be lost, can be regenerated later.", + "confirmCancel": "Cancel", + "taskCancelSuccessAlert": "Task cancel successfully", + "cancelTaskFailedAlert": "Cancel task failed", + "taskRetrySuccessAlert": "Task retry successfully", + "retryTaskFailedAlert": "Retry task failed", + "taskRegenerateSuccessAlert": "Task regenerated successfully", + "regenerateTaskFailedAlert": "Regenerate task failed", + "taskNotFoundAlert": "Task not found", + "templateApplied": "Template applied", + "shareTemplate": "Share", + "copyShareLink": "Share", + "promptHistoryApplied": "Prompt history applied", + "promptHistoryCleared": "Prompt history cleared", + "getPromptHistoryFailed": "Get prompt history failed", + "saveTaskHistoryFailed": "Save task history failed", + "parseTaskHistoryFailed": "Parse task history failed", + "getTaskHistoryFailed": "Get task history failed", + "getImageHistoryFailed": "Get image history failed", + "taskHistorySaved": "Task history saved", + "taskHistoryCleared": "Task history cleared", + "clickToDownload": "Click to download", + "clickApply": "Click to apply", + "justNow": "Just now", + "minutesAgo": "minutes ago", + "hoursAgo": "hours ago", + "daysAgo": "days ago", + "weeksAgo": "weeks ago", + "monthsAgo": "months ago", + "yearsAgo": "years ago", + "oneMinuteAgo": "one minute ago", + "oneHourAgo": "one hour ago", + "oneDayAgo": "one day ago", + "oneWeekAgo": "one week ago", + "oneMonthAgo": "one month ago", + "oneYearAgo": "one year ago", + "shareNotFound": "Share not found", + "backToHome": "Back to Home", + "videoNotAvailable": "Video not available", + "createdWithAI": "Created with AI", + "createSimilar": "Create Similar", + "createSimilarDescription": "Click the button to create your video with the same settings", + "shareDataImported": "Share data imported successfully", + "shareDataImportFailed": "Failed to import share data", + "templatesGeneratedByLightX2V": "The following videos are generated by LightX2V, hover/click to play", + "materials": "Materials", + "template": "Template", + "templateDescription": "The video is generated by LightX2V-digital human model", + "pleaseLoginFirst": "Please login first", + "showDetails": "Show Details", + "hideDetails": "Hide Details", + "shareLinkCopied": "Share link copied", + "randomTemplates": "Random Refresh Templates", + "oneClickReplication": "One-click replication", + "customizableContent": "Customizable content", + "poweredByLightX2V": "Speed-generated video - LightX2V", + "latestAIModel": "Latest AI digital human model, rapid video generation", + "customizableCharacter": "Freely customizable characters and audio", + "userGeneratedVideo": " generated video", + "noImage": "No Images", + "noAudio": "No Audio", + "noVideo": "No Video", + "taskCompletedSuccessfully": "LightX2V has generated video for you successfully", + "onlyUseImage": "Only use image", + "onlyUseAudio": "Only use audio", + "reUseImage": "Reuse image", + "reUseAudio": "Reuse audio", + "templateVideo": "Speech-to-video generation template", + "description": "The video is generated by LightX2V", + "timeCost": "Time cost ", + "voiceSynthesis": "Voice Synthesis", + "applySelectedVoice": "Apply selected voice", + "generatedAudio": "Generated Audio", + "synthesizedAudio": "Synthesized Audio", + "enterTextToConvert": "Enter text to convert", + "ttsPlaceholder": "The weather is nice today, let's go for a walk~", + "voiceInstruction": "Voice Instruction", + "voiceInstructionHint": "(Only for v2.0 voices)", + "voiceInstructionPlaceholder": "Use instruction to control voice details, including emotion, context, dialect, tone, speed, pitch, etc. Example: Please use a warm and friendly voice", + "selectVoice": "Select Voice", + "searchVoice": "Search Voice", + "filter": "Filter", + "filterVoices": "Filter Voices", + "voiceSettings": "Voice Settings", + "speechRate": "Speech Rate", + "volume": "Volume", + "pitch": "Pitch", + "emotionIntensity": "Emotion Intensity", + "emotionType": "Emotion Type", + "neutral": "Neutral", + "scene": "Scene", + "version": "Version", + "language": "Language", + "gender": "Gender", + "reset": "Reset", + "done": "Done", + "ttsGenerationFailed": "TTS generation failed, please retry", + "applyAudioFailed": "Apply audio failed, please retry", + "allScenes": "All Scenes", + "generalScene": "General", + "customerServiceScene": "Customer Service", + "educationScene": "Education", + "funAccent": "Fun Accent", + "rolePlaying": "Role Playing", + "audiobook": "Audiobook", + "multilingual": "Multilingual", + "multiEmotion": "Multi-emotion", + "videoDubbing": "Video Dubbing", + "ttsHistoryTitle": "History", + "ttsHistoryHint": "We automatically keep the last 20 voice texts and instructions you used.", + "ttsHistoryEmpty": "No saved entries yet", + "ttsHistoryEmptyHint": "Generate voice once to create your first history entry.", + "ttsHistoryTextLabel": "Voice Text", + "ttsHistoryInstructionLabel": "Voice Instruction", + "ttsHistoryTextEmpty": "Empty text", + "ttsHistoryInstructionEmpty": "Empty instruction", + "ttsHistoryVoiceLabel": "Voice History", + "ttsHistoryVoiceEmpty": "Not set", + "ttsHistoryApply": "Use This", + "ttsHistoryApplySelected": "Apply", + "ttsHistoryDeleteEntry": "Remove", + "ttsHistoryTabCombined": "All", + "ttsHistoryTabText": "Text History", + "ttsHistoryTabInstruction": "Instruction History", + "ttsHistoryTabVoice": "Voice History", + "ttsHistoryTitleCombined": "All History", + "ttsHistoryTitleText": "Text History", + "ttsHistoryTitleInstruction": "Instruction History", + "ttsHistoryTitleVoice": "Voice History", + "ttsHistoryClear": "Clear History", + "allVersions": "All Versions", + "allLanguages": "All Languages", + "allGenders": "All Genders", + "female": "Female", + "male": "Male", + "taskCountdown": "Task countdown", + "footer": { + "tagline": "AI digital human video generation powered by LightX2V framework", + "links": { + "home": "Light AI Homepage", + "github": "GitHub", + "xiaohongshu": "RedNote" + }, + "alt": { + "github": "GitHub logo", + "xiaohongshu": "RedNote logo" + }, + "copyright": "© {year} Light AI. All rights reserved." + }, + "tts": { + "title": "AI Voice Synthesis", + "subtitle": "Synthesize your voice with AI", + "inputText": "Enter text to synthesize", + "voiceSelection": "Select voice", + "voiceSettings": "Voice settings", + "speechRate": "Speech rate", + "volume": "Volume", + "pitch": "Pitch", + "emotionIntensity": "Emotion intensity", + "emotionType": "Emotion type", + "neutral": "Neutral", + "scene": "Scene", + "version": "Version", + "language": "Language", + "gender": "Gender", + "reset": "Reset", + "done": "Done", + "ttsGenerationFailed": "TTS generation failed, please retry", + "applyAudioFailed": "Apply audio failed, please retry", + "allScenes": "All Scenes", + "generalScene": "General", + "customerServiceScene": "Customer Service", + "educationScene": "Education", + "funAccent": "Fun Accent", + "rolePlaying": "Role Playing", + "audiobook": "Audiobook", + "multilingual": "Multilingual", + "multiEmotion": "Multi-emotion", + "videoDubbing": "Video Dubbing", + "allVersions": "All Versions", + "allLanguages": "All Languages", + "allGenders": "All Genders", + "female": "Female", + "male": "Male", + "multiSegmentMode": "Multi-segment Mode", + "singleSegmentMode": "Single-segment Mode", + "switchToSingleSegmentMode": "Switch to Single-segment Mode", + "switchToMultiSegmentMode": "Switch to Multi-segment Mode", + "mergedAudio": "Merged Audio", + "applyMergedAudio": "Apply Merged Audio", + "addSegment": "Add Segment", + "segment": "Segment", + "segmentNumber": "Segment {index}", + "dragToReorder": "Drag to Reorder", + "copySegment": "Copy Segment", + "deleteSegment": "Delete Segment", + "selectVoice": "Select Voice", + "generate": "Generate", + "text": "Text", + "voiceInstructionOptional": "Voice Instruction (Optional)", + "segmentCopied": "Segment copied and added to end", + "noSegmentsToApply": "No audio segments available to apply", + "mergedAudioLoadFailed": "Merged audio load failed: {error}", + "mergedAudioFailed": "Merged audio failed: {error}", + "unknownError": "Unknown error", + "playbackFailed": "Playback failed: {error}", + "audioDecodeFailed": "Audio decode failed: {error}" + }, + "podcast": { + "title": "AI Dual-Person Podcast Generator", + "subtitle": "Make knowledge audible", + "generating": "Generating podcast...", + "generatingStatusWithCount": "Generating podcast ({count} segments generated)...", + "ready": "Audio ready, click to play", + "readyWithCount": "Audio ready ({count} segments generated), click to play", + "preparingFirstAudio": "Preparing first audio segment...", + "preparingAudio": "Preparing audio...", + "completed": "Generation completed ({count} segments total)", + "stopped": "Generation stopped", + "generationFailed": "Generation failed", + "generatePodcast": "Generate Podcast", + "dualPersonPodcast": "Podcast", + "stopGeneration": "Stop Generation", + "downloadAudio": "Download Audio", + "applyToDigitalHuman": "Convert to Digital Human Video", + "generateMore": "Generate More Podcasts", + "historyTitle": "Generated Records", + "toggleSidebar": "Collapse/Expand", + "noHistory": "No history records", + "completedStatus": "Completed", + "generatingStatus": "Generating...", + "showSubtitles": "Show Subtitles", + "hideSubtitles": "Hide Subtitles", + "inputPlaceholder": "Enter article/file link or specify a topic, e.g.: Principles of AI", + "enterLinkOrTopic": "Please enter a link or topic", + "audioReady": "Audio ready", + "audioLoading": "Audio loading, please wait...", + "playbackFailed": "Playback failed, please retry", + "playbackFailedWithError": "Playback failed: {error}", + "audioLoadFailed": "Audio load failed, please check network connection", + "noAudioAvailable": "No audio available", + "noAudioToDownload": "No audio available to download", + "pleaseGenerateFirst": "Please generate a podcast first", + "applySuccess": "Podcast added to audio materials", + "applyFailed": "Failed to apply to digital human", + "loadAudioFailed": "Failed to load podcast audio", + "sessionDataNotFound": "Session data not found, please refresh history", + "loadSessionFailed": "Failed to load session", + "loadAudioFailedDetail": "Failed to load audio", + "audioDecodeFailed": "Audio decode failed: {error}", + "audioLoadFailedNetwork": "Audio load failed, please check network connection", + "audioLoadFailedFormat": "Audio load failed, please check network connection or audio format", + "audioLoadFailedWithError": "Audio load failed: {error}", + "audioMayBeSilent": "Audio playback may be silent, please refresh page and retry", + "unknownError": "Unknown error", + "exampleInputs": [ + "https://github.com/ModelTC/LightX2V", + "Principles of LLM Large Models", + "What is Deep Learning?", + "How to Balance Work and Life?", + "How to Lose Weight Scientifically" + ] + }, + "faceDetectionFailed": "Face detection failed", + "pleaseUploadImage": "Please upload an image first", + "multiRoleModeRequires": "Multi-role mode requires at least 2 roles, please manually add more roles", + "audioSeparationFailed": "Audio separation failed", + "singleRoleModeInfo": "In single-role mode, all characters will use the same audio track for lip-sync.", + "ttsCompleted": "Text-to-speech completed, automatically added to audio materials", + "imageDragSuccess": "Image drag and drop upload successful", + "pleaseDragImage": "Please drag an image file", + "audioDragSuccess": "Audio/video drag and drop upload successful", + "pleaseDragAudio": "Please drag an audio or video file", + "videoDragSuccess": "Video drag and drop upload successful", + "pleaseDragVideo": "Please drag a video file", + "authFailedPleaseRelogin": "Authentication failed, please log in again", + "getGitHubAuthUrlFailed": "Failed to get GitHub authentication URL", + "getGoogleAuthUrlFailed": "Failed to get Google authentication URL", + "pleaseEnterPhoneNumber": "Please enter phone number", + "pleaseEnterValidPhoneNumber": "Please enter a valid phone number format", + "verificationCodeSent": "Verification code sent, please check your SMS", + "sendVerificationCodeFailed": "Failed to send verification code", + "sendVerificationCodeFailedRetry": "Failed to send verification code, please retry", + "pleaseEnterPhoneAndCode": "Please enter phone number and verification code", + "loginSuccess": "Login successful", + "verificationCodeErrorOrExpired": "Verification code error or expired", + "loginFailedRetry": "Login failed, please retry", + "loginError": "An error occurred during login", + "loggedOut": "Logged out", + "loadModelListFailed": "Failed to load model list", + "loadModelFailed": "Failed to load model", + "imageTemplateSelected": "Image template selected", + "loadImageTemplateFailed": "Failed to load image template", + "audioTemplateSelected": "Audio template selected", + "loadAudioTemplateFailed": "Failed to load audio template", + "audioFileUrlFailed": "Failed to get audio file URL", + "audioPlaybackFailed": "Audio playback failed", + "templateLoadingPleaseWait": "Template is loading, please try again later", + "pleaseSelectTaskType": "Please select task type", + "pleaseSelectModel": "Please select model", + "pleaseEnterPrompt": "Please enter prompt", + "promptTooLong": "Prompt length cannot exceed 1000 characters", + "i2vTaskRequiresImage": "Image-to-video task requires uploading a reference image", + "s2vTaskRequiresImage": "Digital human task requires uploading a character image", + "s2vTaskRequiresAudio": "Digital human task requires uploading an audio file", + "animateTaskRequiresImage": "Character replacement task requires uploading a character image", + "animateTaskRequiresVideo": "Character replacement task requires uploading a reference video", + "prepareMultiPersonAudioFailed": "Failed to prepare multi-person audio", + "taskSubmittedButParseFailed": "Task submitted successfully, but failed to parse response", + "refreshTaskListFailed": "Failed to refresh task list", + "getResultFailed": "Failed to get result", + "initFailedPleaseRefresh": "Initialization failed, please refresh the page and try again", + "historyCleared": "History storage cleared", + "historyImageApplied": "History image applied", + "applyHistoryImageFailed": "Failed to apply history image", + "applyHistoryAudioFailed": "Failed to apply history audio", + "audioHistoryUrlFailed": "Failed to get audio history URL", + "imageHistoryCleared": "Image history cleared", + "audioHistoryCleared": "Audio history cleared", + "storageCleared": "Storage cleared", + "clearStorageFailed": "Failed to clear storage", + "loginExpiredPleaseRelogin": "Login expired, please log in again", + "networkRequestFailed": "Network request failed", + "videoLoadTimeout": "Video load timeout, please retry", + "templateDataIncomplete": "Template data incomplete", + "loadMoreInspirationComingSoon": "Load more inspiration feature coming soon...", + "microphonePermissionDenied": "Microphone permission denied. Please click the 🔒 or 🎤 icon on the left side of the Chrome address bar, select 'Allow' microphone access, then refresh the page and try again", + "microphoneNotFound": "Microphone device not found, please check device connection or use another device", + "recordingNotSupportedOnMobile": "Recording is not supported on mobile browsers, you can record video instead", + "microphoneInUse": "Microphone is being used by another application, please close other programs using the microphone and try again", + "microphoneNotCompatible": "Microphone device does not support the required recording parameters, please use another microphone device", + "securityErrorUseHttps": "Security restriction: Please ensure you are accessing the website using HTTPS protocol", + "shareDataIncomplete": "Share data incomplete", + "audioLoadFailed": "Audio load failed", + "pleaseRelogin": "Please log in again", + "pleaseLoginFirst": "Please log in first", + "cancelTaskFailedRetry": "Failed to cancel task, please retry", + "shareFailedRetry": "Share failed, please retry", + "retryTaskFailedRetry": "Failed to retry task, please retry", + "splitingAudio": "Splitting audio in multi-role mode..." +} diff --git a/lightx2v/deploy/server/frontend/src/locales/zh.json b/lightx2v/deploy/server/frontend/src/locales/zh.json new file mode 100644 index 0000000..8aaae13 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/locales/zh.json @@ -0,0 +1,696 @@ +{ + "faceEdit": "脸部编辑", + "adjustFaceBox": "调整角色", + "rolesAndAudio": "多角色模式(拖拽调整角色和音频的配对)", + "roleModeInfo": { + "title": "角色模式说明", + "singleMode": { + "title": "单角色模式", + "points": [ + "所有角色使用同一个音轨进行对口型,多人同时对口型", + "适合单人对话或统一配音场景", + "操作简单,无需手动配对" + ] + }, + "multiMode": { + "title": "多角色模式", + "points": [ + "图片和音轨自动分离,多人情况下每个人有单独的音轨", + "需要手动将角色与音轨配对", + "每个角色只会说对应音轨的内容" + ] + } + }, + "useImage": "使用图片", + "detectingCharacters": "角色识别中...", + "waitingForMultipleRolesAudio": "等待上传多角色对话音频...", + "deleteAudio": "删除音频", + "deleteImage": "删除图片", + "addNewRole": "新增角色", + "adjustFaceBoxDescription": "调整人脸边界框,确保人脸完整显示。", + "adjustFaceBoxConfirm": "调整人脸边界框", + "adjustFaceBoxConfirmDescription": "调整人脸边界框,确保人脸完整显示。", + "adjustFaceBoxConfirmButton": "确认调整", + "adjustFaceBoxCancelButton": "取消", + "adjustFaceBoxSaveButton": "保存", + "detectedCharacters": "检测到的角色", + "starOnGitHub": "Star on GitHub", + "pageNotFound": "页面不存在", + "pageNotFoundDescription": "您访问的页面不存在。", + "goBackHome": "主页", + "goBack": "返回", + "viewAll": "全部", + "viewErrorDetails": "错误详情", + "stop": "停止", + "preview": "预览", + "share": "分享", + "noAvailableTemplates": "暂无可用素材", + "pleaseSelectTaskType": "请先选择任务类型", + "textToSpeech": "文本转语音", + "historyTask": "历史任务", + "total": "共", + "tasks": "条", + "records": "条", + "goToHome": "返回主页", + "imageTemplates": "图片素材", + "audioTemplates": "音频素材", + "noImageTemplates": "目前暂无图片素材", + "noAudioTemplates": "目前暂无音频素材", + "templateDetail": "模板详情", + "viewTemplateDetail": "查看模板详情", + "viewTaskDetails": "查看任务详情", + "taskDetail": "任务详情", + "templateInfo": "模板信息", + "useTemplate": "使用模板", + "model": "模型", + "type": "类型", + "inputMaterials": "上传素材", + "inputImage": "输入图片", + "inputAudio": "输入音频", + "applyImage": "只应用图片", + "applyAudio": "只应用音频", + "featuredTemplates": "精选模版", + "discoverFeaturedCreativity": "发现精选创意", + "refreshRandomTemplates": "随机获取精选模版", + "discover": "发现", + "viewMoreTemplates": "查看更多模版", + "searchTemplates": "搜索模版", + "browseCategories": "分类浏览", + "inspirationGallery": "灵感", + "viewMore": "查看更多", + "more": "更多", + "applyPrompt": "只应用提示词", + "imageApplied": "图片已应用", + "audioApplied": "音频已应用", + "promptApplied": "提示词已应用", + "copy": "复制", + "view": "查看", + "promptCopied": "提示词已复制到剪贴板", + "outputVideo": "输出视频", + "audio": "音频", + "optional": "(选填)", + "pageTitle": "LightX2V服务", + "uploadVideo": "上传视频", + "supportedVideoFormats": "支持 MP4、WebM、QuickTime 格式", + "pleaseEnterThePromptForVideoGeneration": "视频生成提示词", + "describeTheContentStyleSceneOfTheVideo": "描述视频内容、风格、场景等...", + "describeTheDigitalHumanImageBackgroundStyleActionRequirements": "描述数字人表情、动作等,例如:角色应根据音频做出夸张的动作", + "describeTheContentActionRequirementsBasedOnTheImage": "描述基于图片的视频内容、动作要求等...", + "loginSubtitle": "一个强大的视频生成平台", + "loginWithGitHub": "使用GitHub登录", + "loginWithGoogle": "使用Google登录", + "loginWithSMS": "使用短信登录", + "loggingIn": "登录中...", + "logout": "退出登录", + "loggedOut": "已退出登录", + "loginFailed": "登录失败", + "loginError": "登录过程中发生错误", + "authFailed": "认证失败,请重新登录", + "loginExpired": "登录已过期,请重新登录", + "orLoginWith": "或使用以下方式登录", + "login": "登录 / 注册", + "loginLoading": "登录中···", + "sendSmsCode": "发送验证码", + "phoneNumber": "手机号", + "verifyCode": "验证码", + "feature1": "电影级数字人视频", + "feature2": "20倍生成提速", + "feature3": "超低成本生成", + "feature4": "精准口型对齐", + "feature5": "分钟级视频时长", + "feature6": "多场景应用", + "generateVideo": "生成视频", + "history": "历史记录", + "inspiration": "灵感", + "myProjects": "我的项目", + "discoverCreativity": "发现创意,激发灵感", + "searchInspiration": "搜索灵感...", + "refresh": "刷新任务列表", + "refreshTasks": "刷新任务列表", + "noHistoryTasks": "暂无历史任务", + "startToCreateYourFirstAIVideo": "开始创建你的第一个AI视频吧", + "switchLanguage": "切换语言", + "selectTaskType": "选择任务类型", + "selectTaskTypeFirst": "请先选择任务类型", + "noHistoryRecords": "暂无历史记录", + "imageHistoryAutoSave": "开始使用图片后,历史记录将自动保存", + "audioHistoryAutoSave": "开始使用音频后,历史记录将自动保存", + "clearHistory": "清空历史记录", + "clear": "清空", + "promptHistoryAutoSave": "开始创建任务后,提示词将自动保存", + "searchTasks": "搜索任务", + "initializationFailed": "初始化失败,请刷新页面重试", + "whatDoYouWantToDo": "今天想做什么样的视频呢?", + "whatMaterialsDoYouNeed": "创作视频需要什么素材呢?", + "pleaseEnterTheMostDetailedVideoScript": "请输入尽可能详细的视频脚本", + "pleaseUploadAnImageAsTheFirstFrameOfTheVideoAndTheMostDetailedVideoScript": "请上传一张图片作为视频的首帧图,以及尽可能详细的视频脚本", + "pleaseUploadARoleImageAnAudioAndTheGeneralVideoRequirements": "仅需要一张角色图片和一段音频", + "collapseCreationArea": "收起创作区域", + "startCreatingVideo": "开始创作视频···", + "aiIsGeneratingYourVideo": "LightX2V 正在光速生成您的视频...", + "taskProgress": "任务进度", + "subtask": "子任务", + "queuePosition": "还需等待", + "taskSubmittedSuccessfully": "任务已提交成功,加速处理中...", + "taskQueuePleaseWait": "任务有点多,加速排队中...", + "availableWorker": "可用Worker", + "videoGeneratingFailed": "视频生成失败", + "sorryYourVideoGenerationTaskFailed": "很抱歉,您的视频生成任务未能完成。", + "thisTaskHasBeenCancelledYouCanRegenerateOrViewTheMaterialsYouUploadedBefore": "此任务已被取消,您可以重新生成或查看之前上传的素材。", + "taskCompleted": "任务已完成", + "taskFailed": "任务失败", + "taskCancelled": "任务已取消", + "taskRunning": "任务运行中", + "taskPending": "任务排队中", + "taskInfo": "任务信息", + "taskID": "任务ID", + "taskType": "任务类型", + "modelName": "模型名称", + "createTime": "创建时间", + "updateTime": "更新时间", + "viewFailureReason": "查看失败原因", + "failureReason": "失败原因", + "noPrompt": "无提示词", + "uploadMaterials": "上传素材", + "loading": "加载中···", + "image": "图片", + "video": "视频", + "shareTemplate": "分享模板", + "copyShareLink": "分享", + "historyAudio": "历史音频", + "status": "状态", + "browserNotSupported": "您的浏览器不支持播放", + "videoLoadFailed": "视频加载失败", + "loadingVideo": "加载视频中···", + "videoGenerating": "视频生成中", + "succeed": "成功", + "success": "成功", + "failed": "失败", + "running": "运行", + "pending": "排队", + "remaining": "剩余", + "cancelled": "取消", + "all": "全部", + "reuseTask": "复用", + "regenerateTask": "重试", + "cancelTask": "取消", + "retryTask": "重试", + "downloadTask": "下载视频", + "downloadVideo": "下载视频", + "downloadPreparing": "正在准备下载…", + "downloadFetching": "正在获取文件…", + "downloadSaving": "正在保存文件...", + "mobileSaveToAlbumTip": "新窗口打开后长按视频即可保存到相册。", + "mobileSavePreviewTitle": "预览并保存", + "mobileSaveInstruction": "可点击全屏或长按视频,将其保存到手机相册。", + "mute": "静音", + "unmute": "取消静音", + "unsupportedAudioOrVideo": "请选择音频或视频文件。", + "unsupportedVideoFormat": "仅支持 MP4/M4V/MPEG 视频文件转换音频。", + "downloadInProgressNotice": "已有下载任务正在进行,请稍候。", + "downloadCancelledAlert": "已取消下载", + "deleteTask": "删除", + "createVideo": "创建视频", + "selectTemplate": "选择模板", + "uploadImage": "上传图片", + "uploadAudio": "上传音频", + "recordAudio": "录音", + "recording": "录音中...", + "takePhoto": "拍照", + "retake": "重拍", + "usePhoto": "使用照片", + "upload": "上传", + "stopRecording": "停止录音", + "recordingStarted": "开始录音", + "recordingStopped": "录音已停止", + "recordingCompleted": "录音完成", + "recordingFailed": "录音失败", + "enterPrompt": "输入提示词", + "selectModel": "选择模型", + "startGeneration": "开始生成", + "templates": "素材", + "textToVideo": "文生视频", + "imageToVideo": "图生视频", + "speechToVideo": "数字人", + "animate": "角色替换", + "prompt": "提示词(选填)", + "negativePrompt": "负面提示词", + "promptTemplates": "提示词模板", + "promptHistory": "提示词历史", + "uploadImageFile": "上传图片", + "uploadAudioFile": "上传音频", + "dragDropHere": "拖拽文件到此处或点击上传", + "supportedImageFormats": "支持10MB以内的图片", + "supportedAudioFormats": "支持120s以内的音频/视频", + "supportedAudioFormatsShort": "支持120s以内的音频/视频", + "prefillLoadingDefault": "正在准备素材...", + "prefillLoadingTemplate": "正在加载模板素材...", + "prefillLoadingTask": "正在加载任务素材...", + "maxFileSize": "最大文件大小", + "taskId": "任务ID", + "taskStatus": "任务状态", + "createdAt": "创建时间", + "completedAt": "完成时间", + "duration": "持续时间", + "confirm": "确认", + "cancel": "取消", + "save": "保存", + "edit": "编辑", + "delete": "删除", + "close": "关闭", + "copyLink": "复制链接", + "pleaseCopyManually": "请手动选择并复制下面的文本", + "back": "返回", + "next": "下一步", + "previous": "上一步", + "finish": "完成", + "submitting": "提交中...", + "t2vHint1": "输入文字描述,AI将为您生成精彩的视频内容", + "t2vHint2": "支持多种风格:写实、动画、艺术等", + "t2vHint3": "可以描述场景、动作、情感等细节", + "t2vHint4": "让您的创意通过文字变成生动的视频", + "i2vHint1": "上传一张图片,AI将为您生成动态视频", + "i2vHint2": "支持多种图片格式:JPG、PNG、WebP等", + "i2vHint3": "可以生成各种风格的动态效果", + "i2vHint4": "让静态图片动起来,创造无限可能", + "s2vHint1": "上传一张角色图片+一段音频", + "s2vHint2": "AI将让角色根据音频内容说话和动作", + "s2vHint3": "让您的角色栩栩如生地动起来", + "s2vHint4": "来创造属于您的专属数字人吧", + "operationSuccess": "操作成功", + "operationFailed": "操作失败", + "pleaseWait": "请稍候...", + "noData": "暂无数据", + "errorOccurred": "发生错误", + "networkError": "网络错误", + "serverError": "服务器错误", + "deleteTaskConfirm": "删除任务?", + "deleteTaskConfirmMessage": "删除后无法恢复,包括任务记录、生成的文件、相关数据。此操作不可撤销!", + "confirmDelete": "删除", + "regenerateTaskConfirm": "重新生成任务?", + "regenerateTaskConfirmMessage": "重新生成将删除当前任务和已生成的内容,然后使用相同参数创建新任务。此操作不可撤销!", + "confirmRegenerate": "重新生成", + "regeneratingTaskAlert": "正在重新生成任务...", + "deletingTaskAlert": "正在删除任务...", + "taskDeletedSuccessAlert": "任务删除成功", + "deleteTaskFailedAlert": "删除任务失败", + "getTaskDetailFailedAlert": "获取任务详情失败", + "taskNotExistAlert": "任务不存在", + "loadTaskFilesFailedAlert": "加载任务文件失败", + "taskMaterialReuseSuccessAlert": "任务素材复用成功", + "loadTaskDataFailedAlert": "加载任务数据失败", + "fileUnavailableAlert": "文件不可用", + "downloadFailedAlert": "下载失败,请重试。", + "taskSubmitSuccessAlert": "任务提交成功", + "taskSubmitFailedAlert": "任务提交失败", + "submitTaskFailedAlert": "任务提交失败", + "downloadSuccessAlert": "文件下载成功", + "getTaskResultFailedAlert": "获取结果失败", + "downloadTaskResultFailedAlert": "下载结果失败", + "viewTaskResultFailedAlert": "查看结果失败", + "cancelTaskConfirm": "取消任务?", + "cancelTaskConfirmMessage": "取消任务后任务将停止执行,已生成的部分结果可能丢失,可以稍后重新生成。", + "confirmCancel": "取消", + "taskCancelSuccessAlert": "任务取消成功", + "cancelTaskFailedAlert": "取消任务失败", + "taskRetrySuccessAlert": "任务重试成功", + "retryTaskFailedAlert": "重试任务失败", + "taskRegenerateSuccessAlert": "任务重新生成成功", + "regenerateTaskFailedAlert": "重新生成任务失败", + "taskNotFoundAlert": "任务未找到", + "seconds": "秒", + "minutes": "分钟", + "hours": "小时", + "days": "天", + "weeks": "周", + "months": "月", + "years": "年", + "position": "位置", + "calculating": "计算中", + "completed": "已完成", + "unknown": "未知", + "queueing": "排队中", + "overallProgress": "总体进度", + "queueStatus": "排队状态", + "templateApplied": "已应用模板", + "promptHistoryApplied": "已应用历史提示词", + "promptHistoryCleared": "提示词历史已清空", + "getPromptHistoryFailed": "获取提示词历史失败", + "saveTaskHistoryFailed": "保存任务历史失败", + "parseTaskHistoryFailed": "解析任务历史失败", + "getTaskHistoryFailed": "获取任务历史失败", + "getImageHistoryFailed": "获取图片历史失败", + "taskHistorySaved": "任务历史已保存", + "taskHistoryCleared": "任务历史已清空", + "clickToDownload": "点击下载", + "clickApply": "点击应用", + "justNow": "刚刚", + "minutesAgo": "分钟前", + "hoursAgo": "小时前", + "daysAgo": "天前", + "weeksAgo": "周前", + "monthsAgo": "月前", + "yearsAgo": "年前", + "oneMinuteAgo": "一分钟前", + "oneHourAgo": "一小时前", + "oneDayAgo": "一天前", + "oneWeekAgo": "一周前", + "oneMonthAgo": "一个月前", + "oneYearAgo": "一年前", + "shareNotFound": "分享不存在", + "backToHome": "返回首页", + "videoNotAvailable": "视频不可用", + "shareLinkCopied": "分享链接已复制", + "createdWithAI": "由AI生成", + "createSimilar": "做同款", + "createSimilarDescription": "点击按钮使用相同的设置创建您的视频", + "templatesGeneratedByLightX2V": "以下视频由LightX2V生成,鼠标悬停/点击播放", + "randomTemplates": "随机刷新模版", + "shareDataImported": "分享数据已导入", + "shareDataImportFailed": "分享数据导入失败", + "materials": "素材", + "template": "模板", + "templateDescription": "该视频由LightX2V-数字人模型生成", + "pleaseLoginFirst": "请先登录", + "showDetails": "查看详情", + "hideDetails": "隐藏详情", + "oneClickReplication": "一键复刻同款", + "customizableContent": "可自定义内容", + "poweredByLightX2V": "速生视频 - LightX2V", + "latestAIModel": "最新AI数字人模型,飞速生成视频", + "customizableCharacter": "可自由更换角色与音频", + "userGeneratedVideo": "生成的视频", + "noImage": "暂无图片", + "noAudio": "暂无音频", + "noVideo": "暂无视频", + "taskCompletedSuccessfully": "视频生成完成!", + "onlyUseImage": "仅使用图片", + "onlyUseAudio": "仅使用音频", + "reUseImage": "复用图片", + "reUseAudio": "复用音频", + "templateVideo": "语音驱动视频生成模板", + "description": "该视频由 LightX2V 生成", + "timeCost": "耗时 ", + "voiceSynthesis": "语音合成", + "applySelectedVoice": "应用当前选择的声音", + "generatedAudio": "生成的音频", + "synthesizedAudio": "合成音频", + "enterTextToConvert": "输入要转换的文本", + "ttsPlaceholder": "今天的天气好好呀,要一起出去走走吗~", + "voiceInstruction": "语音指令", + "voiceInstructionHint": "(仅适用于v2.0音色)", + "voiceInstructionPlaceholder": "使用指令控制合成语音细节,包括但不限于情绪、语境、方言、语气、速度、音调等,例如:请用温暖亲切的声线介绍", + "voiceInstructionOptional": "语音指令(可选)", + "selectVoice": "选择音色", + "searchVoice": "搜索音色", + "filter": "筛选", + "filterVoices": "筛选音色", + "voiceSettings": "语音设置", + "speechRate": "语速", + "volume": "音量", + "pitch": "音调", + "emotionIntensity": "情感强度", + "emotionType": "情感类型", + "neutral": "中性", + "scene": "场景", + "version": "版本", + "language": "语言", + "gender": "性别", + "reset": "重置", + "done": "完成", + "ttsGenerationFailed": "语音生成失败,请重试", + "applyAudioFailed": "应用音频失败,请重试", + "allScenes": "全部场景", + "generalScene": "通用场景", + "customerServiceScene": "客服场景", + "educationScene": "教育场景", + "funAccent": "趣味口音", + "rolePlaying": "角色扮演", + "audiobook": "有声阅读", + "multilingual": "多语种", + "multiEmotion": "多情感", + "videoDubbing": "视频配音", + "singleSegmentMode": "单段模式", + "multiSegmentMode": "多段模式", + "switchToSingleSegmentMode": "切换到单段模式", + "switchToMultiSegmentMode": "切换到多段模式", + "mergedAudio": "合并音频", + "applyMergedAudio": "应用合并音频", + "addSegment": "添加段落", + "segment": "段落", + "segmentNumber": "段落 {index}", + "dragToReorder": "拖拽调整顺序", + "copySegment": "复制段落", + "deleteSegment": "删除段落", + "segmentCopied": "段落已复制并添加到末尾", + "noSegmentsToApply": "没有可应用的音频段", + "mergedAudioLoadFailed": "合并音频加载失败: {error}", + "mergedAudioFailed": "合并音频失败: {error}", + "playbackFailed": "播放失败: {error}", + "audioDecodeFailed": "音频解码失败: {error}", + "ttsHistoryTitle": "历史记录", + "ttsHistoryHint": "系统会自动保留最近 20 条使用过的文本与语音指令。", + "ttsHistoryEmpty": "暂未保存任何记录", + "ttsHistoryEmptyHint": "生成一次语音即可创建首条历史记录。", + "ttsHistoryTextLabel": "语音文本历史", + "ttsHistoryInstructionLabel": "语音指令历史", + "ttsHistoryTextEmpty": "(文本为空)", + "ttsHistoryInstructionEmpty": "(指令为空)", + "ttsHistoryVoiceLabel": "音色历史", + "ttsHistoryVoiceEmpty": "未设置音色", + "ttsHistoryApply": "使用该记录", + "ttsHistoryApplySelected": "应用", + "ttsHistoryDeleteEntry": "删除此记录", + "ttsHistoryTabCombined": "全部", + "ttsHistoryTabText": "输入文本历史", + "ttsHistoryTabInstruction": "语音指令历史", + "ttsHistoryTabVoice": "音色历史", + "ttsHistoryTitleCombined": "全部历史记录", + "ttsHistoryTitleText": "语音文本历史", + "ttsHistoryTitleInstruction": "语音指令历史", + "ttsHistoryTitleVoice": "音色历史", + "ttsHistoryClear": "清空历史", + "allVersions": "全部版本", + "allLanguages": "全部语言", + "allGenders": "全部性别", + "female": "女性", + "male": "男性", + "taskCountdown": "任务倒计时", + "footer": { + "tagline": "由流光AI - LightX2V驱动的 AI 数字人视频生成平台", + "links": { + "home": "流光 AI 官网", + "github": "GitHub", + "xiaohongshu": "小红书" + }, + "alt": { + "github": "GitHub 标志", + "xiaohongshu": "小红书标志" + }, + "copyright": "© {year} 流光 AI 版权所有" + }, + "tts": { + "title": "AI 语音合成", + "subtitle": "让您的文字变成动听的声音", + "inputText": "请输入要合成的文字", + "voice": "选择音色", + "speed": "语速", + "volume": "音量", + "pitch": "音调", + "emotion": "情感", + "generateVoice": "生成语音", + "cancel": "取消", + "generating": "生成中...", + "generated": "已生成", + "error": "生成失败", + "errorMessage": "请检查输入文本或选择音色", + "voiceOptions": "音色选项", + "fast": "快速", + "normal": "正常", + "slow": "慢速", + "angry": "愤怒", + "happy": "开心", + "sad": "悲伤", + "neutral": "中性", + "excited": "兴奋", + "calm": "平静", + "gentle": "温柔", + "serious": "严肃", + "friendly": "友好", + "professional": "专业", + "child": "儿童", + "robot": "机器人", + "male": "男声", + "female": "女声", + "other": "其他", + "search": "搜索音色", + "noResults": "没有找到相关音色", + "placeholder": "请输入要合成的文字", + "placeholderVoice": "请选择音色", + "placeholderSpeed": "请选择语速", + "placeholderVolume": "请选择音量", + "placeholderPitch": "请选择音调", + "placeholderEmotion": "请选择情感", + "placeholderGenerate": "请点击生成按钮", + "multiSegmentMode": "多段模式", + "singleSegmentMode": "单段模式", + "switchToSingleSegmentMode": "切换到单段模式", + "switchToMultiSegmentMode": "切换到多段模式", + "mergedAudio": "合并音频", + "applyMergedAudio": "应用合并音频", + "addSegment": "添加段落", + "segment": "段落", + "segmentNumber": "段落 {index}", + "dragToReorder": "拖拽调整顺序", + "copySegment": "复制段落", + "deleteSegment": "删除段落", + "selectVoice": "选择音色", + "generate": "生成", + "text": "文本", + "voiceInstructionOptional": "语音指令(可选)", + "segmentCopied": "段落已复制并添加到末尾", + "noSegmentsToApply": "没有可应用的音频段", + "mergedAudioLoadFailed": "合并音频加载失败: {error}", + "mergedAudioFailed": "合并音频失败: {error}", + "unknownError": "未知错误", + "playbackFailed": "播放失败: {error}", + "audioDecodeFailed": "音频解码失败: {error}" + }, + "podcast": { + "exampleInputs.1": "https://github.com/ModelTC/LightX2V", + "exampleInputs.2": "LLM大模型的原理", + "exampleInputs.3": "什么是深度学习?", + "exampleInputs.4": "如何平衡工作和生活?", + "exampleInputs.5": "如何科学减肥", + "title": "AI 双人播客生成器", + "subtitle": "让知识\"听\"得见", + "generating": "正在生成播客...", + "generatingStatusWithCount": "正在生成播客 (已生成 {count} 段)...", + "ready": "音频已就绪,点击播放", + "readyWithCount": "音频已就绪 (已生成 {count} 段),点击播放", + "preparingFirstAudio": "正在准备第一段音频...", + "preparingAudio": "正在准备音频...", + "completed": "生成完成 (共 {count} 段)", + "stopped": "已停止生成", + "generationFailed": "生成失败", + "generatePodcast": "生成播客", + "dualPersonPodcast": "双人播客", + "stopGeneration": "停止生成", + "downloadAudio": "下载音频", + "applyToDigitalHuman": "转为数字人视频", + "generateMore": "生成更多播客", + "historyTitle": "已生成播客记录", + "toggleSidebar": "折叠/展开", + "noHistory": "暂无历史记录", + "completedStatus": "✓ 已完成", + "generatingStatus": "生成中...", + "showSubtitles": "显示字幕", + "hideSubtitles": "隐藏字幕", + "inputPlaceholder": "输入文章/文件链接或指定主题,例如:AI的原理", + "enterLinkOrTopic": "请输入链接或主题", + "audioReady": "音频已就绪", + "audioLoading": "音频加载中,请稍候...", + "playbackFailed": "播放失败,请重试", + "playbackFailedWithError": "播放失败: {error}", + "audioLoadFailed": "音频加载失败,请检查网络连接", + "noAudioAvailable": "暂无音频可播放", + "noAudioToDownload": "暂无音频可下载", + "pleaseGenerateFirst": "请先生成播客", + "applySuccess": "播客已添加到音频素材", + "applyFailed": "应用到数字人失败", + "loadAudioFailed": "加载播客音频失败", + "sessionDataNotFound": "会话数据不存在,请刷新历史记录", + "loadSessionFailed": "加载会话失败", + "loadAudioFailedDetail": "加载音频失败", + "audioDecodeFailed": "音频解码失败: {error}", + "audioLoadFailedNetwork": "音频加载失败,请检查网络连接", + "audioLoadFailedFormat": "音频加载失败,请检查网络连接或音频格式", + "audioLoadFailedWithError": "音频加载失败: {error}", + "audioMayBeSilent": "音频播放可能无声,请刷新页面重试", + "unknownError": "未知错误", + "exampleInputs": [ + "https://github.com/ModelTC/LightX2V", + "LLM大模型的原理", + "什么是深度学习?", + "如何平衡工作和生活?", + "如何科学减肥" + ] + }, + "faceDetectionFailed": "角色识别失败", + "pleaseUploadImage": "请先上传图片", + "multiRoleModeRequires": "多角色模式需要至少2个角色,请手动添加更多角色", + "audioSeparationFailed": "音频分离失败", + "singleRoleModeInfo": "当前为单角色模式,多个角色将统一按照同一个音轨进行对口型同步。", + "ttsCompleted": "语音合成完成,已自动添加到音频素材", + "imageDragSuccess": "图片拖拽上传成功", + "pleaseDragImage": "请拖拽图片文件", + "audioDragSuccess": "音频/视频拖拽上传成功", + "pleaseDragAudio": "请拖拽音频或视频文件", + "videoDragSuccess": "视频拖拽上传成功", + "pleaseDragVideo": "请拖拽视频文件", + "authFailedPleaseRelogin": "认证失败,请重新登录", + "getGitHubAuthUrlFailed": "获取GitHub认证URL失败", + "getGoogleAuthUrlFailed": "获取Google认证URL失败", + "pleaseEnterPhoneNumber": "请输入手机号", + "pleaseEnterValidPhoneNumber": "请输入正确的手机号格式", + "verificationCodeSent": "验证码已发送,请查收短信", + "sendVerificationCodeFailed": "发送验证码失败", + "sendVerificationCodeFailedRetry": "发送验证码失败,请重试", + "pleaseEnterPhoneAndCode": "请输入手机号和验证码", + "loginSuccess": "登录成功", + "verificationCodeErrorOrExpired": "验证码错误或已过期", + "loginFailedRetry": "登录失败,请重试", + "loginError": "登录过程中发生错误", + "loggedOut": "已退出登录", + "loadModelListFailed": "加载模型列表失败", + "loadModelFailed": "加载模型失败", + "imageTemplateSelected": "图片素材已选择", + "loadImageTemplateFailed": "加载图片素材失败", + "audioTemplateSelected": "音频素材已选择", + "loadAudioTemplateFailed": "加载音频素材失败", + "audioFileUrlFailed": "音频文件URL获取失败", + "audioPlaybackFailed": "音频播放失败", + "templateLoadingPleaseWait": "模板正在加载中,请稍后再试", + "pleaseSelectTaskType": "请选择任务类型", + "pleaseSelectModel": "请选择模型", + "pleaseEnterPrompt": "请输入提示词", + "promptTooLong": "提示词长度不能超过1000个字符", + "i2vTaskRequiresImage": "图生视频任务需要上传参考图片", + "s2vTaskRequiresImage": "数字人任务需要上传角色图片", + "s2vTaskRequiresAudio": "数字人任务需要上传音频文件", + "animateTaskRequiresImage": "角色替换任务需要上传角色图片", + "animateTaskRequiresVideo": "角色替换任务需要上传参考视频", + "prepareMultiPersonAudioFailed": "准备多人音频失败", + "taskSubmittedButParseFailed": "任务提交成功,但解析响应失败", + "refreshTaskListFailed": "刷新任务列表失败", + "getResultFailed": "获取结果失败", + "initFailedPleaseRefresh": "初始化失败,请刷新页面重试", + "historyCleared": "历史记录空间已清理", + "historyImageApplied": "已应用历史图片", + "applyHistoryImageFailed": "应用历史图片失败", + "historyAudioApplied": "已应用历史音频", + "applyHistoryAudioFailed": "应用历史音频失败", + "audioHistoryUrlFailed": "音频历史URL获取失败", + "imageHistoryCleared": "图片历史已清空", + "audioHistoryCleared": "音频历史已清空", + "storageCleared": "存储空间已清理", + "clearStorageFailed": "清理存储空间失败", + "loginExpiredPleaseRelogin": "登录已过期,请重新登录", + "networkRequestFailed": "网络请求失败", + "videoLoadTimeout": "视频加载超时,请重试", + "templateDataIncomplete": "模板数据不完整", + "loadMoreInspirationComingSoon": "加载更多灵感功能开发中...", + "microphonePermissionDenied": "麦克风权限被拒绝。请点击Chrome地址栏左侧的🔒或🎤图标,选择允许麦克风访问,然后刷新页面重试", + "microphoneNotFound": "未找到麦克风设备,请检查设备连接或使用其他设备", + "recordingNotSupportedOnMobile": "移动端浏览器不支持录音功能,可以拍摄视频来代替录音", + "microphoneInUse": "麦克风被其他应用占用,请关闭其他使用麦克风的程序后重试", + "microphoneNotCompatible": "麦克风设备不支持所需的录音参数,请使用其他麦克风设备", + "securityErrorUseHttps": "安全限制:请确保使用HTTPS协议访问网站", + "shareDataIncomplete": "分享数据不完整", + "pleaseRelogin": "请重新登录", + "pleaseLoginFirst": "请先登录", + "cancelTaskFailedRetry": "取消任务失败,请重试", + "shareFailedRetry": "分享失败,请重试", + "retryTaskFailedRetry": "重试任务失败,请重试", + "splitingAudio": "多角色模式,自动分割音频中..." +} diff --git a/lightx2v/deploy/server/frontend/src/main.js b/lightx2v/deploy/server/frontend/src/main.js new file mode 100644 index 0000000..04d6dcd --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/main.js @@ -0,0 +1,20 @@ +import { createApp } from 'vue' +import router from './router' + +import './style.css' +import App from './App.vue' +import { createPinia } from 'pinia' + +import i18n, { initLanguage } from './utils/i18n' + +const app = createApp(App) +const pinia = createPinia() + +app.use(i18n) +app.use(pinia) +app.use(router) + +// 初始化语言 +initLanguage().then(() => { + app.mount('#app') + }) diff --git a/lightx2v/deploy/server/frontend/src/router/index.js b/lightx2v/deploy/server/frontend/src/router/index.js new file mode 100644 index 0000000..39523c8 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/router/index.js @@ -0,0 +1,144 @@ +// src/router/index.js +import { createRouter, createWebHistory } from 'vue-router' +import Login from '../views/Login.vue' +import Layout from '../views/Layout.vue' +import Generate from '../components/Generate.vue' +import Projects from '../components/Projects.vue' +import Inspirations from '../components/Inspirations.vue' +import Share from '../views/Share.vue' +import PodcastGenerate from '../views/PodcastGenerate.vue' +import { showAlert } from '../utils/other' +import i18n from '../utils/i18n' + +const routes = [ + { + path: '/', + redirect: (to) => { + // 保留查询参数(用于 OAuth 回调) + return { path: '/generate', query: to.query } + } + }, + { + path: '/login', name: 'Login', component: Login, meta: { requiresAuth: false } + }, + { + path: '/share/:shareId', name: 'Share', component: Share, meta: { requiresAuth: false } + }, + { + path: '/podcast_generate', name: 'PodcastGenerate', component: PodcastGenerate, meta: { requiresAuth: true } + }, + { + path: '/podcast_generate/:session_id', name: 'PodcastSession', component: PodcastGenerate, meta: { requiresAuth: true } + }, + { + path: '/home', + component: Layout, + meta: { + requiresAuth: true + }, + children: [ + { + path: '/generate', + name: 'Generate', + component: Generate, + meta: { requiresAuth: true }, + props: route => ({ query: route.query }) + }, + { + path: '/projects', + name: 'Projects', + component: Projects, + meta: { requiresAuth: true }, + props: route => ({ query: route.query }) + }, + { + path: '/inspirations', + name: 'Inspirations', + component: Inspirations, + meta: { requiresAuth: true }, + props: route => ({ query: route.query }) + }, + { + path: '/task/:taskId', + name: 'TaskDetail', + component: Projects, + meta: { requiresAuth: true }, + props: route => ({ taskId: route.params.taskId, query: route.query }) + }, + { + path: '/template/:templateId', + name: 'TemplateDetail', + component: Inspirations, + meta: { requiresAuth: true }, + props: route => ({ templateId: route.params.templateId, query: route.query }) + }, + ] + }, + { + path: '/:pathMatch(.*)*', + name: 'NotFound', + component: () => import('../views/404.vue') + } +] + +const router = createRouter({ + history: createWebHistory(), + routes +}) + +// 路由守卫 - 整合和优化后的逻辑 +router.beforeEach((to, from, next) => { + const token = localStorage.getItem('accessToken') + console.log('token', token) + // 检查 URL 中是否有 code 参数(OAuth 回调) + // 可以从路由查询参数或实际 URL 中获取 + const hasOAuthCode = to.query?.code !== undefined || + (typeof window !== 'undefined' && new URLSearchParams(window.location.search).get('code') !== null) + + // 1. OAuth 回调处理:如果有 code 参数(GitHub/Google 登录回调),直接放行 + // App.vue 的 onMounted 会处理登录回调逻辑 + if (hasOAuthCode) { + console.log('检测到 OAuth 回调,放行让 App.vue 处理') + next() + return + } + + // 2. 不需要登录的页面(登录页、分享页等) + if (to.meta.requiresAuth === false) { + // 如果已登录用户访问登录页,重定向到生成页面 + if (token && to.path === '/login') { + console.log('已登录用户访问登录页,重定向到生成页') + next('/generate') + } else { + next() + } + return + } + + // 3. 需要登录的页面处理 + if (!token) { + // 未登录但访问需要登录的页面,跳转到登录页 + console.log('需要登录但未登录,跳转到登录页') + next('/login') + // 延迟显示提示,确保路由跳转完成 + setTimeout(() => { + showAlert(i18n.global.t('pleaseLoginFirst'), 'warning') + }, 100) + return + } + + // 4. 已登录用户处理 + // 已登录用户访问首页,重定向到生成页(保留查询参数) + if (to.path === '/') { + console.log('已登录用户访问首页,重定向到生成页') + const query = to.query && Object.keys(to.query).length > 0 ? to.query : {} + next({ path: '/generate', query }) + } else { + // 已登录且访问其他页面,正常放行 + next() + } +}) + + + +export default router; diff --git a/lightx2v/deploy/server/frontend/src/style.css b/lightx2v/deploy/server/frontend/src/style.css new file mode 100644 index 0000000..1d75e5a --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/style.css @@ -0,0 +1,2540 @@ +@import "tailwindcss"; +@import "@flaticon/flaticon-uicons/css/all/all"; +/* Tailwind v4 深色模式配置 */ +@variant dark (&:is(.dark *)); + +@theme { + /* 自定义颜色 */ + --color-primary: #9a72ff; + --color-secondary: #1b1240; + --color-accent: #b78bff; + --color-dark: #0b0a20; + --color-dark-light: #0f0e22; + --color-laser-purple: #d2c1ff; + --color-neon-purple: #a88bff; + --color-electric-purple: #8e88ff; + --font-display: "Inter", "sans-serif"; + --gradient-primary: linear-gradient(135deg, #d2c1ff, #a88bff, #8e88ff); + --gradient-main: linear-gradient(135deg, #0b0a20 0%, #1b1240 50%, #0f0e22 100%); + --box-shadow-neon: 0 0 10px rgba(154, 114, 255, 0.5), 0 0 20px rgba(154, 114, 255, 0.3); + --box-shadow-neon-lg: 0 0 15px rgba(154, 114, 255, 0.7), 0 0 30px rgba(154, 114, 255, 0.5); + --box-shadow-laser: 0 0 20px rgba(154, 114, 255, 0.8), 0 0 40px rgba(154, 114, 255, 0.6), 0 0 60px rgba(154, 114, 255, 0.4), 0 0 80px rgba(154, 114, 255, 0.2); + --box-shadow-laser-intense: 0 0 25px rgba(154, 114, 255, 0.9), 0 0 50px rgba(154, 114, 255, 0.7), 0 0 75px rgba(154, 114, 255, 0.5), 0 0 100px rgba(154, 114, 255, 0.3), 0 0 125px rgba(154, 114, 255, 0.1); + --box-shadow-electric: 0 0 15px rgba(124, 106, 255, 0.8), 0 0 30px rgba(124, 106, 255, 0.6), 0 0 45px rgba(124, 106, 255, 0.4); + }; + +:root { + --gradient-primary: linear-gradient(135deg, #d2c1ff, #a88bff, #8e88ff); + color: white; + + /* Apple 极简黑白风格 - 品牌色 */ + --brand-primary: #90dce1; + --brand-primary-light: #90dce1; + --brand-primary-rgb: 89, 194, 233; + --brand-primary-light-rgb: 142, 220, 255; + + /* Apple 极简黑白风格 - 基础颜色 */ + --text-primary: #1d1d1f; /* 浅色模式主要文字 */ + --text-primary-dark: #f5f5f7; /* 深色模式主要文字 */ + --text-secondary: #86868b; /* 浅色模式次要文字/图标 */ + --text-secondary-dark: #98989d; /* 深色模式次要文字/图标 */ + + --bg-primary: #ffffff; /* 浅色模式主背景 */ + --bg-primary-dark: #000000; /* 深色模式主背景 */ + --bg-secondary: #f5f5f7; /* 浅色模式次要背景 */ + --bg-secondary-dark: #1c1c1e; /* 深色模式次要背景 */ + + --card-bg: rgba(255, 255, 255, 0.8); /* 浅色模式卡片背景 */ + --card-bg-dark: rgba(44, 44, 46, 0.8); /* 深色模式卡片背景 */ + --card-bg-hover-dark: #3a3a3c; /* 深色模式卡片 hover 背景 */ + + --surface-bg: rgba(255, 255, 255, 0.95); /* 浅色模式表面背景 */ + --surface-bg-dark: rgba(30, 30, 30, 0.95); /* 深色模式表面背景 */ + + --border-light: rgba(0, 0, 0, 0.06); /* 浅色模式浅边框 */ + --border-light-dark: rgba(255, 255, 255, 0.08); /* 深色模式浅边框 */ + --border-medium: rgba(0, 0, 0, 0.08); /* 浅色模式中等边框 */ + --border-medium-dark: rgba(255, 255, 255, 0.12); /* 深色模式中等边框 */ +} + +/* Apple 风格全局主题样式 */ +html { + background: #ffffff; + color: #1d1d1f; + transition: background-color 0.15s ease, color 0.15s ease; + will-change: background-color, color; +} + +html.dark { + background: #000000; + color: #f5f5f7; +} + +/* 主题切换时禁用过渡动画,提高切换速度 */ +html.theme-transitioning, +html.theme-transitioning * { + transition: none !important; +} + +/* Body 主题支持 */ +body { + background: #ffffff; + color: #1d1d1f; + transition: background-color 0.15s ease, color 0.15s ease; + will-change: background-color, color; +} + +html.dark body { + background: #000000; + color: #f5f5f7; +} + +/* 减少登录页面闪烁 */ +.login-container { + transition: opacity 0.3s ease-in-out; +} + +.main-container { + transition: opacity 0.3s ease-in-out; +} + +/* 防止翻译闪烁 */ +.app-loading { + opacity: 0; + transition: opacity 0.2s ease-in-out; +} + +.app-loaded { + opacity: 1; +} +/* 确保html和body能够正确填充 */ +html { + height: 100%; + width: 100%; + overflow: hidden; +} + +/* body 作为 #app 的容器 */ +body { + margin: 0; + padding: 0; + width: 100vw; + height: 100vh; + overflow: hidden; +} + +@layer utilities { + .content-auto { + content-visibility: auto; + } + .text-gradient { + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + /* 新增渐变图标颜色类 */ + .text-gradient-primary { + background: var(--gradient-primary); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + } + .scrollbar-thin { + scrollbar-width: thin; + } + .scrollbar-thin::-webkit-scrollbar { + width: 6px; + height: 6px; + } + .scrollbar-thin::-webkit-scrollbar-thumb { + background-color: rgba(210, 193, 255, 0.6); + border-radius: 3px; + } + .scrollbar-thin::-webkit-scrollbar-track { + background-color: rgba(31, 41, 55, 0.3); + border-radius: 3px; + } + .scrollbar-thin::-webkit-scrollbar-thumb:hover { + background-color: rgba(210, 193, 255, 0.8); + } + + /* 自定义滚动条颜色 */ + .scrollbar-thumb-laser-purple\/30::-webkit-scrollbar-thumb { + background-color: rgba(168, 85, 247, 0.3); + } + .scrollbar-track-gray-800\/30::-webkit-scrollbar-track { + background-color: rgba(31, 41, 55, 0.3); + } + + /* 历史任务区域滚动条样式 - 与主内容区域保持一致 */ + .history-tasks-scroll::-webkit-scrollbar { + width: 8px !important; + } + + .history-tasks-scroll::-webkit-scrollbar-track { + background: rgba(27, 18, 64, 0.3) !important; + border-radius: 4px; + } + + .history-tasks-scroll::-webkit-scrollbar-thumb { + background: linear-gradient(135deg, rgba(210, 193, 255, 0.8), rgba(168, 139, 255, 0.8)) !important; + border-radius: 4px; + border: 1px solid rgba(210, 193, 255, 0.3); + } + + .history-tasks-scroll::-webkit-scrollbar-thumb:hover { + background: linear-gradient(135deg, rgba(210, 193, 255, 1), rgba(168, 139, 255, 1)) !important; + } + + /* Apple 极简风格滚动条 */ + .main-scrollbar { + scroll-behavior: smooth; + -webkit-overflow-scrolling: touch; + } + + /* 滚动条轨道 - Apple 风格(几乎透明) */ + .main-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; + } + + .main-scrollbar::-webkit-scrollbar-track { + background: transparent; + } + + /* 滚动条滑块 - Apple 极简风格 */ + .main-scrollbar::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.2); + border-radius: 3px; + border: none; + transition: background 0.2s ease; + } + + .main-scrollbar::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.35); + } + + /* 深色模式下的滚动条 */ + .dark .main-scrollbar::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.15); + } + + .dark .main-scrollbar::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.25); + } + + /* Firefox 滚动条样式 */ + .main-scrollbar { + scrollbar-width: thin; + scrollbar-color: rgba(0, 0, 0, 0.2) transparent; + } + + .dark .main-scrollbar { + scrollbar-color: rgba(255, 255, 255, 0.15) transparent; + } + .animate-pulse-slow { + animation: pulse 3s cubic-bezier(0.4, 0, 0.6, 0.5) infinite; + } + .animate-electric-pulse { + animation: electricPulse 1.5s ease-in-out infinite; + } + @keyframes electricPulse { + 0%, 100% { + box-shadow: 0 0 15px rgba(142, 136, 255, 0.8), 0 0 30px rgba(142, 136, 255, 0.6); + transform: scale(1); + } + 50% { + box-shadow: 0 0 25px rgba(142, 136, 255, 1), 0 0 50px rgba(142, 136, 255, 0.8), 0 0 75px rgba(142, 136, 255, 0.4); + transform: scale(1.02); + } + } + .bg-laser-gradient { + background: linear-gradient(135deg, #d2c1ff 0%, #a88bff 25%, #8e88ff 50%, #d2c1ff 75%, #a88bff 100%); + background-size: 200% 200%; + animation: gradientShift 3s ease-in-out infinite; + } + @keyframes gradientShift { + 0%, 100% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + } + .text-laser-glow { + text-shadow: 0 0 10px rgba(154, 114, 255, 0.8), 0 0 20px rgba(154, 114, 255, 0.6), 0 0 30px rgba(154, 114, 255, 0.4); + } + .border-laser { + border-color: #d2c1ff; + box-shadow: 0 0 15px rgba(154, 114, 255, 0.6), inset 0 0 15px rgba(154, 114, 255, 0.1); + } + .btn-primary{ + padding: 15px 25px; + border-radius: 14px; + font-weight: 500; + font-size: 14px; + letter-spacing: 0.2px; + font-family: 'Inter', sans-serif; + background: linear-gradient(135deg, #d2c1ff, #a88bff, #8e88ff); + border: 0; + text-decoration: none; + box-shadow: 0 10px 30px rgba(140, 110, 255, 0.4); + transition: transform 0.15s ease, box-shadow 0.15s ease; + } + .btn-primary:hover{ + transform: translateY(-1px); + box-shadow: 0 14px 40px rgba(140, 110, 255, 0.55); + } + /* 修复布局问题 */ + .task-type-btn { + padding: 0.75rem 1rem; + font-size: 0.875rem; + font-weight: 500; + transition-property: color, background-color; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + + .task-type-btn:hover { + background-color: rgba(154, 114, 255, 0.1); + } + + .model-selection { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + } + + .upload-section { + display: grid; + grid-template-columns: repeat(1, minmax(0, 1fr)); + gap: 1.5rem; + margin-bottom: 1.5rem; + } + + @media (min-width: 768px) { + .upload-section { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + .upload-area { + position: relative; + border: 2px dashed rgba(154, 114, 255, 0.4); + border-radius: 0.75rem; + padding: 1.5rem; + text-align: center; + justify-content: center; + align-items: center; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + cursor: pointer; + height: 30vh; + background-color: rgba(27, 18, 64, 0.1); + } + + /* 光球按钮样式 */ + .floating-orb-btn { + position: relative; + width: 100px; + height: 100px; + border-radius: 50%; + background: linear-gradient(135deg, #9a72ff, #a855f7, #ec4899); + border: none; + cursor: pointer; + transition: all 0.3s ease; + overflow: hidden; + box-shadow: 0 4px 20px rgba(154, 114, 255, 0.4); + } + + .floating-orb-btn:hover { + transform: scale(1.1); + box-shadow: 0 0 40px rgba(154, 114, 255, 0.8), 0 0 80px rgba(154, 114, 255, 0.6); + } + + .orb-glow { + position: absolute; + inset: -15px; + border-radius: 50%; + background: radial-gradient(circle, rgba(154, 114, 255, 0.3) 0%, transparent 70%); + animation: pulse 2s infinite; + } + + .orb-content { + position: relative; + z-index: 2; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + color: white; + } + + @keyframes pulse { + 0%, 100% { opacity: 0.5; transform: scale(1); } + 50% { opacity: 0.8; transform: scale(1.05); } + } + + /* 创作区域样式 */ + .creation-area { + opacity: 0; + transform: scale(0.8) translateY(20px); + pointer-events: none; + transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); + transform-origin: center center; + } + + .creation-area.show { + opacity: 1; + transform: scale(1) translateY(0); + pointer-events: auto; + } + + .creation-area.hide { + opacity: 0; + transform: scale(0.8) translateY(20px); + pointer-events: none; + } + + /* 提示文字淡入动画 */ + .animate-fade-in { + animation: fadeIn 0.5s ease-in-out; + } + + @keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + + /* 提示文字滚动动画 */ + .hint-fade-enter-active, .hint-fade-leave-active { + transition: all 0.5s ease-in-out; + } + .hint-fade-enter-from { + opacity: 0; + transform: translateY(20px); + } + .hint-fade-leave-to { + opacity: 0; + transform: translateY(-20px); + } + + .upload-area:hover { + border-color: rgba(154, 114, 255, 0.7); + box-shadow: 0 0 20px rgba(154, 114, 255, 0.8), 0 0 40px rgba(154, 114, 255, 0.6), 0 0 60px rgba(154, 114, 255, 0.4), 0 0 80px rgba(154, 114, 255, 0.2); + } + + .upload-icon { + margin: 0 auto; + width: 4rem; + height: 4rem; + background-color: rgba(154, 114, 255, 0.2); + border-radius: 9999px; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 1rem; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + } + + .upload-icon { + background-color: rgba(154, 114, 255, 0.3); + } + + /* 图片预览占据整个上传区域 */ + .image-preview { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(154, 114, 255, 0.1); + cursor: pointer; + } + + .image-preview img { + height: 100%; + width: auto; + max-width: 100%; + display: block; + margin: 0 auto; + object-fit: contain; + transition: all 0.3s ease; + background-color: rgba(154, 114, 255, 0.1); + cursor: pointer; + } + + /* 音频预览占据整个上传区域 */ + .audio-preview { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; + z-index: 10; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(154, 114, 255, 0.1); + cursor: pointer; + } + + .audio-preview audio { + width: 90%; + height: 60px; + max-height: 80%; + border-radius: 0.5rem; + background-color: rgba(27, 18, 64, 0.3); + display: block; + } + + /* 确保音频控件在容器中正确显示 */ + .audio-preview audio::-webkit-media-controls { + background-color: rgba(27, 18, 64, 0.5); + border-radius: 0.5rem; + } + + /* 上传内容样式 */ + .upload-content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .btn-close { + position: absolute; + top: 0.5rem; + right: 0.5rem; + background-color: #ef4444; + color: white; + border-radius: 9999px; + width: 1.5rem; + height: 1.5rem; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + cursor: pointer; + z-index: 20; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + } + + /* 整体缩放80% - 放大容器后缩放,使得铺满屏幕 */ + #app { + display: flex; + width: 125%; + height: 125%; + transform: scale(0.8); + transform-origin: 0 0; + overflow: visible; + } + + /* Firefox 兼容 */ + @supports (-moz-appearance: none) { + #app { + -moz-transform: scale(0.8); + -moz-transform-origin: 0 0; + } + } + + .bg-linear-dark { + background-color: linear-gradient(135deg, #0b0a20 0%, #1b1240 50%, #0f0e22 100%); + } + + aside { + flex-shrink: 0; + width: 280px; /* 默认展开宽度 */ + min-width: 3rem; /* 最小宽度 */ + max-width: 500px; /* 最大宽度 */ + background-color: transparent; + border-right: 1px solid rgba(154, 114, 255, 0.4); + display: flex; + flex-direction: column; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 300ms; + z-index: 10; + position: relative; + } + + /* 拖拽调整器 */ + .resize-handle { + position: absolute; + top: 0; + right: 0; + width: 6px; + height: 100%; + background: transparent; + cursor: col-resize; + z-index: 50; + transition: background-color 0.2s ease; + } + + .resize-handle:hover { + background: rgba(154, 114, 255, 0.5); + } + + .resize-handle:active { + background: rgba(154, 114, 255, 0.8); + } + + /* 确保拖拽手柄可见 */ + .resize-handle::before { + content: ''; + position: absolute; + top: 50%; + right: 1px; + width: 2px; + height: 20px; + background: rgba(154, 114, 255, 0.3); + transform: translateY(-50%); + border-radius: 1px; + } + + /* 拖拽时的视觉反馈 */ + .resizing { + user-select: none; + pointer-events: none; + } + + .resizing * { + pointer-events: none; + } + + main { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + width: calc(100% - 280px); /* 主内容区域占据剩余宽度,适应展开的侧边栏 */ + height: 100%; + } + + /* 内容区域全屏显示 */ + .content-area { + flex: 1; + overflow-y: auto; + /* background-color: #0b0a20; */ + padding: 1rem; + width: 100%; + min-height: 0; /* 确保flex子元素可以收缩 */ + } + + /* 任务创建面板全屏 */ + #task-creator { + max-width: none; + width: 80%; + } + + #inspiration-gallery { + max-width: none; + width: 90%; + padding: 0 1rem; + } + + /* 移动端全屏显示 */ + @media (max-width: 768px) { + #task-creator { + width: 95%; + } + + #inspiration-gallery { + width: 100%; + padding: 0 0.5rem; + } + + /* 任务详情面板移动端全屏 */ + .task-detail-panel { + width: 100%; + padding: 0 0.5rem; + } + + /* 任务运行面板移动端全屏 */ + .task-running-panel { + width: 100%; + padding: 0 0.5rem; + } + + /* 任务失败面板移动端全屏 */ + .task-failed-panel { + width: 100%; + padding: 0 0.5rem; + } + + /* 任务取消面板移动端全屏 */ + .task-cancelled-panel { + width: 100%; + padding: 0 0.5rem; + } + + /* 移动端内容区域调整 */ + .content-area { + padding: 0.5rem !important; + } + + /* 移动端创作区域调整 */ + .creation-area-container { + padding: 0.5rem; + } + } + + /* 任务详情面板全屏 */ + .task-detail-panel { + max-width: none; + width: 90%; + padding: 0 0rem; + } + + /* 上传区域全屏布局 */ + .upload-section { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 2rem; + margin-bottom: 2rem; + width: 100%; + } + + /* 任务类型选择全屏 */ + .task-type-selection { + width: 100%; + margin-bottom: 2rem; + } + + .task-type-buttons { + display: flex; + width: 100%; + border-bottom: 1px solid rgba(154, 114, 255, 0.3); + } + + .task-type-btn { + flex: 1; + padding: 1rem 1.5rem; + font-size: 1rem; + font-weight: 500; + transition-property: color, background-color; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + text-align: center; + } + + + /* 模型选择全屏 */ + .model-selection { + display: flex; + flex-wrap: wrap; + gap: 1rem; + width: 100%; + justify-content: flex-start; + } + + /* 提示词输入全屏 */ + .prompt-input-section { + width: 100%; + margin-bottom: 2rem; + } + + .prompt-textarea { + width: 100%; + min-height: 150px; + resize: vertical; + } + + + + /* 移动端响应式设计 */ + @media (max-width: 640px) { + /* 通用移动端样式 */ + .mobile-bottom-nav { + width: 100% !important; + height: auto !important; + padding: 0 !important; + backdrop-filter: blur(20px) !important; + z-index: 50 !important; + } + + .mobile-nav-buttons { + display: flex !important; + flex-direction: row !important; + justify-content: center !important; + align-items: center !important; + gap: 1rem !important; + padding: 1rem !important; + width: 100% !important; + } + + /* 确保LeftBar容器在小屏幕下居中 */ + .relative.w-20.pl-5.flex.flex-col.z-10 { + margin-left: auto !important; + margin-right: auto !important; + padding-left: 0 !important; + } + + .mobile-nav-btn { + width: 3rem !important; + height: 3rem !important; + flex-shrink: 0 !important; + } + + + /* 主布局调整为垂直布局 */ + .flex.flex-row { + flex-direction: column; + } + + /* 左侧功能区在移动端移动到下方 */ + .p-2.flex.flex-col.justify-center.h-full { + margin-top: 0 !important; + padding: 1rem !important; + } + + .p-2.flex.flex-col.justify-center.h-full nav { + display: flex !important; + flex-direction: row !important; + justify-content: space-around !important; + align-items: center !important; + gap: 1rem !important; + } + + /* 确保按钮容器在移动端完全对齐 */ + .mobile-nav-buttons .relative.group { + display: flex !important; + justify-content: center !important; + align-items: center !important; + flex: 1 !important; + margin: 0 !important; + } + + /* 按钮在移动端调整大小 */ + .p-2.flex.flex-col.justify-center.h-full nav button { + width: 3rem !important; + height: 3rem !important; + flex-shrink: 0 !important; + } + + + /* 历史任务区域调整 */ + .flex-1.overflow-y-auto.p-10.content-area.main-scrollbar { + padding: 1rem !important; + } + + /* 搜索和筛选区域在移动端垂直排列 */ + .flex.flex-col.gap-4.mb-6 { + flex-direction: column !important; + gap: 1rem !important; + } + + /* 筛选按钮在移动端换行 */ + .flex.gap-2 { + flex-wrap: wrap !important; + gap: 0.5rem !important; + } + + .flex.gap-2 button { + font-size: 0.75rem !important; + padding: 0.5rem 0.75rem !important; + } + + /* 上传区域在移动端调整 */ + .upload-section { + grid-template-columns: 1fr !important; + gap: 1rem !important; + } + + .upload-area { + padding: 1rem !important; + } + + /* 任务类型选择在移动端调整 */ + .grid.grid-cols-1.gap-4 { + grid-template-columns: 1fr !important; + gap: 0.75rem !important; + } + + /* 模型选择在移动端调整 */ + .grid.grid-cols-2.gap-3 { + grid-template-columns: repeat(2, 1fr) !important; + gap: 0.5rem !important; + } + + /* 参数设置区域在移动端调整 */ + .bg-dark-light.rounded-xl.p-6 { + padding: 1rem !important; + } + + /* 提交按钮在移动端调整 */ + .btn-primary.flex.items-center.justify-center.px-8.py-3 { + width: 100% !important; + padding: 1rem !important; + } + + /* 灵感广场移动端适配 */ + .grid.grid-cols-1.gap-6 { + grid-template-columns: 1fr !important; + gap: 1rem !important; + } + + /* 模态框在移动端调整 */ + .fixed.inset-0.z-50 { + padding: 1rem !important; + } + + .bg-dark.rounded-2xl.shadow-2xl.max-w-4xl.w-full { + max-height: 90vh !important; + margin: 0 !important; + } + } + + /* 超小屏幕适配 (iPhone SE等) */ + @media (max-width: 375px) { + /* 底部导航按钮更紧凑 */ + .p-2.flex.flex-col.justify-center.h-full nav button { + width: 2.5rem !important; + height: 2.5rem !important; + } + + + /* 主内容区域调整 */ + .flex-1.flex.flex-col.min-h-0 { + margin-bottom: 4rem !important; + } + + /* 搜索框和按钮调整 */ + .flex.flex-col.gap-4.mb-6 input { + font-size: 0.875rem !important; + } + + .flex.gap-2 button { + font-size: 0.7rem !important; + padding: 0.4rem 0.6rem !important; + } + + /* 任务卡片在超小屏幕调整 */ + .bg-dark-light.rounded-xl.p-4 { + padding: 0.75rem !important; + } + + /* 上传区域在超小屏幕调整 */ + .upload-area { + padding: 0.75rem !important; + } + + .upload-area p { + font-size: 0.875rem !important; + } + + /* 模态框在超小屏幕调整 */ + .fixed.inset-0.z-50 { + padding: 0.5rem !important; + } + + .bg-dark.rounded-2xl.shadow-2xl.max-w-4xl.w-full { + max-height: 95vh !important; + } + + /* 超小屏幕表单优化 */ + .sms-login-form .form-control { + font-size: 13px !important; + padding: 12px 16px !important; + } + + .sms-login-form .btn-sms-code { + min-width: 100px !important; + font-size: 12px !important; + padding: 6px 12px !important; + } + + .sms-login-form .btn-placeholder { + min-width: 100px !important; + } + } + + /* 分页组件样式 */ + .pagination-container { + border-bottom: 1px solid rgba(154, 114, 255, 0.15); + padding-bottom: 0.5rem; + } + + .pagination-btn-compact { + background: rgba(27, 18, 64, 0.2); + border: 1px solid rgba(154, 114, 255, 0.2); + color: rgba(255, 255, 255, 0.6); + min-width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + font-size: 10px; + } + + .pagination-btn-compact:hover:not(.disabled) { + background: rgba(154, 114, 255, 0.15); + border-color: rgba(154, 114, 255, 0.4); + color: rgba(255, 255, 255, 0.8); + transform: translateY(-0.5px); + } + + .pagination-btn-compact.active { + background: linear-gradient(135deg, rgba(154, 114, 255, 0.6), rgba(168, 139, 255, 0.6)); + border-color: rgba(154, 114, 255, 0.6); + color: white; + box-shadow: 0 0 6px rgba(154, 114, 255, 0.4); + } + + .pagination-btn-compact.disabled { + opacity: 0.3; + cursor: not-allowed; + background: rgba(27, 18, 64, 0.05); + border-color: rgba(154, 114, 255, 0.05); + color: rgba(255, 255, 255, 0.2); + } + + .pagination-btn-compact.disabled:hover { + transform: none; + background: rgba(27, 18, 64, 0.05); + border-color: rgba(154, 114, 255, 0.05); + color: rgba(255, 255, 255, 0.2); + } + + /* 页码输入框样式 */ + .page-input { + width: 8px; + height: 5px; + text-align: center; + font-size: 12px; + border-radius: 4px; + background: linear-gradient(135deg, rgba(154, 114, 255, 0.3), rgba(168, 139, 255, 0.3)); + border: 1px solid rgba(154, 114, 255, 0.4); + color: white; + outline: none; + transition: all 0.2s ease; + font-weight: 500; + } + + .page-input:focus { + border-color: rgba(154, 114, 255, 0.8); + background: linear-gradient(135deg, rgba(154, 114, 255, 0.5), rgba(168, 139, 255, 0.5)); + box-shadow: 0 0 6px rgba(154, 114, 255, 0.4); + } + + .page-input::-webkit-outer-spin-button, + .page-input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + + .page-input[type=number] { + -moz-appearance: textfield; + } + + /* 修复状态指示器 */ + .status-indicator { + width: 0.75rem; + height: 0.75rem; + border-radius: 9999px; + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); + } + + /* 修复按钮样式 */ + .btn-primary { + padding: 12px 22px; + border-radius: 14px; + font-weight: 700; + letter-spacing: 0.2px; + background: linear-gradient(135deg, #d2c1ff, #a88bff, #8e88ff); + border: 0; + text-decoration: none; + box-shadow: 0 10px 30px rgba(140, 110, 255, 0.4); + transition: transform 0.15s ease, box-shadow 0.15s ease; + cursor: pointer; + display: inline-block; + } + + .btn-primary:hover { + transform: translateY(-1px); + box-shadow: 0 14px 40px rgba(140, 110, 255, 0.55); + } + + /* 修复模型按钮样式 */ + .model-btn { + padding: 0.5rem 1rem; + border-radius: 0.5rem; + font-size: 0.875rem; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + cursor: pointer; + border: 1px solid; + } + + .model-btn.active { + background-color: rgba(154, 114, 255, 0.2); + border-color: rgba(154, 114, 255, 0.4); + box-shadow: 0 0 20px rgba(154, 114, 255, 0.8), 0 0 40px rgba(154, 114, 255, 0.6), 0 0 60px rgba(154, 114, 255, 0.4), 0 0 80px rgba(154, 114, 255, 0.2); + animation: electricPulse 1.5s ease-in-out infinite; + } + + /* 确保内容区域正确滚动 */ + .content-scroll { + flex: 1; + overflow-y: auto; + } + + /* 任务进行中面板样式 */ + .task-running-panel .animate-pulse-slow { + animation: pulse 3s cubic-bezier(0.4, 0, 0.6, 0.5) infinite; + } + + @keyframes shimmer { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(100%); } + } + + .subtask-item { + background: rgba(27, 18, 64, 0.2); + border: 1px solid rgba(154, 114, 255, 0.2); + border-radius: 8px; + padding: 0.75rem; + margin: 0.5rem 0; + } + + .subtask-header { + display: flex; + justify-content: between; + align-items: center; + margin-bottom: 0.5rem; + } + + .subtask-status { + padding: 0.25rem 0.5rem; + border-radius: 4px; + font-size: 0.75rem; + font-weight: 500; + } + + .subtask-status.pending { + background: rgba(251, 191, 36, 0.2); + color: #fbbf24; + } + + .subtask-status.running { + background: rgba(59, 130, 246, 0.2); + color: #3b82f6; + } + + .subtask-info { + font-size: 0.75rem; + color: rgba(255, 255, 255, 0.6); + margin-top: 0.25rem; + } + + /* 任务失败面板样式 */ + .task-failed-panel .bg-red-500\/10 { + background-color: rgba(239, 68, 68, 0.1); + } + + .error-details { + background: rgba(239, 68, 68, 0.1); + border: 1px solid rgba(239, 68, 68, 0.3); + border-radius: 8px; + padding: 1rem; + margin: 1rem 0; + text-align: left; + } + + .error-details pre { + background: rgba(0, 0, 0, 0.3); + border-radius: 4px; + padding: 0.75rem; + margin: 0.5rem 0 0 0; + font-size: 0.75rem; + color: #fca5a5; + overflow-x: auto; + white-space: pre-wrap; + word-break: break-word; + } + + .subtask-error { + background: rgba(239, 68, 68, 0.05); + border-left: 3px solid #ef4444; + padding: 0.75rem; + margin: 0.5rem 0; + border-radius: 0 4px 4px 0; + } + + .subtask-error pre { + background: #1a1a1a; + border: 1px solid #dc2626; + border-radius: 6px; + padding: 12px; + margin: 8px 0; + color: #fca5a5; + font-size: 12px; + line-height: 1.4; + white-space: pre-wrap; + word-break: break-word; + max-height: 200px; + overflow-y: auto; + } + + .error-details { + animation: slideDown 0.3s ease-out; + } + + @keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + + .task-detail-panel video { + width: 100%; + height: 100%; + object-fit: cover; + } + + /* 素材预览样式 */ + + /* 任务状态指示器增强 */ + .status-indicator { + position: relative; + } + + .status-indicator::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 0.25rem; + height: 0.25rem; + background-color: currentColor; + border-radius: 50%; + opacity: 0.8; + } + + /* 响应式任务面板 */ + @media (max-width: 768px) { + .task-detail-panel { + padding: 0 0.5rem; + } + } + + /* 提示消息动画 */ + .animate-slide-down { + animation: slideDown 0.3s ease-out; + } + + @keyframes slideDown { + 0% { + opacity: 0; + transform: translate(-50%, -100%); + } + 100% { + opacity: 1; + transform: translate(-50%, 0); + } + } + + /* 提示消息样式 - 统一浅色透明背景 */ + .alert { + backdrop-filter: blur(15px); + background: rgba(0, 0, 0, 0.8); + border-radius: 0.75rem; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + color: #fff; + } +} + + .floating-toggle-btn { + position: fixed; + top: 50%; + left: 256px; /* 默认位置,对应 w-64 (256px) */ + transform: translateY(-50%); + width: 20px; + height: 40px; + background: linear-gradient(135deg, #1a1a2e 0%, #2a2a4e 50%, #1e1e3e 100%); + border: 1px solid rgba(139, 92, 246, 0.3); + border-left: none; + border-radius: 0 8px 8px 0; + color: #9ca3af; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: background-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease; + z-index: 20; + box-shadow: 2px 0 8px rgba(0, 0, 0, 0.3); + } + + .floating-toggle-btn:hover { + background: linear-gradient(135deg, #2a2a4e 0%, #3a3a5e 50%, #2e2e4e 100%); + color: #8b5cf6; + box-shadow: 2px 0 12px rgba(139, 92, 246, 0.3); + } + + .floating-toggle-btn.collapsed { + border-radius: 0 8px 8px 0; + border-left: 1px solid rgba(139, 92, 246, 0.3); + border-right: none; + } + + .resizing .floating-toggle-btn { + transition: none !important; + } + + .left-glow-zone.show-glow { + opacity: 1; + } + + .history-section { + max-height: calc(100% - 200px); + border-radius: 0 12px 12px 0; + border: 2px solid rgba(139, 92, 246, 0.4); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + margin: 8px 8px 8px 0; + transition: all 0.3s ease; + cursor: pointer; + background: rgba(139, 92, 246, 0.05); + } + + .history-section:hover { + background: rgba(139, 92, 246, 0.05) !important; + border-color: rgba(139, 92, 246, 0.15) !important; + box-shadow: 0 0 20px rgba(154, 114, 255, 0.8), 0 0 40px rgba(154, 114, 255, 0.6), 0 0 60px rgba(154, 114, 255, 0.4), 0 0 80px rgba(154, 114, 255, 0.2); + transform: translateY(-2px); + } + + .history-section:hover { + background: rgba(139, 92, 246, 0.08) !important; + } + + /* 修复任务项样式 */ + .task-item { + border: 1px solid rgba(139, 92, 246, 0.3); + padding: 0.75rem; + border-radius: 0.5rem; + cursor: pointer; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; + transition: all 0.2s ease; + } + + .task-item:hover { + border: 1px solid rgba(167, 132, 255, 0.2); + background-color: rgba(167, 132, 255, 0.2); + transform: translateX(5px); + } + + /* 任务操作菜单样式 */ + .task-menu-container { + position: relative; + } + + .task-menu-dropdown { + animation: fadeInUp 0.2s ease-out; + } + + @keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + + .task-menu-item { + transition: all 0.2s ease; + } + + .task-menu-item:hover { + transform: translateX(2px); + } + + /* 短信登录样式 */ + .sms-login-form { + background: transparent; + border-radius: 0; + padding: 0; + border: none; + margin: 0 auto 2rem auto; + max-width: 80%; + animation: slideDown 0.3s ease-out; + } + + /* 输入组样式 */ + .input-group { + display: flex; + gap: 12px; + align-items: stretch; + margin-bottom: 1rem; + } + + .input-group .form-control { + flex: 1; + border-radius: 12px; + border: 2px solid rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.1); + color: white; + padding: 14px 18px; + font-size: 14px; + font-weight: 400; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + backdrop-filter: blur(10px); + position: relative; + min-width: 0; + height: 48px; + } + + .input-group .form-control:focus { + outline: none; + border-color: #9a72ff; + background: rgba(255, 255, 255, 0.12); + box-shadow: 0 0 0 4px rgba(154, 114, 255, 0.15), + 0 8px 25px rgba(154, 114, 255, 0.1); + transform: translateY(-1px); + } + + .input-group .form-control:hover:not(:focus) { + border-color: rgba(255, 255, 255, 0.25); + background: rgba(255, 255, 255, 0.1); + } + + .input-group .form-control::placeholder { + color: rgba(255, 255, 255, 0.5); + font-weight: 400; + transition: color 0.3s ease; + } + + .input-group .form-control:focus::placeholder { + color: rgba(255, 255, 255, 0.3); + } + + /* 单独的输入框样式 */ + .form-control { + width: 50%; + border: 2px solid rgba(255, 255, 255, 0.15); + background: rgba(255, 255, 255, 0.08); + color: white; + padding: 16px 20px; + font-size: 12px; + font-weight: 400; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + backdrop-filter: blur(10px); + position: relative; + } + + .form-control:focus { + outline: none; + border-color: #9a72ff; + background: rgba(255, 255, 255, 0.12); + box-shadow: 0 0 0 4px rgba(154, 114, 255, 0.15), + 0 8px 25px rgba(154, 114, 255, 0.1); + transform: translateY(-1px); + } + + .input-group .btn { + border-radius: 16px; + padding: 16px 16px; + font-weight: 500; + font-size: 14px; + white-space: nowrap; + min-width: 100px; + flex-shrink: 0; + border: 2px solid transparent; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; + } + + .input-group .btn:hover { + transform: translateY(-1px); + box-shadow: 0 8px 25px rgba(154, 114, 255, 0.2); + } + + .input-group .btn:active { + transform: translateY(0); + } + + /* 分隔线样式 */ + .divider { + position: relative; + text-align: center; + margin: 20px 0; + } + + .divider::before { + content: ''; + position: absolute; + top: 50%; + left: 0; + right: 0; + height: 1px; + background: linear-gradient(90deg, + transparent 0%, + rgba(255, 255, 255, 0.1) 20%, + rgba(255, 255, 255, 0.3) 50%, + rgba(255, 255, 255, 0.1) 80%, + transparent 100%); + } + + .divider-text { + background: rgba(27, 18, 64, 0.9); + padding: 8px 20px; + color: rgba(255, 255, 255, 0.7); + font-size: 13px; + font-weight: 500; + position: relative; + z-index: 1; + border-radius: 20px; + border: 1px solid rgba(255, 255, 255, 0.1); + backdrop-filter: blur(10px); + } + + /* 社交登录按钮样式 */ + .social-login-buttons { + display: flex; + justify-content: center; + gap: 20px; + } + + .btn-icon { + width: 48px; + height: 48px; + border-radius: 50%; + border: 2px solid rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.05); + color: white; + display: flex; + align-items: center; + justify-content: center; + font-size: 20px; + transition: all 0.3s ease; + cursor: pointer; + position: relative; + overflow: hidden; + } + + .btn-icon:hover { + transform: translateY(-3px) scale(1.05); + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); + } + + .btn-icon:active { + transform: translateY(-1px) scale(1.02); + } + + .btn-icon:hover { + background: rgba(255, 255, 255, 0.15); + border-color: rgba(255, 255, 255, 0.6); + box-shadow: 0 10px 30px rgba(255, 255, 255, 0.1); + } + + .btn-icon:hover i { + color: #ffffff; + text-shadow: 0 0 10px rgba(255, 255, 255, 0.5); + } + + .btn-icon { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.3); + } + + /* 图标按钮的波纹效果 */ + .btn-icon::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); + transform: translate(-50%, -50%); + transition: width 0.3s ease, height 0.3s ease; + } + + .btn-icon:hover::before { + width: 100%; + height: 100%; + } + + /* 提交按钮区域样式 */ + .login-submit-section { + display: flex; + justify-content: center; + margin-top: 24px; + } + + .btn-submit { + width: 100%; + padding: 10px 28px; + border-radius: 10px; + font-weight: 600; + font-size: 14px; + letter-spacing: 0.5px; + background: linear-gradient(135deg, #d2c1ff, #a88bff, #8e88ff); + border: 2px solid transparent; + color: #0c0920; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + position: relative; + overflow: hidden; + box-shadow: 0 8px 25px rgba(154, 114, 255, 0.3); + } + + .btn-submit:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: 0 12px 35px rgba(154, 114, 255, 0.4); + } + + .btn-submit:active:not(:disabled) { + transform: translateY(0); + } + + .btn-submit:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; + box-shadow: 0 4px 15px rgba(154, 114, 255, 0.2); + } + + .btn-submit::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent); + transition: left 0.5s ease; + } + + .btn-submit:hover::before { + left: 100%; + } + + /* 响应式设计 */ + @media (max-width: 768px) { + .login-card .card-body { + padding: 1.5rem !important; + } + + .social-login-buttons { + gap: 16px; + } + + .btn-icon { + width: 42px; + height: 42px; + font-size: 18px; + } + + .divider-text { + font-size: 12px; + padding: 0 12px; + } + } + + @media (max-width: 480px) { + .login-card .card-body { + padding: 1rem !important; + } + + .input-group .form-control { + padding: 14px 16px; + font-size: 14px; + } + + .btn-icon { + width: 38px; + height: 38px; + font-size: 16px; + } + + .social-login-buttons { + gap: 12px; + } + } + + @keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + + /* 语言切换时的文本过渡动画 */ + .language-transition { + transition: all 0.3s ease-in-out; + } + + .sms-login-form .form-control { + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + color: white; + border-radius: 8px; + transition: all 0.3s ease; + height: 50px; + padding: 12px 16px; + font-size: 16px; + } + + .sms-login-form .form-control:focus { + background: rgba(255, 255, 255, 0.15); + border-color: #007bff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); + color: white; + } + + .sms-login-form .form-control::placeholder { + color: rgba(255, 255, 255, 1.0); + } + + .sms-login-form .btn-primary:disabled { + opacity: 0.6; + cursor: not-allowed; + } + + .sms-login-form .btn-primary { + color: white; + transition: all 0.3s ease; + height: 50px; + padding: 12px 20px; + font-size: 16px; + font-weight: 500; + } + + /* 发送验证码按钮专用样式 */ + .btn-sms-code { + background: linear-gradient(135deg, #9a72ff 0%, #7c6aff 100%); + border: 2px solid rgba(255, 255, 255, 0.2); + color: white; + font-weight: 500; + font-size: 13px; + padding: 8px 16px; + border-radius: 12px; + transition: all 0.3s ease; + box-shadow: 0 4px 12px rgba(154, 114, 255, 0.3); + white-space: nowrap; + min-width: 110px; + height: 48px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .btn-sms-code:hover:not(:disabled) { + background: linear-gradient(135deg, #8a5fff 0%, #6b4aff 100%); + transform: translateY(-1px); + box-shadow: 0 6px 16px rgba(154, 114, 255, 0.4); + border-color: rgba(255, 255, 255, 0.3); + } + + .btn-sms-code:active:not(:disabled) { + transform: translateY(0); + box-shadow: 0 2px 8px rgba(154, 114, 255, 0.3); + } + + .btn-sms-code:disabled { + background: linear-gradient(135deg, #9ca3af 0%, #6b7280 100%); + color: #d1d5db; + cursor: not-allowed; + transform: none; + box-shadow: 0 1px 4px rgba(156, 163, 175, 0.2); + border-color: rgba(255, 255, 255, 0.1); + } + + /* 按钮占位符样式,用于对齐 */ + .btn-placeholder { + min-width: 110px; + height: 48px; + flex-shrink: 0; + } + + /* 表单整体优化 */ + .sms-login-form .input-group:last-child { + margin-bottom: 0; + } + + /* 输入框聚焦时的统一效果 */ + .sms-login-form .form-control:focus { + border-color: #9a72ff; + background: rgba(255, 255, 255, 0.15); + box-shadow: 0 0 0 3px rgba(154, 114, 255, 0.2), + 0 4px 12px rgba(154, 114, 255, 0.1); + transform: translateY(-1px); + } + + /* 占位符文字优化 */ + .sms-login-form .form-control::placeholder { + color: rgba(255, 255, 255, 0.6); + font-weight: 400; + transition: color 0.3s ease; + } + + .sms-login-form .form-control:focus::placeholder { + color: rgba(255, 255, 255, 0.4); + } + /* 文本截断样式 */ +.line-clamp-1 { +display: -webkit-box; +-webkit-line-clamp: 1; +-webkit-box-orient: vertical; +overflow: hidden; +} + +.line-clamp-2 { +display: -webkit-box; +-webkit-line-clamp: 2; +-webkit-box-orient: vertical; +overflow: hidden; +} + +.line-clamp-3 { +display: -webkit-box; +-webkit-line-clamp: 3; +-webkit-box-orient: vertical; +overflow: hidden; +} + +/* 侧边栏动画样式 */ +.sidebar-expand { +transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +.sidebar-text { +transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); +transform: translateX(-10px); +} + +.sidebar-text.show { +opacity: 1; +transform: translateX(0); +} + +/* 平滑过渡动画 */ +.smooth-transition { +transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* 登录页面样式 */ +.share-container { + min-height: 100%; + min-width: 100%; + background: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%); + position: relative; + overflow: auto; + display: flex; + align-items: center; + justify-content: center; + transition: background 0.3s ease; + } + +html.dark .share-container { + background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 50%, #16213e 100%); +} + +/* 登录页面样式 - 支持深浅色主题 */ +.login-container { +min-height: 100%; +min-width: 100%; +background: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%); +position: relative; +overflow: hidden; +display: flex; +align-items: center; +justify-content: center; +transition: background 0.3s ease; +} + +html.dark .login-container { +background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 50%, #16213e 100%); +} + +.login-container::before { +content: ''; +position: absolute; +top: 0; +left: 0; +right: 0; +bottom: 0; +background: +radial-gradient(circle at 20% 80%, rgba(var(--brand-primary-rgb), 0.08) 0%, transparent 50%), +radial-gradient(circle at 80% 20%, rgba(var(--brand-primary-light-rgb), 0.08) 0%, transparent 50%), +radial-gradient(circle at 40% 40%, rgba(var(--brand-primary-rgb), 0.04) 0%, transparent 50%); +animation: backgroundShift 20s ease-in-out infinite; +} + +/* 主容器样式 - 支持深浅色主题 */ +.main-container { +min-height: 100%; +min-width: 100%; +background: linear-gradient(135deg, #f5f5f7 0%, #e8e8ed 50%, #f0f0f5 100%); +overflow-x: visible; +overflow-y: hidden; +display: flex; +flex-direction: column; +transition: background 0.3s ease; +} + +html.dark .main-container { +background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 50%, #16213e 100%); +} + +/* 顶部栏样式 */ +.top-bar { +top: 0; +left: 0; +right: 0; +height: 70px; +background: rgba(11, 10, 32, 0.95); +backdrop-filter: blur(20px); +border-bottom: 1px solid rgba(143, 143, 143, 0.2); +z-index: 1000; +display: flex; +align-items: center; +} + +.top-bar-content { +width: 100%; +height: 100%; +display: flex; +align-items: center; +justify-content: space-between; +padding: 0 24px; +} + +.top-bar-left { +display: flex; +align-items: center; +} + +.top-bar-logo { +height: 50px; +width: auto; +filter: brightness(0) invert(1); +} + +.top-bar-right { +display: flex; +align-items: center; +} + +.user-info { +display: flex; +align-items: center; +gap: 12px; +} + +.user-avatar { +width: 36px; +height: 36px; +border-radius: 50%; +border: 1px solid white; +display: flex; +align-items: center; +justify-content: center; +overflow: hidden; +} + +.avatar-img { +width: 100%; +height: 100%; +object-fit: cover; +} + +.user-avatar i { +color: #9a72ff; +font-size: 16px; +} + +.user-details { +display: flex; +flex-direction: column; +align-items: flex-end; +} + +.username { +font-size: 14px; +font-weight: 500; +color: #ffffff; +line-height: 1.2; +} + +.user-email { +font-size: 12px; +color: #9ca3af; +line-height: 1.2; +} + +.logout-btn { +width: 32px; +height: 32px; +border-radius: 6px; +background: rgba(154, 114, 255, 0.1); +border: 1px solid rgba(154, 114, 255, 0.2); +color: #9ca3af; +display: flex; +align-items: center; +justify-content: center; +transition: all 0.2s ease; +cursor: pointer; +} + +.logout-btn:hover { +background: rgba(154, 114, 255, 0.2); +color: #9a72ff; +border-color: rgba(154, 114, 255, 0.4); +} + +@keyframes backgroundShift { +0%, 100% { opacity: 1; } +50% { opacity: 0.8; } +} + +.login-card { + position: relative; + overflow: hidden; + transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); + max-width: 400px; + width: 100%; + margin: 0 auto; +} + + +.login-logo { + background: white; + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + font-size: 3rem; + font-weight: 600; + margin-bottom: 0.5rem; + letter-spacing: -0.02em; + text-align: center; + font-family: "Inter", sans-serif; + line-height: 1.2; +} + +@keyframes logoGlow { +0% { +filter: drop-shadow(0 0 10px rgba(154, 114, 255, 0.5)); +} +100% { +filter: drop-shadow(0 0 20px rgba(154, 114, 255, 0.8)); +} +} + +.login-subtitle { + color: rgba(255, 255, 255, 0.6); + font-size: 1rem; + margin-bottom: 2.5rem; + font-weight: 400; + text-align: center; + line-height: 1.5; +} + +.floating-particles { +position: absolute; +top: 0; +left: 0; +width: 100%; +height: 100%; +overflow: hidden; +pointer-events: none; +} + +.particle { +position: absolute; +width: 4px; +height: 4px; +background: rgba(193, 169, 255, 0.6); +border-radius: 50%; +animation: floatParticle 15s linear infinite; +} + +.particle:nth-child(1) { left: 10%; animation-delay: 0s; } +.particle:nth-child(2) { left: 20%; animation-delay: 12s; } +.particle:nth-child(3) { left: 30%; animation-delay: 10s; } +.particle:nth-child(4) { left: 40%; animation-delay: 6s; } +.particle:nth-child(5) { left: 50%; animation-delay: 8s; } +.particle:nth-child(6) { left: 60%; animation-delay: 14s; } +.particle:nth-child(7) { left: 70%; animation-delay: 16s; } +.particle:nth-child(8) { left: 80%; animation-delay: 2s; } +.particle:nth-child(9) { left: 90%; animation-delay: 4s; } + +@keyframes floatParticle { +0% { +transform: translateY(100vh) scale(0); +opacity: 0; +} +10% { +opacity: 1; +} +90% { +opacity: 1; +} +100% { +transform: translateY(-100px) scale(1); +opacity: 0; +} +} + +.login-features { +padding-top: 2rem; +padding-left: 10rem; +border-top: 1px solid rgba(154, 114, 255, 0.2); +} + +.feature-item { +display: flex; +align-items: center; +margin-bottom: 1rem; +color: rgba(255, 255, 255, 0.8); +font-size: 0.9rem; +} + +.feature-icon { +width: 20px; +height: 20px; +background: linear-gradient(135deg, #9a72ff, #b78bff); +border-radius: 50%; +margin-right: 12px; +display: flex; +align-items: center; +justify-content: center; +font-size: 10px; +color: white; +} + +/* 登录页面进入动画 */ +.login-container { +animation: fadeInUp 0.8s ease-out; +} + +.login-card { +animation: slideInUp 0.6s ease-out 0.2s both; +} + +.login-logo { +animation: logoGlow 3s ease-in-out infinite alternate, fadeInScale 0.8s ease-out 0.4s both; +} + +.login-subtitle { +animation: fadeIn 0.8s ease-out 0.6s both; +} + +.login-features { +animation: fadeIn 0.8s ease-out 1s both; +} + +.feature-item { +animation: slideInLeft 0.6s ease-out both; +} + +.feature-item:nth-child(1) { animation-delay: 1.2s; } +.feature-item:nth-child(2) { animation-delay: 1.4s; } +.feature-item:nth-child(3) { animation-delay: 1.6s; } +.feature-item:nth-child(4) { animation-delay: 1.8s; } +.feature-item:nth-child(5) { animation-delay: 2.0s; } +.feature-item:nth-child(6) { animation-delay: 2.2s; } + +@keyframes fadeInUp { +from { +opacity: 0; +transform: translateY(30px); +} +to { +opacity: 1; +transform: translateY(0); +} +} + +@keyframes slideInUp { +from { +opacity: 0; +transform: translateY(50px); +} +to { +opacity: 1; +transform: translateY(0); +} +} + +@keyframes fadeInScale { +from { +opacity: 0; +transform: scale(0.8); +} +to { +opacity: 1; +transform: scale(1); +} +} + +@keyframes fadeIn { +from { +opacity: 0; +} +to { +opacity: 1; +} +} + +@keyframes slideInLeft { +from { +opacity: 0; +transform: translateX(-20px); +} +to { +opacity: 1; +transform: translateX(0); +} +} + +/* 响应式设计 */ +@media (max-width: 768px) { +.login-logo { +font-size: 3rem; +} + +.login-subtitle { +font-size: 1rem; +} + +.login-card { +margin: 20px; +border-radius: 20px; +} +} + +@media (max-width: 480px) { +.login-logo { +font-size: 2rem; +} + +.login-subtitle { +font-size: 0.9rem; +} + +.login-card .card-body { +padding: 2rem !important; +} +} + +/* 简约登录页面样式 */ +.login-header { + text-align: center; + margin-bottom: 2rem; +} + +.login-form { + margin-bottom: 2rem; +} + +.form-group { + margin-bottom: 1.5rem; +} + +.form-input { + width: 100%; + padding: 1rem 1.25rem; + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + color: #ffffff; + font-size: 1rem; + font-weight: 400; + transition: all 0.3s ease; + backdrop-filter: blur(10px); +} + +.form-input::placeholder { + color: rgba(255, 255, 255, 0.4); + font-weight: 400; +} + +.form-input:focus { + outline: none; + border-color: rgba(154, 114, 255, 0.4); + background: rgba(255, 255, 255, 0.06); + box-shadow: 0 0 0 3px rgba(154, 114, 255, 0.1); +} + +.verify-code-container { + display: flex; + gap: 0.75rem; + align-items: stretch; +} + +.verify-code-container .form-input { + flex: 1; +} + +.send-code-btn { + padding: 1rem 1.25rem; + background: rgba(154, 114, 255, 0.1); + border: 1px solid rgba(154, 114, 255, 0.2); + border-radius: 12px; + color: #9a72ff; + font-size: 0.9rem; + font-weight: 500; + white-space: nowrap; + transition: all 0.3s ease; + cursor: pointer; +} + +.send-code-btn:hover:not(:disabled) { + background: rgba(154, 114, 255, 0.15); + border-color: rgba(154, 114, 255, 0.3); + transform: translateY(-1px); +} + +.send-code-btn:disabled { + opacity: 0.5; + cursor: not-allowed; + transform: none; +} + +.login-btn { + width: 100%; + padding: 1rem 1.25rem; + background: linear-gradient(135deg, #9a72ff, #7c6aff); + border: none; + border-radius: 12px; + color: #ffffff; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} + +.login-btn:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: 0 12px 24px rgba(154, 114, 255, 0.3); +} + +.login-btn:active:not(:disabled) { + transform: translateY(0); +} + +.login-btn:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; + box-shadow: none; +} + +.divider { + position: relative; + text-align: center; + margin: 2rem 0; + color: rgba(255, 255, 255, 0.4); + font-size: 0.9rem; + font-weight: 500; +} + +.divider::before { + content: ''; + position: absolute; + top: 50%; + left: 0; + right: 0; + height: 1px; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent); +} + +.divider span { + background: rgba(15, 14, 34, 0.95); + padding: 0 1rem; + position: relative; + z-index: 1; +} + +.social-login { + display: flex; + justify-content: center; + gap: 1rem; +} + +.social-btn { + width: 3rem; + height: 3rem; + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 12px; + color: rgba(255, 255, 255, 0.7); + font-size: 1.25rem; + cursor: pointer; + transition: all 0.3s ease; + display: flex; + align-items: center; + justify-content: center; +} + +.social-btn:hover:not(:disabled) { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.15); + color: #ffffff; + transform: translateY(-2px); +} + +.social-btn:disabled { + opacity: 0.5; + cursor: not-allowed; + transform: none; +} + +.card-body { + padding: 2.5rem; +} + +/* 响应式设计 */ +@media (max-width: 768px) { + .login-card { + margin: 1rem; + } + + .card-body { + padding: 2rem; + } + + .login-logo { + font-size: 2.5rem; + } + + .login-subtitle { + font-size: 0.9rem; + margin-bottom: 2rem; + } + + .form-input { + padding: 0.875rem 1rem; + font-size: 0.95rem; + } + + .send-code-btn { + padding: 0.875rem 1rem; + font-size: 0.85rem; + } + + .login-btn { + padding: 0.875rem 1rem; + font-size: 0.95rem; + } + + .social-btn { + width: 2.75rem; + height: 2.75rem; + font-size: 1.1rem; + } +} + +@media (max-width: 480px) { + .login-card { + + margin: 0.5rem; + border-radius: 16px; + } + + .card-body { + padding: 1.5rem; + } + + .login-logo { + font-size: 2rem; + } + + .login-subtitle { + font-size: 0.85rem; + margin-bottom: 1.5rem; + } + + .form-group { + margin-bottom: 1.25rem; + } + + .form-input { + padding: 0.75rem 0.875rem; + font-size: 0.9rem; + border-radius: 10px; + } + + .verify-code-container { + gap: 0.5rem; + } + + .send-code-btn { + padding: 0.75rem 0.875rem; + font-size: 0.8rem; + border-radius: 10px; + } + + .login-btn { + padding: 0.75rem 0.875rem; + font-size: 0.9rem; + border-radius: 10px; + } + + .divider { + margin: 1.5rem 0; + font-size: 0.85rem; + } + + .social-login { + gap: 0.75rem; + } + + .social-btn { + width: 2.5rem; + height: 2.5rem; + font-size: 1rem; + border-radius: 10px; + } +} + +/* Alert动画 */ +@keyframes slide-down { +from { +opacity: 0; +transform: translateX(-50%) translateY(-20px); +} +to { +opacity: 1; +transform: translateX(-50%) translateY(0); +} +} + +.animate-slide-down { +animation: slide-down 0.3s ease-out; +} diff --git a/lightx2v/deploy/server/frontend/src/utils/i18n.js b/lightx2v/deploy/server/frontend/src/utils/i18n.js new file mode 100644 index 0000000..d993ed0 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/utils/i18n.js @@ -0,0 +1,62 @@ +import { createI18n } from 'vue-i18n' +import { ref } from 'vue' + +const loadedLanguages = new Set() + +// 创建 i18n 实例(初始只设置 locale,不加载全部语言) +const i18n = createI18n({ + legacy: false, + globalInjection: true, + locale: 'zh', + fallbackLocale: 'en', + messages: {} +}) + +// 异步加载语言文件 +async function loadLanguageAsync(lang) { + if (!loadedLanguages.has(lang)) { + const messages = await import(`../locales/${lang}.json`) + i18n.global.setLocaleMessage(lang, messages.default) + loadedLanguages.add(lang) + } + if (i18n.global.locale.value === lang) return lang + i18n.global.locale.value = lang + localStorage.setItem('app-lang', lang) // ✅ 记住用户选择 + document.documentElement.lang = lang === 'zh' ? 'zh-CN' : 'en'; + return lang +} + +// 初始化默认语言 +async function initLanguage() { + const savedLang = localStorage.getItem('app-lang') || 'zh' + return loadLanguageAsync(savedLang) +} +async function switchLang() { + const newLang = i18n.global.locale.value === 'zh' ? 'en' : 'zh' + await loadLanguageAsync(newLang) +} + + // // 语言切换功能 + // const switchLanguage = (langCode) => { + // currentLanguage.value = langCode; + // localStorage.setItem('preferredLanguage', langCode); + + // // 更新页面标题 + // document.title = t('pageTitle'); + + // // 更新HTML lang属性 + // document.documentElement.lang = langCode === 'zh' ? 'zh-CN' : 'en'; + // }; + + // // 简单语言切换功能(中英文切换) + // const toggleLanguage = () => { + // const newLang = currentLanguage.value === 'zh' ? 'en' : 'zh'; + // switchLanguage(newLang); + // }; + + const languageOptions = ref([ + { code: 'zh', name: '中文', flag: '中' }, + { code: 'en', name: 'English', flag: 'EN' } +]); + +export { i18n as default, loadLanguageAsync, initLanguage, switchLang, languageOptions } diff --git a/lightx2v/deploy/server/frontend/src/utils/other.js b/lightx2v/deploy/server/frontend/src/utils/other.js new file mode 100644 index 0000000..5a0181d --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/utils/other.js @@ -0,0 +1,7839 @@ +import { ref, computed, watch, nextTick } from 'vue'; +import { useRoute, useRouter } from 'vue-router'; +import i18n from './i18n' +import router from '../router' +export const t = i18n.global.t +export const locale = i18n.global.locale + + // 响应式数据 + const loading = ref(false); + const loginLoading = ref(false); + const initLoading = ref(false); + const downloadLoading = ref(false); + const downloadLoadingMessage = ref(''); + const isLoading = ref(false); // 页面加载loading状态 + const isPageLoading = ref(false); // 分页加载loading状态 + + // 录音相关状态 + const isRecording = ref(false); + const mediaRecorder = ref(null); + const audioChunks = ref([]); + const recordingDuration = ref(0); + const recordingTimer = ref(null); + const alert = ref({ show: false, message: '', type: 'info' }); + + + // 短信登录相关数据 + const phoneNumber = ref(''); + const verifyCode = ref(''); + const smsCountdown = ref(0); + const showSmsForm = ref(false); + const showErrorDetails = ref(false); + const showFailureDetails = ref(false); + + // 任务类型下拉菜单 + const showTaskTypeMenu = ref(false); + const showModelMenu = ref(false); + + // 任务状态轮询相关 + const pollingInterval = ref(null); + const pollingTasks = ref(new Set()); // 正在轮询的任务ID集合 + const confirmDialog = ref({ + show: false, + title: '', + message: '', + confirmText: '确认', // 使用静态文本,避免翻译依赖 + warning: null, + confirm: () => { } + }); + const submitting = ref(false); + const templateLoading = ref(false); // 模板/任务复用加载状态 + const templateLoadingMessage = ref(''); + const taskSearchQuery = ref(''); + const sidebarCollapsed = ref(false); + const showExpandHint = ref(false); + const showGlow = ref(false); + const isDefaultStateHidden = ref(false); + const isCreationAreaExpanded = ref(false); + const hasUploadedContent = ref(false); + const isContracting = ref(false); + const faceDetecting = ref(false); // Face detection loading state + const audioSeparating = ref(false); // Audio separation loading state + + const showTaskDetailModal = ref(false); + const modalTask = ref(null); + + // TTS 模态框状态 + const showVoiceTTSModal = ref(false); + const showPodcastModal = ref(false); + + // TaskCarousel当前任务状态 + const currentTask = ref(null); + + // 视频加载状态跟踪 + const videoLoadedStates = ref(new Map()); // 跟踪每个视频的加载状态 + + // 检查视频是否已加载完成 + const isVideoLoaded = (videoSrc) => { + return videoLoadedStates.value.get(videoSrc) || false; + }; + + // 设置视频加载状态 + const setVideoLoaded = (videoSrc, loaded) => { + videoLoadedStates.value.set(videoSrc, loaded); + }; + + // 灵感广场相关数据 + const inspirationSearchQuery = ref(''); + const selectedInspirationCategory = ref(''); + const inspirationItems = ref([]); + const InspirationCategories = ref([]); + + // 灵感广场分页相关变量 + const inspirationPagination = ref(null); + const inspirationCurrentPage = ref(1); + const inspirationPageSize = ref(20); + const inspirationPageInput = ref(1); + const inspirationPaginationKey = ref(0); + + // 模板详情弹窗相关数据 + const showTemplateDetailModal = ref(false); + const selectedTemplate = ref(null); + + // 图片放大弹窗相关数据 + const showImageZoomModal = ref(false); + const zoomedImageUrl = ref(''); + + // 任务文件缓存系统 + const taskFileCache = ref(new Map()); + const taskFileCacheLoaded = ref(false); + + // 模板文件缓存系统 + const templateFileCache = ref(new Map()); + const templateFileCacheLoaded = ref(false); + + // Podcast 音频 URL 缓存系统(模仿任务文件缓存) + const podcastAudioCache = ref(new Map()); + const podcastAudioCacheLoaded = ref(false); + + // 防重复获取的状态管理 + const templateUrlFetching = ref(new Set()); // 正在获取的URL集合 + const taskUrlFetching = ref(new Map()); // 正在获取的任务URL集合 + + // localStorage缓存相关常量 + const TASK_FILE_CACHE_KEY = 'lightx2v_task_files'; + const TEMPLATE_FILE_CACHE_KEY = 'lightx2v_template_files'; + const PODCAST_AUDIO_CACHE_KEY = 'lightx2v_podcast_audio'; + const TASK_FILE_CACHE_EXPIRY = 24 * 60 * 60 * 1000; // 24小时过期 + const PODCAST_AUDIO_CACHE_EXPIRY = 24 * 60 * 60 * 1000; // 24小时过期 + const MODELS_CACHE_KEY = 'lightx2v_models'; + const MODELS_CACHE_EXPIRY = 60 * 60 * 1000; // 1小时过期 + const TEMPLATES_CACHE_KEY = 'lightx2v_templates'; + const TEMPLATES_CACHE_EXPIRY = 24 * 60 * 60 * 1000; // 24小时过期 + const TASKS_CACHE_KEY = 'lightx2v_tasks'; + const TASKS_CACHE_EXPIRY = 5 * 60 * 1000; // 5分钟过期 + + const imageTemplates = ref([]); + const audioTemplates = ref([]); + const mergedTemplates = ref([]); // 合并后的模板列表 + const showImageTemplates = ref(false); + const showAudioTemplates = ref(false); + const mediaModalTab = ref('history'); + + // Template分页相关变量 + const templatePagination = ref(null); + const templateCurrentPage = ref(1); + const templatePageSize = ref(20); // 图片模板每页12个,音频模板每页10个 + const templatePageInput = ref(1); + const templatePaginationKey = ref(0); + const imageHistory = ref([]); + const audioHistory = ref([]); + const ttsHistory = ref([]); + + // 模板文件缓存,避免重复下载 + const currentUser = ref({}); + const models = ref([]); + const tasks = ref([]); + const isLoggedIn = ref(null); // null表示未初始化,false表示未登录,true表示已登录 + + const selectedTaskId = ref(null); + const selectedTask = ref(null); + const selectedModel = ref(null); + const selectedTaskFiles = ref({ inputs: {}, outputs: {} }); // 存储任务的输入输出文件 + const loadingTaskFiles = ref(false); // 加载任务文件的状态 + const statusFilter = ref('ALL'); + const pagination = ref(null); + const currentTaskPage = ref(1); + const taskPageSize = ref(20); + const taskPageInput = ref(1); + const paginationKey = ref(0); // 用于强制刷新分页组件 + const taskMenuVisible = ref({}); // 管理每个任务的菜单显示状态 + const nameMap = computed(() => ({ + 't2v': t('textToVideo'), + 'i2v': t('imageToVideo'), + 's2v': t('speechToVideo'), + 'animate': t('animate') + })); + + // 任务类型提示信息 + const taskHints = computed(() => ({ + 't2v': [ + t('t2vHint1'), + t('t2vHint2'), + t('t2vHint3'), + t('t2vHint4') + ], + 'i2v': [ + t('i2vHint1'), + t('i2vHint2'), + t('i2vHint3'), + t('i2vHint4') + ], + 's2v': [ + t('s2vHint1'), + t('s2vHint2'), + t('s2vHint3'), + t('s2vHint4') + ], + 'animate': [ + t('animateHint1') || '上传目标角色图片和参考视频', + t('animateHint2') || '将视频中的角色替换为目标角色', + ] + })); + + // 当前任务类型的提示信息 + const currentTaskHints = computed(() => { + return taskHints.value[selectedTaskId.value] || taskHints.value['s2v']; + }); + + // 滚动提示相关 + const currentHintIndex = ref(0); + const hintInterval = ref(null); + + // 开始滚动提示 + const startHintRotation = () => { + if (hintInterval.value) { + clearInterval(hintInterval.value); + } + hintInterval.value = setInterval(() => { + currentHintIndex.value = (currentHintIndex.value + 1) % currentTaskHints.value.length; + }, 3000); // 每3秒切换一次 + }; + + // 停止滚动提示 + const stopHintRotation = () => { + if (hintInterval.value) { + clearInterval(hintInterval.value); + hintInterval.value = null; + } + }; + + // 为三个任务类型分别创建独立的表单 + const t2vForm = ref({ + task: 't2v', + model_cls: '', + stage: '', + prompt: '', + seed: 42 + }); + + const i2vForm = ref({ + task: 'i2v', + model_cls: '', + stage: '', + imageFile: null, + prompt: '', + seed: 42, + detectedFaces: [] // List of detected faces: [{ index, bbox, face_image, roleName, ... }] + }); + + const s2vForm = ref({ + task: 's2v', + model_cls: '', + stage: '', + imageFile: null, + audioFile: null, + prompt: '', + seed: 42, + detectedFaces: [], // List of detected faces: [{ index, bbox, face_image, roleName, ... }] + separatedAudios: [] // List of separated audio tracks: [{ speaker_id, audio (base64), roleName, ... }] + }); + + const animateForm = ref({ + task: 'animate', + model_cls: '', + stage: '', + imageFile: null, + videoFile: null, + prompt: '视频中的人在做动作', + seed: 42, + detectedFaces: [] // List of detected faces: [{ index, bbox, face_image, roleName, ... }] + }); + + // 根据当前选择的任务类型获取对应的表单 + const getCurrentForm = () => { + switch (selectedTaskId.value) { + case 't2v': + return t2vForm.value; + case 'i2v': + return i2vForm.value; + case 's2v': + return s2vForm.value; + case 'animate': + return animateForm.value; + default: + return t2vForm.value; + } + }; + + // 控制默认状态显示/隐藏的方法 + const hideDefaultState = () => { + isDefaultStateHidden.value = true; + }; + + const showDefaultState = () => { + isDefaultStateHidden.value = false; + }; + + // 控制创作区域展开/收缩的方法 + const expandCreationArea = () => { + isCreationAreaExpanded.value = true; + // 添加show类来触发动画 + setTimeout(() => { + const creationArea = document.querySelector('.creation-area'); + if (creationArea) { + creationArea.classList.add('show'); + } + }, 10); + }; + + const contractCreationArea = () => { + isContracting.value = true; + const creationArea = document.querySelector('.creation-area'); + if (creationArea) { + // 添加hide类来触发收起动画 + creationArea.classList.add('hide'); + creationArea.classList.remove('show'); + } + // 等待动画完成后更新状态 + setTimeout(() => { + isCreationAreaExpanded.value = false; + isContracting.value = false; + if (creationArea) { + creationArea.classList.remove('hide'); + } + }, 400); + }; + + // 为每个任务类型创建独立的预览变量 + const i2vImagePreview = ref(null); + const s2vImagePreview = ref(null); + const s2vAudioPreview = ref(null); + const animateImagePreview = ref(null); + const animateVideoPreview = ref(null); + + // 监听上传内容变化 + const updateUploadedContentStatus = () => { + hasUploadedContent.value = !!(getCurrentImagePreview() || getCurrentAudioPreview() || getCurrentVideoPreview() || getCurrentForm().prompt?.trim()); + }; + + // 监听表单变化 + watch([i2vImagePreview, s2vImagePreview, s2vAudioPreview, animateImagePreview, animateVideoPreview, () => getCurrentForm().prompt], () => { + updateUploadedContentStatus(); + }, { deep: true }); + + // 监听任务类型变化,重置提示滚动 + watch(selectedTaskId, () => { + currentHintIndex.value = 0; + stopHintRotation(); + startHintRotation(); + }); + + // 根据当前任务类型获取对应的预览变量 + const getCurrentImagePreview = () => { + switch (selectedTaskId.value) { + case 't2v': + return null; + case 'i2v': + return i2vImagePreview.value; + case 's2v': + return s2vImagePreview.value; + case 'animate': + return animateImagePreview.value; + default: + return null; + } + }; + + const getCurrentAudioPreview = () => { + switch (selectedTaskId.value) { + case 't2v': + return null + case 'i2v': + return null + case 's2v': + return s2vAudioPreview.value; + default: + return null; + } + }; + + const setCurrentImagePreview = (value) => { + switch (selectedTaskId.value) { + case 't2v': + break; + case 'i2v': + i2vImagePreview.value = value; + break; + case 's2v': + s2vImagePreview.value = value; + break; + case 'animate': + animateImagePreview.value = value; + break; + } + // 清除图片预览缓存,确保新图片能正确显示 + urlCache.value.delete('current_image_preview'); + }; + + const setCurrentAudioPreview = (value) => { + switch (selectedTaskId.value) { + case 't2v': + break; + case 'i2v': + break; + case 'animate': + break; + case 's2v': + s2vAudioPreview.value = value; + break; + } + // 清除音频预览缓存,确保新音频能正确显示 + urlCache.value.delete('current_audio_preview'); + }; + + // 获取当前任务类型的视频预览 + const getCurrentVideoPreview = () => { + switch (selectedTaskId.value) { + case 'animate': + return animateVideoPreview.value; + default: + return null; + } + }; + + // 设置当前任务类型的视频预览 + const setCurrentVideoPreview = (value) => { + switch (selectedTaskId.value) { + case 'animate': + animateVideoPreview.value = value; + break; + } + // 清除视频预览缓存,确保新视频能正确显示 + urlCache.value.delete('current_video_preview'); + }; + + // 提示词模板相关 + const showTemplates = ref(false); + const showHistory = ref(false); + const showPromptModal = ref(false); + const promptModalTab = ref('templates'); + + // 计算属性 + const availableTaskTypes = computed(() => { + const types = [...new Set(models.value.map(m => m.task))]; + // 重新排序,确保数字人在最左边 + const orderedTypes = []; + + // 检查是否有s2v模型,如果有则添加s2v类型 + const hasS2vModels = models.value.some(m => + m.task === 's2v' + ); + + // 优先添加数字人(如果存在相关模型) + if (hasS2vModels) { + orderedTypes.push('s2v'); + } + + // 然后添加其他类型 + types.forEach(type => { + if (type !== 's2v') { + orderedTypes.push(type); + } + }); + + return orderedTypes; + }); + + const availableModelClasses = computed(() => { + if (!selectedTaskId.value) return []; + + return [...new Set(models.value + .filter(m => m.task === selectedTaskId.value) + .map(m => m.model_cls))]; + }); + + const filteredTasks = computed(() => { + let filtered = tasks.value; + + // 状态过滤 + if (statusFilter.value !== 'ALL') { + filtered = filtered.filter(task => task.status === statusFilter.value); + } + + // 搜索过滤 + if (taskSearchQuery.value) { + filtered = filtered.filter(task => + task.params.prompt?.toLowerCase().includes(taskSearchQuery.value.toLowerCase()) || + task.task_id.toLowerCase().includes(taskSearchQuery.value.toLowerCase()) || + nameMap.value[task.task_type].toLowerCase().includes(taskSearchQuery.value.toLowerCase()) + ); + } + + // 按时间排序,最新的任务在前面 + filtered = filtered.sort((a, b) => { + const timeA = parseInt(a.create_t) || 0; + const timeB = parseInt(b.create_t) || 0; + return timeB - timeA; // 降序排列,最新的在前 + }); + + return filtered; + }); + + // 监听状态筛选变化,重置分页到第一页 + watch(statusFilter, (newStatus, oldStatus) => { + if (newStatus !== oldStatus) { + currentTaskPage.value = 1; + taskPageInput.value = 1; + refreshTasks(true); // 强制刷新 + } + }); + + // 监听搜索查询变化,重置分页到第一页 + watch(taskSearchQuery, (newQuery, oldQuery) => { + if (newQuery !== oldQuery) { + currentTaskPage.value = 1; + taskPageInput.value = 1; + refreshTasks(true); // 强制刷新 + } + }); + + // 分页信息计算属性,确保响应式更新 + const paginationInfo = computed(() => { + if (!pagination.value) return null; + + return { + total: pagination.value.total || 0, + total_pages: pagination.value.total_pages || 0, + current_page: pagination.value.current_page || currentTaskPage.value, + page_size: pagination.value.page_size || taskPageSize.value + }; + }); + + // Template分页信息计算属性 + const templatePaginationInfo = computed(() => { + if (!templatePagination.value) return null; + + return { + total: templatePagination.value.total || 0, + total_pages: templatePagination.value.total_pages || 0, + current_page: templatePagination.value.current_page || templateCurrentPage.value, + page_size: templatePagination.value.page_size || templatePageSize.value + }; + }); + + // 灵感广场分页信息计算属性 + const inspirationPaginationInfo = computed(() => { + if (!inspirationPagination.value) return null; + + return { + total: inspirationPagination.value.total || 0, + total_pages: inspirationPagination.value.total_pages || 0, + current_page: inspirationPagination.value.current_page || inspirationCurrentPage.value, + page_size: inspirationPagination.value.page_size || inspirationPageSize.value + }; + }); + + + // 通用URL缓存 + const urlCache = ref(new Map()); + + // 通用URL缓存函数 + const getCachedUrl = (key, urlGenerator) => { + if (urlCache.value.has(key)) { + return urlCache.value.get(key); + } + + const url = urlGenerator(); + urlCache.value.set(key, url); + return url; + }; + + // 获取历史图片URL(带缓存) + const getHistoryImageUrl = (history) => { + if (!history || !history.thumbnail) return ''; + return getCachedUrl(`history_image_${history.filename}`, () => history.thumbnail); + }; + + // 获取用户头像URL(带缓存) + const getUserAvatarUrl = (user) => { + if (!user || !user.avatar) return ''; + return getCachedUrl(`user_avatar_${user.username}`, () => user.avatar); + }; + + // 获取当前图片预览URL(带缓存) + const getCurrentImagePreviewUrl = () => { + const preview = getCurrentImagePreview(); + if (!preview) return ''; + return getCachedUrl(`current_image_preview`, () => preview); + }; + + // 获取当前音频预览URL(带缓存) + const getCurrentAudioPreviewUrl = () => { + const preview = getCurrentAudioPreview(); + if (!preview) return ''; + return getCachedUrl(`current_audio_preview`, () => preview); + }; + + const getCurrentVideoPreviewUrl = () => { + const preview = getCurrentVideoPreview(); + if (!preview) return ''; + return getCachedUrl(`current_video_preview`, () => preview); + }; + + // Alert定时器,用于清除之前的定时器 + let alertTimeout = null; + + // 方法 + const showAlert = (message, type = 'info', action = null) => { + // 清除之前的定时器 + if (alertTimeout) { + clearTimeout(alertTimeout); + alertTimeout = null; + } + + // 如果当前有alert正在显示,先关闭它 + if (alert.value && alert.value.show) { + alert.value.show = false; + // 等待transition完成(约400ms)后再显示新的alert + setTimeout(() => { + createNewAlert(message, type, action); + }, 450); + } else { + // 如果没有alert在显示,立即创建新的 + // 如果alert存在但已关闭,先重置它以确保状态干净 + if (alert.value && !alert.value.show) { + alert.value = { show: false, message: '', type: 'info', action: null }; + } + // 立即创建新alert,不需要等待nextTick + createNewAlert(message, type, action); + } + }; + + // 创建新alert的辅助函数 + const createNewAlert = (message, type, action) => { + // 再次清除定时器,防止重复设置 + if (alertTimeout) { + clearTimeout(alertTimeout); + alertTimeout = null; + } + + // 创建全新的对象,使用时间戳确保每次都是新对象 + const newAlert = { + show: true, + message: String(message), + type: String(type), + action: action ? { + label: String(action.label), + onClick: action.onClick + } : null, + // 添加一个时间戳确保每次都是新对象,用于key + _timestamp: Date.now() + }; + + // 直接赋值新对象 + alert.value = newAlert; + + // 设置自动关闭定时器 + alertTimeout = setTimeout(() => { + if (alert.value && alert.value.show && alert.value._timestamp === newAlert._timestamp) { + alert.value.show = false; + } + alertTimeout = null; + }, 5000); + }; + + // 显示确认对话框 + const showConfirmDialog = (options) => { + return new Promise((resolve) => { + confirmDialog.value = { + show: true, + title: options.title || '确认操作', + message: options.message || '确定要执行此操作吗?', + confirmText: options.confirmText || '确认', + warning: options.warning || null, + confirm: () => { + confirmDialog.value.show = false; + resolve(true); + }, + cancel: () => { + confirmDialog.value.show = false; + resolve(false); + } + }; + }); + }; + + const setLoading = (value) => { + loading.value = value; + }; + + const apiCall = async (endpoint, options = {}) => { + const url = `${endpoint}`; + const headers = { + 'Content-Type': 'application/json', + ...options.headers + }; + + if (localStorage.getItem('accessToken')) { + headers['Authorization'] = `Bearer ${localStorage.getItem('accessToken')}`; + } + + const response = await fetch(url, { + ...options, + headers + }); + + if (response.status === 401) { + logout(false); + showAlert(t('authFailedPleaseRelogin'), 'warning', { + label: t('login'), + onClick: login + }); + throw new Error(t('authFailedPleaseRelogin')); + } + if (response.status === 400) { + const error = await response.json(); + showAlert(error.message, 'danger'); + throw new Error(error.message); + } + + // 添加50ms延迟,防止触发服务端频率限制 + await new Promise(resolve => setTimeout(resolve, 50)); + + return response; + }; + + const loginWithGitHub = async () => { + try { + console.log('starting GitHub login') + const response = await fetch('/auth/login/github'); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + localStorage.setItem('loginSource', 'github'); + window.location.href = data.auth_url; + } catch (error) { + console.log('GitHub login error:', error); + showAlert(t('getGitHubAuthUrlFailed'), 'danger'); + } + }; + + const loginWithGoogle = async () => { + try { + console.log('starting Google login') + const response = await fetch('/auth/login/google'); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + localStorage.setItem('loginSource', 'google'); + window.location.href = data.auth_url; + } catch (error) { + console.error('Google login error:', error); + showAlert(t('getGoogleAuthUrlFailed'), 'danger'); + } + }; + + // 发送短信验证码 + const sendSmsCode = async () => { + if (!phoneNumber.value) { + showAlert(t('pleaseEnterPhoneNumber'), 'warning'); + return; + } + + // 简单的手机号格式验证 + const phoneRegex = /^1[3-9]\d{9}$/; + if (!phoneRegex.test(phoneNumber.value)) { + showAlert(t('pleaseEnterValidPhoneNumber'), 'warning'); + return; + } + + try { + const response = await fetch(`./auth/login/sms?phone_number=${phoneNumber.value}`); + const data = await response.json(); + + if (response.ok) { + showAlert(t('verificationCodeSent'), 'success'); + // 开始倒计时 + startSmsCountdown(); + } else { + showAlert(data.message || t('sendVerificationCodeFailed'), 'danger'); + } + } catch (error) { + showAlert(t('sendVerificationCodeFailedRetry'), 'danger'); + } + }; + + // 短信验证码登录 + const loginWithSms = async () => { + if (!phoneNumber.value || !verifyCode.value) { + showAlert(t('pleaseEnterPhoneAndCode'), 'warning'); + return; + } + + try { + const response = await fetch(`./auth/callback/sms?phone_number=${phoneNumber.value}&verify_code=${verifyCode.value}`); + const data = await response.json(); + + if (response.ok) { + localStorage.setItem('accessToken', data.access_token); + if (data.refresh_token) { + localStorage.setItem('refreshToken', data.refresh_token); + } + localStorage.setItem('currentUser', JSON.stringify(data.user_info)); + currentUser.value = data.user_info; + + // 登录成功后初始化数据 + await init(); + + router.push('/generate'); + console.log('login with sms success'); + isLoggedIn.value = true; + + showAlert(t('loginSuccess'), 'success'); + } else { + showAlert(data.message || t('verificationCodeErrorOrExpired'), 'danger'); + } + } catch (error) { + showAlert(t('loginFailedRetry'), 'danger'); + } + }; + + // 处理手机号输入框回车键 + const handlePhoneEnter = () => { + if (phoneNumber.value && !smsCountdown.value) { + sendSmsCode(); + } + }; + + // 处理验证码输入框回车键 + const handleVerifyCodeEnter = () => { + if (phoneNumber.value && verifyCode.value) { + loginWithSms(); + } + }; + + // 移动端检测和样式应用 + const applyMobileStyles = () => { + if (window.innerWidth <= 640) { + // 为左侧功能区添加移动端样式 + const leftNav = document.querySelector('.relative.w-20.pl-5.flex.flex-col.z-10'); + if (leftNav) { + leftNav.classList.add('mobile-bottom-nav'); + } + + // 为导航按钮容器添加移动端样式 + const navContainer = document.querySelector('.p-2.flex.flex-col.justify-center.h-full'); + if (navContainer) { + navContainer.classList.add('mobile-nav-buttons'); + } + + // 为所有导航按钮添加移动端样式 + const navButtons = document.querySelectorAll('.relative.w-20.pl-5.flex.flex-col.z-10 button'); + navButtons.forEach(btn => { + btn.classList.add('mobile-nav-btn'); + }); + + // 为主内容区域添加移动端样式 + const contentAreas = document.querySelectorAll('.flex-1.flex.flex-col.min-h-0'); + contentAreas.forEach(area => { + area.classList.add('mobile-content'); + }); + } + }; + + // 短信验证码倒计时 + const startSmsCountdown = () => { + smsCountdown.value = 60; + const timer = setInterval(() => { + smsCountdown.value--; + if (smsCountdown.value <= 0) { + clearInterval(timer); + } + }, 1000); + }; + + // 切换短信登录表单显示 + const toggleSmsLogin = () => { + showSmsForm.value = !showSmsForm.value; + if (!showSmsForm.value) { + // 重置表单数据 + phoneNumber.value = ''; + verifyCode.value = ''; + smsCountdown.value = 0; + } + }; + + const handleLoginCallback = async (code, source) => { + try { + const response = await fetch(`/auth/callback/${source}?code=${code}`); + if (response.ok) { + const data = await response.json(); + console.log(data); + localStorage.setItem('accessToken', data.access_token); + if (data.refresh_token) { + localStorage.setItem('refreshToken', data.refresh_token); + } + localStorage.setItem('currentUser', JSON.stringify(data.user_info)); + currentUser.value = data.user_info; + isLoggedIn.value = true; + + // 在进入新页面前显示loading + isLoading.value = true; + + // 登录成功后初始化数据 + await init(); + + // 检查是否有分享数据需要导入 + const shareData = localStorage.getItem('shareData'); + if (shareData) { + // 解析分享数据获取shareId + try { + const parsedShareData = JSON.parse(shareData); + const shareId = parsedShareData.share_id || parsedShareData.task_id; + if (shareId) { + localStorage.removeItem('shareData'); + // 跳转回分享页面,让createSimilar函数处理数据 + router.push(`/share/${shareId}`); + return; + } + } catch (error) { + console.warn('Failed to parse share data:', error); + } + localStorage.removeItem('shareData'); + } + + // 默认跳转到生成页面 + router.push('/generate'); + console.log('login with callback success'); + + // 清除URL中的code参数 + window.history.replaceState({}, document.title, window.location.pathname); + } else { + const error = await response.json(); + showAlert(`${t('loginFailedRetry')}: ${error.detail}`, 'danger'); + } + } catch (error) { + showAlert(t('loginError'), 'danger'); + console.error(error); + } + }; + + let refreshPromise = null; + + const logout = (showMessage = true) => { + localStorage.removeItem('accessToken'); + localStorage.removeItem('refreshToken'); + localStorage.removeItem('currentUser'); + refreshPromise = null; + + clearAllCache(); + switchToLoginView(); + isLoggedIn.value = false; + + models.value = []; + tasks.value = []; + if (showMessage) { + showAlert(t('loggedOut'), 'info'); + } + }; + + const login = () => { + switchToLoginView(); + isLoggedIn.value = false; + }; + + const loadModels = async (forceRefresh = false) => { + try { + // 如果不是强制更新,先尝试从缓存加载 + if (!forceRefresh) { + const cachedModels = loadFromCache(MODELS_CACHE_KEY, MODELS_CACHE_EXPIRY); + if (cachedModels) { + console.log('成功从缓存加载模型列表'); + models.value = cachedModels; + return; + } + } + + console.log('开始加载模型列表...'); + const response = await apiRequest('/api/v1/model/list'); + if (response && response.ok) { + const data = await response.json(); + console.log('模型列表数据:', data); + const modelsData = data.models || []; + models.value = modelsData; + + // 保存到缓存 + saveToCache(MODELS_CACHE_KEY, modelsData); + console.log('模型列表已缓存'); + } else if (response) { + console.error('模型列表API响应失败:', response); + showAlert(t('loadModelListFailed'), 'danger'); + } + // 如果response为null,说明是认证错误,apiRequest已经处理了 + } catch (error) { + console.error('加载模型失败:', error); + showAlert(`${t('loadModelFailed')}: ${error.message}`, 'danger'); + } + }; + + const refreshTemplateFileUrl = (templatesData) => { + for (const img of templatesData.images) { + console.log('刷新图片素材文件URL:', img.filename, img.url); + setTemplateFileToCache(img.filename, {url: img.url, timestamp: Date.now()}); + } + for (const audio of templatesData.audios) { + console.log('刷新音频素材文件URL:', audio.filename, audio.url); + setTemplateFileToCache(audio.filename, {url: audio.url, timestamp: Date.now()}); + } + for (const video of templatesData.videos) { + console.log('刷新视频素材文件URL:', video.filename, video.url); + setTemplateFileToCache(video.filename, {url: video.url, timestamp: Date.now()}); + } + } + + // 加载模板文件 + const loadImageAudioTemplates = async (forceRefresh = false) => { + try { + // 如果不是强制刷新,先尝试从缓存加载 + const cacheKey = `${TEMPLATES_CACHE_KEY}_IMAGE_AUDIO_MERGED_${templateCurrentPage.value}_${templatePageSize.value}`; + if (!forceRefresh) { + // 构建缓存键,包含分页和过滤条件 + const cachedTemplates = loadFromCache(cacheKey, TEMPLATES_CACHE_EXPIRY); + if (cachedTemplates && cachedTemplates.templates) { + console.log('成功从缓存加载模板列表'); + // 优先使用合并后的模板列表 + if (cachedTemplates.templates.merged) { + mergedTemplates.value = cachedTemplates.templates.merged || []; + // 从合并列表中提取图片和音频 + const images = []; + const audios = []; + mergedTemplates.value.forEach(template => { + if (template.image) { + images.push(template.image); + } + if (template.audio) { + audios.push(template.audio); + } + }); + imageTemplates.value = images; + audioTemplates.value = audios; + } else { + // 向后兼容:如果没有合并列表,使用旧的格式 + imageTemplates.value = cachedTemplates.templates.images || []; + audioTemplates.value = cachedTemplates.templates.audios || []; + } + templatePagination.value = cachedTemplates.pagination || null; + return; + } + } + + console.log('开始加载图片音乐素材库...'); + const response = await publicApiCall(`/api/v1/template/list?page=${templateCurrentPage.value}&page_size=${templatePageSize.value}`); + if (response.ok) { + const data = await response.json(); + console.log('图片音乐素材库数据:', data); + + // 使用合并后的模板列表 + const merged = data.templates?.merged || []; + mergedTemplates.value = merged; + + // 为了保持向后兼容,从合并列表中提取图片和音频 + const images = []; + const audios = []; + merged.forEach(template => { + if (template.image) { + images.push(template.image); + } + if (template.audio) { + audios.push(template.audio); + } + }); + + refreshTemplateFileUrl({ images, audios, videos: data.templates?.videos || [] }); + const templatesData = { + images: images, + audios: audios, + merged: merged + }; + + imageTemplates.value = images; + audioTemplates.value = audios; + templatePagination.value = data.pagination || null; + + // 保存到缓存 + saveToCache(cacheKey, { + templates: templatesData, + pagination: templatePagination.value + }); + console.log('图片音乐素材库已缓存:', templatesData); + + } else { + console.warn('加载素材库失败'); + } + } catch (error) { + console.warn('加载素材库失败:', error); + } + }; + + // 获取素材文件的通用函数(带缓存) + const getTemplateFile = async (template) => { + const cacheKey = template.url; + + // 先检查内存缓存 + if (templateFileCache.value.has(cacheKey)) { + console.log('从内存缓存获取素材文件:', template.filename); + return templateFileCache.value.get(cacheKey); + } + + // 如果缓存中没有,则下载并缓存 + console.log('下载素材文件:', template.filename); + const response = await fetch(template.url, { + cache: 'force-cache' // 强制使用浏览器缓存 + }); + + if (response.ok) { + const blob = await response.blob(); + + // 根据文件扩展名确定正确的MIME类型 + let mimeType = blob.type; + const extension = template.filename.toLowerCase().split('.').pop(); + + if (extension === 'wav') { + mimeType = 'audio/wav'; + } else if (extension === 'mp3') { + mimeType = 'audio/mpeg'; + } else if (extension === 'm4a') { + mimeType = 'audio/mp4'; + } else if (extension === 'ogg') { + mimeType = 'audio/ogg'; + } else if (extension === 'webm') { + mimeType = 'audio/webm'; + } + + console.log('文件扩展名:', extension, 'MIME类型:', mimeType); + + const file = new File([blob], template.filename, { type: mimeType }); + + // 缓存文件对象 + templateFileCache.value.set(cacheKey, file); + console.log('下载素材文件完成:', template.filename); + return file; + } else { + throw new Error('下载素材文件失败'); + } + }; + + // 选择图片素材 + const selectImageTemplate = async (template) => { + try { + const file = await getTemplateFile(template); + + if (selectedTaskId.value === 'i2v') { + i2vForm.value.imageFile = file; + i2vForm.value.detectedFaces = []; // Reset detected faces + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.imageFile = file; + s2vForm.value.detectedFaces = []; // Reset detected faces + } else if (selectedTaskId.value === 'animate') { + animateForm.value.imageFile = file; + animateForm.value.detectedFaces = []; // Reset detected faces + } + + // 获取图片的 http/https URL(用于人脸识别和预览) + let imageUrl = null; + // 优先使用 template.url(如果是 http/https URL) + if (template.url && (template.url.startsWith('http://') || template.url.startsWith('https://'))) { + imageUrl = template.url; + } else if (template.inputs && template.inputs.input_image) { + // 如果有 inputs.input_image,使用 getTemplateFileUrlAsync 获取 URL + imageUrl = await getTemplateFileUrlAsync(template.inputs.input_image, 'images'); + } else if (template.filename) { + // 如果有 filename,尝试使用 getTemplateFileUrlAsync + imageUrl = await getTemplateFileUrlAsync(template.filename, 'images'); + } + + // 创建预览(使用 data URL 作为预览) + const reader = new FileReader(); + reader.onload = async (e) => { + const imageDataUrl = e.target.result; + // 如果有 http/https URL,使用它作为预览;否则使用 data URL + setCurrentImagePreview(imageUrl || imageDataUrl); + updateUploadedContentStatus(); + showImageTemplates.value = false; + showAlert(t('imageTemplateSelected'), 'success'); + // 不再自动检测人脸,等待用户手动打开多角色模式开关 + }; + reader.readAsDataURL(file); + + } catch (error) { + showAlert(`${t('loadImageTemplateFailed')}: ${error.message}`, 'danger'); + } + }; + + // 选择音频素材 + const selectAudioTemplate = async (template) => { + try { + const file = await getTemplateFile(template); + + s2vForm.value.audioFile = file; + + // 创建预览 + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentAudioPreview(e.target.result); + updateUploadedContentStatus(); + }; + reader.readAsDataURL(file); + + showAudioTemplates.value = false; + showAlert(t('audioTemplateSelected'), 'success'); + } catch (error) { + showAlert(`${t('loadAudioTemplateFailed')}: ${error.message}`, 'danger'); + } + }; + + // 预览音频素材 + const previewAudioTemplate = (template) => { + console.log('预览音频模板:', template); + const audioUrl = getTemplateFileUrl(template.filename, 'audios'); + console.log('音频URL:', audioUrl); + if (!audioUrl) { + showAlert(t('audioFileUrlFailed'), 'danger'); + return; + } + + // 停止当前播放的音频 + if (currentPlayingAudio) { + currentPlayingAudio.pause(); + currentPlayingAudio.currentTime = 0; + currentPlayingAudio = null; + } + + const audio = new Audio(audioUrl); + currentPlayingAudio = audio; + + // 监听音频播放结束事件 + audio.addEventListener('ended', () => { + currentPlayingAudio = null; + // 调用停止回调 + if (audioStopCallback) { + audioStopCallback(); + audioStopCallback = null; + } + }); + + audio.addEventListener('error', () => { + console.error('音频播放失败:', audio.error); + showAlert(t('audioPlaybackFailed'), 'danger'); + currentPlayingAudio = null; + // 调用停止回调 + if (audioStopCallback) { + audioStopCallback(); + audioStopCallback = null; + } + }); + + audio.play().catch(error => { + console.error('音频播放失败:', error); + showAlert(t('audioPlaybackFailed'), 'danger'); + currentPlayingAudio = null; + }); + }; + + const handleImageUpload = async (event) => { + const file = event.target.files[0]; + if (file) { + if (selectedTaskId.value === 'i2v') { + i2vForm.value.imageFile = file; + i2vForm.value.detectedFaces = []; // Reset detected faces + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.imageFile = file; + s2vForm.value.detectedFaces = []; // Reset detected faces + } else if (selectedTaskId.value === 'animate') { + animateForm.value.imageFile = file; + animateForm.value.detectedFaces = []; // Reset detected faces + } + const reader = new FileReader(); + reader.onload = async (e) => { + const imageDataUrl = e.target.result; + setCurrentImagePreview(imageDataUrl); + updateUploadedContentStatus(); + + // 不再自动检测人脸,等待用户手动打开多角色模式开关 + }; + reader.readAsDataURL(file); + } else { + // 用户取消了选择,保持原有图片不变 + // 不做任何操作 + } + }; + + // Crop face image from original image based on bbox coordinates + const cropFaceImage = (imageUrl, bbox) => { + return new Promise((resolve, reject) => { + // Validate bbox + if (!bbox || bbox.length !== 4) { + reject(new Error('Invalid bbox coordinates')) + return + } + + const [x1, y1, x2, y2] = bbox + const width = x2 - x1 + const height = y2 - y1 + + if (width <= 0 || height <= 0) { + reject(new Error(`Invalid bbox dimensions: ${width}x${height}`)) + return + } + + const img = new Image() + + // For data URLs, crossOrigin is not needed + if (imageUrl.startsWith('data:')) { + img.onload = () => { + try { + // Create Canvas to crop image + const canvas = document.createElement('canvas') + canvas.width = width + canvas.height = height + const ctx = canvas.getContext('2d') + + // Draw the cropped region to Canvas + ctx.drawImage( + img, + x1, y1, width, height, // Source image crop region + 0, 0, width, height // Canvas drawing position + ) + + // Convert to base64 + const base64 = canvas.toDataURL('image/png') + resolve(base64) + } catch (error) { + reject(error) + } + } + img.onerror = (e) => { + reject(new Error('Failed to load image for cropping')) + } + img.src = imageUrl + } else { + // For other URLs, set crossOrigin + img.crossOrigin = 'anonymous' + img.onload = () => { + try { + // Create Canvas to crop image + const canvas = document.createElement('canvas') + canvas.width = width + canvas.height = height + const ctx = canvas.getContext('2d') + + // Draw the cropped region to Canvas + ctx.drawImage( + img, + x1, y1, width, height, // Source image crop region + 0, 0, width, height // Canvas drawing position + ) + + // Convert to base64 + const base64 = canvas.toDataURL('image/png') + resolve(base64) + } catch (error) { + reject(error) + } + } + img.onerror = (e) => { + reject(new Error('Failed to load image for cropping (CORS or network error)')) + } + img.src = imageUrl + } + }) + } + + // Detect faces in uploaded image + const detectFacesInImage = async (imageDataUrl) => { + try { + // 验证输入 + if (!imageDataUrl || imageDataUrl.trim() === '') { + console.error('detectFacesInImage: imageDataUrl is empty'); + return; + } + + faceDetecting.value = true; + + // Convert blob URL to data URL (backend can't access blob URLs) + // For http/https URLs, send directly to backend + let imageInput = imageDataUrl; + if (imageDataUrl.startsWith('blob:')) { + // Blob URL: convert to data URL since backend can't access blob URLs + try { + const response = await fetch(imageDataUrl); + if (!response.ok) { + throw new Error(`Failed to fetch image: ${response.statusText}`); + } + const blob = await response.blob(); + imageInput = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result); + reader.onerror = reject; + reader.readAsDataURL(blob); + }); + } catch (error) { + console.error('Failed to convert blob URL to data URL:', error); + throw error; + } + } + // For data URLs and http/https URLs, send directly to backend + + // 再次验证 imageInput + if (!imageInput || imageInput.trim() === '') { + console.error('detectFacesInImage: imageInput is empty after processing'); + return; + } + + const response = await apiCall('/api/v1/face/detect', { + method: 'POST', + body: JSON.stringify({ + image: imageInput + }) + }); + + if (!response.ok) { + console.error('Face detection failed:', response.status, response.statusText); + return; + } + + const data = await response.json(); + console.log('Face detection response:', data); + + if (data && data.faces) { + // Crop face images for each detected face + // Use the original imageDataUrl for cropping (cropFaceImage can handle both data URLs and regular URLs) + const facesWithImages = await Promise.all( + data.faces.map(async (face, index) => { + try { + // Crop face image from original image based on bbox + const croppedImage = await cropFaceImage(imageDataUrl, face.bbox) + + // Remove data URL prefix, keep only base64 part (consistent with backend format) + // croppedImage is in format: "data:image/png;base64,xxxxx" + let base64Data = croppedImage + if (croppedImage.includes(',')) { + base64Data = croppedImage.split(',')[1] + } + + if (!base64Data) { + console.error(`Failed to extract base64 from cropped image for face ${index}`) + base64Data = null + } + + return { + ...face, + face_image: base64Data, // Base64 encoded face region image (without data URL prefix) + roleName: `角色${index + 1}`, + isEditing: false // Track editing state for each face + } + } catch (error) { + console.error(`Failed to crop face ${index}:`, error, 'bbox:', face.bbox); + // Return face without face_image if cropping fails + return { + ...face, + face_image: null, + roleName: `角色${index + 1}`, + isEditing: false + } + } + }) + ); + + const currentForm = getCurrentForm(); + if (currentForm) { + currentForm.detectedFaces = facesWithImages; + console.log('Updated detectedFaces:', currentForm.detectedFaces.length, 'faces with images'); + // 音频分离由统一的 watch 监听器处理,不需要在这里手动调用 + } + } + } catch (error) { + console.error('Face detection error:', error); + // Silently fail, don't show error to user + } finally { + faceDetecting.value = false; + } + }; + + // Update role name for a detected face + const updateFaceRoleName = (faceIndex, roleName) => { + const currentForm = getCurrentForm(); + if (currentForm && currentForm.detectedFaces && currentForm.detectedFaces[faceIndex]) { + // 使用展开运算符创建新对象,确保响应式更新 + currentForm.detectedFaces[faceIndex] = { + ...currentForm.detectedFaces[faceIndex], + roleName: roleName + }; + // 触发响应式更新 + currentForm.detectedFaces = [...currentForm.detectedFaces]; + } + }; + + // Toggle editing state for a face + const toggleFaceEditing = (faceIndex) => { + const currentForm = getCurrentForm(); + if (currentForm && currentForm.detectedFaces && currentForm.detectedFaces[faceIndex]) { + // 使用展开运算符创建新对象,确保响应式更新 + currentForm.detectedFaces[faceIndex] = { + ...currentForm.detectedFaces[faceIndex], + isEditing: !currentForm.detectedFaces[faceIndex].isEditing + }; + // 触发响应式更新 + currentForm.detectedFaces = [...currentForm.detectedFaces]; + } + }; + + // Save face role name and exit editing + const saveFaceRoleName = (faceIndex, roleName) => { + const currentForm = getCurrentForm(); + if (currentForm && currentForm.detectedFaces && currentForm.detectedFaces[faceIndex]) { + // 同时更新 roleName 和 isEditing,确保响应式更新 + currentForm.detectedFaces[faceIndex] = { + ...currentForm.detectedFaces[faceIndex], + roleName: roleName || currentForm.detectedFaces[faceIndex].roleName, + isEditing: false + }; + // 触发响应式更新 + currentForm.detectedFaces = [...currentForm.detectedFaces]; + } + // 同步更新所有关联的音频播放器角色名 + // 只有当任务类型是 s2v 且有分离的音频时才需要更新 + if (selectedTaskId.value === 's2v' && s2vForm.value.separatedAudios) { + s2vForm.value.separatedAudios.forEach((audio, index) => { + // 如果音频的 roleIndex 等于当前修改的 faceIndex,则更新其 roleName + if (audio.roleIndex === faceIndex) { + s2vForm.value.separatedAudios[index].roleName = roleName || `角色${faceIndex + 1}`; + } + }); + // 使用展开运算符确保响应式更新 + s2vForm.value.separatedAudios = [...s2vForm.value.separatedAudios]; + } + }; + + const selectTask = (taskType) => { + console.log('[selectTask] 开始切换任务类型:', { + taskType, + currentSelectedTaskId: selectedTaskId.value, + currentSelectedModel: selectedModel.value, + currentFormModel: getCurrentForm().model_cls, + currentFormStage: getCurrentForm().stage + }); + + for (const t of models.value.map(m => m.task)) { + if (getTaskTypeName(t) === taskType) { + taskType = t; + } + } + selectedTaskId.value = taskType; + + console.log('[selectTask] 任务类型已更新:', { + newTaskType: selectedTaskId.value, + availableModels: models.value.filter(m => m.task === taskType) + }); + + // 根据任务类型恢复对应的预览 + if (taskType === 'i2v' && i2vForm.value.imageFile) { + // 恢复图片预览 + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentImagePreview(e.target.result); + }; + reader.readAsDataURL(i2vForm.value.imageFile); + } else if (taskType === 's2v') { + // 恢复数字人任务的图片和音频预览 + if (s2vForm.value.imageFile) { + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentImagePreview(e.target.result); + }; + reader.readAsDataURL(s2vForm.value.imageFile); + } + if (s2vForm.value.audioFile) { + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentAudioPreview(e.target.result); + }; + reader.readAsDataURL(s2vForm.value.audioFile); + } + } else if (taskType === 'animate') { + // 恢复角色替换任务的图片和视频预览 + if (animateForm.value.imageFile) { + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentImagePreview(e.target.result); + }; + reader.readAsDataURL(animateForm.value.imageFile); + } + if (animateForm.value.videoFile) { + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentVideoPreview(e.target.result); + }; + reader.readAsDataURL(animateForm.value.videoFile); + } + // 确保 animate 任务类型有默认 prompt + if (!animateForm.value.prompt || animateForm.value.prompt.trim() === '') { + animateForm.value.prompt = '视频中的人在做动作'; + } + } + + // 自动选择该任务类型下的第一个模型(仅在当前模型无效且 URL 中没有 model 参数时) + const currentForm = getCurrentForm(); + const urlParams = new URLSearchParams(window.location.search); + const hasModelInUrl = urlParams.has('model'); + + // 获取新任务类型下的可用模型 + const availableModels = models.value.filter(m => m.task === taskType); + + if (availableModels.length > 0) { + // 检查当前选择的模型和stage是否属于新任务类型 + const currentModel = currentForm.model_cls || selectedModel.value; + const currentStage = currentForm.stage; + const isCurrentModelValid = currentModel && availableModels.some(m => + m.model_cls === currentModel && m.stage === currentStage + ); + + // 如果当前模型无效且 URL 中没有 model 参数,自动选择第一个模型 + if (!isCurrentModelValid || !hasModelInUrl) { + const firstModel = availableModels[0]; + console.log('[selectTask] 自动选择第一个模型:', { + firstModel: firstModel.model_cls, + firstStage: firstModel.stage, + reason: !isCurrentModelValid ? '当前模型或stage无效' : 'URL中没有model参数', + currentModel, + currentStage + }); + // 直接调用 selectModel 来确保路由也会更新 + selectModel(firstModel.model_cls); + } else { + console.log('[selectTask] 不自动选择模型:', { + isCurrentModelValid, + hasModelInUrl, + currentModel, + currentStage + }); + } + } + }; + + const selectModel = (model) => { + console.log('[selectModel] 开始切换模型:', { + model, + currentSelectedModel: selectedModel.value, + currentTaskType: selectedTaskId.value, + currentFormModel: getCurrentForm().model_cls, + currentFormStage: getCurrentForm().stage + }); + + selectedModel.value = model; + const currentForm = getCurrentForm(); + currentForm.model_cls = model; + // 自动设置 stage 为模型对应的第一个 stage + const availableStages = models.value + .filter(m => m.task === selectedTaskId.value && m.model_cls === model) + .map(m => m.stage); + if (availableStages.length > 0) { + currentForm.stage = availableStages[0]; + console.log('[selectModel] 自动设置 stage:', { + stage: currentForm.stage, + availableStages + }); + } + + console.log('[selectModel] 模型切换完成:', { + selectedModel: selectedModel.value, + formModel: currentForm.model_cls, + formStage: currentForm.stage + }); + }; + + const triggerImageUpload = () => { + document.querySelector('input[type="file"][accept="image/*"]').click(); + }; + + const triggerAudioUpload = () => { + const audioInput = document.querySelector('input[type="file"][data-role="audio-input"]'); + if (audioInput) { + audioInput.click(); + } else { + console.warn('音频输入框未找到'); + } + }; + + const removeImage = () => { + setCurrentImagePreview(null); + if (selectedTaskId.value === 'i2v') { + i2vForm.value.imageFile = null; + i2vForm.value.detectedFaces = []; + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.imageFile = null; + s2vForm.value.detectedFaces = []; + } else if (selectedTaskId.value === 'animate') { + animateForm.value.imageFile = null; + animateForm.value.detectedFaces = []; + } + updateUploadedContentStatus(); + // 重置文件输入框,确保可以重新选择相同文件 + const imageInput = document.querySelector('input[type="file"][accept="image/*"]'); + if (imageInput) { + imageInput.value = ''; + } + }; + + const removeAudio = () => { + setCurrentAudioPreview(null); + s2vForm.value.audioFile = null; + s2vForm.value.separatedAudios = []; + updateUploadedContentStatus(); + console.log('音频已移除'); + // 重置音频文件输入框,确保可以重新选择相同文件 + const audioInput = document.querySelector('input[type="file"][data-role="audio-input"]'); + if (audioInput) { + audioInput.value = ''; + } + }; + + // 删除视频(用于 animate 任务类型) + const removeVideo = () => { + setCurrentVideoPreview(null); + animateForm.value.videoFile = null; + updateUploadedContentStatus(); + console.log('视频已移除'); + // 重置视频文件输入框,确保可以重新选择相同文件 + const videoInput = document.querySelector('input[type="file"][data-role="video-input"]'); + if (videoInput) { + videoInput.value = ''; + } + }; + + // Update role assignment for separated audio + const updateSeparatedAudioRole = (speakerIndex, roleIndex) => { + if (s2vForm.value.separatedAudios && s2vForm.value.separatedAudios[speakerIndex]) { + const currentForm = getCurrentForm(); + const detectedFaces = currentForm?.detectedFaces || []; + + if (roleIndex >= 0 && roleIndex < detectedFaces.length) { + s2vForm.value.separatedAudios[speakerIndex].roleName = detectedFaces[roleIndex].roleName || `角色${roleIndex + 1}`; + s2vForm.value.separatedAudios[speakerIndex].roleIndex = roleIndex; + } + } + }; + + // Update audio name for a separated audio + const updateSeparatedAudioName = (audioIndex, audioName) => { + if (s2vForm.value.separatedAudios && s2vForm.value.separatedAudios[audioIndex]) { + s2vForm.value.separatedAudios[audioIndex].audioName = audioName; + } + }; + + // Toggle editing state for a separated audio + const toggleSeparatedAudioEditing = (audioIndex) => { + if (s2vForm.value.separatedAudios && s2vForm.value.separatedAudios[audioIndex]) { + s2vForm.value.separatedAudios[audioIndex].isEditing = !s2vForm.value.separatedAudios[audioIndex].isEditing; + } + }; + + // Save separated audio name and exit editing + const saveSeparatedAudioName = (audioIndex, audioName) => { + updateSeparatedAudioName(audioIndex, audioName); + toggleSeparatedAudioEditing(audioIndex); + }; + + const getAudioMimeType = () => { + if (s2vForm.value.audioFile) { + return s2vForm.value.audioFile.type; + } + return 'audio/mpeg'; // 默认类型 + }; + + // Separate audio tracks for multiple speakers + const separateAudioTracks = async (audioDataUrl, numSpeakers) => { + audioSeparating.value = true; // 开始音频分割,显示加载状态 + try { + // 优先使用 audioFile(如果存在),因为它包含完整的文件信息,避免 data URL 格式问题 + const currentForm = getCurrentForm(); + let audioData = audioDataUrl; + + if (currentForm?.audioFile && currentForm.audioFile instanceof File) { + // 使用 File 对象,读取为 base64,确保格式正确 + try { + const fileDataUrl = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result); + reader.onerror = reject; + reader.readAsDataURL(currentForm.audioFile); + }); + audioData = fileDataUrl; + console.log('Using audioFile for separation, format:', currentForm.audioFile.type); + } catch (error) { + console.warn('Failed to read audioFile, falling back to audioDataUrl:', error); + // 如果读取失败,继续使用 audioDataUrl + } + } + + // Clean and validate base64 string before sending + let cleanedAudioData = audioData; + if (audioData.includes(',')) { + // If it's a data URL, extract the base64 part + const parts = audioData.split(','); + if (parts.length > 1) { + cleanedAudioData = parts.slice(1).join(','); // Join in case there are multiple commas + } + } + + // Remove any whitespace and newlines + cleanedAudioData = cleanedAudioData.trim().replace(/\s/g, ''); + + // Check if it's a valid base64 string length (must be multiple of 4) + const missingPadding = cleanedAudioData.length % 4; + if (missingPadding !== 0) { + console.warn(`[separateAudioTracks] Base64 string length (${cleanedAudioData.length}) is not a multiple of 4, adding padding`); + cleanedAudioData += '='.repeat(4 - missingPadding); + } + + // Reconstruct data URL if it was originally a data URL + if (audioData.startsWith('data:')) { + const header = audioData.split(',')[0]; + cleanedAudioData = `${header},${cleanedAudioData}`; + } + + console.log(`[separateAudioTracks] Sending audio for separation, length: ${cleanedAudioData.length}, num_speakers: ${numSpeakers}`); + + const response = await apiCall('/api/v1/audio/separate', { + method: 'POST', + body: JSON.stringify({ + audio: cleanedAudioData, + num_speakers: numSpeakers + }) + }); + + if (!response.ok) { + console.error('Audio separation failed:', response.status, response.statusText); + audioSeparating.value = false; + return; + } + + const data = await response.json(); + console.log('Audio separation response:', data); + + if (data && data.speakers && data.speakers.length > 0) { + const currentForm = getCurrentForm(); + const detectedFaces = currentForm?.detectedFaces || []; + + // Map separated speakers to detected faces + // Initialize with first role if available + const separatedAudios = data.speakers.map((speaker, index) => { + const faceIndex = index < detectedFaces.length ? index : 0; + return { + speaker_id: speaker.speaker_id, + audio: speaker.audio, // Base64 encoded audio + audioDataUrl: `data:audio/wav;base64,${speaker.audio}`, // Data URL for preview + audioName: `音色${index + 1}`, // 音频名称,默认显示为"音色1"、"音色2"等 + roleName: detectedFaces[faceIndex]?.roleName || `角色${faceIndex + 1}`, // 关联的角色名称 + roleIndex: faceIndex, + isEditing: false, // 编辑状态 + sample_rate: speaker.sample_rate, + segments: speaker.segments + }; + }); + + // Update separatedAudios and trigger reactivity + s2vForm.value.separatedAudios = [...separatedAudios]; // Use spread to ensure reactivity + console.log('Updated separatedAudios:', s2vForm.value.separatedAudios.length, 'speakers', s2vForm.value.separatedAudios); + } else { + console.warn('No speakers found in separation response:', data); + s2vForm.value.separatedAudios = []; + } + audioSeparating.value = false; // 音频分割完成,隐藏加载状态 + } catch (error) { + console.error('Audio separation error:', error); + audioSeparating.value = false; // 发生错误时也要隐藏加载状态 + throw error; + } + }; + + const handleAudioUpload = async (event) => { + const file = event.target.files[0]; + + if (file && (file.type?.startsWith('audio/') || file.type?.startsWith('video/'))) { + const allowedVideoTypes = ['video/mp4', 'video/x-m4v', 'video/mpeg']; + if (file.type.startsWith('video/') && !allowedVideoTypes.includes(file.type)) { + showAlert(t('unsupportedVideoFormat'), 'warning'); + setCurrentAudioPreview(null); + s2vForm.value.separatedAudios = []; + updateUploadedContentStatus(); + return; + } + s2vForm.value.audioFile = file; + + // Read file as data URL for preview + const reader = new FileReader(); + reader.onload = async (e) => { + const audioDataUrl = e.target.result; + setCurrentAudioPreview(audioDataUrl); + updateUploadedContentStatus(); + // 音频分离由统一的 watch 监听器处理,不需要在这里手动调用 + console.log('[handleAudioUpload] 音频上传完成,音频分离将由统一的监听器自动处理'); + }; + reader.readAsDataURL(file); + } else { + setCurrentAudioPreview(null); + s2vForm.value.separatedAudios = []; + updateUploadedContentStatus(); + if (file) { + showAlert(t('unsupportedAudioOrVideo'), 'warning'); + } + } + }; + + // 处理视频上传(用于 animate 任务类型) + const handleVideoUpload = async (event) => { + const file = event.target.files[0]; + + if (file && file.type?.startsWith('video/')) { + const allowedVideoTypes = ['video/mp4', 'video/x-m4v', 'video/mpeg', 'video/webm', 'video/quicktime']; + if (!allowedVideoTypes.includes(file.type)) { + showAlert(t('unsupportedVideoFormat') || '不支持的视频格式', 'warning'); + setCurrentVideoPreview(null); + animateForm.value.videoFile = null; + updateUploadedContentStatus(); + return; + } + animateForm.value.videoFile = file; + + // Read file as data URL for preview + const reader = new FileReader(); + reader.onload = async (e) => { + const videoDataUrl = e.target.result; + setCurrentVideoPreview(videoDataUrl); + updateUploadedContentStatus(); + }; + reader.readAsDataURL(file); + } else { + setCurrentVideoPreview(null); + animateForm.value.videoFile = null; + updateUploadedContentStatus(); + if (file) { + showAlert(t('unsupportedVideoFormat') || '不支持的视频格式', 'warning'); + } + } + }; + + // 开始录音 + const startRecording = async () => { + try { + console.log('开始录音...'); + + // 检查浏览器支持 + if (!navigator.mediaDevices) { + throw new Error('该浏览器不支持录音功能'); + } + + if (!navigator.mediaDevices.getUserMedia) { + throw new Error('浏览器不支持录音功能,请确保使用HTTPS协议访问'); + } + + if (!window.MediaRecorder) { + throw new Error('浏览器不支持MediaRecorder,请更新到最新版本浏览器'); + } + + // 检查HTTPS协议 + console.log('当前协议:', location.protocol, '主机名:', location.hostname); + if (location.protocol !== 'https:' && location.hostname !== 'localhost' && !location.hostname.includes('127.0.0.1')) { + throw new Error(`录音功能需要HTTPS协议,当前使用${location.protocol}协议。请使用HTTPS访问网站或通过localhost:端口号访问`); + } + + console.log('浏览器支持检查通过,请求麦克风权限...'); + + // 记录浏览器支持状态用于调试 + const browserSupport = { + mediaDevices: !!navigator.mediaDevices, + getUserMedia: !!navigator.mediaDevices?.getUserMedia, + MediaRecorder: !!window.MediaRecorder, + protocol: location.protocol, + hostname: location.hostname, + userAgent: navigator.userAgent + }; + console.log('浏览器支持状态:', browserSupport); + + // 请求麦克风权限 + console.log('正在请求麦克风权限...'); + const stream = await navigator.mediaDevices.getUserMedia({ + audio: { + echoCancellation: true, + noiseSuppression: true, + sampleRate: 44100 + } + }); + console.log('麦克风权限获取成功,音频流:', stream); + + // 创建MediaRecorder + mediaRecorder.value = new MediaRecorder(stream, { + mimeType: 'audio/webm;codecs=opus' + }); + + audioChunks.value = []; + + // 监听数据可用事件 + mediaRecorder.value.ondataavailable = (event) => { + if (event.data.size > 0) { + audioChunks.value.push(event.data); + } + }; + + // 监听录音停止事件 + mediaRecorder.value.onstop = () => { + const audioBlob = new Blob(audioChunks.value, { type: 'audio/webm' }); + const audioFile = new File([audioBlob], 'recording.webm', { type: 'audio/webm' }); + + // 设置到表单 + s2vForm.value.audioFile = audioFile; + + // 创建预览URL + const audioUrl = URL.createObjectURL(audioBlob); + setCurrentAudioPreview(audioUrl); + updateUploadedContentStatus(); + + // 停止所有音频轨道 + stream.getTracks().forEach(track => track.stop()); + + showAlert(t('recordingCompleted'), 'success'); + }; + + // 开始录音 + mediaRecorder.value.start(1000); // 每秒收集一次数据 + isRecording.value = true; + recordingDuration.value = 0; + + // 开始计时 + recordingTimer.value = setInterval(() => { + recordingDuration.value++; + }, 1000); + + showAlert(t('recordingStarted'), 'info'); + + } catch (error) { + console.error('录音失败:', error); + let errorMessage = t('recordingFailed'); + + if (error.name === 'NotAllowedError') { + errorMessage = t('microphonePermissionDenied'); + } else if (error.name === 'NotFoundError') { + errorMessage = t('microphoneNotFound'); + } else if (error.name === 'NotSupportedError') { + errorMessage = t('recordingNotSupportedOnMobile'); + } else if (error.name === 'NotReadableError') { + errorMessage = t('microphoneInUse'); + } else if (error.name === 'OverconstrainedError') { + errorMessage = t('microphoneNotCompatible'); + } else if (error.name === 'SecurityError') { + errorMessage = t('securityErrorUseHttps'); + } else if (error.message) { + errorMessage = error.message; + } + + // 添加调试信息 + const debugInfo = { + userAgent: navigator.userAgent, + protocol: location.protocol, + hostname: location.hostname, + mediaDevices: !!navigator.mediaDevices, + getUserMedia: !!navigator.mediaDevices?.getUserMedia, + MediaRecorder: !!window.MediaRecorder, + isSecureContext: window.isSecureContext, + chromeVersion: navigator.userAgent.match(/Chrome\/(\d+)/)?.[1] || '未知' + }; + console.log('浏览器调试信息:', debugInfo); + + // 如果是Chrome但仍有问题,提供特定建议 + if (navigator.userAgent.includes('Chrome')) { + console.log('检测到Chrome浏览器,可能的问题:'); + console.log('1. 请确保使用HTTPS协议或localhost访问'); + console.log('2. 检查Chrome地址栏是否有麦克风权限'); + console.log('3. 尝试在Chrome设置中重置网站权限'); + console.log('4. 确保没有其他应用占用麦克风'); + } + + showAlert(errorMessage, 'danger'); + } + }; + + // 停止录音 + const stopRecording = () => { + if (mediaRecorder.value && isRecording.value) { + mediaRecorder.value.stop(); + isRecording.value = false; + + if (recordingTimer.value) { + clearInterval(recordingTimer.value); + recordingTimer.value = null; + } + + showAlert(t('recordingStopped'), 'info'); + } + }; + + // 格式化录音时长 + const formatRecordingDuration = (seconds) => { + const mins = Math.floor(seconds / 60); + const secs = seconds % 60; + return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; + }; + + const submitTask = async () => { + try { + // 检查是否正在加载模板 + if (templateLoading.value) { + showAlert(t('templateLoadingPleaseWait'), 'warning'); + return; + } + + const currentForm = getCurrentForm(); + + // 表单验证 + if (!selectedTaskId.value) { + showAlert(t('pleaseSelectTaskType'), 'warning'); + return; + } + + if (!currentForm.model_cls) { + showAlert(t('pleaseSelectModel'), 'warning'); + return; + } + + // animate 任务类型不需要 prompt,其他任务类型需要 + if (selectedTaskId.value !== 'animate') { + if (!currentForm.prompt || currentForm.prompt.trim().length === 0) { + if (selectedTaskId.value === 's2v') { + currentForm.prompt = '让角色根据音频内容自然说话'; + } else { + showAlert(t('pleaseEnterPrompt'), 'warning'); + return; + } + } + + if (currentForm.prompt.length > 1000) { + showAlert(t('promptTooLong'), 'warning'); + return; + } + } + + if (selectedTaskId.value === 'i2v' && !currentForm.imageFile) { + showAlert(t('i2vTaskRequiresImage'), 'warning'); + return; + } + + if (selectedTaskId.value === 's2v' && !currentForm.imageFile) { + showAlert(t('s2vTaskRequiresImage'), 'warning'); + return; + } + + if (selectedTaskId.value === 's2v' && !currentForm.audioFile) { + showAlert(t('s2vTaskRequiresAudio'), 'warning'); + return; + } + + if (selectedTaskId.value === 'animate' && !currentForm.imageFile) { + showAlert(t('animateTaskRequiresImage'), 'warning'); + return; + } + + if (selectedTaskId.value === 'animate' && !currentForm.videoFile) { + showAlert(t('animateTaskRequiresVideo'), 'warning'); + return; + } + submitting.value = true; + + // 确定实际提交的任务类型 + let actualTaskType = selectedTaskId.value; + + var formData = { + task: actualTaskType, + model_cls: currentForm.model_cls, + stage: currentForm.stage, + seed: currentForm.seed || Math.floor(Math.random() * 1000000) + }; + + // animate 任务类型使用默认 prompt,其他任务类型需要用户输入 + if (selectedTaskId.value === 'animate') { + // animate 任务类型使用默认 prompt + formData.prompt = currentForm.prompt && currentForm.prompt.trim().length > 0 + ? currentForm.prompt.trim() + : '视频中的人在做动作'; + } else { + formData.prompt = currentForm.prompt ? currentForm.prompt.trim() : ''; + } + + if (currentForm.model_cls.startsWith('wan2.1')) { + formData.negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + } + + if (selectedTaskId.value === 'i2v' && currentForm.imageFile) { + const base64 = await fileToBase64(currentForm.imageFile); + formData.input_image = { + type: 'base64', + data: base64 + }; + } + + if (selectedTaskId.value === 'animate' && currentForm.imageFile) { + const base64 = await fileToBase64(currentForm.imageFile); + formData.input_image = { + type: 'base64', + data: base64 + }; + } + + if (selectedTaskId.value === 'animate' && currentForm.videoFile) { + const base64 = await fileToBase64(currentForm.videoFile); + formData.input_video = { + type: 'base64', + data: base64 + }; + } + + if (selectedTaskId.value === 's2v') { + if (currentForm.imageFile) { + const base64 = await fileToBase64(currentForm.imageFile); + formData.input_image = { + type: 'base64', + data: base64 + }; + } + + // 检测是否为多人模式:有多个分离的音频和多个角色 + const isMultiPersonMode = s2vForm.value.separatedAudios && + s2vForm.value.separatedAudios.length > 1 && + currentForm.detectedFaces && + currentForm.detectedFaces.length > 1; + + if (isMultiPersonMode) { + // 多人模式:生成mask图、保存音频文件、生成config.json + try { + const multiPersonData = await prepareMultiPersonAudio( + currentForm.detectedFaces, + s2vForm.value.separatedAudios, + currentForm.imageFile, + currentForm.audioFile // 传递原始音频文件 + ); + + formData.input_audio = { + type: 'directory', + data: multiPersonData + }; + formData.negative_prompt = "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + } catch (error) { + console.error('Failed to prepare multi-person audio:', error); + showAlert(t('prepareMultiPersonAudioFailed') + ': ' + error.message, 'danger'); + submitting.value = false; + return; + } + } else if (currentForm.audioFile) { + // 单人模式:使用原始音频文件 + const base64 = await fileToBase64(currentForm.audioFile); + formData.input_audio = { + type: 'base64', + data: base64 + }; + formData.negative_prompt = "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + } + } + + const response = await apiRequest('/api/v1/task/submit', { + method: 'POST', + body: JSON.stringify(formData) + }); + + if (response && response.ok) { + let result; + try { + result = await response.json(); + } catch (error) { + console.error('Failed to parse response JSON:', error); + showAlert(t('taskSubmittedButParseFailed'), 'warning'); + submitting.value = false; + return null; + } + + showAlert(t('taskSubmitSuccessAlert'), 'success'); + + // 开始轮询新提交的任务状态(不等待,异步执行) + try { + startPollingTask(result.task_id); + } catch (error) { + console.error('Failed to start polling task:', error); + // 不阻止流程继续 + } + + // 保存完整的任务历史(包括提示词、图片和音频)- 异步执行,不阻塞 + // 注意:addTaskToHistory 是同步函数,但为了统一处理,使用 Promise.resolve 包装 + Promise.resolve().then(() => { + try { + addTaskToHistory(selectedTaskId.value, currentForm); + } catch (error) { + console.error('Failed to add task to history:', error); + } + }).catch(error => { + console.error('Failed to add task to history:', error); + }); + + // 重置表单(异步执行,不阻塞)- 使用 Promise.race 添加超时保护 + try { + await Promise.race([ + Promise.resolve(resetForm(selectedTaskId.value)), + new Promise((_, reject) => setTimeout(() => reject(new Error('resetForm timeout')), 3000)) + ]); + } catch (error) { + console.error('Failed to reset form:', error); + // 不阻止流程继续,只记录错误 + } + + // 重置当前任务类型的表单(保留模型选择,清空图片、音频和提示词) + try { + selectedTaskId.value = selectedTaskId.value; + selectModel(currentForm.model_cls); + } catch (error) { + console.error('Failed to select model:', error); + // 不阻止流程继续 + } + + // 返回新创建的任务ID + return result.task_id; + } else { + let error; + try { + error = await response.json(); + showAlert(`${t('taskSubmitFailedAlert')}: ${error.message || 'Unknown error'},${error.detail || ''}`, 'danger'); + } catch (parseError) { + console.error('Failed to parse error response:', parseError); + showAlert(`${t('taskSubmitFailedAlert')}: ${response.statusText || 'Unknown error'}`, 'danger'); + } + return null; + } + } catch (error) { + showAlert(`${t('submitTaskFailedAlert')}: ${error.message}`, 'danger'); + return null; + } finally { + submitting.value = false; + } + }; + + const fileToBase64 = (file) => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = () => { + const base64 = reader.result.split(',')[1]; + resolve(base64); + }; + reader.onerror = error => reject(error); + }); + }; + + // 准备多人模式的音频数据:生成mask图、保存音频文件、生成config.json + const prepareMultiPersonAudio = async (detectedFaces, separatedAudios, imageFile, originalAudioFile) => { + // 1. 读取原始图片,获取尺寸 + const imageBase64 = await fileToBase64(imageFile); + const imageDataUrl = `data:image/png;base64,${imageBase64}`; + + // 创建图片对象以获取尺寸 + const img = new Image(); + await new Promise((resolve, reject) => { + img.onload = resolve; + img.onerror = reject; + img.src = imageDataUrl; + }); + const imageWidth = img.naturalWidth; + const imageHeight = img.naturalHeight; + + // 2. 为每个角色生成mask图和音频文件 + const directoryFiles = {}; + const talkObjects = []; + + for (let i = 0; i < detectedFaces.length; i++) { + const face = detectedFaces[i]; + const audioIndex = i < separatedAudios.length ? i : 0; + const audio = separatedAudios[audioIndex]; + + // 生成mask图(box部分为白色,其余部分为黑色) + const maskBase64 = await generateMaskImage( + face.bbox, + imageWidth, + imageHeight + ); + + // 保存mask图 + const maskFilename = `p${i + 1}_mask.png`; + directoryFiles[maskFilename] = maskBase64; + + // 保存音频文件 + // 注意:separatedAudios中的audio已经是base64编码的wav格式 + const audioFilename = `p${i + 1}.wav`; + directoryFiles[audioFilename] = audio.audio; // audio.audio是base64编码的wav数据 + + // 添加到talk_objects + talkObjects.push({ + audio: audioFilename, + mask: maskFilename + }); + } + + // 3. 保存原始未分割的音频文件(用于后续复用) + if (originalAudioFile) { + try { + // 将原始音频文件转换为base64 + const originalAudioBase64 = await fileToBase64(originalAudioFile); + // 根据原始文件名确定扩展名,如果没有扩展名则使用.wav + const originalFilename = originalAudioFile.name || 'original_audio.wav'; + const fileExtension = originalFilename.toLowerCase().split('.').pop(); + const validExtensions = ['wav', 'mp3', 'mp4', 'aac', 'ogg', 'm4a']; + const extension = validExtensions.includes(fileExtension) ? fileExtension : 'wav'; + const originalAudioFilename = `original_audio.${extension}`; + directoryFiles[originalAudioFilename] = originalAudioBase64; + console.log('已保存原始音频文件:', originalAudioFilename); + } catch (error) { + console.warn('保存原始音频文件失败:', error); + // 不阻止任务提交,只记录警告 + } + } + + // 4. 生成config.json + const configJson = { + talk_objects: talkObjects + }; + const configJsonString = JSON.stringify(configJson, null, 4); + const configBase64 = btoa(unescape(encodeURIComponent(configJsonString))); + directoryFiles['config.json'] = configBase64; + + return directoryFiles; + }; + + // 生成mask图:根据bbox坐标生成白色区域,其余为黑色 + const generateMaskImage = async (bbox, imageWidth, imageHeight) => { + // bbox格式: [x1, y1, x2, y2] + const [x1, y1, x2, y2] = bbox; + + // 创建canvas + const canvas = document.createElement('canvas'); + canvas.width = imageWidth; + canvas.height = imageHeight; + const ctx = canvas.getContext('2d'); + + // 填充黑色背景 + ctx.fillStyle = '#000000'; + ctx.fillRect(0, 0, imageWidth, imageHeight); + + // 在bbox区域填充白色 + ctx.fillStyle = '#FFFFFF'; + ctx.fillRect(Math.round(x1), Math.round(y1), Math.round(x2 - x1), Math.round(y2 - y1)); + + // 转换为base64 + return canvas.toDataURL('image/png').split(',')[1]; + }; + + const formatTime = (timestamp) => { + if (!timestamp) return ''; + const date = new Date(timestamp * 1000); + return date.toLocaleString('zh-CN'); + }; + + // 通用缓存管理函数 + const loadFromCache = (cacheKey, expiryKey) => { + try { + const cached = localStorage.getItem(cacheKey); + if (cached) { + const data = JSON.parse(cached); + if (Date.now() - data.timestamp < expiryKey) { + console.log(`成功从缓存加载数据${cacheKey}:`, data.data); + return data.data; + } else { + // 缓存过期,清除 + localStorage.removeItem(cacheKey); + console.log(`缓存过期,清除 ${cacheKey}`); + } + } + } catch (error) { + console.warn(`加载缓存失败 ${cacheKey}:`, error); + localStorage.removeItem(cacheKey); + } + return null; + }; + + const saveToCache = (cacheKey, data) => { + try { + const cacheData = { + data: data, + timestamp: Date.now() + }; + console.log(`成功保存缓存数据 ${cacheKey}:`, cacheData); + localStorage.setItem(cacheKey, JSON.stringify(cacheData)); + } catch (error) { + console.warn(`保存缓存失败 ${cacheKey}:`, error); + } + }; + + // 清除所有应用缓存 + const clearAllCache = () => { + try { + const cacheKeys = [ + TASK_FILE_CACHE_KEY, + TEMPLATE_FILE_CACHE_KEY, + MODELS_CACHE_KEY, + TEMPLATES_CACHE_KEY + ]; + + // 清除所有任务缓存(使用通配符匹配) + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(TASKS_CACHE_KEY)) { + localStorage.removeItem(key); + } + } + + // 清除所有模板缓存(使用通配符匹配) + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && key.startsWith(TEMPLATES_CACHE_KEY)) { + localStorage.removeItem(key); + } + } + // 清除其他缓存 + cacheKeys.forEach(key => { + localStorage.removeItem(key); + }); + + // 清除内存中的任务文件缓存 + taskFileCache.value.clear(); + taskFileCacheLoaded.value = false; + + // 清除内存中的模板文件缓存 + templateFileCache.value.clear(); + templateFileCacheLoaded.value = false; + + console.log('所有缓存已清除'); + } catch (error) { + console.warn('清除缓存失败:', error); + } + }; + + // 模板文件缓存管理函数 + const loadTemplateFilesFromCache = () => { + try { + const cached = localStorage.getItem(TEMPLATE_FILE_CACHE_KEY); + if (cached) { + const data = JSON.parse(cached); + if (data.files) { + for (const [cacheKey, fileData] of Object.entries(data.files)) { + templateFileCache.value.set(cacheKey, fileData); + } + return true; + } else { + console.warn('模板文件缓存数据格式错误'); + return false; + } + } + } catch (error) { + console.warn('加载模板文件缓存失败:', error); + } + return false; + }; + + const saveTemplateFilesToCache = () => { + try { + const files = {}; + for (const [cacheKey, fileData] of templateFileCache.value.entries()) { + files[cacheKey] = fileData; + } + const data = { + files: files, + timestamp: Date.now() + }; + localStorage.setItem(TEMPLATE_FILE_CACHE_KEY, JSON.stringify(data)); + } catch (error) { + console.warn('保存模板文件缓存失败:', error); + } + }; + + const getTemplateFileCacheKey = (templateId, fileKey) => { + return `template_${templateId}_${fileKey}`; + }; + + const getTemplateFileFromCache = (cacheKey) => { + return templateFileCache.value.get(cacheKey) || null; + }; + + const setTemplateFileToCache = (fileKey, fileData) => { + templateFileCache.value.set(fileKey, fileData); + // 异步保存到localStorage + setTimeout(() => { + saveTemplateFilesToCache(); + }, 100); + }; + + const getTemplateFileUrlFromApi = async (fileKey, fileType) => { + const apiUrl = `/api/v1/template/asset_url/${fileType}/${fileKey}`; + const response = await apiRequest(apiUrl); + if (response && response.ok) { + const data = await response.json(); + let assertUrl = data.url; + if (assertUrl.startsWith('./assets/')) { + const token = localStorage.getItem('accessToken'); + if (token) { + assertUrl = `${assertUrl}&token=${encodeURIComponent(token)}`; + } + } + setTemplateFileToCache(fileKey, { + url: assertUrl, + timestamp: Date.now() + }); + return assertUrl; + } + return null; + }; + + // 获取模板文件URL(优先从缓存,缓存没有则生成URL)- 同步版本 + const getTemplateFileUrl = (fileKey, fileType) => { + // 检查参数有效性(静默处理,不打印警告,因为模板可能确实没有某些输入) + if (!fileKey) { + return null; + } + + // 先从缓存获取 + const cachedFile = getTemplateFileFromCache(fileKey); + if (cachedFile) { + /* console.log('从缓存获取模板文件url', { fileKey});*/ + return cachedFile.url; + } + // 如果缓存中没有,返回null,让调用方知道需要异步获取 + console.warn('模板文件URL不在缓存中,需要异步获取:', { fileKey, fileType }); + getTemplateFileUrlAsync(fileKey, fileType).then(url => { + return url; + }); + return null; + }; + + // 创建响应式的模板文件URL(用于首屏渲染) + const createTemplateFileUrlRef = (fileKey, fileType) => { + const urlRef = ref(null); + + // 检查参数有效性(静默处理,不打印警告) + if (!fileKey) { + return urlRef; + } + + // 先从缓存获取 + const cachedFile = getTemplateFileFromCache(fileKey); + if (cachedFile) { + urlRef.value = cachedFile.url; + return urlRef; + } + + // 检查是否正在获取中,避免重复请求 + const fetchKey = `${fileKey}_${fileType}`; + if (templateUrlFetching.value.has(fetchKey)) { + console.log('createTemplateFileUrlRef: 正在获取中,跳过重复请求', { fileKey, fileType }); + return urlRef; + } + + // 标记为正在获取 + templateUrlFetching.value.add(fetchKey); + + // 如果缓存中没有,异步获取 + getTemplateFileUrlFromApi(fileKey, fileType).then(url => { + if (url) { + urlRef.value = url; + // 将获取到的URL存储到缓存中 + setTemplateFileToCache(fileKey, { url, timestamp: Date.now() }); + } + }).catch(error => { + console.warn('获取模板文件URL失败:', error); + }).finally(() => { + // 移除获取状态 + templateUrlFetching.value.delete(fetchKey); + }); + + return urlRef; + }; + + // 创建响应式的任务文件URL(用于首屏渲染) + const createTaskFileUrlRef = (taskId, fileKey) => { + const urlRef = ref(null); + + // 检查参数有效性 + if (!taskId || !fileKey) { + console.warn('createTaskFileUrlRef: 参数为空', { taskId, fileKey }); + return urlRef; + } + + // 先从缓存获取 + const cachedFile = getTaskFileFromCache(taskId, fileKey); + if (cachedFile) { + urlRef.value = cachedFile.url; + return urlRef; + } + + // 如果缓存中没有,异步获取 + getTaskFileUrl(taskId, fileKey).then(url => { + if (url) { + urlRef.value = url; + // 将获取到的URL存储到缓存中 + setTaskFileToCache(taskId, fileKey, { url, timestamp: Date.now() }); + } + }).catch(error => { + console.warn('获取任务文件URL失败:', error); + }); + + return urlRef; + }; + + // 获取模板文件URL(异步版本,用于预加载等场景) + const getTemplateFileUrlAsync = async (fileKey, fileType) => { + // 检查参数有效性(静默处理,不打印警告,因为模板可能确实没有某些输入) + if (!fileKey) { + return null; + } + + // 先从缓存获取 + const cachedFile = getTemplateFileFromCache(fileKey); + if (cachedFile) { + console.log('getTemplateFileUrlAsync: 从缓存获取', { fileKey, url: cachedFile.url }); + return cachedFile.url; + } + + // 检查是否正在获取中,避免重复请求 + const fetchKey = `${fileKey}_${fileType}`; + if (templateUrlFetching.value.has(fetchKey)) { + console.log('getTemplateFileUrlAsync: 正在获取中,等待完成', { fileKey, fileType }); + // 等待其他请求完成 + return new Promise((resolve) => { + const checkInterval = setInterval(() => { + const cachedFile = getTemplateFileFromCache(fileKey); + if (cachedFile) { + clearInterval(checkInterval); + resolve(cachedFile.url); + } else if (!templateUrlFetching.value.has(fetchKey)) { + clearInterval(checkInterval); + resolve(null); + } + }, 100); + }); + } + + // 标记为正在获取 + templateUrlFetching.value.add(fetchKey); + + // 如果缓存中没有,异步获取 + try { + const url = await getTemplateFileUrlFromApi(fileKey, fileType); + if (url) { + // 将获取到的URL存储到缓存中 + setTemplateFileToCache(fileKey, { url, timestamp: Date.now() }); + } + return url; + } catch (error) { + console.warn('getTemplateFileUrlAsync: 获取URL失败', error); + return null; + } finally { + // 移除获取状态 + templateUrlFetching.value.delete(fetchKey); + } + }; + + // 任务文件缓存管理函数 + const loadTaskFilesFromCache = () => { + try { + const cached = localStorage.getItem(TASK_FILE_CACHE_KEY); + if (cached) { + const data = JSON.parse(cached); + // 检查是否过期 + if (Date.now() - data.timestamp < TASK_FILE_CACHE_EXPIRY) { + // 将缓存数据加载到内存缓存中 + for (const [cacheKey, fileData] of Object.entries(data.files)) { + taskFileCache.value.set(cacheKey, fileData); + } + return true; + } else { + // 缓存过期,清除 + localStorage.removeItem(TASK_FILE_CACHE_KEY); + } + } + } catch (error) { + console.warn('加载任务文件缓存失败:', error); + localStorage.removeItem(TASK_FILE_CACHE_KEY); + } + return false; + }; + + const saveTaskFilesToCache = () => { + try { + const files = {}; + for (const [cacheKey, fileData] of taskFileCache.value.entries()) { + files[cacheKey] = fileData; + } + const data = { + files, + timestamp: Date.now() + }; + localStorage.setItem(TASK_FILE_CACHE_KEY, JSON.stringify(data)); + } catch (error) { + console.warn('保存任务文件缓存失败:', error); + } + }; + + // 生成缓存键 + const getTaskFileCacheKey = (taskId, fileKey) => { + return `${taskId}_${fileKey}`; + }; + + // 从缓存获取任务文件 + const getTaskFileFromCache = (taskId, fileKey) => { + const cacheKey = getTaskFileCacheKey(taskId, fileKey); + return taskFileCache.value.get(cacheKey) || null; + }; + + // 设置任务文件到缓存 + const setTaskFileToCache = (taskId, fileKey, fileData) => { + const cacheKey = getTaskFileCacheKey(taskId, fileKey); + taskFileCache.value.set(cacheKey, fileData); + // 异步保存到localStorage + setTimeout(() => { + saveTaskFilesToCache(); + }, 100); + }; + + const getTaskFileUrlFromApi = async (taskId, fileKey, filename = null) => { + let apiUrl = `/api/v1/task/input_url?task_id=${taskId}&name=${fileKey}`; + if (filename) { + apiUrl += `&filename=${encodeURIComponent(filename)}`; + } + if (fileKey.includes('output')) { + apiUrl = `/api/v1/task/result_url?task_id=${taskId}&name=${fileKey}`; + } + const response = await apiRequest(apiUrl); + if (response && response.ok) { + const data = await response.json(); + let assertUrl = data.url; + if (assertUrl.startsWith('./assets/')) { + const token = localStorage.getItem('accessToken'); + if (token) { + assertUrl = `${assertUrl}&token=${encodeURIComponent(token)}`; + } + } + const cacheKey = filename ? `${fileKey}_${filename}` : fileKey; + setTaskFileToCache(taskId, cacheKey, { + url: assertUrl, + timestamp: Date.now() + }); + return assertUrl; + } else if (response && response.status === 400) { + // Handle directory input error (multi-person mode) + try { + const errorData = await response.json(); + if (errorData.error && errorData.error.includes('directory')) { + console.warn(`Input ${fileKey} is a directory (multi-person mode), cannot get single file URL`); + return null; + } + } catch (e) { + // Ignore JSON parse errors + } + } + return null; + }; + + // Podcast 音频 URL 缓存管理函数(模仿任务文件缓存) + const loadPodcastAudioFromCache = () => { + try { + const cached = localStorage.getItem(PODCAST_AUDIO_CACHE_KEY); + if (cached) { + const data = JSON.parse(cached); + // 检查是否过期 + if (Date.now() - data.timestamp < PODCAST_AUDIO_CACHE_EXPIRY) { + // 将缓存数据加载到内存缓存中 + for (const [cacheKey, audioData] of Object.entries(data.audio_urls)) { + podcastAudioCache.value.set(cacheKey, audioData); + } + podcastAudioCacheLoaded.value = true; + return true; + } else { + // 缓存过期,清除 + localStorage.removeItem(PODCAST_AUDIO_CACHE_KEY); + } + } + } catch (error) { + console.warn('加载播客音频缓存失败:', error); + localStorage.removeItem(PODCAST_AUDIO_CACHE_KEY); + } + podcastAudioCacheLoaded.value = true; + return false; + }; + + const savePodcastAudioToCache = () => { + try { + const audio_urls = {}; + for (const [cacheKey, audioData] of podcastAudioCache.value.entries()) { + audio_urls[cacheKey] = audioData; + } + const data = { + audio_urls, + timestamp: Date.now() + }; + localStorage.setItem(PODCAST_AUDIO_CACHE_KEY, JSON.stringify(data)); + } catch (error) { + console.warn('保存播客音频缓存失败:', error); + } + }; + + // 生成播客音频缓存键 + const getPodcastAudioCacheKey = (sessionId) => { + return sessionId; + }; + + // 从缓存获取播客音频 URL + const getPodcastAudioFromCache = (sessionId) => { + const cacheKey = getPodcastAudioCacheKey(sessionId); + return podcastAudioCache.value.get(cacheKey) || null; + }; + + // 设置播客音频 URL 到缓存 + const setPodcastAudioToCache = (sessionId, audioData) => { + const cacheKey = getPodcastAudioCacheKey(sessionId); + podcastAudioCache.value.set(cacheKey, audioData); + // 异步保存到localStorage + setTimeout(() => { + savePodcastAudioToCache(); + }, 100); + }; + + // 从 API 获取播客音频 URL(CDN URL) + const getPodcastAudioUrlFromApi = async (sessionId) => { + try { + const response = await apiCall(`/api/v1/podcast/session/${sessionId}/audio_url`); + if (response && response.ok) { + const data = await response.json(); + const audioUrl = data.audio_url; + setPodcastAudioToCache(sessionId, { + url: audioUrl, + timestamp: Date.now() + }); + return audioUrl; + } + } catch (error) { + console.warn(`Failed to get audio URL for session ${sessionId}:`, error); + } + return null; + }; + + // 获取任务文件URL(优先从缓存,缓存没有则调用后端) + const getTaskFileUrl = async (taskId, fileKey) => { + // 先从缓存获取 + const cachedFile = getTaskFileFromCache(taskId, fileKey); + if (cachedFile) { + return cachedFile.url; + } + return await getTaskFileUrlFromApi(taskId, fileKey); + }; + + // 同步获取任务文件URL(仅从缓存获取,用于模板显示) + const getTaskFileUrlSync = (taskId, fileKey) => { + const cachedFile = getTaskFileFromCache(taskId, fileKey); + if (cachedFile) { + console.log('getTaskFileUrlSync: 从缓存获取', { taskId, fileKey, url: cachedFile.url, type: typeof cachedFile.url }); + return cachedFile.url; + } + console.log('getTaskFileUrlSync: 缓存中没有找到', { taskId, fileKey }); + return null; + }; + + // 预加载任务文件 + const preloadTaskFilesUrl = async (tasks) => { + if (!tasks || tasks.length === 0) return; + + // 先尝试从localStorage加载缓存 + if (taskFileCache.value.size === 0) { + loadTaskFilesFromCache(); + } + + console.log(`开始获取 ${tasks.length} 个任务的文件url`); + + // 分批预加载,避免过多并发请求 + const batchSize = 5; + for (let i = 0; i < tasks.length; i += batchSize) { + const batch = tasks.slice(i, i + batchSize); + + const promises = batch.map(async (task) => { + if (!task.task_id) return; + + // 预加载输入图片 + if (task.inputs && task.inputs.input_image) { + await getTaskFileUrl(task.task_id, 'input_image'); + } + // 预加载输入音频 + if (task.inputs && task.inputs.input_audio) { + await getTaskFileUrl(task.task_id, 'input_audio'); + } + // 预加载输出视频 + if (task.outputs && task.outputs.output_video && task.status === 'SUCCEED') { + await getTaskFileUrl(task.task_id, 'output_video'); + } + }); + + await Promise.all(promises); + + // 批次间添加延迟 + if (i + batchSize < tasks.length) { + await new Promise(resolve => setTimeout(resolve, 200)); + } + } + + console.log('任务文件url预加载完成'); + }; + + // 预加载模板文件 + const preloadTemplateFilesUrl = async (templates) => { + if (!templates || templates.length === 0) return; + + // 先尝试从localStorage加载缓存 + if (templateFileCache.value.size === 0) { + loadTemplateFilesFromCache(); + } + + console.log(`开始获取 ${templates.length} 个模板的文件url`); + + // 分批预加载,避免过多并发请求 + const batchSize = 5; + for (let i = 0; i < templates.length; i += batchSize) { + const batch = templates.slice(i, i + batchSize); + + const promises = batch.map(async (template) => { + if (!template.task_id) return; + + // 预加载视频文件 + if (template.outputs?.output_video) { + await getTemplateFileUrlAsync(template.outputs.output_video, 'videos'); + } + + // 预加载图片文件 + if (template.inputs?.input_image) { + await getTemplateFileUrlAsync(template.inputs.input_image, 'images'); + } + + // 预加载音频文件 + if (template.inputs?.input_audio) { + await getTemplateFileUrlAsync(template.inputs.input_audio, 'audios'); + } + }); + + await Promise.all(promises); + + // 批次间添加延迟 + if (i + batchSize < templates.length) { + await new Promise(resolve => setTimeout(resolve, 200)); + } + } + + console.log('模板文件url预加载完成'); + }; + + const refreshTasks = async (forceRefresh = false) => { + try { + console.log('开始刷新任务列表, forceRefresh:', forceRefresh, 'currentPage:', currentTaskPage.value); + + // 构建缓存键,包含分页和过滤条件 + const cacheKey = `${TASKS_CACHE_KEY}_${currentTaskPage.value}_${taskPageSize.value}_${statusFilter.value}_${taskSearchQuery.value}`; + + // 如果不是强制刷新,先尝试从缓存加载 + if (!forceRefresh) { + const cachedTasks = loadFromCache(cacheKey, TASKS_CACHE_EXPIRY); + if (cachedTasks) { + console.log('从缓存加载任务列表'); + tasks.value = cachedTasks.tasks || []; + pagination.value = cachedTasks.pagination || null; + // 强制触发响应式更新 + await nextTick(); + // 强制刷新分页组件 + paginationKey.value++; + // 使用新的任务文件预加载逻辑 + await preloadTaskFilesUrl(tasks.value); + return; + } + } + + const params = new URLSearchParams({ + page: currentTaskPage.value.toString(), + page_size: taskPageSize.value.toString() + }); + + if (statusFilter.value !== 'ALL') { + params.append('status', statusFilter.value); + } + + console.log('请求任务列表API:', `/api/v1/task/list?${params.toString()}`); + const response = await apiRequest(`/api/v1/task/list?${params.toString()}`); + if (response && response.ok) { + const data = await response.json(); + console.log('任务列表API响应:', data); + + // 强制清空并重新赋值,确保Vue检测到变化 + tasks.value = []; + pagination.value = null; + await nextTick(); + + tasks.value = data.tasks || []; + pagination.value = data.pagination || null; + + // 缓存任务数据 + saveToCache(cacheKey, { + tasks: data.tasks || [], + pagination: data.pagination || null + }); + console.log('缓存任务列表数据成功'); + + // 强制触发响应式更新 + await nextTick(); + + // 强制刷新分页组件 + paginationKey.value++; + + // 使用新的任务文件预加载逻辑 + await preloadTaskFilesUrl(tasks.value); + } else if (response) { + showAlert(t('refreshTaskListFailed'), 'danger'); + } + // 如果response为null,说明是认证错误,apiRequest已经处理了 + } catch (error) { + console.error('刷新任务列表失败:', error); + // showAlert(`刷新任务列表失败: ${error.message}`, 'danger'); + } + }; + + // 分页相关函数 + const goToPage = async (page) => { + isPageLoading.value = true; + if (page < 1 || page > pagination.value?.total_pages || page === currentTaskPage.value) { + isPageLoading.value = false; + return; + } + currentTaskPage.value = page; + taskPageInput.value = page; // 同步更新输入框 + await refreshTasks(); + isPageLoading.value = false; + }; + + const jumpToPage = async () => { + const page = parseInt(taskPageInput.value); + if (page && page >= 1 && page <= pagination.value?.total_pages && page !== currentTaskPage.value) { + await goToPage(page); + } else { + // 如果输入无效,恢复到当前页 + taskPageInput.value = currentTaskPage.value; + } + }; + + // Template分页相关函数 + const goToTemplatePage = async (page) => { + isPageLoading.value=true; + if (page < 1 || page > templatePagination.value?.total_pages || page === templateCurrentPage.value) { + isPageLoading.value = false; + return; + } + templateCurrentPage.value = page; + templatePageInput.value = page; // 同步更新输入框 + await loadImageAudioTemplates(); + isPageLoading.value = false; + }; + + const jumpToTemplatePage = async () => { + const page = parseInt(templatePageInput.value); + if (page && page >= 1 && page <= templatePagination.value?.total_pages && page !== templateCurrentPage.value) { + await goToTemplatePage(page); + } else { + // 如果输入无效,恢复到当前页 + templatePageInput.value = templateCurrentPage.value; + } + }; + + const getVisiblePages = () => { + if (!pagination.value) return []; + + const totalPages = pagination.value.total_pages; + const current = currentTaskPage.value; + const pages = []; + + // 总是显示第一页 + pages.push(1); + + if (totalPages <= 5) { + // 如果总页数少于等于7页,显示所有页码 + for (let i = 2; i <= totalPages - 1; i++) { + pages.push(i); + } + } else { + // 如果总页数大于7页,使用省略号 + if (current <= 3) { + // 当前页在前4页 + for (let i = 2; i <= 3; i++) { + pages.push(i); + } + pages.push('...'); + } else if (current >= totalPages - 2) { + // 当前页在后4页 + pages.push('...'); + for (let i = totalPages - 2; i <= totalPages - 1; i++) { + pages.push(i); + } + } else { + // 当前页在中间 + pages.push('...'); + for (let i = current - 1; i <= current + 1; i++) { + pages.push(i); + } + pages.push('...'); + } + } + + // 总是显示最后一页(如果不是第一页) + if (totalPages > 1) { + pages.push(totalPages); + } + + return pages; + }; + + const getVisibleTemplatePages = () => { + if (!templatePagination.value) return []; + + const totalPages = templatePagination.value.total_pages; + const current = templateCurrentPage.value; + const pages = []; + + // 总是显示第一页 + pages.push(1); + + if (totalPages <= 5) { + // 如果总页数少于等于7页,显示所有页码 + for (let i = 2; i <= totalPages - 1; i++) { + pages.push(i); + } + } else { + // 显示当前页附近的页码 + const start = Math.max(2, current - 1); + const end = Math.min(totalPages - 1, current + 1); + + if (start > 2) { + pages.push('...'); + } + + for (let i = start; i <= end; i++) { + if (i !== 1 && i !== totalPages) { + pages.push(i); + } + } + + if (end < totalPages - 1) { + pages.push('...'); + } + } + + // 总是显示最后一页 + if (totalPages > 1) { + pages.push(totalPages); + } + + return pages; + }; + + // 灵感广场分页相关函数 + const goToInspirationPage = async (page) => { + isPageLoading.value = true; + if (page < 1 || page > inspirationPagination.value?.total_pages || page === inspirationCurrentPage.value) { + isPageLoading.value = false; + return; + } + inspirationCurrentPage.value = page; + inspirationPageInput.value = page; // 同步更新输入框 + await loadInspirationData(); + isPageLoading.value = false; + }; + + const jumpToInspirationPage = async () => { + const page = parseInt(inspirationPageInput.value); + if (page && page >= 1 && page <= inspirationPagination.value?.total_pages && page !== inspirationCurrentPage.value) { + await goToInspirationPage(page); + } else { + // 如果输入无效,恢复到当前页 + inspirationPageInput.value = inspirationCurrentPage.value; + } + }; + + const getVisibleInspirationPages = () => { + if (!inspirationPagination.value) return []; + + const totalPages = inspirationPagination.value.total_pages; + const current = inspirationCurrentPage.value; + const pages = []; + + // 总是显示第一页 + pages.push(1); + + if (totalPages <= 5) { + // 如果总页数少于等于7页,显示所有页码 + for (let i = 2; i <= totalPages - 1; i++) { + pages.push(i); + } + } else { + // 显示当前页附近的页码 + const start = Math.max(2, current - 1); + const end = Math.min(totalPages - 1, current + 1); + + if (start > 2) { + pages.push('...'); + } + + for (let i = start; i <= end; i++) { + if (i !== 1 && i !== totalPages) { + pages.push(i); + } + } + + if (end < totalPages - 1) { + pages.push('...'); + } + } + + // 总是显示最后一页 + if (totalPages > 1) { + pages.push(totalPages); + } + + return pages; + }; + + const getStatusBadgeClass = (status) => { + const statusMap = { + 'SUCCEED': 'bg-success', + 'FAILED': 'bg-danger', + 'RUNNING': 'bg-warning', + 'PENDING': 'bg-secondary', + 'CREATED': 'bg-secondary' + }; + return statusMap[status] || 'bg-secondary'; + }; + + const viewSingleResult = async (taskId, key) => { + try { + downloadLoading.value = true; + const url = await getTaskFileUrl(taskId, key); + if (url) { + const response = await fetch(url); + if (response.ok) { + const blob = await response.blob(); + const videoBlob = new Blob([blob], { type: 'video/mp4' }); + const url = window.URL.createObjectURL(videoBlob); + window.open(url, '_blank'); + } else { + showAlert(t('getResultFailed'), 'danger'); + } + } else { + showAlert(t('getTaskResultFailedAlert'), 'danger'); + } + } catch (error) { + showAlert(`${t('viewTaskResultFailedAlert')}: ${error.message}`, 'danger'); + } finally { + downloadLoading.value = false; + } + }; + + const cancelTask = async (taskId, fromDetailPage = false) => { + try { + // 显示确认对话框 + const confirmed = await showConfirmDialog({ + title: t('cancelTaskConfirm'), + message: t('cancelTaskConfirmMessage'), + confirmText: t('confirmCancel'), + }); + + if (!confirmed) { + return; + } + + const response = await apiRequest(`/api/v1/task/cancel?task_id=${taskId}`); + if (response && response.ok) { + showAlert(t('taskCancelSuccessAlert'), 'success'); + + // 如果当前在任务详情界面,刷新任务后关闭详情弹窗 + if (fromDetailPage) { + refreshTasks(true); // 强制刷新 + const updatedTask = tasks.value.find(t => t.task_id === taskId); + if (updatedTask) { + modalTask.value = updatedTask; + } + await nextTick(); + closeTaskDetailModal(); + } else { + refreshTasks(true); // 强制刷新 + } + + } else if (response) { + const error = await response.json(); + showAlert(`${t('cancelTaskFailedAlert')}: ${error.message}`, 'danger'); + } + // 如果response为null,说明是认证错误,apiRequest已经处理了 + } catch (error) { + showAlert(`${t('cancelTaskFailedAlert')}: ${error.message}`, 'danger'); + } + }; + + const resumeTask = async (taskId, fromDetailPage = false) => { + try { + // 先获取任务信息,检查任务状态 + const taskResponse = await apiRequest(`/api/v1/task/query?task_id=${taskId}`); + if (!taskResponse || !taskResponse.ok) { + showAlert(t('taskNotFoundAlert'), 'danger'); + return; + } + + const task = await taskResponse.json(); + + // 如果任务已完成,则删除并重新生成 + if (task.status === 'SUCCEED') { + // 显示确认对话框 + const confirmed = await showConfirmDialog({ + title: t('regenerateTaskConfirm'), + message: t('regenerateTaskConfirmMessage'), + confirmText: t('confirmRegenerate') + }); + + if (!confirmed) { + return; + } + + // 显示重新生成中的提示 + showAlert(t('regeneratingTaskAlert'), 'info'); + + const deleteResponse = await apiRequest(`/api/v1/task/delete?task_id=${taskId}`, { + method: 'DELETE' + }); + if (!deleteResponse || !deleteResponse.ok) { + showAlert(t('deleteTaskFailedAlert'), 'danger'); + return; + } + try { + // 设置任务类型 + selectedTaskId.value = task.task_type; + console.log('selectedTaskId.value', selectedTaskId.value); + + // 获取当前表单 + const currentForm = getCurrentForm(); + + // 设置模型 + if (task.params && task.params.model_cls) { + currentForm.model_cls = task.params.model_cls; + } + + // 设置prompt + if (task.params && task.params.prompt) { + currentForm.prompt = task.params.prompt; + } + + // localStorage 不再保存文件内容,直接从后端获取任务文件 + try { + // 使用现有的函数获取图片和音频URL + const imageUrl = await getTaskInputImage(task); + const audioUrl = await getTaskInputAudio(task); + + // 加载图片文件 + if (imageUrl) { + try { + const imageResponse = await fetch(imageUrl); + if (imageResponse && imageResponse.ok) { + const blob = await imageResponse.blob(); + const filename = task.inputs[Object.keys(task.inputs).find(key => + key.includes('image') || + task.inputs[key].toString().toLowerCase().match(/\.(jpg|jpeg|png|gif|bmp|webp)$/) + )] || 'image.jpg'; + const file = new File([blob], filename, { type: blob.type }); + currentForm.imageFile = file; + setCurrentImagePreview(URL.createObjectURL(file)); + } + } catch (error) { + console.warn('Failed to load image file:', error); + } + } + + // 加载音频文件 + if (audioUrl) { + try { + const audioResponse = await fetch(audioUrl); + if (audioResponse && audioResponse.ok) { + const blob = await audioResponse.blob(); + const filename = task.inputs[Object.keys(task.inputs).find(key => + key.includes('audio') || + task.inputs[key].toString().toLowerCase().match(/\.(mp3|wav|mp4|aac|ogg|m4a)$/) + )] || 'audio.wav'; + + // 根据文件扩展名确定正确的MIME类型 + let mimeType = blob.type; + if (!mimeType || mimeType === 'application/octet-stream') { + const ext = filename.toLowerCase().split('.').pop(); + const mimeTypes = { + 'mp3': 'audio/mpeg', + 'wav': 'audio/wav', + 'mp4': 'audio/mp4', + 'aac': 'audio/aac', + 'ogg': 'audio/ogg', + 'm4a': 'audio/mp4' + }; + mimeType = mimeTypes[ext] || 'audio/mpeg'; + } + + const file = new File([blob], filename, { type: mimeType }); + currentForm.audioFile = file; + console.log('复用任务 - 从后端加载音频文件:', { + name: file.name, + type: file.type, + size: file.size, + originalBlobType: blob.type + }); + // 使用FileReader生成data URL,与正常上传保持一致 + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentAudioPreview(e.target.result); + console.log('复用任务 - 音频预览已设置:', e.target.result.substring(0, 50) + '...'); + }; + reader.readAsDataURL(file); + } + + } catch (error) { + console.warn('Failed to load audio file:', error); + } + } + } catch (error) { + console.warn('Failed to load task data from backend:', error); + } + + showAlert(t('taskMaterialReuseSuccessAlert'), 'success'); + + } catch (error) { + console.error('Failed to resume task:', error); + showAlert(t('loadTaskDataFailedAlert'), 'danger'); + return; + } + // 如果从详情页调用,关闭详情页 + if (fromDetailPage) { + closeTaskDetailModal(); + } + + submitTask(); + + + return; // 不需要继续执行后续的API调用 + } else { + // 对于未完成的任务,使用原有的恢复逻辑 + const response = await apiRequest(`/api/v1/task/resume?task_id=${taskId}`); + if (response && response.ok) { + showAlert(t('taskRetrySuccessAlert'), 'success'); + + // 如果当前在任务详情界面,先刷新任务列表,然后重新获取任务信息 + if (fromDetailPage) { + refreshTasks(true); // 强制刷新 + const updatedTask = tasks.value.find(t => t.task_id === taskId); + if (updatedTask) { + selectedTask.value = updatedTask; + } + startPollingTask(taskId); + await nextTick(); + } else { + refreshTasks(true); // 强制刷新 + + // 开始轮询新提交的任务状态 + startPollingTask(taskId); + } + } else if (response) { + const error = await response.json(); + showAlert(`${t('retryTaskFailedAlert')}: ${error.message}`, 'danger'); + } + } + } catch (error) { + console.error('resumeTask error:', error); + showAlert(`${t('retryTaskFailedAlert')}: ${error.message}`, 'danger'); + } + }; + + // 切换任务菜单显示状态 + const toggleTaskMenu = (taskId) => { + // 先关闭所有其他菜单 + closeAllTaskMenus(); + // 然后打开当前菜单 + taskMenuVisible.value[taskId] = true; + }; + + // 关闭所有任务菜单 + const closeAllTaskMenus = () => { + taskMenuVisible.value = {}; + }; + + // 点击外部关闭菜单 + const handleClickOutside = (event) => { + if (!event.target.closest('.task-menu-container')) { + closeAllTaskMenus(); + } + if (!event.target.closest('.task-type-dropdown')) { + showTaskTypeMenu.value = false; + } + if (!event.target.closest('.model-dropdown')) { + showModelMenu.value = false; + } + }; + + const deleteTask = async (taskId, fromDetailPage = false) => { + try { + // 显示确认对话框 + const confirmed = await showConfirmDialog({ + title: t('deleteTaskConfirm'), + message: t('deleteTaskConfirmMessage'), + confirmText: t('confirmDelete') + }); + + if (!confirmed) { + return; + } + const response = await apiRequest(`/api/v1/task/delete?task_id=${taskId}`, { + method: 'DELETE' + }); + + if (response && response.ok) { + showAlert(t('taskDeletedSuccessAlert'), 'success'); + const deletedTaskIndex = tasks.value.findIndex(task => task.task_id === taskId); + if (deletedTaskIndex !== -1) { + const wasCurrent = currentTask.value?.task_id === taskId; + tasks.value.splice(deletedTaskIndex, 1); + if (wasCurrent) { + currentTask.value = tasks.value[deletedTaskIndex] || tasks.value[deletedTaskIndex - 1] || null; + } + } + refreshTasks(true); // 强制刷新 + + // 如果是从任务详情页删除,删除成功后关闭详情弹窗 + if (fromDetailPage) { + closeTaskDetailModal(); + if (!selectedTaskId.value) { + if (availableTaskTypes.value.includes('s2v')) { + selectTask('s2v'); + } + } + } + } else if (response) { + const error = await response.json(); + showAlert(`${t('deleteTaskFailedAlert')}: ${error.message}`, 'danger'); + } + // 如果response为null,说明是认证错误,apiRequest已经处理了 + } catch (error) { + showAlert(`${t('deleteTaskFailedAlert')}: ${error.message}`, 'danger'); + } + }; + + const loadTaskFiles = async (task) => { + try { + loadingTaskFiles.value = true; + + const files = { inputs: {}, outputs: {} }; + + // 获取输入文件(所有状态的任务都需要) + if (task.inputs) { + for (const [key, inputPath] of Object.entries(task.inputs)) { + try { + const url = await getTaskFileUrl(taskId, key); + if (url) { + const response = await fetch(url); + if (response && response.ok) { + const blob = await response.blob() + files.inputs[key] = { + name: inputPath, // 使用原始文件名而不是key + path: inputPath, + blob: blob, + url: URL.createObjectURL(blob) + } + } + } + } catch (error) { + console.error(`Failed to load input ${key}:`, error); + files.inputs[key] = { + name: inputPath, // 使用原始文件名而不是key + path: inputPath, + error: true + }; + } + } + } + + // 只对成功完成的任务获取输出文件 + if (task.status === 'SUCCEED' && task.outputs) { + for (const [key, outputPath] of Object.entries(task.outputs)) { + try { + const url = await getTaskFileUrl(taskId, key); + if (url) { + const response = await fetch(url); + if (response && response.ok) { + const blob = await response.blob() + files.outputs[key] = { + name: outputPath, // 使用原始文件名而不是key + path: outputPath, + blob: blob, + url: URL.createObjectURL(blob) + } + }; + } + } catch (error) { + console.error(`Failed to load output ${key}:`, error); + files.outputs[key] = { + name: outputPath, // 使用原始文件名而不是key + path: outputPath, + error: true + }; + } + } + } + + selectedTaskFiles.value = files; + + } catch (error) { + console.error('Failed to load task files: task_id=', taskId, error); + showAlert(t('loadTaskFilesFailedAlert'), 'danger'); + } finally { + loadingTaskFiles.value = false; + } + }; + + const reuseTask = async (task) => { + if (!task) { + showAlert(t('loadTaskDataFailedAlert'), 'danger'); + return; + } + + try { + templateLoading.value = true; + templateLoadingMessage.value = t('prefillLoadingTask'); + // 跳转到任务创建界面 + isCreationAreaExpanded.value = true; + if (showTaskDetailModal.value) { + closeTaskDetailModal(); + } + + // 设置任务类型 + selectedTaskId.value = task.task_type; + console.log('selectedTaskId.value', selectedTaskId.value); + + // 获取当前表单 + const currentForm = getCurrentForm(); + + // 立即切换到创建视图,后续资产异步加载 + switchToCreateView(); + + // 设置模型 + if (task.params && task.params.model_cls) { + currentForm.model_cls = task.params.model_cls; + } + + // 设置prompt + if (task.params && task.params.prompt) { + currentForm.prompt = task.params.prompt; + } + + // localStorage 不再保存文件内容,直接从后端获取任务文件 + try { + // 使用现有的函数获取图片和音频URL + const imageUrl = await getTaskInputImage(task); + const audioUrl = await getTaskInputAudio(task); + + + // 加载音频文件 + if (audioUrl) { + try { + const audioResponse = await fetch(audioUrl); + if (audioResponse && audioResponse.ok) { + // Check if the response is an error (for directory inputs) + const contentType = audioResponse.headers.get('content-type'); + if (contentType && contentType.includes('application/json')) { + const errorData = await audioResponse.json(); + // Not a directory error, proceed with normal loading + currentForm.audioUrl = audioUrl; + setCurrentAudioPreview(audioUrl); + + const blob = await audioResponse.blob(); + const filename = task.inputs[Object.keys(task.inputs).find(key => + key.includes('audio') || + task.inputs[key].toString().toLowerCase().match(/\.(mp3|wav|mp4|aac|ogg|m4a)$/) + )] || 'audio.wav'; + + // 根据文件扩展名确定正确的MIME类型 + let mimeType = blob.type; + if (!mimeType || mimeType === 'application/octet-stream') { + const ext = filename.toLowerCase().split('.').pop(); + const mimeTypes = { + 'mp3': 'audio/mpeg', + 'wav': 'audio/wav', + 'mp4': 'audio/mp4', + 'aac': 'audio/aac', + 'ogg': 'audio/ogg', + 'm4a': 'audio/mp4' + }; + mimeType = mimeTypes[ext] || 'audio/mpeg'; + } + + const file = new File([blob], filename, { type: mimeType }); + currentForm.audioFile = file; + console.log('复用任务 - 从后端加载音频文件:', { + name: file.name, + type: file.type, + size: file.size, + originalBlobType: blob.type + }); + } else { + // Normal audio file response + currentForm.audioUrl = audioUrl; + setCurrentAudioPreview(audioUrl); + + const blob = await audioResponse.blob(); + const filename = task.inputs[Object.keys(task.inputs).find(key => + key.includes('audio') || + task.inputs[key].toString().toLowerCase().match(/\.(mp3|wav|mp4|aac|ogg|m4a)$/) + )] || 'audio.wav'; + + // 根据文件扩展名确定正确的MIME类型 + let mimeType = blob.type; + if (!mimeType || mimeType === 'application/octet-stream') { + const ext = filename.toLowerCase().split('.').pop(); + const mimeTypes = { + 'mp3': 'audio/mpeg', + 'wav': 'audio/wav', + 'mp4': 'audio/mp4', + 'aac': 'audio/aac', + 'ogg': 'audio/ogg', + 'm4a': 'audio/mp4' + }; + mimeType = mimeTypes[ext] || 'audio/mpeg'; + } + + const file = new File([blob], filename, { type: mimeType }); + currentForm.audioFile = file; + console.log('复用任务 - 从后端加载音频文件:', { + name: file.name, + type: file.type, + size: file.size, + originalBlobType: blob.type + }); + } + } + } catch (error) { + console.warn('Failed to load audio file:', error); + } + } + + // 加载图片文件 + if (imageUrl) { + try { + const imageResponse = await fetch(imageUrl); + if (imageResponse && imageResponse.ok) { + const blob = await imageResponse.blob(); + const filename = task.inputs[Object.keys(task.inputs).find(key => + key.includes('image') || + task.inputs[key].toString().toLowerCase().match(/\.(jpg|jpeg|png|gif|bmp|webp)$/) + )] || 'image.jpg'; + const file = new File([blob], filename, { type: blob.type }); + currentForm.imageFile = file; + const imagePreviewUrl = URL.createObjectURL(file); + setCurrentImagePreview(imageUrl); + + // Reset detected faces + if (selectedTaskId.value === 'i2v') { + i2vForm.value.detectedFaces = []; + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.detectedFaces = []; + } + + // 不再自动检测人脸,等待用户手动打开多角色模式开关 + } + } catch (error) { + console.warn('Failed to load image file:', error); + } + } + } catch (error) { + console.warn('Failed to load task data from backend:', error); + } + + showAlert(t('taskMaterialReuseSuccessAlert'), 'success'); + + } catch (error) { + console.error('Failed to reuse task:', error); + showAlert(t('loadTaskDataFailedAlert'), 'danger'); + } finally { + templateLoading.value = false; + templateLoadingMessage.value = ''; + } + }; + + const downloadFile = async (fileInfo) => { + if (!fileInfo || !fileInfo.blob) { + showAlert(t('fileUnavailableAlert'), 'danger'); + return false; + } + + const blob = fileInfo.blob; + const fileName = fileInfo.name || 'download'; + const mimeType = blob.type || fileInfo.mimeType || 'application/octet-stream'; + + try { + const objectUrl = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = objectUrl; + a.download = fileName; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(objectUrl); + showAlert(t('downloadSuccessAlert'), 'success'); + return true; + } catch (error) { + console.error('Download failed:', error); + showAlert(t('downloadFailedAlert'), 'danger'); + return false; + } + }; + + // 处理文件下载 + const handleDownloadFile = async (taskId, fileKey, fileName) => { + if (downloadLoading.value) { + showAlert(t('downloadInProgressNotice'), 'info'); + return; + } + + downloadLoading.value = true; + downloadLoadingMessage.value = t('downloadPreparing'); + + try { + console.log('开始下载文件:', { taskId, fileKey, fileName }); + + // 处理文件名,确保有正确的后缀名 + let finalFileName = fileName; + if (fileName && typeof fileName === 'string') { + const hasExtension = /\.[a-zA-Z0-9]+$/.test(fileName); + if (!hasExtension) { + const extension = getFileExtension(fileKey); + finalFileName = `${fileName}.${extension}`; + console.log('添加后缀名:', finalFileName); + } + } else { + finalFileName = `${fileKey}.${getFileExtension(fileKey)}`; + } + + downloadLoadingMessage.value = t('downloadFetching'); + + let downloadUrl = null; + + const cachedData = getTaskFileFromCache(taskId, fileKey); + if (cachedData?.url) { + downloadUrl = cachedData.url; + } + + if (!downloadUrl) { + downloadUrl = await getTaskFileUrl(taskId, fileKey); + } + + if (!downloadUrl) { + throw new Error('无法获取文件URL'); + } + + const response = await fetch(downloadUrl); + if (!response.ok) { + throw new Error(`文件响应失败: ${response.status}`); + } + + const blob = await response.blob(); + downloadLoadingMessage.value = t('downloadSaving'); + await downloadFile({ + blob, + name: finalFileName, + mimeType: blob.type + }); + } catch (error) { + console.error('下载失败:', error); + showAlert(t('downloadFailedAlert'), 'danger'); + } finally { + downloadLoading.value = false; + downloadLoadingMessage.value = ''; + } + } + + const viewFile = (fileInfo) => { + if (!fileInfo || !fileInfo.url) { + showAlert(t('fileUnavailableAlert'), 'danger'); + return; + } + + // 在新窗口中打开文件 + window.open(fileInfo.url, '_blank'); + }; + + const clearTaskFiles = () => { + // 清理 URL 对象,释放内存 + Object.values(selectedTaskFiles.value.inputs).forEach(file => { + if (file.url) { + URL.revokeObjectURL(file.url); + } + }); + Object.values(selectedTaskFiles.value.outputs).forEach(file => { + if (file.url) { + URL.revokeObjectURL(file.url); + } + }); + selectedTaskFiles.value = { inputs: {}, outputs: {} }; + }; + + const showTaskCreator = () => { + selectedTask.value = null; + // clearTaskFiles(); // 清空文件缓存 + selectedTaskId.value = 's2v'; // 默认选择数字人任务 + + // 停止所有任务状态轮询 + pollingTasks.value.clear(); + if (pollingInterval.value) { + clearInterval(pollingInterval.value); + pollingInterval.value = null; + } + }; + + const toggleSidebar = () => { + sidebarCollapsed.value = !sidebarCollapsed.value; + + if (sidebarCollapsed.value) { + // 收起时,将历史任务栏隐藏到屏幕左侧 + if (sidebar.value) { + sidebar.value.style.transform = 'translateX(-100%)'; + } + } else { + // 展开时,恢复历史任务栏位置 + if (sidebar.value) { + sidebar.value.style.transform = 'translateX(0)'; + } + } + + // 更新悬浮按钮位置 + updateFloatingButtonPosition(sidebarWidth.value); + }; + + const clearPrompt = () => { + getCurrentForm().prompt = ''; + updateUploadedContentStatus(); + }; + + const getTaskItemClass = (status) => { + if (status === 'SUCCEED') return 'bg-laser-purple/15 border border-laser-purple/30'; + if (status === 'RUNNING') return 'bg-laser-purple/15 border border-laser-purple/30'; + if (status === 'FAILED') return 'bg-red-500/15 border border-red-500/30'; + return 'bg-dark-light border border-gray-700'; + }; + + const getStatusIndicatorClass = (status) => { + const base = 'inline-block w-2 aspect-square rounded-full shrink-0 align-middle'; + if (status === 'SUCCEED') + return `${base} bg-gradient-to-r from-emerald-200 to-green-300 shadow-md shadow-emerald-300/30`; + if (status === 'RUNNING') + return `${base} bg-gradient-to-r from-amber-200 to-yellow-300 shadow-md shadow-amber-300/30 animate-pulse`; + if (status === 'FAILED') + return `${base} bg-gradient-to-r from-red-200 to-pink-300 shadow-md shadow-red-300/30`; + return `${base} bg-gradient-to-r from-gray-200 to-gray-300 shadow-md shadow-gray-300/30`; + }; + + const getTaskTypeBtnClass = (taskType) => { + if (selectedTaskId.value === taskType) { + return 'text-gradient-icon border-b-2 border-laser-purple'; + } + return 'text-gray-400 hover:text-gradient-icon'; + }; + + const getModelBtnClass = (model) => { + if (getCurrentForm().model_cls === model) { + return 'bg-laser-purple/20 border border-laser-purple/40 active shadow-laser'; + } + return 'bg-dark-light border border-gray-700 hover:bg-laser-purple/15 hover:border-laser-purple/40 transition-all hover:shadow-laser'; + }; + + const getTaskTypeIcon = (taskType) => { + const iconMap = { + 't2v': 'fas fa-font', // 文字A形图标 + 'i2v': 'fas fa-image', // 图像图标 + 's2v': 'fas fa-user', // 人物图标 + 'animate': 'fi fi-br-running text-lg' // 角色替换图标 + }; + return iconMap[taskType] || 'fas fa-video'; + }; + + const getTaskTypeName = (task) => { + // 如果传入的是字符串,直接返回映射 + if (!task) { + return '未知'; + } + if (typeof task === 'string') { + return nameMap.value[task] || task; + } + + // 如果传入的是任务对象,根据模型类型判断 + if (task && task.model_cls) { + const modelCls = task.model_cls.toLowerCase(); + + return nameMap.value[task.task_type] || task.task_type; + } + + // 默认返回task_type + return task.task_type || '未知'; + }; + + const getPromptPlaceholder = () => { + if (selectedTaskId.value === 't2v') { + return t('pleaseEnterThePromptForVideoGeneration') + ','+ t('describeTheContentStyleSceneOfTheVideo'); + } else if (selectedTaskId.value === 'i2v') { + return t('pleaseEnterThePromptForVideoGeneration') + ','+ t('describeTheContentActionRequirementsBasedOnTheImage'); + } else if (selectedTaskId.value === 's2v') { + return t('optional') + ' '+ t('pleaseEnterThePromptForVideoGeneration') + ','+ t('describeTheDigitalHumanImageBackgroundStyleActionRequirements'); + } else if (selectedTaskId.value === 'animate') { + return t('optional') + ' '+ t('pleaseEnterThePromptForVideoGeneration') + ','+ t('describeTheContentActionRequirementsBasedOnTheImage'); + } + return t('pleaseEnterThePromptForVideoGeneration') + '...'; + }; + + const getStatusTextClass = (status) => { + if (status === 'SUCCEED') return 'text-emerald-400'; + if (status === 'CREATED') return 'text-blue-400'; + if (status === 'PENDING') return 'text-yellow-400'; + if (status === 'RUNNING') return 'text-amber-400'; + if (status === 'FAILED') return 'text-red-400'; + if (status === 'CANCEL') return 'text-gray-400'; + return 'text-gray-400'; + }; + + const getImagePreview = (base64Data) => { + if (!base64Data) return ''; + return `data:image/jpeg;base64,${base64Data}`; + }; + + const getTaskInputUrl = async (taskId, key) => { + // 优先从缓存获取 + const cachedUrl = getTaskFileUrlSync(taskId, key); + if (cachedUrl) { + console.log('getTaskInputUrl: 从缓存获取', { taskId, key, url: cachedUrl }); + return cachedUrl; + } + return await getTaskFileUrlFromApi(taskId, key); + }; + + const getTaskInputImage = async (task) => { + + if (!task || !task.inputs) { + console.log('getTaskInputImage: 任务或输入为空', { task: task?.task_id, inputs: task?.inputs }); + return null; + } + + const imageInputs = Object.keys(task.inputs).filter(key => + key.includes('image') || + task.inputs[key].toString().toLowerCase().match(/\.(jpg|jpeg|png|gif|bmp|webp)$/) + ); + + if (imageInputs.length > 0) { + const firstImageKey = imageInputs[0]; + // 优先从缓存获取 + const cachedUrl = getTaskFileUrlSync(task.task_id, firstImageKey); + if (cachedUrl) { + console.log('getTaskInputImage: 从缓存获取', { taskId: task.task_id, key: firstImageKey, url: cachedUrl }); + return cachedUrl; + } + // 缓存没有则生成URL + const url = await getTaskInputUrl(task.task_id, firstImageKey); + console.log('getTaskInputImage: 生成URL', { taskId: task.task_id, key: firstImageKey, url }); + return url; + } + + console.log('getTaskInputImage: 没有找到图片输入'); + return null; + }; + + const getTaskInputAudio = async (task) => { + if (!task || !task.inputs) return null; + + // Directly use 'input_audio' key + const audioKey = 'input_audio'; + if (!task.inputs[audioKey]) return null; + + // Always bypass cache and check API directly to detect directory type + // This ensures we get the correct URL even if cache has invalid data + let url = await getTaskFileUrlFromApi(task.task_id, audioKey); + + // If it's a directory (multi-person mode) or URL is null, try to get original_audio file + if (!url) { + console.log(`Audio input ${audioKey} is a directory (multi-person mode), trying to get original_audio file`); + // Try to get original_audio file from directory + // Try common extensions + const extensions = ['wav', 'mp3', 'mp4', 'aac', 'ogg', 'm4a']; + for (const ext of extensions) { + const originalAudioFilename = `original_audio.${ext}`; + url = await getTaskFileUrlFromApi(task.task_id, audioKey, originalAudioFilename); + if (url) { + console.log(`Found original audio file: ${originalAudioFilename}`); + break; + } + } + } + + return url; + }; + + const handleThumbnailError = (event) => { + // 当输入图片加载失败时,显示默认图标 + const img = event.target; + const parent = img.parentElement; + parent.innerHTML = '
    '; + }; + + const handleImageError = (event) => { + // 当图片加载失败时,隐藏图片,显示文件名 + const img = event.target; + img.style.display = 'none'; + // 文件名已经显示,不需要额外处理 + }; + + const handleImageLoad = (event) => { + // 当图片加载成功时,显示图片和下载按钮,隐藏文件名 + const img = event.target; + img.style.display = 'block'; + // 显示下载按钮 + const downloadBtn = img.parentElement.querySelector('button'); + if (downloadBtn) { + downloadBtn.style.display = 'block'; + } + // 隐藏文件名span + const span = img.parentElement.parentElement.querySelector('span'); + if (span) { + span.style.display = 'none'; + } + }; + + const handleAudioError = (event) => { + // 当音频加载失败时,隐藏音频控件和下载按钮,显示文件名 + const audio = event.target; + audio.style.display = 'none'; + // 隐藏下载按钮 + const downloadBtn = audio.parentElement.querySelector('button'); + if (downloadBtn) { + downloadBtn.style.display = 'none'; + } + // 文件名已经显示,不需要额外处理 + }; + + const handleAudioLoad = (event) => { + // 当音频加载成功时,显示音频控件和下载按钮,隐藏文件名 + const audio = event.target; + audio.style.display = 'block'; + // 显示下载按钮 + const downloadBtn = audio.parentElement.querySelector('button'); + if (downloadBtn) { + downloadBtn.style.display = 'block'; + } + // 隐藏文件名span + const span = audio.parentElement.parentElement.querySelector('span'); + if (span) { + span.style.display = 'none'; + } + }; + + // 监听currentPage变化,同步更新pageInput + watch(currentTaskPage, (newPage) => { + taskPageInput.value = newPage; + }); + + // 监听pagination变化,确保分页组件更新 + watch(pagination, (newPagination) => { + console.log('pagination变化:', newPagination); + if (newPagination && newPagination.total_pages) { + // 确保当前页不超过总页数 + if (currentTaskPage.value > newPagination.total_pages) { + currentTaskPage.value = newPagination.total_pages; + } + } + }, { deep: true }); + + // 监听templateCurrentPage变化,同步更新templatePageInput + watch(templateCurrentPage, (newPage) => { + templatePageInput.value = newPage; + }); + + // 监听templatePagination变化,确保分页组件更新 + watch(templatePagination, (newPagination) => { + console.log('templatePagination变化:', newPagination); + if (newPagination && newPagination.total_pages) { + // 确保当前页不超过总页数 + if (templateCurrentPage.value > newPagination.total_pages) { + templateCurrentPage.value = newPagination.total_pages; + } + } + }, { deep: true }); + + // 监听inspirationCurrentPage变化,同步更新inspirationPageInput + watch(inspirationCurrentPage, (newPage) => { + inspirationPageInput.value = newPage; + }); + + // 监听inspirationPagination变化,确保分页组件更新 + watch(inspirationPagination, (newPagination) => { + console.log('inspirationPagination变化:', newPagination); + if (newPagination && newPagination.total_pages) { + // 确保当前页不超过总页数 + if (inspirationCurrentPage.value > newPagination.total_pages) { + inspirationCurrentPage.value = newPagination.total_pages; + } + } + }, { deep: true }); + + // 统一的初始化函数 + const init = async () => { + try { + // 0. 初始化主题 + initTheme(); + + // 1. 加载模型和任务数据 + await loadModels(); + + // 2. 从路由恢复或设置默认值 + const routeQuery = router.currentRoute.value?.query || {}; + const routeTaskType = routeQuery.taskType; + const routeModel = routeQuery.model; + const routeExpanded = routeQuery.expanded; + + if (routeTaskType && availableTaskTypes.value.includes(routeTaskType)) { + // 路由中有 taskType,恢复它 + selectTask(routeTaskType); + + if (routeModel && availableModelClasses.value.includes(routeModel)) { + // 路由中有 model,恢复它(会自动设置 stage) + selectModel(routeModel); + } else { + // 路由中没有 model 或 model 无效,选择第一个模型 + const firstModel = availableModelClasses.value[0]; + if (firstModel) { + selectModel(firstModel); + } + } + } else { + // 路由中没有 taskType,设置默认值:s2v + const defaultTaskType = availableTaskTypes.value.includes('s2v') ? 's2v' : availableTaskTypes.value[0]; + if (defaultTaskType) { + selectTask(defaultTaskType); + + // 选择该任务下的第一个模型 + const firstModel = availableModelClasses.value[0]; + if (firstModel) { + selectModel(firstModel); + } + } + } + + // 3. 恢复 expanded 状态(如果路由中有) + if (routeExpanded === 'true') { + expandCreationArea(); + } + + // 4. 加载历史记录和素材库(异步,不阻塞首屏) + refreshTasks(true); + loadInspirationData(true); + + // 5. 加载历史记录和素材库文件(异步,不阻塞首屏) + getPromptHistory(); + loadTaskFilesFromCache(); + loadTemplateFilesFromCache(); + + // 异步加载模板数据,不阻塞首屏渲染 + setTimeout(() => { + loadImageAudioTemplates(true); + }, 100); + + + console.log('初始化完成:', { + currentUser: currentUser.value, + availableModels: models.value, + tasks: tasks.value, + inspirationItems: inspirationItems.value, + selectedTaskId: selectedTaskId.value, + selectedModel: selectedModel.value, + currentForm: { + model_cls: getCurrentForm().model_cls, + stage: getCurrentForm().stage + } + }); + + } catch (error) { + console.error('初始化失败:', error); + showAlert(t('initFailedPleaseRefresh'), 'danger'); + } + }; + + // 重置表单函数(保留模型选择,清空图片、音频和提示词) + const resetForm = async (taskType) => { + const currentForm = getCurrentForm(); + const currentModel = currentForm.model_cls; + const currentStage = currentForm.stage; + + // 重置表单但保留模型和阶段 + switch (taskType) { + case 't2v': + t2vForm.value = { + task: 't2v', + model_cls: currentModel, + stage: currentStage, + prompt: '', + seed: Math.floor(Math.random() * 1000000) + }; + break; + case 'i2v': + i2vForm.value = { + task: 'i2v', + model_cls: currentModel, + stage: currentStage, + imageFile: null, + prompt: '', + seed: Math.floor(Math.random() * 1000000) + }; + // 直接清空i2v图片预览 + i2vImagePreview.value = null; + // 清理图片文件输入框 + const imageInput = document.querySelector('input[type="file"][accept="image/*"]'); + if (imageInput) { + imageInput.value = ''; + } + break; + case 's2v': + s2vForm.value = { + task: 's2v', + model_cls: currentModel, + stage: currentStage, + imageFile: null, + audioFile: null, + prompt: 'Make the character speak in a natural way according to the audio.', + seed: Math.floor(Math.random() * 1000000) + }; + break; + case 'animate': + animateForm.value = { + task: 'animate', + model_cls: currentModel, + stage: currentStage, + imageFile: null, + videoFile: null, + prompt: '视频中的人在做动作', + seed: Math.floor(Math.random() * 1000000), + detectedFaces: [] + }; + // 直接清空animate图片和视频预览 + animateImagePreview.value = null; + animateVideoPreview.value = null; + // 清理图片和视频文件输入框 + const animateImageInput = document.querySelector('input[type="file"][accept="image/*"]'); + if (animateImageInput) { + animateImageInput.value = ''; + } + const animateVideoInput = document.querySelector('input[type="file"][data-role="video-input"]'); + if (animateVideoInput) { + animateVideoInput.value = ''; + } + break; + } + + // 强制触发Vue响应式更新 + setCurrentImagePreview(null); + setCurrentAudioPreview(null); + await nextTick(); + }; + + // 开始轮询任务状态 + const startPollingTask = (taskId) => { + if (!pollingTasks.value.has(taskId)) { + pollingTasks.value.add(taskId); + console.log(`开始轮询任务状态: ${taskId}`); + + // 如果还没有轮询定时器,启动一个 + if (!pollingInterval.value) { + pollingInterval.value = setInterval(async () => { + await pollTaskStatuses(); + }, 1000); // 每1秒轮询一次 + } + } + }; + + // 停止轮询任务状态 + const stopPollingTask = (taskId) => { + pollingTasks.value.delete(taskId); + console.log(`停止轮询任务状态: ${taskId}`); + + // 如果没有任务需要轮询了,清除定时器 + if (pollingTasks.value.size === 0 && pollingInterval.value) { + clearInterval(pollingInterval.value); + pollingInterval.value = null; + console.log('停止所有任务状态轮询'); + } + }; + + const refreshTaskFiles = (task) => { + for (const [key, inputPath] of Object.entries(task.inputs)) { + getTaskFileUrlFromApi(task.task_id, key).then(url => { + console.log('refreshTaskFiles: input', task.task_id, key, url); + }); + } + for (const [key, outputPath] of Object.entries(task.outputs)) { + getTaskFileUrlFromApi(task.task_id, key).then(url => { + console.log('refreshTaskFiles: output', task.task_id, key, url); + }); + } + }; + + // 轮询任务状态 + const pollTaskStatuses = async () => { + if (pollingTasks.value.size === 0) return; + + try { + const taskIds = Array.from(pollingTasks.value); + const response = await apiRequest(`/api/v1/task/query?task_ids=${taskIds.join(',')}`); + + if (response && response.ok) { + const tasksData = await response.json(); + const updatedTasks = tasksData.tasks || []; + + // 更新任务列表中的任务状态 + let hasUpdates = false; + updatedTasks.forEach(updatedTask => { + const existingTaskIndex = tasks.value.findIndex(t => t.task_id === updatedTask.task_id); + if (existingTaskIndex !== -1) { + const oldTask = tasks.value[existingTaskIndex]; + tasks.value[existingTaskIndex] = updatedTask; + console.log('updatedTask', updatedTask); + console.log('oldTask', oldTask); + + // 如果状态发生变化,记录日志 + if (oldTask !== updatedTask) { + hasUpdates = true; // 这里基本都会变,因为任务有进度条 + + // 如果当前在查看这个任务的详情,更新selectedTask + if (modalTask.value && modalTask.value.task_id === updatedTask.task_id) { + modalTask.value = updatedTask; + if (updatedTask.status === 'SUCCEED') { + console.log('refresh viewing task: output files'); + loadTaskFiles(updatedTask); + } + } + + // 如果当前TaskCarousel显示的是这个任务,更新currentTask + if (currentTask.value && currentTask.value.task_id === updatedTask.task_id) { + currentTask.value = updatedTask; + console.log('TaskCarousel: 更新currentTask', updatedTask); + } + + // 如果当前在projects页面且变化的是状态,更新tasks + if (router.path === '/projects' && oldTask.status !== updatedTask.status) { + refreshTasks(true); + } + + // 如果任务完成或失败,停止轮询并显示提示 + if (['SUCCEED', 'FAILED', 'CANCEL'].includes(updatedTask.status)) { + stopPollingTask(updatedTask.task_id); + refreshTaskFiles(updatedTask); + refreshTasks(true); + + // 显示任务完成提示 + if (updatedTask.status === 'SUCCEED') { + showAlert(t('taskCompletedSuccessfully'), 'success', { + label: t('view'), + onClick: () => { + openTaskDetailModal(updatedTask); + } + }); + } else if (updatedTask.status === 'FAILED') { + showAlert(t('videoGeneratingFailed'), 'danger', { + label: t('view'), + onClick: () => { + openTaskDetailModal(updatedTask); + } + }); + } else if (updatedTask.status === 'CANCEL') { + showAlert(t('taskCancelled'), 'warning'); + } + } + } + } + }); + + // 如果有更新,触发界面刷新 + if (hasUpdates) { + await nextTick(); + } + } + } catch (error) { + console.error('轮询任务状态失败:', error); + } + }; + + // 任务状态管理 + const getTaskStatusDisplay = (status) => { + const statusMap = { + 'CREATED': t('created'), + 'PENDING': t('pending'), + 'RUNNING': t('running'), + 'SUCCEED': t('succeed'), + 'FAILED': t('failed'), + 'CANCEL': t('cancelled') + }; + return statusMap[status] || status; + }; + + const getTaskStatusColor = (status) => { + const colorMap = { + 'CREATED': 'text-blue-400', + 'PENDING': 'text-yellow-400', + 'RUNNING': 'text-amber-400', + 'SUCCEED': 'text-emerald-400', + 'FAILED': 'text-red-400', + 'CANCEL': 'text-gray-400' + }; + return colorMap[status] || 'text-gray-400'; + }; + + const getTaskStatusIcon = (status) => { + const iconMap = { + 'CREATED': 'fas fa-clock', + 'PENDING': 'fas fa-hourglass-half', + 'RUNNING': 'fas fa-spinner fa-spin', + 'SUCCEED': 'fas fa-check-circle', + 'FAILED': 'fas fa-exclamation-triangle', + 'CANCEL': 'fas fa-ban' + }; + return iconMap[status] || 'fas fa-question-circle'; + }; + + // 任务时间格式化 + const getTaskDuration = (startTime, endTime) => { + if (!startTime || !endTime) return '未知'; + const start = new Date(startTime * 1000); + const end = new Date(endTime * 1000); + const diff = end - start; + const minutes = Math.floor(diff / 60000); + const seconds = Math.floor((diff % 60000) / 1000); + return `${minutes}分${seconds}秒`; + }; + + // 相对时间格式化 + const getRelativeTime = (timestamp) => { + if (!timestamp) return '未知'; + const now = new Date(); + const time = new Date(timestamp * 1000); + const diff = now - time; + + const minutes = Math.floor(diff / 60000); + const hours = Math.floor(diff / 3600000); + const days = Math.floor(diff / 86400000); + const months = Math.floor(diff / 2592000000); // 30天 + const years = Math.floor(diff / 31536000000); + + if (years > 0) { + return years === 1 ? t('oneYearAgo') : `${years}t('yearsAgo')`; + } else if (months > 0) { + return months === 1 ? t('oneMonthAgo') : `${months}${t('monthsAgo')}`; + } else if (days > 0) { + return days === 1 ? t('oneDayAgo') : `${days}${t('daysAgo')}`; + } else if (hours > 0) { + return hours === 1 ? t('oneHourAgo') : `${hours}${t('hoursAgo')}`; + } else if (minutes > 0) { + return minutes === 1 ? t('oneMinuteAgo') : `${minutes}${t('minutesAgo')}`; + } else { + return t('justNow'); + } + }; + + // 任务历史记录管理 + const getTaskHistory = () => { + return tasks.value.filter(task => + ['SUCCEED', 'FAILED', 'CANCEL'].includes(task.status) + ); + }; + + // 子任务进度相关函数 + const getOverallProgress = (subtasks) => { + if (!subtasks || subtasks.length === 0) return 0; + + let completedCount = 0; + subtasks.forEach(subtask => { + if (subtask.status === 'SUCCEED') { + completedCount++; + } + }); + + return Math.round((completedCount / subtasks.length) * 100); + }; + + // 获取进度条标题 + const getProgressTitle = (subtasks) => { + if (!subtasks || subtasks.length === 0) return t('overallProgress'); + + const pendingSubtasks = subtasks.filter(subtask => subtask.status === 'PENDING'); + const runningSubtasks = subtasks.filter(subtask => subtask.status === 'RUNNING'); + + if (pendingSubtasks.length > 0) { + return t('queueStatus'); + } else if (runningSubtasks.length > 0) { + return t('running'); + } else { + return t('overallProgress'); + } + }; + + // 获取进度信息 + const getProgressInfo = (subtasks) => { + if (!subtasks || subtasks.length === 0) return '0%'; + + const pendingSubtasks = subtasks.filter(subtask => subtask.status === 'PENDING'); + const runningSubtasks = subtasks.filter(subtask => subtask.status === 'RUNNING'); + + if (pendingSubtasks.length > 0) { + // 显示排队信息 + const firstPending = pendingSubtasks[0]; + const queuePosition = firstPending.estimated_pending_order; + const estimatedTime = firstPending.estimated_pending_secs; + + let info = t('queueing'); + if (queuePosition !== null && queuePosition !== undefined) { + info += ` (${t('position')}: ${queuePosition})`; + } + if (estimatedTime !== null && estimatedTime !== undefined) { + info += ` - ${formatDuration(estimatedTime)}`; + } + return info; + } else if (runningSubtasks.length > 0) { + // 显示运行信息 + const firstRunning = runningSubtasks[0]; + const workerName = firstRunning.worker_name || t('unknown'); + const estimatedTime = firstRunning.estimated_running_secs; + + let info = `${t('subtask')} ${workerName}`; + if (estimatedTime !== null && estimatedTime !== undefined) { + const elapses = firstRunning.elapses || {}; + const runningTime = elapses['RUNNING-'] || 0; + const remaining = Math.max(0, estimatedTime - runningTime); + info += ` - ${t('remaining')} ${formatDuration(remaining)}`; + } + return info; + } else { + // 显示总体进度 + return getOverallProgress(subtasks) + '%'; + } + }; + + const getSubtaskProgress = (subtask) => { + if (subtask.status === 'SUCCEED') return 100; + if (subtask.status === 'FAILED' || subtask.status === 'CANCEL') return 0; + + // 对于PENDING和RUNNING状态,基于时间估算进度 + if (subtask.status === 'PENDING') { + // 排队中的任务,进度为0 + return 0; + } + + if (subtask.status === 'RUNNING') { + // 运行中的任务,基于已运行时间估算进度 + const elapses = subtask.elapses || {}; + const runningTime = elapses['RUNNING-'] || 0; + const estimatedTotal = subtask.estimated_running_secs || 0; + + if (estimatedTotal > 0) { + const progress = Math.min((runningTime / estimatedTotal) * 100, 95); // 最多95%,避免显示100%但未完成 + return Math.round(progress); + } + + // 如果没有时间估算,基于状态显示一个基础进度 + return 50; // 运行中但无法估算进度时显示50% + } + + return 0; + }; + + + + const getSubtaskStatusText = (status) => { + const statusMap = { + 'PENDING': t('pending'), + 'RUNNING': t('running'), + 'SUCCEED': t('completed'), + 'FAILED': t('failed'), + 'CANCEL': t('cancelled') + }; + return statusMap[status] || status; + }; + + + const formatEstimatedTime = computed(() => { + return (formattedEstimatedTime) => { + if (subtask.status === 'PENDING') { + const pendingSecs = subtask.estimated_pending_secs; + const queuePosition = subtask.estimated_pending_order; + + if (pendingSecs !== null && pendingSecs !== undefined) { + let info = formatDuration(pendingSecs); + if (queuePosition !== null && queuePosition !== undefined) { + info += ` (${t('position')}: ${queuePosition})`; + } + formattedEstimatedTime.value = info; + } + formattedEstimatedTime.value=t('calculating'); + } + + if (subtask.status === 'RUNNING') { + // 使用extra_info.elapses而不是subtask.elapses + const elapses = subtask.extra_info?.elapses || {}; + const runningTime = elapses['RUNNING-'] || 0; + const estimatedTotal = subtask.estimated_running_secs || 0; + + if (estimatedTotal > 0) { + const remaining = Math.max(0, estimatedTotal - runningTime); + estimatedTime.value = remaining; + formattedEstimatedTime.value = `${t('remaining')} ${formatDuration(remaining)}`; + } + + // 如果没有estimated_running_secs,尝试使用elapses计算 + if (Object.keys(elapses).length > 0) { + const totalElapsed = Object.values(elapses).reduce((sum, time) => sum + (time || 0), 0); + if (totalElapsed > 0) { + formattedEstimatedTime.value = `${t('running')} ${formatDuration(totalElapsed)}`; + } + } + + return t('calculating'); + } + + return t('completed'); + }; +}); + + const formatDuration = (seconds) => { + if (seconds < 60) { + return `${Math.round(seconds)}${t('seconds')}`; + } else if (seconds < 3600) { + const minutes = Math.floor(seconds / 60); + const remainingSeconds = Math.round(seconds % 60); + return `${minutes}${t('minutes')}${remainingSeconds}${t('seconds')}`; + } else { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const remainingSeconds = Math.round(seconds % 60); + return `${hours}${t('hours')}${minutes}${t('minutes')}${remainingSeconds}${t('seconds')}`; + } + }; + + const getActiveTasks = () => { + return tasks.value.filter(task => + ['CREATED', 'PENDING', 'RUNNING'].includes(task.status) + ); + }; + + // 任务搜索和过滤增强 + const searchTasks = (query) => { + if (!query) return tasks.value; + return tasks.value.filter(task => { + const searchText = [ + task.task_id, + task.task_type, + task.model_cls, + task.params?.prompt || '', + getTaskStatusDisplay(task.status) + ].join(' ').toLowerCase(); + return searchText.includes(query.toLowerCase()); + }); + }; + + const filterTasksByStatus = (status) => { + if (status === 'ALL') return tasks.value; + return tasks.value.filter(task => task.status === status); + }; + + const filterTasksByType = (type) => { + if (!type) return tasks.value; + return tasks.value.filter(task => task.task_type === type); + }; + + // 提示消息样式管理 + const getAlertClass = (type) => { + const classMap = { + 'success': 'animate-slide-down', + 'warning': 'animate-slide-down', + 'danger': 'animate-slide-down', + 'info': 'animate-slide-down' + }; + return classMap[type] || 'animate-slide-down'; + }; + + const getAlertBorderClass = (type) => { + const borderMap = { + 'success': 'border-green-500', + 'warning': 'border-yellow-500', + 'danger': 'border-red-500', + 'info': 'border-blue-500' + }; + return borderMap[type] || 'border-gray-500'; + }; + + const getAlertTextClass = (type) => { + // 统一使用白色文字 + return 'text-white'; + }; + + const getAlertIcon = (type) => { + const iconMap = { + 'success': 'fas fa-check text-white', + 'warning': 'fas fa-exclamation text-white', + 'danger': 'fas fa-times text-white', + 'info': 'fas fa-info text-white' + }; + return iconMap[type] || 'fas fa-info text-white'; + }; + + const getAlertIconBgClass = (type) => { + const bgMap = { + 'success': 'bg-green-500/30', + 'warning': 'bg-yellow-500/30', + 'danger': 'bg-red-500/30', + 'info': 'bg-laser-purple/30' + }; + return bgMap[type] || 'bg-laser-purple/30'; + }; + + // 监听器 - 监听任务类型变化 + watch(() => selectedTaskId.value, () => { + const currentForm = getCurrentForm(); + + // 只有当当前表单没有选择模型时,才自动选择第一个可用的模型 + if (!currentForm.model_cls) { + let availableModels; + + availableModels = models.value.filter(m => m.task === selectedTaskId.value); + + if (availableModels.length > 0) { + const firstModel = availableModels[0]; + currentForm.model_cls = firstModel.model_cls; + currentForm.stage = firstModel.stage; + } + } + + // 注意:这里不需要重置预览,因为我们要保持每个任务的独立性 + // 预览会在 selectTask 函数中根据文件状态恢复 + }); + + watch(() => getCurrentForm().model_cls, () => { + const currentForm = getCurrentForm(); + + // 只有当当前表单没有选择阶段时,才自动选择第一个可用的阶段 + if (!currentForm.stage) { + let availableStages; + + availableStages = models.value + .filter(m => m.task === selectedTaskId.value && m.model_cls === currentForm.model_cls) + .map(m => m.stage); + + if (availableStages.length > 0) { + currentForm.stage = availableStages[0]; + } + } + }); + + // 提示词模板管理 + const promptTemplates = { + 's2v': [ + { + id: 's2v_1', + title: '情绪表达', + prompt: '根据音频,人物进行情绪化表达,表情丰富,能体现音频中的情绪,手势根据情绪适当调整。' + }, + { + id: 's2v_2', + title: '故事讲述', + prompt: '根据音频,人物进行故事讲述,表情丰富,能体现音频中的情绪,手势根据故事情节适当调整。' + }, + { + id: 's2v_3', + title: '知识讲解', + prompt: '根据音频,人物进行知识讲解,表情严肃,整体风格专业得体,手势根据知识内容适当调整。' + }, + { + id: 's2v_4', + title: '浮夸表演', + prompt: '根据音频,人物进行浮夸表演,表情夸张,动作浮夸,整体风格夸张搞笑。' + }, + { + id: 's2v_5', + title: '商务演讲', + prompt: '根据音频,人物进行商务演讲,表情严肃,手势得体,整体风格专业商务。' + }, + { + id: 's2v_6', + title: '产品介绍', + prompt: '数字人介绍产品特点,语气亲切热情,表情丰富,动作自然,能体现产品特点。' + } + ], + 't2v': [ + { + id: 't2v_1', + title: '自然风景', + prompt: '一个宁静的山谷,阳光透过云层洒在绿色的草地上,远处有雪山,近处有清澈的溪流,画面温暖自然,充满生机。' + }, + { + id: 't2v_2', + title: '城市夜景', + prompt: '繁华的城市夜景,霓虹灯闪烁,高楼大厦林立,车流如织,天空中有星星点缀,营造出都市的繁华氛围。' + }, + { + id: 't2v_3', + title: '科技未来', + prompt: '未来科技城市,飞行汽车穿梭,全息投影随处可见,建筑具有流线型设计,充满科技感和未来感。' + } + ], + 'i2v': [ + { + id: 'i2v_1', + title: '人物动作', + prompt: '基于参考图片,让角色做出自然的行走动作,保持原有的服装和风格,背景可以适当变化。' + }, + { + id: 'i2v_2', + title: '场景转换', + prompt: '保持参考图片中的人物形象,将背景转换为不同的季节或环境,如从室内到户外,从白天到夜晚。' + } + ] + }; + + const getPromptTemplates = (taskType) => { + return promptTemplates[taskType] || []; + }; + + const selectPromptTemplate = (template) => { + getCurrentForm().prompt = template.prompt; + showPromptModal.value = false; + showAlert(`${t('templateApplied')} ${template.title}`, 'success'); + }; + + // 提示词历史记录管理 - 现在直接从taskHistory中获取 + const promptHistory = ref([]); + + const getPromptHistory = async () => { + try { + // 从taskHistory中获取prompt历史,去重并按时间排序 + const taskHistory = await getLocalTaskHistory(); + const uniquePrompts = []; + const seenPrompts = new Set(); + + // 遍历taskHistory,提取唯一的prompt + for (const task of taskHistory) { + if (task.prompt && task.prompt.trim() && !seenPrompts.has(task.prompt.trim())) { + uniquePrompts.push(task.prompt.trim()); + seenPrompts.add(task.prompt.trim()); + } + } + + const result = uniquePrompts.slice(0, 10); // 只显示最近10条 + promptHistory.value = result; // 更新响应式数据 + return result; + } catch (error) { + console.error(t('getPromptHistoryFailed'), error); + promptHistory.value = []; // 更新响应式数据 + return []; + } + }; + + // addPromptToHistory函数已删除,现在prompt历史直接从taskHistory中获取 + + // 保存完整的任务历史(只保存元数据,不保存文件内容) + const addTaskToHistory = (taskType, formData) => { + console.log('开始保存任务历史:', { taskType, formData }); + + const historyItem = { + id: Date.now(), + timestamp: new Date().toISOString(), + taskType: taskType, + prompt: formData.prompt || '', + // 只保存文件元数据,不保存文件内容 + imageFile: formData.imageFile ? { + name: formData.imageFile.name, + type: formData.imageFile.type, + size: formData.imageFile.size + // 不再保存 data 字段,避免占用大量存储空间 + } : null, + audioFile: formData.audioFile ? { + name: formData.audioFile.name, + type: formData.audioFile.type, + size: formData.audioFile.size + // 不再保存 data 字段,避免占用大量存储空间 + } : null + }; + + console.log('保存任务历史(仅元数据):', historyItem); + saveTaskHistoryItem(historyItem); + }; + + // 保存任务历史项到localStorage + const saveTaskHistoryItem = (historyItem) => { + try { + const existingHistory = JSON.parse(localStorage.getItem('taskHistory') || '[]'); + + // 避免重复添加(基于提示词、任务类型、图片和音频) + const isDuplicate = existingHistory.some(item => { + const samePrompt = item.prompt === historyItem.prompt; + const sameTaskType = item.taskType === historyItem.taskType; + const sameImage = (item.imageFile?.name || '') === (historyItem.imageFile?.name || ''); + const sameAudio = (item.audioFile?.name || '') === (historyItem.audioFile?.name || ''); + + return samePrompt && sameTaskType && sameImage && sameAudio; + }); + + if (!isDuplicate) { + // 按时间戳排序,确保最新的记录在最后 + existingHistory.push(historyItem); + existingHistory.sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp)); + + // 限制历史记录数量为10条(不再保存文件内容,所以可以适当减少) + if (existingHistory.length > 10) { + existingHistory.splice(0, existingHistory.length - 10); + } + + // 保存到localStorage + try { + localStorage.setItem('taskHistory', JSON.stringify(existingHistory)); + console.log('任务历史已保存(仅元数据):', historyItem); + } catch (storageError) { + if (storageError.name === 'QuotaExceededError') { + console.warn('localStorage空间不足,尝试清理旧数据...'); + + // 清理策略1:只保留最新的5条记录 + const cleanedHistory = existingHistory.slice(-5); + + try { + localStorage.setItem('taskHistory', JSON.stringify(cleanedHistory)); + console.log('任务历史已保存(清理后):', historyItem); + } catch (secondError) { + console.error('清理后仍无法保存,尝试清理所有缓存...'); + + // 清理策略2:清理所有任务历史,只保存当前这一条 + try { + localStorage.setItem('taskHistory', JSON.stringify([historyItem])); + console.log('任务历史已保存(完全清理后)'); + showAlert(t('historyCleared'), 'info'); + } catch (thirdError) { + console.error('即使完全清理后仍无法保存:', thirdError); + // 不再显示警告,因为历史记录不是必需的功能 + console.warn('历史记录功能暂时不可用,将从任务列表恢复数据'); + } + } + } else { + throw storageError; + } + } + } else { + console.log('任务历史重复,跳过保存:', historyItem); + } + } catch (error) { + console.error('保存任务历史失败:', error); + // 不再显示警告给用户,因为可以从任务列表恢复数据 + console.warn('历史记录保存失败,将依赖任务列表数据'); + } + }; + + // 获取本地存储的任务历史 + const getLocalTaskHistory = async () => { + try { + // 使用Promise模拟异步操作,避免阻塞UI + return await new Promise((resolve) => { + setTimeout(() => { + try { + const history = JSON.parse(localStorage.getItem('taskHistory') || '[]'); + // 按时间戳排序,最新的记录在前 + const sortedHistory = history.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp)); + resolve(sortedHistory); + } catch (error) { + console.error(t('parseTaskHistoryFailed'), error); + resolve([]); + } + }, 0); + }); + } catch (error) { + console.error(t('getTaskHistoryFailed'), error); + return []; + } + }; + + const selectPromptHistory = (prompt) => { + getCurrentForm().prompt = prompt; + showPromptModal.value = false; + showAlert(t('promptHistoryApplied'), 'success'); + }; + + const clearPromptHistory = () => { + // 清空taskHistory中的prompt相关数据 + localStorage.removeItem('taskHistory'); + showAlert(t('promptHistoryCleared'), 'info'); + }; + + // 图片历史记录管理 - 从任务列表获取 + const getImageHistory = async () => { + try { + // 确保任务列表已加载 + if (tasks.value.length === 0) { + await refreshTasks(); + } + + const uniqueImages = []; + const seenImages = new Set(); + + // 遍历任务列表,提取唯一的图片 + for (const task of tasks.value) { + if (task.inputs && task.inputs.input_image && !seenImages.has(task.inputs.input_image)) { + // 获取图片URL + const imageUrl = await getTaskFileUrl(task.task_id, 'input_image'); + if (imageUrl) { + uniqueImages.push({ + filename: task.inputs.input_image, + url: imageUrl, + thumbnail: imageUrl, // 使用URL作为缩略图 + taskId: task.task_id, + timestamp: task.create_t, + taskType: task.task_type + }); + seenImages.add(task.inputs.input_image); + } + } + } + + // 按时间戳排序,最新的在前 + uniqueImages.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp)); + + imageHistory.value = uniqueImages; + console.log('从任务列表获取图片历史:', uniqueImages.length, '条'); + return uniqueImages; + } catch (error) { + console.error('获取图片历史失败:', error); + imageHistory.value = []; + return []; + } + }; + + // 音频历史记录管理 - 从任务列表获取 + const getAudioHistory = async () => { + try { + // 确保任务列表已加载 + if (tasks.value.length === 0) { + await refreshTasks(); + } + + const uniqueAudios = []; + const seenAudios = new Set(); + + // 遍历任务列表,提取唯一的音频 + for (const task of tasks.value) { + if (task.inputs && task.inputs.input_audio && !seenAudios.has(task.inputs.input_audio)) { + // 获取音频URL + let audioUrl = await getTaskFileUrl(task.task_id, 'input_audio'); + + // 如果返回null,可能是目录类型(多人模式),尝试获取original_audio.wav + if (!audioUrl) { + audioUrl = await getTaskFileUrlFromApi(task.task_id, 'input_audio', 'original_audio.wav'); + } + + const imageUrl = task.inputs.input_image ? await getTaskFileUrl(task.task_id, 'input_image') : null; + if (audioUrl) { + uniqueAudios.push({ + filename: task.inputs.input_audio, + url: audioUrl, + taskId: task.task_id, + timestamp: task.create_t, + taskType: task.task_type, + imageUrl + }); + seenAudios.add(task.inputs.input_audio); + } + } + } + + // 按时间戳排序,最新的在前 + uniqueAudios.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp)); + + audioHistory.value = uniqueAudios; + console.log('从任务列表获取音频历史:', uniqueAudios.length, '条'); + return uniqueAudios; + } catch (error) { + console.error('获取音频历史失败:', error); + audioHistory.value = []; + return []; + } + }; + + // 选择图片历史记录 - 从URL获取 + const selectImageHistory = async (history) => { + try { + // 确保 URL 有效,如果无效则重新获取 + let imageUrl = history.url; + if (!imageUrl || imageUrl.trim() === '') { + // 如果 URL 为空,尝试重新获取 + if (history.taskId) { + imageUrl = await getTaskFileUrl(history.taskId, 'input_image'); + } + if (!imageUrl || imageUrl.trim() === '') { + throw new Error('图片 URL 无效'); + } + } + + // 从URL获取图片文件 + const response = await fetch(imageUrl); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const blob = await response.blob(); + const file = new File([blob], history.filename, { type: blob.type }); + + // 设置图片预览 + setCurrentImagePreview(imageUrl); + updateUploadedContentStatus(); + + // 更新表单 + const currentForm = getCurrentForm(); + currentForm.imageFile = file; + + // Reset detected faces + if (selectedTaskId.value === 'i2v') { + i2vForm.value.detectedFaces = []; + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.detectedFaces = []; + } + + showImageTemplates.value = false; + showAlert(t('historyImageApplied'), 'success'); + + // Auto detect faces after image is loaded + // 不再自动检测人脸,等待用户手动打开多角色模式开关 + try { + // 如果 URL 是 http/https,直接使用;否则转换为 data URL + if (!imageUrl.startsWith('http://') && !imageUrl.startsWith('https://')) { + // 如果不是 http/https URL,转换为 data URL + const reader = new FileReader(); + reader.onload = async (e) => { + // 不再自动检测人脸 + }; + reader.readAsDataURL(file); + } + } catch (error) { + console.error('Face detection failed:', error); + // Don't show error alert, just log it + } + + } catch (error) { + console.error('应用历史图片失败:', error); + showAlert(t('applyHistoryImageFailed') + ': ' + error.message, 'danger'); + } + }; + + // 选择音频历史记录 - 从URL获取 + const selectAudioHistory = async (history) => { + try { + // 从URL获取音频文件 + const response = await fetch(history.url); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const blob = await response.blob(); + const file = new File([blob], history.filename, { type: blob.type }); + + // 设置音频预览 + setCurrentAudioPreview(history.url); + updateUploadedContentStatus(); + + // 更新表单 + const currentForm = getCurrentForm(); + currentForm.audioFile = file; + + showAudioTemplates.value = false; + showAlert(t('historyAudioApplied'), 'success'); + } catch (error) { + console.error('应用历史音频失败:', error); + showAlert(t('applyHistoryAudioFailed'), 'danger'); + } + }; + + // 全局音频播放状态管理 + let currentPlayingAudio = null; + let audioStopCallback = null; + + // 停止音频播放 + const stopAudioPlayback = () => { + if (currentPlayingAudio) { + currentPlayingAudio.pause(); + currentPlayingAudio.currentTime = 0; + currentPlayingAudio = null; + + // 调用停止回调 + if (audioStopCallback) { + audioStopCallback(); + audioStopCallback = null; + } + } + }; + + // 设置音频停止回调 + const setAudioStopCallback = (callback) => { + audioStopCallback = callback; + }; + + // 预览音频历史记录 - 使用URL + const previewAudioHistory = (history) => { + console.log('预览音频历史:', history); + const audioUrl = history.url; + console.log('音频历史URL:', audioUrl); + if (!audioUrl) { + showAlert(t('audioHistoryUrlFailed'), 'danger'); + return; + } + + // 停止当前播放的音频 + if (currentPlayingAudio) { + currentPlayingAudio.pause(); + currentPlayingAudio.currentTime = 0; + currentPlayingAudio = null; + } + + const audio = new Audio(audioUrl); + currentPlayingAudio = audio; + + // 监听音频播放结束事件 + audio.addEventListener('ended', () => { + currentPlayingAudio = null; + // 调用停止回调 + if (audioStopCallback) { + audioStopCallback(); + audioStopCallback = null; + } + }); + + audio.addEventListener('error', () => { + console.error('音频播放失败:', audio.error); + showAlert(t('audioPlaybackFailed'), 'danger'); + currentPlayingAudio = null; + // 调用停止回调 + if (audioStopCallback) { + audioStopCallback(); + audioStopCallback = null; + } + }); + + audio.play().catch(error => { + console.error('音频播放失败:', error); + showAlert(t('audioPlaybackFailed'), 'danger'); + currentPlayingAudio = null; + }); + }; + + // 清空图片历史记录 + const clearImageHistory = () => { + imageHistory.value = []; + showAlert(t('imageHistoryCleared'), 'info'); + }; + + // 清空音频历史记录 + const clearAudioHistory = () => { + audioHistory.value = []; + showAlert(t('audioHistoryCleared'), 'info'); + }; + + // 清理localStorage存储空间 + const clearLocalStorage = () => { + try { + // 清理任务历史 + localStorage.removeItem('taskHistory'); + localStorage.removeItem('refreshToken'); + + // 清理其他可能的缓存数据 + const keysToRemove = []; + for (let i = 0; i < localStorage.length; i++) { + const key = localStorage.key(i); + if (key && (key.includes('template') || key.includes('task') || key.includes('history'))) { + keysToRemove.push(key); + } + } + + keysToRemove.forEach(key => { + localStorage.removeItem(key); + }); + + // 重置相关状态 + imageHistory.value = []; + audioHistory.value = []; + promptHistory.value = []; + + showAlert(t('storageCleared'), 'success'); + console.log('localStorage已清理,释放了存储空间'); + } catch (error) { + console.error('清理localStorage失败:', error); + showAlert(t('clearStorageFailed'), 'danger'); + } + }; + + const getAuthHeaders = () => { + const headers = { + 'Content-Type': 'application/json' + }; + + const token = localStorage.getItem('accessToken'); + if (token) { + headers['Authorization'] = `Bearer ${token}`; + console.log('使用Token进行认证:', token.substring(0, 20) + '...'); + } else { + console.warn('没有找到accessToken'); + } + return headers; + }; + + // 验证token是否有效 + const validateToken = async (token) => { + try { + const response = await fetch('/api/v1/model/list', { + method: 'GET', + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + }); + await new Promise(resolve => setTimeout(resolve, 100)); + return response.ok; + } catch (error) { + console.error('Token validation failed:', error); + return false; + } + }; + + const refreshAccessToken = async () => { + if (refreshPromise) { + return refreshPromise; + } + const refreshToken = localStorage.getItem('refreshToken'); + if (!refreshToken) { + return false; + } + + refreshPromise = (async () => { + try { + const response = await fetch('/auth/refresh', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ refresh_token: refreshToken }) + }); + await new Promise(resolve => setTimeout(resolve, 100)); + if (!response.ok) { + throw new Error(`Refresh failed with status ${response.status}`); + } + + const data = await response.json(); + if (data.access_token) { + localStorage.setItem('accessToken', data.access_token); + } + if (data.refresh_token) { + localStorage.setItem('refreshToken', data.refresh_token); + } + if (data.user_info) { + currentUser.value = data.user_info; + localStorage.setItem('currentUser', JSON.stringify(data.user_info)); + } + return true; + } catch (error) { + console.error('Refresh token failed:', error); + logout(false); + showAlert(t('loginExpiredPleaseRelogin'), 'warning', { + label: t('login'), + onClick: login + }); + return false; + } finally { + refreshPromise = null; + } + })(); + + return refreshPromise; + }; + + // 增强的API请求函数,自动处理认证错误 + const apiRequest = async (url, options = {}, allowRetry = true) => { + const headers = getAuthHeaders(); + + try { + const response = await fetch(url, { + ...options, + headers: { + ...headers, + ...options.headers + } + }); + await new Promise(resolve => setTimeout(resolve, 100)); + // 检查是否是认证错误 + if ((response.status === 401 || response.status === 403) && allowRetry) { + const refreshed = await refreshAccessToken(); + if (refreshed) { + return await apiRequest(url, options, false); + } + return null; + } + + return response; + } catch (error) { + console.error('API request failed:', error); + showAlert(t('networkRequestFailed'), 'danger'); + return null; + } + }; + + // 侧边栏拖拽调整功能 + const sidebar = ref(null); + const sidebarWidth = ref(256); // 默认宽度 256px (w-64) + let isResizing = false; + let startX = 0; + let startWidth = 0; + + // 更新悬浮按钮位置 + const updateFloatingButtonPosition = (width) => { + const floatingBtn = document.querySelector('.floating-toggle-btn'); + if (floatingBtn) { + if (sidebarCollapsed.value) { + // 收起状态时,按钮位于屏幕左侧 + floatingBtn.style.left = '0px'; + floatingBtn.style.right = 'auto'; + } else { + // 展开状态时,按钮位于历史任务栏右侧 + floatingBtn.style.left = width + 'px'; + floatingBtn.style.right = 'auto'; + } + } + }; + + const startResize = (e) => { + e.preventDefault(); + console.log('startResize called'); + + isResizing = true; + startX = e.clientX; + startWidth = sidebar.value.offsetWidth; + console.log('Resize started, width:', startWidth); + + document.body.classList.add('resizing'); + document.addEventListener('mousemove', handleResize); + document.addEventListener('mouseup', stopResize); + }; + + const handleResize = (e) => { + if (!isResizing) return; + + const deltaX = e.clientX - startX; + const newWidth = startWidth + deltaX; + const minWidth = 200; + const maxWidth = 500; + + if (newWidth >= minWidth && newWidth <= maxWidth) { + // 立即更新悬浮按钮位置,不等待其他更新 + const floatingBtn = document.querySelector('.floating-toggle-btn'); + if (floatingBtn && !sidebarCollapsed.value) { + floatingBtn.style.left = newWidth + 'px'; + } + + sidebarWidth.value = newWidth; // 更新响应式变量 + sidebar.value.style.setProperty('width', newWidth + 'px', 'important'); + + // 同时调整主内容区域宽度 + const mainContent = document.querySelector('.main-container main'); + if (mainContent) { + mainContent.style.setProperty('width', `calc(100% - ${newWidth}px)`, 'important'); + } else { + const altMain = document.querySelector('main'); + if (altMain) { + altMain.style.setProperty('width', `calc(100% - ${newWidth}px)`, 'important'); + } + } + } else { + console.log('Width out of range:', newWidth); + } + }; + + const stopResize = () => { + isResizing = false; + document.body.classList.remove('resizing'); + document.removeEventListener('mousemove', handleResize); + document.removeEventListener('mouseup', stopResize); + + // 保存当前宽度到localStorage + if (sidebar.value) { + localStorage.setItem('sidebarWidth', sidebar.value.offsetWidth); + } + }; + + // 应用响应式侧边栏宽度 + const applyResponsiveWidth = () => { + if (!sidebar.value) return; + + const windowWidth = window.innerWidth; + let sidebarWidthPx; + + if (windowWidth <= 768) { + sidebarWidthPx = 200; + } else if (windowWidth <= 1200) { + sidebarWidthPx = 250; + } else { + // 大屏幕时使用保存的宽度或默认宽度 + const savedWidth = localStorage.getItem('sidebarWidth'); + if (savedWidth) { + const width = parseInt(savedWidth); + if (width >= 200 && width <= 500) { + sidebarWidthPx = width; + } else { + sidebarWidthPx = 256; // 默认 w-64 + } + } else { + sidebarWidthPx = 256; // 默认 w-64 + } + } + + sidebarWidth.value = sidebarWidthPx; // 更新响应式变量 + sidebar.value.style.width = sidebarWidthPx + 'px'; + + // 更新悬浮按钮位置 + updateFloatingButtonPosition(sidebarWidthPx); + + const mainContent = document.querySelector('main'); + if (mainContent) { + mainContent.style.width = `calc(100% - ${sidebarWidthPx}px)`; + } + }; + + // 新增:视图切换方法 + const switchToCreateView = () => { + // 生成页面的查询参数 + const generateQuery = {}; + + // 保留任务类型选择 + if (selectedTaskId.value) { + generateQuery.taskType = selectedTaskId.value; + } + + // 保留模型选择 + if (selectedModel.value) { + generateQuery.model = selectedModel.value; + } + + // 保留创作区域展开状态 + if (isCreationAreaExpanded.value) { + generateQuery.expanded = 'true'; + } + + router.push({ path: '/generate', query: generateQuery }); + + // 如果之前有展开过创作区域,保持展开状态 + if (isCreationAreaExpanded.value) { + // 延迟一点时间确保DOM更新完成 + setTimeout(() => { + const creationArea = document.querySelector('.creation-area'); + if (creationArea) { + creationArea.classList.add('show'); + } + }, 50); + } + }; + + const switchToProjectsView = (forceRefresh = false) => { + // 项目页面的查询参数 + const projectsQuery = {}; + + // 保留搜索查询 + if (taskSearchQuery.value) { + projectsQuery.search = taskSearchQuery.value; + } + + // 保留状态筛选 + if (statusFilter.value) { + projectsQuery.status = statusFilter.value; + } + + // 保留当前页码 + if (currentTaskPage.value > 1) { + projectsQuery.page = currentTaskPage.value.toString(); + } + + router.push({ path: '/projects', query: projectsQuery }); + // 刷新任务列表 + refreshTasks(forceRefresh); + }; + + const switchToInspirationView = () => { + // 灵感页面的查询参数 + const inspirationQuery = {}; + + // 保留搜索查询 + if (inspirationSearchQuery.value) { + inspirationQuery.search = inspirationSearchQuery.value; + } + + // 保留分类筛选 + if (selectedInspirationCategory.value) { + inspirationQuery.category = selectedInspirationCategory.value; + } + + // 保留当前页码 + if (inspirationCurrentPage.value > 1) { + inspirationQuery.page = inspirationCurrentPage.value.toString(); + } + + router.push({ path: '/inspirations', query: inspirationQuery }); + // 加载灵感数据 + loadInspirationData(); + }; + + const switchToLoginView = () => { + router.push('/login'); + + }; + + // 日期格式化函数 + const formatDate = (date) => { + if (!date) return ''; + const d = new Date(date); + return d.toLocaleDateString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit' + }); + }; + + // 灵感广场相关方法 + const loadInspirationData = async (forceRefresh = false) => { + try { + // 如果不是强制刷新,先尝试从缓存加载 + // 构建缓存键,包含分页和过滤条件 + const cacheKey = `${TEMPLATES_CACHE_KEY}_${inspirationCurrentPage.value}_${inspirationPageSize.value}_${selectedInspirationCategory.value}_${inspirationSearchQuery.value}`; + + if (!forceRefresh) { + const cachedData = loadFromCache(cacheKey, TEMPLATES_CACHE_EXPIRY); + if (cachedData && cachedData.templates) { + console.log(`成功从缓存加载灵感模板数据${cacheKey}:`, cachedData.templates); + inspirationItems.value = cachedData.templates; + InspirationCategories.value = cachedData.all_categories; + // 如果有分页信息也加载 + if (cachedData.pagination) { + inspirationPagination.value = cachedData.pagination; + } + preloadTemplateFilesUrl(inspirationItems.value); + return; + } + } + + // 缓存中没有或强制刷新,从API加载 + const params = new URLSearchParams(); + if (selectedInspirationCategory.value) { + params.append('category', selectedInspirationCategory.value); + } + if (inspirationSearchQuery.value) { + params.append('search', inspirationSearchQuery.value); + } + if (inspirationCurrentPage.value) { + params.append('page', inspirationCurrentPage.value.toString()); + } + if (inspirationPageSize.value) { + params.append('page_size', inspirationPageSize.value.toString()); + } + + const apiUrl = `/api/v1/template/tasks${params.toString() ? '?' + params.toString() : ''}`; + const response = await publicApiCall(apiUrl); + if (response.ok) { + const data = await response.json(); + inspirationItems.value = data.templates || []; + InspirationCategories.value = data.categories || []; + inspirationPagination.value = data.pagination || null; + + // 缓存模板数据 + saveToCache(cacheKey, { + templates: inspirationItems.value, + pagination: inspirationPagination.value, + all_categories: InspirationCategories.value, + category: selectedInspirationCategory.value, + search: inspirationSearchQuery.value, + page: inspirationCurrentPage.value, + page_size: inspirationPageSize.value, + }); + + console.log('缓存灵感模板数据成功:', inspirationItems.value.length, '个模板'); + // 强制触发响应式更新 + await nextTick(); + + // 强制刷新分页组件 + inspirationPaginationKey.value++; + + // 使用新的模板文件预加载逻辑 + preloadTemplateFilesUrl(inspirationItems.value); + } else { + console.warn('加载模板数据失败'); + } + } catch (error) { + console.warn('加载模板数据失败:', error); + } + }; + + + // 选择分类 + const selectInspirationCategory = async (category) => { + isPageLoading.value = true; + // 如果点击的是当前分类,不重复请求 + if (selectedInspirationCategory.value === category) { + isPageLoading.value = false; + return; + } + + // 更新分类 + selectedInspirationCategory.value = category; + + // 重置页码为1 + inspirationCurrentPage.value = 1; + inspirationPageInput.value = 1; + + // 清空当前数据,显示加载状态 + inspirationItems.value = []; + inspirationPagination.value = null; + + // 重新加载数据 + await loadInspirationData(); // 强制刷新,不使用缓存 + isPageLoading.value = false; + }; + + // 搜索防抖定时器 + let searchTimeout = null; + + // 处理搜索 + const handleInspirationSearch = async () => { + isLoading.value = true; + // 清除之前的定时器 + if (searchTimeout) { + clearTimeout(searchTimeout); + } + + // 设置防抖延迟 + searchTimeout = setTimeout(async () => { + // 重置页码为1 + inspirationCurrentPage.value = 1; + inspirationPageInput.value = 1; + + // 清空当前数据,显示加载状态 + inspirationItems.value = []; + inspirationPagination.value = null; + + // 重新加载数据 + await loadInspirationData(); // 强制刷新,不使用缓存 + isPageLoading.value = false; + }, 500); // 500ms 防抖延迟 + }; + + // 全局视频播放管理 + let currentPlayingVideo = null; + let currentLoadingVideo = null; // 跟踪正在等待加载的视频 + + // 更新视频播放按钮图标 + const updateVideoIcon = (video, isPlaying) => { + // 查找视频容器中的播放按钮 + const container = video.closest('.relative'); + if (!container) return; + + // 查找移动端播放按钮 + const playButton = container.querySelector('button[class*="absolute"][class*="bottom-3"]'); + if (playButton) { + const icon = playButton.querySelector('i'); + if (icon) { + icon.className = isPlaying ? 'fas fa-pause text-sm' : 'fas fa-play text-sm'; + } + } + }; + + // 处理视频播放结束 + const onVideoEnded = (event) => { + const video = event.target; + console.log('视频播放完毕:', video.src); + + // 重置视频到开始位置 + video.currentTime = 0; + + // 更新播放按钮图标为播放状态 + updateVideoIcon(video, false); + + // 如果播放完毕的是当前播放的视频,清除引用 + if (currentPlayingVideo === video) { + currentPlayingVideo = null; + console.log('当前播放视频播放完毕'); + } + }; + + // 视频播放控制 + const playVideo = (event) => { + const video = event.target; + + // 检查视频是否已加载完成 + if (video.readyState < 2) { // HAVE_CURRENT_DATA + console.log('视频还没加载完成,忽略鼠标悬停播放'); + return; + } + + // 如果当前有视频在播放,先暂停它 + if (currentPlayingVideo && currentPlayingVideo !== video) { + currentPlayingVideo.pause(); + currentPlayingVideo.currentTime = 0; + // 更新上一个视频的图标 + updateVideoIcon(currentPlayingVideo, false); + console.log('暂停上一个视频'); + } + + // 视频已加载完成,可以播放 + video.currentTime = 0; // 从头开始播放 + video.play().then(() => { + // 播放成功,更新当前播放视频 + currentPlayingVideo = video; + console.log('开始播放新视频'); + }).catch(e => { + console.log('视频播放失败:', e); + currentPlayingVideo = null; + video.pause(); + video.currentTime = 0; + }); + }; + + const pauseVideo = (event) => { + const video = event.target; + + // 检查视频是否已加载完成 + if (video.readyState < 2) { // HAVE_CURRENT_DATA + console.log('视频还没加载完成,忽略鼠标离开暂停'); + return; + } + + video.pause(); + video.currentTime = 0; + + // 更新视频图标 + updateVideoIcon(video, false); + + // 如果暂停的是当前播放的视频,清除引用 + if (currentPlayingVideo === video) { + currentPlayingVideo = null; + console.log('暂停当前播放视频'); + } + }; + + // 移动端视频播放切换 + const toggleVideoPlay = (event) => { + const button = event.target.closest('button'); + if (!button) { + console.error('toggleVideoPlay: 未找到按钮元素'); + return; + } + + const video = button.parentElement.querySelector('video'); + if (!video) { + console.error('toggleVideoPlay: 未找到视频元素'); + return; + } + + const icon = button.querySelector('i'); + + if (video.paused) { + // 如果当前有视频在播放,先暂停它 + if (currentPlayingVideo && currentPlayingVideo !== video) { + currentPlayingVideo.pause(); + currentPlayingVideo.currentTime = 0; + // 更新上一个视频的图标 + updateVideoIcon(currentPlayingVideo, false); + console.log('暂停上一个视频(移动端)'); + } + + // 如果当前有视频在等待加载,取消它的等待状态 + if (currentLoadingVideo && currentLoadingVideo !== video) { + currentLoadingVideo = null; + console.log('取消上一个视频的加载等待(移动端)'); + } + + // 检查视频是否已加载完成 + if (video.readyState >= 2) { // HAVE_CURRENT_DATA + // 视频已加载完成,直接播放 + video.currentTime = 0; + video.play().then(() => { + icon.className = 'fas fa-pause text-sm'; + currentPlayingVideo = video; + console.log('开始播放新视频(移动端)'); + }).catch(e => { + console.log('视频播放失败:', e); + icon.className = 'fas fa-play text-sm'; + currentPlayingVideo = null; + }); + } else { + // 视频未加载完成,显示loading并等待 + console.log('视频还没加载完成,等待加载(移动端), readyState:', video.readyState); + icon.className = 'fas fa-spinner fa-spin text-sm'; + currentLoadingVideo = video; + + // 主动触发视频加载 + video.load(); + + // 设置超时保护(10秒后如果还未加载完成,重置状态) + const loadingTimeout = setTimeout(() => { + if (currentLoadingVideo === video) { + console.warn('视频加载超时(移动端)'); + icon.className = 'fas fa-play text-sm'; + currentLoadingVideo = null; + showAlert(t('videoLoadTimeout'), 'warning'); + } + }, 10000); + + // 等待视频可以播放 + const playHandler = () => { + clearTimeout(loadingTimeout); + + // 检查这个视频是否仍然是当前等待加载的视频 + if (currentLoadingVideo === video) { + currentLoadingVideo = null; + video.currentTime = 0; + video.play().then(() => { + icon.className = 'fas fa-pause text-sm'; + currentPlayingVideo = video; + console.log('开始播放新视频(移动端-延迟加载)'); + }).catch(e => { + console.log('视频播放失败:', e); + icon.className = 'fas fa-play text-sm'; + currentPlayingVideo = null; + }); + } else { + // 这个视频的加载等待已被取消,重置图标 + icon.className = 'fas fa-play text-sm'; + console.log('视频加载完成但等待已被取消(移动端)'); + } + + // 移除事件监听器 + video.removeEventListener('canplay', playHandler); + video.removeEventListener('error', errorHandler); + }; + + const errorHandler = () => { + clearTimeout(loadingTimeout); + console.error('视频加载失败(移动端)'); + icon.className = 'fas fa-play text-sm'; + currentLoadingVideo = null; + + // 移除事件监听器 + video.removeEventListener('canplay', playHandler); + video.removeEventListener('error', errorHandler); + }; + + // 使用 canplay 事件,比 loadeddata 更适合移动端 + video.addEventListener('canplay', playHandler, { once: true }); + video.addEventListener('error', errorHandler, { once: true }); + } + } else { + video.pause(); + video.currentTime = 0; + icon.className = 'fas fa-play text-sm'; + + // 如果暂停的是当前播放的视频,清除引用 + if (currentPlayingVideo === video) { + currentPlayingVideo = null; + console.log('暂停当前播放视频(移动端)'); + } + + // 如果暂停的是当前等待加载的视频,清除引用 + if (currentLoadingVideo === video) { + currentLoadingVideo = null; + console.log('取消当前等待加载的视频(移动端)'); + } + } + }; + + // 暂停所有视频 + const pauseAllVideos = () => { + if (currentPlayingVideo) { + currentPlayingVideo.pause(); + currentPlayingVideo.currentTime = 0; + // 更新视频图标 + updateVideoIcon(currentPlayingVideo, false); + currentPlayingVideo = null; + console.log('暂停所有视频'); + } + + // 清理等待加载的视频状态 + if (currentLoadingVideo) { + // 重置等待加载的视频图标 + const loadingContainer = currentLoadingVideo.closest('.relative'); + if (loadingContainer) { + const loadingButton = loadingContainer.querySelector('button[class*="absolute"][class*="bottom-3"]'); + if (loadingButton) { + const loadingIcon = loadingButton.querySelector('i'); + if (loadingIcon) { + loadingIcon.className = 'fas fa-play text-sm'; + } + } + } + currentLoadingVideo = null; + console.log('取消所有等待加载的视频'); + } + }; + + const onVideoLoaded = (event) => { + const video = event.target; + // 视频加载完成,准备播放 + console.log('视频加载完成:', video.src); + + // 更新视频加载状态(使用视频的实际src) + setVideoLoaded(video.src, true); + + // 触发Vue的响应式更新 + videoLoadedStates.value = new Map(videoLoadedStates.value); + }; + + const onVideoError = (event) => { + const video = event.target; + console.error('视频加载失败:', video.src, event); + const img = event.target; + const parent = img.parentElement; + parent.innerHTML = '
    '; + // 回退到图片 + }; + + // 预览模板详情 + const previewTemplateDetail = (item, updateRoute = true) => { + selectedTemplate.value = item; + showTemplateDetailModal.value = true; + + // 只在需要时更新路由到模板详情页面 + if (updateRoute && item?.task_id) { + router.push(`/template/${item.task_id}`); + } + }; + + // 关闭模板详情弹窗 + const closeTemplateDetailModal = () => { + showTemplateDetailModal.value = false; + selectedTemplate.value = null; + // 移除自动路由跳转,让调用方决定路由行为 + }; + + // 显示图片放大 + const showImageZoom = (imageUrl) => { + zoomedImageUrl.value = imageUrl; + showImageZoomModal.value = true; + }; + + // 关闭图片放大弹窗 + const closeImageZoomModal = () => { + showImageZoomModal.value = false; + zoomedImageUrl.value = ''; + }; + + // 通过后端API代理获取文件(避免CORS问题) + const fetchFileThroughProxy = async (fileKey, fileType) => { + try { + // 尝试通过后端API代理获取文件 + const proxyUrl = `/api/v1/template/asset/${fileType}/${fileKey}`; + const response = await apiRequest(proxyUrl); + + if (response && response.ok) { + return await response.blob(); + } + + // 如果代理API不存在,尝试直接获取URL然后fetch + const fileUrl = await getTemplateFileUrlAsync(fileKey, fileType); + if (!fileUrl) { + return null; + } + + // 检查是否是同源URL + const urlObj = new URL(fileUrl, window.location.origin); + const isSameOrigin = urlObj.origin === window.location.origin; + + if (isSameOrigin) { + // 同源,直接fetch + const directResponse = await fetch(fileUrl); + if (directResponse.ok) { + return await directResponse.blob(); + } + } else { + // 跨域,尝试使用no-cors模式(但这样无法读取响应) + // 或者使用img/audio元素加载(不适用于需要File对象的情况) + // 这里我们尝试直接fetch,如果失败会抛出错误 + try { + const directResponse = await fetch(fileUrl, { mode: 'cors' }); + if (directResponse.ok) { + return await directResponse.blob(); + } + } catch (corsError) { + console.warn('CORS错误,尝试使用代理:', corsError); + // 如果后端有代理API,应该使用上面的代理方式 + // 如果没有,这里会返回null,然后调用方会显示错误 + } + } + + return null; + } catch (error) { + console.error('获取文件失败:', error); + return null; + } + }; + + // 应用模板图片 + const applyTemplateImage = async (template) => { + if (!template?.inputs?.input_image) { + showAlert(t('applyImageFailed'), 'danger'); + return; + } + + try { + // 先设置任务类型(如果模板有任务类型) + if (template.task_type && (template.task_type === 'i2v' || template.task_type === 's2v')) { + selectedTaskId.value = template.task_type; + } + + // 检查当前任务类型是否支持图片 + if (selectedTaskId.value !== 'i2v' && selectedTaskId.value !== 's2v') { + showAlert(t('applyImageFailed'), 'danger'); + return; + } + + // 获取图片URL(用于预览) + const imageUrl = await getTemplateFileUrlAsync(template.inputs.input_image, 'images'); + if (!imageUrl) { + console.error('无法获取模板图片URL:', template.inputs.input_image); + showAlert(t('applyImageFailed'), 'danger'); + return; + } + + // 根据任务类型设置图片 + const currentForm = getCurrentForm(); + if (currentForm) { + currentForm.imageUrl = imageUrl; + // Reset detected faces + if (selectedTaskId.value === 'i2v') { + i2vForm.value.detectedFaces = []; + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.detectedFaces = []; + } + } + + // 设置预览 + setCurrentImagePreview(imageUrl); + + // 加载图片文件(与useTemplate相同的逻辑) + try { + // 直接使用获取到的URL fetch(与useTemplate相同) + const imageResponse = await fetch(imageUrl); + if (imageResponse.ok) { + const blob = await imageResponse.blob(); + // 验证返回的是图片而不是HTML + if (blob.type && blob.type.startsWith('text/html')) { + console.error('返回的是HTML而不是图片:', blob.type); + showAlert(t('applyImageFailed'), 'danger'); + return; + } + const filename = template.inputs.input_image || 'template_image.jpg'; + const file = new File([blob], filename, { type: blob.type || 'image/jpeg' }); + if (currentForm) { + currentForm.imageFile = file; + } + console.log('模板图片文件已加载'); + + // 不再自动检测人脸,等待用户手动打开多角色模式开关 + } else { + console.warn('Failed to fetch image from URL:', imageUrl); + showAlert(t('applyImageFailed'), 'danger'); + return; + } + } catch (error) { + console.error('Failed to load template image file:', error); + showAlert(t('applyImageFailed'), 'danger'); + return; + } + updateUploadedContentStatus(); + + // 关闭所有弹窗的辅助函数 + const closeAllModals = () => { + closeTaskDetailModal(); // 使用函数确保状态完全重置 + showVoiceTTSModal.value = false; + closeTemplateDetailModal(); // 使用函数确保状态完全重置 + showImageTemplates.value = false; + showAudioTemplates.value = false; + showPromptModal.value = false; + closeImageZoomModal(); // 使用函数确保状态完全重置 + }; + + // 跳转到创作区域的函数 + const scrollToCreationArea = () => { + // 先关闭所有弹窗 + closeAllModals(); + + // 如果不在生成页面,先切换视图 + if (router.currentRoute.value.path !== '/generate') { + switchToCreateView(); + // 等待路由切换完成后再展开和滚动 + setTimeout(() => { + expandCreationArea(); + setTimeout(() => { + // 滚动到顶部(TopBar 之后的位置,约60px) + const mainScrollable = document.querySelector('.main-scrollbar'); + if (mainScrollable) { + mainScrollable.scrollTo({ + top: 0, + behavior: 'smooth' + }); + } + }, 100); + }, 100); + } else { + // 已经在生成页面,直接展开和滚动 + expandCreationArea(); + setTimeout(() => { + // 滚动到顶部(TopBar 之后的位置,约60px) + const mainScrollable = document.querySelector('.main-scrollbar'); + if (mainScrollable) { + mainScrollable.scrollTo({ + top: 0, + behavior: 'smooth' + }); + } + }, 100); + } + }; + + showAlert(t('imageApplied'), 'success', { + label: t('view'), + onClick: scrollToCreationArea + }); + } catch (error) { + console.error('应用图片失败:', error); + showAlert(t('applyImageFailed'), 'danger'); + } + }; + + // 应用模板音频 + const applyTemplateAudio = async (template) => { + if (!template?.inputs?.input_audio) { + showAlert(t('applyAudioFailed'), 'danger'); + return; + } + + try { + // 先设置任务类型(如果模板有任务类型) + if (template.task_type && template.task_type === 's2v') { + selectedTaskId.value = template.task_type; + } + + // 检查当前任务类型是否支持音频 + if (selectedTaskId.value !== 's2v') { + showAlert(t('applyAudioFailed'), 'danger'); + return; + } + + // 获取音频URL(用于预览) + const audioUrl = await getTemplateFileUrlAsync(template.inputs.input_audio, 'audios'); + if (!audioUrl) { + console.error('无法获取模板音频URL:', template.inputs.input_audio); + showAlert(t('applyAudioFailed'), 'danger'); + return; + } + + // 设置音频文件 + const currentForm = getCurrentForm(); + if (currentForm) { + currentForm.audioUrl = audioUrl; + } + + // 设置预览 + setCurrentAudioPreview(audioUrl); + + // 加载音频文件(与useTemplate相同的逻辑) + try { + // 直接使用获取到的URL fetch(与useTemplate相同) + const audioResponse = await fetch(audioUrl); + if (audioResponse.ok) { + const blob = await audioResponse.blob(); + // 验证返回的是音频而不是HTML + if (blob.type && blob.type.startsWith('text/html')) { + console.error('返回的是HTML而不是音频:', blob.type); + showAlert(t('applyAudioFailed'), 'danger'); + return; + } + const filename = template.inputs.input_audio || 'template_audio.mp3'; + + // 根据文件扩展名确定正确的MIME类型 + let mimeType = blob.type; + if (!mimeType || mimeType === 'application/octet-stream') { + const ext = filename.toLowerCase().split('.').pop(); + const mimeTypes = { + 'mp3': 'audio/mpeg', + 'wav': 'audio/wav', + 'mp4': 'audio/mp4', + 'aac': 'audio/aac', + 'ogg': 'audio/ogg', + 'm4a': 'audio/mp4' + }; + mimeType = mimeTypes[ext] || 'audio/mpeg'; + } + + const file = new File([blob], filename, { type: mimeType }); + if (currentForm) { + currentForm.audioFile = file; + } + console.log('模板音频文件已加载'); + } else { + console.warn('Failed to fetch audio from URL:', audioUrl); + showAlert(t('applyAudioFailed'), 'danger'); + return; + } + } catch (error) { + console.error('Failed to load template audio file:', error); + showAlert(t('applyAudioFailed'), 'danger'); + return; + } + updateUploadedContentStatus(); + + // 关闭所有弹窗的辅助函数 + const closeAllModals = () => { + closeTaskDetailModal(); // 使用函数确保状态完全重置 + showVoiceTTSModal.value = false; + closeTemplateDetailModal(); // 使用函数确保状态完全重置 + showImageTemplates.value = false; + showAudioTemplates.value = false; + showPromptModal.value = false; + closeImageZoomModal(); // 使用函数确保状态完全重置 + }; + + // 跳转到创作区域的函数 + const scrollToCreationArea = () => { + // 先关闭所有弹窗 + closeAllModals(); + + // 如果不在生成页面,先切换视图 + if (router.currentRoute.value.path !== '/generate') { + switchToCreateView(); + // 等待路由切换完成后再展开和滚动 + setTimeout(() => { + expandCreationArea(); + setTimeout(() => { + // 滚动到顶部(TopBar 之后的位置,约60px) + const mainScrollable = document.querySelector('.main-scrollbar'); + if (mainScrollable) { + mainScrollable.scrollTo({ + top: 0, + behavior: 'smooth' + }); + } + }, 100); + }, 100); + } else { + // 已经在生成页面,直接展开和滚动 + expandCreationArea(); + setTimeout(() => { + // 滚动到顶部(TopBar 之后的位置,约60px) + const mainScrollable = document.querySelector('.main-scrollbar'); + if (mainScrollable) { + mainScrollable.scrollTo({ + top: 0, + behavior: 'smooth' + }); + } + }, 100); + } + }; + + showAlert(t('audioApplied'), 'success', { + label: t('view'), + onClick: scrollToCreationArea + }); + } catch (error) { + console.error('应用音频失败:', error); + showAlert(t('applyAudioFailed'), 'danger'); + } + }; + + // 应用模板Prompt + const applyTemplatePrompt = (template) => { + if (template?.params?.prompt) { + const currentForm = getCurrentForm(); + if (currentForm) { + currentForm.prompt = template.params.prompt; + updateUploadedContentStatus(); + showAlert(t('promptApplied'), 'success'); + } + } + }; + + // 复制文本到剪贴板的辅助函数(支持移动端降级) + const copyToClipboard = async (text) => { + // 检查是否支持现代 Clipboard API + if (navigator.clipboard && navigator.clipboard.writeText) { + try { + await navigator.clipboard.writeText(text); + return true; + } catch (error) { + console.warn('Clipboard API 失败,尝试降级方案:', error); + // 降级到传统方法 + } + } + + // 降级方案:使用传统方法(适用于移动端和不支持Clipboard API的浏览器) + try { + const textArea = document.createElement('textarea'); + textArea.value = text; + + // 移动端需要元素可见且可聚焦,所以先设置可见样式 + textArea.style.position = 'fixed'; + textArea.style.left = '0'; + textArea.style.top = '0'; + textArea.style.width = '2em'; + textArea.style.height = '2em'; + textArea.style.padding = '0'; + textArea.style.border = 'none'; + textArea.style.outline = 'none'; + textArea.style.boxShadow = 'none'; + textArea.style.background = 'transparent'; + textArea.style.opacity = '0'; + textArea.style.zIndex = '-1'; + textArea.setAttribute('readonly', ''); + textArea.setAttribute('aria-hidden', 'true'); + textArea.setAttribute('tabindex', '-1'); + + document.body.appendChild(textArea); + + // 聚焦元素(移动端需要) + textArea.focus(); + textArea.select(); + + // 移动端需要 setSelectionRange + if (textArea.setSelectionRange) { + textArea.setSelectionRange(0, text.length); + } + + // 尝试复制 + let successful = false; + try { + successful = document.execCommand('copy'); + } catch (e) { + console.warn('execCommand 执行失败:', e); + } + + // 立即移除元素 + document.body.removeChild(textArea); + + if (successful) { + return true; + } else { + // 如果仍然失败,尝试另一种方法:在视口中心创建可见的输入框 + return await fallbackCopyToClipboard(text); + } + } catch (error) { + console.error('复制失败,尝试备用方案:', error); + // 尝试备用方案 + return await fallbackCopyToClipboard(text); + } + }; + + // 备用复制方案:显示一个可选择的文本区域(Apple风格) + const fallbackCopyToClipboard = async (text) => { + return new Promise((resolve) => { + // 创建遮罩层 + const overlay = document.createElement('div'); + overlay.style.cssText = ` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + z-index: 10000; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; + `; + + // 创建弹窗容器(Apple风格) + const container = document.createElement('div'); + container.style.cssText = ` + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(20px) saturate(180%); + -webkit-backdrop-filter: blur(20px) saturate(180%); + border-radius: 20px; + padding: 24px; + max-width: 90%; + width: 100%; + max-width: 500px; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); + `; + + // 深色模式支持 + if (document.documentElement.classList.contains('dark')) { + container.style.background = 'rgba(30, 30, 30, 0.95)'; + } + + const title = document.createElement('div'); + title.textContent = t('copyLink') || '复制链接'; + title.style.cssText = ` + font-size: 18px; + font-weight: 600; + color: #1d1d1f; + margin-bottom: 12px; + text-align: center; + `; + if (document.documentElement.classList.contains('dark')) { + title.style.color = '#f5f5f7'; + } + + const message = document.createElement('div'); + message.textContent = t('pleaseCopyManually') || '请手动选择并复制下面的文本'; + message.style.cssText = ` + color: #86868b; + font-size: 14px; + margin-bottom: 16px; + text-align: center; + `; + if (document.documentElement.classList.contains('dark')) { + message.style.color = '#98989d'; + } + + const input = document.createElement('input'); + input.type = 'text'; + input.value = text; + input.readOnly = true; + input.style.cssText = ` + width: 100%; + padding: 12px 16px; + font-size: 14px; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 12px; + background: rgba(255, 255, 255, 0.8); + color: #1d1d1f; + margin-bottom: 16px; + box-sizing: border-box; + -webkit-appearance: none; + appearance: none; + `; + if (document.documentElement.classList.contains('dark')) { + input.style.border = '1px solid rgba(255, 255, 255, 0.1)'; + input.style.background = 'rgba(44, 44, 46, 0.8)'; + input.style.color = '#f5f5f7'; + } + + const button = document.createElement('button'); + button.textContent = t('close') || '关闭'; + button.style.cssText = ` + width: 100%; + padding: 12px 24px; + background: var(--brand-primary, #007AFF); + color: white; + border: none; + border-radius: 12px; + cursor: pointer; + font-size: 15px; + font-weight: 600; + transition: all 0.2s; + `; + button.onmouseover = () => { + button.style.opacity = '0.9'; + button.style.transform = 'scale(1.02)'; + }; + button.onmouseout = () => { + button.style.opacity = '1'; + button.style.transform = 'scale(1)'; + }; + + container.appendChild(title); + container.appendChild(message); + container.appendChild(input); + container.appendChild(button); + overlay.appendChild(container); + + const close = () => { + document.body.removeChild(overlay); + resolve(false); // 返回false表示需要用户手动复制 + }; + + button.onclick = close; + overlay.onclick = (e) => { + if (e.target === overlay) close(); + }; + + document.body.appendChild(overlay); + + // 选中文本(延迟以确保DOM已渲染) + setTimeout(() => { + input.focus(); + input.select(); + if (input.setSelectionRange) { + input.setSelectionRange(0, text.length); + } + }, 150); + }); + }; + + // 复制Prompt到剪贴板 + const copyPrompt = async (promptText) => { + if (!promptText) return; + + try { + // 使用辅助函数复制,支持移动端 + const success = await copyToClipboard(promptText); + if (success) { + showAlert(t('promptCopied'), 'success'); + } + // 如果返回false,说明已经显示了手动复制的弹窗,不需要额外提示 + } catch (error) { + console.error('复制Prompt失败:', error); + showAlert(t('copyFailed'), 'error'); + } + }; + + // 使用模板 + const useTemplate = async (item) => { + if (!item) { + showAlert(t('templateDataIncomplete'), 'danger'); + return; + } + console.log('使用模板:', item); + + try { + // 开始模板加载 + templateLoading.value = true; + templateLoadingMessage.value = t('prefillLoadingTemplate'); + + // 先设置任务类型 + selectedTaskId.value = item.task_type; + + // 获取当前表单 + const currentForm = getCurrentForm(); + + // 设置表单数据 + currentForm.prompt = item.params?.prompt || ''; + currentForm.negative_prompt = item.params?.negative_prompt || ''; + currentForm.seed = item.params?.seed || 42; + currentForm.model_cls = item.model_cls || ''; + currentForm.stage = item.stage || ''; + + // 立即关闭模板详情并切换到创建视图,后续资源异步加载 + showTemplateDetailModal.value = false; + selectedTemplate.value = null; + isCreationAreaExpanded.value = true; + switchToCreateView(); + + // 创建加载Promise数组 + const loadingPromises = []; + + // 如果有输入图片,先获取正确的URL,然后加载文件 + if (item.inputs && item.inputs.input_image) { + // 异步获取图片URL + const imageLoadPromise = new Promise(async (resolve) => { + try { + // 先获取正确的URL + const imageUrl = await getTemplateFileUrlAsync(item.inputs.input_image, 'images'); + if (!imageUrl) { + console.warn('无法获取模板图片URL:', item.inputs.input_image); + resolve(); + return; + } + + currentForm.imageUrl = imageUrl; + setCurrentImagePreview(imageUrl); // 设置正确的URL作为预览 + console.log('模板输入图片URL:', imageUrl); + + // Reset detected faces + if (selectedTaskId.value === 'i2v') { + i2vForm.value.detectedFaces = []; + } else if (selectedTaskId.value === 's2v') { + s2vForm.value.detectedFaces = []; + } + + // 加载图片文件 + const imageResponse = await fetch(imageUrl); + if (imageResponse.ok) { + const blob = await imageResponse.blob(); + const filename = item.inputs.input_image; + const file = new File([blob], filename, { type: blob.type }); + currentForm.imageFile = file; + console.log('模板图片文件已加载'); + + // 不再自动检测人脸,等待用户手动打开多角色模式开关 + } else { + console.warn('Failed to fetch image from URL:', imageUrl); + } + } catch (error) { + console.warn('Failed to load template image file:', error); + } + resolve(); + }); + loadingPromises.push(imageLoadPromise); + } + + // 如果有输入音频,先获取正确的URL,然后加载文件 + if (item.inputs && item.inputs.input_audio) { + // 异步获取音频URL + const audioLoadPromise = new Promise(async (resolve) => { + try { + // 先获取正确的URL + const audioUrl = await getTemplateFileUrlAsync(item.inputs.input_audio, 'audios'); + if (!audioUrl) { + console.warn('无法获取模板音频URL:', item.inputs.input_audio); + resolve(); + return; + } + + currentForm.audioUrl = audioUrl; + setCurrentAudioPreview(audioUrl); // 设置正确的URL作为预览 + console.log('模板输入音频URL:', audioUrl); + + // 加载音频文件 + const audioResponse = await fetch(audioUrl); + if (audioResponse.ok) { + const blob = await audioResponse.blob(); + const filename = item.inputs.input_audio; + + // 根据文件扩展名确定正确的MIME类型 + let mimeType = blob.type; + if (!mimeType || mimeType === 'application/octet-stream') { + const ext = filename.toLowerCase().split('.').pop(); + const mimeTypes = { + 'mp3': 'audio/mpeg', + 'wav': 'audio/wav', + 'mp4': 'audio/mp4', + 'aac': 'audio/aac', + 'ogg': 'audio/ogg', + 'm4a': 'audio/mp4' + }; + mimeType = mimeTypes[ext] || 'audio/mpeg'; + } + + const file = new File([blob], filename, { type: mimeType }); + currentForm.audioFile = file; + console.log('模板音频文件已加载'); + // 使用FileReader生成data URL,与正常上传保持一致 + const reader = new FileReader(); + reader.onload = (e) => { + setCurrentAudioPreview(e.target.result); + console.log('模板音频预览已设置:', e.target.result.substring(0, 50) + '...'); + }; + reader.readAsDataURL(file); + } else { + console.warn('Failed to fetch audio from URL:', audioUrl); + } + } catch (error) { + console.warn('Failed to load template audio file:', error); + } + resolve(); + }); + loadingPromises.push(audioLoadPromise); + } + + // 等待所有文件加载完成 + if (loadingPromises.length > 0) { + await Promise.all(loadingPromises); + } + + showAlert(`模板加载完成`, 'success'); + } catch (error) { + console.error('应用模板失败:', error); + showAlert(`应用模板失败: ${error.message}`, 'danger'); + } finally { + // 结束模板加载 + templateLoading.value = false; + templateLoadingMessage.value = ''; + } + }; + + // 加载更多灵感 + const loadMoreInspiration = () => { + showAlert(t('loadMoreInspirationComingSoon'), 'info'); + }; + + // 新增:任务详情弹窗方法 + const openTaskDetailModal = (task) => { + console.log('openTaskDetailModal called with task:', task); + modalTask.value = task; + showTaskDetailModal.value = true; + // 只有不在 /generate 页面时才更新路由 + // 在 /generate 页面打开任务详情时,保持在当前页面 + const currentRoute = router.currentRoute.value; + if (task?.task_id && currentRoute.path !== '/generate') { + router.push(`/task/${task.task_id}`); + } + }; + + const closeTaskDetailModal = () => { + showTaskDetailModal.value = false; + modalTask.value = null; + // 只有当前路由是 /task/:id 时才跳转回 Projects + // 如果在其他页面(如 /generate)打开的弹窗,关闭时保持在原页面 + const currentRoute = router.currentRoute.value; + if (currentRoute.path.startsWith('/task/')) { + // 从任务详情路由打开的,返回 Projects 页面 + router.push({ name: 'Projects' }); + } + // 如果不是任务详情路由,不做任何路由跳转,保持在当前页面 + }; + + // 新增:分享功能相关方法 + const generateShareUrl = (taskId) => { + const baseUrl = window.location.origin; + return `${baseUrl}/share/${taskId}`; + }; + + const copyShareLink = async (taskId, shareType = 'task') => { + try { + const token = localStorage.getItem('accessToken'); + if (!token) { + showAlert(t('pleaseLoginFirst'), 'warning'); + return; + } + + // 调用后端接口创建分享链接 + const response = await fetch('/api/v1/share/create', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${token}` + }, + body: JSON.stringify({ + task_id: taskId, + share_type: shareType + }) + }); + + if (!response.ok) { + throw new Error('创建分享链接失败'); + } + + const data = await response.json(); + const shareUrl = `${window.location.origin}${data.share_url}`; + + // 使用辅助函数复制,支持移动端 + const success = await copyToClipboard(shareUrl); + + // 如果成功复制,显示成功提示 + if (success) { + // 显示带操作按钮的alert + showAlert(t('shareLinkCopied'), 'success', { + label: t('view'), + onClick: () => { + window.open(shareUrl, '_blank'); + } + }); + } + // 如果返回false,说明已经显示了手动复制的弹窗,不需要额外提示 + } catch (err) { + console.error('复制失败:', err); + showAlert(t('copyFailed'), 'error'); + } + }; + + const shareToSocial = (taskId, platform) => { + const shareUrl = generateShareUrl(taskId); + const task = modalTask.value; + const title = task?.params?.prompt || t('aiGeneratedVideo'); + const description = t('checkOutThisAIGeneratedVideo'); + + let shareUrlWithParams = ''; + + switch (platform) { + case 'twitter': + shareUrlWithParams = `https://twitter.com/intent/tweet?text=${encodeURIComponent(title)}&url=${encodeURIComponent(shareUrl)}`; + break; + case 'facebook': + shareUrlWithParams = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareUrl)}`; + break; + case 'linkedin': + shareUrlWithParams = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(shareUrl)}`; + break; + case 'whatsapp': + shareUrlWithParams = `https://wa.me/?text=${encodeURIComponent(title + ' ' + shareUrl)}`; + break; + case 'telegram': + shareUrlWithParams = `https://t.me/share/url?url=${encodeURIComponent(shareUrl)}&text=${encodeURIComponent(title)}`; + break; + case 'weibo': + shareUrlWithParams = `https://service.weibo.com/share/share.php?url=${encodeURIComponent(shareUrl)}&title=${encodeURIComponent(title)}`; + break; + default: + return; + } + + window.open(shareUrlWithParams, '_blank', 'width=600,height=400'); + }; + + // 新增:从路由参数打开任务详情 + const openTaskFromRoute = async (taskId) => { + try { + // 如果任务列表为空,先加载任务数据 + if (tasks.value.length === 0) { + await refreshTasks(); + } + + if (showTaskDetailModal.value && modalTask.value?.task_id === taskId) { + console.log('任务详情已打开,不重复打开'); + return; + } + + // 查找任务 + const task = tasks.value.find(t => t.task_id === taskId); + if (task) { + modalTask.value = task; + openTaskDetailModal(task); + } else { + // 如果任务不在当前列表中,尝试从API获取 + showAlert(t('taskNotFound'), 'error'); + router.push({ name: 'Projects' }); + } + } catch (error) { + console.error('打开任务失败:', error); + showAlert(t('openTaskFailed'), 'error'); + router.push({ name: 'Projects' }); + } + }; + + // 新增:模板分享功能相关方法 + const generateTemplateShareUrl = (templateId) => { + const baseUrl = window.location.origin; + return `${baseUrl}/template/${templateId}`; + }; + + const copyTemplateShareLink = async (templateId) => { + try { + const shareUrl = generateTemplateShareUrl(templateId); + // 使用辅助函数复制,支持移动端 + const success = await copyToClipboard(shareUrl); + + // 如果成功复制,显示成功提示 + if (success) { + showAlert(t('templateShareLinkCopied'), 'success', { + label: t('view'), + onClick: () => { + window.open(shareUrl, '_blank'); + } + }); + } + // 如果返回false,说明已经显示了手动复制的弹窗,不需要额外提示 + } catch (err) { + console.error('复制模板分享链接失败:', err); + showAlert(t('copyFailed'), 'error'); + } + }; + + const shareTemplateToSocial = (templateId, platform) => { + const shareUrl = generateTemplateShareUrl(templateId); + const template = selectedTemplate.value; + const title = template?.params?.prompt || t('aiGeneratedTemplate'); + const description = t('checkOutThisAITemplate'); + + let shareUrlWithParams = ''; + + switch (platform) { + case 'twitter': + shareUrlWithParams = `https://twitter.com/intent/tweet?text=${encodeURIComponent(title)}&url=${encodeURIComponent(shareUrl)}`; + break; + case 'facebook': + shareUrlWithParams = `https://www.facebook.com/sharer/sharer.php?u=${encodeURIComponent(shareUrl)}`; + break; + case 'linkedin': + shareUrlWithParams = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(shareUrl)}`; + break; + case 'whatsapp': + shareUrlWithParams = `https://wa.me/?text=${encodeURIComponent(title + ' ' + shareUrl)}`; + break; + case 'telegram': + shareUrlWithParams = `https://t.me/share/url?url=${encodeURIComponent(shareUrl)}&text=${encodeURIComponent(title)}`; + break; + case 'weibo': + shareUrlWithParams = `https://service.weibo.com/share/share.php?url=${encodeURIComponent(shareUrl)}&title=${encodeURIComponent(title)}`; + break; + default: + return; + } + + window.open(shareUrlWithParams, '_blank', 'width=600,height=400'); + }; + + // 新增:从路由参数打开模板详情 + const openTemplateFromRoute = async (templateId) => { + try { + // 如果模板列表为空,先加载模板数据 + if (inspirationItems.value.length === 0) { + await loadInspirationData(); + } + + if (showTemplateDetailModal.value && selectedTemplate.value?.task_id === templateId) { + console.log('模板详情已打开,不重复打开'); + return; + } + + // 查找模板 + const template = inspirationItems.value.find(t => t.task_id === templateId); + if (template) { + selectedTemplate.value = template; + previewTemplateDetail(template); + } else { + // 如果模板不在当前列表中,尝试从API获取 + showAlert(t('templateNotFound'), 'error'); + router.push({ name: 'Inspirations' }); + } + } catch (error) { + console.error('打开模板失败:', error); + showAlert(t('openTemplateFailed'), 'error'); + router.push({ name: 'Inspirations' }); + } + }; + + // 精选模版相关数据 + const featuredTemplates = ref([]); + const featuredTemplatesLoading = ref(false); + + // 主题管理 + const theme = ref('dark'); // 'light', 'dark' - 默认深色模式 + + // 初始化主题 + const initTheme = () => { + const savedTheme = localStorage.getItem('theme') || 'dark'; // 默认深色模式 + theme.value = savedTheme; + applyTheme(savedTheme); + }; + + // 应用主题(优化版本,减少延迟) + const applyTheme = (newTheme) => { + const html = document.documentElement; + + // 使用 requestAnimationFrame 优化 DOM 操作 + requestAnimationFrame(() => { + // 临时禁用过渡动画以提高切换速度 + html.classList.add('theme-transitioning'); + + if (newTheme === 'dark') { + html.classList.add('dark'); + html.style.colorScheme = 'dark'; + } else { + html.classList.remove('dark'); + html.style.colorScheme = 'light'; + } + + // 短暂延迟后移除过渡禁用类,恢复平滑过渡 + setTimeout(() => { + html.classList.remove('theme-transitioning'); + }, 50); + }); + }; + + // 切换主题(优化版本) + const toggleTheme = () => { + const themes = ['light', 'dark']; + const currentIndex = themes.indexOf(theme.value); + const nextIndex = (currentIndex + 1) % themes.length; + const nextTheme = themes[nextIndex]; + + // 立即更新状态 + theme.value = nextTheme; + + // 异步保存到 localStorage,不阻塞 UI + if (window.requestIdleCallback) { + requestIdleCallback(() => { + localStorage.setItem('theme', nextTheme); + }, { timeout: 100 }); + } else { + // 回退方案:使用 setTimeout + setTimeout(() => { + localStorage.setItem('theme', nextTheme); + }, 0); + } + + // 立即应用主题 + applyTheme(nextTheme); + + // 延迟显示提示,避免阻塞主题切换 + const themeNames = { + 'light': '浅色模式', + 'dark': '深色模式' + }; + setTimeout(() => { + showAlert(`已切换到${themeNames[nextTheme]}`, 'info'); + }, 100); + }; + + // 获取主题图标 + const getThemeIcon = () => { + const iconMap = { + 'light': 'fas fa-sun', + 'dark': 'fas fa-moon' + }; + return iconMap[theme.value] || 'fas fa-moon'; + }; + + // 不需要认证的API调用(用于获取模版数据) + const publicApiCall = async (endpoint, options = {}) => { + const url = `${endpoint}`; + const headers = { + 'Content-Type': 'application/json', + ...options.headers + }; + + const response = await fetch(url, { + ...options, + headers + }); + + if (response.status === 400) { + const error = await response.json(); + showAlert(error.message, 'danger'); + throw new Error(error.message); + } + + // 添加50ms延迟,防止触发服务端频率限制 + await new Promise(resolve => setTimeout(resolve, 50)); + + return response; + }; + + // 获取精选模版数据 + const loadFeaturedTemplates = async (forceRefresh = false) => { + try { + featuredTemplatesLoading.value = true; + + // 构建缓存键 + const cacheKey = `featured_templates_cache`; + + if (!forceRefresh) { + const cachedData = loadFromCache(cacheKey, TEMPLATES_CACHE_EXPIRY); + if (cachedData && cachedData.templates) { + console.log('从缓存加载精选模版数据:', cachedData.templates.length, '个'); + featuredTemplates.value = cachedData.templates; + featuredTemplatesLoading.value = false; + return; + } + } + + // 从API获取精选模版数据(不需要认证) + const params = new URLSearchParams(); + params.append('category', '精选'); + params.append('page_size', '50'); // 获取更多数据用于随机选择 + + const apiUrl = `/api/v1/template/tasks?${params.toString()}`; + const response = await publicApiCall(apiUrl); + + if (response.ok) { + const data = await response.json(); + const templates = data.templates || []; + + // 缓存数据 + saveToCache(cacheKey, { + templates: templates, + timestamp: Date.now() + }); + + featuredTemplates.value = templates; + console.log('成功加载精选模版数据:', templates.length, '个模版'); + } else { + console.warn('加载精选模版数据失败'); + featuredTemplates.value = []; + } + } catch (error) { + console.warn('加载精选模版数据失败:', error); + featuredTemplates.value = []; + } finally { + featuredTemplatesLoading.value = false; + } + }; + + // 获取随机精选模版 + const getRandomFeaturedTemplates = async (count = 10) => { + try { + featuredTemplatesLoading.value = true; + + // 如果当前没有数据,先加载 + if (featuredTemplates.value.length === 0) { + await loadFeaturedTemplates(); + } + + // 如果数据仍然为空,返回空数组 + if (featuredTemplates.value.length === 0) { + return []; + } + + // 随机选择指定数量的模版 + const shuffled = [...featuredTemplates.value].sort(() => 0.5 - Math.random()); + const randomTemplates = shuffled.slice(0, count); + + return randomTemplates; + } catch (error) { + console.error('获取随机精选模版失败:', error); + return []; + } finally { + featuredTemplatesLoading.value = false; + } + }; + const removeTtsHistoryEntry = (entryId) => { + if (!entryId) return; + const currentHistory = loadTtsHistory().filter(entry => entry.id !== entryId); + saveTtsHistory(currentHistory); + }; + + const loadTtsHistory = () => { + try { + const stored = localStorage.getItem('ttsHistory'); + if (!stored) return []; + const parsed = JSON.parse(stored); + ttsHistory.value = Array.isArray(parsed) ? parsed : []; + return ttsHistory.value; + } catch (error) { + console.error('加载TTS历史失败:', error); + ttsHistory.value = []; + return []; + } + }; + + const saveTtsHistory = (historyList) => { + try { + localStorage.setItem('ttsHistory', JSON.stringify(historyList)); + ttsHistory.value = historyList; + } catch (error) { + console.error('保存TTS历史失败:', error); + } + }; + + const addTtsHistoryEntry = (text = '', instruction = '') => { + const trimmedText = (text || '').trim(); + const trimmedInstruction = (instruction || '').trim(); + + if (!trimmedText && !trimmedInstruction) { + return; + } + + const currentHistory = loadTtsHistory(); + + const existingIndex = currentHistory.findIndex(entry => + entry.text === trimmedText && entry.instruction === trimmedInstruction + ); + + const timestamp = new Date().toISOString(); + + if (existingIndex !== -1) { + const existingEntry = currentHistory.splice(existingIndex, 1)[0]; + existingEntry.timestamp = timestamp; + currentHistory.unshift(existingEntry); + } else { + currentHistory.unshift({ + id: Date.now(), + text: trimmedText, + instruction: trimmedInstruction, + timestamp + }); + } + + if (currentHistory.length > 20) { + currentHistory.length = 20; + } + + saveTtsHistory(currentHistory); + }; + + const clearTtsHistory = () => { + ttsHistory.value = []; + localStorage.removeItem('ttsHistory'); + }; + +export { + // 任务类型下拉菜单 + showTaskTypeMenu, + showModelMenu, + isLoggedIn, + loading, + loginLoading, + initLoading, + downloadLoading, + downloadLoadingMessage, + isLoading, + isPageLoading, + + // 录音相关 + isRecording, + recordingDuration, + startRecording, + stopRecording, + formatRecordingDuration, + + loginWithGitHub, + loginWithGoogle, + // 短信登录相关 + phoneNumber, + verifyCode, + smsCountdown, + showSmsForm, + sendSmsCode, + loginWithSms, + handlePhoneEnter, + handleVerifyCodeEnter, + toggleSmsLogin, + submitting, + templateLoading, + templateLoadingMessage, + taskSearchQuery, + currentUser, + models, + tasks, + alert, + showErrorDetails, + showFailureDetails, + confirmDialog, + showConfirmDialog, + showTaskDetailModal, + modalTask, + showVoiceTTSModal, + showPodcastModal, + currentTask, + t2vForm, + i2vForm, + s2vForm, + getCurrentForm, + i2vImagePreview, + s2vImagePreview, + s2vAudioPreview, + getCurrentImagePreview, + getCurrentAudioPreview, + getCurrentVideoPreview, + setCurrentImagePreview, + setCurrentAudioPreview, + setCurrentVideoPreview, + updateUploadedContentStatus, + availableTaskTypes, + availableModelClasses, + currentTaskHints, + currentHintIndex, + startHintRotation, + stopHintRotation, + filteredTasks, + selectedTaskId, + selectedTask, + selectedModel, + selectedTaskFiles, + loadingTaskFiles, + statusFilter, + pagination, + paginationInfo, + currentTaskPage, + taskPageSize, + taskPageInput, + paginationKey, + taskMenuVisible, + toggleTaskMenu, + closeAllTaskMenus, + handleClickOutside, + showAlert, + setLoading, + apiCall, + logout, + login, + loadModels, + sidebarCollapsed, + sidebarWidth, + showExpandHint, + showGlow, + isDefaultStateHidden, + hideDefaultState, + showDefaultState, + isCreationAreaExpanded, + hasUploadedContent, + isContracting, + expandCreationArea, + contractCreationArea, + taskFileCache, + taskFileCacheLoaded, + templateFileCache, + templateFileCacheLoaded, + loadTaskFiles, + downloadFile, + handleDownloadFile, + viewFile, + handleImageUpload, + detectFacesInImage, + faceDetecting, + audioSeparating, + cropFaceImage, + updateFaceRoleName, + toggleFaceEditing, + saveFaceRoleName, + selectTask, + selectModel, + resetForm, + triggerImageUpload, + triggerAudioUpload, + removeImage, + removeAudio, + removeVideo, + handleAudioUpload, + handleVideoUpload, + separateAudioTracks, + updateSeparatedAudioRole, + updateSeparatedAudioName, + toggleSeparatedAudioEditing, + saveSeparatedAudioName, + loadImageAudioTemplates, + selectImageTemplate, + selectAudioTemplate, + previewAudioTemplate, + stopAudioPlayback, + setAudioStopCallback, + getTemplateFile, + imageTemplates, + audioTemplates, + mergedTemplates, + showImageTemplates, + showAudioTemplates, + mediaModalTab, + templatePagination, + templatePaginationInfo, + templateCurrentPage, + templatePageSize, + templatePageInput, + templatePaginationKey, + imageHistory, + audioHistory, + showTemplates, + showHistory, + showPromptModal, + promptModalTab, + submitTask, + fileToBase64, + formatTime, + refreshTasks, + goToPage, + jumpToPage, + getVisiblePages, + goToTemplatePage, + jumpToTemplatePage, + getVisibleTemplatePages, + goToInspirationPage, + jumpToInspirationPage, + getVisibleInspirationPages, + preloadTaskFilesUrl, + preloadTemplateFilesUrl, + loadTaskFilesFromCache, + saveTaskFilesToCache, + getTaskFileFromCache, + setTaskFileToCache, + getTaskFileUrlFromApi, + getTaskFileUrlSync, + // Podcast 音频缓存 + podcastAudioCache, + podcastAudioCacheLoaded, + loadPodcastAudioFromCache, + savePodcastAudioToCache, + getPodcastAudioFromCache, + setPodcastAudioToCache, + getPodcastAudioUrlFromApi, + getTemplateFileUrlFromApi, + getTemplateFileUrl, + getTemplateFileUrlAsync, + createTemplateFileUrlRef, + createTaskFileUrlRef, + loadTemplateFilesFromCache, + saveTemplateFilesToCache, + loadFromCache, + saveToCache, + clearAllCache, + getStatusBadgeClass, + viewSingleResult, + cancelTask, + resumeTask, + deleteTask, + startPollingTask, + stopPollingTask, + reuseTask, + showTaskCreator, + toggleSidebar, + clearPrompt, + getTaskItemClass, + getStatusIndicatorClass, + getTaskTypeBtnClass, + getModelBtnClass, + getTaskTypeIcon, + getTaskTypeName, + getPromptPlaceholder, + getStatusTextClass, + getImagePreview, + getTaskInputUrl, + getTaskInputImage, + getTaskInputAudio, + getTaskFileUrl, + getHistoryImageUrl, + getUserAvatarUrl, + getCurrentImagePreviewUrl, + getCurrentAudioPreviewUrl, + getCurrentVideoPreviewUrl, + handleThumbnailError, + handleImageError, + handleImageLoad, + handleAudioError, + handleAudioLoad, + getTaskStatusDisplay, + getTaskStatusColor, + getTaskStatusIcon, + getTaskDuration, + getRelativeTime, + getTaskHistory, + getActiveTasks, + getOverallProgress, + getProgressTitle, + getProgressInfo, + getSubtaskProgress, + getSubtaskStatusText, + formatEstimatedTime, + formatDuration, + searchTasks, + filterTasksByStatus, + filterTasksByType, + getAlertClass, + getAlertBorderClass, + getAlertTextClass, + getAlertIcon, + getAlertIconBgClass, + getPromptTemplates, + selectPromptTemplate, + promptHistory, + getPromptHistory, + addTaskToHistory, + getLocalTaskHistory, + selectPromptHistory, + clearPromptHistory, + getImageHistory, + getAudioHistory, + selectImageHistory, + selectAudioHistory, + previewAudioHistory, + clearImageHistory, + clearAudioHistory, + clearLocalStorage, + getAudioMimeType, + getAuthHeaders, + startResize, + sidebar, + switchToCreateView, + switchToProjectsView, + switchToInspirationView, + switchToLoginView, + openTaskDetailModal, + closeTaskDetailModal, + generateShareUrl, + copyShareLink, + shareToSocial, + openTaskFromRoute, + generateTemplateShareUrl, + copyTemplateShareLink, + shareTemplateToSocial, + openTemplateFromRoute, + // 灵感广场相关 + inspirationSearchQuery, + selectedInspirationCategory, + inspirationItems, + InspirationCategories, + loadInspirationData, + selectInspirationCategory, + handleInspirationSearch, + loadMoreInspiration, + inspirationPagination, + inspirationPaginationInfo, + // 精选模版相关 + featuredTemplates, + featuredTemplatesLoading, + loadFeaturedTemplates, + getRandomFeaturedTemplates, + inspirationCurrentPage, + inspirationPageSize, + inspirationPageInput, + inspirationPaginationKey, + // 工具函数 + formatDate, + // 模板详情弹窗相关 + showTemplateDetailModal, + selectedTemplate, + previewTemplateDetail, + closeTemplateDetailModal, + useTemplate, + // 图片放大弹窗相关 + showImageZoomModal, + zoomedImageUrl, + showImageZoom, + closeImageZoomModal, + // 模板素材应用相关 + applyTemplateImage, + applyTemplateAudio, + applyTemplatePrompt, + copyPrompt, + // 视频播放控制 + playVideo, + pauseVideo, + toggleVideoPlay, + pauseAllVideos, + updateVideoIcon, + onVideoLoaded, + onVideoError, + onVideoEnded, + applyMobileStyles, + handleLoginCallback, + init, + validateToken, + pollingInterval, + pollingTasks, + apiRequest, + // 主题相关 + theme, + initTheme, + toggleTheme, + getThemeIcon, + loadTtsHistory, + removeTtsHistoryEntry, + ttsHistory, + addTtsHistoryEntry, + saveTtsHistory, + clearTtsHistory, + }; diff --git a/lightx2v/deploy/server/frontend/src/views/404.vue b/lightx2v/deploy/server/frontend/src/views/404.vue new file mode 100644 index 0000000..a868dbe --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/views/404.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/views/Layout.vue b/lightx2v/deploy/server/frontend/src/views/Layout.vue new file mode 100644 index 0000000..e6044d1 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/views/Layout.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/views/Login.vue b/lightx2v/deploy/server/frontend/src/views/Login.vue new file mode 100644 index 0000000..d73f74f --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/views/Login.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/views/PodcastGenerate.vue b/lightx2v/deploy/server/frontend/src/views/PodcastGenerate.vue new file mode 100644 index 0000000..eee9da8 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/views/PodcastGenerate.vue @@ -0,0 +1,3893 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/src/views/Share.vue b/lightx2v/deploy/server/frontend/src/views/Share.vue new file mode 100644 index 0000000..189da49 --- /dev/null +++ b/lightx2v/deploy/server/frontend/src/views/Share.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/lightx2v/deploy/server/frontend/vite.config.js b/lightx2v/deploy/server/frontend/vite.config.js new file mode 100644 index 0000000..4815a12 --- /dev/null +++ b/lightx2v/deploy/server/frontend/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import tailwindcss from '@tailwindcss/vite' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [vue(), tailwindcss()], +}) diff --git a/lightx2v/deploy/server/metrics.py b/lightx2v/deploy/server/metrics.py new file mode 100644 index 0000000..62ad629 --- /dev/null +++ b/lightx2v/deploy/server/metrics.py @@ -0,0 +1,65 @@ +from loguru import logger +from prometheus_client import Counter, Gauge, Summary, generate_latest +from prometheus_client.core import CollectorRegistry + +from lightx2v.deploy.task_manager import ActiveStatus, FinishedStatus, TaskStatus + +REGISTRY = CollectorRegistry() + + +class MetricMonitor: + def __init__(self): + self.task_all = Counter("task_all_total", "Total count of all tasks", ["task_type", "model_cls", "stage"], registry=REGISTRY) + self.task_end = Counter("task_end_total", "Total count of ended tasks", ["task_type", "model_cls", "stage", "status"], registry=REGISTRY) + self.task_active = Gauge("task_active_size", "Current count of active tasks", ["task_type", "model_cls", "stage"], registry=REGISTRY) + self.task_elapse = Summary("task_elapse_seconds", "Elapse time of tasks", ["task_type", "model_cls", "stage", "end_status"], registry=REGISTRY) + self.subtask_all = Counter("subtask_all_total", "Total count of all subtasks", ["queue"], registry=REGISTRY) + self.subtask_end = Counter("subtask_end_total", "Total count of ended subtasks", ["queue", "status"], registry=REGISTRY) + self.subtask_active = Gauge("subtask_active_size", "Current count of active subtasks", ["queue", "status"], registry=REGISTRY) + self.subtask_elapse = Summary("subtask_elapse_seconds", "Elapse time of subtasks", ["queue", "elapse_key"], registry=REGISTRY) + + def record_task_start(self, task): + self.task_all.labels(task["task_type"], task["model_cls"], task["stage"]).inc() + self.task_active.labels(task["task_type"], task["model_cls"], task["stage"]).inc() + logger.info(f"Metrics task_all + 1, task_active +1") + + def record_task_end(self, task, status, elapse): + self.task_end.labels(task["task_type"], task["model_cls"], task["stage"], status.name).inc() + self.task_active.labels(task["task_type"], task["model_cls"], task["stage"]).dec() + self.task_elapse.labels(task["task_type"], task["model_cls"], task["stage"], status.name).observe(elapse) + logger.info(f"Metrics task_end + 1, task_active -1, task_elapse observe {elapse}") + + def record_subtask_change(self, subtask, old_status, new_status, elapse_key, elapse): + if old_status in ActiveStatus and new_status in FinishedStatus: + self.subtask_end.labels(subtask["queue"], elapse_key).inc() + logger.info(f"Metrics subtask_end + 1") + if old_status in ActiveStatus: + self.subtask_active.labels(subtask["queue"], old_status.name).dec() + logger.info(f"Metrics subtask_active {old_status.name} -1") + if new_status in ActiveStatus: + self.subtask_active.labels(subtask["queue"], new_status.name).inc() + logger.info(f"Metrics subtask_active {new_status.name} + 1") + if new_status == TaskStatus.CREATED: + self.subtask_all.labels(subtask["queue"]).inc() + logger.info(f"Metrics subtask_all + 1") + if elapse and elapse_key: + self.subtask_elapse.labels(subtask["queue"], elapse_key).observe(elapse) + logger.info(f"Metrics subtask_elapse observe {elapse}") + + # restart server, we should recover active tasks in data_manager + def record_task_recover(self, tasks): + for task in tasks: + if task["status"] in ActiveStatus: + self.record_task_start(task) + + # restart server, we should recover active tasks in data_manager + def record_subtask_recover(self, subtasks): + for subtask in subtasks: + if subtask["status"] in ActiveStatus: + self.subtask_all.labels(subtask["queue"]).inc() + self.subtask_active.labels(subtask["queue"], subtask["status"].name).inc() + logger.info(f"Metrics subtask_active {subtask['status'].name} + 1") + logger.info(f"Metrics subtask_all + 1") + + def get_metrics(self): + return generate_latest(REGISTRY) diff --git a/lightx2v/deploy/server/monitor.py b/lightx2v/deploy/server/monitor.py new file mode 100644 index 0000000..ae65280 --- /dev/null +++ b/lightx2v/deploy/server/monitor.py @@ -0,0 +1,375 @@ +import asyncio +import time +from enum import Enum + +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.task_manager import TaskStatus + + +class WorkerStatus(Enum): + FETCHING = 1 + FETCHED = 2 + DISCONNECT = 3 + REPORT = 4 + PING = 5 + + +class CostWindow: + def __init__(self, window): + self.window = window + self.costs = [] + self.avg = None + + def append(self, cost): + self.costs.append(cost) + if len(self.costs) > self.window: + self.costs.pop(0) + self.avg = sum(self.costs) / len(self.costs) + + +class WorkerClient: + def __init__(self, queue, identity, infer_timeout, offline_timeout, avg_window, ping_timeout, fetching_timeout): + self.queue = queue + self.identity = identity + self.status = None + self.update_t = time.time() + self.fetched_t = None + self.infer_cost = CostWindow(avg_window) + self.offline_cost = CostWindow(avg_window) + self.infer_timeout = infer_timeout + self.offline_timeout = offline_timeout + self.ping_timeout = ping_timeout + self.fetching_timeout = fetching_timeout + + # FETCHING -> FETCHED -> PING * n -> REPORT -> FETCHING + # FETCHING -> DISCONNECT -> FETCHING + def update(self, status: WorkerStatus): + pre_status = self.status + pre_t = self.update_t + self.status = status + self.update_t = time.time() + + if status == WorkerStatus.FETCHING: + if pre_status in [WorkerStatus.DISCONNECT, WorkerStatus.REPORT] and pre_t is not None: + cur_cost = self.update_t - pre_t + if cur_cost < self.offline_timeout: + self.offline_cost.append(max(cur_cost, 1)) + + elif status == WorkerStatus.REPORT: + if self.fetched_t is not None: + cur_cost = self.update_t - self.fetched_t + self.fetched_t = None + if cur_cost < self.infer_timeout: + self.infer_cost.append(max(cur_cost, 1)) + logger.info(f"Worker {self.identity} {self.queue} avg infer cost update: {self.infer_cost.avg:.2f} s") + + elif status == WorkerStatus.FETCHED: + self.fetched_t = time.time() + + def check(self): + # infer too long + if self.fetched_t is not None: + elapse = time.time() - self.fetched_t + if self.infer_cost.avg is not None and elapse > self.infer_cost.avg * 5: + logger.warning(f"Worker {self.identity} {self.queue} infer timeout: {elapse:.2f} s") + return False + if elapse > self.infer_timeout: + logger.warning(f"Worker {self.identity} {self.queue} infer timeout2: {elapse:.2f} s") + return False + + elapse = time.time() - self.update_t + # no ping too long + if self.status in [WorkerStatus.FETCHED, WorkerStatus.PING]: + if elapse > self.ping_timeout: + logger.warning(f"Worker {self.identity} {self.queue} ping timeout: {elapse:.2f} s") + return False + # offline too long + elif self.status in [WorkerStatus.DISCONNECT, WorkerStatus.REPORT]: + if self.offline_cost.avg is not None and elapse > self.offline_cost.avg * 5: + logger.warning(f"Worker {self.identity} {self.queue} offline timeout: {elapse:.2f} s") + return False + if elapse > self.offline_timeout: + logger.warning(f"Worker {self.identity} {self.queue} offline timeout2: {elapse:.2f} s") + return False + # fetching too long + elif self.status == WorkerStatus.FETCHING: + if elapse > self.fetching_timeout: + logger.warning(f"Worker {self.identity} {self.queue} fetching timeout: {elapse:.2f} s") + return False + return True + + +class ServerMonitor: + def __init__(self, model_pipelines, task_manager, queue_manager): + self.model_pipelines = model_pipelines + self.task_manager = task_manager + self.queue_manager = queue_manager + self.stop = False + self.worker_clients = {} + self.subtask_run_timeouts = {} + self.pending_subtasks = {} + + self.all_queues = self.model_pipelines.get_queues() + self.config = self.model_pipelines.get_monitor_config() + self.interval = self.config.get("monitor_interval", 30) + self.fetching_timeout = self.config.get("fetching_timeout", 1000) + + for queue in self.all_queues: + self.subtask_run_timeouts[queue] = self.config["subtask_running_timeouts"].get(queue, 3600) + self.subtask_created_timeout = self.config["subtask_created_timeout"] + self.subtask_pending_timeout = self.config["subtask_pending_timeout"] + self.worker_avg_window = self.config["worker_avg_window"] + self.worker_offline_timeout = self.config["worker_offline_timeout"] + self.worker_min_capacity = self.config["worker_min_capacity"] + self.task_timeout = self.config["task_timeout"] + self.ping_timeout = self.config["ping_timeout"] + + self.user_visits = {} # user_id -> last_visit_t + self.user_max_active_tasks = self.config["user_max_active_tasks"] + self.user_max_daily_tasks = self.config["user_max_daily_tasks"] + self.user_visit_frequency = self.config["user_visit_frequency"] + + assert self.worker_avg_window > 0 + assert self.worker_offline_timeout > 0 + assert self.worker_min_capacity > 0 + assert self.task_timeout > 0 + assert self.ping_timeout > 0 + assert self.user_max_active_tasks > 0 + assert self.user_max_daily_tasks > 0 + assert self.user_visit_frequency > 0 + + async def init(self): + await self.init_pending_subtasks() + + async def loop(self): + while True: + if self.stop: + break + await self.clean_workers() + await self.clean_subtasks() + await asyncio.sleep(self.interval) + logger.info("ServerMonitor stopped") + + async def close(self): + self.stop = True + self.model_pipelines = None + self.task_manager = None + self.queue_manager = None + self.worker_clients = None + + def init_worker(self, queue, identity): + if queue not in self.worker_clients: + self.worker_clients[queue] = {} + if identity not in self.worker_clients[queue]: + infer_timeout = self.subtask_run_timeouts[queue] + self.worker_clients[queue][identity] = WorkerClient(queue, identity, infer_timeout, self.worker_offline_timeout, self.worker_avg_window, self.ping_timeout, self.fetching_timeout) + return self.worker_clients[queue][identity] + + @class_try_catch_async + async def worker_update(self, queue, identity, status): + worker = self.init_worker(queue, identity) + worker.update(status) + logger.info(f"Worker {identity} {queue} update [{status}]") + + @class_try_catch_async + async def clean_workers(self): + qs = list(self.worker_clients.keys()) + for queue in qs: + idens = list(self.worker_clients[queue].keys()) + for identity in idens: + if not self.worker_clients[queue][identity].check(): + self.worker_clients[queue].pop(identity) + logger.warning(f"Worker {queue} {identity} out of contact removed, remain {self.worker_clients[queue]}") + + @class_try_catch_async + async def clean_subtasks(self): + created_end_t = time.time() - self.subtask_created_timeout + pending_end_t = time.time() - self.subtask_pending_timeout + ping_end_t = time.time() - self.ping_timeout + fails = set() + + created_tasks = await self.task_manager.list_tasks(status=TaskStatus.CREATED, subtasks=True, end_updated_t=created_end_t) + pending_tasks = await self.task_manager.list_tasks(status=TaskStatus.PENDING, subtasks=True, end_updated_t=pending_end_t) + + def fmt_subtask(t): + return f"({t['task_id']}, {t['worker_name']}, {t['queue']}, {t['worker_identity']})" + + for t in created_tasks + pending_tasks: + if t["task_id"] in fails: + continue + elapse = time.time() - t["update_t"] + logger.warning(f"Subtask {fmt_subtask(t)} CREATED / PENDING timeout: {elapse:.2f} s") + await self.task_manager.finish_subtasks(t["task_id"], TaskStatus.FAILED, worker_name=t["worker_name"], fail_msg=f"CREATED / PENDING timeout: {elapse:.2f} s") + fails.add(t["task_id"]) + + running_tasks = await self.task_manager.list_tasks(status=TaskStatus.RUNNING, subtasks=True) + + for t in running_tasks: + if t["task_id"] in fails: + continue + if t["ping_t"] > 0: + ping_elapse = time.time() - t["ping_t"] + if ping_elapse >= self.ping_timeout: + logger.warning(f"Subtask {fmt_subtask(t)} PING timeout: {ping_elapse:.2f} s") + await self.task_manager.finish_subtasks(t["task_id"], TaskStatus.FAILED, worker_name=t["worker_name"], fail_msg=f"PING timeout: {ping_elapse:.2f} s") + fails.add(t["task_id"]) + elapse = time.time() - t["update_t"] + limit = self.subtask_run_timeouts[t["queue"]] + if elapse >= limit: + logger.warning(f"Subtask {fmt_subtask(t)} RUNNING timeout: {elapse:.2f} s") + await self.task_manager.finish_subtasks(t["task_id"], TaskStatus.FAILED, worker_name=t["worker_name"], fail_msg=f"RUNNING timeout: {elapse:.2f} s") + fails.add(t["task_id"]) + + @class_try_catch_async + async def get_avg_worker_infer_cost(self, queue): + if queue not in self.worker_clients: + self.worker_clients[queue] = {} + infer_costs = [] + for _, client in self.worker_clients[queue].items(): + if client.infer_cost.avg is not None: + infer_costs.append(client.infer_cost.avg) + if len(infer_costs) <= 0: + return self.subtask_run_timeouts[queue] + return sum(infer_costs) / len(infer_costs) + + @class_try_catch_async + async def check_user_busy(self, user_id, active_new_task=False): + # check if user visit too frequently + cur_t = time.time() + if user_id in self.user_visits: + elapse = cur_t - self.user_visits[user_id] + if elapse <= self.user_visit_frequency: + return f"User {user_id} visit too frequently, {elapse:.2f} s vs {self.user_visit_frequency:.2f} s" + self.user_visits[user_id] = cur_t + + if active_new_task: + # check if user has too many active tasks + active_statuses = [TaskStatus.RUNNING, TaskStatus.PENDING, TaskStatus.CREATED] + active_tasks = await self.task_manager.list_tasks(status=active_statuses, user_id=user_id) + if len(active_tasks) >= self.user_max_active_tasks: + return f"User {user_id} has too many active tasks, {len(active_tasks)} vs {self.user_max_active_tasks}" + + # check if user has too many daily tasks + daily_statuses = active_statuses + [TaskStatus.SUCCEED, TaskStatus.CANCEL, TaskStatus.FAILED] + daily_tasks = await self.task_manager.list_tasks(status=daily_statuses, user_id=user_id, start_created_t=cur_t - 86400, include_delete=True) + if len(daily_tasks) >= self.user_max_daily_tasks: + return f"User {user_id} has too many daily tasks, {len(daily_tasks)} vs {self.user_max_daily_tasks}" + + return True + + # check if a task can be published to queues + @class_try_catch_async + async def check_queue_busy(self, keys, queues): + wait_time = 0 + + for queue in queues: + avg_cost = await self.get_avg_worker_infer_cost(queue) + worker_cnt = await self.get_ready_worker_count(queue) + subtask_pending = await self.queue_manager.pending_num(queue) + capacity = self.task_timeout * max(worker_cnt, 1) // avg_cost + capacity = max(self.worker_min_capacity, capacity) + + if subtask_pending >= capacity: + ss = f"pending={subtask_pending}, capacity={capacity}" + logger.warning(f"Queue {queue} busy, {ss}, task {keys} cannot be publised!") + return None + wait_time += avg_cost * subtask_pending / max(worker_cnt, 1) + return wait_time + + @class_try_catch_async + async def init_pending_subtasks(self): + # query all pending subtasks in task_manager + subtasks = {} + rows = await self.task_manager.list_tasks(status=TaskStatus.PENDING, subtasks=True, sort_by_update_t=True) + for row in rows: + if row["queue"] not in subtasks: + subtasks[row["queue"]] = [] + subtasks[row["queue"]].append(row["task_id"]) + for queue in self.all_queues: + if queue not in subtasks: + subtasks[queue] = [] + + # self.pending_subtasks = {queue: {"consume_count": int, "max_count": int, subtasks: {task_id: order}} + for queue, task_ids in subtasks.items(): + pending_num = await self.queue_manager.pending_num(queue) + self.pending_subtasks[queue] = {"consume_count": 0, "max_count": pending_num, "subtasks": {}} + for i, task_id in enumerate(task_ids): + self.pending_subtasks[queue]["subtasks"][task_id] = max(pending_num - i, 1) + logger.info(f"Init pending subtasks: {self.pending_subtasks}") + + @class_try_catch_async + async def pending_subtasks_add(self, queue, task_id): + if queue not in self.pending_subtasks: + logger.warning(f"Queue {queue} not found in self.pending_subtasks") + return + max_count = self.pending_subtasks[queue]["max_count"] + self.pending_subtasks[queue]["subtasks"][task_id] = max_count + 1 + self.pending_subtasks[queue]["max_count"] = max_count + 1 + # logger.warning(f"Pending subtasks {queue} add {task_id}: {self.pending_subtasks[queue]}") + + @class_try_catch_async + async def pending_subtasks_sub(self, queue, task_id): + if queue not in self.pending_subtasks: + logger.warning(f"Queue {queue} not found in self.pending_subtasks") + return + self.pending_subtasks[queue]["consume_count"] += 1 + if task_id in self.pending_subtasks[queue]["subtasks"]: + self.pending_subtasks[queue]["subtasks"].pop(task_id) + # logger.warning(f"Pending subtasks {queue} sub {task_id}: {self.pending_subtasks[queue]}") + + @class_try_catch_async + async def pending_subtasks_get_order(self, queue, task_id): + if queue not in self.pending_subtasks: + logger.warning(f"Queue {queue} not found in self.pending_subtasks") + return None + if task_id not in self.pending_subtasks[queue]["subtasks"]: + logger.warning(f"Task {task_id} not found in self.pending_subtasks[queue]['subtasks']") + return None + order = self.pending_subtasks[queue]["subtasks"][task_id] + consume = self.pending_subtasks[queue]["consume_count"] + real_order = max(order - consume, 1) + # logger.warning(f"Pending subtasks {queue} get order {task_id}: real={real_order} order={order} consume={consume}") + return real_order + + @class_try_catch_async + async def get_ready_worker_count(self, queue): + if queue not in self.worker_clients: + self.worker_clients[queue] = {} + return len(self.worker_clients[queue]) + + @class_try_catch_async + async def format_subtask(self, subtasks): + ret = [] + for sub in subtasks: + cur = { + "status": sub["status"].name, + "worker_name": sub["worker_name"], + "fail_msg": None, + "elapses": {}, + "estimated_pending_order": None, + "estimated_pending_secs": None, + "estimated_running_secs": None, + "ready_worker_count": None, + } + if sub["status"] in [TaskStatus.PENDING, TaskStatus.RUNNING]: + cur["estimated_running_secs"] = await self.get_avg_worker_infer_cost(sub["queue"]) + cur["ready_worker_count"] = await self.get_ready_worker_count(sub["queue"]) + if sub["status"] == TaskStatus.PENDING: + order = await self.pending_subtasks_get_order(sub["queue"], sub["task_id"]) + worker_count = max(cur["ready_worker_count"], 1e-7) + if order is not None: + cur["estimated_pending_order"] = order + wait_cycle = (order - 1) // worker_count + 1 + cur["estimated_pending_secs"] = cur["estimated_running_secs"] * wait_cycle + + if isinstance(sub["extra_info"], dict): + if "elapses" in sub["extra_info"]: + cur["elapses"] = sub["extra_info"]["elapses"] + if "start_t" in sub["extra_info"]: + cur["elapses"][f"{cur['status']}-"] = time.time() - sub["extra_info"]["start_t"] + if "fail_msg" in sub["extra_info"]: + cur["fail_msg"] = sub["extra_info"]["fail_msg"] + ret.append(cur) + return ret diff --git a/lightx2v/deploy/server/redis_client.py b/lightx2v/deploy/server/redis_client.py new file mode 100644 index 0000000..52808a4 --- /dev/null +++ b/lightx2v/deploy/server/redis_client.py @@ -0,0 +1,247 @@ +import asyncio +import json +import traceback + +from loguru import logger +from redis import asyncio as aioredis + +from lightx2v.deploy.common.utils import class_try_catch_async + + +class RedisClient: + def __init__(self, redis_url, retry_times=3): + self.redis_url = redis_url + self.client = None + self.retry_times = retry_times + self.base_key = "lightx2v" + self.init_scriptss() + + def init_scriptss(self): + self.script_create_if_not_exists = """ + local key = KEYS[1] + local data_json = ARGV[1] + if redis.call('EXISTS', key) == 0 then + local data = cjson.decode(data_json) + for field, value in pairs(data) do + redis.call('HSET', key, field, value) + end + return 1 + else + return 0 + end + """ + self.script_increment_and_get = """ + local key = KEYS[1] + local field = ARGV[1] + local diff = tonumber(ARGV[2]) + local new_value = redis.call('HINCRBY', key, field, diff) + return new_value + """ + self.script_correct_pending_info = """ + local key = KEYS[1] + local pending_num = tonumber(ARGV[1]) + if redis.call('EXISTS', key) ~= 0 then + local consume_count = redis.call('HGET', key, 'consume_count') + local max_count = redis.call('HGET', key, 'max_count') + local redis_pending = tonumber(max_count) - tonumber(consume_count) + if redis_pending > pending_num then + redis.call('HINCRBY', key, 'consume_count', redis_pending - pending_num) + return 'consume_count added ' .. (redis_pending - pending_num) + end + if redis_pending < pending_num then + redis.call('HINCRBY', key, 'max_count', pending_num - redis_pending) + return 'max_count added ' .. (pending_num - redis_pending) + end + return 'pending equal ' .. pending_num .. ' vs ' .. redis_pending + else + return 'key not exists' + end + """ + self.script_list_push = """ + local key = KEYS[1] + local value = ARGV[1] + local limit = tonumber(ARGV[2]) + redis.call('LPUSH', key, value) + redis.call('LTRIM', key, 0, limit) + return 1 + """ + self.script_list_avg = """ + local key = KEYS[1] + local limit = tonumber(ARGV[1]) + local values = redis.call('LRANGE', key, 0, limit) + local sum = 0.0 + local count = 0.0 + for _, value in ipairs(values) do + sum = sum + tonumber(value) + count = count + 1 + end + if count == 0 then + return "-1" + end + return tostring(sum / count) + """ + + async def init(self): + for i in range(self.retry_times): + try: + self.client = aioredis.Redis.from_url(self.redis_url, protocol=3) + ret = await self.client.ping() + logger.info(f"Redis connection initialized, ping: {ret}") + assert ret, "Redis connection failed" + break + except Exception: + logger.warning(f"Redis connection failed, retry {i + 1}/{self.retry_times}: {traceback.format_exc()}") + await asyncio.sleep(1) + + def fmt_key(self, key): + return f"{self.base_key}:{key}" + + @class_try_catch_async + async def correct_pending_info(self, key, pending_num): + key = self.fmt_key(key) + script = self.client.register_script(self.script_correct_pending_info) + result = await script(keys=[key], args=[pending_num]) + logger.warning(f"Redis correct pending info {key} with {pending_num}: {result}") + return result + + @class_try_catch_async + async def create_if_not_exists(self, key, value): + key = self.fmt_key(key) + script = self.client.register_script(self.script_create_if_not_exists) + result = await script(keys=[key], args=[json.dumps(value)]) + if result == 1: + logger.info(f"Redis key '{key}' created successfully.") + else: + logger.warning(f"Redis key '{key}' already exists, not set.") + + @class_try_catch_async + async def increment_and_get(self, key, field, diff): + key = self.fmt_key(key) + script = self.client.register_script(self.script_increment_and_get) + result = await script(keys=[key], args=[field, diff]) + return result + + @class_try_catch_async + async def hset(self, key, field, value): + key = self.fmt_key(key) + return await self.client.hset(key, field, value) + + @class_try_catch_async + async def hget(self, key, field): + key = self.fmt_key(key) + result = await self.client.hget(key, field) + return result + + @class_try_catch_async + async def hgetall(self, key): + key = self.fmt_key(key) + result = await self.client.hgetall(key) + return result + + @class_try_catch_async + async def hdel(self, key, field): + key = self.fmt_key(key) + return await self.client.hdel(key, field) + + @class_try_catch_async + async def hlen(self, key): + key = self.fmt_key(key) + result = await self.client.hlen(key) + return result + + @class_try_catch_async + async def set(self, key, value, nx=False): + key = self.fmt_key(key) + result = await self.client.set(key, value, nx=nx) + if result is not True: + logger.warning(f"redis set {key} = {value} failed") + return result + + @class_try_catch_async + async def get(self, key): + key = self.fmt_key(key) + result = await self.client.get(key) + return result + + @class_try_catch_async + async def delete_key(self, key): + key = self.fmt_key(key) + return await self.client.delete(key) + + @class_try_catch_async + async def list_push(self, key, value, limit): + key = self.fmt_key(key) + script = self.client.register_script(self.script_list_push) + result = await script(keys=[key], args=[value, limit]) + return result + + @class_try_catch_async + async def list_avg(self, key, limit): + key = self.fmt_key(key) + script = self.client.register_script(self.script_list_avg) + result = await script(keys=[key], args=[limit]) + return float(result) + + async def close(self): + try: + if self.client: + await self.client.aclose() + logger.info("Redis connection closed") + except Exception: + logger.warning(f"Error closing Redis connection: {traceback.format_exc()}") + + +async def main(): + redis_url = "redis://user:password@localhost:6379/1?decode_responses=True&socket_timeout=5" + r = RedisClient(redis_url) + await r.init() + + v1 = await r.set("test2", "1", nx=True) + logger.info(f"set test2=1: {v1}, {await r.get('test2')}") + v2 = await r.set("test2", "2", nx=True) + logger.info(f"set test2=2: {v2}, {await r.get('test2')}") + + await r.create_if_not_exists("test", {"a": 1, "b": 2}) + logger.info(f"create test: {await r.hgetall('test')}") + await r.create_if_not_exists("test", {"a": 2, "b": 3}) + logger.info(f"create test again: {await r.hgetall('test')}") + logger.info(f"hlen test: {await r.hlen('test')}") + + v = await r.increment_and_get("test", "a", 1) + logger.info(f"a+1: {v}, a={await r.hget('test', 'a')}") + v = await r.increment_and_get("test", "b", 3) + logger.info(f"b+3: {v}, b={await r.hget('test', 'b')}") + + await r.hset("test", "a", 233) + logger.info(f"set a=233: a={await r.hget('test', 'a')}") + await r.hset("test", "c", 456) + logger.info(f"set c=456: c={await r.hget('test', 'c')}") + logger.info(f"all: {await r.hgetall('test')}") + logger.info(f"hlen test: {await r.hlen('test')}") + logger.info(f"get unknown key: {await r.hget('test', 'unknown')}") + + await r.list_push("test_list", 1, 20) + logger.info(f"list push 1: {await r.list_avg('test_list', 20)}") + await r.list_push("test_list", 2, 20) + logger.info(f"list push 2: {await r.list_avg('test_list', 20)}") + await r.list_push("test_list", 3, 20) + logger.info(f"list push 3: {await r.list_avg('test_list', 20)}") + + await r.delete_key("test_list") + logger.info(f"delete test_list: {await r.list_avg('test_list', 20)}") + + await r.delete_key("test2") + logger.info(f"delete test2: {await r.get('test2')}") + + await r.hdel("test", "a") + logger.info(f"hdel test a: {await r.hgetall('test')}") + + await r.delete_key("test") + logger.info(f"delete test: {await r.hgetall('test')}") + logger.info(f"hlen test: {await r.hlen('test')}") + + await r.close() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/lightx2v/deploy/server/redis_monitor.py b/lightx2v/deploy/server/redis_monitor.py new file mode 100644 index 0000000..9298f55 --- /dev/null +++ b/lightx2v/deploy/server/redis_monitor.py @@ -0,0 +1,166 @@ +import asyncio +import json +import time + +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.server.monitor import ServerMonitor, WorkerStatus +from lightx2v.deploy.server.redis_client import RedisClient + + +class RedisServerMonitor(ServerMonitor): + def __init__(self, model_pipelines, task_manager, queue_manager, redis_url): + super().__init__(model_pipelines, task_manager, queue_manager) + self.redis_url = redis_url + self.redis_client = RedisClient(redis_url) + self.last_correct = None + self.correct_interval = 60 * 60 * 24 + + async def init(self): + await self.redis_client.init() + await self.init_pending_subtasks() + + async def loop(self): + while True: + if self.stop: + break + if self.last_correct is None or time.time() - self.last_correct > self.correct_interval: + self.last_correct = time.time() + await self.correct_pending_info() + await self.clean_workers() + await self.clean_subtasks() + await asyncio.sleep(self.interval) + logger.info("RedisServerMonitor stopped") + + async def close(self): + await super().close() + await self.redis_client.close() + + @class_try_catch_async + async def worker_update(self, queue, identity, status): + status = status.name + key = f"workers:{queue}:workers" + infer_key = f"workers:{queue}:infer_cost" + + update_t = time.time() + worker = await self.redis_client.hget(key, identity) + if worker is None: + worker = {"status": "", "fetched_t": 0, "update_t": update_t} + await self.redis_client.hset(key, identity, json.dumps(worker)) + else: + worker = json.loads(worker) + + pre_status = worker["status"] + pre_fetched_t = float(worker["fetched_t"]) + worker["status"] = status + worker["update_t"] = update_t + + if status == WorkerStatus.REPORT.name and pre_fetched_t > 0: + cur_cost = update_t - pre_fetched_t + worker["fetched_t"] = 0.0 + if cur_cost < self.subtask_run_timeouts[queue]: + await self.redis_client.list_push(infer_key, max(cur_cost, 1), self.worker_avg_window) + logger.info(f"Worker {identity} {queue} avg infer cost update: {cur_cost:.2f} s") + + elif status == WorkerStatus.FETCHED.name: + worker["fetched_t"] = update_t + + await self.redis_client.hset(key, identity, json.dumps(worker)) + logger.info(f"Worker {identity} {queue} update [{status}]") + + @class_try_catch_async + async def clean_workers(self): + for queue in self.all_queues: + key = f"workers:{queue}:workers" + workers = await self.redis_client.hgetall(key) + + for identity, worker in workers.items(): + worker = json.loads(worker) + fetched_t = float(worker["fetched_t"]) + update_t = float(worker["update_t"]) + status = worker["status"] + # logger.warning(f"{queue} avg infer cost {infer_avg:.2f} s, worker: {worker}") + + # infer too long + if fetched_t > 0: + elapse = time.time() - fetched_t + if elapse > self.subtask_run_timeouts[queue]: + logger.warning(f"Worker {identity} {queue} infer timeout2: {elapse:.2f} s") + await self.redis_client.hdel(key, identity) + continue + + elapse = time.time() - update_t + # no ping too long + if status in [WorkerStatus.FETCHED.name, WorkerStatus.PING.name]: + if elapse > self.ping_timeout: + logger.warning(f"Worker {identity} {queue} ping timeout: {elapse:.2f} s") + await self.redis_client.hdel(key, identity) + continue + + # offline too long + elif status in [WorkerStatus.DISCONNECT.name, WorkerStatus.REPORT.name]: + if elapse > self.worker_offline_timeout: + logger.warning(f"Worker {identity} {queue} offline timeout2: {elapse:.2f} s") + await self.redis_client.hdel(key, identity) + continue + + # fetching too long + elif status == WorkerStatus.FETCHING.name: + if elapse > self.fetching_timeout: + logger.warning(f"Worker {identity} {queue} fetching timeout: {elapse:.2f} s") + await self.redis_client.hdel(key, identity) + continue + + async def get_ready_worker_count(self, queue): + key = f"workers:{queue}:workers" + worker_count = await self.redis_client.hlen(key) + return worker_count + + async def get_avg_worker_infer_cost(self, queue): + infer_key = f"workers:{queue}:infer_cost" + infer_cost = await self.redis_client.list_avg(infer_key, self.worker_avg_window) + if infer_cost < 0: + return self.subtask_run_timeouts[queue] + return infer_cost + + async def correct_pending_info(self): + for queue in self.all_queues: + pending_num = await self.queue_manager.pending_num(queue) + await self.redis_client.correct_pending_info(f"pendings:{queue}:info", pending_num) + + @class_try_catch_async + async def init_pending_subtasks(self): + await super().init_pending_subtasks() + # save to redis if not exists + for queue, v in self.pending_subtasks.items(): + subtasks = v.pop("subtasks", {}) + await self.redis_client.create_if_not_exists(f"pendings:{queue}:info", v) + for task_id, order_id in subtasks.items(): + await self.redis_client.set(f"pendings:{queue}:subtasks:{task_id}", order_id, nx=True) + self.pending_subtasks = None + logger.info(f"Inited pending subtasks to redis") + + @class_try_catch_async + async def pending_subtasks_add(self, queue, task_id): + max_count = await self.redis_client.increment_and_get(f"pendings:{queue}:info", "max_count", 1) + await self.redis_client.set(f"pendings:{queue}:subtasks:{task_id}", max_count) + # logger.warning(f"Redis pending subtasks {queue} add {task_id}: {max_count}") + + @class_try_catch_async + async def pending_subtasks_sub(self, queue, task_id): + consume_count = await self.redis_client.increment_and_get(f"pendings:{queue}:info", "consume_count", 1) + await self.redis_client.delete_key(f"pendings:{queue}:subtasks:{task_id}") + # logger.warning(f"Redis pending subtasks {queue} sub {task_id}: {consume_count}") + + @class_try_catch_async + async def pending_subtasks_get_order(self, queue, task_id): + order = await self.redis_client.get(f"pendings:{queue}:subtasks:{task_id}") + if order is None: + return None + consume = await self.redis_client.hget(f"pendings:{queue}:info", "consume_count") + if consume is None: + return None + real_order = max(int(order) - int(consume), 1) + # logger.warning(f"Redis pending subtasks {queue} get order {task_id}: real={real_order} order={order} consume={consume}") + return real_order diff --git a/lightx2v/deploy/server/static/assets b/lightx2v/deploy/server/static/assets new file mode 120000 index 0000000..da56533 --- /dev/null +++ b/lightx2v/deploy/server/static/assets @@ -0,0 +1 @@ +../frontend/dist/assets \ No newline at end of file diff --git a/lightx2v/deploy/server/static/icon/logoblack.png b/lightx2v/deploy/server/static/icon/logoblack.png new file mode 100644 index 0000000000000000000000000000000000000000..92915c40ee569e203a15818bdd78d098bb4c0b91 GIT binary patch literal 10616 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 literal 0 HcmV?d00001 diff --git a/lightx2v/deploy/server/static/icon/seko_logo.svg b/lightx2v/deploy/server/static/icon/seko_logo.svg new file mode 100644 index 0000000..36a854b --- /dev/null +++ b/lightx2v/deploy/server/static/icon/seko_logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/lightx2v/deploy/server/static/icon/seko_logo_nobg.png b/lightx2v/deploy/server/static/icon/seko_logo_nobg.png new file mode 100644 index 0000000000000000000000000000000000000000..dab3fe97a146e90d63ebec882b2cd8b0ba24606d GIT binary patch literal 11540 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 Y!E7=K{-F2a=_KymHMvuB8yfxp0N^_Mb^rhX literal 0 HcmV?d00001 diff --git a/lightx2v/deploy/server/static/icon/seko_logo_white.svg b/lightx2v/deploy/server/static/icon/seko_logo_white.svg new file mode 100644 index 0000000..ad79938 --- /dev/null +++ b/lightx2v/deploy/server/static/icon/seko_logo_white.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/lightx2v/deploy/server/static/index.html b/lightx2v/deploy/server/static/index.html new file mode 120000 index 0000000..c867cf2 --- /dev/null +++ b/lightx2v/deploy/server/static/index.html @@ -0,0 +1 @@ +../frontend/dist/index.html \ No newline at end of file diff --git a/lightx2v/deploy/server/static/index_old.html b/lightx2v/deploy/server/static/index_old.html new file mode 100644 index 0000000..3002f26 --- /dev/null +++ b/lightx2v/deploy/server/static/index_old.html @@ -0,0 +1,1124 @@ + + + + + + LightX2V 文生视频服务 + + + + + + + + + + + + + diff --git a/lightx2v/deploy/task_manager/__init__.py b/lightx2v/deploy/task_manager/__init__.py new file mode 100644 index 0000000..f8deb85 --- /dev/null +++ b/lightx2v/deploy/task_manager/__init__.py @@ -0,0 +1,313 @@ +import uuid +from enum import Enum +from re import T + +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch, current_time, data_name + + +class TaskStatus(Enum): + CREATED = 1 + PENDING = 2 + RUNNING = 3 + SUCCEED = 4 + FAILED = 5 + CANCEL = 6 + + +ActiveStatus = [TaskStatus.CREATED, TaskStatus.PENDING, TaskStatus.RUNNING] +FinishedStatus = [TaskStatus.SUCCEED, TaskStatus.FAILED, TaskStatus.CANCEL] + + +class BaseTaskManager: + def __init__(self): + pass + + async def init(self): + pass + + async def close(self): + pass + + async def insert_user_if_not_exists(self, user_info): + raise NotImplementedError + + async def query_user(self, user_id): + raise NotImplementedError + + async def insert_task(self, task, subtasks): + raise NotImplementedError + + async def list_tasks(self, **kwargs): + raise NotImplementedError + + async def query_task(self, task_id, user_id=None, only_task=True): + raise NotImplementedError + + async def next_subtasks(self, task_id): + raise NotImplementedError + + async def run_subtasks(self, subtasks, worker_identity): + raise NotImplementedError + + async def ping_subtask(self, task_id, worker_name, worker_identity): + raise NotImplementedError + + async def finish_subtasks(self, task_id, status, worker_identity=None, worker_name=None, fail_msg=None, should_running=False): + raise NotImplementedError + + async def cancel_task(self, task_id, user_id=None): + raise NotImplementedError + + async def resume_task(self, task_id, all_subtask=False, user_id=None): + raise NotImplementedError + + async def delete_task(self, task_id, user_id=None): + raise NotImplementedError + + async def insert_share(self, share_info): + raise NotImplementedError + + async def query_share(self, share_id): + raise NotImplementedError + + async def insert_podcast(self, podcast): + raise NotImplementedError + + async def query_podcast(self, session_id, user_id=None): + raise NotImplementedError + + async def list_podcasts(self, **kwargs): + raise NotImplementedError + + async def delete_podcast(self, session_id, user_id): + raise NotImplementedError + + def fmt_dict(self, data): + for k in ["status"]: + if k in data: + data[k] = data[k].name + + def parse_dict(self, data): + for k in ["status"]: + if k in data: + data[k] = TaskStatus[data[k]] + + def align_extra_inputs(self, task, subtask): + if "extra_inputs" in task.get("params", {}): + for inp, fs in task["params"]["extra_inputs"].items(): + if inp in subtask["inputs"]: + for f in fs: + subtask["inputs"][f] = task["inputs"][f] + logger.info(f"Align extra input: {f} for subtask {subtask['task_id']} {subtask['worker_name']}") + + async def create_share(self, task_id, user_id, share_type, valid_days, auth_type, auth_value): + assert share_type in ["task", "template"], f"do not support {share_type} share type!" + assert auth_type in ["public", "login", "user_id"], f"do not support {auth_type} auth type!" + assert valid_days > 0, f"valid_days must be greater than 0!" + share_id = str(uuid.uuid4()) + cur_t = current_time() + share_info = { + "share_id": share_id, + "task_id": task_id, + "user_id": user_id, + "share_type": share_type, + "create_t": cur_t, + "update_t": cur_t, + "valid_days": valid_days, + "valid_t": cur_t + valid_days * 24 * 3600, + "auth_type": auth_type, + "auth_value": auth_value, + "extra_info": "", + "tag": "", + } + assert await self.insert_share(share_info), f"create share {share_info} failed" + return share_id + + async def create_user(self, user_info): + assert user_info["source"] in ["github", "google", "phone"], f"do not support {user_info['source']} user!" + cur_t = current_time() + user_id = f"{user_info['source']}_{user_info['id']}" + data = { + "user_id": user_id, + "source": user_info["source"], + "id": user_info["id"], + "username": user_info["username"], + "email": user_info["email"], + "homepage": user_info["homepage"], + "avatar_url": user_info["avatar_url"], + "create_t": cur_t, + "update_t": cur_t, + "extra_info": "", + "tag": "", + } + assert await self.insert_user_if_not_exists(data), f"create user {data} failed" + return user_id + + async def create_task(self, worker_keys, workers, params, inputs, outputs, user_id): + task_type, model_cls, stage = worker_keys + cur_t = current_time() + task_id = str(uuid.uuid4()) + extra_inputs = [] + for fs in params.get("extra_inputs", {}).values(): + extra_inputs.extend(fs) + task = { + "task_id": task_id, + "task_type": task_type, + "model_cls": model_cls, + "stage": stage, + "params": params, + "create_t": cur_t, + "update_t": cur_t, + "status": TaskStatus.CREATED, + "extra_info": "", + "tag": "", + "inputs": {x: data_name(x, task_id) for x in inputs + extra_inputs}, + "outputs": {x: data_name(x, task_id) for x in outputs}, + "user_id": user_id, + } + records = [] + self.mark_task_start(records, task) + subtasks = [] + for worker_name, worker_item in workers.items(): + subtasks.append( + { + "task_id": task_id, + "worker_name": worker_name, + "inputs": {x: data_name(x, task_id) for x in worker_item["inputs"]}, + "outputs": {x: data_name(x, task_id) for x in worker_item["outputs"]}, + "queue": worker_item["queue"], + "previous": worker_item["previous"], + "status": TaskStatus.CREATED, + "worker_identity": "", + "result": "", + "fail_time": 0, + "extra_info": "", + "create_t": cur_t, + "update_t": cur_t, + "ping_t": 0.0, + "infer_cost": -1.0, + } + ) + self.mark_subtask_change(records, subtasks[-1], None, TaskStatus.CREATED) + ret = await self.insert_task(task, subtasks) + assert ret, f"create task {task_id} failed" + self.metrics_commit(records) + return task_id + + async def create_podcast(self, session_id, user_id, user_input, audio_path, rounds): + cur_t = current_time() + podcast = { + "session_id": session_id, + "user_id": user_id, + "user_input": user_input, + "create_t": cur_t, + "update_t": cur_t, + "has_audio": True, + "audio_path": audio_path, + "metadata_path": "", + "rounds": rounds, + "subtitles": [], + "extra_info": {}, + "tag": "", + } + assert await self.insert_podcast(podcast), f"create podcast {podcast} failed" + + async def mark_server_restart(self): + pass + # only for start server with active tasks + # if self.metrics_monitor: + # tasks = await self.list_tasks(status=ActiveStatus) + # subtasks = await self.list_tasks(status=ActiveStatus, subtasks=True) + # logger.warning(f"Mark system restart, {len(tasks)} tasks, {len(subtasks)} subtasks") + # self.metrics_monitor.record_task_recover(tasks) + # self.metrics_monitor.record_subtask_recover(subtasks) + + def mark_task_start(self, records, task): + t = current_time() + if not isinstance(task["extra_info"], dict): + task["extra_info"] = {} + if "active_elapse" in task["extra_info"]: + del task["extra_info"]["active_elapse"] + task["extra_info"]["start_t"] = t + logger.info(f"Task {task['task_id']} active start") + if self.metrics_monitor: + records.append( + [ + self.metrics_monitor.record_task_start, + [task], + ] + ) + + def mark_task_end(self, records, task, end_status): + if "start_t" not in task["extra_info"]: + logger.warning(f"Task {task} has no start time") + else: + elapse = current_time() - task["extra_info"]["start_t"] + task["extra_info"]["active_elapse"] = elapse + del task["extra_info"]["start_t"] + + logger.info(f"Task {task['task_id']} active end with [{end_status}], elapse: {elapse}") + if self.metrics_monitor: + records.append( + [ + self.metrics_monitor.record_task_end, + [task, end_status, elapse], + ] + ) + + def mark_subtask_change(self, records, subtask, old_status, new_status, fail_msg=None): + t = current_time() + if not isinstance(subtask["extra_info"], dict): + subtask["extra_info"] = {} + if isinstance(fail_msg, str) and len(fail_msg) > 0: + subtask["extra_info"]["fail_msg"] = fail_msg + elif "fail_msg" in subtask["extra_info"]: + del subtask["extra_info"]["fail_msg"] + + if old_status == new_status: + logger.warning(f"Subtask {subtask} update same status: {old_status} vs {new_status}") + return + + elapse, elapse_key = None, None + if old_status in ActiveStatus: + if "start_t" not in subtask["extra_info"]: + logger.warning(f"Subtask {subtask} has no start time, status: {old_status}") + else: + elapse = t - subtask["extra_info"]["start_t"] + elapse_key = f"{old_status.name}-{new_status.name}" + if "elapses" not in subtask["extra_info"]: + subtask["extra_info"]["elapses"] = {} + subtask["extra_info"]["elapses"][elapse_key] = elapse + del subtask["extra_info"]["start_t"] + + if new_status in ActiveStatus: + subtask["extra_info"]["start_t"] = t + if new_status == TaskStatus.CREATED and "elapses" in subtask["extra_info"]: + del subtask["extra_info"]["elapses"] + + logger.info( + f"Subtask {subtask['task_id']} {subtask['worker_name']} status changed: \ + [{old_status}] -> [{new_status}], {elapse_key}: {elapse}, fail_msg: {fail_msg}" + ) + + if self.metrics_monitor: + records.append( + [ + self.metrics_monitor.record_subtask_change, + [subtask, old_status, new_status, elapse_key, elapse], + ] + ) + + @class_try_catch + def metrics_commit(self, records): + for func, args in records: + func(*args) + + +# Import task manager implementations +from .local_task_manager import LocalTaskManager # noqa +from .sql_task_manager import PostgresSQLTaskManager # noqa + +__all__ = ["BaseTaskManager", "LocalTaskManager", "PostgresSQLTaskManager"] diff --git a/lightx2v/deploy/task_manager/local_task_manager.py b/lightx2v/deploy/task_manager/local_task_manager.py new file mode 100644 index 0000000..f92b977 --- /dev/null +++ b/lightx2v/deploy/task_manager/local_task_manager.py @@ -0,0 +1,476 @@ +import asyncio +import json +import os + +from lightx2v.deploy.common.utils import class_try_catch_async, current_time, str2time, time2str +from lightx2v.deploy.task_manager import ActiveStatus, BaseTaskManager, FinishedStatus, TaskStatus + + +class LocalTaskManager(BaseTaskManager): + def __init__(self, local_dir, metrics_monitor=None): + self.local_dir = local_dir + if not os.path.exists(self.local_dir): + os.makedirs(self.local_dir) + self.metrics_monitor = metrics_monitor + + def get_task_filename(self, task_id): + return os.path.join(self.local_dir, f"task_{task_id}.json") + + def get_user_filename(self, user_id): + return os.path.join(self.local_dir, f"user_{user_id}.json") + + def get_podcast_filename(self, session_id): + return os.path.join(self.local_dir, f"podcast_{session_id}.json") + + def fmt_dict(self, data): + super().fmt_dict(data) + for k in ["create_t", "update_t", "ping_t", "valid_t"]: + if k in data: + data[k] = time2str(data[k]) + + def parse_dict(self, data): + super().parse_dict(data) + for k in ["create_t", "update_t", "ping_t", "valid_t"]: + if k in data: + data[k] = str2time(data[k]) + + def save(self, task, subtasks, with_fmt=True): + info = {"task": task, "subtasks": subtasks} + if with_fmt: + self.fmt_dict(info["task"]) + [self.fmt_dict(x) for x in info["subtasks"]] + out_name = self.get_task_filename(task["task_id"]) + with open(out_name, "w") as fout: + fout.write(json.dumps(info, indent=4, ensure_ascii=False)) + + def load(self, task_id, user_id=None, only_task=False): + fpath = self.get_task_filename(task_id) + info = json.load(open(fpath)) + task, subtasks = info["task"], info["subtasks"] + if user_id is not None and task["user_id"] != user_id: + raise Exception(f"Task {task_id} is not belong to user {user_id}") + if task["tag"] == "delete": + raise Exception(f"Task {task_id} is deleted") + self.parse_dict(task) + if only_task: + return task + for sub in subtasks: + self.parse_dict(sub) + return task, subtasks + + def save_podcast(self, podcast, with_fmt=True): + if with_fmt: + self.fmt_dict(podcast) + out_name = self.get_podcast_filename(podcast["session_id"]) + with open(out_name, "w") as fout: + fout.write(json.dumps(podcast, indent=4, ensure_ascii=False)) + + def load_podcast(self, session_id, user_id=None): + fpath = self.get_podcast_filename(session_id) + data = json.load(open(fpath)) + if user_id is not None and data.get("user_id") != user_id: + raise Exception(f"Podcast {session_id} is not belong to user {user_id}") + if data["tag"] == "delete": + raise Exception(f"Podcast {session_id} is deleted") + self.parse_dict(data) + return data + + @class_try_catch_async + async def insert_task(self, task, subtasks): + self.save(task, subtasks) + return True + + @class_try_catch_async + async def list_tasks(self, **kwargs): + tasks = [] + fs = [os.path.join(self.local_dir, f) for f in os.listdir(self.local_dir)] + for f in os.listdir(self.local_dir): + if not f.startswith("task_"): + continue + fpath = os.path.join(self.local_dir, f) + info = json.load(open(fpath)) + if kwargs.get("subtasks", False): + items = info["subtasks"] + assert "user_id" not in kwargs, "user_id is not allowed when subtasks is True" + else: + items = [info["task"]] + for task in items: + self.parse_dict(task) + if "user_id" in kwargs and task["user_id"] != kwargs["user_id"]: + continue + if "status" in kwargs: + if isinstance(kwargs["status"], list) and task["status"] not in kwargs["status"]: + continue + elif kwargs["status"] != task["status"]: + continue + if "start_created_t" in kwargs and kwargs["start_created_t"] > task["create_t"]: + continue + if "end_created_t" in kwargs and kwargs["end_created_t"] < task["create_t"]: + continue + if "start_updated_t" in kwargs and kwargs["start_updated_t"] > task["update_t"]: + continue + if "end_updated_t" in kwargs and kwargs["end_updated_t"] < task["update_t"]: + continue + if "start_ping_t" in kwargs and kwargs["start_ping_t"] > task["ping_t"]: + continue + if "end_ping_t" in kwargs and kwargs["end_ping_t"] < task["ping_t"]: + continue + if not kwargs.get("include_delete", False) and task.get("tag", "") == "delete": + continue + + # 如果不是查询子任务,则添加子任务信息到任务中 + if not kwargs.get("subtasks", False): + task["subtasks"] = info.get("subtasks", []) + + tasks.append(task) + if "count" in kwargs: + return len(tasks) + + sort_key = "update_t" if kwargs.get("sort_by_update_t", False) else "create_t" + tasks = sorted(tasks, key=lambda x: x[sort_key], reverse=True) + + if "offset" in kwargs: + tasks = tasks[kwargs["offset"] :] + if "limit" in kwargs: + tasks = tasks[: kwargs["limit"]] + return tasks + + @class_try_catch_async + async def query_task(self, task_id, user_id=None, only_task=True): + return self.load(task_id, user_id, only_task) + + @class_try_catch_async + async def next_subtasks(self, task_id): + records = [] + task, subtasks = self.load(task_id) + if task["status"] not in ActiveStatus: + return [] + succeeds = set() + for sub in subtasks: + if sub["status"] == TaskStatus.SUCCEED: + succeeds.add(sub["worker_name"]) + nexts = [] + for sub in subtasks: + if sub["status"] == TaskStatus.CREATED: + dep_ok = True + for prev in sub["previous"]: + if prev not in succeeds: + dep_ok = False + break + if dep_ok: + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.PENDING) + sub["params"] = task["params"] + sub["status"] = TaskStatus.PENDING + sub["update_t"] = current_time() + self.align_extra_inputs(task, sub) + nexts.append(sub) + if len(nexts) > 0: + task["status"] = TaskStatus.PENDING + task["update_t"] = current_time() + self.save(task, subtasks) + self.metrics_commit(records) + return nexts + + @class_try_catch_async + async def run_subtasks(self, cands, worker_identity): + records = [] + valids = [] + for cand in cands: + task_id = cand["task_id"] + worker_name = cand["worker_name"] + task, subtasks = self.load(task_id) + if task["status"] in [TaskStatus.SUCCEED, TaskStatus.FAILED, TaskStatus.CANCEL]: + continue + for sub in subtasks: + if sub["worker_name"] == worker_name: + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.RUNNING) + sub["status"] = TaskStatus.RUNNING + sub["worker_identity"] = worker_identity + sub["update_t"] = current_time() + task["status"] = TaskStatus.RUNNING + task["update_t"] = current_time() + task["ping_t"] = current_time() + self.save(task, subtasks) + valids.append(cand) + break + self.metrics_commit(records) + return valids + + @class_try_catch_async + async def ping_subtask(self, task_id, worker_name, worker_identity): + task, subtasks = self.load(task_id) + for sub in subtasks: + if sub["worker_name"] == worker_name: + pre = sub["worker_identity"] + assert pre == worker_identity, f"worker identity not matched: {pre} vs {worker_identity}" + sub["ping_t"] = current_time() + self.save(task, subtasks) + return True + return False + + @class_try_catch_async + async def finish_subtasks(self, task_id, status, worker_identity=None, worker_name=None, fail_msg=None, should_running=False): + records = [] + task, subtasks = self.load(task_id) + subs = subtasks + + if worker_name: + subs = [sub for sub in subtasks if sub["worker_name"] == worker_name] + assert len(subs) >= 1, f"no worker task_id={task_id}, name={worker_name}" + + if worker_identity: + pre = subs[0]["worker_identity"] + assert pre == worker_identity, f"worker identity not matched: {pre} vs {worker_identity}" + + assert status in [TaskStatus.SUCCEED, TaskStatus.FAILED], f"invalid finish status: {status}" + for sub in subs: + if sub["status"] not in FinishedStatus: + if should_running and sub["status"] != TaskStatus.RUNNING: + print(f"task {task_id} is not running, skip finish subtask: {sub}") + continue + self.mark_subtask_change(records, sub, sub["status"], status, fail_msg=fail_msg) + sub["status"] = status + sub["update_t"] = current_time() + + if task["status"] == TaskStatus.CANCEL: + self.save(task, subtasks) + self.metrics_commit(records) + return TaskStatus.CANCEL + + running_subs = [] + failed_sub = False + for sub in subtasks: + if sub["status"] not in FinishedStatus: + running_subs.append(sub) + if sub["status"] == TaskStatus.FAILED: + failed_sub = True + + # some subtask failed, we should fail all other subtasks + if failed_sub: + if task["status"] != TaskStatus.FAILED: + self.mark_task_end(records, task, TaskStatus.FAILED) + task["status"] = TaskStatus.FAILED + task["update_t"] = current_time() + for sub in running_subs: + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.FAILED, fail_msg="other subtask failed") + sub["status"] = TaskStatus.FAILED + sub["update_t"] = current_time() + self.save(task, subtasks) + self.metrics_commit(records) + return TaskStatus.FAILED + + # all subtasks finished and all succeed + elif len(running_subs) == 0: + if task["status"] != TaskStatus.SUCCEED: + self.mark_task_end(records, task, TaskStatus.SUCCEED) + task["status"] = TaskStatus.SUCCEED + task["update_t"] = current_time() + self.save(task, subtasks) + self.metrics_commit(records) + return TaskStatus.SUCCEED + + self.save(task, subtasks) + self.metrics_commit(records) + return None + + @class_try_catch_async + async def cancel_task(self, task_id, user_id=None): + records = [] + task, subtasks = self.load(task_id, user_id) + if task["status"] not in ActiveStatus: + return f"Task {task_id} is not in active status (current status: {task['status']}). Only tasks with status CREATED, PENDING, or RUNNING can be cancelled." + + for sub in subtasks: + if sub["status"] not in FinishedStatus: + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.CANCEL) + sub["status"] = TaskStatus.CANCEL + sub["update_t"] = current_time() + self.mark_task_end(records, task, TaskStatus.CANCEL) + task["status"] = TaskStatus.CANCEL + task["update_t"] = current_time() + self.save(task, subtasks) + self.metrics_commit(records) + return True + + @class_try_catch_async + async def resume_task(self, task_id, all_subtask=False, user_id=None): + records = [] + task, subtasks = self.load(task_id, user_id) + # the task is not finished + if task["status"] not in FinishedStatus: + return "Active task cannot be resumed" + # the task is no need to resume + if not all_subtask and task["status"] == TaskStatus.SUCCEED: + return "Succeed task cannot be resumed" + for sub in subtasks: + if all_subtask or sub["status"] != TaskStatus.SUCCEED: + self.mark_subtask_change(records, sub, None, TaskStatus.CREATED) + sub["status"] = TaskStatus.CREATED + sub["update_t"] = current_time() + sub["ping_t"] = 0.0 + self.mark_task_start(records, task) + task["status"] = TaskStatus.CREATED + task["update_t"] = current_time() + self.save(task, subtasks) + self.metrics_commit(records) + return True + + @class_try_catch_async + async def delete_task(self, task_id, user_id=None): + task, subtasks = self.load(task_id, user_id) + # only allow to delete finished tasks + if task["status"] not in FinishedStatus: + return False + # delete task file + task["tag"] = "delete" + task["update_t"] = current_time() + self.save(task, subtasks) + return True + + def get_share_filename(self, share_id): + return os.path.join(self.local_dir, f"share_{share_id}.json") + + @class_try_catch_async + async def insert_share(self, share_info): + fpath = self.get_share_filename(share_info["share_id"]) + self.fmt_dict(share_info) + with open(fpath, "w") as fout: + fout.write(json.dumps(share_info, indent=4, ensure_ascii=False)) + return True + + @class_try_catch_async + async def query_share(self, share_id): + fpath = self.get_share_filename(share_id) + if not os.path.exists(fpath): + return None + data = json.load(open(fpath)) + self.parse_dict(data) + if data["tag"] == "delete": + raise Exception(f"Share {share_id} is deleted") + if data["valid_t"] < current_time(): + raise Exception(f"Share {share_id} has expired") + return data + + @class_try_catch_async + async def insert_user_if_not_exists(self, user_info): + fpath = self.get_user_filename(user_info["user_id"]) + if os.path.exists(fpath): + return True + self.fmt_dict(user_info) + with open(fpath, "w") as fout: + fout.write(json.dumps(user_info, indent=4, ensure_ascii=False)) + return True + + @class_try_catch_async + async def query_user(self, user_id): + fpath = self.get_user_filename(user_id) + if not os.path.exists(fpath): + return None + data = json.load(open(fpath)) + self.parse_dict(data) + return data + + @class_try_catch_async + async def insert_podcast(self, podcast): + self.save_podcast(podcast) + return True + + @class_try_catch_async + async def query_podcast(self, session_id, user_id=None): + fpath = self.get_podcast_filename(session_id) + if not os.path.exists(fpath): + return None + data = json.load(open(fpath)) + self.parse_dict(data) + return data + + @class_try_catch_async + async def list_podcasts(self, **kwargs): + sessions = [] + for f in os.listdir(self.local_dir): + if not f.startswith("podcast_"): + continue + fpath = os.path.join(self.local_dir, f) + session = json.load(open(fpath)) + self.parse_dict(session) + if "user_id" in kwargs and session["user_id"] != kwargs["user_id"]: + continue + if "has_audio" in kwargs and session["has_audio"] != kwargs["has_audio"]: + continue + if not kwargs.get("include_delete", False) and session.get("tag", "") == "delete": + continue + sessions.append(session) + if "count" in kwargs: + return len(sessions) + sort_key = "update_t" if kwargs.get("sort_by_update_t", False) else "create_t" + sessions = sorted(sessions, key=lambda x: x[sort_key], reverse=True) + if "offset" in kwargs: + sessions = sessions[kwargs["offset"] :] + if "limit" in kwargs: + sessions = sessions[: kwargs["limit"]] + return sessions + + +async def test(): + from lightx2v.deploy.common.pipeline import Pipeline + + p = Pipeline("/data/nvme1/liuliang1/lightx2v/configs/model_pipeline.json") + m = LocalTaskManager("/data/nvme1/liuliang1/lightx2v/local_task") + await m.init() + + keys = ["t2v", "wan2.1", "multi_stage"] + workers = p.get_workers(keys) + inputs = p.get_inputs(keys) + outputs = p.get_outputs(keys) + params = { + "prompt": "fake input prompts", + "resolution": { + "height": 233, + "width": 456, + }, + } + + user_info = { + "source": "github", + "id": "test-id-233", + "username": "test-username-233", + "email": "test-email-233@test.com", + "homepage": "https://test.com", + "avatar_url": "https://test.com/avatar.png", + } + user_id = await m.create_user(user_info) + print(" - create_user:", user_id) + + user = await m.query_user(user_id) + print(" - query_user:", user) + + task_id = await m.create_task(keys, workers, params, inputs, outputs, user_id) + print(" - create_task:", task_id) + + tasks = await m.list_tasks() + print(" - list_tasks:", tasks) + + task = await m.query_task(task_id) + print(" - query_task:", task) + + subtasks = await m.next_subtasks(task_id) + print(" - next_subtasks:", subtasks) + + await m.run_subtasks(subtasks, "fake-worker") + await m.finish_subtasks(task_id, TaskStatus.FAILED) + await m.cancel_task(task_id) + await m.resume_task(task_id) + for sub in subtasks: + await m.finish_subtasks(sub["task_id"], TaskStatus.SUCCEED, worker_name=sub["worker_name"], worker_identity="fake-worker") + + subtasks = await m.next_subtasks(task_id) + print(" - final next_subtasks:", subtasks) + + task = await m.query_task(task_id) + print(" - final task:", task) + + await m.close() + + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/lightx2v/deploy/task_manager/sql_task_manager.py b/lightx2v/deploy/task_manager/sql_task_manager.py new file mode 100644 index 0000000..35b0ee5 --- /dev/null +++ b/lightx2v/deploy/task_manager/sql_task_manager.py @@ -0,0 +1,1112 @@ +import asyncio +import json +import traceback +from datetime import datetime + +import asyncpg +from loguru import logger + +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.deploy.task_manager import ActiveStatus, BaseTaskManager, FinishedStatus, TaskStatus + + +class PostgresSQLTaskManager(BaseTaskManager): + def __init__(self, db_url, metrics_monitor=None): + self.db_url = db_url + self.table_tasks = "tasks" + self.table_subtasks = "subtasks" + self.table_users = "users" + self.table_versions = "versions" + self.table_shares = "shares" + self.table_podcasts = "podcasts" + self.pool = None + self.metrics_monitor = metrics_monitor + self.time_keys = ["create_t", "update_t", "ping_t", "valid_t"] + self.json_keys = ["params", "extra_info", "inputs", "outputs", "previous", "rounds", "subtitles"] + + async def init(self): + await self.upgrade_db() + + async def close(self): + if self.pool: + await self.pool.close() + + def fmt_dict(self, data): + super().fmt_dict(data) + for k in self.time_keys: + if k in data and isinstance(data[k], float): + data[k] = datetime.fromtimestamp(data[k]) + for k in self.json_keys: + if k in data: + data[k] = json.dumps(data[k], ensure_ascii=False) + + def parse_dict(self, data): + super().parse_dict(data) + for k in self.json_keys: + if k in data: + data[k] = json.loads(data[k]) + for k in self.time_keys: + if k in data: + data[k] = data[k].timestamp() + + async def get_conn(self): + if self.pool is None: + self.pool = await asyncpg.create_pool(self.db_url) + return await self.pool.acquire() + + async def release_conn(self, conn): + await self.pool.release(conn) + + async def query_version(self): + conn = await self.get_conn() + try: + row = await conn.fetchrow(f"SELECT version FROM {self.table_versions} ORDER BY create_t DESC LIMIT 1") + row = dict(row) + return row["version"] if row else 0 + except: # noqa + logger.error(f"query_version error: {traceback.format_exc()}") + return 0 + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def upgrade_db(self): + versions = [ + (1, "Init tables", self.upgrade_v1), + (2, "Add shares table", self.upgrade_v2), + (3, "Add podcasts table", self.upgrade_v3), + ] + logger.info(f"upgrade_db: {self.db_url}") + cur_ver = await self.query_version() + for ver, description, func in versions: + if cur_ver < ver: + logger.info(f"Upgrade to version {ver}: {description}") + if not await func(ver, description): + logger.error(f"Upgrade to version {ver}: {description} func failed") + return False + cur_ver = ver + logger.info(f"upgrade_db: {self.db_url} done") + return True + + async def upgrade_v1(self, version, description): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + # create users table + await conn.execute(f""" + CREATE TABLE IF NOT EXISTS {self.table_users} ( + user_id VARCHAR(256) PRIMARY KEY, + source VARCHAR(32), + id VARCHAR(200), + username VARCHAR(256), + email VARCHAR(256), + homepage VARCHAR(256), + avatar_url VARCHAR(256), + create_t TIMESTAMPTZ, + update_t TIMESTAMPTZ, + extra_info JSONB, + tag VARCHAR(64) + ) + """) + # create tasks table + await conn.execute(f""" + CREATE TABLE IF NOT EXISTS {self.table_tasks} ( + task_id VARCHAR(128) PRIMARY KEY, + task_type VARCHAR(64), + model_cls VARCHAR(64), + stage VARCHAR(64), + params JSONB, + create_t TIMESTAMPTZ, + update_t TIMESTAMPTZ, + status VARCHAR(64), + extra_info JSONB, + tag VARCHAR(64), + inputs JSONB, + outputs JSONB, + user_id VARCHAR(256), + FOREIGN KEY (user_id) REFERENCES {self.table_users}(user_id) ON DELETE CASCADE + ) + """) + # create subtasks table + await conn.execute(f""" + CREATE TABLE IF NOT EXISTS {self.table_subtasks} ( + task_id VARCHAR(128), + worker_name VARCHAR(128), + inputs JSONB, + outputs JSONB, + queue VARCHAR(128), + previous JSONB, + status VARCHAR(64), + worker_identity VARCHAR(128), + result VARCHAR(128), + fail_time INTEGER, + extra_info JSONB, + create_t TIMESTAMPTZ, + update_t TIMESTAMPTZ, + ping_t TIMESTAMPTZ, + infer_cost FLOAT, + PRIMARY KEY (task_id, worker_name), + FOREIGN KEY (task_id) REFERENCES {self.table_tasks}(task_id) ON DELETE CASCADE + ) + """) + # create versions table + await conn.execute(f""" + CREATE TABLE IF NOT EXISTS {self.table_versions} ( + version INTEGER PRIMARY KEY, + description VARCHAR(255), + create_t TIMESTAMPTZ NOT NULL + ) + """) + # create indexes + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_users}_source ON {self.table_users}(source)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_users}_id ON {self.table_users}(id)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_tasks}_status ON {self.table_tasks}(status)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_tasks}_create_t ON {self.table_tasks}(create_t)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_tasks}_tag ON {self.table_tasks}(tag)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_subtasks}_task_id ON {self.table_subtasks}(task_id)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_subtasks}_worker_name ON {self.table_subtasks}(worker_name)") + await conn.execute(f"CREATE INDEX IF NOT EXISTS idx_{self.table_subtasks}_status ON {self.table_subtasks}(status)") + + # update version + await conn.execute(f"INSERT INTO {self.table_versions} (version, description, create_t) VALUES ($1, $2, $3)", version, description, datetime.now()) + return True + except: # noqa + logger.error(f"upgrade_v1 error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + async def upgrade_v2(self, version, description): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + # create shares table + await conn.execute(f""" + CREATE TABLE IF NOT EXISTS {self.table_shares} ( + share_id VARCHAR(128) PRIMARY KEY, + task_id VARCHAR(128), + user_id VARCHAR(256), + share_type VARCHAR(32), + create_t TIMESTAMPTZ, + update_t TIMESTAMPTZ, + valid_days INTEGER, + valid_t TIMESTAMPTZ, + auth_type VARCHAR(32), + auth_value VARCHAR(256), + extra_info JSONB, + tag VARCHAR(64), + FOREIGN KEY (user_id) REFERENCES {self.table_users}(user_id) ON DELETE CASCADE + ) + """) + + # update version + await conn.execute(f"INSERT INTO {self.table_versions} (version, description, create_t) VALUES ($1, $2, $3)", version, description, datetime.now()) + return True + except: # noqa + logger.error(f"upgrade_v2 error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + async def upgrade_v3(self, version, description): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + # create shares table + await conn.execute(f""" + CREATE TABLE IF NOT EXISTS {self.table_podcasts} ( + session_id VARCHAR(128) PRIMARY KEY, + user_id VARCHAR(256) NOT NULL, + user_input TEXT, + create_t TIMESTAMPTZ NOT NULL, + update_t TIMESTAMPTZ NOT NULL, + has_audio BOOLEAN DEFAULT FALSE, + audio_path TEXT, + metadata_path TEXT, + rounds JSONB, + subtitles JSONB, + extra_info JSONB, + tag VARCHAR(64), + FOREIGN KEY (user_id) REFERENCES {self.table_users}(user_id) ON DELETE CASCADE + ) + """) + + # update version + await conn.execute(f"INSERT INTO {self.table_versions} (version, description, create_t) VALUES ($1, $2, $3)", version, description, datetime.now()) + return True + except: # noqa + logger.error(f"upgrade_v3 error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + async def load(self, conn, task_id, user_id=None, only_task=False, worker_name=None): + query = f"SELECT * FROM {self.table_tasks} WHERE task_id = $1 AND tag != 'delete'" + params = [task_id] + if user_id is not None: + query += " AND user_id = $2" + params.append(user_id) + row = await conn.fetchrow(query, *params) + task = dict(row) + assert task, f"query_task: task not found: {task_id} {user_id}" + self.parse_dict(task) + if only_task: + return task + query2 = f"SELECT * FROM {self.table_subtasks} WHERE task_id = $1" + params2 = [task_id] + if worker_name is not None: + query2 += " AND worker_name = $2" + params2.append(worker_name) + rows = await conn.fetch(query2, *params2) + subtasks = [] + for row in rows: + sub = dict(row) + self.parse_dict(sub) + subtasks.append(sub) + return task, subtasks + + def check_update_valid(self, ret, prefix, query, params): + if ret.startswith("UPDATE "): + count = int(ret.split(" ")[1]) + assert count > 0, f"{prefix}: no row changed: {query} {params}" + return count + else: + logger.warning(f"parse postsql update ret failed: {ret}") + return 0 + + async def update_task(self, conn, task_id, **kwargs): + query = f"UPDATE {self.table_tasks} SET " + conds = ["update_t = $1"] + params = [datetime.now()] + param_idx = 1 + if "status" in kwargs: + param_idx += 1 + conds.append(f"status = ${param_idx}") + params.append(kwargs["status"].name) + if "extra_info" in kwargs: + param_idx += 1 + conds.append(f"extra_info = ${param_idx}") + params.append(json.dumps(kwargs["extra_info"], ensure_ascii=False)) + + limit_conds = [f"task_id = ${param_idx + 1}"] + param_idx += 1 + params.append(task_id) + + if "src_status" in kwargs: + param_idx += 1 + limit_conds.append(f"status = ${param_idx}") + params.append(kwargs["src_status"].name) + + query += " ,".join(conds) + " WHERE " + " AND ".join(limit_conds) + ret = await conn.execute(query, *params) + return self.check_update_valid(ret, "update_task", query, params) + + async def update_subtask(self, conn, task_id, worker_name, **kwargs): + query = f"UPDATE {self.table_subtasks} SET " + conds = [] + params = [] + param_idx = 0 + if kwargs.get("update_t", True): + param_idx += 1 + conds.append(f"update_t = ${param_idx}") + params.append(datetime.now()) + if kwargs.get("ping_t", False): + param_idx += 1 + conds.append(f"ping_t = ${param_idx}") + params.append(datetime.now()) + if kwargs.get("reset_ping_t", False): + param_idx += 1 + conds.append(f"ping_t = ${param_idx}") + params.append(datetime.fromtimestamp(0)) + if "status" in kwargs: + param_idx += 1 + conds.append(f"status = ${param_idx}") + params.append(kwargs["status"].name) + if "worker_identity" in kwargs: + param_idx += 1 + conds.append(f"worker_identity = ${param_idx}") + params.append(kwargs["worker_identity"]) + if "infer_cost" in kwargs: + param_idx += 1 + conds.append(f"infer_cost = ${param_idx}") + params.append(kwargs["infer_cost"]) + if "extra_info" in kwargs: + param_idx += 1 + conds.append(f"extra_info = ${param_idx}") + params.append(json.dumps(kwargs["extra_info"], ensure_ascii=False)) + + limit_conds = [f"task_id = ${param_idx + 1}", f"worker_name = ${param_idx + 2}"] + param_idx += 2 + params.extend([task_id, worker_name]) + + if "src_status" in kwargs: + param_idx += 1 + limit_conds.append(f"status = ${param_idx}") + params.append(kwargs["src_status"].name) + + query += " ,".join(conds) + " WHERE " + " AND ".join(limit_conds) + ret = await conn.execute(query, *params) + return self.check_update_valid(ret, "update_subtask", query, params) + + @class_try_catch_async + async def insert_task(self, task, subtasks): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + self.fmt_dict(task) + await conn.execute( + f""" + INSERT INTO {self.table_tasks} + (task_id, task_type, model_cls, stage, params, create_t, + update_t, status, extra_info, tag, inputs, outputs, user_id) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) + """, + task["task_id"], + task["task_type"], + task["model_cls"], + task["stage"], + task["params"], + task["create_t"], + task["update_t"], + task["status"], + task["extra_info"], + task["tag"], + task["inputs"], + task["outputs"], + task["user_id"], + ) + for sub in subtasks: + self.fmt_dict(sub) + await conn.execute( + f""" + INSERT INTO {self.table_subtasks} + (task_id, worker_name, inputs, outputs, queue, previous, status, + worker_identity, result, fail_time, extra_info, create_t, update_t, + ping_t, infer_cost) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) + """, + sub["task_id"], + sub["worker_name"], + sub["inputs"], + sub["outputs"], + sub["queue"], + sub["previous"], + sub["status"], + sub["worker_identity"], + sub["result"], + sub["fail_time"], + sub["extra_info"], + sub["create_t"], + sub["update_t"], + sub["ping_t"], + sub["infer_cost"], + ) + return True + except: # noqa + logger.error(f"insert_task error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def list_tasks(self, **kwargs): + conn = await self.get_conn() + try: + count = kwargs.get("count", False) + query = f"SELECT * FROM " + if count: + query = f"SELECT COUNT(*) FROM " + assert "limit" not in kwargs, "limit is not allowed when count is True" + assert "offset" not in kwargs, "offset is not allowed when count is True" + params = [] + conds = [] + param_idx = 0 + if kwargs.get("subtasks", False): + query += self.table_subtasks + assert "user_id" not in kwargs, "user_id is not allowed when subtasks is True" + else: + query += self.table_tasks + if not kwargs.get("include_delete", False): + param_idx += 1 + conds.append(f"tag != ${param_idx}") + params.append("delete") + + if "status" in kwargs: + param_idx += 1 + if isinstance(kwargs["status"], list): + next_idx = param_idx + len(kwargs["status"]) + placeholders = ",".join([f"${i}" for i in range(param_idx, next_idx)]) + conds.append(f"status IN ({placeholders})") + params.extend([x.name for x in kwargs["status"]]) + param_idx = next_idx - 1 + else: + conds.append(f"status = ${param_idx}") + params.append(kwargs["status"].name) + + if "start_created_t" in kwargs: + param_idx += 1 + conds.append(f"create_t >= ${param_idx}") + params.append(datetime.fromtimestamp(kwargs["start_created_t"])) + + if "end_created_t" in kwargs: + param_idx += 1 + conds.append(f"create_t <= ${param_idx}") + params.append(datetime.fromtimestamp(kwargs["end_created_t"])) + + if "start_updated_t" in kwargs: + param_idx += 1 + conds.append(f"update_t >= ${param_idx}") + params.append(datetime.fromtimestamp(kwargs["start_updated_t"])) + + if "end_updated_t" in kwargs: + param_idx += 1 + conds.append(f"update_t <= ${param_idx}") + params.append(datetime.fromtimestamp(kwargs["end_updated_t"])) + + if "start_ping_t" in kwargs: + param_idx += 1 + conds.append(f"ping_t >= ${param_idx}") + params.append(datetime.fromtimestamp(kwargs["start_ping_t"])) + + if "end_ping_t" in kwargs: + param_idx += 1 + conds.append(f"ping_t <= ${param_idx}") + params.append(datetime.fromtimestamp(kwargs["end_ping_t"])) + + if "user_id" in kwargs: + param_idx += 1 + conds.append(f"user_id = ${param_idx}") + params.append(kwargs["user_id"]) + + if conds: + query += " WHERE " + " AND ".join(conds) + + if not count: + sort_key = "update_t" if kwargs.get("sort_by_update_t", False) else "create_t" + query += f" ORDER BY {sort_key} DESC" + + if "limit" in kwargs: + param_idx += 1 + query += f" LIMIT ${param_idx}" + params.append(kwargs["limit"]) + + if "offset" in kwargs: + param_idx += 1 + query += f" OFFSET ${param_idx}" + params.append(kwargs["offset"]) + + rows = await conn.fetch(query, *params) + if count: + return rows[0]["count"] + + # query subtasks with task + subtasks = {} + if not kwargs.get("subtasks", False): + subtask_query = f"SELECT {self.table_subtasks}.* FROM ({query}) AS t \ + JOIN {self.table_subtasks} ON t.task_id = {self.table_subtasks}.task_id" + subtask_rows = await conn.fetch(subtask_query, *params) + for row in subtask_rows: + sub = dict(row) + self.parse_dict(sub) + if sub["task_id"] not in subtasks: + subtasks[sub["task_id"]] = [] + subtasks[sub["task_id"]].append(sub) + + tasks = [] + for row in rows: + task = dict(row) + self.parse_dict(task) + if not kwargs.get("subtasks", False): + task["subtasks"] = subtasks.get(task["task_id"], []) + tasks.append(task) + return tasks + except: # noqa + logger.error(f"list_tasks error: {traceback.format_exc()}") + return [] + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def query_task(self, task_id, user_id=None, only_task=True): + conn = await self.get_conn() + try: + return await self.load(conn, task_id, user_id, only_task=only_task) + except: # noqa + logger.error(f"query_task error: {traceback.format_exc()}") + return None + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def next_subtasks(self, task_id): + conn = await self.get_conn() + records = [] + try: + async with conn.transaction(isolation="read_uncommitted"): + task, subtasks = await self.load(conn, task_id) + if task["status"] not in ActiveStatus: + return [] + succeeds = set() + for sub in subtasks: + if sub["status"] == TaskStatus.SUCCEED: + succeeds.add(sub["worker_name"]) + nexts = [] + for sub in subtasks: + if sub["status"] == TaskStatus.CREATED: + dep_ok = True + for prev in sub["previous"]: + if prev not in succeeds: + dep_ok = False + break + if dep_ok: + sub["params"] = task["params"] + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.PENDING) + await self.update_subtask( + conn, + task_id, + sub["worker_name"], + status=TaskStatus.PENDING, + extra_info=sub["extra_info"], + src_status=sub["status"], + ) + self.align_extra_inputs(task, sub) + nexts.append(sub) + if len(nexts) > 0: + await self.update_task(conn, task_id, status=TaskStatus.PENDING) + self.metrics_commit(records) + return nexts + except: # noqa + logger.error(f"next_subtasks error: {traceback.format_exc()}") + return None + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def run_subtasks(self, cands, worker_identity): + conn = await self.get_conn() + records = [] + try: + async with conn.transaction(isolation="read_uncommitted"): + valids = [] + for cand in cands: + task_id = cand["task_id"] + worker_name = cand["worker_name"] + task, subs = await self.load(conn, task_id, worker_name=worker_name) + assert len(subs) == 1, f"task {task_id} has multiple subtasks: {subs} with worker_name: {worker_name}" + if task["status"] in [TaskStatus.SUCCEED, TaskStatus.FAILED, TaskStatus.CANCEL]: + continue + + self.mark_subtask_change(records, subs[0], subs[0]["status"], TaskStatus.RUNNING) + await self.update_subtask( + conn, + task_id, + worker_name, + status=TaskStatus.RUNNING, + worker_identity=worker_identity, + ping_t=True, + extra_info=subs[0]["extra_info"], + src_status=subs[0]["status"], + ) + await self.update_task(conn, task_id, status=TaskStatus.RUNNING) + valids.append(cand) + break + self.metrics_commit(records) + return valids + except: # noqa + logger.error(f"run_subtasks error: {traceback.format_exc()}") + return [] + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def ping_subtask(self, task_id, worker_name, worker_identity): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + task, subtasks = await self.load(conn, task_id) + for sub in subtasks: + if sub["worker_name"] == worker_name: + pre = sub["worker_identity"] + assert pre == worker_identity, f"worker identity not matched: {pre} vs {worker_identity}" + await self.update_subtask(conn, task_id, worker_name, ping_t=True, update_t=False) + return True + return False + except: # noqa + logger.error(f"ping_subtask error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def finish_subtasks(self, task_id, status, worker_identity=None, worker_name=None, fail_msg=None, should_running=False): + conn = await self.get_conn() + records = [] + try: + async with conn.transaction(isolation="read_uncommitted"): + task, subtasks = await self.load(conn, task_id) + subs = subtasks + if worker_name: + subs = [sub for sub in subtasks if sub["worker_name"] == worker_name] + assert len(subs) >= 1, f"no worker task_id={task_id}, name={worker_name}" + + if worker_identity: + pre = subs[0]["worker_identity"] + assert pre == worker_identity, f"worker identity not matched: {pre} vs {worker_identity}" + + assert status in [TaskStatus.SUCCEED, TaskStatus.FAILED], f"invalid finish status: {status}" + for sub in subs: + if sub["status"] not in FinishedStatus: + if should_running and sub["status"] != TaskStatus.RUNNING: + logger.warning(f"task {task_id} is not running, skip finish subtask: {sub}") + continue + self.mark_subtask_change(records, sub, sub["status"], status, fail_msg=fail_msg) + await self.update_subtask( + conn, + task_id, + sub["worker_name"], + status=status, + extra_info=sub["extra_info"], + src_status=sub["status"], + ) + sub["status"] = status + + if task["status"] == TaskStatus.CANCEL: + self.metrics_commit(records) + return TaskStatus.CANCEL + + running_subs = [] + failed_sub = False + for sub in subtasks: + if sub["status"] not in FinishedStatus: + running_subs.append(sub) + if sub["status"] == TaskStatus.FAILED: + failed_sub = True + + # some subtask failed, we should fail all other subtasks + if failed_sub: + if task["status"] != TaskStatus.FAILED: + self.mark_task_end(records, task, TaskStatus.FAILED) + await self.update_task( + conn, + task_id, + status=TaskStatus.FAILED, + extra_info=task["extra_info"], + src_status=task["status"], + ) + for sub in running_subs: + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.FAILED, fail_msg="other subtask failed") + await self.update_subtask( + conn, + task_id, + sub["worker_name"], + status=TaskStatus.FAILED, + extra_info=sub["extra_info"], + src_status=sub["status"], + ) + self.metrics_commit(records) + return TaskStatus.FAILED + + # all subtasks finished and all succeed + elif len(running_subs) == 0: + if task["status"] != TaskStatus.SUCCEED: + self.mark_task_end(records, task, TaskStatus.SUCCEED) + await self.update_task( + conn, + task_id, + status=TaskStatus.SUCCEED, + extra_info=task["extra_info"], + src_status=task["status"], + ) + self.metrics_commit(records) + return TaskStatus.SUCCEED + + self.metrics_commit(records) + return None + except: # noqa + logger.error(f"finish_subtasks error: {traceback.format_exc()}") + return None + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def cancel_task(self, task_id, user_id=None): + conn = await self.get_conn() + records = [] + try: + async with conn.transaction(isolation="read_uncommitted"): + task, subtasks = await self.load(conn, task_id, user_id) + if task["status"] not in ActiveStatus: + return f"Task {task_id} is not in active status (current status: {task['status']}). \ + Only tasks with status CREATED, PENDING, or RUNNING can be cancelled." + + for sub in subtasks: + if sub["status"] not in FinishedStatus: + self.mark_subtask_change(records, sub, sub["status"], TaskStatus.CANCEL) + await self.update_subtask( + conn, + task_id, + sub["worker_name"], + status=TaskStatus.CANCEL, + extra_info=sub["extra_info"], + src_status=sub["status"], + ) + + self.mark_task_end(records, task, TaskStatus.CANCEL) + await self.update_task( + conn, + task_id, + status=TaskStatus.CANCEL, + extra_info=task["extra_info"], + src_status=task["status"], + ) + self.metrics_commit(records) + return True + except: # noqa + logger.error(f"cancel_task error: {traceback.format_exc()}") + return "unknown cancel error" + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def resume_task(self, task_id, all_subtask=False, user_id=None): + conn = await self.get_conn() + records = [] + try: + async with conn.transaction(isolation="read_uncommitted"): + task, subtasks = await self.load(conn, task_id, user_id) + # the task is not finished + if task["status"] not in FinishedStatus: + return "Active task cannot be resumed" + # the task is no need to resume + if not all_subtask and task["status"] == TaskStatus.SUCCEED: + return "Succeed task cannot be resumed" + + for sub in subtasks: + if all_subtask or sub["status"] != TaskStatus.SUCCEED: + self.mark_subtask_change(records, sub, None, TaskStatus.CREATED) + await self.update_subtask( + conn, + task_id, + sub["worker_name"], + status=TaskStatus.CREATED, + reset_ping_t=True, + extra_info=sub["extra_info"], + src_status=sub["status"], + ) + + self.mark_task_start(records, task) + await self.update_task( + conn, + task_id, + status=TaskStatus.CREATED, + extra_info=task["extra_info"], + src_status=task["status"], + ) + self.metrics_commit(records) + return True + except: # noqa + logger.error(f"resume_task error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def delete_task(self, task_id, user_id=None): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + task = await self.load(conn, task_id, user_id, only_task=True) + + # only allow to delete finished tasks + if task["status"] not in FinishedStatus: + logger.warning(f"Cannot delete task {task_id} with status {task['status']}, only finished tasks can be deleted") + return False + + # delete task record + await conn.execute(f"UPDATE {self.table_tasks} SET tag = 'delete', update_t = $1 WHERE task_id = $2", datetime.now(), task_id) + logger.info(f"Task {task_id} deleted successfully") + return True + + except: # noqa + logger.error(f"delete_task error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def insert_share(self, share_info): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + self.fmt_dict(share_info) + await conn.execute( + f"""INSERT INTO {self.table_shares} + (share_id, task_id, user_id, share_type, create_t, update_t, + valid_days, valid_t, auth_type, auth_value, extra_info, tag) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) + """, + share_info["share_id"], + share_info["task_id"], + share_info["user_id"], + share_info["share_type"], + share_info["create_t"], + share_info["update_t"], + share_info["valid_days"], + share_info["valid_t"], + share_info["auth_type"], + share_info["auth_value"], + share_info["extra_info"], + share_info["tag"], + ) + return True + except: # noqa + logger.error(f"create_share_link error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def query_share(self, share_id): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + row = await conn.fetchrow(f"SELECT * FROM {self.table_shares} WHERE share_id = $1 AND tag != 'delete' AND valid_t >= $2", share_id, datetime.now()) + share = dict(row) + self.parse_dict(share) + return share + except: # noqa + logger.error(f"query_share error: {traceback.format_exc()}") + return None + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def insert_user_if_not_exists(self, user_info): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + row = await conn.fetchrow(f"SELECT * FROM {self.table_users} WHERE user_id = $1", user_info["user_id"]) + if row: + logger.info(f"user already exists: {user_info['user_id']}") + return True + self.fmt_dict(user_info) + await conn.execute( + f""" + INSERT INTO {self.table_users} + (user_id, source, id, username, email, homepage, + avatar_url, create_t, update_t, extra_info, tag) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) + """, + user_info["user_id"], + user_info["source"], + user_info["id"], + user_info["username"], + user_info["email"], + user_info["homepage"], + user_info["avatar_url"], + user_info["create_t"], + user_info["update_t"], + user_info["extra_info"], + user_info["tag"], + ) + return True + except: # noqa + logger.error(f"insert_user_if_not_exists error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def query_user(self, user_id): + conn = await self.get_conn() + try: + row = await conn.fetchrow(f"SELECT * FROM {self.table_users} WHERE user_id = $1", user_id) + user = dict(row) + self.parse_dict(user) + return user + except: # noqa + logger.error(f"query_user error: {traceback.format_exc()}") + return None + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def insert_podcast(self, podcast): + conn = await self.get_conn() + try: + async with conn.transaction(isolation="read_uncommitted"): + self.fmt_dict(podcast) + await conn.execute( + f"""INSERT INTO {self.table_podcasts} + (session_id, user_id, user_input, create_t, update_t, has_audio, + audio_path, metadata_path, rounds, subtitles, extra_info, tag) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) + """, + podcast["session_id"], + podcast["user_id"], + podcast["user_input"], + podcast["create_t"], + podcast["update_t"], + podcast["has_audio"], + podcast["audio_path"], + podcast["metadata_path"], + podcast["rounds"], + podcast["subtitles"], + podcast["extra_info"], + podcast["tag"], + ) + return True + except: # noqa + logger.error(f"insert_podcast error: {traceback.format_exc()}") + return False + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def query_podcast(self, session_id, user_id=None): + conn = await self.get_conn() + try: + query = f"SELECT * FROM {self.table_podcasts} WHERE session_id = $1 AND tag != 'delete'" + params = [session_id] + if user_id is not None: + query += " AND user_id = $2" + params.append(user_id) + row = await conn.fetchrow(query, *params) + if row is None: + return None + podcast = dict(row) + self.parse_dict(podcast) + return podcast + except: # noqa + logger.error(f"query_podcast error: {traceback.format_exc()}") + return None + finally: + await self.release_conn(conn) + + @class_try_catch_async + async def list_podcasts(self, **kwargs): + conn = await self.get_conn() + try: + count = kwargs.get("count", False) + query = f"SELECT * FROM " + if count: + query = f"SELECT COUNT(*) FROM " + assert "limit" not in kwargs, "limit is not allowed when count is True" + assert "offset" not in kwargs, "offset is not allowed when count is True" + params = [] + conds = [] + param_idx = 0 + query += self.table_podcasts + + if not kwargs.get("include_delete", False): + param_idx += 1 + conds.append(f"tag != ${param_idx}") + params.append("delete") + + if "has_audio" in kwargs: + param_idx += 1 + conds.append(f"has_audio = ${param_idx}") + params.append(kwargs["has_audio"]) + + if "user_id" in kwargs: + param_idx += 1 + conds.append(f"user_id = ${param_idx}") + params.append(kwargs["user_id"]) + + if conds: + query += " WHERE " + " AND ".join(conds) + + if not count: + sort_key = "update_t" if kwargs.get("sort_by_update_t", False) else "create_t" + query += f" ORDER BY {sort_key} DESC" + + if "limit" in kwargs: + param_idx += 1 + query += f" LIMIT ${param_idx}" + params.append(kwargs["limit"]) + + if "offset" in kwargs: + param_idx += 1 + query += f" OFFSET ${param_idx}" + params.append(kwargs["offset"]) + + rows = await conn.fetch(query, *params) + if count: + return rows[0]["count"] + + podcasts = [] + for row in rows: + podcast = dict(row) + self.parse_dict(podcast) + podcasts.append(podcast) + return podcasts + except: # noqa + logger.error(f"list_podcasts error: {traceback.format_exc()}") + return [] + finally: + await self.release_conn(conn) + + +async def test(): + from lightx2v.deploy.common.pipeline import Pipeline + + p = Pipeline("/data/nvme1/liuliang1/lightx2v/configs/model_pipeline.json") + m = PostgresSQLTaskManager("postgresql://test:test@127.0.0.1:5432/lightx2v_test") + await m.init() + + keys = ["t2v", "wan2.1", "multi_stage"] + workers = p.get_workers(keys) + inputs = p.get_inputs(keys) + outputs = p.get_outputs(keys) + params = { + "prompt": "fake input prompts", + "resolution": { + "height": 233, + "width": 456, + }, + } + + user_info = { + "source": "github", + "id": "4566", + "username": "test-username-233", + "email": "test-email-233@test.com", + "homepage": "https://test.com", + "avatar_url": "https://test.com/avatar.png", + } + user_id = await m.create_user(user_info) + print(" - create_user:", user_id) + + user = await m.query_user(user_id) + print(" - query_user:", user) + + task_id = await m.create_task(keys, workers, params, inputs, outputs, user_id) + print(" - create_task:", task_id) + + tasks = await m.list_tasks() + print(" - list_tasks:", tasks) + + task = await m.query_task(task_id) + print(" - query_task:", task) + + subtasks = await m.next_subtasks(task_id) + print(" - next_subtasks:", subtasks) + + await m.run_subtasks(subtasks, "fake-worker") + await m.finish_subtasks(task_id, TaskStatus.FAILED) + await m.cancel_task(task_id) + await m.resume_task(task_id) + for sub in subtasks: + await m.finish_subtasks(sub["task_id"], TaskStatus.SUCCEED, worker_name=sub["worker_name"], worker_identity="fake-worker") + + subtasks = await m.next_subtasks(task_id) + print(" - final next_subtasks:", subtasks) + + task = await m.query_task(task_id) + print(" - final task:", task) + + await m.close() + + +if __name__ == "__main__": + asyncio.run(test()) diff --git a/lightx2v/deploy/worker/__init__.py b/lightx2v/deploy/worker/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/deploy/worker/__main__.py b/lightx2v/deploy/worker/__main__.py new file mode 100644 index 0000000..718406a --- /dev/null +++ b/lightx2v/deploy/worker/__main__.py @@ -0,0 +1,370 @@ +import argparse +import asyncio +import json +import os +import signal +import sys +import traceback +import uuid + +import aiohttp +import torch +import torch.distributed as dist +from loguru import logger + +from lightx2v.deploy.data_manager import LocalDataManager, S3DataManager +from lightx2v.deploy.task_manager import TaskStatus +from lightx2v.deploy.worker.hub import DiTWorker, ImageEncoderWorker, PipelineWorker, SegmentDiTWorker, TextEncoderWorker, VaeDecoderWorker, VaeEncoderWorker +from lightx2v.server.metrics import metrics + +RUNNER_MAP = { + "pipeline": PipelineWorker, + "text_encoder": TextEncoderWorker, + "image_encoder": ImageEncoderWorker, + "vae_encoder": VaeEncoderWorker, + "vae_decoder": VaeDecoderWorker, + "dit": DiTWorker, + "segment_dit": SegmentDiTWorker, +} + +# {task_id: {"server": xx, "worker_name": xx, "identity": xx}} +RUNNING_SUBTASKS = {} +WORKER_SECRET_KEY = os.getenv("WORKER_SECRET_KEY", "worker-secret-key-change-in-production") +HEADERS = {"Authorization": f"Bearer {WORKER_SECRET_KEY}", "Content-Type": "application/json"} +STOPPED = False +WORLD_SIZE = int(os.environ.get("WORLD_SIZE", 1)) +RANK = int(os.environ.get("RANK", 0)) +TARGET_RANK = int(os.getenv("WORKER_RANK", "0")) % WORLD_SIZE + + +async def ping_life(server_url, worker_identity, keys): + url = server_url + "/api/v1/worker/ping/life" + params = {"worker_identity": worker_identity, "worker_keys": keys} + while True: + try: + logger.info(f"{worker_identity} pinging life ...") + async with aiohttp.ClientSession() as session: + async with session.post(url, data=json.dumps(params), headers=HEADERS) as ret: + if ret.status == 200: + ret = await ret.json() + logger.info(f"{worker_identity} ping life: {ret}") + if ret["msg"] == "delete": + logger.warning(f"{worker_identity} deleted") + # asyncio.create_task(shutdown(asyncio.get_event_loop())) + return + await asyncio.sleep(10) + else: + error_text = await ret.text() + raise Exception(f"{worker_identity} ping life fail: [{ret.status}], error: {error_text}") + except asyncio.CancelledError: + logger.warning("Ping life cancelled, shutting down...") + raise asyncio.CancelledError + except: # noqa + logger.warning(f"Ping life failed: {traceback.format_exc()}") + await asyncio.sleep(10) + + +async def ping_subtask(server_url, worker_identity, task_id, worker_name, queue, running_task, ping_interval): + url = server_url + "/api/v1/worker/ping/subtask" + params = { + "worker_identity": worker_identity, + "task_id": task_id, + "worker_name": worker_name, + "queue": queue, + } + while True: + try: + logger.info(f"{worker_identity} pinging subtask {task_id} {worker_name} ...") + async with aiohttp.ClientSession() as session: + async with session.post(url, data=json.dumps(params), headers=HEADERS) as ret: + if ret.status == 200: + ret = await ret.json() + logger.info(f"{worker_identity} ping subtask {task_id} {worker_name}: {ret}") + if ret["msg"] == "delete": + logger.warning(f"{worker_identity} subtask {task_id} {worker_name} deleted") + running_task.cancel() + return + await asyncio.sleep(ping_interval) + else: + error_text = await ret.text() + raise Exception(f"{worker_identity} ping subtask fail: [{ret.status}], error: {error_text}") + except asyncio.CancelledError: + logger.warning(f"Ping subtask {task_id} {worker_name} cancelled") + raise asyncio.CancelledError + except: # noqa + logger.warning(f"Ping subtask failed: {traceback.format_exc()}") + await asyncio.sleep(10) + + +async def fetch_subtasks(server_url, worker_keys, worker_identity, max_batch, timeout): + url = server_url + "/api/v1/worker/fetch" + params = { + "worker_keys": worker_keys, + "worker_identity": worker_identity, + "max_batch": max_batch, + "timeout": timeout, + } + try: + logger.info(f"{worker_identity} fetching {worker_keys} with timeout: {timeout}s ...") + async with aiohttp.ClientSession() as session: + async with session.post(url, data=json.dumps(params), headers=HEADERS, timeout=timeout + 1) as ret: + if ret.status == 200: + ret = await ret.json() + subtasks = ret["subtasks"] + for sub in subtasks: + sub["server_url"] = server_url + sub["worker_identity"] = worker_identity + RUNNING_SUBTASKS[sub["task_id"]] = sub + logger.info(f"{worker_identity} fetch {worker_keys} ok: {subtasks}") + return subtasks + else: + error_text = await ret.text() + logger.warning(f"{worker_identity} fetch {worker_keys} fail: [{ret.status}], error: {error_text}") + return None + except asyncio.CancelledError: + logger.warning("Fetch subtasks cancelled, shutting down...") + raise asyncio.CancelledError + except: # noqa + logger.warning(f"Fetch subtasks failed: {traceback.format_exc()}") + await asyncio.sleep(10) + + +async def report_task(server_url, task_id, worker_name, status, worker_identity, queue, **kwargs): + url = server_url + "/api/v1/worker/report" + params = { + "task_id": task_id, + "worker_name": worker_name, + "status": status, + "worker_identity": worker_identity, + "queue": queue, + "fail_msg": "" if status == TaskStatus.SUCCEED.name else "worker failed", + } + try: + async with aiohttp.ClientSession() as session: + async with session.post(url, data=json.dumps(params), headers=HEADERS) as ret: + if ret.status == 200: + RUNNING_SUBTASKS.pop(task_id) + ret = await ret.json() + logger.info(f"{worker_identity} report {task_id} {worker_name} {status} ok") + return True + else: + error_text = await ret.text() + logger.warning(f"{worker_identity} report {task_id} {worker_name} {status} fail: [{ret.status}], error: {error_text}") + return False + except asyncio.CancelledError: + logger.warning("Report task cancelled, shutting down...") + raise asyncio.CancelledError + except: # noqa + logger.warning(f"Report task failed: {traceback.format_exc()}") + + +async def boradcast_subtasks(subtasks): + subtasks = [] if subtasks is None else subtasks + if WORLD_SIZE <= 1: + return subtasks + try: + if RANK == TARGET_RANK: + subtasks_data = json.dumps(subtasks, ensure_ascii=False).encode("utf-8") + subtasks_tensor = torch.frombuffer(bytearray(subtasks_data), dtype=torch.uint8).to(device="cuda") + data_size = subtasks_tensor.shape[0] + size_tensor = torch.tensor([data_size], dtype=torch.int32).to(device="cuda") + logger.info(f"rank {RANK} send subtasks: {subtasks_tensor.shape}, {size_tensor}") + else: + size_tensor = torch.zeros(1, dtype=torch.int32, device="cuda") + + dist.broadcast(size_tensor, src=TARGET_RANK) + if RANK != TARGET_RANK: + subtasks_tensor = torch.zeros(size_tensor.item(), dtype=torch.uint8, device="cuda") + dist.broadcast(subtasks_tensor, src=TARGET_RANK) + + if RANK != TARGET_RANK: + subtasks_data = subtasks_tensor.cpu().numpy().tobytes() + subtasks = json.loads(subtasks_data.decode("utf-8")) + logger.info(f"rank {RANK} recv subtasks: {subtasks}") + return subtasks + + except: # noqa + logger.error(f"Broadcast subtasks failed: {traceback.format_exc()}") + return [] + + +async def sync_subtask(): + if WORLD_SIZE <= 1: + return + try: + logger.info(f"Sync subtask {RANK}/{WORLD_SIZE} wait barrier") + dist.barrier() + logger.info(f"Sync subtask {RANK}/{WORLD_SIZE} ok") + except: # noqa + logger.error(f"Sync subtask failed: {traceback.format_exc()}") + + +async def main(args): + if args.model_name == "": + args.model_name = args.model_cls + if args.task_name == "": + args.task_name = args.task + worker_keys = [args.task_name, args.model_name, args.stage, args.worker] + + metrics.server_process(args.metric_port) + + data_manager = None + if args.data_url.startswith("/"): + data_manager = LocalDataManager(args.data_url, None) + elif args.data_url.startswith("{"): + data_manager = S3DataManager(args.data_url, None) + else: + raise NotImplementedError + await data_manager.init() + + if WORLD_SIZE > 1: + dist.init_process_group(backend="nccl") + torch.cuda.set_device(dist.get_rank()) + logger.info(f"Distributed initialized: rank={RANK}, world_size={WORLD_SIZE}") + + runner = RUNNER_MAP[args.worker](args) + if WORLD_SIZE > 1: + dist.barrier() + # asyncio.create_task(ping_life(args.server, args.identity, worker_keys)) + + while True: + subtasks = None + if RANK == TARGET_RANK: + subtasks = await fetch_subtasks(args.server, worker_keys, args.identity, args.max_batch, args.timeout) + subtasks = await boradcast_subtasks(subtasks) + + for sub in subtasks: + status = TaskStatus.FAILED.name + ping_task = None + try: + run_task = asyncio.create_task(runner.run(sub["inputs"], sub["outputs"], sub["params"], data_manager)) + if RANK == TARGET_RANK: + ping_task = asyncio.create_task(ping_subtask(args.server, sub["worker_identity"], sub["task_id"], sub["worker_name"], sub["queue"], run_task, args.ping_interval)) + ret = await run_task + if ret is True: + status = TaskStatus.SUCCEED.name + + except asyncio.CancelledError: + if STOPPED: + logger.warning("Main loop cancelled, already stopped, should exit") + return + logger.warning("Main loop cancelled, do not shut down") + + finally: + try: + if ping_task: + ping_task.cancel() + await sync_subtask() + except Exception: + logger.warning(f"Sync subtask failed: {traceback.format_exc()}") + if RANK == TARGET_RANK and sub["task_id"] in RUNNING_SUBTASKS: + try: + await report_task(status=status, **sub) + except Exception: + logger.warning(f"Report failed: {traceback.format_exc()}") + + +async def shutdown(loop): + logger.warning("Received kill signal") + global STOPPED + STOPPED = True + + for t in asyncio.all_tasks(): + if t is not asyncio.current_task(): + logger.warning(f"Cancel async task {t} ...") + t.cancel() + + # Report remaining running subtasks failed + if RANK == TARGET_RANK: + task_ids = list(RUNNING_SUBTASKS.keys()) + for task_id in task_ids: + try: + s = RUNNING_SUBTASKS[task_id] + logger.warning(f"Report {task_id} {s['worker_name']} {TaskStatus.FAILED.name} ...") + await report_task(status=TaskStatus.FAILED.name, **s) + except: # noqa + logger.warning(f"Report task {task_id} failed: {traceback.format_exc()}") + + if WORLD_SIZE > 1: + dist.destroy_process_group() + + # Force exit after a short delay to ensure cleanup + def force_exit(): + logger.warning("Force exiting process...") + sys.exit(0) + + loop.call_later(2, force_exit) + + +# align args like infer.py +def align_args(args): + args.seed = 42 + args.sf_model_path = args.sf_model_path if args.sf_model_path else "" + args.use_prompt_enhancer = False + args.prompt = "" + args.negative_prompt = "" + args.image_path = "" + args.last_frame_path = "" + args.audio_path = "" + args.src_pose_path = None + args.src_face_path = None + args.src_bg_path = None + args.src_mask_path = None + args.src_ref_images = None + args.src_video = None + args.src_mask = None + args.save_result_path = "" + args.return_result_tensor = False + args.is_live = True + + +# ========================= +# Main Entry +# ========================= + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + cur_dir = os.path.dirname(os.path.abspath(__file__)) + base_dir = os.path.abspath(os.path.join(cur_dir, "../../..")) + dft_data_url = os.path.join(base_dir, "local_data") + + parser.add_argument("--task", type=str, required=True) + parser.add_argument("--task_name", type=str, default="") + parser.add_argument("--model_cls", type=str, required=True) + parser.add_argument("--model_name", type=str, default="") + parser.add_argument("--stage", type=str, required=True) + parser.add_argument("--worker", type=str, required=True) + parser.add_argument("--identity", type=str, default="") + parser.add_argument("--max_batch", type=int, default=1) + parser.add_argument("--timeout", type=int, default=300) + parser.add_argument("--ping_interval", type=int, default=10) + + parser.add_argument("--metric_port", type=int, default=8001) + + parser.add_argument("--model_path", type=str, required=True) + parser.add_argument("--sf_model_path", type=str, default="") + parser.add_argument("--config_json", type=str, required=True) + + parser.add_argument("--server", type=str, default="http://127.0.0.1:8080") + parser.add_argument("--data_url", type=str, default=dft_data_url) + + args = parser.parse_args() + align_args(args) + if args.identity == "": + # TODO: spec worker instance identity by k8s env + args.identity = "worker-" + str(uuid.uuid4())[:8] + logger.info(f"args: {args}") + + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + + for s in [signal.SIGINT, signal.SIGTERM]: + loop.add_signal_handler(s, lambda: asyncio.create_task(shutdown(loop))) + + try: + loop.create_task(main(args), name="main") + loop.run_forever() + finally: + loop.close() + logger.warning("Event loop closed") diff --git a/lightx2v/deploy/worker/hub.py b/lightx2v/deploy/worker/hub.py new file mode 100644 index 0000000..2863a9e --- /dev/null +++ b/lightx2v/deploy/worker/hub.py @@ -0,0 +1,498 @@ +import asyncio +import ctypes +import gc +import json +import os +import sys +import tempfile +import threading +import traceback + +import torch +import torch.distributed as dist +from loguru import logger + +import lightx2v +from lightx2v.deploy.common.utils import class_try_catch_async +from lightx2v.infer import init_runner # noqa +from lightx2v.utils.input_info import set_input_info +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.set_config import set_config, set_parallel_config +from lightx2v.utils.utils import seed_all + + +def init_tools_preprocess(): + preprocess_path = os.path.abspath(os.path.join(lightx2v.__path__[0], "..", "tools", "preprocess")) + assert os.path.exists(preprocess_path), f"lightx2v tools preprocess path not found: {preprocess_path}" + sys.path.append(preprocess_path) + + +class BaseWorker: + @ProfilingContext4DebugL1("Init Worker Worker Cost:") + def __init__(self, args): + config = set_config(args) + logger.info(f"config:\n{json.dumps(config, ensure_ascii=False, indent=4)}") + seed_all(args.seed) + self.rank = 0 + self.world_size = 1 + if config["parallel"]: + self.rank = dist.get_rank() + self.world_size = dist.get_world_size() + set_parallel_config(config) + # same as va_recorder rank + self.out_video_rank = int(os.getenv("RECORDER_RANK", "0")) % self.world_size + torch.set_grad_enabled(False) + self.runner = RUNNER_REGISTER[config["model_cls"]](config) + self.input_info = set_input_info(args) + + def update_input_info(self, kwargs): + for k, v in kwargs.items(): + setattr(self.input_info, k, v) + + def set_inputs(self, params): + self.input_info.prompt = params["prompt"] + self.input_info.negative_prompt = params.get("negative_prompt", "") + self.input_info.image_path = params.get("image_path", "") + self.input_info.save_result_path = params.get("save_result_path", "") + self.input_info.seed = params.get("seed", self.input_info.seed) + self.input_info.audio_path = params.get("audio_path", "") + for k, v in params.get("processed_video_paths", {}).items(): + logger.info(f"set {k} to {v}") + setattr(self.input_info, k, v) + + async def prepare_input_image(self, params, inputs, tmp_dir, data_manager): + input_image_path = inputs.get("input_image", "") + tmp_image_path = os.path.join(tmp_dir, input_image_path) + + # prepare tmp image + if "image_path" in self.input_info.__dataclass_fields__: + img_data = await data_manager.load_bytes(input_image_path) + with open(tmp_image_path, "wb") as fout: + fout.write(img_data) + params["image_path"] = tmp_image_path + + async def prepare_input_video(self, params, inputs, tmp_dir, data_manager): + if not self.is_animate_model(): + return + init_tools_preprocess() + from preprocess_data import get_preprocess_parser, process_input_video + + result_paths = {} + if self.rank == 0: + tmp_image_path = params.get("image_path", "") + assert os.path.exists(tmp_image_path), f"input_image should be save by prepare_input_image but not valid: {tmp_image_path}" + + # prepare tmp input video + input_video_path = inputs.get("input_video", "") + tmp_video_path = os.path.join(tmp_dir, input_video_path) + processed_video_path = os.path.join(tmp_dir, "processe_results") + video_data = await data_manager.load_bytes(input_video_path) + with open(tmp_video_path, "wb") as fout: + fout.write(video_data) + + # prepare preprocess args + pre_args = get_preprocess_parser().parse_args([]) + pre_args.ckpt_path = self.runner.config["model_path"] + "/process_checkpoint" + pre_args.video_path = tmp_video_path + pre_args.refer_path = tmp_image_path + pre_args.save_path = processed_video_path + pre_args.replace_flag = self.runner.config.get("replace_flag", False) + pre_config = self.runner.config.get("preprocess_config", {}) + pre_keys = ["resolution_area", "fps", "replace_flag", "retarget_flag", "use_flux", "iterations", "k", "w_len", "h_len"] + for k in pre_keys: + if k in pre_config: + setattr(pre_args, k, pre_config[k]) + + process_input_video(pre_args) + result_paths = { + "src_pose_path": os.path.join(processed_video_path, "src_pose.mp4"), + "src_face_path": os.path.join(processed_video_path, "src_face.mp4"), + "src_ref_images": os.path.join(processed_video_path, "src_ref.png"), + } + if pre_args.replace_flag: + result_paths["src_bg_path"] = os.path.join(processed_video_path, "src_bg.mp4") + result_paths["src_mask_path"] = os.path.join(processed_video_path, "src_mask.mp4") + + # for dist, broadcast the video processed result to all ranks + result_paths = await self.broadcast_data(result_paths, 0) + for p in result_paths.values(): + assert os.path.exists(p), f"Input video processed result not found: {p}!" + params["processed_video_paths"] = result_paths + + async def prepare_input_audio(self, params, inputs, tmp_dir, data_manager): + input_audio_path = inputs.get("input_audio", "") + tmp_audio_path = os.path.join(tmp_dir, input_audio_path) + + # for stream audio input, value is dict + stream_audio_path = params.get("input_audio", None) + if stream_audio_path is not None: + tmp_audio_path = stream_audio_path + + if input_audio_path and self.is_audio_model() and isinstance(tmp_audio_path, str): + extra_audio_inputs = params.get("extra_inputs", {}).get("input_audio", []) + + # for multi-person audio directory input + if len(extra_audio_inputs) > 0: + os.makedirs(tmp_audio_path, exist_ok=True) + for inp in extra_audio_inputs: + tmp_path = os.path.join(tmp_dir, inputs[inp]) + inp_data = await data_manager.load_bytes(inputs[inp]) + with open(tmp_path, "wb") as fout: + fout.write(inp_data) + else: + audio_data = await data_manager.load_bytes(input_audio_path) + with open(tmp_audio_path, "wb") as fout: + fout.write(audio_data) + + params["audio_path"] = tmp_audio_path + + def prepare_output_video(self, params, outputs, tmp_dir, data_manager): + output_video_path = outputs.get("output_video", "") + tmp_video_path = os.path.join(tmp_dir, output_video_path) + if data_manager.name == "local": + tmp_video_path = os.path.join(data_manager.local_dir, output_video_path) + # for stream video output, value is dict + stream_video_path = params.get("output_video", None) + if stream_video_path is not None: + tmp_video_path = stream_video_path + + params["save_result_path"] = tmp_video_path + return tmp_video_path, output_video_path + + async def prepare_dit_inputs(self, inputs, data_manager): + device = torch.device("cuda", self.rank) + text_out = inputs["text_encoder_output"] + text_encoder_output = await data_manager.load_object(text_out, device) + image_encoder_output = None + + if "image_path" in self.input_info.__dataclass_fields__: + clip_path = inputs["clip_encoder_output"] + vae_path = inputs["vae_encoder_output"] + clip_encoder_out = await data_manager.load_object(clip_path, device) + vae_encoder_out = await data_manager.load_object(vae_path, device) + image_encoder_output = { + "clip_encoder_out": clip_encoder_out, + "vae_encoder_out": vae_encoder_out["vals"], + } + # apploy the config changes by vae encoder + self.update_input_info(vae_encoder_out["kwargs"]) + + self.runner.inputs = { + "text_encoder_output": text_encoder_output, + "image_encoder_output": image_encoder_output, + } + + if self.is_audio_model(): + audio_segments, expected_frames = self.runner.read_audio_input() + self.runner.inputs["audio_segments"] = audio_segments + self.runner.inputs["expected_frames"] = expected_frames + + async def save_output_video(self, tmp_video_path, output_video_path, data_manager): + # save output video + if data_manager.name != "local" and self.rank == self.out_video_rank and isinstance(tmp_video_path, str): + video_data = open(tmp_video_path, "rb").read() + await data_manager.save_bytes(video_data, output_video_path) + + def is_audio_model(self): + return "audio" in self.runner.config["model_cls"] or "seko_talk" in self.runner.config["model_cls"] + + def is_animate_model(self): + return self.runner.config.get("task") == "animate" + + async def broadcast_data(self, data, src_rank=0): + if self.world_size <= 1: + return data + + if self.rank == src_rank: + val = json.dumps(data, ensure_ascii=False).encode("utf-8") + T = torch.frombuffer(bytearray(val), dtype=torch.uint8).to(device="cuda") + S = torch.tensor([T.shape[0]], dtype=torch.int32).to(device="cuda") + logger.info(f"hub rank {self.rank} send data: {data}") + else: + S = torch.zeros(1, dtype=torch.int32, device="cuda") + + dist.broadcast(S, src=src_rank) + if self.rank != src_rank: + T = torch.zeros(S.item(), dtype=torch.uint8, device="cuda") + dist.broadcast(T, src=src_rank) + + if self.rank != src_rank: + val = T.cpu().numpy().tobytes() + data = json.loads(val.decode("utf-8")) + logger.info(f"hub rank {self.rank} recv data: {data}") + return data + + +class RunnerThread(threading.Thread): + def __init__(self, loop, future, run_func, rank, *args, **kwargs): + super().__init__(daemon=True) + self.loop = loop + self.future = future + self.run_func = run_func + self.args = args + self.kwargs = kwargs + self.rank = rank + + def run(self): + try: + # cuda device bind for each thread + torch.cuda.set_device(self.rank) + res = self.run_func(*self.args, **self.kwargs) + status = True + except: # noqa + logger.error(f"RunnerThread run failed: {traceback.format_exc()}") + res = None + status = False + finally: + + async def set_future_result(): + self.future.set_result((status, res)) + + # add the task of setting future to the loop queue + asyncio.run_coroutine_threadsafe(set_future_result(), self.loop) + + def stop(self): + if self.is_alive(): + try: + logger.warning(f"Force terminate thread {self.ident} ...") + ctypes.pythonapi.PyThreadState_SetAsyncExc(ctypes.c_long(self.ident), ctypes.py_object(SystemExit)) + except Exception as e: + logger.error(f"Force terminate thread failed: {e}") + + +def class_try_catch_async_with_thread(func): + async def wrapper(self, *args, **kwargs): + try: + return await func(self, *args, **kwargs) + except asyncio.CancelledError: + logger.warning(f"RunnerThread inside {func.__name__} cancelled") + if hasattr(self, "thread"): + # self.thread.stop() + self.runner.stop_signal = True + self.thread.join() + raise asyncio.CancelledError + except Exception: + logger.error(f"Error in {self.__class__.__name__}.{func.__name__}:") + traceback.print_exc() + return None + + return wrapper + + +class PipelineWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + self.runner.init_modules() + self.run_func = self.runner.run_pipeline + + @class_try_catch_async_with_thread + async def run(self, inputs, outputs, params, data_manager): + with tempfile.TemporaryDirectory() as tmp_dir: + await self.prepare_input_image(params, inputs, tmp_dir, data_manager) + await self.prepare_input_audio(params, inputs, tmp_dir, data_manager) + await self.prepare_input_video(params, inputs, tmp_dir, data_manager) + tmp_video_path, output_video_path = self.prepare_output_video(params, outputs, tmp_dir, data_manager) + logger.info(f"run params: {params}, {inputs}, {outputs}") + + self.set_inputs(params) + self.runner.stop_signal = False + + future = asyncio.Future() + self.thread = RunnerThread(asyncio.get_running_loop(), future, self.run_func, self.rank, input_info=self.input_info) + self.thread.start() + status, _ = await future + if not status: + return False + await self.save_output_video(tmp_video_path, output_video_path, data_manager) + return True + + +class TextEncoderWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + self.runner.text_encoders = self.runner.load_text_encoder() + + @class_try_catch_async + async def run(self, inputs, outputs, params, data_manager): + logger.info(f"run params: {params}, {inputs}, {outputs}") + input_image_path = inputs.get("input_image", "") + + self.set_inputs(params) + prompt = self.runner.config["prompt"] + img = None + + if self.runner.config["use_prompt_enhancer"]: + prompt = self.runner.config["prompt_enhanced"] + + if self.runner.config["task"] == "i2v" and not self.is_audio_model(): + img = await data_manager.load_image(input_image_path) + img = self.runner.read_image_input(img) + if isinstance(img, tuple): + img = img[0] + + out = self.runner.run_text_encoder(prompt, img) + if self.rank == 0: + await data_manager.save_object(out, outputs["text_encoder_output"]) + + del out + torch.cuda.empty_cache() + gc.collect() + return True + + +class ImageEncoderWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + self.runner.image_encoder = self.runner.load_image_encoder() + + @class_try_catch_async + async def run(self, inputs, outputs, params, data_manager): + logger.info(f"run params: {params}, {inputs}, {outputs}") + self.set_inputs(params) + + img = await data_manager.load_image(inputs["input_image"]) + img = self.runner.read_image_input(img) + if isinstance(img, tuple): + img = img[0] + out = self.runner.run_image_encoder(img) + if self.rank == 0: + await data_manager.save_object(out, outputs["clip_encoder_output"]) + + del out + torch.cuda.empty_cache() + gc.collect() + return True + + +class VaeEncoderWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + self.runner.vae_encoder, vae_decoder = self.runner.load_vae() + del vae_decoder + + @class_try_catch_async + async def run(self, inputs, outputs, params, data_manager): + logger.info(f"run params: {params}, {inputs}, {outputs}") + self.set_inputs(params) + img = await data_manager.load_image(inputs["input_image"]) + # could change config.lat_h, lat_w, tgt_h, tgt_w + img = self.runner.read_image_input(img) + if isinstance(img, tuple): + img = img[1] if self.runner.vae_encoder_need_img_original else img[0] + # run vae encoder changed the config, we use kwargs pass changes + vals = self.runner.run_vae_encoder(img) + out = {"vals": vals, "kwargs": {}} + + for key in ["original_shape", "resized_shape", "latent_shape", "target_shape"]: + if hasattr(self.input_info, key): + out["kwargs"][key] = getattr(self.input_info, key) + + if self.rank == 0: + await data_manager.save_object(out, outputs["vae_encoder_output"]) + + del out, img, vals + torch.cuda.empty_cache() + gc.collect() + return True + + +class DiTWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + self.runner.model = self.runner.load_transformer() + + @class_try_catch_async_with_thread + async def run(self, inputs, outputs, params, data_manager): + logger.info(f"run params: {params}, {inputs}, {outputs}") + self.set_inputs(params) + + await self.prepare_dit_inputs(inputs, data_manager) + self.runner.stop_signal = False + future = asyncio.Future() + self.thread = RunnerThread(asyncio.get_running_loop(), future, self.run_dit, self.rank) + self.thread.start() + status, out = await future + if not status: + return False + + if self.rank == 0: + await data_manager.save_tensor(out, outputs["latents"]) + + del out + torch.cuda.empty_cache() + gc.collect() + return True + + def run_dit(self): + self.runner.init_run() + assert self.runner.video_segment_num == 1, "DiTWorker only support single segment" + latents = self.runner.run_segment() + self.runner.end_run() + return latents + + +class VaeDecoderWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + vae_encoder, self.runner.vae_decoder = self.runner.load_vae() + self.runner.vfi_model = self.runner.load_vfi_model() if "video_frame_interpolation" in self.runner.config else None + del vae_encoder + + @class_try_catch_async + async def run(self, inputs, outputs, params, data_manager): + with tempfile.TemporaryDirectory() as tmp_dir: + tmp_video_path, output_video_path = self.prepare_output_video(params, outputs, tmp_dir, data_manager) + logger.info(f"run params: {params}, {inputs}, {outputs}") + self.set_inputs(params) + + device = torch.device("cuda", self.rank) + latents = await data_manager.load_tensor(inputs["latents"], device) + self.runner.gen_video = self.runner.run_vae_decoder(latents) + self.runner.process_images_after_vae_decoder(save_video=True) + + await self.save_output_video(tmp_video_path, output_video_path, data_manager) + + del latents + torch.cuda.empty_cache() + gc.collect() + return True + + +class SegmentDiTWorker(BaseWorker): + def __init__(self, args): + super().__init__(args) + self.runner.model = self.runner.load_transformer() + self.runner.vae_encoder, self.runner.vae_decoder = self.runner.load_vae() + self.runner.vfi_model = self.runner.load_vfi_model() if "video_frame_interpolation" in self.runner.config else None + if self.is_audio_model(): + self.runner.audio_encoder = self.runner.load_audio_encoder() + self.runner.audio_adapter = self.runner.load_audio_adapter() + self.runner.model.set_audio_adapter(self.runner.audio_adapter) + + @class_try_catch_async_with_thread + async def run(self, inputs, outputs, params, data_manager): + with tempfile.TemporaryDirectory() as tmp_dir: + tmp_video_path, output_video_path = self.prepare_output_video(params, outputs, tmp_dir, data_manager) + await self.prepare_input_audio(params, inputs, tmp_dir, data_manager) + logger.info(f"run params: {params}, {inputs}, {outputs}") + self.set_inputs(params) + + await self.prepare_dit_inputs(inputs, data_manager) + self.runner.stop_signal = False + future = asyncio.Future() + self.thread = RunnerThread(asyncio.get_running_loop(), future, self.run_dit, self.rank) + self.thread.start() + status, _ = await future + if not status: + return False + + await self.save_output_video(tmp_video_path, output_video_path, data_manager) + + torch.cuda.empty_cache() + gc.collect() + return True + + def run_dit(self): + self.runner.run_main() + self.runner.process_images_after_vae_decoder(save_video=True) diff --git a/lightx2v/infer.py b/lightx2v/infer.py new file mode 100644 index 0000000..4bb1326 --- /dev/null +++ b/lightx2v/infer.py @@ -0,0 +1,146 @@ +import argparse + +import torch +import torch.distributed as dist +from loguru import logger + +from lightx2v.common.ops import * +from lightx2v.models.runners.hunyuan_video.hunyuan_video_15_distill_runner import HunyuanVideo15DistillRunner # noqa: F401 +from lightx2v.models.runners.hunyuan_video.hunyuan_video_15_runner import HunyuanVideo15Runner # noqa: F401 +from lightx2v.models.runners.qwen_image.qwen_image_runner import QwenImageRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_animate_runner import WanAnimateRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_audio_runner import Wan22AudioRunner, WanAudioRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_distill_runner import WanDistillRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_matrix_game2_runner import WanSFMtxg2Runner # noqa: F401 +from lightx2v.models.runners.wan.wan_runner import Wan22MoeRunner, WanRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_sf_runner import WanSFRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_vace_runner import WanVaceRunner # noqa: F401 +from lightx2v.utils.envs import * +from lightx2v.utils.input_info import set_input_info +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.set_config import print_config, set_config, set_parallel_config +from lightx2v.utils.utils import seed_all +from lightx2v_platform.base.global_var import AI_DEVICE +from lightx2v_platform.registry_factory import PLATFORM_DEVICE_REGISTER + + +def init_runner(config): + torch.set_grad_enabled(False) + runner = RUNNER_REGISTER[config["model_cls"]](config) + runner.init_modules() + return runner + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--seed", type=int, default=42, help="The seed for random generator") + parser.add_argument( + "--model_cls", + type=str, + required=True, + choices=[ + "wan2.1", + "wan2.1_distill", + "wan2.1_vace", + "wan2.1_sf", + "wan2.1_sf_mtxg2", + "seko_talk", + "wan2.2_moe", + "wan2.2", + "wan2.2_moe_audio", + "wan2.2_audio", + "wan2.2_moe_distill", + "qwen_image", + "wan2.2_animate", + "hunyuan_video_1.5", + "hunyuan_video_1.5_distill", + ], + default="wan2.1", + ) + + parser.add_argument("--task", type=str, choices=["t2v", "i2v", "t2i", "i2i", "flf2v", "vace", "animate", "s2v"], default="t2v") + parser.add_argument("--model_path", type=str, required=True) + parser.add_argument("--sf_model_path", type=str, required=False) + parser.add_argument("--config_json", type=str, required=True) + parser.add_argument("--use_prompt_enhancer", action="store_true") + + parser.add_argument("--prompt", type=str, default="", help="The input prompt for text-to-video generation") + parser.add_argument("--negative_prompt", type=str, default="") + + parser.add_argument("--image_path", type=str, default="", help="The path to input image file for image-to-video (i2v) task") + parser.add_argument("--last_frame_path", type=str, default="", help="The path to last frame file for first-last-frame-to-video (flf2v) task") + parser.add_argument("--audio_path", type=str, default="", help="The path to input audio file or directory for audio-to-video (s2v) task") + + # [Warning] For vace task, need refactor. + parser.add_argument( + "--src_ref_images", + type=str, + default=None, + help="The file list of the source reference images. Separated by ','. Default None.", + ) + parser.add_argument( + "--src_video", + type=str, + default=None, + help="The file of the source video. Default None.", + ) + parser.add_argument( + "--src_mask", + type=str, + default=None, + help="The file of the source mask. Default None.", + ) + parser.add_argument( + "--src_pose_path", + type=str, + default=None, + help="The file of the source pose. Default None.", + ) + parser.add_argument( + "--src_face_path", + type=str, + default=None, + help="The file of the source face. Default None.", + ) + parser.add_argument( + "--src_bg_path", + type=str, + default=None, + help="The file of the source background. Default None.", + ) + parser.add_argument( + "--src_mask_path", + type=str, + default=None, + help="The file of the source mask. Default None.", + ) + parser.add_argument("--save_result_path", type=str, default=None, help="The path to save video path/file") + parser.add_argument("--return_result_tensor", action="store_true", help="Whether to return result tensor. (Useful for comfyui)") + args = parser.parse_args() + + seed_all(args.seed) + + # set config + config = set_config(args) + + if config["parallel"]: + platform_device = PLATFORM_DEVICE_REGISTER.get(AI_DEVICE, None) + platform_device.init_parallel_env() + set_parallel_config(config) + + print_config(config) + + with ProfilingContext4DebugL1("Total Cost"): + runner = init_runner(config) + input_info = set_input_info(args) + runner.run_pipeline(input_info) + + # Clean up distributed process group + if dist.is_initialized(): + dist.destroy_process_group() + logger.info("Distributed process group cleaned up") + + +if __name__ == "__main__": + main() diff --git a/lightx2v/models/__init__.py b/lightx2v/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/__init__.py b/lightx2v/models/input_encoders/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/__init__.py b/lightx2v/models/input_encoders/hf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/animate/__init__.py b/lightx2v/models/input_encoders/hf/animate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/animate/face_encoder.py b/lightx2v/models/input_encoders/hf/animate/face_encoder.py new file mode 100644 index 0000000..991b1e4 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/animate/face_encoder.py @@ -0,0 +1,171 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import math + +import torch +import torch.nn.functional as F +from einops import rearrange +from torch import nn + +try: + from flash_attn import flash_attn_func, flash_attn_qkvpacked_func # noqa: F401 +except ImportError: + flash_attn_func = None + +MEMORY_LAYOUT = { + "flash": ( + lambda x: x.view(x.shape[0] * x.shape[1], *x.shape[2:]), + lambda x: x, + ), + "torch": ( + lambda x: x.transpose(1, 2), + lambda x: x.transpose(1, 2), + ), + "vanilla": ( + lambda x: x.transpose(1, 2), + lambda x: x.transpose(1, 2), + ), +} + + +def attention( + q, + k, + v, + mode="flash", + drop_rate=0, + attn_mask=None, + causal=False, + max_seqlen_q=None, + batch_size=1, +): + """ + Perform QKV self attention. + + Args: + q (torch.Tensor): Query tensor with shape [b, s, a, d], where a is the number of heads. + k (torch.Tensor): Key tensor with shape [b, s1, a, d] + v (torch.Tensor): Value tensor with shape [b, s1, a, d] + mode (str): Attention mode. Choose from 'self_flash', 'cross_flash', 'torch', and 'vanilla'. + drop_rate (float): Dropout rate in attention map. (default: 0) + attn_mask (torch.Tensor): Attention mask with shape [b, s1] (cross_attn), or [b, a, s, s1] (torch or vanilla). + (default: None) + causal (bool): Whether to use causal attention. (default: False) + cu_seqlens_q (torch.Tensor): dtype torch.int32. The cumulative sequence lengths of the sequences in the batch, + used to index into q. + cu_seqlens_kv (torch.Tensor): dtype torch.int32. The cumulative sequence lengths of the sequences in the batch, + used to index into kv. + max_seqlen_q (int): The maximum sequence length in the batch of q. + max_seqlen_kv (int): The maximum sequence length in the batch of k and v. + + Returns: + torch.Tensor: Output tensor after self attention with shape [b, s, ad] + """ + pre_attn_layout, post_attn_layout = MEMORY_LAYOUT[mode] + + if mode == "torch": + if attn_mask is not None and attn_mask.dtype != torch.bool: + attn_mask = attn_mask.to(q.dtype) + x = F.scaled_dot_product_attention(q, k, v, attn_mask=attn_mask, dropout_p=drop_rate, is_causal=causal) + + elif mode == "flash": + x = flash_attn_func( + q, + k, + v, + ) + x = x.view(batch_size, max_seqlen_q, x.shape[-2], x.shape[-1]) # reshape x to [b, s, a, d] + elif mode == "vanilla": + scale_factor = 1 / math.sqrt(q.size(-1)) + + b, a, s, _ = q.shape + s1 = k.size(2) + attn_bias = torch.zeros(b, a, s, s1, dtype=q.dtype, device=q.device) + if causal: + # Only applied to self attention + assert attn_mask is None, "Causal mask and attn_mask cannot be used together" + temp_mask = torch.ones(b, a, s, s, dtype=torch.bool, device=q.device).tril(diagonal=0) + attn_bias.masked_fill_(temp_mask.logical_not(), float("-inf")) + attn_bias.to(q.dtype) + + if attn_mask is not None: + if attn_mask.dtype == torch.bool: + attn_bias.masked_fill_(attn_mask.logical_not(), float("-inf")) + else: + attn_bias += attn_mask + + attn = (q @ k.transpose(-2, -1)) * scale_factor + attn += attn_bias + attn = attn.softmax(dim=-1) + attn = torch.dropout(attn, p=drop_rate, train=True) + x = attn @ v + else: + raise NotImplementedError(f"Unsupported attention mode: {mode}") + + x = post_attn_layout(x) + b, s, a, d = x.shape + out = x.reshape(b, s, -1) + return out + + +class CausalConv1d(nn.Module): + def __init__(self, chan_in, chan_out, kernel_size=3, stride=1, dilation=1, pad_mode="replicate", **kwargs): + super().__init__() + + self.pad_mode = pad_mode + padding = (kernel_size - 1, 0) # T + self.time_causal_padding = padding + + self.conv = nn.Conv1d(chan_in, chan_out, kernel_size, stride=stride, dilation=dilation, **kwargs) + + def forward(self, x): + x = F.pad(x, self.time_causal_padding, mode=self.pad_mode) + return self.conv(x) + + +class FaceEncoder(nn.Module): + def __init__(self, in_dim: int, hidden_dim: int, num_heads=int, dtype=None, device=None): + factory_kwargs = {"dtype": dtype, "device": device} + super().__init__() + + self.num_heads = num_heads + self.conv1_local = CausalConv1d(in_dim, 1024 * num_heads, 3, stride=1) + self.norm1 = nn.LayerNorm(hidden_dim // 8, elementwise_affine=False, eps=1e-6, **factory_kwargs) + self.act = nn.SiLU() + self.conv2 = CausalConv1d(1024, 1024, 3, stride=2) + self.conv3 = CausalConv1d(1024, 1024, 3, stride=2) + + self.out_proj = nn.Linear(1024, hidden_dim) + self.norm1 = nn.LayerNorm(1024, elementwise_affine=False, eps=1e-6, **factory_kwargs) + + self.norm2 = nn.LayerNorm(1024, elementwise_affine=False, eps=1e-6, **factory_kwargs) + + self.norm3 = nn.LayerNorm(1024, elementwise_affine=False, eps=1e-6, **factory_kwargs) + + self.padding_tokens = nn.Parameter(torch.zeros(1, 1, 1, hidden_dim)) + + def forward(self, x): + x = rearrange(x, "b t c -> b c t") + b, c, t = x.shape + + x = self.conv1_local(x) + x = rearrange(x, "b (n c) t -> (b n) t c", n=self.num_heads) + + x = self.norm1(x) + x = self.act(x) + x = rearrange(x, "b t c -> b c t") + x = self.conv2(x) + x = rearrange(x, "b c t -> b t c") + x = self.norm2(x) + x = self.act(x) + x = rearrange(x, "b t c -> b c t") + x = self.conv3(x) + x = rearrange(x, "b c t -> b t c") + x = self.norm3(x) + x = self.act(x) + x = self.out_proj(x) + x = rearrange(x, "(b n) t c -> b t n c", b=b) + padding = self.padding_tokens.repeat(b, x.shape[1], 1, 1) + x = torch.cat([x, padding], dim=-2) + x_local = x.clone() + + return x_local diff --git a/lightx2v/models/input_encoders/hf/animate/motion_encoder.py b/lightx2v/models/input_encoders/hf/animate/motion_encoder.py new file mode 100644 index 0000000..1ab2cf9 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/animate/motion_encoder.py @@ -0,0 +1,300 @@ +# Modified from ``https://github.com/wyhsirius/LIA`` +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import math + +import torch +import torch.nn as nn +from torch.nn import functional as F + + +def custom_qr(input_tensor): + original_dtype = input_tensor.dtype + if original_dtype == torch.bfloat16: + q, r = torch.linalg.qr(input_tensor.to(torch.float32)) + return q.to(original_dtype), r.to(original_dtype) + return torch.linalg.qr(input_tensor) + + +def fused_leaky_relu(input, bias, negative_slope=0.2, scale=2**0.5): + return F.leaky_relu(input + bias, negative_slope) * scale + + +def upfirdn2d_native(input, kernel, up_x, up_y, down_x, down_y, pad_x0, pad_x1, pad_y0, pad_y1): + _, minor, in_h, in_w = input.shape + kernel_h, kernel_w = kernel.shape + + out = input.view(-1, minor, in_h, 1, in_w, 1) + out = F.pad(out, [0, up_x - 1, 0, 0, 0, up_y - 1, 0, 0]) + out = out.view(-1, minor, in_h * up_y, in_w * up_x) + + out = F.pad(out, [max(pad_x0, 0), max(pad_x1, 0), max(pad_y0, 0), max(pad_y1, 0)]) + out = out[ + :, + :, + max(-pad_y0, 0) : out.shape[2] - max(-pad_y1, 0), + max(-pad_x0, 0) : out.shape[3] - max(-pad_x1, 0), + ] + + out = out.reshape([-1, 1, in_h * up_y + pad_y0 + pad_y1, in_w * up_x + pad_x0 + pad_x1]) + w = torch.flip(kernel, [0, 1]).view(1, 1, kernel_h, kernel_w) + out = F.conv2d(out, w) + out = out.reshape( + -1, + minor, + in_h * up_y + pad_y0 + pad_y1 - kernel_h + 1, + in_w * up_x + pad_x0 + pad_x1 - kernel_w + 1, + ) + return out[:, :, ::down_y, ::down_x] + + +def upfirdn2d(input, kernel, up=1, down=1, pad=(0, 0)): + return upfirdn2d_native(input, kernel, up, up, down, down, pad[0], pad[1], pad[0], pad[1]) + + +def make_kernel(k): + k = torch.tensor(k, dtype=torch.float32) + if k.ndim == 1: + k = k[None, :] * k[:, None] + k /= k.sum() + return k + + +class FusedLeakyReLU(nn.Module): + def __init__(self, channel, negative_slope=0.2, scale=2**0.5): + super().__init__() + self.bias = nn.Parameter(torch.zeros(1, channel, 1, 1)) + self.negative_slope = negative_slope + self.scale = scale + + def forward(self, input): + out = fused_leaky_relu(input, self.bias, self.negative_slope, self.scale) + return out + + +class Blur(nn.Module): + def __init__(self, kernel, pad, upsample_factor=1): + super().__init__() + + kernel = make_kernel(kernel) + + if upsample_factor > 1: + kernel = kernel * (upsample_factor**2) + + self.register_buffer("kernel", kernel) + + self.pad = pad + + def forward(self, input): + return upfirdn2d(input, self.kernel, pad=self.pad) + + +class ScaledLeakyReLU(nn.Module): + def __init__(self, negative_slope=0.2): + super().__init__() + + self.negative_slope = negative_slope + + def forward(self, input): + return F.leaky_relu(input, negative_slope=self.negative_slope) + + +class EqualConv2d(nn.Module): + def __init__(self, in_channel, out_channel, kernel_size, stride=1, padding=0, bias=True): + super().__init__() + + self.weight = nn.Parameter(torch.randn(out_channel, in_channel, kernel_size, kernel_size)) + self.scale = 1 / math.sqrt(in_channel * kernel_size**2) + + self.stride = stride + self.padding = padding + + if bias: + self.bias = nn.Parameter(torch.zeros(out_channel)) + else: + self.bias = None + + def forward(self, input): + return F.conv2d(input, self.weight * self.scale, bias=self.bias, stride=self.stride, padding=self.padding) + + def __repr__(self): + return f"{self.__class__.__name__}({self.weight.shape[1]}, {self.weight.shape[0]}, {self.weight.shape[2]}, stride={self.stride}, padding={self.padding})" + + +class EqualLinear(nn.Module): + def __init__(self, in_dim, out_dim, bias=True, bias_init=0, lr_mul=1, activation=None): + super().__init__() + + self.weight = nn.Parameter(torch.randn(out_dim, in_dim).div_(lr_mul)) + + if bias: + self.bias = nn.Parameter(torch.zeros(out_dim).fill_(bias_init)) + else: + self.bias = None + + self.activation = activation + + self.scale = (1 / math.sqrt(in_dim)) * lr_mul + self.lr_mul = lr_mul + + def forward(self, input): + if self.activation: + out = F.linear(input, self.weight * self.scale) + out = fused_leaky_relu(out, self.bias * self.lr_mul) + else: + out = F.linear(input, self.weight * self.scale, bias=self.bias * self.lr_mul) + + return out + + def __repr__(self): + return f"{self.__class__.__name__}({self.weight.shape[1]}, {self.weight.shape[0]})" + + +class ConvLayer(nn.Sequential): + def __init__( + self, + in_channel, + out_channel, + kernel_size, + downsample=False, + blur_kernel=[1, 3, 3, 1], + bias=True, + activate=True, + ): + layers = [] + + if downsample: + factor = 2 + p = (len(blur_kernel) - factor) + (kernel_size - 1) + pad0 = (p + 1) // 2 + pad1 = p // 2 + + layers.append(Blur(blur_kernel, pad=(pad0, pad1))) + + stride = 2 + self.padding = 0 + + else: + stride = 1 + self.padding = kernel_size // 2 + + layers.append(EqualConv2d(in_channel, out_channel, kernel_size, padding=self.padding, stride=stride, bias=bias and not activate)) + + if activate: + if bias: + layers.append(FusedLeakyReLU(out_channel)) + else: + layers.append(ScaledLeakyReLU(0.2)) + + super().__init__(*layers) + + +class ResBlock(nn.Module): + def __init__(self, in_channel, out_channel, blur_kernel=[1, 3, 3, 1]): + super().__init__() + + self.conv1 = ConvLayer(in_channel, in_channel, 3) + self.conv2 = ConvLayer(in_channel, out_channel, 3, downsample=True) + + self.skip = ConvLayer(in_channel, out_channel, 1, downsample=True, activate=False, bias=False) + + def forward(self, input): + out = self.conv1(input) + out = self.conv2(out) + + skip = self.skip(input) + out = (out + skip) / math.sqrt(2) + + return out + + +class EncoderApp(nn.Module): + def __init__(self, size, w_dim=512): + super(EncoderApp, self).__init__() + + channels = {4: 512, 8: 512, 16: 512, 32: 512, 64: 256, 128: 128, 256: 64, 512: 32, 1024: 16} + + self.w_dim = w_dim + log_size = int(math.log(size, 2)) + + self.convs = nn.ModuleList() + self.convs.append(ConvLayer(3, channels[size], 1)) + + in_channel = channels[size] + for i in range(log_size, 2, -1): + out_channel = channels[2 ** (i - 1)] + self.convs.append(ResBlock(in_channel, out_channel)) + in_channel = out_channel + + self.convs.append(EqualConv2d(in_channel, self.w_dim, 4, padding=0, bias=False)) + + def forward(self, x): + res = [] + h = x + for conv in self.convs: + h = conv(h) + res.append(h) + + return res[-1].squeeze(-1).squeeze(-1), res[::-1][2:] + + +class Encoder(nn.Module): + def __init__(self, size, dim=512, dim_motion=20): + super(Encoder, self).__init__() + + # appearance netmork + self.net_app = EncoderApp(size, dim) + + # motion network + fc = [EqualLinear(dim, dim)] + for i in range(3): + fc.append(EqualLinear(dim, dim)) + + fc.append(EqualLinear(dim, dim_motion)) + self.fc = nn.Sequential(*fc) + + def enc_app(self, x): + h_source = self.net_app(x) + return h_source + + def enc_motion(self, x): + h, _ = self.net_app(x) + h_motion = self.fc(h) + return h_motion + + +class Direction(nn.Module): + def __init__(self, motion_dim): + super(Direction, self).__init__() + self.weight = nn.Parameter(torch.randn(512, motion_dim)) + + def forward(self, input): + weight = self.weight + 1e-8 + Q, R = custom_qr(weight) + if input is None: + return Q + else: + input_diag = torch.diag_embed(input) # alpha, diagonal matrix + out = torch.matmul(input_diag, Q.T) + out = torch.sum(out, dim=1) + return out + + +class Synthesis(nn.Module): + def __init__(self, motion_dim): + super(Synthesis, self).__init__() + self.direction = Direction(motion_dim) + + +class Generator(nn.Module): + def __init__(self, size, style_dim=512, motion_dim=20): + super().__init__() + + self.enc = Encoder(size, style_dim, motion_dim) + self.dec = Synthesis(motion_dim) + + def get_motion(self, img): + motion_feat = self.enc.enc_motion(img) + # motion_feat = torch.utils.checkpoint.checkpoint((self.enc.enc_motion), img, use_reentrant=True) + with torch.amp.autocast("cuda", dtype=torch.float32): + motion = self.dec.direction(motion_feat) + return motion diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/byt5/__init__.py b/lightx2v/models/input_encoders/hf/hunyuan15/byt5/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/byt5/format_prompt.py b/lightx2v/models/input_encoders/hf/hunyuan15/byt5/format_prompt.py new file mode 100644 index 0000000..335b4f0 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/hunyuan15/byt5/format_prompt.py @@ -0,0 +1,68 @@ +import json + + +def closest_color(requested_color): + import webcolors + + min_colors = {} + for key, name in webcolors.CSS3_HEX_TO_NAMES.items(): + r_c, g_c, b_c = webcolors.hex_to_rgb(key) + rd = (r_c - requested_color[0]) ** 2 + gd = (g_c - requested_color[1]) ** 2 + bd = (b_c - requested_color[2]) ** 2 + min_colors[(rd + gd + bd)] = name + return min_colors[min(min_colors.keys())] + + +def convert_rgb_to_names(rgb_tuple): + try: + import webcolors + + color_name = webcolors.rgb_to_name(rgb_tuple) + except ValueError: + color_name = closest_color(rgb_tuple) + return color_name + + +class MultilingualPromptFormat: + def __init__( + self, + font_path: str = "assets/glyph_sdxl_assets/multilingual_10-lang_idx.json", + color_path: str = "assets/glyph_sdxl_assets/color_idx.json", + ): + with open(font_path, "r") as f: + self.font_dict = json.load(f) + with open(color_path, "r") as f: + self.color_dict = json.load(f) + + def format_prompt(self, texts, styles): + """ + Text "{text}" in {color}, {type}. + """ + + prompt = "" + for text, style in zip(texts, styles): + text_prompt = f'Text "{text}"' + + attr_list = [] + + # format color + if style["color"] is not None: + import webcolors + + hex_color = style["color"] + rgb_color = webcolors.hex_to_rgb(hex_color) + color_name = convert_rgb_to_names(rgb_color) + attr_list.append(f"") + + # format font + if style["font-family"] is not None: + attr_list.append(f"<{style['font-family'][:2]}-font-{self.font_dict[style['font-family']]}>") + attr_suffix = ", ".join(attr_list) + text_prompt += " in " + attr_suffix + text_prompt += ". " + else: + text_prompt += ". " + + prompt = prompt + text_prompt + return prompt diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/byt5/model.py b/lightx2v/models/input_encoders/hf/hunyuan15/byt5/model.py new file mode 100644 index 0000000..fd0724c --- /dev/null +++ b/lightx2v/models/input_encoders/hf/hunyuan15/byt5/model.py @@ -0,0 +1,369 @@ +import glob +import json +import os +import re + +import torch +import torch.nn as nn +from safetensors import safe_open +from transformers import AutoTokenizer, T5ForConditionalGeneration + +from lightx2v_platform.base.global_var import AI_DEVICE + +from .format_prompt import MultilingualPromptFormat + + +def add_special_token( + tokenizer, + text_encoder, + add_color, + add_font, + color_ann_path, + font_ann_path, + multilingual=False, +): + """ + Add special tokens for color and font to tokenizer and text encoder. + + Args: + tokenizer: Huggingface tokenizer. + text_encoder: Huggingface T5 encoder. + add_color (bool): Whether to add color tokens. + add_font (bool): Whether to add font tokens. + color_ann_path (str): Path to color annotation JSON. + font_ann_path (str): Path to font annotation JSON. + multilingual (bool): Whether to use multilingual font tokens. + """ + with open(font_ann_path, "r") as f: + idx_font_dict = json.load(f) + with open(color_ann_path, "r") as f: + idx_color_dict = json.load(f) + + if multilingual: + font_token = [f"<{font_code[:2]}-font-{idx_font_dict[font_code]}>" for font_code in idx_font_dict] + else: + font_token = [f"" for i in range(len(idx_font_dict))] + color_token = [f"" for i in range(len(idx_color_dict))] + additional_special_tokens = [] + if add_color: + additional_special_tokens += color_token + if add_font: + additional_special_tokens += font_token + + tokenizer.add_tokens(additional_special_tokens, special_tokens=True) + # Set mean_resizing=False to avoid PyTorch LAPACK dependency + text_encoder.resize_token_embeddings(len(tokenizer), mean_resizing=False) + + +def load_byt5_and_byt5_tokenizer( + byt5_name="google/byt5-small", + special_token=False, + color_special_token=False, + font_special_token=False, + color_ann_path="assets/color_idx.json", + font_ann_path="assets/font_idx_512.json", + huggingface_cache_dir=None, + multilingual=False, + device=None, +): + """ + Load ByT5 encoder and tokenizer from Huggingface, and add special tokens if needed. + + Args: + byt5_name (str): Model name or path. + special_token (bool): Whether to add special tokens. + color_special_token (bool): Whether to add color tokens. + font_special_token (bool): Whether to add font tokens. + color_ann_path (str): Path to color annotation JSON. + font_ann_path (str): Path to font annotation JSON. + huggingface_cache_dir (str): Huggingface cache directory. + multilingual (bool): Whether to use multilingual font tokens. + device (str or torch.device): Device to load the model onto. + + Returns: + tuple: (byt5_text_encoder, byt5_tokenizer) + """ + byt5_tokenizer = AutoTokenizer.from_pretrained( + byt5_name, + cache_dir=huggingface_cache_dir, + ) + byt5_text_encoder = T5ForConditionalGeneration.from_pretrained( + byt5_name, + cache_dir=huggingface_cache_dir, + ).get_encoder() + + if "cuda" not in str(device): + device = torch.device(device) + else: + device = torch.device(device) + byt5_text_encoder = byt5_text_encoder.to(device) + + if special_token: + add_special_token( + byt5_tokenizer, + byt5_text_encoder, + add_color=color_special_token, + add_font=font_special_token, + color_ann_path=color_ann_path, + font_ann_path=font_ann_path, + multilingual=multilingual, + ) + return byt5_text_encoder, byt5_tokenizer + + +class ByT5Mapper(nn.Module): + """ + ByT5Mapper: Maps ByT5 encoder outputs to a new space, with optional residual connection. + + Args: + in_dim (int): Input dimension (must equal out_dim if use_residual). + out_dim (int): Output dimension after second linear layer. + hidden_dim (int): Hidden dimension for intermediate layer. + out_dim1 (int): Final output dimension. + use_residual (bool): Whether to use residual connection (default: True). + """ + + def __init__(self, in_dim, out_dim, hidden_dim, out_dim1, use_residual=True): + super().__init__() + if use_residual: + assert in_dim == out_dim + self.layernorm = nn.LayerNorm(in_dim) + self.fc1 = nn.Linear(in_dim, hidden_dim) + self.fc2 = nn.Linear(hidden_dim, out_dim) + self.fc3 = nn.Linear(out_dim, out_dim1) + self.use_residual = use_residual + self.act_fn = nn.GELU() + + def forward(self, x): + """ + Forward pass for ByT5Mapper. + + Args: + x (Tensor): Input tensor of shape (..., in_dim). + + Returns: + Tensor: Output tensor of shape (..., out_dim1). + """ + residual = x + x = self.layernorm(x) + x = self.fc1(x) + x = self.act_fn(x) + x = self.fc2(x) + x2 = self.act_fn(x) + x2 = self.fc3(x2) + if self.use_residual: + x2 = x2 + residual + return x2 + + +class ByT5TextEncoder: + def __init__( + self, + config, + device=torch.device("cpu"), + checkpoint_path=None, + byt5_max_length=256, + cpu_offload=False, + ): + self.cpu_offload = cpu_offload + self.config = config + self.byt5_max_length = byt5_max_length + self.enable_cfg = config.get("enable_cfg", False) + byT5_google_path = os.path.join(checkpoint_path, "text_encoder", "byt5-small") + byT5_ckpt_path = os.path.join(checkpoint_path, "text_encoder", "Glyph-SDXL-v2", "checkpoints/byt5_model.pt") + multilingual_prompt_format_color_path = os.path.join(checkpoint_path, "text_encoder", "Glyph-SDXL-v2", "assets/color_idx.json") + multilingual_prompt_format_font_path = os.path.join(checkpoint_path, "text_encoder", "Glyph-SDXL-v2", "assets/multilingual_10-lang_idx.json") + byt5_args = dict( + byT5_google_path=byT5_google_path, + byT5_ckpt_path=byT5_ckpt_path, + multilingual_prompt_format_color_path=multilingual_prompt_format_color_path, + multilingual_prompt_format_font_path=multilingual_prompt_format_font_path, + byt5_max_length=byt5_max_length, + ) + self.byt5_tokenizer, self.byt5_model, self.byt5_max_length = self.create_byt5(byt5_args, device) + self.byt5_model = self.byt5_model.to(device=device) + self.prompt_format = MultilingualPromptFormat(font_path=multilingual_prompt_format_font_path, color_path=multilingual_prompt_format_color_path) + + self.byt5_mapper = ByT5Mapper(in_dim=1472, out_dim=2048, hidden_dim=2048, out_dim1=self.config["hidden_size"], use_residual=False).to(torch.bfloat16) + + byt5_mapper_model_path = os.path.join(checkpoint_path, "transformer", self.config["transformer_model_name"]) + safetensors_files = glob.glob(os.path.join(byt5_mapper_model_path, "*.safetensors")) + byt5_mapper_state_dict = {} + for safetensor_path in safetensors_files: + with safe_open(safetensor_path, framework="pt", device="cpu") as f: + byt5_mapper_state_dict.update({key.replace("byt5_in.", ""): f.get_tensor(key).to(torch.bfloat16) for key in f.keys() if "byt5_in" in key}) + + self.byt5_mapper.load_state_dict(byt5_mapper_state_dict) + self.byt5_mapper.to(device=device) + + def create_byt5(self, args, device): + """ + Create ByT5 tokenizer and encoder, load weights if provided. + + Args: + args (dict): Configuration dictionary. + device (str or torch.device): Device to load the model onto. + + Returns: + tuple: (byt5_tokenizer, byt5_model, byt5_max_length) + """ + byt5_max_length = args["byt5_max_length"] + byt5_config = dict( + byt5_name=args["byT5_google_path"], + special_token=True, + color_special_token=True, + font_special_token=True, + color_ann_path=args["multilingual_prompt_format_color_path"], + font_ann_path=args["multilingual_prompt_format_font_path"], + multilingual=True, + ) + huggingface_cache_dir = None + byt5_model, byt5_tokenizer = load_byt5_and_byt5_tokenizer( + **byt5_config, + huggingface_cache_dir=huggingface_cache_dir, + device=device, + ) + + # Load custom checkpoint if provided + if args["byT5_ckpt_path"] is not None: + if "cuda" not in str(device): + byt5_state_dict = torch.load(args["byT5_ckpt_path"], map_location=device) + else: + byt5_state_dict = torch.load(args["byT5_ckpt_path"], map_location=device) + if "state_dict" in byt5_state_dict: + sd = byt5_state_dict["state_dict"] + newsd = {} + for k, v in sd.items(): + if k.startswith("module.text_tower.encoder."): + newsd[k[len("module.text_tower.encoder.") :]] = v + byt5_state_dict = newsd + byt5_model.load_state_dict(byt5_state_dict) + byt5_model.requires_grad_(False) + return byt5_tokenizer, byt5_model, byt5_max_length + + def _extract_glyph_texts(self, prompt): + """ + Extract glyph texts from prompt using regex pattern. + + Args: + prompt: Input prompt string + + Returns: + List of extracted glyph texts + """ + pattern = r"\"(.*?)\"|“(.*?)”" + matches = re.findall(pattern, prompt) + result = [match[0] or match[1] for match in matches] + result = list(dict.fromkeys(result)) if len(result) > 1 else result + return result + + def get_byt5_text_tokens(self, byt5_tokenizer, byt5_max_length, text_prompt): + """ + Tokenize text prompt for byT5 model. + + Args: + byt5_tokenizer: The byT5 tokenizer + byt5_max_length: Maximum sequence length + text_prompt: Text prompt to tokenize + + Returns: + Tuple of (input_ids, attention_mask) + """ + byt5_text_inputs = byt5_tokenizer( + text_prompt, + padding="max_length", + max_length=byt5_max_length, + truncation=True, + add_special_tokens=True, + return_tensors="pt", + ) + + return byt5_text_inputs.input_ids, byt5_text_inputs.attention_mask + + def _process_single_byt5_prompt(self, prompt_text, device): + """ + Process a single prompt for byT5 encoding. + + Args: + prompt_text: The prompt text to process + device: Target device for tensors + + Returns: + Tuple of (byt5_embeddings, byt5_mask) + """ + byt5_embeddings = torch.zeros((1, self.byt5_max_length, 1472), device=device) + byt5_mask = torch.zeros((1, self.byt5_max_length), device=device, dtype=torch.int64) + + glyph_texts = self._extract_glyph_texts(prompt_text) + + if len(glyph_texts) > 0: + text_styles = [{"color": None, "font-family": None} for _ in range(len(glyph_texts))] + formatted_text = self.prompt_format.format_prompt(glyph_texts, text_styles) + + text_ids, text_mask = self.get_byt5_text_tokens(self.byt5_tokenizer, self.byt5_max_length, formatted_text) + text_ids = text_ids.to(device) + text_mask = text_mask.to(device) + + byt5_outputs = self.byt5_model(text_ids, attention_mask=text_mask.float()) + byt5_embeddings = byt5_outputs[0] + byt5_mask = text_mask + + return byt5_embeddings, byt5_mask + + def _prepare_byt5_embeddings(self, prompts): + if isinstance(prompts, str): + prompt_list = [prompts] + elif isinstance(prompts, list): + prompt_list = prompts + else: + raise ValueError("prompts must be str or list of str") + + positive_embeddings = [] + positive_masks = [] + negative_embeddings = [] + negative_masks = [] + + for prompt in prompt_list: + pos_emb, pos_mask = self._process_single_byt5_prompt(prompt, AI_DEVICE) + positive_embeddings.append(pos_emb) + positive_masks.append(pos_mask) + + if self.enable_cfg: # TODO: 把cfg拆出去,更适合并行 + neg_emb, neg_mask = self._process_single_byt5_prompt("", AI_DEVICE) + negative_embeddings.append(neg_emb) + negative_masks.append(neg_mask) + + byt5_positive = torch.cat(positive_embeddings, dim=0) + byt5_positive_mask = torch.cat(positive_masks, dim=0) + + if self.enable_cfg: # TODO: 把cfg拆出去,更适合并行 + byt5_negative = torch.cat(negative_embeddings, dim=0) + byt5_negative_mask = torch.cat(negative_masks, dim=0) + + byt5_embeddings = torch.cat([byt5_negative, byt5_positive], dim=0) + byt5_masks = torch.cat([byt5_negative_mask, byt5_positive_mask], dim=0) + else: + byt5_embeddings = byt5_positive + byt5_masks = byt5_positive_mask + + return byt5_embeddings, byt5_masks + + @torch.no_grad() + def infer(self, prompts): + if self.cpu_offload: + self.byt5_model = self.byt5_model.to(AI_DEVICE) + self.byt5_mapper = self.byt5_mapper.to(AI_DEVICE) + byt5_embeddings, byt5_masks = self._prepare_byt5_embeddings(prompts) + byt5_features = self.byt5_mapper(byt5_embeddings.to(torch.bfloat16)) + if self.cpu_offload: + self.byt5_model = self.byt5_model.to("cpu") + self.byt5_mapper = self.byt5_mapper.to("cpu") + return byt5_features, byt5_masks + + +if __name__ == "__main__": + byt5 = ByT5TextEncoder(config={"transformer_model_name": "480p_t2v", "hidden_size": 2048}, device="cuda", checkpoint_path="/data/nvme1/yongyang/models/HunyuanVideo-1.5/ckpts/hunyuanvideo-1.5") + prompt = "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." + byt5_features, byt5_masks = byt5.infer(prompt) + print(byt5_features.shape, byt5_features.sum()) + print(byt5_masks.shape, byt5_masks.sum()) diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/qwen25/__init__.py b/lightx2v/models/input_encoders/hf/hunyuan15/qwen25/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/qwen25/model.py b/lightx2v/models/input_encoders/hf/hunyuan15/qwen25/model.py new file mode 100644 index 0000000..32150f8 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/hunyuan15/qwen25/model.py @@ -0,0 +1,641 @@ +import os + +os.environ["TOKENIZERS_PARALLELISM"] = "false" +import gc +import sys +from copy import deepcopy +from dataclasses import dataclass +from pathlib import Path +from typing import Optional, Tuple + +import loguru +import torch +import torch.nn as nn +from accelerate import init_empty_weights +from safetensors.torch import load_file +from transformers import ( + AutoConfig, + AutoModel, + AutoTokenizer, +) +from transformers.utils import ModelOutput + +current_dir = Path(__file__).resolve().parent +project_root = current_dir.parent.parent.parent.parent.parent.parent +if str(project_root) not in sys.path: + sys.path.insert(0, str(project_root)) + +from lightx2v.models.input_encoders.hf.q_linear import ( # noqa E402 + Q8FQuantLinearFp8, # noqa E402 + Q8FQuantLinearInt8, # noqa E402 + SglQuantLinearFp8, # noqa E402 + TorchaoQuantLinearInt8, # noqa E402 + VllmQuantLinearInt8, # noqa E402 +) +from lightx2v_platform.base.global_var import AI_DEVICE # noqa E402 + +torch_device_module = getattr(torch, AI_DEVICE) + + +def use_default(value, default): + """Utility: return value if not None, else default.""" + return value if value is not None else default + + +# Prompt templates for different models and tasks + + +__all__ = [ + "C_SCALE", + "PROMPT_TEMPLATE", + "MODEL_BASE", +] + +# =================== Constant Values ===================== +# Computation scale factor, 1P = 1_000_000_000_000_000. Tensorboard will display the value in PetaFLOPS to avoid +# overflow error when tensorboard logging values. +C_SCALE = 1_000_000_000_000_000 + +PROMPT_TEMPLATE_ENCODE_IMAGE_JSON = [ + { + "role": "system", + "content": "You are a helpful assistant. Describe the image by detailing the following aspects: \ + 1. The main content and theme of the image. \ + 2. The color, shape, size, texture, quantity, text, and spatial relationships of the objects. \ + 3. The background environment, light, style and atmosphere.", + }, + {"role": "user", "content": "{}"}, +] + +PROMPT_TEMPLATE_ENCODE_VIDEO_JSON = [ + { + "role": "system", + "content": "You are a helpful assistant. Describe the video by detailing the following aspects: \ + 1. The main content and theme of the video. \ + 2. The color, shape, size, texture, quantity, text, and spatial relationships of the objects. \ + 3. Actions, events, behaviors temporal relationships, physical movement changes of the objects. \ + 4. background environment, light, style and atmosphere. \ + 5. camera angles, movements, and transitions used in the video.", + }, + {"role": "user", "content": "{}"}, +] + +PROMPT_TEMPLATE = { + "li-dit-encode-image-json": {"template": PROMPT_TEMPLATE_ENCODE_IMAGE_JSON, "crop_start": -1}, # auto-calculate crop_start + "li-dit-encode-video-json": {"template": PROMPT_TEMPLATE_ENCODE_VIDEO_JSON, "crop_start": -1}, # auto-calculate crop_start +} + + +MODEL_BASE = os.getenv("MODEL_BASE", "") +TEXT_ENCODER_PATH = { + "qwen-2.5vl-7b": f"{MODEL_BASE}/Qwen2.5-VL-7B-Instruct", +} +TOKENIZER_PATH = { + "qwen-2.5vl-7b": f"{MODEL_BASE}/Qwen2.5-VL-7B-Instruct", +} + +PRECISION_TO_TYPE = { + "fp32": torch.float32, + "fp16": torch.float16, + "bf16": torch.bfloat16, +} + + +def replace_linear(module, new_linear_cls): + for name, child in list(module.named_children()): + if isinstance(child, nn.Linear): + new_linear = new_linear_cls(child.in_features, child.out_features, bias=(child.bias is not None)) + new_linear.to(device=next(child.parameters(), None).device if any(True for _ in child.parameters()) else torch.device("cpu")) + setattr(module, name, new_linear) + else: + replace_linear(child, new_linear_cls) + + +def load_text_encoder( + text_encoder_type, text_encoder_precision=None, text_encoder_path=None, logger=None, device=None, text_encoder_quantized=False, text_encoder_quant_scheme=None, text_encoder_quant_ckpt=None +): + if text_encoder_path is None: + if text_encoder_type not in TEXT_ENCODER_PATH: + raise ValueError(f"Unsupported text encoder type: {text_encoder_type}") + text_encoder_path = TEXT_ENCODER_PATH[text_encoder_type] + + if text_encoder_quantized: + config = AutoConfig.from_pretrained(text_encoder_path) + with init_empty_weights(): + text_encoder = AutoModel.from_config(config) + text_encoder = text_encoder.language_model + + if text_encoder_quant_scheme in ["int8", "int8-vllm"]: + linear_cls = VllmQuantLinearInt8 + elif text_encoder_quant_scheme in ["fp8", "fp8-sgl"]: + linear_cls = SglQuantLinearFp8 + elif text_encoder_quant_scheme == "int8-torchao": + linear_cls = TorchaoQuantLinearInt8 + elif text_encoder_quant_scheme == "int8-q8f": + linear_cls = Q8FQuantLinearInt8 + elif text_encoder_quant_scheme == "fp8-q8f": + linear_cls = Q8FQuantLinearFp8 + else: + NotImplementedError(f"Unsupported Qwen25_vl quant scheme: {text_encoder_quant_scheme}") + + replace_linear(text_encoder.layers, linear_cls) + + weight_dict = load_file(text_encoder_quant_ckpt, device=str(device)) + new_w_dict = {} + for key in weight_dict.keys(): + if key == "lm_head.weight": + continue + new_w_dict[key.replace("model.", "")] = weight_dict[key] + del weight_dict + + torch_device_module.empty_cache() + gc.collect() + text_encoder.load_state_dict(new_w_dict, assign=True) + + else: + text_encoder = AutoModel.from_pretrained(text_encoder_path, low_cpu_mem_usage=True) + text_encoder = text_encoder.language_model + + text_encoder.final_layer_norm = text_encoder.norm + + # from_pretrained will ensure that the model is in eval mode. + if text_encoder_precision is not None: + text_encoder = text_encoder.to(dtype=PRECISION_TO_TYPE[text_encoder_precision]) + + text_encoder.requires_grad_(False) + + if device is not None: + text_encoder = text_encoder.to(device) + + return text_encoder, text_encoder_path + + +def load_tokenizer(tokenizer_type, tokenizer_path=None, padding_side="right", logger=None): + processor = None + if tokenizer_path is None: + if tokenizer_type not in TOKENIZER_PATH: + raise ValueError(f"Unsupported tokenizer type: {tokenizer_type}") + tokenizer_path = TOKENIZER_PATH[tokenizer_type] + + tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, padding_side=padding_side) + + return tokenizer, tokenizer_path, processor + + +@dataclass +class TextEncoderModelOutput(ModelOutput): + """ + Base class for model's outputs that also contains a pooling of the last hidden states. + + Args: + hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`): + Sequence of hidden-states at the output of the last layer of the model. + attention_mask (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*): + Mask to avoid performing attention on padding token indices. Mask values selected in ``[0, 1]``: + hidden_states_list (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed): + Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, + + one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`. + Hidden-states of the model at the output of each layer plus the optional initial embedding outputs. + text_outputs (`list`, *optional*, returned when `return_texts=True` is passed): + List of decoded texts. + """ + + hidden_state: torch.FloatTensor = None + attention_mask: Optional[torch.LongTensor] = None + hidden_states_list: Optional[Tuple[torch.FloatTensor, ...]] = None + text_outputs: Optional[list] = None + image_features: Optional[list] = None + + +class TextEncoder(nn.Module): + def __init__( + self, + text_encoder_type: str, + max_length: int, + text_encoder_precision: Optional[str] = None, + text_encoder_path: Optional[str] = None, + tokenizer_type: Optional[str] = None, + tokenizer_path: Optional[str] = None, + output_key: Optional[str] = None, + use_attention_mask: bool = True, + prompt_template: Optional[dict] = None, + prompt_template_video: Optional[dict] = None, + hidden_state_skip_layer: Optional[int] = None, + apply_final_norm: bool = False, + reproduce: bool = False, + logger=None, + device=None, + qwen25vl_quantized=False, + qwen25vl_quant_scheme=None, + qwen25vl_quant_ckpt=None, + ): + super().__init__() + self.text_encoder_type = text_encoder_type + self.max_length = max_length + self.precision = text_encoder_precision + self.model_path = text_encoder_path + self.tokenizer_type = tokenizer_type if tokenizer_type is not None else text_encoder_type + self.tokenizer_path = tokenizer_path if tokenizer_path is not None else text_encoder_path + self.use_attention_mask = use_attention_mask + if prompt_template_video is not None: + assert use_attention_mask is True, "Attention mask is True required when training videos." + self.prompt_template = prompt_template + self.prompt_template_video = prompt_template_video + self.hidden_state_skip_layer = hidden_state_skip_layer + self.apply_final_norm = apply_final_norm + self.reproduce = reproduce + self.logger = logger + + self.use_template = self.prompt_template is not None + if self.use_template: + assert isinstance(self.prompt_template, dict) and "template" in self.prompt_template, f"`prompt_template` must be a dictionary with a key 'template', got {self.prompt_template}" + assert "{}" in str(self.prompt_template["template"]), f"`prompt_template['template']` must contain a placeholder `{{}}` for the input text, got {self.prompt_template['template']}" + + self.use_video_template = self.prompt_template_video is not None + if self.use_video_template: + if self.prompt_template_video is not None: + assert isinstance(self.prompt_template_video, dict) and "template" in self.prompt_template_video, ( + f"`prompt_template_video` must be a dictionary with a key 'template', got {self.prompt_template_video}" + ) + assert "{}" in str(self.prompt_template_video["template"]), ( + f"`prompt_template_video['template']` must contain a placeholder `{{}}` for the input text, got {self.prompt_template_video['template']}" + ) + + if text_encoder_type != "qwen-2.5vl-7b": + raise ValueError(f"Unsupported text encoder type: {text_encoder_type}") + self.output_key = output_key or "last_hidden_state" + + self.model, self.model_path = load_text_encoder( + text_encoder_type=self.text_encoder_type, + text_encoder_precision=self.precision, + text_encoder_path=self.model_path, + logger=self.logger, + device=device, + text_encoder_quantized=qwen25vl_quantized, + text_encoder_quant_scheme=qwen25vl_quant_scheme, + text_encoder_quant_ckpt=qwen25vl_quant_ckpt, + ) + + self.tokenizer, self.tokenizer_path, self.processor = load_tokenizer( + tokenizer_type=self.tokenizer_type, + tokenizer_path=self.tokenizer_path, + padding_side="right", + logger=self.logger, + ) + + # pre-calculate crop_start for image and video + if self.use_template and self.prompt_template is not None: + self.text2tokens("a photo of a cat", data_type="image") + # self.logger.info(f"crop_start for image: {self.prompt_template['crop_start']}") + if self.use_video_template and self.prompt_template_video is not None: + self.text2tokens("a photo of a cat", data_type="video") + # self.logger.info(f"crop_start for video: {self.prompt_template_video['crop_start']}") + + @property + def dtype(self): + return self.model.dtype + + @property + def device(self): + return self.model.device + + def __repr__(self): + return f"{self.text_encoder_type} ({self.precision} - {self.model_path})" + + @staticmethod + def apply_text_to_template(text, template, prevent_empty_text=True): + """ + Apply text to template. + + Args: + text (str): Input text. + template (str or list): Template string or list of chat conversation. + prevent_empty_text (bool): If Ture, we will prevent the user text from being empty + by adding a space. Defaults to True. + """ + if isinstance(template, str): + # Will send string to tokenizer. Used for llm + return template.format(text) + elif isinstance(template, list): + # For JSON list template format (chat conversation) + # Create a deep copy to avoid modifying the original template + template_copy = deepcopy(template) + for item in template_copy: + if isinstance(item, dict) and "content" in item: + # Replace placeholder with text in the content field + item["content"] = item["content"].format(text if text else (" " if prevent_empty_text else "")) + return template_copy + else: + raise TypeError(f"Unsupported template type: {type(template)}") + + def calculate_crop_start(self, tokenized_input): + """ + Automatically calculate the crop_start position based on identifying user tokens. + + Args: + tokenized_input: The output from the tokenizer containing input_ids + + Returns: + int: The position where the actual prompt content begins (after user markers) + """ + input_ids = tokenized_input["input_ids"][0].tolist() # Get the first example's tokens + + # Qwen user marker + marker = "<|im_start|>user\n" + + # Tokenize just the marker to get its token IDs + marker_tokens = self.tokenizer(marker, add_special_tokens=False)["input_ids"] + + # Find the end position of the marker in the input sequence + for i in range(len(input_ids) - len(marker_tokens) + 1): + if input_ids[i : i + len(marker_tokens)] == marker_tokens: + # Return the position after the marker + # print(f"crop_start: {i + len(marker_tokens)}, {self.tokenizer.decode(tokenized_input["input_ids"][0][i:i+len(marker_tokens)+10])}") # check crop_start + return i + len(marker_tokens) + + # If marker not found, try to find based on special tokens + if hasattr(self.tokenizer, "special_tokens_map"): + # Check for user token or any other special token that might indicate user input start + for token_name, token_value in self.tokenizer.special_tokens_map.items(): + if "user" in token_name.lower(): + user_token_id = self.tokenizer.convert_tokens_to_ids(token_value) + if user_token_id in input_ids: + return input_ids.index(user_token_id) + 1 + + # Default fallback: return 0 (no cropping) + return 0 + + def text2tokens(self, text, data_type="image", max_length=300): + """ + Tokenize the input text. + + Args: + text (str or list): Input text. + """ + tokenize_input_type = "str" + if self.use_template or self.use_video_template: + if data_type == "image": + prompt_template = self.prompt_template["template"] + crop_start = self.prompt_template.get("crop_start", -1) + elif data_type == "video": + prompt_template = self.prompt_template_video["template"] + crop_start = self.prompt_template_video.get("crop_start", -1) + else: + raise ValueError(f"Unsupported data type: {data_type}") + if isinstance(text, (list, tuple)): + text = [self.apply_text_to_template(one_text, prompt_template) for one_text in text] + if isinstance(text[0], list): + tokenize_input_type = "list" + elif isinstance(text, str): + text = self.apply_text_to_template(text, prompt_template) + if isinstance(text, list): + tokenize_input_type = "list" + else: + raise TypeError(f"Unsupported text type: {type(text)}") + + # First pass: tokenize with arbitrary max_length to find crop_start + if crop_start == -1: + # Use temporary max_length for the first pass (large enough) + temp_kwargs = dict( + truncation=True, + max_length=256, # Temporary large value + padding="max_length", + return_tensors="pt", + ) + + # First tokenization pass to calculate crop_start + if tokenize_input_type == "str": + temp_tokenized = self.tokenizer( + text, + return_length=False, + return_overflowing_tokens=False, + return_attention_mask=True, + **temp_kwargs, + ) + elif tokenize_input_type == "list": + temp_tokenized = self.tokenizer.apply_chat_template( + text, + add_generation_prompt=True, + tokenize=True, + return_dict=True, + **temp_kwargs, + ) + + # Calculate the crop_start from this first pass + crop_start = self.calculate_crop_start(temp_tokenized) + + # Store the calculated crop_start for future use + if data_type == "image": + self.prompt_template["crop_start"] = crop_start + else: + self.prompt_template_video["crop_start"] = crop_start + else: + crop_start = 0 + + # Second pass: tokenize with the proper max_length using the found crop_start + kwargs = dict( + truncation=True, + max_length=max_length + (crop_start if crop_start > 0 else 0), + padding="max_length", + return_tensors="pt", + ) + + if tokenize_input_type == "str": + tokenized_output = self.tokenizer( + text, + return_length=False, + return_overflowing_tokens=False, + return_attention_mask=True, + **kwargs, + ) + elif tokenize_input_type == "list": + tokenized_output = self.tokenizer.apply_chat_template( + text, + add_generation_prompt=True, + tokenize=True, + return_dict=True, + **kwargs, + ) + else: + raise ValueError(f"Unsupported tokenize_input_type: {tokenize_input_type}") + + return tokenized_output + + def encode( + self, + batch_encoding, + use_attention_mask=None, + output_hidden_states=False, + do_sample=None, + hidden_state_skip_layer=None, + return_texts=False, + data_type="image", + device=None, + semantic_images=None, + is_uncond=False, + ): + """ + Args: + batch_encoding (dict): Batch encoding from tokenizer. + use_attention_mask (bool): Whether to use attention mask. If None, use self.use_attention_mask. + Defaults to None. + output_hidden_states (bool): Whether to output hidden states. If False, return the value of + self.output_key. If True, return the entire output. If set self.hidden_state_skip_layer, + output_hidden_states will be set True. Defaults to False. + do_sample (bool): Whether to sample from the model. Used for Decoder-Only LLMs. Defaults to None. + When self.produce is False, do_sample is set to True by default. + hidden_state_skip_layer (int): Number of hidden states to hidden_state_skip_layer. 0 means the last layer. + If None, self.output_key will be used. Defaults to None. + return_texts (bool): Whether to return the decoded texts. Defaults to False. + """ + device = self.model.device if device is None else device + use_attention_mask = use_default(use_attention_mask, self.use_attention_mask) + hidden_state_skip_layer = use_default(hidden_state_skip_layer, self.hidden_state_skip_layer) + do_sample = use_default(do_sample, not self.reproduce) + + attention_mask = batch_encoding["attention_mask"].to(device) if use_attention_mask else None + outputs = self.model( + input_ids=batch_encoding["input_ids"].to(device), + attention_mask=attention_mask, + output_hidden_states=output_hidden_states or hidden_state_skip_layer is not None, + ) + if hidden_state_skip_layer is not None: + last_hidden_state = outputs.hidden_states[-(hidden_state_skip_layer + 1)] + # Real last hidden state already has layer norm applied. So here we only apply it + # for intermediate layers. + if hidden_state_skip_layer > 0 and self.apply_final_norm: + last_hidden_state = self.model.final_layer_norm(last_hidden_state) + else: + last_hidden_state = outputs[self.output_key] + + # Remove hidden states of instruction tokens, only keep prompt tokens. + if self.use_template: + if data_type == "image": + crop_start = self.prompt_template.get("crop_start", 0) + elif data_type == "video": + crop_start = self.prompt_template_video.get("crop_start", 0) + else: + raise ValueError(f"Unsupported data type: {data_type}") + if crop_start > 0: + last_hidden_state = last_hidden_state[:, crop_start:] + attention_mask = attention_mask[:, crop_start:] if use_attention_mask else None + + if output_hidden_states: + return TextEncoderModelOutput(last_hidden_state, attention_mask, outputs.hidden_states) + return TextEncoderModelOutput(last_hidden_state, attention_mask) + + def forward( + self, + text, + use_attention_mask=None, + output_hidden_states=False, + do_sample=False, + hidden_state_skip_layer=None, + return_texts=False, + ): + batch_encoding = self.text2tokens(text, max_length=self.max_length) + return self.encode( + batch_encoding, + use_attention_mask=use_attention_mask, + output_hidden_states=output_hidden_states, + do_sample=do_sample, + hidden_state_skip_layer=hidden_state_skip_layer, + return_texts=return_texts, + ) + + +class Qwen25VL_TextEncoder: + def __init__( + self, + text_len=1000, + dtype=torch.float16, + device=torch.device("cpu"), + checkpoint_path=None, + cpu_offload=False, + qwen25vl_quantized=False, + qwen25vl_quant_scheme=None, + qwen25vl_quant_ckpt=None, + ): + self.text_len = text_len + self.dtype = dtype + self.cpu_offload = cpu_offload + self.qwen25vl_quantized = qwen25vl_quantized + self.qwen25vl_quant_scheme = qwen25vl_quant_scheme + if self.qwen25vl_quantized: + assert self.qwen25vl_quant_scheme is not None + self.qwen25vl_quant_ckpt = qwen25vl_quant_ckpt + self.num_videos_per_prompt = 1 + + self.text_encoder = TextEncoder( + text_encoder_type="qwen-2.5vl-7b", # TODO: 不要用 qwen, 改成 llm + tokenizer_type="qwen-2.5vl-7b", + text_encoder_path=checkpoint_path, + max_length=text_len, + text_encoder_precision="fp16", + prompt_template=PROMPT_TEMPLATE["li-dit-encode-image-json"], + prompt_template_video=PROMPT_TEMPLATE["li-dit-encode-video-json"], + hidden_state_skip_layer=2, + apply_final_norm=False, + reproduce=False, + logger=loguru.logger, + device=device, + qwen25vl_quantized=qwen25vl_quantized, + qwen25vl_quant_scheme=qwen25vl_quant_scheme, + qwen25vl_quant_ckpt=qwen25vl_quant_ckpt, + ) + + def infer(self, texts): + if self.cpu_offload: + self.text_encoder = self.text_encoder.to(AI_DEVICE) + text_inputs = self.text_encoder.text2tokens(texts, data_type="video", max_length=self.text_len) + prompt_outputs = self.text_encoder.encode(text_inputs, data_type="video", device=AI_DEVICE) + if self.cpu_offload: + self.text_encoder = self.text_encoder.to("cpu") + prompt_embeds = prompt_outputs.hidden_state + attention_mask = prompt_outputs.attention_mask + + if attention_mask is not None: + attention_mask = attention_mask.to(AI_DEVICE) + _, seq_len = attention_mask.shape + attention_mask = attention_mask.repeat(1, self.num_videos_per_prompt) + attention_mask = attention_mask.view(self.num_videos_per_prompt, seq_len) + prompt_embeds = prompt_embeds.to(dtype=self.dtype, device=AI_DEVICE) + + seq_len = prompt_embeds.shape[1] + # duplicate text embeddings for each generation per prompt, using mps friendly method + prompt_embeds = prompt_embeds.repeat(1, self.num_videos_per_prompt, 1) + prompt_embeds = prompt_embeds.view(self.num_videos_per_prompt, seq_len, -1) + return prompt_embeds, attention_mask + + +if __name__ == "__main__": + text_encoder_path = "/data/nvme0/models/hy1118/ckpts/hunyuanvideo-1.5/text_encoder/llm" + device = "cuda" + import torch.nn.functional as F + + prompt = "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." + negative_prompt = "" + + model = Qwen25VL_TextEncoder( + text_len=1000, + dtype=torch.float16, + device=device, + checkpoint_path=text_encoder_path, + cpu_offload=False, + qwen25vl_quantized=True, + qwen25vl_quant_scheme="int8-q8f", + qwen25vl_quant_ckpt="/data/nvme0/models/hy1118/quant_ckpts/qwen25vl-llm-int8.safetensors", + ) + + prompt_embeds, attention_mask = model.infer([prompt]) + print(f"prompt_embeds: {prompt_embeds}, {prompt_embeds.shape}") + a = torch.load("prompt_embeds.pth") + # print(f"attention_mask: {attention_mask}, {attention_mask.sum()}, {attention_mask.shape}") + print(F.cosine_similarity(prompt_embeds.flatten().unsqueeze(0), a.flatten().unsqueeze(0), dim=1)) + + negative_prompt_embeds, negative_attention_mask = model.infer([negative_prompt]) + print(f"negative_prompt_embeds: {negative_prompt_embeds}, {negative_prompt_embeds.shape}") + b = torch.load("negative_prompt_embeds.pth") + print(F.cosine_similarity(negative_prompt_embeds.flatten().unsqueeze(0), b.flatten().unsqueeze(0), dim=1)) + +# print(f"negative_attention_mask: {negative_attention_mask}, {negative_attention_mask.sum()}, {negative_attention_mask.shape}") diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/siglip/__init__.py b/lightx2v/models/input_encoders/hf/hunyuan15/siglip/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/hunyuan15/siglip/model.py b/lightx2v/models/input_encoders/hf/hunyuan15/siglip/model.py new file mode 100644 index 0000000..baa87ae --- /dev/null +++ b/lightx2v/models/input_encoders/hf/hunyuan15/siglip/model.py @@ -0,0 +1,303 @@ +import glob +import os +from dataclasses import dataclass +from typing import Optional, Tuple + +import numpy as np +import torch +import torch.nn as nn +from safetensors.torch import safe_open +from transformers import SiglipImageProcessor, SiglipVisionModel +from transformers.utils import ModelOutput + +from lightx2v_platform.base.global_var import AI_DEVICE + +PRECISION_TO_TYPE = { + "fp32": torch.float32, + "fp16": torch.float16, + "bf16": torch.bfloat16, +} + +VISION_ENCODER_PATH = {} + + +def use_default(value, default): + return value if value is not None else default + + +def load_vision_encoder( + vision_encoder_type, + vision_encoder_precision=None, + vision_encoder_path=None, + logger=None, + device=None, +): + if vision_encoder_path is None: + vision_encoder_path = VISION_ENCODER_PATH[vision_encoder_type] + + if vision_encoder_type == "siglip": + vision_encoder = SiglipVisionModel.from_pretrained(vision_encoder_path, subfolder="image_encoder") + else: + raise ValueError(f"Unsupported vision encoder type: {vision_encoder_type}") + + # from_pretrained will ensure that the model is in eval mode. + if vision_encoder_precision is not None: + vision_encoder = vision_encoder.to(dtype=PRECISION_TO_TYPE[vision_encoder_precision]) + + vision_encoder.requires_grad_(False) + + if device is not None: + vision_encoder = vision_encoder.to(device) + + return vision_encoder, vision_encoder_path + + +def load_image_processor(processor_type, processor_path=None, logger=None): + if processor_path is None: + processor_path = VISION_ENCODER_PATH[processor_type] + + if processor_type == "siglip": + processor = SiglipImageProcessor.from_pretrained(processor_path, subfolder="feature_extractor") + else: + raise ValueError(f"Unsupported processor type: {processor_type}") + + return processor, processor_path + + +@dataclass +class VisionEncoderModelOutput(ModelOutput): + """ + Base class for vision encoder model's outputs. + + Args: + last_hidden_state (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`): + Sequence of hidden-states at the output of the last layer of the model. + pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`, *optional*): + Last layer hidden-state of the first token of the sequence (classification token) + after further processing through the layers used for the auxiliary pretraining task. + hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed): + Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, + + one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`. + Hidden-states of the model at the output of each layer plus the optional initial embedding outputs. + """ + + last_hidden_state: torch.FloatTensor = None + pooler_output: Optional[torch.FloatTensor] = None + hidden_states: Optional[Tuple[torch.FloatTensor, ...]] = None + + +class VisionEncoder(nn.Module): + def __init__( + self, + vision_encoder_type: str, + vision_encoder_precision: Optional[str] = None, + vision_encoder_path: Optional[str] = None, + processor_type: Optional[str] = None, + processor_path: Optional[str] = None, + output_key: Optional[str] = None, + logger=None, + device=None, + cpu_offload=False, + ): + super().__init__() + self.cpu_offload = cpu_offload + self.vision_encoder_type = vision_encoder_type + self.precision = vision_encoder_precision + self.model_path = vision_encoder_path + self.processor_type = processor_type if processor_type is not None else vision_encoder_type + self.processor_path = processor_path if processor_path is not None else vision_encoder_path + self.logger = logger + + if "siglip" in vision_encoder_type: + self.output_key = output_key or "last_hidden_state" + else: + raise ValueError(f"Unsupported vision encoder type: {vision_encoder_type}") + + self.model, self.model_path = load_vision_encoder( + vision_encoder_type=self.vision_encoder_type, + vision_encoder_precision=self.precision, + vision_encoder_path=self.model_path, + logger=self.logger, + device=device, + ) + self.dtype = self.model.dtype + self.device = self.model.device + + self.processor, self.processor_path = load_image_processor( + processor_type=self.processor_type, + processor_path=self.processor_path, + logger=self.logger, + ) + + def __repr__(self): + return f"{self.vision_encoder_type} ({self.precision} - {self.model_path})" + + def encode_latents_to_images(self, latents, vae, reorg_token=False): + """ + Convert latents to images using VAE decoder. + + Args: + latents: Input latents tensor + vae: VAE model for decoding + reorg_token: Whether to reorg the token + Returns: + images: Decoded images as numpy array + """ + # Handle both 4D and 5D latents (for video, take first frame) + first_image_latents = latents[:, :, 0, ...] if len(latents.shape) == 5 else latents + first_image_latents = 1 / vae.config.scaling_factor * first_image_latents + + first_image = vae.decode(first_image_latents.unsqueeze(2).to(vae.dtype), return_dict=False)[0].cpu() + + first_image = first_image[:, :, 0, :, :] + first_image = (first_image / 2 + 0.5).clamp(0, 1) + first_image = (first_image * 255.0).clamp(0, 255.0) + first_image = first_image.to(torch.uint8).numpy() + first_image = first_image.transpose(0, 2, 3, 1) + + assert isinstance(first_image, np.ndarray) + assert first_image.ndim == 4 and first_image.shape[3] == 3 + assert first_image.dtype == np.uint8 + + return first_image + + def encode_images(self, images): + """ + Encode images using the vision encoder. + + Args: + images: Input images (numpy array or preprocessed tensor) + + Returns: + VisionEncoderModelOutput with encoded features + """ + if self.cpu_offload: + self.model = self.model.to(AI_DEVICE) + self.processor = self.processor.to(AI_DEVICE) + + if isinstance(images, np.ndarray): + # Preprocess images if they're numpy arrays + preprocessed = self.processor.preprocess(images=images, return_tensors="pt").to(device=AI_DEVICE, dtype=self.model.dtype) + else: + # Assume already preprocessed + preprocessed = images + + outputs = self.model(**preprocessed) + + if self.cpu_offload: + self.model = self.model.to("cpu") + self.processor = self.processor.to("cpu") + + return VisionEncoderModelOutput( + last_hidden_state=outputs.last_hidden_state, + pooler_output=outputs.pooler_output if hasattr(outputs, "pooler_output") else None, + hidden_states=outputs.hidden_states if hasattr(outputs, "hidden_states") else None, + ) + + def encode_latents(self, latents, vae, reorg_token=False): + """ + Encode latents by first converting to images, then encoding. + This is the main function that replaces sigclip_vision_encode. + + Args: + latents: Input latent tensors + vae: VAE model for decoding latents to images + + Returns: + Encoded image features + """ + # Convert latents to images + images = self.encode_latents_to_images(latents, vae, reorg_token) + + # Encode images + outputs = self.encode_images(images) + + return outputs.last_hidden_state + + def forward(self, images): + """ + Forward pass for direct image encoding. + + Args: + images: Input images + + Returns: + VisionEncoderModelOutput with encoded features + """ + return self.encode_images(images) + + +class SiglipVisionEncoder: + def __init__( + self, + config, + device=torch.device("cpu"), + checkpoint_path=None, + cpu_offload=False, + ): + self.config = config + self.device = device + self.cpu_offload = cpu_offload + self.vision_states_dim = 1152 + vision_encoder_path = os.path.join(checkpoint_path, "vision_encoder", "siglip") + + self.vision_encoder = VisionEncoder( + vision_encoder_type="siglip", + vision_encoder_precision="fp16", + vision_encoder_path=vision_encoder_path, + processor_type=None, + processor_path=None, + output_key=None, + logger=None, + device=self.device, + cpu_offload=self.cpu_offload, + ) + + self.vision_in = VisionProjection(in_dim=self.vision_states_dim, out_dim=self.config["hidden_size"], flf_pos_emb=False).to(torch.bfloat16) + + vision_in_model_path = os.path.join(checkpoint_path, "transformer", self.config["transformer_model_name"]) + safetensors_files = glob.glob(os.path.join(vision_in_model_path, "*.safetensors")) + vision_in_state_dict = {} + for safetensor_path in safetensors_files: + with safe_open(safetensor_path, framework="pt", device="cpu") as f: + vision_in_state_dict.update({key.replace("vision_in.", ""): f.get_tensor(key).to(torch.bfloat16) for key in f.keys() if "vision_in" in key}) + self.vision_in.load_state_dict(vision_in_state_dict) + self.vision_in.to(device=device) + + @torch.no_grad() + def infer(self, vision_states): + if self.cpu_offload: + self.vision_in = self.vision_in.to(AI_DEVICE) + vision_states = self.vision_in(vision_states) + if self.cpu_offload: + self.vision_in = self.vision_in.to("cpu") + return vision_states + + @torch.no_grad() + def encode_images(self, images): + return self.vision_encoder.encode_images(images) + + +class VisionProjection(torch.nn.Module): + """ + Projects vision embeddings. Also handles dropout for classifier-free guidance. + + Adapted from https://github.com/Wan-Video/Wan2.1/blob/main/wan/modules/model.py#L488 + """ + + def __init__(self, in_dim, out_dim, flf_pos_emb=False): + super().__init__() + + self.proj = torch.nn.Sequential(torch.nn.LayerNorm(in_dim), torch.nn.Linear(in_dim, in_dim), torch.nn.GELU(), torch.nn.Linear(in_dim, out_dim), torch.nn.LayerNorm(out_dim)) + + if flf_pos_emb: # NOTE: we only use this for `flf2v` + self.emb_pos = nn.Parameter(torch.zeros(1, FIRST_LAST_FRAME_CONTEXT_TOKEN_NUMBER, 1280)) + + @torch.no_grad() + def forward(self, image_embeds): + if hasattr(self, "emb_pos"): + bs, n, d = image_embeds.shape + image_embeds = image_embeds.view(-1, 2 * n, d) + image_embeds = image_embeds + self.emb_pos + clip_extra_context_tokens = self.proj(image_embeds) + return clip_extra_context_tokens diff --git a/lightx2v/models/input_encoders/hf/q_linear.py b/lightx2v/models/input_encoders/hf/q_linear.py new file mode 100644 index 0000000..e4ee40b --- /dev/null +++ b/lightx2v/models/input_encoders/hf/q_linear.py @@ -0,0 +1,312 @@ +import torch +import torch.nn as nn + +try: + from vllm import _custom_ops as ops +except ImportError: + ops = None + +try: + import sgl_kernel +except ImportError: + sgl_kernel = None + +try: + from torchao.quantization.utils import quant_int8_per_token_matmul, quantize_activation_per_token_absmax +except ImportError: + quant_int8_per_token_matmul, quantize_activation_per_token_absmax = None, None + +try: + from q8_kernels.functional.linear import q8_linear +except ImportError: + q8_linear = None + +try: + from q8_kernels.functional.linear import fp8_linear +except ImportError: + fp8_linear = None + + +class VllmQuantLinearInt8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.bfloat16): + super().__init__() + self.in_features = in_features + self.out_features = out_features + + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.int8)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=dtype)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + input_tensor_quant, input_tensor_scale, _ = ops.scaled_int8_quant(x, scale=None, azp=None, symmetric=True) + return input_tensor_quant, input_tensor_scale + + def forward(self, input_tensor): + input_tensor = input_tensor.squeeze(0) + shape = (input_tensor.shape[0], self.weight.shape[0]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + torch.ops._C.cutlass_scaled_mm( + output_tensor, + input_tensor_quant, + self.weight.t(), + input_tensor_scale, + self.weight_scale.float(), + self.bias, + ) + return output_tensor.unsqueeze(0) + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self + + +class VllmQuantLinearFp8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.bfloat16): + super().__init__() + self.in_features = in_features + self.out_features = out_features + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.float8_e4m3fn)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=dtype)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + input_tensor_quant, input_tensor_scale = ops.scaled_fp8_quant(x, None, scale_ub=None, use_per_token_if_dynamic=True) + return input_tensor_quant, input_tensor_scale + + def forward(self, input_tensor): + input_tensor = input_tensor.squeeze(0) + shape = (input_tensor.shape[0], self.weight.shape[0]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + torch.ops._C.cutlass_scaled_mm( + output_tensor, + input_tensor_quant, + self.weight.t(), + input_tensor_scale, + self.weight_scale.float(), + self.bias, + ) + + return output_tensor.unsqueeze(0) + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self + + +class SglQuantLinearFp8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.bfloat16): + super().__init__() + self.in_features = in_features + self.out_features = out_features + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.float8_e4m3fn)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=dtype)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + m, k = x.shape + input_tensor_quant = torch.empty((m, k), dtype=torch.float8_e4m3fn, device="cuda", requires_grad=False) + input_tensor_scale = torch.empty((m, 1), dtype=torch.float32, device="cuda", requires_grad=False) + sgl_kernel.sgl_per_token_quant_fp8(x, input_tensor_quant, input_tensor_scale) + return input_tensor_quant, input_tensor_scale + + def forward(self, input_tensor): + input_tensor = input_tensor.squeeze(0) + shape = (input_tensor.shape[0], self.weight.shape[0]) + dtype = input_tensor.dtype + device = input_tensor.device + output_tensor = torch.empty(shape, dtype=dtype, device=device, requires_grad=False) + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = sgl_kernel.fp8_scaled_mm( + input_tensor_quant, + self.weight.t(), + input_tensor_scale, + self.weight_scale.float(), + dtype, + bias=self.bias, + ) + + return output_tensor.unsqueeze(0) + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self + + +class TorchaoQuantLinearInt8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.bfloat16): + super().__init__() + self.in_features = in_features + self.out_features = out_features + + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.int8)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=dtype)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + input_tensor_quant, input_tensor_scale = quantize_activation_per_token_absmax(x) + return input_tensor_quant, input_tensor_scale + + def forward(self, input_tensor): + input_tensor = input_tensor.squeeze(0) + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = quant_int8_per_token_matmul(input_tensor_quant, input_tensor_scale, self.weight.t(), self.weight_scale.t().float(), output_dtype=torch.bfloat16) + if self.bias is not None: + output_tensor = output_tensor + self.bias + + return output_tensor.unsqueeze(0) + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self + + +class Q8FQuantLinearInt8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.float32): + super().__init__() + self.in_features = in_features + self.out_features = out_features + + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.int8)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=torch.float32)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + input_tensor_quant, input_tensor_scale, _ = ops.scaled_int8_quant(x, scale=None, azp=None, symmetric=True) + return input_tensor_quant, input_tensor_scale + + def forward(self, x): + input_tensor_quant, input_tensor_scale = self.act_quant_func(x) + output_tensor = q8_linear( + input_tensor_quant, + self.weight, + self.bias.float() if self.bias is not None else None, + input_tensor_scale, + self.weight_scale.float(), + fuse_gelu=False, + out_dtype=torch.bfloat16, + ) + return output_tensor + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self + + +class Q8FQuantLinearFp8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.float32): + super().__init__() + self.in_features = in_features + self.out_features = out_features + + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.float8_e4m3fn)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=torch.float32)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + input_tensor_quant, input_tensor_scale = ops.scaled_fp8_quant(x.squeeze(0), None, scale_ub=None, use_per_token_if_dynamic=True) + return input_tensor_quant, input_tensor_scale + + def forward(self, x): + input_tensor_quant, input_tensor_scale = self.act_quant_func(x) + output_tensor = fp8_linear( + input_tensor_quant, + self.weight, + self.bias.float() if self.bias is not None else None, + input_tensor_scale, + self.weight_scale.float(), + out_dtype=torch.bfloat16, + ) + return output_tensor + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self diff --git a/lightx2v/models/input_encoders/hf/qwen25/qwen25_vlforconditionalgeneration.py b/lightx2v/models/input_encoders/hf/qwen25/qwen25_vlforconditionalgeneration.py new file mode 100644 index 0000000..f752023 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/qwen25/qwen25_vlforconditionalgeneration.py @@ -0,0 +1,190 @@ +import gc +import math +import os + +import torch + +try: + from transformers import Qwen2Tokenizer, Qwen2_5_VLForConditionalGeneration +except ImportError: + Qwen2Tokenizer = None + Qwen2_5_VLForConditionalGeneration = None + +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + +try: + from diffusers.image_processor import VaeImageProcessor + from transformers import Qwen2VLProcessor +except ImportError: + VaeImageProcessor = None + Qwen2VLProcessor = None + +PREFERRED_QWENIMAGE_RESOLUTIONS = [ + (672, 1568), + (688, 1504), + (720, 1456), + (752, 1392), + (800, 1328), + (832, 1248), + (880, 1184), + (944, 1104), + (1024, 1024), + (1104, 944), + (1184, 880), + (1248, 832), + (1328, 800), + (1392, 752), + (1456, 720), + (1504, 688), + (1568, 672), +] + + +def calculate_dimensions(target_area, ratio): + width = math.sqrt(target_area * ratio) + height = width / ratio + + width = round(width / 32) * 32 + height = round(height / 32) * 32 + + return width, height + + +class Qwen25_VLForConditionalGeneration_TextEncoder: + def __init__(self, config): + self.config = config + self.tokenizer_max_length = 1024 + self.prompt_template_encode = config["prompt_template_encode"] + self.prompt_template_encode_start_idx = config["prompt_template_encode_start_idx"] + """ + for Qwen-Image-Edit model, CONDITION_IMAGE_SIZE = 1024 * 1024 + for Qwen-Image-Edit-2509 model, CONDITION_IMAGE_SIZE = 384 * 384 + """ + self.CONDITION_IMAGE_SIZE = config.get("CONDITION_IMAGE_SIZE", 384 * 384) + self.USE_IMAGE_ID_IN_PROMPT = config.get("USE_IMAGE_ID_IN_PROMPT", True) + self.VAE_IMAGE_SIZE = 1024 * 1024 + + self.cpu_offload = config.get("cpu_offload", False) + self.dtype = torch.bfloat16 + self.load() + + def load(self): + self.text_encoder = Qwen2_5_VLForConditionalGeneration.from_pretrained(os.path.join(self.config["model_path"], "text_encoder"), torch_dtype=torch.bfloat16) + if not self.cpu_offload: + self.text_encoder = self.text_encoder.to(AI_DEVICE) + + self.tokenizer = Qwen2Tokenizer.from_pretrained(os.path.join(self.config["model_path"], "tokenizer")) + if self.config["task"] == "i2i": + self.image_processor = VaeImageProcessor(vae_scale_factor=self.config["vae_scale_factor"] * 2) + self.processor = Qwen2VLProcessor.from_pretrained(os.path.join(self.config["model_path"], "processor")) + + def _extract_masked_hidden(self, hidden_states: torch.Tensor, mask: torch.Tensor): + bool_mask = mask.bool() + valid_lengths = bool_mask.sum(dim=1) + selected = hidden_states[bool_mask] + split_result = torch.split(selected, valid_lengths.tolist(), dim=0) + return split_result + + def preprocess_image(self, image): + image_width, image_height = image.size + condition_width, condition_height = calculate_dimensions(self.CONDITION_IMAGE_SIZE, image_width / image_height) + vae_width, vae_height = calculate_dimensions(self.VAE_IMAGE_SIZE, image_width / image_height) + condition_image = self.image_processor.resize(image, condition_height, condition_width) + vae_image = self.image_processor.preprocess(image, vae_height, vae_width).unsqueeze(2) + + return condition_image, vae_image, (condition_height, condition_width), (vae_height, vae_width) + + @torch.no_grad() + def infer(self, text, image_list=None): + if self.cpu_offload: + self.text_encoder.to(AI_DEVICE) + + if image_list is not None: + condition_image_list = [] + vae_image_list = [] + condition_image_info_list = [] + vae_image_info_list = [] + if self.USE_IMAGE_ID_IN_PROMPT: + base_img_prompt = "" + img_prompt_template = "Picture {}: <|vision_start|><|image_pad|><|vision_end|>" + for i, image in enumerate(image_list): + base_img_prompt += img_prompt_template.format(i + 1) + condition_image, vae_image, condition_image_info, vae_image_info = self.preprocess_image(image) + condition_image_list.append(condition_image) + vae_image_list.append(vae_image) + condition_image_info_list.append(condition_image_info) + vae_image_info_list.append(vae_image_info) + else: + base_img_prompt = "<|vision_start|><|image_pad|><|vision_end|>" + for i, image in enumerate(image_list): + condition_image, vae_image, condition_image_info, vae_image_info = self.preprocess_image(image) + condition_image_list.append(condition_image) + vae_image_list.append(vae_image) + condition_image_info_list.append(condition_image_info) + vae_image_info_list.append(vae_image_info) + + template = self.prompt_template_encode + drop_idx = self.prompt_template_encode_start_idx + txt = [template.format(base_img_prompt + e) for e in text] + + model_inputs = self.processor( + text=txt, + images=condition_image_list, + padding=True, + return_tensors="pt", + ).to(AI_DEVICE) + + encoder_hidden_states = self.text_encoder( + input_ids=model_inputs.input_ids, + attention_mask=model_inputs.attention_mask, + pixel_values=model_inputs.pixel_values, + image_grid_thw=model_inputs.image_grid_thw, + output_hidden_states=True, + ) + + image_info = { + "condition_image_list": condition_image_list, + "vae_image_list": vae_image_list, + "condition_image_info_list": condition_image_info_list, + "vae_image_info_list": vae_image_info_list, + } + + else: + template = self.prompt_template_encode + drop_idx = self.prompt_template_encode_start_idx + txt = [template.format(e) for e in text] + + image_info = {} + model_inputs = self.tokenizer(txt, max_length=self.tokenizer_max_length + drop_idx, padding=True, truncation=True, return_tensors="pt").to(AI_DEVICE) + encoder_hidden_states = self.text_encoder( + input_ids=model_inputs.input_ids, + attention_mask=model_inputs.attention_mask, + output_hidden_states=True, + ) + + hidden_states = encoder_hidden_states.hidden_states[-1] + + split_hidden_states = self._extract_masked_hidden(hidden_states, model_inputs.attention_mask) + split_hidden_states = [e[drop_idx:] for e in split_hidden_states] + attn_mask_list = [torch.ones(e.size(0), dtype=torch.long, device=e.device) for e in split_hidden_states] + max_seq_len = max([e.size(0) for e in split_hidden_states]) + prompt_embeds = torch.stack([torch.cat([u, u.new_zeros(max_seq_len - u.size(0), u.size(1))]) for u in split_hidden_states]) + encoder_attention_mask = torch.stack([torch.cat([u, u.new_zeros(max_seq_len - u.size(0))]) for u in attn_mask_list]) + + prompt_embeds = prompt_embeds.to(dtype=self.dtype, device=AI_DEVICE) + prompt_embeds_mask = encoder_attention_mask + + _, seq_len, _ = prompt_embeds.shape + prompt_embeds = prompt_embeds.repeat(1, self.config["num_images_per_prompt"], 1) + prompt_embeds = prompt_embeds.view(self.config["batchsize"] * self.config["num_images_per_prompt"], seq_len, -1) + prompt_embeds_mask = prompt_embeds_mask.repeat(1, self.config["num_images_per_prompt"], 1) + prompt_embeds_mask = prompt_embeds_mask.view(self.config["batchsize"] * self.config["num_images_per_prompt"], seq_len) + + if self.cpu_offload: + self.text_encoder.to(torch.device("cpu")) + torch_device_module.empty_cache() + gc.collect() + + return prompt_embeds, prompt_embeds_mask, image_info diff --git a/lightx2v/models/input_encoders/hf/seko_audio/audio_adapter.py b/lightx2v/models/input_encoders/hf/seko_audio/audio_adapter.py new file mode 100644 index 0000000..c783dd8 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/seko_audio/audio_adapter.py @@ -0,0 +1,311 @@ +try: + import flash_attn +except ModuleNotFoundError: + flash_attn = None + +import torch +import torch.nn as nn +import torch.nn.functional as F +from diffusers.models.embeddings import TimestepEmbedding, Timesteps +from einops import rearrange + +from lightx2v_platform.base.global_var import AI_DEVICE + + +def linear_interpolation(features, output_len: int): + features = features.transpose(1, 2) + output_features = F.interpolate(features, size=output_len, align_corners=False, mode="linear") + return output_features.transpose(1, 2) + + +@torch.compiler.disable +def get_max_int(q_lens, k_lens): + max_seqlen_q = int(q_lens.max().item()) + max_seqlen_k = int(k_lens.max().item()) + return max_seqlen_q, max_seqlen_k + + +def get_qk_lens_audio_range( + n_tokens_per_rank: torch.Tensor, + n_query_tokens: torch.Tensor, + n_tokens_per_frame: torch.Tensor, + sp_rank: torch.Tensor, + num_tokens_x4, +): + device = n_tokens_per_rank.device + dtype = torch.int32 + + if n_query_tokens == 0: + q_lens = torch.ones(1, dtype=dtype, device=device) + t0 = torch.tensor(0, device=device) + t1 = torch.tensor(1, device=device) + k_lens = torch.full((t1 - t0,), num_tokens_x4, dtype=dtype, device=device) + max_seqlen_q, max_seqlen_k = get_max_int(q_lens, k_lens) + return q_lens, k_lens, max_seqlen_q, max_seqlen_k, t0, t1 + + idx0 = n_tokens_per_rank * sp_rank + + first_length = n_tokens_per_frame - idx0 % n_tokens_per_frame + first_length = torch.minimum(first_length, n_query_tokens) + + n_frames = torch.div(n_query_tokens - first_length, n_tokens_per_frame, rounding_mode="floor") + + last_length = n_query_tokens - n_frames * n_tokens_per_frame - first_length + + first_tensor = first_length.unsqueeze(0) # [1] + frame_tensor = n_tokens_per_frame.repeat(n_frames) # [n_frames] + last_tensor = last_length.unsqueeze(0) # [1] + + q_lens_all = torch.cat([first_tensor, frame_tensor, last_tensor]) + q_lens = q_lens_all[q_lens_all > 0].to(dtype) + + t0 = idx0 // n_tokens_per_frame + t1 = t0 + q_lens.numel() + + k_lens = torch.full((t1 - t0,), num_tokens_x4, dtype=dtype, device=device) + + assert q_lens.shape == k_lens.shape + max_seqlen_q, max_seqlen_k = get_max_int(q_lens, k_lens) + + return q_lens, k_lens, max_seqlen_q, max_seqlen_k, t0, t1 + + +def calculate_n_query_tokens(hidden_states, person_mask_latens, sp_rank, sp_size, n_tokens_per_rank, n_tokens): + tail_length = n_tokens_per_rank * sp_size - n_tokens + n_unused_ranks = tail_length // n_tokens_per_rank + + if sp_rank > sp_size - n_unused_ranks - 1: + n_query_tokens = 0 + elif sp_rank == sp_size - n_unused_ranks - 1: + val = n_tokens_per_rank - (tail_length % n_tokens_per_rank) + n_query_tokens = val + else: + n_query_tokens = n_tokens_per_rank + + if n_query_tokens > 0: + hidden_states_aligned = hidden_states[:n_query_tokens] + hidden_states_tail = hidden_states[n_query_tokens:] + if person_mask_latens is not None: + person_mask_aligned = person_mask_latens[:, :n_query_tokens] + else: + person_mask_aligned = None + else: + # for ranks that should be excluded from cross-attn, fake cross-attn will be applied so that FSDP works. + hidden_states_aligned = hidden_states[:1] + hidden_states_tail = hidden_states[1:] + if person_mask_latens is not None: + person_mask_aligned = person_mask_latens[:, :1] + else: + person_mask_aligned = None + + return n_query_tokens, hidden_states_aligned, hidden_states_tail, person_mask_aligned + + +''' +class PerceiverAttentionCA(nn.Module): + def __init__(self, dim_head=128, heads=16, kv_dim=2048, adaLN: bool = False, quantized=False, quant_scheme=None): + super().__init__() + self.dim_head = dim_head + self.heads = heads + inner_dim = dim_head * heads + kv_dim = inner_dim if kv_dim is None else kv_dim + self.norm_kv = nn.LayerNorm(kv_dim) + self.norm_q = nn.LayerNorm(inner_dim, elementwise_affine=not adaLN) + + if quantized: + if quant_scheme == "fp8": + self.to_q = SglQuantLinearFp8(inner_dim, inner_dim) + self.to_kv = nn.Linear(kv_dim, inner_dim * 2) + self.to_out = SglQuantLinearFp8(inner_dim, inner_dim) + else: + raise ValueError(f"Unsupported quant_scheme: {quant_scheme}") + else: + self.to_q = nn.Linear(inner_dim, inner_dim) + self.to_kv = nn.Linear(kv_dim, inner_dim * 2) + self.to_out = nn.Linear(inner_dim, inner_dim) + if adaLN: + self.shift_scale_gate = nn.Parameter(torch.randn(1, 3, inner_dim) / inner_dim**0.5) + else: + shift_scale_gate = torch.zeros((1, 3, inner_dim)) + shift_scale_gate[:, 2] = 1 + self.register_buffer("shift_scale_gate", shift_scale_gate, persistent=False) + + def forward(self, x, latents, t_emb, q_lens, k_lens, max_seqlen_q, max_seqlen_k): + """x shape (batchsize, latent_frame, audio_tokens_per_latent, + model_dim) latents (batchsize, length, model_dim)""" + batchsize = len(x) + x = self.norm_kv(x) + shift, scale, gate = (t_emb + self.shift_scale_gate).chunk(3, dim=1) + norm_q = self.norm_q(latents) + if scale.shape[0] != norm_q.shape[0]: + scale = scale.transpose(0, 1) # (1, 5070, 3072) + shift = shift.transpose(0, 1) + gate = gate.transpose(0, 1) + latents = norm_q * (1 + scale) + shift + q = self.to_q(latents) + k, v = self.to_kv(x).chunk(2, dim=-1) + q = rearrange(q, "B L (H C) -> (B L) H C", H=self.heads) + k = rearrange(k, "B T L (H C) -> (B T L) H C", H=self.heads) + v = rearrange(v, "B T L (H C) -> (B T L) H C", H=self.heads) + + out = flash_attn.flash_attn_varlen_func( + q=q, + k=k, + v=v, + cu_seqlens_q=torch.cat([q_lens.new_zeros([1]), q_lens]).cumsum(0, dtype=torch.int32).to(q.device, non_blocking=True), + cu_seqlens_k=torch.cat([k_lens.new_zeros([1]), k_lens]).cumsum(0, dtype=torch.int32).to(q.device, non_blocking=True), + max_seqlen_q=max_seqlen_q, + max_seqlen_k=max_seqlen_k, + dropout_p=0.0, + softmax_scale=None, + causal=False, + window_size=(-1, -1), + deterministic=False, + ) + out = rearrange(out, "(B L) H C -> B L (H C)", B=batchsize) + return self.to_out(out) * gate +''' + + +class AudioProjection(nn.Module): + def __init__( + self, + audio_feature_dim: int = 768, + n_neighbors: tuple = (2, 2), + num_tokens: int = 32, + mlp_dims: tuple = (1024, 1024, 32 * 768), + transformer_layers: int = 4, + ): + super().__init__() + mlp = [] + self.left, self.right = n_neighbors + self.audio_frames = sum(n_neighbors) + 1 + in_dim = audio_feature_dim * self.audio_frames + for i, out_dim in enumerate(mlp_dims): + mlp.append(nn.Linear(in_dim, out_dim)) + if i != len(mlp_dims) - 1: + mlp.append(nn.ReLU()) + in_dim = out_dim + self.mlp = nn.Sequential(*mlp) + self.norm = nn.LayerNorm(mlp_dims[-1] // num_tokens) + self.num_tokens = num_tokens + if transformer_layers > 0: + decoder_layer = nn.TransformerDecoderLayer(d_model=audio_feature_dim, nhead=audio_feature_dim // 64, dim_feedforward=4 * audio_feature_dim, dropout=0.0, batch_first=True) + self.transformer_decoder = nn.TransformerDecoder( + decoder_layer, + num_layers=transformer_layers, + ) + else: + self.transformer_decoder = None + + def forward(self, audio_feature, latent_frame): + video_frame = (latent_frame - 1) * 4 + 1 + audio_feature_ori = audio_feature + audio_feature = linear_interpolation(audio_feature_ori, video_frame) + if self.transformer_decoder is not None: + audio_feature = self.transformer_decoder(audio_feature, audio_feature_ori) + audio_feature = F.pad(audio_feature, pad=(0, 0, self.left, self.right), mode="replicate") + audio_feature = audio_feature.unfold(dimension=1, size=self.audio_frames, step=1) + audio_feature = rearrange(audio_feature, "B T C W -> B T (W C)") + audio_feature = self.mlp(audio_feature) # (B, video_frame, C) + audio_feature = rearrange(audio_feature, "B T (N C) -> B T N C", N=self.num_tokens) # (B, video_frame, num_tokens, C) + return self.norm(audio_feature) + + +class TimeEmbedding(nn.Module): + def __init__(self, dim, time_freq_dim, time_proj_dim): + super().__init__() + self.timesteps_proj = Timesteps(num_channels=time_freq_dim, flip_sin_to_cos=True, downscale_freq_shift=0) + self.time_embedder = TimestepEmbedding(in_channels=time_freq_dim, time_embed_dim=dim) + self.act_fn = nn.SiLU() + self.time_proj = nn.Linear(dim, time_proj_dim) + + def forward(self, timestep: torch.Tensor): + # Project timestep + if timestep.dim() == 2: + timestep = self.timesteps_proj(timestep.squeeze(0)).unsqueeze(0) + else: + timestep = self.timesteps_proj(timestep) + + # Match dtype with time_embedder (except int8) + target_dtype = next(self.time_embedder.parameters()).dtype + if timestep.dtype != target_dtype and target_dtype != torch.int8: + timestep = timestep.to(target_dtype) + + # Time embedding projection + temb = self.time_embedder(timestep) + timestep_proj = self.time_proj(self.act_fn(temb)) + + return timestep_proj.squeeze(0) if timestep_proj.dim() == 3 else timestep_proj + + +class AudioAdapter(nn.Module): + def __init__( + self, + attention_head_dim=64, + num_attention_heads=40, + base_num_layers=30, + interval=1, + audio_feature_dim: int = 768, + num_tokens: int = 32, + mlp_dims: tuple = (1024, 1024, 32 * 768), + time_freq_dim: int = 256, + projection_transformer_layers: int = 4, + quantized: bool = False, + quant_scheme: str = None, + cpu_offload: bool = False, + ): + super().__init__() + self.cpu_offload = cpu_offload + self.audio_proj = AudioProjection( + audio_feature_dim=audio_feature_dim, + n_neighbors=(2, 2), + num_tokens=num_tokens, + mlp_dims=mlp_dims, + transformer_layers=projection_transformer_layers, + ) + # self.num_tokens = num_tokens * 4 + self.num_tokens_x4 = num_tokens * 4 + self.audio_pe = nn.Parameter(torch.randn(self.num_tokens_x4, mlp_dims[-1] // num_tokens) * 0.02) + # ca_num = math.ceil(base_num_layers / interval) + self.base_num_layers = base_num_layers + self.interval = interval + """ + self.ca = nn.ModuleList( + [ + PerceiverAttentionCA( + dim_head=attention_head_dim, + heads=num_attention_heads, + kv_dim=mlp_dims[-1] // num_tokens, + adaLN=time_freq_dim > 0, + quantized=quantized, + quant_scheme=quant_scheme, + ) + for _ in range(ca_num) + ] + ) + """ + self.dim = attention_head_dim * num_attention_heads + if time_freq_dim > 0: + self.time_embedding = TimeEmbedding(self.dim, time_freq_dim, self.dim * 3) + else: + self.time_embedding = None + + def rearange_audio_features(self, audio_feature: torch.Tensor): + # audio_feature (B, video_frame, num_tokens, C) + audio_feature_0 = audio_feature[:, :1] + audio_feature_0 = torch.repeat_interleave(audio_feature_0, repeats=4, dim=1) + audio_feature = torch.cat([audio_feature_0, audio_feature[:, 1:]], dim=1) # (B, 4 * latent_frame, num_tokens, C) + audio_feature = rearrange(audio_feature, "B (T S) N C -> B T (S N) C", S=4) + return audio_feature + + @torch.no_grad() + def forward_audio_proj(self, audio_feat, latent_frame): + if self.cpu_offload: + self.audio_proj.to(AI_DEVICE) + x = self.audio_proj(audio_feat, latent_frame) + x = self.rearange_audio_features(x) + x = x + self.audio_pe.to(AI_DEVICE) + if self.cpu_offload: + self.audio_proj.to("cpu") + return x diff --git a/lightx2v/models/input_encoders/hf/seko_audio/audio_encoder.py b/lightx2v/models/input_encoders/hf/seko_audio/audio_encoder.py new file mode 100644 index 0000000..5b727af --- /dev/null +++ b/lightx2v/models/input_encoders/hf/seko_audio/audio_encoder.py @@ -0,0 +1,40 @@ +import torch +from transformers import AutoFeatureExtractor, AutoModel + +from lightx2v.utils.envs import * +from lightx2v_platform.base.global_var import AI_DEVICE + + +class SekoAudioEncoderModel: + def __init__(self, model_path, audio_sr, cpu_offload): + self.model_path = model_path + self.audio_sr = audio_sr + self.cpu_offload = cpu_offload + if self.cpu_offload: + self.device = torch.device("cpu") + else: + self.device = torch.device(AI_DEVICE) + self.load() + + def load(self): + self.audio_feature_extractor = AutoFeatureExtractor.from_pretrained(self.model_path) + self.audio_feature_encoder = AutoModel.from_pretrained(self.model_path) + self.audio_feature_encoder.to(self.device) + self.audio_feature_encoder.eval() + self.audio_feature_encoder.to(GET_DTYPE()) + + def to_cpu(self): + self.audio_feature_encoder = self.audio_feature_encoder.to("cpu") + + def to_cuda(self): + self.audio_feature_encoder = self.audio_feature_encoder.to(AI_DEVICE) + + @torch.no_grad() + def infer(self, audio_segment): + audio_feat = self.audio_feature_extractor(audio_segment, sampling_rate=self.audio_sr, return_tensors="pt").input_values.to(AI_DEVICE).to(dtype=GET_DTYPE()) + if self.cpu_offload: + self.audio_feature_encoder = self.audio_feature_encoder.to(AI_DEVICE) + audio_feat = self.audio_feature_encoder(audio_feat, return_dict=True).last_hidden_state + if self.cpu_offload: + self.audio_feature_encoder = self.audio_feature_encoder.to("cpu") + return audio_feat diff --git a/lightx2v/models/input_encoders/hf/vace/vace_processor.py b/lightx2v/models/input_encoders/hf/vace/vace_processor.py new file mode 100644 index 0000000..f100649 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/vace/vace_processor.py @@ -0,0 +1,173 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import numpy as np +import torch +import torch.nn.functional as F + + +class VaceVideoProcessor(object): + def __init__(self, downsample, min_area, max_area, min_fps, max_fps, zero_start, seq_len, keep_last, **kwargs): + self.downsample = downsample + self.min_area = min_area + self.max_area = max_area + self.min_fps = min_fps + self.max_fps = max_fps + self.zero_start = zero_start + self.keep_last = keep_last + self.seq_len = seq_len + assert seq_len >= min_area / (self.downsample[1] * self.downsample[2]) + + def set_area(self, area): + self.min_area = area + self.max_area = area + + def set_seq_len(self, seq_len): + self.seq_len = seq_len + + @staticmethod + def resize_crop(video: torch.Tensor, oh: int, ow: int): + """ + Resize, center crop and normalize for decord loaded video (torch.Tensor type) + + Parameters: + video - video to process (torch.Tensor): Tensor from `reader.get_batch(frame_ids)`, in shape of (T, H, W, C) + oh - target height (int) + ow - target width (int) + + Returns: + The processed video (torch.Tensor): Normalized tensor range [-1, 1], in shape of (C, T, H, W) + + Raises: + """ + # permute ([t, h, w, c] -> [t, c, h, w]) + video = video.permute(0, 3, 1, 2) + + # resize and crop + ih, iw = video.shape[2:] + if ih != oh or iw != ow: + # resize + scale = max(ow / iw, oh / ih) + video = F.interpolate(video, size=(round(scale * ih), round(scale * iw)), mode="bicubic", antialias=True) + assert video.size(3) >= ow and video.size(2) >= oh + + # center crop + x1 = (video.size(3) - ow) // 2 + y1 = (video.size(2) - oh) // 2 + video = video[:, :, y1 : y1 + oh, x1 : x1 + ow] + + # permute ([t, c, h, w] -> [c, t, h, w]) and normalize + video = video.transpose(0, 1).float().div_(127.5).sub_(1.0) + return video + + def _video_preprocess(self, video, oh, ow): + return self.resize_crop(video, oh, ow) + + def _get_frameid_bbox_default(self, fps, frame_timestamps, h, w, crop_box, rng): + target_fps = min(fps, self.max_fps) + duration = frame_timestamps[-1].mean() + x1, x2, y1, y2 = [0, w, 0, h] if crop_box is None else crop_box + h, w = y2 - y1, x2 - x1 + ratio = h / w + df, dh, dw = self.downsample + + area_z = min(self.seq_len, self.max_area / (dh * dw), (h // dh) * (w // dw)) + of = min((int(duration * target_fps) - 1) // df + 1, int(self.seq_len / area_z)) + + # deduce target shape of the [latent video] + target_area_z = min(area_z, int(self.seq_len / of)) + oh = round(np.sqrt(target_area_z * ratio)) + ow = int(target_area_z / oh) + of = (of - 1) * df + 1 + oh *= dh + ow *= dw + + # sample frame ids + target_duration = of / target_fps + begin = 0.0 if self.zero_start else rng.uniform(0, duration - target_duration) + timestamps = np.linspace(begin, begin + target_duration, of) + frame_ids = np.argmax(np.logical_and(timestamps[:, None] >= frame_timestamps[None, :, 0], timestamps[:, None] < frame_timestamps[None, :, 1]), axis=1).tolist() + return frame_ids, (x1, x2, y1, y2), (oh, ow), target_fps + + def _get_frameid_bbox_adjust_last(self, fps, frame_timestamps, h, w, crop_box, rng): + duration = frame_timestamps[-1].mean() + x1, x2, y1, y2 = [0, w, 0, h] if crop_box is None else crop_box + h, w = y2 - y1, x2 - x1 + ratio = h / w + df, dh, dw = self.downsample + + area_z = min(self.seq_len, self.max_area / (dh * dw), (h // dh) * (w // dw)) + of = min((len(frame_timestamps) - 1) // df + 1, int(self.seq_len / area_z)) + + # deduce target shape of the [latent video] + target_area_z = min(area_z, int(self.seq_len / of)) + oh = round(np.sqrt(target_area_z * ratio)) + ow = int(target_area_z / oh) + of = (of - 1) * df + 1 + oh *= dh + ow *= dw + + # sample frame ids + target_duration = duration + target_fps = of / target_duration + timestamps = np.linspace(0.0, target_duration, of) + frame_ids = np.argmax(np.logical_and(timestamps[:, None] >= frame_timestamps[None, :, 0], timestamps[:, None] <= frame_timestamps[None, :, 1]), axis=1).tolist() + # print(oh, ow, of, target_duration, target_fps, len(frame_timestamps), len(frame_ids)) + return frame_ids, (x1, x2, y1, y2), (oh, ow), target_fps + + def _get_frameid_bbox(self, fps, frame_timestamps, h, w, crop_box, rng): + if self.keep_last: + return self._get_frameid_bbox_adjust_last(fps, frame_timestamps, h, w, crop_box, rng) + else: + return self._get_frameid_bbox_default(fps, frame_timestamps, h, w, crop_box, rng) + + def load_video(self, data_key, crop_box=None, seed=2024, **kwargs): + return self.load_video_batch(data_key, crop_box=crop_box, seed=seed, **kwargs) + + def load_video_pair(self, data_key, data_key2, crop_box=None, seed=2024, **kwargs): + return self.load_video_batch(data_key, data_key2, crop_box=crop_box, seed=seed, **kwargs) + + def load_video_batch(self, *data_key_batch, crop_box=None, seed=2024, **kwargs): + rng = np.random.default_rng(seed + hash(data_key_batch[0]) % 10000) + # read video + import decord + + decord.bridge.set_bridge("torch") + readers = [] + for data_k in data_key_batch: + reader = decord.VideoReader(data_k) + readers.append(reader) + + fps = readers[0].get_avg_fps() + length = min([len(r) for r in readers]) + frame_timestamps = [readers[0].get_frame_timestamp(i) for i in range(length)] + frame_timestamps = np.array(frame_timestamps, dtype=np.float32) + h, w = readers[0].next().shape[:2] + frame_ids, (x1, x2, y1, y2), (oh, ow), fps = self._get_frameid_bbox(fps, frame_timestamps, h, w, crop_box, rng) + + # preprocess video + videos = [reader.get_batch(frame_ids)[:, y1:y2, x1:x2, :] for reader in readers] + videos = [self._video_preprocess(video, oh, ow) for video in videos] + return *videos, frame_ids, (oh, ow), fps + # return videos if len(videos) > 1 else videos[0] + + +def prepare_source(src_video, src_mask, src_ref_images, num_frames, image_size, device): + for i, (sub_src_video, sub_src_mask) in enumerate(zip(src_video, src_mask)): + if sub_src_video is None and sub_src_mask is None: + src_video[i] = torch.zeros((3, num_frames, image_size[0], image_size[1]), device=device) + src_mask[i] = torch.ones((1, num_frames, image_size[0], image_size[1]), device=device) + for i, ref_images in enumerate(src_ref_images): + if ref_images is not None: + for j, ref_img in enumerate(ref_images): + if ref_img is not None and ref_img.shape[-2:] != image_size: + canvas_height, canvas_width = image_size + ref_height, ref_width = ref_img.shape[-2:] + white_canvas = torch.ones((3, 1, canvas_height, canvas_width), device=device) # [-1, 1] + scale = min(canvas_height / ref_height, canvas_width / ref_width) + new_height = int(ref_height * scale) + new_width = int(ref_width * scale) + resized_image = F.interpolate(ref_img.squeeze(1).unsqueeze(0), size=(new_height, new_width), mode="bilinear", align_corners=False).squeeze(0).unsqueeze(1) + top = (canvas_height - new_height) // 2 + left = (canvas_width - new_width) // 2 + white_canvas[:, :, top : top + new_height, left : left + new_width] = resized_image + src_ref_images[i][j] = white_canvas + return src_video, src_mask, src_ref_images diff --git a/lightx2v/models/input_encoders/hf/wan/matrix_game2/__init__.py b/lightx2v/models/input_encoders/hf/wan/matrix_game2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/wan/matrix_game2/clip.py b/lightx2v/models/input_encoders/hf/wan/matrix_game2/clip.py new file mode 100644 index 0000000..3008c9b --- /dev/null +++ b/lightx2v/models/input_encoders/hf/wan/matrix_game2/clip.py @@ -0,0 +1,332 @@ +# Modified from ``https://github.com/openai/CLIP'' and ``https://github.com/mlfoundations/open_clip'' +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import logging +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision.transforms as T +from diffusers.models import ModelMixin + +from lightx2v.models.input_encoders.hf.wan.matrix_game2.tokenizers import HuggingfaceTokenizer +from lightx2v.models.input_encoders.hf.wan.xlm_roberta.model import VisionTransformer + + +class SelfAttention(nn.Module): + def __init__(self, dim, num_heads, dropout=0.1, eps=1e-5): + assert dim % num_heads == 0 + super().__init__() + self.dim = dim + self.num_heads = num_heads + self.head_dim = dim // num_heads + self.eps = eps + + # layers + self.q = nn.Linear(dim, dim) + self.k = nn.Linear(dim, dim) + self.v = nn.Linear(dim, dim) + self.o = nn.Linear(dim, dim) + self.dropout = nn.Dropout(dropout) + + def forward(self, x, mask): + """ + x: [B, L, C]. + """ + b, s, c, n, d = *x.size(), self.num_heads, self.head_dim + + # compute query, key, value + q = self.q(x).reshape(b, s, n, d).permute(0, 2, 1, 3) + k = self.k(x).reshape(b, s, n, d).permute(0, 2, 1, 3) + v = self.v(x).reshape(b, s, n, d).permute(0, 2, 1, 3) + + # compute attention + p = self.dropout.p if self.training else 0.0 + x = F.scaled_dot_product_attention(q, k, v, mask, p) + x = x.permute(0, 2, 1, 3).reshape(b, s, c) + + # output + x = self.o(x) + x = self.dropout(x) + return x + + +class AttentionBlock(nn.Module): + def __init__(self, dim, num_heads, post_norm, dropout=0.1, eps=1e-5): + super().__init__() + self.dim = dim + self.num_heads = num_heads + self.post_norm = post_norm + self.eps = eps + + # layers + self.attn = SelfAttention(dim, num_heads, dropout, eps) + self.norm1 = nn.LayerNorm(dim, eps=eps) + self.ffn = nn.Sequential(nn.Linear(dim, dim * 4), nn.GELU(), nn.Linear(dim * 4, dim), nn.Dropout(dropout)) + self.norm2 = nn.LayerNorm(dim, eps=eps) + + def forward(self, x, mask): + if self.post_norm: + x = self.norm1(x + self.attn(x, mask)) + x = self.norm2(x + self.ffn(x)) + else: + x = x + self.attn(self.norm1(x), mask) + x = x + self.ffn(self.norm2(x)) + return x + + +class XLMRoberta(nn.Module): + """ + XLMRobertaModel with no pooler and no LM head. + """ + + def __init__(self, vocab_size=250002, max_seq_len=514, type_size=1, pad_id=1, dim=1024, num_heads=16, num_layers=24, post_norm=True, dropout=0.1, eps=1e-5): + super().__init__() + self.vocab_size = vocab_size + self.max_seq_len = max_seq_len + self.type_size = type_size + self.pad_id = pad_id + self.dim = dim + self.num_heads = num_heads + self.num_layers = num_layers + self.post_norm = post_norm + self.eps = eps + + # embeddings + self.token_embedding = nn.Embedding(vocab_size, dim, padding_idx=pad_id) + self.type_embedding = nn.Embedding(type_size, dim) + self.pos_embedding = nn.Embedding(max_seq_len, dim, padding_idx=pad_id) + self.dropout = nn.Dropout(dropout) + + # blocks + self.blocks = nn.ModuleList([AttentionBlock(dim, num_heads, post_norm, dropout, eps) for _ in range(num_layers)]) + + # norm layer + self.norm = nn.LayerNorm(dim, eps=eps) + + def forward(self, ids): + """ + ids: [B, L] of torch.LongTensor. + """ + b, s = ids.shape + mask = ids.ne(self.pad_id).long() + + # embeddings + x = self.token_embedding(ids) + self.type_embedding(torch.zeros_like(ids)) + self.pos_embedding(self.pad_id + torch.cumsum(mask, dim=1) * mask) + if self.post_norm: + x = self.norm(x) + x = self.dropout(x) + + # blocks + mask = torch.where(mask.view(b, 1, 1, s).gt(0), 0.0, torch.finfo(x.dtype).min) + for block in self.blocks: + x = block(x, mask) + + # output + if not self.post_norm: + x = self.norm(x) + return x + + +class XLMRobertaWithHead(XLMRoberta): + def __init__(self, **kwargs): + self.out_dim = kwargs.pop("out_dim") + super().__init__(**kwargs) + + # head + mid_dim = (self.dim + self.out_dim) // 2 + self.head = nn.Sequential(nn.Linear(self.dim, mid_dim, bias=False), nn.GELU(), nn.Linear(mid_dim, self.out_dim, bias=False)) + + def forward(self, ids): + # xlm-roberta + x = super().forward(ids) + + # average pooling + mask = ids.ne(self.pad_id).unsqueeze(-1).to(x) + x = (x * mask).sum(dim=1) / mask.sum(dim=1) + + # head + x = self.head(x) + return x + + +class XLMRobertaCLIP(nn.Module): + def __init__( + self, + dtype=torch.float16, + embed_dim=1024, + image_size=224, + patch_size=14, + vision_dim=1280, + vision_mlp_ratio=4, + vision_heads=16, + vision_layers=32, + vision_pool="token", + vision_pre_norm=True, + vision_post_norm=False, + activation="gelu", + vocab_size=250002, + max_text_len=514, + type_size=1, + pad_id=1, + attn_dropout=0.0, + proj_dropout=0.0, + embedding_dropout=0.0, + norm_eps=1e-5, + quantized=False, + quant_scheme=None, + text_dim=1024, + text_heads=16, + text_layers=24, + text_post_norm=True, + text_dropout=0.1, + ): + super().__init__() + self.embed_dim = embed_dim + self.image_size = image_size + self.patch_size = patch_size + self.vision_dim = vision_dim + self.vision_mlp_ratio = vision_mlp_ratio + self.vision_heads = vision_heads + self.vision_layers = vision_layers + self.vision_pre_norm = vision_pre_norm + self.vision_post_norm = vision_post_norm + self.activation = activation + self.vocab_size = vocab_size + self.max_text_len = max_text_len + self.type_size = type_size + self.pad_id = pad_id + self.norm_eps = norm_eps + + # models + self.visual = VisionTransformer( + dtype=dtype, + image_size=image_size, + patch_size=patch_size, + dim=vision_dim, + mlp_ratio=vision_mlp_ratio, + out_dim=embed_dim, + num_heads=vision_heads, + num_layers=vision_layers, + pool_type=vision_pool, + pre_norm=vision_pre_norm, + post_norm=vision_post_norm, + activation=activation, + attn_dropout=attn_dropout, + proj_dropout=proj_dropout, + embedding_dropout=embedding_dropout, + norm_eps=norm_eps, + quantized=quantized, + quant_scheme=quant_scheme, + ) + self.textual = XLMRobertaWithHead( + vocab_size=vocab_size, + max_seq_len=max_text_len, + type_size=type_size, + pad_id=pad_id, + dim=text_dim, + out_dim=embed_dim, + num_heads=text_heads, + num_layers=text_layers, + post_norm=text_post_norm, + dropout=text_dropout, + ) + self.log_scale = nn.Parameter(math.log(1 / 0.07) * torch.ones([])) + + +def _clip(pretrained=False, pretrained_name=None, model_cls=XLMRobertaCLIP, return_transforms=False, return_tokenizer=False, tokenizer_padding="eos", dtype=torch.float32, device="cpu", **kwargs): + # init a model on device + with torch.device(device): + model = model_cls(**kwargs) + + # set device + model = model.to(dtype=dtype, device=device) + output = (model,) + + # init transforms + if return_transforms: + # mean and std + if "siglip" in pretrained_name.lower(): + mean, std = [0.5, 0.5, 0.5], [0.5, 0.5, 0.5] + else: + mean = [0.48145466, 0.4578275, 0.40821073] + std = [0.26862954, 0.26130258, 0.27577711] + + # transforms + transforms = T.Compose([T.Resize((model.image_size, model.image_size), interpolation=T.InterpolationMode.BICUBIC), T.ToTensor(), T.Normalize(mean=mean, std=std)]) + output += (transforms,) + return output[0] if len(output) == 1 else output + + +def clip_xlm_roberta_vit_h_14(pretrained=False, pretrained_name="open-clip-xlm-roberta-large-vit-huge-14", **kwargs): + cfg = dict( + embed_dim=1024, + image_size=224, + patch_size=14, + vision_dim=1280, + vision_mlp_ratio=4, + vision_heads=16, + vision_layers=32, + vision_pool="token", + activation="gelu", + vocab_size=250002, + max_text_len=514, + type_size=1, + pad_id=1, + text_dim=1024, + text_heads=16, + text_layers=24, + text_post_norm=True, + text_dropout=0.1, + attn_dropout=0.0, + proj_dropout=0.0, + embedding_dropout=0.0, + ) + cfg.update(**kwargs) + return _clip(pretrained, pretrained_name, XLMRobertaCLIP, **cfg) + + +class CLIPModel(ModelMixin): + def __init__(self, checkpoint_path, tokenizer_path): + super().__init__() + self.checkpoint_path = checkpoint_path + self.tokenizer_path = tokenizer_path + + # init model + self.model, self.transforms = clip_xlm_roberta_vit_h_14( + pretrained=False, + return_transforms=True, + return_tokenizer=False, + ) + self.model = self.model.eval().requires_grad_(False) + logging.info(f"loading {checkpoint_path}") + self.model.load_state_dict(torch.load(checkpoint_path, map_location="cpu")) + # init tokenizer + self.tokenizer = HuggingfaceTokenizer(name=tokenizer_path, seq_len=self.model.max_text_len - 2, clean="whitespace") + + def encode_video(self, video): + # preprocess + b, c, t, h, w = video.shape + video = video.transpose(1, 2) + video = video.reshape(b * t, c, h, w) + size = (self.model.image_size,) * 2 + video = F.interpolate(video, size=size, mode="bicubic", align_corners=False) + + video = self.transforms.transforms[-1](video.mul_(0.5).add_(0.5)) + + # forward + with torch.amp.autocast(dtype=self.dtype, device_type=self.device.type): + out = self.model.visual(video, use_31_block=True) + + return out + + def forward(self, videos): + # preprocess + size = (self.model.image_size,) * 2 + videos = torch.cat([F.interpolate(u.transpose(0, 1), size=size, mode="bicubic", align_corners=False) for u in videos]) + videos = self.transforms.transforms[-1](videos.mul_(0.5).add_(0.5)) + + # forward + with torch.amp.autocast("cuda", dtype=self.dtype): + out = self.model.visual(videos, use_31_block=True) + return out diff --git a/lightx2v/models/input_encoders/hf/wan/matrix_game2/conditions.py b/lightx2v/models/input_encoders/hf/wan/matrix_game2/conditions.py new file mode 100644 index 0000000..ca99055 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/wan/matrix_game2/conditions.py @@ -0,0 +1,203 @@ +import random + +import torch + + +def combine_data(data, num_frames=57, keyboard_dim=6, mouse=True): + assert num_frames % 4 == 1 + keyboard_condition = torch.zeros((num_frames, keyboard_dim)) + if mouse: + mouse_condition = torch.zeros((num_frames, 2)) + + current_frame = 0 + selections = [12] + + while current_frame < num_frames: + rd_frame = selections[random.randint(0, len(selections) - 1)] + rd = random.randint(0, len(data) - 1) + k = data[rd]["keyboard_condition"] + if mouse: + m = data[rd]["mouse_condition"] + + if current_frame == 0: + keyboard_condition[:1] = k[:1] + if mouse: + mouse_condition[:1] = m[:1] + current_frame = 1 + else: + rd_frame = min(rd_frame, num_frames - current_frame) + repeat_time = rd_frame // 4 + keyboard_condition[current_frame : current_frame + rd_frame] = k.repeat(repeat_time, 1) + if mouse: + mouse_condition[current_frame : current_frame + rd_frame] = m.repeat(repeat_time, 1) + current_frame += rd_frame + if mouse: + return {"keyboard_condition": keyboard_condition, "mouse_condition": mouse_condition} + return {"keyboard_condition": keyboard_condition} + + +def Bench_actions_universal(num_frames, num_samples_per_action=4): + actions_single_action = [ + "forward", + # "back", + "left", + "right", + ] + actions_double_action = [ + "forward_left", + "forward_right", + # "back_left", + # "back_right", + ] + + actions_single_camera = [ + "camera_l", + "camera_r", + # "camera_ur", + # "camera_ul", + # "camera_dl", + # "camera_dr" + # "camera_up", + # "camera_down", + ] + actions_to_test = actions_double_action * 5 + actions_single_camera * 5 + actions_single_action * 5 + for action in actions_single_action + actions_double_action: + for camera in actions_single_camera: + double_action = f"{action}_{camera}" + actions_to_test.append(double_action) + + # print("length of actions: ", len(actions_to_test)) + base_action = actions_single_action + actions_single_camera + + KEYBOARD_IDX = {"forward": 0, "back": 1, "left": 2, "right": 3} + + CAM_VALUE = 0.1 + CAMERA_VALUE_MAP = { + "camera_up": [CAM_VALUE, 0], + "camera_down": [-CAM_VALUE, 0], + "camera_l": [0, -CAM_VALUE], + "camera_r": [0, CAM_VALUE], + "camera_ur": [CAM_VALUE, CAM_VALUE], + "camera_ul": [CAM_VALUE, -CAM_VALUE], + "camera_dr": [-CAM_VALUE, CAM_VALUE], + "camera_dl": [-CAM_VALUE, -CAM_VALUE], + } + + data = [] + + for action_name in actions_to_test: + keyboard_condition = [[0, 0, 0, 0] for _ in range(num_samples_per_action)] + mouse_condition = [[0, 0] for _ in range(num_samples_per_action)] + + for sub_act in base_action: + if sub_act not in action_name: # 只处理action_name包含的动作 + continue + # print(f"action name: {action_name} sub_act: {sub_act}") + if sub_act in CAMERA_VALUE_MAP: + mouse_condition = [CAMERA_VALUE_MAP[sub_act] for _ in range(num_samples_per_action)] + + elif sub_act in KEYBOARD_IDX: + col = KEYBOARD_IDX[sub_act] + for row in keyboard_condition: + row[col] = 1 + + data.append({"keyboard_condition": torch.tensor(keyboard_condition), "mouse_condition": torch.tensor(mouse_condition)}) + return combine_data(data, num_frames, keyboard_dim=4, mouse=True) + + +def Bench_actions_gta_drive(num_frames, num_samples_per_action=4): + actions_single_action = [ + "forward", + "back", + ] + + actions_single_camera = [ + "camera_l", + "camera_r", + ] + actions_to_test = actions_single_camera * 2 + actions_single_action * 2 + for action in actions_single_action: + for camera in actions_single_camera: + double_action = f"{action}_{camera}" + actions_to_test.append(double_action) + + # print("length of actions: ", len(actions_to_test)) + base_action = actions_single_action + actions_single_camera + + KEYBOARD_IDX = {"forward": 0, "back": 1} + + CAM_VALUE = 0.1 + CAMERA_VALUE_MAP = { + "camera_l": [0, -CAM_VALUE], + "camera_r": [0, CAM_VALUE], + } + + data = [] + + for action_name in actions_to_test: + keyboard_condition = [[0, 0] for _ in range(num_samples_per_action)] + mouse_condition = [[0, 0] for _ in range(num_samples_per_action)] + + for sub_act in base_action: + if sub_act not in action_name: # 只处理action_name包含的动作 + continue + # print(f"action name: {action_name} sub_act: {sub_act}") + if sub_act in CAMERA_VALUE_MAP: + mouse_condition = [CAMERA_VALUE_MAP[sub_act] for _ in range(num_samples_per_action)] + + elif sub_act in KEYBOARD_IDX: + col = KEYBOARD_IDX[sub_act] + for row in keyboard_condition: + row[col] = 1 + + data.append({"keyboard_condition": torch.tensor(keyboard_condition), "mouse_condition": torch.tensor(mouse_condition)}) + return combine_data(data, num_frames, keyboard_dim=2, mouse=True) + + +def Bench_actions_templerun(num_frames, num_samples_per_action=4): + actions_single_action = ["jump", "slide", "leftside", "rightside", "turnleft", "turnright", "nomove"] + + actions_to_test = actions_single_action + + base_action = actions_single_action + + KEYBOARD_IDX = {"nomove": 0, "jump": 1, "slide": 2, "turnleft": 3, "turnright": 4, "leftside": 5, "rightside": 6} + + data = [] + + for action_name in actions_to_test: + keyboard_condition = [[0, 0, 0, 0, 0, 0, 0] for _ in range(num_samples_per_action)] + + for sub_act in base_action: + if sub_act not in action_name: # 只处理action_name包含的动作 + continue + # print(f"action name: {action_name} sub_act: {sub_act}") + elif sub_act in KEYBOARD_IDX: + col = KEYBOARD_IDX[sub_act] + for row in keyboard_condition: + row[col] = 1 + + data.append({"keyboard_condition": torch.tensor(keyboard_condition)}) + return combine_data(data, num_frames, keyboard_dim=7, mouse=False) + + +class MatrixGame2_Bench: + def __init__(self): + self.deivce = torch.device("cuda") + self.weight_dtype = torch.bfloat16 + + def get_conditions(self, mode, num_frames): + conditional_dict = {} + if mode == "universal": + cond_data = Bench_actions_universal(num_frames) + mouse_condition = cond_data["mouse_condition"].unsqueeze(0).to(device=self.device, dtype=self.weight_dtype) + conditional_dict["mouse_cond"] = mouse_condition + elif mode == "gta_drive": + cond_data = Bench_actions_gta_drive(num_frames) + mouse_condition = cond_data["mouse_condition"].unsqueeze(0).to(device=self.device, dtype=self.weight_dtype) + conditional_dict["mouse_cond"] = mouse_condition + else: + cond_data = Bench_actions_templerun(num_frames) + keyboard_condition = cond_data["keyboard_condition"].unsqueeze(0).to(device=self.device, dtype=self.weight_dtype) + conditional_dict["keyboard_cond"] = keyboard_condition + return conditional_dict diff --git a/lightx2v/models/input_encoders/hf/wan/matrix_game2/tokenizers.py b/lightx2v/models/input_encoders/hf/wan/matrix_game2/tokenizers.py new file mode 100644 index 0000000..e0c66ec --- /dev/null +++ b/lightx2v/models/input_encoders/hf/wan/matrix_game2/tokenizers.py @@ -0,0 +1,75 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import html +import string + +import ftfy +import regex as re +from transformers import AutoTokenizer + +__all__ = ["HuggingfaceTokenizer"] + + +def basic_clean(text): + text = ftfy.fix_text(text) + text = html.unescape(html.unescape(text)) + return text.strip() + + +def whitespace_clean(text): + text = re.sub(r"\s+", " ", text) + text = text.strip() + return text + + +def canonicalize(text, keep_punctuation_exact_string=None): + text = text.replace("_", " ") + if keep_punctuation_exact_string: + text = keep_punctuation_exact_string.join(part.translate(str.maketrans("", "", string.punctuation)) for part in text.split(keep_punctuation_exact_string)) + else: + text = text.translate(str.maketrans("", "", string.punctuation)) + text = text.lower() + text = re.sub(r"\s+", " ", text) + return text.strip() + + +class HuggingfaceTokenizer: + def __init__(self, name, seq_len=None, clean=None, **kwargs): + assert clean in (None, "whitespace", "lower", "canonicalize") + self.name = name + self.seq_len = seq_len + self.clean = clean + + # init tokenizer + self.tokenizer = AutoTokenizer.from_pretrained(name, **kwargs) + self.vocab_size = self.tokenizer.vocab_size + + def __call__(self, sequence, **kwargs): + return_mask = kwargs.pop("return_mask", False) + + # arguments + _kwargs = {"return_tensors": "pt"} + if self.seq_len is not None: + _kwargs.update({"padding": "max_length", "truncation": True, "max_length": self.seq_len}) + _kwargs.update(**kwargs) + + # tokenization + if isinstance(sequence, str): + sequence = [sequence] + if self.clean: + sequence = [self._clean(u) for u in sequence] + ids = self.tokenizer(sequence, **_kwargs) + + # output + if return_mask: + return ids.input_ids, ids.attention_mask + else: + return ids.input_ids + + def _clean(self, text): + if self.clean == "whitespace": + text = whitespace_clean(basic_clean(text)) + elif self.clean == "lower": + text = whitespace_clean(basic_clean(text)).lower() + elif self.clean == "canonicalize": + text = canonicalize(basic_clean(text)) + return text diff --git a/lightx2v/models/input_encoders/hf/wan/t5/__init__.py b/lightx2v/models/input_encoders/hf/wan/t5/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/wan/t5/model.py b/lightx2v/models/input_encoders/hf/wan/t5/model.py new file mode 100644 index 0000000..a381387 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/wan/t5/model.py @@ -0,0 +1,849 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import gc +import math +import os +import sys +from pathlib import Path + +import torch +import torch.nn as nn +import torch.nn.functional as F +from loguru import logger + +current_dir = Path(__file__).resolve().parent +project_root = current_dir.parent.parent.parent.parent.parent.parent +if str(project_root) not in sys.path: + sys.path.insert(0, str(project_root)) + +from lightx2v.common.modules.weight_module import WeightModule, WeightModuleList # noqa E402 +from lightx2v.common.offload.manager import WeightAsyncStreamManager # noqa E402 +from lightx2v.common.ops import * # noqa E402 +from lightx2v.models.input_encoders.hf.q_linear import ( # noqa E402 + Q8FQuantLinearFp8, # noqa E402 + Q8FQuantLinearInt8, # noqa E402 + SglQuantLinearFp8, # noqa E402 + TorchaoQuantLinearInt8, # noqa E402 + VllmQuantLinearInt8, # noqa E402, + VllmQuantLinearFp8, # noqa E402 +) +from lightx2v_platform.ops.mm.cambricon_mlu.q_linear import MluQuantLinearInt8 # noqa E402 +from lightx2v.models.input_encoders.hf.wan.t5.tokenizer import HuggingfaceTokenizer # noqa E402 +from lightx2v.utils.envs import * # noqa E402 +from lightx2v.utils.registry_factory import ( # noqa E402 + EMBEDDING_WEIGHT_REGISTER, # noqa E402 + MM_WEIGHT_REGISTER, # noqa E402 + RMS_WEIGHT_REGISTER, # noqa E402 +) +from lightx2v.utils.utils import load_weights # noqa E402 +from lightx2v_platform.base.global_var import AI_DEVICE # noqa E402 + +__all__ = [ + "T5Model", + "T5Encoder", + "T5Decoder", + "T5EncoderModel", +] + + +class T5OffloadBlocksWeights(WeightModule): + def __init__(self, block_nums, mm_type): + super().__init__() + self.block_nums = block_nums + self.offload_block_buffers = WeightModuleList([T5OffloadSelfAttention(i, mm_type, create_cuda_buffer=True) for i in range(2)]) + self.blocks = WeightModuleList([T5OffloadSelfAttention(i, mm_type) for i in range(block_nums)]) + self.add_module("offload_block_buffers", self.offload_block_buffers) + self.add_module("blocks", self.blocks) + + +class T5OffloadSelfAttention(WeightModule): + def __init__(self, block_index, mm_type, block_prefix="blocks", create_cuda_buffer=False): + super().__init__() + self.block_index = block_index + if mm_type is None: + mm_type = "Default" + self.mm_type = mm_type + + self.add_module( + "norm1", + RMS_WEIGHT_REGISTER["sgl-kernel"](f"{block_prefix}.{self.block_index}.norm1.weight", create_cuda_buffer), + ) + self.add_module( + "norm2", + RMS_WEIGHT_REGISTER["sgl-kernel"](f"{block_prefix}.{self.block_index}.norm2.weight", create_cuda_buffer), + ) + self.add_module( + "pos_embedding", + EMBEDDING_WEIGHT_REGISTER["Default"](f"{block_prefix}.{self.block_index}.pos_embedding.embedding.weight", create_cuda_buffer), + ) + + self.compute_phases = WeightModuleList( + [ + T5OffloadAttention(block_index, block_prefix, mm_type, create_cuda_buffer), + T5OffloadFeedForward(block_index, block_prefix, mm_type, create_cuda_buffer), + ] + ) + self.add_module("compute_phases", self.compute_phases) + + +class T5OffloadAttention(WeightModule): + def __init__(self, block_index, block_prefix, mm_type, create_cuda_buffer=False): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.add_module( + "attn_q", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.attn.q.weight", None, create_cuda_buffer), + ) + self.add_module( + "attn_k", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.attn.k.weight", None, create_cuda_buffer), + ) + self.add_module( + "attn_v", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.attn.v.weight", None, create_cuda_buffer), + ) + self.add_module( + "attn_o", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.attn.o.weight", None, create_cuda_buffer), + ) + + +class T5OffloadFeedForward(WeightModule): + def __init__(self, block_index, block_prefix, mm_type, create_cuda_buffer=False): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + + self.add_module( + "ffn_fc1", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.ffn.fc1.weight", None, create_cuda_buffer), + ) + self.add_module( + "ffn_fc2", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.ffn.fc2.weight", None, create_cuda_buffer), + ) + self.add_module( + "ffn_gate_0", + MM_WEIGHT_REGISTER[self.mm_type](f"{block_prefix}.{self.block_index}.ffn.gate.0.weight", None, create_cuda_buffer), + ) + self.gelu = GELU() + + +def fp16_clamp(x): + if x.dtype == torch.float16 and torch.isinf(x).any(): + clamp = torch.finfo(x.dtype).max - 1000 + x = torch.clamp(x, min=-clamp, max=clamp) + return x + + +def init_weights(m): + if isinstance(m, T5LayerNorm): + nn.init.ones_(m.weight) + elif isinstance(m, T5Model): + nn.init.normal_(m.token_embedding.weight, std=1.0) + elif isinstance(m, T5FeedForward): + nn.init.normal_(m.gate[0].weight, std=m.dim**-0.5) + nn.init.normal_(m.fc1.weight, std=m.dim**-0.5) + nn.init.normal_(m.fc2.weight, std=m.dim_ffn**-0.5) + elif isinstance(m, T5Attention): + nn.init.normal_(m.q.weight, std=(m.dim * m.dim_attn) ** -0.5) + nn.init.normal_(m.k.weight, std=m.dim**-0.5) + nn.init.normal_(m.v.weight, std=m.dim**-0.5) + nn.init.normal_(m.o.weight, std=(m.num_heads * m.dim_attn) ** -0.5) + elif isinstance(m, T5RelativeEmbedding): + nn.init.normal_(m.embedding.weight, std=(2 * m.num_buckets * m.num_heads) ** -0.5) + + +class GELU(nn.Module): + def forward(self, x): + return 0.5 * x * (1.0 + torch.tanh(math.sqrt(2.0 / math.pi) * (x + 0.044715 * torch.pow(x, 3.0)))) + + +class T5LayerNorm(nn.Module): + def __init__(self, dim, eps=1e-6, dtype=torch.float16): + super(T5LayerNorm, self).__init__() + self.dim = dim + self.eps = eps + self.weight = nn.Parameter(torch.ones(dim, dtype=dtype)) + + def forward(self, x): + x = x * torch.rsqrt(x.float().pow(2).mean(dim=-1, keepdim=True) + self.eps) + if self.weight.dtype in [torch.float16, torch.bfloat16]: + x = x.type_as(self.weight) + return self.weight * x + + +class T5Attention(nn.Module): + def __init__( + self, + dim, + dim_attn, + num_heads, + dropout=0.1, + quantized=False, + quant_scheme=None, + dtype=torch.bfloat16, + ): + assert dim_attn % num_heads == 0 + super(T5Attention, self).__init__() + self.dim = dim + self.dim_attn = dim_attn + self.num_heads = num_heads + self.head_dim = dim_attn // num_heads + + if quantized: + if quant_scheme in ["int8", "int8-vllm"]: + linear_cls = VllmQuantLinearInt8 + elif quant_scheme in ["fp8", "fp8-sgl"]: + linear_cls = SglQuantLinearFp8 + elif quant_scheme == "fp8-vllm": + linear_cls = VllmQuantLinearFp8 + elif quant_scheme == "int8-torchao": + linear_cls = TorchaoQuantLinearInt8 + elif quant_scheme == "int8-q8f": + linear_cls = Q8FQuantLinearInt8 + elif quant_scheme == "fp8-q8f": + linear_cls = Q8FQuantLinearFp8 + elif quant_scheme == "int8-tmo": + linear_cls = MluQuantLinearInt8 + else: + NotImplementedError(f"Unsupported T5 quant scheme: {quant_scheme}") + else: + linear_cls = nn.Linear + + # layers + self.q = linear_cls(dim, dim_attn, bias=False, dtype=dtype) + self.k = linear_cls(dim, dim_attn, bias=False, dtype=dtype) + self.v = linear_cls(dim, dim_attn, bias=False, dtype=dtype) + self.o = linear_cls(dim_attn, dim, bias=False, dtype=dtype) + self.dropout = nn.Dropout(dropout) + + def forward(self, x, context=None, mask=None, pos_bias=None): + """ + x: [B, L1, C]. + context: [B, L2, C] or None. + mask: [B, L2] or [B, L1, L2] or None. + """ + # check inputs + context = x if context is None else context + b, n, c = x.size(0), self.num_heads, self.head_dim + + # compute query, key, value + q = self.q(x).view(b, -1, n, c) + k = self.k(context).view(b, -1, n, c) + v = self.v(context).view(b, -1, n, c) + + # attention bias + attn_bias = x.new_zeros(b, n, q.size(1), k.size(1)) + if pos_bias is not None: + attn_bias += pos_bias + if mask is not None: + assert mask.ndim in [2, 3] + mask = mask.view(b, 1, 1, -1) if mask.ndim == 2 else mask.unsqueeze(1) + attn_bias.masked_fill_(mask == 0, torch.finfo(x.dtype).min) + + # compute attention (T5 does not use scaling) + attn = torch.einsum("binc,bjnc->bnij", q, k) + attn_bias + attn = F.softmax(attn.float(), dim=-1).type_as(attn) + x = torch.einsum("bnij,bjnc->binc", attn, v) + x = x.reshape(b, -1, n * c) + x = self.o(x) + + return x + + +class T5FeedForward(nn.Module): + def __init__( + self, + dim, + dim_ffn, + dropout=0.1, + quantized=False, + quant_scheme=None, + dtype=torch.bfloat16, + ): + super(T5FeedForward, self).__init__() + self.dim = dim + self.dim_ffn = dim_ffn + + if quantized: + if quant_scheme in ["int8", "int8-vllm"]: + linear_cls = VllmQuantLinearInt8 + elif quant_scheme in ["fp8", "fp8-sgl"]: + linear_cls = SglQuantLinearFp8 + elif quant_scheme == "fp8-vllm": + linear_cls = VllmQuantLinearFp8 + elif quant_scheme == "int8-torchao": + linear_cls = TorchaoQuantLinearInt8 + elif quant_scheme == "int8-q8f": + linear_cls = Q8FQuantLinearInt8 + elif quant_scheme == "fp8-q8f": + linear_cls = Q8FQuantLinearFp8 + elif quant_scheme == "int8-tmo": + linear_cls = MluQuantLinearInt8 + else: + NotImplementedError(f"Unsupported T5 quant scheme: {quant_scheme}") + else: + linear_cls = nn.Linear + # layers + self.gate = nn.Sequential(linear_cls(dim, dim_ffn, bias=False, dtype=dtype), GELU()) + + self.fc1 = linear_cls(dim, dim_ffn, bias=False, dtype=dtype) + self.fc2 = linear_cls(dim_ffn, dim, bias=False, dtype=dtype) + self.dropout = nn.Dropout(dropout) + + def forward(self, x): + x = self.fc1(x) * self.gate(x) + x = self.dropout(x) + x = self.fc2(x) + x = self.dropout(x) + return x + + +class T5SelfAttention(nn.Module): + def __init__( + self, + dim, + dim_attn, + dim_ffn, + num_heads, + num_buckets, + shared_pos=True, + dropout=0.1, + quantized=False, + quant_scheme=None, + dtype=torch.bfloat16, + ): + super(T5SelfAttention, self).__init__() + self.dim = dim + self.dim_attn = dim_attn + self.dim_ffn = dim_ffn + self.num_heads = num_heads + self.num_buckets = num_buckets + self.shared_pos = shared_pos + + # layers + self.norm1 = T5LayerNorm(dim, dtype=dtype) + self.attn = T5Attention(dim, dim_attn, num_heads, dropout, quantized, quant_scheme, dtype) + self.norm2 = T5LayerNorm(dim, dtype=dtype) + self.ffn = T5FeedForward(dim, dim_ffn, dropout, quantized, quant_scheme, dtype=dtype) + self.pos_embedding = None if shared_pos else T5RelativeEmbedding(num_buckets, num_heads, bidirectional=True, dtype=dtype) + + def forward(self, x, mask=None, pos_bias=None): + e = pos_bias if self.shared_pos else self.pos_embedding(x.size(1), x.size(1)) + x = fp16_clamp(x + self.attn(self.norm1(x), mask=mask, pos_bias=e)) + x = fp16_clamp(x + self.ffn(self.norm2(x))) + + return x + + +class T5CrossAttention(nn.Module): + def __init__( + self, + dim, + dim_attn, + dim_ffn, + num_heads, + num_buckets, + shared_pos=True, + dropout=0.1, + ): + super(T5CrossAttention, self).__init__() + self.dim = dim + self.dim_attn = dim_attn + self.dim_ffn = dim_ffn + self.num_heads = num_heads + self.num_buckets = num_buckets + self.shared_pos = shared_pos + + # layers + self.norm1 = T5LayerNorm(dim) + self.self_attn = T5Attention(dim, dim_attn, num_heads, dropout) + self.norm2 = T5LayerNorm(dim) + self.cross_attn = T5Attention(dim, dim_attn, num_heads, dropout) + self.norm3 = T5LayerNorm(dim) + self.ffn = T5FeedForward(dim, dim_ffn, dropout) + self.pos_embedding = None if shared_pos else T5RelativeEmbedding(num_buckets, num_heads, bidirectional=False) + + def forward(self, x, mask=None, encoder_states=None, encoder_mask=None, pos_bias=None): + e = pos_bias if self.shared_pos else self.pos_embedding(x.size(1), x.size(1)) + x = fp16_clamp(x + self.self_attn(self.norm1(x), mask=mask, pos_bias=e)) + x = fp16_clamp(x + self.cross_attn(self.norm2(x), context=encoder_states, mask=encoder_mask)) + x = fp16_clamp(x + self.ffn(self.norm3(x))) + return x + + +class T5RelativeEmbedding(nn.Module): + def __init__(self, num_buckets, num_heads, bidirectional, dtype=torch.bfloat16, max_dist=128): + super(T5RelativeEmbedding, self).__init__() + self.num_buckets = num_buckets + self.num_heads = num_heads + self.bidirectional = bidirectional + self.max_dist = max_dist + + # layers + self.embedding = nn.Embedding(num_buckets, num_heads, dtype=dtype) + + def forward(self, lq, lk): + device = self.embedding.weight.device + # rel_pos = torch.arange(lk).unsqueeze(0).to(device) - \ + # torch.arange(lq).unsqueeze(1).to(device) + rel_pos = torch.arange(lk, device=device).unsqueeze(0) - torch.arange(lq, device=device).unsqueeze(1) + rel_pos = self._relative_position_bucket(rel_pos) + + rel_pos_embeds = self.embedding(rel_pos) + + rel_pos_embeds = rel_pos_embeds.permute(2, 0, 1).unsqueeze(0) # [1, N, Lq, Lk] + return rel_pos_embeds.contiguous() + + def _relative_position_bucket(self, rel_pos): + # preprocess + if self.bidirectional: + num_buckets = self.num_buckets // 2 + rel_buckets = (rel_pos > 0).long() * num_buckets + rel_pos = torch.abs(rel_pos) + else: + num_buckets = self.num_buckets + rel_buckets = 0 + rel_pos = -torch.min(rel_pos, torch.zeros_like(rel_pos)) + + # embeddings for small and large positions + max_exact = num_buckets // 2 + rel_pos_large = max_exact + (torch.log(rel_pos.float() / max_exact) / math.log(self.max_dist / max_exact) * (num_buckets - max_exact)).long() + rel_pos_large = torch.min(rel_pos_large, torch.full_like(rel_pos_large, num_buckets - 1)) + rel_buckets += torch.where(rel_pos < max_exact, rel_pos, rel_pos_large) + return rel_buckets + + +class T5Encoder(nn.Module): + def __init__( + self, + dtype, + vocab, + dim, + dim_attn, + dim_ffn, + num_heads, + num_layers, + num_buckets, + shared_pos=True, + dropout=0.1, + cpu_offload=False, + quantized=False, + quant_scheme=None, + ): + super(T5Encoder, self).__init__() + self.cpu_offload = cpu_offload + self.dim = dim + self.dim_attn = dim_attn + self.dim_ffn = dim_ffn + self.num_heads = num_heads + self.num_layers = num_layers + self.num_buckets = num_buckets + self.shared_pos = shared_pos + self.quant_scheme = quant_scheme + + # layers + self.token_embedding = vocab.to(dtype) if isinstance(vocab, nn.Embedding) else nn.Embedding(vocab, dim, dtype=dtype) + self.pos_embedding = T5RelativeEmbedding(num_buckets, num_heads, bidirectional=True, dtype=dtype) if shared_pos else None + self.dropout = nn.Dropout(dropout) + + if cpu_offload: + self.offload_manager = WeightAsyncStreamManager(offload_granularity="block") + self.blocks_weights = T5OffloadBlocksWeights(num_layers, quant_scheme) + self.offload_manager.init_cuda_buffer(self.blocks_weights.offload_block_buffers, None) + self.blocks = self.blocks_weights.blocks + else: + self.blocks = nn.ModuleList( + [ + T5SelfAttention( + dim, + dim_attn, + dim_ffn, + num_heads, + num_buckets, + shared_pos, + dropout, + quantized, + quant_scheme, + dtype, + ) + for _ in range(num_layers) + ] + ) + + self.norm = T5LayerNorm(dim, dtype=dtype) + + def forward_without_offload(self, ids, mask=None): + x = self.token_embedding(ids) + x = self.dropout(x) + e = self.pos_embedding(x.size(1), x.size(1)) if self.shared_pos else None + + for i, block in enumerate(self.blocks): + x = block(x, mask, pos_bias=e) + x = self.norm(x) + x = self.dropout(x) + return x.to(GET_DTYPE()) + + def forword_attn_with_offload(self, x, attn_phase, context=None, mask=None, pos_bias=None): + context = x if context is None else context + b, n, c = x.size(0), self.num_heads, self.dim_attn // self.num_heads + # compute query, key, value + q = attn_phase.attn_q.apply(x.squeeze(0)).view(b, -1, n, c) + k = attn_phase.attn_k.apply(context.squeeze(0)).view(b, -1, n, c) + v = attn_phase.attn_v.apply(context.squeeze(0)).view(b, -1, n, c) + # attention bias + attn_bias = x.new_zeros(b, n, q.size(1), k.size(1)) + if pos_bias is not None: + attn_bias += pos_bias + if mask is not None: + assert mask.ndim in [2, 3] + mask = mask.view(b, 1, 1, -1) if mask.ndim == 2 else mask.unsqueeze(1) + attn_bias.masked_fill_(mask == 0, torch.finfo(x.dtype).min) + + # compute attention (T5 does not use scaling) + attn = torch.einsum("binc,bjnc->bnij", q, k) + attn_bias + attn = F.softmax(attn.float(), dim=-1).type_as(attn) + x = torch.einsum("bnij,bjnc->binc", attn, v) + x = x.reshape(b, -1, n * c) + x = attn_phase.attn_o.apply(x.squeeze(0)).unsqueeze(0) + return x + + def forward_ffn_with_offload(self, x, ffn_phase): + x = x.squeeze(0) + x = ffn_phase.ffn_fc1.apply(x) * ffn_phase.gelu(ffn_phase.ffn_gate_0.apply(x)) + x = ffn_phase.ffn_fc2.apply(x) + return x.unsqueeze(0) + + def forward_block_with_offload(self, block, x, mask=None, pos_bias=None): + if self.shared_pos: + e = pos_bias + else: + lq, lk = x.size(1), x.size(1) + rel_pos = torch.arange(lk, device=AI_DEVICE).unsqueeze(0) - torch.arange(lq, device=AI_DEVICE).unsqueeze(1) + num_buckets = block.pos_embedding.weight.shape[0] // 2 + rel_buckets = (rel_pos > 0).long() * num_buckets + rel_pos = torch.abs(rel_pos) + max_exact = num_buckets // 2 + rel_pos_large = max_exact + (torch.log(rel_pos.float() / max_exact) / math.log(128 / max_exact) * (num_buckets - max_exact)).long() + rel_pos_large = torch.min(rel_pos_large, torch.full_like(rel_pos_large, num_buckets - 1)) + rel_buckets += torch.where(rel_pos < max_exact, rel_pos, rel_pos_large) + e = block.pos_embedding.apply(rel_buckets).permute(2, 0, 1).unsqueeze(0).contiguous() + + norm1_out = block.norm1.apply(x) + x = fp16_clamp(x + self.forword_attn_with_offload(norm1_out, block.compute_phases[0], mask=mask, pos_bias=e)) + norm2_out = block.norm2.apply(x) + x = fp16_clamp(x + self.forward_ffn_with_offload(norm2_out, block.compute_phases[1])) + return x + + def forward_with_offload(self, ids, mask=None): + self.token_embedding = self.token_embedding.to(AI_DEVICE) + self.pos_embedding = self.pos_embedding.to(AI_DEVICE) if self.pos_embedding is not None else None + + x = self.token_embedding(ids) + x = self.dropout(x) + e = self.pos_embedding(x.size(1), x.size(1)) if self.shared_pos else None + self.norm = self.norm.to(AI_DEVICE) + + for block_idx in range(len(self.blocks)): + self.block_idx = block_idx + self.offload_manager.cuda_buffers[0].load_state_dict( + self.blocks[block_idx].state_dict(), + block_idx, + ) + x = self.forward_block_with_offload(self.offload_manager.cuda_buffers[0], x, mask, pos_bias=e) + + x = self.norm(x) + x = self.dropout(x) + return x.to(GET_DTYPE()) + + def forward(self, ids, mask=None): + if self.cpu_offload: + return self.forward_with_offload(ids, mask) + else: + return self.forward_without_offload(ids, mask) + + +class T5Decoder(nn.Module): + def __init__( + self, + vocab, + dim, + dim_attn, + dim_ffn, + num_heads, + num_layers, + num_buckets, + shared_pos=True, + dropout=0.1, + ): + super(T5Decoder, self).__init__() + self.dim = dim + self.dim_attn = dim_attn + self.dim_ffn = dim_ffn + self.num_heads = num_heads + self.num_layers = num_layers + self.num_buckets = num_buckets + self.shared_pos = shared_pos + + # layers + self.token_embedding = vocab if isinstance(vocab, nn.Embedding) else nn.Embedding(vocab, dim) + self.pos_embedding = T5RelativeEmbedding(num_buckets, num_heads, bidirectional=False) if shared_pos else None + self.dropout = nn.Dropout(dropout) + self.blocks = nn.ModuleList([T5CrossAttention(dim, dim_attn, dim_ffn, num_heads, num_buckets, shared_pos, dropout) for _ in range(num_layers)]) + self.norm = T5LayerNorm(dim) + + # initialize weights + self.apply(init_weights) + + def forward(self, ids, mask=None, encoder_states=None, encoder_mask=None): + b, s = ids.size() + + # causal mask + if mask is None: + mask = torch.tril(torch.ones(1, s, s).to(ids.device)) + elif mask.ndim == 2: + mask = torch.tril(mask.unsqueeze(1).expand(-1, s, -1)) + + # layers + x = self.token_embedding(ids) + x = self.dropout(x) + e = self.pos_embedding(x.size(1), x.size(1)) if self.shared_pos else None + for block in self.blocks: + x = block(x, mask, encoder_states, encoder_mask, pos_bias=e) + x = self.norm(x) + x = self.dropout(x) + return x + + +class T5Model(nn.Module): + def __init__( + self, + vocab_size, + dim, + dim_attn, + dim_ffn, + num_heads, + encoder_layers, + decoder_layers, + num_buckets, + shared_pos=True, + dropout=0.1, + ): + super(T5Model, self).__init__() + self.vocab_size = vocab_size + self.dim = dim + self.dim_attn = dim_attn + self.dim_ffn = dim_ffn + self.num_heads = num_heads + self.encoder_layers = encoder_layers + self.decoder_layers = decoder_layers + self.num_buckets = num_buckets + + # layers + self.token_embedding = nn.Embedding(vocab_size, dim) + self.encoder = T5Encoder( + self.token_embedding, + dim, + dim_attn, + dim_ffn, + num_heads, + encoder_layers, + num_buckets, + shared_pos, + dropout, + ) + self.decoder = T5Decoder( + self.token_embedding, + dim, + dim_attn, + dim_ffn, + num_heads, + decoder_layers, + num_buckets, + shared_pos, + dropout, + ) + self.head = nn.Linear(dim, vocab_size, bias=False) + + # initialize weights + self.apply(init_weights) + + def forward(self, encoder_ids, encoder_mask, decoder_ids, decoder_mask): + x = self.encoder(encoder_ids, encoder_mask) + x = self.decoder(decoder_ids, decoder_mask, x, encoder_mask) + x = self.head(x) + return x + + +def _t5( + name, + encoder_only=False, + decoder_only=False, + return_tokenizer=False, + tokenizer_kwargs={}, + dtype=torch.float32, + device="cpu", + **kwargs, +): + # sanity check + assert not (encoder_only and decoder_only) + + # params + if encoder_only: + model_cls = T5Encoder + kwargs["vocab"] = kwargs.pop("vocab_size") + kwargs["num_layers"] = kwargs.pop("encoder_layers") + _ = kwargs.pop("decoder_layers") + elif decoder_only: + model_cls = T5Decoder + kwargs["vocab"] = kwargs.pop("vocab_size") + kwargs["num_layers"] = kwargs.pop("decoder_layers") + _ = kwargs.pop("encoder_layers") + else: + model_cls = T5Model + + # init model + with torch.device(device): + model = model_cls(dtype=dtype, **kwargs) + + # set device + model = model.to(device=device) + return model + + +def split_block_weights(weights): + block_weights = {} + all_keys = list(weights.keys()) + for key in all_keys: + if key.startswith(("blocks.")): + block_weights[key] = weights.pop(key) + return block_weights + + +def umt5_xxl(**kwargs): + cfg = dict( + vocab_size=256384, + dim=4096, + dim_attn=4096, + dim_ffn=10240, + num_heads=64, + encoder_layers=24, + decoder_layers=24, + num_buckets=32, + shared_pos=False, + dropout=0.1, + ) + cfg.update(**kwargs) + return _t5("umt5-xxl", **cfg) + + +class T5EncoderModel: + def __init__( + self, + text_len, + dtype=torch.bfloat16, + device=torch.device("cuda"), + checkpoint_path=None, + tokenizer_path=None, + shard_fn=None, + cpu_offload=False, + t5_quantized=False, + t5_quantized_ckpt=None, + quant_scheme=None, + load_from_rank0=False, + ): + self.text_len = text_len + self.dtype = dtype + self.device = device + if t5_quantized_ckpt is not None and t5_quantized: + self.checkpoint_path = t5_quantized_ckpt + else: + self.checkpoint_path = checkpoint_path + self.tokenizer_path = tokenizer_path + + # sync cpu offload + self.cpu_offload = cpu_offload + + model = ( + umt5_xxl( + encoder_only=True, + return_tokenizer=False, + dtype=dtype, + device=device, + cpu_offload=cpu_offload, + quantized=t5_quantized, + quant_scheme=quant_scheme, + ) + .eval() + .requires_grad_(False) + ) + + weights_dict = load_weights( + self.checkpoint_path, + cpu_offload=cpu_offload, + load_from_rank0=load_from_rank0, + ) + + if cpu_offload: + block_weights_dict = split_block_weights(weights_dict) + model.blocks_weights.load(block_weights_dict) + del block_weights_dict + gc.collect() + + model.load_state_dict(weights_dict) + del weights_dict + gc.collect() + self.model = model + if shard_fn is not None: + self.model = shard_fn(self.model, sync_module_states=False) + else: + self.model.to(self.device) + # init tokenizer + self.tokenizer = HuggingfaceTokenizer(name=tokenizer_path, seq_len=text_len, clean="whitespace") + + def infer(self, texts): + ids, mask = self.tokenizer(texts, return_mask=True, add_special_tokens=True) + ids = ids.to(AI_DEVICE) + mask = mask.to(AI_DEVICE) + seq_lens = mask.gt(0).sum(dim=1).long() + + with torch.no_grad(): + context = self.model(ids, mask) + + return [u[:v] for u, v in zip(context, seq_lens)] + + +if __name__ == "__main__": + import time + + checkpoint_dir = "" + t5_checkpoint = "models_t5_umt5-xxl-enc-bf16.pth" + t5_tokenizer = "google/umt5-xxl" + + cpu_offload = False + if cpu_offload: + device = torch.device("cpu") + else: + device = torch.device("cuda") + + model = T5EncoderModel( + text_len=512, + dtype=torch.bfloat16, + device=device, + checkpoint_path=os.path.join(checkpoint_dir, t5_checkpoint), + tokenizer_path=os.path.join(checkpoint_dir, t5_tokenizer), + shard_fn=None, + cpu_offload=cpu_offload, + ) + text = "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." + + torch.cuda.synchronize() + s_t = time.time() + outputs = model.infer(text) + + torch.cuda.synchronize() + e_t = time.time() + + logger.info(e_t - s_t) + logger.info(outputs) diff --git a/lightx2v/models/input_encoders/hf/wan/t5/tokenizer.py b/lightx2v/models/input_encoders/hf/wan/t5/tokenizer.py new file mode 100644 index 0000000..fe93782 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/wan/t5/tokenizer.py @@ -0,0 +1,81 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import html +import string + +import ftfy +import regex as re +from transformers import AutoTokenizer + +__all__ = ["HuggingfaceTokenizer"] + + +def basic_clean(text): + text = ftfy.fix_text(text) + text = html.unescape(html.unescape(text)) + return text.strip() + + +def whitespace_clean(text): + text = re.sub(r"\s+", " ", text) + text = text.strip() + return text + + +def canonicalize(text, keep_punctuation_exact_string=None): + text = text.replace("_", " ") + if keep_punctuation_exact_string: + text = keep_punctuation_exact_string.join(part.translate(str.maketrans("", "", string.punctuation)) for part in text.split(keep_punctuation_exact_string)) + else: + text = text.translate(str.maketrans("", "", string.punctuation)) + text = text.lower() + text = re.sub(r"\s+", " ", text) + return text.strip() + + +class HuggingfaceTokenizer: + def __init__(self, name, seq_len=None, clean=None, **kwargs): + assert clean in (None, "whitespace", "lower", "canonicalize") + self.name = name + self.seq_len = seq_len + self.clean = clean + + # init tokenizer + self.tokenizer = AutoTokenizer.from_pretrained(name, **kwargs) + self.vocab_size = self.tokenizer.vocab_size + + def __call__(self, sequence, **kwargs): + return_mask = kwargs.pop("return_mask", False) + + # arguments + _kwargs = {"return_tensors": "pt"} + if self.seq_len is not None: + _kwargs.update( + { + "padding": "max_length", + "truncation": True, + "max_length": self.seq_len, + } + ) + _kwargs.update(**kwargs) + + # tokenization + if isinstance(sequence, str): + sequence = [sequence] + if self.clean: + sequence = [self._clean(u) for u in sequence] + ids = self.tokenizer(sequence, **_kwargs) + + # output + if return_mask: + return ids.input_ids, ids.attention_mask + else: + return ids.input_ids + + def _clean(self, text): + if self.clean == "whitespace": + text = whitespace_clean(basic_clean(text)) + elif self.clean == "lower": + text = whitespace_clean(basic_clean(text)).lower() + elif self.clean == "canonicalize": + text = canonicalize(basic_clean(text)) + return text diff --git a/lightx2v/models/input_encoders/hf/wan/xlm_roberta/__init__.py b/lightx2v/models/input_encoders/hf/wan/xlm_roberta/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/input_encoders/hf/wan/xlm_roberta/model.py b/lightx2v/models/input_encoders/hf/wan/xlm_roberta/model.py new file mode 100644 index 0000000..0ef1086 --- /dev/null +++ b/lightx2v/models/input_encoders/hf/wan/xlm_roberta/model.py @@ -0,0 +1,473 @@ +# Modified from ``https://github.com/openai/CLIP'' and ``https://github.com/mlfoundations/open_clip'' +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision.transforms as T +from loguru import logger + +# from lightx2v.attentions import attention +from lightx2v.common.ops.attn import TorchSDPAWeight +from lightx2v.models.input_encoders.hf.q_linear import Q8FQuantLinearFp8, Q8FQuantLinearInt8, SglQuantLinearFp8, TorchaoQuantLinearInt8, VllmQuantLinearFp8, VllmQuantLinearInt8 +from lightx2v.utils.utils import load_weights +from lightx2v_platform.base.global_var import AI_DEVICE +from lightx2v_platform.ops.mm.cambricon_mlu.q_linear import MluQuantLinearInt8 + +__all__ = [ + "XLMRobertaCLIP", + "clip_xlm_roberta_vit_h_14", + "CLIPModel", +] + + +def pos_interpolate(pos, seq_len): + if pos.size(1) == seq_len: + return pos + else: + src_grid = int(math.sqrt(pos.size(1))) + tar_grid = int(math.sqrt(seq_len)) + n = pos.size(1) - src_grid * src_grid + return torch.cat( + [ + pos[:, :n], + F.interpolate(pos[:, n:].float().reshape(1, src_grid, src_grid, -1).permute(0, 3, 1, 2), size=(tar_grid, tar_grid), mode="bicubic", align_corners=False).flatten(2).transpose(1, 2), + ], + dim=1, + ) + + +class QuickGELU(nn.Module): + def forward(self, x): + return x * torch.sigmoid(1.702 * x) + + +class LayerNorm(nn.LayerNorm): + def forward(self, x): + return super().forward(x.float()).type_as(x) + + +class SelfAttention(nn.Module): + def __init__(self, dim, num_heads, causal=False, attn_dropout=0.0, proj_dropout=0.0, quantized=False, quant_scheme=None, dtype=None): + assert dim % num_heads == 0 + super().__init__() + self.dim = dim + self.num_heads = num_heads + self.head_dim = dim // num_heads + self.causal = causal + self.attn_dropout = attn_dropout + self.proj_dropout = proj_dropout + + # layers + if quantized: + if quant_scheme in ["int8", "int8-vllm"]: + linear_cls = VllmQuantLinearInt8 + elif quant_scheme in ["fp8", "fp8-sgl"]: + linear_cls = SglQuantLinearFp8 + elif quant_scheme == "fp8-vllm": + linear_cls = VllmQuantLinearFp8 + elif quant_scheme == "int8-torchao": + linear_cls = TorchaoQuantLinearInt8 + elif quant_scheme == "int8-q8f": + linear_cls = Q8FQuantLinearInt8 + elif quant_scheme == "fp8-q8f": + linear_cls = Q8FQuantLinearFp8 + elif quant_scheme == "int8-tmo": + linear_cls = MluQuantLinearInt8 + else: + NotImplementedError(f"Unsupported CLip quant scheme: {quant_scheme}") + else: + linear_cls = nn.Linear + + self.to_qkv = linear_cls(dim, dim * 3, dtype=dtype) + self.proj = linear_cls(dim, dim, dtype=dtype) + + def forward(self, x): + """ + x: [B, L, C]. + """ + b, s, c, n, d = *x.size(), self.num_heads, self.head_dim + + # compute query, key, value + q, k, v = self.to_qkv(x).view(b, s, 3, n, d).unbind(2) + + # compute attention + x = TorchSDPAWeight().apply(q=q, k=k, v=v) + x = x.reshape(b, s, c) + + # output + x = self.proj(x) + x = F.dropout(x, self.proj_dropout, self.training) + return x + + +class SwiGLU(nn.Module): + def __init__(self, dim, mid_dim): + super().__init__() + self.dim = dim + self.mid_dim = mid_dim + # layers + self.fc1 = nn.Linear(dim, mid_dim) + self.fc2 = nn.Linear(dim, mid_dim) + self.fc3 = nn.Linear(mid_dim, dim) + + def forward(self, x): + x = F.silu(self.fc1(x)) * self.fc2(x) + x = self.fc3(x) + return x + + +class AttentionBlock(nn.Module): + def __init__( + self, + dim, + mlp_ratio, + num_heads, + post_norm=False, + causal=False, + activation="quick_gelu", + attn_dropout=0.0, + proj_dropout=0.0, + norm_eps=1e-5, + quantized=False, + quant_scheme=None, + dtype=torch.float16, + ): + assert activation in ["quick_gelu", "gelu", "swi_glu"] + super().__init__() + self.dim = dim + self.mlp_ratio = mlp_ratio + self.num_heads = num_heads + self.post_norm = post_norm + self.causal = causal + self.norm_eps = norm_eps + + # layers + if quantized: + if quant_scheme in ["int8", "int8-vllm"]: + linear_cls = VllmQuantLinearInt8 + elif quant_scheme in ["fp8", "fp8-sgl"]: + linear_cls = SglQuantLinearFp8 + elif quant_scheme == "fp8-vllm": + linear_cls = VllmQuantLinearFp8 + elif quant_scheme == "int8-torchao": + linear_cls = TorchaoQuantLinearInt8 + elif quant_scheme == "int8-q8f": + linear_cls = Q8FQuantLinearInt8 + elif quant_scheme == "fp8-q8f": + linear_cls = Q8FQuantLinearFp8 + elif quant_scheme == "int8-tmo": + linear_cls = MluQuantLinearInt8 + else: + NotImplementedError(f"Unsupported T5 quant scheme: {quant_scheme}") + else: + linear_cls = nn.Linear + + self.norm1 = LayerNorm(dim, eps=norm_eps, dtype=dtype) + self.attn = SelfAttention(dim, num_heads, causal, attn_dropout, proj_dropout, quantized, quant_scheme, dtype) + self.norm2 = LayerNorm(dim, eps=norm_eps, dtype=dtype) + if activation == "swi_glu": + self.mlp = SwiGLU(dim, int(dim * mlp_ratio), dtype=dtype) + else: + self.mlp = nn.Sequential( + linear_cls(dim, int(dim * mlp_ratio), dtype=dtype), + QuickGELU() if activation == "quick_gelu" else nn.GELU(), + linear_cls(int(dim * mlp_ratio), dim, dtype=dtype), + nn.Dropout(proj_dropout), + ) + + def forward(self, x): + if self.post_norm: + x = x + self.norm1(self.attn(x)) + x = x + self.norm2(self.mlp(x)) + else: + x = x + self.attn(self.norm1(x)) + x = x + self.mlp(self.norm2(x)) + return x + + +class AttentionPool(nn.Module): + def __init__(self, dim, mlp_ratio, num_heads, activation="gelu", proj_dropout=0.0, norm_eps=1e-5, dtype=torch.float16): + assert dim % num_heads == 0 + super().__init__() + self.dim = dim + self.mlp_ratio = mlp_ratio + self.num_heads = num_heads + self.head_dim = dim // num_heads + self.proj_dropout = proj_dropout + self.norm_eps = norm_eps + + # layers + gain = 1.0 / math.sqrt(dim) + self.cls_embedding = nn.Parameter(gain * torch.randn(1, 1, dim)) + self.to_q = nn.Linear(dim, dim, dtype=dtype) + self.to_kv = nn.Linear(dim, dim * 2, dtype=dtype) + self.proj = nn.Linear(dim, dim, dtype=dtype) + self.norm = LayerNorm(dim, eps=norm_eps, dtype=dtype) + self.mlp = nn.Sequential( + nn.Linear(dim, int(dim * mlp_ratio), dtype=dtype), QuickGELU() if activation == "quick_gelu" else nn.GELU(), nn.Linear(int(dim * mlp_ratio), dim, dtype=dtype), nn.Dropout(proj_dropout) + ) + + def forward(self, x): + """ + x: [B, L, C]. + """ + b, s, c, n, d = *x.size(), self.num_heads, self.head_dim + + # compute query, key, value + q = self.to_q(self.cls_embedding).view(1, 1, n, d).expand(b, -1, -1, -1) + k, v = self.to_kv(x).view(b, s, 2, n, d).unbind(2) + + # compute attention + x = attention(q=q, k=k, v=v, attention_type="torch_sdpa") + x = x.reshape(b, 1, c) + + # output + x = self.proj(x) + x = F.dropout(x, self.proj_dropout, self.training) + + # mlp + x = x + self.mlp(self.norm(x)) + return x[:, 0] + + +class VisionTransformer(nn.Module): + def __init__( + self, + dtype=torch.float16, + image_size=224, + patch_size=16, + dim=768, + mlp_ratio=4, + out_dim=512, + num_heads=12, + num_layers=12, + pool_type="token", + pre_norm=True, + post_norm=False, + activation="quick_gelu", + attn_dropout=0.0, + proj_dropout=0.0, + embedding_dropout=0.0, + norm_eps=1e-5, + quantized=False, + quant_scheme=None, + ): + if image_size % patch_size != 0: + logger.info("[WARNING] image_size is not divisible by patch_size", flush=True) + assert pool_type in ("token", "token_fc", "attn_pool") + out_dim = out_dim or dim + super().__init__() + self.image_size = image_size + self.patch_size = patch_size + self.num_patches = (image_size // patch_size) ** 2 + self.dim = dim + self.mlp_ratio = mlp_ratio + self.out_dim = out_dim + self.num_heads = num_heads + self.num_layers = num_layers + self.pool_type = pool_type + self.post_norm = post_norm + self.norm_eps = norm_eps + + # embeddings + gain = 1.0 / math.sqrt(dim) + self.patch_embedding = nn.Conv2d(3, dim, kernel_size=patch_size, stride=patch_size, bias=not pre_norm, dtype=dtype) + if pool_type in ("token", "token_fc"): + self.cls_embedding = nn.Parameter(gain * torch.randn(1, 1, dim, dtype=dtype)) + self.pos_embedding = nn.Parameter(gain * torch.randn(1, self.num_patches + (1 if pool_type in ("token", "token_fc") else 0), dim, dtype=dtype)) + self.dropout = nn.Dropout(embedding_dropout) + + # transformer + self.pre_norm = LayerNorm(dim, eps=norm_eps, dtype=dtype) if pre_norm else None + self.transformer = nn.Sequential( + *[AttentionBlock(dim, mlp_ratio, num_heads, post_norm, False, activation, attn_dropout, proj_dropout, norm_eps, quantized, quant_scheme, dtype) for _ in range(num_layers)] + ) + self.post_norm = LayerNorm(dim, eps=norm_eps, dtype=dtype) + + # head + if pool_type == "token": + self.head = nn.Parameter(gain * torch.randn(dim, out_dim, dtype=dtype)) + elif pool_type == "token_fc": + self.head = nn.Linear(dim, out_dim, dtype=dtype) + elif pool_type == "attn_pool": + self.head = AttentionPool(dim, mlp_ratio, num_heads, activation, proj_dropout, norm_eps, dtype=dtype) + + def forward(self, x, interpolation=False, use_31_block=False): + b = x.size(0) + + # embeddings + x = self.patch_embedding(x.type(self.patch_embedding.weight.type())).flatten(2).permute(0, 2, 1) + if self.pool_type in ("token", "token_fc"): + x = torch.cat([self.cls_embedding.expand(b, -1, -1), x], dim=1) + if interpolation: + e = pos_interpolate(self.pos_embedding, x.size(1)) + else: + e = self.pos_embedding + x = self.dropout(x + e) + if self.pre_norm is not None: + x = self.pre_norm(x) + + # transformer + if use_31_block: + x = self.transformer[:-1](x) + return x + else: + x = self.transformer(x) + return x + + +class XLMRobertaCLIP(nn.Module): + def __init__( + self, + dtype=torch.float16, + embed_dim=1024, + image_size=224, + patch_size=14, + vision_dim=1280, + vision_mlp_ratio=4, + vision_heads=16, + vision_layers=32, + vision_pool="token", + vision_pre_norm=True, + vision_post_norm=False, + activation="gelu", + vocab_size=250002, + max_text_len=514, + type_size=1, + pad_id=1, + attn_dropout=0.0, + proj_dropout=0.0, + embedding_dropout=0.0, + norm_eps=1e-5, + quantized=False, + quant_scheme=None, + ): + super().__init__() + self.embed_dim = embed_dim + self.image_size = image_size + self.patch_size = patch_size + self.vision_dim = vision_dim + self.vision_mlp_ratio = vision_mlp_ratio + self.vision_heads = vision_heads + self.vision_layers = vision_layers + self.vision_pre_norm = vision_pre_norm + self.vision_post_norm = vision_post_norm + self.activation = activation + self.vocab_size = vocab_size + self.max_text_len = max_text_len + self.type_size = type_size + self.pad_id = pad_id + self.norm_eps = norm_eps + + # models + self.visual = VisionTransformer( + dtype=dtype, + image_size=image_size, + patch_size=patch_size, + dim=vision_dim, + mlp_ratio=vision_mlp_ratio, + out_dim=embed_dim, + num_heads=vision_heads, + num_layers=vision_layers, + pool_type=vision_pool, + pre_norm=vision_pre_norm, + post_norm=vision_post_norm, + activation=activation, + attn_dropout=attn_dropout, + proj_dropout=proj_dropout, + embedding_dropout=embedding_dropout, + norm_eps=norm_eps, + quantized=quantized, + quant_scheme=quant_scheme, + ) + self.log_scale = nn.Parameter(math.log(1 / 0.07) * torch.ones([])) + + +def _clip(pretrained=False, pretrained_name=None, model_cls=XLMRobertaCLIP, return_transforms=False, return_tokenizer=False, tokenizer_padding="eos", dtype=torch.float32, device="cpu", **kwargs): + # init a model on device + with torch.device(device): + model = model_cls(dtype=dtype, **kwargs) + + model = model.to(device=device) + + output = (model,) + # init transforms + if return_transforms: + # mean and std + if "siglip" in pretrained_name.lower(): + mean, std = [0.5, 0.5, 0.5], [0.5, 0.5, 0.5] + else: + mean = [0.48145466, 0.4578275, 0.40821073] + std = [0.26862954, 0.26130258, 0.27577711] + + # transforms + transforms = T.Compose([T.Resize((model.image_size, model.image_size), interpolation=T.InterpolationMode.BICUBIC), T.ToTensor(), T.Normalize(mean=mean, std=std)]) + output += (transforms,) + return output[0] if len(output) == 1 else output + + +def clip_xlm_roberta_vit_h_14(pretrained=False, pretrained_name="open-clip-xlm-roberta-large-vit-huge-14", **kwargs): + cfg = dict( + embed_dim=1024, + image_size=224, + patch_size=14, + vision_dim=1280, + vision_mlp_ratio=4, + vision_heads=16, + vision_layers=32, + vision_pool="token", + activation="gelu", + vocab_size=250002, + max_text_len=514, + type_size=1, + pad_id=1, + attn_dropout=0.0, + proj_dropout=0.0, + embedding_dropout=0.0, + ) + cfg.update(**kwargs) + return _clip(pretrained, pretrained_name, XLMRobertaCLIP, **cfg) + + +class CLIPModel: + def __init__(self, dtype, device, checkpoint_path, clip_quantized, clip_quantized_ckpt, quant_scheme, cpu_offload=False, use_31_block=True, load_from_rank0=False): + self.dtype = dtype + self.quantized = clip_quantized + self.cpu_offload = cpu_offload + self.use_31_block = use_31_block + + if self.quantized: + self.checkpoint_path = clip_quantized_ckpt + else: + self.checkpoint_path = checkpoint_path + + # init model + self.model, self.transforms = clip_xlm_roberta_vit_h_14( + pretrained=False, return_transforms=True, return_tokenizer=False, dtype=dtype, device=device, quantized=self.quantized, quant_scheme=quant_scheme + ) + self.model = self.model.eval().requires_grad_(False) + weight_dict = load_weights(self.checkpoint_path, cpu_offload=cpu_offload, remove_key="textual", load_from_rank0=load_from_rank0) + self.model.load_state_dict(weight_dict) + + def visual(self, videos): + if self.cpu_offload: + self.to_cuda() + # preprocess + size = (self.model.image_size,) * 2 + videos = torch.cat([F.interpolate(u, size=size, mode="bicubic", align_corners=False) for u in videos]) + videos = self.transforms.transforms[-1](videos.mul_(0.5).add_(0.5)) + # forward + with torch.amp.autocast("cuda", dtype=self.dtype): + out = self.model.visual(videos, use_31_block=self.use_31_block) + + if self.cpu_offload: + self.to_cpu() + return out + + def to_cuda(self): + self.model = self.model.to(AI_DEVICE) + + def to_cpu(self): + self.model = self.model.cpu() diff --git a/lightx2v/models/networks/__init__.py b/lightx2v/models/networks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/hunyuan_video/__init__.py b/lightx2v/models/networks/hunyuan_video/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/hunyuan_video/infer/attn_no_pad.py b/lightx2v/models/networks/hunyuan_video/infer/attn_no_pad.py new file mode 100644 index 0000000..c5409f6 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/attn_no_pad.py @@ -0,0 +1,129 @@ +import torch +from einops import rearrange +from loguru import logger + +try: + from flash_attn import flash_attn_varlen_qkvpacked_func +except ImportError: + flash_attn_varlen_qkvpacked_func = None + logger.info("flash_attn_varlen_qkvpacked_func not available") +try: + from flash_attn.bert_padding import pad_input, unpad_input +except ImportError: + pad_input = None + unpad_input = None + logger.info("flash_attn.bert_padding not available") + +try: + from flash_attn_interface import flash_attn_varlen_func as flash_attn_varlen_func_v3 +except ImportError: + flash_attn_varlen_func_v3 = None + logger.info("flash_attn_varlen_func_v3 not available") + +if torch.cuda.is_available() and torch.cuda.get_device_capability(0) in [(8, 9), (12, 0)]: + try: + from sageattention import sageattn_qk_int8_pv_fp16_triton as sageattn + except ImportError: + logger.info("sageattn not found, please install sageattention first") + sageattn = None +else: + try: + from sageattention import sageattn + except ImportError: + logger.info("sageattn not found, please install sageattention first") + sageattn = None + +try: + from sageattn3 import sageattn3_blackwell +except ImportError: + logger.info("sageattn3 not found, please install sageattention first") + sageattn3_blackwell = None + + +def flash_attn_no_pad(qkv, key_padding_mask, causal=False, dropout_p=0.0, softmax_scale=None, deterministic=False): + batch_size = qkv.shape[0] + seqlen = qkv.shape[1] + nheads = qkv.shape[-2] + x = rearrange(qkv, "b s three h d -> b s (three h d)") + x_unpad, indices, cu_seqlens, max_s, used_seqlens_in_batch = unpad_input(x, key_padding_mask) + + x_unpad = rearrange(x_unpad, "nnz (three h d) -> nnz three h d", three=3, h=nheads) + output_unpad = flash_attn_varlen_qkvpacked_func( + x_unpad, + cu_seqlens, + max_s, + dropout_p, + softmax_scale=softmax_scale, + causal=causal, + deterministic=deterministic, + ) + output = rearrange( + pad_input(rearrange(output_unpad, "nnz h d -> nnz (h d)"), indices, batch_size, seqlen), + "b s (h d) -> b s h d", + h=nheads, + ) + return output + + +def flash_attn_no_pad_v3(qkv, key_padding_mask, causal=False, dropout_p=0.0, softmax_scale=None, deterministic=False): + if flash_attn_varlen_func_v3 is None: + raise ImportError("FlashAttention V3 backend not available") + + batch_size, seqlen, _, nheads, head_dim = qkv.shape + query, key, value = qkv.unbind(dim=2) + + query_unpad, indices, cu_seqlens_q, max_seqlen_q, _ = unpad_input(rearrange(query, "b s h d -> b s (h d)"), key_padding_mask) + key_unpad, _, cu_seqlens_k, _, _ = unpad_input(rearrange(key, "b s h d -> b s (h d)"), key_padding_mask) + value_unpad, _, _, _, _ = unpad_input(rearrange(value, "b s h d -> b s (h d)"), key_padding_mask) + + query_unpad = rearrange(query_unpad, "nnz (h d) -> nnz h d", h=nheads) + key_unpad = rearrange(key_unpad, "nnz (h d) -> nnz h d", h=nheads) + value_unpad = rearrange(value_unpad, "nnz (h d) -> nnz h d", h=nheads) + + output_unpad = flash_attn_varlen_func_v3( + query_unpad, key_unpad, value_unpad, cu_seqlens_q, cu_seqlens_k, max_seqlen_q, max_seqlen_q, softmax_scale=softmax_scale, causal=causal, deterministic=deterministic + ) + + output = rearrange(pad_input(rearrange(output_unpad, "nnz h d -> nnz (h d)"), indices, batch_size, seqlen), "b s (h d) -> b s h d", h=nheads) + return output + + +def sage_attn_no_pad_v2(qkv, key_padding_mask, causal=False, dropout_p=0.0, softmax_scale=None, deterministic=False): + batch_size, seqlen, _, nheads, head_dim = qkv.shape + query, key, value = qkv.unbind(dim=2) + + query_unpad, indices, cu_seqlens_q, max_seqlen_q, _ = unpad_input(rearrange(query, "b s h d -> b s (h d)"), key_padding_mask) + key_unpad, _, cu_seqlens_k, _, _ = unpad_input(rearrange(key, "b s h d -> b s (h d)"), key_padding_mask) + value_unpad, _, _, _, _ = unpad_input(rearrange(value, "b s h d -> b s (h d)"), key_padding_mask) + + query_unpad = rearrange(query_unpad, "nnz (h d) -> nnz h d", h=nheads) + key_unpad = rearrange(key_unpad, "nnz (h d) -> nnz h d", h=nheads) + value_unpad = rearrange(value_unpad, "nnz (h d) -> nnz h d", h=nheads) + + output_unpad = sageattn( + query_unpad.unsqueeze(0), + key_unpad.unsqueeze(0), + value_unpad.unsqueeze(0), + tensor_layout="NHD", + ).squeeze(0) + + output = rearrange(pad_input(rearrange(output_unpad, "nnz h d -> nnz (h d)"), indices, batch_size, seqlen), "b s (h d) -> b s h d", h=nheads) + return output + + +def sage_attn_no_pad_v3(qkv, key_padding_mask, causal=False, dropout_p=0.0, softmax_scale=None, deterministic=False): + batch_size, seqlen, _, nheads, head_dim = qkv.shape + query, key, value = qkv.unbind(dim=2) + + query_unpad, indices, cu_seqlens_q, max_seqlen_q, _ = unpad_input(rearrange(query, "b s h d -> b s (h d)"), key_padding_mask) + key_unpad, _, cu_seqlens_k, _, _ = unpad_input(rearrange(key, "b s h d -> b s (h d)"), key_padding_mask) + value_unpad, _, _, _, _ = unpad_input(rearrange(value, "b s h d -> b s (h d)"), key_padding_mask) + + query_unpad = rearrange(query_unpad, "nnz (h d) -> nnz h d", h=nheads) + key_unpad = rearrange(key_unpad, "nnz (h d) -> nnz h d", h=nheads) + value_unpad = rearrange(value_unpad, "nnz (h d) -> nnz h d", h=nheads) + + output_unpad = sageattn3_blackwell(query_unpad.unsqueeze(0).transpose(1, 2), key_unpad.unsqueeze(0).transpose(1, 2), value_unpad.unsqueeze(0).transpose(1, 2)).transpose(1, 2).squeeze(0) + + output = rearrange(pad_input(rearrange(output_unpad, "nnz h d -> nnz (h d)"), indices, batch_size, seqlen), "b s (h d) -> b s h d", h=nheads) + return output diff --git a/lightx2v/models/networks/hunyuan_video/infer/feature_caching/__init__.py b/lightx2v/models/networks/hunyuan_video/infer/feature_caching/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/hunyuan_video/infer/feature_caching/transformer_infer.py b/lightx2v/models/networks/hunyuan_video/infer/feature_caching/transformer_infer.py new file mode 100644 index 0000000..56041ec --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/feature_caching/transformer_infer.py @@ -0,0 +1,229 @@ +import gc +import json + +import numpy as np +import torch +import torch.nn.functional as F + +from lightx2v.models.networks.hunyuan_video.infer.offload.transformer_infer import HunyuanVideo15OffloadTransformerInfer +from lightx2v_platform.base.global_var import AI_DEVICE + + +class HunyuanVideo15TransformerInferMagCaching(HunyuanVideo15OffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.magcache_thresh = config.get("magcache_thresh", 0.2) + self.K = config.get("magcache_K", 6) + self.retention_ratio = config.get("magcache_retention_ratio", 0.2) + self.mag_ratios = np.array(config.get("magcache_ratios", [])) + self.enable_magcache_calibration = config.get("magcache_calibration", True) + # {True: cond_param, False: uncond_param} + self.accumulated_err = {True: 0.0, False: 0.0} + self.accumulated_steps = {True: 0, False: 0} + self.accumulated_ratio = {True: 1.0, False: 1.0} + self.residual_cache = {True: None, False: None} + self.residual_cache_txt = {True: None, False: None} + # calibration args + self.norm_ratio = [[1.0], [1.0]] # mean of magnitude ratio + self.norm_std = [[0.0], [0.0]] # std of magnitude ratio + self.cos_dis = [[0.0], [0.0]] # cosine distance of residual features + + @torch.no_grad() + def infer(self, weights, infer_module_out): + skip_forward = False + step_index = self.scheduler.step_index + infer_condition = self.scheduler.infer_condition + + if self.enable_magcache_calibration: + skip_forward = False + else: + if step_index >= int(self.config["infer_steps"] * self.retention_ratio): + # conditional and unconditional in one list + cur_mag_ratio = self.mag_ratios[0][step_index] if infer_condition else self.mag_ratios[1][step_index] + # magnitude ratio between current step and the cached step + self.accumulated_ratio[infer_condition] = self.accumulated_ratio[infer_condition] * cur_mag_ratio + self.accumulated_steps[infer_condition] += 1 # skip steps plus 1 + # skip error of current steps + cur_skip_err = np.abs(1 - self.accumulated_ratio[infer_condition]) + # accumulated error of multiple steps + self.accumulated_err[infer_condition] += cur_skip_err + + if self.accumulated_err[infer_condition] < self.magcache_thresh and self.accumulated_steps[infer_condition] <= self.K: + skip_forward = True + else: + self.accumulated_err[infer_condition] = 0 + self.accumulated_steps[infer_condition] = 0 + self.accumulated_ratio[infer_condition] = 1.0 + + if not skip_forward: + self.infer_calculating(weights, infer_module_out) + else: + self.infer_using_cache(infer_module_out) + + x = self.infer_final_layer(weights, infer_module_out) + + return x + + def infer_calculating(self, weights, infer_module_out): + step_index = self.scheduler.step_index + infer_condition = self.scheduler.infer_condition + + ori_img = infer_module_out.img.clone() + ori_txt = infer_module_out.txt.clone() + self.infer_func(weights, infer_module_out) + + previous_residual = infer_module_out.img - ori_img + previous_residual_txt = infer_module_out.txt - ori_txt + + if self.config["cpu_offload"]: + previous_residual = previous_residual.cpu() + previous_residual_txt = previous_residual_txt.cpu() + + if self.enable_magcache_calibration and step_index >= 1: + norm_ratio = ((previous_residual.norm(dim=-1) / self.residual_cache[infer_condition].norm(dim=-1)).mean()).item() + norm_std = (previous_residual.norm(dim=-1) / self.residual_cache[infer_condition].norm(dim=-1)).std().item() + cos_dis = (1 - F.cosine_similarity(previous_residual, self.residual_cache[infer_condition], dim=-1, eps=1e-8)).mean().item() + _index = int(not infer_condition) + self.norm_ratio[_index].append(round(norm_ratio, 5)) + self.norm_std[_index].append(round(norm_std, 5)) + self.cos_dis[_index].append(round(cos_dis, 5)) + print(f"time: {step_index}, infer_condition: {infer_condition}, norm_ratio: {norm_ratio}, norm_std: {norm_std}, cos_dis: {cos_dis}") + + self.residual_cache[infer_condition] = previous_residual + self.residual_cache_txt[infer_condition] = previous_residual_txt + + if self.config["cpu_offload"]: + ori_img = ori_img.to("cpu") + ori_txt = ori_txt.to("cpu") + del ori_img, ori_txt + torch.cuda.empty_cache() + gc.collect() + + def infer_using_cache(self, infer_module_out): + residual_img = self.residual_cache[self.scheduler.infer_condition] + residual_txt = self.residual_cache_txt[self.scheduler.infer_condition] + infer_module_out.img.add_(residual_img.to(AI_DEVICE)) + infer_module_out.txt.add_(residual_txt.to(AI_DEVICE)) + + def clear(self): + self.accumulated_err = {True: 0.0, False: 0.0} + self.accumulated_steps = {True: 0, False: 0} + self.accumulated_ratio = {True: 1.0, False: 1.0} + self.residual_cache = {True: None, False: None} + self.residual_cache_txt = {True: None, False: None} + if self.enable_magcache_calibration: + print("norm ratio") + print(self.norm_ratio) + print("norm std") + print(self.norm_std) + print("cos_dis") + print(self.cos_dis) + + def save_json(filename, obj_list): + with open(filename + ".json", "w") as f: + json.dump(obj_list, f) + + save_json("mag_ratio", self.norm_ratio) + save_json("mag_std", self.norm_std) + save_json("cos_dis", self.cos_dis) + + +class HunyuanTransformerInferTeaCaching(HunyuanVideo15OffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.teacache_thresh = self.config["teacache_thresh"] + self.coefficients = self.config["coefficients"] + + self.accumulated_rel_l1_distance_odd = 0 + self.previous_modulated_input_odd = None + self.previous_residual_odd = None + + self.accumulated_rel_l1_distance_even = 0 + self.previous_modulated_input_even = None + self.previous_residual_even = None + + def calculate_should_calc(self, img, vec, block): + inp = img.clone() + vec_ = vec.clone() + img_mod_layer = block.img_branch.img_mod + if self.config["cpu_offload"]: + img_mod_layer.to_cuda() + + img_mod1_shift, img_mod1_scale, _, _, _, _ = img_mod_layer.apply(vec_).chunk(6, dim=-1) + inp = inp.squeeze(0) + normed_inp = torch.nn.functional.layer_norm(inp, (inp.shape[1],), None, None, 1e-6) + modulated_inp = normed_inp * (1 + img_mod1_scale) + img_mod1_shift + + del normed_inp, inp, vec_ + + if self.scheduler.step_index == 0 or self.scheduler.step_index == self.scheduler.infer_steps - 1: + should_calc = True + if self.scheduler.infer_condition: + self.accumulated_rel_l1_distance_odd = 0 + self.previous_modulated_input_odd = modulated_inp + else: + self.accumulated_rel_l1_distance_even = 0 + self.previous_modulated_input_even = modulated_inp + else: + rescale_func = np.poly1d(self.coefficients) + if self.scheduler.infer_condition: + self.accumulated_rel_l1_distance_odd += rescale_func(((modulated_inp - self.previous_modulated_input_odd).abs().mean() / self.previous_modulated_input_odd.abs().mean()).cpu().item()) + if self.accumulated_rel_l1_distance_odd < self.teacache_thresh: + should_calc = False + else: + should_calc = True + self.accumulated_rel_l1_distance_odd = 0 + self.previous_modulated_input_odd = modulated_inp + else: + self.accumulated_rel_l1_distance_even += rescale_func( + ((modulated_inp - self.previous_modulated_input_even).abs().mean() / self.previous_modulated_input_even.abs().mean()).cpu().item() + ) + if self.accumulated_rel_l1_distance_even < self.teacache_thresh: + should_calc = False + else: + should_calc = True + self.accumulated_rel_l1_distance_even = 0 + + self.previous_modulated_input_even = modulated_inp + del modulated_inp + + return should_calc + + def infer(self, weights, infer_module_out): + should_calc = self.calculate_should_calc(infer_module_out.img, infer_module_out.vec, weights.double_blocks[0]) + if not should_calc: + if self.scheduler.infer_condition: + infer_module_out.img += self.previous_residual_odd + else: + infer_module_out.img += self.previous_residual_even + else: + ori_img = infer_module_out.img.clone() + + self.infer_func(weights, infer_module_out) + + if self.scheduler.infer_condition: + self.previous_residual_odd = infer_module_out.img - ori_img + else: + self.previous_residual_even = infer_module_out.img - ori_img + + x = self.infer_final_layer(weights, infer_module_out) + return x + + def clear(self): + if self.previous_residual_odd is not None: + self.previous_residual_odd = self.previous_residual_odd.cpu() + + if self.previous_modulated_input_odd is not None: + self.previous_modulated_input_odd = self.previous_modulated_input_odd.cpu() + + if self.previous_residual_even is not None: + self.previous_residual_even = self.previous_residual_even.cpu() + + if self.previous_modulated_input_even is not None: + self.previous_modulated_input_even = self.previous_modulated_input_even.cpu() + + self.previous_modulated_input_odd = None + self.previous_residual_odd = None + self.previous_modulated_input_even = None + self.previous_residual_even = None + torch.cuda.empty_cache() diff --git a/lightx2v/models/networks/hunyuan_video/infer/module_io.py b/lightx2v/models/networks/hunyuan_video/infer/module_io.py new file mode 100644 index 0000000..199922e --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/module_io.py @@ -0,0 +1,27 @@ +from dataclasses import dataclass + +import torch + + +@dataclass +class HunyuanVideo15InferModuleOutput: + img: torch.Tensor + txt: torch.Tensor + vec: torch.Tensor + grid_sizes: tuple + + +@dataclass +class HunyuanVideo15ImgBranchOutput: + img_mod1_gate: torch.Tensor + img_mod2_shift: torch.Tensor + img_mod2_scale: torch.Tensor + img_mod2_gate: torch.Tensor + + +@dataclass +class HunyuanVideo15TxtBranchOutput: + txt_mod1_gate: torch.Tensor + txt_mod2_shift: torch.Tensor + txt_mod2_scale: torch.Tensor + txt_mod2_gate: torch.Tensor diff --git a/lightx2v/models/networks/hunyuan_video/infer/offload/__init__.py b/lightx2v/models/networks/hunyuan_video/infer/offload/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/hunyuan_video/infer/offload/transformer_infer.py b/lightx2v/models/networks/hunyuan_video/infer/offload/transformer_infer.py new file mode 100644 index 0000000..4700e30 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/offload/transformer_infer.py @@ -0,0 +1,34 @@ +import torch + +from lightx2v.common.offload.manager import WeightAsyncStreamManager +from lightx2v.models.networks.hunyuan_video.infer.transformer_infer import HunyuanVideo15TransformerInfer +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +class HunyuanVideo15OffloadTransformerInfer(HunyuanVideo15TransformerInfer): + def __init__(self, config): + super().__init__(config) + if self.config.get("cpu_offload", False): + offload_granularity = self.config.get("offload_granularity", "block") + if offload_granularity == "block": + self.infer_func = self.infer_with_blocks_offload + elif offload_granularity == "model": + self.infer_func = self.infer_without_offload + else: + raise NotImplementedError + if offload_granularity != "model": + self.offload_manager = WeightAsyncStreamManager(offload_granularity=offload_granularity) + + @torch.no_grad() + def infer_with_blocks_offload(self, weights, infer_module_out): + for block_idx in range(self.double_blocks_num): + self.block_idx = block_idx + if block_idx == 0: + self.offload_manager.init_first_buffer(weights.double_blocks) + if block_idx < self.double_blocks_num - 1: + self.offload_manager.prefetch_weights(block_idx + 1, weights.double_blocks) + with torch_device_module.stream(self.offload_manager.compute_stream): + infer_module_out.img, infer_module_out.txt = self.infer_double_block(self.offload_manager.cuda_buffers[0], infer_module_out) + self.offload_manager.swap_blocks() diff --git a/lightx2v/models/networks/hunyuan_video/infer/post_infer.py b/lightx2v/models/networks/hunyuan_video/infer/post_infer.py new file mode 100644 index 0000000..a34545f --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/post_infer.py @@ -0,0 +1,39 @@ +import torch + +from lightx2v.utils.envs import * + + +class HunyuanVideo15PostInfer: + def __init__(self, config): + self.config = config + self.unpatchify_channels = config["out_channels"] + self.patch_size = config["patch_size"] # (1, 1, 1) + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + @torch.no_grad() + def infer(self, x, pre_infer_out): + x = self.unpatchify(x, pre_infer_out.grid_sizes[0], pre_infer_out.grid_sizes[1], pre_infer_out.grid_sizes[2]) + return x + + def unpatchify(self, x, t, h, w): + """ + Unpatchify a tensorized input back to frame format. + + Args: + x (Tensor): Input tensor of shape (N, T, patch_size**2 * C) + t (int): Number of time steps + h (int): Height in patch units + w (int): Width in patch units + + Returns: + Tensor: Output tensor of shape (N, C, t * pt, h * ph, w * pw) + """ + c = self.unpatchify_channels + pt, ph, pw = self.patch_size + x = x[:, : t * h * w] # remove padding from seq parallel + x = x.reshape(shape=(x.shape[0], t, h, w, c, pt, ph, pw)) + x = torch.einsum("nthwcopq->nctohpwq", x) + imgs = x.reshape(shape=(x.shape[0], c, t * pt, h * ph, w * pw)) + return imgs diff --git a/lightx2v/models/networks/hunyuan_video/infer/pre_infer.py b/lightx2v/models/networks/hunyuan_video/infer/pre_infer.py new file mode 100644 index 0000000..feb62f5 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/pre_infer.py @@ -0,0 +1,240 @@ +import math +from typing import Optional + +import torch +from einops import rearrange + +from lightx2v.utils.envs import * +from lightx2v_platform.base.global_var import AI_DEVICE + +from .attn_no_pad import flash_attn_no_pad, flash_attn_no_pad_v3, sage_attn_no_pad_v2 +from .module_io import HunyuanVideo15InferModuleOutput + + +def apply_gate(x, gate=None, tanh=False): + """AI is creating summary for apply_gate + + Args: + x (torch.Tensor): input tensor. + gate (torch.Tensor, optional): gate tensor. Defaults to None. + tanh (bool, optional): whether to use tanh function. Defaults to False. + + Returns: + torch.Tensor: the output tensor after apply gate. + """ + if gate is None: + return x + if tanh: + return x * gate.unsqueeze(1).tanh() + else: + return x * gate.unsqueeze(1) + + +@torch.compiler.disable +def attention( + q: torch.Tensor, k: torch.Tensor, v: torch.Tensor, drop_rate: float = 0.0, attn_mask: Optional[torch.Tensor] = None, causal: bool = False, attn_type: str = "flash_attn2" +) -> torch.Tensor: + """ + Compute attention using flash_attn_no_pad. + + Args: + q: Query tensor of shape [B, L, H, D] + k: Key tensor of shape [B, L, H, D] + v: Value tensor of shape [B, L, H, D] + drop_rate: Dropout rate for attention weights. + attn_mask: Optional attention mask of shape [B, L]. + causal: Whether to apply causal masking. + + Returns: + Output tensor after attention of shape [B, L, H*D] + """ + qkv = torch.stack([q, k, v], dim=2) + if attn_mask is not None and attn_mask.dtype != torch.bool: + attn_mask = attn_mask.bool() + if attn_type == "flash_attn2": + x = flash_attn_no_pad(qkv, attn_mask, causal=causal, dropout_p=drop_rate, softmax_scale=None) + elif attn_type == "flash_attn3": + x = flash_attn_no_pad_v3(qkv, attn_mask, causal=causal, dropout_p=drop_rate, softmax_scale=None) + elif attn_type == "sage_attn2": + x = sage_attn_no_pad_v2(qkv, attn_mask, causal=causal, dropout_p=drop_rate, softmax_scale=None) + b, s, a, d = x.shape + out = x.reshape(b, s, -1) + return out + + +class HunyuanVideo15PreInfer: + def __init__(self, config): + self.config = config + self.patch_size = config["patch_size"] + self.heads_num = config["heads_num"] + self.frequency_embedding_size = 256 + self.max_period = 10000 + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + @torch.no_grad() + def infer(self, weights, inputs): + latents = self.scheduler.latents + grid_sizes_t, grid_sizes_h, grid_sizes_w = latents.shape[2:] + + timesteps = self.scheduler.timesteps + t = timesteps[self.scheduler.step_index] + + if self.scheduler.infer_condition: + txt, text_mask = inputs["text_encoder_output"]["context"][0], inputs["text_encoder_output"]["context"][1] + else: + txt, text_mask = inputs["text_encoder_output"]["context_null"][0], inputs["text_encoder_output"]["context_null"][1] + + byt5_txt, byt5_text_mask = inputs["text_encoder_output"]["byt5_features"], inputs["text_encoder_output"]["byt5_masks"] + siglip_output, siglip_mask = inputs["image_encoder_output"]["siglip_output"], inputs["image_encoder_output"]["siglip_mask"] + txt = txt.to(torch.bfloat16) + + if self.config["is_sr_running"]: + if t < 1000 * self.scheduler.noise_scale: + condition = self.scheduler.zero_condition + else: + condition = self.scheduler.condition + + img = x = latent_model_input = torch.concat([latents, condition], dim=1) + else: + cond_latents_concat = self.scheduler.cond_latents_concat + mask_concat = self.scheduler.mask_concat + img = x = latent_model_input = torch.concat([latents, cond_latents_concat, mask_concat], dim=1) + + img = img.to(torch.bfloat16) + + t_expand = t.repeat(latent_model_input.shape[0]) + guidance_expand = None + + img = weights.img_in.apply(img) + img = img.flatten(2).transpose(1, 2) + + t_freq = self.timestep_embedding(t_expand, self.frequency_embedding_size, self.max_period).to(torch.bfloat16) + vec = weights.time_in_0.apply(t_freq) + vec = torch.nn.functional.silu(vec) + vec = weights.time_in_2.apply(vec) + + if self.config["is_sr_running"]: + use_meanflow = self.config.get("video_super_resolution", {}).get("use_meanflow", False) + if use_meanflow: + if self.scheduler.step_index == len(timesteps) - 1: + timesteps_r = torch.tensor([0.0], device=latent_model_input.device) + else: + timesteps_r = timesteps[self.scheduler.step_index + 1] + timesteps_r = timesteps_r.repeat(latent_model_input.shape[0]) + else: + timesteps_r = None + + if timesteps_r is not None: + t_freq = self.timestep_embedding(timesteps_r, self.frequency_embedding_size, self.max_period).to(torch.bfloat16) + vec_res = weights.time_r_in_0.apply(t_freq) + vec_res = torch.nn.functional.silu(vec_res) + vec_res = weights.time_r_in_2.apply(vec_res) + vec = vec + vec_res + + t_freq = self.timestep_embedding(t_expand, self.frequency_embedding_size, self.max_period).to(torch.bfloat16) + timestep_aware_representations = weights.txt_in_t_embedder_0.apply(t_freq) + timestep_aware_representations = torch.nn.functional.silu(timestep_aware_representations) + timestep_aware_representations = weights.txt_in_t_embedder_2.apply(timestep_aware_representations) + + mask_float = text_mask.float().unsqueeze(-1) + context_aware_representations = (txt * mask_float).sum(dim=1) / mask_float.sum(dim=1) + context_aware_representations = context_aware_representations.to(torch.bfloat16) + context_aware_representations = weights.txt_in_c_embedder_0.apply(context_aware_representations) + context_aware_representations = torch.nn.functional.silu(context_aware_representations) + context_aware_representations = weights.txt_in_c_embedder_2.apply(context_aware_representations) + + c = timestep_aware_representations + context_aware_representations + out = weights.txt_in_input_embedder.apply(txt[0].to(torch.bfloat16)) + txt = self.run_individual_token_refiner(weights, out, text_mask, c) + + # TODO: 可以删除这段计算 + txt = txt.unsqueeze(0) + txt = txt + weights.cond_type_embedding.apply(torch.zeros_like(txt[:, :, 0], device=txt.device, dtype=torch.long)) + byt5_txt = byt5_txt + weights.cond_type_embedding.apply(torch.ones_like(byt5_txt[:, :, 0], device=byt5_txt.device, dtype=torch.long)) + txt, text_mask = self.reorder_txt_token(byt5_txt, txt, byt5_text_mask, text_mask, zero_feat=True) + + siglip_output = siglip_output + weights.cond_type_embedding.apply(2 * torch.ones_like(siglip_output[:, :, 0], dtype=torch.long, device=AI_DEVICE)) + txt, text_mask = self.reorder_txt_token(siglip_output, txt, siglip_mask, text_mask) + txt = txt[:, : text_mask.sum(), :] + + return HunyuanVideo15InferModuleOutput( + img=img.contiguous(), + txt=txt.contiguous(), + vec=torch.nn.functional.silu(vec), + grid_sizes=(grid_sizes_t, grid_sizes_h, grid_sizes_w), + ) + + def run_individual_token_refiner(self, weights, out, mask, c): + mask = mask.clone().bool() + mask[:, 0] = True # Prevent attention weights from becoming NaN + for block in weights.individual_token_refiner: # block num = 2 + gate_msa, gate_mlp = self.adaLN_modulation(block, c) + norm_x = block.norm1.apply(out.unsqueeze(0)).squeeze(0) + qkv = block.self_attn_qkv.apply(norm_x).unsqueeze(0) + q, k, v = rearrange(qkv, "B L (K H D) -> K B L H D", K=3, H=self.heads_num) + attn = attention(q, k, v, attn_mask=mask, attn_type="flash_attn2").squeeze(0) + out = out + apply_gate(block.self_attn_proj.apply(attn).unsqueeze(0), gate_msa).squeeze(0) + tmp = block.mlp_fc1.apply(block.norm2.apply(out)) + tmp = torch.nn.functional.silu(tmp) + tmp = block.mlp_fc2.apply(tmp) + out = out + apply_gate(tmp.unsqueeze(0), gate_mlp).squeeze(0) + return out + + def adaLN_modulation(self, weights, c): + c = torch.nn.functional.silu(c) + gate_msa, gate_mlp = weights.adaLN_modulation.apply(c).chunk(2, dim=1) + return gate_msa, gate_mlp + + def timestep_embedding(self, t, dim, max_period=10000): + """ + Create sinusoidal timestep embeddings. + + Args: + t (torch.Tensor): a 1-D Tensor of N indices, one per batch element. These may be fractional. + dim (int): the dimension of the output. + max_period (int): controls the minimum frequency of the embeddings. + + Returns: + embedding (torch.Tensor): An (N, D) Tensor of positional embeddings. + + .. ref_link: https://github.com/openai/glide-text2im/blob/main/glide_text2im/nn.py + """ + half = dim // 2 + freqs = torch.exp(-math.log(max_period) * torch.arange(start=0, end=half, dtype=torch.float32) / half).to(device=t.device) + args = t[:, None].float() * freqs[None] + embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1) + if dim % 2: + embedding = torch.cat([embedding, torch.zeros_like(embedding[:, :1])], dim=-1) + return embedding + + def reorder_txt_token(self, byt5_txt, txt, byt5_text_mask, text_mask, zero_feat=False, is_reorder=True): + if is_reorder: + reorder_txt = [] + reorder_mask = [] + for i in range(text_mask.shape[0]): + byt5_text_mask_i = byt5_text_mask[i].bool() + text_mask_i = text_mask[i].bool() + + byt5_txt_i = byt5_txt[i] + txt_i = txt[i] + if zero_feat: + # When using block mask with approximate computation, set pad to zero to reduce error + pad_byt5 = torch.zeros_like(byt5_txt_i[~byt5_text_mask_i]) + pad_text = torch.zeros_like(txt_i[~text_mask_i]) + reorder_txt_i = torch.cat([byt5_txt_i[byt5_text_mask_i], txt_i[text_mask_i], pad_byt5, pad_text], dim=0) + else: + reorder_txt_i = torch.cat([byt5_txt_i[byt5_text_mask_i], txt_i[text_mask_i], byt5_txt_i[~byt5_text_mask_i], txt_i[~text_mask_i]], dim=0) + reorder_mask_i = torch.cat([byt5_text_mask_i[byt5_text_mask_i], text_mask_i[text_mask_i], byt5_text_mask_i[~byt5_text_mask_i], text_mask_i[~text_mask_i]], dim=0) + + reorder_txt.append(reorder_txt_i) + reorder_mask.append(reorder_mask_i) + + reorder_txt = torch.stack(reorder_txt) + reorder_mask = torch.stack(reorder_mask).to(dtype=torch.int64) + else: + reorder_txt = torch.concat([byt5_txt, txt], dim=1) + reorder_mask = torch.concat([byt5_text_mask, text_mask], dim=1).to(dtype=torch.int64) + + return reorder_txt, reorder_mask diff --git a/lightx2v/models/networks/hunyuan_video/infer/transformer_infer.py b/lightx2v/models/networks/hunyuan_video/infer/transformer_infer.py new file mode 100644 index 0000000..869f99d --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/transformer_infer.py @@ -0,0 +1,265 @@ +from typing import Tuple + +import torch +import torch.nn.functional as F +from einops import rearrange + +try: + from flashinfer.rope import apply_rope_with_cos_sin_cache_inplace +except Exception as e: + apply_rope_with_cos_sin_cache_inplace = None + +from lightx2v.common.transformer_infer.transformer_infer import BaseTransformerInfer +from lightx2v_platform.base.global_var import AI_DEVICE + +from .module_io import HunyuanVideo15ImgBranchOutput, HunyuanVideo15TxtBranchOutput +from .triton_ops import fuse_scale_shift_kernel + + +def modulate(x, scale, shift): + return x * (1 + scale.unsqueeze(1)) + shift.unsqueeze(1) + + +def apply_gate(x, gate=None, tanh=False): + """AI is creating summary for apply_gate + + Args: + x (torch.Tensor): input tensor. + gate (torch.Tensor, optional): gate tensor. Defaults to None. + tanh (bool, optional): whether to use tanh function. Defaults to False. + + Returns: + torch.Tensor: the output tensor after apply gate. + """ + if gate is None: + return x + if tanh: + return x * gate.unsqueeze(1).tanh() + else: + return x * gate.unsqueeze(1) + + +def apply_hunyuan_rope_with_flashinfer( + xq: torch.Tensor, + xk: torch.Tensor, + cos_sin_cache: torch.Tensor, +) -> Tuple[torch.Tensor, torch.Tensor]: + B, L, H, D = xq.shape + + query = xq.reshape(B * L, H * D).contiguous() + key = xk.reshape(B * L, H * D).contiguous() + + positions = torch.arange(B * L, device=xq.device, dtype=torch.long) + + apply_rope_with_cos_sin_cache_inplace( + positions=positions, + query=query, + key=key, + head_size=D, + cos_sin_cache=cos_sin_cache, + is_neox=False, + ) + + xq_out = query.view(B, L, H, D) + xk_out = key.view(B, L, H, D) + return xq_out, xk_out + + +def apply_hunyuan_rope_with_torch( + xq: torch.Tensor, + xk: torch.Tensor, + cos_sin_cache: torch.Tensor, +) -> Tuple[torch.Tensor, torch.Tensor]: + B, L, H, D = xq.shape + + cos = cos_sin_cache[:, : D // 2] + sin = cos_sin_cache[:, D // 2 :] + + def _apply_rope(x: torch.Tensor) -> torch.Tensor: + x_flat = x.view(B * L, H, D) + x1 = x_flat[..., ::2] + x2 = x_flat[..., 1::2] + + cos_ = cos.unsqueeze(1) + sin_ = sin.unsqueeze(1) + + o1 = x1.float() * cos_ - x2.float() * sin_ + o2 = x2.float() * cos_ + x1.float() * sin_ + + out = torch.empty_like(x_flat) + out[..., ::2] = o1 + out[..., 1::2] = o2 + return out.view(B, L, H, D) + + xq_out = _apply_rope(xq) + xk_out = _apply_rope(xk) + return xq_out, xk_out + + +class HunyuanVideo15TransformerInfer(BaseTransformerInfer): + def __init__(self, config): + self.config = config + self.double_blocks_num = config["mm_double_blocks_depth"] + self.heads_num = config["heads_num"] + if self.config["seq_parallel"]: + self.seq_p_group = self.config.get("device_mesh").get_group(mesh_dim="seq_p") + self.seq_p_fp8_comm = self.config["parallel"].get("seq_p_fp8_comm", False) + else: + self.seq_p_group = None + self.seq_p_fp8_comm = False + self.infer_func = self.infer_without_offload + if self.config.get("modulate_type", "triton") == "triton": + self.modulate_func = fuse_scale_shift_kernel + else: + self.modulate_func = modulate + if self.config.get("rope_type", "flashinfer") == "flashinfer": + self.apply_rope_func = apply_hunyuan_rope_with_flashinfer + else: + self.apply_rope_func = apply_hunyuan_rope_with_torch + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + self.scheduler.transformer_infer = self + + @torch.no_grad() + def infer(self, weights, infer_module_out): + self.infer_func(weights, infer_module_out) + x = self.infer_final_layer(weights, infer_module_out) + return x + + @torch.no_grad() + def infer_without_offload(self, weights, infer_module_out): + for i in range(self.double_blocks_num): + infer_module_out.img, infer_module_out.txt = self.infer_double_block(weights.double_blocks[i], infer_module_out) + + @torch.no_grad() + def infer_final_layer(self, weights, infer_module_out): + x = torch.cat((infer_module_out.img, infer_module_out.txt), 1) + img = x[:, : infer_module_out.img.shape[1], ...] + shift, scale = weights.final_layer.adaLN_modulation.apply(infer_module_out.vec).chunk(2, dim=1) + img = self.modulate_func(weights.final_layer.norm_final.apply(img.squeeze(0)), scale=scale, shift=shift).squeeze(0) + img = weights.final_layer.linear.apply(img) + return img.unsqueeze(0) + + @torch.no_grad() + def infer_double_block(self, weights, infer_module_out): + img_q, img_k, img_v, img_branch_out = self._infer_img_branch_before_attn(weights, infer_module_out) + txt_q, txt_k, txt_v, txt_branch_out = self._infer_txt_branch_before_attn(weights, infer_module_out) + img_attn, txt_attn = self._infer_attn(weights, img_q, img_k, img_v, txt_q, txt_k, txt_v) + img = self._infer_img_branch_after_attn(weights, img_attn, infer_module_out.img, img_branch_out) + txt = self._infer_txt_branch_after_attn(weights, txt_attn, infer_module_out.txt, txt_branch_out) + return img, txt + + @torch.no_grad() + def _infer_img_branch_before_attn(self, weights, infer_module_out): + ( + img_mod1_shift, + img_mod1_scale, + img_mod1_gate, + img_mod2_shift, + img_mod2_scale, + img_mod2_gate, + ) = weights.img_branch.img_mod.apply(infer_module_out.vec).chunk(6, dim=-1) + img_modulated = weights.img_branch.img_norm1.apply(infer_module_out.img.squeeze(0)) + img_modulated = self.modulate_func(img_modulated, scale=img_mod1_scale, shift=img_mod1_shift).squeeze(0) + img_q = weights.img_branch.img_attn_q.apply(img_modulated) + img_k = weights.img_branch.img_attn_k.apply(img_modulated) + img_v = weights.img_branch.img_attn_v.apply(img_modulated) + img_q = rearrange(img_q, "L (H D) -> L H D", H=self.heads_num) + img_k = rearrange(img_k, "L (H D) -> L H D", H=self.heads_num) + img_v = rearrange(img_v, "L (H D) -> L H D", H=self.heads_num) + img_q = weights.img_branch.img_attn_q_norm.apply(img_q) + img_k = weights.img_branch.img_attn_k_norm.apply(img_k) + img_q, img_k = self.apply_rope_func(img_q.unsqueeze(0), img_k.unsqueeze(0), cos_sin_cache=self.scheduler.cos_sin) + return ( + img_q, + img_k, + img_v.unsqueeze(0), + HunyuanVideo15ImgBranchOutput( + img_mod1_gate=img_mod1_gate, + img_mod2_shift=img_mod2_shift, + img_mod2_scale=img_mod2_scale, + img_mod2_gate=img_mod2_gate, + ), + ) + + @torch.no_grad() + def _infer_txt_branch_before_attn(self, weights, infer_module_out): + ( + txt_mod1_shift, + txt_mod1_scale, + txt_mod1_gate, + txt_mod2_shift, + txt_mod2_scale, + txt_mod2_gate, + ) = weights.txt_branch.txt_mod.apply(infer_module_out.vec).chunk(6, dim=-1) + txt_modulated = weights.txt_branch.txt_norm1.apply(infer_module_out.txt.squeeze(0)) + txt_modulated = self.modulate_func(txt_modulated, scale=txt_mod1_scale, shift=txt_mod1_shift).squeeze(0) + txt_q = weights.txt_branch.txt_attn_q.apply(txt_modulated) + txt_k = weights.txt_branch.txt_attn_k.apply(txt_modulated) + txt_v = weights.txt_branch.txt_attn_v.apply(txt_modulated) + txt_q = rearrange(txt_q, "L (H D) -> L H D", H=self.heads_num) + txt_k = rearrange(txt_k, "L (H D) -> L H D", H=self.heads_num) + txt_v = rearrange(txt_v, "L (H D) -> L H D", H=self.heads_num) + txt_q = weights.txt_branch.txt_attn_q_norm.apply(txt_q).to(txt_v) + txt_k = weights.txt_branch.txt_attn_k_norm.apply(txt_k).to(txt_v) + return ( + txt_q.unsqueeze(0), + txt_k.unsqueeze(0), + txt_v.unsqueeze(0), + HunyuanVideo15TxtBranchOutput( + txt_mod1_gate=txt_mod1_gate, + txt_mod2_shift=txt_mod2_shift, + txt_mod2_scale=txt_mod2_scale, + txt_mod2_gate=txt_mod2_gate, + ), + ) + + @torch.no_grad() + def _infer_attn(self, weights, img_q, img_k, img_v, txt_q, txt_k, txt_v): + img_seqlen = img_q.shape[1] + query = torch.cat([img_q, txt_q], dim=1) + key = torch.cat([img_k, txt_k], dim=1) + value = torch.cat([img_v, txt_v], dim=1) + seqlen = query.shape[1] + cu_seqlens_qkv = torch.tensor([0, seqlen], dtype=torch.int32, device="cpu").to(AI_DEVICE, non_blocking=True) + + if self.config["seq_parallel"]: + attn_out = weights.self_attention_parallel.apply( + q=query, + k=key, + v=value, + img_qkv_len=img_seqlen, + cu_seqlens_qkv=cu_seqlens_qkv, + attention_module=weights.self_attention, + seq_p_group=self.seq_p_group, + use_fp8_comm=self.seq_p_fp8_comm, + model_cls=self.config["model_cls"], + ) + else: + attn_out = weights.self_attention.apply( + q=query, k=key, v=value, cu_seqlens_q=cu_seqlens_qkv, cu_seqlens_kv=cu_seqlens_qkv, max_seqlen_q=seqlen, max_seqlen_kv=seqlen, model_cls=self.config["model_cls"] + ) + + img_attn, txt_attn = attn_out[:img_seqlen], attn_out[img_seqlen:] + return img_attn, txt_attn + + @torch.no_grad() + def _infer_img_branch_after_attn(self, weights, img_attn, img, img_branch_out): + img = img + apply_gate(weights.img_branch.img_attn_proj.apply(img_attn).unsqueeze(0), gate=img_branch_out.img_mod1_gate) + out = weights.img_branch.img_mlp_fc1.apply( + self.modulate_func(weights.img_branch.img_norm2.apply(img.squeeze(0)), scale=img_branch_out.img_mod2_scale, shift=img_branch_out.img_mod2_shift).squeeze(0) + ) + out = weights.img_branch.img_mlp_fc2.apply(F.gelu(out, approximate="tanh")) + img = img + apply_gate(out.unsqueeze(0), gate=img_branch_out.img_mod2_gate) + return img + + @torch.no_grad() + def _infer_txt_branch_after_attn(self, weights, txt_attn, txt, txt_branch_out): + txt = txt + apply_gate(weights.txt_branch.txt_attn_proj.apply(txt_attn).unsqueeze(0), gate=txt_branch_out.txt_mod1_gate) + out = weights.txt_branch.txt_mlp_fc1.apply( + self.modulate_func(weights.txt_branch.txt_norm2.apply(txt.squeeze(0)), scale=txt_branch_out.txt_mod2_scale, shift=txt_branch_out.txt_mod2_shift).squeeze(0) + ) + out = weights.txt_branch.txt_mlp_fc2.apply(F.gelu(out, approximate="tanh")) + txt = txt + apply_gate(out.unsqueeze(0), gate=txt_branch_out.txt_mod2_gate) + return txt diff --git a/lightx2v/models/networks/hunyuan_video/infer/triton_ops.py b/lightx2v/models/networks/hunyuan_video/infer/triton_ops.py new file mode 100644 index 0000000..8bdd71c --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/infer/triton_ops.py @@ -0,0 +1,902 @@ +# Copied and adapted from: https://github.com/hao-ai-lab/FastVideo & https://github.com/sgl-project/sglang + +# TODO: for temporary usage, expecting a refactor +from typing import Optional + +import torch +import triton # type: ignore +import triton.language as tl # type: ignore +from torch import Tensor + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_N": 64}, num_warps=2), + triton.Config({"BLOCK_N": 128}, num_warps=4), + triton.Config({"BLOCK_N": 256}, num_warps=4), + triton.Config({"BLOCK_N": 512}, num_warps=4), + triton.Config({"BLOCK_N": 1024}, num_warps=8), + ], + key=["inner_dim"], +) +@triton.jit +def _fused_scale_shift_4d_kernel( + output_ptr, + normalized_ptr, + scale_ptr, + shift_ptr, + rows, + inner_dim, + seq_len, + num_frames, + frame_seqlen, + BLOCK_N: tl.constexpr, +): + pid_row = tl.program_id(0) + pid_col = tl.program_id(1) + + col_offsets = pid_col * BLOCK_N + tl.arange(0, BLOCK_N) + mask = col_offsets < inner_dim + + # Pointers for normalized and output + row_base = pid_row * inner_dim + norm_ptrs = normalized_ptr + row_base + col_offsets + out_ptrs = output_ptr + row_base + col_offsets + + # Pointers for scale and shift for 4D + b_idx = pid_row // seq_len + t_idx = pid_row % seq_len + frame_idx_in_batch = t_idx // frame_seqlen + + scale_row_idx = b_idx * num_frames + frame_idx_in_batch + scale_ptrs = scale_ptr + scale_row_idx * inner_dim + col_offsets + shift_ptrs = shift_ptr + scale_row_idx * inner_dim + col_offsets + + normalized = tl.load(norm_ptrs, mask=mask, other=0.0) + scale = tl.load(scale_ptrs, mask=mask, other=0.0) + shift = tl.load(shift_ptrs, mask=mask, other=0.0) + + one = tl.full([BLOCK_N], 1.0, dtype=scale.dtype) + output = normalized * (one + scale) + shift + + tl.store(out_ptrs, output, mask=mask) + + +@triton.jit +def fuse_scale_shift_kernel_blc_opt( + x_ptr, + shift_ptr, + scale_ptr, + y_ptr, + B, + L, + C, + stride_x_b, + stride_x_l, + stride_x_c, + stride_s_b, + stride_s_l, + stride_s_c, + stride_sc_b, + stride_sc_l, + stride_sc_c, + SCALE_IS_SCALAR: tl.constexpr, + SHIFT_IS_SCALAR: tl.constexpr, + BLOCK_L: tl.constexpr, + BLOCK_C: tl.constexpr, +): + pid_l = tl.program_id(0) + pid_c = tl.program_id(1) + pid_b = tl.program_id(2) + + l_offsets = pid_l * BLOCK_L + tl.arange(0, BLOCK_L) + c_offsets = pid_c * BLOCK_C + tl.arange(0, BLOCK_C) + + mask_l = l_offsets < L + mask_c = c_offsets < C + mask = mask_l[:, None] & mask_c[None, :] + + x_off = pid_b * stride_x_b + l_offsets[:, None] * stride_x_l + c_offsets[None, :] * stride_x_c + x = tl.load(x_ptr + x_off, mask=mask, other=0) + + if SHIFT_IS_SCALAR: + shift_val = tl.load(shift_ptr) + shift = tl.full((BLOCK_L, BLOCK_C), shift_val, dtype=shift_val.dtype) + else: + s_off = pid_b * stride_s_b + l_offsets[:, None] * stride_s_l + c_offsets[None, :] * stride_s_c + shift = tl.load(shift_ptr + s_off, mask=mask, other=0) + + if SCALE_IS_SCALAR: + scale_val = tl.load(scale_ptr) + scale = tl.full((BLOCK_L, BLOCK_C), scale_val, dtype=scale_val.dtype) + else: + sc_off = pid_b * stride_sc_b + l_offsets[:, None] * stride_sc_l + c_offsets[None, :] * stride_sc_c + scale = tl.load(scale_ptr + sc_off, mask=mask, other=0) + + y = x * (1 + scale) + shift + tl.store(y_ptr + x_off, y, mask=mask) + + +def fuse_scale_shift_kernel( + x: torch.Tensor, + scale: torch.Tensor, + shift: torch.Tensor, + block_l: int = 128, + block_c: int = 128, +): + assert x.is_cuda and scale.is_cuda + assert x.is_contiguous() + if x.dim() == 2: + x = x.unsqueeze(0) + + B, L, C = x.shape + output = torch.empty_like(x) + + if scale.dim() == 4: + # scale/shift: [B, F, 1, C] + rows = B * L + x_2d = x.view(rows, C) + output_2d = output.view(rows, C) + grid = lambda META: (rows, triton.cdiv(C, META["BLOCK_N"])) # noqa + num_frames = scale.shape[1] + assert L % num_frames == 0, "seq_len must be divisible by num_frames for 4D scale/shift" + frame_seqlen = L // num_frames + + # Compact [B, F, C] without the singleton dim into [B*F, C] + scale_reshaped = scale.squeeze(2).reshape(-1, C).contiguous() + shift_reshaped = shift.squeeze(2).reshape(-1, C).contiguous() + + _fused_scale_shift_4d_kernel[grid]( + output_2d, + x_2d, + scale_reshaped, + shift_reshaped, + rows, + C, + L, + num_frames, + frame_seqlen, + ) + else: + # 2D: [B, C] or [1, C] -> treat as [B, 1, C] and broadcast over L + # 3D: [B, L, C] (or broadcastable variants like [B, 1, C], [1, L, C], [1, 1, C]) + # Also support scalar (0D or 1-element) + if scale.dim() == 0 or (scale.dim() == 1 and scale.numel() == 1): + scale_blc = scale.reshape(1) + elif scale.dim() == 2: + scale_blc = scale[:, None, :] + elif scale.dim() == 3: + scale_blc = scale + else: + raise ValueError("scale must be 0D/1D(1)/2D/3D or 4D") + + if shift.dim() == 0 or (shift.dim() == 1 and shift.numel() == 1): + shift_blc = shift.reshape(1) + elif shift.dim() == 2: + shift_blc = shift[:, None, :] + elif shift.dim() == 3: + shift_blc = shift + else: + # broadcast later via expand if possible + shift_blc = shift + + need_scale_scalar = scale_blc.dim() == 1 and scale_blc.numel() == 1 + need_shift_scalar = shift_blc.dim() == 1 and shift_blc.numel() == 1 + + if not need_scale_scalar: + scale_exp = scale_blc.expand(B, L, C) + s_sb, s_sl, s_sc = scale_exp.stride() + else: + s_sb = s_sl = s_sc = 0 + + if not need_shift_scalar: + shift_exp = shift_blc.expand(B, L, C) + sh_sb, sh_sl, sh_sc = shift_exp.stride() + else: + sh_sb = sh_sl = sh_sc = 0 + + # If both scalars and both zero, copy fast-path + if need_scale_scalar and need_shift_scalar: + if (scale_blc.abs().max() == 0) and (shift_blc.abs().max() == 0): + output.copy_(x) + return output + + grid = (triton.cdiv(L, block_l), triton.cdiv(C, block_c), B) + fuse_scale_shift_kernel_blc_opt[grid]( + x, + shift_blc if need_shift_scalar else shift_exp, + scale_blc if need_scale_scalar else scale_exp, + output, + B, + L, + C, + x.stride(0), + x.stride(1), + x.stride(2), + sh_sb, + sh_sl, + sh_sc, + s_sb, + s_sl, + s_sc, + SCALE_IS_SCALAR=need_scale_scalar, + SHIFT_IS_SCALAR=need_shift_scalar, + BLOCK_L=block_l, + BLOCK_C=block_c, + num_warps=4, + num_stages=2, + ) + return output + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_HS_HALF": 32}, num_warps=2), + triton.Config({"BLOCK_HS_HALF": 64}, num_warps=4), + triton.Config({"BLOCK_HS_HALF": 128}, num_warps=4), + triton.Config({"BLOCK_HS_HALF": 256}, num_warps=8), + ], + key=["head_size", "interleaved"], +) +@triton.jit +def _rotary_embedding_kernel( + output_ptr, + x_ptr, + cos_ptr, + sin_ptr, + num_heads, + head_size, + num_tokens, + stride_x_row, + stride_cos_row, + stride_sin_row, + interleaved: tl.constexpr, + BLOCK_HS_HALF: tl.constexpr, +): + row_idx = tl.program_id(0) + token_idx = (row_idx // num_heads) % num_tokens + + x_row_ptr = x_ptr + row_idx * stride_x_row + cos_row_ptr = cos_ptr + token_idx * stride_cos_row + sin_row_ptr = sin_ptr + token_idx * stride_sin_row + output_row_ptr = output_ptr + row_idx * stride_x_row + + # half size for x1 and x2 + head_size_half = head_size // 2 + + for block_start in range(0, head_size_half, BLOCK_HS_HALF): + offsets_half = block_start + tl.arange(0, BLOCK_HS_HALF) + mask = offsets_half < head_size_half + + cos_vals = tl.load(cos_row_ptr + offsets_half, mask=mask, other=0.0) + sin_vals = tl.load(sin_row_ptr + offsets_half, mask=mask, other=0.0) + + offsets_x1 = 2 * offsets_half + offsets_x2 = 2 * offsets_half + 1 + + x1_vals = tl.load(x_row_ptr + offsets_x1, mask=mask, other=0.0) + x2_vals = tl.load(x_row_ptr + offsets_x2, mask=mask, other=0.0) + + x1_fp32 = x1_vals.to(tl.float32) + x2_fp32 = x2_vals.to(tl.float32) + cos_fp32 = cos_vals.to(tl.float32) + sin_fp32 = sin_vals.to(tl.float32) + o1_vals = tl.fma(-x2_fp32, sin_fp32, x1_fp32 * cos_fp32) + o2_vals = tl.fma(x1_fp32, sin_fp32, x2_fp32 * cos_fp32) + + tl.store(output_row_ptr + offsets_x1, o1_vals.to(x1_vals.dtype), mask=mask) + tl.store(output_row_ptr + offsets_x2, o2_vals.to(x2_vals.dtype), mask=mask) + + +def apply_rotary_embedding(x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor, interleaved: bool = False) -> torch.Tensor: + output = torch.empty_like(x) + + if x.dim() > 3: + bsz, num_tokens, num_heads, head_size = x.shape + else: + num_tokens, num_heads, head_size = x.shape + bsz = 1 + + assert head_size % 2 == 0, "head_size must be divisible by 2" + + x_reshaped = x.view(-1, head_size) + output_reshaped = output.view(-1, head_size) + + # num_tokens per head, 1 token per block + grid = (bsz * num_tokens * num_heads,) + + if interleaved and cos.shape[-1] == head_size: + cos = cos[..., ::2].contiguous() + sin = sin[..., ::2].contiguous() + else: + cos = cos.contiguous() + sin = sin.contiguous() + + _rotary_embedding_kernel[grid]( + output_reshaped, + x_reshaped, + cos, + sin, + num_heads, + head_size, + num_tokens, + x_reshaped.stride(0), + cos.stride(0), + sin.stride(0), + interleaved, + ) + + return output + + +# RMSNorm-fp32 +def maybe_contiguous_lastdim(x): + return x.contiguous() if x is not None and x.stride(-1) != 1 else x + + +def maybe_contiguous(x): + return x.contiguous() if x is not None else None + + +def triton_autotune_configs(): + if not torch.cuda.is_available(): + return [] + # Return configs with a valid warp count for the current device + configs = [] + # Maximum threads per block is architecture-dependent in theory, but in reality all are 1024 + max_threads_per_block = 1024 + # Default to warp size 32 if not defined by device + warp_size = getattr(torch.cuda.get_device_properties(torch.cuda.current_device()), "warp_size", 32) + # Autotune for warp counts which are powers of 2 and do not exceed thread per block limit + return [triton.Config({}, num_warps=warp_count) for warp_count in [1, 2, 4, 8, 16, 32] if warp_count * warp_size <= max_threads_per_block] + # return [triton.Config({}, num_warps=8)] + + +# Copied from flash-attn +@triton.autotune( + configs=triton_autotune_configs(), + key=[ + "N", + "HAS_RESIDUAL", + "STORE_RESIDUAL_OUT", + "IS_RMS_NORM", + "HAS_BIAS", + "HAS_WEIGHT", + "HAS_X1", + "HAS_W1", + "HAS_B1", + ], +) +# torch compile doesn't like triton.heuristics, so we set these manually when calling the kernel +# @triton.heuristics({"HAS_BIAS": lambda args: args["B"] is not None}) +# @triton.heuristics({"HAS_RESIDUAL": lambda args: args["RESIDUAL"] is not None}) +# @triton.heuristics({"HAS_X1": lambda args: args["X1"] is not None}) +# @triton.heuristics({"HAS_W1": lambda args: args["W1"] is not None}) +# @triton.heuristics({"HAS_B1": lambda args: args["B1"] is not None}) +@triton.jit +def _layer_norm_fwd_1pass_kernel( + X, # pointer to the input + Y, # pointer to the output + W, # pointer to the weights + B, # pointer to the biases + RESIDUAL, # pointer to the residual + X1, + W1, + B1, + Y1, + RESIDUAL_OUT, # pointer to the residual + ROWSCALE, + SEEDS, # Dropout seeds for each row + DROPOUT_MASK, + DROPOUT_MASK1, + Mean, # pointer to the mean + Rstd, # pointer to the 1/std + stride_x_row, # how much to increase the pointer when moving by 1 row + stride_y_row, + stride_res_row, + stride_res_out_row, + stride_x1_row, + stride_y1_row, + M, # number of rows in X + N, # number of columns in X + eps, # epsilon to avoid division by zero + dropout_p, # Dropout probability + zero_centered_weight, # If true, add 1.0 to the weight + IS_RMS_NORM: tl.constexpr, + BLOCK_N: tl.constexpr, + HAS_RESIDUAL: tl.constexpr, + STORE_RESIDUAL_OUT: tl.constexpr, + HAS_WEIGHT: tl.constexpr, + HAS_BIAS: tl.constexpr, + HAS_DROPOUT: tl.constexpr, + STORE_DROPOUT_MASK: tl.constexpr, + HAS_ROWSCALE: tl.constexpr, + HAS_X1: tl.constexpr, + HAS_W1: tl.constexpr, + HAS_B1: tl.constexpr, +): + # Map the program id to the row of X and Y it should compute. + row = tl.program_id(0) + X += row * stride_x_row + Y += row * stride_y_row + if HAS_RESIDUAL: + RESIDUAL += row * stride_res_row + if STORE_RESIDUAL_OUT: + RESIDUAL_OUT += row * stride_res_out_row + if HAS_X1: + X1 += row * stride_x1_row + if HAS_W1: + Y1 += row * stride_y1_row + # Compute mean and variance + cols = tl.arange(0, BLOCK_N) + x = tl.load(X + cols, mask=cols < N, other=0.0).to(tl.float32) + if HAS_ROWSCALE: + rowscale = tl.load(ROWSCALE + row).to(tl.float32) + x *= rowscale + if HAS_DROPOUT: + # Compute dropout mask + # 7 rounds is good enough, and reduces register pressure + keep_mask = tl.rand(tl.load(SEEDS + row).to(tl.uint32), cols, n_rounds=7) > dropout_p + x = tl.where(keep_mask, x / (1.0 - dropout_p), 0.0) + if STORE_DROPOUT_MASK: + tl.store(DROPOUT_MASK + row * N + cols, keep_mask, mask=cols < N) + if HAS_X1: + x1 = tl.load(X1 + cols, mask=cols < N, other=0.0).to(tl.float32) + if HAS_ROWSCALE: + rowscale = tl.load(ROWSCALE + M + row).to(tl.float32) + x1 *= rowscale + if HAS_DROPOUT: + # Compute dropout mask + # 7 rounds is good enough, and reduces register pressure + keep_mask = tl.rand(tl.load(SEEDS + M + row).to(tl.uint32), cols, n_rounds=7) > dropout_p + x1 = tl.where(keep_mask, x1 / (1.0 - dropout_p), 0.0) + if STORE_DROPOUT_MASK: + tl.store(DROPOUT_MASK1 + row * N + cols, keep_mask, mask=cols < N) + x += x1 + if HAS_RESIDUAL: + residual = tl.load(RESIDUAL + cols, mask=cols < N, other=0.0).to(tl.float32) + x += residual + if STORE_RESIDUAL_OUT: + tl.store(RESIDUAL_OUT + cols, x, mask=cols < N) + if not IS_RMS_NORM: + mean = tl.sum(x, axis=0) / N + tl.store(Mean + row, mean) + xbar = tl.where(cols < N, x - mean, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + else: + xbar = tl.where(cols < N, x, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + rstd = 1 / tl.sqrt(var + eps) + tl.store(Rstd + row, rstd) + # Normalize and apply linear transformation + mask = cols < N + if HAS_WEIGHT: + w = tl.load(W + cols, mask=mask).to(tl.float32) + if zero_centered_weight: + w += 1.0 + if HAS_BIAS: + b = tl.load(B + cols, mask=mask).to(tl.float32) + x_hat = (x - mean) * rstd if not IS_RMS_NORM else x * rstd + if HAS_WEIGHT: + y = x_hat * w + b if HAS_BIAS else x_hat * w + else: + y = x_hat + b if HAS_BIAS else x_hat + # Write output + tl.store(Y + cols, y, mask=mask) + if HAS_W1: + w1 = tl.load(W1 + cols, mask=mask).to(tl.float32) + if zero_centered_weight: + w1 += 1.0 + if HAS_B1: + b1 = tl.load(B1 + cols, mask=mask).to(tl.float32) + y1 = x_hat * w1 + b1 if HAS_B1 else x_hat * w1 + tl.store(Y1 + cols, y1, mask=mask) + + +def _layer_norm_fwd( + x: Tensor, + weight: Tensor, + bias: Tensor, + eps: float, + residual: Optional[Tensor] = None, + x1: Optional[Tensor] = None, + weight1: Optional[Tensor] = None, + bias1: Optional[Tensor] = None, + dropout_p: float = 0.0, + rowscale: Optional[Tensor] = None, + out_dtype: Optional[torch.dtype] = None, + residual_dtype: Optional[torch.dtype] = None, + zero_centered_weight: bool = False, + is_rms_norm: bool = False, + return_dropout_mask: bool = False, + out: Optional[Tensor] = None, + residual_out: Optional[Tensor] = None, +) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor, Tensor, Tensor): + # Need to wrap to handle the case where residual_out is a alias of x, which makes torch.library + # and torch.compile unhappy. Also allocate memory for out and residual_out if they are None + # so that _layer_norm_fwd_impl doesn't have to return them. + if out is None: + out = torch.empty_like(x, dtype=x.dtype if out_dtype is None else out_dtype) + if residual is not None: + residual_dtype = residual.dtype + if residual_out is None and (residual is not None or (residual_dtype is not None and residual_dtype != x.dtype) or dropout_p > 0.0 or rowscale is not None or x1 is not None): + residual_out = torch.empty_like(x, dtype=residual_dtype if residual_dtype is not None else x.dtype) + else: + residual_out = None + y1, mean, rstd, seeds, dropout_mask, dropout_mask1 = _layer_norm_fwd_impl( + x, + weight, + bias, + eps, + out, + residual=residual, + x1=x1, + weight1=weight1, + bias1=bias1, + dropout_p=dropout_p, + rowscale=rowscale, + zero_centered_weight=zero_centered_weight, + is_rms_norm=is_rms_norm, + return_dropout_mask=return_dropout_mask, + residual_out=residual_out, + ) + # residual_out is None if residual is None and residual_dtype == input_dtype and dropout_p == 0.0 + if residual_out is None: + residual_out = x + return out, y1, mean, rstd, residual_out, seeds, dropout_mask, dropout_mask1 + + +# [2025-04-28] torch.library.triton_op ignores the schema argument, but here we need the schema +# since we're returning a tuple of tensors +def _layer_norm_fwd_impl( + x: Tensor, + weight: Optional[Tensor], + bias: Tensor, + eps: float, + out: Tensor, + residual: Optional[Tensor] = None, + x1: Optional[Tensor] = None, + weight1: Optional[Tensor] = None, + bias1: Optional[Tensor] = None, + dropout_p: float = 0.0, + rowscale: Optional[Tensor] = None, + zero_centered_weight: bool = False, + is_rms_norm: bool = False, + return_dropout_mask: bool = False, + residual_out: Optional[Tensor] = None, +) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor): + M, N = x.shape + assert x.stride(-1) == 1 + if residual is not None: + assert residual.stride(-1) == 1 + assert residual.shape == (M, N) + if weight is not None: + assert weight.shape == (N,) + assert weight.stride(-1) == 1 + if bias is not None: + assert bias.stride(-1) == 1 + assert bias.shape == (N,) + if x1 is not None: + assert x1.shape == x.shape + assert rowscale is None + assert x1.stride(-1) == 1 + if weight1 is not None: + assert weight1.shape == (N,) + assert weight1.stride(-1) == 1 + if bias1 is not None: + assert bias1.shape == (N,) + assert bias1.stride(-1) == 1 + if rowscale is not None: + assert rowscale.is_contiguous() + assert rowscale.shape == (M,) + assert out.shape == x.shape + assert out.stride(-1) == 1 + if residual_out is not None: + assert residual_out.shape == x.shape + assert residual_out.stride(-1) == 1 + if weight1 is not None: + y1 = torch.empty_like(out) + assert y1.stride(-1) == 1 + else: + y1 = None + mean = torch.empty((M,), dtype=torch.float32, device=x.device) if not is_rms_norm else None + rstd = torch.empty((M,), dtype=torch.float32, device=x.device) + if dropout_p > 0.0: + seeds = torch.randint(2**32, (M if x1 is None else 2 * M,), device=x.device, dtype=torch.int64) + else: + seeds = None + if return_dropout_mask and dropout_p > 0.0: + dropout_mask = torch.empty(M, N, device=x.device, dtype=torch.bool) + if x1 is not None: + dropout_mask1 = torch.empty(M, N, device=x.device, dtype=torch.bool) + else: + dropout_mask1 = None + else: + dropout_mask, dropout_mask1 = None, None + # Less than 64KB per feature: enqueue fused kernel + MAX_FUSED_SIZE = 65536 // x.element_size() + BLOCK_N = min(MAX_FUSED_SIZE, triton.next_power_of_2(N)) + if N > BLOCK_N: + raise RuntimeError("This layer norm doesn't support feature dim >= 64KB.") + with torch.cuda.device(x.device.index): + torch.library.wrap_triton(_layer_norm_fwd_1pass_kernel)[(M,)]( + x, + out, + weight if weight is not None else x, # unused when HAS_WEIGHT == False + bias, + residual, + x1, + weight1, + bias1, + y1, + residual_out, + rowscale, + seeds, + dropout_mask, + dropout_mask1, + mean, + rstd, + x.stride(0), + out.stride(0), + residual.stride(0) if residual is not None else 0, + residual_out.stride(0) if residual_out is not None else 0, + x1.stride(0) if x1 is not None else 0, + y1.stride(0) if y1 is not None else 0, + M, + N, + eps, + dropout_p, + # Passing bool make torch inductor very unhappy since it then tries to compare to int_max + int(zero_centered_weight), + is_rms_norm, + BLOCK_N, + residual is not None, + residual_out is not None, + weight is not None, + bias is not None, + dropout_p > 0.0, + dropout_mask is not None, + rowscale is not None, + HAS_X1=x1 is not None, + HAS_W1=weight1 is not None, + HAS_B1=bias1 is not None, + ) + return y1, mean, rstd, seeds, dropout_mask, dropout_mask1 + + +class LayerNormFn: + @staticmethod + def forward( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + is_rms_norm=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, + ): + x_shape_og = x.shape + # reshape input data into 2D tensor + x = maybe_contiguous_lastdim(x.reshape(-1, x.shape[-1])) + if residual is not None: + assert residual.shape == x_shape_og + residual = maybe_contiguous_lastdim(residual.reshape(-1, residual.shape[-1])) + if x1 is not None: + assert x1.shape == x_shape_og + assert rowscale is None, "rowscale is not supported with parallel LayerNorm" + x1 = maybe_contiguous_lastdim(x1.reshape(-1, x1.shape[-1])) + # weight can be None when elementwise_affine=False for LayerNorm + if weight is not None: + weight = weight.contiguous() + bias = maybe_contiguous(bias) + weight1 = maybe_contiguous(weight1) + bias1 = maybe_contiguous(bias1) + if rowscale is not None: + rowscale = rowscale.reshape(-1).contiguous() + residual_dtype = residual.dtype if residual is not None else (torch.float32 if residual_in_fp32 else None) + if out is not None: + out = out.reshape(-1, out.shape[-1]) + if residual_out is not None: + residual_out = residual_out.reshape(-1, residual_out.shape[-1]) + y, y1, mean, rstd, residual_out, seeds, dropout_mask, dropout_mask1 = _layer_norm_fwd( + x, + weight, + bias, + eps, + residual, + x1, + weight1, + bias1, + dropout_p=dropout_p, + rowscale=rowscale, + out_dtype=out_dtype, + residual_dtype=residual_dtype, + zero_centered_weight=zero_centered_weight, + is_rms_norm=is_rms_norm, + return_dropout_mask=return_dropout_mask, + out=out, + residual_out=residual_out, + ) + y = y.reshape(x_shape_og) + return y + + +def layer_norm_fn( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + is_rms_norm=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, +): + return LayerNormFn.forward( + x, + weight, + bias, + residual, + x1, + weight1, + bias1, + eps, + dropout_p, + rowscale, + prenorm, + residual_in_fp32, + zero_centered_weight, + is_rms_norm, + return_dropout_mask, + out_dtype, + out, + residual_out, + ) + + +@triton.jit +def _norm_infer_kernel( + X, + Y, + W, + B, + stride_x_row, + stride_y_row, + M, + N, + eps, + IS_RMS_NORM: tl.constexpr, + HAS_WEIGHT: tl.constexpr, + HAS_BIAS: tl.constexpr, + BLOCK_N: tl.constexpr, +): + row = tl.program_id(0) + X += row * stride_x_row + Y += row * stride_y_row + if HAS_WEIGHT: + W += 0 + if HAS_BIAS: + B += 0 + cols = tl.arange(0, BLOCK_N) + x = tl.load(X + cols, mask=cols < N, other=0.0).to(tl.float32) + if not IS_RMS_NORM: + mean = tl.sum(x, axis=0) / N + xbar = tl.where(cols < N, x - mean, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + else: + xbar = tl.where(cols < N, x, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + rstd = 1 / tl.sqrt(var + eps) + x_hat = (x - mean) * rstd if not IS_RMS_NORM else x * rstd + if HAS_WEIGHT: + w = tl.load(W + cols, mask=cols < N, other=1.0).to(tl.float32) + y = x_hat * w + else: + y = x_hat + if HAS_BIAS: + b = tl.load(B + cols, mask=cols < N, other=0.0).to(tl.float32) + y += b + tl.store(Y + cols, y, mask=cols < N) + + +def norm_infer( + x: Tensor, + weight: Optional[Tensor], + bias: Optional[Tensor], + eps: float, + is_rms_norm: bool = False, + out: Optional[Tensor] = None, +): + M, N = x.shape + assert x.stride(-1) == 1 + if weight is not None: + assert weight.shape == (N,) + assert weight.stride(-1) == 1 + if bias is not None: + assert bias.shape == (N,) + assert bias.stride(-1) == 1 + if out is None: + out = torch.empty_like(x) + MAX_FUSED_SIZE = 65536 // x.element_size() + BLOCK_N = min(MAX_FUSED_SIZE, triton.next_power_of_2(N)) + if N > BLOCK_N: + raise RuntimeError("This layer norm doesn't support feature dim >= 64KB.") + num_warps = min(max(BLOCK_N // 256, 1), 8) + _norm_infer_kernel[(M,)]( + x, + out, + weight if weight is not None else x, # dummy when HAS_WEIGHT=False + bias if bias is not None else x, # dummy when HAS_BIAS=False + x.stride(0), + out.stride(0), + M, + N, + eps, + IS_RMS_NORM=is_rms_norm, + HAS_WEIGHT=weight is not None, + HAS_BIAS=bias is not None, + BLOCK_N=BLOCK_N, + num_warps=num_warps, + ) + return out + + +def rms_norm_fn( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, +): + return LayerNormFn.forward( + x, + weight, + bias, + residual, + x1, + weight1, + bias1, + eps, + dropout_p, + rowscale, + prenorm, + residual_in_fp32, + zero_centered_weight, + True, + return_dropout_mask, + out_dtype, + out, + residual_out, + ) diff --git a/lightx2v/models/networks/hunyuan_video/model.py b/lightx2v/models/networks/hunyuan_video/model.py new file mode 100644 index 0000000..69a2515 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/model.py @@ -0,0 +1,279 @@ +import gc +import glob +import os + +import torch +import torch.distributed as dist +import torch.nn.functional as F +from loguru import logger +from safetensors import safe_open + +from lightx2v.models.networks.hunyuan_video.infer.feature_caching.transformer_infer import HunyuanTransformerInferTeaCaching, HunyuanVideo15TransformerInferMagCaching +from lightx2v.models.networks.hunyuan_video.infer.offload.transformer_infer import HunyuanVideo15OffloadTransformerInfer +from lightx2v.models.networks.hunyuan_video.infer.post_infer import HunyuanVideo15PostInfer +from lightx2v.models.networks.hunyuan_video.infer.pre_infer import HunyuanVideo15PreInfer +from lightx2v.models.networks.hunyuan_video.infer.transformer_infer import HunyuanVideo15TransformerInfer +from lightx2v.models.networks.hunyuan_video.weights.post_weights import HunyuanVideo15PostWeights +from lightx2v.models.networks.hunyuan_video.weights.pre_weights import HunyuanVideo15PreWeights +from lightx2v.models.networks.hunyuan_video.weights.transformer_weights import HunyuanVideo15TransformerWeights +from lightx2v.utils.custom_compiler import CompiledMethodsMixin +from lightx2v.utils.envs import * + + +class HunyuanVideo15Model(CompiledMethodsMixin): + def __init__(self, model_path, config, device): + super().__init__() + self.model_path = model_path + self.config = config + self.device = device + if self.config["seq_parallel"]: + self.seq_p_group = self.config.get("device_mesh").get_group(mesh_dim="seq_p") + else: + self.seq_p_group = None + self.cpu_offload = self.config.get("cpu_offload", False) + self.offload_granularity = self.config.get("offload_granularity", "block") + self.remove_keys = [] + self.remove_keys.extend(["byt5_in", "vision_in"]) + self.dit_quantized = self.config.get("dit_quantized", False) + if self.dit_quantized: + assert self.config.get("dit_quant_scheme", "Default") in [ + "Default-Force-FP32", + "fp8-vllm", + "int8-vllm", + "fp8-q8f", + "int8-q8f", + "fp8-b128-deepgemm", + "fp8-sgl", + "int8-sgl", + "int8-torchao", + "nvfp4", + "mxfp4", + "mxfp6-mxfp8", + "mxfp8", + ] + self._init_infer_class() + self._init_weights() + self._init_infer() + + def _init_infer_class(self): + self.pre_infer_class = HunyuanVideo15PreInfer + self.post_infer_class = HunyuanVideo15PostInfer + if self.config["feature_caching"] == "NoCaching": + self.transformer_infer_class = HunyuanVideo15TransformerInfer if not self.cpu_offload else HunyuanVideo15OffloadTransformerInfer + elif self.config["feature_caching"] == "Mag": + self.transformer_infer_class = HunyuanVideo15TransformerInferMagCaching + elif self.config["feature_caching"] == "Tea": + self.transformer_infer_class = HunyuanTransformerInferTeaCaching + else: + raise NotImplementedError + + def _init_weights(self): + unified_dtype = GET_DTYPE() == GET_SENSITIVE_DTYPE() + sensitive_layer = {} + if not self.dit_quantized: + weight_dict = self._load_ckpt(unified_dtype, sensitive_layer) + else: + weight_dict = self._load_quant_ckpt(unified_dtype, sensitive_layer) + + self.original_weight_dict = weight_dict + self.pre_weight = HunyuanVideo15PreWeights(self.config) + self.transformer_weights = HunyuanVideo15TransformerWeights(self.config) + self.post_weight = HunyuanVideo15PostWeights(self.config) + self._apply_weights() + + def _apply_weights(self, weight_dict=None): + if weight_dict is not None: + self.original_weight_dict = weight_dict + del weight_dict + gc.collect() + # Load weights into containers + self.pre_weight.load(self.original_weight_dict) + self.transformer_weights.load(self.original_weight_dict) + + del self.original_weight_dict + torch.cuda.empty_cache() + gc.collect() + + def _init_infer(self): + self.pre_infer = self.pre_infer_class(self.config) + self.transformer_infer = self.transformer_infer_class(self.config) + self.post_infer = self.post_infer_class(self.config) + if hasattr(self.transformer_infer, "offload_manager"): + self.transformer_infer.offload_manager.init_cuda_buffer(self.transformer_weights.offload_block_cuda_buffers, self.transformer_weights.offload_phase_cuda_buffers) + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + self.pre_infer.set_scheduler(scheduler) + self.transformer_infer.set_scheduler(scheduler) + self.post_infer.set_scheduler(scheduler) + + def _load_quant_ckpt(self, unified_dtype, sensitive_layer): + remove_keys = self.remove_keys if hasattr(self, "remove_keys") else [] + + if self.config.get("dit_quantized_ckpt", None): + safetensors_path = self.config["dit_quantized_ckpt"] + else: + safetensors_path = self.model_path + + if os.path.isdir(safetensors_path): + safetensors_files = glob.glob(os.path.join(safetensors_path, "*.safetensors")) + else: + safetensors_files = [safetensors_path] + safetensors_path = os.path.dirname(safetensors_path) + + weight_dict = {} + for safetensor_path in safetensors_files: + if self.config.get("adapter_model_path", None) is not None: + if self.config["adapter_model_path"] == safetensor_path: + continue + with safe_open(safetensor_path, framework="pt") as f: + logger.info(f"Loading weights from {safetensor_path}") + for k in f.keys(): + if any(remove_key in k for remove_key in remove_keys): + continue + if f.get_tensor(k).dtype in [ + torch.float16, + torch.bfloat16, + torch.float, + ]: + if unified_dtype or all(s not in k for s in sensitive_layer): + weight_dict[k] = f.get_tensor(k).to(GET_DTYPE()).to(self.device) + else: + weight_dict[k] = f.get_tensor(k).to(GET_SENSITIVE_DTYPE()).to(self.device) + else: + weight_dict[k] = f.get_tensor(k).to(self.device) + + if self.config.get("dit_quant_scheme", "Default") == "nvfp4": + calib_path = os.path.join(safetensors_path, "calib.pt") + logger.info(f"[CALIB] Loaded calibration data from: {calib_path}") + calib_data = torch.load(calib_path, map_location="cpu") + for k, v in calib_data["absmax"].items(): + weight_dict[k.replace(".weight", ".input_absmax")] = v.to(self.device) + + return weight_dict + + def _load_ckpt(self, unified_dtype, sensitive_layer): + if self.config.get("dit_original_ckpt", None): + safetensors_path = self.config["dit_original_ckpt"] + else: + safetensors_path = self.config["transformer_model_path"] + + if os.path.isdir(safetensors_path): + safetensors_files = glob.glob(os.path.join(safetensors_path, "*.safetensors")) + else: + safetensors_files = [safetensors_path] + + weight_dict = {} + for file_path in safetensors_files: + if self.config.get("adapter_model_path", None) is not None: + if self.config["adapter_model_path"] == file_path: + continue + logger.info(f"Loading weights from {file_path}") + file_weights = self._load_safetensor_to_dict(file_path, unified_dtype, sensitive_layer) + weight_dict.update(file_weights) + + return weight_dict + + def _load_safetensor_to_dict(self, file_path, unified_dtype, sensitive_layer): + remove_keys = self.remove_keys if hasattr(self, "remove_keys") else [] + + if self.device.type != "cpu" and dist.is_initialized(): + device = dist.get_rank() + else: + device = str(self.device) + + with safe_open(file_path, framework="pt", device=device) as f: + return { + key: (f.get_tensor(key).to(GET_DTYPE()) if unified_dtype or all(s not in key for s in sensitive_layer) else f.get_tensor(key).to(GET_SENSITIVE_DTYPE())) + for key in f.keys() + if not any(remove_key in key for remove_key in remove_keys) + } + + def to_cpu(self): + self.pre_weight.to_cpu() + self.transformer_weights.to_cpu() + + def to_cuda(self): + self.pre_weight.to_cuda() + self.transformer_weights.to_cuda() + + @torch.no_grad() + def infer(self, inputs): + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == 0 and "wan2.2_moe" not in self.config["model_cls"]: + self.to_cuda() + elif self.offload_granularity != "model": + self.pre_weight.to_cuda() + self.transformer_weights.non_block_weights_to_cuda() + + if self.config["enable_cfg"]: + if self.config["cfg_parallel"]: + # ==================== CFG Parallel Processing ==================== + cfg_p_group = self.config["device_mesh"].get_group(mesh_dim="cfg_p") + assert dist.get_world_size(cfg_p_group) == 2, "cfg_p_world_size must be equal to 2" + cfg_p_rank = dist.get_rank(cfg_p_group) + + if cfg_p_rank == 0: + noise_pred = self._infer_cond_uncond(inputs, infer_condition=True).contiguous() + else: + noise_pred = self._infer_cond_uncond(inputs, infer_condition=False).contiguous() + + noise_pred_list = [torch.zeros_like(noise_pred) for _ in range(2)] + dist.all_gather(noise_pred_list, noise_pred, group=cfg_p_group) + noise_pred_cond = noise_pred_list[0] # cfg_p_rank == 0 + noise_pred_uncond = noise_pred_list[1] # cfg_p_rank == 1 + else: + # ==================== CFG Processing ==================== + noise_pred_cond = self._infer_cond_uncond(inputs, infer_condition=True) + noise_pred_uncond = self._infer_cond_uncond(inputs, infer_condition=False) + + self.scheduler.noise_pred = noise_pred_uncond + self.scheduler.sample_guide_scale * (noise_pred_cond - noise_pred_uncond) + else: + # ==================== No CFG ==================== + self.scheduler.noise_pred = self._infer_cond_uncond(inputs, infer_condition=True) + + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == self.scheduler.infer_steps - 1 and "wan2.2_moe" not in self.config["model_cls"]: + self.to_cpu() + elif self.offload_granularity != "model": + self.pre_weight.to_cpu() + self.transformer_weights.non_block_weights_to_cpu() + + @torch.no_grad() + def _infer_cond_uncond(self, inputs, infer_condition=True): + self.scheduler.infer_condition = infer_condition + + pre_infer_out = self.pre_infer.infer(self.pre_weight, inputs) + + if self.config["seq_parallel"]: + pre_infer_out = self._seq_parallel_pre_process(pre_infer_out) + + x = self.transformer_infer.infer(self.transformer_weights, pre_infer_out) + + if self.config["seq_parallel"]: + x = self._seq_parallel_post_process(x) + + noise_pred = self.post_infer.infer(x, pre_infer_out)[0] + + return noise_pred + + @torch.no_grad() + def _seq_parallel_pre_process(self, pre_infer_out): + seqlen = pre_infer_out.img.shape[1] + world_size = dist.get_world_size(self.seq_p_group) + cur_rank = dist.get_rank(self.seq_p_group) + + padding_size = (world_size - (seqlen % world_size)) % world_size + if padding_size > 0: + pre_infer_out.img = F.pad(pre_infer_out.img, (0, 0, 0, padding_size)) + + pre_infer_out.img = torch.chunk(pre_infer_out.img, world_size, dim=1)[cur_rank] + return pre_infer_out + + @torch.no_grad() + def _seq_parallel_post_process(self, x): + world_size = dist.get_world_size(self.seq_p_group) + gathered_x = [torch.empty_like(x) for _ in range(world_size)] + dist.all_gather(gathered_x, x, group=self.seq_p_group) + combined_output = torch.cat(gathered_x, dim=1) + return combined_output diff --git a/lightx2v/models/networks/hunyuan_video/weights/post_weights.py b/lightx2v/models/networks/hunyuan_video/weights/post_weights.py new file mode 100644 index 0000000..5c76226 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/weights/post_weights.py @@ -0,0 +1,7 @@ +from lightx2v.common.modules.weight_module import WeightModule + + +class HunyuanVideo15PostWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.config = config diff --git a/lightx2v/models/networks/hunyuan_video/weights/pre_weights.py b/lightx2v/models/networks/hunyuan_video/weights/pre_weights.py new file mode 100644 index 0000000..f5600d3 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/weights/pre_weights.py @@ -0,0 +1,147 @@ +from lightx2v.common.modules.weight_module import WeightModule, WeightModuleList +from lightx2v.utils.registry_factory import ( + CONV3D_WEIGHT_REGISTER, + EMBEDDING_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, +) + + +class HunyuanVideo15PreWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.config = config + self.mm_type = config.get("dit_quant_scheme", "Default") + self.patch_size = config["patch_size"] # (1, 1, 1) + + self.add_module( + "img_in", + CONV3D_WEIGHT_REGISTER["Default"]( + "img_in.proj.weight", + "img_in.proj.bias", + stride=self.patch_size, + ), + ) + self.add_module( + "time_in_0", + MM_WEIGHT_REGISTER["Default"]( + "time_in.mlp.0.weight", + "time_in.mlp.0.bias", + ), + ) + self.add_module( + "time_in_2", + MM_WEIGHT_REGISTER["Default"]( + "time_in.mlp.2.weight", + "time_in.mlp.2.bias", + ), + ) + if self.config["is_sr_running"]: + self.add_module( + "time_r_in_0", + MM_WEIGHT_REGISTER["Default"]( + "time_r_in.mlp.0.weight", + "time_r_in.mlp.0.bias", + ), + ) + self.add_module( + "time_r_in_2", + MM_WEIGHT_REGISTER["Default"]( + "time_r_in.mlp.2.weight", + "time_r_in.mlp.2.bias", + ), + ) + self.add_module( + "txt_in_t_embedder_0", + MM_WEIGHT_REGISTER["Default"]( + "txt_in.t_embedder.mlp.0.weight", + "txt_in.t_embedder.mlp.0.bias", + ), + ) + self.add_module( + "txt_in_t_embedder_2", + MM_WEIGHT_REGISTER["Default"]( + "txt_in.t_embedder.mlp.2.weight", + "txt_in.t_embedder.mlp.2.bias", + ), + ) + + self.add_module( + "txt_in_c_embedder_0", + MM_WEIGHT_REGISTER["Default"]( + "txt_in.c_embedder.linear_1.weight", + "txt_in.c_embedder.linear_1.bias", + ), + ) + self.add_module( + "txt_in_c_embedder_2", + MM_WEIGHT_REGISTER["Default"]( + "txt_in.c_embedder.linear_2.weight", + "txt_in.c_embedder.linear_2.bias", + ), + ) + + self.add_module( + "txt_in_input_embedder", + MM_WEIGHT_REGISTER["Default"]( + "txt_in.input_embedder.weight", + "txt_in.input_embedder.bias", + ), + ) + + self.add_module( + "individual_token_refiner", + WeightModuleList( + [ + IndividualTokenRefinerBlock( + i, + self.mm_type, + self.config, + "txt_in.individual_token_refiner.blocks", + ) + for i in range(2) # 2 blocks + ] + ), + ) + + self.add_module( + "cond_type_embedding", + EMBEDDING_WEIGHT_REGISTER["Default"]( + "cond_type_embedding.weight", + ), + ) + + +class IndividualTokenRefinerBlock(WeightModule): + def __init__(self, block_idx, mm_type, config, block_prefix): + super().__init__() + self.config = config + self.mm_type = mm_type + self.add_module( + "norm1", + LN_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.norm1.weight", f"{block_prefix}.{block_idx}.norm1.bias"), + ) + self.add_module( + "self_attn_qkv", + MM_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.self_attn_qkv.weight", f"{block_prefix}.{block_idx}.self_attn_qkv.bias"), + ) + self.add_module( + "self_attn_proj", + MM_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.self_attn_proj.weight", f"{block_prefix}.{block_idx}.self_attn_proj.bias"), + ) + self.add_module( + "norm2", + LN_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.norm2.weight", f"{block_prefix}.{block_idx}.norm2.bias"), + ) + self.add_module( + "mlp_fc1", + MM_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.mlp.fc1.weight", f"{block_prefix}.{block_idx}.mlp.fc1.bias"), + ) + self.add_module( + "mlp_fc2", + MM_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.mlp.fc2.weight", f"{block_prefix}.{block_idx}.mlp.fc2.bias"), + ) + self.add_module( + "adaLN_modulation", + MM_WEIGHT_REGISTER["Default"](f"{block_prefix}.{block_idx}.adaLN_modulation.1.weight", f"{block_prefix}.{block_idx}.adaLN_modulation.1.bias"), + ) diff --git a/lightx2v/models/networks/hunyuan_video/weights/transformer_weights.py b/lightx2v/models/networks/hunyuan_video/weights/transformer_weights.py new file mode 100644 index 0000000..7eba136 --- /dev/null +++ b/lightx2v/models/networks/hunyuan_video/weights/transformer_weights.py @@ -0,0 +1,390 @@ +from lightx2v.common.modules.weight_module import WeightModule, WeightModuleList +from lightx2v.utils.registry_factory import ( + ATTN_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, + RMS_WEIGHT_REGISTER, +) + + +class HunyuanVideo15TransformerWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.config = config + self.task = config["task"] + self.mm_type = config.get("dit_quant_scheme", "Default") + self.ln_type = config.get("ln_type", "Triton") + self.rms_type = config.get("rms_type", "sgl-kernel") + self.double_blocks_num = config["mm_double_blocks_depth"] + self.register_offload_buffers(config) + self.add_module("double_blocks", WeightModuleList([MMDoubleStreamBlock(i, self.task, self.config, block_prefix="double_blocks") for i in range(self.double_blocks_num)])) + self.add_module("final_layer", FinalLayerWeights(self.config)) + + def register_offload_buffers(self, config): + if config["cpu_offload"]: + if config.get("offload_granularity", "block") == "block": + self.offload_blocks_num = 2 + self.offload_block_cuda_buffers = WeightModuleList( + [ + MMDoubleStreamBlock( + i, + self.task, + self.config, + "double_blocks", + True, + ) + for i in range(self.offload_blocks_num) + ] + ) + self.add_module("offload_block_cuda_buffers", self.offload_block_cuda_buffers) + self.offload_phase_cuda_buffers = None + + def non_block_weights_to_cuda(self): + self.final_layer.to_cuda() + + def non_block_weights_to_cpu(self): + self.final_layer.to_cpu() + + +class MMDoubleStreamBlock(WeightModule): + def __init__(self, block_index, task, config, block_prefix="double_blocks", create_cuda_buffer=False, create_cpu_buffer=False): + super().__init__() + self.block_index = block_index + self.task = task + self.config = config + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + + self.lazy_load = False + self.lazy_load_file = None + + self.add_module( + "img_branch", + MMDoubleStreamBlockImgBranch(block_index, task, config, block_prefix, create_cuda_buffer, create_cpu_buffer), + ) + self.add_module( + "txt_branch", + MMDoubleStreamBlockTxtBranch(block_index, task, config, block_prefix, create_cuda_buffer, create_cpu_buffer), + ) + attention_weights_cls = ATTN_WEIGHT_REGISTER[self.config["attn_type"]] + self.add_module("self_attention", attention_weights_cls()) + if self.config["seq_parallel"]: + self.add_module( + "self_attention_parallel", + ATTN_WEIGHT_REGISTER[self.config["parallel"].get("seq_p_attn_type", "ulysses")](), + ) + + +class MMDoubleStreamBlockImgBranch(WeightModule): + def __init__(self, block_index, task, config, block_prefix="double_blocks", create_cuda_buffer=False, create_cpu_buffer=False): + super().__init__() + self.block_index = block_index + self.task = task + self.config = config + + self.lazy_load = False + self.lazy_load_file = None + + self.mm_type = config.get("dit_quant_scheme", "Default") + self.ln_type = config.get("ln_type", "Triton") + self.rms_type = config.get("rms_type", "sgl-kernel") + + self.add_module( + "img_mod", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_mod.linear.weight", + f"{block_prefix}.{self.block_index}.img_mod.linear.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_norm1", + LN_WEIGHT_REGISTER[self.ln_type]( + None, + None, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_attn_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_attn_q.weight", + f"{block_prefix}.{self.block_index}.img_attn_q.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_attn_k", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_attn_k.weight", + f"{block_prefix}.{self.block_index}.img_attn_k.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_attn_v", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_attn_v.weight", + f"{block_prefix}.{self.block_index}.img_attn_v.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_attn_q_norm", + RMS_WEIGHT_REGISTER[self.rms_type]( + f"{block_prefix}.{self.block_index}.img_attn_q_norm.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_attn_k_norm", + RMS_WEIGHT_REGISTER[self.rms_type]( + f"{block_prefix}.{self.block_index}.img_attn_k_norm.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_attn_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_attn_proj.weight", + f"{block_prefix}.{self.block_index}.img_attn_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_norm2", + LN_WEIGHT_REGISTER[self.ln_type]( + None, + None, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_mlp_fc1", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_mlp.fc1.weight", + f"{block_prefix}.{self.block_index}.img_mlp.fc1.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_mlp_fc2", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_mlp.fc2.weight", + f"{block_prefix}.{self.block_index}.img_mlp.fc2.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + +class MMDoubleStreamBlockTxtBranch(WeightModule): + def __init__(self, block_index, task, config, block_prefix="double_blocks", create_cuda_buffer=False, create_cpu_buffer=False): + super().__init__() + self.block_index = block_index + self.task = task + self.config = config + + self.lazy_load = False + self.lazy_load_file = None + + self.mm_type = config.get("dit_quant_scheme", "Default") + self.ln_type = config.get("ln_type", "Triton") + self.rms_type = config.get("rms_type", "sgl-kernel") + + self.add_module( + "txt_mod", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_mod.linear.weight", + f"{block_prefix}.{self.block_index}.txt_mod.linear.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_norm1", + LN_WEIGHT_REGISTER[self.ln_type]( + None, + None, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_attn_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_attn_q.weight", + f"{block_prefix}.{self.block_index}.txt_attn_q.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_attn_k", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_attn_k.weight", + f"{block_prefix}.{self.block_index}.txt_attn_k.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_attn_v", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_attn_v.weight", + f"{block_prefix}.{self.block_index}.txt_attn_v.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_attn_q_norm", + RMS_WEIGHT_REGISTER[self.rms_type]( + f"{block_prefix}.{self.block_index}.txt_attn_q_norm.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_attn_k_norm", + RMS_WEIGHT_REGISTER[self.rms_type]( + f"{block_prefix}.{self.block_index}.txt_attn_k_norm.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_attn_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_attn_proj.weight", + f"{block_prefix}.{self.block_index}.txt_attn_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_norm2", + LN_WEIGHT_REGISTER[self.ln_type]( + None, + None, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_mlp_fc1", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_mlp.fc1.weight", + f"{block_prefix}.{self.block_index}.txt_mlp.fc1.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_mlp_fc2", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_mlp.fc2.weight", + f"{block_prefix}.{self.block_index}.txt_mlp.fc2.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + +class FinalLayerWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.config = config + self.lazy_load = False + self.lazy_load_file = None + + self.mm_type = config.get("dit_quant_scheme", "Default") + self.ln_type = config.get("ln_type", "Triton") + + self.add_module( + "adaLN_modulation", + MM_WEIGHT_REGISTER["Default"]( + "final_layer.adaLN_modulation.1.weight", + "final_layer.adaLN_modulation.1.bias", + False, + False, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "linear", + MM_WEIGHT_REGISTER["Default"]( + "final_layer.linear.weight", + "final_layer.linear.bias", + False, + False, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "norm_final", + LN_WEIGHT_REGISTER[self.ln_type]( + None, + None, + False, + False, + self.lazy_load, + self.lazy_load_file, + ), + ) diff --git a/lightx2v/models/networks/qwen_image/infer/offload/__init__.py b/lightx2v/models/networks/qwen_image/infer/offload/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/qwen_image/infer/offload/transformer_infer.py b/lightx2v/models/networks/qwen_image/infer/offload/transformer_infer.py new file mode 100644 index 0000000..1c0b40b --- /dev/null +++ b/lightx2v/models/networks/qwen_image/infer/offload/transformer_infer.py @@ -0,0 +1,50 @@ +import torch + +from lightx2v.common.offload.manager import WeightAsyncStreamManager +from lightx2v.models.networks.qwen_image.infer.transformer_infer import QwenImageTransformerInfer +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +class QwenImageOffloadTransformerInfer(QwenImageTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.phases_num = 3 + self.num_blocks = config["num_layers"] + if self.config.get("cpu_offload", False): + if "offload_ratio" in self.config: + self.offload_ratio = self.config["offload_ratio"] + else: + self.offload_ratio = 1 + offload_granularity = self.config.get("offload_granularity", "block") + if offload_granularity == "block": + if not self.config.get("lazy_load", False): + self.infer_func = self.infer_with_blocks_offload + else: + assert NotImplementedError + else: + assert NotImplementedError + + if offload_granularity != "model": + self.offload_manager = WeightAsyncStreamManager(offload_granularity=offload_granularity) + else: + assert NotImplementedError + + def infer_with_blocks_offload(self, block_weights, hidden_states, encoder_hidden_states, temb, image_rotary_emb): + for block_idx in range(self.num_blocks): + self.block_idx = block_idx + if block_idx == 0: + self.offload_manager.init_first_buffer(block_weights.blocks) + + if block_idx < self.num_blocks - 1: + self.offload_manager.prefetch_weights(block_idx + 1, block_weights.blocks) + + with torch_device_module.stream(self.offload_manager.compute_stream): + encoder_hidden_states, hidden_states = self.infer_block( + block_weight=self.offload_manager.cuda_buffers[0], hidden_states=hidden_states, encoder_hidden_states=encoder_hidden_states, temb=temb, image_rotary_emb=image_rotary_emb + ) + + self.offload_manager.swap_blocks() + + return encoder_hidden_states, hidden_states diff --git a/lightx2v/models/networks/qwen_image/infer/post_infer.py b/lightx2v/models/networks/qwen_image/infer/post_infer.py new file mode 100644 index 0000000..6af7e76 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/infer/post_infer.py @@ -0,0 +1,19 @@ +import torch +import torch.nn.functional as F + + +class QwenImagePostInfer: + def __init__(self, config): + self.config = config + self.cpu_offload = config.get("cpu_offload", False) + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + def infer(self, weights, hidden_states, temb): + temb1 = F.silu(temb) + temb1 = weights.norm_out_linear.apply(temb1) + scale, shift = torch.chunk(temb1, 2, dim=1) + hidden_states = weights.norm_out.apply(hidden_states) * (1 + scale) + shift + output = weights.proj_out_linear.apply(hidden_states.squeeze(0)) + return output.unsqueeze(0) diff --git a/lightx2v/models/networks/qwen_image/infer/pre_infer.py b/lightx2v/models/networks/qwen_image/infer/pre_infer.py new file mode 100644 index 0000000..c9835c2 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/infer/pre_infer.py @@ -0,0 +1,188 @@ +import functools +import math +from typing import List + +import torch +from torch import nn + +from lightx2v.utils.envs import * + + +def get_timestep_embedding( + timesteps: torch.Tensor, + embedding_dim: int = 256, + flip_sin_to_cos: bool = True, + downscale_freq_shift: float = 0, + scale: float = 1000, + max_period: int = 10000, +) -> torch.Tensor: + """ + This matches the implementation in Denoising Diffusion Probabilistic Models: Create sinusoidal timestep embeddings. + + Args + timesteps (torch.Tensor): + a 1-D Tensor of N indices, one per batch element. These may be fractional. + embedding_dim (int): + the dimension of the output. + flip_sin_to_cos (bool): + Whether the embedding order should be `cos, sin` (if True) or `sin, cos` (if False) + downscale_freq_shift (float): + Controls the delta between frequencies between dimensions + scale (float): + Scaling factor applied to the embeddings. + max_period (int): + Controls the maximum frequency of the embeddings + Returns + torch.Tensor: an [N x dim] Tensor of positional embeddings. + """ + assert len(timesteps.shape) == 1, "Timesteps should be a 1d-array" + + half_dim = embedding_dim // 2 + exponent = -math.log(max_period) * torch.arange(start=0, end=half_dim, dtype=torch.float32, device=timesteps.device) + exponent = exponent / (half_dim - downscale_freq_shift) + + emb = torch.exp(exponent) + emb = timesteps[:, None].float() * emb[None, :] + + # scale embeddings + emb = scale * emb + + # concat sine and cosine embeddings + emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=-1) + + # flip sine and cosine embeddings + if flip_sin_to_cos: + emb = torch.cat([emb[:, half_dim:], emb[:, :half_dim]], dim=-1) + + # zero pad + if embedding_dim % 2 == 1: + emb = torch.nn.functional.pad(emb, (0, 1, 0, 0)) + return emb + + +class QwenEmbedRope(nn.Module): + def __init__(self, theta: int, axes_dim: List[int], scale_rope=False): + super().__init__() + self.theta = theta + self.axes_dim = axes_dim + pos_index = torch.arange(4096) + neg_index = torch.arange(4096).flip(0) * -1 - 1 + self.pos_freqs = torch.cat( + [ + self.rope_params(pos_index, self.axes_dim[0], self.theta), + self.rope_params(pos_index, self.axes_dim[1], self.theta), + self.rope_params(pos_index, self.axes_dim[2], self.theta), + ], + dim=1, + ) + self.neg_freqs = torch.cat( + [ + self.rope_params(neg_index, self.axes_dim[0], self.theta), + self.rope_params(neg_index, self.axes_dim[1], self.theta), + self.rope_params(neg_index, self.axes_dim[2], self.theta), + ], + dim=1, + ) + self.rope_cache = {} + + # DO NOT USING REGISTER BUFFER HERE, IT WILL CAUSE COMPLEX NUMBERS LOSE ITS IMAGINARY PART + self.scale_rope = scale_rope + + def rope_params(self, index, dim, theta=10000): + """ + Args: + index: [0, 1, 2, 3] 1D Tensor representing the position index of the token + """ + assert dim % 2 == 0 + freqs = torch.outer(index, 1.0 / torch.pow(theta, torch.arange(0, dim, 2).to(torch.float32).div(dim))) + freqs = torch.polar(torch.ones_like(freqs), freqs) + return freqs + + def forward(self, video_fhw, txt_seq_lens, device): + """ + Args: video_fhw: [frame, height, width] a list of 3 integers representing the shape of the video Args: + txt_length: [bs] a list of 1 integers representing the length of the text + """ + if self.pos_freqs.device != device: + self.pos_freqs = self.pos_freqs.to(device) + self.neg_freqs = self.neg_freqs.to(device) + + if isinstance(video_fhw, list): + video_fhw = video_fhw[0] + if not isinstance(video_fhw, list): + video_fhw = [video_fhw] + + vid_freqs = [] + max_vid_index = 0 + for idx, fhw in enumerate(video_fhw): + frame, height, width = fhw + rope_key = f"{idx}_{height}_{width}" + + if not torch.compiler.is_compiling(): + if rope_key not in self.rope_cache: + self.rope_cache[rope_key] = self._compute_video_freqs(frame, height, width, idx) + video_freq = self.rope_cache[rope_key] + else: + video_freq = self._compute_video_freqs(frame, height, width, idx) + video_freq = video_freq.to(device) + vid_freqs.append(video_freq) + + if self.scale_rope: + max_vid_index = max(height // 2, width // 2, max_vid_index) + else: + max_vid_index = max(height, width, max_vid_index) + + max_len = txt_seq_lens + txt_freqs = self.pos_freqs[max_vid_index : max_vid_index + max_len, ...] + vid_freqs = torch.cat(vid_freqs, dim=0) + + return vid_freqs, txt_freqs + + @functools.lru_cache(maxsize=None) + def _compute_video_freqs(self, frame, height, width, idx=0): + seq_lens = frame * height * width + freqs_pos = self.pos_freqs.split([x // 2 for x in self.axes_dim], dim=1) + freqs_neg = self.neg_freqs.split([x // 2 for x in self.axes_dim], dim=1) + + freqs_frame = freqs_pos[0][idx : idx + frame].view(frame, 1, 1, -1).expand(frame, height, width, -1) + if self.scale_rope: + freqs_height = torch.cat([freqs_neg[1][-(height - height // 2) :], freqs_pos[1][: height // 2]], dim=0) + freqs_height = freqs_height.view(1, height, 1, -1).expand(frame, height, width, -1) + freqs_width = torch.cat([freqs_neg[2][-(width - width // 2) :], freqs_pos[2][: width // 2]], dim=0) + freqs_width = freqs_width.view(1, 1, width, -1).expand(frame, height, width, -1) + else: + freqs_height = freqs_pos[1][:height].view(1, height, 1, -1).expand(frame, height, width, -1) + freqs_width = freqs_pos[2][:width].view(1, 1, width, -1).expand(frame, height, width, -1) + + freqs = torch.cat([freqs_frame, freqs_height, freqs_width], dim=-1).reshape(seq_lens, -1) + return freqs.clone().contiguous() + + +class QwenImagePreInfer: + def __init__(self, config): + self.config = config + self.attention_kwargs = {} + self.cpu_offload = config.get("cpu_offload", False) + self.pos_embed = QwenEmbedRope(theta=10000, axes_dim=list(config["axes_dims_rope"]), scale_rope=True) + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + def infer(self, weights, hidden_states, timestep, guidance, encoder_hidden_states_mask, encoder_hidden_states, img_shapes, txt_seq_lens, attention_kwargs): + hidden_states = hidden_states.squeeze(0) + hidden_states = weights.img_in.apply(hidden_states) + + timestep = timestep.to(hidden_states.dtype) + encoder_hidden_states = encoder_hidden_states.squeeze(0) + + encoder_hidden_states = weights.txt_norm.apply(encoder_hidden_states) + encoder_hidden_states = weights.txt_in.apply(encoder_hidden_states) + timesteps_proj = get_timestep_embedding(timestep).to(torch.bfloat16) + + embed = weights.time_text_embed_timestep_embedder_linear_1.apply(timesteps_proj) + embed0 = torch.nn.functional.silu(embed) + embed0 = weights.time_text_embed_timestep_embedder_linear_2.apply(embed0) + + image_rotary_emb = self.pos_embed(img_shapes, txt_seq_lens[0], device=hidden_states.device) + + return hidden_states, encoder_hidden_states, encoder_hidden_states_mask, (embed0, image_rotary_emb) diff --git a/lightx2v/models/networks/qwen_image/infer/transformer_infer.py b/lightx2v/models/networks/qwen_image/infer/transformer_infer.py new file mode 100644 index 0000000..ca98393 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/infer/transformer_infer.py @@ -0,0 +1,224 @@ +from typing import Tuple, Union + +import torch +import torch.nn.functional as F + +from lightx2v.common.transformer_infer.transformer_infer import BaseTransformerInfer + + +def apply_rotary_emb_qwen( + x: torch.Tensor, + freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor]], + use_real: bool = True, + use_real_unbind_dim: int = -1, +) -> Tuple[torch.Tensor, torch.Tensor]: + """ + Apply rotary embeddings to input tensors using the given frequency tensor. This function applies rotary embeddings + to the given query or key 'x' tensors using the provided frequency tensor 'freqs_cis'. The input tensors are + reshaped as complex numbers, and the frequency tensor is reshaped for broadcasting compatibility. The resulting + tensors contain rotary embeddings and are returned as real tensors. + + Args: + x (`torch.Tensor`): + Query or key tensor to apply rotary embeddings. [B, S, H, D] xk (torch.Tensor): Key tensor to apply + freqs_cis (`Tuple[torch.Tensor]`): Precomputed frequency tensor for complex exponentials. ([S, D], [S, D],) + + Returns: + Tuple[torch.Tensor, torch.Tensor]: Tuple of modified query tensor and key tensor with rotary embeddings. + """ + if use_real: + cos, sin = freqs_cis # [S, D] + cos = cos[None, None] + sin = sin[None, None] + cos, sin = cos.to(x.device), sin.to(x.device) + + if use_real_unbind_dim == -1: + # Used for flux, cogvideox, hunyuan-dit + x_real, x_imag = x.reshape(*x.shape[:-1], -1, 2).unbind(-1) # [B, S, H, D//2] + x_rotated = torch.stack([-x_imag, x_real], dim=-1).flatten(3) + elif use_real_unbind_dim == -2: + # Used for Stable Audio, OmniGen, CogView4 and Cosmos + x_real, x_imag = x.reshape(*x.shape[:-1], 2, -1).unbind(-2) # [B, S, H, D//2] + x_rotated = torch.cat([-x_imag, x_real], dim=-1) + else: + raise ValueError(f"`use_real_unbind_dim={use_real_unbind_dim}` but should be -1 or -2.") + + out = (x.float() * cos + x_rotated.float() * sin).to(x.dtype) + + return out + else: + x_rotated = torch.view_as_complex(x.float().reshape(*x.shape[:-1], -1, 2)) + freqs_cis = freqs_cis.unsqueeze(1) + x_out = torch.view_as_real(x_rotated * freqs_cis).flatten(3) + + return x_out.type_as(x) + + +def calculate_q_k_len(q, k_lens): + q_lens = torch.tensor([q.size(0)], dtype=torch.int32, device=q.device) + cu_seqlens_q = torch.cat([q_lens.new_zeros([1]), q_lens]).cumsum(0, dtype=torch.int32) + cu_seqlens_k = torch.cat([k_lens.new_zeros([1]), k_lens]).cumsum(0, dtype=torch.int32) + return cu_seqlens_q, cu_seqlens_k + + +def apply_attn(block_weight, hidden_states, encoder_hidden_states, image_rotary_emb, attn_type): + seq_txt = encoder_hidden_states.shape[1] + + # Compute QKV for image stream (sample projections) + img_query = block_weight.attn.to_q.apply(hidden_states[0]) + img_key = block_weight.attn.to_k.apply(hidden_states[0]) + img_value = block_weight.attn.to_v.apply(hidden_states[0]) + + # Compute QKV for text stream (context projections) + txt_query = block_weight.attn.add_q_proj.apply(encoder_hidden_states[0]) + txt_key = block_weight.attn.add_k_proj.apply(encoder_hidden_states[0]) + txt_value = block_weight.attn.add_v_proj.apply(encoder_hidden_states[0]) + + # Reshape for multi-head attention + img_query = img_query.unflatten(-1, (block_weight.attn.heads, -1)) + img_key = img_key.unflatten(-1, (block_weight.attn.heads, -1)) + img_value = img_value.unflatten(-1, (block_weight.attn.heads, -1)) + + txt_query = txt_query.unflatten(-1, (block_weight.attn.heads, -1)) + txt_key = txt_key.unflatten(-1, (block_weight.attn.heads, -1)) + txt_value = txt_value.unflatten(-1, (block_weight.attn.heads, -1)) + + # Apply QK normalization + if block_weight.attn.norm_q is not None: + img_query = block_weight.attn.norm_q.apply(img_query) + if block_weight.attn.norm_k is not None: + img_key = block_weight.attn.norm_k.apply(img_key) + if block_weight.attn.norm_added_q is not None: + txt_query = block_weight.attn.norm_added_q.apply(txt_query) + if block_weight.attn.norm_added_k is not None: + txt_key = block_weight.attn.norm_added_k.apply(txt_key) + + # Apply RoPE + if image_rotary_emb is not None: + img_freqs, txt_freqs1 = image_rotary_emb + img_query = apply_rotary_emb_qwen(img_query.unsqueeze(0), img_freqs, use_real=False) + img_key = apply_rotary_emb_qwen(img_key.unsqueeze(0), img_freqs, use_real=False) + txt_query = apply_rotary_emb_qwen(txt_query.unsqueeze(0), txt_freqs1, use_real=False) + txt_key = apply_rotary_emb_qwen(txt_key.unsqueeze(0), txt_freqs1, use_real=False) + + # Concatenate for joint attention + # Order: [text, image] + joint_query = torch.cat([txt_query, img_query], dim=1) + joint_key = torch.cat([txt_key, img_key], dim=1) + joint_value = torch.cat([txt_value.unsqueeze(0), img_value.unsqueeze(0)], dim=1) + + # Compute joint attention + if attn_type == "torch_sdpa": + joint_hidden_states = block_weight.attn.calculate.apply(q=joint_query, k=joint_key, v=joint_value) + + else: + joint_query = joint_query.squeeze(0) + joint_key = joint_key.squeeze(0) + joint_value = joint_value.squeeze(0) + + k_lens = torch.tensor([joint_key.size(0)], dtype=torch.int32, device=joint_key.device) + cu_seqlens_q, cu_seqlens_k = calculate_q_k_len(joint_query, k_lens=k_lens) + + joint_hidden_states = block_weight.attn.calculate.apply( + q=joint_query, k=joint_key, v=joint_value, cu_seqlens_q=cu_seqlens_q, cu_seqlens_kv=cu_seqlens_k, max_seqlen_q=joint_query.size(0), max_seqlen_kv=joint_key.size(0), model_cls="qwen_image" + ) + + # Split attention outputs back + txt_attn_output = joint_hidden_states[:seq_txt, :] # Text part + img_attn_output = joint_hidden_states[seq_txt:, :] # Image part + + # Apply output projections + img_attn_output = block_weight.attn.to_out.apply(img_attn_output) + txt_attn_output = block_weight.attn.to_add_out.apply(txt_attn_output) + + return img_attn_output, txt_attn_output + + +class QwenImageTransformerInfer(BaseTransformerInfer): + def __init__(self, config): + self.config = config + self.infer_conditional = True + self.clean_cuda_cache = self.config.get("clean_cuda_cache", False) + self.infer_func = self.infer_calculating + self.attn_type = config.get("attn_type", "flash_attn3") + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + def _modulate(self, x, mod_params): + """Apply modulation to input tensor""" + shift, scale, gate = mod_params.chunk(3, dim=-1) + return x * (1 + scale.unsqueeze(1)) + shift.unsqueeze(1), gate.unsqueeze(1) + + def infer_block(self, block_weight, hidden_states, encoder_hidden_states, temb, image_rotary_emb): + # Get modulation parameters for both streams + img_mod_params = block_weight.img_mod.apply(F.silu(temb)) + txt_mod_params = block_weight.txt_mod.apply(F.silu(temb)) + + # Split modulation parameters for norm1 and norm2 + img_mod1, img_mod2 = img_mod_params.chunk(2, dim=-1) + txt_mod1, txt_mod2 = txt_mod_params.chunk(2, dim=-1) + + # Process image stream - norm1 + modulation + img_normed = block_weight.img_norm1.apply(hidden_states) + img_modulated, img_gate1 = self._modulate(img_normed, img_mod1) + + # Process text stream - norm1 + modulation + txt_normed = block_weight.txt_norm1.apply(encoder_hidden_states) + txt_modulated, txt_gate1 = self._modulate(txt_normed, txt_mod1) + + # Use QwenAttnProcessor2_0 for joint attention computation + # This directly implements the DoubleStreamLayerMegatron logic: + # 1. Computes QKV for both streams + # 2. Applies QK normalization and RoPE + # 3. Concatenates and runs joint attention + # 4. Splits results back to separate streams + attn_output = apply_attn( + block_weight=block_weight, + hidden_states=img_modulated, # Image stream (will be processed as "sample") + encoder_hidden_states=txt_modulated, # Text stream (will be processed as "context") + image_rotary_emb=image_rotary_emb, + attn_type=self.attn_type, + ) + + # QwenAttnProcessor2_0 returns (img_output, txt_output) when encoder_hidden_states is provided + img_attn_output, txt_attn_output = attn_output + + # Apply attention gates and add residual (like in Megatron) + hidden_states = hidden_states + img_gate1 * img_attn_output + encoder_hidden_states = encoder_hidden_states + txt_gate1 * txt_attn_output + + # Process image stream - norm2 + MLP + img_normed2 = block_weight.img_norm2.apply(hidden_states) + img_modulated2, img_gate2 = self._modulate(img_normed2, img_mod2) + img_mlp_output = F.gelu(block_weight.img_mlp.mlp_0.apply(img_modulated2.squeeze(0)), approximate="tanh") + img_mlp_output = block_weight.img_mlp.mlp_2.apply(img_mlp_output) + hidden_states = hidden_states + img_gate2 * img_mlp_output + + # Process text stream - norm2 + MLP + txt_normed2 = block_weight.txt_norm2.apply(encoder_hidden_states) + txt_modulated2, txt_gate2 = self._modulate(txt_normed2, txt_mod2) + txt_mlp_output = F.gelu(block_weight.txt_mlp.mlp_0.apply(txt_modulated2.squeeze(0)), approximate="tanh") + txt_mlp_output = block_weight.txt_mlp.mlp_2.apply(txt_mlp_output) + encoder_hidden_states = encoder_hidden_states + txt_gate2 * txt_mlp_output + + # Clip to prevent overflow for fp16 + if encoder_hidden_states.dtype == torch.float16: + encoder_hidden_states = encoder_hidden_states.clip(-65504, 65504) + if hidden_states.dtype == torch.float16: + hidden_states = hidden_states.clip(-65504, 65504) + + return encoder_hidden_states, hidden_states + + def infer_calculating(self, block_weights, hidden_states, encoder_hidden_states, temb, image_rotary_emb): + for idx in range(len(block_weights.blocks)): + block_weight = block_weights.blocks[idx] + encoder_hidden_states, hidden_states = self.infer_block( + block_weight=block_weight, hidden_states=hidden_states, encoder_hidden_states=encoder_hidden_states, temb=temb, image_rotary_emb=image_rotary_emb + ) + return encoder_hidden_states, hidden_states + + def infer(self, hidden_states, encoder_hidden_states, pre_infer_out, block_weights): + temb, image_rotary_emb = pre_infer_out + encoder_hidden_states, hidden_states = self.infer_func(block_weights, hidden_states, encoder_hidden_states, temb, image_rotary_emb) + return encoder_hidden_states, hidden_states diff --git a/lightx2v/models/networks/qwen_image/lora_adapter.py b/lightx2v/models/networks/qwen_image/lora_adapter.py new file mode 100644 index 0000000..6897a10 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/lora_adapter.py @@ -0,0 +1,90 @@ +import os + +import torch +from loguru import logger +from safetensors import safe_open + +from lightx2v.utils.envs import * +from lightx2v_platform.base.global_var import AI_DEVICE + + +def fuse_lora_weights(original_weight, lora_down, lora_up, alpha): + rank = lora_down.shape[0] + lora_delta = torch.mm(lora_up, lora_down) # W_up × W_down + scaling = alpha / rank + lora_delta = lora_delta * scaling + fused_weight = original_weight + lora_delta + return fused_weight + + +class QwenImageLoraWrapper: + def __init__(self, qwenimage_model): + self.model = qwenimage_model + self.lora_metadata = {} + self.device = torch.device(AI_DEVICE) if not self.model.config.get("cpu_offload", False) else torch.device("cpu") + + def load_lora(self, lora_path, lora_name=None): + if lora_name is None: + lora_name = os.path.basename(lora_path).split(".")[0] + + if lora_name in self.lora_metadata: + logger.info(f"LoRA {lora_name} already loaded, skipping...") + return lora_name + + self.lora_metadata[lora_name] = {"path": lora_path} + logger.info(f"Registered LoRA metadata for: {lora_name} from {lora_path}") + + return lora_name + + def _load_lora_file(self, file_path): + with safe_open(file_path, framework="pt") as f: + tensor_dict = {key: f.get_tensor(key).to(GET_DTYPE()).to(self.device) for key in f.keys()} + return tensor_dict + + def apply_lora(self, lora_name, alpha=1.0): + if lora_name not in self.lora_metadata: + logger.info(f"LoRA {lora_name} not found. Please load it first.") + + if not hasattr(self.model, "original_weight_dict"): + logger.error("Model does not have 'original_weight_dict'. Cannot apply LoRA.") + return False + + lora_weights = self._load_lora_file(self.lora_metadata[lora_name]["path"]) + + weight_dict = self.model.original_weight_dict + + weight_dict = self._apply_lora_weights(weight_dict, lora_weights, alpha) + + self.model._apply_weights(weight_dict) + + logger.info(f"Applied LoRA: {lora_name} with alpha={alpha}") + del lora_weights + return True + + @torch.no_grad() + def _apply_lora_weights(self, weight_dict, lora_weights, alpha): + lora_prefixs = [ + "attn.add_k_proj", + "attn.add_q_proj", + "attn.add_v_proj", + "attn.to_add_out", + "attn.to_k", + "attn.to_q", + "attn.to_v", + "attn.to_add_out", + "attn.to_out.0", + "img_mlp.net.0.proj", + "txt_mlp.net.0.proj", + "txt_mlp.net.2", + ] + + for prefix in lora_prefixs: + for idx in range(self.model.config["num_layers"]): + prefix_name = f"transformer_blocks.{idx}.{prefix}" + lora_up = lora_weights[f"{prefix_name}.lora_up.weight"] + lora_down = lora_weights[f"{prefix_name}.lora_down.weight"] + lora_alpha = lora_weights[f"{prefix_name}.alpha"] + origin = weight_dict[f"{prefix_name}.weight"] + weight_dict[f"{prefix_name}.weight"] = fuse_lora_weights(origin, lora_down, lora_up, lora_alpha) + + return weight_dict diff --git a/lightx2v/models/networks/qwen_image/model.py b/lightx2v/models/networks/qwen_image/model.py new file mode 100644 index 0000000..ec46875 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/model.py @@ -0,0 +1,383 @@ +import gc +import glob +import json +import os + +import torch +from safetensors import safe_open + +from lightx2v.utils.envs import * +from lightx2v.utils.utils import * + +from .infer.offload.transformer_infer import QwenImageOffloadTransformerInfer +from .infer.post_infer import QwenImagePostInfer +from .infer.pre_infer import QwenImagePreInfer +from .infer.transformer_infer import QwenImageTransformerInfer +from .weights.post_weights import QwenImagePostWeights +from .weights.pre_weights import QwenImagePreWeights +from .weights.transformer_weights import QwenImageTransformerWeights + + +class QwenImageTransformerModel: + pre_weight_class = QwenImagePreWeights + transformer_weight_class = QwenImageTransformerWeights + post_weight_class = QwenImagePostWeights + + def __init__(self, config): + self.config = config + self.model_path = os.path.join(config["model_path"], "transformer") + self.cpu_offload = config.get("cpu_offload", False) + self.offload_granularity = self.config.get("offload_granularity", "block") + self.device = torch.device("cpu") if self.cpu_offload else torch.device(AI_DEVICE) + + with open(os.path.join(config["model_path"], "transformer", "config.json"), "r") as f: + transformer_config = json.load(f) + self.in_channels = transformer_config["in_channels"] + self.attention_kwargs = {} + + self.dit_quantized = self.config.get("dit_quantized", False) + + self._init_infer_class() + self._init_weights() + self._init_infer() + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + self.pre_infer.set_scheduler(scheduler) + self.transformer_infer.set_scheduler(scheduler) + self.post_infer.set_scheduler(scheduler) + + def _init_infer_class(self): + if self.config["feature_caching"] == "NoCaching": + self.transformer_infer_class = QwenImageTransformerInfer if not self.cpu_offload else QwenImageOffloadTransformerInfer + else: + assert NotImplementedError + self.pre_infer_class = QwenImagePreInfer + self.post_infer_class = QwenImagePostInfer + + def _init_weights(self, weight_dict=None): + unified_dtype = GET_DTYPE() == GET_SENSITIVE_DTYPE() + # Some layers run with float32 to achieve high accuracy + sensitive_layer = {} + + if weight_dict is None: + is_weight_loader = self._should_load_weights() + if is_weight_loader: + if not self.dit_quantized: + # Load original weights + weight_dict = self._load_ckpt(unified_dtype, sensitive_layer) + else: + # Load quantized weights + if not self.config.get("lazy_load", False): + weight_dict = self._load_quant_ckpt(unified_dtype, sensitive_layer) + else: + weight_dict = self._load_quant_split_ckpt(unified_dtype, sensitive_layer) + + if self.config.get("device_mesh") is not None and self.config.get("load_from_rank0", False): + weight_dict = self._load_weights_from_rank0(weight_dict, is_weight_loader) + + self.original_weight_dict = weight_dict + else: + self.original_weight_dict = weight_dict + + # Initialize weight containers + self.pre_weight = self.pre_weight_class(self.config) + self.transformer_weights = self.transformer_weight_class(self.config) + self.post_weight = self.post_weight_class(self.config) + if not self._should_init_empty_model(): + self._apply_weights() + + def _apply_weights(self, weight_dict=None): + if weight_dict is not None: + self.original_weight_dict = weight_dict + del weight_dict + gc.collect() + # Load weights into containers + self.pre_weight.load(self.original_weight_dict) + self.transformer_weights.load(self.original_weight_dict) + self.post_weight.load(self.original_weight_dict) + + del self.original_weight_dict + torch.cuda.empty_cache() + gc.collect() + + def _should_load_weights(self): + """Determine if current rank should load weights from disk.""" + if self.config.get("device_mesh") is None: + # Single GPU mode + return True + elif dist.is_initialized(): + if self.config.get("load_from_rank0", False): + # Multi-GPU mode, only rank 0 loads + if dist.get_rank() == 0: + logger.info(f"Loading weights from {self.model_path}") + return True + else: + return True + return False + + def _should_init_empty_model(self): + if self.config.get("lora_configs") and self.config["lora_configs"]: + return True + return False + + def _load_safetensor_to_dict(self, file_path, unified_dtype, sensitive_layer): + remove_keys = self.remove_keys if hasattr(self, "remove_keys") else [] + + if self.device.type != "cpu" and dist.is_initialized(): + device = dist.get_rank() + else: + device = str(self.device) + + with safe_open(file_path, framework="pt", device=device) as f: + return { + key: (f.get_tensor(key).to(GET_DTYPE()) if unified_dtype or all(s not in key for s in sensitive_layer) else f.get_tensor(key).to(GET_SENSITIVE_DTYPE())) + for key in f.keys() + if not any(remove_key in key for remove_key in remove_keys) + } + + def _load_ckpt(self, unified_dtype, sensitive_layer): + if self.config.get("dit_original_ckpt", None): + safetensors_path = self.config["dit_original_ckpt"] + else: + safetensors_path = self.model_path + + if os.path.isdir(safetensors_path): + safetensors_files = glob.glob(os.path.join(safetensors_path, "*.safetensors")) + else: + safetensors_files = [safetensors_path] + + weight_dict = {} + for file_path in safetensors_files: + logger.info(f"Loading weights from {file_path}") + file_weights = self._load_safetensor_to_dict(file_path, unified_dtype, sensitive_layer) + weight_dict.update(file_weights) + + return weight_dict + + def _load_quant_ckpt(self, unified_dtype, sensitive_layer): + remove_keys = self.remove_keys if hasattr(self, "remove_keys") else [] + + if self.config.get("dit_quantized_ckpt", None): + safetensors_path = self.config["dit_quantized_ckpt"] + else: + safetensors_path = self.model_path + + if os.path.isdir(safetensors_path): + safetensors_files = glob.glob(os.path.join(safetensors_path, "*.safetensors")) + else: + safetensors_files = [safetensors_path] + safetensors_path = os.path.dirname(safetensors_path) + + weight_dict = {} + for safetensor_path in safetensors_files: + with safe_open(safetensor_path, framework="pt") as f: + logger.info(f"Loading weights from {safetensor_path}") + for k in f.keys(): + if any(remove_key in k for remove_key in remove_keys): + continue + if f.get_tensor(k).dtype in [ + torch.float16, + torch.bfloat16, + torch.float, + ]: + if unified_dtype or all(s not in k for s in sensitive_layer): + weight_dict[k] = f.get_tensor(k).to(GET_DTYPE()).to(self.device) + else: + weight_dict[k] = f.get_tensor(k).to(GET_SENSITIVE_DTYPE()).to(self.device) + else: + weight_dict[k] = f.get_tensor(k).to(self.device) + + if self.config.get("dit_quant_scheme", "Default") == "nvfp4": + calib_path = os.path.join(safetensors_path, "calib.pt") + logger.info(f"[CALIB] Loaded calibration data from: {calib_path}") + calib_data = torch.load(calib_path, map_location="cpu") + for k, v in calib_data["absmax"].items(): + weight_dict[k.replace(".weight", ".input_absmax")] = v.to(self.device) + + return weight_dict + + def _load_quant_split_ckpt(self, unified_dtype, sensitive_layer): # Need rewrite + lazy_load_model_path = self.dit_quantized_ckpt + logger.info(f"Loading splited quant model from {lazy_load_model_path}") + pre_post_weight_dict = {} + + safetensor_path = os.path.join(lazy_load_model_path, "non_block.safetensors") + with safe_open(safetensor_path, framework="pt", device="cpu") as f: + for k in f.keys(): + if f.get_tensor(k).dtype in [ + torch.float16, + torch.bfloat16, + torch.float, + ]: + if unified_dtype or all(s not in k for s in sensitive_layer): + pre_post_weight_dict[k] = f.get_tensor(k).to(GET_DTYPE()).to(self.device) + else: + pre_post_weight_dict[k] = f.get_tensor(k).to(GET_SENSITIVE_DTYPE()).to(self.device) + else: + pre_post_weight_dict[k] = f.get_tensor(k).to(self.device) + + return pre_post_weight_dict + + def _load_weights_from_rank0(self, weight_dict, is_weight_loader): + logger.info("Loading distributed weights") + global_src_rank = 0 + target_device = "cpu" if self.cpu_offload else "cuda" + + if is_weight_loader: + meta_dict = {} + for key, tensor in weight_dict.items(): + meta_dict[key] = {"shape": tensor.shape, "dtype": tensor.dtype} + + obj_list = [meta_dict] + dist.broadcast_object_list(obj_list, src=global_src_rank) + synced_meta_dict = obj_list[0] + else: + obj_list = [None] + dist.broadcast_object_list(obj_list, src=global_src_rank) + synced_meta_dict = obj_list[0] + + distributed_weight_dict = {} + for key, meta in synced_meta_dict.items(): + distributed_weight_dict[key] = torch.empty(meta["shape"], dtype=meta["dtype"], device=target_device) + + if target_device == "cuda": + dist.barrier(device_ids=[torch.cuda.current_device()]) + + for key in sorted(synced_meta_dict.keys()): + if is_weight_loader: + distributed_weight_dict[key].copy_(weight_dict[key], non_blocking=True) + + if target_device == "cpu": + if is_weight_loader: + gpu_tensor = distributed_weight_dict[key].cuda() + dist.broadcast(gpu_tensor, src=global_src_rank) + distributed_weight_dict[key].copy_(gpu_tensor.cpu(), non_blocking=True) + del gpu_tensor + torch.cuda.empty_cache() + else: + gpu_tensor = torch.empty_like(distributed_weight_dict[key], device="cuda") + dist.broadcast(gpu_tensor, src=global_src_rank) + distributed_weight_dict[key].copy_(gpu_tensor.cpu(), non_blocking=True) + del gpu_tensor + torch.cuda.empty_cache() + + if distributed_weight_dict[key].is_pinned(): + distributed_weight_dict[key].copy_(distributed_weight_dict[key], non_blocking=True) + else: + dist.broadcast(distributed_weight_dict[key], src=global_src_rank) + + if target_device == "cuda": + torch.cuda.synchronize() + else: + for tensor in distributed_weight_dict.values(): + if tensor.is_pinned(): + tensor.copy_(tensor, non_blocking=False) + + logger.info(f"Weights distributed across {dist.get_world_size()} devices on {target_device}") + + return distributed_weight_dict + + def _init_infer(self): + self.transformer_infer = self.transformer_infer_class(self.config) + self.pre_infer = self.pre_infer_class(self.config) + self.post_infer = self.post_infer_class(self.config) + if hasattr(self.transformer_infer, "offload_manager"): + self.transformer_infer.offload_manager.init_cuda_buffer(self.transformer_weights.offload_block_cuda_buffers, self.transformer_weights.offload_phase_cuda_buffers) + + def to_cpu(self): + self.pre_weight.to_cpu() + self.transformer_weights.to_cpu() + self.post_weight.to_cpu() + + def to_cuda(self): + self.pre_weight.to_cuda() + self.transformer_weights.to_cuda() + self.post_weight.to_cuda() + + @torch.no_grad() + def infer(self, inputs): + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == 0: + self.to_cuda() + elif self.offload_granularity != "model": + self.pre_weight.to_cuda() + self.post_weight.to_cuda() + + t = self.scheduler.timesteps[self.scheduler.step_index] + latents = self.scheduler.latents + if self.config["task"] == "i2i": + image_latents = torch.cat([item["image_latents"] for item in inputs["image_encoder_output"]], dim=1) + latents_input = torch.cat([latents, image_latents], dim=1) + else: + latents_input = latents + + timestep = t.expand(latents.shape[0]).to(latents.dtype) + img_shapes = inputs["img_shapes"] + + prompt_embeds = inputs["text_encoder_output"]["prompt_embeds"] + prompt_embeds_mask = inputs["text_encoder_output"]["prompt_embeds_mask"] + + txt_seq_lens = prompt_embeds_mask.sum(dim=1).tolist() if prompt_embeds_mask is not None else None + + hidden_states, encoder_hidden_states, _, pre_infer_out = self.pre_infer.infer( + weights=self.pre_weight, + hidden_states=latents_input, + timestep=timestep / 1000, + guidance=self.scheduler.guidance, + encoder_hidden_states_mask=prompt_embeds_mask, + encoder_hidden_states=prompt_embeds, + img_shapes=img_shapes, + txt_seq_lens=txt_seq_lens, + attention_kwargs=self.attention_kwargs, + ) + + encoder_hidden_states, hidden_states = self.transformer_infer.infer( + block_weights=self.transformer_weights, + hidden_states=hidden_states.unsqueeze(0), + encoder_hidden_states=encoder_hidden_states.unsqueeze(0), + pre_infer_out=pre_infer_out, + ) + + noise_pred = self.post_infer.infer(self.post_weight, hidden_states, pre_infer_out[0]) + + if self.config["do_true_cfg"]: + neg_prompt_embeds = inputs["text_encoder_output"]["negative_prompt_embeds"] + neg_prompt_embeds_mask = inputs["text_encoder_output"]["negative_prompt_embeds_mask"] + + negative_txt_seq_lens = neg_prompt_embeds_mask.sum(dim=1).tolist() if neg_prompt_embeds_mask is not None else None + + neg_hidden_states, neg_encoder_hidden_states, _, neg_pre_infer_out = self.pre_infer.infer( + weights=self.pre_weight, + hidden_states=latents_input, + timestep=timestep / 1000, + guidance=self.scheduler.guidance, + encoder_hidden_states_mask=neg_prompt_embeds_mask, + encoder_hidden_states=neg_prompt_embeds, + img_shapes=img_shapes, + txt_seq_lens=negative_txt_seq_lens, + attention_kwargs=self.attention_kwargs, + ) + + neg_encoder_hidden_states, neg_hidden_states = self.transformer_infer.infer( + block_weights=self.transformer_weights, + hidden_states=neg_hidden_states.unsqueeze(0), + encoder_hidden_states=neg_encoder_hidden_states.unsqueeze(0), + pre_infer_out=neg_pre_infer_out, + ) + + neg_noise_pred = self.post_infer.infer(self.post_weight, neg_hidden_states, neg_pre_infer_out[0]) + + if self.config["task"] == "i2i": + noise_pred = noise_pred[:, : latents.size(1)] + + if self.config["do_true_cfg"]: + neg_noise_pred = neg_noise_pred[:, : latents.size(1)] + comb_pred = neg_noise_pred + self.config["true_cfg_scale"] * (noise_pred - neg_noise_pred) + + cond_norm = torch.norm(noise_pred, dim=-1, keepdim=True) + noise_norm = torch.norm(comb_pred, dim=-1, keepdim=True) + noise_pred = comb_pred * (cond_norm / noise_norm) + + noise_pred = noise_pred[:, : latents.size(1)] + self.scheduler.noise_pred = noise_pred diff --git a/lightx2v/models/networks/qwen_image/weights/post_weights.py b/lightx2v/models/networks/qwen_image/weights/post_weights.py new file mode 100644 index 0000000..a14add9 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/weights/post_weights.py @@ -0,0 +1,49 @@ +from lightx2v.common.modules.weight_module import WeightModule +from lightx2v.utils.registry_factory import ( + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, +) + + +class QwenImagePostWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.task = config["task"] + self.config = config + self.lazy_load = self.config.get("lazy_load", False) + if self.lazy_load: + assert NotImplementedError + self.lazy_load_file = False + + # norm_out + self.add_module( + "norm_out_linear", + MM_WEIGHT_REGISTER["Default"]( + "norm_out.linear.weight", + "norm_out.linear.bias", + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module("norm_out", LN_WEIGHT_REGISTER["Default"](eps=1e-6)) + + # proj_out + self.add_module( + "proj_out_linear", + MM_WEIGHT_REGISTER["Default"]( + "proj_out.weight", + "proj_out.bias", + self.lazy_load, + self.lazy_load_file, + ), + ) + + def to_cpu(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cpu"): + module.to_cpu(non_blocking=non_blocking) + + def to_cuda(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cuda"): + module.to_cuda(non_blocking=non_blocking) diff --git a/lightx2v/models/networks/qwen_image/weights/pre_weights.py b/lightx2v/models/networks/qwen_image/weights/pre_weights.py new file mode 100644 index 0000000..80fe1b7 --- /dev/null +++ b/lightx2v/models/networks/qwen_image/weights/pre_weights.py @@ -0,0 +1,40 @@ +from lightx2v.common.modules.weight_module import WeightModule +from lightx2v.utils.registry_factory import ( + MM_WEIGHT_REGISTER, + RMS_WEIGHT_REGISTER, +) + + +class QwenImagePreWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.config = config + # img_in + self.add_module( + "img_in", + MM_WEIGHT_REGISTER["Default"]("img_in.weight", "img_in.bias"), + ) + # txt_in + self.add_module( + "txt_in", + MM_WEIGHT_REGISTER["Default"]("txt_in.weight", "txt_in.bias"), + ) + # txt_norm + self.add_module("txt_norm", RMS_WEIGHT_REGISTER["fp32_variance"]("txt_norm.weight")) + # time_text_embed + self.add_module( + "time_text_embed_timestep_embedder_linear_1", MM_WEIGHT_REGISTER["Default"]("time_text_embed.timestep_embedder.linear_1.weight", "time_text_embed.timestep_embedder.linear_1.bias") + ) + self.add_module( + "time_text_embed_timestep_embedder_linear_2", MM_WEIGHT_REGISTER["Default"]("time_text_embed.timestep_embedder.linear_2.weight", "time_text_embed.timestep_embedder.linear_2.bias") + ) + + def to_cpu(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cpu"): + module.to_cpu(non_blocking=non_blocking) + + def to_cuda(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cuda"): + module.to_cuda(non_blocking=non_blocking) diff --git a/lightx2v/models/networks/qwen_image/weights/transformer_weights.py b/lightx2v/models/networks/qwen_image/weights/transformer_weights.py new file mode 100644 index 0000000..5fec43a --- /dev/null +++ b/lightx2v/models/networks/qwen_image/weights/transformer_weights.py @@ -0,0 +1,323 @@ +import os + +from safetensors import safe_open + +from lightx2v.common.modules.weight_module import WeightModule, WeightModuleList +from lightx2v.utils.registry_factory import ATTN_WEIGHT_REGISTER, LN_WEIGHT_REGISTER, MM_WEIGHT_REGISTER, RMS_WEIGHT_REGISTER + + +class QwenImageTransformerWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.blocks_num = config["num_layers"] + self.task = config["task"] + self.config = config + self.mm_type = config.get("dit_quant_scheme", "Default") + if self.mm_type != "Default": + assert config.get("dit_quantized") is True + blocks = WeightModuleList(QwenImageTransformerAttentionBlock(i, self.task, self.mm_type, self.config, False, False, "transformer_blocks") for i in range(self.blocks_num)) + self.register_offload_buffers(config) + self.add_module("blocks", blocks) + + def register_offload_buffers(self, config): + if config["cpu_offload"]: + if config["offload_granularity"] == "block": + self.offload_blocks_num = 2 + self.offload_block_cuda_buffers = WeightModuleList( + [QwenImageTransformerAttentionBlock(i, self.task, self.mm_type, self.config, True, False, "transformer_blocks") for i in range(self.offload_blocks_num)] + ) + self.add_module("offload_block_cuda_buffers", self.offload_block_cuda_buffers) + self.offload_phase_cuda_buffers = None + else: + raise NotImplementedError + + +class QwenImageTransformerAttentionBlock(WeightModule): + def __init__(self, block_index, task, mm_type, config, create_cuda_buffer=False, create_cpu_buffer=False, block_prefix="transformer_blocks"): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + self.sparge = config.get("sparge", False) + + self.lazy_load = self.config.get("lazy_load", False) + if self.lazy_load: + lazy_load_path = os.path.join(self.config["dit_quantized_ckpt"], f"block_{block_index}.safetensors") + self.lazy_load_file = safe_open(lazy_load_path, framework="pt", device="cpu") + else: + self.lazy_load_file = None + + # Image processing modules + self.add_module( + "img_mod", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.img_mod.1.weight", + f"{block_prefix}.{self.block_index}.img_mod.1.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "img_norm1", + LN_WEIGHT_REGISTER["Default"](create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer, eps=1e-6), + ) + self.attn = QwenImageCrossAttention( + block_index=block_index, + block_prefix="transformer_blocks", + task=config["task"], + mm_type=mm_type, + config=config, + create_cuda_buffer=create_cuda_buffer, + create_cpu_buffer=create_cpu_buffer, + lazy_load=self.lazy_load, + lazy_load_file=self.lazy_load_file, + ) + self.add_module("attn", self.attn) + + self.add_module( + "img_norm2", + LN_WEIGHT_REGISTER["Default"](create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer, eps=1e-6), + ) + img_mlp = QwenImageFFN( + block_index=block_index, + block_prefix="transformer_blocks", + ffn_prefix="img_mlp", + task=config["task"], + mm_type=mm_type, + config=config, + create_cuda_buffer=create_cuda_buffer, + create_cpu_buffer=create_cpu_buffer, + lazy_load=self.lazy_load, + lazy_load_file=self.lazy_load_file, + ) + self.add_module("img_mlp", img_mlp) + + # Text processing modules + self.add_module( + "txt_mod", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.txt_mod.1.weight", + f"{block_prefix}.{self.block_index}.txt_mod.1.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "txt_norm1", + LN_WEIGHT_REGISTER["Default"](create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer, eps=1e-6), + ) + + # Text doesn't need separate attention - it's handled by img_attn joint computation + self.add_module( + "txt_norm2", + LN_WEIGHT_REGISTER["Default"](create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer, eps=1e-6), + ) + txt_mlp = QwenImageFFN( + block_index=block_index, + block_prefix="transformer_blocks", + ffn_prefix="txt_mlp", + task=config["task"], + mm_type=mm_type, + config=config, + create_cuda_buffer=create_cuda_buffer, + create_cpu_buffer=create_cpu_buffer, + lazy_load=self.lazy_load, + lazy_load_file=self.lazy_load_file, + ) + self.add_module("txt_mlp", txt_mlp) + + +class QwenImageCrossAttention(WeightModule): + def __init__(self, block_index, block_prefix, task, mm_type, config, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + self.sparge = config.get("sparge", False) + self.attn_type = config.get("attn_type", "flash_attn3") + self.heads = config["attention_out_dim"] // config["attention_dim_head"] + + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + + # norm_q + self.add_module( + "norm_q", + RMS_WEIGHT_REGISTER["fp32_variance"](f"{block_prefix}.{block_index}.attn.norm_q.weight", create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer), + ) + # norm_k + self.add_module( + "norm_k", + RMS_WEIGHT_REGISTER["fp32_variance"](f"{block_prefix}.{block_index}.attn.norm_k.weight", create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer), + ) + # to_q + self.add_module( + "to_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.to_q.weight", + f"{block_prefix}.{self.block_index}.attn.to_q.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # to_k + self.add_module( + "to_k", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.to_k.weight", + f"{block_prefix}.{self.block_index}.attn.to_k.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # to_v + self.add_module( + "to_v", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.to_v.weight", + f"{block_prefix}.{self.block_index}.attn.to_v.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # add_q_proj + self.add_module( + "add_q_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.add_q_proj.weight", + f"{block_prefix}.{self.block_index}.attn.add_q_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # add_k_proj + self.add_module( + "add_k_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.add_k_proj.weight", + f"{block_prefix}.{self.block_index}.attn.add_k_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # add_v_proj + self.add_module( + "add_v_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.add_v_proj.weight", + f"{block_prefix}.{self.block_index}.attn.add_v_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # to_out + self.add_module( + "to_out", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.to_out.0.weight", + f"{block_prefix}.{self.block_index}.attn.to_out.0.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # to_add_out + self.add_module( + "to_add_out", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.attn.to_add_out.weight", + f"{block_prefix}.{self.block_index}.attn.to_add_out.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + # norm_added_q + self.add_module( + "norm_added_q", + RMS_WEIGHT_REGISTER["fp32_variance"](f"{block_prefix}.{block_index}.attn.norm_added_q.weight", create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer), + ) + # norm_added_k + self.add_module( + "norm_added_k", + RMS_WEIGHT_REGISTER["fp32_variance"](f"{block_prefix}.{block_index}.attn.norm_added_k.weight", create_cuda_buffer=create_cuda_buffer, create_cpu_buffer=create_cpu_buffer), + ) + # attn + self.add_module("calculate", ATTN_WEIGHT_REGISTER[self.attn_type]()) + + def to_cpu(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cpu"): + module.to_cpu(non_blocking=non_blocking) + + def to_cuda(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cuda"): + module.to_cuda(non_blocking=non_blocking) + + +class QwenImageFFN(WeightModule): + def __init__(self, block_index, block_prefix, ffn_prefix, task, mm_type, config, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + + self.add_module( + "mlp_0", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.{ffn_prefix}.net.0.proj.weight", + f"{block_prefix}.{self.block_index}.{ffn_prefix}.net.0.proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "mlp_2", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.{ffn_prefix}.net.2.weight", + f"{block_prefix}.{self.block_index}.{ffn_prefix}.net.2.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + def to_cpu(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cpu"): + module.to_cpu(non_blocking=non_blocking) + + def to_cuda(self, non_blocking=True): + for module in self._modules.values(): + if module is not None and hasattr(module, "to_cuda"): + module.to_cuda(non_blocking=non_blocking) diff --git a/lightx2v/models/networks/wan/animate_model.py b/lightx2v/models/networks/wan/animate_model.py new file mode 100644 index 0000000..b78555f --- /dev/null +++ b/lightx2v/models/networks/wan/animate_model.py @@ -0,0 +1,22 @@ +from lightx2v.models.networks.wan.infer.animate.pre_infer import WanAnimatePreInfer +from lightx2v.models.networks.wan.infer.animate.transformer_infer import WanAnimateTransformerInfer +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.networks.wan.weights.animate.transformer_weights import WanAnimateTransformerWeights +from lightx2v.models.networks.wan.weights.pre_weights import WanPreWeights + + +class WanAnimateModel(WanModel): + pre_weight_class = WanPreWeights + transformer_weight_class = WanAnimateTransformerWeights + + def __init__(self, model_path, config, device): + self.remove_keys = ["face_encoder", "motion_encoder"] + super().__init__(model_path, config, device) + + def _init_infer_class(self): + super()._init_infer_class() + self.pre_infer_class = WanAnimatePreInfer + self.transformer_infer_class = WanAnimateTransformerInfer + + def set_animate_encoders(self, motion_encoder, face_encoder): + self.pre_infer.set_animate_encoders(motion_encoder, face_encoder) diff --git a/lightx2v/models/networks/wan/audio_model.py b/lightx2v/models/networks/wan/audio_model.py new file mode 100644 index 0000000..9813280 --- /dev/null +++ b/lightx2v/models/networks/wan/audio_model.py @@ -0,0 +1,164 @@ +import os + +import torch +import torch.distributed as dist +import torch.nn.functional as F +from loguru import logger + +from lightx2v.models.networks.wan.infer.audio.post_infer import WanAudioPostInfer +from lightx2v.models.networks.wan.infer.audio.pre_infer import WanAudioPreInfer +from lightx2v.models.networks.wan.infer.audio.transformer_infer import WanAudioTransformerInfer +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.networks.wan.weights.audio.transformer_weights import WanAudioTransformerWeights +from lightx2v.models.networks.wan.weights.post_weights import WanPostWeights +from lightx2v.models.networks.wan.weights.pre_weights import WanPreWeights +from lightx2v.utils.utils import load_weights +from lightx2v_platform.base.global_var import AI_DEVICE + + +class WanAudioModel(WanModel): + pre_weight_class = WanPreWeights + post_weight_class = WanPostWeights + transformer_weight_class = WanAudioTransformerWeights + + def __init__(self, model_path, config, device): + self.config = config + self._load_adapter_ckpt() + super().__init__(model_path, config, device) + + def _load_adapter_ckpt(self): + if self.config.get("adapter_model_path", None) is None: + if self.config.get("adapter_quantized", False): + if self.config.get("adapter_quant_scheme", None) in ["fp8", "fp8-q8f", "fp8-vllm", "fp8-sgl"]: + adapter_model_name = "audio_adapter_model_fp8.safetensors" + elif self.config.get("adapter_quant_scheme", None) in ["int8", "int8-q8f", "int8-vllm", "int8-sgl", "int8-tmo"]: + adapter_model_name = "audio_adapter_model_int8.safetensors" + elif self.config.get("adapter_quant_scheme", None) in ["mxfp4"]: + adapter_model_name = "audio_adapter_model_mxfp4.safetensors" + elif self.config.get("adapter_quant_scheme", None) in ["mxfp6", "mxfp6-mxfp8"]: + adapter_model_name = "audio_adapter_model_mxfp6.safetensors" + elif self.config.get("adapter_quant_scheme", None) in ["mxfp8"]: + adapter_model_name = "audio_adapter_model_mxfp8.safetensors" + else: + raise ValueError(f"Unsupported quant_scheme: {self.config.get('adapter_quant_scheme', None)}") + else: + adapter_model_name = "audio_adapter_model.safetensors" + self.config["adapter_model_path"] = os.path.join(self.config["model_path"], adapter_model_name) + + adapter_offload = self.config.get("cpu_offload", False) + load_from_rank0 = self.config.get("load_from_rank0", False) + self.adapter_weights_dict = load_weights(self.config["adapter_model_path"], cpu_offload=adapter_offload, remove_key="audio", load_from_rank0=load_from_rank0) + if not adapter_offload: + if not dist.is_initialized() or not load_from_rank0: + for key in self.adapter_weights_dict: + self.adapter_weights_dict[key] = self.adapter_weights_dict[key].to(torch.device(AI_DEVICE)) + + def _init_infer_class(self): + super()._init_infer_class() + self.pre_infer_class = WanAudioPreInfer + self.post_infer_class = WanAudioPostInfer + self.transformer_infer_class = WanAudioTransformerInfer + + def get_graph_name(self, shape, audio_num, with_mask=True): + return f"graph_{shape[0]}x{shape[1]}_audio_num_{audio_num}_mask_{with_mask}" + + def start_compile(self, shape, audio_num, with_mask=True): + graph_name = self.get_graph_name(shape, audio_num, with_mask) + logger.info(f"[Compile] Compile shape: {shape}, audio_num:{audio_num}, graph_name: {graph_name}") + + target_video_length = self.config.get("target_video_length", 81) + latents_length = (target_video_length - 1) // 16 * 4 + 1 + latents_h = shape[0] // self.config["vae_stride"][1] + latents_w = shape[1] // self.config["vae_stride"][2] + + new_inputs = {} + new_inputs["text_encoder_output"] = {} + new_inputs["text_encoder_output"]["context"] = torch.randn(1, 512, 4096, dtype=torch.bfloat16).cuda() + new_inputs["text_encoder_output"]["context_null"] = torch.randn(1, 512, 4096, dtype=torch.bfloat16).cuda() + + new_inputs["image_encoder_output"] = {} + new_inputs["image_encoder_output"]["clip_encoder_out"] = torch.randn(257, 1280, dtype=torch.bfloat16).cuda() + new_inputs["image_encoder_output"]["vae_encoder_out"] = torch.randn(16, 1, latents_h, latents_w, dtype=torch.bfloat16).cuda() + + new_inputs["audio_encoder_output"] = torch.randn(audio_num, latents_length, 128, 1024, dtype=torch.bfloat16).cuda() + if with_mask: + new_inputs["person_mask_latens"] = torch.zeros(audio_num, 1, (latents_h // 2), (latents_w // 2), dtype=torch.int8).cuda() + else: + assert audio_num == 1, "audio_num must be 1 when with_mask is False" + new_inputs["person_mask_latens"] = None + + new_inputs["previmg_encoder_output"] = {} + new_inputs["previmg_encoder_output"]["prev_latents"] = torch.randn(16, latents_length, latents_h, latents_w, dtype=torch.bfloat16).cuda() + new_inputs["previmg_encoder_output"]["prev_mask"] = torch.randn(4, latents_length, latents_h, latents_w, dtype=torch.bfloat16).cuda() + + self.scheduler.latents = torch.randn(16, latents_length, latents_h, latents_w, dtype=torch.bfloat16).cuda() + self.scheduler.timestep_input = torch.tensor([600.0], dtype=torch.float32).cuda() + self.scheduler.audio_adapter_t_emb = torch.randn(1, 3, 5120, dtype=torch.bfloat16).cuda() + + self._infer_cond_uncond(new_inputs, infer_condition=True, graph_name=graph_name) + + def compile(self, compile_shapes): + self.check_compile_shapes(compile_shapes) + self.enable_compile_mode("_infer_cond_uncond") + + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == 0 and "wan2.2_moe" not in self.config["model_cls"]: + self.to_cuda() + elif self.offload_granularity != "model": + self.pre_weight.to_cuda() + self.transformer_weights.non_block_weights_to_cuda() + + max_audio_num_num = self.config.get("compile_max_audios", 1) + for audio_num in range(1, max_audio_num_num + 1): + for shape in compile_shapes: + self.start_compile(shape, audio_num, with_mask=True) + if audio_num == 1: + self.start_compile(shape, audio_num, with_mask=False) + + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == self.scheduler.infer_steps - 1 and "wan2.2_moe" not in self.config["model_cls"]: + self.to_cpu() + elif self.offload_granularity != "model": + self.pre_weight.to_cpu() + self.transformer_weights.non_block_weights_to_cpu() + + self.disable_compile_mode("_infer_cond_uncond") + logger.info(f"[Compile] Compile status: {self.get_compile_status()}") + + def check_compile_shapes(self, compile_shapes): + for shape in compile_shapes: + assert shape in [[480, 832], [544, 960], [720, 1280], [832, 480], [960, 544], [1280, 720], [480, 480], [576, 576], [704, 704], [960, 960]] + + def select_graph_for_compile(self, input_info): + logger.info(f"target_h, target_w : {input_info.target_shape[0]}, {input_info.target_shape[1]}, audio_num: {input_info.audio_num}") + graph_name = self.get_graph_name(input_info.target_shape, input_info.audio_num, with_mask=input_info.with_mask) + self.select_graph("_infer_cond_uncond", graph_name) + logger.info(f"[Compile] Compile status: {self.get_compile_status()}") + + @torch.no_grad() + def _seq_parallel_pre_process(self, pre_infer_out): + x = pre_infer_out.x + person_mask_latens = pre_infer_out.adapter_args["person_mask_latens"] + + world_size = dist.get_world_size(self.seq_p_group) + cur_rank = dist.get_rank(self.seq_p_group) + + padding_size = (world_size - (x.shape[0] % world_size)) % world_size + if padding_size > 0: + x = F.pad(x, (0, 0, 0, padding_size)) + if person_mask_latens is not None: + person_mask_latens = F.pad(person_mask_latens, (0, padding_size)) + + pre_infer_out.x = torch.chunk(x, world_size, dim=0)[cur_rank] + if person_mask_latens is not None: + pre_infer_out.adapter_args["person_mask_latens"] = torch.chunk(person_mask_latens, world_size, dim=1)[cur_rank] + + if self.config["model_cls"] in ["wan2.2", "wan2.2_audio"] and self.config["task"] in ["i2v", "s2v"]: + embed, embed0 = pre_infer_out.embed, pre_infer_out.embed0 + padding_size = (world_size - (embed.shape[0] % world_size)) % world_size + if padding_size > 0: + embed = F.pad(embed, (0, 0, 0, padding_size)) + embed0 = F.pad(embed0, (0, 0, 0, 0, 0, padding_size)) + pre_infer_out.embed = torch.chunk(embed, world_size, dim=0)[cur_rank] + pre_infer_out.embed0 = torch.chunk(embed0, world_size, dim=0)[cur_rank] + return pre_infer_out diff --git a/lightx2v/models/networks/wan/causvid_model.py b/lightx2v/models/networks/wan/causvid_model.py new file mode 100644 index 0000000..a76dccb --- /dev/null +++ b/lightx2v/models/networks/wan/causvid_model.py @@ -0,0 +1,58 @@ +import os + +import torch + +from lightx2v.models.networks.wan.infer.causvid.transformer_infer import ( + WanTransformerInferCausVid, +) +from lightx2v.models.networks.wan.infer.post_infer import WanPostInfer +from lightx2v.models.networks.wan.infer.pre_infer import WanPreInfer +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.networks.wan.weights.post_weights import WanPostWeights +from lightx2v.models.networks.wan.weights.pre_weights import WanPreWeights +from lightx2v.models.networks.wan.weights.transformer_weights import ( + WanTransformerWeights, +) +from lightx2v.utils.envs import * +from lightx2v.utils.utils import find_torch_model_path + + +class WanCausVidModel(WanModel): + pre_weight_class = WanPreWeights + post_weight_class = WanPostWeights + transformer_weight_class = WanTransformerWeights + + def __init__(self, model_path, config, device): + super().__init__(model_path, config, device) + + def _init_infer_class(self): + self.pre_infer_class = WanPreInfer + self.post_infer_class = WanPostInfer + self.transformer_infer_class = WanTransformerInferCausVid + + def _load_ckpt(self, unified_dtype, sensitive_layer): + ckpt_path = find_torch_model_path(self.config, self.model_path, "causvid_model.pt") + if os.path.exists(ckpt_path): + weight_dict = torch.load(ckpt_path, map_location="cpu", weights_only=True) + weight_dict = { + key: (weight_dict[key].to(GET_DTYPE()) if unified_dtype or all(s not in key for s in sensitive_layer) else weight_dict[key].to(GET_SENSITIVE_DTYPE())).pin_memory().to(self.device) + for key in weight_dict.keys() + } + return weight_dict + + return super()._load_ckpt(unified_dtype, sensitive_layer) + + @torch.no_grad() + def infer(self, inputs, kv_start, kv_end): + if self.config["cpu_offload"]: + self.pre_weight.to_cuda() + self.transformer_weights.post_weights_to_cuda() + + embed, grid_sizes, pre_infer_out = self.pre_infer.infer(self.pre_weight, inputs, kv_start=kv_start, kv_end=kv_end) + + x = self.transformer_infer.infer(self.transformer_weights, grid_sizes, embed, *pre_infer_out, kv_start, kv_end) + self.scheduler.noise_pred = self.post_infer.infer(x, embed, grid_sizes)[0] + + if self.config["cpu_offload"]: + self.pre_weight.to_cpu() + self.transformer_weights.post_weights_to_cpu() diff --git a/lightx2v/models/networks/wan/distill_model.py b/lightx2v/models/networks/wan/distill_model.py new file mode 100644 index 0000000..96c48b3 --- /dev/null +++ b/lightx2v/models/networks/wan/distill_model.py @@ -0,0 +1,35 @@ +import os + +import torch +from loguru import logger + +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.networks.wan.weights.post_weights import WanPostWeights +from lightx2v.models.networks.wan.weights.pre_weights import WanPreWeights +from lightx2v.models.networks.wan.weights.transformer_weights import ( + WanTransformerWeights, +) +from lightx2v.utils.envs import * +from lightx2v.utils.utils import * + + +class WanDistillModel(WanModel): + pre_weight_class = WanPreWeights + post_weight_class = WanPostWeights + transformer_weight_class = WanTransformerWeights + + def __init__(self, model_path, config, device, model_type="wan2.1"): + super().__init__(model_path, config, device, model_type) + + def _load_ckpt(self, unified_dtype, sensitive_layer): + # For the old t2v distill model: https://huggingface.co/lightx2v/Wan2.1-T2V-14B-StepDistill-CfgDistill + ckpt_path = os.path.join(self.model_path, "distill_model.pt") + if os.path.exists(ckpt_path): + logger.info(f"Loading weights from {ckpt_path}") + weight_dict = torch.load(ckpt_path, map_location="cpu", weights_only=True) + weight_dict = { + key: (weight_dict[key].to(GET_DTYPE()) if unified_dtype or all(s not in key for s in sensitive_layer) else weight_dict[key].to(GET_SENSITIVE_DTYPE())).pin_memory().to(self.device) + for key in weight_dict.keys() + } + return weight_dict + return super()._load_ckpt(unified_dtype, sensitive_layer) diff --git a/lightx2v/models/networks/wan/infer/animate/pre_infer.py b/lightx2v/models/networks/wan/infer/animate/pre_infer.py new file mode 100644 index 0000000..a4f1b41 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/animate/pre_infer.py @@ -0,0 +1,31 @@ +import math + +import torch + +from lightx2v.models.networks.wan.infer.pre_infer import WanPreInfer +from lightx2v.utils.envs import * + + +class WanAnimatePreInfer(WanPreInfer): + def __init__(self, config): + super().__init__(config) + self.encode_bs = 8 + + def set_animate_encoders(self, motion_encoder, face_encoder): + self.motion_encoder = motion_encoder + self.face_encoder = face_encoder + + @torch.no_grad() + def after_patch_embedding(self, weights, x, pose_latents, face_pixel_values): + pose_latents = weights.pose_patch_embedding.apply(pose_latents) + x[:, :, 1:].add_(pose_latents) + + face_pixel_values_tmp = [] + for i in range(math.ceil(face_pixel_values.shape[0] / self.encode_bs)): + face_pixel_values_tmp.append(self.motion_encoder.get_motion(face_pixel_values[i * self.encode_bs : (i + 1) * self.encode_bs])) + + motion_vec = torch.cat(face_pixel_values_tmp) + motion_vec = self.face_encoder(motion_vec.unsqueeze(0).to(GET_DTYPE())).squeeze(0) + pad_face = torch.zeros(1, motion_vec.shape[1], motion_vec.shape[2], dtype=motion_vec.dtype, device="cuda") + motion_vec = torch.cat([pad_face, motion_vec], dim=0) + return x, motion_vec diff --git a/lightx2v/models/networks/wan/infer/animate/transformer_infer.py b/lightx2v/models/networks/wan/infer/animate/transformer_infer.py new file mode 100644 index 0000000..aa8edb1 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/animate/transformer_infer.py @@ -0,0 +1,74 @@ +import torch +from einops import rearrange + +from lightx2v.models.networks.wan.infer.offload.transformer_infer import WanOffloadTransformerInfer + + +class WanAnimateTransformerInfer(WanOffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.has_post_adapter = True + self.phases_num = 4 + + def infer_with_blocks_offload(self, blocks, x, pre_infer_out): + for block_idx in range(len(blocks)): + self.block_idx = block_idx + if block_idx == 0: + self.offload_manager.init_first_buffer(blocks, block_idx // 5) + if block_idx < len(blocks) - 1: + self.offload_manager.prefetch_weights(block_idx + 1, blocks, (block_idx + 1) // 5) + + with torch.cuda.stream(self.offload_manager.compute_stream): + x = self.infer_block(self.offload_manager.cuda_buffers[0], x, pre_infer_out) + self.offload_manager.swap_blocks() + return x + + def infer_phases(self, block_idx, blocks, x, pre_infer_out, lazy): + for phase_idx in range(self.phases_num): + if block_idx == 0 and phase_idx == 0: + if lazy: + obj_key = (block_idx, phase_idx) + phase = self.offload_manager.pin_memory_buffer.get(obj_key) + phase.to_cuda() + self.offload_manager.cuda_buffers[0] = (obj_key, phase) + else: + self.offload_manager.init_first_buffer(blocks, block_idx // 5) + is_last_phase = block_idx == len(blocks) - 1 and phase_idx == self.phases_num - 1 + if not is_last_phase: + next_block_idx = block_idx + 1 if phase_idx == self.phases_num - 1 else block_idx + next_phase_idx = (phase_idx + 1) % self.phases_num + self.offload_manager.prefetch_phase(next_block_idx, next_phase_idx, blocks, (block_idx + 1) // 5) + + with torch.cuda.stream(self.offload_manager.compute_stream): + x = self.infer_phase(phase_idx, self.offload_manager.cuda_buffers[phase_idx], x, pre_infer_out) + + self.offload_manager.swap_phases() + + return x + + @torch.no_grad() + def infer_post_adapter(self, phase, x, pre_infer_out): + if phase.is_empty() or phase.linear1_kv.weight is None: + return x + T = pre_infer_out.adapter_args["motion_vec"].shape[0] + x_motion = phase.pre_norm_motion.apply(pre_infer_out.adapter_args["motion_vec"]) + x_feat = phase.pre_norm_feat.apply(x) + kv = phase.linear1_kv.apply(x_motion.view(-1, x_motion.shape[-1])) + kv = kv.view(T, -1, kv.shape[-1]) + q = phase.linear1_q.apply(x_feat) + k, v = rearrange(kv, "L N (K H D) -> K L N H D", K=2, H=self.config["num_heads"]) + q = rearrange(q, "S (H D) -> S H D", H=self.config["num_heads"]) + + q = phase.q_norm.apply(q).view(T, q.shape[0] // T, q.shape[1], q.shape[2]) + k = phase.k_norm.apply(k) + attn = phase.adapter_attn.apply( + q=q, + k=k, + v=v, + max_seqlen_q=q.shape[1], + model_cls=self.config["model_cls"], + ) + + output = phase.linear2.apply(attn) + x = x.add_(output) + return x diff --git a/lightx2v/models/networks/wan/infer/audio/post_infer.py b/lightx2v/models/networks/wan/infer/audio/post_infer.py new file mode 100644 index 0000000..3653cdd --- /dev/null +++ b/lightx2v/models/networks/wan/infer/audio/post_infer.py @@ -0,0 +1,21 @@ +import torch + +from lightx2v.models.networks.wan.infer.post_infer import WanPostInfer +from lightx2v.utils.envs import * + + +class WanAudioPostInfer(WanPostInfer): + def __init__(self, config): + super().__init__(config) + + @torch.no_grad() + def infer(self, x, pre_infer_out): + t, h, w = pre_infer_out.grid_sizes.tuple + grid_sizes = (t - 1, h, w) + + x = self.unpatchify(x, grid_sizes) + + if self.clean_cuda_cache: + torch.cuda.empty_cache() + + return [u.float() for u in x] diff --git a/lightx2v/models/networks/wan/infer/audio/pre_infer.py b/lightx2v/models/networks/wan/infer/audio/pre_infer.py new file mode 100644 index 0000000..9c56c41 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/audio/pre_infer.py @@ -0,0 +1,124 @@ +import torch + +from lightx2v.models.networks.wan.infer.pre_infer import WanPreInfer +from lightx2v.utils.envs import * + +from ..module_io import GridOutput, WanPreInferModuleOutput +from ..utils import sinusoidal_embedding_1d + + +class WanAudioPreInfer(WanPreInfer): + def __init__(self, config): + super().__init__(config) + assert (config["dim"] % config["num_heads"]) == 0 and (config["dim"] // config["num_heads"]) % 2 == 0 + self.config = config + self.task = config["task"] + self.freq_dim = config["freq_dim"] + self.dim = config["dim"] + self.clean_cuda_cache = self.config.get("clean_cuda_cache", False) + self.infer_dtype = GET_DTYPE() + self.sensitive_layer_dtype = GET_SENSITIVE_DTYPE() + + @torch.no_grad() + def infer(self, weights, inputs): + infer_condition, latents, timestep_input = self.scheduler.infer_condition, self.scheduler.latents, self.scheduler.timestep_input + prev_latents = inputs["previmg_encoder_output"]["prev_latents"] + hidden_states = latents + if self.config["model_cls"] != "wan2.2_audio": + prev_mask = inputs["previmg_encoder_output"]["prev_mask"] + hidden_states = torch.cat([hidden_states, prev_mask, prev_latents], dim=0) + + x = hidden_states + t = timestep_input + + if infer_condition: + context = inputs["text_encoder_output"]["context"] + else: + context = inputs["text_encoder_output"]["context_null"] + + clip_fea = inputs["image_encoder_output"]["clip_encoder_out"] + ref_image_encoder = inputs["image_encoder_output"]["vae_encoder_out"].to(latents.dtype) + + num_channels, _, height, width = x.shape + ref_num_channels, ref_num_frames, _, _ = ref_image_encoder.shape + + if ref_num_channels != num_channels: + zero_padding = torch.zeros( + (num_channels - ref_num_channels, ref_num_frames, height, width), + dtype=latents.dtype, + device=latents.device, + ) + ref_image_encoder = torch.concat([ref_image_encoder, zero_padding], dim=0) + y = ref_image_encoder + + # embeddings + x = weights.patch_embedding.apply(x.unsqueeze(0)) + grid_sizes_t, grid_sizes_h, grid_sizes_w = x.shape[2:] + x = x.flatten(2).transpose(1, 2).contiguous() + # seq_lens = torch.tensor(x.size(1), dtype=torch.int32, device=x.device).unsqueeze(0) + + y = weights.patch_embedding.apply(y.unsqueeze(0)) + y = y.flatten(2).transpose(1, 2).contiguous() + if not self.config.get("f2v_process", False): + x = torch.cat([x, y], dim=1).squeeze(0) + else: + x = x.squeeze(0) + + ####for r2v # zero temporl component corresponding to ref embeddings + # self.freqs[grid_sizes_t:, : self.rope_t_dim] = 0 + grid_sizes_t += 1 + + person_mask_latens = inputs["person_mask_latens"] + if person_mask_latens is not None: + person_mask_latens = person_mask_latens.expand(-1, grid_sizes_t, -1, -1) + person_mask_latens = person_mask_latens.reshape(person_mask_latens.shape[0], -1) + + embed = sinusoidal_embedding_1d(self.freq_dim, t.flatten()) + if self.sensitive_layer_dtype != self.infer_dtype: + embed = weights.time_embedding_0.apply(embed.to(self.sensitive_layer_dtype)) + else: + embed = weights.time_embedding_0.apply(embed) + embed = torch.nn.functional.silu(embed) + + embed = weights.time_embedding_2.apply(embed) + embed0 = torch.nn.functional.silu(embed) + embed0 = weights.time_projection_1.apply(embed0).unflatten(1, (6, self.dim)) + + # text embeddings + if self.sensitive_layer_dtype != self.infer_dtype: + out = weights.text_embedding_0.apply(context.squeeze(0).to(self.sensitive_layer_dtype)) + else: + out = weights.text_embedding_0.apply(context.squeeze(0)) + out = torch.nn.functional.gelu(out, approximate="tanh") + context = weights.text_embedding_2.apply(out) + if self.clean_cuda_cache: + del out + torch.cuda.empty_cache() + + if self.task in ["i2v", "s2v"] and self.config.get("use_image_encoder", True): + context_clip = weights.proj_0.apply(clip_fea) + if self.clean_cuda_cache: + del clip_fea + torch.cuda.empty_cache() + context_clip = weights.proj_1.apply(context_clip) + context_clip = torch.nn.functional.gelu(context_clip, approximate="none") + context_clip = weights.proj_3.apply(context_clip) + context_clip = weights.proj_4.apply(context_clip) + if self.clean_cuda_cache: + torch.cuda.empty_cache() + context = torch.concat([context_clip, context], dim=0) + + if self.clean_cuda_cache: + if self.config.get("use_image_encoder", True): + del context_clip + torch.cuda.empty_cache() + + grid_sizes = GridOutput(tensor=torch.tensor([[grid_sizes_t, grid_sizes_h, grid_sizes_w]], dtype=torch.int32, device=x.device), tuple=(grid_sizes_t, grid_sizes_h, grid_sizes_w)) + return WanPreInferModuleOutput( + embed=embed, + grid_sizes=grid_sizes, + x=x, + embed0=embed0.squeeze(0), + context=context, + adapter_args={"audio_encoder_output": inputs["audio_encoder_output"], "person_mask_latens": person_mask_latens}, + ) diff --git a/lightx2v/models/networks/wan/infer/audio/transformer_infer.py b/lightx2v/models/networks/wan/infer/audio/transformer_infer.py new file mode 100644 index 0000000..bd0dfa0 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/audio/transformer_infer.py @@ -0,0 +1,96 @@ +import torch +import torch.distributed as dist +from loguru import logger + +try: + import flash_attn # noqa: F401 + from flash_attn.flash_attn_interface import flash_attn_varlen_func +except ImportError: + logger.info("flash_attn_varlen_func not found, please install flash_attn2 first") + flash_attn_varlen_func = None + +from lightx2v.models.input_encoders.hf.seko_audio.audio_adapter import calculate_n_query_tokens, get_qk_lens_audio_range +from lightx2v.models.networks.wan.infer.offload.transformer_infer import WanOffloadTransformerInfer + + +class WanAudioTransformerInfer(WanOffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.has_post_adapter = True + self.phases_num = 4 + + @torch.no_grad() + def infer_post_adapter(self, phase, x, pre_infer_out): + grid_sizes = pre_infer_out.grid_sizes.tensor + audio_encoder_output = pre_infer_out.adapter_args["audio_encoder_output"] + person_mask_latens = pre_infer_out.adapter_args["person_mask_latens"] + total_tokens = grid_sizes[0].prod() + pre_frame_tokens = grid_sizes[0][1:].prod() + n_tokens = total_tokens - pre_frame_tokens # 去掉ref image的token数 + + ori_dtype = x.dtype + device = x.device + n_tokens_per_rank = torch.tensor(x.size(0), dtype=torch.int32, device=device) + + if self.seq_p_group is not None: + sp_size = dist.get_world_size(self.seq_p_group) + sp_rank = dist.get_rank(self.seq_p_group) + else: + sp_size = 1 + sp_rank = 0 + + n_query_tokens, hidden_states_aligned, hidden_states_tail, person_mask_aligned = calculate_n_query_tokens(x, person_mask_latens, sp_rank, sp_size, n_tokens_per_rank, n_tokens) + + q_lens, k_lens, max_seqlen_q, max_seqlen_k, t0, t1 = get_qk_lens_audio_range( + n_tokens_per_rank=n_tokens_per_rank, n_query_tokens=n_query_tokens, n_tokens_per_frame=pre_frame_tokens, sp_rank=sp_rank, num_tokens_x4=128 + ) + + total_residual = None + for i in range(audio_encoder_output.shape[0]): + audio_encoder = audio_encoder_output[i] + audio_encoder = audio_encoder[t0:t1].reshape(-1, audio_encoder.size(-1)) + residual = self.perceiver_attention_ca(phase, audio_encoder, hidden_states_aligned, self.scheduler.audio_adapter_t_emb, q_lens, k_lens, max_seqlen_q, max_seqlen_k) + + residual = residual.to(ori_dtype) # audio做了CrossAttention之后以Residual的方式注入 + if n_query_tokens == 0: + residual = residual * 0.0 + if person_mask_aligned is not None: + residual = residual * person_mask_aligned[i].unsqueeze(-1) + + if total_residual is None: + total_residual = residual + else: + total_residual += residual + + x = torch.cat([hidden_states_aligned + total_residual, hidden_states_tail], dim=0) + return x + + @torch.no_grad() + def perceiver_attention_ca(self, phase, audio_encoder_output, latents, t_emb, q_lens, k_lens, max_seqlen_q, max_seqlen_k): + audio_encoder_output = phase.norm_kv.apply(audio_encoder_output) + shift, scale, gate = (t_emb + phase.shift_scale_gate.tensor)[0].chunk(3, dim=0) + norm_q = phase.norm_q.apply(latents) + latents = norm_q * (1 + scale) + shift + q = phase.to_q.apply(latents) + k, v = phase.to_kv.apply(audio_encoder_output).chunk(2, dim=-1) + + q = q.view(q.size(0), self.num_heads, self.head_dim) + k = k.view(k.size(0), self.num_heads, self.head_dim) + v = v.view(v.size(0), self.num_heads, self.head_dim) + + out = flash_attn_varlen_func( + q=q, + k=k, + v=v, + cu_seqlens_q=torch.cat([q_lens.new_zeros([1]), q_lens]).cumsum(0, dtype=torch.int32).to(q.device, non_blocking=True), + cu_seqlens_k=torch.cat([k_lens.new_zeros([1]), k_lens]).cumsum(0, dtype=torch.int32).to(q.device, non_blocking=True), + max_seqlen_q=max_seqlen_q, + max_seqlen_k=max_seqlen_k, + dropout_p=0.0, + softmax_scale=None, + causal=False, + window_size=(-1, -1), + deterministic=False, + ) + out = out.view(-1, self.num_heads * self.head_dim) + return phase.to_out.apply(out) * gate diff --git a/lightx2v/models/networks/wan/infer/causvid/__init__.py b/lightx2v/models/networks/wan/infer/causvid/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/wan/infer/causvid/transformer_infer.py b/lightx2v/models/networks/wan/infer/causvid/transformer_infer.py new file mode 100644 index 0000000..1758985 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/causvid/transformer_infer.py @@ -0,0 +1,222 @@ +import math + +import torch + +from lightx2v.models.networks.wan.infer.offload.transformer_infer import WanOffloadTransformerInfer +from lightx2v.utils.envs import * + +from ..utils import apply_rotary_emb, compute_freqs_causvid + + +class WanTransformerInferCausVid(WanOffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.num_frames = config["num_frames"] + self.num_frame_per_block = config["num_frame_per_block"] + self.frame_seq_length = config["frame_seq_length"] + self.text_len = config["text_len"] + self.kv_cache = None + self.crossattn_cache = None + + def _init_kv_cache(self, dtype, device): + kv_cache = [] + kv_size = self.num_frames * self.frame_seq_length + + for _ in range(self.blocks_num): + kv_cache.append( + { + "k": torch.zeros([kv_size, self.num_heads, self.head_dim], dtype=dtype, device=device), + "v": torch.zeros([kv_size, self.num_heads, self.head_dim], dtype=dtype, device=device), + } + ) + + self.kv_cache = kv_cache + + def _init_crossattn_cache(self, dtype, device): + crossattn_cache = [] + + for _ in range(self.blocks_num): + crossattn_cache.append( + { + "k": torch.zeros([self.text_len, self.num_heads, self.head_dim], dtype=dtype, device=device), + "v": torch.zeros([self.text_len, self.num_heads, self.head_dim], dtype=dtype, device=device), + "is_init": False, + } + ) + + self.crossattn_cache = crossattn_cache + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, kv_start, kv_end): + return self.infer_func(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, kv_start, kv_end) + + def _infer_with_offload(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, kv_start, kv_end): + for block_idx in range(self.blocks_num): + if block_idx == 0: + self.weights_stream_mgr.active_weights[0] = weights.blocks[0] + self.weights_stream_mgr.active_weights[0].to_cuda() + + with torch.cuda.stream(self.weights_stream_mgr.compute_stream): + x = self.infer_block( + self.weights_stream_mgr.active_weights[0], + grid_sizes, + embed, + x, + embed0, + seq_lens, + freqs, + context, + block_idx, + kv_start, + kv_end, + ) + + if block_idx < self.blocks_num - 1: + self.weights_stream_mgr.prefetch_weights(block_idx + 1, weights.blocks) + self.weights_stream_mgr.swap_weights() + + return x + + def _infer_without_offload(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, kv_start, kv_end): + for block_idx in range(self.blocks_num): + x = self.infer_block( + weights.blocks[block_idx], + grid_sizes, + embed, + x, + embed0, + seq_lens, + freqs, + context, + block_idx, + kv_start, + kv_end, + ) + return x + + def infer_self_attn(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, block_idx, kv_start, kv_end): + norm1_out = torch.nn.functional.layer_norm(x, (x.shape[1],), None, None, 1e-6) + norm1_out = (norm1_out * (1 + embed0[1]) + embed0[0]).squeeze(0) + + s, n, d = *norm1_out.shape[:1], self.num_heads, self.head_dim + q = weights.self_attn_norm_q.apply(weights.self_attn_q.apply(norm1_out)).view(s, n, d) + k = weights.self_attn_norm_k.apply(weights.self_attn_k.apply(norm1_out)).view(s, n, d) + v = weights.self_attn_v.apply(norm1_out).view(s, n, d) + + if not self.parallel_attention: + freqs_i = compute_freqs_causvid(q.size(2) // 2, grid_sizes, freqs, start_frame=kv_start // math.prod(grid_sizes[0][1:]).item()) + else: + # TODO: Implement parallel attention for causvid inference + raise NotImplementedError("Parallel attention is not implemented for causvid inference") + + q = apply_rotary_emb(q, freqs_i) + k = apply_rotary_emb(k, freqs_i) + + self.kv_cache[block_idx]["k"][kv_start:kv_end] = k + self.kv_cache[block_idx]["v"][kv_start:kv_end] = v + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len(q=q, k_lens=torch.tensor([kv_end], dtype=torch.int32, device=k.device)) + + if not self.parallel_attention: + attn_out = weights.self_attn_1.apply( + q=q, + k=self.kv_cache[block_idx]["k"][:kv_end], + v=self.kv_cache[block_idx]["v"][:kv_end], + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k.size(0), + model_cls=self.config["model_cls"], + ) + else: + # TODO: Implement parallel attention for causvid inference + raise NotImplementedError("Parallel attention is not implemented for causvid inference") + + y = weights.self_attn_o.apply(attn_out) + + x = x + y * embed0[2].squeeze(0) + + return x + + def infer_cross_attn(self, weights, x, context, block_idx): + norm3_out = weights.norm3.apply(x) + + if self.task in ["i2v", "s2v"]: + context_img = context[:257] + context = context[257:] + + n, d = self.num_heads, self.head_dim + q = weights.cross_attn_norm_q.apply(weights.cross_attn_q.apply(norm3_out)).view(-1, n, d) + if not self.crossattn_cache[block_idx]["is_init"]: + k = weights.cross_attn_norm_k.apply(weights.cross_attn_k.apply(context)).view(-1, n, d) + v = weights.cross_attn_v.apply(context).view(-1, n, d) + self.crossattn_cache[block_idx]["k"] = k + self.crossattn_cache[block_idx]["v"] = v + self.crossattn_cache[block_idx]["is_init"] = True + else: + k = self.crossattn_cache[block_idx]["k"] + v = self.crossattn_cache[block_idx]["v"] + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len(q, k_lens=torch.tensor([k.size(0)], dtype=torch.int32, device=k.device)) + + attn_out = weights.cross_attn_1.apply( + q=q, + k=k, + v=v, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k.size(0), + model_cls=self.config["model_cls"], + ) + + if self.task in ["i2v", "s2v"]: + k_img = weights.cross_attn_norm_k_img.apply(weights.cross_attn_k_img.apply(context_img)).view(-1, n, d) + v_img = weights.cross_attn_v_img.apply(context_img).view(-1, n, d) + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len( + q, + k_lens=torch.tensor([k_img.size(0)], dtype=torch.int32, device=k.device), + ) + + img_attn_out = weights.cross_attn_2.apply( + q=q, + k=k_img, + v=v_img, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k_img.size(0), + model_cls=self.config["model_cls"], + ) + + attn_out = attn_out + img_attn_out + + attn_out = weights.cross_attn_o.apply(attn_out) + + x = x + attn_out + + return x + + def infer_ffn(self, weights, x, embed0): + norm2_out = torch.nn.functional.layer_norm(x, (x.shape[1],), None, None, 1e-6) + y = weights.ffn_0.apply(norm2_out * (1 + embed0[4].squeeze(0)) + embed0[3].squeeze(0)) + y = torch.nn.functional.gelu(y, approximate="tanh") + y = weights.ffn_2.apply(y) + x = x + y * embed0[5].squeeze(0) + + return x + + def infer_block(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, block_idx, kv_start, kv_end): + if embed0.dim() == 3: + modulation = weights.compute_phases[0].modulation.tensor.unsqueeze(2) # 1, 6, 1, dim + embed0 = embed0.unsqueeze(0) # + embed0 = (modulation + embed0).chunk(6, dim=1) + embed0 = [ei.squeeze(1) for ei in embed0] + elif embed0.dim() == 2: + embed0 = (weights.compute_phases[0].modulation.tensor + embed0).chunk(6, dim=1) + + x = self.infer_self_attn(weights.compute_phases[1], grid_sizes, embed, x, embed0, seq_lens, freqs, context, block_idx, kv_start, kv_end) + x = self.infer_cross_attn(weights.compute_phases[2], x, context, block_idx) + x = self.infer_ffn(weights.compute_phases[3], x, embed0) + + return x diff --git a/lightx2v/models/networks/wan/infer/feature_caching/__init__.py b/lightx2v/models/networks/wan/infer/feature_caching/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/wan/infer/feature_caching/transformer_infer.py b/lightx2v/models/networks/wan/infer/feature_caching/transformer_infer.py new file mode 100644 index 0000000..c9f5342 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/feature_caching/transformer_infer.py @@ -0,0 +1,1104 @@ +import gc +import json + +import numpy as np +import torch +import torch.nn.functional as F + +from lightx2v.common.transformer_infer.transformer_infer import BaseTaylorCachingTransformerInfer +from lightx2v.models.networks.wan.infer.offload.transformer_infer import WanOffloadTransformerInfer +from lightx2v_platform.base.global_var import AI_DEVICE + + +class WanTransformerInferCaching(WanOffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.must_calc_steps = [] + if self.config.get("changing_resolution", False): + self.must_calc_steps = self.config["changing_resolution_steps"] + + def must_calc(self, step_index): + if step_index in self.must_calc_steps: + return True + return False + + +class WanTransformerInferTeaCaching(WanTransformerInferCaching): + def __init__(self, config): + super().__init__(config) + self.teacache_thresh = config["teacache_thresh"] + self.accumulated_rel_l1_distance_even = 0 + self.previous_e0_even = None + self.previous_residual_even = None + self.accumulated_rel_l1_distance_odd = 0 + self.previous_e0_odd = None + self.previous_residual_odd = None + self.use_ret_steps = config["use_ret_steps"] + if self.use_ret_steps: + self.coefficients = self.config["coefficients"][0] + self.ret_steps = 5 + self.cutoff_steps = self.config["infer_steps"] + else: + self.coefficients = self.config["coefficients"][1] + self.ret_steps = 1 + self.cutoff_steps = self.config["infer_steps"] - 1 + + # calculate should_calc + @torch.no_grad() + def calculate_should_calc(self, embed, embed0): + # 1. timestep embedding + modulated_inp = embed0 if self.use_ret_steps else embed + + # 2. L1 calculate + should_calc = False + if self.scheduler.infer_condition: + if self.scheduler.step_index < self.ret_steps or self.scheduler.step_index >= self.cutoff_steps: + should_calc = True + self.accumulated_rel_l1_distance_even = 0 + else: + rescale_func = np.poly1d(self.coefficients) + self.accumulated_rel_l1_distance_even += rescale_func( + ((modulated_inp - self.previous_e0_even.to(AI_DEVICE)).abs().mean() / self.previous_e0_even.to(AI_DEVICE).abs().mean()).cpu().item() + ) + if self.accumulated_rel_l1_distance_even < self.teacache_thresh: + should_calc = False + else: + should_calc = True + self.accumulated_rel_l1_distance_even = 0 + self.previous_e0_even = modulated_inp.clone() + if self.config["cpu_offload"]: + self.previous_e0_even = self.previous_e0_even.cpu() + + else: + if self.scheduler.step_index < self.ret_steps or self.scheduler.step_index >= self.cutoff_steps: + should_calc = True + self.accumulated_rel_l1_distance_odd = 0 + else: + rescale_func = np.poly1d(self.coefficients) + self.accumulated_rel_l1_distance_odd += rescale_func(((modulated_inp - self.previous_e0_odd.to(AI_DEVICE)).abs().mean() / self.previous_e0_odd.to(AI_DEVICE).abs().mean()).cpu().item()) + if self.accumulated_rel_l1_distance_odd < self.teacache_thresh: + should_calc = False + else: + should_calc = True + self.accumulated_rel_l1_distance_odd = 0 + self.previous_e0_odd = modulated_inp.clone() + + if self.config["cpu_offload"]: + self.previous_e0_odd = self.previous_e0_odd.cpu() + + if self.config["cpu_offload"]: + modulated_inp = modulated_inp.cpu() + del modulated_inp + torch.cuda.empty_cache() + gc.collect() + + if self.clean_cuda_cache: + del embed, embed0 + torch.cuda.empty_cache() + + # 3. return the judgement + return should_calc + + def infer_main_blocks(self, weights, pre_infer_out): + if self.scheduler.infer_condition: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(pre_infer_out.embed, pre_infer_out.embed0) + self.scheduler.caching_records[index] = should_calc + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, pre_infer_out) + else: + x = self.infer_using_cache(pre_infer_out.x) + + else: + index = self.scheduler.step_index + caching_records_2 = self.scheduler.caching_records_2 + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(pre_infer_out.embed, pre_infer_out.embed0) + self.scheduler.caching_records_2[index] = should_calc + + if caching_records_2[index] or self.must_calc(index): + x = self.infer_calculating(weights, pre_infer_out) + else: + x = self.infer_using_cache(pre_infer_out.x) + + if self.clean_cuda_cache: + del grid_sizes, embed, embed0, seq_lens, freqs, context + torch.cuda.empty_cache() + + return x + + def infer_calculating(self, weights, pre_infer_out): + ori_x = pre_infer_out.x.clone() + + x = super().infer_main_blocks(weights, pre_infer_out) + if self.scheduler.infer_condition: + self.previous_residual_even = x - ori_x + if self.config["cpu_offload"]: + self.previous_residual_even = self.previous_residual_even.cpu() + else: + self.previous_residual_odd = x - ori_x + if self.config["cpu_offload"]: + self.previous_residual_odd = self.previous_residual_odd.cpu() + + if self.config["cpu_offload"]: + ori_x = ori_x.to("cpu") + del ori_x + torch.cuda.empty_cache() + gc.collect() + return x + + def infer_using_cache(self, x): + if self.scheduler.infer_condition: + x.add_(self.previous_residual_even.to(AI_DEVICE)) + else: + x.add_(self.previous_residual_odd.to(AI_DEVICE)) + return x + + def clear(self): + if self.previous_residual_even is not None: + self.previous_residual_even = self.previous_residual_even.cpu() + if self.previous_residual_odd is not None: + self.previous_residual_odd = self.previous_residual_odd.cpu() + if self.previous_e0_even is not None: + self.previous_e0_even = self.previous_e0_even.cpu() + if self.previous_e0_odd is not None: + self.previous_e0_odd = self.previous_e0_odd.cpu() + + self.previous_residual_even = None + self.previous_residual_odd = None + self.previous_e0_even = None + self.previous_e0_odd = None + + torch.cuda.empty_cache() + + +class WanTransformerInferTaylorCaching(WanTransformerInferCaching, BaseTaylorCachingTransformerInfer): + def __init__(self, config): + super().__init__(config) + + self.blocks_cache_even = [{} for _ in range(self.blocks_num)] + self.blocks_cache_odd = [{} for _ in range(self.blocks_num)] + + # 1. get taylor step_diff when there is two caching_records in scheduler + def get_taylor_step_diff(self): + step_diff = 0 + if self.infer_conditional: + current_step = self.scheduler.step_index + last_calc_step = current_step - 1 + while last_calc_step >= 0 and not self.scheduler.caching_records[last_calc_step]: + last_calc_step -= 1 + step_diff = current_step - last_calc_step + else: + current_step = self.scheduler.step_index + last_calc_step = current_step - 1 + while last_calc_step >= 0 and not self.scheduler.caching_records_2[last_calc_step]: + last_calc_step -= 1 + step_diff = current_step - last_calc_step + + return step_diff + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + if self.infer_conditional: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + else: + index = self.scheduler.step_index + caching_records_2 = self.scheduler.caching_records_2 + + if caching_records_2[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + if self.config["enable_cfg"]: + self.switch_status() + + return x + + def infer_calculating(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + for block_idx in range(self.blocks_num): + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = self.infer_modulation(weights.blocks[block_idx].compute_phases[0], embed0) + + y_out = self.infer_self_attn(weights.blocks[block_idx].compute_phases[1], grid_sizes, x, seq_lens, freqs, shift_msa, scale_msa) + if self.infer_conditional: + self.derivative_approximation(self.blocks_cache_even[block_idx], "self_attn_out", y_out) + else: + self.derivative_approximation(self.blocks_cache_odd[block_idx], "self_attn_out", y_out) + + x, attn_out = self.infer_cross_attn(weights.blocks[block_idx].compute_phases[2], x, context, y_out, gate_msa) + if self.infer_conditional: + self.derivative_approximation(self.blocks_cache_even[block_idx], "cross_attn_out", attn_out) + else: + self.derivative_approximation(self.blocks_cache_odd[block_idx], "cross_attn_out", attn_out) + + y_out = self.infer_ffn(weights.blocks[block_idx].compute_phases[3], x, attn_out, c_shift_msa, c_scale_msa) + if self.infer_conditional: + self.derivative_approximation(self.blocks_cache_even[block_idx], "ffn_out", y_out) + else: + self.derivative_approximation(self.blocks_cache_odd[block_idx], "ffn_out", y_out) + + x = self.post_process(x, y_out, c_gate_msa) + return x + + def infer_using_cache(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + for block_idx in range(self.blocks_num): + x = self.infer_block(weights.blocks[block_idx], grid_sizes, embed, x, embed0, seq_lens, freqs, context, block_idx) + return x + + # 1. taylor using caching + def infer_block(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, i): + # 1. shift, scale, gate + _, _, gate_msa, _, _, c_gate_msa = self.infer_modulation(weights.compute_phases[0], embed0) + + # 2. residual and taylor + if self.infer_conditional: + out = self.taylor_formula(self.blocks_cache_even[i]["self_attn_out"]) + out = out * gate_msa.squeeze(0) + x = x + out + + out = self.taylor_formula(self.blocks_cache_even[i]["cross_attn_out"]) + x = x + out + + out = self.taylor_formula(self.blocks_cache_even[i]["ffn_out"]) + out = out * c_gate_msa.squeeze(0) + x = x + out + + else: + out = self.taylor_formula(self.blocks_cache_odd[i]["self_attn_out"]) + out = out * gate_msa.squeeze(0) + x = x + out + + out = self.taylor_formula(self.blocks_cache_odd[i]["cross_attn_out"]) + x = x + out + + out = self.taylor_formula(self.blocks_cache_odd[i]["ffn_out"]) + out = out * c_gate_msa.squeeze(0) + x = x + out + + return x + + def clear(self): + for cache in self.blocks_cache_even: + for key in cache: + if cache[key] is not None: + if isinstance(cache[key], torch.Tensor): + cache[key] = cache[key].cpu() + elif isinstance(cache[key], dict): + for k, v in cache[key].items(): + if isinstance(v, torch.Tensor): + cache[key][k] = v.cpu() + cache.clear() + + for cache in self.blocks_cache_odd: + for key in cache: + if cache[key] is not None: + if isinstance(cache[key], torch.Tensor): + cache[key] = cache[key].cpu() + elif isinstance(cache[key], dict): + for k, v in cache[key].items(): + if isinstance(v, torch.Tensor): + cache[key][k] = v.cpu() + cache.clear() + torch.cuda.empty_cache() + + +class WanTransformerInferAdaCaching(WanTransformerInferCaching): + def __init__(self, config): + super().__init__(config) + + # 1. fixed args + self.decisive_double_block_id = self.blocks_num // 2 + self.codebook = {0.03: 12, 0.05: 10, 0.07: 8, 0.09: 6, 0.11: 4, 1.00: 3} + + # 2. Create two instances of AdaArgs + self.args_even = AdaArgs(config) + self.args_odd = AdaArgs(config) + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + if self.infer_conditional: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + # 1. calculate the skipped step length + if index <= self.scheduler.infer_steps - 2: + self.args_even.skipped_step_length = self.calculate_skip_step_length() + for i in range(1, self.args_even.skipped_step_length): + if (index + i) <= self.scheduler.infer_steps - 1: + self.scheduler.caching_records[index + i] = False + else: + x = self.infer_using_cache(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + else: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records_2 + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + # 1. calculate the skipped step length + if index <= self.scheduler.infer_steps - 2: + self.args_odd.skipped_step_length = self.calculate_skip_step_length() + for i in range(1, self.args_odd.skipped_step_length): + if (index + i) <= self.scheduler.infer_steps - 1: + self.scheduler.caching_records_2[index + i] = False + else: + x = self.infer_using_cache(xt) + + if self.config["enable_cfg"]: + self.switch_status() + + return x + + def infer_calculating(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + ori_x = x.clone() + + for block_idx in range(self.blocks_num): + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = self.infer_modulation(weights.blocks[block_idx].compute_phases[0], embed0) + + y_out = self.infer_self_attn(weights.blocks[block_idx].compute_phases[1], grid_sizes, x, seq_lens, freqs, shift_msa, scale_msa) + if block_idx == self.decisive_double_block_id: + if self.infer_conditional: + self.args_even.now_residual_tiny = y_out * gate_msa.squeeze(0) + else: + self.args_odd.now_residual_tiny = y_out * gate_msa.squeeze(0) + + x, attn_out = self.infer_cross_attn(weights.blocks[block_idx].compute_phases[2], x, context, y_out, gate_msa) + y_out = self.infer_ffn(weights.blocks[block_idx].compute_phases[3], x, attn_out, c_shift_msa, c_scale_msa) + x = self.post_process(x, y_out, c_gate_msa) + + if self.infer_conditional: + self.args_even.previous_residual = x - ori_x + else: + self.args_odd.previous_residual = x - ori_x + return x + + def infer_using_cache(self, x): + if self.infer_conditional: + x += self.args_even.previous_residual + else: + x += self.args_odd.previous_residual + return x + + def calculate_skip_step_length(self): + if self.infer_conditional: + if self.args_even.previous_residual_tiny is None: + self.args_even.previous_residual_tiny = self.args_even.now_residual_tiny + return 1 + else: + cache = self.args_even.previous_residual_tiny + res = self.args_even.now_residual_tiny + norm_ord = self.args_even.norm_ord + cache_diff = (cache - res).norm(dim=(0, 1), p=norm_ord) / cache.norm(dim=(0, 1), p=norm_ord) + cache_diff = cache_diff / self.args_even.skipped_step_length + + if self.args_even.moreg_steps[0] <= self.scheduler.step_index <= self.args_even.moreg_steps[1]: + moreg = 0 + for i in self.args_even.moreg_strides: + moreg_i = (res[i * self.args_even.spatial_dim :, :] - res[: -i * self.args_even.spatial_dim, :]).norm(p=norm_ord) + moreg_i /= res[i * self.args_even.spatial_dim :, :].norm(p=norm_ord) + res[: -i * self.args_even.spatial_dim, :].norm(p=norm_ord) + moreg += moreg_i + moreg = moreg / len(self.args_even.moreg_strides) + moreg = ((1 / self.args_even.moreg_hyp[0] * moreg) ** self.args_even.moreg_hyp[1]) / self.args_even.moreg_hyp[2] + else: + moreg = 1.0 + + mograd = self.args_even.mograd_mul * (moreg - self.args_even.previous_moreg) / self.args_even.skipped_step_length + self.args_even.previous_moreg = moreg + moreg = moreg + abs(mograd) + cache_diff = cache_diff * moreg + + metric_thres, cache_rates = list(self.codebook.keys()), list(self.codebook.values()) + if cache_diff < metric_thres[0]: + new_rate = cache_rates[0] + elif cache_diff < metric_thres[1]: + new_rate = cache_rates[1] + elif cache_diff < metric_thres[2]: + new_rate = cache_rates[2] + elif cache_diff < metric_thres[3]: + new_rate = cache_rates[3] + elif cache_diff < metric_thres[4]: + new_rate = cache_rates[4] + else: + new_rate = cache_rates[-1] + + self.args_even.previous_residual_tiny = self.args_even.now_residual_tiny + return new_rate + + else: + if self.args_odd.previous_residual_tiny is None: + self.args_odd.previous_residual_tiny = self.args_odd.now_residual_tiny + return 1 + else: + cache = self.args_odd.previous_residual_tiny + res = self.args_odd.now_residual_tiny + norm_ord = self.args_odd.norm_ord + cache_diff = (cache - res).norm(dim=(0, 1), p=norm_ord) / cache.norm(dim=(0, 1), p=norm_ord) + cache_diff = cache_diff / self.args_odd.skipped_step_length + + if self.args_odd.moreg_steps[0] <= self.scheduler.step_index <= self.args_odd.moreg_steps[1]: + moreg = 0 + for i in self.args_odd.moreg_strides: + moreg_i = (res[i * self.args_odd.spatial_dim :, :] - res[: -i * self.args_odd.spatial_dim, :]).norm(p=norm_ord) + moreg_i /= res[i * self.args_odd.spatial_dim :, :].norm(p=norm_ord) + res[: -i * self.args_odd.spatial_dim, :].norm(p=norm_ord) + moreg += moreg_i + moreg = moreg / len(self.args_odd.moreg_strides) + moreg = ((1 / self.args_odd.moreg_hyp[0] * moreg) ** self.args_odd.moreg_hyp[1]) / self.args_odd.moreg_hyp[2] + else: + moreg = 1.0 + + mograd = self.args_odd.mograd_mul * (moreg - self.args_odd.previous_moreg) / self.args_odd.skipped_step_length + self.args_odd.previous_moreg = moreg + moreg = moreg + abs(mograd) + cache_diff = cache_diff * moreg + + metric_thres, cache_rates = list(self.codebook.keys()), list(self.codebook.values()) + if cache_diff < metric_thres[0]: + new_rate = cache_rates[0] + elif cache_diff < metric_thres[1]: + new_rate = cache_rates[1] + elif cache_diff < metric_thres[2]: + new_rate = cache_rates[2] + elif cache_diff < metric_thres[3]: + new_rate = cache_rates[3] + elif cache_diff < metric_thres[4]: + new_rate = cache_rates[4] + else: + new_rate = cache_rates[-1] + + self.args_odd.previous_residual_tiny = self.args_odd.now_residual_tiny + return new_rate + + def clear(self): + if self.args_even.previous_residual is not None: + self.args_even.previous_residual = self.args_even.previous_residual.cpu() + if self.args_even.previous_residual_tiny is not None: + self.args_even.previous_residual_tiny = self.args_even.previous_residual_tiny.cpu() + if self.args_even.now_residual_tiny is not None: + self.args_even.now_residual_tiny = self.args_even.now_residual_tiny.cpu() + + if self.args_odd.previous_residual is not None: + self.args_odd.previous_residual = self.args_odd.previous_residual.cpu() + if self.args_odd.previous_residual_tiny is not None: + self.args_odd.previous_residual_tiny = self.args_odd.previous_residual_tiny.cpu() + if self.args_odd.now_residual_tiny is not None: + self.args_odd.now_residual_tiny = self.args_odd.now_residual_tiny.cpu() + + self.args_even.previous_residual = None + self.args_even.previous_residual_tiny = None + self.args_even.now_residual_tiny = None + + self.args_odd.previous_residual = None + self.args_odd.previous_residual_tiny = None + self.args_odd.now_residual_tiny = None + + torch.cuda.empty_cache() + + +class AdaArgs: + def __init__(self, config): + # Cache related attributes + self.previous_residual_tiny = None + self.now_residual_tiny = None + self.norm_ord = 1 + self.skipped_step_length = 1 + self.previous_residual = None + + # Moreg related attributes + self.previous_moreg = 1.0 + self.moreg_strides = [1] + self.moreg_steps = [int(0.1 * config["infer_steps"]), int(0.9 * config["infer_steps"])] + self.moreg_hyp = [0.385, 8, 1, 2] + self.mograd_mul = 10 + self.spatial_dim = 1536 + + +class WanTransformerInferCustomCaching(WanTransformerInferCaching, BaseTaylorCachingTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.cnt = 0 + self.teacache_thresh = config["teacache_thresh"] + self.accumulated_rel_l1_distance_even = 0 + self.previous_e0_even = None + self.previous_residual_even = None + self.accumulated_rel_l1_distance_odd = 0 + self.previous_e0_odd = None + self.previous_residual_odd = None + self.cache_even = {} + self.cache_odd = {} + self.use_ret_steps = config["use_ret_steps"] + if self.use_ret_steps: + self.coefficients = self.config["coefficients"][0] + self.ret_steps = 5 * 2 + self.cutoff_steps = self.config["infer_steps"] * 2 + else: + self.coefficients = self.config["coefficients"][1] + self.ret_steps = 1 * 2 + self.cutoff_steps = self.config["infer_steps"] * 2 - 2 + + # 1. get taylor step_diff when there is two caching_records in scheduler + def get_taylor_step_diff(self): + step_diff = 0 + if self.infer_conditional: + current_step = self.scheduler.step_index + last_calc_step = current_step - 1 + while last_calc_step >= 0 and not self.scheduler.caching_records[last_calc_step]: + last_calc_step -= 1 + step_diff = current_step - last_calc_step + else: + current_step = self.scheduler.step_index + last_calc_step = current_step - 1 + while last_calc_step >= 0 and not self.scheduler.caching_records_2[last_calc_step]: + last_calc_step -= 1 + step_diff = current_step - last_calc_step + + return step_diff + + # calculate should_calc + def calculate_should_calc(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + # 1. timestep embedding + modulated_inp = embed0 if self.use_ret_steps else embed + + # 2. L1 calculate + should_calc = False + if self.infer_conditional: + if self.cnt < self.ret_steps or self.cnt >= self.cutoff_steps: + should_calc = True + self.accumulated_rel_l1_distance_even = 0 + else: + rescale_func = np.poly1d(self.coefficients) + self.accumulated_rel_l1_distance_even += rescale_func(((modulated_inp - self.previous_e0_even).abs().mean() / self.previous_e0_even.abs().mean()).cpu().item()) + if self.accumulated_rel_l1_distance_even < self.teacache_thresh: + should_calc = False + else: + should_calc = True + self.accumulated_rel_l1_distance_even = 0 + self.previous_e0_even = modulated_inp.clone() + + else: + if self.cnt < self.ret_steps or self.cnt >= self.cutoff_steps: + should_calc = True + self.accumulated_rel_l1_distance_odd = 0 + else: + rescale_func = np.poly1d(self.coefficients) + self.accumulated_rel_l1_distance_odd += rescale_func(((modulated_inp - self.previous_e0_odd).abs().mean() / self.previous_e0_odd.abs().mean()).cpu().item()) + if self.accumulated_rel_l1_distance_odd < self.teacache_thresh: + should_calc = False + else: + should_calc = True + self.accumulated_rel_l1_distance_odd = 0 + self.previous_e0_odd = modulated_inp.clone() + + # 3. return the judgement + return should_calc + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + if self.infer_conditional: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + self.scheduler.caching_records[index] = should_calc + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(x) + + else: + index = self.scheduler.step_index + caching_records_2 = self.scheduler.caching_records_2 + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + self.scheduler.caching_records_2[index] = should_calc + + if caching_records_2[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(x) + + if self.config["enable_cfg"]: + self.switch_status() + + self.cnt += 1 + + return x + + def infer_calculating(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + ori_x = x.clone() + + for block_idx in range(self.blocks_num): + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = self.infer_modulation(weights.blocks[block_idx].compute_phases[0], embed0) + + y_out = self.infer_self_attn(weights.blocks[block_idx].compute_phases[1], grid_sizes, x, seq_lens, freqs, shift_msa, scale_msa) + x, attn_out = self.infer_cross_attn(weights.blocks[block_idx].compute_phases[2], x, context, y_out, gate_msa) + y_out = self.infer_ffn(weights.blocks[block_idx].compute_phases[3], x, attn_out, c_shift_msa, c_scale_msa) + x = self.post_process(x, y_out, c_gate_msa) + + if self.infer_conditional: + self.previous_residual_even = x - ori_x + self.derivative_approximation(self.cache_even, "previous_residual", self.previous_residual_even) + else: + self.previous_residual_odd = x - ori_x + self.derivative_approximation(self.cache_odd, "previous_residual", self.previous_residual_odd) + return x + + def infer_using_cache(self, x): + if self.infer_conditional: + x += self.taylor_formula(self.cache_even["previous_residual"]) + else: + x += self.taylor_formula(self.cache_odd["previous_residual"]) + return x + + def clear(self): + if self.previous_residual_even is not None: + self.previous_residual_even = self.previous_residual_even.cpu() + if self.previous_residual_odd is not None: + self.previous_residual_odd = self.previous_residual_odd.cpu() + if self.previous_e0_even is not None: + self.previous_e0_even = self.previous_e0_even.cpu() + if self.previous_e0_odd is not None: + self.previous_e0_odd = self.previous_e0_odd.cpu() + + for key in self.cache_even: + if self.cache_even[key] is not None and hasattr(self.cache_even[key], "cpu"): + self.cache_even[key] = self.cache_even[key].cpu() + self.cache_even.clear() + + for key in self.cache_odd: + if self.cache_odd[key] is not None and hasattr(self.cache_odd[key], "cpu"): + self.cache_odd[key] = self.cache_odd[key].cpu() + self.cache_odd.clear() + + self.previous_residual_even = None + self.previous_residual_odd = None + self.previous_e0_even = None + self.previous_e0_odd = None + + torch.cuda.empty_cache() + + +class WanTransformerInferFirstBlock(WanTransformerInferCaching): + def __init__(self, config): + super().__init__(config) + + self.residual_diff_threshold = config["residual_diff_threshold"] + self.prev_first_block_residual_even = None + self.prev_remaining_blocks_residual_even = None + self.prev_first_block_residual_odd = None + self.prev_remaining_blocks_residual_odd = None + self.downsample_factor = self.config["downsample_factor"] + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + ori_x = x.clone() + x = super().infer_block(weights.blocks[0], grid_sizes, embed, x, embed0, seq_lens, freqs, context) + x_residual = x - ori_x + del ori_x + + if self.infer_conditional: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(x_residual) + self.scheduler.caching_records[index] = should_calc + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(x) + + else: + index = self.scheduler.step_index + caching_records_2 = self.scheduler.caching_records_2 + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(x_residual) + self.scheduler.caching_records_2[index] = should_calc + + if caching_records_2[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(x) + + if self.config["enable_cfg"]: + self.switch_status() + + return x + + def calculate_should_calc(self, x_residual): + diff = 1.0 + x_residual_downsampled = x_residual[..., :: self.downsample_factor] + if self.infer_conditional: + if self.prev_first_block_residual_even is not None: + t1 = self.prev_first_block_residual_even + t2 = x_residual_downsampled + mean_diff = (t1 - t2).abs().mean() + mean_t1 = t1.abs().mean() + diff = (mean_diff / mean_t1).item() + self.prev_first_block_residual_even = x_residual_downsampled + else: + if self.prev_first_block_residual_odd is not None: + t1 = self.prev_first_block_residual_odd + t2 = x_residual_downsampled + mean_diff = (t1 - t2).abs().mean() + mean_t1 = t1.abs().mean() + diff = (mean_diff / mean_t1).item() + self.prev_first_block_residual_odd = x_residual_downsampled + + return diff >= self.residual_diff_threshold + + def infer_calculating(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + ori_x = x.clone() + + for block_idx in range(1, self.blocks_num): + x = super().infer_block( + weights.blocks[block_idx], + grid_sizes, + embed, + x, + embed0, + seq_lens, + freqs, + context, + ) + + if self.infer_conditional: + self.prev_remaining_blocks_residual_even = x - ori_x + else: + self.prev_remaining_blocks_residual_odd = x - ori_x + del ori_x + + return x + + def infer_using_cache(self, x): + if self.infer_conditional: + return x.add_(self.prev_remaining_blocks_residual_even) + else: + return x.add_(self.prev_remaining_blocks_residual_odd) + + def clear(self): + self.prev_first_block_residual_even = None + self.prev_remaining_blocks_residual_even = None + self.prev_first_block_residual_odd = None + self.prev_remaining_blocks_residual_odd = None + torch.cuda.empty_cache() + + +class WanTransformerInferDualBlock(WanTransformerInferCaching): + def __init__(self, config): + super().__init__(config) + + self.residual_diff_threshold = config["residual_diff_threshold"] + self.prev_front_blocks_residual_even = None + self.prev_middle_blocks_residual_even = None + self.prev_front_blocks_residual_odd = None + self.prev_middle_blocks_residual_odd = None + self.downsample_factor = self.config["downsample_factor"] + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + ori_x = x.clone() + for block_idx in range(0, 5): + x = super().infer_block( + weights.blocks[block_idx], + grid_sizes, + embed, + x, + embed0, + seq_lens, + freqs, + context, + ) + x_residual = x - ori_x + del ori_x + + if self.infer_conditional: + index = self.scheduler.step_index + caching_records = self.scheduler.caching_records + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(x_residual) + self.scheduler.caching_records[index] = should_calc + + if caching_records[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(x) + + else: + index = self.scheduler.step_index + caching_records_2 = self.scheduler.caching_records_2 + if index <= self.scheduler.infer_steps - 1: + should_calc = self.calculate_should_calc(x_residual) + self.scheduler.caching_records_2[index] = should_calc + + if caching_records_2[index] or self.must_calc(index): + x = self.infer_calculating(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x = self.infer_using_cache(x) + + for block_idx in range(self.blocks_num - 5, self.blocks_num): + x = super().infer_block( + weights.blocks[block_idx], + grid_sizes, + embed, + x, + embed0, + seq_lens, + freqs, + context, + ) + + if self.config["enable_cfg"]: + self.switch_status() + + return x + + def calculate_should_calc(self, x_residual): + diff = 1.0 + x_residual_downsampled = x_residual[..., :: self.downsample_factor] + if self.infer_conditional: + if self.prev_front_blocks_residual_even is not None: + t1 = self.prev_front_blocks_residual_even + t2 = x_residual_downsampled + mean_diff = (t1 - t2).abs().mean() + mean_t1 = t1.abs().mean() + diff = (mean_diff / mean_t1).item() + self.prev_front_blocks_residual_even = x_residual_downsampled + else: + if self.prev_front_blocks_residual_odd is not None: + t1 = self.prev_front_blocks_residual_odd + t2 = x_residual_downsampled + mean_diff = (t1 - t2).abs().mean() + mean_t1 = t1.abs().mean() + diff = (mean_diff / mean_t1).item() + self.prev_front_blocks_residual_odd = x_residual_downsampled + + return diff >= self.residual_diff_threshold + + def infer_calculating(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + ori_x = x.clone() + + for block_idx in range(5, self.blocks_num - 5): + x = super().infer_block( + weights.blocks[block_idx], + grid_sizes, + embed, + x, + embed0, + seq_lens, + freqs, + context, + ) + + if self.infer_conditional: + self.prev_middle_blocks_residual_even = x - ori_x + else: + self.prev_middle_blocks_residual_odd = x - ori_x + del ori_x + + return x + + def infer_using_cache(self, x): + if self.infer_conditional: + return x.add_(self.prev_middle_blocks_residual_even) + else: + return x.add_(self.prev_middle_blocks_residual_odd) + + def clear(self): + self.prev_front_blocks_residual_even = None + self.prev_middle_blocks_residual_even = None + self.prev_front_blocks_residual_odd = None + self.prev_middle_blocks_residual_odd = None + torch.cuda.empty_cache() + + +class WanTransformerInferDynamicBlock(WanTransformerInferCaching): + def __init__(self, config): + super().__init__(config) + self.residual_diff_threshold = config["residual_diff_threshold"] + self.downsample_factor = self.config["downsample_factor"] + + self.block_in_cache_even = {i: None for i in range(self.blocks_num)} + self.block_residual_cache_even = {i: None for i in range(self.blocks_num)} + self.block_in_cache_odd = {i: None for i in range(self.blocks_num)} + self.block_residual_cache_odd = {i: None for i in range(self.blocks_num)} + + def infer(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context): + for block_idx in range(self.blocks_num): + x = self.infer_block(weights.blocks[block_idx], grid_sizes, embed, x, embed0, seq_lens, freqs, context, block_idx) + + return x + + def infer_block(self, weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context, block_idx): + ori_x = x.clone() + + if self.infer_conditional: + if self.block_in_cache_even[block_idx] is not None: + should_calc = self.are_two_tensor_similar(self.block_in_cache_even[block_idx], x) + if should_calc or self.must_calc(block_idx): + x = super().infer_block(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x += self.block_residual_cache_even[block_idx] + + else: + x = super().infer_block(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + self.block_in_cache_even[block_idx] = ori_x + self.block_residual_cache_even[block_idx] = x - ori_x + del ori_x + + else: + if self.block_in_cache_odd[block_idx] is not None: + should_calc = self.are_two_tensor_similar(self.block_in_cache_odd[block_idx], x) + if should_calc or self.must_calc(block_idx): + x = super().infer_block(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + else: + x += self.block_residual_cache_odd[block_idx] + + else: + x = super().infer_block(weights, grid_sizes, embed, x, embed0, seq_lens, freqs, context) + + self.block_in_cache_odd[block_idx] = ori_x + self.block_residual_cache_odd[block_idx] = x - ori_x + del ori_x + + return x + + def are_two_tensor_similar(self, t1, t2): + diff = 1.0 + t1_downsampled = t1[..., :: self.downsample_factor] + t2_downsampled = t2[..., :: self.downsample_factor] + mean_diff = (t1_downsampled - t2_downsampled).abs().mean() + mean_t1 = t1_downsampled.abs().mean() + diff = (mean_diff / mean_t1).item() + + return diff >= self.residual_diff_threshold + + def clear(self): + for i in range(self.blocks_num): + self.block_in_cache_even[i] = None + self.block_residual_cache_even[i] = None + self.block_in_cache_odd[i] = None + self.block_residual_cache_odd[i] = None + torch.cuda.empty_cache() + + +class WanTransformerInferMagCaching(WanTransformerInferCaching): + def __init__(self, config): + super().__init__(config) + self.magcache_thresh = config["magcache_thresh"] + self.K = config["magcache_K"] + self.retention_ratio = config["magcache_retention_ratio"] + self.mag_ratios = np.array(config["magcache_ratios"]) + # {True: cond_param, False: uncond_param} + self.accumulated_err = {True: 0.0, False: 0.0} + self.accumulated_steps = {True: 0, False: 0} + self.accumulated_ratio = {True: 1.0, False: 1.0} + self.residual_cache = {True: None, False: None} + # calibration args + self.norm_ratio = [[1.0], [1.0]] # mean of magnitude ratio + self.norm_std = [[0.0], [0.0]] # std of magnitude ratio + self.cos_dis = [[0.0], [0.0]] # cosine distance of residual features + + def infer_main_blocks(self, weights, pre_infer_out): + skip_forward = False + step_index = self.scheduler.step_index + infer_condition = self.scheduler.infer_condition + + if self.config["magcache_calibration"]: + skip_forward = False + else: + if step_index >= int(self.config["infer_steps"] * self.retention_ratio): + # conditional and unconditional in one list + cur_mag_ratio = self.mag_ratios[0][step_index] if infer_condition else self.mag_ratios[1][step_index] + # magnitude ratio between current step and the cached step + self.accumulated_ratio[infer_condition] = self.accumulated_ratio[infer_condition] * cur_mag_ratio + self.accumulated_steps[infer_condition] += 1 # skip steps plus 1 + # skip error of current steps + cur_skip_err = np.abs(1 - self.accumulated_ratio[infer_condition]) + # accumulated error of multiple steps + self.accumulated_err[infer_condition] += cur_skip_err + + if self.accumulated_err[infer_condition] < self.magcache_thresh and self.accumulated_steps[infer_condition] <= self.K: + skip_forward = True + else: + self.accumulated_err[infer_condition] = 0 + self.accumulated_steps[infer_condition] = 0 + self.accumulated_ratio[infer_condition] = 1.0 + + if not skip_forward: + x = self.infer_calculating(weights, pre_infer_out) + else: + x = self.infer_using_cache(pre_infer_out.x) + + if self.clean_cuda_cache: + torch.cuda.empty_cache() + + return x + + def infer_calculating(self, weights, pre_infer_out): + step_index = self.scheduler.step_index + infer_condition = self.scheduler.infer_condition + + ori_x = pre_infer_out.x.clone() + + x = super().infer_main_blocks(weights, pre_infer_out) + + previous_residual = x - ori_x + if self.config["cpu_offload"]: + previous_residual = previous_residual.cpu() + + if self.config["magcache_calibration"] and step_index >= 1: + norm_ratio = ((previous_residual.norm(dim=-1) / self.residual_cache[infer_condition].norm(dim=-1)).mean()).item() + norm_std = (previous_residual.norm(dim=-1) / self.residual_cache[infer_condition].norm(dim=-1)).std().item() + cos_dis = (1 - F.cosine_similarity(previous_residual, self.residual_cache[infer_condition], dim=-1, eps=1e-8)).mean().item() + _index = int(not infer_condition) + self.norm_ratio[_index].append(round(norm_ratio, 5)) + self.norm_std[_index].append(round(norm_std, 5)) + self.cos_dis[_index].append(round(cos_dis, 5)) + print(f"time: {step_index}, infer_condition: {infer_condition}, norm_ratio: {norm_ratio}, norm_std: {norm_std}, cos_dis: {cos_dis}") + + self.residual_cache[infer_condition] = previous_residual + + if self.config["cpu_offload"]: + ori_x = ori_x.to("cpu") + del ori_x + torch.cuda.empty_cache() + gc.collect() + return x + + def infer_using_cache(self, x): + residual_x = self.residual_cache[self.scheduler.infer_condition] + x.add_(residual_x.to(AI_DEVICE)) + return x + + def clear(self): + self.accumulated_err = {True: 0.0, False: 0.0} + self.accumulated_steps = {True: 0, False: 0} + self.accumulated_ratio = {True: 1.0, False: 1.0} + self.residual_cache = {True: None, False: None} + if self.config["magcache_calibration"]: + print("norm ratio") + print(self.norm_ratio) + print("norm std") + print(self.norm_std) + print("cos_dis") + print(self.cos_dis) + + def save_json(filename, obj_list): + with open(filename + ".json", "w") as f: + json.dump(obj_list, f) + + save_json("wan2_1_mag_ratio", self.norm_ratio) + save_json("wan2_1_mag_std", self.norm_std) + save_json("wan2_1_cos_dis", self.cos_dis) + torch.cuda.empty_cache() diff --git a/lightx2v/models/networks/wan/infer/matrix_game2/posemb_layers.py b/lightx2v/models/networks/wan/infer/matrix_game2/posemb_layers.py new file mode 100644 index 0000000..549ea44 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/matrix_game2/posemb_layers.py @@ -0,0 +1,291 @@ +from typing import List, Tuple, Union + +import torch + + +def _to_tuple(x, dim=2): + if isinstance(x, int): + return (x,) * dim + elif len(x) == dim: + return x + else: + raise ValueError(f"Expected length {dim} or int, but got {x}") + + +def get_meshgrid_nd(start, *args, dim=2): + """ + Get n-D meshgrid with start, stop and num. + + Args: + start (int or tuple): If len(args) == 0, start is num; If len(args) == 1, start is start, args[0] is stop, + step is 1; If len(args) == 2, start is start, args[0] is stop, args[1] is num. For n-dim, start/stop/num + should be int or n-tuple. If n-tuple is provided, the meshgrid will be stacked following the dim order in + n-tuples. + *args: See above. + dim (int): Dimension of the meshgrid. Defaults to 2. + + Returns: + grid (np.ndarray): [dim, ...] + """ + if len(args) == 0: + # start is grid_size + num = _to_tuple(start, dim=dim) + start = (0,) * dim + stop = num + elif len(args) == 1: + # start is start, args[0] is stop, step is 1 + start = _to_tuple(start, dim=dim) + stop = _to_tuple(args[0], dim=dim) + num = [stop[i] - start[i] for i in range(dim)] + elif len(args) == 2: + # start is start, args[0] is stop, args[1] is num + start = _to_tuple(start, dim=dim) # Left-Top eg: 12,0 + stop = _to_tuple(args[0], dim=dim) # Right-Bottom eg: 20,32 + num = _to_tuple(args[1], dim=dim) # Target Size eg: 32,124 + else: + raise ValueError(f"len(args) should be 0, 1 or 2, but got {len(args)}") + + # PyTorch implement of np.linspace(start[i], stop[i], num[i], endpoint=False) + axis_grid = [] + for i in range(dim): + a, b, n = start[i], stop[i], num[i] + g = torch.linspace(a, b, n + 1, dtype=torch.float32, device=torch.cuda.current_device())[:n] + axis_grid.append(g) + grid = torch.meshgrid(*axis_grid, indexing="ij") # dim x [W, H, D] + grid = torch.stack(grid, dim=0) # [dim, W, H, D] + + return grid + + +################################################################################# +# Rotary Positional Embedding Functions # +################################################################################# +# https://github.com/meta-llama/llama/blob/be327c427cc5e89cc1d3ab3d3fec4484df771245/llama/model.py#L80 + + +def reshape_for_broadcast( + freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor]], + x: torch.Tensor, + head_first=False, +): + """ + Reshape frequency tensor for broadcasting it with another tensor. + + This function reshapes the frequency tensor to have the same shape as the target tensor 'x' + for the purpose of broadcasting the frequency tensor during element-wise operations. + + Notes: + When using FlashMHAModified, head_first should be False. + When using Attention, head_first should be True. + + Args: + freqs_cis (Union[torch.Tensor, Tuple[torch.Tensor]]): Frequency tensor to be reshaped. + x (torch.Tensor): Target tensor for broadcasting compatibility. + head_first (bool): head dimension first (except batch dim) or not. + + Returns: + torch.Tensor: Reshaped frequency tensor. + + Raises: + AssertionError: If the frequency tensor doesn't match the expected shape. + AssertionError: If the target tensor 'x' doesn't have the expected number of dimensions. + """ + ndim = x.ndim + assert 0 <= 1 < ndim + + if isinstance(freqs_cis, tuple): + # freqs_cis: (cos, sin) in real space + if head_first: + assert freqs_cis[0].shape == ( + x.shape[-2], + x.shape[-1], + ), f"freqs_cis shape {freqs_cis[0].shape} does not match x shape {x.shape}" + shape = [d if i == ndim - 2 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)] + else: + # assert freqs_cis[0].shape == ( + # x.shape[1], + # x.shape[-1], + # ), f"freqs_cis shape {freqs_cis[0].shape} does not match x shape {x.shape}" + # shape = [d if i == 1 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)] + shape = [1, freqs_cis[0].shape[0], 1, freqs_cis[0].shape[1]] + return freqs_cis[0].view(*shape), freqs_cis[1].view(*shape) + else: + # freqs_cis: values in complex space + if head_first: + assert freqs_cis.shape == ( + x.shape[-2], + x.shape[-1], + ), f"freqs_cis shape {freqs_cis.shape} does not match x shape {x.shape}" + shape = [d if i == ndim - 2 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)] + else: + assert freqs_cis.shape == ( + x.shape[1], + x.shape[-1], + ), f"freqs_cis shape {freqs_cis.shape} does not match x shape {x.shape}" + shape = [d if i == 1 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)] + return freqs_cis.view(*shape) + + +def rotate_half(x): + x_real, x_imag = x.float().reshape(*x.shape[:-1], -1, 2).unbind(-1) # [B, S, H, D//2] + return torch.stack([-x_imag, x_real], dim=-1).flatten(3) + + +def apply_rotary_emb( + xq: torch.Tensor, + xk: torch.Tensor, + freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]], + head_first: bool = False, + start_offset: int = 0, +) -> Tuple[torch.Tensor, torch.Tensor]: + """ + Apply rotary embeddings to input tensors using the given frequency tensor. + + This function applies rotary embeddings to the given query 'xq' and key 'xk' tensors using the provided + frequency tensor 'freqs_cis'. The input tensors are reshaped as complex numbers, and the frequency tensor + is reshaped for broadcasting compatibility. The resulting tensors contain rotary embeddings and are + returned as real tensors. + + Args: + xq (torch.Tensor): Query tensor to apply rotary embeddings. [B, S, H, D] + xk (torch.Tensor): Key tensor to apply rotary embeddings. [B, S, H, D] + freqs_cis (torch.Tensor or tuple): Precomputed frequency tensor for complex exponential. + head_first (bool): head dimension first (except batch dim) or not. + + Returns: + Tuple[torch.Tensor, torch.Tensor]: Tuple of modified query tensor and key tensor with rotary embeddings. + + """ + # print(freqs_cis[0].shape, xq.shape, xk.shape) + xk_out = None + assert isinstance(freqs_cis, tuple) + if isinstance(freqs_cis, tuple): + cos, sin = reshape_for_broadcast(freqs_cis, xq, head_first) # [S, D] + cos, sin = cos.to(xq.device), sin.to(xq.device) + # real * cos - imag * sin + # imag * cos + real * sin + xq_out = (xq.float() * cos[:, start_offset : start_offset + xq.shape[1], :, :] + rotate_half(xq.float()) * sin[:, start_offset : start_offset + xq.shape[1], :, :]).type_as(xq) + xk_out = (xk.float() * cos[:, start_offset : start_offset + xk.shape[1], :, :] + rotate_half(xk.float()) * sin[:, start_offset : start_offset + xk.shape[1], :, :]).type_as(xk) + else: + # view_as_complex will pack [..., D/2, 2](real) to [..., D/2](complex) + xq_ = torch.view_as_complex(xq.float().reshape(*xq.shape[:-1], -1, 2)) # [B, S, H, D//2] + freqs_cis = reshape_for_broadcast(freqs_cis, xq_, head_first).to(xq.device) # [S, D//2] --> [1, S, 1, D//2] + # (real, imag) * (cos, sin) = (real * cos - imag * sin, imag * cos + real * sin) + # view_as_real will expand [..., D/2](complex) to [..., D/2, 2](real) + xq_out = torch.view_as_real(xq_ * freqs_cis).flatten(3).type_as(xq) + xk_ = torch.view_as_complex(xk.float().reshape(*xk.shape[:-1], -1, 2)) # [B, S, H, D//2] + xk_out = torch.view_as_real(xk_ * freqs_cis).flatten(3).type_as(xk) + + return xq_out, xk_out + + +def get_nd_rotary_pos_embed( + rope_dim_list, + start, + *args, + theta=10000.0, + use_real=False, + theta_rescale_factor: Union[float, List[float]] = 1.0, + interpolation_factor: Union[float, List[float]] = 1.0, +): + """ + This is a n-d version of precompute_freqs_cis, which is a RoPE for tokens with n-d structure. + + Args: + rope_dim_list (list of int): Dimension of each rope. len(rope_dim_list) should equal to n. + sum(rope_dim_list) should equal to head_dim of attention layer. + start (int | tuple of int | list of int): If len(args) == 0, start is num; If len(args) == 1, start is start, + args[0] is stop, step is 1; If len(args) == 2, start is start, args[0] is stop, args[1] is num. + *args: See above. + theta (float): Scaling factor for frequency computation. Defaults to 10000.0. + use_real (bool): If True, return real part and imaginary part separately. Otherwise, return complex numbers. + Some libraries such as TensorRT does not support complex64 data type. So it is useful to provide a real + part and an imaginary part separately. + theta_rescale_factor (float): Rescale factor for theta. Defaults to 1.0. + + Returns: + pos_embed (torch.Tensor): [HW, D/2] + """ + + grid = get_meshgrid_nd(start, *args, dim=len(rope_dim_list)) # [3, W, H, D] / [2, W, H] + + if isinstance(theta_rescale_factor, int) or isinstance(theta_rescale_factor, float): + theta_rescale_factor = [theta_rescale_factor] * len(rope_dim_list) + elif isinstance(theta_rescale_factor, list) and len(theta_rescale_factor) == 1: + theta_rescale_factor = [theta_rescale_factor[0]] * len(rope_dim_list) + assert len(theta_rescale_factor) == len(rope_dim_list), "len(theta_rescale_factor) should equal to len(rope_dim_list)" + + if isinstance(interpolation_factor, int) or isinstance(interpolation_factor, float): + interpolation_factor = [interpolation_factor] * len(rope_dim_list) + elif isinstance(interpolation_factor, list) and len(interpolation_factor) == 1: + interpolation_factor = [interpolation_factor[0]] * len(rope_dim_list) + assert len(interpolation_factor) == len(rope_dim_list), "len(interpolation_factor) should equal to len(rope_dim_list)" + + # use 1/ndim of dimensions to encode grid_axis + embs = [] + for i in range(len(rope_dim_list)): + emb = get_1d_rotary_pos_embed( + rope_dim_list[i], + grid[i].reshape(-1), + theta, + use_real=use_real, + theta_rescale_factor=theta_rescale_factor[i], + interpolation_factor=interpolation_factor[i], + ) # 2 x [WHD, rope_dim_list[i]] + embs.append(emb) + + if use_real: + cos = torch.cat([emb[0] for emb in embs], dim=1) # (WHD, D/2) + sin = torch.cat([emb[1] for emb in embs], dim=1) # (WHD, D/2) + return cos, sin + else: + emb = torch.cat(embs, dim=1) # (WHD, D/2) + return emb + + +def get_1d_rotary_pos_embed( + dim: int, + pos: Union[torch.FloatTensor, int], + theta: float = 10000.0, + use_real: bool = False, + theta_rescale_factor: float = 1.0, + interpolation_factor: float = 1.0, +) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]: + """ + Precompute the frequency tensor for complex exponential (cis) with given dimensions. + (Note: `cis` means `cos + i * sin`, where i is the imaginary unit.) + + This function calculates a frequency tensor with complex exponential using the given dimension 'dim' + and the end index 'end'. The 'theta' parameter scales the frequencies. + The returned tensor contains complex values in complex64 data type. + + Args: + dim (int): Dimension of the frequency tensor. + pos (int or torch.FloatTensor): Position indices for the frequency tensor. [S] or scalar + theta (float, optional): Scaling factor for frequency computation. Defaults to 10000.0. + use_real (bool, optional): If True, return real part and imaginary part separately. + Otherwise, return complex numbers. + theta_rescale_factor (float, optional): Rescale factor for theta. Defaults to 1.0. + + Returns: + freqs_cis: Precomputed frequency tensor with complex exponential. [S, D/2] + freqs_cos, freqs_sin: Precomputed frequency tensor with real and imaginary parts separately. [S, D] + """ + if isinstance(pos, int): + pos = torch.arange(pos, device=torch.cuda.current_device()).float() + + # proposed by reddit user bloc97, to rescale rotary embeddings to longer sequence length without fine-tuning + # has some connection to NTK literature + if theta_rescale_factor != 1.0: + theta *= theta_rescale_factor ** (dim / (dim - 2)) + + freqs = 1.0 / (theta ** (torch.arange(0, dim, 2, device=torch.cuda.current_device())[: (dim // 2)].float() / dim)) # [D/2] + # assert interpolation_factor == 1.0, f"interpolation_factor: {interpolation_factor}" + freqs = torch.outer(pos * interpolation_factor, freqs) # [S, D/2] + if use_real: + freqs_cos = freqs.cos().repeat_interleave(2, dim=1) # [S, D] + freqs_sin = freqs.sin().repeat_interleave(2, dim=1) # [S, D] + return freqs_cos, freqs_sin + else: + freqs_cis = torch.polar(torch.ones_like(freqs), freqs) # complex64 # [S, D/2] + return freqs_cis diff --git a/lightx2v/models/networks/wan/infer/matrix_game2/pre_infer.py b/lightx2v/models/networks/wan/infer/matrix_game2/pre_infer.py new file mode 100644 index 0000000..d828476 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/matrix_game2/pre_infer.py @@ -0,0 +1,98 @@ +import torch + +from lightx2v.models.networks.wan.infer.module_io import GridOutput +from lightx2v.models.networks.wan.infer.self_forcing.pre_infer import WanSFPreInfer, WanSFPreInferModuleOutput, sinusoidal_embedding_1d +from lightx2v.utils.envs import * + + +def cond_current(conditional_dict, current_start_frame, num_frame_per_block, replace=None, mode="universal"): + new_cond = {} + + new_cond["cond_concat"] = conditional_dict["image_encoder_output"]["cond_concat"][:, :, current_start_frame : current_start_frame + num_frame_per_block] + new_cond["visual_context"] = conditional_dict["image_encoder_output"]["visual_context"] + if replace: + if current_start_frame == 0: + last_frame_num = 1 + 4 * (num_frame_per_block - 1) + else: + last_frame_num = 4 * num_frame_per_block + final_frame = 1 + 4 * (current_start_frame + num_frame_per_block - 1) + if mode != "templerun": + conditional_dict["text_encoder_output"]["mouse_cond"][:, -last_frame_num + final_frame : final_frame] = replace["mouse"][None, None, :].repeat(1, last_frame_num, 1) + conditional_dict["text_encoder_output"]["keyboard_cond"][:, -last_frame_num + final_frame : final_frame] = replace["keyboard"][None, None, :].repeat(1, last_frame_num, 1) + if mode != "templerun": + new_cond["mouse_cond"] = conditional_dict["text_encoder_output"]["mouse_cond"][:, : 1 + 4 * (current_start_frame + num_frame_per_block - 1)] + new_cond["keyboard_cond"] = conditional_dict["text_encoder_output"]["keyboard_cond"][:, : 1 + 4 * (current_start_frame + num_frame_per_block - 1)] + + if replace: + return new_cond, conditional_dict + else: + return new_cond + + +# @amp.autocast(enabled=False) +def rope_params(max_seq_len, dim, theta=10000): + assert dim % 2 == 0 + freqs = torch.outer(torch.arange(max_seq_len), 1.0 / torch.pow(theta, torch.arange(0, dim, 2).to(torch.float64).div(dim))) + freqs = torch.polar(torch.ones_like(freqs), freqs) + return freqs + + +class WanMtxg2PreInfer(WanSFPreInfer): + def __init__(self, config): + super().__init__(config) + d = config["dim"] // config["num_heads"] + self.freqs = torch.cat([rope_params(1024, d - 4 * (d // 6)), rope_params(1024, 2 * (d // 6)), rope_params(1024, 2 * (d // 6))], dim=1).to(torch.device("cuda")) + self.dim = config["dim"] + + def img_emb(self, weights, x): + x = weights.img_emb_0.apply(x) + x = weights.img_emb_1.apply(x.squeeze(0)) + x = torch.nn.functional.gelu(x, approximate="none") + x = weights.img_emb_3.apply(x) + x = weights.img_emb_4.apply(x) + x = x.unsqueeze(0) + return x + + @torch.no_grad() + def infer(self, weights, inputs, kv_start=0, kv_end=0): + x = self.scheduler.latents_input + t = self.scheduler.timestep_input + current_start_frame = self.scheduler.seg_index * self.scheduler.num_frame_per_block + + if self.config["streaming"]: + current_actions = inputs["current_actions"] + current_conditional_dict, _ = cond_current(inputs, current_start_frame, self.scheduler.num_frame_per_block, replace=current_actions, mode=self.config["mode"]) + else: + current_conditional_dict = cond_current(inputs, current_start_frame, self.scheduler.num_frame_per_block, mode=self.config["mode"]) + cond_concat = current_conditional_dict["cond_concat"] + visual_context = current_conditional_dict["visual_context"] + + x = torch.cat([x.unsqueeze(0), cond_concat], dim=1) + + # embeddings + x = weights.patch_embedding.apply(x) + grid_sizes_t, grid_sizes_h, grid_sizes_w = torch.tensor(x.shape[2:], dtype=torch.long) + grid_sizes = GridOutput(tensor=torch.tensor([[grid_sizes_t, grid_sizes_h, grid_sizes_w]], dtype=torch.int32, device=x.device), tuple=(grid_sizes_t, grid_sizes_h, grid_sizes_w)) + + x = x.flatten(2).transpose(1, 2) # B FHW C' + seq_lens = torch.tensor([u.size(0) for u in x], dtype=torch.long, device=torch.device("cuda")) + assert seq_lens[0] <= 15 * 1 * 880 + + embed_tmp = sinusoidal_embedding_1d(self.freq_dim, t.flatten()).type_as(x) # torch.Size([3, 256]) + embed = self.time_embedding(weights, embed_tmp) # torch.Size([3, 1536]) + embed0 = self.time_projection(weights, embed).unflatten(dim=0, sizes=t.shape) + + # context + context_lens = None + context = self.img_emb(weights, visual_context) + + return WanSFPreInferModuleOutput( + embed=embed, + grid_sizes=grid_sizes, + x=x.squeeze(0), + embed0=embed0.squeeze(0), + seq_lens=seq_lens, + freqs=self.freqs, + context=context[0], + conditional_dict=current_conditional_dict, + ) diff --git a/lightx2v/models/networks/wan/infer/matrix_game2/transformer_infer.py b/lightx2v/models/networks/wan/infer/matrix_game2/transformer_infer.py new file mode 100644 index 0000000..4cb1cdc --- /dev/null +++ b/lightx2v/models/networks/wan/infer/matrix_game2/transformer_infer.py @@ -0,0 +1,672 @@ +import math + +import torch +from einops import rearrange + +try: + import flash_attn_interface + + FLASH_ATTN_3_AVAILABLE = True +except ImportError: + try: + from flash_attn import flash_attn_func + + FLASH_ATTN_3_AVAILABLE = False + + except ImportError: + FLASH_ATTN_3_AVAILABLE = False + + +from lightx2v.models.networks.wan.infer.matrix_game2.posemb_layers import apply_rotary_emb, get_nd_rotary_pos_embed +from lightx2v.models.networks.wan.infer.self_forcing.transformer_infer import WanSFTransformerInfer, causal_rope_apply + + +class WanMtxg2TransformerInfer(WanSFTransformerInfer): + def __init__(self, config): + super().__init__(config) + self._initialize_kv_cache_mouse_and_keyboard(self.device, self.dtype) + self.sink_size = 0 + self.vae_time_compression_ratio = config["action_config"]["vae_time_compression_ratio"] + self.windows_size = config["action_config"]["windows_size"] + self.patch_size = config["action_config"]["patch_size"] + + self.rope_theta = config["action_config"]["rope_theta"] + self.enable_keyboard = config["action_config"]["enable_keyboard"] + self.heads_num = config["action_config"]["heads_num"] + self.hidden_size = config["action_config"]["hidden_size"] + self.img_hidden_size = config["action_config"]["img_hidden_size"] + self.keyboard_dim_in = config["action_config"]["keyboard_dim_in"] + self.keyboard_hidden_dim = config["action_config"]["keyboard_hidden_dim"] + + self.qk_norm = config["action_config"]["qk_norm"] + self.qkv_bias = config["action_config"]["qkv_bias"] + self.rope_dim_list = config["action_config"]["rope_dim_list"] + self.freqs_cos, self.freqs_sin = self.get_rotary_pos_embed(7500, self.patch_size[1], self.patch_size[2], 64, self.rope_dim_list, start_offset=0) + + self.enable_mouse = config["action_config"]["enable_mouse"] + if self.enable_mouse: + self.mouse_dim_in = config["action_config"]["mouse_dim_in"] + self.mouse_hidden_dim = config["action_config"]["mouse_hidden_dim"] + self.mouse_qk_dim_list = config["action_config"]["mouse_qk_dim_list"] + + def get_rotary_pos_embed(self, video_length, height, width, head_dim, rope_dim_list=None, start_offset=0): + target_ndim = 3 + ndim = 5 - 2 + + latents_size = [video_length + start_offset, height, width] + + if isinstance(self.patch_size, int): + assert all(s % self.patch_size == 0 for s in latents_size), f"Latent size(last {ndim} dimensions) should be divisible by patch size({self.patch_size}), but got {latents_size}." + rope_sizes = [s // self.patch_size for s in latents_size] + elif isinstance(self.patch_size, list): + assert all(s % self.patch_size[idx] == 0 for idx, s in enumerate(latents_size)), ( + f"Latent size(last {ndim} dimensions) should be divisible by patch size({self.patch_size}), but got {latents_size}." + ) + rope_sizes = [s // self.patch_size[idx] for idx, s in enumerate(latents_size)] + + if len(rope_sizes) != target_ndim: + rope_sizes = [1] * (target_ndim - len(rope_sizes)) + rope_sizes # time axis + + if rope_dim_list is None: + rope_dim_list = [head_dim // target_ndim for _ in range(target_ndim)] + assert sum(rope_dim_list) == head_dim, "sum(rope_dim_list) should equal to head_dim of attention layer" + freqs_cos, freqs_sin = get_nd_rotary_pos_embed( + rope_dim_list, + rope_sizes, + theta=self.rope_theta, + use_real=True, + theta_rescale_factor=1, + ) + return freqs_cos[-video_length * rope_sizes[1] * rope_sizes[2] // self.patch_size[0] :], freqs_sin[-video_length * rope_sizes[1] * rope_sizes[2] // self.patch_size[0] :] + + def _initialize_kv_cache(self, dtype, device): + """ + Initialize a Per-GPU KV cache for the Wan model. + """ + kv_cache1 = [] + if self.local_attn_size != -1: + # Use the local attention size to compute the KV cache size + kv_cache_size = self.local_attn_size * self.frame_seq_length + else: + # Use the default KV cache size + kv_cache_size = 32760 + for _ in range(self.num_transformer_blocks): + kv_cache1.append( + { + "k": torch.zeros((kv_cache_size, 12, 128)).to(dtype).to(device), + "v": torch.zeros((kv_cache_size, 12, 128)).to(dtype).to(device), + "global_end_index": 0, + "local_end_index": 0, + } + ) + + self.kv_cache1_default = kv_cache1 + + def _initialize_kv_cache_mouse_and_keyboard(self, device, dtype): + """ + Initialize a Per-GPU KV cache for the Wan model. + """ + kv_cache_mouse = [] + kv_cache_keyboard = [] + if self.local_attn_size != -1: + kv_cache_size = self.local_attn_size + else: + kv_cache_size = 15 * 1 + for _ in range(self.num_transformer_blocks): + kv_cache_keyboard.append( + { + "k": torch.zeros([1, kv_cache_size, 16, 64], dtype=dtype, device=device), + "v": torch.zeros([1, kv_cache_size, 16, 64], dtype=dtype, device=device), + "global_end_index": torch.tensor([0], dtype=torch.long, device=device), + "local_end_index": torch.tensor([0], dtype=torch.long, device=device), + } + ) + kv_cache_mouse.append( + { + "k": torch.zeros([self.frame_seq_length, kv_cache_size, 16, 64], dtype=dtype, device=device), + "v": torch.zeros([self.frame_seq_length, kv_cache_size, 16, 64], dtype=dtype, device=device), + "global_end_index": torch.tensor([0], dtype=torch.long, device=device), + "local_end_index": torch.tensor([0], dtype=torch.long, device=device), + } + ) + self.kv_cache_keyboard = kv_cache_keyboard + self.kv_cache_mouse = kv_cache_mouse + + def infer_self_attn_with_kvcache(self, phase, grid_sizes, x, seq_lens, freqs, shift_msa, scale_msa): + if hasattr(phase, "smooth_norm1_weight"): + norm1_weight = (1 + scale_msa.squeeze()) * phase.smooth_norm1_weight.tensor + norm1_bias = shift_msa.squeeze() * phase.smooth_norm1_bias.tensor + else: + norm1_weight = 1 + scale_msa.squeeze() + norm1_bias = shift_msa.squeeze() + + norm1_out = phase.norm1.apply(x) + + if self.sensitive_layer_dtype != self.infer_dtype: + norm1_out = norm1_out.to(self.sensitive_layer_dtype) + + norm1_out.mul_(norm1_weight[0:1, :]).add_(norm1_bias[0:1, :]) + + if self.sensitive_layer_dtype != self.infer_dtype: # False + norm1_out = norm1_out.to(self.infer_dtype) + + s, n, d = *norm1_out.shape[:1], self.num_heads, self.head_dim + + q0 = phase.self_attn_q.apply(norm1_out) + k0 = phase.self_attn_k.apply(norm1_out) + + q = phase.self_attn_norm_q.apply(q0).view(s, n, d) + k = phase.self_attn_norm_k.apply(k0).view(s, n, d) + v = phase.self_attn_v.apply(norm1_out).view(s, n, d) + + seg_index = self.scheduler.seg_index + + frame_seqlen = math.prod(grid_sizes[0][1:]).item() + current_start = seg_index * self.num_frame_per_block * self.frame_seq_length + current_start_frame = current_start // frame_seqlen + + q = causal_rope_apply(q.unsqueeze(0), grid_sizes, freqs, start_frame=current_start_frame).type_as(v)[0] + k = causal_rope_apply(k.unsqueeze(0), grid_sizes, freqs, start_frame=current_start_frame).type_as(v)[0] + + current_end = current_start + q.shape[0] + sink_tokens = self.sink_size * frame_seqlen + + kv_cache_size = self.kv_cache1[self.block_idx]["k"].shape[0] + num_new_tokens = q.shape[0] + + if (current_end > self.kv_cache1[self.block_idx]["global_end_index"]) and (num_new_tokens + self.kv_cache1[self.block_idx]["local_end_index"] > kv_cache_size): + num_evicted_tokens = num_new_tokens + self.kv_cache1[self.block_idx]["local_end_index"] - kv_cache_size + num_rolled_tokens = self.kv_cache1[self.block_idx]["local_end_index"] - num_evicted_tokens - sink_tokens + + self.kv_cache1[self.block_idx]["k"][sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache1[self.block_idx]["k"][ + sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + self.kv_cache1[self.block_idx]["v"][sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache1[self.block_idx]["v"][ + sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + + # Insert the new keys/values at the end + local_end_index = self.kv_cache1[self.block_idx]["local_end_index"] + current_end - self.kv_cache1[self.block_idx]["global_end_index"] - num_evicted_tokens + local_start_index = local_end_index - num_new_tokens + self.kv_cache1[self.block_idx]["k"][local_start_index:local_end_index] = k + self.kv_cache1[self.block_idx]["v"][local_start_index:local_end_index] = v + else: + # Assign new keys/values directly up to current_end + local_end_index = self.kv_cache1[self.block_idx]["local_end_index"] + current_end - self.kv_cache1[self.block_idx]["global_end_index"] + local_start_index = local_end_index - num_new_tokens + self.kv_cache1[self.block_idx]["k"][local_start_index:local_end_index] = k + self.kv_cache1[self.block_idx]["v"][local_start_index:local_end_index] = v + + attn_k = self.kv_cache1[self.block_idx]["k"][max(0, local_end_index - self.max_attention_size) : local_end_index] + attn_v = self.kv_cache1[self.block_idx]["v"][max(0, local_end_index - self.max_attention_size) : local_end_index] + + self.kv_cache1[self.block_idx]["local_end_index"] = local_end_index + self.kv_cache1[self.block_idx]["global_end_index"] = current_end + + k_lens = torch.empty_like(seq_lens).fill_(attn_k.size(0)) + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len(q, k_lens=k_lens) + + if self.clean_cuda_cache: + del freqs_i, norm1_out, norm1_weight, norm1_bias + torch.cuda.empty_cache() + + if self.config["seq_parallel"]: + attn_out = phase.self_attn_1_parallel.apply( + q=q, + k=attn_k, + v=attn_v, + img_qkv_len=q.shape[0], + cu_seqlens_qkv=cu_seqlens_q, + attention_module=phase.self_attn_1, + seq_p_group=self.seq_p_group, + model_cls=self.config["model_cls"], + ) + else: + attn_out = phase.self_attn_1.apply( + q=q, + k=attn_k, + v=attn_v, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=attn_k.size(0), + model_cls=self.config["model_cls"], + ) + + y = phase.self_attn_o.apply(attn_out) + + if self.clean_cuda_cache: + del q, k, v, attn_out + torch.cuda.empty_cache() + + return y + + def infer_cross_attn_with_kvcache(self, phase, x, context, y_out, gate_msa): + num_frames = gate_msa.shape[0] + frame_seqlen = x.shape[0] // gate_msa.shape[0] + + x.add_((y_out.unflatten(dim=0, sizes=(num_frames, frame_seqlen)) * gate_msa).flatten(0, 1)) + norm3_out = phase.norm3.apply(x) + + n, d = self.num_heads, self.head_dim + q = phase.cross_attn_q.apply(norm3_out) + q = phase.cross_attn_norm_q.apply(q).view(-1, n, d) + + if not self.crossattn_cache[self.block_idx]["is_init"]: + self.crossattn_cache[self.block_idx]["is_init"] = True + k = phase.cross_attn_k.apply(context) + k = phase.cross_attn_norm_k.apply(k).view(-1, n, d) + v = phase.cross_attn_v.apply(context) + v = v.view(-1, n, d) + self.crossattn_cache[self.block_idx]["k"] = k + self.crossattn_cache[self.block_idx]["v"] = v + else: + k = self.crossattn_cache[self.block_idx]["k"] + v = self.crossattn_cache[self.block_idx]["v"] + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len( + q, + k_lens=torch.tensor([k.size(0)], dtype=torch.int32, device=k.device), + ) + + attn_out = phase.cross_attn_1.apply( + q=q, + k=k, + v=v, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k.size(0), + model_cls=self.config["model_cls"], + ) + + attn_out = phase.cross_attn_o.apply(attn_out) + if self.clean_cuda_cache: + del q, k, v, norm3_out, context, context_img + torch.cuda.empty_cache() + + return x, attn_out + + def infer_action_model(self, phase, x, grid_sizes, seq_lens, mouse_condition=None, keyboard_condition=None, is_causal=False, use_rope_keyboard=True): + tt, th, tw = grid_sizes + current_start = self.scheduler.seg_index * self.num_frame_per_block + start_frame = current_start + B, N_frames, C = keyboard_condition.shape + assert tt * th * tw == x.shape[0] + assert ((N_frames - 1) + self.vae_time_compression_ratio) % self.vae_time_compression_ratio == 0 + N_feats = int((N_frames - 1) / self.vae_time_compression_ratio) + 1 + + # Defined freqs_cis early so it's available for both mouse and keyboard + freqs_cis = (self.freqs_cos, self.freqs_sin) + + cond1 = N_feats == tt + cond2 = is_causal and not self.kv_cache_mouse + cond3 = (N_frames - 1) // self.vae_time_compression_ratio + 1 == current_start + self.num_frame_per_block + assert (cond1 and ((cond2) or not is_causal)) or (cond3 and is_causal) + + x = x.unsqueeze(0) + if self.enable_mouse and mouse_condition is not None: + hidden_states = rearrange(x, "B (T S) C -> (B S) T C", T=tt, S=th * tw) # 65*272*480 -> 17*(272//16)*(480//16) -> 8670 + B, N_frames, C = mouse_condition.shape + else: + hidden_states = x + + pad_t = self.vae_time_compression_ratio * self.windows_size + if self.enable_mouse and mouse_condition is not None: + pad = mouse_condition[:, 0:1, :].expand(-1, pad_t, -1) + mouse_condition = torch.cat([pad, mouse_condition], dim=1) + if is_causal and self.kv_cache_mouse is not None: + mouse_condition = mouse_condition[:, self.vae_time_compression_ratio * (N_feats - self.num_frame_per_block - self.windows_size) + pad_t :, :] + group_mouse = [ + mouse_condition[:, self.vae_time_compression_ratio * (i - self.windows_size) + pad_t : i * self.vae_time_compression_ratio + pad_t, :] for i in range(self.num_frame_per_block) + ] + else: + group_mouse = [mouse_condition[:, self.vae_time_compression_ratio * (i - self.windows_size) + pad_t : i * self.vae_time_compression_ratio + pad_t, :] for i in range(N_feats)] + + group_mouse = torch.stack(group_mouse, dim=1) + + S = th * tw + group_mouse = group_mouse.unsqueeze(-1).expand(B, self.num_frame_per_block, pad_t, C, S) + group_mouse = group_mouse.permute(0, 4, 1, 2, 3).reshape(B * S, self.num_frame_per_block, pad_t * C) + + group_mouse = torch.cat([hidden_states, group_mouse], dim=-1) + + # mouse_mlp + # 注释:Batch维度不可避免,因此用 torch.nn.functional + group_mouse = torch.nn.functional.linear(group_mouse, phase.mouse_mlp_0.weight.T, phase.mouse_mlp_0.bias) + group_mouse = torch.nn.functional.gelu(group_mouse, approximate="tanh") + group_mouse = torch.nn.functional.linear(group_mouse, phase.mouse_mlp_2.weight.T, phase.mouse_mlp_2.bias) + group_mouse = torch.nn.functional.layer_norm(group_mouse, (group_mouse.shape[-1],), phase.mouse_mlp_3.weight.T, phase.mouse_mlp_3.bias, 1e-5) + + # qkvc + mouse_qkv = torch.nn.functional.linear(group_mouse, phase.t_qkv.weight.T) + + q0, k0, v = rearrange(mouse_qkv, "B L (K H D) -> K B L H D", K=3, H=self.heads_num) # BHW F H C # torch.Size([880, 3, 16, 64]) + q = q0 * torch.rsqrt(q0.pow(2).mean(dim=-1, keepdim=True) + 1e-6) + k = k0 * torch.rsqrt(k0.pow(2).mean(dim=-1, keepdim=True) + 1e-6) + + q, k = apply_rotary_emb(q, k, freqs_cis, start_offset=start_frame, head_first=False) + + ## TODO: adding cache here + if is_causal: + current_end = current_start + q.shape[1] + + assert q.shape[1] == self.num_frame_per_block + sink_size = 0 + max_attention_size = self.local_attn_size + sink_tokens = sink_size * 1 + kv_cache_size = self.kv_cache_mouse[self.block_idx]["k"].shape[1] + num_new_tokens = q.shape[1] + + if (current_end > self.kv_cache_mouse[self.block_idx]["global_end_index"].item()) and (num_new_tokens + self.kv_cache_mouse[self.block_idx]["local_end_index"].item() > kv_cache_size): + num_evicted_tokens = num_new_tokens + self.kv_cache_mouse[self.block_idx]["local_end_index"].item() - kv_cache_size + num_rolled_tokens = self.kv_cache_mouse[self.block_idx]["local_end_index"].item() - num_evicted_tokens - sink_tokens + self.kv_cache_mouse[self.block_idx]["k"][:, sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache_mouse[self.block_idx]["k"][ + :, sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + self.kv_cache_mouse[self.block_idx]["v"][:, sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache_mouse[self.block_idx]["v"][ + :, sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + # Insert the new keys/values at the end + local_end_index = self.kv_cache_mouse[self.block_idx]["local_end_index"].item() + current_end - self.kv_cache_mouse[self.block_idx]["global_end_index"].item() - num_evicted_tokens + local_start_index = local_end_index - num_new_tokens + else: + local_end_index = self.kv_cache_mouse[self.block_idx]["local_end_index"].item() + current_end - self.kv_cache_mouse[self.block_idx]["global_end_index"].item() + local_start_index = local_end_index - num_new_tokens + + self.kv_cache_mouse[self.block_idx]["k"][:, local_start_index:local_end_index] = k + self.kv_cache_mouse[self.block_idx]["v"][:, local_start_index:local_end_index] = v + + attn_k = self.kv_cache_mouse[self.block_idx]["k"][:, max(0, local_end_index - max_attention_size) : local_end_index] + attn_v = self.kv_cache_mouse[self.block_idx]["v"][:, max(0, local_end_index - max_attention_size) : local_end_index] + + attn = flash_attn_interface.flash_attn_func( + q, + attn_k, + attn_v, + ) + + self.kv_cache_mouse[self.block_idx]["global_end_index"].fill_(current_end) + self.kv_cache_mouse[self.block_idx]["local_end_index"].fill_(local_end_index) + else: + attn = flash_attn_func( + q, + k, + v, + ) + # Compute cu_squlens and max_seqlen for flash attention + # qk norm + attn = rearrange(attn, "(b S) T h d -> b (T S) (h d)", b=B) + hidden_states = rearrange(x, "(B S) T C -> B (T S) C", B=B) + + attn = phase.proj_mouse.apply(attn[0]).unsqueeze(0) + hidden_states = hidden_states + attn + + if self.enable_keyboard and keyboard_condition is not None: + pad = keyboard_condition[:, 0:1, :].expand(-1, pad_t, -1) + keyboard_condition = torch.cat([pad, keyboard_condition], dim=1) + if is_causal and self.kv_cache_keyboard is not None: + keyboard_condition = keyboard_condition[ + :, self.vae_time_compression_ratio * (N_feats - self.num_frame_per_block - self.windows_size) + pad_t :, : + ] # keyboard_condition[:, self.vae_time_compression_ratio*(start_frame - self.windows_size) + pad_t:start_frame * self.vae_time_compression_ratio + pad_t,:] + + keyboard_condition = phase.keyboard_embed_0.apply(keyboard_condition[0]) + keyboard_condition = torch.nn.functional.silu(keyboard_condition) + keyboard_condition = phase.keyboard_embed_2.apply(keyboard_condition).unsqueeze(0) + group_keyboard = [ + keyboard_condition[:, self.vae_time_compression_ratio * (i - self.windows_size) + pad_t : i * self.vae_time_compression_ratio + pad_t, :] for i in range(self.num_frame_per_block) + ] + else: + keyboard_condition = phase.keyboard_embed_0.apply(keyboard_condition[0]) + keyboard_condition = torch.nn.functional.silu(keyboard_condition) + keyboard_condition = phase.keyboard_embed_2.apply(keyboard_condition).unsqueeze(0) + group_keyboard = [keyboard_condition[:, self.vae_time_compression_ratio * (i - self.windows_size) + pad_t : i * self.vae_time_compression_ratio + pad_t, :] for i in range(N_feats)] + + group_keyboard = torch.stack(group_keyboard, dim=1) # B F RW C + group_keyboard = group_keyboard.reshape(shape=(group_keyboard.shape[0], group_keyboard.shape[1], -1)) + + # apply cross attn + mouse_q = phase.mouse_attn_q.apply(hidden_states[0]).unsqueeze(0) + keyboard_kv = phase.keyboard_attn_kv.apply(group_keyboard[0]).unsqueeze(0) + + B, L, HD = mouse_q.shape + D = HD // self.heads_num + q = mouse_q.view(B, L, self.heads_num, D) + + B, L, KHD = keyboard_kv.shape + k, v = keyboard_kv.view(B, L, 2, self.heads_num, D).permute(2, 0, 1, 3, 4) + + # Compute cu_squlens and max_seqlen for flash attention + # qk norm + q = q * torch.rsqrt(q.pow(2).mean(dim=-1, keepdim=True) + 1e-6) + k = k * torch.rsqrt(k.pow(2).mean(dim=-1, keepdim=True) + 1e-6) + + S = th * tw + assert S == 880 + # position embed + if use_rope_keyboard: + B, TS, H, D = q.shape + T_ = TS // S + q = q.view(B, T_, S, H, D).transpose(1, 2).reshape(B * S, T_, H, D) + q, k = apply_rotary_emb(q, k, freqs_cis, start_offset=start_frame, head_first=False) + + k1, k2, k3, k4 = k.shape + k = k.expand(S, k2, k3, k4) + v = v.expand(S, k2, k3, k4) + + if is_causal: + current_end = current_start + k.shape[1] + assert k.shape[1] == self.num_frame_per_block + sink_size = 0 + max_attention_size = self.local_attn_size + sink_tokens = sink_size * 1 + kv_cache_size = self.kv_cache_keyboard[self.block_idx]["k"].shape[1] + num_new_tokens = k.shape[1] + + if (current_end > self.kv_cache_keyboard[self.block_idx]["global_end_index"].item()) and ( + num_new_tokens + self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() > kv_cache_size + ): + num_evicted_tokens = num_new_tokens + self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() - kv_cache_size + num_rolled_tokens = self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() - num_evicted_tokens - sink_tokens + + self.kv_cache_keyboard[self.block_idx]["k"][:, sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache_keyboard[self.block_idx]["k"][ + :, sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + self.kv_cache_keyboard[self.block_idx]["v"][:, sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache_keyboard[self.block_idx]["v"][ + :, sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + + # Insert the new keys/values at the end + local_end_index = ( + self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() + current_end - self.kv_cache_keyboard[self.block_idx]["global_end_index"].item() - num_evicted_tokens + ) + local_start_index = local_end_index - num_new_tokens + else: + local_end_index = self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() + current_end - self.kv_cache_keyboard[self.block_idx]["global_end_index"].item() + local_start_index = local_end_index - num_new_tokens + + assert k.shape[0] == 880 # BS == 1 or the cache should not be saved/ load method should be modified + self.kv_cache_keyboard[self.block_idx]["k"][:, local_start_index:local_end_index] = k[:1] + self.kv_cache_keyboard[self.block_idx]["v"][:, local_start_index:local_end_index] = v[:1] + + if FLASH_ATTN_3_AVAILABLE: + attn_k = self.kv_cache_keyboard[self.block_idx]["k"][:, max(0, local_end_index - max_attention_size) : local_end_index].repeat(S, 1, 1, 1) + attn_v = self.kv_cache_keyboard[self.block_idx]["v"][:, max(0, local_end_index - max_attention_size) : local_end_index].repeat(S, 1, 1, 1) + attn = flash_attn_interface.flash_attn_func( + q, + attn_k, + attn_v, + ) + else: + attn = flash_attn_func( + q, + self.kv_cache_keyboard[self.block_idx]["k"][max(0, local_end_index - max_attention_size) : local_end_index].repeat(S, 1, 1, 1), + self.kv_cache_keyboard[self.block_idx]["v"][max(0, local_end_index - max_attention_size) : local_end_index].repeat(S, 1, 1, 1), + ) + + self.kv_cache_keyboard[self.block_idx]["global_end_index"].fill_(current_end) + self.kv_cache_keyboard[self.block_idx]["local_end_index"].fill_(local_end_index) + else: + attn = flash_attn_func( + q, + k, + v, + causal=False, + ) + attn = rearrange(attn, "(B S) T H D -> B (T S) (H D)", S=S) + + else: + if is_causal: + current_start = start_frame + current_end = current_start + k.shape[1] + assert k.shape[1] == self.num_frame_per_block + sink_size = 0 + local_attn_size = self.local_attn_size + max_attention_size = self.local_attn_size + sink_tokens = sink_size * 1 + kv_cache_size = self.kv_cache_keyboard[self.block_idx]["k"].shape[1] + num_new_tokens = k.shape[1] + + if (current_end > self.kv_cache_keyboard[self.block_idx]["global_end_index"].item()) and ( + num_new_tokens + self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() > kv_cache_size + ): + num_evicted_tokens = num_new_tokens + self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() - kv_cache_size + num_rolled_tokens = self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() - num_evicted_tokens - sink_tokens + self.kv_cache_keyboard[self.block_idx]["k"][:, sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache_keyboard[self.block_idx]["k"][ + :, sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + self.kv_cache_keyboard[self.block_idx]["v"][:, sink_tokens : sink_tokens + num_rolled_tokens] = self.kv_cache_keyboard[self.block_idx]["v"][ + :, sink_tokens + num_evicted_tokens : sink_tokens + num_evicted_tokens + num_rolled_tokens + ].clone() + # Insert the new keys/values at the end + local_end_index = ( + self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() + current_end - self.kv_cache_keyboard[self.block_idx]["global_end_index"].item() - num_evicted_tokens + ) + local_start_index = local_end_index - num_new_tokens + else: + local_end_index = self.kv_cache_keyboard[self.block_idx]["local_end_index"].item() + current_end - self.kv_cache_keyboard[self.block_idx]["global_end_index"].item() + local_start_index = local_end_index - num_new_tokens + self.kv_cache_keyboard[self.block_idx]["k"][:, local_start_index:local_end_index] = k + self.kv_cache_keyboard[self.block_idx]["v"][:, local_start_index:local_end_index] = v + attn = flash_attn_func( + q, + self.kv_cache_keyboard[self.block_idx]["k"][:, max(0, local_end_index - max_attention_size) : local_end_index], + self.kv_cache_keyboard[self.block_idx]["v"][:, max(0, local_end_index - max_attention_size) : local_end_index], + ) + self.kv_cache_keyboard[self.block_idx]["global_end_index"].fill_(current_end) + self.kv_cache_keyboard[self.block_idx]["local_end_index"].fill_(local_end_index) + else: + attn = flash_attn_func( + q, + k, + v, + ) + attn = rearrange(attn, "B L H D -> B L (H D)") + attn = phase.proj_keyboard.apply(attn[0]).unsqueeze(0) + hidden_states = hidden_states + attn + hidden_states = hidden_states.squeeze(0) + + return hidden_states + + def infer_ffn(self, phase, x, c_shift_msa, c_scale_msa): + num_frames = c_shift_msa.shape[0] + frame_seqlen = x.shape[0] // c_shift_msa.shape[0] + + x = phase.norm2.apply(x).unsqueeze(0) + x = x.unflatten(dim=1, sizes=(num_frames, frame_seqlen)) + + c_scale_msa = c_scale_msa.unsqueeze(0) + c_shift_msa = c_shift_msa.unsqueeze(0) + x = x * (1 + c_scale_msa) + c_shift_msa + x = x.flatten(1, 2).squeeze(0) + + y = phase.ffn_0.apply(x) + y = torch.nn.functional.gelu(y, approximate="tanh") + y = phase.ffn_2.apply(y) + + return y + + def post_process(self, x, y, c_gate_msa, pre_infer_out=None): + x = x + y * c_gate_msa[0] + x = x.squeeze(0) + return x + + def infer_block_witch_kvcache(self, block, x, pre_infer_out): + if hasattr(block.compute_phases[0], "before_proj"): + x = block.compute_phases[0].before_proj.apply(x) + pre_infer_out.x + + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = self.pre_process( + block.compute_phases[0].modulation, + pre_infer_out.embed0, + ) + + y_out = self.infer_self_attn_with_kvcache( + block.compute_phases[0], + pre_infer_out.grid_sizes.tensor, + x, + pre_infer_out.seq_lens, + pre_infer_out.freqs, + shift_msa, + scale_msa, + ) + + x, attn_out = self.infer_cross_attn_with_kvcache( + block.compute_phases[1], + x, + pre_infer_out.context, + y_out, + gate_msa, + ) + x = x + attn_out + + if len(block.compute_phases) == 4: + if self.config["mode"] != "templerun": + x = self.infer_action_model( + phase=block.compute_phases[2], + x=x, + grid_sizes=pre_infer_out.grid_sizes.tensor[0], + seq_lens=pre_infer_out.seq_lens, + mouse_condition=pre_infer_out.conditional_dict["mouse_cond"], + keyboard_condition=pre_infer_out.conditional_dict["keyboard_cond"], + is_causal=True, + use_rope_keyboard=True, + ) + else: + x = self.infer_action_model( + phase=block.compute_phases[2], + x=x, + grid_sizes=pre_infer_out.grid_sizes.tensor[0], + seq_lens=pre_infer_out.seq_lens, + keyboard_condition=pre_infer_out.conditional_dict["keyboard_cond"], + is_causal=True, + use_rope_keyboard=True, + ) + y = self.infer_ffn(block.compute_phases[3], x, c_shift_msa, c_scale_msa) + + elif len(block.compute_phases) == 3: + y = self.infer_ffn(block.compute_phases[2], x, c_shift_msa, c_scale_msa) + + x = self.post_process(x, y, c_gate_msa, pre_infer_out) + + return x + + def infer_non_blocks(self, weights, x, e): + num_frames = e.shape[0] + frame_seqlen = x.shape[0] // e.shape[0] + e = e.unsqueeze(0).unsqueeze(2) + + x = weights.norm.apply(x).unsqueeze(0) + x = x.unflatten(dim=1, sizes=(num_frames, frame_seqlen)) + + modulation = weights.head_modulation.tensor + e = (modulation.unsqueeze(1) + e).chunk(2, dim=2) + + x = x * (1 + e[1]) + e[0] + + x = torch.nn.functional.linear(x, weights.head.weight.T, weights.head.bias) + + if self.clean_cuda_cache: + del e + torch.cuda.empty_cache() + + return x diff --git a/lightx2v/models/networks/wan/infer/module_io.py b/lightx2v/models/networks/wan/infer/module_io.py new file mode 100644 index 0000000..f0aa416 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/module_io.py @@ -0,0 +1,21 @@ +from dataclasses import dataclass, field +from typing import Any, Dict + +import torch + + +@dataclass +class GridOutput: + tensor: torch.Tensor + tuple: tuple + + +@dataclass +class WanPreInferModuleOutput: + embed: torch.Tensor + grid_sizes: GridOutput + x: torch.Tensor + embed0: torch.Tensor + context: torch.Tensor + adapter_args: Dict[str, Any] = field(default_factory=dict) + conditional_dict: Dict[str, Any] = field(default_factory=dict) diff --git a/lightx2v/models/networks/wan/infer/offload/__init__.py b/lightx2v/models/networks/wan/infer/offload/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/wan/infer/offload/transformer_infer.py b/lightx2v/models/networks/wan/infer/offload/transformer_infer.py new file mode 100644 index 0000000..a43a999 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/offload/transformer_infer.py @@ -0,0 +1,154 @@ +import torch + +from lightx2v.common.offload.manager import WeightAsyncStreamManager +from lightx2v.models.networks.wan.infer.transformer_infer import WanTransformerInfer +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +class WanOffloadTransformerInfer(WanTransformerInfer): + def __init__(self, config): + super().__init__(config) + if self.config.get("cpu_offload", False): + offload_granularity = self.config.get("offload_granularity", "block") + if offload_granularity == "block": + self.infer_func = self.infer_with_blocks_offload + elif offload_granularity == "phase": + self.infer_func = self.infer_with_phases_offload + self.phase_params = { + "shift_msa": None, + "scale_msa": None, + "gate_msa": None, + "c_shift_msa": None, + "c_scale_msa": None, + "c_gate_msa": None, + "y_out": None, + "attn_out": None, + "y": None, + } + elif offload_granularity == "model": + self.infer_func = self.infer_without_offload + + if offload_granularity != "model": + self.offload_manager = WeightAsyncStreamManager(offload_granularity=offload_granularity) + self.lazy_load = self.config.get("lazy_load", False) + if self.lazy_load and offload_granularity == "phase": + self.offload_manager.init_lazy_load(num_workers=self.config.get("num_disk_workers", 4)) + + def infer_with_blocks_offload(self, blocks, x, pre_infer_out): + for block_idx in range(len(blocks)): + self.block_idx = block_idx + if self.offload_manager.need_init_first_buffer: + self.offload_manager.init_first_buffer(blocks) + + self.offload_manager.prefetch_weights((block_idx + 1) % len(blocks), blocks) + with torch_device_module.stream(self.offload_manager.compute_stream): + x = self.infer_block(self.offload_manager.cuda_buffers[0], x, pre_infer_out) + + self.offload_manager.swap_blocks() + + if self.clean_cuda_cache: + del ( + pre_infer_out.embed0, + pre_infer_out.context, + ) + torch_device_module.empty_cache() + + return x + + def infer_with_phases_offload(self, blocks, x, pre_infer_out): + for block_idx in range(len(blocks)): + self.block_idx = block_idx + if self.lazy_load: + next_prefetch = (block_idx + 1) % len(blocks) + self.offload_manager.start_prefetch_block(next_prefetch) + + x = self.infer_phases(block_idx, blocks, x, pre_infer_out) + if self.clean_cuda_cache: + del ( + self.phase_params["attn_out"], + self.phase_params["y_out"], + self.phase_params["y"], + ) + torch_device_module.empty_cache() + + if self.clean_cuda_cache: + self.clear_offload_params(pre_infer_out) + + return x + + def infer_phases(self, block_idx, blocks, x, pre_infer_out): + for phase_idx in range(self.phases_num): + if self.offload_manager.need_init_first_buffer: + self.offload_manager.init_first_buffer(blocks) + next_block_idx = (block_idx + 1) % len(blocks) if phase_idx == self.phases_num - 1 else block_idx + next_phase_idx = (phase_idx + 1) % self.phases_num + if self.lazy_load: + if phase_idx == self.phases_num - 1: + self.offload_manager.swap_cpu_buffers() + self.offload_manager.prefetch_phase(next_block_idx, next_phase_idx, blocks) + with torch_device_module.stream(self.offload_manager.compute_stream): + x = self.infer_phase(phase_idx, self.offload_manager.cuda_buffers[phase_idx], x, pre_infer_out) + + self.offload_manager.swap_phases() + + return x + + def infer_phase(self, cur_phase_idx, cur_phase, x, pre_infer_out): + if cur_phase_idx == 0: + if hasattr(cur_phase, "before_proj") and cur_phase.before_proj.weight is not None: + x = cur_phase.before_proj.apply(x) + pre_infer_out.x + ( + self.phase_params["shift_msa"], + self.phase_params["scale_msa"], + self.phase_params["gate_msa"], + self.phase_params["c_shift_msa"], + self.phase_params["c_scale_msa"], + self.phase_params["c_gate_msa"], + ) = self.pre_process(cur_phase.modulation, pre_infer_out.embed0) + self.phase_params["y_out"] = self.infer_self_attn( + cur_phase, + x, + self.phase_params["shift_msa"], + self.phase_params["scale_msa"], + ) + elif cur_phase_idx == 1: + x, self.phase_params["attn_out"] = self.infer_cross_attn( + cur_phase, + x, + pre_infer_out.context, + self.phase_params["y_out"], + self.phase_params["gate_msa"], + ) + elif cur_phase_idx == 2: + self.phase_params["y"] = self.infer_ffn( + cur_phase, + x, + self.phase_params["attn_out"], + self.phase_params["c_shift_msa"], + self.phase_params["c_scale_msa"], + ) + x = self.post_process(x, self.phase_params["y"], self.phase_params["c_gate_msa"], pre_infer_out) + if hasattr(cur_phase, "after_proj"): + pre_infer_out.adapter_args["hints"].append(cur_phase.after_proj.apply(x)) + elif cur_phase_idx == 3: + x = self.infer_post_adapter(cur_phase, x, pre_infer_out) + return x + + def clear_offload_params(self, pre_infer_out): + del ( + self.phase_params["shift_msa"], + self.phase_params["scale_msa"], + self.phase_params["gate_msa"], + ) + del ( + self.phase_params["c_shift_msa"], + self.phase_params["c_scale_msa"], + self.phase_params["c_gate_msa"], + ) + del ( + pre_infer_out.embed0, + pre_infer_out.context, + ) + torch_device_module.empty_cache() diff --git a/lightx2v/models/networks/wan/infer/post_infer.py b/lightx2v/models/networks/wan/infer/post_infer.py new file mode 100644 index 0000000..2610d6a --- /dev/null +++ b/lightx2v/models/networks/wan/infer/post_infer.py @@ -0,0 +1,31 @@ +import math + +import torch + +from lightx2v.utils.envs import * + + +class WanPostInfer: + def __init__(self, config): + self.out_dim = config["out_dim"] + self.patch_size = (1, 2, 2) + self.clean_cuda_cache = config.get("clean_cuda_cache", False) + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + @torch.no_grad() + def infer(self, x, pre_infer_out): + x = self.unpatchify(x, pre_infer_out.grid_sizes.tuple) + + if self.clean_cuda_cache: + torch.cuda.empty_cache() + + return [u.float() for u in x] + + def unpatchify(self, x, grid_sizes): + c = self.out_dim + x = x[: math.prod(grid_sizes)].view(*grid_sizes, *self.patch_size, c) + x = torch.einsum("fhwpqrc->cfphqwr", x) + x = x.reshape(c, *[i * j for i, j in zip(grid_sizes, self.patch_size)]) + return [x] diff --git a/lightx2v/models/networks/wan/infer/pre_infer.py b/lightx2v/models/networks/wan/infer/pre_infer.py new file mode 100644 index 0000000..3587716 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/pre_infer.py @@ -0,0 +1,124 @@ +import torch + +from lightx2v.utils.envs import * + +from .module_io import GridOutput, WanPreInferModuleOutput +from .utils import guidance_scale_embedding, sinusoidal_embedding_1d + + +class WanPreInfer: + def __init__(self, config): + assert (config["dim"] % config["num_heads"]) == 0 and (config["dim"] // config["num_heads"]) % 2 == 0 + self.config = config + self.clean_cuda_cache = config.get("clean_cuda_cache", False) + self.task = config["task"] + self.freq_dim = config["freq_dim"] + self.dim = config["dim"] + self.enable_dynamic_cfg = config.get("enable_dynamic_cfg", False) + self.cfg_scale = config.get("cfg_scale", 4.0) + self.infer_dtype = GET_DTYPE() + self.sensitive_layer_dtype = GET_SENSITIVE_DTYPE() + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + + @torch.no_grad() + def infer(self, weights, inputs, kv_start=0, kv_end=0): + x = self.scheduler.latents + t = self.scheduler.timestep_input + + if self.scheduler.infer_condition: + context = inputs["text_encoder_output"]["context"] + else: + context = inputs["text_encoder_output"]["context_null"] + + if self.task in ["i2v", "flf2v", "animate", "s2v"]: + if self.config.get("use_image_encoder", True): + clip_fea = inputs["image_encoder_output"]["clip_encoder_out"] + + if self.config.get("changing_resolution", False): + image_encoder = inputs["image_encoder_output"]["vae_encoder_out"][self.scheduler.changing_resolution_index] + else: + image_encoder = inputs["image_encoder_output"]["vae_encoder_out"] + + if image_encoder is not None: + frame_seq_length = (image_encoder.size(2) // 2) * (image_encoder.size(3) // 2) + if kv_end - kv_start >= frame_seq_length: # 如果是CausalVid, image_encoder取片段 + idx_s = kv_start // frame_seq_length + idx_e = kv_end // frame_seq_length + image_encoder = image_encoder[:, idx_s:idx_e, :, :] + y = image_encoder + x = torch.cat([x, y], dim=0) + + # embeddings + x = weights.patch_embedding.apply(x.unsqueeze(0)) + + if hasattr(self, "after_patch_embedding"): + x, motion_vec = self.after_patch_embedding(weights, x, inputs["image_encoder_output"]["pose_latents"], inputs["image_encoder_output"]["face_pixel_values"]) + else: + motion_vec = None + + grid_sizes_t, grid_sizes_h, grid_sizes_w = x.shape[2:] + x = x.flatten(2).transpose(1, 2).contiguous() + # seq_lens = torch.tensor(x.size(1), dtype=torch.int32, device=x.device).unsqueeze(0) + + embed = sinusoidal_embedding_1d(self.freq_dim, t.flatten()) + if self.enable_dynamic_cfg: + s = torch.tensor([self.cfg_scale], dtype=torch.float32, device=x.device) + cfg_embed = guidance_scale_embedding(s, embedding_dim=256, cfg_range=(1.0, 6.0), target_range=1000.0, dtype=torch.float32).type_as(x) + cfg_embed = weights.cfg_cond_proj_1.apply(cfg_embed) + cfg_embed = torch.nn.functional.silu(cfg_embed) + cfg_embed = weights.cfg_cond_proj_2.apply(cfg_embed) + embed = embed + cfg_embed + if self.sensitive_layer_dtype != self.infer_dtype: + embed = weights.time_embedding_0.apply(embed.to(self.sensitive_layer_dtype)) + else: + embed = weights.time_embedding_0.apply(embed) + embed = torch.nn.functional.silu(embed) + embed = weights.time_embedding_2.apply(embed) + embed0 = torch.nn.functional.silu(embed) + + embed0 = weights.time_projection_1.apply(embed0).unflatten(1, (6, self.dim)) + + # text embeddings + if self.sensitive_layer_dtype != self.infer_dtype: + out = weights.text_embedding_0.apply(context.squeeze(0).to(self.sensitive_layer_dtype)) + else: + out = weights.text_embedding_0.apply(context.squeeze(0)) + out = torch.nn.functional.gelu(out, approximate="tanh") + context = weights.text_embedding_2.apply(out) + if self.clean_cuda_cache: + del out + torch.cuda.empty_cache() + + if self.task in ["i2v", "flf2v", "animate"] and self.config.get("use_image_encoder", True): + if self.task == "flf2v": + _, n, d = clip_fea.shape + clip_fea = clip_fea.view(2 * n, d) + clip_fea = clip_fea + weights.emb_pos.tensor.squeeze() + context_clip = weights.proj_0.apply(clip_fea) + if self.clean_cuda_cache: + del clip_fea + torch.cuda.empty_cache() + context_clip = weights.proj_1.apply(context_clip) + context_clip = torch.nn.functional.gelu(context_clip, approximate="none") + if self.clean_cuda_cache: + torch.cuda.empty_cache() + context_clip = weights.proj_3.apply(context_clip) + context_clip = weights.proj_4.apply(context_clip) + context = torch.concat([context_clip, context], dim=0) + + if self.clean_cuda_cache: + if self.config.get("use_image_encoder", True): + del context_clip + torch.cuda.empty_cache() + + grid_sizes = GridOutput(tensor=torch.tensor([[grid_sizes_t, grid_sizes_h, grid_sizes_w]], dtype=torch.int32, device=x.device), tuple=(grid_sizes_t, grid_sizes_h, grid_sizes_w)) + return WanPreInferModuleOutput( + embed=embed, + grid_sizes=grid_sizes, + x=x.squeeze(0), + embed0=embed0.squeeze(0), + context=context, + adapter_args={"motion_vec": motion_vec}, + ) diff --git a/lightx2v/models/networks/wan/infer/self_forcing/__init__.py b/lightx2v/models/networks/wan/infer/self_forcing/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/networks/wan/infer/self_forcing/pre_infer.py b/lightx2v/models/networks/wan/infer/self_forcing/pre_infer.py new file mode 100644 index 0000000..52a43f9 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/self_forcing/pre_infer.py @@ -0,0 +1,114 @@ +from dataclasses import dataclass, field +from typing import Any, Dict + +import torch + +from lightx2v.models.networks.wan.infer.module_io import GridOutput +from lightx2v.models.networks.wan.infer.pre_infer import WanPreInfer +from lightx2v.utils.envs import * +from lightx2v_platform.base.global_var import AI_DEVICE + + +def sinusoidal_embedding_1d(dim, position): + # preprocess + assert dim % 2 == 0 + half = dim // 2 + position = position.type(torch.float64) + + # calculation + sinusoid = torch.outer(position, torch.pow(10000, -torch.arange(half).to(position).div(half))) + x = torch.cat([torch.cos(sinusoid), torch.sin(sinusoid)], dim=1) + return x + + +def rope_params(max_seq_len, dim, theta=10000): + assert dim % 2 == 0 + freqs = torch.outer(torch.arange(max_seq_len), 1.0 / torch.pow(theta, torch.arange(0, dim, 2).to(torch.float64).div(dim))) + freqs = torch.polar(torch.ones_like(freqs), freqs) + return freqs + + +@dataclass +class WanSFPreInferModuleOutput: + embed: torch.Tensor + grid_sizes: GridOutput + x: torch.Tensor + embed0: torch.Tensor + seq_lens: torch.Tensor + freqs: torch.Tensor + context: torch.Tensor + conditional_dict: Dict[str, Any] = field(default_factory=dict) + + +class WanSFPreInfer(WanPreInfer): + def __init__(self, config): + super().__init__(config) + d = config["dim"] // config["num_heads"] + self.freqs = torch.cat( + [ + rope_params(1024, d - 4 * (d // 6)), + rope_params(1024, 2 * (d // 6)), + rope_params(1024, 2 * (d // 6)), + ], + dim=1, + ).to(AI_DEVICE) + + def time_embedding(self, weights, embed): + embed = weights.time_embedding_0.apply(embed) + embed = torch.nn.functional.silu(embed) + embed = weights.time_embedding_2.apply(embed) + + return embed + + def time_projection(self, weights, embed): + embed0 = torch.nn.functional.silu(embed) + embed0 = weights.time_projection_1.apply(embed0).unflatten(1, (6, self.dim)) + return embed0 + + @torch.no_grad() + def infer(self, weights, inputs, kv_start=0, kv_end=0): + x = self.scheduler.latents_input + t = self.scheduler.timestep_input + + if self.scheduler.infer_condition: + context = inputs["text_encoder_output"]["context"] + else: + context = inputs["text_encoder_output"]["context_null"] + + # embeddings + x = weights.patch_embedding.apply(x.unsqueeze(0)) + grid_sizes_t, grid_sizes_h, grid_sizes_w = x.shape[2:] + x = x.flatten(2).transpose(1, 2).contiguous() + seq_lens = torch.tensor(x.size(1), dtype=torch.int32, device=x.device).unsqueeze(0) + + embed_tmp = sinusoidal_embedding_1d(self.freq_dim, t.flatten()).type_as(x) + embed = self.time_embedding(weights, embed_tmp) + embed0 = self.time_projection(weights, embed) + + # text embeddings + if self.sensitive_layer_dtype != self.infer_dtype: # False + out = weights.text_embedding_0.apply(context.squeeze(0).to(self.sensitive_layer_dtype)) + else: + out = weights.text_embedding_0.apply(context.squeeze(0)) + out = torch.nn.functional.gelu(out, approximate="tanh") + context = weights.text_embedding_2.apply(out) + if self.clean_cuda_cache: + del out + torch.cuda.empty_cache() + + if self.clean_cuda_cache: + if self.config.get("use_image_encoder", True): + del context_clip + torch.cuda.empty_cache() + + grid_sizes = GridOutput(tensor=torch.tensor([[grid_sizes_t, grid_sizes_h, grid_sizes_w]], dtype=torch.int32, device=x.device), tuple=(grid_sizes_t, grid_sizes_h, grid_sizes_w)) + + return WanSFPreInferModuleOutput( + embed=embed, + grid_sizes=grid_sizes, + x=x.squeeze(0), + embed0=embed0.squeeze(0), + seq_lens=seq_lens, + freqs=self.freqs, + context=context, + ) diff --git a/lightx2v/models/networks/wan/infer/self_forcing/transformer_infer.py b/lightx2v/models/networks/wan/infer/self_forcing/transformer_infer.py new file mode 100644 index 0000000..56fadb8 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/self_forcing/transformer_infer.py @@ -0,0 +1,358 @@ +import torch + +from lightx2v.models.networks.wan.infer.transformer_infer import WanTransformerInfer + + +def causal_rope_apply(x, grid_sizes, freqs, start_frame=0): + n, c = x.size(2), x.size(3) // 2 + + # split freqs + freqs = freqs.split([c - 2 * (c // 3), c // 3, c // 3], dim=1) + + # loop over samples + output = [] + + for i, (f, h, w) in enumerate(grid_sizes.tolist()): + seq_len = f * h * w + + # precompute multipliers + x_i = torch.view_as_complex(x[i, :seq_len].to(torch.float64).reshape(seq_len, n, -1, 2)) + freqs_i = torch.cat( + [freqs[0][start_frame : start_frame + f].view(f, 1, 1, -1).expand(f, h, w, -1), freqs[1][:h].view(1, h, 1, -1).expand(f, h, w, -1), freqs[2][:w].view(1, 1, w, -1).expand(f, h, w, -1)], + dim=-1, + ).reshape(seq_len, 1, -1) + + # apply rotary embedding + x_i = torch.view_as_real(x_i * freqs_i).flatten(2) + x_i = torch.cat([x_i, x[i, seq_len:]]) + + # append to collection + output.append(x_i) + return torch.stack(output).type_as(x) + + +class WanSFTransformerInfer(WanTransformerInfer): + def __init__(self, config): + super().__init__(config) + if self.config.get("cpu_offload", False): + self.device = torch.device("cpu") + else: + self.device = torch.device("cuda") + self.dtype = torch.bfloat16 + sf_config = self.config["sf_config"] + self.local_attn_size = sf_config["local_attn_size"] + self.max_attention_size = 32760 if self.local_attn_size == -1 else self.local_attn_size * 1560 + self.num_frame_per_block = sf_config["num_frame_per_block"] + self.num_transformer_blocks = sf_config["num_transformer_blocks"] + self.frame_seq_length = sf_config["frame_seq_length"] + self._initialize_kv_cache(self.device, self.dtype) + self._initialize_crossattn_cache(self.device, self.dtype) + + self.infer_func = self.infer_with_kvcache + + def get_scheduler_values(self): + pass + + def _initialize_kv_cache(self, dtype, device): + """ + Initialize a Per-GPU KV cache for the Wan model. + """ + kv_cache1 = [] + if self.local_attn_size != -1: + # Use the local attention size to compute the KV cache size + kv_cache_size = self.local_attn_size * self.frame_seq_length + else: + # Use the default KV cache size + kv_cache_size = 32760 + for _ in range(self.num_transformer_blocks): + kv_cache1.append( + { + "k": torch.zeros((kv_cache_size, 12, 128)).to(dtype).to(device), + "v": torch.zeros((kv_cache_size, 12, 128)).to(dtype).to(device), + "global_end_index": torch.tensor([0], dtype=torch.long).to(device), + "local_end_index": torch.tensor([0], dtype=torch.long).to(device), + } + ) + + self.kv_cache1_default = kv_cache1 # always store the clean cache + + def _initialize_crossattn_cache(self, dtype, device): + """ + Initialize a Per-GPU cross-attention cache for the Wan model. + """ + crossattn_cache = [] + + for _ in range(self.num_transformer_blocks): + crossattn_cache.append({"k": torch.zeros((512, 12, 128)).to(dtype).to(device), "v": torch.zeros((512, 12, 128)).to(dtype).to(device), "is_init": False}) + self.crossattn_cache_default = crossattn_cache + + def infer_with_kvcache(self, blocks, x, pre_infer_out): + self.kv_cache1 = self.kv_cache1_default + self.crossattn_cache = self.crossattn_cache_default + for block_idx in range(len(blocks)): + self.block_idx = block_idx + x = self.infer_block_witch_kvcache(blocks[block_idx], x, pre_infer_out) + return x + + def infer_self_attn_with_kvcache(self, phase, grid_sizes, x, seq_lens, freqs, shift_msa, scale_msa): + if hasattr(phase, "smooth_norm1_weight"): + norm1_weight = (1 + scale_msa.squeeze()) * phase.smooth_norm1_weight.tensor + norm1_bias = shift_msa.squeeze() * phase.smooth_norm1_bias.tensor + else: + norm1_weight = 1 + scale_msa.squeeze() + norm1_bias = shift_msa.squeeze() + + norm1_out = phase.norm1.apply(x) + + if self.sensitive_layer_dtype != self.infer_dtype: + norm1_out = norm1_out.to(self.sensitive_layer_dtype) + + norm1_out.mul_(norm1_weight[0:1, :]).add_(norm1_bias[0:1, :]) + + if self.sensitive_layer_dtype != self.infer_dtype: # False + norm1_out = norm1_out.to(self.infer_dtype) + + s, n, d = *norm1_out.shape[:1], self.num_heads, self.head_dim + + q0 = phase.self_attn_q.apply(norm1_out) + k0 = phase.self_attn_k.apply(norm1_out) + + q = phase.self_attn_norm_q.apply(q0).view(s, n, d) + k = phase.self_attn_norm_k.apply(k0).view(s, n, d) + v = phase.self_attn_v.apply(norm1_out).view(s, n, d) + + seg_index = self.scheduler.seg_index + + current_start_frame = seg_index * self.num_frame_per_block + + q = causal_rope_apply(q.unsqueeze(0), grid_sizes, freqs, start_frame=current_start_frame).type_as(v)[0] + k = causal_rope_apply(k.unsqueeze(0), grid_sizes, freqs, start_frame=current_start_frame).type_as(v)[0] + + # Assign new keys/values directly up to current_end + seg_seq_len = self.frame_seq_length * self.num_frame_per_block + local_start_index = seg_index * seg_seq_len + local_end_index = (seg_index + 1) * seg_seq_len + + self.kv_cache1[self.block_idx]["k"][local_start_index:local_end_index] = k + self.kv_cache1[self.block_idx]["v"][local_start_index:local_end_index] = v + + attn_k = self.kv_cache1[self.block_idx]["k"][max(0, local_end_index - self.max_attention_size) : local_end_index] + attn_v = self.kv_cache1[self.block_idx]["v"][max(0, local_end_index - self.max_attention_size) : local_end_index] + + k_lens = torch.empty_like(seq_lens).fill_(attn_k.size(0)) + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len(q, k_lens=k_lens) + + if self.clean_cuda_cache: + del freqs_i, norm1_out, norm1_weight, norm1_bias + torch.cuda.empty_cache() + + if self.config["seq_parallel"]: + attn_out = phase.self_attn_1_parallel.apply( + q=q, + k=attn_k, + v=attn_v, + img_qkv_len=q.shape[0], + cu_seqlens_qkv=cu_seqlens_q, + attention_module=phase.self_attn_1, + seq_p_group=self.seq_p_group, + model_cls=self.config["model_cls"], + ) + else: + attn_out = phase.self_attn_1.apply( + q=q, + k=attn_k, + v=attn_v, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=attn_k.size(0), + model_cls=self.config["model_cls"], + ) + + y = phase.self_attn_o.apply(attn_out) + + if self.clean_cuda_cache: + del q, k, v, attn_out + torch.cuda.empty_cache() + + return y + + def infer_cross_attn_with_kvcache(self, phase, x, context, y_out, gate_msa): + num_frames = gate_msa.shape[0] + frame_seqlen = x.shape[0] // gate_msa.shape[0] + seg_index = self.scheduler.seg_index + + x.add_((y_out.unflatten(dim=0, sizes=(num_frames, frame_seqlen)) * gate_msa).flatten(0, 1)) + norm3_out = phase.norm3.apply(x) + + if self.task in ["i2v", "flf2v"] and self.config.get("use_image_encoder", True): + context_img = context[:257] + context = context[257:] + else: + context_img = None + + if self.sensitive_layer_dtype != self.infer_dtype: + context = context.to(self.infer_dtype) + if self.task in ["i2v", "flf2v"] and self.config.get("use_image_encoder", True): + context_img = context_img.to(self.infer_dtype) + + n, d = self.num_heads, self.head_dim + + q = phase.cross_attn_norm_q.apply(phase.cross_attn_q.apply(norm3_out)).view(-1, n, d) + + if seg_index == 0: + k = phase.cross_attn_norm_k.apply(phase.cross_attn_k.apply(context)).view(-1, n, d) + v = phase.cross_attn_v.apply(context).view(-1, n, d) + self.crossattn_cache[self.block_idx]["k"] = k + self.crossattn_cache[self.block_idx]["v"] = v + else: + k = self.crossattn_cache[self.block_idx]["k"] + v = self.crossattn_cache[self.block_idx]["v"] + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len( + q, + k_lens=torch.tensor([k.size(0)], dtype=torch.int32, device=k.device), + ) + attn_out = phase.cross_attn_1.apply( + q=q, + k=k, + v=v, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k.size(0), + model_cls=self.config["model_cls"], + ) + + if self.task in ["i2v", "flf2v"] and self.config.get("use_image_encoder", True) and context_img is not None: + k_img = phase.cross_attn_norm_k_img.apply(phase.cross_attn_k_img.apply(context_img)).view(-1, n, d) + v_img = phase.cross_attn_v_img.apply(context_img).view(-1, n, d) + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len( + q, + k_lens=torch.tensor([k_img.size(0)], dtype=torch.int32, device=k.device), + ) + img_attn_out = phase.cross_attn_2.apply( + q=q, + k=k_img, + v=v_img, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k_img.size(0), + model_cls=self.config["model_cls"], + ) + attn_out.add_(img_attn_out) + + if self.clean_cuda_cache: + del k_img, v_img, img_attn_out + torch.cuda.empty_cache() + + attn_out = phase.cross_attn_o.apply(attn_out) + + if self.clean_cuda_cache: + del q, k, v, norm3_out, context, context_img + torch.cuda.empty_cache() + return x, attn_out + + def infer_ffn(self, phase, x, attn_out, c_shift_msa, c_scale_msa): + x.add_(attn_out) + + if self.clean_cuda_cache: + del attn_out + torch.cuda.empty_cache() + + num_frames = c_shift_msa.shape[0] + frame_seqlen = x.shape[0] // c_shift_msa.shape[0] + + norm2_weight = 1 + c_scale_msa + norm2_bias = c_shift_msa + + norm2_out = phase.norm2.apply(x) + norm2_out = norm2_out.unflatten(dim=0, sizes=(num_frames, frame_seqlen)) + norm2_out.mul_(norm2_weight).add_(norm2_bias) + norm2_out = norm2_out.flatten(0, 1) + + y = phase.ffn_0.apply(norm2_out) + if self.clean_cuda_cache: + del norm2_out, x, norm2_weight, norm2_bias + torch.cuda.empty_cache() + y = torch.nn.functional.gelu(y, approximate="tanh") + if self.clean_cuda_cache: + torch.cuda.empty_cache() + y = phase.ffn_2.apply(y) + + return y + + def post_process(self, x, y, c_gate_msa, pre_infer_out=None): + num_frames = c_gate_msa.shape[0] + frame_seqlen = x.shape[0] // c_gate_msa.shape[0] + y = y.unflatten(dim=0, sizes=(num_frames, frame_seqlen)) + x = x.unflatten(dim=0, sizes=(num_frames, frame_seqlen)) + x.add_(y * c_gate_msa) + x = x.flatten(0, 1) + + if self.clean_cuda_cache: + del y, c_gate_msa + torch.cuda.empty_cache() + return x + + def infer_block_witch_kvcache(self, block, x, pre_infer_out): + if hasattr(block.compute_phases[0], "before_proj"): + x = block.compute_phases[0].before_proj.apply(x) + pre_infer_out.x + + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = self.pre_process( + block.compute_phases[0].modulation, + pre_infer_out.embed0, + ) + + y_out = self.infer_self_attn_with_kvcache( + block.compute_phases[0], + pre_infer_out.grid_sizes.tensor, + x, + pre_infer_out.seq_lens, + pre_infer_out.freqs, + shift_msa, + scale_msa, + ) + + x, attn_out = self.infer_cross_attn_with_kvcache( + block.compute_phases[1], + x, + pre_infer_out.context, + y_out, + gate_msa, + ) + + y = self.infer_ffn(block.compute_phases[2], x, attn_out, c_shift_msa, c_scale_msa) + + x = self.post_process(x, y, c_gate_msa, pre_infer_out) + + if hasattr(block.compute_phases[2], "after_proj"): + pre_infer_out.adapter_output["hints"].append(block.compute_phases[2].after_proj.apply(x)) + + if self.has_post_adapter: + x = self.infer_post_adapter(block.compute_phases[3], x, pre_infer_out) + + return x + + def infer_non_blocks(self, weights, x, e): + num_frames = e.shape[0] + frame_seqlen = x.shape[0] // e.shape[0] + + x = weights.norm.apply(x) + x = x.unflatten(dim=0, sizes=(num_frames, frame_seqlen)) + + t = self.scheduler.timestep_input + e = e.unflatten(dim=0, sizes=t.shape).unsqueeze(2) + modulation = weights.head_modulation.tensor + e = (modulation.unsqueeze(1) + e).chunk(2, dim=2) + + x.mul_(1 + e[1][0]).add_(e[0][0]) + x = x.flatten(0, 1) + x = weights.head.apply(x) + + if self.clean_cuda_cache: + del e + torch.cuda.empty_cache() + return x diff --git a/lightx2v/models/networks/wan/infer/transformer_infer.py b/lightx2v/models/networks/wan/infer/transformer_infer.py new file mode 100644 index 0000000..ed61539 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/transformer_infer.py @@ -0,0 +1,321 @@ +from functools import partial + +import torch + +from lightx2v.common.transformer_infer.transformer_infer import BaseTransformerInfer +from lightx2v.utils.envs import * + +from .triton_ops import fuse_scale_shift_kernel +from .utils import apply_wan_rope_with_chunk, apply_wan_rope_with_flashinfer, apply_wan_rope_with_torch + + +def modulate(x, scale, shift): + return x * (1 + scale.squeeze()) + shift.squeeze() + + +class WanTransformerInfer(BaseTransformerInfer): + def __init__(self, config): + self.config = config + self.task = config["task"] + self.attention_type = config.get("attention_type", "flash_attn2") + self.blocks_num = config["num_layers"] + self.phases_num = 3 + self.has_post_adapter = False + self.num_heads = config["num_heads"] + self.head_dim = config["dim"] // config["num_heads"] + self.window_size = config.get("window_size", (-1, -1)) + self.parallel_attention = None + if self.config.get("modulate_type", "triton") == "triton": + self.modulate_func = fuse_scale_shift_kernel + else: + self.modulate_func = modulate + if self.config.get("rope_type", "flashinfer") == "flashinfer": + if self.config.get("rope_chunk", False): + self.apply_rope_func = partial(apply_wan_rope_with_chunk, chunk_size=self.config.get("rope_chunk_size", 100), rope_func=apply_wan_rope_with_flashinfer) + else: + self.apply_rope_func = apply_wan_rope_with_flashinfer + else: + if self.config.get("rope_chunk", False): + self.apply_rope_func = partial(apply_wan_rope_with_chunk, chunk_size=self.config.get("rope_chunk_size", 100), rope_func=apply_wan_rope_with_torch) + else: + self.apply_rope_func = apply_wan_rope_with_torch + self.clean_cuda_cache = self.config.get("clean_cuda_cache", False) + self.infer_dtype = GET_DTYPE() + self.sensitive_layer_dtype = GET_SENSITIVE_DTYPE() + + if self.config["seq_parallel"]: + self.seq_p_group = self.config.get("device_mesh").get_group(mesh_dim="seq_p") + self.seq_p_fp8_comm = self.config["parallel"].get("seq_p_fp8_comm", False) + else: + self.seq_p_group = None + self.seq_p_fp8_comm = False + self.infer_func = self.infer_without_offload + + self.cos_sin = None + + def _calculate_q_k_len(self, q, k_lens): + q_lens = torch.tensor([q.size(0)], dtype=torch.int32, device=q.device) + cu_seqlens_q = torch.cat([q_lens.new_zeros([1]), q_lens]).cumsum(0, dtype=torch.int32) + cu_seqlens_k = torch.cat([k_lens.new_zeros([1]), k_lens]).cumsum(0, dtype=torch.int32) + return cu_seqlens_q, cu_seqlens_k + + def get_scheduler_values(self): + self.cos_sin = self.scheduler.cos_sin + + @torch.no_grad() + def infer(self, weights, pre_infer_out): + self.get_scheduler_values() + x = self.infer_main_blocks(weights.blocks, pre_infer_out) + return self.infer_non_blocks(weights, x, pre_infer_out.embed) + + def infer_main_blocks(self, blocks, pre_infer_out): + x = self.infer_func(blocks, pre_infer_out.x, pre_infer_out) + return x + + def infer_non_blocks(self, weights, x, e): + if e.dim() == 2: + modulation = weights.head_modulation.tensor # 1, 2, dim + e = (modulation + e.unsqueeze(1)).chunk(2, dim=1) + elif e.dim() == 3: # For Diffustion forcing + modulation = weights.head_modulation.tensor.unsqueeze(2) # 1, 2, seq, dim + e = (modulation + e.unsqueeze(1)).chunk(2, dim=1) + e = [ei.squeeze(1) for ei in e] + + x = weights.norm.apply(x) + + if self.sensitive_layer_dtype != self.infer_dtype: + x = x.to(self.sensitive_layer_dtype) + x.mul_(1 + e[1].squeeze()).add_(e[0].squeeze()) + if self.sensitive_layer_dtype != self.infer_dtype: + x = x.to(self.infer_dtype) + + x = weights.head.apply(x) + + if self.clean_cuda_cache: + del e + torch.cuda.empty_cache() + return x + + def infer_without_offload(self, blocks, x, pre_infer_out): + for block_idx in range(len(blocks)): + self.block_idx = block_idx + x = self.infer_block(blocks[block_idx], x, pre_infer_out) + return x + + def infer_block(self, block, x, pre_infer_out): + if hasattr(block.compute_phases[0], "before_proj") and block.compute_phases[0].before_proj.weight is not None: + x = block.compute_phases[0].before_proj.apply(x) + pre_infer_out.x + + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = self.pre_process( + block.compute_phases[0].modulation, + pre_infer_out.embed0, + ) + y_out = self.infer_self_attn( + block.compute_phases[0], + x, + shift_msa, + scale_msa, + ) + x, attn_out = self.infer_cross_attn(block.compute_phases[1], x, pre_infer_out.context, y_out, gate_msa) + y = self.infer_ffn(block.compute_phases[2], x, attn_out, c_shift_msa, c_scale_msa) + x = self.post_process(x, y, c_gate_msa, pre_infer_out) + if hasattr(block.compute_phases[2], "after_proj"): + pre_infer_out.adapter_args["hints"].append(block.compute_phases[2].after_proj.apply(x)) + + if self.has_post_adapter: + x = self.infer_post_adapter(block.compute_phases[3], x, pre_infer_out) + + return x + + def pre_process(self, modulation, embed0): + if embed0.dim() == 3 and embed0.shape[2] == 1: + modulation = modulation.tensor.unsqueeze(2) + embed0 = (modulation + embed0).chunk(6, dim=1) + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = [ei.squeeze(1) for ei in embed0] + else: + shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa = (modulation.tensor + embed0).chunk(6, dim=1) + + if self.clean_cuda_cache: + del embed0 + torch.cuda.empty_cache() + + return shift_msa, scale_msa, gate_msa, c_shift_msa, c_scale_msa, c_gate_msa + + def infer_self_attn(self, phase, x, shift_msa, scale_msa): + cos_sin = self.cos_sin + if hasattr(phase, "smooth_norm1_weight"): + norm1_weight = (1 + scale_msa.squeeze()) * phase.smooth_norm1_weight.tensor + norm1_bias = shift_msa.squeeze() * phase.smooth_norm1_bias.tensor + norm1_out = phase.norm1.apply(x) + if self.sensitive_layer_dtype != self.infer_dtype: + norm1_out = norm1_out.to(self.sensitive_layer_dtype) + norm1_out.mul_(norm1_weight).add_(norm1_bias) + else: + norm1_out = phase.norm1.apply(x) + if self.sensitive_layer_dtype != self.infer_dtype: + norm1_out = norm1_out.to(self.sensitive_layer_dtype) + norm1_out = self.modulate_func(norm1_out, scale=scale_msa, shift=shift_msa).squeeze() + + if self.sensitive_layer_dtype != self.infer_dtype: + norm1_out = norm1_out.to(self.infer_dtype) + + s, n, d = *norm1_out.shape[:1], self.num_heads, self.head_dim + + q = phase.self_attn_norm_q.apply(phase.self_attn_q.apply(norm1_out)).view(s, n, d) + k = phase.self_attn_norm_k.apply(phase.self_attn_k.apply(norm1_out)).view(s, n, d) + v = phase.self_attn_v.apply(norm1_out).view(s, n, d) + + q, k = self.apply_rope_func(q, k, cos_sin) + + img_qkv_len = q.shape[0] + cu_seqlens_qkv = torch.tensor([0, img_qkv_len], dtype=torch.int32, device="cpu").to(q.device, non_blocking=True) + + if self.clean_cuda_cache: + del norm1_out, shift_msa, scale_msa + torch.cuda.empty_cache() + + if self.config["seq_parallel"]: + attn_out = phase.self_attn_1_parallel.apply( + q=q, + k=k, + v=v, + img_qkv_len=img_qkv_len, + cu_seqlens_qkv=cu_seqlens_qkv, + attention_module=phase.self_attn_1, + seq_p_group=self.seq_p_group, + use_fp8_comm=self.seq_p_fp8_comm, + model_cls=self.config["model_cls"], + ) + else: + attn_out = phase.self_attn_1.apply( + q=q, + k=k, + v=v, + cu_seqlens_q=cu_seqlens_qkv, + cu_seqlens_kv=cu_seqlens_qkv, + max_seqlen_q=img_qkv_len, + max_seqlen_kv=img_qkv_len, + model_cls=self.config["model_cls"], + ) + + y = phase.self_attn_o.apply(attn_out) + + if self.clean_cuda_cache: + del q, k, v, attn_out + torch.cuda.empty_cache() + + return y + + def infer_cross_attn(self, phase, x, context, y_out, gate_msa): + if self.sensitive_layer_dtype != self.infer_dtype: + x = x.to(self.sensitive_layer_dtype) + y_out.to(self.sensitive_layer_dtype) * gate_msa.squeeze() + else: + x.add_(y_out * gate_msa.squeeze()) + + norm3_out = phase.norm3.apply(x) + if self.task in ["i2v", "flf2v", "animate", "s2v"] and self.config.get("use_image_encoder", True): + context_img = context[:257] + context = context[257:] + else: + context_img = None + + if self.sensitive_layer_dtype != self.infer_dtype: + context = context.to(self.infer_dtype) + if self.task in ["i2v", "flf2v", "animate", "s2v"] and self.config.get("use_image_encoder", True): + context_img = context_img.to(self.infer_dtype) + + n, d = self.num_heads, self.head_dim + + q = phase.cross_attn_norm_q.apply(phase.cross_attn_q.apply(norm3_out)).view(-1, n, d) + k = phase.cross_attn_norm_k.apply(phase.cross_attn_k.apply(context)).view(-1, n, d) + v = phase.cross_attn_v.apply(context).view(-1, n, d) + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len( + q, + k_lens=torch.tensor([k.size(0)], dtype=torch.int32, device=k.device), + ) + attn_out = phase.cross_attn_1.apply( + q=q, + k=k, + v=v, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k.size(0), + model_cls=self.config["model_cls"], + ) + + if self.task in ["i2v", "flf2v", "animate", "s2v"] and self.config.get("use_image_encoder", True) and context_img is not None: + k_img = phase.cross_attn_norm_k_img.apply(phase.cross_attn_k_img.apply(context_img)).view(-1, n, d) + v_img = phase.cross_attn_v_img.apply(context_img).view(-1, n, d) + + cu_seqlens_q, cu_seqlens_k = self._calculate_q_k_len( + q, + k_lens=torch.tensor([k_img.size(0)], dtype=torch.int32, device=k.device), + ) + img_attn_out = phase.cross_attn_2.apply( + q=q, + k=k_img, + v=v_img, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_kv=cu_seqlens_k, + max_seqlen_q=q.size(0), + max_seqlen_kv=k_img.size(0), + model_cls=self.config["model_cls"], + ) + attn_out.add_(img_attn_out) + + if self.clean_cuda_cache: + del k_img, v_img, img_attn_out + torch.cuda.empty_cache() + + attn_out = phase.cross_attn_o.apply(attn_out) + + if self.clean_cuda_cache: + del q, k, v, norm3_out, context, context_img + torch.cuda.empty_cache() + return x, attn_out + + def infer_ffn(self, phase, x, attn_out, c_shift_msa, c_scale_msa): + x.add_(attn_out) + + if self.clean_cuda_cache: + del attn_out + torch.cuda.empty_cache() + + if hasattr(phase, "smooth_norm2_weight"): + norm2_weight = (1 + c_scale_msa.squeeze()) * phase.smooth_norm2_weight.tensor + norm2_bias = c_shift_msa.squeeze() * phase.smooth_norm2_bias.tensor + norm2_out = phase.norm2.apply(x) + if self.sensitive_layer_dtype != self.infer_dtype: + norm2_out = norm2_out.to(self.sensitive_layer_dtype) + norm2_out.mul_(norm2_weight).add_(norm2_bias) + else: + norm2_out = phase.norm2.apply(x) + if self.sensitive_layer_dtype != self.infer_dtype: + norm2_out = norm2_out.to(self.sensitive_layer_dtype) + norm2_out = self.modulate_func(norm2_out, scale=c_scale_msa, shift=c_shift_msa).squeeze() + + if self.sensitive_layer_dtype != self.infer_dtype: + norm2_out = norm2_out.to(self.infer_dtype) + + y = phase.ffn_0.apply(norm2_out) + if self.clean_cuda_cache: + del norm2_out, x + torch.cuda.empty_cache() + y = torch.nn.functional.gelu(y, approximate="tanh") + if self.clean_cuda_cache: + torch.cuda.empty_cache() + y = phase.ffn_2.apply(y) + + return y + + def post_process(self, x, y, c_gate_msa, pre_infer_out=None): + if self.sensitive_layer_dtype != self.infer_dtype: + x = x.to(self.sensitive_layer_dtype) + y.to(self.sensitive_layer_dtype) * c_gate_msa.squeeze() + else: + x.add_(y * c_gate_msa.squeeze()) + + if self.clean_cuda_cache: + del y, c_gate_msa + torch.cuda.empty_cache() + return x diff --git a/lightx2v/models/networks/wan/infer/triton_ops.py b/lightx2v/models/networks/wan/infer/triton_ops.py new file mode 100644 index 0000000..e8e619b --- /dev/null +++ b/lightx2v/models/networks/wan/infer/triton_ops.py @@ -0,0 +1,902 @@ +# Copied and adapted from: https://github.com/hao-ai-lab/FastVideo & https://github.com/sgl-project/sglang + +# TODO: for temporary usage, expecting a refactor +from typing import Optional + +import torch +import triton # type: ignore +import triton.language as tl # type: ignore +from torch import Tensor + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_N": 64}, num_warps=2), + triton.Config({"BLOCK_N": 128}, num_warps=4), + triton.Config({"BLOCK_N": 256}, num_warps=4), + triton.Config({"BLOCK_N": 512}, num_warps=4), + triton.Config({"BLOCK_N": 1024}, num_warps=8), + ], + key=["inner_dim"], +) +@triton.jit +def _fused_scale_shift_4d_kernel( + output_ptr, + normalized_ptr, + scale_ptr, + shift_ptr, + rows, + inner_dim, + seq_len, + num_frames, + frame_seqlen, + BLOCK_N: tl.constexpr, +): + pid_row = tl.program_id(0) + pid_col = tl.program_id(1) + + col_offsets = pid_col * BLOCK_N + tl.arange(0, BLOCK_N) + mask = col_offsets < inner_dim + + # Pointers for normalized and output + row_base = pid_row * inner_dim + norm_ptrs = normalized_ptr + row_base + col_offsets + out_ptrs = output_ptr + row_base + col_offsets + + # Pointers for scale and shift for 4D + b_idx = pid_row // seq_len + t_idx = pid_row % seq_len + frame_idx_in_batch = t_idx // frame_seqlen + + scale_row_idx = b_idx * num_frames + frame_idx_in_batch + scale_ptrs = scale_ptr + scale_row_idx * inner_dim + col_offsets + shift_ptrs = shift_ptr + scale_row_idx * inner_dim + col_offsets + + normalized = tl.load(norm_ptrs, mask=mask, other=0.0) + scale = tl.load(scale_ptrs, mask=mask, other=0.0) + shift = tl.load(shift_ptrs, mask=mask, other=0.0) + + one = tl.full([BLOCK_N], 1.0, dtype=scale.dtype) + output = normalized * (one + scale) + shift + + tl.store(out_ptrs, output, mask=mask) + + +@triton.jit +def fuse_scale_shift_kernel_blc_opt( + x_ptr, + shift_ptr, + scale_ptr, + y_ptr, + B, + L, + C, + stride_x_b, + stride_x_l, + stride_x_c, + stride_s_b, + stride_s_l, + stride_s_c, + stride_sc_b, + stride_sc_l, + stride_sc_c, + SCALE_IS_SCALAR: tl.constexpr, + SHIFT_IS_SCALAR: tl.constexpr, + BLOCK_L: tl.constexpr, + BLOCK_C: tl.constexpr, +): + pid_l = tl.program_id(0) + pid_c = tl.program_id(1) + pid_b = tl.program_id(2) + + l_offsets = pid_l * BLOCK_L + tl.arange(0, BLOCK_L) + c_offsets = pid_c * BLOCK_C + tl.arange(0, BLOCK_C) + + mask_l = l_offsets < L + mask_c = c_offsets < C + mask = mask_l[:, None] & mask_c[None, :] + + x_off = pid_b * stride_x_b + l_offsets[:, None] * stride_x_l + c_offsets[None, :] * stride_x_c + x = tl.load(x_ptr + x_off, mask=mask, other=0) + + if SHIFT_IS_SCALAR: + shift_val = tl.load(shift_ptr) + shift = tl.full((BLOCK_L, BLOCK_C), shift_val, dtype=shift_val.dtype) + else: + s_off = pid_b * stride_s_b + l_offsets[:, None] * stride_s_l + c_offsets[None, :] * stride_s_c + shift = tl.load(shift_ptr + s_off, mask=mask, other=0) + + if SCALE_IS_SCALAR: + scale_val = tl.load(scale_ptr) + scale = tl.full((BLOCK_L, BLOCK_C), scale_val, dtype=scale_val.dtype) + else: + sc_off = pid_b * stride_sc_b + l_offsets[:, None] * stride_sc_l + c_offsets[None, :] * stride_sc_c + scale = tl.load(scale_ptr + sc_off, mask=mask, other=0) + + y = x * (1 + scale) + shift + tl.store(y_ptr + x_off, y, mask=mask) + + +def fuse_scale_shift_kernel( + x: torch.Tensor, + scale: torch.Tensor, + shift: torch.Tensor, + block_l: int = 128, + block_c: int = 128, +): + # assert x.is_cuda and scale.is_cuda + assert x.is_contiguous() + if x.dim() == 2: + x = x.unsqueeze(0) + + B, L, C = x.shape + output = torch.empty_like(x) + + if scale.dim() == 4: + # scale/shift: [B, F, 1, C] + rows = B * L + x_2d = x.view(rows, C) + output_2d = output.view(rows, C) + grid = lambda META: (rows, triton.cdiv(C, META["BLOCK_N"])) # noqa + num_frames = scale.shape[1] + assert L % num_frames == 0, "seq_len must be divisible by num_frames for 4D scale/shift" + frame_seqlen = L // num_frames + + # Compact [B, F, C] without the singleton dim into [B*F, C] + scale_reshaped = scale.squeeze(2).reshape(-1, C).contiguous() + shift_reshaped = shift.squeeze(2).reshape(-1, C).contiguous() + + _fused_scale_shift_4d_kernel[grid]( + output_2d, + x_2d, + scale_reshaped, + shift_reshaped, + rows, + C, + L, + num_frames, + frame_seqlen, + ) + else: + # 2D: [B, C] or [1, C] -> treat as [B, 1, C] and broadcast over L + # 3D: [B, L, C] (or broadcastable variants like [B, 1, C], [1, L, C], [1, 1, C]) + # Also support scalar (0D or 1-element) + if scale.dim() == 0 or (scale.dim() == 1 and scale.numel() == 1): + scale_blc = scale.reshape(1) + elif scale.dim() == 2: + scale_blc = scale[:, None, :] + elif scale.dim() == 3: + scale_blc = scale + else: + raise ValueError("scale must be 0D/1D(1)/2D/3D or 4D") + + if shift.dim() == 0 or (shift.dim() == 1 and shift.numel() == 1): + shift_blc = shift.reshape(1) + elif shift.dim() == 2: + shift_blc = shift[:, None, :] + elif shift.dim() == 3: + shift_blc = shift + else: + # broadcast later via expand if possible + shift_blc = shift + + need_scale_scalar = scale_blc.dim() == 1 and scale_blc.numel() == 1 + need_shift_scalar = shift_blc.dim() == 1 and shift_blc.numel() == 1 + + if not need_scale_scalar: + scale_exp = scale_blc.expand(B, L, C) + s_sb, s_sl, s_sc = scale_exp.stride() + else: + s_sb = s_sl = s_sc = 0 + + if not need_shift_scalar: + shift_exp = shift_blc.expand(B, L, C) + sh_sb, sh_sl, sh_sc = shift_exp.stride() + else: + sh_sb = sh_sl = sh_sc = 0 + + # If both scalars and both zero, copy fast-path + if need_scale_scalar and need_shift_scalar: + if (scale_blc.abs().max() == 0) and (shift_blc.abs().max() == 0): + output.copy_(x) + return output + + grid = (triton.cdiv(L, block_l), triton.cdiv(C, block_c), B) + fuse_scale_shift_kernel_blc_opt[grid]( + x, + shift_blc if need_shift_scalar else shift_exp, + scale_blc if need_scale_scalar else scale_exp, + output, + B, + L, + C, + x.stride(0), + x.stride(1), + x.stride(2), + sh_sb, + sh_sl, + sh_sc, + s_sb, + s_sl, + s_sc, + SCALE_IS_SCALAR=need_scale_scalar, + SHIFT_IS_SCALAR=need_shift_scalar, + BLOCK_L=block_l, + BLOCK_C=block_c, + num_warps=4, + num_stages=2, + ) + return output + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_HS_HALF": 32}, num_warps=2), + triton.Config({"BLOCK_HS_HALF": 64}, num_warps=4), + triton.Config({"BLOCK_HS_HALF": 128}, num_warps=4), + triton.Config({"BLOCK_HS_HALF": 256}, num_warps=8), + ], + key=["head_size", "interleaved"], +) +@triton.jit +def _rotary_embedding_kernel( + output_ptr, + x_ptr, + cos_ptr, + sin_ptr, + num_heads, + head_size, + num_tokens, + stride_x_row, + stride_cos_row, + stride_sin_row, + interleaved: tl.constexpr, + BLOCK_HS_HALF: tl.constexpr, +): + row_idx = tl.program_id(0) + token_idx = (row_idx // num_heads) % num_tokens + + x_row_ptr = x_ptr + row_idx * stride_x_row + cos_row_ptr = cos_ptr + token_idx * stride_cos_row + sin_row_ptr = sin_ptr + token_idx * stride_sin_row + output_row_ptr = output_ptr + row_idx * stride_x_row + + # half size for x1 and x2 + head_size_half = head_size // 2 + + for block_start in range(0, head_size_half, BLOCK_HS_HALF): + offsets_half = block_start + tl.arange(0, BLOCK_HS_HALF) + mask = offsets_half < head_size_half + + cos_vals = tl.load(cos_row_ptr + offsets_half, mask=mask, other=0.0) + sin_vals = tl.load(sin_row_ptr + offsets_half, mask=mask, other=0.0) + + offsets_x1 = 2 * offsets_half + offsets_x2 = 2 * offsets_half + 1 + + x1_vals = tl.load(x_row_ptr + offsets_x1, mask=mask, other=0.0) + x2_vals = tl.load(x_row_ptr + offsets_x2, mask=mask, other=0.0) + + x1_fp32 = x1_vals.to(tl.float32) + x2_fp32 = x2_vals.to(tl.float32) + cos_fp32 = cos_vals.to(tl.float32) + sin_fp32 = sin_vals.to(tl.float32) + o1_vals = tl.fma(-x2_fp32, sin_fp32, x1_fp32 * cos_fp32) + o2_vals = tl.fma(x1_fp32, sin_fp32, x2_fp32 * cos_fp32) + + tl.store(output_row_ptr + offsets_x1, o1_vals.to(x1_vals.dtype), mask=mask) + tl.store(output_row_ptr + offsets_x2, o2_vals.to(x2_vals.dtype), mask=mask) + + +def apply_rotary_embedding(x: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor, interleaved: bool = False) -> torch.Tensor: + output = torch.empty_like(x) + + if x.dim() > 3: + bsz, num_tokens, num_heads, head_size = x.shape + else: + num_tokens, num_heads, head_size = x.shape + bsz = 1 + + assert head_size % 2 == 0, "head_size must be divisible by 2" + + x_reshaped = x.view(-1, head_size) + output_reshaped = output.view(-1, head_size) + + # num_tokens per head, 1 token per block + grid = (bsz * num_tokens * num_heads,) + + if interleaved and cos.shape[-1] == head_size: + cos = cos[..., ::2].contiguous() + sin = sin[..., ::2].contiguous() + else: + cos = cos.contiguous() + sin = sin.contiguous() + + _rotary_embedding_kernel[grid]( + output_reshaped, + x_reshaped, + cos, + sin, + num_heads, + head_size, + num_tokens, + x_reshaped.stride(0), + cos.stride(0), + sin.stride(0), + interleaved, + ) + + return output + + +# RMSNorm-fp32 +def maybe_contiguous_lastdim(x): + return x.contiguous() if x is not None and x.stride(-1) != 1 else x + + +def maybe_contiguous(x): + return x.contiguous() if x is not None else None + + +def triton_autotune_configs(): + if not torch.cuda.is_available(): + return [] + # Return configs with a valid warp count for the current device + configs = [] + # Maximum threads per block is architecture-dependent in theory, but in reality all are 1024 + max_threads_per_block = 1024 + # Default to warp size 32 if not defined by device + warp_size = getattr(torch.cuda.get_device_properties(torch.cuda.current_device()), "warp_size", 32) + # Autotune for warp counts which are powers of 2 and do not exceed thread per block limit + return [triton.Config({}, num_warps=warp_count) for warp_count in [1, 2, 4, 8, 16, 32] if warp_count * warp_size <= max_threads_per_block] + # return [triton.Config({}, num_warps=8)] + + +# Copied from flash-attn +@triton.autotune( + configs=triton_autotune_configs(), + key=[ + "N", + "HAS_RESIDUAL", + "STORE_RESIDUAL_OUT", + "IS_RMS_NORM", + "HAS_BIAS", + "HAS_WEIGHT", + "HAS_X1", + "HAS_W1", + "HAS_B1", + ], +) +# torch compile doesn't like triton.heuristics, so we set these manually when calling the kernel +# @triton.heuristics({"HAS_BIAS": lambda args: args["B"] is not None}) +# @triton.heuristics({"HAS_RESIDUAL": lambda args: args["RESIDUAL"] is not None}) +# @triton.heuristics({"HAS_X1": lambda args: args["X1"] is not None}) +# @triton.heuristics({"HAS_W1": lambda args: args["W1"] is not None}) +# @triton.heuristics({"HAS_B1": lambda args: args["B1"] is not None}) +@triton.jit +def _layer_norm_fwd_1pass_kernel( + X, # pointer to the input + Y, # pointer to the output + W, # pointer to the weights + B, # pointer to the biases + RESIDUAL, # pointer to the residual + X1, + W1, + B1, + Y1, + RESIDUAL_OUT, # pointer to the residual + ROWSCALE, + SEEDS, # Dropout seeds for each row + DROPOUT_MASK, + DROPOUT_MASK1, + Mean, # pointer to the mean + Rstd, # pointer to the 1/std + stride_x_row, # how much to increase the pointer when moving by 1 row + stride_y_row, + stride_res_row, + stride_res_out_row, + stride_x1_row, + stride_y1_row, + M, # number of rows in X + N, # number of columns in X + eps, # epsilon to avoid division by zero + dropout_p, # Dropout probability + zero_centered_weight, # If true, add 1.0 to the weight + IS_RMS_NORM: tl.constexpr, + BLOCK_N: tl.constexpr, + HAS_RESIDUAL: tl.constexpr, + STORE_RESIDUAL_OUT: tl.constexpr, + HAS_WEIGHT: tl.constexpr, + HAS_BIAS: tl.constexpr, + HAS_DROPOUT: tl.constexpr, + STORE_DROPOUT_MASK: tl.constexpr, + HAS_ROWSCALE: tl.constexpr, + HAS_X1: tl.constexpr, + HAS_W1: tl.constexpr, + HAS_B1: tl.constexpr, +): + # Map the program id to the row of X and Y it should compute. + row = tl.program_id(0) + X += row * stride_x_row + Y += row * stride_y_row + if HAS_RESIDUAL: + RESIDUAL += row * stride_res_row + if STORE_RESIDUAL_OUT: + RESIDUAL_OUT += row * stride_res_out_row + if HAS_X1: + X1 += row * stride_x1_row + if HAS_W1: + Y1 += row * stride_y1_row + # Compute mean and variance + cols = tl.arange(0, BLOCK_N) + x = tl.load(X + cols, mask=cols < N, other=0.0).to(tl.float32) + if HAS_ROWSCALE: + rowscale = tl.load(ROWSCALE + row).to(tl.float32) + x *= rowscale + if HAS_DROPOUT: + # Compute dropout mask + # 7 rounds is good enough, and reduces register pressure + keep_mask = tl.rand(tl.load(SEEDS + row).to(tl.uint32), cols, n_rounds=7) > dropout_p + x = tl.where(keep_mask, x / (1.0 - dropout_p), 0.0) + if STORE_DROPOUT_MASK: + tl.store(DROPOUT_MASK + row * N + cols, keep_mask, mask=cols < N) + if HAS_X1: + x1 = tl.load(X1 + cols, mask=cols < N, other=0.0).to(tl.float32) + if HAS_ROWSCALE: + rowscale = tl.load(ROWSCALE + M + row).to(tl.float32) + x1 *= rowscale + if HAS_DROPOUT: + # Compute dropout mask + # 7 rounds is good enough, and reduces register pressure + keep_mask = tl.rand(tl.load(SEEDS + M + row).to(tl.uint32), cols, n_rounds=7) > dropout_p + x1 = tl.where(keep_mask, x1 / (1.0 - dropout_p), 0.0) + if STORE_DROPOUT_MASK: + tl.store(DROPOUT_MASK1 + row * N + cols, keep_mask, mask=cols < N) + x += x1 + if HAS_RESIDUAL: + residual = tl.load(RESIDUAL + cols, mask=cols < N, other=0.0).to(tl.float32) + x += residual + if STORE_RESIDUAL_OUT: + tl.store(RESIDUAL_OUT + cols, x, mask=cols < N) + if not IS_RMS_NORM: + mean = tl.sum(x, axis=0) / N + tl.store(Mean + row, mean) + xbar = tl.where(cols < N, x - mean, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + else: + xbar = tl.where(cols < N, x, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + rstd = 1 / tl.sqrt(var + eps) + tl.store(Rstd + row, rstd) + # Normalize and apply linear transformation + mask = cols < N + if HAS_WEIGHT: + w = tl.load(W + cols, mask=mask).to(tl.float32) + if zero_centered_weight: + w += 1.0 + if HAS_BIAS: + b = tl.load(B + cols, mask=mask).to(tl.float32) + x_hat = (x - mean) * rstd if not IS_RMS_NORM else x * rstd + if HAS_WEIGHT: + y = x_hat * w + b if HAS_BIAS else x_hat * w + else: + y = x_hat + b if HAS_BIAS else x_hat + # Write output + tl.store(Y + cols, y, mask=mask) + if HAS_W1: + w1 = tl.load(W1 + cols, mask=mask).to(tl.float32) + if zero_centered_weight: + w1 += 1.0 + if HAS_B1: + b1 = tl.load(B1 + cols, mask=mask).to(tl.float32) + y1 = x_hat * w1 + b1 if HAS_B1 else x_hat * w1 + tl.store(Y1 + cols, y1, mask=mask) + + +def _layer_norm_fwd( + x: Tensor, + weight: Tensor, + bias: Tensor, + eps: float, + residual: Optional[Tensor] = None, + x1: Optional[Tensor] = None, + weight1: Optional[Tensor] = None, + bias1: Optional[Tensor] = None, + dropout_p: float = 0.0, + rowscale: Optional[Tensor] = None, + out_dtype: Optional[torch.dtype] = None, + residual_dtype: Optional[torch.dtype] = None, + zero_centered_weight: bool = False, + is_rms_norm: bool = False, + return_dropout_mask: bool = False, + out: Optional[Tensor] = None, + residual_out: Optional[Tensor] = None, +) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor, Tensor, Tensor): + # Need to wrap to handle the case where residual_out is a alias of x, which makes torch.library + # and torch.compile unhappy. Also allocate memory for out and residual_out if they are None + # so that _layer_norm_fwd_impl doesn't have to return them. + if out is None: + out = torch.empty_like(x, dtype=x.dtype if out_dtype is None else out_dtype) + if residual is not None: + residual_dtype = residual.dtype + if residual_out is None and (residual is not None or (residual_dtype is not None and residual_dtype != x.dtype) or dropout_p > 0.0 or rowscale is not None or x1 is not None): + residual_out = torch.empty_like(x, dtype=residual_dtype if residual_dtype is not None else x.dtype) + else: + residual_out = None + y1, mean, rstd, seeds, dropout_mask, dropout_mask1 = _layer_norm_fwd_impl( + x, + weight, + bias, + eps, + out, + residual=residual, + x1=x1, + weight1=weight1, + bias1=bias1, + dropout_p=dropout_p, + rowscale=rowscale, + zero_centered_weight=zero_centered_weight, + is_rms_norm=is_rms_norm, + return_dropout_mask=return_dropout_mask, + residual_out=residual_out, + ) + # residual_out is None if residual is None and residual_dtype == input_dtype and dropout_p == 0.0 + if residual_out is None: + residual_out = x + return out, y1, mean, rstd, residual_out, seeds, dropout_mask, dropout_mask1 + + +# [2025-04-28] torch.library.triton_op ignores the schema argument, but here we need the schema +# since we're returning a tuple of tensors +def _layer_norm_fwd_impl( + x: Tensor, + weight: Optional[Tensor], + bias: Tensor, + eps: float, + out: Tensor, + residual: Optional[Tensor] = None, + x1: Optional[Tensor] = None, + weight1: Optional[Tensor] = None, + bias1: Optional[Tensor] = None, + dropout_p: float = 0.0, + rowscale: Optional[Tensor] = None, + zero_centered_weight: bool = False, + is_rms_norm: bool = False, + return_dropout_mask: bool = False, + residual_out: Optional[Tensor] = None, +) -> (Tensor, Tensor, Tensor, Tensor, Tensor, Tensor): + M, N = x.shape + assert x.stride(-1) == 1 + if residual is not None: + assert residual.stride(-1) == 1 + assert residual.shape == (M, N) + if weight is not None: + assert weight.shape == (N,) + assert weight.stride(-1) == 1 + if bias is not None: + assert bias.stride(-1) == 1 + assert bias.shape == (N,) + if x1 is not None: + assert x1.shape == x.shape + assert rowscale is None + assert x1.stride(-1) == 1 + if weight1 is not None: + assert weight1.shape == (N,) + assert weight1.stride(-1) == 1 + if bias1 is not None: + assert bias1.shape == (N,) + assert bias1.stride(-1) == 1 + if rowscale is not None: + assert rowscale.is_contiguous() + assert rowscale.shape == (M,) + assert out.shape == x.shape + assert out.stride(-1) == 1 + if residual_out is not None: + assert residual_out.shape == x.shape + assert residual_out.stride(-1) == 1 + if weight1 is not None: + y1 = torch.empty_like(out) + assert y1.stride(-1) == 1 + else: + y1 = None + mean = torch.empty((M,), dtype=torch.float32, device=x.device) if not is_rms_norm else None + rstd = torch.empty((M,), dtype=torch.float32, device=x.device) + if dropout_p > 0.0: + seeds = torch.randint(2**32, (M if x1 is None else 2 * M,), device=x.device, dtype=torch.int64) + else: + seeds = None + if return_dropout_mask and dropout_p > 0.0: + dropout_mask = torch.empty(M, N, device=x.device, dtype=torch.bool) + if x1 is not None: + dropout_mask1 = torch.empty(M, N, device=x.device, dtype=torch.bool) + else: + dropout_mask1 = None + else: + dropout_mask, dropout_mask1 = None, None + # Less than 64KB per feature: enqueue fused kernel + MAX_FUSED_SIZE = 65536 // x.element_size() + BLOCK_N = min(MAX_FUSED_SIZE, triton.next_power_of_2(N)) + if N > BLOCK_N: + raise RuntimeError("This layer norm doesn't support feature dim >= 64KB.") + with torch.cuda.device(x.device.index): + torch.library.wrap_triton(_layer_norm_fwd_1pass_kernel)[(M,)]( + x, + out, + weight if weight is not None else x, # unused when HAS_WEIGHT == False + bias, + residual, + x1, + weight1, + bias1, + y1, + residual_out, + rowscale, + seeds, + dropout_mask, + dropout_mask1, + mean, + rstd, + x.stride(0), + out.stride(0), + residual.stride(0) if residual is not None else 0, + residual_out.stride(0) if residual_out is not None else 0, + x1.stride(0) if x1 is not None else 0, + y1.stride(0) if y1 is not None else 0, + M, + N, + eps, + dropout_p, + # Passing bool make torch inductor very unhappy since it then tries to compare to int_max + int(zero_centered_weight), + is_rms_norm, + BLOCK_N, + residual is not None, + residual_out is not None, + weight is not None, + bias is not None, + dropout_p > 0.0, + dropout_mask is not None, + rowscale is not None, + HAS_X1=x1 is not None, + HAS_W1=weight1 is not None, + HAS_B1=bias1 is not None, + ) + return y1, mean, rstd, seeds, dropout_mask, dropout_mask1 + + +class LayerNormFn: + @staticmethod + def forward( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + is_rms_norm=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, + ): + x_shape_og = x.shape + # reshape input data into 2D tensor + x = maybe_contiguous_lastdim(x.reshape(-1, x.shape[-1])) + if residual is not None: + assert residual.shape == x_shape_og + residual = maybe_contiguous_lastdim(residual.reshape(-1, residual.shape[-1])) + if x1 is not None: + assert x1.shape == x_shape_og + assert rowscale is None, "rowscale is not supported with parallel LayerNorm" + x1 = maybe_contiguous_lastdim(x1.reshape(-1, x1.shape[-1])) + # weight can be None when elementwise_affine=False for LayerNorm + if weight is not None: + weight = weight.contiguous() + bias = maybe_contiguous(bias) + weight1 = maybe_contiguous(weight1) + bias1 = maybe_contiguous(bias1) + if rowscale is not None: + rowscale = rowscale.reshape(-1).contiguous() + residual_dtype = residual.dtype if residual is not None else (torch.float32 if residual_in_fp32 else None) + if out is not None: + out = out.reshape(-1, out.shape[-1]) + if residual_out is not None: + residual_out = residual_out.reshape(-1, residual_out.shape[-1]) + y, y1, mean, rstd, residual_out, seeds, dropout_mask, dropout_mask1 = _layer_norm_fwd( + x, + weight, + bias, + eps, + residual, + x1, + weight1, + bias1, + dropout_p=dropout_p, + rowscale=rowscale, + out_dtype=out_dtype, + residual_dtype=residual_dtype, + zero_centered_weight=zero_centered_weight, + is_rms_norm=is_rms_norm, + return_dropout_mask=return_dropout_mask, + out=out, + residual_out=residual_out, + ) + y = y.reshape(x_shape_og) + return y + + +def layer_norm_fn( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + is_rms_norm=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, +): + return LayerNormFn.forward( + x, + weight, + bias, + residual, + x1, + weight1, + bias1, + eps, + dropout_p, + rowscale, + prenorm, + residual_in_fp32, + zero_centered_weight, + is_rms_norm, + return_dropout_mask, + out_dtype, + out, + residual_out, + ) + + +@triton.jit +def _norm_infer_kernel( + X, + Y, + W, + B, + stride_x_row, + stride_y_row, + M, + N, + eps, + IS_RMS_NORM: tl.constexpr, + HAS_WEIGHT: tl.constexpr, + HAS_BIAS: tl.constexpr, + BLOCK_N: tl.constexpr, +): + row = tl.program_id(0) + X += row * stride_x_row + Y += row * stride_y_row + if HAS_WEIGHT: + W += 0 + if HAS_BIAS: + B += 0 + cols = tl.arange(0, BLOCK_N) + x = tl.load(X + cols, mask=cols < N, other=0.0).to(tl.float32) + if not IS_RMS_NORM: + mean = tl.sum(x, axis=0) / N + xbar = tl.where(cols < N, x - mean, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + else: + xbar = tl.where(cols < N, x, 0.0) + var = tl.sum(xbar * xbar, axis=0) / N + rstd = 1 / tl.sqrt(var + eps) + x_hat = (x - mean) * rstd if not IS_RMS_NORM else x * rstd + if HAS_WEIGHT: + w = tl.load(W + cols, mask=cols < N, other=1.0).to(tl.float32) + y = x_hat * w + else: + y = x_hat + if HAS_BIAS: + b = tl.load(B + cols, mask=cols < N, other=0.0).to(tl.float32) + y += b + tl.store(Y + cols, y, mask=cols < N) + + +def norm_infer( + x: Tensor, + weight: Optional[Tensor], + bias: Optional[Tensor], + eps: float, + is_rms_norm: bool = False, + out: Optional[Tensor] = None, +): + M, N = x.shape + assert x.stride(-1) == 1 + if weight is not None: + assert weight.shape == (N,) + assert weight.stride(-1) == 1 + if bias is not None: + assert bias.shape == (N,) + assert bias.stride(-1) == 1 + if out is None: + out = torch.empty_like(x) + MAX_FUSED_SIZE = 65536 // x.element_size() + BLOCK_N = min(MAX_FUSED_SIZE, triton.next_power_of_2(N)) + if N > BLOCK_N: + raise RuntimeError("This layer norm doesn't support feature dim >= 64KB.") + num_warps = min(max(BLOCK_N // 256, 1), 8) + _norm_infer_kernel[(M,)]( + x, + out, + weight if weight is not None else x, # dummy when HAS_WEIGHT=False + bias if bias is not None else x, # dummy when HAS_BIAS=False + x.stride(0), + out.stride(0), + M, + N, + eps, + IS_RMS_NORM=is_rms_norm, + HAS_WEIGHT=weight is not None, + HAS_BIAS=bias is not None, + BLOCK_N=BLOCK_N, + num_warps=num_warps, + ) + return out + + +def rms_norm_fn( + x, + weight, + bias, + residual=None, + x1=None, + weight1=None, + bias1=None, + eps=1e-6, + dropout_p=0.0, + rowscale=None, + prenorm=False, + residual_in_fp32=False, + zero_centered_weight=False, + return_dropout_mask=False, + out_dtype=None, + out=None, + residual_out=None, +): + return LayerNormFn.forward( + x, + weight, + bias, + residual, + x1, + weight1, + bias1, + eps, + dropout_p, + rowscale, + prenorm, + residual_in_fp32, + zero_centered_weight, + True, + return_dropout_mask, + out_dtype, + out, + residual_out, + ) diff --git a/lightx2v/models/networks/wan/infer/utils.py b/lightx2v/models/networks/wan/infer/utils.py new file mode 100644 index 0000000..13ca4d3 --- /dev/null +++ b/lightx2v/models/networks/wan/infer/utils.py @@ -0,0 +1,239 @@ +import torch +import torch.distributed as dist + +try: + from flashinfer.rope import apply_rope_with_cos_sin_cache_inplace +except ImportError: + apply_rope_with_cos_sin_cache_inplace = None + +from lightx2v.utils.envs import * + + +def apply_wan_rope_with_torch( + xq: torch.Tensor, + xk: torch.Tensor, + cos_sin_cache: torch.Tensor, +): + n = xq.size(1) + seq_len = cos_sin_cache.size(0) + + xq = torch.view_as_complex(xq[:seq_len].to(torch.float32).reshape(seq_len, n, -1, 2)) + xk = torch.view_as_complex(xk[:seq_len].to(torch.float32).reshape(seq_len, n, -1, 2)) + # Apply rotary embedding + xq = torch.view_as_real(xq * cos_sin_cache).flatten(2) + xk = torch.view_as_real(xk * cos_sin_cache).flatten(2) + xq = torch.cat([xq, xq[seq_len:]]) + xk = torch.cat([xk, xk[seq_len:]]) + + return xq.to(GET_DTYPE()), xk.to(GET_DTYPE()) + + +def apply_wan_rope_with_chunk( + xq: torch.Tensor, + xk: torch.Tensor, + cos_sin_cache: torch.Tensor, + chunk_size: int, + rope_func, +): + seq_len = cos_sin_cache.size(0) + x_q = torch.empty_like(xq) + x_k = torch.empty_like(xk) + + for start in range(0, seq_len, chunk_size): + end = min(start + chunk_size, seq_len) + xq_chunk = xq[start:end] + xk_chunk = xk[start:end] + cos_sin_chunk = cos_sin_cache[start:end] + xq_chunk_out, xk_chunk_out = rope_func(xq_chunk, xk_chunk, cos_sin_chunk) + x_q[start:end].copy_(xq_chunk_out, non_blocking=True) + x_k[start:end].copy_(xk_chunk_out, non_blocking=True) + del xq_chunk_out, xk_chunk_out + + target_dtype = GET_DTYPE() + if x_q.dtype != target_dtype: + x_q = x_q.to(target_dtype) + if x_k.dtype != target_dtype: + x_k = x_k.to(target_dtype) + + return x_q, x_k + + +def apply_wan_rope_with_flashinfer( + xq: torch.Tensor, + xk: torch.Tensor, + cos_sin_cache: torch.Tensor, +): + L, H, D = xq.shape + + query = xq.reshape(L, H * D).contiguous() + key = xk.reshape(L, H * D).contiguous() + + positions = torch.arange(L, device="cpu", dtype=torch.long).to(xq.device, non_blocking=True) + + apply_rope_with_cos_sin_cache_inplace( + positions=positions, + query=query, + key=key, + head_size=D, + cos_sin_cache=cos_sin_cache, + is_neox=False, + ) + + xq_out = query.view(L, H, D) + xk_out = key.view(L, H, D) + return xq_out, xk_out + + +def compute_freqs(c, grid_sizes, freqs): + freqs = freqs.split([c - 2 * (c // 3), c // 3, c // 3], dim=1) + f, h, w = grid_sizes + seq_len = f * h * w + freqs_i = torch.cat( + [ + freqs[0][:f].view(f, 1, 1, -1).expand(f, h, w, -1), + freqs[1][:h].view(1, h, 1, -1).expand(f, h, w, -1), + freqs[2][:w].view(1, 1, w, -1).expand(f, h, w, -1), + ], + dim=-1, + ).reshape(seq_len, 1, -1) + + return freqs_i + + +def compute_freqs_dist(s, c, grid_sizes, freqs, seq_p_group): + world_size = dist.get_world_size(seq_p_group) + cur_rank = dist.get_rank(seq_p_group) + freqs = freqs.split([c - 2 * (c // 3), c // 3, c // 3], dim=1) + f, h, w = grid_sizes + seq_len = f * h * w + freqs_i = torch.cat( + [ + freqs[0][:f].view(f, 1, 1, -1).expand(f, h, w, -1), + freqs[1][:h].view(1, h, 1, -1).expand(f, h, w, -1), + freqs[2][:w].view(1, 1, w, -1).expand(f, h, w, -1), + ], + dim=-1, + ).reshape(seq_len, 1, -1) + + freqs_i = pad_freqs(freqs_i, s * world_size) + s_per_rank = s + freqs_i_rank = freqs_i[(cur_rank * s_per_rank) : ((cur_rank + 1) * s_per_rank), :, :] + return freqs_i_rank + + +def compute_freqs_causvid(c, grid_sizes, freqs, start_frame=0): + freqs = freqs.split([c - 2 * (c // 3), c // 3, c // 3], dim=1) + f, h, w = grid_sizes + seq_len = f * h * w + freqs_i = torch.cat( + [ + freqs[0][start_frame : start_frame + f].view(f, 1, 1, -1).expand(f, h, w, -1), + freqs[1][:h].view(1, h, 1, -1).expand(f, h, w, -1), + freqs[2][:w].view(1, 1, w, -1).expand(f, h, w, -1), + ], + dim=-1, + ).reshape(seq_len, 1, -1) + + return freqs_i + + +def pad_freqs(original_tensor, target_len): + seq_len, s1, s2 = original_tensor.shape + pad_size = target_len - seq_len + padding_tensor = torch.ones(pad_size, s1, s2, dtype=original_tensor.dtype, device=original_tensor.device) + padded_tensor = torch.cat([original_tensor, padding_tensor], dim=0) + return padded_tensor + + +def apply_rotary_emb(x, freqs_i): + n = x.size(1) + seq_len = freqs_i.size(0) + + x_i = torch.view_as_complex(x[:seq_len].to(torch.float32).reshape(seq_len, n, -1, 2)) + # Apply rotary embedding + x_i = torch.view_as_real(x_i * freqs_i).flatten(2) + x_i = torch.cat([x_i, x[seq_len:]]) + return x_i.to(GET_DTYPE()) + + +def apply_rotary_emb_chunk(x, freqs_i, chunk_size, remaining_chunk_size=100): + n = x.size(1) + seq_len = freqs_i.size(0) + + output_chunks = [] + for start in range(0, seq_len, chunk_size): + end = min(start + chunk_size, seq_len) + x_chunk = x[start:end] + freqs_chunk = freqs_i[start:end] + + x_chunk_complex = torch.view_as_complex(x_chunk.to(torch.float32).reshape(end - start, n, -1, 2)) + x_chunk_embedded = torch.view_as_real(x_chunk_complex * freqs_chunk).flatten(2).to(GET_DTYPE()) + output_chunks.append(x_chunk_embedded) + del x_chunk_complex, x_chunk_embedded + torch.cuda.empty_cache() + + result = [] + for chunk in output_chunks: + result.append(chunk) + del output_chunks + torch.cuda.empty_cache() + + for start in range(seq_len, x.size(0), remaining_chunk_size): + end = min(start + remaining_chunk_size, x.size(0)) + result.append(x[start:end]) + + x_i = torch.cat(result, dim=0) + del result + torch.cuda.empty_cache() + + return x_i.to(GET_DTYPE()) + + +def rope_params(max_seq_len, dim, theta=10000): + assert dim % 2 == 0 + freqs = torch.outer( + torch.arange(max_seq_len), + 1.0 / torch.pow(theta, torch.arange(0, dim, 2).to(torch.float32).div(dim)), + ) + freqs = torch.polar(torch.ones_like(freqs), freqs) + return freqs + + +def sinusoidal_embedding_1d(dim, position): + # preprocess + assert dim % 2 == 0 + half = dim // 2 + position = position.type(torch.float32) + + # calculation + sinusoid = torch.outer(position, torch.pow(10000, -torch.arange(half).to(position).div(half))) + x = torch.cat([torch.cos(sinusoid), torch.sin(sinusoid)], dim=1) + x = x.to(GET_SENSITIVE_DTYPE()) + return x + + +def guidance_scale_embedding(w, embedding_dim=256, cfg_range=(1.0, 6.0), target_range=1000.0, dtype=torch.float32): + """ + Args: + timesteps: torch.Tensor: generate embedding vectors at these timesteps + embedding_dim: int: dimension of the embeddings to generate + dtype: data type of the generated embeddings + + Returns: + embedding vectors with shape `(len(timesteps), embedding_dim)` + """ + assert len(w.shape) == 1 + cfg_min, cfg_max = cfg_range + w = torch.round(w) + w = torch.clamp(w, min=cfg_min, max=cfg_max) + w = (w - cfg_min) / (cfg_max - cfg_min) # [0, 1] + w = w * target_range + half_dim = embedding_dim // 2 + emb = torch.log(torch.tensor(10000.0)) / (half_dim - 1) + emb = torch.exp(torch.arange(half_dim, dtype=dtype).to(w.device) * -emb).to(w.device) + emb = w.to(dtype)[:, None] * emb[None, :] + emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=1) + if embedding_dim % 2 == 1: # zero pad + emb = torch.nn.functional.pad(emb, (0, 1).to(w.device)) + assert emb.shape == (w.shape[0], embedding_dim) + return emb diff --git a/lightx2v/models/networks/wan/infer/vace/transformer_infer.py b/lightx2v/models/networks/wan/infer/vace/transformer_infer.py new file mode 100644 index 0000000..2350c6d --- /dev/null +++ b/lightx2v/models/networks/wan/infer/vace/transformer_infer.py @@ -0,0 +1,38 @@ +from lightx2v.models.networks.wan.infer.offload.transformer_infer import WanOffloadTransformerInfer +from lightx2v.utils.envs import * + + +class WanVaceTransformerInfer(WanOffloadTransformerInfer): + def __init__(self, config): + super().__init__(config) + self.vace_blocks_num = len(self.config["vace_layers"]) + self.vace_blocks_mapping = {orig_idx: seq_idx for seq_idx, orig_idx in enumerate(self.config["vace_layers"])} + + def infer(self, weights, pre_infer_out): + self.get_scheduler_values() + pre_infer_out.c = self.vace_pre_process(weights.vace_patch_embedding, pre_infer_out.vace_context) + self.infer_vace_blocks(weights.vace_blocks, pre_infer_out) + x = self.infer_main_blocks(weights.blocks, pre_infer_out) + return self.infer_non_blocks(weights, x, pre_infer_out.embed) + + def vace_pre_process(self, patch_embedding, vace_context): + c = patch_embedding.apply(vace_context.unsqueeze(0).to(self.sensitive_layer_dtype)) + c = c.flatten(2).transpose(1, 2).contiguous().squeeze(0) + return c + + def infer_vace_blocks(self, vace_blocks, pre_infer_out): + pre_infer_out.adapter_args["hints"] = [] + self.infer_state = "vace" + if hasattr(self, "offload_manager"): + self.offload_manager.init_cuda_buffer(self.vace_offload_block_cuda_buffers, self.vace_offload_phase_cuda_buffers) + self.infer_func(vace_blocks, pre_infer_out.c, pre_infer_out) + self.infer_state = "base" + if hasattr(self, "offload_manager"): + self.offload_manager.init_cuda_buffer(self.offload_block_cuda_buffers, self.offload_phase_cuda_buffers) + + def post_process(self, x, y, c_gate_msa, pre_infer_out): + x = super().post_process(x, y, c_gate_msa, pre_infer_out) + if self.infer_state == "base" and self.block_idx in self.vace_blocks_mapping: + hint_idx = self.vace_blocks_mapping[self.block_idx] + x = x + pre_infer_out.adapter_args["hints"][hint_idx] * pre_infer_out.adapter_args.get("context_scale", 1.0) + return x diff --git a/lightx2v/models/networks/wan/lora_adapter.py b/lightx2v/models/networks/wan/lora_adapter.py new file mode 100644 index 0000000..93a4692 --- /dev/null +++ b/lightx2v/models/networks/wan/lora_adapter.py @@ -0,0 +1,131 @@ +import gc +import os + +import torch +from loguru import logger +from safetensors import safe_open + +from lightx2v.utils.envs import * + + +class WanLoraWrapper: + def __init__(self, wan_model): + self.model = wan_model + self.lora_metadata = {} + self.override_dict = {} # On CPU + + def load_lora(self, lora_path, lora_name=None): + if lora_name is None: + lora_name = os.path.basename(lora_path).split(".")[0] + + if lora_name in self.lora_metadata: + logger.info(f"LoRA {lora_name} already loaded, skipping...") + return lora_name + + self.lora_metadata[lora_name] = {"path": lora_path} + logger.info(f"Registered LoRA metadata for: {lora_name} from {lora_path}") + + return lora_name + + def _load_lora_file(self, file_path): + with safe_open(file_path, framework="pt") as f: + tensor_dict = {key: f.get_tensor(key).to(GET_DTYPE()) for key in f.keys()} + return tensor_dict + + def apply_lora(self, lora_name, alpha=1.0): + if lora_name not in self.lora_metadata: + logger.info(f"LoRA {lora_name} not found. Please load it first.") + + if not hasattr(self.model, "original_weight_dict"): + logger.error("Model does not have 'original_weight_dict'. Cannot apply LoRA.") + return False + + lora_weights = self._load_lora_file(self.lora_metadata[lora_name]["path"]) + weight_dict = self.model.original_weight_dict + self._apply_lora_weights(weight_dict, lora_weights, alpha) + self.model._apply_weights(weight_dict) + + logger.info(f"Applied LoRA: {lora_name} with alpha={alpha}") + del lora_weights + return True + + @torch.no_grad() + def _apply_lora_weights(self, weight_dict, lora_weights, alpha): + lora_pairs = {} + lora_diffs = {} + + def try_lora_pair(key, prefix, suffix_a, suffix_b, target_suffix): + if key.endswith(suffix_a): + base_name = key[len(prefix) :].replace(suffix_a, target_suffix) + pair_key = key.replace(suffix_a, suffix_b) + if pair_key in lora_weights: + lora_pairs[base_name] = (key, pair_key) + + def try_lora_diff(key, prefix, suffix, target_suffix): + if key.endswith(suffix): + base_name = key[len(prefix) :].replace(suffix, target_suffix) + lora_diffs[base_name] = key + + prefixs = [ + "", # empty prefix + "diffusion_model.", + ] + for prefix in prefixs: + for key in lora_weights.keys(): + if not key.startswith(prefix): + continue + + try_lora_pair(key, prefix, "lora_A.weight", "lora_B.weight", "weight") + try_lora_pair(key, prefix, "lora_down.weight", "lora_up.weight", "weight") + try_lora_diff(key, prefix, "diff", "weight") + try_lora_diff(key, prefix, "diff_b", "bias") + try_lora_diff(key, prefix, "diff_m", "modulation") + + applied_count = 0 + for name, param in weight_dict.items(): + if name in lora_pairs: + if name not in self.override_dict: + self.override_dict[name] = param.clone().cpu() + name_lora_A, name_lora_B = lora_pairs[name] + lora_A = lora_weights[name_lora_A].to(param.device, param.dtype) + lora_B = lora_weights[name_lora_B].to(param.device, param.dtype) + if param.shape == (lora_B.shape[0], lora_A.shape[1]): + param += torch.matmul(lora_B, lora_A) * alpha + applied_count += 1 + elif name in lora_diffs: + if name not in self.override_dict: + self.override_dict[name] = param.clone().cpu() + + name_diff = lora_diffs[name] + lora_diff = lora_weights[name_diff].to(param.device, param.dtype) + if param.shape == lora_diff.shape: + param += lora_diff * alpha + applied_count += 1 + + logger.info(f"Applied {applied_count} LoRA weight adjustments") + if applied_count == 0: + logger.info( + "Warning: No LoRA weights were applied. Expected naming conventions: 'diffusion_model..lora_A.weight' and 'diffusion_model..lora_B.weight'. Please verify the LoRA weight file." + ) + + @torch.no_grad() + def remove_lora(self): + logger.info(f"Removing LoRA ...") + + restored_count = 0 + for k, v in self.override_dict.items(): + self.model.original_weight_dict[k] = v.to(self.model.device) + restored_count += 1 + + logger.info(f"LoRA removed, restored {restored_count} weights") + + self.model._apply_weights(self.model.original_weight_dict) + + torch.cuda.empty_cache() + gc.collect() + + self.lora_metadata = {} + self.override_dict = {} + + def list_loaded_loras(self): + return list(self.lora_metadata.keys()) diff --git a/lightx2v/models/networks/wan/matrix_game2_model.py b/lightx2v/models/networks/wan/matrix_game2_model.py new file mode 100644 index 0000000..beedb01 --- /dev/null +++ b/lightx2v/models/networks/wan/matrix_game2_model.py @@ -0,0 +1,48 @@ +import json +import os + +import torch +from safetensors import safe_open + +from lightx2v.models.networks.wan.infer.matrix_game2.pre_infer import WanMtxg2PreInfer +from lightx2v.models.networks.wan.infer.matrix_game2.transformer_infer import WanMtxg2TransformerInfer +from lightx2v.models.networks.wan.infer.post_infer import WanPostInfer +from lightx2v.models.networks.wan.sf_model import WanSFModel +from lightx2v.models.networks.wan.weights.matrix_game2.pre_weights import WanMtxg2PreWeights +from lightx2v.models.networks.wan.weights.matrix_game2.transformer_weights import WanActionTransformerWeights +from lightx2v.utils.envs import * +from lightx2v.utils.utils import * + + +class WanSFMtxg2Model(WanSFModel): + pre_weight_class = WanMtxg2PreWeights + transformer_weight_class = WanActionTransformerWeights + + def __init__(self, model_path, config, device): + super().__init__(model_path, config, device) + + def _load_safetensor_to_dict(self, file_path, unified_dtype, sensitive_layer): + with safe_open(file_path, framework="pt", device=str(self.device)) as f: + return {key: (f.get_tensor(key).to(GET_DTYPE()) if unified_dtype or all(s not in key for s in sensitive_layer) else f.get_tensor(key).to(GET_SENSITIVE_DTYPE())) for key in f.keys()} + + def _load_ckpt(self, unified_dtype, sensitive_layer): + file_path = os.path.join(self.config["model_path"], f"{self.config['sub_model_folder']}/{self.config['sub_model_name']}") + _weight_dict = self._load_safetensor_to_dict(file_path, unified_dtype, sensitive_layer) + weight_dict = {} + for k, v in _weight_dict.items(): + name = k[6:] + weight = v.to(torch.bfloat16).to(self.device) + weight_dict.update({name: weight}) + del _weight_dict + return weight_dict + + def _init_infer_class(self): + # update config by real model config + with open(os.path.join(self.config["model_path"], self.config["sub_model_folder"], "config.json")) as f: + model_config = json.load(f) + for k in model_config.keys(): + self.config[k] = model_config[k] + + self.pre_infer_class = WanMtxg2PreInfer + self.post_infer_class = WanPostInfer + self.transformer_infer_class = WanMtxg2TransformerInfer diff --git a/lightx2v/models/networks/wan/model.py b/lightx2v/models/networks/wan/model.py new file mode 100644 index 0000000..182dc6d --- /dev/null +++ b/lightx2v/models/networks/wan/model.py @@ -0,0 +1,505 @@ +import gc +import glob +import os + +import torch +import torch.distributed as dist +import torch.nn.functional as F +from loguru import logger +from safetensors import safe_open + +from lightx2v.models.networks.wan.infer.feature_caching.transformer_infer import ( + WanTransformerInferAdaCaching, + WanTransformerInferCustomCaching, + WanTransformerInferDualBlock, + WanTransformerInferDynamicBlock, + WanTransformerInferFirstBlock, + WanTransformerInferMagCaching, + WanTransformerInferTaylorCaching, + WanTransformerInferTeaCaching, +) +from lightx2v.models.networks.wan.infer.offload.transformer_infer import ( + WanOffloadTransformerInfer, +) +from lightx2v.models.networks.wan.infer.post_infer import WanPostInfer +from lightx2v.models.networks.wan.infer.pre_infer import WanPreInfer +from lightx2v.models.networks.wan.infer.transformer_infer import ( + WanTransformerInfer, +) +from lightx2v.models.networks.wan.weights.pre_weights import WanPreWeights +from lightx2v.models.networks.wan.weights.transformer_weights import ( + WanTransformerWeights, +) +from lightx2v.utils.custom_compiler import CompiledMethodsMixin, compiled_method +from lightx2v.utils.envs import * +from lightx2v.utils.ggml_tensor import load_gguf_sd_ckpt +from lightx2v.utils.utils import * + + +class WanModel(CompiledMethodsMixin): + pre_weight_class = WanPreWeights + transformer_weight_class = WanTransformerWeights + + def __init__(self, model_path, config, device, model_type="wan2.1"): + super().__init__() + self.model_path = model_path + self.config = config + self.cpu_offload = self.config.get("cpu_offload", False) + self.offload_granularity = self.config.get("offload_granularity", "block") + self.model_type = model_type + self.remove_keys = [] + self.lazy_load = self.config.get("lazy_load", False) + if self.lazy_load: + self.remove_keys.extend(["blocks."]) + if self.config["seq_parallel"]: + self.seq_p_group = self.config.get("device_mesh").get_group(mesh_dim="seq_p") + else: + self.seq_p_group = None + + self.clean_cuda_cache = self.config.get("clean_cuda_cache", False) + self.dit_quantized = self.config.get("dit_quantized", False) + if self.dit_quantized: + assert self.config.get("dit_quant_scheme", "Default") in [ + "Default-Force-FP32", + "fp8-vllm", + "int8-vllm", + "fp8-q8f", + "int8-q8f", + "fp8-b128-deepgemm", + "fp8-sgl", + "int8-sgl", + "int8-torchao", + "nvfp4", + "mxfp4", + "mxfp6-mxfp8", + "mxfp8", + "int8-tmo", + "gguf-Q8_0", + "gguf-Q6_K", + "gguf-Q5_K_S", + "gguf-Q5_K_M", + "gguf-Q5_0", + "gguf-Q5_1", + "gguf-Q4_K_S", + "gguf-Q4_K_M", + "gguf-Q4_0", + "gguf-Q4_1", + "gguf-Q3_K_S", + "gguf-Q3_K_M", + ] + self.device = device + self._init_infer_class() + self._init_weights() + self._init_infer() + + def _init_infer_class(self): + self.pre_infer_class = WanPreInfer + self.post_infer_class = WanPostInfer + + if self.config["feature_caching"] == "NoCaching": + self.transformer_infer_class = WanTransformerInfer if not self.cpu_offload else WanOffloadTransformerInfer + elif self.config["feature_caching"] == "Tea": + self.transformer_infer_class = WanTransformerInferTeaCaching + elif self.config["feature_caching"] == "TaylorSeer": + self.transformer_infer_class = WanTransformerInferTaylorCaching + elif self.config["feature_caching"] == "Ada": + self.transformer_infer_class = WanTransformerInferAdaCaching + elif self.config["feature_caching"] == "Custom": + self.transformer_infer_class = WanTransformerInferCustomCaching + elif self.config["feature_caching"] == "FirstBlock": + self.transformer_infer_class = WanTransformerInferFirstBlock + elif self.config["feature_caching"] == "DualBlock": + self.transformer_infer_class = WanTransformerInferDualBlock + elif self.config["feature_caching"] == "DynamicBlock": + self.transformer_infer_class = WanTransformerInferDynamicBlock + elif self.config["feature_caching"] == "Mag": + self.transformer_infer_class = WanTransformerInferMagCaching + else: + raise NotImplementedError(f"Unsupported feature_caching type: {self.config['feature_caching']}") + + def _should_load_weights(self): + """Determine if current rank should load weights from disk.""" + if self.config.get("device_mesh") is None: + # Single GPU mode + return True + elif dist.is_initialized(): + if self.config.get("load_from_rank0", False): + # Multi-GPU mode, only rank 0 loads + if dist.get_rank() == 0: + logger.info(f"Loading weights from {self.model_path}") + return True + else: + return True + return False + + def _should_init_empty_model(self): + if self.config.get("lora_configs") and self.config["lora_configs"]: + if self.model_type in ["wan2.1"]: + return True + if self.model_type in ["wan2.2_moe_high_noise"]: + for lora_config in self.config["lora_configs"]: + if lora_config["name"] == "high_noise_model": + return True + if self.model_type in ["wan2.2_moe_low_noise"]: + for lora_config in self.config["lora_configs"]: + if lora_config["name"] == "low_noise_model": + return True + return False + + def _load_safetensor_to_dict(self, file_path, unified_dtype, sensitive_layer): + remove_keys = self.remove_keys if hasattr(self, "remove_keys") else [] + + if self.device.type != "cpu" and dist.is_initialized(): + device = dist.get_rank() + else: + device = str(self.device) + + with safe_open(file_path, framework="pt", device=device) as f: + return { + key: (f.get_tensor(key).to(GET_DTYPE()) if unified_dtype or all(s not in key for s in sensitive_layer) else f.get_tensor(key).to(GET_SENSITIVE_DTYPE())) + for key in f.keys() + if not any(remove_key in key for remove_key in remove_keys) + } + + def _load_ckpt(self, unified_dtype, sensitive_layer): + if self.config.get("dit_original_ckpt", None): + safetensors_path = self.config["dit_original_ckpt"] + else: + safetensors_path = self.model_path + + if os.path.isdir(safetensors_path): + if self.lazy_load: + self.lazy_load_path = safetensors_path + non_block_file = os.path.join(safetensors_path, "non_block.safetensors") + if os.path.exists(non_block_file): + safetensors_files = [non_block_file] + else: + raise ValueError(f"Non-block file not found in {safetensors_path}. Please check the model path.") + else: + safetensors_files = glob.glob(os.path.join(safetensors_path, "*.safetensors")) + else: + if self.lazy_load: + self.lazy_load_path = safetensors_path + safetensors_files = [safetensors_path] + + weight_dict = {} + for file_path in safetensors_files: + if self.config.get("adapter_model_path", None) is not None: + if self.config["adapter_model_path"] == file_path: + continue + logger.info(f"Loading weights from {file_path}") + file_weights = self._load_safetensor_to_dict(file_path, unified_dtype, sensitive_layer) + weight_dict.update(file_weights) + + return weight_dict + + def _load_quant_ckpt(self, unified_dtype, sensitive_layer): + remove_keys = self.remove_keys if hasattr(self, "remove_keys") else [] + if self.config.get("dit_quantized_ckpt", None): + safetensors_path = self.config["dit_quantized_ckpt"] + else: + safetensors_path = self.model_path + + if "gguf" in self.config.get("dit_quant_scheme", ""): + gguf_path = "" + if os.path.isdir(safetensors_path): + gguf_type = self.config.get("dit_quant_scheme").replace("gguf-", "") + gguf_files = list(filter(lambda x: gguf_type in x, glob.glob(os.path.join(safetensors_path, "*.gguf")))) + gguf_path = gguf_files[0] + else: + gguf_path = safetensors_path + weight_dict = self._load_gguf_ckpt(gguf_path) + return weight_dict + + if os.path.isdir(safetensors_path): + if self.lazy_load: + self.lazy_load_path = safetensors_path + non_block_file = os.path.join(safetensors_path, "non_block.safetensors") + if os.path.exists(non_block_file): + safetensors_files = [non_block_file] + else: + raise ValueError(f"Non-block file not found in {safetensors_path}. Please check the model path.") + else: + safetensors_files = glob.glob(os.path.join(safetensors_path, "*.safetensors")) + else: + if self.lazy_load: + self.lazy_load_path = safetensors_path + safetensors_files = [safetensors_path] + safetensors_path = os.path.dirname(safetensors_path) + + weight_dict = {} + for safetensor_path in safetensors_files: + if self.config.get("adapter_model_path", None) is not None: + if self.config["adapter_model_path"] == safetensor_path: + continue + + with safe_open(safetensor_path, framework="pt") as f: + logger.info(f"Loading weights from {safetensor_path}") + for k in f.keys(): + if any(remove_key in k for remove_key in remove_keys): + continue + if f.get_tensor(k).dtype in [ + torch.float16, + torch.bfloat16, + torch.float, + ]: + if unified_dtype or all(s not in k for s in sensitive_layer): + weight_dict[k] = f.get_tensor(k).to(GET_DTYPE()).to(self.device) + else: + weight_dict[k] = f.get_tensor(k).to(GET_SENSITIVE_DTYPE()).to(self.device) + else: + weight_dict[k] = f.get_tensor(k).to(self.device) + + if self.config.get("dit_quant_scheme", "Default") == "nvfp4": + calib_path = os.path.join(safetensors_path, "calib.pt") + logger.info(f"[CALIB] Loaded calibration data from: {calib_path}") + calib_data = torch.load(calib_path, map_location="cpu") + for k, v in calib_data["absmax"].items(): + weight_dict[k.replace(".weight", ".input_absmax")] = v.to(self.device) + + return weight_dict + + def _load_gguf_ckpt(self, gguf_path): + state_dict = load_gguf_sd_ckpt(gguf_path, to_device=self.device) + return state_dict + + def _init_weights(self, weight_dict=None): + unified_dtype = GET_DTYPE() == GET_SENSITIVE_DTYPE() + # Some layers run with float32 to achieve high accuracy + sensitive_layer = { + "norm", + "embedding", + "modulation", + "time", + "img_emb.proj.0", + "img_emb.proj.4", + "before_proj", # vace + "after_proj", # vace + } + + if weight_dict is None: + is_weight_loader = self._should_load_weights() + if is_weight_loader: + if not self.dit_quantized: + # Load original weights + weight_dict = self._load_ckpt(unified_dtype, sensitive_layer) + else: + # Load quantized weights + weight_dict = self._load_quant_ckpt(unified_dtype, sensitive_layer) + + if self.config.get("device_mesh") is not None and self.config.get("load_from_rank0", False): + weight_dict = self._load_weights_from_rank0(weight_dict, is_weight_loader) + + if hasattr(self, "adapter_weights_dict"): + weight_dict.update(self.adapter_weights_dict) + + self.original_weight_dict = weight_dict + else: + self.original_weight_dict = weight_dict + + # Initialize weight containers + self.pre_weight = self.pre_weight_class(self.config) + if self.lazy_load: + self.transformer_weights = self.transformer_weight_class(self.config, self.lazy_load_path) + else: + self.transformer_weights = self.transformer_weight_class(self.config) + if not self._should_init_empty_model(): + self._apply_weights() + + def _apply_weights(self, weight_dict=None): + if weight_dict is not None: + self.original_weight_dict = weight_dict + del weight_dict + gc.collect() + # Load weights into containers + self.pre_weight.load(self.original_weight_dict) + self.transformer_weights.load(self.original_weight_dict) + + del self.original_weight_dict + torch.cuda.empty_cache() + gc.collect() + + def _load_weights_from_rank0(self, weight_dict, is_weight_loader): + logger.info("Loading distributed weights") + global_src_rank = 0 + target_device = "cpu" if self.cpu_offload else "cuda" + + if is_weight_loader: + meta_dict = {} + for key, tensor in weight_dict.items(): + meta_dict[key] = {"shape": tensor.shape, "dtype": tensor.dtype} + + obj_list = [meta_dict] + dist.broadcast_object_list(obj_list, src=global_src_rank) + synced_meta_dict = obj_list[0] + else: + obj_list = [None] + dist.broadcast_object_list(obj_list, src=global_src_rank) + synced_meta_dict = obj_list[0] + + distributed_weight_dict = {} + for key, meta in synced_meta_dict.items(): + distributed_weight_dict[key] = torch.empty(meta["shape"], dtype=meta["dtype"], device=target_device) + + if target_device == "cuda": + dist.barrier(device_ids=[torch.cuda.current_device()]) + + for key in sorted(synced_meta_dict.keys()): + if is_weight_loader: + distributed_weight_dict[key].copy_(weight_dict[key], non_blocking=True) + + if target_device == "cpu": + if is_weight_loader: + gpu_tensor = distributed_weight_dict[key].cuda() + dist.broadcast(gpu_tensor, src=global_src_rank) + distributed_weight_dict[key].copy_(gpu_tensor.cpu(), non_blocking=True) + del gpu_tensor + torch.cuda.empty_cache() + else: + gpu_tensor = torch.empty_like(distributed_weight_dict[key], device="cuda") + dist.broadcast(gpu_tensor, src=global_src_rank) + distributed_weight_dict[key].copy_(gpu_tensor.cpu(), non_blocking=True) + del gpu_tensor + torch.cuda.empty_cache() + + if distributed_weight_dict[key].is_pinned(): + distributed_weight_dict[key].copy_(distributed_weight_dict[key], non_blocking=True) + else: + dist.broadcast(distributed_weight_dict[key], src=global_src_rank) + + if target_device == "cuda": + torch.cuda.synchronize() + else: + for tensor in distributed_weight_dict.values(): + if tensor.is_pinned(): + tensor.copy_(tensor, non_blocking=False) + + logger.info(f"Weights distributed across {dist.get_world_size()} devices on {target_device}") + + return distributed_weight_dict + + def _init_infer(self): + self.pre_infer = self.pre_infer_class(self.config) + self.post_infer = self.post_infer_class(self.config) + self.transformer_infer = self.transformer_infer_class(self.config) + if hasattr(self.transformer_infer, "offload_manager"): + self._init_offload_manager() + + def _init_offload_manager(self): + self.transformer_infer.offload_manager.init_cuda_buffer(self.transformer_weights.offload_block_cuda_buffers, self.transformer_weights.offload_phase_cuda_buffers) + if self.lazy_load: + self.transformer_infer.offload_manager.init_cpu_buffer(self.transformer_weights.offload_block_cpu_buffers, self.transformer_weights.offload_phase_cpu_buffers) + if self.config.get("warm_up_cpu_buffers", False): + self.transformer_infer.offload_manager.warm_up_cpu_buffers(self.transformer_weights.blocks_num) + + def set_scheduler(self, scheduler): + self.scheduler = scheduler + self.pre_infer.set_scheduler(scheduler) + self.post_infer.set_scheduler(scheduler) + self.transformer_infer.set_scheduler(scheduler) + + def to_cpu(self): + self.pre_weight.to_cpu() + self.transformer_weights.to_cpu() + + def to_cuda(self): + self.pre_weight.to_cuda() + self.transformer_weights.to_cuda() + + @torch.no_grad() + def infer(self, inputs): + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == 0 and "wan2.2_moe" not in self.config["model_cls"]: + self.to_cuda() + elif self.offload_granularity != "model": + self.pre_weight.to_cuda() + self.transformer_weights.non_block_weights_to_cuda() + + if self.config["enable_cfg"]: + if self.config["cfg_parallel"]: + # ==================== CFG Parallel Processing ==================== + cfg_p_group = self.config["device_mesh"].get_group(mesh_dim="cfg_p") + assert dist.get_world_size(cfg_p_group) == 2, "cfg_p_world_size must be equal to 2" + cfg_p_rank = dist.get_rank(cfg_p_group) + + if cfg_p_rank == 0: + noise_pred = self._infer_cond_uncond(inputs, infer_condition=True) + else: + noise_pred = self._infer_cond_uncond(inputs, infer_condition=False) + + noise_pred_list = [torch.zeros_like(noise_pred) for _ in range(2)] + dist.all_gather(noise_pred_list, noise_pred, group=cfg_p_group) + noise_pred_cond = noise_pred_list[0] # cfg_p_rank == 0 + noise_pred_uncond = noise_pred_list[1] # cfg_p_rank == 1 + else: + # ==================== CFG Processing ==================== + noise_pred_cond = self._infer_cond_uncond(inputs, infer_condition=True) + noise_pred_uncond = self._infer_cond_uncond(inputs, infer_condition=False) + + self.scheduler.noise_pred = noise_pred_uncond + self.scheduler.sample_guide_scale * (noise_pred_cond - noise_pred_uncond) + else: + # ==================== No CFG ==================== + self.scheduler.noise_pred = self._infer_cond_uncond(inputs, infer_condition=True) + + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == self.scheduler.infer_steps - 1 and "wan2.2_moe" not in self.config["model_cls"]: + self.to_cpu() + elif self.offload_granularity != "model": + self.pre_weight.to_cpu() + self.transformer_weights.non_block_weights_to_cpu() + + @compiled_method() + @torch.no_grad() + def _infer_cond_uncond(self, inputs, infer_condition=True): + self.scheduler.infer_condition = infer_condition + + pre_infer_out = self.pre_infer.infer(self.pre_weight, inputs) + + if self.config["seq_parallel"]: + pre_infer_out = self._seq_parallel_pre_process(pre_infer_out) + + x = self.transformer_infer.infer(self.transformer_weights, pre_infer_out) + + if self.config["seq_parallel"]: + x = self._seq_parallel_post_process(x) + + noise_pred = self.post_infer.infer(x, pre_infer_out)[0] + + if self.clean_cuda_cache: + del x, pre_infer_out + torch.cuda.empty_cache() + + return noise_pred + + @torch.no_grad() + def _seq_parallel_pre_process(self, pre_infer_out): + x = pre_infer_out.x + world_size = dist.get_world_size(self.seq_p_group) + cur_rank = dist.get_rank(self.seq_p_group) + + padding_size = (world_size - (x.shape[0] % world_size)) % world_size + if padding_size > 0: + x = F.pad(x, (0, 0, 0, padding_size)) + + pre_infer_out.x = torch.chunk(x, world_size, dim=0)[cur_rank] + + if self.config["model_cls"] in ["wan2.2", "wan2.2_audio"] and self.config["task"] in ["i2v", "s2v"]: + embed, embed0 = pre_infer_out.embed, pre_infer_out.embed0 + + padding_size = (world_size - (embed.shape[0] % world_size)) % world_size + if padding_size > 0: + embed = F.pad(embed, (0, 0, 0, padding_size)) + embed0 = F.pad(embed0, (0, 0, 0, 0, 0, padding_size)) + + pre_infer_out.embed = torch.chunk(embed, world_size, dim=0)[cur_rank] + pre_infer_out.embed0 = torch.chunk(embed0, world_size, dim=0)[cur_rank] + + return pre_infer_out + + @torch.no_grad() + def _seq_parallel_post_process(self, x): + world_size = dist.get_world_size(self.seq_p_group) + gathered_x = [torch.empty_like(x) for _ in range(world_size)] + dist.all_gather(gathered_x, x, group=self.seq_p_group) + combined_output = torch.cat(gathered_x, dim=0) + return combined_output diff --git a/lightx2v/models/networks/wan/sf_model.py b/lightx2v/models/networks/wan/sf_model.py new file mode 100644 index 0000000..a813ef4 --- /dev/null +++ b/lightx2v/models/networks/wan/sf_model.py @@ -0,0 +1,53 @@ +import os + +import torch + +from lightx2v.models.networks.wan.infer.post_infer import WanPostInfer +from lightx2v.models.networks.wan.infer.self_forcing.pre_infer import WanSFPreInfer +from lightx2v.models.networks.wan.infer.self_forcing.transformer_infer import WanSFTransformerInfer +from lightx2v.models.networks.wan.model import WanModel + + +class WanSFModel(WanModel): + def __init__(self, model_path, config, device): + super().__init__(model_path, config, device) + if config["model_cls"] not in ["wan2.1_sf_mtxg2"]: + self.to_cuda() + + def _load_ckpt(self, unified_dtype, sensitive_layer): + sf_confg = self.config["sf_config"] + file_path = os.path.join(self.config["sf_model_path"], f"checkpoints/self_forcing_{sf_confg['sf_type']}.pt") + _weight_dict = torch.load(file_path)["generator_ema"] + weight_dict = {} + for k, v in _weight_dict.items(): + name = k[6:] + weight = v.to(torch.bfloat16) + weight_dict.update({name: weight}) + del _weight_dict + return weight_dict + + def _init_infer_class(self): + self.pre_infer_class = WanSFPreInfer + self.post_infer_class = WanPostInfer + self.transformer_infer_class = WanSFTransformerInfer + + @torch.no_grad() + def infer(self, inputs): + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == 0: + self.to_cuda() + elif self.offload_granularity != "model": + self.pre_weight.to_cuda() + self.transformer_weights.non_block_weights_to_cuda() + + current_start_frame = self.scheduler.seg_index * self.scheduler.num_frame_per_block + current_end_frame = (self.scheduler.seg_index + 1) * self.scheduler.num_frame_per_block + noise_pred = self._infer_cond_uncond(inputs, infer_condition=True) + + self.scheduler.noise_pred[:, current_start_frame:current_end_frame] = noise_pred + if self.cpu_offload: + if self.offload_granularity == "model" and self.scheduler.step_index == self.scheduler.infer_steps - 1: + self.to_cpu() + elif self.offload_granularity != "model": + self.pre_weight.to_cpu() + self.transformer_weights.non_block_weights_to_cpu() diff --git a/lightx2v/models/networks/wan/vace_model.py b/lightx2v/models/networks/wan/vace_model.py new file mode 100644 index 0000000..452729b --- /dev/null +++ b/lightx2v/models/networks/wan/vace_model.py @@ -0,0 +1,55 @@ +import torch + +from lightx2v.models.networks.wan.infer.post_infer import WanPostInfer +from lightx2v.models.networks.wan.infer.pre_infer import WanPreInfer +from lightx2v.models.networks.wan.infer.vace.transformer_infer import WanVaceTransformerInfer +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.networks.wan.weights.pre_weights import WanPreWeights +from lightx2v.models.networks.wan.weights.vace.transformer_weights import ( + WanVaceTransformerWeights, +) +from lightx2v.utils.envs import * +from lightx2v.utils.utils import * + + +class WanVaceModel(WanModel): + pre_weight_class = WanPreWeights + transformer_weight_class = WanVaceTransformerWeights + + def __init__(self, model_path, config, device): + super().__init__(model_path, config, device) + + def _init_infer(self): + super()._init_infer() + if hasattr(self.transformer_infer, "offload_manager"): + self.transformer_infer.offload_block_cuda_buffers = self.transformer_weights.offload_block_cuda_buffers + self.transformer_infer.offload_phase_cuda_buffers = self.transformer_weights.offload_phase_cuda_buffers + self.transformer_infer.vace_offload_block_cuda_buffers = self.transformer_weights.vace_offload_block_cuda_buffers + self.transformer_infer.vace_offload_phase_cuda_buffers = self.transformer_weights.vace_offload_phase_cuda_buffers + if self.lazy_load: + self.transformer_infer.offload_block_cpu_buffers = self.transformer_weights.offload_block_cpu_buffers + self.transformer_infer.offload_phase_cpu_buffers = self.transformer_weights.offload_phase_cpu_buffers + self.transformer_infer.vace_offload_block_cpu_buffers = self.transformer_weights.vace_offload_block_cpu_buffers + self.transformer_infer.vace_offload_phase_cpu_buffers = self.transformer_weights.vace_offload_phase_cpu_buffers + + def _init_infer_class(self): + self.pre_infer_class = WanPreInfer + self.post_infer_class = WanPostInfer + self.transformer_infer_class = WanVaceTransformerInfer + + @torch.no_grad() + def _infer_cond_uncond(self, inputs, infer_condition=True): + self.scheduler.infer_condition = infer_condition + + pre_infer_out = self.pre_infer.infer(self.pre_weight, inputs) + pre_infer_out.vace_context = inputs["image_encoder_output"]["vae_encoder_out"][0] + + x = self.transformer_infer.infer(self.transformer_weights, pre_infer_out) + + noise_pred = self.post_infer.infer(x, pre_infer_out)[0] + + if self.clean_cuda_cache: + del x, pre_infer_out + torch.cuda.empty_cache() + + return noise_pred diff --git a/lightx2v/models/networks/wan/weights/animate/transformer_weights.py b/lightx2v/models/networks/wan/weights/animate/transformer_weights.py new file mode 100644 index 0000000..c399df6 --- /dev/null +++ b/lightx2v/models/networks/wan/weights/animate/transformer_weights.py @@ -0,0 +1,127 @@ +import os + +from safetensors import safe_open + +from lightx2v.common.modules.weight_module import WeightModule +from lightx2v.models.networks.wan.weights.transformer_weights import ( + WanTransformerWeights, +) +from lightx2v.utils.registry_factory import ( + ATTN_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, + RMS_WEIGHT_REGISTER, +) + + +class WanAnimateTransformerWeights(WanTransformerWeights): + def __init__(self, config): + super().__init__(config) + self.adapter_blocks_num = self.blocks_num // 5 + for i in range(self.blocks_num): + if i % 5 == 0: + self.blocks[i].compute_phases.append(WanAnimateFuserBlock(self.config, i // 5, "face_adapter.fuser_blocks", self.mm_type)) + else: + self.blocks[i].compute_phases.append(WeightModule()) + self._add_animate_fuserblock_to_offload_buffers() + + def _add_animate_fuserblock_to_offload_buffers(self): + if hasattr(self, "offload_block_cuda_buffers") and self.offload_block_cuda_buffers is not None: + for i in range(self.offload_blocks_num): + self.offload_block_cuda_buffers[i].compute_phases.append(WanAnimateFuserBlock(self.config, 0, "face_adapter.fuser_blocks", self.mm_type, create_cuda_buffer=True)) + if self.lazy_load: + self.offload_block_cpu_buffers[i].compute_phases.append(WanAnimateFuserBlock(self.config, 0, "face_adapter.fuser_blocks", self.mm_type, create_cpu_buffer=True)) + elif hasattr(self, "offload_phase_cuda_buffers") and self.offload_phase_cuda_buffers is not None: + self.offload_phase_cuda_buffers.append(WanAnimateFuserBlock(self.config, 0, "face_adapter.fuser_blocks", self.mm_type, create_cuda_buffer=True)) + if self.lazy_load: + self.offload_phase_cpu_buffers.append(WanAnimateFuserBlock(self.config, 0, "face_adapter.fuser_blocks", self.mm_type, create_cpu_buffer=True)) + + +class WanAnimateFuserBlock(WeightModule): + def __init__(self, config, block_index, block_prefix, mm_type, create_cuda_buffer=False, create_cpu_buffer=False): + super().__init__() + self.config = config + self.is_post_adapter = True + lazy_load = config.get("lazy_load", False) + if lazy_load: + lazy_load_path = os.path.join( + config.dit_quantized_ckpt, + f"{block_prefix[:-1]}_{block_index}.safetensors", + ) + lazy_load_file = safe_open(lazy_load_path, framework="pt", device="cpu") + else: + lazy_load_file = None + + self.add_module( + "linear1_kv", + MM_WEIGHT_REGISTER[mm_type]( + f"{block_prefix}.{block_index}.linear1_kv.weight", + f"{block_prefix}.{block_index}.linear1_kv.bias", + create_cuda_buffer, + create_cpu_buffer, + lazy_load, + lazy_load_file, + self.is_post_adapter, + ), + ) + + self.add_module( + "linear1_q", + MM_WEIGHT_REGISTER[mm_type]( + f"{block_prefix}.{block_index}.linear1_q.weight", + f"{block_prefix}.{block_index}.linear1_q.bias", + create_cuda_buffer, + create_cpu_buffer, + lazy_load, + lazy_load_file, + self.is_post_adapter, + ), + ) + self.add_module( + "linear2", + MM_WEIGHT_REGISTER[mm_type]( + f"{block_prefix}.{block_index}.linear2.weight", + f"{block_prefix}.{block_index}.linear2.bias", + create_cuda_buffer, + create_cpu_buffer, + lazy_load, + lazy_load_file, + self.is_post_adapter, + ), + ) + + self.add_module( + "q_norm", + RMS_WEIGHT_REGISTER["sgl-kernel"]( + f"{block_prefix}.{block_index}.q_norm.weight", + create_cuda_buffer, + create_cpu_buffer, + lazy_load, + lazy_load_file, + self.is_post_adapter, + ), + ) + + self.add_module( + "k_norm", + RMS_WEIGHT_REGISTER["sgl-kernel"]( + f"{block_prefix}.{block_index}.k_norm.weight", + create_cuda_buffer, + create_cpu_buffer, + lazy_load, + lazy_load_file, + self.is_post_adapter, + ), + ) + + self.add_module( + "pre_norm_feat", + LN_WEIGHT_REGISTER["Default"](), + ) + + self.add_module( + "pre_norm_motion", + LN_WEIGHT_REGISTER["Default"](), + ) + + self.add_module("adapter_attn", ATTN_WEIGHT_REGISTER[config["adapter_attn_type"]]()) diff --git a/lightx2v/models/networks/wan/weights/audio/transformer_weights.py b/lightx2v/models/networks/wan/weights/audio/transformer_weights.py new file mode 100644 index 0000000..097c655 --- /dev/null +++ b/lightx2v/models/networks/wan/weights/audio/transformer_weights.py @@ -0,0 +1,161 @@ +from lightx2v.common.modules.weight_module import WeightModule +from lightx2v.models.networks.wan.weights.transformer_weights import WanTransformerWeights +from lightx2v.utils.registry_factory import ( + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, + TENSOR_REGISTER, +) + + +class WanAudioTransformerWeights(WanTransformerWeights): + def __init__(self, config): + super().__init__(config) + for i in range(self.blocks_num): + self.blocks[i].compute_phases.append( + WanAudioAdapterCA( + i, + f"ca", + self.task, + self.mm_type, + self.config, + False, + False, + self.blocks[i].lazy_load, + self.blocks[i].lazy_load_file, + ) + ) + + self._add_audio_adapter_ca_to_offload_buffers() + + def _add_audio_adapter_ca_to_offload_buffers(self): + if hasattr(self, "offload_block_cuda_buffers") and self.offload_block_cuda_buffers is not None: + for i in range(self.offload_blocks_num): + offload_buffer = self.offload_block_cuda_buffers[i] + adapter_ca = WanAudioAdapterCA( + block_index=i, + block_prefix=f"ca", + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=True, + create_cpu_buffer=False, + lazy_load=offload_buffer.lazy_load, + lazy_load_file=offload_buffer.lazy_load_file, + ) + offload_buffer.compute_phases.append(adapter_ca) + if self.lazy_load: + offload_buffer = self.offload_block_cpu_buffers[i] + adapter_ca = WanAudioAdapterCA( + block_index=i, + block_prefix=f"ca", + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=False, + create_cpu_buffer=True, + lazy_load=offload_buffer.lazy_load, + lazy_load_file=offload_buffer.lazy_load_file, + ) + offload_buffer.compute_phases.append(adapter_ca) + + elif hasattr(self, "offload_phase_cuda_buffers") and self.offload_phase_cuda_buffers is not None: + adapter_ca = WanAudioAdapterCA( + block_index=0, + block_prefix=f"ca", + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=True, + create_cpu_buffer=False, + lazy_load=self.blocks[0].lazy_load, + lazy_load_file=self.blocks[0].lazy_load_file, + ) + self.offload_phase_cuda_buffers.append(adapter_ca) + if self.lazy_load: + adapter_ca = WanAudioAdapterCA( + block_index=0, + block_prefix=f"ca", + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=False, + create_cpu_buffer=True, + lazy_load=self.blocks[0].lazy_load, + lazy_load_file=self.blocks[0].lazy_load_file, + ) + self.offload_phase_cpu_buffers.append(adapter_ca) + + +class WanAudioAdapterCA(WeightModule): + def __init__(self, block_index, block_prefix, task, mm_type, config, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + + self.add_module( + "to_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{block_index}.to_q.weight", + f"{block_prefix}.{block_index}.to_q.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.add_module( + "to_kv", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{block_index}.to_kv.weight", + f"{block_prefix}.{block_index}.to_kv.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.add_module( + "to_out", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{block_index}.to_out.weight", + f"{block_prefix}.{block_index}.to_out.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.add_module( + "norm_kv", + LN_WEIGHT_REGISTER["Default"]( + f"{block_prefix}.{block_index}.norm_kv.weight", + f"{block_prefix}.{block_index}.norm_kv.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.add_module( + "norm_q", + LN_WEIGHT_REGISTER["Default"](), + ) + + self.add_module( + "shift_scale_gate", + TENSOR_REGISTER["Default"]( + f"{block_prefix}.{block_index}.shift_scale_gate", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) diff --git a/lightx2v/models/networks/wan/weights/matrix_game2/pre_weights.py b/lightx2v/models/networks/wan/weights/matrix_game2/pre_weights.py new file mode 100644 index 0000000..6f5f4aa --- /dev/null +++ b/lightx2v/models/networks/wan/weights/matrix_game2/pre_weights.py @@ -0,0 +1,50 @@ +from lightx2v.common.modules.weight_module import WeightModule +from lightx2v.utils.registry_factory import ( + CONV3D_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, +) + + +class WanMtxg2PreWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.in_dim = config["in_dim"] + self.dim = config["dim"] + self.patch_size = (1, 2, 2) + self.config = config + # patch + self.add_module( + "patch_embedding", + CONV3D_WEIGHT_REGISTER["Default"]("patch_embedding.weight", "patch_embedding.bias", stride=self.patch_size), + ) + # time + self.add_module( + "time_embedding_0", + MM_WEIGHT_REGISTER["Default"]("time_embedding.0.weight", "time_embedding.0.bias"), + ) + self.add_module( + "time_embedding_2", + MM_WEIGHT_REGISTER["Default"]("time_embedding.2.weight", "time_embedding.2.bias"), + ) + self.add_module( + "time_projection_1", + MM_WEIGHT_REGISTER["Default"]("time_projection.1.weight", "time_projection.1.bias"), + ) + # img_emb + self.add_module( + "img_emb_0", + LN_WEIGHT_REGISTER["Default"]("img_emb.proj.0.weight", "img_emb.proj.0.bias", eps=1e-5), + ) + self.add_module( + "img_emb_1", + MM_WEIGHT_REGISTER["Default"]("img_emb.proj.1.weight", "img_emb.proj.1.bias"), + ) + self.add_module( + "img_emb_3", + MM_WEIGHT_REGISTER["Default"]("img_emb.proj.3.weight", "img_emb.proj.3.bias"), + ) + self.add_module( + "img_emb_4", + LN_WEIGHT_REGISTER["Default"]("img_emb.proj.4.weight", "img_emb.proj.4.bias", eps=1e-5), + ) diff --git a/lightx2v/models/networks/wan/weights/matrix_game2/transformer_weights.py b/lightx2v/models/networks/wan/weights/matrix_game2/transformer_weights.py new file mode 100644 index 0000000..c3668a4 --- /dev/null +++ b/lightx2v/models/networks/wan/weights/matrix_game2/transformer_weights.py @@ -0,0 +1,244 @@ +from lightx2v.common.modules.weight_module import WeightModule, WeightModuleList +from lightx2v.models.networks.wan.weights.transformer_weights import ( + WanFFN, + WanSelfAttention, + WanTransformerAttentionBlock, +) +from lightx2v.utils.registry_factory import ( + ATTN_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, + RMS_WEIGHT_REGISTER, + TENSOR_REGISTER, +) + + +class WanActionTransformerWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.blocks_num = config["num_layers"] + self.task = config["task"] + self.config = config + self.mm_type = config.get("dit_quant_scheme", "Default") + if self.mm_type != "Default": + assert config.get("dit_quantized") is True + + action_blocks = config["action_config"]["blocks"] + block_list = [] + for i in range(self.blocks_num): + if i in action_blocks: + block_list.append(WanTransformerActionBlock(i, self.task, self.mm_type, self.config)) + else: + block_list.append(WanTransformerAttentionBlock(i, self.task, self.mm_type, self.config)) + self.blocks = WeightModuleList(block_list) + self.add_module("blocks", self.blocks) + + # non blocks weights + self.register_parameter("norm", LN_WEIGHT_REGISTER["Default"]()) + self.add_module("head", MM_WEIGHT_REGISTER["Default"]("head.head.weight", "head.head.bias")) + self.register_parameter("head_modulation", TENSOR_REGISTER["Default"]("head.modulation")) + + def non_block_weights_to_cuda(self): + self.norm.to_cuda() + self.head.to_cuda() + self.head_modulation.to_cuda() + + def non_block_weights_to_cpu(self): + self.norm.to_cpu() + self.head.to_cpu() + self.head_modulation.to_cpu() + + +class WanTransformerActionBlock(WeightModule): + def __init__(self, block_index, task, mm_type, config, block_prefix="blocks"): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + assert not self.config.get("lazy_load", False) + self.compute_phases = WeightModuleList( + [ + WanSelfAttention(block_index, block_prefix, task, mm_type, config), + WanActionCrossAttention( + block_index, + block_prefix, + task, + mm_type, + config, + ), + WanActionModule( + block_index, + block_prefix, + task, + mm_type, + config, + ), + WanFFN( + block_index, + block_prefix, + task, + mm_type, + config, + ), + ] + ) + + self.add_module("compute_phases", self.compute_phases) + + +class WanActionModule(WeightModule): + def __init__(self, block_index, block_prefix, task, mm_type, config): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + + self.attn_rms_type = "self_forcing" + + self.add_module( + "keyboard_embed_0", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.keyboard_embed.0.weight", + f"{block_prefix}.{self.block_index}.action_model.keyboard_embed.0.bias", + ), + ) + self.add_module( + "keyboard_embed_2", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.keyboard_embed.2.weight", + f"{block_prefix}.{self.block_index}.action_model.keyboard_embed.2.bias", + ), + ) + + self.add_module( + "proj_keyboard", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.proj_keyboard.weight", + bias_name=None, + ), + ) + + self.add_module( + "keyboard_attn_kv", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.keyboard_attn_kv.weight", + bias_name=None, + ), + ) + + self.add_module("cross_attn_2", ATTN_WEIGHT_REGISTER[self.config["cross_attn_2_type"]]()) + + self.add_module( + "mouse_attn_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.mouse_attn_q.weight", + bias_name=None, + ), + ) + + if self.config["mode"] != "templerun": + self.add_module( + "t_qkv", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.t_qkv.weight", + bias_name=None, + ), + ) + + self.add_module( + "proj_mouse", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.proj_mouse.weight", + bias_name=None, + ), + ) + + self.add_module( + "mouse_mlp_0", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.mouse_mlp.0.weight", + f"{block_prefix}.{self.block_index}.action_model.mouse_mlp.0.bias", + ), + ) + self.add_module( + "mouse_mlp_2", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.mouse_mlp.2.weight", + f"{block_prefix}.{self.block_index}.action_model.mouse_mlp.2.bias", + ), + ) + self.add_module( + "mouse_mlp_3", + LN_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.action_model.mouse_mlp.3.weight", + f"{block_prefix}.{self.block_index}.action_model.mouse_mlp.3.bias", + eps=1e-6, + ), + ) + + +class WanActionCrossAttention(WeightModule): + def __init__(self, block_index, block_prefix, task, mm_type, config): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + + if self.config.get("sf_config", False): + self.attn_rms_type = "self_forcing" + else: + self.attn_rms_type = "sgl-kernel" + + self.add_module( + "norm3", + LN_WEIGHT_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.norm3.weight", + f"{block_prefix}.{self.block_index}.norm3.bias", + ), + ) + self.add_module( + "cross_attn_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.q.weight", + f"{block_prefix}.{self.block_index}.cross_attn.q.bias", + ), + ) + self.add_module( + "cross_attn_k", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.k.weight", + f"{block_prefix}.{self.block_index}.cross_attn.k.bias", + ), + ) + self.add_module( + "cross_attn_v", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.v.weight", + f"{block_prefix}.{self.block_index}.cross_attn.v.bias", + ), + ) + self.add_module( + "cross_attn_o", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.o.weight", + f"{block_prefix}.{self.block_index}.cross_attn.o.bias", + ), + ) + self.add_module( + "cross_attn_norm_q", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.cross_attn.norm_q.weight", + ), + ) + self.add_module( + "cross_attn_norm_k", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.cross_attn.norm_k.weight", + ), + ) + self.add_module("cross_attn_1", ATTN_WEIGHT_REGISTER[self.config["cross_attn_1_type"]]()) diff --git a/lightx2v/models/networks/wan/weights/post_weights.py b/lightx2v/models/networks/wan/weights/post_weights.py new file mode 100644 index 0000000..1a02b12 --- /dev/null +++ b/lightx2v/models/networks/wan/weights/post_weights.py @@ -0,0 +1,7 @@ +from lightx2v.common.modules.weight_module import WeightModule + + +class WanPostWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.config = config diff --git a/lightx2v/models/networks/wan/weights/pre_weights.py b/lightx2v/models/networks/wan/weights/pre_weights.py new file mode 100644 index 0000000..c617201 --- /dev/null +++ b/lightx2v/models/networks/wan/weights/pre_weights.py @@ -0,0 +1,80 @@ +from lightx2v.common.modules.weight_module import WeightModule +from lightx2v.utils.registry_factory import ( + CONV3D_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, + TENSOR_REGISTER, +) + + +class WanPreWeights(WeightModule): + def __init__(self, config): + super().__init__() + self.in_dim = config["in_dim"] + self.dim = config["dim"] + self.patch_size = (1, 2, 2) + self.config = config + + self.add_module( + "patch_embedding", + CONV3D_WEIGHT_REGISTER["Default"]("patch_embedding.weight", "patch_embedding.bias", stride=self.patch_size), + ) + self.add_module( + "text_embedding_0", + MM_WEIGHT_REGISTER["Default"]("text_embedding.0.weight", "text_embedding.0.bias"), + ) + self.add_module( + "text_embedding_2", + MM_WEIGHT_REGISTER["Default"]("text_embedding.2.weight", "text_embedding.2.bias"), + ) + self.add_module( + "time_embedding_0", + MM_WEIGHT_REGISTER["Default"]("time_embedding.0.weight", "time_embedding.0.bias"), + ) + self.add_module( + "time_embedding_2", + MM_WEIGHT_REGISTER["Default"]("time_embedding.2.weight", "time_embedding.2.bias"), + ) + self.add_module( + "time_projection_1", + MM_WEIGHT_REGISTER["Default"]("time_projection.1.weight", "time_projection.1.bias"), + ) + + if config["task"] in ["i2v", "flf2v", "animate", "s2v"] and config.get("use_image_encoder", True): + self.add_module( + "proj_0", + LN_WEIGHT_REGISTER["Default"]("img_emb.proj.0.weight", "img_emb.proj.0.bias"), + ) + self.add_module( + "proj_1", + MM_WEIGHT_REGISTER["Default"]("img_emb.proj.1.weight", "img_emb.proj.1.bias"), + ) + self.add_module( + "proj_3", + MM_WEIGHT_REGISTER["Default"]("img_emb.proj.3.weight", "img_emb.proj.3.bias"), + ) + self.add_module( + "proj_4", + LN_WEIGHT_REGISTER["Default"]("img_emb.proj.4.weight", "img_emb.proj.4.bias"), + ) + + if config["model_cls"] == "wan2.1_distill" and config.get("enable_dynamic_cfg", False): + self.add_module( + "cfg_cond_proj_1", + MM_WEIGHT_REGISTER["Default"]("guidance_embedding.linear_1.weight", "guidance_embedding.linear_1.bias"), + ) + self.add_module( + "cfg_cond_proj_2", + MM_WEIGHT_REGISTER["Default"]("guidance_embedding.linear_2.weight", "guidance_embedding.linear_2.bias"), + ) + + if config["task"] == "flf2v" and config.get("use_image_encoder", True): + self.add_module( + "emb_pos", + TENSOR_REGISTER["Default"](f"img_emb.emb_pos"), + ) + if config["task"] == "animate": + self.add_module( + "pose_patch_embedding", + CONV3D_WEIGHT_REGISTER["Default"]("pose_patch_embedding.weight", "pose_patch_embedding.bias", stride=self.patch_size), + ) diff --git a/lightx2v/models/networks/wan/weights/transformer_weights.py b/lightx2v/models/networks/wan/weights/transformer_weights.py new file mode 100644 index 0000000..6107c8d --- /dev/null +++ b/lightx2v/models/networks/wan/weights/transformer_weights.py @@ -0,0 +1,578 @@ +from lightx2v.common.modules.weight_module import WeightModule, WeightModuleList +from lightx2v.utils.registry_factory import ( + ATTN_WEIGHT_REGISTER, + LN_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, + RMS_WEIGHT_REGISTER, + TENSOR_REGISTER, +) + + +class WanTransformerWeights(WeightModule): + def __init__(self, config, lazy_load_path=None): + super().__init__() + self.blocks_num = config["num_layers"] + self.task = config["task"] + self.config = config + self.mm_type = config.get("dit_quant_scheme", "Default") + if self.mm_type != "Default": + assert config.get("dit_quantized") is True + if config.get("do_mm_calib", False): + self.mm_type = "Calib" + self.lazy_load = self.config.get("lazy_load", False) + self.blocks = WeightModuleList( + [ + WanTransformerAttentionBlock( + block_index=i, + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=False, + create_cpu_buffer=False, + block_prefix="blocks", + lazy_load=self.lazy_load, + lazy_load_path=lazy_load_path, + ) + for i in range(self.blocks_num) + ] + ) + self.register_offload_buffers(config, lazy_load_path) + self.add_module("blocks", self.blocks) + + # non blocks weights + self.register_parameter("norm", LN_WEIGHT_REGISTER["Default"]()) + self.add_module("head", MM_WEIGHT_REGISTER["Default"]("head.head.weight", "head.head.bias")) + self.register_parameter("head_modulation", TENSOR_REGISTER["Default"]("head.modulation")) + + def register_offload_buffers(self, config, lazy_load_path): + if config["cpu_offload"]: + if config["offload_granularity"] == "block": + self.offload_blocks_num = 2 + self.offload_block_cuda_buffers = WeightModuleList( + [ + WanTransformerAttentionBlock( + block_index=i, + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=True, + create_cpu_buffer=False, + block_prefix="blocks", + lazy_load=self.lazy_load, + lazy_load_path=lazy_load_path, + ) + for i in range(self.offload_blocks_num) + ] + ) + self.add_module("offload_block_cuda_buffers", self.offload_block_cuda_buffers) + self.offload_phase_cuda_buffers = None + + if self.lazy_load: + self.offload_blocks_num = 2 + self.offload_block_cpu_buffers = WeightModuleList( + [ + WanTransformerAttentionBlock( + block_index=i, + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=False, + create_cpu_buffer=True, + block_prefix="blocks", + lazy_load=self.lazy_load, + lazy_load_path=lazy_load_path, + ) + for i in range(self.offload_blocks_num) + ] + ) + self.add_module("offload_block_cpu_buffers", self.offload_block_cpu_buffers) + self.offload_phase_cpu_buffers = None + + elif config["offload_granularity"] == "phase": + self.offload_phase_cuda_buffers = WanTransformerAttentionBlock( + block_index=0, + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=True, + create_cpu_buffer=False, + block_prefix="blocks", + lazy_load=self.lazy_load, + lazy_load_path=lazy_load_path, + ).compute_phases + self.add_module("offload_phase_cuda_buffers", self.offload_phase_cuda_buffers) + self.offload_block_cuda_buffers = None + if self.lazy_load: + self.offload_phase_cpu_buffers = WeightModuleList( + [ + WanTransformerAttentionBlock( + block_index=i, + task=self.task, + mm_type=self.mm_type, + config=self.config, + create_cuda_buffer=False, + create_cpu_buffer=True, + block_prefix="blocks", + lazy_load=self.lazy_load, + lazy_load_path=lazy_load_path, + ).compute_phases + for i in range(2) + ] + ) + self.add_module("offload_phase_cpu_buffers", self.offload_phase_cpu_buffers) + self.offload_block_cpu_buffers = None + + def non_block_weights_to_cuda(self): + self.norm.to_cuda() + self.head.to_cuda() + self.head_modulation.to_cuda() + + def non_block_weights_to_cpu(self): + self.norm.to_cpu() + self.head.to_cpu() + self.head_modulation.to_cpu() + + +class WanTransformerAttentionBlock(WeightModule): + def __init__( + self, + block_index, + task, + mm_type, + config, + create_cuda_buffer=False, + create_cpu_buffer=False, + block_prefix="blocks", + lazy_load=False, + lazy_load_path=None, + ): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.quant_method = config.get("quant_method", None) + + self.lazy_load = lazy_load + if self.lazy_load: + self.lazy_load_file = lazy_load_path + else: + self.lazy_load_file = None + + self.compute_phases = WeightModuleList( + [ + WanSelfAttention( + block_index, + block_prefix, + task, + mm_type, + config, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + WanCrossAttention( + block_index, + block_prefix, + task, + mm_type, + config, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + WanFFN( + block_index, + block_prefix, + task, + mm_type, + config, + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ] + ) + + self.add_module("compute_phases", self.compute_phases) + + +class WanSelfAttention(WeightModule): + def __init__( + self, + block_index, + block_prefix, + task, + mm_type, + config, + create_cuda_buffer=False, + create_cpu_buffer=False, + lazy_load=False, + lazy_load_file=None, + ): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + + if self.config.get("sf_config", False): + self.attn_rms_type = "self_forcing" + else: + self.attn_rms_type = "sgl-kernel" + + self.add_module( + "modulation", + TENSOR_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.modulation", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.add_module( + "norm1", + LN_WEIGHT_REGISTER["Default"](), + ) + + self.add_module( + "self_attn_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.self_attn.q.weight", + f"{block_prefix}.{self.block_index}.self_attn.q.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.add_module( + "self_attn_k", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.self_attn.k.weight", + f"{block_prefix}.{self.block_index}.self_attn.k.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "self_attn_v", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.self_attn.v.weight", + f"{block_prefix}.{self.block_index}.self_attn.v.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "self_attn_o", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.self_attn.o.weight", + f"{block_prefix}.{self.block_index}.self_attn.o.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "self_attn_norm_q", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.self_attn.norm_q.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "self_attn_norm_k", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.self_attn.norm_k.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + attention_weights_cls = ATTN_WEIGHT_REGISTER[self.config["self_attn_1_type"]] + if self.config["self_attn_1_type"] == "svg_attn": + attention_weights_cls.prepare( + head_num=self.config["num_heads"], + head_dim=self.config["dim"] // self.config["num_heads"], + sample_mse_max_row=self.config.get("svg_sample_mse_max_row", 10000), + num_sampled_rows=self.config.get("svg_num_sampled_rows", 64), + context_length=self.config.get("svg_context_length", 0), + sparsity=self.config.get("svg_sparsity", 0.25), + ) + if self.config["self_attn_1_type"] in [ + "svg_attn", + "radial_attn", + "nbhd_attn", + "nbhd_attn_flashinfer", + ]: + attention_weights_cls.attnmap_frame_num = self.config["attnmap_frame_num"] + # nbhd_attn setting + if self.config["self_attn_1_type"] in ["nbhd_attn", "nbhd_attn_flashinfer"]: + if "nbhd_attn_setting" in self.config: + if "coefficient" in self.config["nbhd_attn_setting"]: + attention_weights_cls.coefficient = self.config["nbhd_attn_setting"]["coefficient"] + if "min_width" in self.config["nbhd_attn_setting"]: + attention_weights_cls.min_width = self.config["nbhd_attn_setting"]["min_width"] + self.add_module("self_attn_1", attention_weights_cls()) + + if self.config["seq_parallel"]: + self.add_module( + "self_attn_1_parallel", + ATTN_WEIGHT_REGISTER[self.config["parallel"].get("seq_p_attn_type", "ulysses")](), + ) + + if self.quant_method in ["advanced_ptq"]: + self.add_module( + "smooth_norm1_weight", + TENSOR_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.affine_norm1.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "smooth_norm1_bias", + TENSOR_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.affine_norm1.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + +class WanCrossAttention(WeightModule): + def __init__( + self, + block_index, + block_prefix, + task, + mm_type, + config, + create_cuda_buffer=False, + create_cpu_buffer=False, + lazy_load=False, + lazy_load_file=None, + ): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + + if self.config.get("sf_config", False): + self.attn_rms_type = "self_forcing" + else: + self.attn_rms_type = "sgl-kernel" + + self.add_module( + "norm3", + LN_WEIGHT_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.norm3.weight", + f"{block_prefix}.{self.block_index}.norm3.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_q", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.q.weight", + f"{block_prefix}.{self.block_index}.cross_attn.q.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_k", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.k.weight", + f"{block_prefix}.{self.block_index}.cross_attn.k.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_v", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.v.weight", + f"{block_prefix}.{self.block_index}.cross_attn.v.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_o", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.o.weight", + f"{block_prefix}.{self.block_index}.cross_attn.o.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_norm_q", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.cross_attn.norm_q.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_norm_k", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.cross_attn.norm_k.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module("cross_attn_1", ATTN_WEIGHT_REGISTER[self.config["cross_attn_1_type"]]()) + + if self.config["task"] in ["i2v", "flf2v", "animate", "s2v"] and self.config.get("use_image_encoder", True) and self.config["model_cls"] != "wan2.1_sf_mtxg2": + self.add_module( + "cross_attn_k_img", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.k_img.weight", + f"{block_prefix}.{self.block_index}.cross_attn.k_img.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_v_img", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.cross_attn.v_img.weight", + f"{block_prefix}.{self.block_index}.cross_attn.v_img.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "cross_attn_norm_k_img", + RMS_WEIGHT_REGISTER[self.attn_rms_type]( + f"{block_prefix}.{self.block_index}.cross_attn.norm_k_img.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module("cross_attn_2", ATTN_WEIGHT_REGISTER[self.config["cross_attn_2_type"]]()) + + +class WanFFN(WeightModule): + def __init__( + self, + block_index, + block_prefix, + task, + mm_type, + config, + create_cuda_buffer=False, + create_cpu_buffer=False, + lazy_load=False, + lazy_load_file=None, + ): + super().__init__() + self.block_index = block_index + self.mm_type = mm_type + self.task = task + self.config = config + self.quant_method = config.get("quant_method", None) + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + + self.add_module( + "norm2", + LN_WEIGHT_REGISTER["Default"](), + ) + + self.add_module( + "ffn_0", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.ffn.0.weight", + f"{block_prefix}.{self.block_index}.ffn.0.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "ffn_2", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.ffn.2.weight", + f"{block_prefix}.{self.block_index}.ffn.2.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + if self.quant_method in ["advanced_ptq"]: + self.add_module( + "smooth_norm2_weight", + TENSOR_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.affine_norm3.weight", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + self.add_module( + "smooth_norm2_bias", + TENSOR_REGISTER["Default"]( + f"{block_prefix}.{self.block_index}.affine_norm3.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) diff --git a/lightx2v/models/networks/wan/weights/vace/transformer_weights.py b/lightx2v/models/networks/wan/weights/vace/transformer_weights.py new file mode 100644 index 0000000..dd8127e --- /dev/null +++ b/lightx2v/models/networks/wan/weights/vace/transformer_weights.py @@ -0,0 +1,76 @@ +from lightx2v.common.modules.weight_module import WeightModuleList +from lightx2v.models.networks.wan.weights.transformer_weights import ( + WanTransformerAttentionBlock, + WanTransformerWeights, +) +from lightx2v.utils.registry_factory import ( + CONV3D_WEIGHT_REGISTER, + MM_WEIGHT_REGISTER, +) + + +class WanVaceTransformerWeights(WanTransformerWeights): + def __init__(self, config): + super().__init__(config) + self.patch_size = (1, 2, 2) + self.register_offload_buffers(config) + self.vace_blocks = WeightModuleList( + [WanVaceTransformerAttentionBlock(self.config["vace_layers"][i], i, self.task, self.mm_type, self.config, False, False, "vace_blocks") for i in range(len(self.config["vace_layers"]))] + ) + self.add_module("vace_blocks", self.vace_blocks) + self.add_module( + "vace_patch_embedding", + CONV3D_WEIGHT_REGISTER["Default"]("vace_patch_embedding.weight", "vace_patch_embedding.bias", stride=self.patch_size), + ) + + def register_offload_buffers(self, config): + super().register_offload_buffers(config) + if config["cpu_offload"]: + if config["offload_granularity"] == "block": + self.vace_offload_block_cuda_buffers = WeightModuleList( + [ + WanVaceTransformerAttentionBlock(self.config["vace_layers"][0], 0, self.task, self.mm_type, self.config, True, False, "vace_blocks"), + WanVaceTransformerAttentionBlock(self.config["vace_layers"][0], 0, self.task, self.mm_type, self.config, True, False, "vace_blocks"), + ] + ) + self.add_module("vace_offload_block_cuda_buffers", self.vace_offload_block_cuda_buffers) + self.vace_offload_phase_cuda_buffers = None + elif config["offload_granularity"] == "phase": + raise NotImplementedError + + def non_block_weights_to_cuda(self): + super().non_block_weights_to_cuda() + self.vace_patch_embedding.to_cuda() + + def non_block_weights_to_cpu(self): + super().non_block_weights_to_cpu() + self.vace_patch_embedding.to_cpu() + + +class WanVaceTransformerAttentionBlock(WanTransformerAttentionBlock): + def __init__(self, base_block_idx, block_index, task, mm_type, config, create_cuda_buffer, create_cpu_buffer, block_prefix): + super().__init__(block_index, task, mm_type, config, create_cuda_buffer, create_cpu_buffer, block_prefix) + if base_block_idx == 0: + self.compute_phases[0].add_module( + "before_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.before_proj.weight", + f"{block_prefix}.{self.block_index}.before_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) + + self.compute_phases[-1].add_module( + "after_proj", + MM_WEIGHT_REGISTER[self.mm_type]( + f"{block_prefix}.{self.block_index}.after_proj.weight", + f"{block_prefix}.{self.block_index}.after_proj.bias", + create_cuda_buffer, + create_cpu_buffer, + self.lazy_load, + self.lazy_load_file, + ), + ) diff --git a/lightx2v/models/runners/__init__.py b/lightx2v/models/runners/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/runners/base_runner.py b/lightx2v/models/runners/base_runner.py new file mode 100644 index 0000000..97acb7e --- /dev/null +++ b/lightx2v/models/runners/base_runner.py @@ -0,0 +1,169 @@ +import os +from abc import ABC + +import torch +import torch.distributed as dist + +from lightx2v_platform.base.global_var import AI_DEVICE + + +class BaseRunner(ABC): + """Abstract base class for all Runners + + Defines interface methods that all subclasses must implement + """ + + def __init__(self, config): + self.config = config + self.vae_encoder_need_img_original = False + self.input_info = None + + def load_transformer(self): + """Load transformer model + + Returns: + Loaded transformer model instance + """ + pass + + def load_text_encoder(self): + """Load text encoder + + Returns: + Text encoder instance or list of text encoder instances + """ + pass + + def load_image_encoder(self): + """Load image encoder + + Returns: + Image encoder instance or None if not needed + """ + pass + + def load_vae(self): + """Load VAE encoder and decoder + + Returns: + Tuple[vae_encoder, vae_decoder]: VAE encoder and decoder instances + """ + pass + + def run_image_encoder(self, img): + """Run image encoder + + Args: + img: Input image + + Returns: + Image encoding result + """ + pass + + def run_vae_encoder(self, img): + """Run VAE encoder + + Args: + img: Input image + + Returns: + Tuple of VAE encoding result and additional parameters + """ + pass + + def run_text_encoder(self, prompt, img): + """Run text encoder + + Args: + prompt: Input text prompt + img: Optional input image (for some models) + + Returns: + Text encoding result + """ + pass + + def get_encoder_output_i2v(self, clip_encoder_out, vae_encoder_out, text_encoder_output, img): + """Combine encoder outputs for i2v task + + Args: + clip_encoder_out: CLIP encoder output + vae_encoder_out: VAE encoder output + text_encoder_output: Text encoder output + img: Original image + + Returns: + Combined encoder output dictionary + """ + pass + + def init_scheduler(self): + """Initialize scheduler""" + pass + + def load_vae_decoder(self): + """Load VAE decoder + + Default implementation: get decoder from load_vae method + Subclasses can override this method to provide different loading logic + + Returns: + VAE decoder instance + """ + if not hasattr(self, "vae_decoder") or self.vae_decoder is None: + _, self.vae_decoder = self.load_vae() + return self.vae_decoder + + def get_video_segment_num(self): + self.video_segment_num = 1 + + def init_run(self): + pass + + def init_run_segment(self, segment_idx): + self.segment_idx = segment_idx + + def run_segment(self, segment_idx=0): + pass + + def end_run_segment(self, segment_idx=None): + self.gen_video_final = self.gen_video + + def end_run(self): + pass + + def check_stop(self): + """Check if the stop signal is received""" + + rank, world_size = 0, 1 + if dist.is_initialized(): + rank = dist.get_rank() + world_size = dist.get_world_size() + stop_rank = int(os.getenv("WORKER_RANK", "0")) % world_size # same as worker hub target_rank + pause_rank = int(os.getenv("READER_RANK", "0")) % world_size # same as va_reader target_rank + + stopped, paused = 0, 0 + if rank == stop_rank and hasattr(self, "stop_signal") and self.stop_signal: + stopped = 1 + if rank == pause_rank and hasattr(self, "pause_signal") and self.pause_signal: + paused = 1 + + if world_size > 1: + if rank == stop_rank: + t1 = torch.tensor([stopped], dtype=torch.int32).to(device=AI_DEVICE) + else: + t1 = torch.zeros(1, dtype=torch.int32, device=AI_DEVICE) + if rank == pause_rank: + t2 = torch.tensor([paused], dtype=torch.int32).to(device=AI_DEVICE) + else: + t2 = torch.zeros(1, dtype=torch.int32, device=AI_DEVICE) + dist.broadcast(t1, src=stop_rank) + dist.broadcast(t2, src=pause_rank) + stopped = t1.item() + paused = t2.item() + + if stopped == 1: + raise Exception(f"find rank: {rank} stop_signal, stop running, it's an expected behavior") + if paused == 1: + raise Exception(f"find rank: {rank} pause_signal, pause running, it's an expected behavior") diff --git a/lightx2v/models/runners/default_runner.py b/lightx2v/models/runners/default_runner.py new file mode 100644 index 0000000..1850edf --- /dev/null +++ b/lightx2v/models/runners/default_runner.py @@ -0,0 +1,419 @@ +import gc + +import requests +import torch +import torch.distributed as dist +import torchvision.transforms.functional as TF +from PIL import Image +from loguru import logger +from requests.exceptions import RequestException + +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.generate_task_id import generate_task_id +from lightx2v.utils.global_paras import CALIB +from lightx2v.utils.memory_profiler import peak_memory_decorator +from lightx2v.utils.profiler import * +from lightx2v.utils.utils import save_to_video, vae_to_comfyui_image +from lightx2v_platform.base.global_var import AI_DEVICE + +from .base_runner import BaseRunner + + +class DefaultRunner(BaseRunner): + def __init__(self, config): + super().__init__(config) + self.has_prompt_enhancer = False + self.progress_callback = None + if self.config["task"] == "t2v" and self.config.get("sub_servers", {}).get("prompt_enhancer") is not None: + self.has_prompt_enhancer = True + if not self.check_sub_servers("prompt_enhancer"): + self.has_prompt_enhancer = False + logger.warning("No prompt enhancer server available, disable prompt enhancer.") + if not self.has_prompt_enhancer: + self.config["use_prompt_enhancer"] = False + self.set_init_device() + self.init_scheduler() + + def init_modules(self): + logger.info("Initializing runner modules...") + if not self.config.get("lazy_load", False) and not self.config.get("unload_modules", False): + self.load_model() + elif self.config.get("lazy_load", False): + assert self.config.get("cpu_offload", False) + if hasattr(self, "model"): + self.model.set_scheduler(self.scheduler) # set scheduler to model + if self.config["task"] == "i2v": + self.run_input_encoder = self._run_input_encoder_local_i2v + elif self.config["task"] == "flf2v": + self.run_input_encoder = self._run_input_encoder_local_flf2v + elif self.config["task"] == "t2v": + self.run_input_encoder = self._run_input_encoder_local_t2v + elif self.config["task"] == "vace": + self.run_input_encoder = self._run_input_encoder_local_vace + elif self.config["task"] == "animate": + self.run_input_encoder = self._run_input_encoder_local_animate + elif self.config["task"] == "s2v": + self.run_input_encoder = self._run_input_encoder_local_s2v + self.config.lock() # lock config to avoid modification + if self.config.get("compile", False) and hasattr(self.model, "comple"): + logger.info(f"[Compile] Compile all shapes: {self.config.get('compile_shapes', [])}") + self.model.compile(self.config.get("compile_shapes", [])) + + def set_init_device(self): + if self.config["cpu_offload"]: + self.init_device = torch.device("cpu") + else: + self.init_device = torch.device(AI_DEVICE) + + def load_vfi_model(self): + if self.config["video_frame_interpolation"].get("algo", None) == "rife": + from lightx2v.models.vfi.rife.rife_comfyui_wrapper import RIFEWrapper + + logger.info("Loading RIFE model...") + return RIFEWrapper(self.config["video_frame_interpolation"]["model_path"]) + else: + raise ValueError(f"Unsupported VFI model: {self.config['video_frame_interpolation']['algo']}") + + def load_vsr_model(self): + if "video_super_resolution" in self.config: + from lightx2v.models.runners.vsr.vsr_wrapper import VSRWrapper + + logger.info("Loading VSR model...") + return VSRWrapper(self.config["video_super_resolution"]["model_path"]) + else: + return None + + @ProfilingContext4DebugL2("Load models") + def load_model(self): + self.model = self.load_transformer() + self.text_encoders = self.load_text_encoder() + self.image_encoder = self.load_image_encoder() + self.vae_encoder, self.vae_decoder = self.load_vae() + self.vfi_model = self.load_vfi_model() if "video_frame_interpolation" in self.config else None + self.vsr_model = self.load_vsr_model() if "video_super_resolution" in self.config else None + + def check_sub_servers(self, task_type): + urls = self.config.get("sub_servers", {}).get(task_type, []) + available_servers = [] + for url in urls: + try: + status_url = f"{url}/v1/local/{task_type}/generate/service_status" + response = requests.get(status_url, timeout=2) + if response.status_code == 200: + available_servers.append(url) + else: + logger.warning(f"Service {url} returned status code {response.status_code}") + + except RequestException as e: + logger.warning(f"Failed to connect to {url}: {str(e)}") + continue + logger.info(f"{task_type} available servers: {available_servers}") + self.config["sub_servers"][task_type] = available_servers + return len(available_servers) > 0 + + def set_inputs(self, inputs): + self.input_info.seed = inputs.get("seed", 42) + self.input_info.prompt = inputs.get("prompt", "") + if self.config["use_prompt_enhancer"]: + self.input_info.prompt_enhanced = inputs.get("prompt_enhanced", "") + self.input_info.negative_prompt = inputs.get("negative_prompt", "") + if "image_path" in self.input_info.__dataclass_fields__: + self.input_info.image_path = inputs.get("image_path", "") + if "audio_path" in self.input_info.__dataclass_fields__: + self.input_info.audio_path = inputs.get("audio_path", "") + if "video_path" in self.input_info.__dataclass_fields__: + self.input_info.video_path = inputs.get("video_path", "") + self.input_info.save_result_path = inputs.get("save_result_path", "") + + def set_config(self, config_modify): + logger.info(f"modify config: {config_modify}") + with self.config.temporarily_unlocked(): + self.config.update(config_modify) + + def set_progress_callback(self, callback): + self.progress_callback = callback + + @peak_memory_decorator + def run_segment(self, segment_idx=0): + infer_steps = self.model.scheduler.infer_steps + + for step_index in range(infer_steps): + # only for single segment, check stop signal every step + with ProfilingContext4DebugL1( + f"Run Dit every step", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_per_step_dit_duration, + metrics_labels=[step_index + 1, infer_steps], + ): + if self.video_segment_num == 1: + self.check_stop() + logger.info(f"==> step_index: {step_index + 1} / {infer_steps}") + + with ProfilingContext4DebugL1("step_pre"): + self.model.scheduler.step_pre(step_index=step_index) + + with ProfilingContext4DebugL1("🚀 infer_main"): + self.model.infer(self.inputs) + + with ProfilingContext4DebugL1("step_post"): + self.model.scheduler.step_post() + + if self.progress_callback: + current_step = segment_idx * infer_steps + step_index + 1 + total_all_steps = self.video_segment_num * infer_steps + self.progress_callback((current_step / total_all_steps) * 100, 100) + + if segment_idx is not None and segment_idx == self.video_segment_num - 1: + del self.inputs + torch.cuda.empty_cache() + + return self.model.scheduler.latents + + def run_step(self): + self.inputs = self.run_input_encoder() + if hasattr(self, "sr_version") and self.sr_version is not None is not None: + self.config_sr["is_sr_running"] = True + self.inputs_sr = self.run_input_encoder() + self.config_sr["is_sr_running"] = False + + self.run_main(total_steps=1) + + def end_run(self): + self.model.scheduler.clear() + if hasattr(self, "inputs"): + del self.inputs + self.input_info = None + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + if hasattr(self.model, "model") and len(self.model.model) == 2: # MultiModelStruct + for model in self.model.model: + if hasattr(model.transformer_infer, "offload_manager"): + del model.transformer_infer.offload_manager + torch.cuda.empty_cache() + gc.collect() + del model + else: + if hasattr(self.model.transformer_infer, "offload_manager"): + del self.model.transformer_infer.offload_manager + torch.cuda.empty_cache() + gc.collect() + del self.model + if self.config.get("do_mm_calib", False): + calib_path = os.path.join(os.getcwd(), "calib.pt") + torch.save(CALIB, calib_path) + logger.info(f"[CALIB] Saved calibration data successfully to: {calib_path}") + torch.cuda.empty_cache() + gc.collect() + + def read_image_input(self, img_path): + if isinstance(img_path, Image.Image): + img_ori = img_path + else: + img_ori = Image.open(img_path).convert("RGB") + if GET_RECORDER_MODE(): + width, height = img_ori.size + monitor_cli.lightx2v_input_image_len.observe(width * height) + img = TF.to_tensor(img_ori).sub_(0.5).div_(0.5).unsqueeze(0).to(self.init_device) + self.input_info.original_size = img_ori.size + return img, img_ori + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_i2v(self): + img, img_ori = self.read_image_input(self.input_info.image_path) + clip_encoder_out = self.run_image_encoder(img) if self.config.get("use_image_encoder", True) else None + vae_encode_out, latent_shape = self.run_vae_encoder(img_ori if self.vae_encoder_need_img_original else img) + self.input_info.latent_shape = latent_shape # Important: set latent_shape in input_info + text_encoder_output = self.run_text_encoder(self.input_info) + torch.cuda.empty_cache() + gc.collect() + return self.get_encoder_output_i2v(clip_encoder_out, vae_encode_out, text_encoder_output, img) + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_t2v(self): + self.input_info.latent_shape = self.get_latent_shape_with_target_hw() # Important: set latent_shape in input_info + text_encoder_output = self.run_text_encoder(self.input_info) + torch.cuda.empty_cache() + gc.collect() + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": None, + } + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_flf2v(self): + first_frame, _ = self.read_image_input(self.input_info.image_path) + last_frame, _ = self.read_image_input(self.input_info.last_frame_path) + clip_encoder_out = self.run_image_encoder(first_frame, last_frame) if self.config.get("use_image_encoder", True) else None + vae_encode_out, latent_shape = self.run_vae_encoder(first_frame, last_frame) + self.input_info.latent_shape = latent_shape # Important: set latent_shape in input_info + text_encoder_output = self.run_text_encoder(self.input_info) + torch.cuda.empty_cache() + gc.collect() + return self.get_encoder_output_i2v(clip_encoder_out, vae_encode_out, text_encoder_output) + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_vace(self): + src_video = self.input_info.src_video + src_mask = self.input_info.src_mask + src_ref_images = self.input_info.src_ref_images + src_video, src_mask, src_ref_images = self.prepare_source( + [src_video], + [src_mask], + [None if src_ref_images is None else src_ref_images.split(",")], + (self.config["target_width"], self.config["target_height"]), + ) + self.src_ref_images = src_ref_images + + vae_encoder_out, latent_shape = self.run_vae_encoder(src_video, src_ref_images, src_mask) + self.input_info.latent_shape = latent_shape # Important: set latent_shape in input_info + text_encoder_output = self.run_text_encoder(self.input_info) + torch.cuda.empty_cache() + gc.collect() + return self.get_encoder_output_i2v(None, vae_encoder_out, text_encoder_output) + + @ProfilingContext4DebugL2("Run Text Encoder") + def _run_input_encoder_local_animate(self): + text_encoder_output = self.run_text_encoder(self.input_info) + torch.cuda.empty_cache() + gc.collect() + return self.get_encoder_output_i2v(None, None, text_encoder_output, None) + + def _run_input_encoder_local_s2v(self): + pass + + def init_run(self): + self.gen_video_final = None + self.get_video_segment_num() + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.model = self.load_transformer() + self.model.set_scheduler(self.scheduler) + + self.model.scheduler.prepare(seed=self.input_info.seed, latent_shape=self.input_info.latent_shape, image_encoder_output=self.inputs["image_encoder_output"]) + if self.config.get("model_cls") == "wan2.2" and self.config["task"] in ["i2v", "s2v"]: + self.inputs["image_encoder_output"]["vae_encoder_out"] = None + + if hasattr(self, "sr_version") and self.sr_version is not None: + self.lq_latents_shape = self.model.scheduler.latents.shape + self.model_sr.set_scheduler(self.scheduler_sr) + self.config_sr["is_sr_running"] = True + self.inputs_sr = self.run_input_encoder() + self.config_sr["is_sr_running"] = False + + @ProfilingContext4DebugL2("Run DiT") + def run_main(self): + self.init_run() + if self.config.get("compile", False) and hasattr(self.model, "comple"): + self.model.select_graph_for_compile(self.input_info) + for segment_idx in range(self.video_segment_num): + logger.info(f"🔄 start segment {segment_idx + 1}/{self.video_segment_num}") + with ProfilingContext4DebugL1( + f"segment end2end {segment_idx + 1}/{self.video_segment_num}", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_segments_end2end_duration, + metrics_labels=["DefaultRunner"], + ): + self.check_stop() + # 1. default do nothing + self.init_run_segment(segment_idx) + # 2. main inference loop + latents = self.run_segment(segment_idx) + # 3. vae decoder + if self.config.get("use_stream_vae", False): + frames = [] + for frame_segment in self.run_vae_decoder_stream(latents): + frames.append(frame_segment) + logger.info(f"frame sagment: {len(frames)} done") + self.gen_video = torch.cat(frames, dim=2) + else: + self.gen_video = self.run_vae_decoder(latents) + # 4. default do nothing + self.end_run_segment(segment_idx) + gen_video_final = self.process_images_after_vae_decoder() + self.end_run() + return gen_video_final + + @ProfilingContext4DebugL1("Run VAE Decoder", recorder_mode=GET_RECORDER_MODE(), metrics_func=monitor_cli.lightx2v_run_vae_decode_duration, metrics_labels=["DefaultRunner"]) + def run_vae_decoder(self, latents): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_decoder = self.load_vae_decoder() + images = self.vae_decoder.decode(latents.to(GET_DTYPE())) + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_decoder + torch.cuda.empty_cache() + gc.collect() + return images + + @ProfilingContext4DebugL1("Run VAE Decoder Stream", recorder_mode=GET_RECORDER_MODE(), metrics_func=monitor_cli.lightx2v_run_vae_decode_duration, metrics_labels=["DefaultRunner"]) + def run_vae_decoder_stream(self, latents): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_decoder = self.load_vae_decoder() + + for frame_segment in self.vae_decoder.decode_stream(latents.to(GET_DTYPE())): + yield frame_segment + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_decoder + torch.cuda.empty_cache() + gc.collect() + + def post_prompt_enhancer(self): + while True: + for url in self.config["sub_servers"]["prompt_enhancer"]: + response = requests.get(f"{url}/v1/local/prompt_enhancer/generate/service_status").json() + if response["service_status"] == "idle": + response = requests.post( + f"{url}/v1/local/prompt_enhancer/generate", + json={ + "task_id": generate_task_id(), + "prompt": self.config["prompt"], + }, + ) + enhanced_prompt = response.json()["output"] + logger.info(f"Enhanced prompt: {enhanced_prompt}") + return enhanced_prompt + + def process_images_after_vae_decoder(self): + self.gen_video_final = vae_to_comfyui_image(self.gen_video_final) + + if "video_frame_interpolation" in self.config: + assert self.vfi_model is not None and self.config["video_frame_interpolation"].get("target_fps", None) is not None + target_fps = self.config["video_frame_interpolation"]["target_fps"] + logger.info(f"Interpolating frames from {self.config.get('fps', 16)} to {target_fps}") + self.gen_video_final = self.vfi_model.interpolate_frames( + self.gen_video_final, + source_fps=self.config.get("fps", 16), + target_fps=target_fps, + ) + + if self.input_info.return_result_tensor: + return {"video": self.gen_video_final} + elif self.input_info.save_result_path is not None: + if "video_frame_interpolation" in self.config and self.config["video_frame_interpolation"].get("target_fps"): + fps = self.config["video_frame_interpolation"]["target_fps"] + else: + fps = self.config.get("fps", 16) + + if not dist.is_initialized() or dist.get_rank() == 0: + logger.info(f"🎬 Start to save video 🎬") + + save_to_video(self.gen_video_final, self.input_info.save_result_path, fps=fps, method="ffmpeg") + logger.info(f"✅ Video saved successfully to: {self.input_info.save_result_path} ✅") + return {"video": None} + + @ProfilingContext4DebugL1("RUN pipeline", recorder_mode=GET_RECORDER_MODE(), metrics_func=monitor_cli.lightx2v_worker_request_duration, metrics_labels=["DefaultRunner"]) + def run_pipeline(self, input_info): + if GET_RECORDER_MODE(): + monitor_cli.lightx2v_worker_request_count.inc() + self.input_info = input_info + + if self.config["use_prompt_enhancer"]: + self.input_info.prompt_enhanced = self.post_prompt_enhancer() + + self.inputs = self.run_input_encoder() + + gen_video_final = self.run_main() + + if GET_RECORDER_MODE(): + monitor_cli.lightx2v_worker_request_success.inc() + return gen_video_final diff --git a/lightx2v/models/runners/hunyuan_video/hunyuan_video_15_distill_runner.py b/lightx2v/models/runners/hunyuan_video/hunyuan_video_15_distill_runner.py new file mode 100644 index 0000000..95787ed --- /dev/null +++ b/lightx2v/models/runners/hunyuan_video/hunyuan_video_15_distill_runner.py @@ -0,0 +1,18 @@ +from lightx2v.models.runners.hunyuan_video.hunyuan_video_15_runner import HunyuanVideo15Runner +from lightx2v.models.schedulers.hunyuan_video.scheduler import HunyuanVideo15SRScheduler +from lightx2v.models.schedulers.hunyuan_video.step_distill.scheduler import HunyuanVideo15StepDistillScheduler +from lightx2v.utils.registry_factory import RUNNER_REGISTER + + +@RUNNER_REGISTER("hunyuan_video_1.5_distill") +class HunyuanVideo15DistillRunner(HunyuanVideo15Runner): + def __init__(self, config): + super().__init__(config) + + def init_scheduler(self): + self.scheduler = HunyuanVideo15StepDistillScheduler(self.config) + + if self.sr_version is not None: + self.scheduler_sr = HunyuanVideo15SRScheduler(self.config_sr) + else: + self.scheduler_sr = None diff --git a/lightx2v/models/runners/hunyuan_video/hunyuan_video_15_runner.py b/lightx2v/models/runners/hunyuan_video/hunyuan_video_15_runner.py new file mode 100644 index 0000000..1c47615 --- /dev/null +++ b/lightx2v/models/runners/hunyuan_video/hunyuan_video_15_runner.py @@ -0,0 +1,550 @@ +import copy +import gc +import os + +import numpy as np +import torch +import torchvision.transforms as transforms +from PIL import Image +from loguru import logger + +from lightx2v.models.input_encoders.hf.hunyuan15.byt5.model import ByT5TextEncoder +from lightx2v.models.input_encoders.hf.hunyuan15.qwen25.model import Qwen25VL_TextEncoder +from lightx2v.models.input_encoders.hf.hunyuan15.siglip.model import SiglipVisionEncoder +from lightx2v.models.networks.hunyuan_video.model import HunyuanVideo15Model +from lightx2v.models.runners.default_runner import DefaultRunner +from lightx2v.models.schedulers.hunyuan_video.feature_caching.scheduler import HunyuanVideo15SchedulerCaching +from lightx2v.models.schedulers.hunyuan_video.scheduler import HunyuanVideo15SRScheduler, HunyuanVideo15Scheduler +from lightx2v.models.video_encoders.hf.hunyuanvideo15.hunyuanvideo_15_vae import HunyuanVideo15VAE +from lightx2v.models.video_encoders.hf.hunyuanvideo15.lighttae_hy15 import LightTaeHy15 +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.utils import * +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +@RUNNER_REGISTER("hunyuan_video_1.5") +class HunyuanVideo15Runner(DefaultRunner): + def __init__(self, config): + config["is_sr_running"] = False + + if "video_super_resolution" in config and "sr_version" in config["video_super_resolution"]: + self.sr_version = config["video_super_resolution"]["sr_version"] + else: + self.sr_version = None + + if self.sr_version is not None: + self.config_sr = copy.deepcopy(config) + self.config_sr["is_sr_running"] = False + self.config_sr["sample_shift"] = config["video_super_resolution"]["flow_shift"] # for SR model + self.config_sr["sample_guide_scale"] = config["video_super_resolution"]["guidance_scale"] # for SR model + self.config_sr["infer_steps"] = config["video_super_resolution"]["num_inference_steps"] + + super().__init__(config) + self.target_size_config = { + "360p": {"bucket_hw_base_size": 480, "bucket_hw_bucket_stride": 16}, + "480p": {"bucket_hw_base_size": 640, "bucket_hw_bucket_stride": 16}, + "720p": {"bucket_hw_base_size": 960, "bucket_hw_bucket_stride": 16}, + "1080p": {"bucket_hw_base_size": 1440, "bucket_hw_bucket_stride": 16}, + } + self.vision_num_semantic_tokens = 729 + self.vision_states_dim = 1152 + self.vae_cls = HunyuanVideo15VAE + self.tae_cls = LightTaeHy15 + + def init_scheduler(self): + if self.config["feature_caching"] == "NoCaching": + scheduler_class = HunyuanVideo15Scheduler + elif self.config.feature_caching in ["Mag", "Tea"]: + scheduler_class = HunyuanVideo15SchedulerCaching + else: + raise NotImplementedError(f"Unsupported feature_caching type: {self.config.feature_caching}") + self.scheduler = scheduler_class(self.config) + + if self.sr_version is not None: + self.scheduler_sr = HunyuanVideo15SRScheduler(self.config_sr) + else: + self.scheduler_sr = None + + def load_text_encoder(self): + qwen25vl_offload = self.config.get("qwen25vl_cpu_offload", self.config.get("cpu_offload")) + if qwen25vl_offload: + qwen25vl_device = torch.device("cpu") + else: + qwen25vl_device = torch.device(AI_DEVICE) + + qwen25vl_quantized = self.config.get("qwen25vl_quantized", False) + qwen25vl_quant_scheme = self.config.get("qwen25vl_quant_scheme", None) + qwen25vl_quantized_ckpt = self.config.get("qwen25vl_quantized_ckpt", None) + + text_encoder_path = os.path.join(self.config["model_path"], "text_encoder/llm") + logger.info(f"Loading text encoder from {text_encoder_path}") + text_encoder = Qwen25VL_TextEncoder( + dtype=torch.float16, + device=qwen25vl_device, + checkpoint_path=text_encoder_path, + cpu_offload=qwen25vl_offload, + qwen25vl_quantized=qwen25vl_quantized, + qwen25vl_quant_scheme=qwen25vl_quant_scheme, + qwen25vl_quant_ckpt=qwen25vl_quantized_ckpt, + ) + + byt5_offload = self.config.get("byt5_cpu_offload", self.config.get("cpu_offload")) + if byt5_offload: + byt5_device = torch.device("cpu") + else: + byt5_device = torch.device(AI_DEVICE) + + byt5 = ByT5TextEncoder(config=self.config, device=byt5_device, checkpoint_path=self.config["model_path"], cpu_offload=byt5_offload) + text_encoders = [text_encoder, byt5] + return text_encoders + + def load_transformer(self): + model = HunyuanVideo15Model(self.config["model_path"], self.config, self.init_device) + if self.sr_version is not None: + self.config_sr["transformer_model_path"] = os.path.join(os.path.dirname(self.config.transformer_model_path), self.sr_version) + self.config_sr["is_sr_running"] = True + model_sr = HunyuanVideo15Model(self.config_sr["model_path"], self.config_sr, self.init_device) + self.config_sr["is_sr_running"] = False + else: + model_sr = None + + self.model_sr = model_sr + return model + + def get_latent_shape_with_target_hw(self, origin_size=None): + if origin_size is None: + width, height = self.config["aspect_ratio"].split(":") + else: + width, height = origin_size + target_size = self.config["transformer_model_name"].split("_")[0] + target_height, target_width = self.get_closest_resolution_given_original_size((int(width), int(height)), target_size) + latent_shape = [ + self.config.get("in_channels", 32), + (self.config["target_video_length"] - 1) // self.config["vae_stride"][0] + 1, + target_height // self.config["vae_stride"][1], + target_width // self.config["vae_stride"][2], + ] + + ori_latent_h, ori_latent_w = latent_shape[2], latent_shape[3] + if dist.is_initialized() and dist.get_world_size() > 1: + latent_h, latent_w, world_size_h, world_size_w = self._adjust_latent_for_grid_splitting(ori_latent_h, ori_latent_w, dist.get_world_size()) + latent_shape[2], latent_shape[3] = latent_h, latent_w + logger.info(f"ori latent: {ori_latent_h}x{ori_latent_w}, adjust_latent: {latent_h}x{latent_w}, grid: {world_size_h}x{world_size_w}") + else: + latent_shape[2], latent_shape[3] = ori_latent_h, ori_latent_w + world_size_h, world_size_w = None, None + + self.vae_decoder.world_size_h = world_size_h + self.vae_decoder.world_size_w = world_size_w + + self.target_height = latent_shape[2] * self.config["vae_stride"][1] + self.target_width = latent_shape[3] * self.config["vae_stride"][2] + return latent_shape + + def _adjust_latent_for_grid_splitting(self, latent_h, latent_w, world_size): + """ + Adjust latent dimensions for optimal 2D grid splitting. + Prefers balanced grids like 2x4 or 4x2 over 1x8 or 8x1. + """ + world_size_h, world_size_w = 1, 1 + if world_size <= 1: + return latent_h, latent_w, world_size_h, world_size_w + + # Define priority grids for different world sizes + priority_grids = [] + if world_size == 8: + # For 8 cards, prefer 2x4 and 4x2 over 1x8 and 8x1 + priority_grids = [(2, 4), (4, 2), (1, 8), (8, 1)] + elif world_size == 4: + priority_grids = [(2, 2), (1, 4), (4, 1)] + elif world_size == 2: + priority_grids = [(1, 2), (2, 1)] + else: + # For other sizes, try factor pairs + for h in range(1, int(np.sqrt(world_size)) + 1): + if world_size % h == 0: + w = world_size // h + priority_grids.append((h, w)) + + # Try priority grids first + for world_size_h, world_size_w in priority_grids: + if latent_h % world_size_h == 0 and latent_w % world_size_w == 0: + return latent_h, latent_w, world_size_h, world_size_w + + # If no perfect fit, find minimal padding solution + best_grid = (1, world_size) # fallback + min_total_padding = float("inf") + + for world_size_h, world_size_w in priority_grids: + # Calculate required padding + pad_h = (world_size_h - (latent_h % world_size_h)) % world_size_h + pad_w = (world_size_w - (latent_w % world_size_w)) % world_size_w + total_padding = pad_h + pad_w + + # Prefer grids with minimal total padding + if total_padding < min_total_padding: + min_total_padding = total_padding + best_grid = (world_size_h, world_size_w) + + # Apply padding + world_size_h, world_size_w = best_grid + pad_h = (world_size_h - (latent_h % world_size_h)) % world_size_h + pad_w = (world_size_w - (latent_w % world_size_w)) % world_size_w + + return latent_h + pad_h, latent_w + pad_w, world_size_h, world_size_w + + def get_sr_latent_shape_with_target_hw(self): + SizeMap = { + "480p": 640, + "720p": 960, + "1080p": 1440, + } + + sr_stride = 16 + base_size = SizeMap[self.config_sr["video_super_resolution"]["base_resolution"]] + sr_size = SizeMap[self.sr_version.split("_")[0]] + lr_video_height, lr_video_width = [x * 16 for x in self.lq_latents_shape[-2:]] + hr_bucket_map = self.build_bucket_map(lr_base_size=base_size, hr_base_size=sr_size, lr_patch_size=16, hr_patch_size=sr_stride) + target_width, target_height = hr_bucket_map((lr_video_width, lr_video_height)) + latent_shape = [ + self.config_sr.get("in_channels", 32), + (self.config_sr["target_video_length"] - 1) // self.config_sr["vae_stride"][0] + 1, + target_height // self.config_sr["vae_stride"][1], + target_width // self.config_sr["vae_stride"][2], + ] + self.target_sr_height = target_height + self.target_sr_width = target_width + return latent_shape + + def get_closest_resolution_given_original_size(self, origin_size, target_size): + bucket_hw_base_size = self.target_size_config[target_size]["bucket_hw_base_size"] + bucket_hw_bucket_stride = self.target_size_config[target_size]["bucket_hw_bucket_stride"] + + assert bucket_hw_base_size in [128, 256, 480, 512, 640, 720, 960, 1440], f"bucket_hw_base_size must be in [128, 256, 480, 512, 640, 720, 960], but got {bucket_hw_base_size}" + + crop_size_list = self.generate_crop_size_list(bucket_hw_base_size, bucket_hw_bucket_stride) + aspect_ratios = np.array([round(float(h) / float(w), 5) for h, w in crop_size_list]) + closest_size, closest_ratio = self.get_closest_ratio(origin_size[1], origin_size[0], aspect_ratios, crop_size_list) + + height = closest_size[0] + width = closest_size[1] + + return height, width + + def generate_crop_size_list(self, base_size=256, patch_size=16, max_ratio=4.0): + num_patches = round((base_size / patch_size) ** 2) + assert max_ratio >= 1.0 + crop_size_list = [] + wp, hp = num_patches, 1 + while wp > 0: + if max(wp, hp) / min(wp, hp) <= max_ratio: + crop_size_list.append((wp * patch_size, hp * patch_size)) + if (hp + 1) * wp <= num_patches: + hp += 1 + else: + wp -= 1 + return crop_size_list + + def get_closest_ratio(self, height: float, width: float, ratios: list, buckets: list): + aspect_ratio = float(height) / float(width) + diff_ratios = ratios - aspect_ratio + + if aspect_ratio >= 1: + indices = [(index, x) for index, x in enumerate(diff_ratios) if x <= 0] + else: + indices = [(index, x) for index, x in enumerate(diff_ratios) if x > 0] + + closest_ratio_id = min(indices, key=lambda pair: abs(pair[1]))[0] + closest_size = buckets[closest_ratio_id] + closest_ratio = ratios[closest_ratio_id] + + return closest_size, closest_ratio + + def run_text_encoder(self, input_info): + prompt = input_info.prompt_enhanced if self.config["use_prompt_enhancer"] else input_info.prompt + neg_prompt = input_info.negative_prompt + + # run qwen25vl + if self.config.get("enable_cfg", False) and self.config["cfg_parallel"]: + cfg_p_group = self.config["device_mesh"].get_group(mesh_dim="cfg_p") + cfg_p_rank = dist.get_rank(cfg_p_group) + if cfg_p_rank == 0: + context = self.text_encoders[0].infer([prompt]) + text_encoder_output = {"context": context} + else: + context_null = self.text_encoders[0].infer([neg_prompt]) + text_encoder_output = {"context_null": context_null} + else: + context = self.text_encoders[0].infer([prompt]) + context_null = self.text_encoders[0].infer([neg_prompt]) if self.config.get("enable_cfg", False) else None + text_encoder_output = { + "context": context, + "context_null": context_null, + } + + # run byt5 + byt5_features, byt5_masks = self.text_encoders[1].infer([prompt]) + text_encoder_output.update({"byt5_features": byt5_features, "byt5_masks": byt5_masks}) + + return text_encoder_output + + def load_image_encoder(self): + siglip_offload = self.config.get("siglip_cpu_offload", self.config.get("cpu_offload")) + if siglip_offload: + siglip_device = torch.device("cpu") + else: + siglip_device = torch.device(AI_DEVICE) + image_encoder = SiglipVisionEncoder( + config=self.config, + device=siglip_device, + checkpoint_path=self.config["model_path"], + cpu_offload=siglip_offload, + ) + return image_encoder + + def load_vae_encoder(self): + # offload config + vae_offload = self.config.get("vae_cpu_offload", self.config.get("cpu_offload")) + if vae_offload: + vae_device = torch.device("cpu") + else: + vae_device = torch.device(AI_DEVICE) + + vae_config = { + "checkpoint_path": self.config["model_path"], + "device": vae_device, + "cpu_offload": vae_offload, + "dtype": GET_DTYPE(), + "parallel": self.config["parallel"], + } + if self.config["task"] not in ["i2v", "flf2v", "animate", "vace", "s2v"]: + return None + else: + return self.vae_cls(**vae_config) + + def load_vae_decoder(self): + # offload config + vae_offload = self.config.get("vae_cpu_offload", self.config.get("cpu_offload")) + if vae_offload: + vae_device = torch.device("cpu") + else: + vae_device = torch.device(AI_DEVICE) + + vae_config = { + "checkpoint_path": self.config["model_path"], + "device": vae_device, + "cpu_offload": vae_offload, + "dtype": GET_DTYPE(), + "parallel": self.config["parallel"], + } + if self.config.get("use_tae", False): + tae_path = self.config["tae_path"] + vae_decoder = self.tae_cls(vae_path=tae_path, dtype=GET_DTYPE()).to(AI_DEVICE) + else: + vae_decoder = self.vae_cls(**vae_config) + return vae_decoder + + def load_vae(self): + vae_encoder = self.load_vae_encoder() + if vae_encoder is None or self.config.get("use_tae", False): + vae_decoder = self.load_vae_decoder() + else: + vae_decoder = vae_encoder + return vae_encoder, vae_decoder + + def load_vsr_model(self): + if self.sr_version: + from lightx2v.models.runners.vsr.vsr_wrapper_hy15 import SRModel3DV2, Upsampler + + upsampler_cls = SRModel3DV2 if "720p" in self.sr_version else Upsampler + upsampler_path = os.path.join(self.config["model_path"], "upsampler", self.sr_version) + logger.info("Loading VSR model from {}".format(upsampler_path)) + upsampler = upsampler_cls.from_pretrained(upsampler_path).to(self.init_device) + + return upsampler + else: + return None + + def build_bucket_map(self, lr_base_size, hr_base_size, lr_patch_size, hr_patch_size): + lr_buckets = self.generate_crop_size_list(base_size=lr_base_size, patch_size=lr_patch_size) + hr_buckets = self.generate_crop_size_list(base_size=hr_base_size, patch_size=hr_patch_size) + + lr_aspect_ratios = np.array([w / h for w, h in lr_buckets]) + hr_aspect_ratios = np.array([w / h for w, h in hr_buckets]) + + hr_bucket_map = {} + for i, (lr_w, lr_h) in enumerate(lr_buckets): + lr_ratio = lr_aspect_ratios[i] + closest_hr_ratio_id = np.abs(hr_aspect_ratios - lr_ratio).argmin() + hr_bucket_map[(lr_w, lr_h)] = hr_buckets[closest_hr_ratio_id] + + def hr_bucket_fn(lr_bucket): + if lr_bucket not in hr_bucket_map: + raise ValueError(f"LR bucket {lr_bucket} not found in bucket map") + return hr_bucket_map[lr_bucket] + + hr_bucket_fn.map = hr_bucket_map + + return hr_bucket_fn + + @ProfilingContext4DebugL1("Run SR") + def run_sr(self, lq_latents): + self.config_sr["is_sr_running"] = True + + self.model_sr.scheduler.prepare( + seed=self.input_info.seed, latent_shape=self.latent_sr_shape, lq_latents=lq_latents, upsampler=self.vsr_model, image_encoder_output=self.inputs_sr["image_encoder_output"] + ) + + total_steps = self.model_sr.scheduler.infer_steps + for step_index in range(total_steps): + with ProfilingContext4DebugL1( + f"Run SR Dit every step", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_per_step_dit_duration, + metrics_labels=[step_index + 1, total_steps], + ): + logger.info(f"==> step_index: {step_index + 1} / {total_steps}") + with ProfilingContext4DebugL1("step_pre"): + self.model_sr.scheduler.step_pre(step_index=step_index) + + with ProfilingContext4DebugL1("🚀 infer_main"): + self.model_sr.infer(self.inputs_sr) + + with ProfilingContext4DebugL1("step_post"): + self.model_sr.scheduler.step_post() + + del self.inputs_sr + torch_device_module.empty_cache() + + self.config_sr["is_sr_running"] = False + return self.model_sr.scheduler.latents + + @ProfilingContext4DebugL1("Run VAE Decoder") + def run_vae_decoder(self, latents): + if self.sr_version: + latents = self.run_sr(latents) + images = super().run_vae_decoder(latents) + return images + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_t2v(self): + self.input_info.latent_shape = self.get_latent_shape_with_target_hw() # Important: set latent_shape in input_info + text_encoder_output = self.run_text_encoder(self.input_info) + + # vision_states is all zero, because we don't have any image input + siglip_output = torch.zeros(1, self.vision_num_semantic_tokens, self.config["hidden_size"], dtype=torch.bfloat16).to(AI_DEVICE) + siglip_mask = torch.zeros(1, self.vision_num_semantic_tokens, dtype=torch.bfloat16, device=torch.device(AI_DEVICE)) + + torch_device_module.empty_cache() + gc.collect() + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": { + "siglip_output": siglip_output, + "siglip_mask": siglip_mask, + "cond_latents": None, + }, + } + + def read_image_input(self, img_path): + if isinstance(img_path, Image.Image): + img_ori = img_path + else: + img_ori = Image.open(img_path).convert("RGB") + return img_ori + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_i2v(self): + img_ori = self.read_image_input(self.input_info.image_path) + if self.sr_version and self.config_sr["is_sr_running"]: + self.latent_sr_shape = self.get_sr_latent_shape_with_target_hw() + self.input_info.latent_shape = self.get_latent_shape_with_target_hw(origin_size=img_ori.size) # Important: set latent_shape in input_info + siglip_output, siglip_mask = self.run_image_encoder(img_ori) if self.config.get("use_image_encoder", True) else None + cond_latents = self.run_vae_encoder(img_ori) + text_encoder_output = self.run_text_encoder(self.input_info) + torch_device_module.empty_cache() + gc.collect() + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": { + "siglip_output": siglip_output, + "siglip_mask": siglip_mask, + "cond_latents": cond_latents, + }, + } + + @ProfilingContext4DebugL1( + "Run Image Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_img_encode_duration, + metrics_labels=["WanRunner"], + ) + def run_image_encoder(self, first_frame, last_frame=None): + if self.sr_version and self.config_sr["is_sr_running"]: + target_width = self.target_sr_width + target_height = self.target_sr_height + else: + target_width = self.target_width + target_height = self.target_height + + input_image_np = self.resize_and_center_crop(first_frame, target_width=target_width, target_height=target_height) + vision_states = self.image_encoder.encode_images(input_image_np).last_hidden_state.to(device=torch.device(AI_DEVICE), dtype=torch.bfloat16) + image_encoder_output = self.image_encoder.infer(vision_states) + image_encoder_mask = torch.ones((1, image_encoder_output.shape[1]), dtype=torch.bfloat16, device=torch.device(AI_DEVICE)) + return image_encoder_output, image_encoder_mask + + def resize_and_center_crop(self, image, target_width, target_height): + image = np.array(image) + if target_height == image.shape[0] and target_width == image.shape[1]: + return image + + pil_image = Image.fromarray(image) + original_width, original_height = pil_image.size + scale_factor = max(target_width / original_width, target_height / original_height) + resized_width = int(round(original_width * scale_factor)) + resized_height = int(round(original_height * scale_factor)) + resized_image = pil_image.resize((resized_width, resized_height), Image.LANCZOS) + left = (resized_width - target_width) / 2 + top = (resized_height - target_height) / 2 + right = (resized_width + target_width) / 2 + bottom = (resized_height + target_height) / 2 + cropped_image = resized_image.crop((left, top, right, bottom)) + return np.array(cropped_image) + + @ProfilingContext4DebugL1( + "Run VAE Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, + metrics_labels=["WanRunner"], + ) + def run_vae_encoder(self, first_frame): + origin_size = first_frame.size + original_width, original_height = origin_size + + if self.sr_version and self.config_sr["is_sr_running"]: + target_width = self.target_sr_width + target_height = self.target_sr_height + else: + target_width = self.target_width + target_height = self.target_height + + scale_factor = max(target_width / original_width, self.target_height / original_height) + resize_width = int(round(original_width * scale_factor)) + resize_height = int(round(original_height * scale_factor)) + + ref_image_transform = transforms.Compose( + [ + transforms.Resize((resize_height, resize_width), interpolation=transforms.InterpolationMode.LANCZOS), + transforms.CenterCrop((target_height, target_width)), + transforms.ToTensor(), + transforms.Normalize([0.5], [0.5]), + ] + ) + + ref_images_pixel_values = ref_image_transform(first_frame).unsqueeze(0).unsqueeze(2).to(AI_DEVICE) + cond_latents = self.vae_encoder.encode(ref_images_pixel_values.to(GET_DTYPE())) + return cond_latents diff --git a/lightx2v/models/runners/qwen_image/qwen_image_runner.py b/lightx2v/models/runners/qwen_image/qwen_image_runner.py new file mode 100644 index 0000000..cbc2b19 --- /dev/null +++ b/lightx2v/models/runners/qwen_image/qwen_image_runner.py @@ -0,0 +1,273 @@ +import gc +import math + +import torch +import torchvision.transforms.functional as TF +from PIL import Image +from loguru import logger + +from lightx2v.models.input_encoders.hf.qwen25.qwen25_vlforconditionalgeneration import Qwen25_VLForConditionalGeneration_TextEncoder +from lightx2v.models.networks.qwen_image.lora_adapter import QwenImageLoraWrapper +from lightx2v.models.networks.qwen_image.model import QwenImageTransformerModel +from lightx2v.models.runners.default_runner import DefaultRunner +from lightx2v.models.schedulers.qwen_image.scheduler import QwenImageScheduler +from lightx2v.models.video_encoders.hf.qwen_image.vae import AutoencoderKLQwenImageVAE +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +def calculate_dimensions(target_area, ratio): + width = math.sqrt(target_area * ratio) + height = width / ratio + + width = round(width / 32) * 32 + height = round(height / 32) * 32 + + return width, height, None + + +@RUNNER_REGISTER("qwen_image") +class QwenImageRunner(DefaultRunner): + model_cpu_offload_seq = "text_encoder->transformer->vae" + _callback_tensor_inputs = ["latents", "prompt_embeds"] + + def __init__(self, config): + super().__init__(config) + + @ProfilingContext4DebugL2("Load models") + def load_model(self): + self.model = self.load_transformer() + self.text_encoders = self.load_text_encoder() + self.vae = self.load_vae() + + def load_transformer(self): + model = QwenImageTransformerModel(self.config) + if self.config.get("lora_configs") and self.config.lora_configs: + assert not self.config.get("dit_quantized", False) + lora_wrapper = QwenImageLoraWrapper(model) + for lora_config in self.config.lora_configs: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + return model + + def load_text_encoder(self): + text_encoder = Qwen25_VLForConditionalGeneration_TextEncoder(self.config) + text_encoders = [text_encoder] + return text_encoders + + def load_image_encoder(self): + pass + + def load_vae(self): + vae = AutoencoderKLQwenImageVAE(self.config) + return vae + + def init_modules(self): + logger.info("Initializing runner modules...") + if not self.config.get("lazy_load", False) and not self.config.get("unload_modules", False): + self.load_model() + elif self.config.get("lazy_load", False): + assert self.config.get("cpu_offload", False) + self.run_dit = self._run_dit_local + if self.config["task"] == "t2i": + self.run_input_encoder = self._run_input_encoder_local_t2i + elif self.config["task"] == "i2i": + self.run_input_encoder = self._run_input_encoder_local_i2i + else: + assert NotImplementedError + + self.model.set_scheduler(self.scheduler) + + @ProfilingContext4DebugL2("Run DiT") + def _run_dit_local(self, total_steps=None): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.model = self.load_transformer() + self.model.scheduler.prepare(self.input_info) + latents, generator = self.run(total_steps) + return latents, generator + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_t2i(self): + prompt = self.input_info.prompt + text_encoder_output = self.run_text_encoder(prompt, neg_prompt=self.input_info.negative_prompt) + torch_device_module.empty_cache() + gc.collect() + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": None, + } + + def read_image_input(self, img_path): + if isinstance(img_path, Image.Image): + img_ori = img_path + else: + img_ori = Image.open(img_path).convert("RGB") + if GET_RECORDER_MODE(): + width, height = img_ori.size + monitor_cli.lightx2v_input_image_len.observe(width * height) + img = TF.to_tensor(img_ori).sub_(0.5).div_(0.5).unsqueeze(0).to(AI_DEVICE) + self.input_info.original_size.append(img_ori.size) + return img, img_ori + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_i2i(self): + image_paths_list = self.input_info.image_path.split(",") + images_list = [] + for image_path in image_paths_list: + _, image = self.read_image_input(image_path) + images_list.append(image) + + prompt = self.input_info.prompt + text_encoder_output = self.run_text_encoder(prompt, images_list, neg_prompt=self.input_info.negative_prompt) + + image_encoder_output_list = [] + for vae_image in text_encoder_output["image_info"]["vae_image_list"]: + image_encoder_output = self.run_vae_encoder(image=vae_image) + image_encoder_output_list.append(image_encoder_output) + torch_device_module.empty_cache() + gc.collect() + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": image_encoder_output_list, + } + + @ProfilingContext4DebugL1("Run Text Encoder", recorder_mode=GET_RECORDER_MODE(), metrics_func=monitor_cli.lightx2v_run_text_encode_duration, metrics_labels=["QwenImageRunner"]) + def run_text_encoder(self, text, image_list=None, neg_prompt=None): + if GET_RECORDER_MODE(): + monitor_cli.lightx2v_input_prompt_len.observe(len(text)) + text_encoder_output = {} + if self.config["task"] == "t2i": + prompt_embeds, prompt_embeds_mask, _ = self.text_encoders[0].infer([text]) + text_encoder_output["prompt_embeds"] = prompt_embeds + text_encoder_output["prompt_embeds_mask"] = prompt_embeds_mask + if self.config["do_true_cfg"] and neg_prompt is not None: + neg_prompt_embeds, neg_prompt_embeds_mask, _ = self.text_encoders[0].infer([neg_prompt]) + text_encoder_output["negative_prompt_embeds"] = neg_prompt_embeds + text_encoder_output["negative_prompt_embeds_mask"] = neg_prompt_embeds_mask + elif self.config["task"] == "i2i": + prompt_embeds, prompt_embeds_mask, image_info = self.text_encoders[0].infer([text], image_list) + text_encoder_output["prompt_embeds"] = prompt_embeds + text_encoder_output["prompt_embeds_mask"] = prompt_embeds_mask + text_encoder_output["image_info"] = image_info + if self.config["do_true_cfg"] and neg_prompt is not None: + neg_prompt_embeds, neg_prompt_embeds_mask, _ = self.text_encoders[0].infer([neg_prompt], image_list) + text_encoder_output["negative_prompt_embeds"] = neg_prompt_embeds + text_encoder_output["negative_prompt_embeds_mask"] = neg_prompt_embeds_mask + return text_encoder_output + + @ProfilingContext4DebugL1("Run VAE Encoder", recorder_mode=GET_RECORDER_MODE(), metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, metrics_labels=["QwenImageRunner"]) + def run_vae_encoder(self, image): + image_latents = self.vae.encode_vae_image(image, self.input_info) + return {"image_latents": image_latents} + + def run(self, total_steps=None): + if total_steps is None: + total_steps = self.model.scheduler.infer_steps + for step_index in range(total_steps): + logger.info(f"==> step_index: {step_index + 1} / {total_steps}") + + with ProfilingContext4DebugL1("step_pre"): + self.model.scheduler.step_pre(step_index=step_index) + + with ProfilingContext4DebugL1("🚀 infer_main"): + self.model.infer(self.inputs) + + with ProfilingContext4DebugL1("step_post"): + self.model.scheduler.step_post() + + if self.progress_callback: + self.progress_callback(((step_index + 1) / total_steps) * 100, 100) + + return self.model.scheduler.latents, self.model.scheduler.generator + + def set_target_shape(self): + if not self.config["_auto_resize"]: + width, height = self.config["aspect_ratios"][self.config["aspect_ratio"]] + else: + width, height = self.input_info.original_size[-1] + calculated_width, calculated_height, _ = calculate_dimensions(1024 * 1024, width / height) + multiple_of = self.vae.vae_scale_factor * 2 + width = calculated_width // multiple_of * multiple_of + height = calculated_height // multiple_of * multiple_of + self.input_info.auto_width = width + self.input_info.auto_hight = height + + # VAE applies 8x compression on images but we must also account for packing which requires + # latent height and width to be divisible by 2. + height = 2 * (int(height) // (self.vae.vae_scale_factor * 2)) + width = 2 * (int(width) // (self.vae.vae_scale_factor * 2)) + num_channels_latents = self.model.in_channels // 4 + self.input_info.target_shape = (self.config["batchsize"], 1, num_channels_latents, height, width) + + def set_img_shapes(self): + if self.config["task"] == "t2i": + width, height = self.config["aspect_ratios"][self.config["aspect_ratio"]] + img_shapes = [(1, height // self.config["vae_scale_factor"] // 2, width // self.config["vae_scale_factor"] // 2)] * self.config["batchsize"] + elif self.config["task"] == "i2i": + img_shapes = [[(1, self.input_info.auto_hight // self.config["vae_scale_factor"] // 2, self.input_info.auto_width // self.config["vae_scale_factor"] // 2)]] + for image_height, image_width in self.inputs["text_encoder_output"]["image_info"]["vae_image_info_list"]: + img_shapes[0].append((1, image_height // self.config["vae_scale_factor"] // 2, image_width // self.config["vae_scale_factor"] // 2)) + + self.inputs["img_shapes"] = img_shapes + + def init_scheduler(self): + self.scheduler = QwenImageScheduler(self.config) + + def get_encoder_output_i2v(self): + pass + + def run_image_encoder(self): + pass + + @ProfilingContext4DebugL2("Load models") + def load_model(self): + self.model = self.load_transformer() + self.text_encoders = self.load_text_encoder() + self.image_encoder = self.load_image_encoder() + self.vae = self.load_vae() + self.vfi_model = self.load_vfi_model() if "video_frame_interpolation" in self.config else None + + @ProfilingContext4DebugL1( + "Run VAE Decoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_decode_duration, + metrics_labels=["QwenImageRunner"], + ) + def run_vae_decoder(self, latents): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_decoder = self.load_vae() + images = self.vae.decode(latents, self.input_info) + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_decoder + torch_device_module.empty_cache() + gc.collect() + return images + + def run_pipeline(self, input_info): + self.input_info = input_info + + self.inputs = self.run_input_encoder() + self.set_target_shape() + self.set_img_shapes() + + latents, generator = self.run_dit() + images = self.run_vae_decoder(latents) + self.end_run() + + image = images[0] + image.save(f"{input_info.save_result_path}") + + del latents, generator + torch_device_module.empty_cache() + gc.collect() + + # Return (images, audio) - audio is None for default runner + return images, None diff --git a/lightx2v/models/runners/vsr/utils/TCDecoder.py b/lightx2v/models/runners/vsr/utils/TCDecoder.py new file mode 100644 index 0000000..73f2083 --- /dev/null +++ b/lightx2v/models/runners/vsr/utils/TCDecoder.py @@ -0,0 +1,326 @@ +#!/usr/bin/env python3 +""" +Tiny AutoEncoder for Hunyuan Video (Decoder-only, pruned) +- Encoder removed +- Transplant/widening helpers removed +- Deepening (IdentityConv2d+ReLU) is now built into the decoder structure itself +""" + +from collections import namedtuple + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.nn.init as init +from einops import rearrange +from tqdm.auto import tqdm + +DecoderResult = namedtuple("DecoderResult", ("frame", "memory")) +TWorkItem = namedtuple("TWorkItem", ("input_tensor", "block_index")) + +# ---------------------------- +# Utility / building blocks +# ---------------------------- + + +class IdentityConv2d(nn.Conv2d): + """Same-shape Conv2d initialized to identity (Dirac).""" + + def __init__(self, C, kernel_size=3, bias=False): + pad = kernel_size // 2 + super().__init__(C, C, kernel_size, padding=pad, bias=bias) + with torch.no_grad(): + init.dirac_(self.weight) + if self.bias is not None: + self.bias.zero_() + + +def conv(n_in, n_out, **kwargs): + return nn.Conv2d(n_in, n_out, 3, padding=1, **kwargs) + + +class Clamp(nn.Module): + def forward(self, x): + return torch.tanh(x / 3) * 3 + + +class MemBlock(nn.Module): + def __init__(self, n_in, n_out): + super().__init__() + self.conv = nn.Sequential(conv(n_in * 2, n_out), nn.ReLU(inplace=True), conv(n_out, n_out), nn.ReLU(inplace=True), conv(n_out, n_out)) + self.skip = nn.Conv2d(n_in, n_out, 1, bias=False) if n_in != n_out else nn.Identity() + self.act = nn.ReLU(inplace=True) + + def forward(self, x, past): + return self.act(self.conv(torch.cat([x, past], 1)) + self.skip(x)) + + +class TPool(nn.Module): + def __init__(self, n_f, stride): + super().__init__() + self.stride = stride + self.conv = nn.Conv2d(n_f * stride, n_f, 1, bias=False) + + def forward(self, x): + _NT, C, H, W = x.shape + return self.conv(x.reshape(-1, self.stride * C, H, W)) + + +class TGrow(nn.Module): + def __init__(self, n_f, stride): + super().__init__() + self.stride = stride + self.conv = nn.Conv2d(n_f, n_f * stride, 1, bias=False) + + def forward(self, x): + _NT, C, H, W = x.shape + x = self.conv(x) + return x.reshape(-1, C, H, W) + + +class PixelShuffle3d(nn.Module): + def __init__(self, ff, hh, ww): + super().__init__() + self.ff = ff + self.hh = hh + self.ww = ww + + def forward(self, x): + # x: (B, C, F, H, W) + B, C, F, H, W = x.shape + if F % self.ff != 0: + first_frame = x[:, :, 0:1, :, :].repeat(1, 1, self.ff - F % self.ff, 1, 1) + x = torch.cat([first_frame, x], dim=2) + return rearrange(x, "b c (f ff) (h hh) (w ww) -> b (c ff hh ww) f h w", ff=self.ff, hh=self.hh, ww=self.ww).transpose(1, 2) + + +# ---------------------------- +# Generic NTCHW graph executor (kept; used by decoder) +# ---------------------------- + + +def apply_model_with_memblocks(model, x, parallel, show_progress_bar, mem=None): + """ + Apply a sequential model with memblocks to the given input. + Args: + - model: nn.Sequential of blocks to apply + - x: input data, of dimensions NTCHW + - parallel: if True, parallelize over timesteps (fast but uses O(T) memory) + if False, each timestep will be processed sequentially (slow but uses O(1) memory) + - show_progress_bar: if True, enables tqdm progressbar display + + Returns NTCHW tensor of output data. + """ + assert x.ndim == 5, f"TAEHV operates on NTCHW tensors, but got {x.ndim}-dim tensor" + N, T, C, H, W = x.shape + if parallel: + x = x.reshape(N * T, C, H, W) + for b in tqdm(model, disable=not show_progress_bar): + if isinstance(b, MemBlock): + NT, C, H, W = x.shape + T = NT // N + _x = x.reshape(N, T, C, H, W) + mem = F.pad(_x, (0, 0, 0, 0, 0, 0, 1, 0), value=0)[:, :T].reshape(x.shape) + x = b(x, mem) + else: + x = b(x) + NT, C, H, W = x.shape + T = NT // N + x = x.view(N, T, C, H, W) + else: + out = [] + work_queue = [TWorkItem(xt, 0) for t, xt in enumerate(x.reshape(N, T * C, H, W).chunk(T, dim=1))] + progress_bar = tqdm(range(T), disable=not show_progress_bar) + while work_queue: + xt, i = work_queue.pop(0) + if i == 0: + progress_bar.update(1) + if i == len(model): + out.append(xt) + else: + b = model[i] + if isinstance(b, MemBlock): + if mem[i] is None: + xt_new = b(xt, xt * 0) + mem[i] = xt + else: + xt_new = b(xt, mem[i]) + mem[i].copy_(xt) + work_queue.insert(0, TWorkItem(xt_new, i + 1)) + elif isinstance(b, TPool): + if mem[i] is None: + mem[i] = [] + mem[i].append(xt) + if len(mem[i]) > b.stride: + raise ValueError("TPool internal state invalid.") + elif len(mem[i]) == b.stride: + N_, C_, H_, W_ = xt.shape + xt = b(torch.cat(mem[i], 1).view(N_ * b.stride, C_, H_, W_)) + mem[i] = [] + work_queue.insert(0, TWorkItem(xt, i + 1)) + elif isinstance(b, TGrow): + xt = b(xt) + NT, C_, H_, W_ = xt.shape + for xt_next in reversed(xt.view(N, b.stride * C_, H_, W_).chunk(b.stride, 1)): + work_queue.insert(0, TWorkItem(xt_next, i + 1)) + else: + xt = b(xt) + work_queue.insert(0, TWorkItem(xt, i + 1)) + progress_bar.close() + x = torch.stack(out, 1) + return x, mem + + +# ---------------------------- +# Decoder-only TAEHV +# ---------------------------- + + +class TAEHV(nn.Module): + image_channels = 3 + + def __init__(self, checkpoint_path="taehv.pth", decoder_time_upscale=(True, True), decoder_space_upscale=(True, True, True), channels=[256, 128, 64, 64], latent_channels=16): + """Initialize TAEHV (decoder-only) with built-in deepening after every ReLU. + Deepening config: how_many_each=1, k=3 (fixed as requested). + """ + super().__init__() + self.latent_channels = latent_channels + n_f = channels + self.frames_to_trim = 2 ** sum(decoder_time_upscale) - 1 + + # Build the decoder "skeleton" + base_decoder = nn.Sequential( + Clamp(), + conv(self.latent_channels, n_f[0]), + nn.ReLU(inplace=True), + MemBlock(n_f[0], n_f[0]), + MemBlock(n_f[0], n_f[0]), + MemBlock(n_f[0], n_f[0]), + nn.Upsample(scale_factor=2 if decoder_space_upscale[0] else 1), + TGrow(n_f[0], 1), + conv(n_f[0], n_f[1], bias=False), + MemBlock(n_f[1], n_f[1]), + MemBlock(n_f[1], n_f[1]), + MemBlock(n_f[1], n_f[1]), + nn.Upsample(scale_factor=2 if decoder_space_upscale[1] else 1), + TGrow(n_f[1], 2 if decoder_time_upscale[0] else 1), + conv(n_f[1], n_f[2], bias=False), + MemBlock(n_f[2], n_f[2]), + MemBlock(n_f[2], n_f[2]), + MemBlock(n_f[2], n_f[2]), + nn.Upsample(scale_factor=2 if decoder_space_upscale[2] else 1), + TGrow(n_f[2], 2 if decoder_time_upscale[1] else 1), + conv(n_f[2], n_f[3], bias=False), + nn.ReLU(inplace=True), + conv(n_f[3], TAEHV.image_channels), + ) + + # Inline deepening: insert (IdentityConv2d(k=3) + ReLU) after every ReLU + self.decoder = self._apply_identity_deepen(base_decoder, how_many_each=1, k=3) + + self.pixel_shuffle = PixelShuffle3d(4, 8, 8) + + if checkpoint_path is not None: + missing_keys = self.load_state_dict(self.patch_tgrow_layers(torch.load(checkpoint_path, map_location="cpu", weights_only=True)), strict=False) + print("missing_keys", missing_keys) + + # Initialize decoder mem state + self.mem = [None] * len(self.decoder) + + @staticmethod + def _apply_identity_deepen(decoder: nn.Sequential, how_many_each=1, k=3) -> nn.Sequential: + """Return a new Sequential where every nn.ReLU is followed by how_many_each*(IdentityConv2d(k)+ReLU).""" + new_layers = [] + for b in decoder: + new_layers.append(b) + if isinstance(b, nn.ReLU): + # Deduce channel count from preceding layer + C = None + if len(new_layers) >= 2 and isinstance(new_layers[-2], nn.Conv2d): + C = new_layers[-2].out_channels + elif len(new_layers) >= 2 and isinstance(new_layers[-2], MemBlock): + C = new_layers[-2].conv[-1].out_channels + if C is not None: + for _ in range(how_many_each): + new_layers.append(IdentityConv2d(C, kernel_size=k, bias=False)) + new_layers.append(nn.ReLU(inplace=True)) + return nn.Sequential(*new_layers) + + def patch_tgrow_layers(self, sd): + """Patch TGrow layers to use a smaller kernel if needed (decoder-only).""" + new_sd = self.state_dict() + for i, layer in enumerate(self.decoder): + if isinstance(layer, TGrow): + key = f"decoder.{i}.conv.weight" + if key in sd and sd[key].shape[0] > new_sd[key].shape[0]: + sd[key] = sd[key][-new_sd[key].shape[0] :] + return sd + + def decode_video(self, x, parallel=True, show_progress_bar=False, cond=None): + """Decode a sequence of frames from latents. + x: NTCHW latent tensor; returns NTCHW RGB in ~[0, 1]. + """ + trim_flag = self.mem[-8] is None # keeps original relative check + + if cond is not None: + x = torch.cat([self.pixel_shuffle(cond), x], dim=2) + + x, self.mem = apply_model_with_memblocks(self.decoder, x, parallel, show_progress_bar, mem=self.mem) + + if trim_flag: + return x[:, self.frames_to_trim :] + return x + + def forward(self, *args, **kwargs): + raise NotImplementedError("Decoder-only model: call decode_video(...) instead.") + + def clean_mem(self): + self.mem = [None] * len(self.decoder) + + +class DotDict(dict): + __getattr__ = dict.__getitem__ + __setattr__ = dict.__setitem__ + + +class TAEW2_1DiffusersWrapper(nn.Module): + def __init__(self, pretrained_path=None, channels=[256, 128, 64, 64]): + super().__init__() + self.dtype = torch.bfloat16 + self.device = "cuda" + self.taehv = TAEHV(pretrained_path, channels=channels).to(self.dtype) + self.temperal_downsample = [True, True, False] # [sic] + self.config = DotDict(scaling_factor=1.0, latents_mean=torch.zeros(16), z_dim=16, latents_std=torch.ones(16)) + + def decode(self, latents, return_dict=None): + n, c, t, h, w = latents.shape + return (self.taehv.decode_video(latents.transpose(1, 2), parallel=False).transpose(1, 2).mul_(2).sub_(1),) + + def stream_decode_with_cond(self, latents, tiled=False, cond=None): + n, c, t, h, w = latents.shape + return self.taehv.decode_video(latents.transpose(1, 2), parallel=False, cond=cond).transpose(1, 2).mul_(2).sub_(1) + + def clean_mem(self): + self.taehv.clean_mem() + + +# ---------------------------- +# Simplified builder (no small, no transplant, no post-hoc deepening) +# ---------------------------- + + +def build_tcdecoder(new_channels=[512, 256, 128, 128], device="cuda", dtype=torch.bfloat16, new_latent_channels=None): + """ + 构建“更宽”的 decoder;深度增强(IdentityConv2d+ReLU)已在 TAEHV 内部完成。 + - 不创建 small / 不做移植 + - base_ckpt_path 参数保留但不使用(接口兼容) + + 返回:big (单个模型) + """ + if new_latent_channels is not None: + big = TAEHV(checkpoint_path=None, channels=new_channels, latent_channels=new_latent_channels).to(device).to(dtype).train() + else: + big = TAEHV(checkpoint_path=None, channels=new_channels).to(device).to(dtype).train() + + big.clean_mem() + return big diff --git a/lightx2v/models/runners/vsr/utils/utils.py b/lightx2v/models/runners/vsr/utils/utils.py new file mode 100644 index 0000000..3451a87 --- /dev/null +++ b/lightx2v/models/runners/vsr/utils/utils.py @@ -0,0 +1,156 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange + +CACHE_T = 2 + + +class RMS_norm(nn.Module): + def __init__(self, dim, channel_first=True, images=True, bias=False): + super().__init__() + broadcastable_dims = (1, 1, 1) if not images else (1, 1) + shape = (dim, *broadcastable_dims) if channel_first else (dim,) + + self.channel_first = channel_first + self.scale = dim**0.5 + self.gamma = nn.Parameter(torch.ones(shape)) + self.bias = nn.Parameter(torch.zeros(shape)) if bias else 0.0 + + def forward(self, x): + return F.normalize(x, dim=(1 if self.channel_first else -1)) * self.scale * self.gamma + self.bias + + +class CausalConv3d(nn.Conv3d): + """ + Causal 3d convolusion. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._padding = (self.padding[2], self.padding[2], self.padding[1], self.padding[1], 2 * self.padding[0], 0) + self.padding = (0, 0, 0) + + def forward(self, x, cache_x=None): + padding = list(self._padding) + if cache_x is not None and self._padding[4] > 0: + cache_x = cache_x.to(x.device) + # print(cache_x.shape, x.shape) + x = torch.cat([cache_x, x], dim=2) + padding[4] -= cache_x.shape[2] + # print('cache!') + x = F.pad(x, padding, mode="replicate") # mode='replicate' + # print(x[0,0,:,0,0]) + + return super().forward(x) + + +class PixelShuffle3d(nn.Module): + def __init__(self, ff, hh, ww): + super().__init__() + self.ff = ff + self.hh = hh + self.ww = ww + + def forward(self, x): + # x: (B, C, F, H, W) + return rearrange(x, "b c (f ff) (h hh) (w ww) -> b (c ff hh ww) f h w", ff=self.ff, hh=self.hh, ww=self.ww) + + +class Buffer_LQ4x_Proj(nn.Module): + def __init__(self, in_dim, out_dim, layer_num=30): + super().__init__() + self.ff = 1 + self.hh = 16 + self.ww = 16 + self.hidden_dim1 = 2048 + self.hidden_dim2 = 3072 + self.layer_num = layer_num + + self.pixel_shuffle = PixelShuffle3d(self.ff, self.hh, self.ww) + + self.conv1 = CausalConv3d(in_dim * self.ff * self.hh * self.ww, self.hidden_dim1, (4, 3, 3), stride=(2, 1, 1), padding=(1, 1, 1)) # f -> f/2 h -> h w -> w + self.norm1 = RMS_norm(self.hidden_dim1, images=False) + self.act1 = nn.SiLU() + + self.conv2 = CausalConv3d(self.hidden_dim1, self.hidden_dim2, (4, 3, 3), stride=(2, 1, 1), padding=(1, 1, 1)) # f -> f/2 h -> h w -> w + self.norm2 = RMS_norm(self.hidden_dim2, images=False) + self.act2 = nn.SiLU() + + self.linear_layers = nn.ModuleList([nn.Linear(self.hidden_dim2, out_dim) for _ in range(layer_num)]) + + self.clip_idx = 0 + + def forward(self, video): + self.clear_cache() + # x: (B, C, F, H, W) + + t = video.shape[2] + iter_ = 1 + (t - 1) // 4 + first_frame = video[:, :, :1, :, :].repeat(1, 1, 3, 1, 1) + video = torch.cat([first_frame, video], dim=2) + # print(video.shape) + + out_x = [] + for i in range(iter_): + x = self.pixel_shuffle(video[:, :, i * 4 : (i + 1) * 4, :, :]) + cache1_x = x[:, :, -CACHE_T:, :, :].clone() + self.cache["conv1"] = cache1_x + x = self.conv1(x, self.cache["conv1"]) + x = self.norm1(x) + x = self.act1(x) + cache2_x = x[:, :, -CACHE_T:, :, :].clone() + self.cache["conv2"] = cache2_x + if i == 0: + continue + x = self.conv2(x, self.cache["conv2"]) + x = self.norm2(x) + x = self.act2(x) + out_x.append(x) + out_x = torch.cat(out_x, dim=2) + # print(out_x.shape) + out_x = rearrange(out_x, "b c f h w -> b (f h w) c") + outputs = [] + for i in range(self.layer_num): + outputs.append(self.linear_layers[i](out_x)) + return outputs + + def clear_cache(self): + self.cache = {} + self.cache["conv1"] = None + self.cache["conv2"] = None + self.clip_idx = 0 + + def stream_forward(self, video_clip): + if self.clip_idx == 0: + # self.clear_cache() + first_frame = video_clip[:, :, :1, :, :].repeat(1, 1, 3, 1, 1) + video_clip = torch.cat([first_frame, video_clip], dim=2) + x = self.pixel_shuffle(video_clip) + cache1_x = x[:, :, -CACHE_T:, :, :].clone() + self.cache["conv1"] = cache1_x + x = self.conv1(x, self.cache["conv1"]) + x = self.norm1(x) + x = self.act1(x) + cache2_x = x[:, :, -CACHE_T:, :, :].clone() + self.cache["conv2"] = cache2_x + self.clip_idx += 1 + return None + else: + x = self.pixel_shuffle(video_clip) + cache1_x = x[:, :, -CACHE_T:, :, :].clone() + self.cache["conv1"] = cache1_x + x = self.conv1(x, self.cache["conv1"]) + x = self.norm1(x) + x = self.act1(x) + cache2_x = x[:, :, -CACHE_T:, :, :].clone() + self.cache["conv2"] = cache2_x + x = self.conv2(x, self.cache["conv2"]) + x = self.norm2(x) + x = self.act2(x) + out_x = rearrange(x, "b c f h w -> b (f h w) c") + outputs = [] + for i in range(self.layer_num): + outputs.append(self.linear_layers[i](out_x)) + self.clip_idx += 1 + return outputs diff --git a/lightx2v/models/runners/vsr/vsr_wrapper.py b/lightx2v/models/runners/vsr/vsr_wrapper.py new file mode 100644 index 0000000..ade1b76 --- /dev/null +++ b/lightx2v/models/runners/vsr/vsr_wrapper.py @@ -0,0 +1,162 @@ +import os +from typing import Optional + +import torch +from torch.nn import functional as F + +from lightx2v.utils.profiler import * + +try: + from diffsynth import FlashVSRTinyPipeline, ModelManager +except ImportError: + ModelManager = None + FlashVSRTinyPipeline = None + + +from .utils.TCDecoder import build_tcdecoder +from .utils.utils import Buffer_LQ4x_Proj + + +def largest_8n1_leq(n): # 8n+1 + return 0 if n < 1 else ((n - 1) // 8) * 8 + 1 + + +def compute_scaled_and_target_dims(w0: int, h0: int, scale: float = 4.0, multiple: int = 128): + if w0 <= 0 or h0 <= 0: + raise ValueError("Invalid original size") + if scale <= 0: + raise ValueError("scale must be > 0") + + sW = int(round(w0 * scale)) + sH = int(round(h0 * scale)) + + tW = (sW // multiple) * multiple + tH = (sH // multiple) * multiple + + if tW == 0 or tH == 0: + raise ValueError(f"Scaled size too small ({sW}x{sH}) for multiple={multiple}. Increase scale (got {scale}).") + + return sW, sH, tW, tH + + +def prepare_input_tensor(input_tensor, scale: float = 2.0, dtype=torch.bfloat16, device="cuda"): + """ + 视频预处理: [T,H,W,3] -> [1,C,F,H,W] + 1. GPU 上完成插值 + 中心裁剪 + 2. 自动 pad 帧数到 8n-3 + """ + + input_tensor = input_tensor.to(device=device, dtype=torch.float32) # [T,H,W,3] + total, h0, w0, _ = input_tensor.shape + + # 计算缩放与目标分辨率 + sW, sH, tW, tH = compute_scaled_and_target_dims(w0, h0, scale=scale, multiple=128) + print(f"Scaled (x{scale:.2f}): {sW}x{sH} -> Target: {tW}x{tH}") + + # Pad 帧数到 8n-3 + idx = list(range(total)) + [total - 1] * 4 + F_target = largest_8n1_leq(len(idx)) + if F_target == 0: + raise RuntimeError(f"Not enough frames after padding. Got {len(idx)}.") + idx = idx[:F_target] + print(f"Target Frames (8n-3): {F_target - 4}") + + # 取帧并转为 tensor 格式 [B,C,H,W] + frames = input_tensor[idx] # [F,H,W,3] + frames = frames.permute(0, 3, 1, 2) * 2.0 - 1.0 # [F,3,H,W] -> [-1,1] + + # 上采样 (Bilinear) + frames = F.interpolate(frames, scale_factor=scale, mode="bicubic", align_corners=False) + _, _, sH, sW = frames.shape + + # 中心裁剪 + left = (sW - tW) // 2 + top = (sH - tH) // 2 + frames = frames[:, :, top : top + tH, left : left + tW] + + # 输出 [1, C, F, H, W] + vid = frames.permute(1, 0, 2, 3).unsqueeze(0).to(dtype) + return vid, tH, tW, F_target + + +def init_pipeline(model_path): + # print(torch.cuda.current_device(), torch.cuda.get_device_name(torch.cuda.current_device())) + mm = ModelManager(torch_dtype=torch.bfloat16, device="cpu") + mm.load_models( + [ + model_path + "/diffusion_pytorch_model_streaming_dmd.safetensors", + ] + ) + pipe = FlashVSRTinyPipeline.from_model_manager(mm, device="cuda") + pipe.denoising_model().LQ_proj_in = Buffer_LQ4x_Proj(in_dim=3, out_dim=1536, layer_num=1).to("cuda", dtype=torch.bfloat16) + LQ_proj_in_path = model_path + "/LQ_proj_in.ckpt" + if os.path.exists(LQ_proj_in_path): + pipe.denoising_model().LQ_proj_in.load_state_dict(torch.load(LQ_proj_in_path, map_location="cpu"), strict=True) + pipe.denoising_model().LQ_proj_in.to("cuda") + + multi_scale_channels = [512, 256, 128, 128] + pipe.TCDecoder = build_tcdecoder(new_channels=multi_scale_channels, new_latent_channels=16 + 768) + mis = pipe.TCDecoder.load_state_dict(torch.load(model_path + "/TCDecoder.ckpt"), strict=False) + # print(mis) + + pipe.to("cuda") + pipe.enable_vram_management(num_persistent_param_in_dit=None) + pipe.init_cross_kv() + pipe.load_models_to_device(["dit", "vae"]) + return pipe + + +class VSRWrapper: + def __init__(self, model_path, device: Optional[torch.device] = None): + self.device = device or torch.device("cuda" if torch.cuda.is_available() else "cpu") + + # Setup torch for optimal performance + torch.set_grad_enabled(False) + if torch.cuda.is_available(): + torch.backends.cudnn.enabled = True + torch.backends.cudnn.benchmark = True + + # Load model + self.dtype, self.device = torch.bfloat16, "cuda" + self.sparse_ratio = 2.0 # Recommended: 1.5 or 2.0. 1.5 → faster; 2.0 → more stable. + with ProfilingContext4DebugL2("Load VSR model"): + self.pipe = init_pipeline(model_path) + self._warm_up() + + def _warm_up(self): + dummy = torch.zeros((25, 384, 640, 3), dtype=torch.float32, device=self.device) + _ = self.super_resolve_frames(dummy, seed=0, scale=2.0) + torch.cuda.synchronize() + del dummy + + @ProfilingContext4DebugL2("VSR video") + def super_resolve_frames( + self, + video: torch.Tensor, # [T,H,W,C] + seed: float = 0.0, + scale: float = 2.0, + ) -> torch.Tensor: + torch.cuda.empty_cache() + torch.cuda.ipc_collect() + LQ, th, tw, F = prepare_input_tensor(video, scale=scale, dtype=self.dtype, device=self.device) + + video = self.pipe( + prompt="", + negative_prompt="", + cfg_scale=1.0, + num_inference_steps=1, + seed=seed, + LQ_video=LQ, + num_frames=F, + height=th, + width=tw, + is_full_block=False, + if_buffer=True, + topk_ratio=self.sparse_ratio * 768 * 1280 / (th * tw), + kv_ratio=3.0, + local_range=11, # Recommended: 9 or 11. local_range=9 → sharper details; 11 → more stable results. + color_fix=True, + ) + video = (video + 1.0) / 2.0 # 将 [-1,1] 映射到 [0,1] + video = video.permute(1, 2, 3, 0).clamp(0.0, 1.0) # [C,T,H,W] -> [T,H,W,C] + return video diff --git a/lightx2v/models/runners/vsr/vsr_wrapper_hy15.py b/lightx2v/models/runners/vsr/vsr_wrapper_hy15.py new file mode 100644 index 0000000..68e0ef5 --- /dev/null +++ b/lightx2v/models/runners/vsr/vsr_wrapper_hy15.py @@ -0,0 +1,152 @@ +from collections.abc import Sequence +from dataclasses import dataclass +from enum import Enum + +import torch +import torch.nn as nn +import torch.nn.functional as F +from diffusers.configuration_utils import ConfigMixin, register_to_config +from diffusers.models import ModelMixin +from einops import rearrange +from torch import Tensor + +from lightx2v.models.video_encoders.hf.hunyuanvideo15.hunyuanvideo_15_vae import ( + CausalConv3d, + RMS_norm, + ResnetBlock, + forward_with_checkpointing, + swish, +) + + +class UpsamplerType(Enum): + LEARNED = "learned" + FIXED = "fixed" + NONE = "none" + LEARNED_FIXED = "learned_fixed" + + +@dataclass +class UpsamplerConfig: + load_from: str + enable: bool = False + hidden_channels: int = 128 + num_blocks: int = 16 + model_type: UpsamplerType = UpsamplerType.NONE + version: str = "720p" + + +class SRResidualCausalBlock3D(nn.Module): + def __init__(self, channels: int): + super().__init__() + self.block = nn.Sequential( + CausalConv3d(channels, channels, kernel_size=3), + nn.SiLU(inplace=True), + CausalConv3d(channels, channels, kernel_size=3), + nn.SiLU(inplace=True), + CausalConv3d(channels, channels, kernel_size=3), + ) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return x + self.block(x) + + +class SRModel3DV2(ModelMixin, ConfigMixin): + @register_to_config + def __init__( + self, + in_channels: int, + out_channels: int, + hidden_channels: int | None = None, + num_blocks: int = 6, + global_residual: bool = False, + ): + super().__init__() + if hidden_channels is None: + hidden_channels = 64 + self.in_conv = CausalConv3d(in_channels, hidden_channels, kernel_size=3) + self.blocks = nn.ModuleList([SRResidualCausalBlock3D(hidden_channels) for _ in range(num_blocks)]) + self.out_conv = CausalConv3d(hidden_channels, out_channels, kernel_size=3) + self.global_residual = bool(global_residual) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + residual = x + y = self.in_conv(x) + for blk in self.blocks: + y = blk(y) + y = self.out_conv(y) + if self.global_residual and (y.shape == residual.shape): + y = y + residual + return y + + +class Upsampler(ModelMixin, ConfigMixin): + @register_to_config + def __init__( + self, + z_channels: int, + out_channels: int, + block_out_channels: tuple[int, ...], + num_res_blocks: int = 2, + is_residual: bool = False, + ): + super().__init__() + self.num_res_blocks = num_res_blocks + self.block_out_channels = block_out_channels + self.z_channels = z_channels + + # assert block_out_channels[0] % z_channels == 0 + block_in = block_out_channels[0] + self.conv_in = CausalConv3d(z_channels, block_in, kernel_size=3) + + self.up = nn.ModuleList() + for i_level, ch in enumerate(block_out_channels): + block = nn.ModuleList() + block_out = ch + for _ in range(self.num_res_blocks + 1): + block.append(ResnetBlock(in_channels=block_in, out_channels=block_out)) + block_in = block_out + up = nn.Module() + up.block = block + + self.up.append(up) + + self.norm_out = RMS_norm(block_in, images=False) + self.conv_out = CausalConv3d(block_in, out_channels, kernel_size=3) + + self.gradient_checkpointing = False + self.is_residual = is_residual + + def forward(self, z: Tensor, target_shape: Sequence[int] = None) -> Tensor: + """ + Args: + z: (B, C, T, H, W) + target_shape: (H, W) + """ + use_checkpointing = bool(self.training and self.gradient_checkpointing) + if target_shape is not None and z.shape[-2:] != target_shape: + bsz = z.shape[0] + z = rearrange(z, "b c f h w -> (b f) c h w") + z = F.interpolate(z, size=target_shape, mode="bilinear", align_corners=False) + z = rearrange(z, "(b f) c h w -> b c f h w", b=bsz) + + # z to block_in + repeats = self.block_out_channels[0] // (self.z_channels) + h = self.conv_in(z) + z.repeat_interleave(repeats=repeats, dim=1) + + # upsampling + for i_level in range(len(self.block_out_channels)): + for i_block in range(self.num_res_blocks + 1): + h = forward_with_checkpointing( + self.up[i_level].block[i_block], + h, + use_checkpointing=use_checkpointing, + ) + if hasattr(self.up[i_level], "upsample"): + h = forward_with_checkpointing(self.up[i_level].upsample, h, use_checkpointing=use_checkpointing) + + # end + h = self.norm_out(h) + h = swish(h) + h = self.conv_out(h) + return h diff --git a/lightx2v/models/runners/wan/__init__.py b/lightx2v/models/runners/wan/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/runners/wan/wan_animate_runner.py b/lightx2v/models/runners/wan/wan_animate_runner.py new file mode 100644 index 0000000..014a848 --- /dev/null +++ b/lightx2v/models/runners/wan/wan_animate_runner.py @@ -0,0 +1,418 @@ +import gc +from copy import deepcopy + +import cv2 +import numpy as np +import torch +import torch.nn.functional as F +from loguru import logger + +try: + from decord import VideoReader +except ImportError: + VideoReader = None + logger.info("If you want to run animate model, please install decord.") + + +from lightx2v.models.input_encoders.hf.animate.face_encoder import FaceEncoder +from lightx2v.models.input_encoders.hf.animate.motion_encoder import Generator +from lightx2v.models.networks.wan.animate_model import WanAnimateModel +from lightx2v.models.networks.wan.lora_adapter import WanLoraWrapper +from lightx2v.models.runners.wan.wan_runner import WanRunner +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.utils import load_weights, remove_substrings_from_keys +from lightx2v_platform.base.global_var import AI_DEVICE + + +@RUNNER_REGISTER("wan2.2_animate") +class WanAnimateRunner(WanRunner): + def __init__(self, config): + super().__init__(config) + assert self.config["task"] == "animate" + + def inputs_padding(self, array, target_len): + idx = 0 + flip = False + target_array = [] + while len(target_array) < target_len: + target_array.append(deepcopy(array[idx])) + if flip: + idx -= 1 + else: + idx += 1 + if idx == 0 or idx == len(array) - 1: + flip = not flip + return target_array[:target_len] + + def get_valid_len(self, real_len, clip_len=81, overlap=1): + real_clip_len = clip_len - overlap + last_clip_num = (real_len - overlap) % real_clip_len + if last_clip_num == 0: + extra = 0 + else: + extra = real_clip_len - last_clip_num + target_len = real_len + extra + return target_len + + def get_i2v_mask(self, lat_t, lat_h, lat_w, mask_len=1, mask_pixel_values=None, device="cuda"): + if mask_pixel_values is None: + msk = torch.zeros(1, (lat_t - 1) * 4 + 1, lat_h, lat_w, dtype=GET_DTYPE(), device=device) + else: + msk = mask_pixel_values.clone() + msk[:, :mask_len] = 1 + msk = torch.concat([torch.repeat_interleave(msk[:, 0:1], repeats=4, dim=1), msk[:, 1:]], dim=1) + msk = msk.view(1, msk.shape[1] // 4, 4, lat_h, lat_w) + msk = msk.transpose(1, 2)[0] + return msk + + def padding_resize( + self, + img_ori, + height=512, + width=512, + padding_color=(0, 0, 0), + interpolation=cv2.INTER_LINEAR, + ): + ori_height = img_ori.shape[0] + ori_width = img_ori.shape[1] + channel = img_ori.shape[2] + + img_pad = np.zeros((height, width, channel)) + if channel == 1: + img_pad[:, :, 0] = padding_color[0] + else: + img_pad[:, :, 0] = padding_color[0] + img_pad[:, :, 1] = padding_color[1] + img_pad[:, :, 2] = padding_color[2] + + if (ori_height / ori_width) > (height / width): + new_width = int(height / ori_height * ori_width) + img = cv2.resize(img_ori, (new_width, height), interpolation=interpolation) + padding = int((width - new_width) / 2) + if len(img.shape) == 2: + img = img[:, :, np.newaxis] + img_pad[:, padding : padding + new_width, :] = img + else: + new_height = int(width / ori_width * ori_height) + img = cv2.resize(img_ori, (width, new_height), interpolation=interpolation) + padding = int((height - new_height) / 2) + if len(img.shape) == 2: + img = img[:, :, np.newaxis] + img_pad[padding : padding + new_height, :, :] = img + + img_pad = np.uint8(img_pad) + + return img_pad + + def prepare_source(self, src_pose_path, src_face_path, src_ref_path): + pose_video_reader = VideoReader(src_pose_path) + pose_len = len(pose_video_reader) + pose_idxs = list(range(pose_len)) + cond_images = pose_video_reader.get_batch(pose_idxs).asnumpy() + + face_video_reader = VideoReader(src_face_path) + face_len = len(face_video_reader) + face_idxs = list(range(face_len)) + face_images = face_video_reader.get_batch(face_idxs).asnumpy() + height, width = cond_images[0].shape[:2] + refer_images = cv2.imread(src_ref_path)[..., ::-1] + refer_images = self.padding_resize(refer_images, height=height, width=width) + return cond_images, face_images, refer_images + + def prepare_source_for_replace(self, src_bg_path, src_mask_path): + bg_video_reader = VideoReader(src_bg_path) + bg_len = len(bg_video_reader) + bg_idxs = list(range(bg_len)) + bg_images = bg_video_reader.get_batch(bg_idxs).asnumpy() + + mask_video_reader = VideoReader(src_mask_path) + mask_len = len(mask_video_reader) + mask_idxs = list(range(mask_len)) + mask_images = mask_video_reader.get_batch(mask_idxs).asnumpy() + mask_images = mask_images[:, :, :, 0] / 255 + return bg_images, mask_images + + @ProfilingContext4DebugL2("Run Image Encoders") + def run_image_encoders( + self, + conditioning_pixel_values, + refer_t_pixel_values, + bg_pixel_values, + mask_pixel_values, + face_pixel_values, + ): + clip_encoder_out = self.run_image_encoder(self.refer_pixel_values) + vae_encoder_out, pose_latents = self.run_vae_encoder( + conditioning_pixel_values, + refer_t_pixel_values, + bg_pixel_values, + mask_pixel_values, + ) + return {"image_encoder_output": {"clip_encoder_out": clip_encoder_out, "vae_encoder_out": vae_encoder_out, "pose_latents": pose_latents, "face_pixel_values": face_pixel_values}} + + @ProfilingContext4DebugL1( + "Run VAE Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, + metrics_labels=["WanAnimateRunner"], + ) + def run_vae_encoder( + self, + conditioning_pixel_values, + refer_t_pixel_values, + bg_pixel_values, + mask_pixel_values, + ): + H, W = self.refer_pixel_values.shape[-2], self.refer_pixel_values.shape[-1] + pose_latents = self.vae_encoder.encode(conditioning_pixel_values.unsqueeze(0)) # c t h w + ref_latents = self.vae_encoder.encode(self.refer_pixel_values.unsqueeze(1).unsqueeze(0)) # c t h w + + mask_ref = self.get_i2v_mask(1, self.latent_h, self.latent_w, 1) + y_ref = torch.concat([mask_ref, ref_latents]) + + if self.mask_reft_len > 0: + if self.config["replace_flag"]: + y_reft = self.vae_encoder.encode( + torch.concat( + [ + refer_t_pixel_values.unsqueeze(2)[0, :, : self.mask_reft_len], + bg_pixel_values[:, self.mask_reft_len :], + ], + dim=1, + ) + .to(AI_DEVICE) + .unsqueeze(0) + ) + mask_pixel_values = 1 - mask_pixel_values + mask_pixel_values = mask_pixel_values.permute(1, 0, 2, 3) + mask_pixel_values = F.interpolate(mask_pixel_values, size=(H // 8, W // 8), mode="nearest") + mask_pixel_values = mask_pixel_values[:, 0, :, :] + + msk_reft = self.get_i2v_mask( + self.latent_t, + self.latent_h, + self.latent_w, + self.mask_reft_len, + mask_pixel_values=mask_pixel_values.unsqueeze(0), + ) + else: + y_reft = self.vae_encoder.encode( + torch.concat( + [ + torch.nn.functional.interpolate( + refer_t_pixel_values.unsqueeze(2)[0, :, : self.mask_reft_len].cpu(), + size=(H, W), + mode="bicubic", + ), + torch.zeros(3, self.config["target_video_length"] - self.mask_reft_len, H, W, dtype=GET_DTYPE()), + ], + dim=1, + ) + .to(AI_DEVICE) + .unsqueeze(0) + ) + msk_reft = self.get_i2v_mask(self.latent_t, self.latent_h, self.latent_w, self.mask_reft_len) + else: + if self.config["replace_flag"]: + mask_pixel_values = 1 - mask_pixel_values + mask_pixel_values = mask_pixel_values.permute(1, 0, 2, 3) + mask_pixel_values = F.interpolate(mask_pixel_values, size=(H // 8, W // 8), mode="nearest") + mask_pixel_values = mask_pixel_values[:, 0, :, :] + y_reft = self.vae_encoder.encode(bg_pixel_values.unsqueeze(0)) + msk_reft = self.get_i2v_mask( + self.latent_t, + self.latent_h, + self.latent_w, + self.mask_reft_len, + mask_pixel_values=mask_pixel_values.unsqueeze(0), + ) + else: + y_reft = self.vae_encoder.encode(torch.zeros(1, 3, self.config["target_video_length"] - self.mask_reft_len, H, W, dtype=GET_DTYPE(), device="cuda")) + msk_reft = self.get_i2v_mask(self.latent_t, self.latent_h, self.latent_w, self.mask_reft_len) + + y_reft = torch.concat([msk_reft, y_reft]) + y = torch.concat([y_ref, y_reft], dim=1) + + return y, pose_latents + + def prepare_input(self): + src_pose_path = self.input_info.src_pose_path + src_face_path = self.input_info.src_face_path + src_ref_path = self.input_info.src_ref_images + self.cond_images, self.face_images, self.refer_images = self.prepare_source(src_pose_path, src_face_path, src_ref_path) + self.refer_pixel_values = torch.tensor(self.refer_images / 127.5 - 1, dtype=GET_DTYPE(), device="cuda").permute(2, 0, 1) # chw + self.latent_t = self.config["target_video_length"] // self.config["vae_stride"][0] + 1 + self.latent_h = self.refer_pixel_values.shape[-2] // self.config["vae_stride"][1] + self.latent_w = self.refer_pixel_values.shape[-1] // self.config["vae_stride"][2] + self.input_info.latent_shape = [self.config.get("num_channels_latents", 16), self.latent_t + 1, self.latent_h, self.latent_w] + self.real_frame_len = len(self.cond_images) + target_len = self.get_valid_len( + self.real_frame_len, + self.config["target_video_length"], + overlap=self.config["refert_num"] if "refert_num" in self.config else 1, + ) + logger.info("real frames: {} target frames: {}".format(self.real_frame_len, target_len)) + self.cond_images = self.inputs_padding(self.cond_images, target_len) + self.face_images = self.inputs_padding(self.face_images, target_len) + + if self.config["replace_flag"] if "replace_flag" in self.config else False: + src_bg_path = self.input_info.src_bg_path + src_mask_path = self.input_info.src_mask_path + self.bg_images, self.mask_images = self.prepare_source_for_replace(src_bg_path, src_mask_path) + self.bg_images = self.inputs_padding(self.bg_images, target_len) + self.mask_images = self.inputs_padding(self.mask_images, target_len) + + def get_video_segment_num(self): + total_frames = len(self.cond_images) + self.move_frames = self.config["target_video_length"] - self.config["refert_num"] + if total_frames <= self.config["target_video_length"]: + self.video_segment_num = 1 + else: + self.video_segment_num = 1 + (total_frames - self.config["target_video_length"] + self.move_frames - 1) // self.move_frames + + def init_run(self): + self.all_out_frames = [] + self.prepare_input() + super().init_run() + + @ProfilingContext4DebugL1( + "Run VAE Decoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_decode_duration, + metrics_labels=["WanAnimateRunner"], + ) + def run_vae_decoder(self, latents): + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + self.vae_decoder = self.load_vae_decoder() + images = self.vae_decoder.decode(latents[:, 1:].to(GET_DTYPE())) + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + del self.vae_decoder + torch.cuda.empty_cache() + gc.collect() + return images + + @ProfilingContext4DebugL1( + "Init run segment", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_init_run_segment_duration, + metrics_labels=["WanAnimateRunner"], + ) + def init_run_segment(self, segment_idx): + start = segment_idx * self.move_frames + end = start + self.config["target_video_length"] + if start == 0: + self.mask_reft_len = 0 + else: + self.mask_reft_len = self.config["refert_num"] + + conditioning_pixel_values = torch.tensor( + np.stack(self.cond_images[start:end]) / 127.5 - 1, + device="cuda", + dtype=GET_DTYPE(), + ).permute(3, 0, 1, 2) # c t h w + + face_pixel_values = torch.tensor( + np.stack(self.face_images[start:end]) / 127.5 - 1, + device="cuda", + dtype=GET_DTYPE(), + ).permute(0, 3, 1, 2) # thwc->tchw + + if start == 0: + height, width = self.refer_images.shape[:2] + refer_t_pixel_values = torch.zeros( + 3, + self.config["refert_num"], + height, + width, + device="cuda", + dtype=GET_DTYPE(), + ) # c t h w + else: + refer_t_pixel_values = self.gen_video[0, :, -self.config["refert_num"] :].transpose(0, 1).clone().detach().to(AI_DEVICE) # c t h w + + bg_pixel_values, mask_pixel_values = None, None + if self.config["replace_flag"] if "replace_flag" in self.config else False: + bg_pixel_values = torch.tensor( + np.stack(self.bg_images[start:end]) / 127.5 - 1, + device="cuda", + dtype=GET_DTYPE(), + ).permute(3, 0, 1, 2) # c t h w, + + mask_pixel_values = torch.tensor( + np.stack(self.mask_images[start:end])[:, :, :, None], + device="cuda", + dtype=GET_DTYPE(), + ).permute(3, 0, 1, 2) # c t h w, + + self.inputs.update( + self.run_image_encoders( + conditioning_pixel_values, + refer_t_pixel_values, + bg_pixel_values, + mask_pixel_values, + face_pixel_values, + ) + ) + + if start != 0: + self.model.scheduler.reset(self.input_info.seed, self.input_info.latent_shape) + + def end_run_segment(self, segment_idx): + if segment_idx != 0: + self.gen_video = self.gen_video[:, :, self.config["refert_num"] :] + self.all_out_frames.append(self.gen_video.cpu()) + + def process_images_after_vae_decoder(self): + self.gen_video_final = torch.cat(self.all_out_frames, dim=2)[:, :, : self.real_frame_len] + del self.all_out_frames + gc.collect() + super().process_images_after_vae_decoder() + + @ProfilingContext4DebugL1( + "Run Image Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_img_encode_duration, + metrics_labels=["WanAnimateRunner"], + ) + def run_image_encoder(self, img): # CHW + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + self.image_encoder = self.load_image_encoder() + clip_encoder_out = self.image_encoder.visual([img.unsqueeze(0)]).squeeze(0).to(GET_DTYPE()) + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + del self.image_encoder + torch.cuda.empty_cache() + gc.collect() + return clip_encoder_out + + def load_transformer(self): + model = WanAnimateModel( + self.config["model_path"], + self.config, + self.init_device, + ) + + if self.config.get("lora_configs") and self.config.lora_configs: + assert not self.config.get("dit_quantized", False) + lora_wrapper = WanLoraWrapper(model) + for lora_config in self.config.lora_configs: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + + motion_encoder, face_encoder = self.load_encoders() + model.set_animate_encoders(motion_encoder, face_encoder) + return model + + def load_encoders(self): + motion_encoder = Generator(size=512, style_dim=512, motion_dim=20).eval().requires_grad_(False).to(GET_DTYPE()).to(AI_DEVICE) + face_encoder = FaceEncoder(in_dim=512, hidden_dim=5120, num_heads=4).eval().requires_grad_(False).to(GET_DTYPE()).to(AI_DEVICE) + motion_weight_dict = remove_substrings_from_keys(load_weights(self.config["model_path"], include_keys=["motion_encoder"]), "motion_encoder.") + face_weight_dict = remove_substrings_from_keys(load_weights(self.config["model_path"], include_keys=["face_encoder"]), "face_encoder.") + motion_encoder.load_state_dict(motion_weight_dict) + face_encoder.load_state_dict(face_weight_dict) + return motion_encoder, face_encoder diff --git a/lightx2v/models/runners/wan/wan_audio_runner.py b/lightx2v/models/runners/wan/wan_audio_runner.py new file mode 100644 index 0000000..4032e1d --- /dev/null +++ b/lightx2v/models/runners/wan/wan_audio_runner.py @@ -0,0 +1,923 @@ +import gc +import io +import json +import os +import warnings +from dataclasses import dataclass +from typing import Dict, List, Optional, Tuple, Union + +import numpy as np +import torch +import torch.nn.functional as F +import torchaudio as ta +import torchvision.transforms.functional as TF +from PIL import Image, ImageCms, ImageOps +from einops import rearrange +from loguru import logger +from torchvision.transforms import InterpolationMode +from torchvision.transforms.functional import resize + +from lightx2v.deploy.common.va_controller import VAController +from lightx2v.models.input_encoders.hf.seko_audio.audio_adapter import AudioAdapter +from lightx2v.models.input_encoders.hf.seko_audio.audio_encoder import SekoAudioEncoderModel +from lightx2v.models.networks.wan.audio_model import WanAudioModel +from lightx2v.models.networks.wan.lora_adapter import WanLoraWrapper +from lightx2v.models.runners.wan.wan_runner import WanRunner +from lightx2v.models.schedulers.wan.audio.scheduler import EulerScheduler +from lightx2v.models.video_encoders.hf.wan.vae_2_2 import Wan2_2_VAE +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.utils import find_torch_model_path, load_weights, vae_to_comfyui_image_inplace +from lightx2v_platform.base.global_var import AI_DEVICE + +warnings.filterwarnings("ignore", category=UserWarning, module="torchaudio") +warnings.filterwarnings("ignore", category=UserWarning, module="torchvision.io") + + +def get_optimal_patched_size_with_sp(patched_h, patched_w, sp_size): + assert sp_size > 0 and (sp_size & (sp_size - 1)) == 0, "sp_size must be a power of 2" + + h_ratio, w_ratio = 1, 1 + while sp_size != 1: + sp_size //= 2 + if patched_h % 2 == 0: + patched_h //= 2 + h_ratio *= 2 + elif patched_w % 2 == 0: + patched_w //= 2 + w_ratio *= 2 + else: + if patched_h > patched_w: + patched_h //= 2 + h_ratio *= 2 + else: + patched_w //= 2 + w_ratio *= 2 + return patched_h * h_ratio, patched_w * w_ratio + + +def get_crop_bbox(ori_h, ori_w, tgt_h, tgt_w): + tgt_ar = tgt_h / tgt_w + ori_ar = ori_h / ori_w + if abs(ori_ar - tgt_ar) < 0.01: + return 0, ori_h, 0, ori_w + if ori_ar > tgt_ar: + crop_h = int(tgt_ar * ori_w) + y0 = (ori_h - crop_h) // 2 + y1 = y0 + crop_h + return y0, y1, 0, ori_w + else: + crop_w = int(ori_h / tgt_ar) + x0 = (ori_w - crop_w) // 2 + x1 = x0 + crop_w + return 0, ori_h, x0, x1 + + +def isotropic_crop_resize(frames: torch.Tensor, size: tuple): + """ + frames: (C, H, W) or (T, C, H, W) or (N, C, H, W) + size: (H, W) + """ + original_shape = frames.shape + + if len(frames.shape) == 3: + frames = frames.unsqueeze(0) + elif len(frames.shape) == 4 and frames.shape[0] > 1: + pass + + ori_h, ori_w = frames.shape[2:] + h, w = size + y0, y1, x0, x1 = get_crop_bbox(ori_h, ori_w, h, w) + cropped_frames = frames[:, :, y0:y1, x0:x1] + resized_frames = resize(cropped_frames, [h, w], InterpolationMode.BICUBIC, antialias=True) + + if len(original_shape) == 3: + resized_frames = resized_frames.squeeze(0) + + return resized_frames + + +def fixed_shape_resize(img, target_height, target_width): + orig_height, orig_width = img.shape[-2:] + + target_ratio = target_height / target_width + orig_ratio = orig_height / orig_width + + if orig_ratio > target_ratio: + crop_width = orig_width + crop_height = int(crop_width * target_ratio) + else: + crop_height = orig_height + crop_width = int(crop_height / target_ratio) + + cropped_img = TF.center_crop(img, [crop_height, crop_width]) + + resized_img = TF.resize(cropped_img, [target_height, target_width], antialias=True) + + h, w = resized_img.shape[-2:] + return resized_img, h, w + + +def resize_image(img, resize_mode="adaptive", bucket_shape=None, fixed_area=None, fixed_shape=None): + assert resize_mode in ["adaptive", "keep_ratio_fixed_area", "fixed_min_area", "fixed_max_area", "fixed_shape", "fixed_min_side"] + + if resize_mode == "fixed_shape": + assert fixed_shape is not None + logger.info(f"[wan_audio] fixed_shape_resize fixed_height: {fixed_shape[0]}, fixed_width: {fixed_shape[1]}") + return fixed_shape_resize(img, fixed_shape[0], fixed_shape[1]) + + if bucket_shape is not None: + """ + "adaptive_shape": { + "0.667": [[480, 832], [544, 960], [720, 1280]], + "1.500": [[832, 480], [960, 544], [1280, 720]], + "1.000": [[480, 480], [576, 576], [704, 704], [960, 960]] + } + """ + bucket_config = {} + for ratio, resolutions in bucket_shape.items(): + bucket_config[float(ratio)] = np.array(resolutions, dtype=np.int64) + # logger.info(f"[wan_audio] use custom bucket_shape: {bucket_config}") + else: + bucket_config = { + 0.667: np.array([[480, 832], [544, 960], [720, 1280]], dtype=np.int64), + 1.500: np.array([[832, 480], [960, 544], [1280, 720]], dtype=np.int64), + 1.000: np.array([[480, 480], [576, 576], [704, 704], [960, 960]], dtype=np.int64), + } + # logger.info(f"[wan_audio] use default bucket_shape: {bucket_config}") + + ori_height = img.shape[-2] + ori_weight = img.shape[-1] + ori_ratio = ori_height / ori_weight + + if resize_mode == "adaptive": + aspect_ratios = np.array(np.array(list(bucket_config.keys()))) + closet_aspect_idx = np.argmin(np.abs(aspect_ratios - ori_ratio)) + closet_ratio = aspect_ratios[closet_aspect_idx] + if ori_ratio < 1.0: + target_h, target_w = 480, 832 + elif ori_ratio == 1.0: + target_h, target_w = 480, 480 + else: + target_h, target_w = 832, 480 + for resolution in bucket_config[closet_ratio]: + if ori_height * ori_weight >= resolution[0] * resolution[1]: + target_h, target_w = resolution + elif resize_mode == "keep_ratio_fixed_area": + area_in_pixels = 480 * 832 + if fixed_area == "480p": + area_in_pixels = 480 * 832 + elif fixed_area == "720p": + area_in_pixels = 720 * 1280 + else: + area_in_pixels = 480 * 832 + target_h = round(np.sqrt(area_in_pixels * ori_ratio)) + target_w = round(np.sqrt(area_in_pixels / ori_ratio)) + elif resize_mode == "fixed_min_area": + aspect_ratios = np.array(np.array(list(bucket_config.keys()))) + closet_aspect_idx = np.argmin(np.abs(aspect_ratios - ori_ratio)) + closet_ratio = aspect_ratios[closet_aspect_idx] + target_h, target_w = bucket_config[closet_ratio][0] + elif resize_mode == "fixed_min_side": + min_side = 720 + if fixed_area == "720p": + min_side = 720 + elif fixed_area == "480p": + min_side = 480 + else: + logger.warning(f"[wan_audio] fixed_area is not '480p' or '720p', using default 480p: {fixed_area}") + min_side = 480 + if ori_ratio < 1.0: + target_h = min_side + target_w = round(target_h / ori_ratio) + else: + target_w = min_side + target_h = round(target_w * ori_ratio) + elif resize_mode == "fixed_max_area": + aspect_ratios = np.array(np.array(list(bucket_config.keys()))) + closet_aspect_idx = np.argmin(np.abs(aspect_ratios - ori_ratio)) + closet_ratio = aspect_ratios[closet_aspect_idx] + target_h, target_w = bucket_config[closet_ratio][-1] + + cropped_img = isotropic_crop_resize(img, (target_h, target_w)) + logger.info(f"[wan_audio] resize_image: {img.shape} -> {cropped_img.shape}, resize_mode: {resize_mode}, target_h: {target_h}, target_w: {target_w}") + return cropped_img, target_h, target_w + + +@dataclass +class AudioSegment: + """Data class for audio segment information""" + + audio_array: torch.Tensor + start_frame: int + end_frame: int + + +class FramePreprocessorTorchVersion: + """Handles frame preprocessing including noise and masking""" + + def __init__(self, noise_mean: float = -3.0, noise_std: float = 0.5, mask_rate: float = 0.1): + self.noise_mean = noise_mean + self.noise_std = noise_std + self.mask_rate = mask_rate + + def add_noise(self, frames: torch.Tensor, generator: Optional[torch.Generator] = None) -> torch.Tensor: + """Add noise to frames""" + + device = frames.device + shape = frames.shape + bs = 1 if len(shape) == 4 else shape[0] + + # Generate sigma values on the same device + sigma = torch.normal(mean=self.noise_mean, std=self.noise_std, size=(bs,), device=device, generator=generator) + sigma = torch.exp(sigma) + + for _ in range(1, len(shape)): + sigma = sigma.unsqueeze(-1) + + # Generate noise on the same device + noise = torch.randn(*shape, device=device, generator=generator) * sigma + return frames + noise + + def add_mask(self, frames: torch.Tensor, generator: Optional[torch.Generator] = None) -> torch.Tensor: + """Add mask to frames""" + + device = frames.device + h, w = frames.shape[-2:] + + # Generate mask on the same device + mask = torch.rand(h, w, device=device, generator=generator) > self.mask_rate + return frames * mask + + def process_prev_frames(self, frames: torch.Tensor) -> torch.Tensor: + """Process previous frames with noise and masking""" + frames = self.add_noise(frames, torch.Generator(device=frames.device)) + frames = self.add_mask(frames, torch.Generator(device=frames.device)) + return frames + + +class AudioProcessor: + """Handles audio loading and segmentation""" + + def __init__(self, audio_sr: int = 16000, target_fps: int = 16): + self.audio_sr = audio_sr + self.target_fps = target_fps + self.audio_frame_rate = audio_sr // target_fps + + def load_audio(self, audio_path: str): + audio_array, ori_sr = ta.load(audio_path) + audio_array = ta.functional.resample(audio_array.mean(0), orig_freq=ori_sr, new_freq=self.audio_sr) + return audio_array + + def load_multi_person_audio(self, audio_paths: List[str]): + audio_arrays = [] + max_len = 0 + + for audio_path in audio_paths: + audio_array = self.load_audio(audio_path) + audio_arrays.append(audio_array) + max_len = max(max_len, audio_array.numel()) + + num_files = len(audio_arrays) + padded = torch.zeros(num_files, max_len, dtype=torch.float32) + + for i, arr in enumerate(audio_arrays): + length = arr.numel() + padded[i, :length] = arr + + return padded + + def get_audio_range(self, start_frame: int, end_frame: int) -> Tuple[int, int]: + """Calculate audio range for given frame range""" + return round(start_frame * self.audio_frame_rate), round(end_frame * self.audio_frame_rate) + + def segment_audio(self, audio_array: torch.Tensor, expected_frames: int, max_num_frames: int, prev_frame_length: int = 5) -> List[AudioSegment]: + """ + Segment audio based on frame requirements + audio_array is (N, T) tensor + """ + segments = [] + segments_idx = self.init_segments_idx(expected_frames, max_num_frames, prev_frame_length) + + audio_start, audio_end = self.get_audio_range(0, expected_frames) + audio_array_ori = audio_array[:, audio_start:audio_end] + + for idx, (start_idx, end_idx) in enumerate(segments_idx): + audio_start, audio_end = self.get_audio_range(start_idx, end_idx) + audio_array = audio_array_ori[:, audio_start:audio_end] + + if idx < len(segments_idx) - 1: + end_idx = segments_idx[idx + 1][0] + else: # for last segments + if audio_array.shape[1] < audio_end - audio_start: + padding_len = audio_end - audio_start - audio_array.shape[1] + audio_array = F.pad(audio_array, (0, padding_len)) + # Adjust end_idx to account for the frames added by padding + end_idx = end_idx - padding_len // self.audio_frame_rate + + segments.append(AudioSegment(audio_array, start_idx, end_idx)) + del audio_array, audio_array_ori + return segments + + def init_segments_idx(self, total_frame: int, clip_frame: int = 81, overlap_frame: int = 5) -> list[tuple[int, int, int]]: + """Initialize segment indices with overlap""" + start_end_list = [] + min_frame = clip_frame + for start in range(0, total_frame, clip_frame - overlap_frame): + is_last = start + clip_frame >= total_frame + end = min(start + clip_frame, total_frame) + if end - start < min_frame: + end = start + min_frame + if ((end - start) - 1) % 4 != 0: + end = start + (((end - start) - 1) // 4) * 4 + 1 + start_end_list.append((start, end)) + if is_last: + break + return start_end_list + + +def load_image(image: Union[str, Image.Image], to_rgb: bool = True) -> Image.Image: + _image = image + if isinstance(image, str): + if os.path.isfile(image): + _image = Image.open(image) + else: + raise ValueError(f"Incorrect path. {image} is not a valid path.") + # orientation transpose + _image = ImageOps.exif_transpose(_image) + # convert color space to sRGB + icc_profile = _image.info.get("icc_profile") + if icc_profile: + srgb_profile = ImageCms.createProfile("sRGB") + input_profile = ImageCms.ImageCmsProfile(io.BytesIO(icc_profile)) + _image = ImageCms.profileToProfile(_image, input_profile, srgb_profile) + # convert to "RGB" + if to_rgb: + _image = _image.convert("RGB") + + return _image + + +@RUNNER_REGISTER("seko_talk") +class WanAudioRunner(WanRunner): # type:ignore + def __init__(self, config): + super().__init__(config) + self.prev_frame_length = self.config.get("prev_frame_length", 5) + self.frame_preprocessor = FramePreprocessorTorchVersion() + + def init_scheduler(self): + """Initialize consistency model scheduler""" + self.scheduler = EulerScheduler(self.config) + + def read_audio_input(self, audio_path): + """Read audio input - handles both single and multi-person scenarios""" + audio_sr = self.config.get("audio_sr", 16000) + target_fps = self.config.get("target_fps", 16) + self._audio_processor = AudioProcessor(audio_sr, target_fps) + + if not isinstance(audio_path, str): + return [], 0, None, 0 + + # Get audio files from person objects or legacy format + audio_files, mask_files = self.get_audio_files_from_audio_path(audio_path) + + # Load audio based on single or multi-person mode + if len(audio_files) == 1: + audio_array = self._audio_processor.load_audio(audio_files[0]) + audio_array = audio_array.unsqueeze(0) # Add batch dimension for consistency + else: + audio_array = self._audio_processor.load_multi_person_audio(audio_files) + + video_duration = self.config.get("video_duration", 5) + audio_len = int(audio_array.shape[1] / audio_sr * target_fps) + if GET_RECORDER_MODE(): + monitor_cli.lightx2v_input_audio_len.observe(audio_len) + + expected_frames = min(max(1, int(video_duration * target_fps)), audio_len) + if expected_frames < int(video_duration * target_fps): + logger.warning(f"Input video duration is greater than actual audio duration, using audio duration instead: audio_duration={audio_len / target_fps}, video_duration={video_duration}") + + # Segment audio + audio_segments = self._audio_processor.segment_audio(audio_array, expected_frames, self.config.get("target_video_length", 81), self.prev_frame_length) + + # Mask latent for multi-person s2v + if mask_files is not None: + mask_latents = [self.process_single_mask(mask_file) for mask_file in mask_files] + mask_latents = torch.cat(mask_latents, dim=0) + else: + mask_latents = None + + return audio_segments, expected_frames, mask_latents, len(audio_files) + + def get_audio_files_from_audio_path(self, audio_path): + if os.path.isdir(audio_path): + audio_files = [] + mask_files = [] + logger.info(f"audio_path is a directory, loading config.json from {audio_path}") + audio_config_path = os.path.join(audio_path, "config.json") + assert os.path.exists(audio_config_path), "config.json not found in audio_path" + with open(audio_config_path, "r") as f: + audio_config = json.load(f) + for talk_object in audio_config["talk_objects"]: + audio_files.append(os.path.join(audio_path, talk_object["audio"])) + mask_files.append(os.path.join(audio_path, talk_object["mask"])) + else: + logger.info(f"audio_path is a file without mask: {audio_path}") + audio_files = [audio_path] + mask_files = None + + return audio_files, mask_files + + def process_single_mask(self, mask_file): + mask_img = load_image(mask_file) + mask_img = TF.to_tensor(mask_img).sub_(0.5).div_(0.5).unsqueeze(0).to(AI_DEVICE) + + if mask_img.shape[1] == 3: # If it is an RGB three-channel image + mask_img = mask_img[:, :1] # Only take the first channel + + mask_img, h, w = resize_image( + mask_img, + resize_mode=self.config.get("resize_mode", "adaptive"), + bucket_shape=self.config.get("bucket_shape", None), + fixed_area=self.config.get("fixed_area", None), + fixed_shape=self.config.get("fixed_shape", None), + ) + + mask_latent = torch.nn.functional.interpolate( + mask_img, # (1, 1, H, W) + size=(h // 16, w // 16), + mode="bicubic", + ) + + mask_latent = (mask_latent > 0).to(torch.int8) + return mask_latent + + def read_image_input(self, img_path): + if isinstance(img_path, Image.Image): + ref_img = img_path + else: + ref_img = load_image(img_path) + ref_img = TF.to_tensor(ref_img).sub_(0.5).div_(0.5).unsqueeze(0).to(AI_DEVICE) + + ref_img, h, w = resize_image( + ref_img, + resize_mode=self.config.get("resize_mode", "adaptive"), + bucket_shape=self.config.get("bucket_shape", None), + fixed_area=self.config.get("fixed_area", None), + fixed_shape=self.config.get("fixed_shape", None), + ) + logger.info(f"[wan_audio] resize_image target_h: {h}, target_w: {w}") + patched_h = h // self.config["vae_stride"][1] // self.config["patch_size"][1] + patched_w = w // self.config["vae_stride"][2] // self.config["patch_size"][2] + + patched_h, patched_w = get_optimal_patched_size_with_sp(patched_h, patched_w, 1) + + latent_h = patched_h * self.config["patch_size"][1] + latent_w = patched_w * self.config["patch_size"][2] + + latent_shape = self.get_latent_shape_with_lat_hw(latent_h, latent_w) + target_shape = [latent_h * self.config["vae_stride"][1], latent_w * self.config["vae_stride"][2]] + + logger.info(f"[wan_audio] target_h: {target_shape[0]}, target_w: {target_shape[1]}, latent_h: {latent_h}, latent_w: {latent_w}") + + ref_img = torch.nn.functional.interpolate(ref_img, size=(target_shape[0], target_shape[1]), mode="bicubic") + return ref_img, latent_shape, target_shape + + @ProfilingContext4DebugL1( + "Run Image Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_img_encode_duration, + metrics_labels=["WanAudioRunner"], + ) + def run_image_encoder(self, first_frame, last_frame=None): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.image_encoder = self.load_image_encoder() + clip_encoder_out = self.image_encoder.visual([first_frame]).squeeze(0).to(GET_DTYPE()) if self.config.get("use_image_encoder", True) else None + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.image_encoder + torch.cuda.empty_cache() + gc.collect() + return clip_encoder_out + + @ProfilingContext4DebugL1( + "Run VAE Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, + metrics_labels=["WanAudioRunner"], + ) + def run_vae_encoder(self, img): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_encoder = self.load_vae_encoder() + + img = rearrange(img, "1 C H W -> 1 C 1 H W") + vae_encoder_out = self.vae_encoder.encode(img.to(GET_DTYPE())) + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_encoder + torch.cuda.empty_cache() + gc.collect() + return vae_encoder_out + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_s2v(self): + img, latent_shape, target_shape = self.read_image_input(self.input_info.image_path) + if self.config.get("f2v_process", False): + self.ref_img = img + self.input_info.latent_shape = latent_shape # Important: set latent_shape in input_info + self.input_info.target_shape = target_shape # Important: set target_shape in input_info + clip_encoder_out = self.run_image_encoder(img) if self.config.get("use_image_encoder", True) else None + vae_encode_out = self.run_vae_encoder(img) + + audio_segments, expected_frames, person_mask_latens, audio_num = self.read_audio_input(self.input_info.audio_path) + self.input_info.audio_num = audio_num + self.input_info.with_mask = person_mask_latens is not None + text_encoder_output = self.run_text_encoder(self.input_info) + torch.cuda.empty_cache() + gc.collect() + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": { + "clip_encoder_out": clip_encoder_out, + "vae_encoder_out": vae_encode_out, + }, + "audio_segments": audio_segments, + "expected_frames": expected_frames, + "person_mask_latens": person_mask_latens, + } + + def prepare_prev_latents(self, prev_video: Optional[torch.Tensor], prev_frame_length: int) -> Optional[Dict[str, torch.Tensor]]: + """Prepare previous latents for conditioning""" + dtype = GET_DTYPE() + + tgt_h, tgt_w = self.input_info.target_shape[0], self.input_info.target_shape[1] + prev_frames = torch.zeros((1, 3, self.config["target_video_length"], tgt_h, tgt_w), device=AI_DEVICE) + + if prev_video is not None: + # Extract and process last frames + last_frames = prev_video[:, :, -prev_frame_length:].clone().to(AI_DEVICE) + if self.config["model_cls"] != "wan2.2_audio" and not self.config.get("f2v_process", False): + last_frames = self.frame_preprocessor.process_prev_frames(last_frames) + prev_frames[:, :, :prev_frame_length] = last_frames + prev_len = (prev_frame_length - 1) // 4 + 1 + else: + prev_len = 0 + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_encoder = self.load_vae_encoder() + + _, nframe, height, width = self.model.scheduler.latents.shape + with ProfilingContext4DebugL1( + "vae_encoder in init run segment", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_pre_latent_duration, + metrics_labels=["WanAudioRunner"], + ): + if self.config["model_cls"] == "wan2.2_audio": + if prev_video is not None: + prev_latents = self.vae_encoder.encode(prev_frames.to(dtype)) + else: + prev_latents = None + prev_mask = self.model.scheduler.mask + else: + prev_latents = self.vae_encoder.encode(prev_frames.to(dtype)) + + frames_n = (nframe - 1) * 4 + 1 + prev_mask = torch.ones((1, frames_n, height, width), device=AI_DEVICE, dtype=dtype) + prev_frame_len = max((prev_len - 1) * 4 + 1, 0) + prev_mask[:, prev_frame_len:] = 0 + prev_mask = self._wan_mask_rearrange(prev_mask) + + if prev_latents is not None: + if prev_latents.shape[-2:] != (height, width): + logger.warning(f"Size mismatch: prev_latents {prev_latents.shape} vs scheduler latents (H={height}, W={width}). Config tgt_h={tgt_h}, tgt_w={tgt_w}") + prev_latents = torch.nn.functional.interpolate(prev_latents, size=(height, width), mode="bilinear", align_corners=False) + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_encoder + torch.cuda.empty_cache() + gc.collect() + + return {"prev_latents": prev_latents, "prev_mask": prev_mask, "prev_len": prev_len} + + def _wan_mask_rearrange(self, mask: torch.Tensor) -> torch.Tensor: + """Rearrange mask for WAN model""" + if mask.ndim == 3: + mask = mask[None] + assert mask.ndim == 4 + _, t, h, w = mask.shape + assert t == ((t - 1) // 4 * 4 + 1) + mask_first_frame = torch.repeat_interleave(mask[:, 0:1], repeats=4, dim=1) + mask = torch.concat([mask_first_frame, mask[:, 1:]], dim=1) + mask = mask.view(mask.shape[1] // 4, 4, h, w) + return mask.transpose(0, 1).contiguous() + + def get_video_segment_num(self): + self.video_segment_num = len(self.inputs["audio_segments"]) + + def init_run(self): + super().init_run() + self.scheduler.set_audio_adapter(self.audio_adapter) + if self.config.get("f2v_process", False): + self.prev_video = self.ref_img.unsqueeze(2) + else: + self.prev_video = None + if self.input_info.return_result_tensor: + self.gen_video_final = torch.zeros((self.inputs["expected_frames"], self.input_info.target_shape[0], self.input_info.target_shape[1], 3), dtype=torch.float32, device="cpu") + self.cut_audio_final = torch.zeros((self.inputs["expected_frames"] * self._audio_processor.audio_frame_rate), dtype=torch.float32, device="cpu") + else: + self.gen_video_final = None + self.cut_audio_final = None + + @ProfilingContext4DebugL1( + "Init run segment", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_init_run_segment_duration, + metrics_labels=["WanAudioRunner"], + ) + def init_run_segment(self, segment_idx, audio_array=None): + self.segment_idx = segment_idx + if audio_array is not None: + end_idx = audio_array.shape[0] // self._audio_processor.audio_frame_rate - self.prev_frame_length + audio_tensor = torch.Tensor(audio_array).float().unsqueeze(0) + self.segment = AudioSegment(audio_tensor, 0, end_idx) + else: + self.segment = self.inputs["audio_segments"][segment_idx] + + self.input_info.seed = self.input_info.seed + segment_idx + torch.manual_seed(self.input_info.seed) + # logger.info(f"Processing segment {segment_idx + 1}/{self.video_segment_num}, seed: {self.config.seed}") + + if (self.config.get("lazy_load", False) or self.config.get("unload_modules", False)) and not hasattr(self, "audio_encoder"): + self.audio_encoder = self.load_audio_encoder() + + features_list = [] + for i in range(self.segment.audio_array.shape[0]): + feat = self.audio_encoder.infer(self.segment.audio_array[i]) + feat = self.audio_adapter.forward_audio_proj(feat, self.model.scheduler.latents.shape[1]) + features_list.append(feat.squeeze(0)) + audio_features = torch.stack(features_list, dim=0) + + self.inputs["audio_encoder_output"] = audio_features + self.inputs["previmg_encoder_output"] = self.prepare_prev_latents(self.prev_video, prev_frame_length=self.prev_frame_length) + + # Reset scheduler for non-first segments + if segment_idx > 0: + self.model.scheduler.reset(self.input_info.seed, self.input_info.latent_shape, self.inputs["previmg_encoder_output"]) + + @ProfilingContext4DebugL1( + "End run segment", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_end_run_segment_duration, + metrics_labels=["WanAudioRunner"], + ) + def end_run_segment(self, segment_idx): + self.gen_video = torch.clamp(self.gen_video, -1, 1).to(torch.float) + useful_length = self.segment.end_frame - self.segment.start_frame + video_seg = self.gen_video[:, :, :useful_length].cpu() + audio_seg = self.segment.audio_array[:, : useful_length * self._audio_processor.audio_frame_rate] + audio_seg = audio_seg.sum(dim=0) # Multiple audio tracks, mixed into one track + video_seg = vae_to_comfyui_image_inplace(video_seg) + + # [Warning] Need check whether video segment interpolation works... + if "video_frame_interpolation" in self.config and self.vfi_model is not None: + target_fps = self.config["video_frame_interpolation"]["target_fps"] + logger.info(f"Interpolating frames from {self.config.get('fps', 16)} to {target_fps}") + video_seg = self.vfi_model.interpolate_frames( + video_seg, + source_fps=self.config.get("fps", 16), + target_fps=target_fps, + ) + + if "video_super_resolution" in self.config and self.vsr_model is not None: + # logger.info(f"Applying video super resolution with scale {self.config['video_super_resolution']['scale']}") + video_seg = self.vsr_model.super_resolve_frames( + video_seg, + seed=self.config["video_super_resolution"]["seed"], + scale=self.config["video_super_resolution"]["scale"], + ) + + if self.va_controller.recorder is not None: + self.va_controller.pub_livestream(video_seg, audio_seg, self.gen_video[:, :, :useful_length]) + elif self.input_info.return_result_tensor: + self.gen_video_final[self.segment.start_frame : self.segment.end_frame].copy_(video_seg) + self.cut_audio_final[self.segment.start_frame * self._audio_processor.audio_frame_rate : self.segment.end_frame * self._audio_processor.audio_frame_rate].copy_(audio_seg) + + # Update prev_video for next iteration + self.prev_video = self.gen_video + + del video_seg, audio_seg + torch.cuda.empty_cache() + + @ProfilingContext4DebugL1( + "End run segment stream", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_end_run_segment_duration, + metrics_labels=["WanAudioRunner"], + ) + def end_run_segment_stream(self, latents): + valid_length = self.segment.end_frame - self.segment.start_frame + frame_segments = [] + frame_idx = 0 + + # frame_segment: 1*C*1*H*W, 1*C*4*H*W, 1*C*4*H*W, ... + for origin_seg in self.run_vae_decoder_stream(latents): + origin_seg = torch.clamp(origin_seg, -1, 1).to(torch.float) + valid_T = min(valid_length - frame_idx, origin_seg.shape[2]) + + video_seg = vae_to_comfyui_image_inplace(origin_seg[:, :, :valid_T].cpu()) + audio_start = frame_idx * self._audio_processor.audio_frame_rate + audio_end = (frame_idx + valid_T) * self._audio_processor.audio_frame_rate + audio_seg = self.segment.audio_array[:, audio_start:audio_end].sum(dim=0) + + if self.va_controller.recorder is not None: + self.va_controller.pub_livestream(video_seg, audio_seg, origin_seg[:, :, :valid_T]) + + frame_segments.append(origin_seg) + frame_idx += valid_T + del video_seg, audio_seg + + # Update prev_video for next iteration + self.prev_video = torch.cat(frame_segments, dim=2) + torch.cuda.empty_cache() + + def run_main(self): + try: + self.va_controller = None + self.va_controller = VAController(self) + logger.info(f"init va_recorder: {self.va_controller.recorder} and va_reader: {self.va_controller.reader}") + + # fixed audio segments inputs + if self.va_controller.reader is None: + return super().run_main() + + self.va_controller.start() + self.init_run() + if self.config.get("compile", False) and hasattr(self.model, "comple"): + self.model.select_graph_for_compile(self.input_info) + # steam audio input, video segment num is unlimited + self.video_segment_num = 1000000 + segment_idx = 0 + fail_count, max_fail_count = 0, 10 + self.va_controller.before_control() + + while True: + with ProfilingContext4DebugL1(f"stream segment get audio segment {segment_idx}"): + control = self.va_controller.next_control() + if control.action == "immediate": + self.prev_video = control.data + elif control.action == "wait": + time.sleep(0.01) + continue + + audio_array = self.va_controller.reader.get_audio_segment() + if audio_array is None: + fail_count += 1 + logger.warning(f"Failed to get audio chunk {fail_count} times") + if fail_count > max_fail_count: + raise Exception(f"Failed to get audio chunk {fail_count} times, stop reader") + continue + + with ProfilingContext4DebugL1(f"stream segment end2end {segment_idx}"): + try: + # reset pause signal + self.pause_signal = False + self.init_run_segment(segment_idx, audio_array) + self.check_stop() + latents = self.run_segment(segment_idx) + self.check_stop() + if self.config.get("use_stream_vae", False): + self.end_run_segment_stream(latents) + else: + self.gen_video = self.run_vae_decoder(latents) + self.check_stop() + self.end_run_segment(segment_idx) + segment_idx += 1 + fail_count = 0 + except Exception as e: + if "pause_signal, pause running" in str(e): + logger.warning(f"model infer audio pause: {e}, should continue") + else: + raise + finally: + if hasattr(self.model, "inputs"): + self.end_run() + if self.va_controller is not None: + self.va_controller.clear() + self.va_controller = None + + @ProfilingContext4DebugL1("Process after vae decoder") + def process_images_after_vae_decoder(self): + if self.input_info.return_result_tensor: + audio_waveform = self.cut_audio_final.unsqueeze(0).unsqueeze(0) + comfyui_audio = {"waveform": audio_waveform, "sample_rate": self._audio_processor.audio_sr} + return {"video": self.gen_video_final, "audio": comfyui_audio} + return {"video": None, "audio": None} + + def load_transformer(self): + """Load transformer with LoRA support""" + base_model = WanAudioModel(self.config["model_path"], self.config, self.init_device) + if self.config.get("lora_configs") and self.config["lora_configs"]: + assert not self.config.get("dit_quantized", False) + lora_wrapper = WanLoraWrapper(base_model) + for lora_config in self.config["lora_configs"]: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + + return base_model + + def load_audio_encoder(self): + audio_encoder_path = self.config.get("audio_encoder_path", os.path.join(self.config["model_path"], "TencentGameMate-chinese-hubert-large")) + audio_encoder_offload = self.config.get("audio_encoder_cpu_offload", self.config.get("cpu_offload", False)) + model = SekoAudioEncoderModel(audio_encoder_path, self.config["audio_sr"], audio_encoder_offload) + return model + + def load_audio_adapter(self): + audio_adapter_offload = self.config.get("audio_adapter_cpu_offload", self.config.get("cpu_offload", False)) + if audio_adapter_offload: + device = torch.device("cpu") + else: + device = torch.device(AI_DEVICE) + audio_adapter = AudioAdapter( + attention_head_dim=self.config["dim"] // self.config["num_heads"], + num_attention_heads=self.config["num_heads"], + base_num_layers=self.config["num_layers"], + interval=1, + audio_feature_dim=1024, + time_freq_dim=256, + projection_transformer_layers=4, + mlp_dims=(1024, 1024, 32 * 1024), + quantized=self.config.get("adapter_quantized", False), + quant_scheme=self.config.get("adapter_quant_scheme", None), + cpu_offload=audio_adapter_offload, + ) + + audio_adapter.to(device) + load_from_rank0 = self.config.get("load_from_rank0", False) + weights_dict = load_weights(self.config["adapter_model_path"], cpu_offload=audio_adapter_offload, remove_key="ca", load_from_rank0=load_from_rank0) + audio_adapter.load_state_dict(weights_dict, strict=False) + return audio_adapter.to(dtype=GET_DTYPE()) + + def load_model(self): + super().load_model() + with ProfilingContext4DebugL2("Load audio encoder and adapter"): + self.audio_encoder = self.load_audio_encoder() + self.audio_adapter = self.load_audio_adapter() + + def get_latent_shape_with_lat_hw(self, latent_h, latent_w): + latent_shape = [ + self.config.get("num_channels_latents", 16), + (self.config["target_video_length"] - 1) // self.config["vae_stride"][0] + 1, + latent_h, + latent_w, + ] + return latent_shape + + +@RUNNER_REGISTER("wan2.2_audio") +class Wan22AudioRunner(WanAudioRunner): + def __init__(self, config): + super().__init__(config) + + def load_vae_decoder(self): + # offload config + vae_offload = self.config.get("vae_cpu_offload", self.config.get("cpu_offload")) + if vae_offload: + vae_device = torch.device("cpu") + else: + vae_device = torch.device(AI_DEVICE) + vae_config = { + "vae_path": find_torch_model_path(self.config, "vae_path", "Wan2.2_VAE.pth"), + "device": vae_device, + "cpu_offload": vae_offload, + "offload_cache": self.config.get("vae_offload_cache", False), + } + vae_decoder = Wan2_2_VAE(**vae_config) + return vae_decoder + + def load_vae_encoder(self): + # offload config + vae_offload = self.config.get("vae_cpu_offload", self.config.get("cpu_offload")) + if vae_offload: + vae_device = torch.device("cpu") + else: + vae_device = torch.device(AI_DEVICE) + vae_config = { + "vae_path": find_torch_model_path(self.config, "vae_path", "Wan2.2_VAE.pth"), + "device": vae_device, + "cpu_offload": vae_offload, + "offload_cache": self.config.get("vae_offload_cache", False), + } + if self.config.task not in ["i2v", "s2v"]: + return None + else: + return Wan2_2_VAE(**vae_config) + + def load_vae(self): + vae_encoder = self.load_vae_encoder() + vae_decoder = self.load_vae_decoder() + return vae_encoder, vae_decoder diff --git a/lightx2v/models/runners/wan/wan_distill_runner.py b/lightx2v/models/runners/wan/wan_distill_runner.py new file mode 100644 index 0000000..1f55754 --- /dev/null +++ b/lightx2v/models/runners/wan/wan_distill_runner.py @@ -0,0 +1,200 @@ +import os + +from loguru import logger + +from lightx2v.models.networks.wan.distill_model import WanDistillModel +from lightx2v.models.networks.wan.lora_adapter import WanLoraWrapper +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.runners.wan.wan_runner import MultiModelStruct, WanRunner +from lightx2v.models.schedulers.wan.step_distill.scheduler import Wan22StepDistillScheduler, WanStepDistillScheduler +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER + + +@RUNNER_REGISTER("wan2.1_distill") +class WanDistillRunner(WanRunner): + def __init__(self, config): + super().__init__(config) + + def load_transformer(self): + if self.config.get("lora_configs") and self.config["lora_configs"]: + model = WanModel( + self.config["model_path"], + self.config, + self.init_device, + ) + lora_wrapper = WanLoraWrapper(model) + for lora_config in self.config["lora_configs"]: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + else: + model = WanDistillModel(self.config["model_path"], self.config, self.init_device) + return model + + def init_scheduler(self): + if self.config["feature_caching"] == "NoCaching": + self.scheduler = WanStepDistillScheduler(self.config) + else: + raise NotImplementedError(f"Unsupported feature_caching type: {self.config['feature_caching']}") + + +class MultiDistillModelStruct(MultiModelStruct): + def __init__(self, model_list, config, boundary_step_index=2): + self.model = model_list # [high_noise_model, low_noise_model] + assert len(self.model) == 2, "MultiModelStruct only supports 2 models now." + self.config = config + self.boundary_step_index = boundary_step_index + self.cur_model_index = -1 + logger.info(f"boundary step index: {self.boundary_step_index}") + + @ProfilingContext4DebugL2("Swtich models in infer_main costs") + def get_current_model_index(self): + if self.scheduler.step_index < self.boundary_step_index: + logger.info(f"using - HIGH - noise model at step_index {self.scheduler.step_index + 1}") + # self.scheduler.sample_guide_scale = self.config["sample_guide_scale"][0] + if self.config.get("cpu_offload", False) and self.config.get("offload_granularity", "block") == "model": + if self.cur_model_index == -1: + self.to_cuda(model_index=0) + elif self.cur_model_index == 1: # 1 -> 0 + self.offload_cpu(model_index=1) + self.to_cuda(model_index=0) + self.cur_model_index = 0 + else: + logger.info(f"using - LOW - noise model at step_index {self.scheduler.step_index + 1}") + # self.scheduler.sample_guide_scale = self.config["sample_guide_scale"][1] + if self.config.get("cpu_offload", False) and self.config.get("offload_granularity", "block") == "model": + if self.cur_model_index == -1: + self.to_cuda(model_index=1) + elif self.cur_model_index == 0: # 0 -> 1 + self.offload_cpu(model_index=0) + self.to_cuda(model_index=1) + self.cur_model_index = 1 + + def infer(self, inputs): + self.get_current_model_index() + if not self.config.get("lazy_load", False) and not self.config.get("unload_modules", False): + self.model[self.cur_model_index].infer(inputs) + else: + if self.model[self.cur_model_index] is not None: + self.model[self.cur_model_index].infer(inputs) + else: + if self.cur_model_index == 0: + high_noise_model = WanDistillModel( + self.high_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_high_noise", + ) + high_noise_model.set_scheduler(self.scheduler) + self.model[0] = high_noise_model + self.model[0].infer(inputs) + elif self.cur_model_index == 1: + low_noise_model = WanDistillModel( + self.low_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_low_noise", + ) + low_noise_model.set_scheduler(self.scheduler) + self.model[1] = low_noise_model + self.model[1].infer(inputs) + + +@RUNNER_REGISTER("wan2.2_moe_distill") +class Wan22MoeDistillRunner(WanDistillRunner): + def __init__(self, config): + super().__init__(config) + if self.config.get("dit_quantized", False) and self.config.get("high_noise_quantized_ckpt", None): + self.high_noise_model_path = self.config["high_noise_quantized_ckpt"] + elif self.config.get("high_noise_original_ckpt", None): + self.high_noise_model_path = self.config["high_noise_original_ckpt"] + else: + self.high_noise_model_path = os.path.join(self.config["model_path"], "high_noise_model") + if not os.path.isdir(self.high_noise_model_path): + self.high_noise_model_path = os.path.join(self.config["model_path"], "distill_models", "high_noise_model") + if not os.path.isdir(self.high_noise_model_path): + raise FileNotFoundError(f"High Noise Model does not find") + + if self.config.get("dit_quantized", False) and self.config.get("low_noise_quantized_ckpt", None): + self.low_noise_model_path = self.config["low_noise_quantized_ckpt"] + elif not self.config.get("dit_quantized", False) and self.config.get("low_noise_original_ckpt", None): + self.low_noise_model_path = self.config["low_noise_original_ckpt"] + else: + self.low_noise_model_path = os.path.join(self.config["model_path"], "low_noise_model") + if not os.path.isdir(self.low_noise_model_path): + self.low_noise_model_path = os.path.join(self.config["model_path"], "distill_models", "low_noise_model") + if not os.path.isdir(self.high_noise_model_path): + raise FileNotFoundError(f"Low Noise Model does not find") + + def load_transformer(self): + if not self.config.get("lazy_load", False) and not self.config.get("unload_modules", False): + use_high_lora, use_low_lora = False, False + if self.config.get("lora_configs") and self.config["lora_configs"]: + for lora_config in self.config["lora_configs"]: + if lora_config.get("name", "") == "high_noise_model": + use_high_lora = True + elif lora_config.get("name", "") == "low_noise_model": + use_low_lora = True + + if use_high_lora: + high_noise_model = WanModel( + self.high_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_high_noise", + ) + high_lora_wrapper = WanLoraWrapper(high_noise_model) + for lora_config in self.config["lora_configs"]: + if lora_config.get("name", "") == "high_noise_model": + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = high_lora_wrapper.load_lora(lora_path) + high_lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"High noise model loaded LoRA: {lora_name} with strength: {strength}") + else: + high_noise_model = WanDistillModel( + self.high_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_high_noise", + ) + + if use_low_lora: + low_noise_model = WanModel( + self.low_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_low_noise", + ) + low_lora_wrapper = WanLoraWrapper(low_noise_model) + for lora_config in self.config["lora_configs"]: + if lora_config.get("name", "") == "low_noise_model": + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = low_lora_wrapper.load_lora(lora_path) + low_lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Low noise model loaded LoRA: {lora_name} with strength: {strength}") + else: + low_noise_model = WanDistillModel( + self.low_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_low_noise", + ) + + return MultiDistillModelStruct([high_noise_model, low_noise_model], self.config, self.config["boundary_step_index"]) + else: + model_struct = MultiDistillModelStruct([None, None], self.config, self.config["boundary_step_index"]) + model_struct.low_noise_model_path = self.low_noise_model_path + model_struct.high_noise_model_path = self.high_noise_model_path + model_struct.init_device = self.init_device + return model_struct + + def init_scheduler(self): + if self.config["feature_caching"] == "NoCaching": + self.scheduler = Wan22StepDistillScheduler(self.config) + else: + raise NotImplementedError(f"Unsupported feature_caching type: {self.config['feature_caching']}") diff --git a/lightx2v/models/runners/wan/wan_matrix_game2_runner.py b/lightx2v/models/runners/wan/wan_matrix_game2_runner.py new file mode 100644 index 0000000..9aed80f --- /dev/null +++ b/lightx2v/models/runners/wan/wan_matrix_game2_runner.py @@ -0,0 +1,327 @@ +import os + +import torch +from diffusers.utils.loading_utils import load_image +from torchvision.transforms import v2 + +from lightx2v.models.input_encoders.hf.wan.matrix_game2.clip import CLIPModel +from lightx2v.models.input_encoders.hf.wan.matrix_game2.conditions import Bench_actions_gta_drive, Bench_actions_templerun, Bench_actions_universal +from lightx2v.models.networks.wan.matrix_game2_model import WanSFMtxg2Model +from lightx2v.models.runners.wan.wan_sf_runner import WanSFRunner +from lightx2v.models.video_encoders.hf.wan.vae_sf import WanMtxg2VAE +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v_platform.base.global_var import AI_DEVICE + + +class VAEWrapper: + def __init__(self, vae): + self.vae = vae + + def __getattr__(self, name): + if name in self.__dict__: + return self.__dict__[name] + else: + return getattr(self.vae, name) + + def encode(self, x): + raise NotImplementedError + + def decode(self, latents): + return NotImplementedError + + +class WanxVAEWrapper(VAEWrapper): + def __init__(self, vae, clip): + self.vae = vae + self.vae.requires_grad_(False) + self.vae.eval() + self.clip = clip + if clip is not None: + self.clip.requires_grad_(False) + self.clip.eval() + + def encode(self, x, device, tiled=False, tile_size=(34, 34), tile_stride=(18, 16)): + x = self.vae.encode(x, device=device, tiled=tiled, tile_size=tile_size, tile_stride=tile_stride) # already scaled + return x # torch.stack(x, dim=0) + + def clip_img(self, x): + x = self.clip(x) + return x + + def decode(self, latents, device, tiled=False, tile_size=(34, 34), tile_stride=(18, 16)): + videos = self.vae.decode(latents, device=device, tiled=tiled, tile_size=tile_size, tile_stride=tile_stride) + return videos # self.vae.decode(videos, dim=0) # already scaled + + def to(self, device, dtype): + # 移动 vae 到指定设备 + self.vae = self.vae.to(device, dtype) + + # 如果 clip 存在,也移动到指定设备 + if self.clip is not None: + self.clip = self.clip.to(device, dtype) + + return self + + +def get_wanx_vae_wrapper(model_path, weight_dtype): + vae = WanMtxg2VAE(pretrained_path=os.path.join(model_path, "Wan2.1_VAE.pth")).to(weight_dtype) + clip = CLIPModel(checkpoint_path=os.path.join(model_path, "models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth"), tokenizer_path=os.path.join(model_path, "xlm-roberta-large")) + return WanxVAEWrapper(vae, clip) + + +def get_current_action(mode="universal"): + CAM_VALUE = 0.1 + if mode == "universal": + print() + print("-" * 30) + print("PRESS [I, K, J, L, U] FOR CAMERA TRANSFORM\n (I: up, K: down, J: left, L: right, U: no move)") + print("PRESS [W, S, A, D, Q] FOR MOVEMENT\n (W: forward, S: back, A: left, D: right, Q: no move)") + print("-" * 30) + CAMERA_VALUE_MAP = {"i": [CAM_VALUE, 0], "k": [-CAM_VALUE, 0], "j": [0, -CAM_VALUE], "l": [0, CAM_VALUE], "u": [0, 0]} + KEYBOARD_IDX = {"w": [1, 0, 0, 0], "s": [0, 1, 0, 0], "a": [0, 0, 1, 0], "d": [0, 0, 0, 1], "q": [0, 0, 0, 0]} + flag = 0 + while flag != 1: + try: + idx_mouse = input("Please input the mouse action (e.g. `U`):\n").strip().lower() + idx_keyboard = input("Please input the keyboard action (e.g. `W`):\n").strip().lower() + if idx_mouse in CAMERA_VALUE_MAP.keys() and idx_keyboard in KEYBOARD_IDX.keys(): + flag = 1 + except Exception as e: + pass + mouse_cond = torch.tensor(CAMERA_VALUE_MAP[idx_mouse]).to(AI_DEVICE) + keyboard_cond = torch.tensor(KEYBOARD_IDX[idx_keyboard]).to(AI_DEVICE) + elif mode == "gta_drive": + print() + print("-" * 30) + print("PRESS [W, S, A, D, Q] FOR MOVEMENT\n (W: forward, S: back, A: left, D: right, Q: no move)") + print("-" * 30) + CAMERA_VALUE_MAP = {"a": [0, -CAM_VALUE], "d": [0, CAM_VALUE], "q": [0, 0]} + KEYBOARD_IDX = {"w": [1, 0], "s": [0, 1], "q": [0, 0]} + flag = 0 + while flag != 1: + try: + indexes = input("Please input the actions (split with ` `):\n(e.g. `W` for forward, `W A` for forward and left)\n").strip().lower().split(" ") + idx_mouse = [] + idx_keyboard = [] + for i in indexes: + if i in CAMERA_VALUE_MAP.keys(): + idx_mouse += [i] + elif i in KEYBOARD_IDX.keys(): + idx_keyboard += [i] + if len(idx_mouse) == 0: + idx_mouse += ["q"] + if len(idx_keyboard) == 0: + idx_keyboard += ["q"] + assert idx_mouse in [["a"], ["d"], ["q"]] and idx_keyboard in [["q"], ["w"], ["s"]] + flag = 1 + except Exception as e: + pass + mouse_cond = torch.tensor(CAMERA_VALUE_MAP[idx_mouse[0]]).to(AI_DEVICE) + keyboard_cond = torch.tensor(KEYBOARD_IDX[idx_keyboard[0]]).to(AI_DEVICE) + elif mode == "templerun": + print() + print("-" * 30) + print("PRESS [W, S, A, D, Z, C, Q] FOR ACTIONS\n (W: jump, S: slide, A: left side, D: right side, Z: turn left, C: turn right, Q: no move)") + print("-" * 30) + KEYBOARD_IDX = { + "w": [0, 1, 0, 0, 0, 0, 0], + "s": [0, 0, 1, 0, 0, 0, 0], + "a": [0, 0, 0, 0, 0, 1, 0], + "d": [0, 0, 0, 0, 0, 0, 1], + "z": [0, 0, 0, 1, 0, 0, 0], + "c": [0, 0, 0, 0, 1, 0, 0], + "q": [1, 0, 0, 0, 0, 0, 0], + } + flag = 0 + while flag != 1: + try: + idx_keyboard = input("Please input the action: \n(e.g. `W` for forward, `Z` for turning left)\n").strip().lower() + if idx_keyboard in KEYBOARD_IDX.keys(): + flag = 1 + except Exception as e: + pass + keyboard_cond = torch.tensor(KEYBOARD_IDX[idx_keyboard]).to(AI_DEVICE) + + if mode != "templerun": + return {"mouse": mouse_cond, "keyboard": keyboard_cond} + return {"keyboard": keyboard_cond} + + +@RUNNER_REGISTER("wan2.1_sf_mtxg2") +class WanSFMtxg2Runner(WanSFRunner): + def __init__(self, config): + super().__init__(config) + self.frame_process = v2.Compose( + [ + v2.Resize(size=(352, 640), antialias=True), + v2.ToTensor(), + v2.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]), + ] + ) + self.device = torch.device("cuda") + self.weight_dtype = torch.bfloat16 + + def load_text_encoder(self): + from lightx2v.models.input_encoders.hf.wan.matrix_game2.conditions import MatrixGame2_Bench + + return MatrixGame2_Bench() + + def load_image_encoder(self): + wrapper = get_wanx_vae_wrapper(self.config["model_path"], torch.float16) + wrapper.requires_grad_(False) + wrapper.eval() + return wrapper.to(self.device, self.weight_dtype) + + def _resizecrop(self, image, th, tw): + w, h = image.size + if h / w > th / tw: + new_w = int(w) + new_h = int(new_w * th / tw) + else: + new_h = int(h) + new_w = int(new_h * tw / th) + left = (w - new_w) / 2 + top = (h - new_h) / 2 + right = (w + new_w) / 2 + bottom = (h + new_h) / 2 + image = image.crop((left, top, right, bottom)) + return image + + @ProfilingContext4DebugL2("Run Encoders") + def _run_input_encoder_local_i2v(self): + # image + image = load_image(self.input_info.image_path) + image = self._resizecrop(image, 352, 640) + image = self.frame_process(image)[None, :, None, :, :].to(dtype=self.weight_dtype, device=self.device) + padding_video = torch.zeros_like(image).repeat(1, 1, 4 * (self.config["num_output_frames"] - 1), 1, 1) + img_cond = torch.concat([image, padding_video], dim=2) + tiler_kwargs = {"tiled": True, "tile_size": [44, 80], "tile_stride": [23, 38]} + img_cond = self.image_encoder.encode(img_cond, device=self.device, **tiler_kwargs).to(self.device) + mask_cond = torch.ones_like(img_cond) + mask_cond[:, :, 1:] = 0 + cond_concat = torch.cat([mask_cond[:, :4], img_cond], dim=1) + visual_context = self.image_encoder.clip.encode_video(image) + image_encoder_output = {"cond_concat": cond_concat.to(device=self.device, dtype=self.weight_dtype), "visual_context": visual_context.to(device=self.device, dtype=self.weight_dtype)} + + # text + text_encoder_output = {} + num_frames = (self.config["num_output_frames"] - 1) * 4 + 1 + if self.config["mode"] == "universal": + cond_data = Bench_actions_universal(num_frames) + mouse_condition = cond_data["mouse_condition"].unsqueeze(0).to(device=self.device, dtype=self.weight_dtype) + text_encoder_output["mouse_cond"] = mouse_condition + elif self.config["mode"] == "gta_drive": + cond_data = Bench_actions_gta_drive(num_frames) + mouse_condition = cond_data["mouse_condition"].unsqueeze(0).to(device=self.device, dtype=self.weight_dtype) + text_encoder_output["mouse_cond"] = mouse_condition + else: + cond_data = Bench_actions_templerun(num_frames) + keyboard_condition = cond_data["keyboard_condition"].unsqueeze(0).to(device=self.device, dtype=self.weight_dtype) + text_encoder_output["keyboard_cond"] = keyboard_condition + + # set shape + self.input_info.latent_shape = [16, self.config["num_output_frames"], 44, 80] + + return {"text_encoder_output": text_encoder_output, "image_encoder_output": image_encoder_output} + + def load_transformer(self): + model = WanSFMtxg2Model( + self.config["model_path"], + self.config, + self.init_device, + ) + return model + + def init_run_segment(self, segment_idx): + self.segment_idx = segment_idx + + if self.config["streaming"]: + self.inputs["current_actions"] = get_current_action(mode=self.config["mode"]) + + @ProfilingContext4DebugL2("Run DiT") + def run_main(self): + self.init_run() + if self.config.get("compile", False): + self.model.select_graph_for_compile(self.input_info) + + stop = "" + while stop != "n": + for segment_idx in range(self.video_segment_num): + logger.info(f"🔄 start segment {segment_idx + 1}/{self.video_segment_num}") + with ProfilingContext4DebugL1( + f"segment end2end {segment_idx + 1}/{self.video_segment_num}", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_segments_end2end_duration, + metrics_labels=["DefaultRunner"], + ): + self.check_stop() + # 1. default do nothing + self.init_run_segment(segment_idx) + # 2. main inference loop + latents = self.run_segment(segment_idx=segment_idx) + # 3. vae decoder + self.gen_video = self.run_vae_decoder(latents) + # 4. default do nothing + self.end_run_segment(segment_idx) + + # 5. stop or not + if self.config["streaming"]: + stop = input("Press `n` to stop generation: ").strip().lower() + if stop == "n": + break + stop = "n" + + gen_video_final = self.process_images_after_vae_decoder() + self.end_run() + return gen_video_final + + @ProfilingContext4DebugL2("Run DiT") + def run_main_live(self, total_steps=None): + try: + self.init_video_recorder() + logger.info(f"init video_recorder: {self.video_recorder}") + rank, world_size = self.get_rank_and_world_size() + if rank == world_size - 1: + assert self.video_recorder is not None, "video_recorder is required for stream audio input for rank 2" + self.video_recorder.start(self.width, self.height) + if world_size > 1: + dist.barrier() + self.init_run() + if self.config.get("compile", False): + self.model.select_graph_for_compile(self.input_info) + + stop = "" + while stop != "n": + for segment_idx in range(self.video_segment_num): + logger.info(f"🔄 start segment {segment_idx + 1}/{self.video_segment_num}") + with ProfilingContext4DebugL1( + f"segment end2end {segment_idx + 1}/{self.video_segment_num}", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_segments_end2end_duration, + metrics_labels=["DefaultRunner"], + ): + self.check_stop() + # 1. default do nothing + self.init_run_segment(segment_idx) + # 2. main inference loop + latents = self.run_segment(segment_idx=segment_idx) + # 3. vae decoder + self.gen_video = self.run_vae_decoder(latents) + # 4. default do nothing + self.end_run_segment(segment_idx) + + # 5. stop or not + if self.config["streaming"]: + stop = input("Press `n` to stop generation: ").strip().lower() + if stop == "n": + break + stop = "n" + finally: + if hasattr(self.model, "inputs"): + self.end_run() + if self.video_recorder: + self.video_recorder.stop() + self.video_recorder = None diff --git a/lightx2v/models/runners/wan/wan_runner.py b/lightx2v/models/runners/wan/wan_runner.py new file mode 100644 index 0000000..490b4f0 --- /dev/null +++ b/lightx2v/models/runners/wan/wan_runner.py @@ -0,0 +1,638 @@ +import gc +import os + +import numpy as np +import torch +import torch.distributed as dist +import torchvision.transforms.functional as TF +from PIL import Image +from loguru import logger + +from lightx2v.models.input_encoders.hf.wan.t5.model import T5EncoderModel +from lightx2v.models.input_encoders.hf.wan.xlm_roberta.model import CLIPModel +from lightx2v.models.networks.wan.lora_adapter import WanLoraWrapper +from lightx2v.models.networks.wan.model import WanModel +from lightx2v.models.runners.default_runner import DefaultRunner +from lightx2v.models.schedulers.wan.changing_resolution.scheduler import ( + WanScheduler4ChangingResolutionInterface, +) +from lightx2v.models.schedulers.wan.feature_caching.scheduler import ( + WanSchedulerCaching, + WanSchedulerTaylorCaching, +) +from lightx2v.models.schedulers.wan.scheduler import WanScheduler +from lightx2v.models.video_encoders.hf.wan.vae import WanVAE +from lightx2v.models.video_encoders.hf.wan.vae_2_2 import Wan2_2_VAE +from lightx2v.models.video_encoders.hf.wan.vae_tiny import Wan2_2_VAE_tiny, WanVAE_tiny +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.utils import * +from lightx2v_platform.base.global_var import AI_DEVICE + + +@RUNNER_REGISTER("wan2.1") +class WanRunner(DefaultRunner): + def __init__(self, config): + super().__init__(config) + self.vae_cls = WanVAE + self.tiny_vae_cls = WanVAE_tiny + self.vae_name = config.get("vae_name", "Wan2.1_VAE.pth") + self.tiny_vae_name = "taew2_1.pth" + + def load_transformer(self): + model = WanModel( + self.config["model_path"], + self.config, + self.init_device, + ) + if self.config.get("lora_configs") and self.config.lora_configs: + assert not self.config.get("dit_quantized", False) + lora_wrapper = WanLoraWrapper(model) + for lora_config in self.config.lora_configs: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + return model + + def load_image_encoder(self): + image_encoder = None + if self.config["task"] in ["i2v", "flf2v", "animate", "s2v"] and self.config.get("use_image_encoder", True): + # offload config + clip_offload = self.config.get("clip_cpu_offload", self.config.get("cpu_offload", False)) + if clip_offload: + clip_device = torch.device("cpu") + else: + clip_device = torch.device(AI_DEVICE) + # quant_config + clip_quantized = self.config.get("clip_quantized", False) + if clip_quantized: + clip_quant_scheme = self.config.get("clip_quant_scheme", None) + assert clip_quant_scheme is not None + tmp_clip_quant_scheme = clip_quant_scheme.split("-")[0] + clip_model_name = f"models_clip_open-clip-xlm-roberta-large-vit-huge-14-{tmp_clip_quant_scheme}.pth" + clip_quantized_ckpt = find_torch_model_path(self.config, "clip_quantized_ckpt", clip_model_name) + clip_original_ckpt = None + else: + clip_quantized_ckpt = None + clip_quant_scheme = None + clip_model_name = "models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" + clip_original_ckpt = find_torch_model_path(self.config, "clip_original_ckpt", clip_model_name) + + image_encoder = CLIPModel( + dtype=torch.float16, + device=clip_device, + checkpoint_path=clip_original_ckpt, + clip_quantized=clip_quantized, + clip_quantized_ckpt=clip_quantized_ckpt, + quant_scheme=clip_quant_scheme, + cpu_offload=clip_offload, + use_31_block=self.config.get("use_31_block", True), + load_from_rank0=self.config.get("load_from_rank0", False), + ) + + return image_encoder + + def load_text_encoder(self): + # offload config + t5_offload = self.config.get("t5_cpu_offload", self.config.get("cpu_offload")) + if t5_offload: + t5_device = torch.device("cpu") + else: + t5_device = torch.device(AI_DEVICE) + tokenizer_path = os.path.join(self.config["model_path"], "google/umt5-xxl") + # quant_config + t5_quantized = self.config.get("t5_quantized", False) + if t5_quantized: + t5_quant_scheme = self.config.get("t5_quant_scheme", None) + assert t5_quant_scheme is not None + tmp_t5_quant_scheme = t5_quant_scheme.split("-")[0] + t5_model_name = f"models_t5_umt5-xxl-enc-{tmp_t5_quant_scheme}.pth" + t5_quantized_ckpt = find_torch_model_path(self.config, "t5_quantized_ckpt", t5_model_name) + t5_original_ckpt = None + else: + t5_quant_scheme = None + t5_quantized_ckpt = None + t5_model_name = "models_t5_umt5-xxl-enc-bf16.pth" + t5_original_ckpt = find_torch_model_path(self.config, "t5_original_ckpt", t5_model_name) + + text_encoder = T5EncoderModel( + text_len=self.config["text_len"], + dtype=torch.bfloat16, + device=t5_device, + checkpoint_path=t5_original_ckpt, + tokenizer_path=tokenizer_path, + shard_fn=None, + cpu_offload=t5_offload, + t5_quantized=t5_quantized, + t5_quantized_ckpt=t5_quantized_ckpt, + quant_scheme=t5_quant_scheme, + load_from_rank0=self.config.get("load_from_rank0", False), + ) + text_encoders = [text_encoder] + return text_encoders + + def load_vae_encoder(self): + # offload config + vae_offload = self.config.get("vae_cpu_offload", self.config.get("cpu_offload")) + if vae_offload: + vae_device = torch.device("cpu") + else: + vae_device = torch.device(AI_DEVICE) + + vae_config = { + "vae_path": find_torch_model_path(self.config, "vae_path", self.vae_name), + "device": vae_device, + "parallel": self.config["parallel"], + "use_tiling": self.config.get("use_tiling_vae", False), + "cpu_offload": vae_offload, + "dtype": GET_DTYPE(), + "load_from_rank0": self.config.get("load_from_rank0", False), + "use_lightvae": self.config.get("use_lightvae", False), + } + if self.config["task"] not in ["i2v", "flf2v", "animate", "vace", "s2v"]: + return None + else: + return self.vae_cls(**vae_config) + + def load_vae_decoder(self): + # offload config + vae_offload = self.config.get("vae_cpu_offload", self.config.get("cpu_offload")) + if vae_offload: + vae_device = torch.device("cpu") + else: + vae_device = torch.device(AI_DEVICE) + + vae_config = { + "vae_path": find_torch_model_path(self.config, "vae_path", self.vae_name), + "device": vae_device, + "parallel": self.config["parallel"], + "use_tiling": self.config.get("use_tiling_vae", False), + "cpu_offload": vae_offload, + "use_lightvae": self.config.get("use_lightvae", False), + "dtype": GET_DTYPE(), + "load_from_rank0": self.config.get("load_from_rank0", False), + } + if self.config.get("use_tae", False): + tae_path = find_torch_model_path(self.config, "tae_path", self.tiny_vae_name) + vae_decoder = self.tiny_vae_cls(vae_path=tae_path, device=self.init_device, need_scaled=self.config.get("need_scaled", False)).to(AI_DEVICE) + else: + vae_decoder = self.vae_cls(**vae_config) + return vae_decoder + + def load_vae(self): + vae_encoder = self.load_vae_encoder() + if vae_encoder is None or self.config.get("use_tae", False): + vae_decoder = self.load_vae_decoder() + else: + vae_decoder = vae_encoder + return vae_encoder, vae_decoder + + def init_scheduler(self): + if self.config["feature_caching"] == "NoCaching": + scheduler_class = WanScheduler + elif self.config["feature_caching"] == "TaylorSeer": + scheduler_class = WanSchedulerTaylorCaching + elif self.config.feature_caching in ["Tea", "Ada", "Custom", "FirstBlock", "DualBlock", "DynamicBlock", "Mag"]: + scheduler_class = WanSchedulerCaching + else: + raise NotImplementedError(f"Unsupported feature_caching type: {self.config.feature_caching}") + + if self.config.get("changing_resolution", False): + self.scheduler = WanScheduler4ChangingResolutionInterface(scheduler_class, self.config) + else: + self.scheduler = scheduler_class(self.config) + + @ProfilingContext4DebugL1( + "Run Text Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_text_encode_duration, + metrics_labels=["WanRunner"], + ) + def run_text_encoder(self, input_info): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.text_encoders = self.load_text_encoder() + + prompt = input_info.prompt_enhanced if self.config["use_prompt_enhancer"] else input_info.prompt + if GET_RECORDER_MODE(): + monitor_cli.lightx2v_input_prompt_len.observe(len(prompt)) + neg_prompt = input_info.negative_prompt + + if self.config.get("enable_cfg", False) and self.config["cfg_parallel"]: + cfg_p_group = self.config["device_mesh"].get_group(mesh_dim="cfg_p") + cfg_p_rank = dist.get_rank(cfg_p_group) + if cfg_p_rank == 0: + context = self.text_encoders[0].infer([prompt]) + context = torch.stack([torch.cat([u, u.new_zeros(self.config["text_len"] - u.size(0), u.size(1))]) for u in context]) + text_encoder_output = {"context": context} + else: + context_null = self.text_encoders[0].infer([neg_prompt]) + context_null = torch.stack([torch.cat([u, u.new_zeros(self.config["text_len"] - u.size(0), u.size(1))]) for u in context_null]) + text_encoder_output = {"context_null": context_null} + else: + context = self.text_encoders[0].infer([prompt]) + context = torch.stack([torch.cat([u, u.new_zeros(self.config["text_len"] - u.size(0), u.size(1))]) for u in context]) + if self.config.get("enable_cfg", False): + context_null = self.text_encoders[0].infer([neg_prompt]) + context_null = torch.stack([torch.cat([u, u.new_zeros(self.config["text_len"] - u.size(0), u.size(1))]) for u in context_null]) + else: + context_null = None + text_encoder_output = { + "context": context, + "context_null": context_null, + } + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.text_encoders[0] + torch.cuda.empty_cache() + gc.collect() + + return text_encoder_output + + @ProfilingContext4DebugL1( + "Run Image Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_img_encode_duration, + metrics_labels=["WanRunner"], + ) + def run_image_encoder(self, first_frame, last_frame=None): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.image_encoder = self.load_image_encoder() + if last_frame is None: + clip_encoder_out = self.image_encoder.visual([first_frame]).squeeze(0).to(GET_DTYPE()) + else: + clip_encoder_out = self.image_encoder.visual([first_frame, last_frame]).squeeze(0).to(GET_DTYPE()) + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.image_encoder + torch.cuda.empty_cache() + gc.collect() + return clip_encoder_out + + def _adjust_latent_for_grid_splitting(self, latent_h, latent_w, world_size): + """ + Adjust latent dimensions for optimal 2D grid splitting. + Prefers balanced grids like 2x4 or 4x2 over 1x8 or 8x1. + """ + world_size_h, world_size_w = 1, 1 + if world_size <= 1: + return latent_h, latent_w, world_size_h, world_size_w + + # Define priority grids for different world sizes + priority_grids = [] + if world_size == 8: + # For 8 cards, prefer 2x4 and 4x2 over 1x8 and 8x1 + priority_grids = [(2, 4), (4, 2), (1, 8), (8, 1)] + elif world_size == 4: + priority_grids = [(2, 2), (1, 4), (4, 1)] + elif world_size == 2: + priority_grids = [(1, 2), (2, 1)] + else: + # For other sizes, try factor pairs + for h in range(1, int(np.sqrt(world_size)) + 1): + if world_size % h == 0: + w = world_size // h + priority_grids.append((h, w)) + + # Try priority grids first + for world_size_h, world_size_w in priority_grids: + if latent_h % world_size_h == 0 and latent_w % world_size_w == 0: + return latent_h, latent_w, world_size_h, world_size_w + + # If no perfect fit, find minimal padding solution + best_grid = (1, world_size) # fallback + min_total_padding = float("inf") + + for world_size_h, world_size_w in priority_grids: + # Calculate required padding + pad_h = (world_size_h - (latent_h % world_size_h)) % world_size_h + pad_w = (world_size_w - (latent_w % world_size_w)) % world_size_w + total_padding = pad_h + pad_w + + # Prefer grids with minimal total padding + if total_padding < min_total_padding: + min_total_padding = total_padding + best_grid = (world_size_h, world_size_w) + + # Apply padding + world_size_h, world_size_w = best_grid + pad_h = (world_size_h - (latent_h % world_size_h)) % world_size_h + pad_w = (world_size_w - (latent_w % world_size_w)) % world_size_w + + return latent_h + pad_h, latent_w + pad_w, world_size_h, world_size_w + + @ProfilingContext4DebugL1( + "Run VAE Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, + metrics_labels=["WanRunner"], + ) + def run_vae_encoder(self, first_frame, last_frame=None): + h, w = first_frame.shape[2:] + aspect_ratio = h / w + max_area = self.config["target_height"] * self.config["target_width"] + + # Calculate initial latent dimensions + ori_latent_h = round(np.sqrt(max_area * aspect_ratio) // self.config["vae_stride"][1] // self.config["patch_size"][1] * self.config["patch_size"][1]) + ori_latent_w = round(np.sqrt(max_area / aspect_ratio) // self.config["vae_stride"][2] // self.config["patch_size"][2] * self.config["patch_size"][2]) + + # Adjust latent dimensions for optimal 2D grid splitting when using distributed processing + if dist.is_initialized() and dist.get_world_size() > 1: + latent_h, latent_w, world_size_h, world_size_w = self._adjust_latent_for_grid_splitting(ori_latent_h, ori_latent_w, dist.get_world_size()) + logger.info(f"ori latent: {ori_latent_h}x{ori_latent_w}, adjust_latent: {latent_h}x{latent_w}, grid: {world_size_h}x{world_size_w}") + else: + latent_h, latent_w = ori_latent_h, ori_latent_w + world_size_h, world_size_w = None, None + + latent_shape = self.get_latent_shape_with_lat_hw(latent_h, latent_w) # Important: latent_shape is used to set the input_info + + if self.config.get("changing_resolution", False): + assert last_frame is None + vae_encode_out_list = [] + for i in range(len(self.config["resolution_rate"])): + latent_h_tmp, latent_w_tmp = ( + int(latent_h * self.config["resolution_rate"][i]) // 2 * 2, + int(latent_w * self.config["resolution_rate"][i]) // 2 * 2, + ) + vae_encode_out_list.append(self.get_vae_encoder_output(first_frame, latent_h_tmp, latent_w_tmp, world_size_h=world_size_h, world_size_w=world_size_w)) + vae_encode_out_list.append(self.get_vae_encoder_output(first_frame, latent_h, latent_w, world_size_h=world_size_h, world_size_w=world_size_w)) + return vae_encode_out_list, latent_shape + else: + if last_frame is not None: + first_frame_size = first_frame.shape[2:] + last_frame_size = last_frame.shape[2:] + if first_frame_size != last_frame_size: + last_frame_resize_ratio = max(first_frame_size[0] / last_frame_size[0], first_frame_size[1] / last_frame_size[1]) + last_frame_size = [ + round(last_frame_size[0] * last_frame_resize_ratio), + round(last_frame_size[1] * last_frame_resize_ratio), + ] + last_frame = TF.center_crop(last_frame, last_frame_size) + vae_encoder_out = self.get_vae_encoder_output(first_frame, latent_h, latent_w, last_frame, world_size_h=world_size_h, world_size_w=world_size_w) + return vae_encoder_out, latent_shape + + def get_vae_encoder_output(self, first_frame, lat_h, lat_w, last_frame=None, world_size_h=None, world_size_w=None): + h = lat_h * self.config["vae_stride"][1] + w = lat_w * self.config["vae_stride"][2] + msk = torch.ones( + 1, + self.config["target_video_length"], + lat_h, + lat_w, + device=torch.device(AI_DEVICE), + ) + if last_frame is not None: + msk[:, 1:-1] = 0 + else: + msk[:, 1:] = 0 + + msk = torch.concat([torch.repeat_interleave(msk[:, 0:1], repeats=4, dim=1), msk[:, 1:]], dim=1) + msk = msk.view(1, msk.shape[1] // 4, 4, lat_h, lat_w) + msk = msk.transpose(1, 2)[0] + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_encoder = self.load_vae_encoder() + + if last_frame is not None: + vae_input = torch.concat( + [ + torch.nn.functional.interpolate(first_frame.cpu(), size=(h, w), mode="bicubic").transpose(0, 1), + torch.zeros(3, self.config["target_video_length"] - 2, h, w), + torch.nn.functional.interpolate(last_frame.cpu(), size=(h, w), mode="bicubic").transpose(0, 1), + ], + dim=1, + ).to(AI_DEVICE) + else: + vae_input = torch.concat( + [ + torch.nn.functional.interpolate(first_frame.cpu(), size=(h, w), mode="bicubic").transpose(0, 1), + torch.zeros(3, self.config["target_video_length"] - 1, h, w), + ], + dim=1, + ).to(AI_DEVICE) + + vae_encoder_out = self.vae_encoder.encode(vae_input.unsqueeze(0).to(GET_DTYPE()), world_size_h=world_size_h, world_size_w=world_size_w) + + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_encoder + torch.cuda.empty_cache() + gc.collect() + vae_encoder_out = torch.concat([msk, vae_encoder_out]).to(GET_DTYPE()) + return vae_encoder_out + + def get_encoder_output_i2v(self, clip_encoder_out, vae_encoder_out, text_encoder_output, img=None): + image_encoder_output = { + "clip_encoder_out": clip_encoder_out, + "vae_encoder_out": vae_encoder_out, + } + return { + "text_encoder_output": text_encoder_output, + "image_encoder_output": image_encoder_output, + } + + def get_latent_shape_with_lat_hw(self, latent_h, latent_w): + latent_shape = [ + self.config.get("num_channels_latents", 16), + (self.config["target_video_length"] - 1) // self.config["vae_stride"][0] + 1, + latent_h, + latent_w, + ] + return latent_shape + + def get_latent_shape_with_target_hw(self): + latent_shape = [ + self.config.get("num_channels_latents", 16), + (self.config["target_video_length"] - 1) // self.config["vae_stride"][0] + 1, + int(self.config["target_height"]) // self.config["vae_stride"][1], + int(self.config["target_width"]) // self.config["vae_stride"][2], + ] + return latent_shape + + +class MultiModelStruct: + def __init__(self, model_list, config, boundary=0.875, num_train_timesteps=1000): + self.model = model_list # [high_noise_model, low_noise_model] + assert len(self.model) == 2, "MultiModelStruct only supports 2 models now." + self.config = config + self.boundary = boundary + self.boundary_timestep = self.boundary * num_train_timesteps + self.cur_model_index = -1 + logger.info(f"boundary: {self.boundary}, boundary_timestep: {self.boundary_timestep}") + + @property + def device(self): + return self.model[self.cur_model_index].device + + def set_scheduler(self, shared_scheduler): + self.scheduler = shared_scheduler + for model in self.model: + if model is not None: + model.set_scheduler(shared_scheduler) + + def infer(self, inputs): + self.get_current_model_index() + if not self.config.get("lazy_load", False) and not self.config.get("unload_modules", False): + self.model[self.cur_model_index].infer(inputs) + else: + if self.model[self.cur_model_index] is not None: + self.model[self.cur_model_index].infer(inputs) + else: + if self.cur_model_index == 0: + high_noise_model = WanModel( + self.high_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_high_noise", + ) + high_noise_model.set_scheduler(self.scheduler) + self.model[0] = high_noise_model + self.model[0].infer(inputs) + elif self.cur_model_index == 1: + low_noise_model = WanModel( + self.low_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_low_noise", + ) + low_noise_model.set_scheduler(self.scheduler) + self.model[1] = low_noise_model + self.model[1].infer(inputs) + + @ProfilingContext4DebugL2("Swtich models in infer_main costs") + def get_current_model_index(self): + if self.scheduler.timesteps[self.scheduler.step_index] >= self.boundary_timestep: + logger.info(f"using - HIGH - noise model at step_index {self.scheduler.step_index + 1}") + self.scheduler.sample_guide_scale = self.config["sample_guide_scale"][0] + if self.config.get("cpu_offload", False) and self.config.get("offload_granularity", "block") == "model": + if self.cur_model_index == -1: + self.to_cuda(model_index=0) + elif self.cur_model_index == 1: # 1 -> 0 + self.offload_cpu(model_index=1) + self.to_cuda(model_index=0) + self.cur_model_index = 0 + else: + logger.info(f"using - LOW - noise model at step_index {self.scheduler.step_index + 1}") + self.scheduler.sample_guide_scale = self.config["sample_guide_scale"][1] + if self.config.get("cpu_offload", False) and self.config.get("offload_granularity", "block") == "model": + if self.cur_model_index == -1: + self.to_cuda(model_index=1) + elif self.cur_model_index == 0: # 0 -> 1 + self.offload_cpu(model_index=0) + self.to_cuda(model_index=1) + self.cur_model_index = 1 + + def offload_cpu(self, model_index): + self.model[model_index].to_cpu() + + def to_cuda(self, model_index): + self.model[model_index].to_cuda() + + +@RUNNER_REGISTER("wan2.2_moe") +class Wan22MoeRunner(WanRunner): + def __init__(self, config): + super().__init__(config) + self.high_noise_model_path = os.path.join(self.config["model_path"], "high_noise_model") + if not os.path.isdir(self.high_noise_model_path): + self.high_noise_model_path = os.path.join(self.config["model_path"], "distill_models", "high_noise_model") + if self.config.get("dit_quantized", False) and self.config.get("high_noise_quantized_ckpt", None): + self.high_noise_model_path = self.config["high_noise_quantized_ckpt"] + elif self.config.get("high_noise_original_ckpt", None): + self.high_noise_model_path = self.config["high_noise_original_ckpt"] + + self.low_noise_model_path = os.path.join(self.config["model_path"], "low_noise_model") + if not os.path.isdir(self.low_noise_model_path): + self.low_noise_model_path = os.path.join(self.config["model_path"], "distill_models", "low_noise_model") + if self.config.get("dit_quantized", False) and self.config.get("low_noise_quantized_ckpt", None): + self.low_noise_model_path = self.config["low_noise_quantized_ckpt"] + elif not self.config.get("dit_quantized", False) and self.config.get("low_noise_original_ckpt", None): + self.low_noise_model_path = self.config["low_noise_original_ckpt"] + + def load_transformer(self): + # encoder -> high_noise_model -> low_noise_model -> vae -> video_output + if not self.config.get("lazy_load", False) and not self.config.get("unload_modules", False): + high_noise_model = WanModel( + self.high_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_high_noise", + ) + low_noise_model = WanModel( + self.low_noise_model_path, + self.config, + self.init_device, + model_type="wan2.2_moe_low_noise", + ) + + if self.config.get("lora_configs") and self.config["lora_configs"]: + assert not self.config.get("dit_quantized", False) + + for lora_config in self.config["lora_configs"]: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + base_name = os.path.basename(lora_path) + if base_name.startswith("high"): + lora_wrapper = WanLoraWrapper(high_noise_model) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + elif base_name.startswith("low"): + lora_wrapper = WanLoraWrapper(low_noise_model) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + else: + raise ValueError(f"Unsupported LoRA path: {lora_path}") + + return MultiModelStruct([high_noise_model, low_noise_model], self.config, self.config["boundary"]) + else: + model_struct = MultiModelStruct([None, None], self.config, self.config["boundary"]) + model_struct.low_noise_model_path = self.low_noise_model_path + model_struct.high_noise_model_path = self.high_noise_model_path + model_struct.init_device = self.init_device + return model_struct + + +@RUNNER_REGISTER("wan2.2") +class Wan22DenseRunner(WanRunner): + def __init__(self, config): + super().__init__(config) + self.vae_encoder_need_img_original = True + self.vae_cls = Wan2_2_VAE + self.tiny_vae_cls = Wan2_2_VAE_tiny + self.vae_name = "Wan2.2_VAE.pth" + self.tiny_vae_name = "taew2_2.pth" + + @ProfilingContext4DebugL1( + "Run VAE Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, + metrics_labels=["Wan22DenseRunner"], + ) + def run_vae_encoder(self, img): + max_area = self.config.target_height * self.config.target_width + ih, iw = img.height, img.width + dh, dw = self.config.patch_size[1] * self.config.vae_stride[1], self.config.patch_size[2] * self.config.vae_stride[2] + ow, oh = best_output_size(iw, ih, dw, dh, max_area) + + scale = max(ow / iw, oh / ih) + img = img.resize((round(iw * scale), round(ih * scale)), Image.LANCZOS) + + # center-crop + x1 = (img.width - ow) // 2 + y1 = (img.height - oh) // 2 + img = img.crop((x1, y1, x1 + ow, y1 + oh)) + assert img.width == ow and img.height == oh + + # to tensor + img = TF.to_tensor(img).sub_(0.5).div_(0.5).to(AI_DEVICE).unsqueeze(1) + vae_encoder_out = self.get_vae_encoder_output(img) + latent_w, latent_h = ow // self.config["vae_stride"][2], oh // self.config["vae_stride"][1] + latent_shape = self.get_latent_shape_with_lat_hw(latent_h, latent_w) + return vae_encoder_out, latent_shape + + def get_vae_encoder_output(self, img): + z = self.vae_encoder.encode(img.unsqueeze(0).to(GET_DTYPE())) + return z diff --git a/lightx2v/models/runners/wan/wan_sf_runner.py b/lightx2v/models/runners/wan/wan_sf_runner.py new file mode 100644 index 0000000..48c3d83 --- /dev/null +++ b/lightx2v/models/runners/wan/wan_sf_runner.py @@ -0,0 +1,175 @@ +import gc + +import torch +from loguru import logger + +from lightx2v.deploy.common.video_recorder import VideoRecorder +from lightx2v.models.networks.wan.lora_adapter import WanLoraWrapper +from lightx2v.models.networks.wan.sf_model import WanSFModel +from lightx2v.models.runners.wan.wan_runner import WanRunner +from lightx2v.models.schedulers.wan.self_forcing.scheduler import WanSFScheduler +from lightx2v.models.video_encoders.hf.wan.vae_sf import WanSFVAE +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.memory_profiler import peak_memory_decorator +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.utils import vae_to_comfyui_image_inplace + + +@RUNNER_REGISTER("wan2.1_sf") +class WanSFRunner(WanRunner): + def __init__(self, config): + super().__init__(config) + self.vae_cls = WanSFVAE + self.is_live = config.get("is_live", False) + if self.is_live: + self.width = self.config["target_width"] + self.height = self.config["target_height"] + self.run_main = self.run_main_live + + def load_transformer(self): + model = WanSFModel( + self.config, + self.config, + self.init_device, + ) + if self.config.get("lora_configs") and self.config.lora_configs: + assert not self.config.get("dit_quantized", False) + lora_wrapper = WanLoraWrapper(model) + for lora_config in self.config.lora_configs: + lora_path = lora_config["path"] + strength = lora_config.get("strength", 1.0) + lora_name = lora_wrapper.load_lora(lora_path) + lora_wrapper.apply_lora(lora_name, strength) + logger.info(f"Loaded LoRA: {lora_name} with strength: {strength}") + return model + + def init_scheduler(self): + self.scheduler = WanSFScheduler(self.config) + + def set_target_shape(self): + self.num_output_frames = 21 + self.config.target_shape = [16, self.num_output_frames, 60, 104] + + def get_video_segment_num(self): + self.video_segment_num = self.scheduler.num_blocks + + @ProfilingContext4DebugL1("Run VAE Decoder") + def run_vae_decoder(self, latents): + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + self.vae_decoder = self.load_vae_decoder() + images = self.vae_decoder.decode(latents.to(GET_DTYPE()), use_cache=True) + if self.config.get("lazy_load", False) or self.config.get("unload_modules", False): + del self.vae_decoder + torch.cuda.empty_cache() + gc.collect() + return images + + def init_run(self): + super().init_run() + + @peak_memory_decorator + def run_segment(self, segment_idx=0): + infer_steps = self.model.scheduler.infer_steps + for step_index in range(infer_steps): + # only for single segment, check stop signal every step + if self.video_segment_num == 1: + self.check_stop() + logger.info(f"==> step_index: {step_index + 1} / {infer_steps}") + + with ProfilingContext4DebugL1("step_pre"): + self.model.scheduler.step_pre(seg_index=segment_idx, step_index=step_index, is_rerun=False) + + with ProfilingContext4DebugL1("🚀 infer_main"): + self.model.infer(self.inputs) + + with ProfilingContext4DebugL1("step_post"): + self.model.scheduler.step_post() + + if self.progress_callback: + current_step = segment_idx * infer_steps + step_index + 1 + total_all_steps = self.video_segment_num * infer_steps + self.progress_callback((current_step / total_all_steps) * 100, 100) + + return self.model.scheduler.stream_output + + def get_rank_and_world_size(self): + rank = 0 + world_size = 1 + if dist.is_initialized(): + rank = dist.get_rank() + world_size = dist.get_world_size() + return rank, world_size + + def init_video_recorder(self): + output_video_path = self.input_info.save_result_path + self.video_recorder = None + if isinstance(output_video_path, dict): + output_video_path = output_video_path["data"] + logger.info(f"init video_recorder with output_video_path: {output_video_path}") + rank, world_size = self.get_rank_and_world_size() + if output_video_path and rank == world_size - 1: + record_fps = self.config.get("target_fps", 16) + audio_sr = self.config.get("audio_sr", 16000) + if "video_frame_interpolation" in self.config and self.vfi_model is not None: + record_fps = self.config["video_frame_interpolation"]["target_fps"] + + self.video_recorder = VideoRecorder( + livestream_url=output_video_path, + fps=record_fps, + ) + + @ProfilingContext4DebugL1("End run segment") + def end_run_segment(self, segment_idx=None): + with ProfilingContext4DebugL1("step_pre_in_rerun"): + self.model.scheduler.step_pre(seg_index=segment_idx, step_index=self.model.scheduler.infer_steps - 1, is_rerun=True) + with ProfilingContext4DebugL1("🚀 infer_main_in_rerun"): + self.model.infer(self.inputs) + + self.gen_video_final = torch.cat([self.gen_video_final, self.gen_video], dim=0) if self.gen_video_final is not None else self.gen_video + if self.is_live: + if self.video_recorder: + stream_video = vae_to_comfyui_image_inplace(self.gen_video) + self.video_recorder.pub_video(stream_video) + + torch.cuda.empty_cache() + + @ProfilingContext4DebugL2("Run DiT") + def run_main_live(self, total_steps=None): + try: + self.init_video_recorder() + logger.info(f"init video_recorder: {self.video_recorder}") + rank, world_size = self.get_rank_and_world_size() + if rank == world_size - 1: + assert self.video_recorder is not None, "video_recorder is required for stream audio input for rank 2" + self.video_recorder.start(self.width, self.height) + if world_size > 1: + dist.barrier() + self.init_run() + if self.config.get("compile", False): + self.model.select_graph_for_compile(self.input_info) + + for segment_idx in range(self.video_segment_num): + logger.info(f"🔄 start segment {segment_idx + 1}/{self.video_segment_num}") + with ProfilingContext4DebugL1( + f"segment end2end {segment_idx + 1}/{self.video_segment_num}", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_segments_end2end_duration, + metrics_labels=["DefaultRunner"], + ): + self.check_stop() + # 1. default do nothing + self.init_run_segment(segment_idx) + # 2. main inference loop + latents = self.run_segment(segment_idx) + # 3. vae decoder + self.gen_video = self.run_vae_decoder(latents) + # 4. default do nothing + self.end_run_segment(segment_idx) + finally: + if hasattr(self.model, "inputs"): + self.end_run() + if self.video_recorder: + self.video_recorder.stop() + self.video_recorder = None diff --git a/lightx2v/models/runners/wan/wan_vace_runner.py b/lightx2v/models/runners/wan/wan_vace_runner.py new file mode 100644 index 0000000..2f58036 --- /dev/null +++ b/lightx2v/models/runners/wan/wan_vace_runner.py @@ -0,0 +1,192 @@ +import gc + +import torch +import torch.nn.functional as F +import torchvision.transforms.functional as TF +from PIL import Image + +from lightx2v.models.input_encoders.hf.vace.vace_processor import VaceVideoProcessor +from lightx2v.models.networks.wan.vace_model import WanVaceModel +from lightx2v.models.runners.wan.wan_runner import WanRunner +from lightx2v.server.metrics import monitor_cli +from lightx2v.utils.envs import * +from lightx2v.utils.profiler import * +from lightx2v.utils.registry_factory import RUNNER_REGISTER + + +@RUNNER_REGISTER("wan2.1_vace") +class WanVaceRunner(WanRunner): + def __init__(self, config): + super().__init__(config) + assert self.config["task"] == "vace" + self.vid_proc = VaceVideoProcessor( + downsample=tuple([x * y for x, y in zip(self.config["vae_stride"], self.config["patch_size"])]), + min_area=720 * 1280, + max_area=720 * 1280, + min_fps=self.config["fps"] if "fps" in self.config else 16, + max_fps=self.config["fps"] if "fps" in self.config else 16, + zero_start=True, + seq_len=75600, + keep_last=True, + ) + + def load_transformer(self): + model = WanVaceModel( + self.config["model_path"], + self.config, + self.init_device, + ) + return model + + def prepare_source(self, src_video, src_mask, src_ref_images, image_size, device=torch.device("cuda")): + area = image_size[0] * image_size[1] + self.vid_proc.set_area(area) + if area == 720 * 1280: + self.vid_proc.set_seq_len(75600) + elif area == 480 * 832: + self.vid_proc.set_seq_len(32760) + else: + raise NotImplementedError(f"image_size {image_size} is not supported") + + image_size = (image_size[1], image_size[0]) + image_sizes = [] + for i, (sub_src_video, sub_src_mask) in enumerate(zip(src_video, src_mask)): + if sub_src_mask is not None and sub_src_video is not None: + src_video[i], src_mask[i], _, _, _ = self.vid_proc.load_video_pair(sub_src_video, sub_src_mask) + src_video[i] = src_video[i].to(device) + src_mask[i] = src_mask[i].to(device) + src_mask[i] = torch.clamp((src_mask[i][:1, :, :, :] + 1) / 2, min=0, max=1) + image_sizes.append(src_video[i].shape[2:]) + elif sub_src_video is None: + src_video[i] = torch.zeros((3, self.config["target_video_length"], image_size[0], image_size[1]), device=device) + src_mask[i] = torch.ones_like(src_video[i], device=device) + image_sizes.append(image_size) + else: + src_video[i], _, _, _ = self.vid_proc.load_video(sub_src_video) + src_video[i] = src_video[i].to(device) + src_mask[i] = torch.ones_like(src_video[i], device=device) + image_sizes.append(src_video[i].shape[2:]) + + for i, ref_images in enumerate(src_ref_images): + if ref_images is not None: + image_size = image_sizes[i] + for j, ref_img in enumerate(ref_images): + if ref_img is not None: + ref_img = Image.open(ref_img).convert("RGB") + ref_img = TF.to_tensor(ref_img).sub_(0.5).div_(0.5).unsqueeze(1) + if ref_img.shape[-2:] != image_size: + canvas_height, canvas_width = image_size + ref_height, ref_width = ref_img.shape[-2:] + white_canvas = torch.ones((3, 1, canvas_height, canvas_width), device=device) # [-1, 1] + scale = min(canvas_height / ref_height, canvas_width / ref_width) + new_height = int(ref_height * scale) + new_width = int(ref_width * scale) + resized_image = F.interpolate(ref_img.squeeze(1).unsqueeze(0), size=(new_height, new_width), mode="bilinear", align_corners=False).squeeze(0).unsqueeze(1) + top = (canvas_height - new_height) // 2 + left = (canvas_width - new_width) // 2 + white_canvas[:, :, top : top + new_height, left : left + new_width] = resized_image + ref_img = white_canvas + src_ref_images[i][j] = ref_img.to(device) + return src_video, src_mask, src_ref_images + + @ProfilingContext4DebugL1( + "Run VAE Encoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_encoder_image_duration, + metrics_labels=["WanVaceRunner"], + ) + def run_vae_encoder(self, frames, ref_images, masks): + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + self.vae_encoder = self.load_vae_encoder() + if ref_images is None: + ref_images = [None] * len(frames) + else: + assert len(frames) == len(ref_images) + + if masks is None: + latents = [self.vae_encoder.encode(frame.unsqueeze(0).to(GET_DTYPE())) for frame in frames] + else: + masks = [torch.where(m > 0.5, 1.0, 0.0) for m in masks] + inactive = [i * (1 - m) + 0 * m for i, m in zip(frames, masks)] + reactive = [i * m + 0 * (1 - m) for i, m in zip(frames, masks)] + inactive = [self.vae_encoder.encode(inact.unsqueeze(0).to(GET_DTYPE())) for inact in inactive] + reactive = [self.vae_encoder.encode(react.unsqueeze(0).to(GET_DTYPE())) for react in reactive] + latents = [torch.cat((u, c), dim=0) for u, c in zip(inactive, reactive)] + + cat_latents = [] + for latent, refs in zip(latents, ref_images): + if refs is not None: + if masks is None: + ref_latent = [self.vae_encoder.encode(ref.unsqueeze(0).to(GET_DTYPE())) for ref in refs] + else: + ref_latent = [self.vae_encoder.encode(ref.unsqueeze(0).to(GET_DTYPE())) for ref in refs] + ref_latent = [torch.cat((u, torch.zeros_like(u)), dim=0) for u in ref_latent] + assert all([x.shape[1] == 1 for x in ref_latent]) + latent = torch.cat([*ref_latent, latent], dim=1) + cat_latents.append(latent) + self.latent_shape = list(cat_latents[0].shape) + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + del self.vae_encoder + torch.cuda.empty_cache() + gc.collect() + return self.get_vae_encoder_output(cat_latents, masks, ref_images), self.set_input_info_latent_shape() + + def get_vae_encoder_output(self, cat_latents, masks, ref_images): + if ref_images is None: + ref_images = [None] * len(masks) + else: + assert len(masks) == len(ref_images) + + result_masks = [] + for mask, refs in zip(masks, ref_images): + c, depth, height, width = mask.shape + new_depth = int((depth + 3) // self.config["vae_stride"][0]) + height = 2 * (int(height) // (self.config["vae_stride"][1] * 2)) + width = 2 * (int(width) // (self.config["vae_stride"][2] * 2)) + + # reshape + mask = mask[0, :, :, :] + mask = mask.view(depth, height, self.config["vae_stride"][1], width, self.config["vae_stride"][1]) # depth, height, 8, width, 8 + mask = mask.permute(2, 4, 0, 1, 3) # 8, 8, depth, height, width + mask = mask.reshape(self.config["vae_stride"][1] * self.config["vae_stride"][2], depth, height, width) # 8*8, depth, height, width + + # interpolation + mask = F.interpolate(mask.unsqueeze(0), size=(new_depth, height, width), mode="nearest-exact").squeeze(0) + + if refs is not None: + length = len(refs) + mask_pad = torch.zeros_like(mask[:, :length, :, :]) + mask = torch.cat((mask_pad, mask), dim=1) + result_masks.append(mask) + + return [torch.cat([zz, mm], dim=0) for zz, mm in zip(cat_latents, result_masks)] + + def set_input_info_latent_shape(self): + latent_shape = self.latent_shape + latent_shape[0] = int(latent_shape[0] / 2) + return latent_shape + + @ProfilingContext4DebugL1( + "Run VAE Decoder", + recorder_mode=GET_RECORDER_MODE(), + metrics_func=monitor_cli.lightx2v_run_vae_decode_duration, + metrics_labels=["WanVaceRunner"], + ) + def run_vae_decoder(self, latents): + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + self.vae_decoder = self.load_vae_decoder() + + if self.src_ref_images is not None: + assert len(self.src_ref_images) == 1 + refs = self.src_ref_images[0] + if refs is not None: + latents = latents[:, len(refs) :, :, :] + + images = self.vae_decoder.decode(latents.to(GET_DTYPE())) + + if (self.config["lazy_load"] if "lazy_load" in self.config else False) or (self.config["unload_modules"] if "unload_modules" in self.config else False): + del self.vae_decoder + torch.cuda.empty_cache() + gc.collect() + + return images diff --git a/lightx2v/models/schedulers/__init__.py b/lightx2v/models/schedulers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/schedulers/hunyuan_video/__init__.py b/lightx2v/models/schedulers/hunyuan_video/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/schedulers/hunyuan_video/feature_caching/__init__.py b/lightx2v/models/schedulers/hunyuan_video/feature_caching/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/schedulers/hunyuan_video/feature_caching/scheduler.py b/lightx2v/models/schedulers/hunyuan_video/feature_caching/scheduler.py new file mode 100644 index 0000000..5a5156b --- /dev/null +++ b/lightx2v/models/schedulers/hunyuan_video/feature_caching/scheduler.py @@ -0,0 +1,9 @@ +from lightx2v.models.schedulers.hunyuan_video.scheduler import HunyuanVideo15Scheduler + + +class HunyuanVideo15SchedulerCaching(HunyuanVideo15Scheduler): + def __init__(self, config): + super().__init__(config) + + def clear(self): + self.transformer_infer.clear() diff --git a/lightx2v/models/schedulers/hunyuan_video/posemb_layers.py b/lightx2v/models/schedulers/hunyuan_video/posemb_layers.py new file mode 100644 index 0000000..948c0a6 --- /dev/null +++ b/lightx2v/models/schedulers/hunyuan_video/posemb_layers.py @@ -0,0 +1,283 @@ +from typing import List, Tuple, Union + +import torch + +from lightx2v_platform.base.global_var import AI_DEVICE + + +def _to_tuple(x, dim=2): + if isinstance(x, int): + return (x,) * dim + elif len(x) == dim: + return x + else: + raise ValueError(f"Expected length {dim} or int, but got {x}") + + +def get_meshgrid_nd(start, *args, dim=2): + """ + Get n-D meshgrid with start, stop and num. + + Args: + start (int or tuple): If len(args) == 0, start is num; If len(args) == 1, start is start, args[0] is stop, + step is 1; If len(args) == 2, start is start, args[0] is stop, args[1] is num. For n-dim, start/stop/num + should be int or n-tuple. If n-tuple is provided, the meshgrid will be stacked following the dim order in + n-tuples. + *args: See above. + dim (int): Dimension of the meshgrid. Defaults to 2. + + Returns: + grid (np.ndarray): [dim, ...] + """ + if len(args) == 0: + # start is grid_size + num = _to_tuple(start, dim=dim) + start = (0,) * dim + stop = num + elif len(args) == 1: + # start is start, args[0] is stop, step is 1 + start = _to_tuple(start, dim=dim) + stop = _to_tuple(args[0], dim=dim) + num = [stop[i] - start[i] for i in range(dim)] + elif len(args) == 2: + # start is start, args[0] is stop, args[1] is num + start = _to_tuple(start, dim=dim) # Left-Top eg: 12,0 + stop = _to_tuple(args[0], dim=dim) # Right-Bottom eg: 20,32 + num = _to_tuple(args[1], dim=dim) # Target Size eg: 32,124 + else: + raise ValueError(f"len(args) should be 0, 1 or 2, but got {len(args)}") + + # PyTorch implement of np.linspace(start[i], stop[i], num[i], endpoint=False) + axis_grid = [] + for i in range(dim): + a, b, n = start[i], stop[i], num[i] + g = torch.linspace(a, b, n + 1, dtype=torch.float32)[:n] + axis_grid.append(g) + grid = torch.meshgrid(*axis_grid, indexing="ij") # dim x [W, H, D] + grid = torch.stack(grid, dim=0) # [dim, W, H, D] + + return grid + + +################################################################################# +# Rotary Positional Embedding Functions # +################################################################################# +# https://github.com/meta-llama/llama/blob/be327c427cc5e89cc1d3ab3d3fec4484df771245/llama/model.py#L80 + + +def reshape_for_broadcast( + freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor]], + x: torch.Tensor, +): + """ + Reshape frequency tensor for broadcasting it with another tensor. + + This function reshapes the frequency tensor to have the same shape as the target tensor 'x' + for the purpose of broadcasting the frequency tensor during element-wise operations. + + Notes: + When using FlashMHAModified, head_first should be False. + When using Attention, head_first should be True. + + Args: + freqs_cis (Union[torch.Tensor, Tuple[torch.Tensor]]): Frequency tensor to be reshaped. + x (torch.Tensor): Target tensor for broadcasting compatibility. + head_first (bool): head dimension first (except batch dim) or not. + + Returns: + torch.Tensor: Reshaped frequency tensor. + + Raises: + AssertionError: If the frequency tensor doesn't match the expected shape. + AssertionError: If the target tensor 'x' doesn't have the expected number of dimensions. + """ + ndim = x.ndim + shape = [d if i == 1 or i == ndim - 1 else 1 for i, d in enumerate(x.shape)] + return freqs_cis[0].view(*shape), freqs_cis[1].view(*shape) + + +def rotate_half(x): + x_real, x_imag = x.float().reshape(*x.shape[:-1], -1, 2).unbind(-1) # [B, S, H, D//2] + return torch.stack([-x_imag, x_real], dim=-1).flatten(3) + + +def apply_rotary_emb( + xq: torch.Tensor, + xk: torch.Tensor, + freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]], +) -> Tuple[torch.Tensor, torch.Tensor]: + """ + Apply rotary embeddings to input tensors using the given frequency tensor. + + This function applies rotary embeddings to the given query 'xq' and key 'xk' tensors using the provided + frequency tensor 'freqs_cis'. The input tensors are reshaped as complex numbers, and the frequency tensor + is reshaped for broadcasting compatibility. The resulting tensors contain rotary embeddings and are + returned as real tensors. + + Args: + xq (torch.Tensor): Query tensor to apply rotary embeddings. [B, S, H, D] + xk (torch.Tensor): Key tensor to apply rotary embeddings. [B, S, H, D] + freqs_cis (torch.Tensor or tuple): Precomputed frequency tensor for complex exponential. + head_first (bool): head dimension first (except batch dim) or not. + + Returns: + Tuple[torch.Tensor, torch.Tensor]: Tuple of modified query tensor and key tensor with rotary embeddings. + + """ + cos, sin = reshape_for_broadcast(freqs_cis, xq) # [S, D] + # real * cos - imag * sin + # imag * cos + real * sin + xq_out = (xq.float() * cos + rotate_half(xq.float()) * sin).type_as(xq) + xk_out = (xk.float() * cos + rotate_half(xk.float()) * sin).type_as(xk) + return xq_out, xk_out + + +def rotate_half_force_bf16(x): + x_real, x_imag = x.reshape(*x.shape[:-1], -1, 2).unbind(-1) # [B, S, H, D//2] + return torch.stack([-x_imag, x_real], dim=-1).flatten(3) + + +def apply_rotary_emb_force_bf16( + xq: torch.Tensor, + xk: torch.Tensor, + freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]], +) -> Tuple[torch.Tensor, torch.Tensor]: + """ + Apply rotary embeddings to input tensors using the given frequency tensor. + + This function applies rotary embeddings to the given query 'xq' and key 'xk' tensors using the provided + frequency tensor 'freqs_cis'. The input tensors are reshaped as complex numbers, and the frequency tensor + is reshaped for broadcasting compatibility. The resulting tensors contain rotary embeddings and are + returned as real tensors. + + Args: + xq (torch.Tensor): Query tensor to apply rotary embeddings. [B, S, H, D] + xk (torch.Tensor): Key tensor to apply rotary embeddings. [B, S, H, D] + freqs_cis (torch.Tensor or tuple): Precomputed frequency tensor for complex exponential. + head_first (bool): head dimension first (except batch dim) or not. + + Returns: + Tuple[torch.Tensor, torch.Tensor]: Tuple of modified query tensor and key tensor with rotary embeddings. + + """ + cos, sin = reshape_for_broadcast(freqs_cis, xq) # [S, D] + # real * cos - imag * sin + # imag * cos + real * sin + xq_out = xq * cos + rotate_half_force_bf16(xq) * sin + xk_out = xk * cos + rotate_half_force_bf16(xk) * sin + return xq_out, xk_out + + +def get_nd_rotary_pos_embed( + rope_dim_list, + start, + *args, + theta=10000.0, + use_real=False, + theta_rescale_factor: Union[float, List[float]] = 1.0, + interpolation_factor: Union[float, List[float]] = 1.0, + **kwds, +): + """ + This is a n-d version of precompute_freqs_cis, which is a RoPE for tokens with n-d structure. + + Args: + rope_dim_list (list of int): Dimension of each rope. len(rope_dim_list) should equal to n. + sum(rope_dim_list) should equal to head_dim of attention layer. + start (int | tuple of int | list of int): If len(args) == 0, start is num; If len(args) == 1, start is start, + args[0] is stop, step is 1; If len(args) == 2, start is start, args[0] is stop, args[1] is num. + *args: See above. + theta (float): Scaling factor for frequency computation. Defaults to 10000.0. + use_real (bool): If True, return real part and imaginary part separately. Otherwise, return complex numbers. + Some libraries such as TensorRT does not support complex64 data type. So it is useful to provide a real + part and an imaginary part separately. + theta_rescale_factor (float): Rescale factor for theta. Defaults to 1.0. + + Returns: + pos_embed (torch.Tensor): [HW, D/2] + """ + + grid = get_meshgrid_nd(start, *args, dim=len(rope_dim_list)) # [3, W, H, D] / [2, W, H] + + if isinstance(theta_rescale_factor, int) or isinstance(theta_rescale_factor, float): + theta_rescale_factor = [theta_rescale_factor] * len(rope_dim_list) + elif isinstance(theta_rescale_factor, list) and len(theta_rescale_factor) == 1: + theta_rescale_factor = [theta_rescale_factor[0]] * len(rope_dim_list) + assert len(theta_rescale_factor) == len(rope_dim_list), "len(theta_rescale_factor) should equal to len(rope_dim_list)" + + if isinstance(interpolation_factor, int) or isinstance(interpolation_factor, float): + interpolation_factor = [interpolation_factor] * len(rope_dim_list) + elif isinstance(interpolation_factor, list) and len(interpolation_factor) == 1: + interpolation_factor = [interpolation_factor[0]] * len(rope_dim_list) + assert len(interpolation_factor) == len(rope_dim_list), "len(interpolation_factor) should equal to len(rope_dim_list)" + + # use 1/ndim of dimensions to encode grid_axis + embs = [] + for i in range(len(rope_dim_list)): + emb = get_1d_rotary_pos_embed( + rope_dim_list[i], + grid[i].reshape(-1), + theta, + use_real=use_real, + theta_rescale_factor=theta_rescale_factor[i], + interpolation_factor=interpolation_factor[i], + **kwds, + ) # 2 x [WHD, rope_dim_list[i]] + embs.append(emb) + + if use_real: + cos = torch.cat([emb[0] for emb in embs], dim=1) # (WHD, D/2) + sin = torch.cat([emb[1] for emb in embs], dim=1) # (WHD, D/2) + return cos, sin + else: + emb = torch.cat(embs, dim=1) # (WHD, D/2) + return emb + + +def get_1d_rotary_pos_embed( + dim: int, + pos: Union[torch.FloatTensor, int], + theta: float = 10000.0, + use_real: bool = False, + theta_rescale_factor: float = 1.0, + interpolation_factor: float = 1.0, + **kwds, +) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]: + """ + Precompute the frequency tensor for complex exponential (cis) with given dimensions. + (Note: `cis` means `cos + i * sin`, where i is the imaginary unit.) + + This function calculates a frequency tensor with complex exponential using the given dimension 'dim' + and the end index 'end'. The 'theta' parameter scales the frequencies. + The returned tensor contains complex values in complex64 data type. + + Args: + dim (int): Dimension of the frequency tensor. + pos (int or torch.FloatTensor): Position indices for the frequency tensor. [S] or scalar + theta (float, optional): Scaling factor for frequency computation. Defaults to 10000.0. + use_real (bool, optional): If True, return real part and imaginary part separately. + Otherwise, return complex numbers. + theta_rescale_factor (float, optional): Rescale factor for theta. Defaults to 1.0. + + Returns: + freqs_cis: Precomputed frequency tensor with complex exponential. [S, D/2] + freqs_cos, freqs_sin: Precomputed frequency tensor with real and imaginary parts separately. [S, D] + """ + if isinstance(pos, int): + pos = torch.arange(pos).float() + + # proposed by reddit user bloc97, to rescale rotary embeddings to longer sequence length without fine-tuning + # has some connection to NTK literature + if theta_rescale_factor != 1.0: + theta *= theta_rescale_factor ** (dim / (dim - 2)) + + freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim)) # [D/2] + # assert interpolation_factor == 1.0, f"interpolation_factor: {interpolation_factor}" + freqs = torch.outer(pos * interpolation_factor, freqs).to(AI_DEVICE) # [S, D/2] + if use_real: + freqs_cos = freqs.cos().repeat_interleave(2, dim=1) # [S, D] + freqs_sin = freqs.sin().repeat_interleave(2, dim=1) # [S, D] + return freqs_cos, freqs_sin + else: + freqs_cis = torch.polar(torch.ones_like(freqs), freqs) # complex64 # [S, D/2] + return freqs_cis diff --git a/lightx2v/models/schedulers/hunyuan_video/scheduler.py b/lightx2v/models/schedulers/hunyuan_video/scheduler.py new file mode 100644 index 0000000..7a9cbff --- /dev/null +++ b/lightx2v/models/schedulers/hunyuan_video/scheduler.py @@ -0,0 +1,216 @@ +import torch +import torch.distributed as dist +from einops import rearrange +from torch.nn import functional as F + +from lightx2v.models.schedulers.scheduler import BaseScheduler +from lightx2v_platform.base.global_var import AI_DEVICE + +from .posemb_layers import get_nd_rotary_pos_embed + + +class HunyuanVideo15Scheduler(BaseScheduler): + def __init__(self, config): + super().__init__(config) + self.reverse = True + self.num_train_timesteps = 1000 + self.sample_shift = self.config["sample_shift"] + self.reorg_token = False + self.keep_latents_dtype_in_scheduler = True + self.sample_guide_scale = self.config["sample_guide_scale"] + if self.config["seq_parallel"]: + self.seq_p_group = self.config.get("device_mesh").get_group(mesh_dim="seq_p") + else: + self.seq_p_group = None + + def prepare(self, seed, latent_shape, image_encoder_output=None): + self.prepare_latents(seed, latent_shape, dtype=torch.bfloat16) + self.set_timesteps(self.infer_steps, device=AI_DEVICE, shift=self.sample_shift) + self.multitask_mask = self.get_task_mask(self.config["task"], latent_shape[-3]) + self.cond_latents_concat, self.mask_concat = self._prepare_cond_latents_and_mask(self.config["task"], image_encoder_output["cond_latents"], self.latents, self.multitask_mask, self.reorg_token) + self.cos_sin = self.prepare_cos_sin((latent_shape[1], latent_shape[2], latent_shape[3])) + + def prepare_latents(self, seed, latent_shape, dtype=torch.bfloat16): + self.generator = torch.Generator(device=AI_DEVICE).manual_seed(seed) + self.latents = torch.randn( + 1, + latent_shape[0], + latent_shape[1], + latent_shape[2], + latent_shape[3], + dtype=dtype, + device=AI_DEVICE, + generator=self.generator, + ) + + def set_timesteps(self, num_inference_steps, device, shift): + sigmas = torch.linspace(1, 0, num_inference_steps + 1) + + # Apply timestep shift + if shift != 1.0: + sigmas = self.sd3_time_shift(sigmas, shift) + + if not self.reverse: + sigmas = 1 - sigmas + + self.sigmas = sigmas + self.timesteps = (sigmas[:-1] * self.num_train_timesteps).to(dtype=torch.float32, device=device) + + def sd3_time_shift(self, t: torch.Tensor, shift): + return (shift * t) / (1 + (shift - 1) * t) + + def get_task_mask(self, task_type, latent_target_length): + if task_type == "t2v": + mask = torch.zeros(latent_target_length) + elif task_type == "i2v": + mask = torch.zeros(latent_target_length) + mask[0] = 1.0 + else: + raise ValueError(f"{task_type} is not supported !") + return mask + + def _prepare_cond_latents_and_mask(self, task_type, cond_latents, latents, multitask_mask, reorg_token): + """ + Prepare multitask mask training logic. + + Args: + task_type: Type of task ("i2v" or "t2v") + cond_latents: Conditional latents tensor + latents: Main latents tensor + multitask_mask: Multitask mask tensor + reorg_token: Whether to reorganize tokens + + Returns: + tuple: (latents_concat, mask_concat) - may contain None values + """ + latents_concat = None + mask_concat = None + + if cond_latents is not None and task_type == "i2v": + latents_concat = cond_latents.repeat(1, 1, latents.shape[2], 1, 1) + latents_concat[:, :, 1:, :, :] = 0.0 + else: + if reorg_token: + latents_concat = torch.zeros(latents.shape[0], latents.shape[1] // 2, latents.shape[2], latents.shape[3], latents.shape[4]).to(latents.device) + else: + latents_concat = torch.zeros(latents.shape[0], latents.shape[1], latents.shape[2], latents.shape[3], latents.shape[4]).to(latents.device) + + mask_zeros = torch.zeros(latents.shape[0], 1, latents.shape[2], latents.shape[3], latents.shape[4]) + mask_ones = torch.ones(latents.shape[0], 1, latents.shape[2], latents.shape[3], latents.shape[4]) + mask_concat = self.merge_tensor_by_mask(mask_zeros.cpu(), mask_ones.cpu(), mask=multitask_mask.cpu(), dim=2).to(device=latents.device) + + return latents_concat, mask_concat + + def merge_tensor_by_mask(self, tensor_1, tensor_2, mask, dim): + assert tensor_1.shape == tensor_2.shape + # Mask is a 0/1 vector. Choose tensor_2 when the value is 1; otherwise, tensor_1 + masked_indices = torch.nonzero(mask).squeeze(1) + tmp = tensor_1.clone() + if dim == 0: + tmp[masked_indices] = tensor_2[masked_indices] + elif dim == 1: + tmp[:, masked_indices] = tensor_2[:, masked_indices] + elif dim == 2: + tmp[:, :, masked_indices] = tensor_2[:, :, masked_indices] + return tmp + + def step_post(self): + model_output = self.noise_pred.to(torch.float32) + sample = self.latents.to(torch.float32) + dt = self.sigmas[self.step_index + 1] - self.sigmas[self.step_index] + self.latents = sample + model_output * dt + + def prepare_cos_sin(self, rope_sizes): + target_ndim = 3 + head_dim = self.config["hidden_size"] // self.config["heads_num"] + rope_dim_list = self.config["rope_dim_list"] + if rope_dim_list is None: + rope_dim_list = [head_dim // target_ndim for _ in range(target_ndim)] + assert sum(rope_dim_list) == head_dim, "sum(rope_dim_list) should equal to head_dim of attention layer" + freqs_cos, freqs_sin = get_nd_rotary_pos_embed(rope_dim_list, rope_sizes, theta=self.config["rope_theta"], use_real=True, theta_rescale_factor=1, device=AI_DEVICE) + cos_half = freqs_cos[:, ::2].contiguous() + sin_half = freqs_sin[:, ::2].contiguous() + cos_sin = torch.cat([cos_half, sin_half], dim=-1) + if self.seq_p_group is not None: + world_size = dist.get_world_size(self.seq_p_group) + cur_rank = dist.get_rank(self.seq_p_group) + seqlen = cos_sin.shape[0] + padding_size = (world_size - (seqlen % world_size)) % world_size + if padding_size > 0: + cos_sin = F.pad(cos_sin, (0, 0, 0, padding_size)) + cos_sin = torch.chunk(cos_sin, world_size, dim=0)[cur_rank] + return cos_sin + + +class HunyuanVideo15SRScheduler(HunyuanVideo15Scheduler): + def __init__(self, config): + super().__init__(config) + self.noise_scale = 0.7 + + def prepare(self, seed, latent_shape, lq_latents, upsampler, image_encoder_output=None): + dtype = lq_latents.dtype + self.prepare_latents(seed, latent_shape, lq_latents, dtype=dtype) + self.set_timesteps(self.infer_steps, device=AI_DEVICE, shift=self.sample_shift) + self.cos_sin = self.prepare_cos_sin((latent_shape[1], latent_shape[2], latent_shape[3])) + + tgt_shape = latent_shape[-2:] + bsz = lq_latents.shape[0] + lq_latents = rearrange(lq_latents, "b c f h w -> (b f) c h w") + lq_latents = F.interpolate(lq_latents, size=tgt_shape, mode="bilinear", align_corners=False) + lq_latents = rearrange(lq_latents, "(b f) c h w -> b c f h w", b=bsz) + + lq_latents = upsampler(lq_latents.to(dtype=torch.float32, device=device)) + lq_latents = lq_latents.to(dtype=dtype) + + lq_latents = self.add_noise_to_lq(lq_latents, self.noise_scale) + + condition = self.get_condition(lq_latents, image_encoder_output["cond_latents"], self.config["task"]) + c = lq_latents.shape[1] + + zero_condition = condition.clone() + zero_condition[:, c + 1 : 2 * c + 1] = torch.zeros_like(lq_latents) + zero_condition[:, 2 * c + 1] = 0 + + self.condition = condition + self.zero_condition = zero_condition + + def prepare_latents(self, seed, latent_shape, lq_latents, dtype=torch.bfloat16): + self.generator = torch.Generator(device=lq_latents.device).manual_seed(seed) + self.latents = torch.randn( + 1, + latent_shape[0], + latent_shape[1], + latent_shape[2], + latent_shape[3], + dtype=dtype, + device=lq_latents.device, + generator=self.generator, + ) + + def get_condition(self, lq_latents, img_cond, task): + """ + latents: shape (b c f h w) + """ + b, c, f, h, w = self.latents.shape + cond = torch.zeros([b, c * 2 + 2, f, h, w], device=lq_latents.device, dtype=lq_latents.dtype) + + cond[:, c + 1 : 2 * c + 1] = lq_latents + cond[:, 2 * c + 1] = 1 + if "t2v" in task: + return cond + elif "i2v" in task: + cond[:, :c, :1] = img_cond + cond[:, c + 1, 0] = 1 + return cond + else: + raise ValueError(f"Unsupported task: {task}") + + def add_noise_to_lq(self, lq_latents, strength=0.7): + def expand_dims(tensor: torch.Tensor, ndim: int): + shape = tensor.shape + (1,) * (ndim - tensor.ndim) + return tensor.reshape(shape) + + noise = torch.randn_like(lq_latents) + timestep = torch.tensor([1000.0], device=lq_latents.device) * strength + t = expand_dims(timestep, lq_latents.ndim) + return (1 - t / 1000.0) * lq_latents + (t / 1000.0) * noise diff --git a/lightx2v/models/schedulers/hunyuan_video/step_distill/scheduler.py b/lightx2v/models/schedulers/hunyuan_video/step_distill/scheduler.py new file mode 100644 index 0000000..f081573 --- /dev/null +++ b/lightx2v/models/schedulers/hunyuan_video/step_distill/scheduler.py @@ -0,0 +1,33 @@ +import torch + +from lightx2v.models.schedulers.hunyuan_video.scheduler import HunyuanVideo15Scheduler + + +class HunyuanVideo15StepDistillScheduler(HunyuanVideo15Scheduler): + def __init__(self, config): + super().__init__(config) + self.denoising_step_list = config["denoising_step_list"] + self.infer_steps = len(self.denoising_step_list) + + self.num_train_timesteps = 1000 + self.sigma_max = 1.0 + self.sigma_min = 0.0 + + def set_timesteps(self, num_inference_steps, device, shift): + sigma_start = self.sigma_min + (self.sigma_max - self.sigma_min) + self.sigmas = torch.linspace(sigma_start, self.sigma_min, self.num_train_timesteps + 1)[:-1] + self.sigmas = self.sample_shift * self.sigmas / (1 + (self.sample_shift - 1) * self.sigmas) + self.timesteps = self.sigmas * self.num_train_timesteps + + self.denoising_step_index = [self.num_train_timesteps - x for x in self.denoising_step_list] + self.timesteps = self.timesteps[self.denoising_step_index].to(device) + self.sigmas = self.sigmas[self.denoising_step_index].to("cpu") + + def step_post(self): + flow_pred = self.noise_pred.to(torch.float32) + sigma = self.sigmas[self.step_index].item() + noisy_image_or_video = self.latents.to(torch.float32) - sigma * flow_pred + if self.step_index < self.infer_steps - 1: + sigma_n = self.sigmas[self.step_index + 1].item() + noisy_image_or_video = noisy_image_or_video + flow_pred * sigma_n + self.latents = noisy_image_or_video.to(self.latents.dtype) diff --git a/lightx2v/models/schedulers/qwen_image/scheduler.py b/lightx2v/models/schedulers/qwen_image/scheduler.py new file mode 100644 index 0000000..bd7f867 --- /dev/null +++ b/lightx2v/models/schedulers/qwen_image/scheduler.py @@ -0,0 +1,235 @@ +import inspect +import json +import os +from typing import List, Optional, Tuple, Union + +import numpy as np +import torch +from diffusers.schedulers.scheduling_flow_match_euler_discrete import FlowMatchEulerDiscreteScheduler + +from lightx2v.models.schedulers.scheduler import BaseScheduler +from lightx2v_platform.base.global_var import AI_DEVICE + + +def calculate_shift( + image_seq_len, + base_seq_len: int = 256, + max_seq_len: int = 4096, + base_shift: float = 0.5, + max_shift: float = 1.15, +): + m = (max_shift - base_shift) / (max_seq_len - base_seq_len) + b = base_shift - m * base_seq_len + mu = image_seq_len * m + b + return mu + + +# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.retrieve_timesteps +def retrieve_timesteps( + scheduler, + num_inference_steps: Optional[int] = None, + device: Optional[Union[str, torch.device]] = None, + timesteps: Optional[List[int]] = None, + sigmas: Optional[List[float]] = None, + **kwargs, +): + r""" + Calls the scheduler's `set_timesteps` method and retrieves timesteps from the scheduler after the call. Handles + custom timesteps. Any kwargs will be supplied to `scheduler.set_timesteps`. + + Args: + scheduler (`SchedulerMixin`): + The scheduler to get timesteps from. + num_inference_steps (`int`): + The number of diffusion steps used when generating samples with a pre-trained model. If used, `timesteps` + must be `None`. + device (`str` or `torch.device`, *optional*): + The device to which the timesteps should be moved to. If `None`, the timesteps are not moved. + timesteps (`List[int]`, *optional*): + Custom timesteps used to override the timestep spacing strategy of the scheduler. If `timesteps` is passed, + `num_inference_steps` and `sigmas` must be `None`. + sigmas (`List[float]`, *optional*): + Custom sigmas used to override the timestep spacing strategy of the scheduler. If `sigmas` is passed, + `num_inference_steps` and `timesteps` must be `None`. + + Returns: + `Tuple[torch.Tensor, int]`: A tuple where the first element is the timestep schedule from the scheduler and the + second element is the number of inference steps. + """ + if timesteps is not None and sigmas is not None: + raise ValueError("Only one of `timesteps` or `sigmas` can be passed. Please choose one to set custom values") + if timesteps is not None: + accepts_timesteps = "timesteps" in set(inspect.signature(scheduler.set_timesteps).parameters.keys()) + if not accepts_timesteps: + raise ValueError( + f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom timestep schedules. Please check whether you are using the correct scheduler." + ) + scheduler.set_timesteps(timesteps=timesteps, device=device, **kwargs) + timesteps = scheduler.timesteps + num_inference_steps = len(timesteps) + elif sigmas is not None: + accept_sigmas = "sigmas" in set(inspect.signature(scheduler.set_timesteps).parameters.keys()) + if not accept_sigmas: + raise ValueError(f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom sigmas schedules. Please check whether you are using the correct scheduler.") + scheduler.set_timesteps(sigmas=sigmas, device=device, **kwargs) + timesteps = scheduler.timesteps + num_inference_steps = len(timesteps) + else: + scheduler.set_timesteps(num_inference_steps, device=device, **kwargs) + timesteps = scheduler.timesteps + return timesteps, num_inference_steps + + +def randn_tensor( + shape: Union[Tuple, List], + generator: Optional[Union[List["torch.Generator"], "torch.Generator"]] = None, + device: Optional[Union[str, "torch.device"]] = None, + dtype: Optional["torch.dtype"] = None, + layout: Optional["torch.layout"] = None, +): + """A helper function to create random tensors on the desired `device` with the desired `dtype`. When + passing a list of generators, you can seed each batch size individually. If CPU generators are passed, the tensor + is always created on the CPU. + """ + # device on which tensor is created defaults to device + if isinstance(device, str): + device = torch.device(device) + rand_device = device + batch_size = shape[0] + + layout = layout or torch.strided + device = device or torch.device("cpu") + + if generator is not None: + gen_device_type = generator.device.type if not isinstance(generator, list) else generator[0].device.type + if gen_device_type != device.type and gen_device_type == "cpu": + rand_device = "cpu" + if device != "mps": + print( + f"The passed generator was created on 'cpu' even though a tensor on {device} was expected." + f" Tensors will be created on 'cpu' and then moved to {device}. Note that one can probably" + f" slightly speed up this function by passing a generator that was created on the {device} device." + ) + elif gen_device_type != device.type and gen_device_type == "cuda": + raise ValueError(f"Cannot generate a {device} tensor from a generator of type {gen_device_type}.") + + # make sure generator list of length 1 is treated like a non-list + if isinstance(generator, list) and len(generator) == 1: + generator = generator[0] + + if isinstance(generator, list): + shape = (1,) + shape[1:] + latents = [torch.randn(shape, generator=generator[i], device=rand_device, dtype=dtype, layout=layout) for i in range(batch_size)] + latents = torch.cat(latents, dim=0).to(device) + else: + latents = torch.randn(shape, generator=generator, device=rand_device, dtype=dtype, layout=layout).to(device) + + return latents + + +class QwenImageScheduler(BaseScheduler): + def __init__(self, config): + super().__init__(config) + self.config = config + self.scheduler = FlowMatchEulerDiscreteScheduler.from_pretrained(os.path.join(config["model_path"], "scheduler")) + with open(os.path.join(config["model_path"], "scheduler", "scheduler_config.json"), "r") as f: + self.scheduler_config = json.load(f) + self.dtype = torch.bfloat16 + self.guidance_scale = 1.0 + + @staticmethod + def _pack_latents(latents, batch_size, num_channels_latents, height, width): + latents = latents.view(batch_size, num_channels_latents, height // 2, 2, width // 2, 2) + latents = latents.permute(0, 2, 4, 1, 3, 5) + latents = latents.reshape(batch_size, (height // 2) * (width // 2), num_channels_latents * 4) + return latents + + @staticmethod + def _unpack_latents(latents, height, width, vae_scale_factor): + batch_size, num_patches, channels = latents.shape + + # VAE applies 8x compression on images but we must also account for packing which requires + # latent height and width to be divisible by 2. + height = 2 * (int(height) // (vae_scale_factor * 2)) + width = 2 * (int(width) // (vae_scale_factor * 2)) + + latents = latents.view(batch_size, height // 2, width // 2, channels // 4, 2, 2) + latents = latents.permute(0, 3, 1, 4, 2, 5) + + latents = latents.reshape(batch_size, channels // (2 * 2), 1, height, width) + + return latents + + @staticmethod + def _prepare_latent_image_ids(batch_size, height, width, device, dtype): + latent_image_ids = torch.zeros(height, width, 3) + + latent_image_ids[..., 1] = latent_image_ids[..., 1] + torch.arange(height)[:, None] + latent_image_ids[..., 2] = latent_image_ids[..., 2] + torch.arange(width)[None, :] + + latent_image_id_height, latent_image_id_width, latent_image_id_channels = latent_image_ids.shape + latent_image_ids = latent_image_ids.reshape(latent_image_id_height * latent_image_id_width, latent_image_id_channels) + + return latent_image_ids.to(device=device, dtype=dtype) + + def prepare_latents(self, input_info): + shape = input_info.target_shape + width, height = shape[-1], shape[-2] + + latents = randn_tensor(shape, generator=self.generator, device=AI_DEVICE, dtype=self.dtype) + latents = self._pack_latents(latents, self.config["batchsize"], self.config["num_channels_latents"], height, width) + latent_image_ids = self._prepare_latent_image_ids(self.config["batchsize"], height // 2, width // 2, AI_DEVICE, self.dtype) + + self.latents = latents + self.latent_image_ids = latent_image_ids + self.noise_pred = None + + def set_timesteps(self): + sigmas = np.linspace(1.0, 1 / self.config["infer_steps"], self.config["infer_steps"]) + image_seq_len = self.latents.shape[1] + mu = calculate_shift( + image_seq_len, + self.scheduler_config.get("base_image_seq_len", 256), + self.scheduler_config.get("max_image_seq_len", 4096), + self.scheduler_config.get("base_shift", 0.5), + self.scheduler_config.get("max_shift", 1.15), + ) + num_inference_steps = self.config["infer_steps"] + timesteps, num_inference_steps = retrieve_timesteps( + self.scheduler, + num_inference_steps, + AI_DEVICE, + sigmas=sigmas, + mu=mu, + ) + + self.timesteps = timesteps + self.infer_steps = num_inference_steps + + num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) + self._num_timesteps = len(timesteps) + self.num_warmup_steps = num_warmup_steps + + def prepare_guidance(self): + # handle guidance + if self.config["guidance_embeds"]: + guidance = torch.full([1], self.guidance_scale, device=AI_DEVICE, dtype=torch.float32) + guidance = guidance.expand(self.latents.shape[0]) + else: + guidance = None + self.guidance = guidance + + def prepare(self, input_info): + if self.config["task"] == "i2i": + self.generator = torch.Generator().manual_seed(input_info.seed) + elif self.config["task"] == "t2i": + self.generator = torch.Generator(device=AI_DEVICE).manual_seed(input_info.seed) + self.prepare_latents(input_info) + self.prepare_guidance() + self.set_timesteps() + + def step_post(self): + # compute the previous noisy sample x_t -> x_t-1 + t = self.timesteps[self.step_index] + latents = self.scheduler.step(self.noise_pred, t, self.latents, return_dict=False)[0] + self.latents = latents diff --git a/lightx2v/models/schedulers/scheduler.py b/lightx2v/models/schedulers/scheduler.py new file mode 100644 index 0000000..a14403d --- /dev/null +++ b/lightx2v/models/schedulers/scheduler.py @@ -0,0 +1,22 @@ +from lightx2v.utils.envs import * + + +class BaseScheduler: + def __init__(self, config): + self.config = config + self.latents = None + self.step_index = 0 + self.infer_steps = config["infer_steps"] + self.caching_records = [True] * config["infer_steps"] + self.flag_df = False + self.transformer_infer = None + self.infer_condition = True # cfg status + self.keep_latents_dtype_in_scheduler = False + + def step_pre(self, step_index): + self.step_index = step_index + if GET_DTYPE() == GET_SENSITIVE_DTYPE() and not self.keep_latents_dtype_in_scheduler: + self.latents = self.latents.to(GET_DTYPE()) + + def clear(self): + pass diff --git a/lightx2v/models/schedulers/wan/audio/scheduler.py b/lightx2v/models/schedulers/wan/audio/scheduler.py new file mode 100644 index 0000000..a9901b1 --- /dev/null +++ b/lightx2v/models/schedulers/wan/audio/scheduler.py @@ -0,0 +1,127 @@ +import math + +import numpy as np +import torch +from loguru import logger + +from lightx2v.models.schedulers.wan.scheduler import WanScheduler +from lightx2v.utils.envs import * +from lightx2v.utils.utils import masks_like +from lightx2v_platform.base.global_var import AI_DEVICE + + +class EulerScheduler(WanScheduler): + def __init__(self, config): + super().__init__(config) + d = config["dim"] // config["num_heads"] + self.rope_t_dim = d // 2 - 2 * (d // 6) + + if self.config["parallel"]: + self.sp_size = self.config["parallel"].get("seq_p_size", 1) + else: + self.sp_size = 1 + + if self.config["model_cls"] == "wan2.2_audio": + self.prev_latents = None + self.prev_len = 0 + + def set_audio_adapter(self, audio_adapter): + self.audio_adapter = audio_adapter + + def step_pre(self, step_index): + super().step_pre(step_index) + if self.audio_adapter.cpu_offload: + self.audio_adapter.time_embedding.to("cuda") + self.audio_adapter_t_emb = self.audio_adapter.time_embedding(self.timestep_input).unflatten(1, (3, -1)) + if self.audio_adapter.cpu_offload: + self.audio_adapter.time_embedding.to("cpu") + + if self.config["model_cls"] == "wan2.2_audio": + _, lat_f, lat_h, lat_w = self.latents.shape + F = (lat_f - 1) * self.config["vae_stride"][0] + 1 + per_latent_token_len = lat_h * lat_w // (self.config["patch_size"][1] * self.config["patch_size"][2]) + max_seq_len = ((F - 1) // self.config["vae_stride"][0] + 1) * per_latent_token_len + max_seq_len = int(math.ceil(max_seq_len / self.sp_size)) * self.sp_size + + temp_ts = (self.mask[0][:, ::2, ::2] * self.timestep_input).flatten() + self.timestep_input = torch.cat([temp_ts, temp_ts.new_ones(max_seq_len - temp_ts.size(0)) * self.timestep_input]).unsqueeze(0) + + self.timestep_input = torch.cat( + [ + self.timestep_input, + torch.zeros( + (1, per_latent_token_len), # padding for reference frame latent + dtype=self.timestep_input.dtype, + device=self.timestep_input.device, + ), + ], + dim=1, + ) + + def prepare_latents(self, seed, latent_shape, dtype=torch.float32): + self.generator = torch.Generator(device=AI_DEVICE).manual_seed(seed) + self.latents = torch.randn( + latent_shape[0], + latent_shape[1], + latent_shape[2], + latent_shape[3], + dtype=dtype, + device=AI_DEVICE, + generator=self.generator, + ) + if self.config["model_cls"] == "wan2.2_audio": + self.mask = masks_like(self.latents, zero=True, prev_len=self.prev_len) + if self.prev_latents is not None: + self.latents = (1.0 - self.mask) * self.prev_latents + self.mask * self.latents + + def prepare(self, seed, latent_shape, image_encoder_output=None): + self.prepare_latents(seed, latent_shape, dtype=torch.float32) + timesteps = np.linspace(self.num_train_timesteps, 0, self.infer_steps + 1, dtype=np.float32) + + self.timesteps = torch.from_numpy(timesteps).to(dtype=torch.float32, device=AI_DEVICE) + self.timesteps_ori = self.timesteps.clone() + + self.sigmas = self.timesteps_ori / self.num_train_timesteps + self.sigmas = self.sample_shift * self.sigmas / (1 + (self.sample_shift - 1) * self.sigmas) + + self.timesteps = self.sigmas * self.num_train_timesteps + + self.freqs[latent_shape[1] // self.patch_size[0] :, : self.rope_t_dim] = 0 + self.cos_sin = self.prepare_cos_sin((latent_shape[1] // self.patch_size[0] + 1, latent_shape[2] // self.patch_size[1], latent_shape[3] // self.patch_size[2])) + + def step_post(self): + model_output = self.noise_pred.to(torch.float32) + sample = self.latents.to(torch.float32) + sigma = self.unsqueeze_to_ndim(self.sigmas[self.step_index], sample.ndim).to(sample.device, sample.dtype) + sigma_next = self.unsqueeze_to_ndim(self.sigmas[self.step_index + 1], sample.ndim).to(sample.device, sample.dtype) + x_t_next = sample + (sigma_next - sigma) * model_output + self.latents = x_t_next + if self.config["model_cls"] == "wan2.2_audio" and self.prev_latents is not None: + self.latents = (1.0 - self.mask) * self.prev_latents + self.mask * self.latents + + def reset(self, seed, latent_shape, image_encoder_output=None): + if self.config["model_cls"] == "wan2.2_audio": + self.prev_latents = image_encoder_output["prev_latents"] + self.prev_len = image_encoder_output["prev_len"] + self.prepare_latents(seed, latent_shape, dtype=torch.float32) + + def unsqueeze_to_ndim(self, in_tensor, tgt_n_dim): + if in_tensor.ndim > tgt_n_dim: + logger.warning(f"the given tensor of shape {in_tensor.shape} is expected to unsqueeze to {tgt_n_dim}, the original tensor will be returned") + return in_tensor + if in_tensor.ndim < tgt_n_dim: + in_tensor = in_tensor[(...,) + (None,) * (tgt_n_dim - in_tensor.ndim)] + return in_tensor + + +class ConsistencyModelScheduler(EulerScheduler): + def step_post(self): + model_output = self.noise_pred.to(torch.float32) + sample = self.latents.to(torch.float32) + sigma = self.unsqueeze_to_ndim(self.sigmas[self.step_index], sample.ndim).to(sample.device, sample.dtype) + sigma_next = self.unsqueeze_to_ndim(self.sigmas[self.step_index + 1], sample.ndim).to(sample.device, sample.dtype) + x0 = sample - model_output * sigma + x_t_next = x0 * (1 - sigma_next) + sigma_next * torch.randn(x0.shape, dtype=x0.dtype, device=x0.device, generator=self.generator) + self.latents = x_t_next + if self.config["model_cls"] == "wan2.2_audio" and self.prev_latents is not None: + self.latents = (1.0 - self.mask) * self.prev_latents + self.mask * self.latents diff --git a/lightx2v/models/schedulers/wan/changing_resolution/scheduler.py b/lightx2v/models/schedulers/wan/changing_resolution/scheduler.py new file mode 100644 index 0000000..87c6e6c --- /dev/null +++ b/lightx2v/models/schedulers/wan/changing_resolution/scheduler.py @@ -0,0 +1,94 @@ +import torch + +from lightx2v_platform.base.global_var import AI_DEVICE + + +class WanScheduler4ChangingResolutionInterface: + def __new__(cls, father_scheduler, config): + class NewClass(WanScheduler4ChangingResolution, father_scheduler): + def __init__(self, config): + father_scheduler.__init__(self, config) + WanScheduler4ChangingResolution.__init__(self, config) + + return NewClass(config) + + +class WanScheduler4ChangingResolution: + def __init__(self, config): + if "resolution_rate" not in config: + config["resolution_rate"] = [0.75] + if "changing_resolution_steps" not in config: + config["changing_resolution_steps"] = [config.infer_steps // 2] + assert len(config["resolution_rate"]) == len(config["changing_resolution_steps"]) + + def prepare_latents(self, seed, latent_shape, dtype=torch.float32): + self.generator = torch.Generator(device=AI_DEVICE).manual_seed(seed) + self.latents_list = [] + for i in range(len(self.config["resolution_rate"])): + self.latents_list.append( + torch.randn( + latent_shape[0], + latent_shape[1], + int(latent_shape[2] * self.config["resolution_rate"][i]) // 2 * 2, + int(latent_shape[3] * self.config["resolution_rate"][i]) // 2 * 2, + dtype=dtype, + device=AI_DEVICE, + generator=self.generator, + ) + ) + + # add original resolution latents + self.latents_list.append( + torch.randn( + latent_shape[0], + latent_shape[1], + latent_shape[2], + latent_shape[3], + dtype=dtype, + device=AI_DEVICE, + generator=self.generator, + ) + ) + + # set initial latents + self.latents = self.latents_list[0] + self.changing_resolution_index = 0 + + def step_post(self): + if self.step_index + 1 in self.config["changing_resolution_steps"]: + self.step_post_upsample() + self.changing_resolution_index += 1 + else: + super().step_post() + + def step_post_upsample(self): + # 1. denoised sample to clean noise + model_output = self.noise_pred.to(torch.float32) + sample = self.latents.to(torch.float32) + sigma_t = self.sigmas[self.step_index] + x0_pred = sample - sigma_t * model_output + denoised_sample = x0_pred.to(sample.dtype) + + # 2. upsample clean noise to target shape + denoised_sample_5d = denoised_sample.unsqueeze(0) # (C,T,H,W) -> (1,C,T,H,W) + + shape_to_upsampled = self.latents_list[self.changing_resolution_index + 1].shape[1:] + clean_noise = torch.nn.functional.interpolate(denoised_sample_5d, size=shape_to_upsampled, mode="trilinear") + clean_noise = clean_noise.squeeze(0) # (1,C,T,H,W) -> (C,T,H,W) + + # 3. add noise to clean noise + noisy_sample = self.add_noise(clean_noise, self.latents_list[self.changing_resolution_index + 1], self.timesteps[self.step_index + 1]) + + # 4. update latents + self.latents = noisy_sample + + # self.disable_corrector = [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37] # maybe not needed + + # 5. update timesteps using shift + self.changing_resolution_index + 1 更激进的去噪 + self.set_timesteps(self.infer_steps, device=AI_DEVICE, shift=self.sample_shift + self.changing_resolution_index + 1) + + def add_noise(self, original_samples, noise, timesteps): + sigma = self.sigmas[self.step_index] + alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma) + noisy_samples = alpha_t * original_samples + sigma_t * noise + return noisy_samples diff --git a/lightx2v/models/schedulers/wan/feature_caching/scheduler.py b/lightx2v/models/schedulers/wan/feature_caching/scheduler.py new file mode 100644 index 0000000..c306ab8 --- /dev/null +++ b/lightx2v/models/schedulers/wan/feature_caching/scheduler.py @@ -0,0 +1,18 @@ +from lightx2v.models.schedulers.wan.scheduler import WanScheduler + + +class WanSchedulerCaching(WanScheduler): + def __init__(self, config): + super().__init__(config) + + def clear(self): + self.transformer_infer.clear() + + +class WanSchedulerTaylorCaching(WanSchedulerCaching): + def __init__(self, config): + super().__init__(config) + + pattern = [True, False, False, False] + self.caching_records = (pattern * ((config.infer_steps + 3) // 4))[: config.infer_steps] + self.caching_records_2 = (pattern * ((config.infer_steps + 3) // 4))[: config.infer_steps] diff --git a/lightx2v/models/schedulers/wan/scheduler.py b/lightx2v/models/schedulers/wan/scheduler.py new file mode 100644 index 0000000..ef9f4ee --- /dev/null +++ b/lightx2v/models/schedulers/wan/scheduler.py @@ -0,0 +1,434 @@ +from typing import List, Optional, Union + +import numpy as np +import torch +import torch.distributed as dist +from torch.nn import functional as F + +from lightx2v.models.schedulers.scheduler import BaseScheduler +from lightx2v.utils.utils import masks_like +from lightx2v_platform.base.global_var import AI_DEVICE + + +class WanScheduler(BaseScheduler): + def __init__(self, config): + super().__init__(config) + self.infer_steps = self.config["infer_steps"] + self.target_video_length = self.config["target_video_length"] + self.sample_shift = self.config["sample_shift"] + if self.config["seq_parallel"]: + self.seq_p_group = self.config.get("device_mesh").get_group(mesh_dim="seq_p") + else: + self.seq_p_group = None + self.patch_size = (1, 2, 2) + self.shift = 1 + self.num_train_timesteps = 1000 + self.disable_corrector = [] + self.solver_order = 2 + self.noise_pred = None + self.sample_guide_scale = self.config["sample_guide_scale"] + self.caching_records_2 = [True] * self.config["infer_steps"] + self.head_size = self.config["dim"] // self.config["num_heads"] + self.freqs = torch.cat( + [ + self.rope_params(1024, self.head_size - 4 * (self.head_size // 6)), + self.rope_params(1024, 2 * (self.head_size // 6)), + self.rope_params(1024, 2 * (self.head_size // 6)), + ], + dim=1, + ).to(torch.device(AI_DEVICE)) + + def rope_params(self, max_seq_len, dim, theta=10000): + assert dim % 2 == 0 + freqs = torch.outer( + torch.arange(max_seq_len), + 1.0 / torch.pow(theta, torch.arange(0, dim, 2).to(torch.float32).div(dim)), + ) + freqs = torch.polar(torch.ones_like(freqs), freqs) + return freqs + + def prepare(self, seed, latent_shape, image_encoder_output=None): + if self.config["model_cls"] == "wan2.2" and self.config["task"] in ["i2v", "s2v"]: + self.vae_encoder_out = image_encoder_output["vae_encoder_out"] + + self.prepare_latents(seed, latent_shape, dtype=torch.float32) + + alphas = np.linspace(1, 1 / self.num_train_timesteps, self.num_train_timesteps)[::-1].copy() + sigmas = 1.0 - alphas + sigmas = torch.from_numpy(sigmas).to(dtype=torch.float32) + + sigmas = self.shift * sigmas / (1 + (self.shift - 1) * sigmas) + + self.sigmas = sigmas + self.timesteps = sigmas * self.num_train_timesteps + + self.model_outputs = [None] * self.solver_order + self.timestep_list = [None] * self.solver_order + self.last_sample = None + + self.sigmas = self.sigmas.to("cpu") + self.sigma_min = self.sigmas[-1].item() + self.sigma_max = self.sigmas[0].item() + + self.set_timesteps(self.infer_steps, device=AI_DEVICE, shift=self.sample_shift) + + self.cos_sin = self.prepare_cos_sin((latent_shape[1] // self.patch_size[0], latent_shape[2] // self.patch_size[1], latent_shape[3] // self.patch_size[2])) + + def prepare_cos_sin(self, grid_sizes): + c = self.head_size // 2 + freqs = self.freqs.split([c - 2 * (c // 3), c // 3, c // 3], dim=1) + f, h, w = grid_sizes + seq_len = f * h * w + cos_sin = torch.cat( + [ + freqs[0][:f].view(f, 1, 1, -1).expand(f, h, w, -1), + freqs[1][:h].view(1, h, 1, -1).expand(f, h, w, -1), + freqs[2][:w].view(1, 1, w, -1).expand(f, h, w, -1), + ], + dim=-1, + ) + if self.config.get("rope_type", "flashinfer") == "flashinfer": + cos_sin = cos_sin.reshape(seq_len, -1) + # Extract cos and sin parts separately and concatenate + cos_half = cos_sin.real.contiguous() + sin_half = cos_sin.imag.contiguous() + cos_sin = torch.cat([cos_half, sin_half], dim=-1) + if self.seq_p_group is not None: + world_size = dist.get_world_size(self.seq_p_group) + cur_rank = dist.get_rank(self.seq_p_group) + seqlen = cos_sin.shape[0] + padding_size = (world_size - (seqlen % world_size)) % world_size + if padding_size > 0: + cos_sin = F.pad(cos_sin, (0, 0, 0, padding_size)) + cos_sin = torch.chunk(cos_sin, world_size, dim=0)[cur_rank] + else: + cos_sin = cos_sin.reshape(seq_len, 1, -1) + if self.seq_p_group is not None: + world_size = dist.get_world_size(self.seq_p_group) + cur_rank = dist.get_rank(self.seq_p_group) + seqlen = cos_sin.shape[0] + padding_size = (world_size - (seqlen % world_size)) % world_size + if padding_size > 0: + cos_sin = F.pad(cos_sin, (0, 0, 0, 0, 0, padding_size)) + cos_sin = torch.chunk(cos_sin, world_size, dim=0)[cur_rank] + return cos_sin + + def prepare_latents(self, seed, latent_shape, dtype=torch.float32): + self.generator = torch.Generator(device=AI_DEVICE).manual_seed(seed) + self.latents = torch.randn( + latent_shape[0], + latent_shape[1], + latent_shape[2], + latent_shape[3], + dtype=dtype, + device=AI_DEVICE, + generator=self.generator, + ) + if self.config["model_cls"] == "wan2.2" and self.config["task"] in ["i2v", "s2v"]: + self.mask = masks_like(self.latents, zero=True) + self.latents = (1.0 - self.mask) * self.vae_encoder_out + self.mask * self.latents + + def set_timesteps( + self, + infer_steps: Union[int, None] = None, + device: Union[str, torch.device] = None, + sigmas: Optional[List[float]] = None, + mu: Optional[Union[float, None]] = None, + shift: Optional[Union[float, None]] = None, + ): + sigmas = np.linspace(self.sigma_max, self.sigma_min, infer_steps + 1).copy()[:-1] + + if shift is None: + shift = self.shift + sigmas = shift * sigmas / (1 + (shift - 1) * sigmas) + + sigma_last = 0 + + timesteps = sigmas * self.num_train_timesteps + sigmas = np.concatenate([sigmas, [sigma_last]]).astype(np.float32) + + self.sigmas = torch.from_numpy(sigmas) + self.timesteps = torch.from_numpy(timesteps).to(device=device, dtype=torch.int64) + + assert len(self.timesteps) == self.infer_steps + self.model_outputs = [ + None, + ] * self.solver_order + self.lower_order_nums = 0 + self.last_sample = None + self._begin_index = None + self.sigmas = self.sigmas.to("cpu") + + def _sigma_to_alpha_sigma_t(self, sigma): + return 1 - sigma, sigma + + def convert_model_output( + self, + model_output: torch.Tensor, + *args, + sample: torch.Tensor = None, + **kwargs, + ) -> torch.Tensor: + timestep = args[0] if len(args) > 0 else kwargs.pop("timestep", None) + if sample is None: + if len(args) > 1: + sample = args[1] + else: + raise ValueError("missing `sample` as a required keyward argument") + + sigma = self.sigmas[self.step_index] + alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma) + sigma_t = self.sigmas[self.step_index] + x0_pred = sample - sigma_t * model_output + return x0_pred + + def reset(self, seed, latent_shape, step_index=None): + if step_index is not None: + self.step_index = step_index + self.model_outputs = [None] * self.solver_order + self.timestep_list = [None] * self.solver_order + self.last_sample = None + self.noise_pred = None + self.this_order = None + self.lower_order_nums = 0 + self.prepare_latents(seed, latent_shape, dtype=torch.float32) + + def multistep_uni_p_bh_update( + self, + model_output: torch.Tensor, + *args, + sample: torch.Tensor = None, + order: int = None, + **kwargs, + ) -> torch.Tensor: + prev_timestep = args[0] if len(args) > 0 else kwargs.pop("prev_timestep", None) + if sample is None: + if len(args) > 1: + sample = args[1] + else: + raise ValueError(" missing `sample` as a required keyward argument") + if order is None: + if len(args) > 2: + order = args[2] + else: + raise ValueError(" missing `order` as a required keyward argument") + model_output_list = self.model_outputs + + s0 = self.timestep_list[-1] + m0 = model_output_list[-1] + x = sample + + sigma_t, sigma_s0 = ( + self.sigmas[self.step_index + 1], + self.sigmas[self.step_index], + ) + alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma_t) + alpha_s0, sigma_s0 = self._sigma_to_alpha_sigma_t(sigma_s0) + + lambda_t = torch.log(alpha_t) - torch.log(sigma_t) + lambda_s0 = torch.log(alpha_s0) - torch.log(sigma_s0) + + h = lambda_t - lambda_s0 + device = sample.device + + rks = [] + D1s = [] + for i in range(1, order): + si = self.step_index - i + mi = model_output_list[-(i + 1)] + alpha_si, sigma_si = self._sigma_to_alpha_sigma_t(self.sigmas[si]) + lambda_si = torch.log(alpha_si) - torch.log(sigma_si) + rk = (lambda_si - lambda_s0) / h + rks.append(rk) + D1s.append((mi - m0) / rk) + + rks.append(1.0) + rks = torch.tensor(rks, device=device) + + R = [] + b = [] + + hh = -h + h_phi_1 = torch.expm1(hh) # h\phi_1(h) = e^h - 1 + h_phi_k = h_phi_1 / hh - 1 + + factorial_i = 1 + + B_h = torch.expm1(hh) + + for i in range(1, order + 1): + R.append(torch.pow(rks, i - 1)) + b.append(h_phi_k * factorial_i / B_h) + factorial_i *= i + 1 + h_phi_k = h_phi_k / hh - 1 / factorial_i + + R = torch.stack(R) + b = torch.tensor(b, device=device) + + if len(D1s) > 0: + D1s = torch.stack(D1s, dim=1) # (B, K) + # for order 2, we use a simplified version + if order == 2: + rhos_p = torch.tensor([0.5], dtype=x.dtype, device=device) + else: + rhos_p = torch.linalg.solve(R[:-1, :-1], b[:-1]).to(device).to(x.dtype) + else: + D1s = None + + x_t_ = sigma_t / sigma_s0 * x - alpha_t * h_phi_1 * m0 + if D1s is not None: + pred_res = torch.einsum("k,bkc...->bc...", rhos_p, D1s) + else: + pred_res = 0 + x_t = x_t_ - alpha_t * B_h * pred_res + x_t = x_t.to(x.dtype) + return x_t + + def multistep_uni_c_bh_update( + self, + this_model_output: torch.Tensor, + *args, + last_sample: torch.Tensor = None, + this_sample: torch.Tensor = None, + order: int = None, + **kwargs, + ) -> torch.Tensor: + this_timestep = args[0] if len(args) > 0 else kwargs.pop("this_timestep", None) + if last_sample is None: + if len(args) > 1: + last_sample = args[1] + else: + raise ValueError(" missing`last_sample` as a required keyward argument") + if this_sample is None: + if len(args) > 2: + this_sample = args[2] + else: + raise ValueError(" missing`this_sample` as a required keyward argument") + if order is None: + if len(args) > 3: + order = args[3] + else: + raise ValueError(" missing`order` as a required keyward argument") + + model_output_list = self.model_outputs + + m0 = model_output_list[-1] + x = last_sample + x_t = this_sample + model_t = this_model_output + + sigma_t, sigma_s0 = ( + self.sigmas[self.step_index], + self.sigmas[self.step_index - 1], + ) + alpha_t, sigma_t = self._sigma_to_alpha_sigma_t(sigma_t) + alpha_s0, sigma_s0 = self._sigma_to_alpha_sigma_t(sigma_s0) + + lambda_t = torch.log(alpha_t) - torch.log(sigma_t) + lambda_s0 = torch.log(alpha_s0) - torch.log(sigma_s0) + + h = lambda_t - lambda_s0 + device = this_sample.device + + rks = [] + D1s = [] + for i in range(1, order): + si = self.step_index - (i + 1) + mi = model_output_list[-(i + 1)] + alpha_si, sigma_si = self._sigma_to_alpha_sigma_t(self.sigmas[si]) + lambda_si = torch.log(alpha_si) - torch.log(sigma_si) + rk = (lambda_si - lambda_s0) / h + rks.append(rk) + D1s.append((mi - m0) / rk) + + rks.append(1.0) + rks = torch.tensor(rks, device=device) + + R = [] + b = [] + + hh = -h + h_phi_1 = torch.expm1(hh) # h\phi_1(h) = e^h - 1 + h_phi_k = h_phi_1 / hh - 1 + + factorial_i = 1 + + B_h = torch.expm1(hh) + + for i in range(1, order + 1): + R.append(torch.pow(rks, i - 1)) + b.append(h_phi_k * factorial_i / B_h) + factorial_i *= i + 1 + h_phi_k = h_phi_k / hh - 1 / factorial_i + + R = torch.stack(R) + b = torch.tensor(b, device=device) + + if len(D1s) > 0: + D1s = torch.stack(D1s, dim=1) + else: + D1s = None + + # for order 1, we use a simplified version + if order == 1: + rhos_c = torch.tensor([0.5], dtype=x.dtype, device=device) + else: + rhos_c = torch.linalg.solve(R, b).to(device).to(x.dtype) + + x_t_ = sigma_t / sigma_s0 * x - alpha_t * h_phi_1 * m0 + if D1s is not None: + corr_res = torch.einsum("k,bkc...->bc...", rhos_c[:-1], D1s) + else: + corr_res = 0 + D1_t = model_t - m0 + x_t = x_t_ - alpha_t * B_h * (corr_res + rhos_c[-1] * D1_t) + x_t = x_t.to(x.dtype) + return x_t + + def step_pre(self, step_index): + super().step_pre(step_index) + self.timestep_input = torch.stack([self.timesteps[self.step_index]]) + if self.config["model_cls"] == "wan2.2" and self.config["task"] in ["i2v", "s2v"]: + self.timestep_input = (self.mask[0][:, ::2, ::2] * self.timestep_input).flatten() + + def step_post(self): + model_output = self.noise_pred.to(torch.float32) + timestep = self.timesteps[self.step_index] + sample = self.latents.to(torch.float32) + + use_corrector = self.step_index > 0 and self.step_index - 1 not in self.disable_corrector and self.last_sample is not None + + model_output_convert = self.convert_model_output(model_output, sample=sample) + if use_corrector: + sample = self.multistep_uni_c_bh_update( + this_model_output=model_output_convert, + last_sample=self.last_sample, + this_sample=sample, + order=self.this_order, + ) + + for i in range(self.solver_order - 1): + self.model_outputs[i] = self.model_outputs[i + 1] + self.timestep_list[i] = self.timestep_list[i + 1] + + self.model_outputs[-1] = model_output_convert + self.timestep_list[-1] = timestep + + this_order = min(self.solver_order, len(self.timesteps) - self.step_index) + + self.this_order = min(this_order, self.lower_order_nums + 1) # warmup for multistep + assert self.this_order > 0 + + self.last_sample = sample + prev_sample = self.multistep_uni_p_bh_update( + model_output=model_output, + sample=sample, + order=self.this_order, + ) + + if self.lower_order_nums < self.solver_order: + self.lower_order_nums += 1 + + self.latents = prev_sample + if self.config["model_cls"] == "wan2.2" and self.config["task"] in ["i2v", "s2v"]: + self.latents = (1.0 - self.mask) * self.vae_encoder_out + self.mask * self.latents diff --git a/lightx2v/models/schedulers/wan/self_forcing/scheduler.py b/lightx2v/models/schedulers/wan/self_forcing/scheduler.py new file mode 100644 index 0000000..540116f --- /dev/null +++ b/lightx2v/models/schedulers/wan/self_forcing/scheduler.py @@ -0,0 +1,105 @@ +import torch + +from lightx2v.models.schedulers.wan.scheduler import WanScheduler +from lightx2v.utils.envs import * +from lightx2v_platform.base.global_var import AI_DEVICE + + +class WanSFScheduler(WanScheduler): + def __init__(self, config): + super().__init__(config) + self.dtype = torch.bfloat16 + self.num_frame_per_block = self.config["sf_config"]["num_frame_per_block"] + self.num_output_frames = self.config["sf_config"]["num_output_frames"] + self.num_blocks = self.num_output_frames // self.num_frame_per_block + self.denoising_step_list = self.config["sf_config"]["denoising_step_list"] + self.infer_steps = len(self.denoising_step_list) + self.all_num_frames = [self.num_frame_per_block] * self.num_blocks + self.num_input_frames = 0 + self.denoising_strength = 1.0 + self.sigma_max = 1.0 + self.sigma_min = 0 + self.sf_shift = self.config["sf_config"]["shift"] + self.inverse_timesteps = False + self.extra_one_step = True + self.reverse_sigmas = False + self.num_inference_steps = self.config["sf_config"]["num_inference_steps"] + self.context_noise = 0 + + def prepare(self, seed, latent_shape, image_encoder_output=None): + self.latents = torch.randn(latent_shape, device=AI_DEVICE, dtype=self.dtype) + + timesteps = [] + for frame_block_idx, current_num_frames in enumerate(self.all_num_frames): + frame_steps = [] + + for step_index, current_timestep in enumerate(self.denoising_step_list): + timestep = torch.ones([self.num_frame_per_block], device=AI_DEVICE, dtype=torch.int64) * current_timestep + frame_steps.append(timestep) + + timesteps.append(frame_steps) + self.timesteps = timesteps + + self.noise_pred = torch.zeros(latent_shape, device=AI_DEVICE, dtype=self.dtype) + + sigma_start = self.sigma_min + (self.sigma_max - self.sigma_min) * self.denoising_strength + if self.extra_one_step: + self.sigmas_sf = torch.linspace(sigma_start, self.sigma_min, self.num_inference_steps + 1)[:-1] + else: + self.sigmas_sf = torch.linspace(sigma_start, self.sigma_min, self.num_inference_steps) + if self.inverse_timesteps: + self.sigmas_sf = torch.flip(self.sigmas_sf, dims=[0]) + self.sigmas_sf = self.sf_shift * self.sigmas_sf / (1 + (self.sf_shift - 1) * self.sigmas_sf) + if self.reverse_sigmas: + self.sigmas_sf = 1 - self.sigmas_sf + self.sigmas_sf = self.sigmas_sf.to(AI_DEVICE) + + self.timesteps_sf = self.sigmas_sf * self.num_train_timesteps + self.timesteps_sf = self.timesteps_sf.to(AI_DEVICE) + + self.stream_output = None + + def step_pre(self, seg_index, step_index, is_rerun=False): + self.step_index = step_index + self.seg_index = seg_index + + if not GET_DTYPE() == GET_SENSITIVE_DTYPE(): + self.latents = self.latents.to(GET_DTYPE()) + + if not is_rerun: + self.timestep_input = torch.stack([self.timesteps[self.seg_index][self.step_index]]) + self.latents_input = self.latents[:, self.seg_index * self.num_frame_per_block : min((self.seg_index + 1) * self.num_frame_per_block, self.num_output_frames)] + else: + # rerun with timestep zero to update KV cache using clean context + self.timestep_input = torch.ones_like(torch.stack([self.timesteps[self.seg_index][self.step_index]])) * self.context_noise + self.latents_input = self.latents[:, self.seg_index * self.num_frame_per_block : min((self.seg_index + 1) * self.num_frame_per_block, self.num_output_frames)] + + def step_post(self): + # convert model outputs + current_start_frame = self.seg_index * self.num_frame_per_block + current_end_frame = (self.seg_index + 1) * self.num_frame_per_block + + flow_pred = self.noise_pred[:, current_start_frame:current_end_frame].transpose(0, 1) + xt = self.latents_input.transpose(0, 1) + timestep = self.timestep_input.squeeze(0) + + original_dtype = flow_pred.dtype + + flow_pred, xt, sigmas, timesteps = map(lambda x: x.double().to(flow_pred.device), [flow_pred, xt, self.sigmas_sf, self.timesteps_sf]) + timestep_id = torch.argmin((timesteps.unsqueeze(0) - timestep.unsqueeze(1)).abs(), dim=1) + sigma_t = sigmas[timestep_id].reshape(-1, 1, 1, 1) + x0_pred = xt - sigma_t * flow_pred + x0_pred = x0_pred.to(original_dtype) + + # add noise + if self.step_index < self.infer_steps - 1: + timestep_next = self.timesteps[self.seg_index][self.step_index + 1] * torch.ones(self.num_frame_per_block, device=AI_DEVICE, dtype=torch.long) + timestep_id_next = torch.argmin((self.timesteps_sf.unsqueeze(0) - timestep_next.unsqueeze(1)).abs(), dim=1) + sigma_next = self.sigmas_sf[timestep_id_next].reshape(-1, 1, 1, 1) + noise_next = torch.randn_like(x0_pred) + sample_next = (1 - sigma_next) * x0_pred + sigma_next * noise_next + sample_next = sample_next.type_as(noise_next) + self.latents[:, self.seg_index * self.num_frame_per_block : min((self.seg_index + 1) * self.num_frame_per_block, self.num_output_frames)] = sample_next.transpose(0, 1) + else: + self.latents[:, self.seg_index * self.num_frame_per_block : min((self.seg_index + 1) * self.num_frame_per_block, self.num_output_frames)] = x0_pred.transpose(0, 1) + self.stream_output = x0_pred.transpose(0, 1) diff --git a/lightx2v/models/schedulers/wan/step_distill/scheduler.py b/lightx2v/models/schedulers/wan/step_distill/scheduler.py new file mode 100644 index 0000000..e593174 --- /dev/null +++ b/lightx2v/models/schedulers/wan/step_distill/scheduler.py @@ -0,0 +1,76 @@ +import math +from typing import Union + +import torch + +from lightx2v.models.schedulers.wan.scheduler import WanScheduler +from lightx2v_platform.base.global_var import AI_DEVICE + + +class WanStepDistillScheduler(WanScheduler): + def __init__(self, config): + super().__init__(config) + self.denoising_step_list = config["denoising_step_list"] + self.infer_steps = len(self.denoising_step_list) + self.sample_shift = self.config["sample_shift"] + + self.num_train_timesteps = 1000 + self.sigma_max = 1.0 + self.sigma_min = 0.0 + + def prepare(self, seed, latent_shape, image_encoder_output=None): + self.prepare_latents(seed, latent_shape, dtype=torch.float32) + self.set_denoising_timesteps(device=AI_DEVICE) + self.cos_sin = self.prepare_cos_sin((latent_shape[1] // self.patch_size[0], latent_shape[2] // self.patch_size[1], latent_shape[3] // self.patch_size[2])) + + def set_denoising_timesteps(self, device: Union[str, torch.device] = None): + sigma_start = self.sigma_min + (self.sigma_max - self.sigma_min) + self.sigmas = torch.linspace(sigma_start, self.sigma_min, self.num_train_timesteps + 1)[:-1] + self.sigmas = self.sample_shift * self.sigmas / (1 + (self.sample_shift - 1) * self.sigmas) + self.timesteps = self.sigmas * self.num_train_timesteps + + self.denoising_step_index = [self.num_train_timesteps - x for x in self.denoising_step_list] + self.timesteps = self.timesteps[self.denoising_step_index].to(device) + self.sigmas = self.sigmas[self.denoising_step_index].to("cpu") + + def reset(self, seed, latent_shape, step_index=None): + self.prepare_latents(seed, latent_shape, dtype=torch.float32) + + def add_noise(self, original_samples, noise, sigma): + sample = (1 - sigma) * original_samples + sigma * noise + return sample.type_as(noise) + + def step_post(self): + flow_pred = self.noise_pred.to(torch.float32) + sigma = self.sigmas[self.step_index].item() + noisy_image_or_video = self.latents.to(torch.float32) - sigma * flow_pred + if self.step_index < self.infer_steps - 1: + sigma_n = self.sigmas[self.step_index + 1].item() + noisy_image_or_video = noisy_image_or_video + flow_pred * sigma_n + self.latents = noisy_image_or_video.to(self.latents.dtype) + + +class Wan22StepDistillScheduler(WanStepDistillScheduler): + def __init__(self, config): + super().__init__(config) + self.boundary_step_index = config["boundary_step_index"] + + def set_denoising_timesteps(self, device: Union[str, torch.device] = None): + super().set_denoising_timesteps(device) + self.sigma_bound = self.sigmas[self.boundary_step_index].item() + + def calculate_alpha_beta_high(self, sigma): + alpha = (1 - sigma) / (1 - self.sigma_bound) + beta = math.sqrt(sigma**2 - (alpha * self.sigma_bound) ** 2) + return alpha, beta + + def step_post(self): + flow_pred = self.noise_pred.to(torch.float32) + sigma = self.sigmas[self.step_index].item() + noisy_image_or_video = self.latents.to(torch.float32) - flow_pred * sigma + # self.latent: x_t + if self.step_index < self.infer_steps - 1: + sigma_n = self.sigmas[self.step_index + 1].item() + noisy_image_or_video = noisy_image_or_video + flow_pred * sigma_n + + self.latents = noisy_image_or_video.to(self.latents.dtype) diff --git a/lightx2v/models/vfi/rife/model/loss.py b/lightx2v/models/vfi/rife/model/loss.py new file mode 100644 index 0000000..46607c2 --- /dev/null +++ b/lightx2v/models/vfi/rife/model/loss.py @@ -0,0 +1,130 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +import torchvision.models as models + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +class EPE(nn.Module): + def __init__(self): + super(EPE, self).__init__() + + def forward(self, flow, gt, loss_mask): + loss_map = (flow - gt.detach()) ** 2 + loss_map = (loss_map.sum(1, True) + 1e-6) ** 0.5 + return loss_map * loss_mask + + +class Ternary(nn.Module): + def __init__(self): + super(Ternary, self).__init__() + patch_size = 7 + out_channels = patch_size * patch_size + self.w = np.eye(out_channels).reshape((patch_size, patch_size, 1, out_channels)) + self.w = np.transpose(self.w, (3, 2, 0, 1)) + self.w = torch.tensor(self.w).float().to(device) + + def transform(self, img): + patches = F.conv2d(img, self.w, padding=3, bias=None) + transf = patches - img + transf_norm = transf / torch.sqrt(0.81 + transf**2) + return transf_norm + + def rgb2gray(self, rgb): + r, g, b = rgb[:, 0:1, :, :], rgb[:, 1:2, :, :], rgb[:, 2:3, :, :] + gray = 0.2989 * r + 0.5870 * g + 0.1140 * b + return gray + + def hamming(self, t1, t2): + dist = (t1 - t2) ** 2 + dist_norm = torch.mean(dist / (0.1 + dist), 1, True) + return dist_norm + + def valid_mask(self, t, padding): + n, _, h, w = t.size() + inner = torch.ones(n, 1, h - 2 * padding, w - 2 * padding).type_as(t) + mask = F.pad(inner, [padding] * 4) + return mask + + def forward(self, img0, img1): + img0 = self.transform(self.rgb2gray(img0)) + img1 = self.transform(self.rgb2gray(img1)) + return self.hamming(img0, img1) * self.valid_mask(img0, 1) + + +class SOBEL(nn.Module): + def __init__(self): + super(SOBEL, self).__init__() + self.kernelX = torch.tensor( + [ + [1, 0, -1], + [2, 0, -2], + [1, 0, -1], + ] + ).float() + self.kernelY = self.kernelX.clone().T + self.kernelX = self.kernelX.unsqueeze(0).unsqueeze(0).to(device) + self.kernelY = self.kernelY.unsqueeze(0).unsqueeze(0).to(device) + + def forward(self, pred, gt): + N, C, H, W = pred.shape[0], pred.shape[1], pred.shape[2], pred.shape[3] + img_stack = torch.cat([pred.reshape(N * C, 1, H, W), gt.reshape(N * C, 1, H, W)], 0) + sobel_stack_x = F.conv2d(img_stack, self.kernelX, padding=1) + sobel_stack_y = F.conv2d(img_stack, self.kernelY, padding=1) + pred_X, gt_X = sobel_stack_x[: N * C], sobel_stack_x[N * C :] + pred_Y, gt_Y = sobel_stack_y[: N * C], sobel_stack_y[N * C :] + + L1X, L1Y = torch.abs(pred_X - gt_X), torch.abs(pred_Y - gt_Y) + loss = L1X + L1Y + return loss + + +class MeanShift(nn.Conv2d): + def __init__(self, data_mean, data_std, data_range=1, norm=True): + c = len(data_mean) + super(MeanShift, self).__init__(c, c, kernel_size=1) + std = torch.Tensor(data_std) + self.weight.data = torch.eye(c).view(c, c, 1, 1) + if norm: + self.weight.data.div_(std.view(c, 1, 1, 1)) + self.bias.data = -1 * data_range * torch.Tensor(data_mean) + self.bias.data.div_(std) + else: + self.weight.data.mul_(std.view(c, 1, 1, 1)) + self.bias.data = data_range * torch.Tensor(data_mean) + self.requires_grad = False + + +class VGGPerceptualLoss(torch.nn.Module): + def __init__(self, rank=0): + super(VGGPerceptualLoss, self).__init__() + blocks = [] + pretrained = True + self.vgg_pretrained_features = models.vgg19(pretrained=pretrained).features + self.normalize = MeanShift([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], norm=True).cuda() + for param in self.parameters(): + param.requires_grad = False + + def forward(self, X, Y, indices=None): + X = self.normalize(X) + Y = self.normalize(Y) + indices = [2, 7, 12, 21, 30] + weights = [1.0 / 2.6, 1.0 / 4.8, 1.0 / 3.7, 1.0 / 5.6, 10 / 1.5] + k = 0 + loss = 0 + for i in range(indices[-1]): + X = self.vgg_pretrained_features[i](X) + Y = self.vgg_pretrained_features[i](Y) + if (i + 1) in indices: + loss += weights[k] * (X - Y.detach()).abs().mean() * 0.1 + k += 1 + return loss + + +if __name__ == "__main__": + img0 = torch.zeros(3, 3, 256, 256).float().to(device) + img1 = torch.tensor(np.random.normal(0, 1, (3, 3, 256, 256))).float().to(device) + ternary_loss = Ternary() + print(ternary_loss(img0, img1).shape) diff --git a/lightx2v/models/vfi/rife/model/pytorch_msssim/__init__.py b/lightx2v/models/vfi/rife/model/pytorch_msssim/__init__.py new file mode 100644 index 0000000..7dcd174 --- /dev/null +++ b/lightx2v/models/vfi/rife/model/pytorch_msssim/__init__.py @@ -0,0 +1,204 @@ +from math import exp + +import numpy as np +import torch +import torch.nn.functional as F + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +def gaussian(window_size, sigma): + gauss = torch.Tensor([exp(-((x - window_size // 2) ** 2) / float(2 * sigma**2)) for x in range(window_size)]) + return gauss / gauss.sum() + + +def create_window(window_size, channel=1): + _1D_window = gaussian(window_size, 1.5).unsqueeze(1) + _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0).to(device) + window = _2D_window.expand(channel, 1, window_size, window_size).contiguous() + return window + + +def create_window_3d(window_size, channel=1): + _1D_window = gaussian(window_size, 1.5).unsqueeze(1) + _2D_window = _1D_window.mm(_1D_window.t()) + _3D_window = _2D_window.unsqueeze(2) @ (_1D_window.t()) + window = _3D_window.expand(1, channel, window_size, window_size, window_size).contiguous().to(device) + return window + + +def ssim(img1, img2, window_size=11, window=None, size_average=True, full=False, val_range=None): + # Value range can be different from 255. Other common ranges are 1 (sigmoid) and 2 (tanh). + if val_range is None: + if torch.max(img1) > 128: + max_val = 255 + else: + max_val = 1 + + if torch.min(img1) < -0.5: + min_val = -1 + else: + min_val = 0 + L = max_val - min_val + else: + L = val_range + + padd = 0 + (_, channel, height, width) = img1.size() + if window is None: + real_size = min(window_size, height, width) + window = create_window(real_size, channel=channel).to(img1.device) + + # mu1 = F.conv2d(img1, window, padding=padd, groups=channel) + # mu2 = F.conv2d(img2, window, padding=padd, groups=channel) + mu1 = F.conv2d(F.pad(img1, (5, 5, 5, 5), mode="replicate"), window, padding=padd, groups=channel) + mu2 = F.conv2d(F.pad(img2, (5, 5, 5, 5), mode="replicate"), window, padding=padd, groups=channel) + + mu1_sq = mu1.pow(2) + mu2_sq = mu2.pow(2) + mu1_mu2 = mu1 * mu2 + + sigma1_sq = F.conv2d(F.pad(img1 * img1, (5, 5, 5, 5), "replicate"), window, padding=padd, groups=channel) - mu1_sq + sigma2_sq = F.conv2d(F.pad(img2 * img2, (5, 5, 5, 5), "replicate"), window, padding=padd, groups=channel) - mu2_sq + sigma12 = F.conv2d(F.pad(img1 * img2, (5, 5, 5, 5), "replicate"), window, padding=padd, groups=channel) - mu1_mu2 + + C1 = (0.01 * L) ** 2 + C2 = (0.03 * L) ** 2 + + v1 = 2.0 * sigma12 + C2 + v2 = sigma1_sq + sigma2_sq + C2 + cs = torch.mean(v1 / v2) # contrast sensitivity + + ssim_map = ((2 * mu1_mu2 + C1) * v1) / ((mu1_sq + mu2_sq + C1) * v2) + + if size_average: + ret = ssim_map.mean() + else: + ret = ssim_map.mean(1).mean(1).mean(1) + + if full: + return ret, cs + return ret + + +def ssim_matlab(img1, img2, window_size=11, window=None, size_average=True, full=False, val_range=None): + # Value range can be different from 255. Other common ranges are 1 (sigmoid) and 2 (tanh). + if val_range is None: + if torch.max(img1) > 128: + max_val = 255 + else: + max_val = 1 + + if torch.min(img1) < -0.5: + min_val = -1 + else: + min_val = 0 + L = max_val - min_val + else: + L = val_range + + padd = 0 + (_, _, height, width) = img1.size() + if window is None: + real_size = min(window_size, height, width) + window = create_window_3d(real_size, channel=1).to(img1.device) + # Channel is set to 1 since we consider color images as volumetric images + + img1 = img1.unsqueeze(1) + img2 = img2.unsqueeze(1) + + mu1 = F.conv3d(F.pad(img1, (5, 5, 5, 5, 5, 5), mode="replicate"), window, padding=padd, groups=1) + mu2 = F.conv3d(F.pad(img2, (5, 5, 5, 5, 5, 5), mode="replicate"), window, padding=padd, groups=1) + + mu1_sq = mu1.pow(2) + mu2_sq = mu2.pow(2) + mu1_mu2 = mu1 * mu2 + + sigma1_sq = F.conv3d(F.pad(img1 * img1, (5, 5, 5, 5, 5, 5), "replicate"), window, padding=padd, groups=1) - mu1_sq + sigma2_sq = F.conv3d(F.pad(img2 * img2, (5, 5, 5, 5, 5, 5), "replicate"), window, padding=padd, groups=1) - mu2_sq + sigma12 = F.conv3d(F.pad(img1 * img2, (5, 5, 5, 5, 5, 5), "replicate"), window, padding=padd, groups=1) - mu1_mu2 + + C1 = (0.01 * L) ** 2 + C2 = (0.03 * L) ** 2 + + v1 = 2.0 * sigma12 + C2 + v2 = sigma1_sq + sigma2_sq + C2 + cs = torch.mean(v1 / v2) # contrast sensitivity + + ssim_map = ((2 * mu1_mu2 + C1) * v1) / ((mu1_sq + mu2_sq + C1) * v2) + + if size_average: + ret = ssim_map.mean() + else: + ret = ssim_map.mean(1).mean(1).mean(1) + + if full: + return ret, cs + return ret + + +def msssim(img1, img2, window_size=11, size_average=True, val_range=None, normalize=False): + device = img1.device + weights = torch.FloatTensor([0.0448, 0.2856, 0.3001, 0.2363, 0.1333]).to(device) + levels = weights.size()[0] + mssim = [] + mcs = [] + for _ in range(levels): + sim, cs = ssim(img1, img2, window_size=window_size, size_average=size_average, full=True, val_range=val_range) + mssim.append(sim) + mcs.append(cs) + + img1 = F.avg_pool2d(img1, (2, 2)) + img2 = F.avg_pool2d(img2, (2, 2)) + + mssim = torch.stack(mssim) + mcs = torch.stack(mcs) + + # Normalize (to avoid NaNs during training unstable models, not compliant with original definition) + if normalize: + mssim = (mssim + 1) / 2 + mcs = (mcs + 1) / 2 + + pow1 = mcs**weights + pow2 = mssim**weights + # From Matlab implementation https://ece.uwaterloo.ca/~z70wang/research/iwssim/ + output = torch.prod(pow1[:-1] * pow2[-1]) + return output + + +# Classes to re-use window +class SSIM(torch.nn.Module): + def __init__(self, window_size=11, size_average=True, val_range=None): + super(SSIM, self).__init__() + self.window_size = window_size + self.size_average = size_average + self.val_range = val_range + + # Assume 3 channel for SSIM + self.channel = 3 + self.window = create_window(window_size, channel=self.channel) + + def forward(self, img1, img2): + (_, channel, _, _) = img1.size() + + if channel == self.channel and self.window.dtype == img1.dtype: + window = self.window + else: + window = create_window(self.window_size, channel).to(img1.device).type(img1.dtype) + self.window = window + self.channel = channel + + _ssim = ssim(img1, img2, window=window, window_size=self.window_size, size_average=self.size_average) + dssim = (1 - _ssim) / 2 + return dssim + + +class MSSSIM(torch.nn.Module): + def __init__(self, window_size=11, size_average=True, channel=3): + super(MSSSIM, self).__init__() + self.window_size = window_size + self.size_average = size_average + self.channel = channel + + def forward(self, img1, img2): + return msssim(img1, img2, window_size=self.window_size, size_average=self.size_average) diff --git a/lightx2v/models/vfi/rife/model/warplayer.py b/lightx2v/models/vfi/rife/model/warplayer.py new file mode 100644 index 0000000..096d48f --- /dev/null +++ b/lightx2v/models/vfi/rife/model/warplayer.py @@ -0,0 +1,17 @@ +import torch + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +backwarp_tenGrid = {} + + +def warp(tenInput, tenFlow): + k = (str(tenFlow.device), str(tenFlow.size())) + if k not in backwarp_tenGrid: + tenHorizontal = torch.linspace(-1.0, 1.0, tenFlow.shape[3], device=device).view(1, 1, 1, tenFlow.shape[3]).expand(tenFlow.shape[0], -1, tenFlow.shape[2], -1) + tenVertical = torch.linspace(-1.0, 1.0, tenFlow.shape[2], device=device).view(1, 1, tenFlow.shape[2], 1).expand(tenFlow.shape[0], -1, -1, tenFlow.shape[3]) + backwarp_tenGrid[k] = torch.cat([tenHorizontal, tenVertical], 1).to(device) + + tenFlow = torch.cat([tenFlow[:, 0:1, :, :] / ((tenInput.shape[3] - 1.0) / 2.0), tenFlow[:, 1:2, :, :] / ((tenInput.shape[2] - 1.0) / 2.0)], 1) + + g = (backwarp_tenGrid[k] + tenFlow).permute(0, 2, 3, 1) + return torch.nn.functional.grid_sample(input=tenInput, grid=g, mode="bilinear", padding_mode="border", align_corners=True) diff --git a/lightx2v/models/vfi/rife/rife_comfyui_wrapper.py b/lightx2v/models/vfi/rife/rife_comfyui_wrapper.py new file mode 100644 index 0000000..0911c72 --- /dev/null +++ b/lightx2v/models/vfi/rife/rife_comfyui_wrapper.py @@ -0,0 +1,138 @@ +import os +from typing import List, Optional, Tuple + +import torch +from torch.nn import functional as F + +from lightx2v.utils.profiler import * + + +class RIFEWrapper: + """Wrapper for RIFE model to work with ComfyUI Image tensors""" + + BASE_DIR = os.path.dirname(os.path.abspath(__file__)) + + def __init__(self, model_path, device: Optional[torch.device] = None): + self.device = device or torch.device("cuda" if torch.cuda.is_available() else "cpu") + + # Setup torch for optimal performance + torch.set_grad_enabled(False) + if torch.cuda.is_available(): + torch.backends.cudnn.enabled = True + torch.backends.cudnn.benchmark = True + + # Load model + from .train_log.RIFE_HDv3 import Model + + self.model = Model() + with ProfilingContext4DebugL2("Load RIFE model"): + self.model.load_model(model_path, -1) + self.model.eval() + self.model.device() + + @ProfilingContext4DebugL2("Interpolate frames") + def interpolate_frames( + self, + images: torch.Tensor, + source_fps: float, + target_fps: float, + scale: float = 1.0, + ) -> torch.Tensor: + """ + Interpolate frames from source FPS to target FPS + + Args: + images: ComfyUI Image tensor [N, H, W, C] in range [0, 1] + source_fps: Source frame rate + target_fps: Target frame rate + scale: Scale factor for processing + + Returns: + Interpolated ComfyUI Image tensor [M, H, W, C] in range [0, 1] + """ + # Validate input + assert images.dim() == 4 and images.shape[-1] == 3, "Input must be [N, H, W, C] with C=3" + + if source_fps == target_fps: + return images + + total_source_frames = images.shape[0] + height, width = images.shape[1:3] + + # Calculate padding for model + tmp = max(128, int(128 / scale)) + ph = ((height - 1) // tmp + 1) * tmp + pw = ((width - 1) // tmp + 1) * tmp + padding = (0, pw - width, 0, ph - height) + + # Calculate target frame positions + frame_positions = self._calculate_target_frame_positions(source_fps, target_fps, total_source_frames) + + # Prepare output tensor + output_frames = [] + + for source_idx1, source_idx2, interp_factor in frame_positions: + if interp_factor == 0.0 or source_idx1 == source_idx2: + # No interpolation needed, use the source frame directly + output_frames.append(images[source_idx1]) + else: + # Get frames to interpolate + frame1 = images[source_idx1] + frame2 = images[source_idx2] + + # Convert ComfyUI format [H, W, C] to RIFE format [1, C, H, W] + # Also convert from [0, 1] to [0, 1] (already in correct range) + I0 = frame1.permute(2, 0, 1).unsqueeze(0).to(self.device) + I1 = frame2.permute(2, 0, 1).unsqueeze(0).to(self.device) + + # Pad images + I0 = F.pad(I0, padding) + I1 = F.pad(I1, padding) + + # Perform interpolation + with torch.no_grad(): + interpolated = self.model.inference(I0, I1, timestep=interp_factor, scale=scale) + + # Convert back to ComfyUI format [H, W, C] + # Crop to original size and permute dimensions + interpolated_frame = interpolated[0, :, :height, :width].permute(1, 2, 0).cpu() + output_frames.append(interpolated_frame) + + # Stack all frames + return torch.stack(output_frames, dim=0) + + def _calculate_target_frame_positions(self, source_fps: float, target_fps: float, total_source_frames: int) -> List[Tuple[int, int, float]]: + """ + Calculate which frames need to be generated for the target frame rate. + + Returns: + List of (source_frame_index1, source_frame_index2, interpolation_factor) tuples + """ + frame_positions = [] + + # Calculate the time duration of the video + duration = (total_source_frames - 1) / source_fps + + # Calculate number of target frames + total_target_frames = int(duration * target_fps) + 1 + + for target_idx in range(total_target_frames): + # Calculate the time position of this target frame + target_time = target_idx / target_fps + + # Calculate the corresponding position in source frames + source_position = target_time * source_fps + + # Find the two source frames to interpolate between + source_idx1 = int(source_position) + source_idx2 = min(source_idx1 + 1, total_source_frames - 1) + + # Calculate interpolation factor (0 means use frame1, 1 means use frame2) + if source_idx1 == source_idx2: + interpolation_factor = 0.0 + else: + interpolation_factor = source_position - source_idx1 + + frame_positions.append((source_idx1, source_idx2, interpolation_factor)) + + return frame_positions diff --git a/lightx2v/models/vfi/rife/train_log/IFNet_HDv3.py b/lightx2v/models/vfi/rife/train_log/IFNet_HDv3.py new file mode 100644 index 0000000..099bc4a --- /dev/null +++ b/lightx2v/models/vfi/rife/train_log/IFNet_HDv3.py @@ -0,0 +1,214 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..model.warplayer import warp + +# from train_log.refine import * + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +def conv(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + nn.LeakyReLU(0.2, True), + ) + + +def conv_bn(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=False, + ), + nn.BatchNorm2d(out_planes), + nn.LeakyReLU(0.2, True), + ) + + +class Head(nn.Module): + def __init__(self): + super(Head, self).__init__() + self.cnn0 = nn.Conv2d(3, 16, 3, 2, 1) + self.cnn1 = nn.Conv2d(16, 16, 3, 1, 1) + self.cnn2 = nn.Conv2d(16, 16, 3, 1, 1) + self.cnn3 = nn.ConvTranspose2d(16, 4, 4, 2, 1) + self.relu = nn.LeakyReLU(0.2, True) + + def forward(self, x, feat=False): + x0 = self.cnn0(x) + x = self.relu(x0) + x1 = self.cnn1(x) + x = self.relu(x1) + x2 = self.cnn2(x) + x = self.relu(x2) + x3 = self.cnn3(x) + if feat: + return [x0, x1, x2, x3] + return x3 + + +class ResConv(nn.Module): + def __init__(self, c, dilation=1): + super(ResConv, self).__init__() + self.conv = nn.Conv2d(c, c, 3, 1, dilation, dilation=dilation, groups=1) + self.beta = nn.Parameter(torch.ones((1, c, 1, 1)), requires_grad=True) + self.relu = nn.LeakyReLU(0.2, True) + + def forward(self, x): + return self.relu(self.conv(x) * self.beta + x) + + +class IFBlock(nn.Module): + def __init__(self, in_planes, c=64): + super(IFBlock, self).__init__() + self.conv0 = nn.Sequential( + conv(in_planes, c // 2, 3, 2, 1), + conv(c // 2, c, 3, 2, 1), + ) + self.convblock = nn.Sequential( + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ) + self.lastconv = nn.Sequential(nn.ConvTranspose2d(c, 4 * 13, 4, 2, 1), nn.PixelShuffle(2)) + + def forward(self, x, flow=None, scale=1): + x = F.interpolate(x, scale_factor=1.0 / scale, mode="bilinear", align_corners=False) + if flow is not None: + flow = F.interpolate(flow, scale_factor=1.0 / scale, mode="bilinear", align_corners=False) * 1.0 / scale + x = torch.cat((x, flow), 1) + feat = self.conv0(x) + feat = self.convblock(feat) + tmp = self.lastconv(feat) + tmp = F.interpolate(tmp, scale_factor=scale, mode="bilinear", align_corners=False) + flow = tmp[:, :4] * scale + mask = tmp[:, 4:5] + feat = tmp[:, 5:] + return flow, mask, feat + + +class IFNet(nn.Module): + def __init__(self): + super(IFNet, self).__init__() + self.block0 = IFBlock(7 + 8, c=192) + self.block1 = IFBlock(8 + 4 + 8 + 8, c=128) + self.block2 = IFBlock(8 + 4 + 8 + 8, c=96) + self.block3 = IFBlock(8 + 4 + 8 + 8, c=64) + self.block4 = IFBlock(8 + 4 + 8 + 8, c=32) + self.encode = Head() + + # not used during inference + """ + self.teacher = IFBlock(8+4+8+3+8, c=64) + self.caltime = nn.Sequential( + nn.Conv2d(16+9, 8, 3, 2, 1), + nn.LeakyReLU(0.2, True), + nn.Conv2d(32, 64, 3, 2, 1), + nn.LeakyReLU(0.2, True), + nn.Conv2d(64, 64, 3, 1, 1), + nn.LeakyReLU(0.2, True), + nn.Conv2d(64, 64, 3, 1, 1), + nn.LeakyReLU(0.2, True), + nn.Conv2d(64, 1, 3, 1, 1), + nn.Sigmoid() + ) + """ + + def forward( + self, + x, + timestep=0.5, + scale_list=[8, 4, 2, 1], + training=False, + fastmode=True, + ensemble=False, + ): + if not training: + channel = x.shape[1] // 2 + img0 = x[:, :channel] + img1 = x[:, channel:] + if not torch.is_tensor(timestep): + timestep = (x[:, :1].clone() * 0 + 1) * timestep + else: + timestep = timestep.repeat(1, 1, img0.shape[2], img0.shape[3]) + f0 = self.encode(img0[:, :3]) + f1 = self.encode(img1[:, :3]) + flow_list = [] + merged = [] + mask_list = [] + warped_img0 = img0 + warped_img1 = img1 + flow = None + mask = None + loss_cons = 0 + block = [self.block0, self.block1, self.block2, self.block3, self.block4] + for i in range(5): + if flow is None: + flow, mask, feat = block[i]( + torch.cat((img0[:, :3], img1[:, :3], f0, f1, timestep), 1), + None, + scale=scale_list[i], + ) + if ensemble: + print("warning: ensemble is not supported since RIFEv4.21") + else: + wf0 = warp(f0, flow[:, :2]) + wf1 = warp(f1, flow[:, 2:4]) + fd, m0, feat = block[i]( + torch.cat( + ( + warped_img0[:, :3], + warped_img1[:, :3], + wf0, + wf1, + timestep, + mask, + feat, + ), + 1, + ), + flow, + scale=scale_list[i], + ) + if ensemble: + print("warning: ensemble is not supported since RIFEv4.21") + else: + mask = m0 + flow = flow + fd + mask_list.append(mask) + flow_list.append(flow) + warped_img0 = warp(img0, flow[:, :2]) + warped_img1 = warp(img1, flow[:, 2:4]) + merged.append((warped_img0, warped_img1)) + mask = torch.sigmoid(mask) + merged[4] = warped_img0 * mask + warped_img1 * (1 - mask) + if not fastmode: + print("contextnet is removed") + """ + c0 = self.contextnet(img0, flow[:, :2]) + c1 = self.contextnet(img1, flow[:, 2:4]) + tmp = self.unet(img0, img1, warped_img0, warped_img1, mask, flow, c0, c1) + res = tmp[:, :3] * 2 - 1 + merged[4] = torch.clamp(merged[4] + res, 0, 1) + """ + return flow_list, mask_list[4], merged diff --git a/lightx2v/models/vfi/rife/train_log/RIFE_HDv3.py b/lightx2v/models/vfi/rife/train_log/RIFE_HDv3.py new file mode 100644 index 0000000..29d5caa --- /dev/null +++ b/lightx2v/models/vfi/rife/train_log/RIFE_HDv3.py @@ -0,0 +1,85 @@ +import torch +from torch.nn.parallel import DistributedDataParallel as DDP +from torch.optim import AdamW + +from ..model.loss import * +from .IFNet_HDv3 import * + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +class Model: + def __init__(self, local_rank=-1): + self.flownet = IFNet() + self.device() + self.optimG = AdamW(self.flownet.parameters(), lr=1e-6, weight_decay=1e-4) + self.epe = EPE() + self.version = 4.25 + # self.vgg = VGGPerceptualLoss().to(device) + self.sobel = SOBEL() + if local_rank != -1: + self.flownet = DDP(self.flownet, device_ids=[local_rank], output_device=local_rank) + + def train(self): + self.flownet.train() + + def eval(self): + self.flownet.eval() + + def device(self): + self.flownet.to(device) + + def load_model(self, path, rank=0): + def convert(param): + if rank == -1: + return {k.replace("module.", ""): v for k, v in param.items() if "module." in k} + else: + return param + + if rank <= 0: + if torch.cuda.is_available(): + self.flownet.load_state_dict(convert(torch.load(path)), False) + else: + self.flownet.load_state_dict( + convert(torch.load(path, map_location="cpu")), + False, + ) + + def save_model(self, path, rank=0): + if rank == 0: + torch.save(self.flownet.state_dict(), "{}/flownet.pkl".format(path)) + + def inference(self, img0, img1, timestep=0.5, scale=1.0): + imgs = torch.cat((img0, img1), 1) + scale_list = [16 / scale, 8 / scale, 4 / scale, 2 / scale, 1 / scale] + flow, mask, merged = self.flownet(imgs, timestep, scale_list) + return merged[-1] + + def update(self, imgs, gt, learning_rate=0, mul=1, training=True, flow_gt=None): + for param_group in self.optimG.param_groups: + param_group["lr"] = learning_rate + img0 = imgs[:, :3] + img1 = imgs[:, 3:] + if training: + self.train() + else: + self.eval() + scale = [16, 8, 4, 2, 1] + flow, mask, merged = self.flownet(torch.cat((imgs, gt), 1), scale=scale, training=training) + loss_l1 = (merged[-1] - gt).abs().mean() + loss_smooth = self.sobel(flow[-1], flow[-1] * 0).mean() + # loss_vgg = self.vgg(merged[-1], gt) + if training: + self.optimG.zero_grad() + loss_G = loss_l1 + loss_cons + loss_smooth * 0.1 + loss_G.backward() + self.optimG.step() + else: + flow_teacher = flow[2] + return merged[-1], { + "mask": mask, + "flow": flow[-1][:, :2], + "loss_l1": loss_l1, + "loss_cons": loss_cons, + "loss_smooth": loss_smooth, + } diff --git a/lightx2v/models/vfi/rife/train_log/refine.py b/lightx2v/models/vfi/rife/train_log/refine.py new file mode 100644 index 0000000..190e1d4 --- /dev/null +++ b/lightx2v/models/vfi/rife/train_log/refine.py @@ -0,0 +1,113 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..model.warplayer import warp + + +def conv(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + nn.LeakyReLU(0.2, True), + ) + + +def conv_woact(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + ) + + +def deconv(in_planes, out_planes, kernel_size=4, stride=2, padding=1): + return nn.Sequential( + torch.nn.ConvTranspose2d( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=4, + stride=2, + padding=1, + bias=True, + ), + nn.LeakyReLU(0.2, True), + ) + + +class Conv2(nn.Module): + def __init__(self, in_planes, out_planes, stride=2): + super(Conv2, self).__init__() + self.conv1 = conv(in_planes, out_planes, 3, stride, 1) + self.conv2 = conv(out_planes, out_planes, 3, 1, 1) + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + return x + + +c = 16 + + +class Contextnet(nn.Module): + def __init__(self): + super(Contextnet, self).__init__() + self.conv1 = Conv2(3, c) + self.conv2 = Conv2(c, 2 * c) + self.conv3 = Conv2(2 * c, 4 * c) + self.conv4 = Conv2(4 * c, 8 * c) + + def forward(self, x, flow): + x = self.conv1(x) + flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 + f1 = warp(x, flow) + x = self.conv2(x) + flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 + f2 = warp(x, flow) + x = self.conv3(x) + flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 + f3 = warp(x, flow) + x = self.conv4(x) + flow = F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) * 0.5 + f4 = warp(x, flow) + return [f1, f2, f3, f4] + + +class Unet(nn.Module): + def __init__(self): + super(Unet, self).__init__() + self.down0 = Conv2(17, 2 * c) + self.down1 = Conv2(4 * c, 4 * c) + self.down2 = Conv2(8 * c, 8 * c) + self.down3 = Conv2(16 * c, 16 * c) + self.up0 = deconv(32 * c, 8 * c) + self.up1 = deconv(16 * c, 4 * c) + self.up2 = deconv(8 * c, 2 * c) + self.up3 = deconv(4 * c, c) + self.conv = nn.Conv2d(c, 3, 3, 1, 1) + + def forward(self, img0, img1, warped_img0, warped_img1, mask, flow, c0, c1): + s0 = self.down0(torch.cat((img0, img1, warped_img0, warped_img1, mask, flow), 1)) + s1 = self.down1(torch.cat((s0, c0[0], c1[0]), 1)) + s2 = self.down2(torch.cat((s1, c0[1], c1[1]), 1)) + s3 = self.down3(torch.cat((s2, c0[2], c1[2]), 1)) + x = self.up0(torch.cat((s3, c0[3], c1[3]), 1)) + x = self.up1(torch.cat((x, s2), 1)) + x = self.up2(torch.cat((x, s1), 1)) + x = self.up3(torch.cat((x, s0), 1)) + x = self.conv(x) + return torch.sigmoid(x) diff --git a/lightx2v/models/video_encoders/__init__.py b/lightx2v/models/video_encoders/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/video_encoders/hf/__init__.py b/lightx2v/models/video_encoders/hf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/video_encoders/hf/hunyuanvideo15/__init__.py b/lightx2v/models/video_encoders/hf/hunyuanvideo15/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/video_encoders/hf/hunyuanvideo15/hunyuanvideo_15_vae.py b/lightx2v/models/video_encoders/hf/hunyuanvideo15/hunyuanvideo_15_vae.py new file mode 100644 index 0000000..52f013e --- /dev/null +++ b/lightx2v/models/video_encoders/hf/hunyuanvideo15/hunyuanvideo_15_vae.py @@ -0,0 +1,910 @@ +import math +import os +from dataclasses import dataclass +from typing import Optional, Tuple, Union + +import numpy as np +import torch +import torch.distributed as dist +import torch.nn.functional as F +from diffusers.configuration_utils import ConfigMixin, register_to_config +from diffusers.models.autoencoders.vae import BaseOutput, DiagonalGaussianDistribution +from diffusers.models.modeling_outputs import AutoencoderKLOutput +from diffusers.models.modeling_utils import ModelMixin +from einops import rearrange +from torch import Tensor, nn + +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +@dataclass +class DecoderOutput(BaseOutput): + sample: torch.FloatTensor + posterior: Optional[DiagonalGaussianDistribution] = None + + +def swish(x: Tensor) -> Tensor: + """Applies the swish activation function.""" + return x * torch.sigmoid(x) + + +def forward_with_checkpointing(module, *inputs, use_checkpointing=False): + """Forward with optional gradient checkpointing.""" + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if use_checkpointing: + return torch.utils.checkpoint.checkpoint(create_custom_forward(module), *inputs, use_reentrant=False) + else: + return module(*inputs) + + +# Optimized implementation of CogVideoXSafeConv3d +# https://github.com/huggingface/diffusers/blob/c9ff360966327ace3faad3807dc871a4e5447501/src/diffusers/models/autoencoders/autoencoder_kl_cogvideox.py#L38 +class PatchCausalConv3d(nn.Conv3d): + r"""Causal Conv3d with efficient patch processing for large tensors.""" + + def find_split_indices(self, seq_len, part_num): + ideal_interval = seq_len / part_num + possible_indices = list(range(0, seq_len, self.stride[0])) + selected_indices = [] + + for i in range(1, part_num): + closest = min(possible_indices, key=lambda x: abs(x - round(i * ideal_interval))) + if closest not in selected_indices: + selected_indices.append(closest) + + merged_indices = [] + prev_idx = 0 + for idx in selected_indices: + if idx - prev_idx >= self.kernel_size[0]: + merged_indices.append(idx) + prev_idx = idx + + return merged_indices + + def forward(self, input): + T = input.shape[2] # input: NCTHW + memory_count = torch.prod(torch.tensor(input.shape)).item() * 2 / 1024**3 + if T > self.kernel_size[0] and memory_count > 2: + kernel_size = self.kernel_size[0] + part_num = int(memory_count / 2) + 1 + split_indices = self.find_split_indices(T, part_num) + input_chunks = torch.tensor_split(input, split_indices, dim=2) if len(split_indices) > 0 else [input] + if kernel_size > 1: + input_chunks = [input_chunks[0]] + [torch.cat((input_chunks[i - 1][:, :, -kernel_size + 1 :], input_chunks[i]), dim=2) for i in range(1, len(input_chunks))] + output_chunks = [] + for input_chunk in input_chunks: + output_chunks.append(super().forward(input_chunk)) + output = torch.cat(output_chunks, dim=2) + return output + else: + return super().forward(input) + + +class RMS_norm(nn.Module): + """Root Mean Square Layer Normalization for Channel-First or Last""" + + def __init__(self, dim, channel_first=True, images=True, bias=False): + super().__init__() + broadcastable_dims = (1, 1, 1) if not images else (1, 1) + shape = (dim, *broadcastable_dims) if channel_first else (dim,) + + self.channel_first = channel_first + self.scale = dim**0.5 + self.gamma = nn.Parameter(torch.ones(shape)) + self.bias = nn.Parameter(torch.zeros(shape)) if bias else 0.0 + + def forward(self, x): + return F.normalize(x, dim=(1 if self.channel_first else -1)) * self.scale * self.gamma + self.bias + + +class Conv3d(nn.Conv3d): + """Perform Conv3d on patches with memory-efficient symmetric padding.""" + + def forward(self, input): + B, C, T, H, W = input.shape + memory_count = (C * T * H * W) * 2 / 1024**3 + n_split = math.ceil(memory_count / 2) + if memory_count > 2 and input.shape[-3] % n_split == 0: + chunks = torch.chunk(input, chunks=n_split, dim=-3) + padded_chunks = [] + for i in range(len(chunks)): + if self.padding[0] > 0: + padded_chunk = F.pad( + chunks[i], + (0, 0, 0, 0, self.padding[0], self.padding[0]), + mode="constant" if self.padding_mode == "zeros" else self.padding_mode, + value=0, + ) + if i > 0: + padded_chunk[:, :, : self.padding[0]] = chunks[i - 1][:, :, -self.padding[0] :] + if i < len(chunks) - 1: + padded_chunk[:, :, -self.padding[0] :] = chunks[i + 1][:, :, : self.padding[0]] + else: + padded_chunk = chunks[i] + padded_chunks.append(padded_chunk) + padding_bak = self.padding + self.padding = (0, self.padding[1], self.padding[2]) + outputs = [] + for chunk in padded_chunks: + outputs.append(super().forward(chunk)) + self.padding = padding_bak + return torch.cat(outputs, dim=-3) + else: + return super().forward(input) + + +class CausalConv3d(nn.Module): + """Causal Conv3d with configurable padding for temporal axis.""" + + def __init__( + self, + chan_in, + chan_out, + kernel_size: Union[int, Tuple[int, int, int]], + stride: Union[int, Tuple[int, int, int]] = 1, + dilation: Union[int, Tuple[int, int, int]] = 1, + pad_mode="replicate", + disable_causal=False, + enable_patch_conv=False, + **kwargs, + ): + super().__init__() + + self.pad_mode = pad_mode + if disable_causal: + padding = (kernel_size // 2, kernel_size // 2, kernel_size // 2, kernel_size // 2, kernel_size // 2, kernel_size // 2) + else: + padding = (kernel_size // 2, kernel_size // 2, kernel_size // 2, kernel_size // 2, kernel_size - 1, 0) # W, H, T + self.time_causal_padding = padding + + if enable_patch_conv: + self.conv = PatchCausalConv3d(chan_in, chan_out, kernel_size, stride=stride, dilation=dilation, **kwargs) + else: + self.conv = nn.Conv3d(chan_in, chan_out, kernel_size, stride=stride, dilation=dilation, **kwargs) + + def forward(self, x): + x = F.pad(x, self.time_causal_padding, mode=self.pad_mode) + return self.conv(x) + + +def prepare_causal_attention_mask(n_frame: int, n_hw: int, dtype, device, batch_size: int = None): + """Prepare a causal attention mask for 3D videos. + + Args: + n_frame (int): Number of frames (temporal length). + n_hw (int): Product of height and width. + dtype: Desired mask dtype. + device: Device for the mask. + batch_size (int, optional): If set, expands for batch. + + Returns: + torch.Tensor: Causal attention mask. + """ + seq_len = n_frame * n_hw + mask = torch.full((seq_len, seq_len), float("-inf"), dtype=dtype, device=device) + for i in range(seq_len): + i_frame = i // n_hw + mask[i, : (i_frame + 1) * n_hw] = 0 + if batch_size is not None: + mask = mask.unsqueeze(0).expand(batch_size, -1, -1) + return mask + + +class AttnBlock(nn.Module): + """Self-attention block for 3D video tensors.""" + + def __init__(self, in_channels: int): + super().__init__() + self.in_channels = in_channels + + self.norm = RMS_norm(in_channels, images=False) + + self.q = Conv3d(in_channels, in_channels, kernel_size=1) + self.k = Conv3d(in_channels, in_channels, kernel_size=1) + self.v = Conv3d(in_channels, in_channels, kernel_size=1) + self.proj_out = Conv3d(in_channels, in_channels, kernel_size=1) + + def attention(self, h_: Tensor) -> Tensor: + h_ = self.norm(h_) + q = self.q(h_) + k = self.k(h_) + v = self.v(h_) + + b, c, f, h, w = q.shape + q = rearrange(q, "b c f h w -> b 1 (f h w) c").contiguous() + k = rearrange(k, "b c f h w -> b 1 (f h w) c").contiguous() + v = rearrange(v, "b c f h w -> b 1 (f h w) c").contiguous() + attention_mask = prepare_causal_attention_mask(f, h * w, h_.dtype, h_.device, batch_size=b) + h_ = nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=attention_mask.unsqueeze(1)) + + return rearrange(h_, "b 1 (f h w) c -> b c f h w", f=f, h=h, w=w, c=c, b=b) + + def forward(self, x: Tensor) -> Tensor: + return x + self.proj_out(self.attention(x)) + + +class ResnetBlock(nn.Module): + """ResNet-style block for 3D video tensors.""" + + def __init__(self, in_channels: int, out_channels: int): + super().__init__() + self.in_channels = in_channels + out_channels = in_channels if out_channels is None else out_channels + self.out_channels = out_channels + + self.norm1 = RMS_norm(in_channels, images=False) + self.conv1 = CausalConv3d(in_channels, out_channels, kernel_size=3) + + self.norm2 = RMS_norm(out_channels, images=False) + self.conv2 = CausalConv3d(out_channels, out_channels, kernel_size=3) + if self.in_channels != self.out_channels: + self.nin_shortcut = Conv3d(in_channels, out_channels, kernel_size=1, stride=1, padding=0) + + def forward(self, x): + h = x + h = self.norm1(h) + h = swish(h) + h = self.conv1(h) + + h = self.norm2(h) + h = swish(h) + h = self.conv2(h) + + if self.in_channels != self.out_channels: + x = self.nin_shortcut(x) + return x + h + + +class Downsample(nn.Module): + def __init__(self, in_channels: int, out_channels: int, add_temporal_downsample: bool = True): + super().__init__() + factor = 2 * 2 * 2 if add_temporal_downsample else 1 * 2 * 2 + assert out_channels % factor == 0 + self.conv = CausalConv3d(in_channels, out_channels // factor, kernel_size=3) + self.add_temporal_downsample = add_temporal_downsample + self.group_size = factor * in_channels // out_channels + + def forward(self, x: Tensor): + r1 = 2 if self.add_temporal_downsample else 1 + h = self.conv(x) + if self.add_temporal_downsample: + h_first = h[:, :, :1, :, :] + h_first = rearrange(h_first, "b c f (h r2) (w r3) -> b (r2 r3 c) f h w", r2=2, r3=2) + h_first = torch.cat([h_first, h_first], dim=1) + h_next = h[:, :, 1:, :, :] + h_next = rearrange(h_next, "b c (f r1) (h r2) (w r3) -> b (r1 r2 r3 c) f h w", r1=r1, r2=2, r3=2) + h = torch.cat([h_first, h_next], dim=2) + # shortcut computation + x_first = x[:, :, :1, :, :] + x_first = rearrange(x_first, "b c f (h r2) (w r3) -> b (r2 r3 c) f h w", r2=2, r3=2) + B, C, T, H, W = x_first.shape + x_first = x_first.view(B, h.shape[1], self.group_size // 2, T, H, W).mean(dim=2) + + x_next = x[:, :, 1:, :, :] + x_next = rearrange(x_next, "b c (f r1) (h r2) (w r3) -> b (r1 r2 r3 c) f h w", r1=r1, r2=2, r3=2) + B, C, T, H, W = x_next.shape + x_next = x_next.view(B, h.shape[1], self.group_size, T, H, W).mean(dim=2) + shortcut = torch.cat([x_first, x_next], dim=2) + else: + h = rearrange(h, "b c (f r1) (h r2) (w r3) -> b (r1 r2 r3 c) f h w", r1=r1, r2=2, r3=2) + shortcut = rearrange(x, "b c (f r1) (h r2) (w r3) -> b (r1 r2 r3 c) f h w", r1=r1, r2=2, r3=2) + B, C, T, H, W = shortcut.shape + shortcut = shortcut.view(B, h.shape[1], self.group_size, T, H, W).mean(dim=2) + + return h + shortcut + + +class Upsample(nn.Module): + """Hierarchical upsampling with temporal/ spatial support.""" + + def __init__(self, in_channels: int, out_channels: int, add_temporal_upsample: bool = True): + super().__init__() + factor = 2 * 2 * 2 if add_temporal_upsample else 1 * 2 * 2 + self.conv = CausalConv3d(in_channels, out_channels * factor, kernel_size=3) + self.add_temporal_upsample = add_temporal_upsample + self.repeats = factor * out_channels // in_channels + + def forward(self, x: Tensor): + r1 = 2 if self.add_temporal_upsample else 1 + h = self.conv(x) + if self.add_temporal_upsample: + h_first = h[:, :, :1, :, :] + h_first = rearrange(h_first, "b (r2 r3 c) f h w -> b c f (h r2) (w r3)", r2=2, r3=2) + h_first = h_first[:, : h_first.shape[1] // 2] + h_next = h[:, :, 1:, :, :] + h_next = rearrange(h_next, "b (r1 r2 r3 c) f h w -> b c (f r1) (h r2) (w r3)", r1=r1, r2=2, r3=2) + h = torch.cat([h_first, h_next], dim=2) + + # shortcut computation + x_first = x[:, :, :1, :, :] + x_first = rearrange(x_first, "b (r2 r3 c) f h w -> b c f (h r2) (w r3)", r2=2, r3=2) + x_first = x_first.repeat_interleave(repeats=self.repeats // 2, dim=1) + + x_next = x[:, :, 1:, :, :] + x_next = rearrange(x_next, "b (r1 r2 r3 c) f h w -> b c (f r1) (h r2) (w r3)", r1=r1, r2=2, r3=2) + x_next = x_next.repeat_interleave(repeats=self.repeats, dim=1) + shortcut = torch.cat([x_first, x_next], dim=2) + + else: + h = rearrange(h, "b (r1 r2 r3 c) f h w -> b c (f r1) (h r2) (w r3)", r1=r1, r2=2, r3=2) + shortcut = x.repeat_interleave(repeats=self.repeats, dim=1) + shortcut = rearrange(shortcut, "b (r1 r2 r3 c) f h w -> b c (f r1) (h r2) (w r3)", r1=r1, r2=2, r3=2) + return h + shortcut + + +class Encoder(nn.Module): + """Hierarchical video encoder with temporal and spatial factorization.""" + + def __init__( + self, + in_channels: int, + z_channels: int, + block_out_channels: Tuple[int, ...], + num_res_blocks: int, + ffactor_spatial: int, + ffactor_temporal: int, + downsample_match_channel: bool = True, + ): + super().__init__() + assert block_out_channels[-1] % (2 * z_channels) == 0 + + self.z_channels = z_channels + self.block_out_channels = block_out_channels + self.num_res_blocks = num_res_blocks + + # downsampling + self.conv_in = CausalConv3d(in_channels, block_out_channels[0], kernel_size=3) + + self.down = nn.ModuleList() + block_in = block_out_channels[0] + for i_level, ch in enumerate(block_out_channels): + block = nn.ModuleList() + block_out = ch + for _ in range(self.num_res_blocks): + block.append(ResnetBlock(in_channels=block_in, out_channels=block_out)) + block_in = block_out + down = nn.Module() + down.block = block + + add_spatial_downsample = bool(i_level < np.log2(ffactor_spatial)) + add_temporal_downsample = add_spatial_downsample and bool(i_level >= np.log2(ffactor_spatial // ffactor_temporal)) + if add_spatial_downsample or add_temporal_downsample: + assert i_level < len(block_out_channels) - 1 + block_out = block_out_channels[i_level + 1] if downsample_match_channel else block_in + down.downsample = Downsample(block_in, block_out, add_temporal_downsample) + block_in = block_out + self.down.append(down) + + # middle + self.mid = nn.Module() + self.mid.block_1 = ResnetBlock(in_channels=block_in, out_channels=block_in) + self.mid.attn_1 = AttnBlock(block_in) + self.mid.block_2 = ResnetBlock(in_channels=block_in, out_channels=block_in) + + # end + self.norm_out = RMS_norm(block_in, images=False) + self.conv_out = CausalConv3d(block_in, 2 * z_channels, kernel_size=3) + + self.gradient_checkpointing = False + + def forward(self, x: Tensor) -> Tensor: + """Forward pass through the encoder.""" + use_checkpointing = bool(self.training and self.gradient_checkpointing) + + # downsampling + h = self.conv_in(x) + for i_level in range(len(self.block_out_channels)): + for i_block in range(self.num_res_blocks): + h = forward_with_checkpointing(self.down[i_level].block[i_block], h, use_checkpointing=use_checkpointing) + if hasattr(self.down[i_level], "downsample"): + h = forward_with_checkpointing(self.down[i_level].downsample, h, use_checkpointing=use_checkpointing) + + # middle + h = forward_with_checkpointing(self.mid.block_1, h, use_checkpointing=use_checkpointing) + h = forward_with_checkpointing(self.mid.attn_1, h, use_checkpointing=use_checkpointing) + h = forward_with_checkpointing(self.mid.block_2, h, use_checkpointing=use_checkpointing) + + # end + group_size = self.block_out_channels[-1] // (2 * self.z_channels) + shortcut = rearrange(h, "b (c r) f h w -> b c r f h w", r=group_size).mean(dim=2) + h = self.norm_out(h) + h = swish(h) + h = self.conv_out(h) + h += shortcut + return h + + +class Decoder(nn.Module): + """Hierarchical video decoder with upsampling factories.""" + + def __init__( + self, + z_channels: int, + out_channels: int, + block_out_channels: Tuple[int, ...], + num_res_blocks: int, + ffactor_spatial: int, + ffactor_temporal: int, + upsample_match_channel: bool = True, + ): + super().__init__() + assert block_out_channels[0] % z_channels == 0 + + self.z_channels = z_channels + self.block_out_channels = block_out_channels + self.num_res_blocks = num_res_blocks + + block_in = block_out_channels[0] + self.conv_in = CausalConv3d(z_channels, block_in, kernel_size=3) + + # middle + self.mid = nn.Module() + self.mid.block_1 = ResnetBlock(in_channels=block_in, out_channels=block_in) + self.mid.attn_1 = AttnBlock(block_in) + self.mid.block_2 = ResnetBlock(in_channels=block_in, out_channels=block_in) + + # upsampling + self.up = nn.ModuleList() + for i_level, ch in enumerate(block_out_channels): + block = nn.ModuleList() + block_out = ch + for _ in range(self.num_res_blocks + 1): + block.append(ResnetBlock(in_channels=block_in, out_channels=block_out)) + block_in = block_out + up = nn.Module() + up.block = block + + add_spatial_upsample = bool(i_level < np.log2(ffactor_spatial)) + add_temporal_upsample = bool(i_level < np.log2(ffactor_temporal)) + if add_spatial_upsample or add_temporal_upsample: + assert i_level < len(block_out_channels) - 1 + block_out = block_out_channels[i_level + 1] if upsample_match_channel else block_in + up.upsample = Upsample(block_in, block_out, add_temporal_upsample) + block_in = block_out + self.up.append(up) + + # end + self.norm_out = RMS_norm(block_in, images=False) + self.conv_out = CausalConv3d(block_in, out_channels, kernel_size=3) + + self.gradient_checkpointing = False + + def forward(self, z: Tensor) -> Tensor: + """Forward pass through the decoder.""" + use_checkpointing = bool(self.training and self.gradient_checkpointing) + + # z to block_in + repeats = self.block_out_channels[0] // (self.z_channels) + h = self.conv_in(z) + z.repeat_interleave(repeats=repeats, dim=1) + + # middle + h = forward_with_checkpointing(self.mid.block_1, h, use_checkpointing=use_checkpointing) + h = forward_with_checkpointing(self.mid.attn_1, h, use_checkpointing=use_checkpointing) + h = forward_with_checkpointing(self.mid.block_2, h, use_checkpointing=use_checkpointing) + + # upsampling + for i_level in range(len(self.block_out_channels)): + for i_block in range(self.num_res_blocks + 1): + h = forward_with_checkpointing(self.up[i_level].block[i_block], h, use_checkpointing=use_checkpointing) + if hasattr(self.up[i_level], "upsample"): + h = forward_with_checkpointing(self.up[i_level].upsample, h, use_checkpointing=use_checkpointing) + + # end + h = self.norm_out(h) + h = swish(h) + h = self.conv_out(h) + return h + + +class AutoencoderKLConv3D(ModelMixin, ConfigMixin): + """KL regularized 3D Conv VAE with advanced tiling and slicing strategies.""" + + _supports_gradient_checkpointing = True + + @register_to_config + def __init__( + self, + in_channels: int, + out_channels: int, + latent_channels: int, + block_out_channels: Tuple[int, ...], + layers_per_block: int, + ffactor_spatial: int, + ffactor_temporal: int, + sample_size: int, + sample_tsize: int, + scaling_factor: float = None, + shift_factor: Optional[float] = None, + downsample_match_channel: bool = True, + upsample_match_channel: bool = True, + spatial_compression_ratio: int = 16, + time_compression_ratio: int = 4, + ): + super().__init__() + self.ffactor_spatial = ffactor_spatial + self.ffactor_temporal = ffactor_temporal + self.scaling_factor = scaling_factor + self.shift_factor = shift_factor + + self.encoder = Encoder( + in_channels=in_channels, + z_channels=latent_channels, + block_out_channels=block_out_channels, + num_res_blocks=layers_per_block, + ffactor_spatial=ffactor_spatial, + ffactor_temporal=ffactor_temporal, + downsample_match_channel=downsample_match_channel, + ) + self.decoder = Decoder( + z_channels=latent_channels, + out_channels=out_channels, + block_out_channels=list(reversed(block_out_channels)), + num_res_blocks=layers_per_block, + ffactor_spatial=ffactor_spatial, + ffactor_temporal=ffactor_temporal, + upsample_match_channel=upsample_match_channel, + ) + + self.use_slicing = False + self.use_spatial_tiling = False + self.use_temporal_tiling = False + + # only relevant if vae tiling is enabled + self.tile_sample_min_size = sample_size + self.tile_latent_min_size = sample_size // ffactor_spatial + self.tile_sample_min_tsize = sample_tsize + self.tile_latent_min_tsize = sample_tsize // ffactor_temporal + self.tile_overlap_factor = 0.25 + + def _set_gradient_checkpointing(self, module, value=False): + """Enable or disable gradient checkpointing on encoder and decoder.""" + if isinstance(module, (Encoder, Decoder)): + module.gradient_checkpointing = value + + def enable_temporal_tiling(self, use_tiling: bool = True): + self.use_temporal_tiling = use_tiling + + def disable_temporal_tiling(self): + self.enable_temporal_tiling(False) + + def enable_spatial_tiling(self, use_tiling: bool = True): + self.use_spatial_tiling = use_tiling + + def disable_spatial_tiling(self): + self.enable_spatial_tiling(False) + + def enable_tiling(self, use_tiling: bool = True): + self.enable_spatial_tiling(use_tiling) + + def disable_tiling(self): + self.disable_spatial_tiling() + + def enable_slicing(self): + self.use_slicing = True + + def disable_slicing(self): + self.use_slicing = False + + def blend_h(self, a: torch.Tensor, b: torch.Tensor, blend_extent: int): + """Blend tensor b horizontally into a at blend_extent region.""" + blend_extent = min(a.shape[-1], b.shape[-1], blend_extent) + for x in range(blend_extent): + b[:, :, :, :, x] = a[:, :, :, :, -blend_extent + x] * (1 - x / blend_extent) + b[:, :, :, :, x] * (x / blend_extent) + return b + + def blend_v(self, a: torch.Tensor, b: torch.Tensor, blend_extent: int): + """Blend tensor b vertically into a at blend_extent region.""" + blend_extent = min(a.shape[-2], b.shape[-2], blend_extent) + for y in range(blend_extent): + b[:, :, :, y, :] = a[:, :, :, -blend_extent + y, :] * (1 - y / blend_extent) + b[:, :, :, y, :] * (y / blend_extent) + return b + + def blend_t(self, a: torch.Tensor, b: torch.Tensor, blend_extent: int): + """Blend tensor b temporally into a at blend_extent region.""" + blend_extent = min(a.shape[-3], b.shape[-3], blend_extent) + for x in range(blend_extent): + b[:, :, x, :, :] = a[:, :, -blend_extent + x, :, :] * (1 - x / blend_extent) + b[:, :, x, :, :] * (x / blend_extent) + return b + + def spatial_tiled_encode(self, x: torch.Tensor): + """Tiled spatial encoding for large inputs via overlapping.""" + B, C, T, H, W = x.shape + overlap_size = int(self.tile_sample_min_size * (1 - self.tile_overlap_factor)) + blend_extent = int(self.tile_latent_min_size * self.tile_overlap_factor) + row_limit = self.tile_latent_min_size - blend_extent + + rows = [] + for i in range(0, H, overlap_size): + row = [] + for j in range(0, W, overlap_size): + tile = x[:, :, :, i : i + self.tile_sample_min_size, j : j + self.tile_sample_min_size] + tile = self.encoder(tile) + row.append(tile) + rows.append(row) + result_rows = [] + for i, row in enumerate(rows): + result_row = [] + for j, tile in enumerate(row): + if i > 0: + tile = self.blend_v(rows[i - 1][j], tile, blend_extent) + if j > 0: + tile = self.blend_h(row[j - 1], tile, blend_extent) + result_row.append(tile[:, :, :, :row_limit, :row_limit]) + result_rows.append(torch.cat(result_row, dim=-1)) + moments = torch.cat(result_rows, dim=-2) + return moments + + def temporal_tiled_encode(self, x: torch.Tensor): + """Tiled temporal encoding for large video sequences.""" + B, C, T, H, W = x.shape + overlap_size = int(self.tile_sample_min_tsize * (1 - self.tile_overlap_factor)) + blend_extent = int(self.tile_latent_min_tsize * self.tile_overlap_factor) + t_limit = self.tile_latent_min_tsize - blend_extent + + row = [] + for i in range(0, T, overlap_size): + tile = x[:, :, i : i + self.tile_sample_min_tsize + 1, :, :] + if self.use_spatial_tiling and (tile.shape[-1] > self.tile_sample_min_size or tile.shape[-2] > self.tile_sample_min_size): + tile = self.spatial_tiled_encode(tile) + else: + tile = self.encoder(tile) + if i > 0: + tile = tile[:, :, 1:, :, :] + row.append(tile) + result_row = [] + for i, tile in enumerate(row): + if i > 0: + tile = self.blend_t(row[i - 1], tile, blend_extent) + result_row.append(tile[:, :, :t_limit, :, :]) + else: + result_row.append(tile[:, :, : t_limit + 1, :, :]) + moments = torch.cat(result_row, dim=-3) + return moments + + def spatial_tiled_decode(self, z: torch.Tensor): + """Tiled spatial decoding for large latent maps.""" + B, C, T, H, W = z.shape + overlap_size = int(self.tile_latent_min_size * (1 - self.tile_overlap_factor)) + blend_extent = int(self.tile_sample_min_size * self.tile_overlap_factor) + row_limit = self.tile_sample_min_size - blend_extent + + rows = [] + for i in range(0, H, overlap_size): + row = [] + for j in range(0, W, overlap_size): + tile = z[:, :, :, i : i + self.tile_latent_min_size, j : j + self.tile_latent_min_size] + decoded = self.decoder(tile) + row.append(decoded) + rows.append(row) + + result_rows = [] + for i, row in enumerate(rows): + result_row = [] + for j, tile in enumerate(row): + if i > 0: + tile = self.blend_v(rows[i - 1][j], tile, blend_extent) + if j > 0: + tile = self.blend_h(row[j - 1], tile, blend_extent) + result_row.append(tile[:, :, :, :row_limit, :row_limit]) + result_rows.append(torch.cat(result_row, dim=-1)) + dec = torch.cat(result_rows, dim=-2) + return dec + + def temporal_tiled_decode(self, z: torch.Tensor): + """Tiled temporal decoding for long sequence latents.""" + B, C, T, H, W = z.shape + overlap_size = int(self.tile_latent_min_tsize * (1 - self.tile_overlap_factor)) + blend_extent = int(self.tile_sample_min_tsize * self.tile_overlap_factor) + t_limit = self.tile_sample_min_tsize - blend_extent + assert 0 < overlap_size < self.tile_latent_min_tsize + + row = [] + for i in range(0, T, overlap_size): + tile = z[:, :, i : i + self.tile_latent_min_tsize + 1, :, :] + if self.use_spatial_tiling and (tile.shape[-1] > self.tile_latent_min_size or tile.shape[-2] > self.tile_latent_min_size): + decoded = self.spatial_tiled_decode(tile) + else: + decoded = self.decoder(tile) + if i > 0: + decoded = decoded[:, :, 1:, :, :] + row.append(decoded) + + result_row = [] + for i, tile in enumerate(row): + if i > 0: + tile = self.blend_t(row[i - 1], tile, blend_extent) + result_row.append(tile[:, :, :t_limit, :, :]) + else: + result_row.append(tile[:, :, : t_limit + 1, :, :]) + dec = torch.cat(result_row, dim=-3) + return dec + + @torch.no_grad() + def encode(self, x: Tensor, return_dict: bool = True): + if self.cpu_offload: + self.encoder = self.encoder.to(AI_DEVICE) + + def _encode(x): + if self.use_temporal_tiling and x.shape[-3] > self.tile_sample_min_tsize: + return self.temporal_tiled_encode(x) + if self.use_spatial_tiling and (x.shape[-1] > self.tile_sample_min_size or x.shape[-2] > self.tile_sample_min_size): + return self.spatial_tiled_encode(x) + return self.encoder(x) + + assert len(x.shape) == 5 # (B, C, T, H, W) + + if self.use_slicing and x.shape[0] > 1: + encoded_slices = [_encode(x_slice) for x_slice in x.split(1)] + h = torch.cat(encoded_slices) + else: + h = _encode(x) + posterior = DiagonalGaussianDistribution(h) + if self.cpu_offload: + self.encoder = self.encoder.to("cpu") + if not return_dict: + return (posterior,) + + return AutoencoderKLOutput(latent_dist=posterior) + + @torch.no_grad() + def decode(self, z: Tensor, return_dict: bool = True, generator=None): + if self.cpu_offload: + self.decoder = self.decoder.to(AI_DEVICE) + + def _decode(z): + if self.use_temporal_tiling and z.shape[-3] > self.tile_latent_min_tsize: + return self.temporal_tiled_decode(z) + if self.use_spatial_tiling and (z.shape[-1] > self.tile_latent_min_size or z.shape[-2] > self.tile_latent_min_size): + return self.spatial_tiled_decode(z) + return self.decoder(z) + + if self.use_slicing and z.shape[0] > 1: + decoded_slices = [_decode(z_slice) for z_slice in z.split(1)] + decoded = torch.cat(decoded_slices) + else: + decoded = _decode(z) + if self.cpu_offload: + self.decoder = self.decoder.to("cpu") + if not return_dict: + return (decoded,) + + return DecoderOutput(sample=decoded) + + @torch.no_grad() + def forward(self, sample: torch.Tensor, sample_posterior: bool = False, return_posterior: bool = True, return_dict: bool = True): + """Forward autoencoder pass. Returns both reconstruction and optionally the posterior.""" + posterior = self.encode(sample).latent_dist + z = posterior.sample() if sample_posterior else posterior.mode() + dec = self.decode(z).sample + return DecoderOutput(sample=dec, posterior=posterior) if return_dict else (dec, posterior) + + +class HunyuanVideo15VAE: + def __init__(self, checkpoint_path=None, dtype=torch.float16, device="cuda", cpu_offload=False, parallel=False): + self.vae = AutoencoderKLConv3D.from_pretrained(os.path.join(checkpoint_path, "vae")).to(dtype).to(device) + self.vae.cpu_offload = cpu_offload + self.parallel = parallel + self.world_size_h, self.world_size_w = None, None + + @torch.no_grad() + def encode(self, x): + return self.vae.encode(x).latent_dist.mode() * self.vae.config.scaling_factor + + @torch.no_grad() + def decode(self, z): + z = z / self.vae.config.scaling_factor + + self.vae.enable_tiling() + if self.parallel and self.world_size_h is not None and self.world_size_w is not None: + video_frames = self.decode_dist_2d(z, self.world_size_h, self.world_size_w) + self.world_size_h, self.world_size_w = None, None + else: + video_frames = self.vae.decode(z, return_dict=False)[0] + self.vae.disable_tiling() + return video_frames + + @torch.no_grad() + def decode_dist_2d(self, z, world_size_h, world_size_w): + cur_rank = dist.get_rank() + cur_rank_h = cur_rank // world_size_w + cur_rank_w = cur_rank % world_size_w + total_h = z.shape[3] + total_w = z.shape[4] + + chunk_h = total_h // world_size_h + chunk_w = total_w // world_size_w + + padding_size = 1 + + # Calculate H dimension slice + if cur_rank_h == 0: + h_start = 0 + h_end = chunk_h + 2 * padding_size + elif cur_rank_h == world_size_h - 1: + h_start = total_h - (chunk_h + 2 * padding_size) + h_end = total_h + else: + h_start = cur_rank_h * chunk_h - padding_size + h_end = (cur_rank_h + 1) * chunk_h + padding_size + + # Calculate W dimension slice + if cur_rank_w == 0: + w_start = 0 + w_end = chunk_w + 2 * padding_size + elif cur_rank_w == world_size_w - 1: + w_start = total_w - (chunk_w + 2 * padding_size) + w_end = total_w + else: + w_start = cur_rank_w * chunk_w - padding_size + w_end = (cur_rank_w + 1) * chunk_w + padding_size + + # Extract the latent chunk for this process + zs_chunk = z[:, :, :, h_start:h_end, w_start:w_end].contiguous() + + # Decode the chunk + images_chunk = self.vae.decode(zs_chunk, return_dict=False)[0] + + # Remove padding from decoded chunk + spatial_ratio = 16 + if cur_rank_h == 0: + decoded_h_start = 0 + decoded_h_end = chunk_h * spatial_ratio + elif cur_rank_h == world_size_h - 1: + decoded_h_start = images_chunk.shape[3] - chunk_h * spatial_ratio + decoded_h_end = images_chunk.shape[3] + else: + decoded_h_start = padding_size * spatial_ratio + decoded_h_end = images_chunk.shape[3] - padding_size * spatial_ratio + + if cur_rank_w == 0: + decoded_w_start = 0 + decoded_w_end = chunk_w * spatial_ratio + elif cur_rank_w == world_size_w - 1: + decoded_w_start = images_chunk.shape[4] - chunk_w * spatial_ratio + decoded_w_end = images_chunk.shape[4] + else: + decoded_w_start = padding_size * spatial_ratio + decoded_w_end = images_chunk.shape[4] - padding_size * spatial_ratio + + images_chunk = images_chunk[:, :, :, decoded_h_start:decoded_h_end, decoded_w_start:decoded_w_end].contiguous() + + # Gather all chunks + total_processes = world_size_h * world_size_w + full_images = [torch.empty_like(images_chunk) for _ in range(total_processes)] + + dist.all_gather(full_images, images_chunk) + + self.device_synchronize() + + # Reconstruct the full image tensor + image_rows = [] + for h_idx in range(world_size_h): + image_cols = [] + for w_idx in range(world_size_w): + process_idx = h_idx * world_size_w + w_idx + image_cols.append(full_images[process_idx]) + image_rows.append(torch.cat(image_cols, dim=4)) + + images = torch.cat(image_rows, dim=3) + + return images + + def device_synchronize( + self, + ): + torch_device_module.synchronize() + + +if __name__ == "__main__": + vae = HunyuanVideo15VAE(checkpoint_path="/data/nvme1/yongyang/models/HunyuanVideo-1.5/ckpts/hunyuanvideo-1.5", dtype=torch.float16, device="cuda") + z = torch.randn(1, 32, 31, 30, 53, dtype=torch.float16, device="cuda") + video_frames = vae.decode(z) + print(video_frames.shape) diff --git a/lightx2v/models/video_encoders/hf/hunyuanvideo15/lighttae_hy15.py b/lightx2v/models/video_encoders/hf/hunyuanvideo15/lighttae_hy15.py new file mode 100644 index 0000000..74b319e --- /dev/null +++ b/lightx2v/models/video_encoders/hf/hunyuanvideo15/lighttae_hy15.py @@ -0,0 +1,17 @@ +import torch +import torch.nn as nn + +from lightx2v.models.video_encoders.hf.tae import TAEHV + + +class LightTaeHy15(nn.Module): + def __init__(self, vae_path="lighttae_hy1_5.pth", dtype=torch.bfloat16): + super().__init__() + self.dtype = dtype + self.taehv = TAEHV(vae_path, model_type="hy15", latent_channels=32, patch_size=2).to(self.dtype) + self.scaling_factor = 1.03682 + + @torch.no_grad() + def decode(self, latents, parallel=True, show_progress_bar=True, skip_trim=False): + latents = latents / self.scaling_factor + return self.taehv.decode_video(latents.transpose(1, 2).to(self.dtype), parallel, show_progress_bar).transpose(1, 2) diff --git a/lightx2v/models/video_encoders/hf/qwen_image/__init__.py b/lightx2v/models/video_encoders/hf/qwen_image/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/video_encoders/hf/qwen_image/vae.py b/lightx2v/models/video_encoders/hf/qwen_image/vae.py new file mode 100644 index 0000000..92595a8 --- /dev/null +++ b/lightx2v/models/video_encoders/hf/qwen_image/vae.py @@ -0,0 +1,140 @@ +import gc +import json +import os +from typing import Optional + +import torch + +from lightx2v_platform.base.global_var import AI_DEVICE + +try: + from diffusers import AutoencoderKLQwenImage + from diffusers.image_processor import VaeImageProcessor +except ImportError: + AutoencoderKLQwenImage = None + VaeImageProcessor = None + + +# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion_img2img.retrieve_latents +def retrieve_latents(encoder_output: torch.Tensor, generator: Optional[torch.Generator] = None, sample_mode: str = "sample"): + if hasattr(encoder_output, "latent_dist") and sample_mode == "sample": + return encoder_output.latent_dist.sample(generator) + elif hasattr(encoder_output, "latent_dist") and sample_mode == "argmax": + return encoder_output.latent_dist.mode() + elif hasattr(encoder_output, "latents"): + return encoder_output.latents + else: + raise AttributeError("Could not access latents of provided encoder_output") + + +class AutoencoderKLQwenImageVAE: + def __init__(self, config): + self.config = config + + self.cpu_offload = config.get("cpu_offload", False) + if self.cpu_offload: + self.device = torch.device("cpu") + else: + self.device = torch.device(AI_DEVICE) + self.dtype = torch.bfloat16 + self.latent_channels = config["vae_z_dim"] + self.load() + + def load(self): + self.model = AutoencoderKLQwenImage.from_pretrained(os.path.join(self.config["model_path"], "vae")).to(self.device).to(self.dtype) + self.image_processor = VaeImageProcessor(vae_scale_factor=self.config["vae_scale_factor"] * 2) + with open(os.path.join(self.config["model_path"], "vae", "config.json"), "r") as f: + vae_config = json.load(f) + self.vae_scale_factor = 2 ** len(vae_config["temperal_downsample"]) if "temperal_downsample" in vae_config else 8 + + @staticmethod + def _unpack_latents(latents, height, width, vae_scale_factor): + batchsize, num_patches, channels = latents.shape + + # VAE applies 8x compression on images but we must also account for packing which requires + # latent height and width to be divisible by 2. + height = 2 * (int(height) // (vae_scale_factor * 2)) + width = 2 * (int(width) // (vae_scale_factor * 2)) + + latents = latents.view(batchsize, height // 2, width // 2, channels // 4, 2, 2) + latents = latents.permute(0, 3, 1, 4, 2, 5) + + latents = latents.reshape(batchsize, channels // (2 * 2), 1, height, width) + + return latents + + @torch.no_grad() + def decode(self, latents, input_info): + if self.cpu_offload: + self.model.to(torch.device("cuda")) + if self.config["task"] == "t2i": + width, height = self.config["aspect_ratios"][self.config["aspect_ratio"]] + elif self.config["task"] == "i2i": + width, height = input_info.auto_width, input_info.auto_hight + latents = self._unpack_latents(latents, height, width, self.config["vae_scale_factor"]) + latents = latents.to(self.dtype) + latents_mean = torch.tensor(self.config["vae_latents_mean"]).view(1, self.config["vae_z_dim"], 1, 1, 1).to(latents.device, latents.dtype) + latents_std = 1.0 / torch.tensor(self.config["vae_latents_std"]).view(1, self.config["vae_z_dim"], 1, 1, 1).to(latents.device, latents.dtype) + latents = latents / latents_std + latents_mean + images = self.model.decode(latents, return_dict=False)[0][:, :, 0] + images = self.image_processor.postprocess(images, output_type="pil") + if self.cpu_offload: + self.model.to(torch.device("cpu")) + torch.cuda.empty_cache() + gc.collect() + return images + + @staticmethod + # Copied from diffusers.pipelines.qwenimage.pipeline_qwenimage.QwenImagePipeline._pack_latents + def _pack_latents(latents, batchsize, num_channels_latents, height, width): + latents = latents.view(batchsize, num_channels_latents, height // 2, 2, width // 2, 2) + latents = latents.permute(0, 2, 4, 1, 3, 5) + latents = latents.reshape(batchsize, (height // 2) * (width // 2), num_channels_latents * 4) + return latents + + def _encode_vae_image(self, image: torch.Tensor, generator: torch.Generator): + if isinstance(generator, list): + image_latents = [retrieve_latents(self.model.encode(image[i : i + 1]), generator=generator[i], sample_mode="argmax") for i in range(image.shape[0])] + image_latents = torch.cat(image_latents, dim=0) + else: + image_latents = retrieve_latents(self.model.encode(image), generator=generator, sample_mode="argmax") + latents_mean = torch.tensor(self.model.config["latents_mean"]).view(1, self.latent_channels, 1, 1, 1).to(image_latents.device, image_latents.dtype) + latents_std = torch.tensor(self.model.config["latents_std"]).view(1, self.latent_channels, 1, 1, 1).to(image_latents.device, image_latents.dtype) + image_latents = (image_latents - latents_mean) / latents_std + + return image_latents + + @torch.no_grad() + def encode_vae_image(self, image, input_info): + if self.config["task"] == "i2i": + self.generator = torch.Generator().manual_seed(input_info.seed) + elif self.config["task"] == "t2i": + self.generator = torch.Generator(device="cuda").manual_seed(input_info.seed) + + if self.cpu_offload: + self.model.to(torch.device("cuda")) + + num_channels_latents = self.config["transformer_in_channels"] // 4 + image = image.to(self.model.device).to(self.dtype) + + if image.shape[1] != self.latent_channels: + image_latents = self._encode_vae_image(image=image, generator=self.generator) + else: + image_latents = image + if self.config["batchsize"] > image_latents.shape[0] and self.config["batchsize"] % image_latents.shape[0] == 0: + # expand init_latents for batchsize + additional_image_per_prompt = self.config["batchsize"] // image_latents.shape[0] + image_latents = torch.cat([image_latents] * additional_image_per_prompt, dim=0) + elif self.config["batchsize"] > image_latents.shape[0] and self.config["batchsize"] % image_latents.shape[0] != 0: + raise ValueError(f"Cannot duplicate `image` of batch size {image_latents.shape[0]} to {self.config['batchsize']} text prompts.") + else: + image_latents = torch.cat([image_latents], dim=0) + + image_latent_height, image_latent_width = image_latents.shape[3:] + image_latents = self._pack_latents(image_latents, self.config["batchsize"], num_channels_latents, image_latent_height, image_latent_width) + + if self.cpu_offload: + self.model.to(torch.device("cpu")) + torch.cuda.empty_cache() + gc.collect() + return image_latents diff --git a/lightx2v/models/video_encoders/hf/tae.py b/lightx2v/models/video_encoders/hf/tae.py new file mode 100644 index 0000000..fcf63e2 --- /dev/null +++ b/lightx2v/models/video_encoders/hf/tae.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python3 +""" +Tiny AutoEncoder for Hunyuan Video +(DNN for encoding / decoding videos to Hunyuan Video's latent space) +""" + +import os +from collections import namedtuple + +import torch +import torch.nn as nn +import torch.nn.functional as F +from safetensors.torch import load_file +from tqdm.auto import tqdm + +DecoderResult = namedtuple("DecoderResult", ("frame", "memory")) +TWorkItem = namedtuple("TWorkItem", ("input_tensor", "block_index")) + + +def conv(n_in, n_out, **kwargs): + return nn.Conv2d(n_in, n_out, 3, padding=1, **kwargs) + + +class Clamp(nn.Module): + def forward(self, x): + return torch.tanh(x / 3) * 3 + + +class MemBlock(nn.Module): + def __init__(self, n_in, n_out, act_func): + super().__init__() + self.conv = nn.Sequential(conv(n_in * 2, n_out), act_func, conv(n_out, n_out), act_func, conv(n_out, n_out)) + self.skip = nn.Conv2d(n_in, n_out, 1, bias=False) if n_in != n_out else nn.Identity() + self.act = act_func + + def forward(self, x, past): + return self.act(self.conv(torch.cat([x, past], 1)) + self.skip(x)) + + +class TPool(nn.Module): + def __init__(self, n_f, stride): + super().__init__() + self.stride = stride + self.conv = nn.Conv2d(n_f * stride, n_f, 1, bias=False) + + def forward(self, x): + _NT, C, H, W = x.shape + return self.conv(x.reshape(-1, self.stride * C, H, W)) + + +class TGrow(nn.Module): + def __init__(self, n_f, stride): + super().__init__() + self.stride = stride + self.conv = nn.Conv2d(n_f, n_f * stride, 1, bias=False) + + def forward(self, x): + _NT, C, H, W = x.shape + x = self.conv(x) + return x.reshape(-1, C, H, W) + + +def apply_model_with_memblocks(model, x, parallel, show_progress_bar): + """ + Apply a sequential model with memblocks to the given input. + Args: + - model: nn.Sequential of blocks to apply + - x: input data, of dimensions NTCHW + - parallel: if True, parallelize over timesteps (fast but uses O(T) memory) + if False, each timestep will be processed sequentially (slow but uses O(1) memory) + - show_progress_bar: if True, enables tqdm progressbar display + + Returns NTCHW tensor of output data. + """ + assert x.ndim == 5, f"TAEHV operates on NTCHW tensors, but got {x.ndim}-dim tensor" + N, T, C, H, W = x.shape + if parallel: + x = x.reshape(N * T, C, H, W) + # parallel over input timesteps, iterate over blocks + for b in tqdm(model, disable=not show_progress_bar): + if isinstance(b, MemBlock): + NT, C, H, W = x.shape + T = NT // N + _x = x.reshape(N, T, C, H, W) + mem = F.pad(_x, (0, 0, 0, 0, 0, 0, 1, 0), value=0)[:, :T].reshape(x.shape) + x = b(x, mem) + else: + x = b(x) + NT, C, H, W = x.shape + T = NT // N + x = x.view(N, T, C, H, W) + else: + # TODO(oboerbohan): at least on macos this still gradually uses more memory during decode... + # need to fix :( + out = [] + # iterate over input timesteps and also iterate over blocks. + # because of the cursed TPool/TGrow blocks, this is not a nested loop, + # it's actually a ***graph traversal*** problem! so let's make a queue + work_queue = [TWorkItem(xt, 0) for t, xt in enumerate(x.reshape(N, T * C, H, W).chunk(T, dim=1))] + # in addition to manually managing our queue, we also need to manually manage our progressbar. + # we'll update it for every source node that we consume. + progress_bar = tqdm(range(T), disable=not show_progress_bar) + # we'll also need a separate addressable memory per node as well + mem = [None] * len(model) + while work_queue: + xt, i = work_queue.pop(0) + if i == 0: + # new source node consumed + progress_bar.update(1) + if i == len(model): + # reached end of the graph, append result to output list + out.append(xt) + else: + # fetch the block to process + b = model[i] + if isinstance(b, MemBlock): + # mem blocks are simple since we're visiting the graph in causal order + if mem[i] is None: + xt_new = b(xt, xt * 0) + mem[i] = xt + else: + xt_new = b(xt, mem[i]) + mem[i].copy_(xt) # inplace might reduce mysterious pytorch memory allocations? doesn't help though + # add successor to work queue + work_queue.insert(0, TWorkItem(xt_new, i + 1)) + elif isinstance(b, TPool): + # pool blocks are miserable + if mem[i] is None: + mem[i] = [] # pool memory is itself a queue of inputs to pool + mem[i].append(xt) + if len(mem[i]) > b.stride: + # pool mem is in invalid state, we should have pooled before this + raise ValueError("???") + elif len(mem[i]) < b.stride: + # pool mem is not yet full, go back to processing the work queue + pass + else: + # pool mem is ready, run the pool block + N, C, H, W = xt.shape + xt = b(torch.cat(mem[i], 1).view(N * b.stride, C, H, W)) + # reset the pool mem + mem[i] = [] + # add successor to work queue + work_queue.insert(0, TWorkItem(xt, i + 1)) + elif isinstance(b, TGrow): + xt = b(xt) + NT, C, H, W = xt.shape + # each tgrow has multiple successor nodes + for xt_next in reversed(xt.view(N, b.stride * C, H, W).chunk(b.stride, 1)): + # add successor to work queue + work_queue.insert(0, TWorkItem(xt_next, i + 1)) + else: + # normal block with no funny business + xt = b(xt) + # add successor to work queue + work_queue.insert(0, TWorkItem(xt, i + 1)) + progress_bar.close() + x = torch.stack(out, 1) + return x + + +class TAEHV(nn.Module): + def __init__(self, checkpoint_path="taehv.pth", decoder_time_upscale=(True, True), decoder_space_upscale=(True, True, True), patch_size=1, latent_channels=16, model_type="wan21"): + """Initialize pretrained TAEHV from the given checkpoint. + + Arg: + checkpoint_path: path to weight file to load. taehv.pth for Hunyuan, taew2_1.pth for Wan 2.1. + decoder_time_upscale: whether temporal upsampling is enabled for each block. upsampling can be disabled for a cheaper preview. + decoder_space_upscale: whether spatial upsampling is enabled for each block. upsampling can be disabled for a cheaper preview. + patch_size: input/output pixelshuffle patch-size for this model. + latent_channels: number of latent channels (z dim) for this model. + """ + super().__init__() + self.patch_size = patch_size + self.latent_channels = latent_channels + self.image_channels = 3 + self.is_cogvideox = checkpoint_path is not None and "taecvx" in checkpoint_path + # if checkpoint_path is not None and "taew2_2" in checkpoint_path: + # self.patch_size, self.latent_channels = 2, 48 + self.model_type = model_type + if model_type == "wan22": + self.patch_size, self.latent_channels = 2, 48 + if model_type == "hy15": + act_func = nn.LeakyReLU(0.2, inplace=True) + else: + act_func = nn.ReLU(inplace=True) + + self.encoder = nn.Sequential( + conv(self.image_channels * self.patch_size**2, 64), + act_func, + TPool(64, 2), + conv(64, 64, stride=2, bias=False), + MemBlock(64, 64, act_func), + MemBlock(64, 64, act_func), + MemBlock(64, 64, act_func), + TPool(64, 2), + conv(64, 64, stride=2, bias=False), + MemBlock(64, 64, act_func), + MemBlock(64, 64, act_func), + MemBlock(64, 64, act_func), + TPool(64, 1), + conv(64, 64, stride=2, bias=False), + MemBlock(64, 64, act_func), + MemBlock(64, 64, act_func), + MemBlock(64, 64, act_func), + conv(64, self.latent_channels), + ) + n_f = [256, 128, 64, 64] + self.frames_to_trim = 2 ** sum(decoder_time_upscale) - 1 + self.decoder = nn.Sequential( + Clamp(), + conv(self.latent_channels, n_f[0]), + act_func, + MemBlock(n_f[0], n_f[0], act_func), + MemBlock(n_f[0], n_f[0], act_func), + MemBlock(n_f[0], n_f[0], act_func), + nn.Upsample(scale_factor=2 if decoder_space_upscale[0] else 1), + TGrow(n_f[0], 1), + conv(n_f[0], n_f[1], bias=False), + MemBlock(n_f[1], n_f[1], act_func), + MemBlock(n_f[1], n_f[1], act_func), + MemBlock(n_f[1], n_f[1], act_func), + nn.Upsample(scale_factor=2 if decoder_space_upscale[1] else 1), + TGrow(n_f[1], 2 if decoder_time_upscale[0] else 1), + conv(n_f[1], n_f[2], bias=False), + MemBlock(n_f[2], n_f[2], act_func), + MemBlock(n_f[2], n_f[2], act_func), + MemBlock(n_f[2], n_f[2], act_func), + nn.Upsample(scale_factor=2 if decoder_space_upscale[2] else 1), + TGrow(n_f[2], 2 if decoder_time_upscale[1] else 1), + conv(n_f[2], n_f[3], bias=False), + act_func, + conv(n_f[3], self.image_channels * self.patch_size**2), + ) + if checkpoint_path is not None: + ext = os.path.splitext(checkpoint_path)[1].lower() + + if ext == ".pth": + state_dict = torch.load(checkpoint_path, map_location="cpu", weights_only=True) + elif ext == ".safetensors": + state_dict = load_file(checkpoint_path, device="cpu") + else: + raise ValueError(f"Unsupported checkpoint format: {ext}. Supported formats: .pth, .safetensors") + + self.load_state_dict(self.patch_tgrow_layers(state_dict)) + + def patch_tgrow_layers(self, sd): + """Patch TGrow layers to use a smaller kernel if needed. + + Args: + sd: state dict to patch + """ + new_sd = self.state_dict() + for i, layer in enumerate(self.decoder): + if isinstance(layer, TGrow): + key = f"decoder.{i}.conv.weight" + if sd[key].shape[0] > new_sd[key].shape[0]: + # take the last-timestep output channels + sd[key] = sd[key][-new_sd[key].shape[0] :] + return sd + + def encode_video(self, x, parallel=True, show_progress_bar=True): + """Encode a sequence of frames. + + Args: + x: input NTCHW RGB (C=3) tensor with values in [0, 1]. + parallel: if True, all frames will be processed at once. + (this is faster but may require more memory). + if False, frames will be processed sequentially. + Returns NTCHW latent tensor with ~Gaussian values. + """ + if self.patch_size > 1: + x = F.pixel_unshuffle(x, self.patch_size) + if x.shape[1] % 4 != 0: + # pad at end to multiple of 4 + n_pad = 4 - x.shape[1] % 4 + padding = x[:, -1:].repeat_interleave(n_pad, dim=1) + x = torch.cat([x, padding], 1) + return apply_model_with_memblocks(self.encoder, x, parallel, show_progress_bar) + + def decode_video(self, x, parallel=True, show_progress_bar=True): + """Decode a sequence of frames. + + Args: + x: input NTCHW latent (C=12) tensor with ~Gaussian values. + parallel: if True, all frames will be processed at once. + (this is faster but may require more memory). + if False, frames will be processed sequentially. + Returns NTCHW RGB tensor with ~[0, 1] values. + """ + skip_trim = self.is_cogvideox and x.shape[1] % 2 == 0 + x = apply_model_with_memblocks(self.decoder, x, parallel, show_progress_bar) + if self.model_type == "hy15": + x = x.clamp_(-1, 1) + else: + x = x.clamp_(0, 1) + if self.patch_size > 1: + x = F.pixel_shuffle(x, self.patch_size) + if skip_trim: + # skip trimming for cogvideox to make frame counts match. + # this still doesn't have correct temporal alignment for certain frame counts + # (cogvideox seems to pad at the start?), but for multiple-of-4 it's fine. + return x + return x[:, self.frames_to_trim :] diff --git a/lightx2v/models/video_encoders/hf/vid_recon.py b/lightx2v/models/video_encoders/hf/vid_recon.py new file mode 100644 index 0000000..972d3b2 --- /dev/null +++ b/lightx2v/models/video_encoders/hf/vid_recon.py @@ -0,0 +1,94 @@ +import argparse + +import cv2 +import torch +from loguru import logger + +from lightx2v.models.video_encoders.hf.wan.vae import WanVAE +from lightx2v.models.video_encoders.hf.wan.vae_2_2 import Wan2_2_VAE +from lightx2v.models.video_encoders.hf.wan.vae_tiny import Wan2_2_VAE_tiny, WanVAE_tiny + + +class VideoTensorReader: + def __init__(self, video_file_path): + self.cap = cv2.VideoCapture(video_file_path) + assert self.cap.isOpened(), f"Could not load {video_file_path}" + self.fps = self.cap.get(cv2.CAP_PROP_FPS) + + def __iter__(self): + return self + + def __next__(self): + ret, frame = self.cap.read() + if not ret: + self.cap.release() + raise StopIteration # End of video or error + return torch.from_numpy(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)).permute(2, 0, 1) # BGR HWC -> RGB CHW + + +class VideoTensorWriter: + def __init__(self, video_file_path, width_height, fps=30): + self.writer = cv2.VideoWriter(video_file_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, width_height) + assert self.writer.isOpened(), f"Could not create writer for {video_file_path}" + + def write(self, frame_tensor): + assert frame_tensor.ndim == 3 and frame_tensor.shape[0] == 3, f"{frame_tensor.shape}??" + self.writer.write(cv2.cvtColor(frame_tensor.permute(1, 2, 0).numpy(), cv2.COLOR_RGB2BGR)) # RGB CHW -> BGR HWC + + def __del__(self): + if hasattr(self, "writer"): + self.writer.release() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Encode and decode videos using the TaeHV model for reconstruction") + parser.add_argument("video_paths", nargs="+", help="Paths to input video files (multiple allowed)") + parser.add_argument("--checkpoint", "-c", help=f"Path to the model checkpoint file") + parser.add_argument("--device", "-d", default="cuda", help=f'Computing device (e.g., "cuda", "mps", "cpu"; default: auto-detect available device)') + parser.add_argument("--dtype", default="bfloat16", choices=["bfloat16", "float32"], help="Data type for model computation (default: bfloat16)") + parser.add_argument("--model_type", choices=["taew2_1", "taew2_2", "vaew2_1", "vaew2_2"], required=True, help="Type of the model to use (choices: taew2_1, taew2_2)") + parser.add_argument("--use_lightvae", default=False, action="store_true") + + args = parser.parse_args() + if args.use_lightvae: + assert args.model_type in ["vaew2_1"] + + if args.device: + dev = torch.device(args.device) + else: + dev = torch.device("cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu") + + dtype_map = {"bfloat16": torch.bfloat16, "float32": torch.float32} + model_map = {"taew2_1": WanVAE_tiny, "taew2_2": Wan2_2_VAE_tiny, "vaew2_1": WanVAE, "vaew2_2": Wan2_2_VAE} + + dtype = dtype_map[args.dtype] + + model_args = {"vae_path": args.checkpoint, "dtype": dtype, "device": dev} + if args.model_type in "vaew2_1": + model_args.update({"use_lightvae": args.use_lightvae}) + + model = model_map[args.model_type](**model_args) + if args.model_type.startswith("tae"): + model = model_map[args.model_type](**model_args).to(dev) + + # Process each input video + for idx, video_path in enumerate(args.video_paths): + logger.info(f"Processing video {video_path}...") + # Read video + video_in = VideoTensorReader(video_path) + video = torch.stack(list(video_in), 0)[None] # Add batch dimension + vid_dev = video.to(dev, dtype).div_(255.0) # Normalize to [0,1] + # Encode + vid_enc = model.encode_video(vid_dev) + if isinstance(vid_enc, tuple): + vid_enc = vid_enc[0] + # Decode + vid_dec = model.decode_video(vid_enc) + # Save reconstructed video + video_out_path = f"{video_path}.reconstructed_{idx}.mp4" + frame_size = (vid_dec.shape[-1], vid_dec.shape[-2]) + fps = int(round(video_in.fps)) + video_out = VideoTensorWriter(video_out_path, frame_size, fps) + for frame in vid_dec.clamp_(0, 1).mul_(255).round_().byte().cpu()[0]: + video_out.write(frame) + logger.info(f" Reconstructed video saved to {video_out_path}") diff --git a/lightx2v/models/video_encoders/hf/wan/__init__.py b/lightx2v/models/video_encoders/hf/wan/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/models/video_encoders/hf/wan/vae.py b/lightx2v/models/video_encoders/hf/wan/vae.py new file mode 100644 index 0000000..6b870af --- /dev/null +++ b/lightx2v/models/video_encoders/hf/wan/vae.py @@ -0,0 +1,1457 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. + +import torch +import torch.distributed as dist +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange +from loguru import logger + +from lightx2v.utils.utils import load_weights +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +__all__ = [ + "WanVAE", +] + +CACHE_T = 2 + + +class CausalConv3d(nn.Conv3d): + """ + Causal 3d convolusion. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._padding = ( + self.padding[2], + self.padding[2], + self.padding[1], + self.padding[1], + 2 * self.padding[0], + 0, + ) + self.padding = (0, 0, 0) + + def forward(self, x, cache_x=None): + padding = list(self._padding) + if cache_x is not None and self._padding[4] > 0: + cache_x = cache_x.to(x.device) + x = torch.cat([cache_x, x], dim=2) + padding[4] -= cache_x.shape[2] + x = F.pad(x, padding) + + return super().forward(x) + + +class RMS_norm(nn.Module): + def __init__(self, dim, channel_first=True, images=True, bias=False): + super().__init__() + broadcastable_dims = (1, 1, 1) if not images else (1, 1) + shape = (dim, *broadcastable_dims) if channel_first else (dim,) + + self.channel_first = channel_first + self.scale = dim**0.5 + self.gamma = nn.Parameter(torch.ones(shape)) + self.bias = nn.Parameter(torch.zeros(shape)) if bias else 0.0 + + def forward(self, x): + return F.normalize(x, dim=(1 if self.channel_first else -1)) * self.scale * self.gamma + self.bias + + +class Upsample(nn.Upsample): + def forward(self, x): + """ + Fix bfloat16 support for nearest neighbor interpolation. + """ + return super().forward(x) + + +class Resample(nn.Module): + def __init__(self, dim, mode): + assert mode in ( + "none", + "upsample2d", + "upsample3d", + "downsample2d", + "downsample3d", + ) + super().__init__() + self.dim = dim + self.mode = mode + + # layers + if mode == "upsample2d": + self.resample = nn.Sequential( + Upsample(scale_factor=(2.0, 2.0), mode="nearest-exact"), + nn.Conv2d(dim, dim // 2, 3, padding=1), + ) + elif mode == "upsample3d": + self.resample = nn.Sequential( + Upsample(scale_factor=(2.0, 2.0), mode="nearest-exact"), + nn.Conv2d(dim, dim // 2, 3, padding=1), + ) + self.time_conv = CausalConv3d(dim, dim * 2, (3, 1, 1), padding=(1, 0, 0)) + + elif mode == "downsample2d": + self.resample = nn.Sequential(nn.ZeroPad2d((0, 1, 0, 1)), nn.Conv2d(dim, dim, 3, stride=(2, 2))) + elif mode == "downsample3d": + self.resample = nn.Sequential(nn.ZeroPad2d((0, 1, 0, 1)), nn.Conv2d(dim, dim, 3, stride=(2, 2))) + self.time_conv = CausalConv3d(dim, dim, (3, 1, 1), stride=(2, 1, 1), padding=(0, 0, 0)) + + else: + self.resample = nn.Identity() + + def forward(self, x, feat_cache=None, feat_idx=[0]): + b, c, t, h, w = x.size() + if self.mode == "upsample3d": + if feat_cache is not None: + idx = feat_idx[0] + if feat_cache[idx] is None: + feat_cache[idx] = "Rep" + feat_idx[0] += 1 + else: + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None and feat_cache[idx] != "Rep": + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + if cache_x.shape[2] < 2 and feat_cache[idx] is not None and feat_cache[idx] == "Rep": + cache_x = torch.cat( + [torch.zeros_like(cache_x).to(cache_x.device), cache_x], + dim=2, + ) + if feat_cache[idx] == "Rep": + x = self.time_conv(x) + else: + x = self.time_conv(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + + x = x.reshape(b, 2, c, t, h, w) + x = torch.stack((x[:, 0, :, :, :, :], x[:, 1, :, :, :, :]), 3) + x = x.reshape(b, c, t * 2, h, w) + t = x.shape[2] + x = rearrange(x, "b c t h w -> (b t) c h w") + x = self.resample(x) + x = rearrange(x, "(b t) c h w -> b c t h w", t=t) + + if self.mode == "downsample3d": + if feat_cache is not None: + idx = feat_idx[0] + if feat_cache[idx] is None: + feat_cache[idx] = x.clone() + feat_idx[0] += 1 + else: + cache_x = x[:, :, -1:, :, :].clone() + # if cache_x.shape[2] < 2 and feat_cache[idx] is not None and feat_cache[idx]!='Rep': + # # cache last frame of last two chunk + # cache_x = torch.cat([feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), cache_x], dim=2) + + x = self.time_conv(torch.cat([feat_cache[idx][:, :, -1:, :, :], x], 2)) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + return x + + def init_weight(self, conv): + conv_weight = conv.weight + nn.init.zeros_(conv_weight) + c1, c2, t, h, w = conv_weight.size() + one_matrix = torch.eye(c1, c2) + init_matrix = one_matrix + nn.init.zeros_(conv_weight) + # conv_weight.data[:,:,-1,1,1] = init_matrix * 0.5 + conv_weight.data[:, :, 1, 0, 0] = init_matrix # * 0.5 + conv.weight.data.copy_(conv_weight) + nn.init.zeros_(conv.bias.data) + + def init_weight2(self, conv): + conv_weight = conv.weight.data + nn.init.zeros_(conv_weight) + c1, c2, t, h, w = conv_weight.size() + init_matrix = torch.eye(c1 // 2, c2) + # init_matrix = repeat(init_matrix, 'o ... -> (o 2) ...').permute(1,0,2).contiguous().reshape(c1,c2) + conv_weight[: c1 // 2, :, -1, 0, 0] = init_matrix + conv_weight[c1 // 2 :, :, -1, 0, 0] = init_matrix + conv.weight.data.copy_(conv_weight) + nn.init.zeros_(conv.bias.data) + + +class ResidualBlock(nn.Module): + def __init__(self, in_dim, out_dim, dropout=0.0): + super().__init__() + self.in_dim = in_dim + self.out_dim = out_dim + + # layers + self.residual = nn.Sequential( + RMS_norm(in_dim, images=False), + nn.SiLU(), + CausalConv3d(in_dim, out_dim, 3, padding=1), + RMS_norm(out_dim, images=False), + nn.SiLU(), + nn.Dropout(dropout), + CausalConv3d(out_dim, out_dim, 3, padding=1), + ) + self.shortcut = CausalConv3d(in_dim, out_dim, 1) if in_dim != out_dim else nn.Identity() + + def forward(self, x, feat_cache=None, feat_idx=[0]): + h = self.shortcut(x) + for layer in self.residual: + if isinstance(layer, CausalConv3d) and feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = layer(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = layer(x) + return x + h + + +class AttentionBlock(nn.Module): + """ + Causal self-attention with a single head. + """ + + def __init__(self, dim): + super().__init__() + self.dim = dim + + # layers + self.norm = RMS_norm(dim) + self.to_qkv = nn.Conv2d(dim, dim * 3, 1) + self.proj = nn.Conv2d(dim, dim, 1) + + # zero out the last layer params + nn.init.zeros_(self.proj.weight) + + def forward(self, x): + identity = x + b, c, t, h, w = x.size() + x = rearrange(x, "b c t h w -> (b t) c h w") + x = self.norm(x) + # compute query, key, value + q, k, v = self.to_qkv(x).reshape(b * t, 1, c * 3, -1).permute(0, 1, 3, 2).contiguous().chunk(3, dim=-1) + + # apply attention + x = F.scaled_dot_product_attention( + q, + k, + v, + ) + x = x.squeeze(1).permute(0, 2, 1).reshape(b * t, c, h, w) + + # output + x = self.proj(x) + x = rearrange(x, "(b t) c h w-> b c t h w", t=t) + return x + identity + + +class Encoder3d(nn.Module): + def __init__(self, dim=128, z_dim=4, dim_mult=[1, 2, 4, 4], num_res_blocks=2, attn_scales=[], temperal_downsample=[True, True, False], dropout=0.0, pruning_rate=0.0): + super().__init__() + self.dim = dim + self.z_dim = z_dim + self.dim_mult = dim_mult + self.num_res_blocks = num_res_blocks + self.attn_scales = attn_scales + self.temperal_downsample = temperal_downsample + + # dimensions + dims = [dim * u for u in [1] + dim_mult] + dims = [int(d * (1 - pruning_rate)) for d in dims] + scale = 1.0 + + # init block + self.conv1 = CausalConv3d(3, dims[0], 3, padding=1) + + # downsample blocks + downsamples = [] + for i, (in_dim, out_dim) in enumerate(zip(dims[:-1], dims[1:])): + # residual (+attention) blocks + for _ in range(num_res_blocks): + downsamples.append(ResidualBlock(in_dim, out_dim, dropout)) + if scale in attn_scales: + downsamples.append(AttentionBlock(out_dim)) + in_dim = out_dim + + # downsample block + if i != len(dim_mult) - 1: + mode = "downsample3d" if temperal_downsample[i] else "downsample2d" + downsamples.append(Resample(out_dim, mode=mode)) + scale /= 2.0 + self.downsamples = nn.Sequential(*downsamples) + + # middle blocks + self.middle = nn.Sequential( + ResidualBlock(out_dim, out_dim, dropout), + AttentionBlock(out_dim), + ResidualBlock(out_dim, out_dim, dropout), + ) + + # output blocks + self.head = nn.Sequential( + RMS_norm(out_dim, images=False), + nn.SiLU(), + CausalConv3d(out_dim, z_dim, 3, padding=1), + ) + + def forward(self, x, feat_cache=None, feat_idx=[0]): + if feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = self.conv1(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = self.conv1(x) + + ## downsamples + for layer in self.downsamples: + if feat_cache is not None: + x = layer(x, feat_cache, feat_idx) + else: + x = layer(x) + + ## middle + for layer in self.middle: + if isinstance(layer, ResidualBlock) and feat_cache is not None: + x = layer(x, feat_cache, feat_idx) + else: + x = layer(x) + + ## head + for layer in self.head: + if isinstance(layer, CausalConv3d) and feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = layer(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = layer(x) + return x + + +class Decoder3d(nn.Module): + def __init__(self, dim=128, z_dim=4, dim_mult=[1, 2, 4, 4], num_res_blocks=2, attn_scales=[], temperal_upsample=[False, True, True], dropout=0.0, pruning_rate=0.0): + super().__init__() + self.dim = dim + self.z_dim = z_dim + self.dim_mult = dim_mult + self.num_res_blocks = num_res_blocks + self.attn_scales = attn_scales + self.temperal_upsample = temperal_upsample + + # dimensions + dims = [dim * u for u in [dim_mult[-1]] + dim_mult[::-1]] + dims = [int(d * (1 - pruning_rate)) for d in dims] + + scale = 1.0 / 2 ** (len(dim_mult) - 2) + + # init block + self.conv1 = CausalConv3d(z_dim, dims[0], 3, padding=1) + + # middle blocks + self.middle = nn.Sequential( + ResidualBlock(dims[0], dims[0], dropout), + AttentionBlock(dims[0]), + ResidualBlock(dims[0], dims[0], dropout), + ) + + # upsample blocks + upsamples = [] + for i, (in_dim, out_dim) in enumerate(zip(dims[:-1], dims[1:])): + # residual (+attention) blocks + if i == 1 or i == 2 or i == 3: + in_dim = in_dim // 2 + for _ in range(num_res_blocks + 1): + upsamples.append(ResidualBlock(in_dim, out_dim, dropout)) + if scale in attn_scales: + upsamples.append(AttentionBlock(out_dim)) + in_dim = out_dim + + # upsample block + if i != len(dim_mult) - 1: + mode = "upsample3d" if temperal_upsample[i] else "upsample2d" + upsamples.append(Resample(out_dim, mode=mode)) + scale *= 2.0 + self.upsamples = nn.Sequential(*upsamples) + + # output blocks + self.head = nn.Sequential( + RMS_norm(out_dim, images=False), + nn.SiLU(), + CausalConv3d(out_dim, 3, 3, padding=1), + ) + + def forward(self, x, feat_cache=None, feat_idx=[0]): + ## conv1 + if feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = self.conv1(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = self.conv1(x) + + ## middle + for layer in self.middle: + if isinstance(layer, ResidualBlock) and feat_cache is not None: + x = layer(x, feat_cache, feat_idx) + else: + x = layer(x) + + ## upsamples + for layer in self.upsamples: + if feat_cache is not None: + x = layer(x, feat_cache, feat_idx) + else: + x = layer(x) + + ## head + for layer in self.head: + if isinstance(layer, CausalConv3d) and feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = layer(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = layer(x) + return x + + +def count_conv3d(model): + count = 0 + for m in model.modules(): + if isinstance(m, CausalConv3d): + count += 1 + return count + + +class WanVAE_(nn.Module): + def __init__(self, dim=128, z_dim=4, dim_mult=[1, 2, 4, 4], num_res_blocks=2, attn_scales=[], temperal_downsample=[True, True, False], dropout=0.0, pruning_rate=0.0): + super().__init__() + self.dim = dim + self.z_dim = z_dim + self.dim_mult = dim_mult + self.num_res_blocks = num_res_blocks + self.attn_scales = attn_scales + self.temperal_downsample = temperal_downsample + self.temperal_upsample = temperal_downsample[::-1] + self.spatial_compression_ratio = 2 ** len(self.temperal_downsample) + + # The minimal tile height and width for spatial tiling to be used + self.tile_sample_min_height = 256 + self.tile_sample_min_width = 256 + + # The minimal distance between two spatial tiles + self.tile_sample_stride_height = 192 + self.tile_sample_stride_width = 192 + # modules + self.encoder = Encoder3d( + dim, + z_dim * 2, + dim_mult, + num_res_blocks, + attn_scales, + self.temperal_downsample, + dropout, + pruning_rate, + ) + self.conv1 = CausalConv3d(z_dim * 2, z_dim * 2, 1) + self.conv2 = CausalConv3d(z_dim, z_dim, 1) + self.decoder = Decoder3d( + dim, + z_dim, + dim_mult, + num_res_blocks, + attn_scales, + self.temperal_upsample, + dropout, + pruning_rate, + ) + + def forward(self, x): + mu, log_var = self.encode(x) + z = self.reparameterize(mu, log_var) + x_recon = self.decode(z) + return x_recon, mu, log_var + + def blend_v(self, a, b, blend_extent): + blend_extent = min(a.shape[-2], b.shape[-2], blend_extent) + for y in range(blend_extent): + b[:, :, :, y, :] = a[:, :, :, -blend_extent + y, :] * (1 - y / blend_extent) + b[:, :, :, y, :] * (y / blend_extent) + return b + + def blend_h(self, a, b, blend_extent): + blend_extent = min(a.shape[-1], b.shape[-1], blend_extent) + for x in range(blend_extent): + b[:, :, :, :, x] = a[:, :, :, :, -blend_extent + x] * (1 - x / blend_extent) + b[:, :, :, :, x] * (x / blend_extent) + return b + + def tiled_encode(self, x, scale): + _, _, num_frames, height, width = x.shape + latent_height = height // self.spatial_compression_ratio + latent_width = width // self.spatial_compression_ratio + + tile_latent_min_height = self.tile_sample_min_height // self.spatial_compression_ratio + tile_latent_min_width = self.tile_sample_min_width // self.spatial_compression_ratio + tile_latent_stride_height = self.tile_sample_stride_height // self.spatial_compression_ratio + tile_latent_stride_width = self.tile_sample_stride_width // self.spatial_compression_ratio + + blend_height = tile_latent_min_height - tile_latent_stride_height + blend_width = tile_latent_min_width - tile_latent_stride_width + + # Split x into overlapping tiles and encode them separately. + # The tiles have an overlap to avoid seams between tiles. + rows = [] + for i in range(0, height, self.tile_sample_stride_height): + row = [] + for j in range(0, width, self.tile_sample_stride_width): + self.clear_cache() + time = [] + frame_range = 1 + (num_frames - 1) // 4 + for k in range(frame_range): + self._enc_conv_idx = [0] + if k == 0: + tile = x[:, :, :1, i : i + self.tile_sample_min_height, j : j + self.tile_sample_min_width] + else: + tile = x[ + :, + :, + 1 + 4 * (k - 1) : 1 + 4 * k, + i : i + self.tile_sample_min_height, + j : j + self.tile_sample_min_width, + ] + tile = self.encoder(tile, feat_cache=self._enc_feat_map, feat_idx=self._enc_conv_idx) + mu, log_var = self.conv1(tile).chunk(2, dim=1) + if isinstance(scale[0], torch.Tensor): + mu = (mu - scale[0].view(1, self.z_dim, 1, 1, 1)) * scale[1].view(1, self.z_dim, 1, 1, 1) + else: + mu = (mu - scale[0]) * scale[1] + + time.append(mu) + + row.append(torch.cat(time, dim=2)) + rows.append(row) + self.clear_cache() + + result_rows = [] + for i, row in enumerate(rows): + result_row = [] + for j, tile in enumerate(row): + # blend the above tile and the left tile + # to the current tile and add the current tile to the result row + if i > 0: + tile = self.blend_v(rows[i - 1][j], tile, blend_height) + if j > 0: + tile = self.blend_h(row[j - 1], tile, blend_width) + result_row.append(tile[:, :, :, :tile_latent_stride_height, :tile_latent_stride_width]) + result_rows.append(torch.cat(result_row, dim=-1)) + + enc = torch.cat(result_rows, dim=3)[:, :, :, :latent_height, :latent_width] + return enc + + def tiled_decode(self, z, scale): + if isinstance(scale[0], torch.Tensor): + z = z / scale[1].view(1, self.z_dim, 1, 1, 1) + scale[0].view(1, self.z_dim, 1, 1, 1) + else: + z = z / scale[1] + scale[0] + + _, _, num_frames, height, width = z.shape + sample_height = height * self.spatial_compression_ratio + sample_width = width * self.spatial_compression_ratio + + tile_latent_min_height = self.tile_sample_min_height // self.spatial_compression_ratio + tile_latent_min_width = self.tile_sample_min_width // self.spatial_compression_ratio + tile_latent_stride_height = self.tile_sample_stride_height // self.spatial_compression_ratio + tile_latent_stride_width = self.tile_sample_stride_width // self.spatial_compression_ratio + + blend_height = self.tile_sample_min_height - self.tile_sample_stride_height + blend_width = self.tile_sample_min_width - self.tile_sample_stride_width + + # Split z into overlapping tiles and decode them separately. + # The tiles have an overlap to avoid seams between tiles. + rows = [] + for i in range(0, height, tile_latent_stride_height): + row = [] + for j in range(0, width, tile_latent_stride_width): + self.clear_cache() + time = [] + for k in range(num_frames): + self._conv_idx = [0] + tile = z[:, :, k : k + 1, i : i + tile_latent_min_height, j : j + tile_latent_min_width] + tile = self.conv2(tile) + decoded = self.decoder(tile, feat_cache=self._feat_map, feat_idx=self._conv_idx) + time.append(decoded) + row.append(torch.cat(time, dim=2)) + rows.append(row) + self.clear_cache() + + result_rows = [] + for i, row in enumerate(rows): + result_row = [] + for j, tile in enumerate(row): + # blend the above tile and the left tile + # to the current tile and add the current tile to the result row + if i > 0: + tile = self.blend_v(rows[i - 1][j], tile, blend_height) + if j > 0: + tile = self.blend_h(row[j - 1], tile, blend_width) + result_row.append(tile[:, :, :, : self.tile_sample_stride_height, : self.tile_sample_stride_width]) + result_rows.append(torch.cat(result_row, dim=-1)) + + dec = torch.cat(result_rows, dim=3)[:, :, :, :sample_height, :sample_width] + + return dec + + def encode(self, x, scale, return_mu=False): + self.clear_cache() + ## cache + t = x.shape[2] + iter_ = 1 + (t - 1) // 4 + for i in range(iter_): + self._enc_conv_idx = [0] + if i == 0: + out = self.encoder( + x[:, :, :1, :, :], + feat_cache=self._enc_feat_map, + feat_idx=self._enc_conv_idx, + ) + else: + out_ = self.encoder( + x[:, :, 1 + 4 * (i - 1) : 1 + 4 * i, :, :], + feat_cache=self._enc_feat_map, + feat_idx=self._enc_conv_idx, + ) + out = torch.cat([out, out_], 2) + mu, log_var = self.conv1(out).chunk(2, dim=1) + if isinstance(scale[0], torch.Tensor): + mu = (mu - scale[0].view(1, self.z_dim, 1, 1, 1)) * scale[1].view(1, self.z_dim, 1, 1, 1) + else: + mu = (mu - scale[0]) * scale[1] + + self.clear_cache() + if return_mu: + return mu, log_var + else: + return mu + + def decode(self, z, scale): + self.clear_cache() + + # z: [b,c,t,h,w] + if isinstance(scale[0], torch.Tensor): + z = z / scale[1].view(1, self.z_dim, 1, 1, 1) + scale[0].view(1, self.z_dim, 1, 1, 1) + else: + z = z / scale[1] + scale[0] + iter_ = z.shape[2] + x = self.conv2(z) + for i in range(iter_): + self._conv_idx = [0] + if i == 0: + out = self.decoder( + x[:, :, i : i + 1, :, :], + feat_cache=self._feat_map, + feat_idx=self._conv_idx, + ) + else: + out_ = self.decoder( + x[:, :, i : i + 1, :, :], + feat_cache=self._feat_map, + feat_idx=self._conv_idx, + ) + out = torch.cat([out, out_], 2) + + self.clear_cache() + return out + + def decode_stream(self, z, scale): + self.clear_cache() + + # z: [b,c,t,h,w] + if isinstance(scale[0], torch.Tensor): + z = z / scale[1].view(1, self.z_dim, 1, 1, 1) + scale[0].view(1, self.z_dim, 1, 1, 1) + else: + z = z / scale[1] + scale[0] + iter_ = z.shape[2] + x = self.conv2(z) + for i in range(iter_): + self._conv_idx = [0] + out = self.decoder( + x[:, :, i : i + 1, :, :], + feat_cache=self._feat_map, + feat_idx=self._conv_idx, + ) + yield out + + def cached_decode(self, z, scale): + # z: [b,c,t,h,w] + if isinstance(scale[0], torch.Tensor): + z = z / scale[1].view(1, self.z_dim, 1, 1, 1) + scale[0].view(1, self.z_dim, 1, 1, 1) + else: + z = z / scale[1] + scale[0] + iter_ = z.shape[2] + x = self.conv2(z) + for i in range(iter_): + self._conv_idx = [0] + if i == 0: + out = self.decoder(x[:, :, i : i + 1, :, :], feat_cache=self._feat_map, feat_idx=self._conv_idx) + else: + out_ = self.decoder(x[:, :, i : i + 1, :, :], feat_cache=self._feat_map, feat_idx=self._conv_idx) + out = torch.cat([out, out_], 2) + return out + + def reparameterize(self, mu, log_var): + std = torch.exp(0.5 * log_var) + eps = torch.randn_like(std) + return eps * std + mu + + def sample(self, imgs, deterministic=False, scale=[0, 1]): + mu, log_var = self.encode(imgs, scale, return_mu=True) + if deterministic: + return mu + std = torch.exp(0.5 * log_var.clamp(-30.0, 20.0)) + return mu + std * torch.randn_like(std), mu, log_var + + def clear_cache(self): + self._conv_num = count_conv3d(self.decoder) + self._conv_idx = [0] + self._feat_map = [None] * self._conv_num + # cache encode + self._enc_conv_num = count_conv3d(self.encoder) + self._enc_conv_idx = [0] + self._enc_feat_map = [None] * self._enc_conv_num + + def encode_video(self, x, scale=[0, 1]): + assert x.ndim == 5 # NTCHW + assert x.shape[2] % 3 == 0 + x = x.transpose(1, 2) + y = x.mul(2).sub_(1) + y, mu, log_var = self.sample(y, scale=scale) + return y.transpose(1, 2).to(x), mu, log_var + + def decode_video(self, x, scale=[0, 1]): + assert x.ndim == 5 # NTCHW + assert x.shape[2] % self.z_dim == 0 + x = x.transpose(1, 2) + # B, C, T, H, W + y = x + y = self.decode(y, scale).clamp_(-1, 1) + y = y.mul_(0.5).add_(0.5).clamp_(0, 1) # NCTHW + return y.transpose(1, 2).to(x) + + +def _video_vae(pretrained_path=None, z_dim=None, device="cpu", cpu_offload=False, dtype=torch.float, load_from_rank0=False, pruning_rate=0.0, **kwargs): + """ + Autoencoder3d adapted from Stable Diffusion 1.x, 2.x and XL. + """ + # params + cfg = dict( + dim=96, + z_dim=z_dim, + dim_mult=[1, 2, 4, 4], + num_res_blocks=2, + attn_scales=[], + temperal_downsample=[False, True, True], + dropout=0.0, + pruning_rate=pruning_rate, + ) + cfg.update(**kwargs) + + # init model + with torch.device("meta"): + model = WanVAE_(**cfg) + + # load checkpoint + weights_dict = load_weights(pretrained_path, cpu_offload=cpu_offload, load_from_rank0=load_from_rank0) + for k in weights_dict.keys(): + if weights_dict[k].dtype != dtype: + weights_dict[k] = weights_dict[k].to(dtype) + model.load_state_dict(weights_dict, assign=True) + + return model + + +class WanVAE: + def __init__( + self, + z_dim=16, + vae_path="cache/vae_step_411000.pth", + dtype=torch.float, + device="cuda", + parallel=False, + use_tiling=False, + cpu_offload=False, + use_2d_split=True, + load_from_rank0=False, + use_lightvae=False, + ): + self.dtype = dtype + self.device = device + self.parallel = parallel + self.use_tiling = use_tiling + self.cpu_offload = cpu_offload + self.use_2d_split = use_2d_split + if use_lightvae: + pruning_rate = 0.75 # 0.75 + else: + pruning_rate = 0.0 + + mean = [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921, + ] + std = [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.9160, + ] + self.mean = torch.tensor(mean, dtype=dtype, device=AI_DEVICE) + self.inv_std = 1.0 / torch.tensor(std, dtype=dtype, device=AI_DEVICE) + self.scale = [self.mean, self.inv_std] + + # (height, width, world_size) -> (world_size_h, world_size_w) + self.grid_table = { + # world_size = 2 + (60, 104, 2): (1, 2), + (68, 120, 2): (1, 2), + (90, 160, 2): (1, 2), + (60, 60, 2): (1, 2), + (72, 72, 2): (1, 2), + (88, 88, 2): (1, 2), + (120, 120, 2): (1, 2), + (104, 60, 2): (2, 1), + (120, 68, 2): (2, 1), + (160, 90, 2): (2, 1), + # world_size = 4 + (60, 104, 4): (2, 2), + (68, 120, 4): (2, 2), + (90, 160, 4): (2, 2), + (60, 60, 4): (2, 2), + (72, 72, 4): (2, 2), + (88, 88, 4): (2, 2), + (120, 120, 4): (2, 2), + (104, 60, 4): (2, 2), + (120, 68, 4): (2, 2), + (160, 90, 4): (2, 2), + # world_size = 8 + (60, 104, 8): (2, 4), + (68, 120, 8): (2, 4), + (90, 160, 8): (2, 4), + (60, 60, 8): (2, 4), + (72, 72, 8): (2, 4), + (88, 88, 8): (2, 4), + (120, 120, 8): (2, 4), + (104, 60, 8): (4, 2), + (120, 68, 8): (4, 2), + (160, 90, 8): (4, 2), + } + + # init model + self.model = ( + _video_vae(pretrained_path=vae_path, z_dim=z_dim, cpu_offload=cpu_offload, dtype=dtype, load_from_rank0=load_from_rank0, pruning_rate=pruning_rate) + .eval() + .requires_grad_(False) + .to(device) + .to(dtype) + ) + + def _calculate_2d_grid(self, latent_height, latent_width, world_size): + if (latent_height, latent_width, world_size) in self.grid_table: + best_h, best_w = self.grid_table[(latent_height, latent_width, world_size)] + # logger.info(f"Vae using cached 2D grid: {best_h}x{best_w} grid for {latent_height}x{latent_width} latent") + return best_h, best_w + + best_h, best_w = 1, world_size + min_aspect_diff = float("inf") + + for h in range(1, world_size + 1): + if world_size % h == 0: + w = world_size // h + if latent_height % h == 0 and latent_width % w == 0: + # Calculate how close this grid is to square + aspect_diff = abs((latent_height / h) - (latent_width / w)) + if aspect_diff < min_aspect_diff: + min_aspect_diff = aspect_diff + best_h, best_w = h, w + # logger.info(f"Vae using 2D grid & Update cache: {best_h}x{best_w} grid for {latent_height}x{latent_width} latent") + self.grid_table[(latent_height, latent_width, world_size)] = (best_h, best_w) + return best_h, best_w + + def current_device(self): + return next(self.model.parameters()).device + + def to_cpu(self): + self.model.encoder = self.model.encoder.to("cpu") + self.model.decoder = self.model.decoder.to("cpu") + self.model = self.model.to("cpu") + self.mean = self.mean.cpu() + self.inv_std = self.inv_std.cpu() + self.scale = [self.mean, self.inv_std] + + def to_cuda(self): + self.model.encoder = self.model.encoder.to(AI_DEVICE) + self.model.decoder = self.model.decoder.to(AI_DEVICE) + self.model = self.model.to(AI_DEVICE) + self.mean = self.mean.to(AI_DEVICE) + self.inv_std = self.inv_std.to(AI_DEVICE) + self.scale = [self.mean, self.inv_std] + + def encode_dist(self, video, world_size, cur_rank, split_dim): + spatial_ratio = 8 + + if split_dim == 3: + total_latent_len = video.shape[3] // spatial_ratio + elif split_dim == 4: + total_latent_len = video.shape[4] // spatial_ratio + else: + raise ValueError(f"Unsupported split_dim: {split_dim}") + + splited_chunk_len = total_latent_len // world_size + padding_size = 1 + + video_chunk_len = splited_chunk_len * spatial_ratio + video_padding_len = padding_size * spatial_ratio + + if cur_rank == 0: + if split_dim == 3: + video_chunk = video[:, :, :, : video_chunk_len + 2 * video_padding_len, :].contiguous() + elif split_dim == 4: + video_chunk = video[:, :, :, :, : video_chunk_len + 2 * video_padding_len].contiguous() + elif cur_rank == world_size - 1: + if split_dim == 3: + video_chunk = video[:, :, :, -(video_chunk_len + 2 * video_padding_len) :, :].contiguous() + elif split_dim == 4: + video_chunk = video[:, :, :, :, -(video_chunk_len + 2 * video_padding_len) :].contiguous() + else: + start_idx = cur_rank * video_chunk_len - video_padding_len + end_idx = (cur_rank + 1) * video_chunk_len + video_padding_len + if split_dim == 3: + video_chunk = video[:, :, :, start_idx:end_idx, :].contiguous() + elif split_dim == 4: + video_chunk = video[:, :, :, :, start_idx:end_idx].contiguous() + + if self.use_tiling: + encoded_chunk = self.model.tiled_encode(video_chunk, self.scale) + else: + encoded_chunk = self.model.encode(video_chunk, self.scale) + + if cur_rank == 0: + if split_dim == 3: + encoded_chunk = encoded_chunk[:, :, :, :splited_chunk_len, :].contiguous() + elif split_dim == 4: + encoded_chunk = encoded_chunk[:, :, :, :, :splited_chunk_len].contiguous() + elif cur_rank == world_size - 1: + if split_dim == 3: + encoded_chunk = encoded_chunk[:, :, :, -splited_chunk_len:, :].contiguous() + elif split_dim == 4: + encoded_chunk = encoded_chunk[:, :, :, :, -splited_chunk_len:].contiguous() + else: + if split_dim == 3: + encoded_chunk = encoded_chunk[:, :, :, padding_size:-padding_size, :].contiguous() + elif split_dim == 4: + encoded_chunk = encoded_chunk[:, :, :, :, padding_size:-padding_size].contiguous() + + full_encoded = [torch.empty_like(encoded_chunk) for _ in range(world_size)] + dist.all_gather(full_encoded, encoded_chunk) + + self.device_synchronize() + + encoded = torch.cat(full_encoded, dim=split_dim) + + return encoded.squeeze(0) + + def encode_dist_2d(self, video, world_size_h, world_size_w, cur_rank_h, cur_rank_w): + spatial_ratio = 8 + + # Calculate chunk sizes for both dimensions + total_latent_h = video.shape[3] // spatial_ratio + total_latent_w = video.shape[4] // spatial_ratio + + chunk_h = total_latent_h // world_size_h + chunk_w = total_latent_w // world_size_w + + padding_size = 1 + video_chunk_h = chunk_h * spatial_ratio + video_chunk_w = chunk_w * spatial_ratio + video_padding_h = padding_size * spatial_ratio + video_padding_w = padding_size * spatial_ratio + + # Calculate H dimension slice + if cur_rank_h == 0: + h_start = 0 + h_end = video_chunk_h + 2 * video_padding_h + elif cur_rank_h == world_size_h - 1: + h_start = video.shape[3] - (video_chunk_h + 2 * video_padding_h) + h_end = video.shape[3] + else: + h_start = cur_rank_h * video_chunk_h - video_padding_h + h_end = (cur_rank_h + 1) * video_chunk_h + video_padding_h + + # Calculate W dimension slice + if cur_rank_w == 0: + w_start = 0 + w_end = video_chunk_w + 2 * video_padding_w + elif cur_rank_w == world_size_w - 1: + w_start = video.shape[4] - (video_chunk_w + 2 * video_padding_w) + w_end = video.shape[4] + else: + w_start = cur_rank_w * video_chunk_w - video_padding_w + w_end = (cur_rank_w + 1) * video_chunk_w + video_padding_w + + # Extract the video chunk for this process + video_chunk = video[:, :, :, h_start:h_end, w_start:w_end].contiguous() + + # Encode the chunk + if self.use_tiling: + encoded_chunk = self.model.tiled_encode(video_chunk, self.scale) + else: + encoded_chunk = self.model.encode(video_chunk, self.scale) + + # Remove padding from encoded chunk + if cur_rank_h == 0: + encoded_h_start = 0 + encoded_h_end = chunk_h + elif cur_rank_h == world_size_h - 1: + encoded_h_start = encoded_chunk.shape[3] - chunk_h + encoded_h_end = encoded_chunk.shape[3] + else: + encoded_h_start = padding_size + encoded_h_end = encoded_chunk.shape[3] - padding_size + + if cur_rank_w == 0: + encoded_w_start = 0 + encoded_w_end = chunk_w + elif cur_rank_w == world_size_w - 1: + encoded_w_start = encoded_chunk.shape[4] - chunk_w + encoded_w_end = encoded_chunk.shape[4] + else: + encoded_w_start = padding_size + encoded_w_end = encoded_chunk.shape[4] - padding_size + + encoded_chunk = encoded_chunk[:, :, :, encoded_h_start:encoded_h_end, encoded_w_start:encoded_w_end].contiguous() + + # Gather all chunks + total_processes = world_size_h * world_size_w + full_encoded = [torch.empty_like(encoded_chunk) for _ in range(total_processes)] + + dist.all_gather(full_encoded, encoded_chunk) + + self.device_synchronize() + + # Reconstruct the full encoded tensor + encoded_rows = [] + for h_idx in range(world_size_h): + encoded_cols = [] + for w_idx in range(world_size_w): + process_idx = h_idx * world_size_w + w_idx + encoded_cols.append(full_encoded[process_idx]) + encoded_rows.append(torch.cat(encoded_cols, dim=4)) + + encoded = torch.cat(encoded_rows, dim=3) + + return encoded.squeeze(0) + + def encode(self, video, world_size_h=None, world_size_w=None): + """ + video: one video with shape [1, C, T, H, W]. + """ + if self.cpu_offload: + self.to_cuda() + + if self.parallel: + world_size = dist.get_world_size() + cur_rank = dist.get_rank() + height, width = video.shape[3], video.shape[4] + + if self.use_2d_split: + if world_size_h is None or world_size_w is None: + world_size_h, world_size_w = self._calculate_2d_grid(height // 8, width // 8, world_size) + cur_rank_h = cur_rank // world_size_w + cur_rank_w = cur_rank % world_size_w + out = self.encode_dist_2d(video, world_size_h, world_size_w, cur_rank_h, cur_rank_w) + else: + # Original 1D splitting logic + if width % world_size == 0: + out = self.encode_dist(video, world_size, cur_rank, split_dim=4) + elif height % world_size == 0: + out = self.encode_dist(video, world_size, cur_rank, split_dim=3) + else: + logger.info("Fall back to naive encode mode") + if self.use_tiling: + out = self.model.tiled_encode(video, self.scale).squeeze(0) + else: + out = self.model.encode(video, self.scale).squeeze(0) + else: + if self.use_tiling: + out = self.model.tiled_encode(video, self.scale).squeeze(0) + else: + out = self.model.encode(video, self.scale).squeeze(0) + + if self.cpu_offload: + self.to_cpu() + return out + + def decode_dist(self, zs, world_size, cur_rank, split_dim): + splited_total_len = zs.shape[split_dim] + splited_chunk_len = splited_total_len // world_size + padding_size = 1 + + if cur_rank == 0: + if split_dim == 2: + zs = zs[:, :, : splited_chunk_len + 2 * padding_size, :].contiguous() + elif split_dim == 3: + zs = zs[:, :, :, : splited_chunk_len + 2 * padding_size].contiguous() + elif cur_rank == world_size - 1: + if split_dim == 2: + zs = zs[:, :, -(splited_chunk_len + 2 * padding_size) :, :].contiguous() + elif split_dim == 3: + zs = zs[:, :, :, -(splited_chunk_len + 2 * padding_size) :].contiguous() + else: + if split_dim == 2: + zs = zs[:, :, cur_rank * splited_chunk_len - padding_size : (cur_rank + 1) * splited_chunk_len + padding_size, :].contiguous() + elif split_dim == 3: + zs = zs[:, :, :, cur_rank * splited_chunk_len - padding_size : (cur_rank + 1) * splited_chunk_len + padding_size].contiguous() + + decode_func = self.model.tiled_decode if self.use_tiling else self.model.decode + images = decode_func(zs.unsqueeze(0), self.scale).clamp_(-1, 1) + + if cur_rank == 0: + if split_dim == 2: + images = images[:, :, :, : splited_chunk_len * 8, :].contiguous() + elif split_dim == 3: + images = images[:, :, :, :, : splited_chunk_len * 8].contiguous() + elif cur_rank == world_size - 1: + if split_dim == 2: + images = images[:, :, :, -splited_chunk_len * 8 :, :].contiguous() + elif split_dim == 3: + images = images[:, :, :, :, -splited_chunk_len * 8 :].contiguous() + else: + if split_dim == 2: + images = images[:, :, :, 8 * padding_size : -8 * padding_size, :].contiguous() + elif split_dim == 3: + images = images[:, :, :, :, 8 * padding_size : -8 * padding_size].contiguous() + + full_images = [torch.empty_like(images) for _ in range(world_size)] + dist.all_gather(full_images, images) + + self.device_synchronize() + + images = torch.cat(full_images, dim=split_dim + 1) + + return images + + def decode_dist_2d(self, zs, world_size_h, world_size_w, cur_rank_h, cur_rank_w): + total_h = zs.shape[2] + total_w = zs.shape[3] + + chunk_h = total_h // world_size_h + chunk_w = total_w // world_size_w + + padding_size = 2 + + # Calculate H dimension slice + if cur_rank_h == 0: + h_start = 0 + h_end = chunk_h + 2 * padding_size + elif cur_rank_h == world_size_h - 1: + h_start = total_h - (chunk_h + 2 * padding_size) + h_end = total_h + else: + h_start = cur_rank_h * chunk_h - padding_size + h_end = (cur_rank_h + 1) * chunk_h + padding_size + + # Calculate W dimension slice + if cur_rank_w == 0: + w_start = 0 + w_end = chunk_w + 2 * padding_size + elif cur_rank_w == world_size_w - 1: + w_start = total_w - (chunk_w + 2 * padding_size) + w_end = total_w + else: + w_start = cur_rank_w * chunk_w - padding_size + w_end = (cur_rank_w + 1) * chunk_w + padding_size + + # Extract the latent chunk for this process + zs_chunk = zs[:, :, h_start:h_end, w_start:w_end].contiguous() + + # Decode the chunk + decode_func = self.model.tiled_decode if self.use_tiling else self.model.decode + images_chunk = decode_func(zs_chunk.unsqueeze(0), self.scale).clamp_(-1, 1) + + # Remove padding from decoded chunk + spatial_ratio = 8 + if cur_rank_h == 0: + decoded_h_start = 0 + decoded_h_end = chunk_h * spatial_ratio + elif cur_rank_h == world_size_h - 1: + decoded_h_start = images_chunk.shape[3] - chunk_h * spatial_ratio + decoded_h_end = images_chunk.shape[3] + else: + decoded_h_start = padding_size * spatial_ratio + decoded_h_end = images_chunk.shape[3] - padding_size * spatial_ratio + + if cur_rank_w == 0: + decoded_w_start = 0 + decoded_w_end = chunk_w * spatial_ratio + elif cur_rank_w == world_size_w - 1: + decoded_w_start = images_chunk.shape[4] - chunk_w * spatial_ratio + decoded_w_end = images_chunk.shape[4] + else: + decoded_w_start = padding_size * spatial_ratio + decoded_w_end = images_chunk.shape[4] - padding_size * spatial_ratio + + images_chunk = images_chunk[:, :, :, decoded_h_start:decoded_h_end, decoded_w_start:decoded_w_end].contiguous() + + # Gather all chunks + total_processes = world_size_h * world_size_w + full_images = [torch.empty_like(images_chunk) for _ in range(total_processes)] + + dist.all_gather(full_images, images_chunk) + + self.device_synchronize() + + # Reconstruct the full image tensor + image_rows = [] + for h_idx in range(world_size_h): + image_cols = [] + for w_idx in range(world_size_w): + process_idx = h_idx * world_size_w + w_idx + image_cols.append(full_images[process_idx]) + image_rows.append(torch.cat(image_cols, dim=4)) + + images = torch.cat(image_rows, dim=3) + + return images + + def decode_dist_2d_stream(self, zs, world_size_h, world_size_w, cur_rank_h, cur_rank_w): + total_h = zs.shape[2] + total_w = zs.shape[3] + + chunk_h = total_h // world_size_h + chunk_w = total_w // world_size_w + + padding_size = 2 + + # Calculate H dimension slice + if cur_rank_h == 0: + h_start = 0 + h_end = chunk_h + 2 * padding_size + elif cur_rank_h == world_size_h - 1: + h_start = total_h - (chunk_h + 2 * padding_size) + h_end = total_h + else: + h_start = cur_rank_h * chunk_h - padding_size + h_end = (cur_rank_h + 1) * chunk_h + padding_size + + # Calculate W dimension slice + if cur_rank_w == 0: + w_start = 0 + w_end = chunk_w + 2 * padding_size + elif cur_rank_w == world_size_w - 1: + w_start = total_w - (chunk_w + 2 * padding_size) + w_end = total_w + else: + w_start = cur_rank_w * chunk_w - padding_size + w_end = (cur_rank_w + 1) * chunk_w + padding_size + + # Extract the latent chunk for this process + zs_chunk = zs[:, :, h_start:h_end, w_start:w_end].contiguous() + + for image in self.model.decode_stream(zs_chunk.unsqueeze(0), self.scale): + images_chunk = image.clamp_(-1, 1) + # Remove padding from decoded chunk + spatial_ratio = 8 + if cur_rank_h == 0: + decoded_h_start = 0 + decoded_h_end = chunk_h * spatial_ratio + elif cur_rank_h == world_size_h - 1: + decoded_h_start = images_chunk.shape[3] - chunk_h * spatial_ratio + decoded_h_end = images_chunk.shape[3] + else: + decoded_h_start = padding_size * spatial_ratio + decoded_h_end = images_chunk.shape[3] - padding_size * spatial_ratio + + if cur_rank_w == 0: + decoded_w_start = 0 + decoded_w_end = chunk_w * spatial_ratio + elif cur_rank_w == world_size_w - 1: + decoded_w_start = images_chunk.shape[4] - chunk_w * spatial_ratio + decoded_w_end = images_chunk.shape[4] + else: + decoded_w_start = padding_size * spatial_ratio + decoded_w_end = images_chunk.shape[4] - padding_size * spatial_ratio + + images_chunk = images_chunk[:, :, :, decoded_h_start:decoded_h_end, decoded_w_start:decoded_w_end].contiguous() + + # Gather all chunks + total_processes = world_size_h * world_size_w + full_images = [torch.empty_like(images_chunk) for _ in range(total_processes)] + + dist.all_gather(full_images, images_chunk) + + self.device_synchronize() + + # Reconstruct the full image tensor + image_rows = [] + for h_idx in range(world_size_h): + image_cols = [] + for w_idx in range(world_size_w): + process_idx = h_idx * world_size_w + w_idx + image_cols.append(full_images[process_idx]) + image_rows.append(torch.cat(image_cols, dim=4)) + + images = torch.cat(image_rows, dim=3) + + yield images + + def decode(self, zs): + if self.cpu_offload: + self.to_cuda() + + if self.parallel: + world_size = dist.get_world_size() + cur_rank = dist.get_rank() + latent_height, latent_width = zs.shape[2], zs.shape[3] + + if self.use_2d_split: + world_size_h, world_size_w = self._calculate_2d_grid(latent_height, latent_width, world_size) + cur_rank_h = cur_rank // world_size_w + cur_rank_w = cur_rank % world_size_w + images = self.decode_dist_2d(zs, world_size_h, world_size_w, cur_rank_h, cur_rank_w) + else: + # Original 1D splitting logic + if latent_width % world_size == 0: + images = self.decode_dist(zs, world_size, cur_rank, split_dim=3) + elif latent_height % world_size == 0: + images = self.decode_dist(zs, world_size, cur_rank, split_dim=2) + else: + logger.info("Fall back to naive decode mode") + images = self.model.decode(zs.unsqueeze(0), self.scale).clamp_(-1, 1) + else: + decode_func = self.model.tiled_decode if self.use_tiling else self.model.decode + images = decode_func(zs.unsqueeze(0), self.scale).clamp_(-1, 1) + + if self.cpu_offload: + images = images.cpu() + self.to_cpu() + + return images + + def decode_stream(self, zs): + if self.cpu_offload: + self.to_cuda() + + if self.parallel: + world_size = dist.get_world_size() + cur_rank = dist.get_rank() + latent_height, latent_width = zs.shape[2], zs.shape[3] + + world_size_h, world_size_w = self._calculate_2d_grid(latent_height, latent_width, world_size) + cur_rank_h = cur_rank // world_size_w + cur_rank_w = cur_rank % world_size_w + for images in self.decode_dist_2d_stream(zs, world_size_h, world_size_w, cur_rank_h, cur_rank_w): + yield images + else: + for image in self.model.decode_stream(zs.unsqueeze(0), self.scale): + yield image.clamp_(-1, 1) + + if self.cpu_offload: + self.to_cpu() + + def encode_video(self, vid): + return self.model.encode_video(vid) + + def decode_video(self, vid_enc): + return self.model.decode_video(vid_enc) + + def device_synchronize( + self, + ): + torch_device_module.synchronize() diff --git a/lightx2v/models/video_encoders/hf/wan/vae_2_2.py b/lightx2v/models/video_encoders/hf/wan/vae_2_2.py new file mode 100644 index 0000000..d345857 --- /dev/null +++ b/lightx2v/models/video_encoders/hf/wan/vae_2_2.py @@ -0,0 +1,1045 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import logging + +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange + +from lightx2v.utils.utils import load_weights +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + +__all__ = [ + "Wan2_2_VAE", +] + +CACHE_T = 2 + + +class CausalConv3d(nn.Conv3d): + """ + Causal 3d convolusion. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._padding = ( + self.padding[2], + self.padding[2], + self.padding[1], + self.padding[1], + 2 * self.padding[0], + 0, + ) + self.padding = (0, 0, 0) + + def forward(self, x, cache_x=None): + padding = list(self._padding) + if cache_x is not None and self._padding[4] > 0: + cache_x = cache_x.to(x.device) + x = torch.cat([cache_x, x], dim=2) + padding[4] -= cache_x.shape[2] + x = F.pad(x, padding) + + return super().forward(x) + + +class RMS_norm(nn.Module): + def __init__(self, dim, channel_first=True, images=True, bias=False): + super().__init__() + broadcastable_dims = (1, 1, 1) if not images else (1, 1) + shape = (dim, *broadcastable_dims) if channel_first else (dim,) + + self.channel_first = channel_first + self.scale = dim**0.5 + self.gamma = nn.Parameter(torch.ones(shape)) + self.bias = nn.Parameter(torch.zeros(shape)) if bias else 0.0 + + def forward(self, x): + return F.normalize(x, dim=(1 if self.channel_first else -1)) * self.scale * self.gamma + self.bias + + +class Upsample(nn.Upsample): + def forward(self, x): + """ + Fix bfloat16 support for nearest neighbor interpolation. + """ + return super().forward(x.float()).type_as(x) + + +class Resample(nn.Module): + def __init__(self, dim, mode): + assert mode in ( + "none", + "upsample2d", + "upsample3d", + "downsample2d", + "downsample3d", + ) + super().__init__() + self.dim = dim + self.mode = mode + + # layers + if mode == "upsample2d": + self.resample = nn.Sequential( + Upsample(scale_factor=(2.0, 2.0), mode="nearest-exact"), + nn.Conv2d(dim, dim, 3, padding=1), + ) + elif mode == "upsample3d": + self.resample = nn.Sequential( + Upsample(scale_factor=(2.0, 2.0), mode="nearest-exact"), + nn.Conv2d(dim, dim, 3, padding=1), + # nn.Conv2d(dim, dim//2, 3, padding=1) + ) + self.time_conv = CausalConv3d(dim, dim * 2, (3, 1, 1), padding=(1, 0, 0)) + elif mode == "downsample2d": + self.resample = nn.Sequential(nn.ZeroPad2d((0, 1, 0, 1)), nn.Conv2d(dim, dim, 3, stride=(2, 2))) + elif mode == "downsample3d": + self.resample = nn.Sequential(nn.ZeroPad2d((0, 1, 0, 1)), nn.Conv2d(dim, dim, 3, stride=(2, 2))) + self.time_conv = CausalConv3d(dim, dim, (3, 1, 1), stride=(2, 1, 1), padding=(0, 0, 0)) + else: + self.resample = nn.Identity() + + def forward(self, x, feat_cache=None, feat_idx=[0]): + b, c, t, h, w = x.size() + if self.mode == "upsample3d": + if feat_cache is not None: + idx = feat_idx[0] + if feat_cache[idx] is None: + feat_cache[idx] = "Rep" + feat_idx[0] += 1 + else: + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None and feat_cache[idx] != "Rep": + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + if cache_x.shape[2] < 2 and feat_cache[idx] is not None and feat_cache[idx] == "Rep": + cache_x = torch.cat( + [torch.zeros_like(cache_x).to(cache_x.device), cache_x], + dim=2, + ) + if feat_cache[idx] == "Rep": + x = self.time_conv(x) + else: + x = self.time_conv(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + x = x.reshape(b, 2, c, t, h, w) + x = torch.stack((x[:, 0, :, :, :, :], x[:, 1, :, :, :, :]), 3) + x = x.reshape(b, c, t * 2, h, w) + t = x.shape[2] + x = rearrange(x, "b c t h w -> (b t) c h w") + x = self.resample(x) + x = rearrange(x, "(b t) c h w -> b c t h w", t=t) + + if self.mode == "downsample3d": + if feat_cache is not None: + idx = feat_idx[0] + if feat_cache[idx] is None: + feat_cache[idx] = x.clone() + feat_idx[0] += 1 + else: + cache_x = x[:, :, -1:, :, :].clone() + x = self.time_conv(torch.cat([feat_cache[idx][:, :, -1:, :, :], x], 2)) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + return x + + def init_weight(self, conv): + conv_weight = conv.weight.detach().clone() + nn.init.zeros_(conv_weight) + c1, c2, t, h, w = conv_weight.size() + one_matrix = torch.eye(c1, c2) + init_matrix = one_matrix + nn.init.zeros_(conv_weight) + conv_weight.data[:, :, 1, 0, 0] = init_matrix # * 0.5 + conv.weight = nn.Parameter(conv_weight) + nn.init.zeros_(conv.bias.data) + + def init_weight2(self, conv): + conv_weight = conv.weight.data.detach().clone() + nn.init.zeros_(conv_weight) + c1, c2, t, h, w = conv_weight.size() + init_matrix = torch.eye(c1 // 2, c2) + conv_weight[: c1 // 2, :, -1, 0, 0] = init_matrix + conv_weight[c1 // 2 :, :, -1, 0, 0] = init_matrix + conv.weight = nn.Parameter(conv_weight) + nn.init.zeros_(conv.bias.data) + + +class ResidualBlock(nn.Module): + def __init__(self, in_dim, out_dim, dropout=0.0): + super().__init__() + self.in_dim = in_dim + self.out_dim = out_dim + + # layers + self.residual = nn.Sequential( + RMS_norm(in_dim, images=False), + nn.SiLU(), + CausalConv3d(in_dim, out_dim, 3, padding=1), + RMS_norm(out_dim, images=False), + nn.SiLU(), + nn.Dropout(dropout), + CausalConv3d(out_dim, out_dim, 3, padding=1), + ) + self.shortcut = CausalConv3d(in_dim, out_dim, 1) if in_dim != out_dim else nn.Identity() + + def forward(self, x, feat_cache=None, feat_idx=[0]): + h = self.shortcut(x) + for layer in self.residual: + if isinstance(layer, CausalConv3d) and feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + # cache last frame of last two chunk + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = layer(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = layer(x) + return x + h + + +class AttentionBlock(nn.Module): + """ + Causal self-attention with a single head. + """ + + def __init__(self, dim): + super().__init__() + self.dim = dim + + # layers + self.norm = RMS_norm(dim) + self.to_qkv = nn.Conv2d(dim, dim * 3, 1) + self.proj = nn.Conv2d(dim, dim, 1) + + # zero out the last layer params + nn.init.zeros_(self.proj.weight) + + def forward(self, x): + identity = x + b, c, t, h, w = x.size() + x = rearrange(x, "b c t h w -> (b t) c h w") + x = self.norm(x) + # compute query, key, value + q, k, v = self.to_qkv(x).reshape(b * t, 1, c * 3, -1).permute(0, 1, 3, 2).contiguous().chunk(3, dim=-1) + + # apply attention + x = F.scaled_dot_product_attention( + q, + k, + v, + ) + x = x.squeeze(1).permute(0, 2, 1).reshape(b * t, c, h, w) + + # output + x = self.proj(x) + x = rearrange(x, "(b t) c h w-> b c t h w", t=t) + return x + identity + + +def patchify(x, patch_size): + if patch_size == 1: + return x + + if x.dim() == 6: + x = x.squeeze(0) + + if x.dim() == 4: + x = rearrange(x, "b c (h q) (w r) -> b (c r q) h w", q=patch_size, r=patch_size) + elif x.dim() == 5: + x = rearrange( + x, + "b c f (h q) (w r) -> b (c r q) f h w", + q=patch_size, + r=patch_size, + ) + else: + raise ValueError(f"Invalid input shape: {x.shape}") + + return x + + +def unpatchify(x, patch_size): + if patch_size == 1: + return x + + if x.dim() == 4: + x = rearrange(x, "b (c r q) h w -> b c (h q) (w r)", q=patch_size, r=patch_size) + elif x.dim() == 5: + x = rearrange( + x, + "b (c r q) f h w -> b c f (h q) (w r)", + q=patch_size, + r=patch_size, + ) + return x + + +class AvgDown3D(nn.Module): + def __init__( + self, + in_channels, + out_channels, + factor_t, + factor_s=1, + ): + super().__init__() + self.in_channels = in_channels + self.out_channels = out_channels + self.factor_t = factor_t + self.factor_s = factor_s + self.factor = self.factor_t * self.factor_s * self.factor_s + + assert in_channels * self.factor % out_channels == 0 + self.group_size = in_channels * self.factor // out_channels + + def forward(self, x: torch.Tensor) -> torch.Tensor: + pad_t = (self.factor_t - x.shape[2] % self.factor_t) % self.factor_t + pad = (0, 0, 0, 0, pad_t, 0) + x = F.pad(x, pad) + B, C, T, H, W = x.shape + x = x.view( + B, + C, + T // self.factor_t, + self.factor_t, + H // self.factor_s, + self.factor_s, + W // self.factor_s, + self.factor_s, + ) + x = x.permute(0, 1, 3, 5, 7, 2, 4, 6).contiguous() + x = x.view( + B, + C * self.factor, + T // self.factor_t, + H // self.factor_s, + W // self.factor_s, + ) + x = x.view( + B, + self.out_channels, + self.group_size, + T // self.factor_t, + H // self.factor_s, + W // self.factor_s, + ) + x = x.mean(dim=2) + return x + + +class DupUp3D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + factor_t, + factor_s=1, + ): + super().__init__() + self.in_channels = in_channels + self.out_channels = out_channels + + self.factor_t = factor_t + self.factor_s = factor_s + self.factor = self.factor_t * self.factor_s * self.factor_s + + assert out_channels * self.factor % in_channels == 0 + self.repeats = out_channels * self.factor // in_channels + + def forward(self, x: torch.Tensor, first_chunk=False) -> torch.Tensor: + x = x.repeat_interleave(self.repeats, dim=1) + x = x.view( + x.size(0), + self.out_channels, + self.factor_t, + self.factor_s, + self.factor_s, + x.size(2), + x.size(3), + x.size(4), + ) + x = x.permute(0, 1, 5, 2, 6, 3, 7, 4).contiguous() + x = x.view( + x.size(0), + self.out_channels, + x.size(2) * self.factor_t, + x.size(4) * self.factor_s, + x.size(6) * self.factor_s, + ) + if first_chunk: + x = x[:, :, self.factor_t - 1 :, :, :] + return x + + +class Down_ResidualBlock(nn.Module): + def __init__(self, in_dim, out_dim, dropout, mult, temperal_downsample=False, down_flag=False): + super().__init__() + + # Shortcut path with downsample + self.avg_shortcut = AvgDown3D( + in_dim, + out_dim, + factor_t=2 if temperal_downsample else 1, + factor_s=2 if down_flag else 1, + ) + + # Main path with residual blocks and downsample + downsamples = [] + for _ in range(mult): + downsamples.append(ResidualBlock(in_dim, out_dim, dropout)) + in_dim = out_dim + + # Add the final downsample block + if down_flag: + mode = "downsample3d" if temperal_downsample else "downsample2d" + downsamples.append(Resample(out_dim, mode=mode)) + + self.downsamples = nn.Sequential(*downsamples) + + def forward(self, x, feat_cache=None, feat_idx=[0]): + x_copy = x.clone() + for module in self.downsamples: + x = module(x, feat_cache, feat_idx) + + return x + self.avg_shortcut(x_copy) + + +class Up_ResidualBlock(nn.Module): + def __init__(self, in_dim, out_dim, dropout, mult, temperal_upsample=False, up_flag=False): + super().__init__() + # Shortcut path with upsample + if up_flag: + self.avg_shortcut = DupUp3D( + in_dim, + out_dim, + factor_t=2 if temperal_upsample else 1, + factor_s=2 if up_flag else 1, + ) + else: + self.avg_shortcut = None + + # Main path with residual blocks and upsample + upsamples = [] + for _ in range(mult): + upsamples.append(ResidualBlock(in_dim, out_dim, dropout)) + in_dim = out_dim + + # Add the final upsample block + if up_flag: + mode = "upsample3d" if temperal_upsample else "upsample2d" + upsamples.append(Resample(out_dim, mode=mode)) + + self.upsamples = nn.Sequential(*upsamples) + + def forward(self, x, feat_cache=None, feat_idx=[0], first_chunk=False): + x_main = x.clone() + for module in self.upsamples: + x_main = module(x_main, feat_cache, feat_idx) + if self.avg_shortcut is not None: + x_shortcut = self.avg_shortcut(x, first_chunk) + return x_main + x_shortcut + else: + return x_main + + +class Encoder3d(nn.Module): + def __init__( + self, + dim=128, + z_dim=4, + dim_mult=[1, 2, 4, 4], + num_res_blocks=2, + attn_scales=[], + temperal_downsample=[True, True, False], + dropout=0.0, + ): + super().__init__() + self.dim = dim + self.z_dim = z_dim + self.dim_mult = dim_mult + self.num_res_blocks = num_res_blocks + self.attn_scales = attn_scales + self.temperal_downsample = temperal_downsample + + # dimensions + dims = [dim * u for u in [1] + dim_mult] + scale = 1.0 + + # init block + self.conv1 = CausalConv3d(12, dims[0], 3, padding=1) + + # downsample blocks + downsamples = [] + for i, (in_dim, out_dim) in enumerate(zip(dims[:-1], dims[1:])): + t_down_flag = temperal_downsample[i] if i < len(temperal_downsample) else False + downsamples.append( + Down_ResidualBlock( + in_dim=in_dim, + out_dim=out_dim, + dropout=dropout, + mult=num_res_blocks, + temperal_downsample=t_down_flag, + down_flag=i != len(dim_mult) - 1, + ) + ) + scale /= 2.0 + self.downsamples = nn.Sequential(*downsamples) + + # middle blocks + self.middle = nn.Sequential( + ResidualBlock(out_dim, out_dim, dropout), + AttentionBlock(out_dim), + ResidualBlock(out_dim, out_dim, dropout), + ) + + # # output blocks + self.head = nn.Sequential( + RMS_norm(out_dim, images=False), + nn.SiLU(), + CausalConv3d(out_dim, z_dim, 3, padding=1), + ) + + def forward(self, x, feat_cache=None, feat_idx=[0]): + if feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = self.conv1(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = self.conv1(x) + + ## downsamples + for layer in self.downsamples: + if feat_cache is not None: + x = layer(x, feat_cache, feat_idx) + else: + x = layer(x) + + ## middle + for layer in self.middle: + if isinstance(layer, ResidualBlock) and feat_cache is not None: + x = layer(x, feat_cache, feat_idx) + else: + x = layer(x) + + ## head + for layer in self.head: + if isinstance(layer, CausalConv3d) and feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = layer(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = layer(x) + + return x + + +class Decoder3d(nn.Module): + def __init__( + self, + dim=128, + z_dim=4, + dim_mult=[1, 2, 4, 4], + num_res_blocks=2, + attn_scales=[], + temperal_upsample=[False, True, True], + dropout=0.0, + ): + super().__init__() + self.dim = dim + self.z_dim = z_dim + self.dim_mult = dim_mult + self.num_res_blocks = num_res_blocks + self.attn_scales = attn_scales + self.temperal_upsample = temperal_upsample + + # dimensions + dims = [dim * u for u in [dim_mult[-1]] + dim_mult[::-1]] + scale = 1.0 / 2 ** (len(dim_mult) - 2) + # init block + self.conv1 = CausalConv3d(z_dim, dims[0], 3, padding=1) + + # middle blocks + self.middle = nn.Sequential( + ResidualBlock(dims[0], dims[0], dropout), + AttentionBlock(dims[0]), + ResidualBlock(dims[0], dims[0], dropout), + ) + + # upsample blocks + upsamples = [] + for i, (in_dim, out_dim) in enumerate(zip(dims[:-1], dims[1:])): + t_up_flag = temperal_upsample[i] if i < len(temperal_upsample) else False + upsamples.append( + Up_ResidualBlock( + in_dim=in_dim, + out_dim=out_dim, + dropout=dropout, + mult=num_res_blocks + 1, + temperal_upsample=t_up_flag, + up_flag=i != len(dim_mult) - 1, + ) + ) + self.upsamples = nn.Sequential(*upsamples) + + # output blocks + self.head = nn.Sequential( + RMS_norm(out_dim, images=False), + nn.SiLU(), + CausalConv3d(out_dim, 12, 3, padding=1), + ) + + def forward(self, x, feat_cache=None, feat_idx=[0], first_chunk=False, offload_cache=False): + if feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = self.conv1(x, feat_cache[idx]) + feat_cache[idx] = cache_x + feat_idx[0] += 1 + else: + x = self.conv1(x) + + for layer in self.middle: + if isinstance(layer, ResidualBlock) and feat_cache is not None: + idx = feat_idx[0] + x = layer(x, feat_cache, feat_idx) + if offload_cache: + for _idx in range(idx, feat_idx[0]): + if isinstance(feat_cache[_idx], torch.Tensor): + feat_cache[_idx] = feat_cache[_idx].cpu() + else: + x = layer(x) + + ## upsamples + for layer in self.upsamples: + if feat_cache is not None: + idx = feat_idx[0] + x = layer(x, feat_cache, feat_idx, first_chunk) + if offload_cache: + for _idx in range(idx, feat_idx[0]): + if isinstance(feat_cache[_idx], torch.Tensor): + feat_cache[_idx] = feat_cache[_idx].cpu() + else: + x = layer(x) + + ## head + for layer in self.head: + if isinstance(layer, CausalConv3d) and feat_cache is not None: + idx = feat_idx[0] + cache_x = x[:, :, -CACHE_T:, :, :].clone() + if cache_x.shape[2] < 2 and feat_cache[idx] is not None: + cache_x = torch.cat( + [ + feat_cache[idx][:, :, -1, :, :].unsqueeze(2).to(cache_x.device), + cache_x, + ], + dim=2, + ) + x = layer(x, feat_cache[idx]) + feat_cache[idx] = cache_x.cpu() if offload_cache else cache_x + feat_idx[0] += 1 + else: + x = layer(x) + return x + + +def count_conv3d(model): + count = 0 + for m in model.modules(): + if isinstance(m, CausalConv3d): + count += 1 + return count + + +class WanVAE_(nn.Module): + def __init__( + self, + dim=160, + dec_dim=256, + z_dim=16, + dim_mult=[1, 2, 4, 4], + num_res_blocks=2, + attn_scales=[], + temperal_downsample=[True, True, False], + dropout=0.0, + ): + super().__init__() + self.dim = dim + self.z_dim = z_dim + self.dim_mult = dim_mult + self.num_res_blocks = num_res_blocks + self.attn_scales = attn_scales + self.temperal_downsample = temperal_downsample + self.temperal_upsample = temperal_downsample[::-1] + + # modules + self.encoder = Encoder3d( + dim, + z_dim * 2, + dim_mult, + num_res_blocks, + attn_scales, + self.temperal_downsample, + dropout, + ) + self.conv1 = CausalConv3d(z_dim * 2, z_dim * 2, 1) + self.conv2 = CausalConv3d(z_dim, z_dim, 1) + self.decoder = Decoder3d( + dec_dim, + z_dim, + dim_mult, + num_res_blocks, + attn_scales, + self.temperal_upsample, + dropout, + ) + + def forward(self, x, scale=[0, 1]): + mu = self.encode(x, scale) + x_recon = self.decode(mu, scale) + return x_recon, mu + + def encode(self, x, scale, return_mu=False): + self.clear_cache() + x = patchify(x, patch_size=2) + t = x.shape[2] + iter_ = 1 + (t - 1) // 4 + for i in range(iter_): + self._enc_conv_idx = [0] + if i == 0: + out = self.encoder( + x[:, :, :1, :, :], + feat_cache=self._enc_feat_map, + feat_idx=self._enc_conv_idx, + ) + else: + out_ = self.encoder( + x[:, :, 1 + 4 * (i - 1) : 1 + 4 * i, :, :], + feat_cache=self._enc_feat_map, + feat_idx=self._enc_conv_idx, + ) + out = torch.cat([out, out_], 2) + mu, log_var = self.conv1(out).chunk(2, dim=1) + if isinstance(scale[0], torch.Tensor): + mu = (mu - scale[0].view(1, self.z_dim, 1, 1, 1)) * scale[1].view(1, self.z_dim, 1, 1, 1) + else: + mu = (mu - scale[0]) * scale[1] + self.clear_cache() + if return_mu: + return mu, log_var + else: + return mu + + def decode(self, z, scale, offload_cache=False): + self.clear_cache() + if isinstance(scale[0], torch.Tensor): + z = z / scale[1].view(1, self.z_dim, 1, 1, 1) + scale[0].view(1, self.z_dim, 1, 1, 1) + else: + z = z / scale[1] + scale[0] + iter_ = z.shape[2] + x = self.conv2(z) + for i in range(iter_): + self._conv_idx = [0] + if i == 0: + out = self.decoder(x[:, :, i : i + 1, :, :], feat_cache=self._feat_map, feat_idx=self._conv_idx, first_chunk=True, offload_cache=offload_cache) + else: + out_ = self.decoder(x[:, :, i : i + 1, :, :], feat_cache=self._feat_map, feat_idx=self._conv_idx, offload_cache=offload_cache) + out = torch.cat([out, out_], 2) + out = unpatchify(out, patch_size=2) + self.clear_cache() + return out + + def reparameterize(self, mu, log_var): + std = torch.exp(0.5 * log_var) + eps = torch.randn_like(std) + return eps * std + mu + + def sample(self, imgs, deterministic=False, scale=[0, 1]): + mu, log_var = self.encode(imgs, scale, return_mu=True) + if deterministic: + return mu + std = torch.exp(0.5 * log_var.clamp(-30.0, 20.0)) + return mu + std * torch.randn_like(std), mu, log_var + + def clear_cache(self): + self._conv_num = count_conv3d(self.decoder) + self._conv_idx = [0] + self._feat_map = [None] * self._conv_num + # cache encode + self._enc_conv_num = count_conv3d(self.encoder) + self._enc_conv_idx = [0] + self._enc_feat_map = [None] * self._enc_conv_num + + def encode_video(self, x, scale=[0, 1]): + assert x.ndim == 5 # NTCHW + assert x.shape[2] % 3 == 0 + x = x.transpose(1, 2) + y = x.mul(2).sub_(1) + y, mu, log_var = self.sample(y, scale=scale) + return y.transpose(1, 2).to(x), mu, log_var + + def decode_video(self, x, scale=[0, 1]): + assert x.ndim == 5 # NTCHW + assert x.shape[2] % self.z_dim == 0 + x = x.transpose(1, 2) + # B, C, T, H, W + y = x + y = self.decode(y, scale).clamp_(-1, 1) + y = y.mul_(0.5).add_(0.5).clamp_(0, 1) # NCTHW + return y.transpose(1, 2).to(x) + + +def _video_vae(pretrained_path=None, z_dim=16, dim=160, device="cpu", cpu_offload=False, dtype=torch.float32, load_from_rank0=False, **kwargs): + # params + cfg = dict( + dim=dim, + z_dim=z_dim, + dim_mult=[1, 2, 4, 4], + num_res_blocks=2, + attn_scales=[], + temperal_downsample=[True, True, True], + dropout=0.0, + ) + cfg.update(**kwargs) + + # init model + with torch.device("meta"): + model = WanVAE_(**cfg) + + # load checkpoint + logging.info(f"loading {pretrained_path}") + weights_dict = load_weights(pretrained_path, cpu_offload=cpu_offload, load_from_rank0=load_from_rank0) + for k in weights_dict.keys(): + if weights_dict[k].dtype != dtype: + weights_dict[k] = weights_dict[k].to(dtype) + model.load_state_dict(weights_dict, assign=True) + + return model + + +class Wan2_2_VAE: + def __init__( + self, + z_dim=48, + c_dim=160, + vae_path=None, + dim_mult=[1, 2, 4, 4], + temperal_downsample=[False, True, True], + dtype=torch.float, + device="cuda", + cpu_offload=False, + offload_cache=False, + load_from_rank0=False, + **kwargs, + ): + self.dtype = dtype + self.device = device + self.cpu_offload = cpu_offload + self.offload_cache = offload_cache + + self.mean = torch.tensor( + [ + -0.2289, + -0.0052, + -0.1323, + -0.2339, + -0.2799, + 0.0174, + 0.1838, + 0.1557, + -0.1382, + 0.0542, + 0.2813, + 0.0891, + 0.1570, + -0.0098, + 0.0375, + -0.1825, + -0.2246, + -0.1207, + -0.0698, + 0.5109, + 0.2665, + -0.2108, + -0.2158, + 0.2502, + -0.2055, + -0.0322, + 0.1109, + 0.1567, + -0.0729, + 0.0899, + -0.2799, + -0.1230, + -0.0313, + -0.1649, + 0.0117, + 0.0723, + -0.2839, + -0.2083, + -0.0520, + 0.3748, + 0.0152, + 0.1957, + 0.1433, + -0.2944, + 0.3573, + -0.0548, + -0.1681, + -0.0667, + ], + dtype=dtype, + device=AI_DEVICE, + ) + self.std = torch.tensor( + [ + 0.4765, + 1.0364, + 0.4514, + 1.1677, + 0.5313, + 0.4990, + 0.4818, + 0.5013, + 0.8158, + 1.0344, + 0.5894, + 1.0901, + 0.6885, + 0.6165, + 0.8454, + 0.4978, + 0.5759, + 0.3523, + 0.7135, + 0.6804, + 0.5833, + 1.4146, + 0.8986, + 0.5659, + 0.7069, + 0.5338, + 0.4889, + 0.4917, + 0.4069, + 0.4999, + 0.6866, + 0.4093, + 0.5709, + 0.6065, + 0.6415, + 0.4944, + 0.5726, + 1.2042, + 0.5458, + 1.6887, + 0.3971, + 1.0600, + 0.3943, + 0.5537, + 0.5444, + 0.4089, + 0.7468, + 0.7744, + ], + dtype=dtype, + device=AI_DEVICE, + ) + self.inv_std = 1.0 / self.std + self.scale = [self.mean, self.inv_std] + # init model + self.model = ( + _video_vae( + pretrained_path=vae_path, z_dim=z_dim, dim=c_dim, dim_mult=dim_mult, temperal_downsample=temperal_downsample, cpu_offload=cpu_offload, dtype=dtype, load_from_rank0=load_from_rank0 + ) + .eval() + .requires_grad_(False) + .to(device) + .to(dtype) + ) + + def to_cpu(self): + self.model.encoder = self.model.encoder.to("cpu") + self.model.decoder = self.model.decoder.to("cpu") + self.model = self.model.to("cpu") + self.mean = self.mean.cpu() + self.inv_std = self.inv_std.cpu() + self.scale = [self.mean, self.inv_std] + + def to_cuda(self): + self.model.encoder = self.model.encoder.to(AI_DEVICE) + self.model.decoder = self.model.decoder.to(AI_DEVICE) + self.model = self.model.to(AI_DEVICE) + self.mean = self.mean.to(AI_DEVICE) + self.inv_std = self.inv_std.to(AI_DEVICE) + self.scale = [self.mean, self.inv_std] + + def encode(self, video): + if self.cpu_offload: + self.to_cuda() + out = self.model.encode(video, self.scale).float().squeeze(0) + if self.cpu_offload: + self.to_cpu() + return out + + def decode(self, zs): + if self.cpu_offload: + self.to_cuda() + images = self.model.decode(zs.unsqueeze(0), self.scale, offload_cache=self.offload_cache if self.cpu_offload else False).float().clamp_(-1, 1) + if self.cpu_offload: + images = images.cpu().float() + self.to_cpu() + return images + + def encode_video(self, vid): + return self.model.encode_video(vid) + + def decode_video(self, vid_enc): + return self.model.decode_video(vid_enc) diff --git a/lightx2v/models/video_encoders/hf/wan/vae_sf.py b/lightx2v/models/video_encoders/hf/wan/vae_sf.py new file mode 100644 index 0000000..f480e9f --- /dev/null +++ b/lightx2v/models/video_encoders/hf/wan/vae_sf.py @@ -0,0 +1,348 @@ +import torch +import torch.nn as nn +from einops import rearrange, repeat + +from lightx2v.models.video_encoders.hf.wan.vae import WanVAE_, _video_vae +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +class WanSFVAE: + def __init__( + self, + z_dim=16, + vae_path="cache/vae_step_411000.pth", + dtype=torch.float, + device="cuda", + parallel=False, + use_tiling=False, + cpu_offload=False, + use_2d_split=True, + load_from_rank0=False, + **kwargs, + ): + self.dtype = dtype + self.device = device + self.parallel = parallel + self.use_tiling = use_tiling + self.cpu_offload = cpu_offload + self.use_2d_split = use_2d_split + + mean = [-0.7571, -0.7089, -0.9113, 0.1075, -0.1745, 0.9653, -0.1517, 1.5508, 0.4134, -0.0715, 0.5517, -0.3632, -0.1922, -0.9497, 0.2503, -0.2921] + std = [2.8184, 1.4541, 2.3275, 2.6558, 1.2196, 1.7708, 2.6052, 2.0743, 3.2687, 2.1526, 2.8652, 1.5579, 1.6382, 1.1253, 2.8251, 1.9160] + self.mean = torch.tensor(mean, dtype=torch.float32) + self.std = torch.tensor(std, dtype=torch.float32) + self.scale = [self.mean, 1.0 / self.std] + + # init model + self.model = _video_vae(pretrained_path=vae_path, z_dim=z_dim, cpu_offload=cpu_offload, dtype=dtype, load_from_rank0=load_from_rank0).eval().requires_grad_(False).to(device).to(dtype) + self.model.clear_cache() + self.upsampling_factor = 8 + + def to_cpu(self): + self.model.encoder = self.model.encoder.to("cpu") + self.model.decoder = self.model.decoder.to("cpu") + self.model = self.model.to("cpu") + self.mean = self.mean.cpu() + self.inv_std = self.inv_std.cpu() + self.scale = [self.mean, self.inv_std] + + def to_cuda(self): + self.model.encoder = self.model.encoder.to(AI_DEVICE) + self.model.decoder = self.model.decoder.to(AI_DEVICE) + self.model = self.model.to(AI_DEVICE) + self.mean = self.mean.to(AI_DEVICE) + self.inv_std = self.inv_std.to(AI_DEVICE) + self.scale = [self.mean, self.inv_std] + + def decode(self, latent: torch.Tensor, use_cache: bool = False) -> torch.Tensor: + # from [batch_size, num_frames, num_channels, height, width] + # to [batch_size, num_channels, num_frames, height, width] + latent = latent.transpose(0, 1).unsqueeze(0) + zs = latent.permute(0, 2, 1, 3, 4) + if use_cache: + assert latent.shape[0] == 1, "Batch size must be 1 when using cache" + + device, dtype = latent.device, latent.dtype + scale = [self.mean.to(device=device, dtype=dtype), 1.0 / self.std.to(device=device, dtype=dtype)] + + if use_cache: + decode_function = self.model.cached_decode + else: + decode_function = self.model.decode + + output = [] + for u in zs: + output.append(decode_function(u.unsqueeze(0), scale).float().clamp_(-1, 1).squeeze(0)) + output = torch.stack(output, dim=0) + # from [batch_size, num_channels, num_frames, height, width] + # to [batch_size, num_frames, num_channels, height, width] + output = output.permute(0, 2, 1, 3, 4).squeeze(0) + return output + + def tiled_encode(self, video, device, tile_size, tile_stride): + _, _, T, H, W = video.shape + size_h, size_w = tile_size + stride_h, stride_w = tile_stride + + # Split tasks + tasks = [] + for h in range(0, H, stride_h): + if h - stride_h >= 0 and h - stride_h + size_h >= H: + continue + for w in range(0, W, stride_w): + if w - stride_w >= 0 and w - stride_w + size_w >= W: + continue + h_, w_ = h + size_h, w + size_w + tasks.append((h, h_, w, w_)) + + data_device = "cpu" + computation_device = device + + out_T = (T + 3) // 4 + weight = torch.zeros((1, 1, out_T, H // self.upsampling_factor, W // self.upsampling_factor), dtype=video.dtype, device=data_device) + values = torch.zeros((1, 16, out_T, H // self.upsampling_factor, W // self.upsampling_factor), dtype=video.dtype, device=data_device) + for h, h_, w, w_ in tasks: # tqdm(tasks, desc="VAE encoding"): + hidden_states_batch = video[:, :, :, h:h_, w:w_].to(computation_device) + hidden_states_batch = self.model.encode(hidden_states_batch, self.scale).to(data_device) + + mask = self.build_mask( + hidden_states_batch, is_bound=(h == 0, h_ >= H, w == 0, w_ >= W), border_width=((size_h - stride_h) // self.upsampling_factor, (size_w - stride_w) // self.upsampling_factor) + ).to(dtype=video.dtype, device=data_device) + + target_h = h // self.upsampling_factor + target_w = w // self.upsampling_factor + values[ + :, + :, + :, + target_h : target_h + hidden_states_batch.shape[3], + target_w : target_w + hidden_states_batch.shape[4], + ] += hidden_states_batch * mask + weight[ + :, + :, + :, + target_h : target_h + hidden_states_batch.shape[3], + target_w : target_w + hidden_states_batch.shape[4], + ] += mask + values = values / weight + return values + + def single_encode(self, video, device): + video = video.to(device) + x = self.model.encode(video, self.scale) + return x + + def encode(self, videos, device, tiled=True, tile_size=(34, 34), tile_stride=(18, 16)): + videos = [video.to("cpu") for video in videos] + hidden_states = [] + for video in videos: + video = video.unsqueeze(0) + if tiled: + tile_size = (tile_size[0] * 8, tile_size[1] * 8) + tile_stride = (tile_stride[0] * 8, tile_stride[1] * 8) + hidden_state = self.tiled_encode(video, device, tile_size, tile_stride) + else: + hidden_state = self.single_encode(video, device) + hidden_state = hidden_state.squeeze(0) + hidden_states.append(hidden_state) + hidden_states = torch.stack(hidden_states) + return hidden_states + + +class WanMtxg2VAE(nn.Module): + def __init__(self, pretrained_path=None, z_dim=16): + super().__init__() + mean = [-0.7571, -0.7089, -0.9113, 0.1075, -0.1745, 0.9653, -0.1517, 1.5508, 0.4134, -0.0715, 0.5517, -0.3632, -0.1922, -0.9497, 0.2503, -0.2921] + std = [2.8184, 1.4541, 2.3275, 2.6558, 1.2196, 1.7708, 2.6052, 2.0743, 3.2687, 2.1526, 2.8652, 1.5579, 1.6382, 1.1253, 2.8251, 1.9160] + self.mean = torch.tensor(mean) + self.std = torch.tensor(std) + self.scale = [self.mean, 1.0 / self.std] + # init model + self.model = ( + WanVAE_( + dim=96, + z_dim=z_dim, + num_res_blocks=2, + dim_mult=[1, 2, 4, 4], + temperal_downsample=[False, True, True], + dropout=0.0, + pruning_rate=0.0, + ) + .eval() + .requires_grad_(False) + ) + if pretrained_path is not None: + self.model.load_state_dict(torch.load(pretrained_path, map_location="cpu"), assign=True) + self.upsampling_factor = 8 + + def to(self, *args, **kwargs): + self.mean = self.mean.to(*args, **kwargs) + self.std = self.std.to(*args, **kwargs) + self.scale = [self.mean, 1.0 / self.std] + self.model = self.model.to(*args, **kwargs) + return self + + def build_1d_mask(self, length, left_bound, right_bound, border_width): + x = torch.ones((length,)) + if not left_bound: + x[:border_width] = (torch.arange(border_width) + 1) / border_width + if not right_bound: + x[-border_width:] = torch.flip((torch.arange(border_width) + 1) / border_width, dims=(0,)) + return x + + def build_mask(self, data, is_bound, border_width): + _, _, _, H, W = data.shape + h = self.build_1d_mask(H, is_bound[0], is_bound[1], border_width[0]) + w = self.build_1d_mask(W, is_bound[2], is_bound[3], border_width[1]) + + h = repeat(h, "H -> H W", H=H, W=W) + w = repeat(w, "W -> H W", H=H, W=W) + + mask = torch.stack([h, w]).min(dim=0).values + mask = rearrange(mask, "H W -> 1 1 1 H W") + return mask + + def tiled_decode(self, hidden_states, device, tile_size, tile_stride): + _, _, T, H, W = hidden_states.shape + size_h, size_w = tile_size + stride_h, stride_w = tile_stride + + # Split tasks + tasks = [] + for h in range(0, H, stride_h): + if h - stride_h >= 0 and h - stride_h + size_h >= H: + continue + for w in range(0, W, stride_w): + if w - stride_w >= 0 and w - stride_w + size_w >= W: + continue + h_, w_ = h + size_h, w + size_w + tasks.append((h, h_, w, w_)) + + data_device = "cpu" # TODO + computation_device = device + + out_T = T * 4 - 3 + weight = torch.zeros((1, 1, out_T, H * self.upsampling_factor, W * self.upsampling_factor), dtype=hidden_states.dtype, device=data_device) + values = torch.zeros((1, 3, out_T, H * self.upsampling_factor, W * self.upsampling_factor), dtype=hidden_states.dtype, device=data_device) + + for h, h_, w, w_ in tasks: # tqdm(tasks, desc="VAE decoding"): + hidden_states_batch = hidden_states[:, :, :, h:h_, w:w_].to(computation_device) + hidden_states_batch = self.model.decode(hidden_states_batch, self.scale).to(data_device) + + mask = self.build_mask( + hidden_states_batch, is_bound=(h == 0, h_ >= H, w == 0, w_ >= W), border_width=((size_h - stride_h) * self.upsampling_factor, (size_w - stride_w) * self.upsampling_factor) + ).to(dtype=hidden_states.dtype, device=data_device) + + target_h = h * self.upsampling_factor + target_w = w * self.upsampling_factor + values[ + :, + :, + :, + target_h : target_h + hidden_states_batch.shape[3], + target_w : target_w + hidden_states_batch.shape[4], + ] += hidden_states_batch * mask + weight[ + :, + :, + :, + target_h : target_h + hidden_states_batch.shape[3], + target_w : target_w + hidden_states_batch.shape[4], + ] += mask + values = values / weight + values = values.clamp_(-1, 1) + return values + + def tiled_encode(self, video, device, tile_size, tile_stride): + _, _, T, H, W = video.shape + size_h, size_w = tile_size + stride_h, stride_w = tile_stride + + # Split tasks + tasks = [] + for h in range(0, H, stride_h): + if h - stride_h >= 0 and h - stride_h + size_h >= H: + continue + for w in range(0, W, stride_w): + if w - stride_w >= 0 and w - stride_w + size_w >= W: + continue + h_, w_ = h + size_h, w + size_w + tasks.append((h, h_, w, w_)) + + data_device = "cpu" + computation_device = device + + out_T = (T + 3) // 4 + weight = torch.zeros((1, 1, out_T, H // self.upsampling_factor, W // self.upsampling_factor), dtype=video.dtype, device=data_device) + values = torch.zeros((1, 16, out_T, H // self.upsampling_factor, W // self.upsampling_factor), dtype=video.dtype, device=data_device) + + for h, h_, w, w_ in tasks: # tqdm(tasks, desc="VAE encoding"): + hidden_states_batch = video[:, :, :, h:h_, w:w_].to(computation_device) + hidden_states_batch = self.model.encode(hidden_states_batch, self.scale).to(data_device) + + mask = self.build_mask( + hidden_states_batch, is_bound=(h == 0, h_ >= H, w == 0, w_ >= W), border_width=((size_h - stride_h) // self.upsampling_factor, (size_w - stride_w) // self.upsampling_factor) + ).to(dtype=video.dtype, device=data_device) + + target_h = h // self.upsampling_factor + target_w = w // self.upsampling_factor + values[ + :, + :, + :, + target_h : target_h + hidden_states_batch.shape[3], + target_w : target_w + hidden_states_batch.shape[4], + ] += hidden_states_batch * mask + weight[ + :, + :, + :, + target_h : target_h + hidden_states_batch.shape[3], + target_w : target_w + hidden_states_batch.shape[4], + ] += mask + values = values / weight + return values + + def single_encode(self, video, device): + video = video.to(device) + x = self.model.encode(video, self.scale) + return x + + def single_decode(self, hidden_state, device): + hidden_state = hidden_state.to(device) + video = self.model.decode(hidden_state, self.scale) + return video.clamp_(-1, 1) + + def encode(self, videos, device, tiled=True, tile_size=(34, 34), tile_stride=(18, 16)): + # videos: torch.Size([1, 3, 597, 352, 640]), device='cuda:0', dtype=torch.bfloat16 + videos = [video.to("cpu") for video in videos] + hidden_states = [] + for video in videos: + video = video.unsqueeze(0) # torch.Size([1, 3, 597, 352, 640]) torch.bfloat16 device(type='cpu') + if tiled: # True + tile_size = (tile_size[0] * 8, tile_size[1] * 8) + tile_stride = (tile_stride[0] * 8, tile_stride[1] * 8) + hidden_state = self.tiled_encode(video, device, tile_size, tile_stride) + else: + hidden_state = self.single_encode(video, device) + hidden_state = hidden_state.squeeze(0) + hidden_states.append(hidden_state) + hidden_states = torch.stack(hidden_states) + return hidden_states + + def decode(self, hidden_states, device, tiled=True, tile_size=(34, 34), tile_stride=(18, 16)): + hidden_states = [hidden_state.to("cpu") for hidden_state in hidden_states] + videos = [] + for hidden_state in hidden_states: + hidden_state = hidden_state.unsqueeze(0) + if tiled: + video = self.tiled_decode(hidden_state, device, tile_size, tile_stride) + else: + video = self.single_decode(hidden_state, device) + video = video.squeeze(0) + videos.append(video) + videos = torch.stack(videos) + return videos diff --git a/lightx2v/models/video_encoders/hf/wan/vae_tiny.py b/lightx2v/models/video_encoders/hf/wan/vae_tiny.py new file mode 100644 index 0000000..d67dd50 --- /dev/null +++ b/lightx2v/models/video_encoders/hf/wan/vae_tiny.py @@ -0,0 +1,216 @@ +import torch +import torch.nn as nn + +from lightx2v.models.video_encoders.hf.tae import TAEHV +from lightx2v.utils.memory_profiler import peak_memory_decorator + + +class DotDict(dict): + __getattr__ = dict.__getitem__ + __setattr__ = dict.__setitem__ + + +class WanVAE_tiny(nn.Module): + def __init__(self, vae_path="taew2_1.pth", dtype=torch.bfloat16, device="cuda", need_scaled=False): + super().__init__() + self.dtype = dtype + self.device = torch.device("cuda") + self.taehv = TAEHV(vae_path).to(self.dtype) + self.temperal_downsample = [True, True, False] + self.need_scaled = need_scaled + + if self.need_scaled: + self.latents_mean = [ + -0.7571, + -0.7089, + -0.9113, + 0.1075, + -0.1745, + 0.9653, + -0.1517, + 1.5508, + 0.4134, + -0.0715, + 0.5517, + -0.3632, + -0.1922, + -0.9497, + 0.2503, + -0.2921, + ] + + self.latents_std = [ + 2.8184, + 1.4541, + 2.3275, + 2.6558, + 1.2196, + 1.7708, + 2.6052, + 2.0743, + 3.2687, + 2.1526, + 2.8652, + 1.5579, + 1.6382, + 1.1253, + 2.8251, + 1.9160, + ] + + self.z_dim = 16 + + @peak_memory_decorator + @torch.no_grad() + def decode(self, latents): + latents = latents.unsqueeze(0) + + if self.need_scaled: + latents_mean = torch.tensor(self.latents_mean).view(1, self.z_dim, 1, 1, 1).to(latents.device, latents.dtype) + latents_std = 1.0 / torch.tensor(self.latents_std).view(1, self.z_dim, 1, 1, 1).to(latents.device, latents.dtype) + latents = latents / latents_std + latents_mean + + # low-memory, set parallel=True for faster + higher memory + return self.taehv.decode_video(latents.transpose(1, 2).to(self.dtype), parallel=False).transpose(1, 2).mul_(2).sub_(1) + + @torch.no_grad() + def encode_video(self, vid): + return self.taehv.encode_video(vid) + + @torch.no_grad() + def decode_video(self, vid_enc): + return self.taehv.decode_video(vid_enc) + + +class Wan2_2_VAE_tiny(nn.Module): + def __init__(self, vae_path="taew2_2.pth", dtype=torch.bfloat16, device="cuda", need_scaled=False): + super().__init__() + self.dtype = dtype + self.device = torch.device("cuda") + self.taehv = TAEHV(vae_path, model_type="wan22").to(self.dtype) + self.need_scaled = need_scaled + if self.need_scaled: + self.latents_mean = [ + -0.2289, + -0.0052, + -0.1323, + -0.2339, + -0.2799, + 0.0174, + 0.1838, + 0.1557, + -0.1382, + 0.0542, + 0.2813, + 0.0891, + 0.1570, + -0.0098, + 0.0375, + -0.1825, + -0.2246, + -0.1207, + -0.0698, + 0.5109, + 0.2665, + -0.2108, + -0.2158, + 0.2502, + -0.2055, + -0.0322, + 0.1109, + 0.1567, + -0.0729, + 0.0899, + -0.2799, + -0.1230, + -0.0313, + -0.1649, + 0.0117, + 0.0723, + -0.2839, + -0.2083, + -0.0520, + 0.3748, + 0.0152, + 0.1957, + 0.1433, + -0.2944, + 0.3573, + -0.0548, + -0.1681, + -0.0667, + ] + + self.latents_std = [ + 0.4765, + 1.0364, + 0.4514, + 1.1677, + 0.5313, + 0.4990, + 0.4818, + 0.5013, + 0.8158, + 1.0344, + 0.5894, + 1.0901, + 0.6885, + 0.6165, + 0.8454, + 0.4978, + 0.5759, + 0.3523, + 0.7135, + 0.6804, + 0.5833, + 1.4146, + 0.8986, + 0.5659, + 0.7069, + 0.5338, + 0.4889, + 0.4917, + 0.4069, + 0.4999, + 0.6866, + 0.4093, + 0.5709, + 0.6065, + 0.6415, + 0.4944, + 0.5726, + 1.2042, + 0.5458, + 1.6887, + 0.3971, + 1.0600, + 0.3943, + 0.5537, + 0.5444, + 0.4089, + 0.7468, + 0.7744, + ] + + self.z_dim = 48 + + @peak_memory_decorator + @torch.no_grad() + def decode(self, latents): + latents = latents.unsqueeze(0) + + if self.need_scaled: + latents_mean = torch.tensor(self.latents_mean).view(1, self.z_dim, 1, 1, 1).to(latents.device, latents.dtype) + latents_std = 1.0 / torch.tensor(self.latents_std).view(1, self.z_dim, 1, 1, 1).to(latents.device, latents.dtype) + latents = latents / latents_std + latents_mean + + # low-memory, set parallel=True for faster + higher memory + return self.taehv.decode_video(latents.transpose(1, 2).to(self.dtype), parallel=False).transpose(1, 2).mul_(2).sub_(1) + + @torch.no_grad() + def encode_video(self, vid): + return self.taehv.encode_video(vid) + + @torch.no_grad() + def decode_video(self, vid_enc): + return self.taehv.decode_video(vid_enc) diff --git a/lightx2v/pipeline.py b/lightx2v/pipeline.py new file mode 100644 index 0000000..c1f9037 --- /dev/null +++ b/lightx2v/pipeline.py @@ -0,0 +1,360 @@ +# please do not set envs in this file, it will be imported by the __init__.py file +# os.environ["TOKENIZERS_PARALLELISM"] = "false" +# os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True" +# os.environ["DTYPE"] = "BF16" +# os.environ["SENSITIVE_LAYER_DTYPE"] = "None" +# os.environ["PROFILING_DEBUG_LEVEL"] = "2" + +import json + +import torch +import torch.distributed as dist +from loguru import logger + +from lightx2v.models.runners.hunyuan_video.hunyuan_video_15_runner import HunyuanVideo15Runner # noqa: F401 +from lightx2v.models.runners.qwen_image.qwen_image_runner import QwenImageRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_animate_runner import WanAnimateRunner # noqa: F401 +# from lightx2v.models.runners.wan.wan_audio_runner import Wan22AudioRunner, WanAudioRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_distill_runner import WanDistillRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_matrix_game2_runner import WanSFMtxg2Runner # noqa: F401 +from lightx2v.models.runners.wan.wan_runner import Wan22MoeRunner, WanRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_sf_runner import WanSFRunner # noqa: F401 +from lightx2v.models.runners.wan.wan_vace_runner import WanVaceRunner # noqa: F401 +from lightx2v.utils.input_info import set_input_info +from lightx2v.utils.registry_factory import RUNNER_REGISTER +from lightx2v.utils.set_config import print_config, set_config, set_parallel_config +from lightx2v.utils.utils import seed_all + + +def dict_like(cls): + cls.__getitem__ = lambda self, key: getattr(self, key) + cls.__setitem__ = lambda self, key, value: setattr(self, key, value) + cls.__delitem__ = lambda self, key: delattr(self, key) + cls.__contains__ = lambda self, key: hasattr(self, key) + + def update(self, *args, **kwargs): + for arg in args: + if isinstance(arg, dict): + items = arg.items() + else: + items = arg + for k, v in items: + setattr(self, k, v) + for k, v in kwargs.items(): + setattr(self, k, v) + + def get(self, key, default=None): + return getattr(self, key, default) + + cls.get = get + cls.update = update + + return cls + + +@dict_like +class LightX2VPipeline: + def __init__( + self, + task, + model_path, + model_cls, + sf_model_path=None, + dit_original_ckpt=None, + low_noise_original_ckpt=None, + high_noise_original_ckpt=None, + transformer_model_name=None, + ): + self.task = task + self.model_path = model_path + self.model_cls = model_cls + self.sf_model_path = sf_model_path + self.dit_original_ckpt = dit_original_ckpt + self.low_noise_original_ckpt = low_noise_original_ckpt + self.high_noise_original_ckpt = high_noise_original_ckpt + self.transformer_model_name = transformer_model_name + + if self.model_cls in [ + "wan2.1", + "wan2.1_distill", + "wan2.1_vace", + "wan2.1_sf", + "wan2.1_sf_mtxg2", + "seko_talk", + "wan2.2_moe", + "wan2.2_moe_audio", + "wan2.2_audio", + "wan2.2_moe_distill", + "wan2.2_animate", + ]: + self.vae_stride = (4, 8, 8) + if self.model_cls.startswith("wan2.2_moe"): + self.use_image_encoder = False + elif self.model_cls in ["wan2.2"]: + self.vae_stride = (4, 16, 16) + self.num_channels_latents = 48 + elif self.model_cls in ["hunyuan_video_1.5", "hunyuan_video_1.5_distill"]: + self.vae_stride = (4, 16, 16) + self.num_channels_latents = 32 + + def create_generator( + self, + attn_mode="flash_attn2", + infer_steps=50, + num_frames=81, + height=480, + width=832, + guidance_scale=5.0, + sample_shift=5.0, + fps=16, + aspect_ratio="16:9", + boundary=0.900, + boundary_step_index=2, + denoising_step_list=[1000, 750, 500, 250], + config_json=None, + rope_type="torch", + ): + if config_json is not None: + self.set_infer_config_json(config_json) + else: + self.set_infer_config( + attn_mode, + rope_type, + infer_steps, + num_frames, + height, + width, + guidance_scale, + sample_shift, + fps, + aspect_ratio, + boundary, + boundary_step_index, + denoising_step_list, + ) + + config = set_config(self) + print_config(config) + self.runner = self._init_runner(config) + logger.info(f"Initializing {self.model_cls} runner for {self.task} task...") + logger.info(f"Model path: {self.model_path}") + logger.info("LightGenerator initialized successfully!") + + def set_infer_config( + self, + attn_mode, + rope_type, + infer_steps, + num_frames, + height, + width, + guidance_scale, + sample_shift, + fps, + aspect_ratio, + boundary, + boundary_step_index, + denoising_step_list, + ): + self.infer_steps = infer_steps + self.target_width = width + self.target_height = height + self.target_video_length = num_frames + self.sample_guide_scale = guidance_scale + self.sample_shift = sample_shift + if self.sample_guide_scale == 1: + self.enable_cfg = False + else: + self.enable_cfg = True + self.rope_type = rope_type + self.fps = fps + self.aspect_ratio = aspect_ratio + self.boundary = boundary + self.boundary_step_index = boundary_step_index + self.denoising_step_list = denoising_step_list + if self.model_cls.startswith("wan"): + self.self_attn_1_type = attn_mode + self.cross_attn_1_type = attn_mode + self.cross_attn_2_type = attn_mode + elif self.model_cls in ["hunyuan_video_1.5", "hunyuan_video_1.5_distill"]: + self.attn_type = attn_mode + + def set_infer_config_json(self, config_json): + logger.info(f"Loading infer config from {config_json}") + with open(config_json, "r") as f: + config_json = json.load(f) + self.update(config_json) + + def enable_lightvae( + self, + use_lightvae=False, + use_tae=False, + vae_path=None, + tae_path=None, + ): + self.use_lightvae = use_lightvae + self.use_tae = use_tae + self.vae_path = vae_path + self.tae_path = tae_path + if self.use_tae and self.model_cls.startswith("wan") and "lighttae" in tae_path: + self.need_scaled = True + + def enable_quantize( + self, + dit_quantized=False, + text_encoder_quantized=False, + image_encoder_quantized=False, + dit_quantized_ckpt=None, + low_noise_quantized_ckpt=None, + high_noise_quantized_ckpt=None, + text_encoder_quantized_ckpt=False, + image_encoder_quantized_ckpt=False, + quant_scheme="fp8-sgl", + ): + self.dit_quantized = dit_quantized + self.dit_quant_scheme = quant_scheme + self.dit_quantized_ckpt = dit_quantized_ckpt + self.low_noise_quantized_ckpt = low_noise_quantized_ckpt + self.high_noise_quantized_ckpt = high_noise_quantized_ckpt + + if self.model_cls.startswith("wan"): + self.t5_quant_scheme = quant_scheme + self.t5_quantized = text_encoder_quantized + self.t5_quantized_ckpt = text_encoder_quantized_ckpt + self.clip_quant_scheme = quant_scheme + self.clip_quantized = image_encoder_quantized + self.clip_quantized_ckpt = image_encoder_quantized_ckpt + elif self.model_cls in ["hunyuan_video_1.5", "hunyuan_video_1.5_distill"]: + self.qwen25vl_quantized = text_encoder_quantized + self.qwen25vl_quantized_ckpt = text_encoder_quantized_ckpt + self.qwen25vl_quant_scheme = quant_scheme + + def enable_offload( + self, + cpu_offload=False, + offload_granularity="block", + text_encoder_offload=False, + image_encoder_offload=False, + vae_offload=False, + ): + self.cpu_offload = cpu_offload + self.offload_granularity = offload_granularity + self.vae_offload = vae_offload + if self.model_cls in [ + "wan2.1", + "wan2.1_distill", + "wan2.1_vace", + "wan2.1_sf", + "wan2.1_sf_mtxg2", + "seko_talk", + "wan2.2_moe", + "wan2.2", + "wan2.2_moe_audio", + "wan2.2_audio", + "wan2.2_moe_distill", + "wan2.2_animate", + ]: + self.t5_cpu_offload = text_encoder_offload + self.clip_encoder_offload = image_encoder_offload + + elif self.model_cls in ["hunyuan_video_1.5", "hunyuan_video_1.5_distill"]: + self.qwen25vl_cpu_offload = text_encoder_offload + self.siglip_cpu_offload = image_encoder_offload + self.byt5_cpu_offload = image_encoder_offload + + def enable_compile( + self, + ): + self.compile = True + self.compile_shapes = [ + [480, 832], + [544, 960], + [720, 1280], + [832, 480], + [960, 544], + [1280, 720], + [480, 480], + [576, 576], + [704, 704], + [960, 960], + ] + + def enable_lora(self, lora_configs): + self.lora_configs = lora_configs + + def enable_cache( + self, + cache_method="Tea", + coefficients=[], + teacache_thresh=0.15, + use_ret_steps=False, + magcache_calibration=False, + magcache_K=6, + magcache_thresh=0.24, + magcache_retention_ratio=0.2, + magcache_ratios=[], + ): + self.feature_caching = cache_method + if cache_method == "Tea": + self.coefficients = coefficients + self.teacache_thresh = teacache_thresh + self.use_ret_steps = use_ret_steps + elif cache_method == "Mag": + self.magcache_calibration = magcache_calibration + self.magcache_K = magcache_K + self.magcache_thresh = magcache_thresh + self.magcache_retention_ratio = magcache_retention_ratio + self.magcache_ratios = magcache_ratios + + def enable_parallel(self, cfg_p_size=1, seq_p_size=1, seq_p_attn_type="ulysses"): + self._init_parallel() + self.parallel = { + "cfg_p_size": cfg_p_size, + "seq_p_size": seq_p_size, + "seq_p_attn_type": seq_p_attn_type, + } + set_parallel_config(self) + + @torch.no_grad() + def generate( + self, + seed, + prompt, + negative_prompt, + save_result_path, + image_path=None, + last_frame_path=None, + audio_path=None, + src_ref_images=None, + src_video=None, + src_mask=None, + return_result_tensor=False, + ): + # Run inference (following LightX2V pattern) + self.seed = seed + + self.image_path = image_path + self.last_frame_path = last_frame_path + self.audio_path = audio_path + self.src_ref_images = src_ref_images + self.src_video = src_video + self.src_mask = src_mask + self.prompt = prompt + self.negative_prompt = negative_prompt + self.save_result_path = save_result_path + self.return_result_tensor = return_result_tensor + seed_all(self.seed) + input_info = set_input_info(self) + self.runner.run_pipeline(input_info) + logger.info("Video generated successfully!") + logger.info(f"Video Saved in {save_result_path}") + + def _init_runner(self, config): + torch.set_grad_enabled(False) + runner = RUNNER_REGISTER[config["model_cls"]](config) + runner.init_modules() + return runner + + def _init_parallel(self): + dist.init_process_group(backend="nccl") + torch.cuda.set_device(dist.get_rank()) diff --git a/lightx2v/server/README.md b/lightx2v/server/README.md new file mode 100644 index 0000000..7fa9ace --- /dev/null +++ b/lightx2v/server/README.md @@ -0,0 +1,438 @@ +# LightX2V Server + +## Overview + +The LightX2V server is a distributed video/image generation service built with FastAPI that processes image-to-video and text-to-image tasks using a multi-process architecture with GPU support. It implements a sophisticated task queue system with distributed inference capabilities for high-throughput generation workloads. + +## Directory Structure + +``` +server/ +├── __init__.py +├── __main__.py # Entry point +├── main.py # Server startup +├── config.py # Configuration +├── task_manager.py # Task management +├── schema.py # Data models (VideoTaskRequest, ImageTaskRequest) +├── api/ +│ ├── __init__.py +│ ├── router.py # Main router aggregation +│ ├── deps.py # Dependency injection container +│ ├── server.py # ApiServer class +│ ├── files.py # /v1/files/* +│ ├── service_routes.py # /v1/service/* +│ └── tasks/ +│ ├── __init__.py +│ ├── common.py # Common task operations +│ ├── video.py # POST /v1/tasks/video +│ └── image.py # POST /v1/tasks/image +├── services/ +│ ├── __init__.py +│ ├── file_service.py # File service (unified download) +│ ├── distributed_utils.py # Distributed manager +│ ├── inference/ +│ │ ├── __init__.py +│ │ ├── worker.py # TorchrunInferenceWorker +│ │ └── service.py # DistributedInferenceService +│ └── generation/ +│ ├── __init__.py +│ ├── base.py # Base generation service +│ ├── video.py # VideoGenerationService +│ └── image.py # ImageGenerationService +├── media/ +│ ├── __init__.py +│ ├── base.py # MediaHandler base class +│ ├── image.py # ImageHandler +│ └── audio.py # AudioHandler +└── metrics/ # Prometheus metrics +``` + +## Architecture + +### System Architecture + +```mermaid +flowchart TB + Client[Client] -->|Send API Request| Router[FastAPI Router] + + subgraph API Layer + Router --> TaskRoutes[Task APIs] + Router --> FileRoutes[File APIs] + Router --> ServiceRoutes[Service Status APIs] + + TaskRoutes --> CreateVideoTask["POST /v1/tasks/video - Create Video Task"] + TaskRoutes --> CreateImageTask["POST /v1/tasks/image - Create Image Task"] + TaskRoutes --> CreateVideoTaskForm["POST /v1/tasks/video/form - Form Create Video"] + TaskRoutes --> CreateImageTaskForm["POST /v1/tasks/image/form - Form Create Image"] + TaskRoutes --> ListTasks["GET /v1/tasks/ - List Tasks"] + TaskRoutes --> GetTaskStatus["GET /v1/tasks/{id}/status - Get Status"] + TaskRoutes --> GetTaskResult["GET /v1/tasks/{id}/result - Get Result"] + TaskRoutes --> StopTask["DELETE /v1/tasks/{id} - Stop Task"] + + FileRoutes --> DownloadFile["GET /v1/files/download/{path} - Download File"] + + ServiceRoutes --> GetServiceStatus["GET /v1/service/status - Service Status"] + ServiceRoutes --> GetServiceMetadata["GET /v1/service/metadata - Metadata"] + end + + subgraph Task Management + TaskManager[Task Manager] + TaskQueue[Task Queue] + TaskStatus[Task Status] + TaskResult[Task Result] + + CreateVideoTask --> TaskManager + CreateImageTask --> TaskManager + TaskManager --> TaskQueue + TaskManager --> TaskStatus + TaskManager --> TaskResult + end + + subgraph File Service + FileService[File Service] + DownloadMedia[Download Media] + SaveFile[Save File] + GetOutputPath[Get Output Path] + + FileService --> DownloadMedia + FileService --> SaveFile + FileService --> GetOutputPath + end + + subgraph Media Handlers + MediaHandler[MediaHandler Base] + ImageHandler[ImageHandler] + AudioHandler[AudioHandler] + + MediaHandler --> ImageHandler + MediaHandler --> AudioHandler + end + + subgraph Processing Thread + ProcessingThread[Processing Thread] + NextTask[Get Next Task] + ProcessTask[Process Single Task] + + ProcessingThread --> NextTask + ProcessingThread --> ProcessTask + end + + subgraph Generation Services + VideoService[VideoGenerationService] + ImageService[ImageGenerationService] + BaseService[BaseGenerationService] + + BaseService --> VideoService + BaseService --> ImageService + end + + subgraph Distributed Inference Service + InferenceService[DistributedInferenceService] + SubmitTask[Submit Task] + Worker[TorchrunInferenceWorker] + ProcessRequest[Process Request] + RunPipeline[Run Inference Pipeline] + + InferenceService --> SubmitTask + SubmitTask --> Worker + Worker --> ProcessRequest + ProcessRequest --> RunPipeline + end + + TaskQueue --> ProcessingThread + ProcessTask --> VideoService + ProcessTask --> ImageService + VideoService --> InferenceService + ImageService --> InferenceService + GetTaskResult --> FileService + DownloadFile --> FileService + VideoService --> FileService + ImageService --> FileService + FileService --> MediaHandler +``` + +## Task Processing Flow + +```mermaid +sequenceDiagram + participant C as Client + participant API as API Server + participant TM as TaskManager + participant PT as Processing Thread + participant GS as GenerationService
    (Video/Image) + participant FS as FileService + participant DIS as DistributedInferenceService + participant TIW0 as TorchrunInferenceWorker
    (Rank 0) + participant TIW1 as TorchrunInferenceWorker
    (Rank 1..N) + + C->>API: POST /v1/tasks/video
    or /v1/tasks/image + API->>TM: create_task() + TM->>TM: Generate task_id + TM->>TM: Add to queue
    (status: PENDING) + API->>PT: ensure_processing_thread() + API-->>C: TaskResponse
    (task_id, status: pending) + + Note over PT: Processing Loop + PT->>TM: get_next_pending_task() + TM-->>PT: task_id + + PT->>TM: acquire_processing_lock() + PT->>TM: start_task()
    (status: PROCESSING) + + PT->>PT: Select service by task type + PT->>GS: generate_with_stop_event() + + alt Image is URL + GS->>FS: download_media(url, "image") + FS->>FS: HTTP download
    with retry + FS-->>GS: image_path + else Image is Base64 + GS->>GS: save_base64_image() + GS-->>GS: image_path + else Image is local path + GS->>GS: use existing path + end + + alt Audio is URL (Video only) + GS->>FS: download_media(url, "audio") + FS->>FS: HTTP download
    with retry + FS-->>GS: audio_path + else Audio is Base64 + GS->>GS: save_base64_audio() + GS-->>GS: audio_path + end + + GS->>DIS: submit_task_async(task_data) + DIS->>TIW0: process_request(task_data) + + Note over TIW0,TIW1: Torchrun-based Distributed Processing + TIW0->>TIW0: Check if processing + TIW0->>TIW0: Set processing = True + + alt Multi-GPU Mode (world_size > 1) + TIW0->>TIW1: broadcast_task_data()
    (via DistributedManager) + Note over TIW1: worker_loop() listens for broadcasts + TIW1->>TIW1: Receive task_data + end + + par Parallel Inference across all ranks + TIW0->>TIW0: runner.set_inputs(task_data) + TIW0->>TIW0: runner.run_pipeline() + and + Note over TIW1: If world_size > 1 + TIW1->>TIW1: runner.set_inputs(task_data) + TIW1->>TIW1: runner.run_pipeline() + end + + Note over TIW0,TIW1: Synchronization + alt Multi-GPU Mode + TIW0->>TIW1: barrier() for sync + TIW1->>TIW0: barrier() response + end + + TIW0->>TIW0: Set processing = False + TIW0->>DIS: Return result (only rank 0) + TIW1->>TIW1: Return None (non-rank 0) + + DIS-->>GS: TaskResponse + GS-->>PT: TaskResponse + + PT->>TM: complete_task()
    (status: COMPLETED) + PT->>TM: release_processing_lock() + + Note over C: Client Polling + C->>API: GET /v1/tasks/{task_id}/status + API->>TM: get_task_status() + TM-->>API: status info + API-->>C: Task Status + + C->>API: GET /v1/tasks/{task_id}/result + API->>TM: get_task_status() + API->>FS: stream_file_response() + FS-->>API: Video/Image Stream + API-->>C: Output File +``` + +## Task States + +```mermaid +stateDiagram-v2 + [*] --> PENDING: create_task() + PENDING --> PROCESSING: start_task() + PROCESSING --> COMPLETED: complete_task() + PROCESSING --> FAILED: fail_task() + PENDING --> CANCELLED: cancel_task() + PROCESSING --> CANCELLED: cancel_task() + COMPLETED --> [*] + FAILED --> [*] + CANCELLED --> [*] +``` + +## API Endpoints + +### Task APIs + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/v1/tasks/video` | POST | Create video generation task | +| `/v1/tasks/video/form` | POST | Create video task with form data | +| `/v1/tasks/image` | POST | Create image generation task | +| `/v1/tasks/image/form` | POST | Create image task with form data | +| `/v1/tasks` | GET | List all tasks | +| `/v1/tasks/queue/status` | GET | Get queue status | +| `/v1/tasks/{task_id}/status` | GET | Get task status | +| `/v1/tasks/{task_id}/result` | GET | Get task result (stream) | +| `/v1/tasks/{task_id}` | DELETE | Cancel task | +| `/v1/tasks/all/running` | DELETE | Cancel all running tasks | + +### File APIs + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/v1/files/download/{path}` | GET | Download output file | + +### Service APIs + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/v1/service/status` | GET | Get service status | +| `/v1/service/metadata` | GET | Get service metadata | + +## Request Models + +### VideoTaskRequest + +```python +class VideoTaskRequest(BaseTaskRequest): + num_fragments: int = 1 + target_video_length: int = 81 + audio_path: str = "" + video_duration: int = 5 + talk_objects: Optional[list[TalkObject]] = None +``` + +### ImageTaskRequest + +```python +class ImageTaskRequest(BaseTaskRequest): + aspect_ratio: str = "16:9" +``` + +### BaseTaskRequest (Common Fields) + +```python +class BaseTaskRequest(BaseModel): + task_id: str # auto-generated + prompt: str = "" + use_prompt_enhancer: bool = False + negative_prompt: str = "" + image_path: str = "" # URL, base64, or local path + save_result_path: str = "" + infer_steps: int = 5 + seed: int # auto-generated +``` + +## Configuration + +### Environment Variables + +see `lightx2v/server/config.py` + +### Command Line Arguments + +```bash +# Single GPU +python -m lightx2v.server \ + --model_path /path/to/model \ + --model_cls wan2.1_distill \ + --task i2v \ + --host 0.0.0.0 \ + --port 8000 \ + --config_json /path/to/xxx_config.json +``` + +```bash +# Multi-GPU with torchrun +torchrun --nproc_per_node=2 -m lightx2v.server \ + --model_path /path/to/model \ + --model_cls wan2.1_distill \ + --task i2v \ + --host 0.0.0.0 \ + --port 8000 \ + --config_json /path/to/xxx_dist_config.json +``` + +## Key Features + +### 1. Distributed Processing + +- **Multi-process architecture** for GPU parallelization +- **Master-worker pattern** with rank 0 as coordinator +- **PyTorch distributed** backend (NCCL for GPU, Gloo for CPU) +- **Automatic GPU allocation** across processes +- **Task broadcasting** with chunked pickle serialization + +### 2. Task Queue Management + +- **Thread-safe** task queue with locks +- **Sequential processing** with single processing thread +- **Configurable queue limits** with overflow protection +- **Task prioritization** (FIFO) +- **Automatic cleanup** of old completed tasks +- **Cancellation support** for pending and running tasks + +### 3. File Management + +- **Multiple input formats**: URL, base64, file upload +- **HTTP downloads** with exponential backoff retry +- **Streaming responses** for large video files +- **Cache management** with automatic cleanup +- **File validation** and format detection +- **Unified media handling** via MediaHandler pattern + +### 4. Separate Video/Image Endpoints + +- **Dedicated endpoints** for video and image generation +- **Type-specific request models** (VideoTaskRequest, ImageTaskRequest) +- **Automatic service routing** based on task type +- **Backward compatible** with legacy `/v1/tasks` endpoint + +## Performance Considerations + +1. **Single Task Processing**: Tasks are processed sequentially to manage GPU memory effectively +2. **Multi-GPU Support**: Distributes inference across available GPUs for parallelization +3. **Connection Pooling**: Reuses HTTP connections to reduce overhead +4. **Streaming Responses**: Large files are streamed to avoid memory issues +5. **Queue Management**: Automatic task cleanup prevents memory leaks +6. **Process Isolation**: Distributed workers run in separate processes for stability + +## Monitoring and Debugging + +### Logging + +The server uses `loguru` for structured logging. Logs include: + +- Request/response details +- Task lifecycle events +- Worker process status +- Error traces with context + +### Health Checks + +- `/v1/service/status` - Overall service health +- `/v1/tasks/queue/status` - Queue status and processing state +- Process monitoring via system tools (htop, nvidia-smi) + +### Common Issues + +1. **GPU Out of Memory**: Reduce `nproc_per_node` or adjust model batch size +2. **Task Timeout**: Increase `LIGHTX2V_TASK_TIMEOUT` for longer videos +3. **Queue Full**: Increase `LIGHTX2V_MAX_QUEUE_SIZE` or add rate limiting + +## Security Considerations + +1. **Input Validation**: All inputs validated with Pydantic schemas + +## License + +See the main project LICENSE file for licensing information. diff --git a/lightx2v/server/__init__.py b/lightx2v/server/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/server/__main__.py b/lightx2v/server/__main__.py new file mode 100644 index 0000000..bd9f620 --- /dev/null +++ b/lightx2v/server/__main__.py @@ -0,0 +1,28 @@ +import argparse + +from .main import run_server + + +def main(): + parser = argparse.ArgumentParser(description="LightX2V Server") + + parser.add_argument("--model_path", type=str, required=True, help="Path to model") + parser.add_argument("--model_cls", type=str, required=True, help="Model class name") + + parser.add_argument("--host", type=str, default="0.0.0.0", help="Server host") + parser.add_argument("--port", type=int, default=8000, help="Server port") + + args, unknown = parser.parse_known_args() + + for i in range(0, len(unknown), 2): + if unknown[i].startswith("--"): + key = unknown[i][2:] + if i + 1 < len(unknown) and not unknown[i + 1].startswith("--"): + value = unknown[i + 1] + setattr(args, key, value) + + run_server(args) + + +if __name__ == "__main__": + main() diff --git a/lightx2v/server/api/__init__.py b/lightx2v/server/api/__init__.py new file mode 100644 index 0000000..27afd29 --- /dev/null +++ b/lightx2v/server/api/__init__.py @@ -0,0 +1,7 @@ +from .router import create_api_router +from .server import ApiServer + +__all__ = [ + "create_api_router", + "ApiServer", +] diff --git a/lightx2v/server/api/deps.py b/lightx2v/server/api/deps.py new file mode 100644 index 0000000..34068ef --- /dev/null +++ b/lightx2v/server/api/deps.py @@ -0,0 +1,54 @@ +from pathlib import Path +from typing import Optional +from urllib.parse import urlparse + +import httpx +from loguru import logger + +from ..services import DistributedInferenceService, FileService, ImageGenerationService, VideoGenerationService + + +class ServiceContainer: + _instance: Optional["ServiceContainer"] = None + + def __init__(self): + self.file_service: Optional[FileService] = None + self.inference_service: Optional[DistributedInferenceService] = None + self.video_service: Optional[VideoGenerationService] = None + self.image_service: Optional[ImageGenerationService] = None + self.max_queue_size: int = 10 + + @classmethod + def get_instance(cls) -> "ServiceContainer": + if cls._instance is None: + cls._instance = cls() + return cls._instance + + def initialize(self, cache_dir: Path, inference_service: DistributedInferenceService, max_queue_size: int = 10): + self.file_service = FileService(cache_dir) + self.inference_service = inference_service + self.video_service = VideoGenerationService(self.file_service, inference_service) + self.image_service = ImageGenerationService(self.file_service, inference_service) + self.max_queue_size = max_queue_size + + +def get_services() -> ServiceContainer: + return ServiceContainer.get_instance() + + +async def validate_url_async(url: str) -> bool: + if not url or not url.startswith("http"): + return True + + try: + parsed_url = urlparse(url) + if not parsed_url.scheme or not parsed_url.netloc: + return False + + timeout = httpx.Timeout(connect=5.0, read=5.0, write=5.0, pool=5.0) + async with httpx.AsyncClient(verify=False, timeout=timeout) as client: + response = await client.head(url, follow_redirects=True) + return response.status_code < 400 + except Exception as e: + logger.warning(f"URL validation failed for {url}: {str(e)}") + return False diff --git a/lightx2v/server/api/files.py b/lightx2v/server/api/files.py new file mode 100644 index 0000000..2e37880 --- /dev/null +++ b/lightx2v/server/api/files.py @@ -0,0 +1,69 @@ +from pathlib import Path + +from fastapi import APIRouter, HTTPException +from fastapi.responses import StreamingResponse +from loguru import logger + +from .deps import get_services + +router = APIRouter() + + +def _stream_file_response(file_path: Path, filename: str | None = None) -> StreamingResponse: + services = get_services() + assert services.file_service is not None, "File service is not initialized" + + try: + resolved_path = file_path.resolve() + + if not str(resolved_path).startswith(str(services.file_service.output_video_dir.resolve())): + raise HTTPException(status_code=403, detail="Access to this file is not allowed") + + if not resolved_path.exists() or not resolved_path.is_file(): + raise HTTPException(status_code=404, detail=f"File not found: {file_path}") + + file_size = resolved_path.stat().st_size + actual_filename = filename or resolved_path.name + + mime_type = "application/octet-stream" + if actual_filename.lower().endswith((".mp4", ".avi", ".mov", ".mkv")): + mime_type = "video/mp4" + elif actual_filename.lower().endswith((".jpg", ".jpeg", ".png", ".gif")): + mime_type = "image/jpeg" + + headers = { + "Content-Disposition": f'attachment; filename="{actual_filename}"', + "Content-Length": str(file_size), + "Accept-Ranges": "bytes", + } + + def file_stream_generator(file_path: str, chunk_size: int = 1024 * 1024): + with open(file_path, "rb") as file: + while chunk := file.read(chunk_size): + yield chunk + + return StreamingResponse( + file_stream_generator(str(resolved_path)), + media_type=mime_type, + headers=headers, + ) + except HTTPException: + raise + except Exception as e: + logger.error(f"Error occurred while processing file stream response: {e}") + raise HTTPException(status_code=500, detail="File transfer failed") + + +@router.get("/download/{file_path:path}") +async def download_file(file_path: str): + services = get_services() + assert services.file_service is not None, "File service is not initialized" + + try: + full_path = services.file_service.output_video_dir / file_path + return _stream_file_response(full_path) + except HTTPException: + raise + except Exception as e: + logger.error(f"Error occurred while processing file download request: {e}") + raise HTTPException(status_code=500, detail="File download failed") diff --git a/lightx2v/server/api/router.py b/lightx2v/server/api/router.py new file mode 100644 index 0000000..01e0b82 --- /dev/null +++ b/lightx2v/server/api/router.py @@ -0,0 +1,25 @@ +from fastapi import APIRouter + +from .files import router as files_router +from .service_routes import router as service_router +from .tasks import common_router, image_router, video_router + + +def create_api_router() -> APIRouter: + api_router = APIRouter() + + tasks_router = APIRouter(prefix="/v1/tasks", tags=["tasks"]) + tasks_router.include_router(common_router) + tasks_router.include_router(video_router, prefix="/video", tags=["video"]) + tasks_router.include_router(image_router, prefix="/image", tags=["image"]) + + # backward compatibility : POST /v1/tasks default to video task + from .tasks.video import create_video_task + + tasks_router.post("/", response_model_exclude_unset=True, deprecated=True)(create_video_task) + + api_router.include_router(tasks_router) + api_router.include_router(files_router, prefix="/v1/files", tags=["files"]) + api_router.include_router(service_router, prefix="/v1/service", tags=["service"]) + + return api_router diff --git a/lightx2v/server/api/server.py b/lightx2v/server/api/server.py new file mode 100644 index 0000000..55bb1d1 --- /dev/null +++ b/lightx2v/server/api/server.py @@ -0,0 +1,125 @@ +import asyncio +import threading +import time +from pathlib import Path +from typing import Any, Optional + +from fastapi import FastAPI +from loguru import logger +from starlette.responses import RedirectResponse + +from ..services import DistributedInferenceService +from ..task_manager import TaskStatus, task_manager +from .deps import ServiceContainer, get_services +from .router import create_api_router + + +class ApiServer: + def __init__(self, max_queue_size: int = 10, app: Optional[FastAPI] = None): + self.app = app or FastAPI(title="LightX2V API", version="1.0.0") + self.max_queue_size = max_queue_size + + self.processing_thread = None + self.stop_processing = threading.Event() + + self._setup_routes() + + def _setup_routes(self): + @self.app.get("/") + def redirect_to_docs(): + return RedirectResponse(url="/docs") + + api_router = create_api_router() + self.app.include_router(api_router) + + def _ensure_processing_thread_running(self): + if self.processing_thread is None or not self.processing_thread.is_alive(): + self.stop_processing.clear() + self.processing_thread = threading.Thread(target=self._task_processing_loop, daemon=True) + self.processing_thread.start() + logger.info("Started task processing thread") + + def _task_processing_loop(self): + logger.info("Task processing loop started") + + asyncio.set_event_loop(asyncio.new_event_loop()) + loop = asyncio.get_event_loop() + + while not self.stop_processing.is_set(): + task_id = task_manager.get_next_pending_task() + + if task_id is None: + time.sleep(1) + continue + + task_info = task_manager.get_task(task_id) + if task_info and task_info.status == TaskStatus.PENDING: + logger.info(f"Processing task {task_id}") + loop.run_until_complete(self._process_single_task(task_info)) + + loop.close() + logger.info("Task processing loop stopped") + + async def _process_single_task(self, task_info: Any): + services = get_services() + + task_id = task_info.task_id + message = task_info.message + + lock_acquired = task_manager.acquire_processing_lock(task_id, timeout=1) + if not lock_acquired: + logger.error(f"Task {task_id} failed to acquire processing lock") + task_manager.fail_task(task_id, "Failed to acquire processing lock") + return + + try: + task_manager.start_task(task_id) + + if task_info.stop_event.is_set(): + logger.info(f"Task {task_id} cancelled before processing") + task_manager.fail_task(task_id, "Task cancelled") + return + + from ..schema import ImageTaskRequest + + if isinstance(message, ImageTaskRequest): + generation_service = services.image_service + else: + generation_service = services.video_service + + result = await generation_service.generate_with_stop_event(message, task_info.stop_event) + + if result: + task_manager.complete_task(task_id, result.save_result_path) + logger.info(f"Task {task_id} completed successfully") + else: + if task_info.stop_event.is_set(): + task_manager.fail_task(task_id, "Task cancelled during processing") + logger.info(f"Task {task_id} cancelled during processing") + else: + task_manager.fail_task(task_id, "Generation failed") + logger.error(f"Task {task_id} generation failed") + + except Exception as e: + logger.exception(f"Task {task_id} processing failed: {str(e)}") + task_manager.fail_task(task_id, str(e)) + finally: + if lock_acquired: + task_manager.release_processing_lock(task_id) + + def initialize_services(self, cache_dir: Path, inference_service: DistributedInferenceService): + container = ServiceContainer.get_instance() + container.initialize(cache_dir, inference_service, self.max_queue_size) + self._ensure_processing_thread_running() + + async def cleanup(self): + self.stop_processing.set() + if self.processing_thread and self.processing_thread.is_alive(): + self.processing_thread.join(timeout=5) + + services = get_services() + if services.file_service: + await services.file_service.cleanup() + + def get_app(self) -> FastAPI: + return self.app diff --git a/lightx2v/server/api/service_routes.py b/lightx2v/server/api/service_routes.py new file mode 100644 index 0000000..296700b --- /dev/null +++ b/lightx2v/server/api/service_routes.py @@ -0,0 +1,18 @@ +from fastapi import APIRouter + +from ..task_manager import task_manager +from .deps import get_services + +router = APIRouter() + + +@router.get("/status") +async def get_service_status(): + return task_manager.get_service_status() + + +@router.get("/metadata") +async def get_service_metadata(): + services = get_services() + assert services.inference_service is not None, "Inference service is not initialized" + return services.inference_service.server_metadata() diff --git a/lightx2v/server/api/tasks/__init__.py b/lightx2v/server/api/tasks/__init__.py new file mode 100644 index 0000000..e20f907 --- /dev/null +++ b/lightx2v/server/api/tasks/__init__.py @@ -0,0 +1,9 @@ +from .common import router as common_router +from .image import router as image_router +from .video import router as video_router + +__all__ = [ + "common_router", + "video_router", + "image_router", +] diff --git a/lightx2v/server/api/tasks/common.py b/lightx2v/server/api/tasks/common.py new file mode 100644 index 0000000..3aac654 --- /dev/null +++ b/lightx2v/server/api/tasks/common.py @@ -0,0 +1,147 @@ +import gc +from pathlib import Path + +import torch +from fastapi import APIRouter, HTTPException +from fastapi.responses import StreamingResponse +from loguru import logger + +from ...schema import StopTaskResponse +from ...task_manager import TaskStatus, task_manager +from ..deps import get_services + +router = APIRouter() + + +def _stream_file_response(file_path: Path, filename: str | None = None) -> StreamingResponse: + services = get_services() + assert services.file_service is not None, "File service is not initialized" + + try: + resolved_path = file_path.resolve() + + if not str(resolved_path).startswith(str(services.file_service.output_video_dir.resolve())): + raise HTTPException(status_code=403, detail="Access to this file is not allowed") + + if not resolved_path.exists() or not resolved_path.is_file(): + raise HTTPException(status_code=404, detail=f"File not found: {file_path}") + + file_size = resolved_path.stat().st_size + actual_filename = filename or resolved_path.name + + mime_type = "application/octet-stream" + if actual_filename.lower().endswith((".mp4", ".avi", ".mov", ".mkv")): + mime_type = "video/mp4" + elif actual_filename.lower().endswith((".jpg", ".jpeg", ".png", ".gif")): + mime_type = "image/jpeg" + + headers = { + "Content-Disposition": f'attachment; filename="{actual_filename}"', + "Content-Length": str(file_size), + "Accept-Ranges": "bytes", + } + + def file_stream_generator(file_path: str, chunk_size: int = 1024 * 1024): + with open(file_path, "rb") as file: + while chunk := file.read(chunk_size): + yield chunk + + return StreamingResponse( + file_stream_generator(str(resolved_path)), + media_type=mime_type, + headers=headers, + ) + except HTTPException: + raise + except Exception as e: + logger.error(f"Error occurred while processing file stream response: {e}") + raise HTTPException(status_code=500, detail="File transfer failed") + + +@router.get("/") +async def list_tasks(): + return task_manager.get_all_tasks() + + +@router.get("/queue/status") +async def get_queue_status(): + services = get_services() + service_status = task_manager.get_service_status() + return { + "is_processing": task_manager.is_processing(), + "current_task": service_status.get("current_task"), + "pending_count": task_manager.get_pending_task_count(), + "active_count": task_manager.get_active_task_count(), + "queue_size": services.max_queue_size, + "queue_available": services.max_queue_size - task_manager.get_active_task_count(), + } + + +@router.get("/{task_id}/status") +async def get_task_status(task_id: str): + status = task_manager.get_task_status(task_id) + if not status: + raise HTTPException(status_code=404, detail="Task not found") + return status + + +@router.get("/{task_id}/result") +async def get_task_result(task_id: str): + services = get_services() + assert services.video_service is not None, "Video service is not initialized" + assert services.file_service is not None, "File service is not initialized" + + try: + task_status = task_manager.get_task_status(task_id) + + if not task_status: + raise HTTPException(status_code=404, detail="Task not found") + + if task_status.get("status") != TaskStatus.COMPLETED.value: + raise HTTPException(status_code=404, detail="Task not completed") + + save_result_path = task_status.get("save_result_path") + if not save_result_path: + raise HTTPException(status_code=404, detail="Task result file does not exist") + + full_path = Path(save_result_path) + if not full_path.is_absolute(): + full_path = services.file_service.output_video_dir / save_result_path + + return _stream_file_response(full_path) + + except HTTPException: + raise + except Exception as e: + logger.error(f"Error occurred while getting task result: {e}") + raise HTTPException(status_code=500, detail="Failed to get task result") + + +@router.delete("/{task_id}", response_model=StopTaskResponse) +async def stop_task(task_id: str): + try: + if task_manager.cancel_task(task_id): + gc.collect() + if torch.cuda.is_available(): + torch.cuda.empty_cache() + logger.info(f"Task {task_id} stopped successfully.") + return StopTaskResponse(stop_status="success", reason="Task stopped successfully.") + else: + return StopTaskResponse(stop_status="do_nothing", reason="Task not found or already completed.") + except Exception as e: + logger.error(f"Error occurred while stopping task {task_id}: {str(e)}") + return StopTaskResponse(stop_status="error", reason=str(e)) + + +@router.delete("/all/running", response_model=StopTaskResponse) +async def stop_all_running_tasks(): + try: + task_manager.cancel_all_tasks() + gc.collect() + if torch.cuda.is_available(): + torch.cuda.empty_cache() + logger.info("All tasks stopped successfully.") + return StopTaskResponse(stop_status="success", reason="All tasks stopped successfully.") + except Exception as e: + logger.error(f"Error occurred while stopping all tasks: {str(e)}") + return StopTaskResponse(stop_status="error", reason=str(e)) diff --git a/lightx2v/server/api/tasks/image.py b/lightx2v/server/api/tasks/image.py new file mode 100644 index 0000000..791d8fe --- /dev/null +++ b/lightx2v/server/api/tasks/image.py @@ -0,0 +1,97 @@ +import asyncio +import uuid +from pathlib import Path + +from fastapi import APIRouter, File, Form, HTTPException, UploadFile +from loguru import logger + +from ...schema import ImageTaskRequest, TaskResponse +from ...task_manager import task_manager +from ..deps import get_services, validate_url_async + +router = APIRouter() + + +def _write_file_sync(file_path: Path, content: bytes) -> None: + with open(file_path, "wb") as buffer: + buffer.write(content) + + +@router.post("/", response_model=TaskResponse) +async def create_image_task(message: ImageTaskRequest): + try: + if hasattr(message, "image_path") and message.image_path and message.image_path.startswith("http"): + if not await validate_url_async(message.image_path): + raise HTTPException(status_code=400, detail=f"Image URL is not accessible: {message.image_path}") + + task_id = task_manager.create_task(message) + message.task_id = task_id + + return TaskResponse( + task_id=task_id, + task_status="pending", + save_result_path=message.save_result_path, + ) + except RuntimeError as e: + raise HTTPException(status_code=503, detail=str(e)) + except Exception as e: + logger.error(f"Failed to create image task: {e}") + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/form", response_model=TaskResponse) +async def create_image_task_form( + image_file: UploadFile = File(None), + prompt: str = Form(default=""), + save_result_path: str = Form(default=""), + use_prompt_enhancer: bool = Form(default=False), + negative_prompt: str = Form(default=""), + infer_steps: int = Form(default=5), + seed: int = Form(default=42), + aspect_ratio: str = Form(default="16:9"), +): + services = get_services() + assert services.file_service is not None, "File service is not initialized" + + async def save_file_async(file: UploadFile, target_dir: Path) -> str: + if not file or not file.filename: + return "" + + file_extension = Path(file.filename).suffix + unique_filename = f"{uuid.uuid4()}{file_extension}" + file_path = target_dir / unique_filename + + content = await file.read() + await asyncio.to_thread(_write_file_sync, file_path, content) + + return str(file_path) + + image_path = "" + if image_file and image_file.filename: + image_path = await save_file_async(image_file, services.file_service.input_image_dir) + + message = ImageTaskRequest( + prompt=prompt, + use_prompt_enhancer=use_prompt_enhancer, + negative_prompt=negative_prompt, + image_path=image_path, + save_result_path=save_result_path, + infer_steps=infer_steps, + seed=seed, + aspect_ratio=aspect_ratio, + ) + + try: + task_id = task_manager.create_task(message) + message.task_id = task_id + + return TaskResponse( + task_id=task_id, + task_status="pending", + save_result_path=message.save_result_path, + ) + except RuntimeError as e: + raise HTTPException(status_code=503, detail=str(e)) + except Exception as e: + logger.error(f"Failed to create image form task: {e}") + raise HTTPException(status_code=500, detail=str(e)) diff --git a/lightx2v/server/api/tasks/video.py b/lightx2v/server/api/tasks/video.py new file mode 100644 index 0000000..f8f1797 --- /dev/null +++ b/lightx2v/server/api/tasks/video.py @@ -0,0 +1,109 @@ +import asyncio +import uuid +from pathlib import Path + +from fastapi import APIRouter, File, Form, HTTPException, UploadFile +from loguru import logger + +from ...schema import TaskResponse, VideoTaskRequest +from ...task_manager import task_manager +from ..deps import get_services, validate_url_async + +router = APIRouter() + + +def _write_file_sync(file_path: Path, content: bytes) -> None: + with open(file_path, "wb") as buffer: + buffer.write(content) + + +@router.post("/", response_model=TaskResponse) +async def create_video_task(message: VideoTaskRequest): + try: + if hasattr(message, "image_path") and message.image_path and message.image_path.startswith("http"): + if not await validate_url_async(message.image_path): + raise HTTPException(status_code=400, detail=f"Image URL is not accessible: {message.image_path}") + + task_id = task_manager.create_task(message) + message.task_id = task_id + + return TaskResponse( + task_id=task_id, + task_status="pending", + save_result_path=message.save_result_path, + ) + except RuntimeError as e: + raise HTTPException(status_code=503, detail=str(e)) + except Exception as e: + logger.error(f"Failed to create video task: {e}") + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/form", response_model=TaskResponse) +async def create_video_task_form( + image_file: UploadFile = File(...), + prompt: str = Form(default=""), + save_result_path: str = Form(default=""), + use_prompt_enhancer: bool = Form(default=False), + negative_prompt: str = Form(default=""), + num_fragments: int = Form(default=1), + infer_steps: int = Form(default=5), + target_video_length: int = Form(default=81), + seed: int = Form(default=42), + audio_file: UploadFile = File(None), + video_duration: int = Form(default=5), + target_fps: int = Form(default=16), +): + services = get_services() + assert services.file_service is not None, "File service is not initialized" + + async def save_file_async(file: UploadFile, target_dir: Path) -> str: + if not file or not file.filename: + return "" + + file_extension = Path(file.filename).suffix + unique_filename = f"{uuid.uuid4()}{file_extension}" + file_path = target_dir / unique_filename + + content = await file.read() + await asyncio.to_thread(_write_file_sync, file_path, content) + + return str(file_path) + + image_path = "" + if image_file and image_file.filename: + image_path = await save_file_async(image_file, services.file_service.input_image_dir) + + audio_path = "" + if audio_file and audio_file.filename: + audio_path = await save_file_async(audio_file, services.file_service.input_audio_dir) + + message = VideoTaskRequest( + prompt=prompt, + use_prompt_enhancer=use_prompt_enhancer, + negative_prompt=negative_prompt, + image_path=image_path, + num_fragments=num_fragments, + save_result_path=save_result_path, + infer_steps=infer_steps, + target_video_length=target_video_length, + seed=seed, + audio_path=audio_path, + video_duration=video_duration, + target_fps=target_fps, + ) + + try: + task_id = task_manager.create_task(message) + message.task_id = task_id + + return TaskResponse( + task_id=task_id, + task_status="pending", + save_result_path=message.save_result_path, + ) + except RuntimeError as e: + raise HTTPException(status_code=503, detail=str(e)) + except Exception as e: + logger.error(f"Failed to create video form task: {e}") + raise HTTPException(status_code=500, detail=str(e)) diff --git a/lightx2v/server/config.py b/lightx2v/server/config.py new file mode 100644 index 0000000..a1abb61 --- /dev/null +++ b/lightx2v/server/config.py @@ -0,0 +1,63 @@ +import os +from dataclasses import dataclass +from pathlib import Path + +from loguru import logger + + +@dataclass +class ServerConfig: + host: str = "0.0.0.0" + port: int = 8000 + max_queue_size: int = 10 + + task_timeout: int = 300 + task_history_limit: int = 1000 + + http_timeout: int = 30 + http_max_retries: int = 3 + + cache_dir: str = str(Path(__file__).parent.parent / "server_cache") + max_upload_size: int = 500 * 1024 * 1024 # 500MB + + @classmethod + def from_env(cls) -> "ServerConfig": + config = cls() + + if env_host := os.environ.get("LIGHTX2V_HOST"): + config.host = env_host + + if env_port := os.environ.get("LIGHTX2V_PORT"): + try: + config.port = int(env_port) + except ValueError: + logger.warning(f"Invalid port in environment: {env_port}") + + if env_queue_size := os.environ.get("LIGHTX2V_MAX_QUEUE_SIZE"): + try: + config.max_queue_size = int(env_queue_size) + except ValueError: + logger.warning(f"Invalid max queue size: {env_queue_size}") + + # MASTER_ADDR is now managed by torchrun, no need to set manually + + if env_cache_dir := os.environ.get("LIGHTX2V_CACHE_DIR"): + config.cache_dir = env_cache_dir + + return config + + def validate(self) -> bool: + valid = True + + if self.max_queue_size <= 0: + logger.error("max_queue_size must be positive") + valid = False + + if self.task_timeout <= 0: + logger.error("task_timeout must be positive") + valid = False + + return valid + + +server_config = ServerConfig.from_env() diff --git a/lightx2v/server/main.py b/lightx2v/server/main.py new file mode 100644 index 0000000..790ef6b --- /dev/null +++ b/lightx2v/server/main.py @@ -0,0 +1,59 @@ +import os +import sys +from pathlib import Path + +import uvicorn +from loguru import logger + +from .api import ApiServer +from .config import server_config +from .services import DistributedInferenceService + + +def run_server(args): + inference_service = None + try: + rank = int(os.environ.get("LOCAL_RANK", 0)) + world_size = int(os.environ.get("WORLD_SIZE", 1)) + + logger.info(f"Starting LightX2V server (Rank {rank}/{world_size})...") + + if hasattr(args, "host") and args.host: + server_config.host = args.host + if hasattr(args, "port") and args.port: + server_config.port = args.port + + if not server_config.validate(): + raise RuntimeError("Invalid server configuration") + + inference_service = DistributedInferenceService() + if not inference_service.start_distributed_inference(args): + raise RuntimeError("Failed to start distributed inference service") + logger.info(f"Rank {rank}: Inference service started successfully") + + if rank == 0: + cache_dir = Path(server_config.cache_dir) + cache_dir.mkdir(parents=True, exist_ok=True) + + api_server = ApiServer(max_queue_size=server_config.max_queue_size) + api_server.initialize_services(cache_dir, inference_service) + + app = api_server.get_app() + + logger.info(f"Starting FastAPI server on {server_config.host}:{server_config.port}") + uvicorn.run(app, host=server_config.host, port=server_config.port, log_level="info") + else: + logger.info(f"Rank {rank}: Starting worker loop") + import asyncio + + asyncio.run(inference_service.run_worker_loop()) + + except KeyboardInterrupt: + logger.info(f"Server rank {rank} interrupted by user") + if inference_service: + inference_service.stop_distributed_inference() + except Exception as e: + logger.error(f"Server rank {rank} failed: {e}") + if inference_service: + inference_service.stop_distributed_inference() + sys.exit(1) diff --git a/lightx2v/server/media/__init__.py b/lightx2v/server/media/__init__.py new file mode 100644 index 0000000..bed40c9 --- /dev/null +++ b/lightx2v/server/media/__init__.py @@ -0,0 +1,13 @@ +from .audio import AudioHandler, is_base64_audio, save_base64_audio +from .base import MediaHandler +from .image import ImageHandler, is_base64_image, save_base64_image + +__all__ = [ + "MediaHandler", + "ImageHandler", + "AudioHandler", + "is_base64_image", + "save_base64_image", + "is_base64_audio", + "save_base64_audio", +] diff --git a/lightx2v/server/media/audio.py b/lightx2v/server/media/audio.py new file mode 100644 index 0000000..e72a1c8 --- /dev/null +++ b/lightx2v/server/media/audio.py @@ -0,0 +1,74 @@ +from typing import Dict + +from .base import MediaHandler + + +class AudioHandler(MediaHandler): + _instance = None + + def __new__(cls): + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def get_media_signatures(self) -> Dict[bytes, str]: + return { + b"ID3": "mp3", + b"\xff\xfb": "mp3", + b"\xff\xf3": "mp3", + b"\xff\xf2": "mp3", + b"OggS": "ogg", + b"fLaC": "flac", + } + + def get_data_url_prefix(self) -> str: + return "data:audio/" + + def get_data_url_pattern(self) -> str: + return r"data:audio/(\w+);base64,(.+)" + + def get_default_extension(self) -> str: + return "mp3" + + def is_base64(self, data: str) -> bool: + if data.startswith(self.get_data_url_prefix()): + return True + + try: + import base64 + + if len(data) % 4 == 0: + base64.b64decode(data, validate=True) + decoded = base64.b64decode(data[:100]) + for signature in self.get_media_signatures().keys(): + if decoded.startswith(signature): + return True + if decoded.startswith(b"RIFF") and b"WAVE" in decoded[:12]: + return True + if decoded[:4] in [b"ftyp", b"\x00\x00\x00\x20", b"\x00\x00\x00\x18"]: + return True + except Exception: + return False + + return False + + def detect_extension(self, data: bytes) -> str: + for signature, ext in self.get_media_signatures().items(): + if data.startswith(signature): + return ext + if data.startswith(b"RIFF") and b"WAVE" in data[:12]: + return "wav" + if data[:4] in [b"ftyp", b"\x00\x00\x00\x20", b"\x00\x00\x00\x18"]: + return "m4a" + return self.get_default_extension() + + +_handler = AudioHandler() + + +def is_base64_audio(data: str) -> bool: + return _handler.is_base64(data) + + +def save_base64_audio(base64_data: str, output_dir: str) -> str: + return _handler.save_base64(base64_data, output_dir) diff --git a/lightx2v/server/media/base.py b/lightx2v/server/media/base.py new file mode 100644 index 0000000..9145879 --- /dev/null +++ b/lightx2v/server/media/base.py @@ -0,0 +1,86 @@ +import base64 +import os +import re +import uuid +from abc import ABC, abstractmethod +from pathlib import Path +from typing import Dict, Optional, Tuple + +from loguru import logger + + +class MediaHandler(ABC): + @abstractmethod + def get_media_signatures(self) -> Dict[bytes, str]: + """Return the binary signatures of this media type and their corresponding file extensions.""" + pass + + @abstractmethod + def get_data_url_prefix(self) -> str: + """Return the data URL prefix, e.g. 'data:image/' or 'data:audio/'.""" + pass + + @abstractmethod + def get_data_url_pattern(self) -> str: + """Return the regex pattern for data URL.""" + pass + + @abstractmethod + def get_default_extension(self) -> str: + """Return the default extension for this media type.""" + pass + + def is_base64(self, data: str) -> bool: + if data.startswith(self.get_data_url_prefix()): + return True + + try: + if len(data) % 4 == 0: + base64.b64decode(data, validate=True) + decoded = base64.b64decode(data[:100]) + for signature in self.get_media_signatures().keys(): + if decoded.startswith(signature): + return True + except Exception as e: + logger.warning(f"Error checking base64 {self.__class__.__name__}: {e}") + return False + + return False + + def extract_base64_data(self, data: str) -> Tuple[str, Optional[str]]: + if data.startswith("data:"): + match = re.match(self.get_data_url_pattern(), data) + if match: + format_type = match.group(1) + base64_data = match.group(2) + return base64_data, format_type + + return data, None + + def detect_extension(self, data: bytes) -> str: + for signature, ext in self.get_media_signatures().items(): + if data.startswith(signature): + return ext + return self.get_default_extension() + + def save_base64(self, base64_data: str, output_dir: str) -> str: + Path(output_dir).mkdir(parents=True, exist_ok=True) + + data, format_type = self.extract_base64_data(base64_data) + file_id = str(uuid.uuid4()) + + try: + media_data = base64.b64decode(data) + except Exception as e: + raise ValueError(f"Invalid base64 data: {e}") + + if format_type: + ext = format_type + else: + ext = self.detect_extension(media_data) + + file_path = os.path.join(output_dir, f"{file_id}.{ext}") + with open(file_path, "wb") as f: + f.write(media_data) + + return file_path diff --git a/lightx2v/server/media/image.py b/lightx2v/server/media/image.py new file mode 100644 index 0000000..3d50d6b --- /dev/null +++ b/lightx2v/server/media/image.py @@ -0,0 +1,68 @@ +from typing import Dict + +from .base import MediaHandler + + +class ImageHandler(MediaHandler): + _instance = None + + def __new__(cls): + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def get_media_signatures(self) -> Dict[bytes, str]: + return { + b"\x89PNG\r\n\x1a\n": "png", + b"\xff\xd8\xff": "jpg", + b"GIF87a": "gif", + b"GIF89a": "gif", + } + + def get_data_url_prefix(self) -> str: + return "data:image/" + + def get_data_url_pattern(self) -> str: + return r"data:image/(\w+);base64,(.+)" + + def get_default_extension(self) -> str: + return "png" + + def is_base64(self, data: str) -> bool: + if data.startswith(self.get_data_url_prefix()): + return True + + try: + import base64 + + if len(data) % 4 == 0: + base64.b64decode(data, validate=True) + decoded = base64.b64decode(data[:100]) + for signature in self.get_media_signatures().keys(): + if decoded.startswith(signature): + return True + if len(decoded) > 12 and decoded[8:12] == b"WEBP": + return True + except Exception: + return False + + return False + + def detect_extension(self, data: bytes) -> str: + for signature, ext in self.get_media_signatures().items(): + if data.startswith(signature): + return ext + if len(data) > 12 and data[8:12] == b"WEBP": + return "webp" + return self.get_default_extension() + + +_handler = ImageHandler() + + +def is_base64_image(data: str) -> bool: + return _handler.is_base64(data) + + +def save_base64_image(base64_data: str, output_dir: str) -> str: + return _handler.save_base64(base64_data, output_dir) diff --git a/lightx2v/server/metrics/__init__.py b/lightx2v/server/metrics/__init__.py new file mode 100644 index 0000000..947bf38 --- /dev/null +++ b/lightx2v/server/metrics/__init__.py @@ -0,0 +1,6 @@ +# -*-coding=utf-8-*- + +from .metrics import server_process +from .monitor import Monitor + +monitor_cli = Monitor() diff --git a/lightx2v/server/metrics/metrics.py b/lightx2v/server/metrics/metrics.py new file mode 100644 index 0000000..bba3c31 --- /dev/null +++ b/lightx2v/server/metrics/metrics.py @@ -0,0 +1,361 @@ +# -*-coding=utf-8-*- +import threading +from typing import List, Tuple + +from loguru import logger +from prometheus_client import Counter, Gauge, Histogram, start_http_server +from pydantic import BaseModel + + +class MetricsConfig(BaseModel): + name: str + desc: str + type_: str + labels: List[str] = [] + buckets: Tuple[float, ...] = ( + 0.1, + 0.5, + 1.0, + 2.5, + 5.0, + 10.0, + 30.0, + 60.0, + 120.0, + 300.0, + 600.0, + ) + + +HYBRID_10_50MS_BUCKETS = ( + 0.001, # 1ms + 0.005, # 5ms + 0.008, # 8ms + 0.010, # 10ms + 0.012, # 12ms + 0.015, # 15ms + 0.020, # 20ms + 0.025, # 25ms + 0.030, # 30ms + 0.035, # 35ms + 0.040, # 40ms + 0.045, # 45ms + 0.050, # 50ms + 0.060, # 60ms + 0.075, # 75ms + 0.100, # 100ms + 0.150, # 150ms + 0.200, # 200ms + 0.500, # 500ms + 1.0, # 1s + 2.0, # 2s + 5.0, # 5s + 10.0, # 10s +) + +HYBRID_60_120MS_BUCKETS = ( + 0.010, # 10ms + 0.030, # 30ms + 0.050, # 50ms + 0.060, # 60ms + 0.065, # 65ms + 0.070, # 70ms + 0.075, # 75ms + 0.080, # 80ms + 0.085, # 85ms + 0.090, # 90ms + 0.095, # 95ms + 0.100, # 100ms + 0.110, # 110ms + 0.120, # 120ms + 0.150, # 150ms + 0.200, # 200ms + 0.300, # 200ms + 0.400, # 200ms + 0.500, # 500ms + 1.0, # 1s + 2.0, # 2s + 5.0, # 5s + 10.0, # 10s +) + +HYBRID_300MS_1600MS_BUCKETS = ( + 0.010, # 10ms + 0.050, # 50ms + 0.100, # 100ms + 0.150, # 150ms + 0.200, # 200ms + 0.250, # 250ms + 0.300, # 300ms + 0.350, # 350ms + 0.400, # 400ms + 0.450, # 450ms + 0.500, # 500ms + 0.550, # 550ms + 0.600, # 600ms + 0.650, # 650ms + 0.700, # 700ms + 0.750, # 750ms + 0.800, # 800ms + 0.850, # 850ms + 0.900, # 900ms + 0.950, # 950ms + 1.000, # 1s + 1.100, # 1.1s + 1.200, # 1.2s + 1.300, # 1.3s + 1.400, # 1.4s + 1.500, # 1.5s + 1.600, # 1.6s + 2.000, # 2s + 3.000, # 3s +) + +HYBRID_1_30S_BUCKETS = ( + 1.0, # 1s + 1.5, # 1.5s + 2.0, # 2s + 2.5, # 2.5s + 3.0, # 3s + 3.5, # 3.5s + 4.0, # 4s + 4.5, # 4.5s + 5.0, # 5s + 5.5, # 5.5s + 6.0, # 6s + 6.5, # 6.5s + 7.0, # 7s + 7.5, # 7.5s + 8.0, # 8s + 8.5, # 8.5s + 9.0, # 9s + 9.5, # 9.5s + 10.0, # 10s + 11.0, # 11s + 12.0, # 12s + 13.0, # 13s + 15.0, # 15s + 16.0, # 16s + 17.0, # 17s + 18.0, # 18s + 19.0, # 19s + 20.0, # 20s + 21.0, # 21s + 22.0, # 22s + 23.0, # 23s + 25.0, # 25s + 30.0, # 30s +) + +HYBRID_30_900S_BUCKETS = ( + 1.0, # 1s + 5.0, # 5s + 10.0, # 10s + 20.0, # 20s + 30.0, # 30s + 35.0, # 35s + 40.0, # 40s + 50.0, # 50s + 60.0, # 1min + 70.0, # 1min10s + 80.0, # 1min20s + 90.0, # 1min30s + 100.0, # 1min40s + 110.0, # 1min50s + 120.0, # 2min + 130.0, # 2min10s + 140.0, # 2min20s + 150.0, # 2min30s + 180.0, # 3min + 240.0, # 4min + 300.0, # 5min + 600.0, # 10min + 900.0, # 15min +) + + +METRICS_INFO = { + "lightx2v_worker_request_count": MetricsConfig( + name="lightx2v_worker_request_count", + desc="The total number of requests", + type_="counter", + ), + "lightx2v_worker_request_success": MetricsConfig( + name="lightx2v_worker_request_success", + desc="The number of successful requests", + type_="counter", + ), + "lightx2v_worker_request_failure": MetricsConfig( + name="lightx2v_worker_request_failure", + desc="The number of failed requests", + type_="counter", + labels=["error_type"], + ), + "lightx2v_worker_request_duration": MetricsConfig( + name="lightx2v_worker_request_duration", + desc="Duration of the request (s)", + type_="histogram", + labels=["model_cls"], + ), + "lightx2v_input_audio_len": MetricsConfig( + name="lightx2v_input_audio_len", + desc="Length of the input audio", + type_="histogram", + buckets=( + 1.0, + 2.0, + 3.0, + 5.0, + 7.0, + 10.0, + 20.0, + 30.0, + 45.0, + 60.0, + 75.0, + 90.0, + 105.0, + 120.0, + ), + ), + "lightx2v_input_image_len": MetricsConfig( + name="lightx2v_input_image_len", + desc="Length of the input image", + type_="histogram", + ), + "lightx2v_input_prompt_len": MetricsConfig( + name="lightx2v_input_prompt_len", + desc="Length of the input prompt", + type_="histogram", + ), + "lightx2v_load_model_duration": MetricsConfig( + name="lightx2v_load_model_duration", + desc="Duration of load model (s)", + type_="histogram", + ), + "lightx2v_run_per_step_dit_duration": MetricsConfig( + name="lightx2v_run_per_step_dit_duration", + desc="Duration of run per step Dit (s)", + type_="histogram", + labels=["step_no", "total_steps"], + buckets=HYBRID_30_900S_BUCKETS, + ), + "lightx2v_run_text_encode_duration": MetricsConfig( + name="lightx2v_run_text_encode_duration", + desc="Duration of run text encode (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_1_30S_BUCKETS, + ), + "lightx2v_run_img_encode_duration": MetricsConfig( + name="lightx2v_run_img_encode_duration", + desc="Duration of run img encode (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_10_50MS_BUCKETS, + ), + "lightx2v_run_vae_encoder_image_duration": MetricsConfig( + name="lightx2v_run_vae_encoder_image_duration", + desc="Duration of run vae encode for image (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_60_120MS_BUCKETS, + ), + "lightx2v_run_vae_encoder_pre_latent_duration": MetricsConfig( + name="lightx2v_run_vae_encoder_pre_latent_duration", + desc="Duration of run vae encode for pre latents (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_1_30S_BUCKETS, + ), + "lightx2v_run_vae_decode_duration": MetricsConfig( + name="lightx2v_run_vae_decode_duration", + desc="Duration of run vae decode (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_1_30S_BUCKETS, + ), + "lightx2v_run_init_run_segment_duration": MetricsConfig( + name="lightx2v_run_init_run_segment_duration", + desc="Duration of run init_run_segment (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_1_30S_BUCKETS, + ), + "lightx2v_run_end_run_segment_duration": MetricsConfig( + name="lightx2v_run_end_run_segment_duration", + desc="Duration of run end_run_segment (s)", + type_="histogram", + labels=["model_cls"], + buckets=HYBRID_300MS_1600MS_BUCKETS, + ), + "lightx2v_run_segments_end2end_duration": MetricsConfig( + name="lightx2v_run_segments_end2end_duration", + desc="Duration of run segments end2end (s)", + type_="histogram", + labels=["model_cls"], + ), +} + + +class MetricsClient: + def __init__(self): + self.init_metrics() + + def init_metrics(self): + for metric_name, config in METRICS_INFO.items(): + if config.type_ == "counter": + self.register_counter(config.name, config.desc, config.labels) + elif config.type_ == "histogram": + self.register_histogram(config.name, config.desc, config.labels, buckets=config.buckets) + elif config.type_ == "gauge": + self.register_gauge(config.name, config.desc, config.labels) + else: + logger.warning(f"Unsupported metric type: {config.type_} for {metric_name}") + + def register_counter(self, name, desc, labels): + metric_instance = Counter(name, desc, labels) + setattr(self, name, metric_instance) + + def register_histogram(self, name, desc, labels, buckets=None): + buckets = buckets or ( + 0.1, + 0.5, + 1.0, + 2.5, + 5.0, + 10.0, + 30.0, + 60.0, + 120.0, + 300.0, + 600.0, + ) + metric_instance = Histogram(name, desc, labels, buckets=buckets) + setattr(self, name, metric_instance) + + def register_gauge(self, name, desc, labels): + metric_instance = Gauge(name, desc, labels) + setattr(self, name, metric_instance) + + +class MetricsServer: + def __init__(self, port=8000): + self.port = port + self.server_thread = None + + def start_server(self): + def run_server(): + start_http_server(self.port) + logger.info(f"Metrics server started on port {self.port}") + + self.server_thread = threading.Thread(target=run_server) + self.server_thread.daemon = True + self.server_thread.start() + + +def server_process(metric_port=8001): + metrics = MetricsServer( + port=metric_port, + ) + metrics.start_server() diff --git a/lightx2v/server/metrics/monitor.py b/lightx2v/server/metrics/monitor.py new file mode 100644 index 0000000..5636d27 --- /dev/null +++ b/lightx2v/server/metrics/monitor.py @@ -0,0 +1,22 @@ +# -*-coding=utf-8-*- +import threading + +from .metrics import MetricsClient + + +class Monitor(MetricsClient): + _instance = None + _lock = threading.Lock() + _initialized = False # 添加初始化标志 + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + with cls._lock: + if cls._instance is None: + cls._instance = super().__new__(cls) + return cls._instance + + def __init__(self, *args, **kwargs): + if not self.__class__._initialized: + super().__init__(*args, **kwargs) + self.__class__._initialized = True diff --git a/lightx2v/server/schema.py b/lightx2v/server/schema.py new file mode 100644 index 0000000..8d42076 --- /dev/null +++ b/lightx2v/server/schema.py @@ -0,0 +1,73 @@ +import random +from typing import Optional + +from pydantic import BaseModel, Field + +from ..utils.generate_task_id import generate_task_id + + +def generate_random_seed() -> int: + return random.randint(0, 2**32 - 1) + + +class TalkObject(BaseModel): + audio: str = Field(..., description="Audio path") + mask: str = Field(..., description="Mask path") + + +class BaseTaskRequest(BaseModel): + task_id: str = Field(default_factory=generate_task_id, description="Task ID (auto-generated)") + prompt: str = Field("", description="Generation prompt") + use_prompt_enhancer: bool = Field(False, description="Whether to use prompt enhancer") + negative_prompt: str = Field("", description="Negative prompt") + image_path: str = Field("", description="Base64 encoded image or URL") + save_result_path: str = Field("", description="Save result path (optional, defaults to task_id, suffix auto-detected)") + infer_steps: int = Field(5, description="Inference steps") + seed: int = Field(default_factory=generate_random_seed, description="Random seed (auto-generated if not set)") + + def __init__(self, **data): + super().__init__(**data) + if not self.save_result_path: + self.save_result_path = f"{self.task_id}" + + def get(self, key, default=None): + return getattr(self, key, default) + + +class VideoTaskRequest(BaseTaskRequest): + num_fragments: int = Field(1, description="Number of fragments") + target_video_length: int = Field(81, description="Target video length") + audio_path: str = Field("", description="Input audio path (Wan-Audio)") + video_duration: int = Field(5, description="Video duration (Wan-Audio)") + talk_objects: Optional[list[TalkObject]] = Field(None, description="Talk objects (Wan-Audio)") + target_fps: Optional[int] = Field(16, description="Target FPS for video frame interpolation (overrides config)") + resize_mode: Optional[str] = Field("adaptive", description="Resize mode (adaptive, keep_ratio_fixed_area, fixed_min_area, fixed_max_area, fixed_shape, fixed_min_side)") + + +class ImageTaskRequest(BaseTaskRequest): + aspect_ratio: str = Field("16:9", description="Output aspect ratio") + + +class TaskRequest(BaseTaskRequest): + num_fragments: int = Field(1, description="Number of fragments") + target_video_length: int = Field(81, description="Target video length (video only)") + audio_path: str = Field("", description="Input audio path (Wan-Audio)") + video_duration: int = Field(5, description="Video duration (Wan-Audio)") + talk_objects: Optional[list[TalkObject]] = Field(None, description="Talk objects (Wan-Audio)") + aspect_ratio: str = Field("16:9", description="Output aspect ratio (T2I only)") + target_fps: Optional[int] = Field(16, description="Target FPS for video frame interpolation (overrides config)") + + +class TaskStatusMessage(BaseModel): + task_id: str = Field(..., description="Task ID") + + +class TaskResponse(BaseModel): + task_id: str + task_status: str + save_result_path: str + + +class StopTaskResponse(BaseModel): + stop_status: str + reason: str diff --git a/lightx2v/server/services/__init__.py b/lightx2v/server/services/__init__.py new file mode 100644 index 0000000..bd07e18 --- /dev/null +++ b/lightx2v/server/services/__init__.py @@ -0,0 +1,11 @@ +from .file_service import FileService +from .generation import ImageGenerationService, VideoGenerationService +from .inference import DistributedInferenceService, TorchrunInferenceWorker + +__all__ = [ + "FileService", + "DistributedInferenceService", + "TorchrunInferenceWorker", + "VideoGenerationService", + "ImageGenerationService", +] diff --git a/lightx2v/server/services/distributed_utils.py b/lightx2v/server/services/distributed_utils.py new file mode 100644 index 0000000..4b5d66e --- /dev/null +++ b/lightx2v/server/services/distributed_utils.py @@ -0,0 +1,141 @@ +import os +import pickle +from datetime import timedelta +from typing import Any, Optional + +import torch +import torch.distributed as dist +from loguru import logger + + +class DistributedManager: + def __init__(self): + self.is_initialized = False + self.rank = 0 + self.world_size = 1 + self.device = "cpu" + self.task_pg = None + + CHUNK_SIZE = 1024 * 1024 + + def init_process_group(self) -> bool: + try: + self.rank = int(os.environ.get("LOCAL_RANK", 0)) + self.world_size = int(os.environ.get("WORLD_SIZE", 1)) + + if self.world_size > 1: + backend = "nccl" if torch.cuda.is_available() else "gloo" + dist.init_process_group(backend=backend, init_method="env://") + logger.info(f"Setup backend: {backend}") + + task_timeout = timedelta(days=30) + self.task_pg = dist.new_group(backend="gloo", timeout=task_timeout) + logger.info("Created gloo process group for task distribution with 30-day timeout") + + if torch.cuda.is_available(): + torch.cuda.set_device(self.rank) + self.device = f"cuda:{self.rank}" + else: + self.device = "cpu" + else: + self.device = "cuda:0" if torch.cuda.is_available() else "cpu" + + self.is_initialized = True + logger.info(f"Rank {self.rank}/{self.world_size - 1} distributed environment initialized successfully") + return True + + except Exception as e: + logger.error(f"Rank {self.rank} distributed environment initialization failed: {str(e)}") + return False + + def cleanup(self): + try: + if dist.is_initialized(): + dist.destroy_process_group() + logger.info(f"Rank {self.rank} distributed environment cleaned up") + except Exception as e: + logger.error(f"Rank {self.rank} error occurred while cleaning up distributed environment: {str(e)}") + finally: + self.is_initialized = False + self.task_pg = None + + def barrier(self): + if self.is_initialized: + if torch.cuda.is_available() and dist.get_backend() == "nccl": + dist.barrier(device_ids=[torch.cuda.current_device()]) + else: + dist.barrier() + + def is_rank_zero(self) -> bool: + return self.rank == 0 + + def _broadcast_byte_chunks(self, data_bytes: bytes) -> None: + total_length = len(data_bytes) + num_full_chunks = total_length // self.CHUNK_SIZE + remaining = total_length % self.CHUNK_SIZE + + for i in range(num_full_chunks): + start_idx = i * self.CHUNK_SIZE + end_idx = start_idx + self.CHUNK_SIZE + chunk = data_bytes[start_idx:end_idx] + task_tensor = torch.tensor(list(chunk), dtype=torch.uint8) + dist.broadcast(task_tensor, src=0, group=self.task_pg) + + if remaining: + chunk = data_bytes[-remaining:] + task_tensor = torch.tensor(list(chunk), dtype=torch.uint8) + dist.broadcast(task_tensor, src=0, group=self.task_pg) + + def _receive_byte_chunks(self, total_length: int) -> bytes: + if total_length <= 0: + return b"" + + received = bytearray() + remaining = total_length + + while remaining > 0: + chunk_length = min(self.CHUNK_SIZE, remaining) + task_tensor = torch.empty(chunk_length, dtype=torch.uint8) + dist.broadcast(task_tensor, src=0, group=self.task_pg) + received.extend(task_tensor.numpy()) + remaining -= chunk_length + + return bytes(received) + + def broadcast_task_data(self, task_data: Optional[Any] = None) -> Optional[Any]: + if not self.is_initialized: + return None + + if self.is_rank_zero(): + if task_data is None: + stop_signal = torch.tensor([1], dtype=torch.int32) + else: + stop_signal = torch.tensor([0], dtype=torch.int32) + + dist.broadcast(stop_signal, src=0, group=self.task_pg) + + if task_data is not None: + task_bytes = pickle.dumps(task_data) + task_length = torch.tensor([len(task_bytes)], dtype=torch.int32) + + dist.broadcast(task_length, src=0, group=self.task_pg) + self._broadcast_byte_chunks(task_bytes) + + return task_data + else: + return None + else: + stop_signal = torch.tensor([0], dtype=torch.int32) + dist.broadcast(stop_signal, src=0, group=self.task_pg) + + if stop_signal.item() == 1: + return None + else: + task_length = torch.tensor([0], dtype=torch.int32) + + dist.broadcast(task_length, src=0, group=self.task_pg) + total_length = int(task_length.item()) + + task_bytes = self._receive_byte_chunks(total_length) + task_data = pickle.loads(task_bytes) + return task_data diff --git a/lightx2v/server/services/file_service.py b/lightx2v/server/services/file_service.py new file mode 100644 index 0000000..95c7264 --- /dev/null +++ b/lightx2v/server/services/file_service.py @@ -0,0 +1,153 @@ +import asyncio +import uuid +from pathlib import Path +from typing import Optional +from urllib.parse import urlparse + +import httpx +from loguru import logger + + +class FileService: + def __init__(self, cache_dir: Path): + self.cache_dir = cache_dir + self.input_image_dir = cache_dir / "inputs" / "imgs" + self.input_audio_dir = cache_dir / "inputs" / "audios" + self.output_video_dir = cache_dir / "outputs" + + self._http_client = None + self._client_lock = asyncio.Lock() + + self.max_retries = 3 + self.retry_delay = 1.0 + self.max_retry_delay = 10.0 + + for directory in [ + self.input_image_dir, + self.output_video_dir, + self.input_audio_dir, + ]: + directory.mkdir(parents=True, exist_ok=True) + + async def _get_http_client(self) -> httpx.AsyncClient: + async with self._client_lock: + if self._http_client is None or self._http_client.is_closed: + timeout = httpx.Timeout( + connect=10.0, + read=30.0, + write=10.0, + pool=5.0, + ) + limits = httpx.Limits(max_keepalive_connections=5, max_connections=10, keepalive_expiry=30.0) + self._http_client = httpx.AsyncClient(verify=False, timeout=timeout, limits=limits, follow_redirects=True) + return self._http_client + + async def _download_with_retry(self, url: str, max_retries: Optional[int] = None) -> httpx.Response: + if max_retries is None: + max_retries = self.max_retries + + last_exception = None + retry_delay = self.retry_delay + + for attempt in range(max_retries): + try: + client = await self._get_http_client() + response = await client.get(url) + + if response.status_code == 200: + return response + elif response.status_code >= 500: + logger.warning(f"Server error {response.status_code} for {url}, attempt {attempt + 1}/{max_retries}") + last_exception = httpx.HTTPStatusError(f"Server returned {response.status_code}", request=response.request, response=response) + else: + raise httpx.HTTPStatusError(f"Client error {response.status_code}", request=response.request, response=response) + + except (httpx.ConnectError, httpx.TimeoutException, httpx.NetworkError) as e: + logger.warning(f"Connection error for {url}, attempt {attempt + 1}/{max_retries}: {str(e)}") + last_exception = e + except httpx.HTTPStatusError as e: + if e.response and e.response.status_code < 500: + raise + last_exception = e + except Exception as e: + logger.error(f"Unexpected error downloading {url}: {str(e)}") + last_exception = e + + if attempt < max_retries - 1: + await asyncio.sleep(retry_delay) + retry_delay = min(retry_delay * 2, self.max_retry_delay) + + error_msg = f"All {max_retries} connection attempts failed for {url}" + if last_exception: + error_msg += f": {str(last_exception)}" + raise httpx.ConnectError(error_msg) + + async def download_media(self, url: str, media_type: str = "image") -> Path: + try: + parsed_url = urlparse(url) + if not parsed_url.scheme or not parsed_url.netloc: + raise ValueError(f"Invalid URL format: {url}") + + response = await self._download_with_retry(url) + + media_name = Path(parsed_url.path).name + if not media_name: + default_ext = "jpg" if media_type == "image" else "mp3" + media_name = f"{uuid.uuid4()}.{default_ext}" + + if media_type == "image": + target_dir = self.input_image_dir + else: + target_dir = self.input_audio_dir + + media_path = target_dir / media_name + media_path.parent.mkdir(parents=True, exist_ok=True) + + with open(media_path, "wb") as f: + f.write(response.content) + + logger.info(f"Successfully downloaded {media_type} from {url} to {media_path}") + return media_path + + except httpx.ConnectError as e: + logger.error(f"Connection error downloading {media_type} from {url}: {str(e)}") + raise ValueError(f"Failed to connect to {url}: {str(e)}") + except httpx.TimeoutException as e: + logger.error(f"Timeout downloading {media_type} from {url}: {str(e)}") + raise ValueError(f"Download timeout for {url}: {str(e)}") + except httpx.HTTPStatusError as e: + logger.error(f"HTTP error downloading {media_type} from {url}: {str(e)}") + raise ValueError(f"HTTP error for {url}: {str(e)}") + except ValueError: + raise + except Exception as e: + logger.error(f"Unexpected error downloading {media_type} from {url}: {str(e)}") + raise ValueError(f"Failed to download {media_type} from {url}: {str(e)}") + + async def download_image(self, image_url: str) -> Path: + return await self.download_media(image_url, "image") + + async def download_audio(self, audio_url: str) -> Path: + return await self.download_media(audio_url, "audio") + + def save_uploaded_file(self, file_content: bytes, filename: str) -> Path: + file_extension = Path(filename).suffix + unique_filename = f"{uuid.uuid4()}{file_extension}" + file_path = self.input_image_dir / unique_filename + + with open(file_path, "wb") as f: + f.write(file_content) + + return file_path + + def get_output_path(self, save_result_path: str) -> Path: + video_path = Path(save_result_path) + if not video_path.is_absolute(): + return self.output_video_dir / save_result_path + return video_path + + async def cleanup(self): + async with self._client_lock: + if self._http_client and not self._http_client.is_closed: + await self._http_client.aclose() + self._http_client = None diff --git a/lightx2v/server/services/generation/__init__.py b/lightx2v/server/services/generation/__init__.py new file mode 100644 index 0000000..1b52108 --- /dev/null +++ b/lightx2v/server/services/generation/__init__.py @@ -0,0 +1,9 @@ +from .base import BaseGenerationService +from .image import ImageGenerationService +from .video import VideoGenerationService + +__all__ = [ + "BaseGenerationService", + "VideoGenerationService", + "ImageGenerationService", +] diff --git a/lightx2v/server/services/generation/base.py b/lightx2v/server/services/generation/base.py new file mode 100644 index 0000000..12b9629 --- /dev/null +++ b/lightx2v/server/services/generation/base.py @@ -0,0 +1,146 @@ +import json +import uuid +from abc import ABC, abstractmethod +from typing import Any, Dict, Optional + +from loguru import logger + +from ...media import is_base64_audio, is_base64_image, save_base64_audio, save_base64_image +from ...schema import TaskResponse +from ..file_service import FileService +from ..inference import DistributedInferenceService + + +class BaseGenerationService(ABC): + def __init__(self, file_service: FileService, inference_service: DistributedInferenceService): + self.file_service = file_service + self.inference_service = inference_service + + @abstractmethod + def get_output_extension(self) -> str: + pass + + @abstractmethod + def get_task_type(self) -> str: + pass + + def _is_target_task_type(self) -> bool: + if self.inference_service.worker and self.inference_service.worker.runner: + task_type = self.inference_service.worker.runner.config.get("task", "t2v") + return task_type in self.get_task_type().split(",") + return False + + async def _process_image_path(self, image_path: str, task_data: Dict[str, Any]) -> None: + if not image_path: + return + + if image_path.startswith("http"): + downloaded_path = await self.file_service.download_image(image_path) + task_data["image_path"] = str(downloaded_path) + elif is_base64_image(image_path): + saved_path = save_base64_image(image_path, str(self.file_service.input_image_dir)) + task_data["image_path"] = str(saved_path) + else: + task_data["image_path"] = image_path + + async def _process_audio_path(self, audio_path: str, task_data: Dict[str, Any]) -> None: + if not audio_path: + return + + if audio_path.startswith("http"): + downloaded_path = await self.file_service.download_audio(audio_path) + task_data["audio_path"] = str(downloaded_path) + elif is_base64_audio(audio_path): + saved_path = save_base64_audio(audio_path, str(self.file_service.input_audio_dir)) + task_data["audio_path"] = str(saved_path) + else: + task_data["audio_path"] = audio_path + + async def _process_talk_objects(self, talk_objects: list, task_data: Dict[str, Any]) -> None: + if not talk_objects: + return + + task_data["talk_objects"] = [{} for _ in range(len(talk_objects))] + + for index, talk_object in enumerate(talk_objects): + if talk_object.audio.startswith("http"): + audio_path = await self.file_service.download_audio(talk_object.audio) + task_data["talk_objects"][index]["audio"] = str(audio_path) + elif is_base64_audio(talk_object.audio): + audio_path = save_base64_audio(talk_object.audio, str(self.file_service.input_audio_dir)) + task_data["talk_objects"][index]["audio"] = str(audio_path) + else: + task_data["talk_objects"][index]["audio"] = talk_object.audio + + if talk_object.mask.startswith("http"): + mask_path = await self.file_service.download_image(talk_object.mask) + task_data["talk_objects"][index]["mask"] = str(mask_path) + elif is_base64_image(talk_object.mask): + mask_path = save_base64_image(talk_object.mask, str(self.file_service.input_image_dir)) + task_data["talk_objects"][index]["mask"] = str(mask_path) + else: + task_data["talk_objects"][index]["mask"] = talk_object.mask + + temp_path = self.file_service.cache_dir / uuid.uuid4().hex[:8] + temp_path.mkdir(parents=True, exist_ok=True) + task_data["audio_path"] = str(temp_path) + + config_path = temp_path / "config.json" + with open(config_path, "w") as f: + json.dump({"talk_objects": task_data["talk_objects"]}, f) + + def _prepare_output_path(self, save_result_path: str, task_data: Dict[str, Any]) -> None: + actual_save_path = self.file_service.get_output_path(save_result_path) + if not actual_save_path.suffix: + actual_save_path = actual_save_path.with_suffix(self.get_output_extension()) + task_data["save_result_path"] = str(actual_save_path) + task_data["video_path"] = actual_save_path.name + + async def generate_with_stop_event(self, message: Any, stop_event) -> Optional[Any]: + try: + task_data = {field: getattr(message, field) for field in message.model_fields_set if field != "task_id"} + task_data["task_id"] = message.task_id + + if stop_event.is_set(): + logger.info(f"Task {message.task_id} cancelled before processing") + return None + + if hasattr(message, "image_path") and message.image_path: + await self._process_image_path(message.image_path, task_data) + logger.info(f"Task {message.task_id} image path: {task_data.get('image_path')}") + + if hasattr(message, "audio_path") and message.audio_path: + await self._process_audio_path(message.audio_path, task_data) + logger.info(f"Task {message.task_id} audio path: {task_data.get('audio_path')}") + + if hasattr(message, "talk_objects") and message.talk_objects: + await self._process_talk_objects(message.talk_objects, task_data) + + self._prepare_output_path(message.save_result_path, task_data) + task_data["seed"] = message.seed + task_data["resize_mode"] = message.resize_mode + + result = await self.inference_service.submit_task_async(task_data) + + if result is None: + if stop_event.is_set(): + logger.info(f"Task {message.task_id} cancelled during processing") + return None + raise RuntimeError("Task processing failed") + + if result.get("status") == "success": + actual_save_path = self.file_service.get_output_path(message.save_result_path) + if not actual_save_path.suffix: + actual_save_path = actual_save_path.with_suffix(self.get_output_extension()) + return TaskResponse( + task_id=message.task_id, + task_status="completed", + save_result_path=actual_save_path.name, + ) + else: + error_msg = result.get("error", "Inference failed") + raise RuntimeError(error_msg) + + except Exception as e: + logger.exception(f"Task {message.task_id} processing failed: {str(e)}") + raise diff --git a/lightx2v/server/services/generation/image.py b/lightx2v/server/services/generation/image.py new file mode 100644 index 0000000..badb695 --- /dev/null +++ b/lightx2v/server/services/generation/image.py @@ -0,0 +1,66 @@ +from typing import Any, Optional + +from loguru import logger + +from ...schema import TaskResponse +from ..file_service import FileService +from ..inference import DistributedInferenceService +from .base import BaseGenerationService + + +class ImageGenerationService(BaseGenerationService): + def __init__(self, file_service: FileService, inference_service: DistributedInferenceService): + super().__init__(file_service, inference_service) + + def get_output_extension(self) -> str: + return ".png" + + def get_task_type(self) -> str: + return "t2i,i2i" + + async def generate_with_stop_event(self, message: Any, stop_event) -> Optional[Any]: + try: + task_data = {field: getattr(message, field) for field in message.model_fields_set if field != "task_id"} + task_data["task_id"] = message.task_id + + if hasattr(message, "aspect_ratio"): + task_data["aspect_ratio"] = message.aspect_ratio + + if stop_event.is_set(): + logger.info(f"Task {message.task_id} cancelled before processing") + return None + + if hasattr(message, "image_path") and message.image_path: + await self._process_image_path(message.image_path, task_data) + logger.info(f"Task {message.task_id} image path: {task_data.get('image_path')}") + + self._prepare_output_path(message.save_result_path, task_data) + task_data["seed"] = message.seed + + result = await self.inference_service.submit_task_async(task_data) + + if result is None: + if stop_event.is_set(): + logger.info(f"Task {message.task_id} cancelled during processing") + return None + raise RuntimeError("Task processing failed") + + if result.get("status") == "success": + actual_save_path = self.file_service.get_output_path(message.save_result_path) + if not actual_save_path.suffix: + actual_save_path = actual_save_path.with_suffix(self.get_output_extension()) + return TaskResponse( + task_id=message.task_id, + task_status="completed", + save_result_path=actual_save_path.name, + ) + else: + error_msg = result.get("error", "Inference failed") + raise RuntimeError(error_msg) + + except Exception as e: + logger.exception(f"Task {message.task_id} processing failed: {str(e)}") + raise + + async def generate_image_with_stop_event(self, message: Any, stop_event) -> Optional[Any]: + return await self.generate_with_stop_event(message, stop_event) diff --git a/lightx2v/server/services/generation/video.py b/lightx2v/server/services/generation/video.py new file mode 100644 index 0000000..0cc4651 --- /dev/null +++ b/lightx2v/server/services/generation/video.py @@ -0,0 +1,22 @@ +from typing import Any, Optional + +from ..file_service import FileService +from ..inference import DistributedInferenceService +from .base import BaseGenerationService + + +class VideoGenerationService(BaseGenerationService): + def __init__(self, file_service: FileService, inference_service: DistributedInferenceService): + super().__init__(file_service, inference_service) + + def get_output_extension(self) -> str: + return ".mp4" + + def get_task_type(self) -> str: + return "t2v,i2v,s2v" + + async def generate_with_stop_event(self, message: Any, stop_event) -> Optional[Any]: + return await super().generate_with_stop_event(message, stop_event) + + async def generate_video_with_stop_event(self, message: Any, stop_event) -> Optional[Any]: + return await self.generate_with_stop_event(message, stop_event) diff --git a/lightx2v/server/services/inference/__init__.py b/lightx2v/server/services/inference/__init__.py new file mode 100644 index 0000000..8199414 --- /dev/null +++ b/lightx2v/server/services/inference/__init__.py @@ -0,0 +1,7 @@ +from .service import DistributedInferenceService +from .worker import TorchrunInferenceWorker + +__all__ = [ + "TorchrunInferenceWorker", + "DistributedInferenceService", +] diff --git a/lightx2v/server/services/inference/service.py b/lightx2v/server/services/inference/service.py new file mode 100644 index 0000000..20cf0e7 --- /dev/null +++ b/lightx2v/server/services/inference/service.py @@ -0,0 +1,81 @@ +from typing import Optional + +from loguru import logger + +from .worker import TorchrunInferenceWorker + + +class DistributedInferenceService: + def __init__(self): + self.worker = None + self.is_running = False + self.args = None + + def start_distributed_inference(self, args) -> bool: + self.args = args + if self.is_running: + logger.warning("Distributed inference service is already running") + return True + + try: + self.worker = TorchrunInferenceWorker() + + if not self.worker.init(args): + raise RuntimeError("Worker initialization failed") + + self.is_running = True + logger.info(f"Rank {self.worker.rank} inference service started successfully") + return True + + except Exception as e: + logger.error(f"Error starting inference service: {str(e)}") + self.stop_distributed_inference() + return False + + def stop_distributed_inference(self): + if not self.is_running: + return + + try: + if self.worker: + self.worker.cleanup() + logger.info("Inference service stopped") + except Exception as e: + logger.error(f"Error stopping inference service: {str(e)}") + finally: + self.worker = None + self.is_running = False + + async def submit_task_async(self, task_data: dict) -> Optional[dict]: + if not self.is_running or not self.worker: + logger.error("Inference service is not started") + return None + + if self.worker.rank != 0: + return None + + try: + if self.worker.processing: + logger.info(f"Waiting for previous task to complete before processing task {task_data.get('task_id')}") + + self.worker.processing = True + result = await self.worker.process_request(task_data) + self.worker.processing = False + return result + except Exception as e: + self.worker.processing = False + logger.error(f"Failed to process task: {str(e)}") + return { + "task_id": task_data.get("task_id", "unknown"), + "status": "failed", + "error": str(e), + "message": f"Task processing failed: {str(e)}", + } + + def server_metadata(self): + assert hasattr(self, "args"), "Distributed inference service has not been started. Call start_distributed_inference() first." + return {"nproc_per_node": self.worker.world_size, "model_cls": self.args.model_cls, "model_path": self.args.model_path} + + async def run_worker_loop(self): + if self.worker and self.worker.rank != 0: + await self.worker.worker_loop() diff --git a/lightx2v/server/services/inference/worker.py b/lightx2v/server/services/inference/worker.py new file mode 100644 index 0000000..f659147 --- /dev/null +++ b/lightx2v/server/services/inference/worker.py @@ -0,0 +1,128 @@ +import asyncio +import os +from typing import Any, Dict + +import torch +from easydict import EasyDict +from loguru import logger + +from lightx2v.infer import init_runner +from lightx2v.utils.input_info import set_input_info +from lightx2v.utils.set_config import set_config, set_parallel_config + +from ..distributed_utils import DistributedManager + + +class TorchrunInferenceWorker: + def __init__(self): + self.rank = int(os.environ.get("LOCAL_RANK", 0)) + self.world_size = int(os.environ.get("WORLD_SIZE", 1)) + self.runner = None + self.dist_manager = DistributedManager() + self.processing = False + + def init(self, args) -> bool: + try: + if self.world_size > 1: + if not self.dist_manager.init_process_group(): + raise RuntimeError("Failed to initialize distributed process group") + else: + self.dist_manager.rank = 0 + self.dist_manager.world_size = 1 + self.dist_manager.device = "cuda:0" if torch.cuda.is_available() else "cpu" + self.dist_manager.is_initialized = False + + config = set_config(args) + + if config["parallel"]: + set_parallel_config(config) + + if self.rank == 0: + logger.info(f"Config:\n {config}") + + self.runner = init_runner(config) + logger.info(f"Rank {self.rank}/{self.world_size - 1} initialization completed") + + return True + + except Exception as e: + logger.exception(f"Rank {self.rank} initialization failed: {str(e)}") + return False + + async def process_request(self, task_data: Dict[str, Any]) -> Dict[str, Any]: + has_error = False + error_msg = "" + + try: + if self.world_size > 1 and self.rank == 0: + task_data = self.dist_manager.broadcast_task_data(task_data) + + task_data["task"] = self.runner.config["task"] + task_data["return_result_tensor"] = False + task_data["negative_prompt"] = task_data.get("negative_prompt", "") + + target_fps = task_data.pop("target_fps", None) + if target_fps is not None: + vfi_cfg = self.runner.config.get("video_frame_interpolation") + if vfi_cfg: + task_data["video_frame_interpolation"] = {**vfi_cfg, "target_fps": target_fps} + else: + logger.warning(f"Target FPS {target_fps} is set, but video frame interpolation is not configured") + + task_data = EasyDict(task_data) + input_info = set_input_info(task_data) + + self.runner.set_config(task_data) + self.runner.run_pipeline(input_info) + + await asyncio.sleep(0) + + except Exception as e: + has_error = True + error_msg = str(e) + logger.exception(f"Rank {self.rank} inference failed: {error_msg}") + + if self.world_size > 1: + self.dist_manager.barrier() + + if self.rank == 0: + if has_error: + return { + "task_id": task_data.get("task_id", "unknown"), + "status": "failed", + "error": error_msg, + "message": f"Inference failed: {error_msg}", + } + else: + return { + "task_id": task_data["task_id"], + "status": "success", + "save_result_path": task_data.get("video_path", task_data["save_result_path"]), + "message": "Inference completed", + } + else: + return None + + async def worker_loop(self): + while True: + task_data = None + try: + task_data = self.dist_manager.broadcast_task_data() + if task_data is None: + logger.info(f"Rank {self.rank} received stop signal") + break + + await self.process_request(task_data) + + except Exception as e: + logger.error(f"Rank {self.rank} worker loop error: {str(e)}") + if self.world_size > 1 and task_data is not None: + try: + self.dist_manager.barrier() + except Exception as barrier_error: + logger.error(f"Rank {self.rank} barrier failed after error: {barrier_error}") + break + continue + + def cleanup(self): + self.dist_manager.cleanup() diff --git a/lightx2v/server/task_manager.py b/lightx2v/server/task_manager.py new file mode 100644 index 0000000..5f9ddba --- /dev/null +++ b/lightx2v/server/task_manager.py @@ -0,0 +1,215 @@ +import threading +import uuid +from collections import OrderedDict +from dataclasses import dataclass, field +from datetime import datetime +from enum import Enum +from typing import Any, Dict, Optional + +from loguru import logger + + +class TaskStatus(Enum): + PENDING = "pending" + PROCESSING = "processing" + COMPLETED = "completed" + FAILED = "failed" + CANCELLED = "cancelled" + + +@dataclass +class TaskInfo: + task_id: str + status: TaskStatus + message: Any + start_time: datetime = field(default_factory=datetime.now) + end_time: Optional[datetime] = None + error: Optional[str] = None + save_result_path: Optional[str] = None + stop_event: threading.Event = field(default_factory=threading.Event) + thread: Optional[threading.Thread] = None + + +class TaskManager: + def __init__(self, max_queue_size: int = 100): + self.max_queue_size = max_queue_size + + self._tasks: OrderedDict[str, TaskInfo] = OrderedDict() + self._lock = threading.RLock() + + self._processing_lock = threading.Lock() + self._current_processing_task: Optional[str] = None + + self.total_tasks = 0 + self.completed_tasks = 0 + self.failed_tasks = 0 + + def create_task(self, message: Any) -> str: + with self._lock: + if hasattr(message, "task_id") and message.task_id in self._tasks: + raise RuntimeError(f"Task ID {message.task_id} already exists") + + active_tasks = sum(1 for t in self._tasks.values() if t.status in [TaskStatus.PENDING, TaskStatus.PROCESSING]) + if active_tasks >= self.max_queue_size: + raise RuntimeError(f"Task queue is full (max {self.max_queue_size} tasks)") + + task_id = getattr(message, "task_id", str(uuid.uuid4())) + task_info = TaskInfo(task_id=task_id, status=TaskStatus.PENDING, message=message, save_result_path=getattr(message, "save_result_path", None)) + + self._tasks[task_id] = task_info + self.total_tasks += 1 + + self._cleanup_old_tasks() + + return task_id + + def start_task(self, task_id: str) -> TaskInfo: + with self._lock: + if task_id not in self._tasks: + raise KeyError(f"Task {task_id} not found") + + task = self._tasks[task_id] + task.status = TaskStatus.PROCESSING + task.start_time = datetime.now() + + self._tasks.move_to_end(task_id) + + return task + + def complete_task(self, task_id: str, save_result_path: Optional[str] = None): + with self._lock: + if task_id not in self._tasks: + logger.warning(f"Task {task_id} not found for completion") + return + + task = self._tasks[task_id] + task.status = TaskStatus.COMPLETED + task.end_time = datetime.now() + if save_result_path: + task.save_result_path = save_result_path + + self.completed_tasks += 1 + + def fail_task(self, task_id: str, error: str): + with self._lock: + if task_id not in self._tasks: + logger.warning(f"Task {task_id} not found for failure") + return + + task = self._tasks[task_id] + task.status = TaskStatus.FAILED + task.end_time = datetime.now() + task.error = error + + self.failed_tasks += 1 + + def cancel_task(self, task_id: str) -> bool: + with self._lock: + if task_id not in self._tasks: + return False + + task = self._tasks[task_id] + + if task.status in [TaskStatus.COMPLETED, TaskStatus.FAILED]: + return False + + task.stop_event.set() + task.status = TaskStatus.CANCELLED + task.end_time = datetime.now() + task.error = "Task cancelled by user" + + if task.thread and task.thread.is_alive(): + task.thread.join(timeout=5) + + return True + + def cancel_all_tasks(self): + with self._lock: + for task_id, task in list(self._tasks.items()): + if task.status in [TaskStatus.PENDING, TaskStatus.PROCESSING]: + self.cancel_task(task_id) + + def get_task(self, task_id: str) -> Optional[TaskInfo]: + with self._lock: + return self._tasks.get(task_id) + + def get_task_status(self, task_id: str) -> Optional[Dict[str, Any]]: + task = self.get_task(task_id) + if not task: + return None + + return {"task_id": task.task_id, "status": task.status.value, "start_time": task.start_time, "end_time": task.end_time, "error": task.error, "save_result_path": task.save_result_path} + + def get_all_tasks(self): + with self._lock: + return {task_id: self.get_task_status(task_id) for task_id in self._tasks} + + def get_active_task_count(self) -> int: + with self._lock: + return sum(1 for t in self._tasks.values() if t.status in [TaskStatus.PENDING, TaskStatus.PROCESSING]) + + def get_pending_task_count(self) -> int: + with self._lock: + return sum(1 for t in self._tasks.values() if t.status == TaskStatus.PENDING) + + def is_processing(self) -> bool: + with self._lock: + return self._current_processing_task is not None + + def acquire_processing_lock(self, task_id: str, timeout: Optional[float] = None) -> bool: + acquired = self._processing_lock.acquire(timeout=timeout if timeout else False) + if acquired: + with self._lock: + self._current_processing_task = task_id + logger.info(f"Task {task_id} acquired processing lock") + return acquired + + def release_processing_lock(self, task_id: str): + with self._lock: + if self._current_processing_task == task_id: + self._current_processing_task = None + try: + self._processing_lock.release() + logger.info(f"Task {task_id} released processing lock") + except RuntimeError as e: + logger.warning(f"Task {task_id} tried to release lock but failed: {e}") + + def get_next_pending_task(self) -> Optional[str]: + with self._lock: + for task_id, task in self._tasks.items(): + if task.status == TaskStatus.PENDING: + return task_id + return None + + def get_service_status(self) -> Dict[str, Any]: + with self._lock: + active_tasks = [task_id for task_id, task in self._tasks.items() if task.status == TaskStatus.PROCESSING] + + pending_count = sum(1 for t in self._tasks.values() if t.status == TaskStatus.PENDING) + + return { + "service_status": "busy" if self._current_processing_task else "idle", + "current_task": self._current_processing_task, + "active_tasks": active_tasks, + "pending_tasks": pending_count, + "queue_size": self.max_queue_size, + "total_tasks": self.total_tasks, + "completed_tasks": self.completed_tasks, + "failed_tasks": self.failed_tasks, + } + + def _cleanup_old_tasks(self, keep_count: int = 1000): + if len(self._tasks) <= keep_count: + return + + completed_tasks = [(task_id, task) for task_id, task in self._tasks.items() if task.status in [TaskStatus.COMPLETED, TaskStatus.FAILED, TaskStatus.CANCELLED]] + + completed_tasks.sort(key=lambda x: x[1].end_time or x[1].start_time) + + remove_count = len(self._tasks) - keep_count + for task_id, _ in completed_tasks[:remove_count]: + del self._tasks[task_id] + logger.debug(f"Cleaned up old task: {task_id}") + + +task_manager = TaskManager() diff --git a/lightx2v/utils/__init__.py b/lightx2v/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v/utils/async_io.py b/lightx2v/utils/async_io.py new file mode 100644 index 0000000..9b41263 --- /dev/null +++ b/lightx2v/utils/async_io.py @@ -0,0 +1,83 @@ +import asyncio +import io +from pathlib import Path +from typing import Union + +import aiofiles +from PIL import Image +from loguru import logger + + +async def load_image_async(path: Union[str, Path]) -> Image.Image: + try: + async with aiofiles.open(path, "rb") as f: + data = await f.read() + + return await asyncio.to_thread(lambda: Image.open(io.BytesIO(data)).convert("RGB")) + except Exception as e: + logger.error(f"Failed to load image from {path}: {e}") + raise + + +async def save_video_async(video_path: Union[str, Path], video_data: bytes): + try: + video_path = Path(video_path) + video_path.parent.mkdir(parents=True, exist_ok=True) + + async with aiofiles.open(video_path, "wb") as f: + await f.write(video_data) + + logger.info(f"Video saved to {video_path}") + except Exception as e: + logger.error(f"Failed to save video to {video_path}: {e}") + raise + + +async def read_text_async(path: Union[str, Path], encoding: str = "utf-8") -> str: + try: + async with aiofiles.open(path, "r", encoding=encoding) as f: + return await f.read() + except Exception as e: + logger.error(f"Failed to read text from {path}: {e}") + raise + + +async def write_text_async(path: Union[str, Path], content: str, encoding: str = "utf-8"): + try: + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + + async with aiofiles.open(path, "w", encoding=encoding) as f: + await f.write(content) + + logger.info(f"Text written to {path}") + except Exception as e: + logger.error(f"Failed to write text to {path}: {e}") + raise + + +async def exists_async(path: Union[str, Path]) -> bool: + return await asyncio.to_thread(lambda: Path(path).exists()) + + +async def read_bytes_async(path: Union[str, Path]) -> bytes: + try: + async with aiofiles.open(path, "rb") as f: + return await f.read() + except Exception as e: + logger.error(f"Failed to read bytes from {path}: {e}") + raise + + +async def write_bytes_async(path: Union[str, Path], data: bytes): + try: + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + + async with aiofiles.open(path, "wb") as f: + await f.write(data) + + logger.debug(f"Bytes written to {path}") + except Exception as e: + logger.error(f"Failed to write bytes to {path}: {e}") + raise diff --git a/lightx2v/utils/custom_compiler.py b/lightx2v/utils/custom_compiler.py new file mode 100644 index 0000000..851192b --- /dev/null +++ b/lightx2v/utils/custom_compiler.py @@ -0,0 +1,187 @@ +import functools +from typing import Dict, List, Optional + +import torch +from loguru import logger + + +def compiled_method(compile_options: Optional[Dict] = None): + def decorator(func): + func_name = func.__name__ + compile_opts = compile_options or {} + + state = { + "original_func": func, + "compiled_graphs": {}, + "compile_mode": False, + "selected_graph": None, + "selected_compiled": None, + } + + @functools.wraps(func) + def wrapper(self, *args, graph_name: Optional[str] = None, **kwargs): + if state["compile_mode"]: + if graph_name is None: + graph_name = f"graph_{len(state['compiled_graphs']) + 1:02d}" + + if graph_name not in state["compiled_graphs"]: + logger.info(f"[Compile] Compiling {func_name} as '{graph_name}'...") + + compiled_func = torch.compile(state["original_func"], **compile_opts) + + try: + result = compiled_func(self, *args, **kwargs) + state["compiled_graphs"][graph_name] = compiled_func + logger.info(f"[Compile] Compiled {func_name} as '{graph_name}'") + return result + except Exception as e: + logger.info(f"[Compile] Failed to compile {func_name} as '{graph_name}': {e}") + return state["original_func"](self, *args, **kwargs) + else: + logger.info(f"[Compile] Using existing compiled graph '{graph_name}'") + return state["compiled_graphs"][graph_name](self, *args, **kwargs) + + elif state["selected_compiled"]: + return state["selected_compiled"](self, *args, **kwargs) + else: + return state["original_func"](self, *args, **kwargs) + + def _enable_compile_mode(): + logger.info(f"[Compile] Enabling compile mode for {func_name}") + state["compile_mode"] = True + + def _disable_compile_mode(): + logger.info(f"[Compile] Disabling compile mode for {func_name}") + state["compile_mode"] = False + + def _select_graph(graph_name: str): + if graph_name not in state["compiled_graphs"]: + logger.warning(f"[Compile] Graph '{graph_name}' not found. Available graphs: {list(state['compiled_graphs'].keys())}, returning to original function.") + state["selected_graph"] = None + state["selected_compiled"] = None + else: + logger.info(f"[Compile] Selecting graph '{graph_name}' for {func_name}") + state["selected_graph"] = graph_name + state["selected_compiled"] = state["compiled_graphs"][graph_name] + logger.info(f"[Compile] {func_name} will now use graph '{graph_name}' for inference") + + def _unselect_graph(): + logger.info(f"[Compile] Unselecting graph for {func_name}, returning to original function") + state["selected_graph"] = None + state["selected_compiled"] = None + + def _get_status(): + return { + "available_graphs": list(state["compiled_graphs"].keys()), + "compiled_count": len(state["compiled_graphs"]), + "selected_graph": state["selected_graph"], + "compile_mode": state["compile_mode"], + "mode": "compile" if state["compile_mode"] else ("inference" if state["selected_compiled"] else "original"), + } + + def _clear_graphs(): + state["compiled_graphs"].clear() + state["selected_graph"] = None + state["selected_compiled"] = None + state["compile_mode"] = False + logger.info(f"[Compile] Cleared all compiled graphs for {func_name}") + + def _remove_graph(graph_name: str): + if graph_name in state["compiled_graphs"]: + del state["compiled_graphs"][graph_name] + if state["selected_graph"] == graph_name: + state["selected_graph"] = None + state["selected_compiled"] = None + logger.info(f"[Compile] Removed graph '{graph_name}' for {func_name}") + else: + logger.info(f"[Compile] Graph '{graph_name}' not found") + + wrapper._enable_compile_mode = _enable_compile_mode + wrapper._disable_compile_mode = _disable_compile_mode + wrapper._select_graph = _select_graph + wrapper._unselect_graph = _unselect_graph + wrapper._get_status = _get_status + wrapper._clear_graphs = _clear_graphs + wrapper._remove_graph = _remove_graph + wrapper._func_name = func_name + + return wrapper + + return decorator + + +class CompiledMethodsMixin: + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._compiled_methods = {} + self._discover_compiled_methods() + + def _discover_compiled_methods(self): + logger.info(f"[Compile] Discovering compiled methods for {self.__class__.__name__}...") + + for attr_name in dir(self): + attr = getattr(self, attr_name) + if hasattr(attr, "_enable_compile_mode"): + logger.info(f"[Compile] Found compiled method: {attr_name}") + self._compiled_methods[attr_name] = attr + + def enable_compile_mode(self, method_name: str = None): + if method_name: + if method_name not in self._compiled_methods: + raise ValueError(f"Method '{method_name}' is not a compiled method") + self._compiled_methods[method_name]._enable_compile_mode() + else: + for name, method in self._compiled_methods.items(): + method._enable_compile_mode() + logger.info("[Compile] Enabled compile mode for all methods") + + def disable_compile_mode(self, method_name: str = None): + if method_name: + if method_name not in self._compiled_methods: + raise ValueError(f"Method '{method_name}' is not a compiled method") + self._compiled_methods[method_name]._disable_compile_mode() + else: + for name, method in self._compiled_methods.items(): + method._disable_compile_mode() + logger.info("[Compile] Disabled compile mode for all methods") + + def select_graph(self, method_name: str, graph_name: str): + if method_name not in self._compiled_methods: + raise ValueError(f"Method '{method_name}' is not a compiled method") + + method = self._compiled_methods[method_name] + method._select_graph(graph_name) + + def unselect_graph(self, method_name: str): + if method_name not in self._compiled_methods: + raise ValueError(f"Method '{method_name}' is not a compiled method") + + method = self._compiled_methods[method_name] + method._unselect_graph() + + def get_compile_status(self) -> Dict: + status = {} + for method_name, method in self._compiled_methods.items(): + status[method_name] = method._get_status() + return status + + def get_compiled_methods(self) -> List[str]: + return list(self._compiled_methods.keys()) + + def clear_compiled_graphs(self, method_name: str = None): + if method_name: + if method_name in self._compiled_methods: + self._compiled_methods[method_name]._clear_graphs() + else: + logger.info(f"Method '{method_name}' not found") + else: + for method_name, method in self._compiled_methods.items(): + method._clear_graphs() + logger.info("[Compile] Cleared all compiled graphs") + + def remove_graph(self, method_name: str, graph_name: str): + if method_name not in self._compiled_methods: + raise ValueError(f"Method '{method_name}' is not a compiled method") + + method = self._compiled_methods[method_name] + method._remove_graph(graph_name) diff --git a/lightx2v/utils/envs.py b/lightx2v/utils/envs.py new file mode 100644 index 0000000..585224f --- /dev/null +++ b/lightx2v/utils/envs.py @@ -0,0 +1,49 @@ +import os +from functools import lru_cache + +import torch + +DTYPE_MAP = { + "BF16": torch.bfloat16, + "FP16": torch.float16, + "FP32": torch.float32, + "bf16": torch.bfloat16, + "fp16": torch.float16, + "fp32": torch.float32, + "torch.bfloat16": torch.bfloat16, + "torch.float16": torch.float16, + "torch.float32": torch.float32, +} + + +@lru_cache(maxsize=None) +def CHECK_PROFILING_DEBUG_LEVEL(target_level): + current_level = int(os.getenv("PROFILING_DEBUG_LEVEL", "0")) + return current_level >= target_level + + +@lru_cache(maxsize=None) +def GET_RUNNING_FLAG(): + RUNNING_FLAG = os.getenv("RUNNING_FLAG", "infer") + return RUNNING_FLAG + + +@lru_cache(maxsize=None) +def GET_DTYPE(): + RUNNING_FLAG = os.getenv("DTYPE", "BF16") + assert RUNNING_FLAG in ["BF16", "FP16"] + return DTYPE_MAP[RUNNING_FLAG] + + +@lru_cache(maxsize=None) +def GET_SENSITIVE_DTYPE(): + RUNNING_FLAG = os.getenv("SENSITIVE_LAYER_DTYPE", "None") + if RUNNING_FLAG == "None": + return GET_DTYPE() + return DTYPE_MAP[RUNNING_FLAG] + + +@lru_cache(maxsize=None) +def GET_RECORDER_MODE(): + RECORDER_MODE = int(os.getenv("RECORDER_MODE", "0")) + return RECORDER_MODE diff --git a/lightx2v/utils/generate_task_id.py b/lightx2v/utils/generate_task_id.py new file mode 100644 index 0000000..8a9d808 --- /dev/null +++ b/lightx2v/utils/generate_task_id.py @@ -0,0 +1,49 @@ +import random +import string +import time +from datetime import datetime + + +def generate_task_id(): + """ + Generate a random task ID in the format XXXX-XXXX-XXXX-XXXX-XXXX. + Features: + 1. Does not modify the global random state. + 2. Each X is an uppercase letter or digit (0-9). + 3. Combines time factors to ensure high randomness. + """ + # Save the current random state (does not affect external randomness) + original_state = random.getstate() + + try: + # Define character set (uppercase letters + digits) + characters = string.ascii_uppercase + string.digits + + # Create an independent random instance + local_random = random.Random(time.perf_counter_ns()) + + # Generate 5 groups of 4-character random strings + groups = [] + for _ in range(5): + # Mix new time factor for each group + time_mix = int(datetime.now().timestamp()) + local_random.seed(time_mix + local_random.getstate()[1][0] + time.perf_counter_ns()) + + groups.append("".join(local_random.choices(characters, k=4))) + + return "-".join(groups) + + finally: + # Restore the original random state + random.setstate(original_state) + + +if __name__ == "__main__": + # Set global random seed + random.seed(42) + + # Test that external randomness is not affected + print("External random number 1:", random.random()) # Always the same + print("Task ID 1:", generate_task_id()) # Different each time + print("External random number 1:", random.random()) # Always the same + print("Task ID 1:", generate_task_id()) # Different each time diff --git a/lightx2v/utils/ggml_tensor.py b/lightx2v/utils/ggml_tensor.py new file mode 100644 index 0000000..d67ce68 --- /dev/null +++ b/lightx2v/utils/ggml_tensor.py @@ -0,0 +1,628 @@ +from __future__ import annotations + +import ctypes +import os +from pathlib import Path +from typing import Optional, Tuple, Union + +import gguf +import numpy as np +import torch +from loguru import logger + +c_float_p = ctypes.POINTER(ctypes.c_float) +TORCH_COMPATIBLE_QTYPES = (None, gguf.GGMLQuantizationType.F32, gguf.GGMLQuantizationType.F16, gguf.GGMLQuantizationType.BF16) + + +class GGMLTensor: + def __init__( + self, + data: Union[torch.Tensor, np.ndarray, None] = None, + orig_shape: Tuple[int, ...] = None, + dtype: torch.dtype = None, + gguf_type: gguf.GGMLQuantizationType = None, + requires_grad: bool = False, + aligned: bool = True, + pin_memory: bool = False, + preallocated: bool = False, + ): + super().__init__() + + assert orig_shape is not None + assert gguf_type is not None + + if isinstance(data, np.ndarray): + import warnings + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="The given NumPy array is not writable") + torch_data = torch.from_numpy(data) + else: + torch_data = data + + if dtype is not None and torch_data.dtype != dtype: + torch_data = torch_data.to(dtype) + + self.data = torch_data + + self.gguf_type = gguf_type + self._orig_shape = orig_shape + self._aligned = aligned + self._pinned_memory = pin_memory + self._requires_grad = requires_grad + self._preallocated = preallocated + + self._quantized = self._is_quantized_type(gguf_type) + self._q_type = self._get_quant_type_str(gguf_type) + + if aligned: + self._make_aligned() + if pin_memory: + self._pin_memory() + + def _is_quantized_type(self, gguf_type: gguf.GGMLQuantizationType) -> bool: + return gguf_type not in TORCH_COMPATIBLE_QTYPES + + def _get_quant_type_str(self, gguf_type: gguf.GGMLQuantizationType) -> str: + type_mapping = { + gguf.GGMLQuantizationType.F32: "ggml_f32", + gguf.GGMLQuantizationType.F16: "ggml_f16", + gguf.GGMLQuantizationType.Q4_0: "ggml_q4_0", + gguf.GGMLQuantizationType.Q4_1: "ggml_q4_1", + gguf.GGMLQuantizationType.Q5_0: "ggml_q5_0", + gguf.GGMLQuantizationType.Q5_1: "ggml_q5_1", + gguf.GGMLQuantizationType.Q8_0: "ggml_q8_0", + gguf.GGMLQuantizationType.Q8_1: "ggml_q8_1", + gguf.GGMLQuantizationType.Q2_K: "ggml_q2_k", + gguf.GGMLQuantizationType.Q3_K: "ggml_q3_k", + gguf.GGMLQuantizationType.Q4_K: "ggml_q4_k", + gguf.GGMLQuantizationType.Q5_K: "ggml_q5_k", + gguf.GGMLQuantizationType.Q6_K: "ggml_q6_k", + gguf.GGMLQuantizationType.Q8_K: "ggml_q8_k", + } + return type_mapping.get(gguf_type, "unknown") + + @classmethod + def empty_pinned( + cls, shape: Tuple[int, ...], orig_shape: Tuple[int, ...] = None, dtype: torch.dtype = torch.float32, gguf_type: gguf.GGMLQuantizationType = None, aligned: bool = True + ) -> "GGMLTensor": + torch_data = torch.empty(shape, pin_memory=True, dtype=dtype) + return cls(data=torch_data, dtype=dtype, orig_shape=orig_shape, gguf_type=gguf_type, pin_memory=True, aligned=aligned, preallocated=True) + + @classmethod + def empty_aligned( + cls, shape: Tuple[int, ...], orig_shape: Tuple[int, ...] = None, dtype: torch.dtype = torch.float32, gguf_type: gguf.GGMLQuantizationType = None, pin_memory: bool = False + ) -> "GGMLTensor": + return cls(dtype=dtype, orig_shape=orig_shape, gguf_type=gguf_type, pin_memory=pin_memory, aligned=True, preallocated=True) + + def copy_from(self, source: Union[torch.Tensor, "GGMLTensor"], transpose: bool = False, non_blocking: bool = False) -> "GGMLTensor": + if not self._preallocated: + raise RuntimeError("copy_from can only be used with preallocated tensors") + + if transpose: + source_data = source.data.t().contiguous() + else: + source_data = source.data.contiguous() + + if self.shape != source_data.shape: + raise ValueError(f"Shape mismatch: target {self.shape} vs source {source_data.shape}") + + self.data.copy_(source_data) + + return self + + def copy_(self, target: Union[torch.Tensor, "GGMLTensor"], transpose: bool = False, non_blocking: bool = False) -> "GGMLTensor": + source_data = self.data + if transpose: + source_data = self.t().contiguous() + + if isinstance(target, GGMLTensor): + target.copy_from(source_data, non_blocking=non_blocking) + else: + target.copy_(source_data) + + return self + + def t(self): + self.data = self.data.t() + return self + + def _make_aligned(self, alignment: int = 32): + if not self.data.is_contiguous(): + self.data = self.data.contiguous().data + + ptr = self.data.data_ptr() + if ptr % alignment == 0: + return + + if self._pinned_memory: + aligned_data = torch.empty(self.data.shape, dtype=self.data.dtype, device=self.data.device, pin_memory=True) + else: + aligned_data = torch.empty(self.data.shape, dtype=self.data.dtype, device=self.data.device) + + aligned_data.copy_(self.data) + self.data = aligned_data.data + + def _pin_memory(self) -> "GGMLTensor": + if self._pinned_memory or self.device.type != "cpu": + return self + + pinned_data = self.data.pin_memory() + self.data = pinned_data.data + self._pinned_memory = True + return self + + def to_torch(self) -> torch.Tensor: + return torch.as_tensor(self.data) + + @property + def shape(self): + return self.data.shape + + @property + def dtype(self): + return self.data.dtype + + @property + def device(self): + return self.data.device + + @property + def tensor_type(self) -> gguf.GGMLQuantizationType: + return self.gguf_type + + @property + def quant_type(self) -> str: + return self._q_type + + @property + def is_quantized(self) -> bool: + return self._quantized + + @property + def orig_shape(self) -> Tuple[int, ...]: + return self._orig_shape + + @property + def blocksize(self) -> Optional[int]: + _blocksize, _ = gguf.GGML_QUANT_SIZES[self.qtype] + return _blocksize + + @property + def is_pinned(self) -> bool: + return self._pinned_memory + + def memory_footprint(self) -> int: + if self._quantized: + return self.data.numel() * self.element_size() + else: + return self.data.numel() * self.element_size() + + def __repr__(self) -> str: + return f"GGMLTensor(shape={self.data.shape}, orig_shape={self.orig_shape}, dtype={self.data.dtype}, quantized={self.is_quantized}, quant_type='{self.quant_type}', pinned={self.is_pinned})" + + def cuda(self, device: Optional[Union[int, torch.device]] = None, non_blocking: bool = False) -> "GGMLTensor": + if device is None: + self.data = self.data.cuda(non_blocking=non_blocking) + else: + self.data = self.data.cuda(device=device, non_blocking=non_blocking) + return self + + def cpu(self, pin_memory: bool = False) -> "GGMLTensor": + self.data = self.data.cpu() + return self + + def to(self, *args, **kwargs) -> "GGMLTensor": + self.data = self.data.to(*args, **kwargs) + return self + + +def load_gguf_sd_ckpt(gguf_path, return_arch=False, to_device: Optional[Union[int, torch.device]] = None): + import warnings + + logger.info(f"Loading gguf-quant dit model from {gguf_path}") + + reader = gguf.GGUFReader(gguf_path) + state_dict = {} + for tensor in reader.tensors: + tensor_name = tensor.name + + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="The given NumPy array is not writable") + torch_tensor = torch.from_numpy(tensor.data) # mmap + + shape = get_orig_shape(reader, tensor_name) + if shape is None: + shape = torch.Size(tuple(int(v) for v in reversed(tensor.shape))) + + if tensor.tensor_type in TORCH_COMPATIBLE_QTYPES: + state_dict[tensor.name] = torch_tensor.to(to_device) + else: + state_dict[tensor.name] = GGMLTensor( + data=torch_tensor, + gguf_type=tensor.tensor_type, + orig_shape=shape, + aligned=True, + pin_memory=False, + ).to(to_device) + + if return_arch: + arch = get_model_architecture(reader) + return state_dict, arch + + return state_dict + + +def get_orig_shape(reader, tensor_name: str) -> Optional[Tuple[int, ...]]: + # TODO 这里正式上线的时候,需要更换 + field_key = f"comfy.gguf.orig_shape.{tensor_name}" + field = reader.get_field(field_key) + if field is None: + return None + # Has original shape metadata, so we try to decode it. + if len(field.types) != 2 or field.types[0] != gguf.GGUFValueType.ARRAY or field.types[1] != gguf.GGUFValueType.INT32: + raise TypeError(f"Bad original shape metadata for {field_key}: Expected ARRAY of INT32, got {field.types}") + return torch.Size(tuple(int(field.parts[part_idx][0]) for part_idx in field.data)) + + +def get_field(reader, field_name, field_type): + field = reader.get_field(field_name) + if field is None: + return None + elif isinstance(field_type, str): + # extra check here as this is used for checking arch string + if len(field.types) != 1 or field.types[0] != gguf.GGUFValueType.STRING: + raise TypeError(f"Bad type for GGUF {field_name} key: expected string, got {field.types!r}") + return str(field.parts[field.data[-1]], encoding="utf-8") + elif field_type in [int, float, bool]: + return field_type(field.parts[field.data[-1]]) + else: + raise TypeError(f"Unknown field type {field_type}") + + +def get_model_architecture(reader) -> str: + arch_str = get_field(reader, "general.architecture", str) + return arch_str + + +class ggml_init_params(ctypes.Structure): + _fields_ = [ + ("mem_size", ctypes.c_size_t), + ("mem_buffer", ctypes.c_void_p), + ("no_alloc", ctypes.c_bool), + ] + + +class GGMLQuants: + libggml: ctypes.CDLL + + def __init__(self, libggml: Path): + self.libggml = ctypes.CDLL(str(libggml)) + self.libggml.ggml_quantize_chunk.restype = ctypes.c_size_t + + self.libggml.ggml_quantize_chunk.argtypes = ( + ctypes.c_int, + ctypes.POINTER(ctypes.c_float), + ctypes.c_void_p, + ctypes.c_int64, + ctypes.c_int64, + ctypes.c_int64, + ctypes.POINTER(ctypes.c_float), + ) + + self.libggml.ggml_quantize_requires_imatrix.restype = ctypes.c_bool + self.libggml.ggml_quantize_requires_imatrix.argtypes = (ctypes.c_int,) + + for t in ( + "q4_0", + "q4_1", + "q5_0", + "q5_1", + "q8_0", + "q2_K", + "q3_K", + "q4_K", + "q5_K", + "q6_K", + ): + dequant_func: ctypes._NamedFuncPointer = getattr(self.libggml, "dequantize_row_" + t) + dequant_func.restype = None + dequant_func.argtypes = (ctypes.c_void_p, ctypes.POINTER(ctypes.c_float), ctypes.c_int64) + + self.libggml.ggml_fp16_to_fp32_row.restype = None + self.libggml.ggml_fp16_to_fp32_row.argtypes = (ctypes.POINTER(ctypes.c_uint16), ctypes.POINTER(ctypes.c_float), ctypes.c_int64) + self.libggml.ggml_bf16_to_fp32_row.restype = None + self.libggml.ggml_bf16_to_fp32_row.argtypes = (ctypes.POINTER(ctypes.c_uint16), ctypes.POINTER(ctypes.c_float), ctypes.c_int64) + + self.libggml.ggml_init.argtypes = (ggml_init_params,) + + self.libggml.ggml_init(ggml_init_params(1 * 1024 * 1024, 0, False)) + + def dequantize(self, tensor: np.ndarray, qtype: gguf.GGMLQuantizationType) -> np.ndarray: + result = np.zeros(gguf.quant_shape_from_byte_shape(tensor.shape, qtype), dtype=np.float32, order="C") + if qtype == gguf.GGMLQuantizationType.F32: + # no-op + result = tensor.view(np.float32) + elif qtype == gguf.GGMLQuantizationType.F16: + self.libggml.ggml_fp16_to_fp32_row(tensor.ctypes.data_as(ctypes.POINTER(ctypes.c_uint16)), result.ctypes.data_as(c_float_p), result.size) + elif qtype == gguf.GGMLQuantizationType.BF16: + self.libggml.ggml_bf16_to_fp32_row(tensor.ctypes.data_as(ctypes.POINTER(ctypes.c_uint16)), result.ctypes.data_as(c_float_p), result.size) + else: + lw_qname = qtype.name.lower() + if lw_qname[-1] == "k": + lw_qname = lw_qname[:-1] + "K" + dequant_func: ctypes._NamedFuncPointer = getattr(self.libggml, "dequantize_row_" + lw_qname) + dequant_func(tensor.ctypes.data_as(ctypes.c_void_p), result.ctypes.data_as(c_float_p), result.size) + return result + + +def to_uint32(x): + x = x.view(torch.uint8).to(torch.int32) + return (x[:, 0] | x[:, 1] << 8 | x[:, 2] << 16 | x[:, 3] << 24).unsqueeze(1) + + +def split_block_dims(blocks, *args): + n_max = blocks.shape[1] + dims = list(args) + [n_max - sum(args)] + return torch.split(blocks, dims, dim=1) + + +def dequantize_blocks_BF16(blocks, block_size, type_size, dtype=None): + return (blocks.view(torch.int16).to(torch.int32) << 16).view(torch.float32) + + +def dequantize_blocks_Q8_0(blocks, block_size, type_size, dtype=None): + d, x = split_block_dims(blocks, 2) + d = d.view(torch.float16).to(dtype) + x = x.view(torch.int8) + return d * x + + +def dequantize_blocks_Q5_1(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, m, qh, qs = split_block_dims(blocks, 2, 2, 4) + d = d.view(torch.float16).to(dtype) + m = m.view(torch.float16).to(dtype) + qh = to_uint32(qh) + + qh = qh.reshape((n_blocks, 1)) >> torch.arange(32, device=d.device, dtype=torch.int32).reshape(1, 32) + ql = qs.reshape((n_blocks, -1, 1, block_size // 2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape(1, 1, 2, 1) + qh = (qh & 1).to(torch.uint8) + ql = (ql & 0x0F).reshape((n_blocks, -1)) + + qs = ql | (qh << 4) + return (d * qs) + m + + +def dequantize_blocks_Q5_0(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, qh, qs = split_block_dims(blocks, 2, 4) + d = d.view(torch.float16).to(dtype) + qh = to_uint32(qh) + + qh = qh.reshape(n_blocks, 1) >> torch.arange(32, device=d.device, dtype=torch.int32).reshape(1, 32) + ql = qs.reshape(n_blocks, -1, 1, block_size // 2) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape(1, 1, 2, 1) + + qh = (qh & 1).to(torch.uint8) + ql = (ql & 0x0F).reshape(n_blocks, -1) + + qs = (ql | (qh << 4)).to(torch.int8) - 16 + return d * qs + + +def dequantize_blocks_Q4_1(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, m, qs = split_block_dims(blocks, 2, 2) + d = d.view(torch.float16).to(dtype) + m = m.view(torch.float16).to(dtype) + + qs = qs.reshape((n_blocks, -1, 1, block_size // 2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape(1, 1, 2, 1) + qs = (qs & 0x0F).reshape(n_blocks, -1) + + return (d * qs) + m + + +def dequantize_blocks_Q4_0(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, qs = split_block_dims(blocks, 2) + d = d.view(torch.float16).to(dtype) + + qs = qs.reshape((n_blocks, -1, 1, block_size // 2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qs = (qs & 0x0F).reshape((n_blocks, -1)).to(torch.int8) - 8 + return d * qs + + +# K Quants # +QK_K = 256 +K_SCALE_SIZE = 12 + + +def get_scale_min(scales): + n_blocks = scales.shape[0] + scales = scales.view(torch.uint8) + scales = scales.reshape((n_blocks, 3, 4)) + + d, m, m_d = torch.split(scales, scales.shape[-2] // 3, dim=-2) + + sc = torch.cat([d & 0x3F, (m_d & 0x0F) | ((d >> 2) & 0x30)], dim=-1) + min = torch.cat([m & 0x3F, (m_d >> 4) | ((m >> 2) & 0x30)], dim=-1) + + return (sc.reshape((n_blocks, 8)), min.reshape((n_blocks, 8))) + + +def dequantize_blocks_Q6_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + ( + ql, + qh, + scales, + d, + ) = split_block_dims(blocks, QK_K // 2, QK_K // 4, QK_K // 16) + + scales = scales.view(torch.int8).to(dtype) + d = d.view(torch.float16).to(dtype) + d = (d * scales).reshape((n_blocks, QK_K // 16, 1)) + + ql = ql.reshape((n_blocks, -1, 1, 64)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + ql = (ql & 0x0F).reshape((n_blocks, -1, 32)) + qh = qh.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 1, 4, 1)) + qh = (qh & 0x03).reshape((n_blocks, -1, 32)) + q = (ql | (qh << 4)).to(torch.int8) - 32 + q = q.reshape((n_blocks, QK_K // 16, -1)) + + return (d * q).reshape((n_blocks, QK_K)) + + +def dequantize_blocks_Q5_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, dmin, scales, qh, qs = split_block_dims(blocks, 2, 2, K_SCALE_SIZE, QK_K // 8) + + d = d.view(torch.float16).to(dtype) + dmin = dmin.view(torch.float16).to(dtype) + + sc, m = get_scale_min(scales) + + d = (d * sc).reshape((n_blocks, -1, 1)) + dm = (dmin * m).reshape((n_blocks, -1, 1)) + + ql = qs.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qh = qh.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([i for i in range(8)], device=d.device, dtype=torch.uint8).reshape((1, 1, 8, 1)) + ql = (ql & 0x0F).reshape((n_blocks, -1, 32)) + qh = (qh & 0x01).reshape((n_blocks, -1, 32)) + q = ql | (qh << 4) + + return (d * q - dm).reshape((n_blocks, QK_K)) + + +def dequantize_blocks_Q4_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, dmin, scales, qs = split_block_dims(blocks, 2, 2, K_SCALE_SIZE) + d = d.view(torch.float16).to(dtype) + dmin = dmin.view(torch.float16).to(dtype) + + sc, m = get_scale_min(scales) + + d = (d * sc).reshape((n_blocks, -1, 1)) + dm = (dmin * m).reshape((n_blocks, -1, 1)) + + qs = qs.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qs = (qs & 0x0F).reshape((n_blocks, -1, 32)) + + return (d * qs - dm).reshape((n_blocks, QK_K)) + + +def dequantize_blocks_Q3_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + hmask, qs, scales, d = split_block_dims(blocks, QK_K // 8, QK_K // 4, 12) + d = d.view(torch.float16).to(dtype) + + lscales, hscales = scales[:, :8], scales[:, 8:] + lscales = lscales.reshape((n_blocks, 1, 8)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 2, 1)) + lscales = lscales.reshape((n_blocks, 16)) + hscales = hscales.reshape((n_blocks, 1, 4)) >> torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 4, 1)) + hscales = hscales.reshape((n_blocks, 16)) + scales = (lscales & 0x0F) | ((hscales & 0x03) << 4) + scales = scales.to(torch.int8) - 32 + + dl = (d * scales).reshape((n_blocks, 16, 1)) + + ql = qs.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 1, 4, 1)) + qh = hmask.reshape(n_blocks, -1, 1, 32) >> torch.tensor([i for i in range(8)], device=d.device, dtype=torch.uint8).reshape((1, 1, 8, 1)) + ql = ql.reshape((n_blocks, 16, QK_K // 16)) & 3 + qh = (qh.reshape((n_blocks, 16, QK_K // 16)) & 1) ^ 1 + q = ql.to(torch.int8) - (qh << 2).to(torch.int8) + + return (dl * q).reshape((n_blocks, QK_K)) + + +def dequantize_blocks_Q2_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + scales, qs, d, dmin = split_block_dims(blocks, QK_K // 16, QK_K // 4, 2) + d = d.view(torch.float16).to(dtype) + dmin = dmin.view(torch.float16).to(dtype) + + # (n_blocks, 16, 1) + dl = (d * (scales & 0xF)).reshape((n_blocks, QK_K // 16, 1)) + ml = (dmin * (scales >> 4)).reshape((n_blocks, QK_K // 16, 1)) + + shift = torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 1, 4, 1)) + + qs = (qs.reshape((n_blocks, -1, 1, 32)) >> shift) & 3 + qs = qs.reshape((n_blocks, QK_K // 16, 16)) + qs = dl * qs - ml + + return qs.reshape((n_blocks, -1)) + + +dequantize_functions = { + gguf.GGMLQuantizationType.BF16: dequantize_blocks_BF16, + gguf.GGMLQuantizationType.Q8_0: dequantize_blocks_Q8_0, + gguf.GGMLQuantizationType.Q5_1: dequantize_blocks_Q5_1, + gguf.GGMLQuantizationType.Q5_0: dequantize_blocks_Q5_0, + gguf.GGMLQuantizationType.Q4_1: dequantize_blocks_Q4_1, + gguf.GGMLQuantizationType.Q4_0: dequantize_blocks_Q4_0, + gguf.GGMLQuantizationType.Q6_K: dequantize_blocks_Q6_K, + gguf.GGMLQuantizationType.Q5_K: dequantize_blocks_Q5_K, + gguf.GGMLQuantizationType.Q4_K: dequantize_blocks_Q4_K, + gguf.GGMLQuantizationType.Q3_K: dequantize_blocks_Q3_K, + gguf.GGMLQuantizationType.Q2_K: dequantize_blocks_Q2_K, +} + + +try: + import platform + + import llama_cpp + + lib_name = "libggml.so" + if platform.system() == "Darwin": + lib_name = "libggml.dylib" + elif platform.system() == "Windows": + lib_name = "ggml.dll" # Or libggml.dll + + llama_lib_path = os.path.join(os.path.dirname(os.path.abspath(llama_cpp.__file__)), "lib", lib_name) + ggml_quants = GGMLQuants(llama_lib_path) + + def dequantize_c(tensor): + return torch.from_numpy(ggml_quants.dequantize(s.data.numpy(), s.gguf_type)) +except ImportError: + dequantize_c = None + + +def dequantize_tensor(tensor, dtype=None): + qtype = getattr(tensor, "gguf_type", None) + oshape = getattr(tensor, "orig_shape", tensor.data.shape) + + if qtype in TORCH_COMPATIBLE_QTYPES: + return tensor.to(dtype) + else: + if dequantize_c is not None: + return dequantize_c(tensor).to(dtype) + elif qtype in dequantize_functions: + return dequantize(tensor.to_torch().data, qtype, oshape, dtype=dtype).to(dtype) + else: + # this is incredibly slow + logger.warning(f"Falling back to numpy dequant for qtype: {qtype}") + new = gguf.quants.dequantize(tensor.cpu().numpy(), qtype) + return torch.from_numpy(new).to(tensor.device, dtype=dtype) + + +def dequantize(data, qtype, oshape, dtype=None): + block_size, type_size = gguf.GGML_QUANT_SIZES[qtype] + dequantize_blocks = dequantize_functions[qtype] + + rows = data.reshape((-1, data.shape[-1])).view(torch.uint8) + + n_blocks = rows.numel() // type_size + blocks = rows.reshape((n_blocks, type_size)) + blocks = dequantize_blocks(blocks, block_size, type_size, dtype) + return blocks.reshape(oshape) diff --git a/lightx2v/utils/global_paras.py b/lightx2v/utils/global_paras.py new file mode 100644 index 0000000..cef34ea --- /dev/null +++ b/lightx2v/utils/global_paras.py @@ -0,0 +1 @@ +CALIB = {"absmax": {}} diff --git a/lightx2v/utils/input_info.py b/lightx2v/utils/input_info.py new file mode 100644 index 0000000..d3fe63a --- /dev/null +++ b/lightx2v/utils/input_info.py @@ -0,0 +1,230 @@ +import inspect +from dataclasses import dataclass, field + + +@dataclass +class T2VInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + prompt_enhanced: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + return_result_tensor: bool = field(default_factory=lambda: False) + # shape related + latent_shape: list = field(default_factory=list) + target_shape: int = field(default_factory=int) + + +@dataclass +class I2VInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + prompt_enhanced: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + image_path: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + return_result_tensor: bool = field(default_factory=lambda: False) + # shape related + original_shape: list = field(default_factory=list) + resized_shape: list = field(default_factory=list) + latent_shape: list = field(default_factory=list) + target_shape: int = field(default_factory=int) + + +@dataclass +class Flf2vInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + prompt_enhanced: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + image_path: str = field(default_factory=str) + last_frame_path: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + return_result_tensor: bool = field(default_factory=lambda: False) + # shape related + original_shape: list = field(default_factory=list) + resized_shape: list = field(default_factory=list) + latent_shape: list = field(default_factory=list) + target_shape: int = field(default_factory=int) + + +# Need Check +@dataclass +class VaceInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + prompt_enhanced: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + src_ref_images: str = field(default_factory=str) + src_video: str = field(default_factory=str) + src_mask: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + return_result_tensor: bool = field(default_factory=lambda: False) + # shape related + original_shape: list = field(default_factory=list) + resized_shape: list = field(default_factory=list) + latent_shape: list = field(default_factory=list) + target_shape: int = field(default_factory=int) + + +@dataclass +class S2VInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + prompt_enhanced: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + image_path: str = field(default_factory=str) + audio_path: str = field(default_factory=str) + audio_num: int = field(default_factory=int) + with_mask: bool = field(default_factory=lambda: False) + save_result_path: str = field(default_factory=str) + return_result_tensor: bool = field(default_factory=lambda: False) + # shape related + original_shape: list = field(default_factory=list) + resized_shape: list = field(default_factory=list) + latent_shape: list = field(default_factory=list) + target_shape: int = field(default_factory=int) + + +# Need Check +@dataclass +class AnimateInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + prompt_enhanced: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + image_path: str = field(default_factory=str) + src_pose_path: str = field(default_factory=str) + src_face_path: str = field(default_factory=str) + src_ref_images: str = field(default_factory=str) + src_bg_path: str = field(default_factory=str) + src_mask_path: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + return_result_tensor: bool = field(default_factory=lambda: False) + # shape related + original_shape: list = field(default_factory=list) + resized_shape: list = field(default_factory=list) + latent_shape: list = field(default_factory=list) + target_shape: int = field(default_factory=int) + + +@dataclass +class T2IInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + # shape related + target_shape: int = field(default_factory=int) + + +@dataclass +class I2IInputInfo: + seed: int = field(default_factory=int) + prompt: str = field(default_factory=str) + negative_prompt: str = field(default_factory=str) + image_path: str = field(default_factory=str) + save_result_path: str = field(default_factory=str) + # shape related + target_shape: int = field(default_factory=int) + processed_image_size: int = field(default_factory=list) + original_size: list = field(default_factory=list) + + +def set_input_info(args): + if args.task == "t2v": + input_info = T2VInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + save_result_path=args.save_result_path, + return_result_tensor=args.return_result_tensor, + ) + elif args.task == "i2v": + input_info = I2VInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + image_path=args.image_path, + save_result_path=args.save_result_path, + return_result_tensor=args.return_result_tensor, + ) + elif args.task == "flf2v": + input_info = Flf2vInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + image_path=args.image_path, + last_frame_path=args.last_frame_path, + save_result_path=args.save_result_path, + return_result_tensor=args.return_result_tensor, + ) + elif args.task == "vace": + input_info = VaceInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + src_ref_images=args.src_ref_images, + src_video=args.src_video, + src_mask=args.src_mask, + save_result_path=args.save_result_path, + return_result_tensor=args.return_result_tensor, + ) + elif args.task == "s2v": + input_info = S2VInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + image_path=args.image_path, + audio_path=args.audio_path, + save_result_path=args.save_result_path, + return_result_tensor=args.return_result_tensor, + ) + elif args.task == "animate": + input_info = AnimateInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + image_path=args.image_path, + src_pose_path=args.src_pose_path, + src_face_path=args.src_face_path, + src_ref_images=args.src_ref_images, + src_bg_path=args.src_bg_path, + src_mask_path=args.src_mask_path, + save_result_path=args.save_result_path, + return_result_tensor=args.return_result_tensor, + ) + elif args.task == "t2i": + input_info = T2IInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + save_result_path=args.save_result_path, + ) + elif args.task == "i2i": + input_info = I2IInputInfo( + seed=args.seed, + prompt=args.prompt, + negative_prompt=args.negative_prompt, + image_path=args.image_path, + save_result_path=args.save_result_path, + ) + else: + raise ValueError(f"Unsupported task: {args.task}") + return input_info + + +def get_all_input_info_keys(): + all_keys = set() + + current_module = inspect.currentframe().f_globals + + for name, obj in current_module.items(): + if inspect.isclass(obj) and name.endswith("InputInfo") and hasattr(obj, "__dataclass_fields__"): + all_keys.update(obj.__dataclass_fields__.keys()) + + return all_keys + + +# 创建包含所有InputInfo字段的集合 +ALL_INPUT_INFO_KEYS = get_all_input_info_keys() diff --git a/lightx2v/utils/lockable_dict.py b/lightx2v/utils/lockable_dict.py new file mode 100644 index 0000000..6f00cc6 --- /dev/null +++ b/lightx2v/utils/lockable_dict.py @@ -0,0 +1,177 @@ +from contextlib import contextmanager +from typing import Any, Iterable, Mapping + + +class LockableDict(dict): + """ + A lockable/unlockable dictionary. After locking, any in-place modifications will raise TypeError. + By default auto_wrap=True, which recursively converts nested dict objects in dict/list/tuple/set + to LockableDict, so that recursive locking works consistently both internally and externally. + """ + + def __init__(self, *args, auto_wrap: bool = True, **kwargs): + self._locked: bool = False + self._auto_wrap: bool = auto_wrap + # Build with temporary dict, then wrap uniformly before writing to self, avoiding bypass of __setitem__ + tmp = dict(*args, **kwargs) + for k, v in tmp.items(): + dict.__setitem__(self, k, self._wrap(v)) + + # ========== Public API ========== + @property + def locked(self) -> bool: + return self._locked + + def lock(self, recursive: bool = True) -> None: + """Lock the dictionary. When recursive=True, also recursively locks nested LockableDict objects.""" + self._locked = True + if recursive: + for v in self.values(): + if isinstance(v, LockableDict): + v.lock(True) + + def unlock(self, recursive: bool = True) -> None: + """Unlock the dictionary. When recursive=True, also recursively unlocks nested LockableDict objects.""" + self._locked = False + if recursive: + for v in self.values(): + if isinstance(v, LockableDict): + v.unlock(True) + + @contextmanager + def temporarily_unlocked(self, recursive: bool = True): + """ + Temporarily unlock in context manager form, restoring original state on exit. + Typical usage: + with d.temporarily_unlocked(): + d["x"] = 1 + """ + prev = self._locked + if prev and recursive: + # First temporarily unlock all child nodes as well + stack: list[LockableDict] = [] + + def _collect(node: "LockableDict"): + for v in node.values(): + if isinstance(v, LockableDict): + stack.append(v) + _collect(v) + + _collect(self) + self._locked = False + for n in stack: + n._locked = False + try: + yield self + finally: + self._locked = prev + for n in stack: + n._locked = prev + else: + self._locked = False + try: + yield self + finally: + self._locked = prev + + def copy(self) -> "LockableDict": + new = LockableDict(auto_wrap=self._auto_wrap) + for k, v in self.items(): + dict.__setitem__(new, k, v) + new._locked = self._locked + return new + + # ========== In-place modification interception ========== + def __setitem__(self, key, value) -> None: + self._ensure_unlocked() + dict.__setitem__(self, key, self._wrap(value)) + + def __delitem__(self, key) -> None: + self._ensure_unlocked() + dict.__delitem__(self, key) + + def clear(self) -> None: + self._ensure_unlocked() + dict.clear(self) + + def pop(self, k, d: Any = ...): + self._ensure_unlocked() + if d is ...: + return dict.pop(self, k) + return dict.pop(self, k, d) + + def popitem(self): + self._ensure_unlocked() + return dict.popitem(self) + + def setdefault(self, key, default=None): + # If key doesn't exist, setdefault will write, need to check lock + if key not in self: + self._ensure_unlocked() + default = self._wrap(default) + return dict.setdefault(self, key, default) + + def update(self, other: Mapping | Iterable, **kwargs) -> None: + self._ensure_unlocked() + if isinstance(other, Mapping): + items = list(other.items()) + else: + items = list(other) + for k, v in items: + dict.__setitem__(self, k, self._wrap(v)) + for k, v in kwargs.items(): + dict.__setitem__(self, k, self._wrap(v)) + + # Python 3.9 in-place union: d |= x + def __ior__(self, other): + self.update(other) + return self + + # ========== Attribute-style access (EasyDict-like behavior) ========== + def __getattr__(self, key: str): + """Allow attribute-style access: d.key instead of d['key']""" + try: + return self[key] + except KeyError: + raise AttributeError(f"'LockableDict' object has no attribute '{key}'") + + # ========== Internal utilities ========== + def _ensure_unlocked(self) -> None: + if self._locked: + raise TypeError("Dictionary is locked, current operation not allowed.") + + def _wrap(self, value): + if not self._auto_wrap: + return value + if isinstance(value, LockableDict): + return value + if isinstance(value, dict): + return LockableDict(value, auto_wrap=True) + if isinstance(value, list): + return [self._wrap(v) for v in value] + if isinstance(value, tuple): + return tuple(self._wrap(v) for v in value) + if isinstance(value, set): + return {self._wrap(v) for v in value} + return value + + +if __name__ == "__main__": + d = LockableDict({"a": 1, "b": 2}) + d["b"] = 3 + print(d) + d.lock() + print(d) + + # d["a"] = 3 + # print(d) + + # d.unlock() + # print(d) + # d["a"] = 3 + # print(d) + + with d.temporarily_unlocked(): + d["a"] = 3 + print(d) + d["a"] = 4 diff --git a/lightx2v/utils/memory_profiler.py b/lightx2v/utils/memory_profiler.py new file mode 100644 index 0000000..39d63b2 --- /dev/null +++ b/lightx2v/utils/memory_profiler.py @@ -0,0 +1,29 @@ +import torch +from loguru import logger + + +def peak_memory_decorator(func): + def wrapper(*args, **kwargs): + # 检查是否在分布式环境中 + rank_info = "" + if torch.distributed.is_available() and torch.distributed.is_initialized(): + rank = torch.distributed.get_rank() + rank_info = f"Rank {rank} - " + + # 如果使用GPU,重置显存统计 + if torch.cuda.is_available(): + torch.cuda.reset_peak_memory_stats() + + # 执行目标函数 + result = func(*args, **kwargs) + + # 获取峰值显存 + if torch.cuda.is_available(): + peak_memory = torch.cuda.max_memory_allocated() / (1024**3) # 转换为GB + logger.info(f"{rank_info}Function '{func.__qualname__}' Peak Memory: {peak_memory:.2f} GB") + else: + logger.info(f"{rank_info}Function '{func.__qualname__}' executed without GPU.") + + return result + + return wrapper diff --git a/lightx2v/utils/print_atten_score.py b/lightx2v/utils/print_atten_score.py new file mode 100644 index 0000000..33f278f --- /dev/null +++ b/lightx2v/utils/print_atten_score.py @@ -0,0 +1,76 @@ +import math + +import matplotlib.pyplot as plt +import torch +import torch.nn.functional as F + + +def scaled_dot_product_attention(Q, K, V, mask=None): + """ + Scaled dot-product attention + + Args: + Q: Query tensor [batch_size, num_heads, seq_len, d_k] + K: Key tensor [batch_size, num_heads, seq_len, d_k] + V: Value tensor [batch_size, num_heads, seq_len, d_k] + mask: Attention mask (0 indicates positions to mask, 1 indicates positions to keep) + + Returns: + output: Attention output + attention_weights: Attention weights + """ + d_k = Q.size(-1) + + scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k) + + if mask is not None: + mask_value = torch.where(mask == 0, torch.tensor(-float("inf")), torch.tensor(0.0)) + scores = scores + mask_value + + attention_weights = F.softmax(scores, dim=-1) + + output = torch.matmul(attention_weights, V) + return output, scores, attention_weights + + +def draw_matrix(weights, save_path): + plt.imshow(weights, aspect="auto", cmap="viridis") + plt.colorbar() + plt.savefig(save_path) + plt.close() + + +def get_qkv_subset(x, head_index, token_start, token_end): + """ + x : [seq_len, num_heads, head_dim] + + return: [batch_size, num_heads, seq_len, head_dim] + batch_size = 1, num_heads = 1, seq_len = token_end - token_start + """ + x = x[token_start:token_end, head_index, :] # [seq_len, head_dim] + x = x.unsqueeze(0).unsqueeze(0) # [1, 1, seq_len, head_dim] + return x + + +def draw_attention_weights(q, k, v, head_index, token_start, token_end, save_path): + """ + q k v : [seq_len, num_heads, head_dim] + """ + q_vis = get_qkv_subset(q, head_index=head_index, token_start=token_start, token_end=token_end) + k_vis = get_qkv_subset(k, head_index=head_index, token_start=token_start, token_end=token_end) + v_vis = get_qkv_subset(v, head_index=head_index, token_start=token_start, token_end=token_end) + output, scores, attention_weights = scaled_dot_product_attention(q_vis, k_vis, v_vis, mask=None) + draw_matrix(scores[0][0].float().cpu().numpy(), save_path) + print(f"Saved to {save_path}") + + +if __name__ == "__main__": + seq_len = 10 + num_heads = 4 + head_dim = 8 + + q = torch.randn(seq_len, num_heads, head_dim) + k = torch.randn(seq_len, num_heads, head_dim) + v = torch.randn(seq_len, num_heads, head_dim) + + draw_attention_weights(q, k, v, head_index=0, token_start=0, token_end=10, save_path="scores.png") diff --git a/lightx2v/utils/profiler.py b/lightx2v/utils/profiler.py new file mode 100644 index 0000000..8c0126b --- /dev/null +++ b/lightx2v/utils/profiler.py @@ -0,0 +1,200 @@ +import asyncio +import threading +import time +from functools import wraps + +import torch +import torch.distributed as dist +from loguru import logger + +from lightx2v.utils.envs import * +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) +_excluded_time_local = threading.local() + + +def _get_excluded_time_stack(): + if not hasattr(_excluded_time_local, "stack"): + _excluded_time_local.stack = [] + return _excluded_time_local.stack + + +class _ProfilingContext: + def __init__(self, name, recorder_mode=0, metrics_func=None, metrics_labels=None): + """ + recorder_mode = 0: disable recorder + recorder_mode = 1: enable recorder + recorder_mode = 2: enable recorder and force disable logger + """ + self.name = name + if dist.is_initialized(): + self.rank_info = f"Rank {dist.get_rank()}" + else: + self.rank_info = "Single GPU" + self.enable_recorder = recorder_mode > 0 + self.enable_logger = recorder_mode <= 1 + self.metrics_func = metrics_func + self.metrics_labels = metrics_labels + + def __enter__(self): + torch_device_module.synchronize() + self.start_time = time.perf_counter() + _get_excluded_time_stack().append(0.0) + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + torch_device_module.synchronize() + total_elapsed = time.perf_counter() - self.start_time + excluded = _get_excluded_time_stack().pop() + elapsed = total_elapsed - excluded + if self.enable_recorder and self.metrics_func: + if self.metrics_labels: + self.metrics_func.labels(*self.metrics_labels).observe(elapsed) + else: + self.metrics_func.observe(elapsed) + if self.enable_logger: + logger.info(f"[Profile] {self.rank_info} - {self.name} cost {elapsed:.6f} seconds") + return False + + async def __aenter__(self): + torch_device_module.synchronize() + self.start_time = time.perf_counter() + _get_excluded_time_stack().append(0.0) + return self + + async def __aexit__(self, exc_type, exc_val, exc_tb): + torch_device_module.synchronize() + total_elapsed = time.perf_counter() - self.start_time + excluded = _get_excluded_time_stack().pop() + elapsed = total_elapsed - excluded + if self.enable_recorder and self.metrics_func: + if self.metrics_labels: + self.metrics_func.labels(*self.metrics_labels).observe(elapsed) + else: + self.metrics_func.observe(elapsed) + if self.enable_logger: + logger.info(f"[Profile] {self.rank_info} - {self.name} cost {elapsed:.6f} seconds") + return False + + def __call__(self, func): + if asyncio.iscoroutinefunction(func): + + @wraps(func) + async def async_wrapper(*args, **kwargs): + async with self: + return await func(*args, **kwargs) + + return async_wrapper + else: + + @wraps(func) + def sync_wrapper(*args, **kwargs): + with self: + return func(*args, **kwargs) + + return sync_wrapper + + +class _NullContext: + # Context manager without decision branch logic overhead + def __init__(self, *args, **kwargs): + pass + + def __enter__(self): + return self + + def __exit__(self, *args): + return False + + async def __aenter__(self): + return self + + async def __aexit__(self, *args): + return False + + def __call__(self, func): + return func + + +class _ExcludedProfilingContext: + """用于标记应该从外层 profiling 中排除的时间段""" + + def __init__(self, name=None): + self.name = name + if dist.is_initialized(): + self.rank_info = f"Rank {dist.get_rank()}" + else: + self.rank_info = "Single GPU" + + def __enter__(self): + torch_device_module.synchronize() + self.start_time = time.perf_counter() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + torch_device_module.synchronize() + elapsed = time.perf_counter() - self.start_time + stack = _get_excluded_time_stack() + for i in range(len(stack)): + stack[i] += elapsed + if self.name and CHECK_PROFILING_DEBUG_LEVEL(1): + logger.info(f"[Profile-Excluded] {self.rank_info} - {self.name} cost {elapsed:.6f} seconds (excluded from outer profiling)") + return False + + async def __aenter__(self): + torch_device_module.synchronize() + self.start_time = time.perf_counter() + return self + + async def __aexit__(self, exc_type, exc_val, exc_tb): + torch_device_module.synchronize() + elapsed = time.perf_counter() - self.start_time + stack = _get_excluded_time_stack() + for i in range(len(stack)): + stack[i] += elapsed + if self.name and CHECK_PROFILING_DEBUG_LEVEL(1): + logger.info(f"[Profile-Excluded] {self.rank_info} - {self.name} cost {elapsed:.6f} seconds (excluded from outer profiling)") + return False + + def __call__(self, func): + if asyncio.iscoroutinefunction(func): + + @wraps(func) + async def async_wrapper(*args, **kwargs): + async with self: + return await func(*args, **kwargs) + + return async_wrapper + else: + + @wraps(func) + def sync_wrapper(*args, **kwargs): + with self: + return func(*args, **kwargs) + + return sync_wrapper + + +class _ProfilingContextL1(_ProfilingContext): + """Level 1 profiling context with Level1_Log prefix.""" + + def __init__(self, name, recorder_mode=0, metrics_func=None, metrics_labels=None): + super().__init__(f"Level1_Log {name}", recorder_mode, metrics_func, metrics_labels) + + +class _ProfilingContextL2(_ProfilingContext): + """Level 2 profiling context with Level2_Log prefix.""" + + def __init__(self, name, recorder_mode=0, metrics_func=None, metrics_labels=None): + super().__init__(f"Level2_Log {name}", recorder_mode, metrics_func, metrics_labels) + + +""" +PROFILING_DEBUG_LEVEL=0: [Default] disable all profiling +PROFILING_DEBUG_LEVEL=1: enable ProfilingContext4DebugL1 +PROFILING_DEBUG_LEVEL=2: enable ProfilingContext4DebugL1 and ProfilingContext4DebugL2 +""" +ProfilingContext4DebugL1 = _ProfilingContextL1 if CHECK_PROFILING_DEBUG_LEVEL(1) else _NullContext # if user >= 1, enable profiling +ProfilingContext4DebugL2 = _ProfilingContextL2 if CHECK_PROFILING_DEBUG_LEVEL(2) else _NullContext # if user >= 2, enable profiling +ExcludedProfilingContext = _ExcludedProfilingContext if CHECK_PROFILING_DEBUG_LEVEL(1) else _NullContext diff --git a/lightx2v/utils/prompt_enhancer.py b/lightx2v/utils/prompt_enhancer.py new file mode 100644 index 0000000..fb5401d --- /dev/null +++ b/lightx2v/utils/prompt_enhancer.py @@ -0,0 +1,78 @@ +import argparse + +import torch +from loguru import logger +from transformers import AutoModelForCausalLM, AutoTokenizer + +from lightx2v.utils.profiler import * + +sys_prompt = """ +Transform the short prompt into a detailed video-generation caption using this structure: +​​Opening shot type​​ (long/medium/close-up/extreme close-up/full shot) +​​Primary subject(s)​​ with vivid attributes (colors, textures, actions, interactions) +​​Dynamic elements​​ (movement, transitions, or changes over time, e.g., 'gradually lowers,' 'begins to climb,' 'camera moves toward...') +​​Scene composition​​ (background, environment, spatial relationships) +​​Lighting/atmosphere​​ (natural/artificial, time of day, mood) +​​Camera motion​​ (zooms, pans, static/handheld shots) if applicable. + +Pattern Summary from Examples: +[Shot Type] of [Subject+Action] + [Detailed Subject Description] + [Environmental Context] + [Lighting Conditions] + [Camera Movement] + +​One case: +Short prompt: a person is playing football +Long prompt: Medium shot of a young athlete in a red jersey sprinting across a muddy field, dribbling a soccer ball with precise footwork. The player glances toward the goalpost, adjusts their stance, and kicks the ball forcefully into the net. Raindrops fall lightly, creating reflections under stadium floodlights. The camera follows the ball’s trajectory in a smooth pan. + +Note: If the subject is stationary, incorporate camera movement to ensure the generated video remains dynamic. + +​​Now expand this short prompt:​​ [{}]. Please only output the final long prompt in English. +""" + + +class PromptEnhancer: + def __init__(self, model_name="Qwen/Qwen2.5-32B-Instruct", device_map="cuda:0"): + self.model = AutoModelForCausalLM.from_pretrained( + model_name, + torch_dtype="auto", + device_map=device_map, + ) + self.tokenizer = AutoTokenizer.from_pretrained(model_name) + + def to_device(self, device): + self.model = self.model.to(device) + + @ProfilingContext4DebugL1("Run prompt enhancer") + @torch.no_grad() + def __call__(self, prompt): + prompt = prompt.strip() + prompt = sys_prompt.format(prompt) + messages = [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}] + text = self.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) + model_inputs = self.tokenizer([text], return_tensors="pt").to(self.model.device) + generated_ids = self.model.generate( + **model_inputs, + max_new_tokens=8192, + ) + output_ids = generated_ids[0][len(model_inputs.input_ids[0]) :].tolist() + + think_id = self.tokenizer.encode("") + if len(think_id) == 1: + index = len(output_ids) - output_ids[::-1].index(think_id[0]) + else: + index = 0 + + thinking_content = self.tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n") + logger.info(f"[Enhanced] thinking content: {thinking_content}") + rewritten_prompt = self.tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n") + logger.info(f"[Enhanced] rewritten prompt: {rewritten_prompt}") + return rewritten_prompt + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--prompt", type=str, default="In a still frame, a stop sign") + args = parser.parse_args() + + prompt_enhancer = PromptEnhancer() + enhanced_prompt = prompt_enhancer(args.prompt) + logger.info(f"Original prompt: {args.prompt}") + logger.info(f"Enhanced prompt: {enhanced_prompt}") diff --git a/lightx2v/utils/quant_utils.py b/lightx2v/utils/quant_utils.py new file mode 100644 index 0000000..3ece66f --- /dev/null +++ b/lightx2v/utils/quant_utils.py @@ -0,0 +1,219 @@ +import torch +from loguru import logger + +try: + from qtorch.quant import float_quantize +except Exception: + logger.warning("qtorch not found, please install qtorch.Please install qtorch (pip install qtorch).") + float_quantize = None + + +class BaseQuantizer(object): + def __init__(self, bit, symmetric, granularity, **kwargs): + self.bit = bit + self.sym = symmetric + self.granularity = granularity + self.kwargs = kwargs + if self.granularity == "per_group": + self.group_size = self.kwargs["group_size"] + self.calib_algo = self.kwargs.get("calib_algo", "minmax") + + def get_tensor_range(self, tensor): + if self.calib_algo == "minmax": + return self.get_minmax_range(tensor) + elif self.calib_algo == "mse": + return self.get_mse_range(tensor) + else: + raise ValueError(f"Unsupported calibration algorithm: {self.calib_algo}") + + def get_minmax_range(self, tensor): + if self.granularity == "per_tensor": + max_val = torch.max(tensor) + min_val = torch.min(tensor) + else: + max_val = tensor.amax(dim=-1, keepdim=True) + min_val = tensor.amin(dim=-1, keepdim=True) + return (min_val, max_val) + + def get_mse_range(self, tensor): + raise NotImplementedError + + def get_qparams(self, tensor_range, device): + min_val, max_val = tensor_range[0], tensor_range[1] + qmin = self.qmin.to(device) + qmax = self.qmax.to(device) + if self.sym: + abs_max = torch.max(max_val.abs(), min_val.abs()) + abs_max = abs_max.clamp(min=1e-5) + scales = abs_max / qmax + zeros = torch.tensor(0.0) + else: + scales = (max_val - min_val).clamp(min=1e-5) / (qmax - qmin) + zeros = (qmin - torch.round(min_val / scales)).clamp(qmin, qmax) + return scales, zeros, qmax, qmin + + def reshape_tensor(self, tensor, allow_padding=False): + if self.granularity == "per_group": + t = tensor.reshape(-1, self.group_size) + else: + t = tensor + return t + + def restore_tensor(self, tensor, shape): + if tensor.shape == shape: + t = tensor + else: + t = tensor.reshape(shape) + return t + + def get_tensor_qparams(self, tensor): + tensor = self.reshape_tensor(tensor) + tensor_range = self.get_tensor_range(tensor) + scales, zeros, qmax, qmin = self.get_qparams(tensor_range, tensor.device) + return tensor, scales, zeros, qmax, qmin + + def fake_quant_tensor(self, tensor): + org_shape = tensor.shape + org_dtype = tensor.dtype + tensor, scales, zeros, qmax, qmin = self.get_tensor_qparams(tensor) + tensor = self.quant_dequant(tensor, scales, zeros, qmax, qmin) + tensor = self.restore_tensor(tensor, org_shape).to(org_dtype) + return tensor + + def real_quant_tensor(self, tensor): + org_shape = tensor.shape + tensor, scales, zeros, qmax, qmin = self.get_tensor_qparams(tensor) + tensor = self.quant(tensor, scales, zeros, qmax, qmin) + tensor = self.restore_tensor(tensor, org_shape) + if self.sym: + zeros = None + return tensor, scales, zeros + + +class IntegerQuantizer(BaseQuantizer): + def __init__(self, bit, symmetric, granularity, **kwargs): + super().__init__(bit, symmetric, granularity, **kwargs) + if "int_range" in self.kwargs: + self.qmin = self.kwargs["int_range"][0] + self.qmax = self.kwargs["int_range"][1] + else: + if self.sym: + self.qmin = -(2 ** (self.bit - 1)) + self.qmax = 2 ** (self.bit - 1) - 1 + else: + self.qmin = 0.0 + self.qmax = 2**self.bit - 1 + + self.qmin = torch.tensor(self.qmin) + self.qmax = torch.tensor(self.qmax) + self.dst_nbins = 2**bit + + def quant(self, tensor, scales, zeros, qmax, qmin): + tensor = torch.clamp(torch.round(tensor / scales) + zeros, qmin, qmax) + return tensor + + def dequant(self, tensor, scales, zeros): + tensor = (tensor - zeros) * scales + return tensor + + def quant_dequant( + self, + tensor, + scales, + zeros, + qmax, + qmin, + ): + tensor = self.quant(tensor, scales, zeros, qmax, qmin) + tensor = self.dequant(tensor, scales, zeros) + return tensor + + +class FloatQuantizer(BaseQuantizer): + def __init__(self, bit, symmetric, granularity, **kwargs): + super().__init__(bit, symmetric, granularity, **kwargs) + assert self.bit in ["e4m3", "e5m2"], f"Unsupported bit configuration: {self.bit}" + assert self.sym + + if self.bit == "e4m3": + self.e_bits = 4 + self.m_bits = 3 + self.fp_dtype = torch.float8_e4m3fn + elif self.bit == "e5m2": + self.e_bits = 5 + self.m_bits = 2 + self.fp_dtype = torch.float8_e5m2 + else: + raise ValueError(f"Unsupported bit configuration: {self.bit}") + + finfo = torch.finfo(self.fp_dtype) + self.qmin, self.qmax = finfo.min, finfo.max + + self.qmax = torch.tensor(self.qmax) + self.qmin = torch.tensor(self.qmin) + + def quant(self, tensor, scales, zeros, qmax, qmin): + scaled_tensor = tensor / scales + zeros + scaled_tensor = torch.clip(scaled_tensor, self.qmin.cuda(), self.qmax.cuda()) + org_dtype = scaled_tensor.dtype + q_tensor = float_quantize(scaled_tensor.float(), self.e_bits, self.m_bits, rounding="nearest") + q_tensor.to(org_dtype) + return q_tensor + + def dequant(self, tensor, scales, zeros): + tensor = (tensor - zeros) * scales + return tensor + + def quant_dequant(self, tensor, scales, zeros, qmax, qmin): + tensor = self.quant(tensor, scales, zeros, qmax, qmin) + tensor = self.dequant(tensor, scales, zeros) + return tensor + + +# 导入 VLLM 的量化函数 +try: + from vllm import _custom_ops as ops +except ImportError: + ops = None + + +def quant_fp8_vllm(input_tensor): + input_tensor_fp8, input_tensor_scale = ops.scaled_fp8_quant(input_tensor, scale=None, scale_ub=None, use_per_token_if_dynamic=True) + return input_tensor_fp8, input_tensor_scale + + +def dequant_fp8_vllm(input_tensor_fp8, input_tensor_scale, dtype): + return input_tensor_fp8.to(dtype) * input_tensor_scale.to(dtype) + + +if __name__ == "__main__": + weight = torch.randn(4096, 4096, dtype=torch.bfloat16).cuda() + quantizer = IntegerQuantizer(4, False, "per_group", group_size=128) + q_weight = quantizer.fake_quant_tensor(weight) + logger.info(weight) + logger.info(q_weight) + logger.info(f"cosine = {torch.cosine_similarity(weight.view(1, -1).to(torch.float64), q_weight.view(1, -1).to(torch.float64))}") + + realq_weight, scales, zeros = quantizer.real_quant_tensor(weight) + logger.info(f"realq_weight = {realq_weight}, {realq_weight.shape}") + logger.info(f"scales = {scales}, {scales.shape}") + logger.info(f"zeros = {zeros}, {zeros.shape}") + + weight = torch.randn(8192, 4096, dtype=torch.bfloat16).cuda() + quantizer = FloatQuantizer("e4m3", True, "per_channel") + q_weight = quantizer.fake_quant_tensor(weight) + logger.info(weight) + logger.info(q_weight) + logger.info(f"cosine = {torch.cosine_similarity(weight.view(1, -1).to(torch.float64), q_weight.view(1, -1).to(torch.float64))}") + + realq_weight, scales, zeros = quantizer.real_quant_tensor(weight) + logger.info(f"realq_weight = {realq_weight}, {realq_weight.shape}") + logger.info(f"scales = {scales}, {scales.shape}") + logger.info(f"zeros = {zeros}") + + input_tensor = torch.randn(4096, 4096, dtype=torch.bfloat16).cuda() + input_tensor_fp8, input_tensor_scale = quant_fp8_vllm(input_tensor) + dequant_tensor = dequant_fp8_vllm(input_tensor_fp8, input_tensor_scale, input_tensor.dtype) + logger.info(input_tensor) + logger.info(dequant_tensor) + logger.info(f"cosine vllm fp8 quant/dequant = {torch.cosine_similarity(input_tensor.view(1, -1).to(torch.float64), dequant_tensor.view(1, -1).to(torch.float64))}") diff --git a/lightx2v/utils/registry_factory.py b/lightx2v/utils/registry_factory.py new file mode 100644 index 0000000..8a5c8e0 --- /dev/null +++ b/lightx2v/utils/registry_factory.py @@ -0,0 +1,71 @@ +from lightx2v_platform.registry_factory import PLATFORM_ATTN_WEIGHT_REGISTER, PLATFORM_MM_WEIGHT_REGISTER + + +class Register(dict): + def __init__(self, *args, **kwargs): + super(Register, self).__init__(*args, **kwargs) + self._dict = {} + + def __call__(self, target_or_name): + if callable(target_or_name): + return self.register(target_or_name) + else: + return lambda x: self.register(x, key=target_or_name) + + def register(self, target, key=None): + if not callable(target): + raise Exception(f"Error: {target} must be callable!") + + if key is None: + key = target.__name__ + + if key in self._dict: + raise Exception(f"{key} already exists.") + + self[key] = target + return target + + def __setitem__(self, key, value): + self._dict[key] = value + + def __getitem__(self, key): + return self._dict[key] + + def __contains__(self, key): + return key in self._dict + + def __str__(self): + return str(self._dict) + + def keys(self): + return self._dict.keys() + + def values(self): + return self._dict.values() + + def items(self): + return self._dict.items() + + def get(self, key, default=None): + return self._dict.get(key, default) + + def merge(self, other_register): + for key, value in other_register.items(): + if key in self._dict: + raise Exception(f"{key} already exists in target register.") + self[key] = value + + +MM_WEIGHT_REGISTER = Register() +ATTN_WEIGHT_REGISTER = Register() +RMS_WEIGHT_REGISTER = Register() +LN_WEIGHT_REGISTER = Register() +CONV3D_WEIGHT_REGISTER = Register() +CONV2D_WEIGHT_REGISTER = Register() +TENSOR_REGISTER = Register() +CONVERT_WEIGHT_REGISTER = Register() +EMBEDDING_WEIGHT_REGISTER = Register() +RUNNER_REGISTER = Register() + +ATTN_WEIGHT_REGISTER.merge(PLATFORM_ATTN_WEIGHT_REGISTER) +MM_WEIGHT_REGISTER.merge(PLATFORM_MM_WEIGHT_REGISTER) diff --git a/lightx2v/utils/service_utils.py b/lightx2v/utils/service_utils.py new file mode 100644 index 0000000..b984050 --- /dev/null +++ b/lightx2v/utils/service_utils.py @@ -0,0 +1,146 @@ +import base64 +import io +import signal +import sys +import threading +from datetime import datetime +from typing import Optional + +import psutil +import torch +from PIL import Image +from loguru import logger +from pydantic import BaseModel + + +class ProcessManager: + @staticmethod + def kill_all_related_processes(): + """Kill the current process and all its child processes""" + current_process = psutil.Process() + children = current_process.children(recursive=True) + for child in children: + try: + child.kill() + except Exception as e: + logger.info(f"Failed to kill child process {child.pid}: {e}") + try: + current_process.kill() + except Exception as e: + logger.info(f"Failed to kill main process: {e}") + + @staticmethod + def signal_handler(sig, frame): + logger.info("\nReceived Ctrl+C, shutting down all related processes...") + ProcessManager.kill_all_related_processes() + sys.exit(0) + + @staticmethod + def register_signal_handler(): + """Register the signal handler for SIGINT""" + signal.signal(signal.SIGINT, ProcessManager.signal_handler) + + +class TaskStatusMessage(BaseModel): + task_id: str + + +class BaseServiceStatus: + _lock = threading.Lock() + _current_task = None + _result_store = {} + + @classmethod + def start_task(cls, message): + with cls._lock: + if cls._current_task is not None: + raise RuntimeError("Service busy") + if message.task_id_must_unique and message.task_id in cls._result_store: + raise RuntimeError(f"Task ID {message.task_id} already exists") + cls._current_task = {"message": message, "start_time": datetime.now()} + return message.task_id + + @classmethod + def complete_task(cls, message): + with cls._lock: + cls._result_store[message.task_id] = {"success": True, "message": message, "start_time": cls._current_task["start_time"], "completion_time": datetime.now()} + cls._current_task = None + + @classmethod + def record_failed_task(cls, message, error: Optional[str] = None): + """Record a failed task with an error message.""" + with cls._lock: + cls._result_store[message.task_id] = {"success": False, "message": message, "start_time": cls._current_task["start_time"], "error": error} + cls._current_task = None + + @classmethod + def clean_stopped_task(cls): + with cls._lock: + if cls._current_task: + message = cls._current_task["message"] + error = "Task stopped by user" + cls._result_store[message.task_id] = {"success": False, "message": message, "start_time": cls._current_task["start_time"], "error": error} + cls._current_task = None + + @classmethod + def get_status_task_id(cls, task_id: str): + with cls._lock: + if cls._current_task and cls._current_task["message"].task_id == task_id: + return {"task_status": "processing"} + if task_id in cls._result_store: + return {"task_status": "completed", **cls._result_store[task_id]} + return {"task_status": "not_found"} + + @classmethod + def get_status_service(cls): + with cls._lock: + if cls._current_task: + return {"service_status": "busy", "task_id": cls._current_task["message"].task_id} + return {"service_status": "idle"} + + @classmethod + def get_all_tasks(cls): + with cls._lock: + return cls._result_store + + +class TensorTransporter: + def __init__(self): + self.buffer = io.BytesIO() + + def to_device(self, data, device): + if isinstance(data, dict): + return {key: self.to_device(value, device) for key, value in data.items()} + elif isinstance(data, list): + return [self.to_device(item, device) for item in data] + elif isinstance(data, torch.Tensor): + return data.to(device) + else: + return data + + def prepare_tensor(self, data) -> bytes: + self.buffer.seek(0) + self.buffer.truncate() + torch.save(self.to_device(data, "cpu"), self.buffer) + return base64.b64encode(self.buffer.getvalue()).decode("utf-8") + + def load_tensor(self, tensor_base64: str, device="cuda") -> torch.Tensor: + tensor_bytes = base64.b64decode(tensor_base64) + with io.BytesIO(tensor_bytes) as buffer: + return self.to_device(torch.load(buffer), device) + + +class ImageTransporter: + def __init__(self): + self.buffer = io.BytesIO() + + def prepare_image(self, image: Image.Image) -> bytes: + self.buffer.seek(0) + self.buffer.truncate() + image.save(self.buffer, format="PNG") + return base64.b64encode(self.buffer.getvalue()).decode("utf-8") + + def load_image(self, image_base64: bytes) -> Image.Image: + image_bytes = base64.b64decode(image_base64) + with io.BytesIO(image_bytes) as buffer: + return Image.open(buffer).convert("RGB") diff --git a/lightx2v/utils/set_config.py b/lightx2v/utils/set_config.py new file mode 100644 index 0000000..13f94df --- /dev/null +++ b/lightx2v/utils/set_config.py @@ -0,0 +1,115 @@ +import json +import os + +import torch +import torch.distributed as dist +from loguru import logger +from torch.distributed.tensor.device_mesh import init_device_mesh + +from lightx2v.utils.input_info import ALL_INPUT_INFO_KEYS +from lightx2v.utils.lockable_dict import LockableDict +from lightx2v_platform.base.global_var import AI_DEVICE + + +def get_default_config(): + default_config = { + "do_mm_calib": False, + "cpu_offload": False, + "max_area": False, + "vae_stride": (4, 8, 8), + "patch_size": (1, 2, 2), + "feature_caching": "NoCaching", # ["NoCaching", "TaylorSeer", "Tea"] + "teacache_thresh": 0.26, + "use_ret_steps": False, + "use_bfloat16": True, + "lora_configs": None, # List of dicts with 'path' and 'strength' keys + "use_prompt_enhancer": False, + "parallel": False, + "seq_parallel": False, + "cfg_parallel": False, + "enable_cfg": False, + "use_image_encoder": True, + } + default_config = LockableDict(default_config) + return default_config + + +def set_config(args): + config = get_default_config() + config.update({k: v for k, v in vars(args).items() if k not in ALL_INPUT_INFO_KEYS}) + + if config.get("config_json", None) is not None: + logger.info(f"Loading some config from {config['config_json']}") + with open(config["config_json"], "r") as f: + config_json = json.load(f) + config.update(config_json) + + if config["model_cls"] in ["hunyuan_video_1.5", "hunyuan_video_1.5_distill"]: # Special config for hunyuan video 1.5 model folder structure + config["transformer_model_path"] = os.path.join(config["model_path"], "transformer", config["transformer_model_name"]) # transformer_model_name: [480p_t2v, 480p_i2v, 720p_t2v, 720p_i2v] + if os.path.exists(os.path.join(config["transformer_model_path"], "config.json")): + with open(os.path.join(config["transformer_model_path"], "config.json"), "r") as f: + model_config = json.load(f) + config.update(model_config) + else: + if os.path.exists(os.path.join(config["model_path"], "config.json")): + with open(os.path.join(config["model_path"], "config.json"), "r") as f: + model_config = json.load(f) + config.update(model_config) + elif os.path.exists(os.path.join(config["model_path"], "low_noise_model", "config.json")): # 需要一个更优雅的update方法 + with open(os.path.join(config["model_path"], "low_noise_model", "config.json"), "r") as f: + model_config = json.load(f) + config.update(model_config) + elif os.path.exists(os.path.join(config["model_path"], "distill_models", "low_noise_model", "config.json")): # 需要一个更优雅的update方法 + with open(os.path.join(config["model_path"], "distill_models", "low_noise_model", "config.json"), "r") as f: + model_config = json.load(f) + config.update(model_config) + elif os.path.exists(os.path.join(config["model_path"], "original", "config.json")): + with open(os.path.join(config["model_path"], "original", "config.json"), "r") as f: + model_config = json.load(f) + config.update(model_config) + # load quantized config + if config.get("dit_quantized_ckpt", None) is not None: + config_path = os.path.join(config["dit_quantized_ckpt"], "config.json") + if os.path.exists(config_path): + with open(config_path, "r") as f: + model_config = json.load(f) + config.update(model_config) + + if config["task"] in ["i2v", "s2v"]: + if config["target_video_length"] % config["vae_stride"][0] != 1: + logger.warning(f"`num_frames - 1` has to be divisible by {config['vae_stride'][0]}. Rounding to the nearest number.") + config["target_video_length"] = config["target_video_length"] // config["vae_stride"][0] * config["vae_stride"][0] + 1 + + if config["task"] not in ["t2i", "i2i"] and config["model_cls"] not in ["hunyuan_video_1.5", "hunyuan_video_1.5_distill"]: + config["attnmap_frame_num"] = ((config["target_video_length"] - 1) // config["vae_stride"][0] + 1) // config["patch_size"][0] + if config["model_cls"] == "seko_talk": + config["attnmap_frame_num"] += 1 + + return config + + +def set_parallel_config(config): + if config["parallel"]: + cfg_p_size = config["parallel"].get("cfg_p_size", 1) + seq_p_size = config["parallel"].get("seq_p_size", 1) + assert cfg_p_size * seq_p_size == dist.get_world_size(), f"cfg_p_size * seq_p_size must be equal to world_size" + config["device_mesh"] = init_device_mesh(AI_DEVICE, (cfg_p_size, seq_p_size), mesh_dim_names=("cfg_p", "seq_p")) + + if config["parallel"] and config["parallel"].get("seq_p_size", False) and config["parallel"]["seq_p_size"] > 1: + config["seq_parallel"] = True + + if config.get("enable_cfg", False) and config["parallel"] and config["parallel"].get("cfg_p_size", False) and config["parallel"]["cfg_p_size"] > 1: + config["cfg_parallel"] = True + # warmup dist + _a = torch.zeros([1]).to(f"{AI_DEVICE}:{dist.get_rank()}") + dist.all_reduce(_a) + + +def print_config(config): + config_to_print = config.copy() + config_to_print.pop("device_mesh", None) + if config["parallel"]: + if dist.get_rank() == 0: + logger.info(f"config:\n{json.dumps(config_to_print, ensure_ascii=False, indent=4)}") + else: + logger.info(f"config:\n{json.dumps(config_to_print, ensure_ascii=False, indent=4)}") diff --git a/lightx2v/utils/utils.py b/lightx2v/utils/utils.py new file mode 100644 index 0000000..7b63a93 --- /dev/null +++ b/lightx2v/utils/utils.py @@ -0,0 +1,486 @@ +import os +import random +import subprocess +from typing import Optional + +import imageio +import imageio_ffmpeg as ffmpeg +import numpy as np +import safetensors +import torch +import torch.distributed as dist +import torchvision +from einops import rearrange +from loguru import logger + +from lightx2v_platform.base.global_var import AI_DEVICE + +torch_device_module = getattr(torch, AI_DEVICE) + + +def seed_all(seed): + random.seed(seed) + os.environ["PYTHONHASHSEED"] = str(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch_device_module.manual_seed(seed) + torch_device_module.manual_seed_all(seed) + torch.backends.cudnn.benchmark = False + torch.backends.cudnn.deterministic = True + + +def save_videos_grid(videos: torch.Tensor, path: str, rescale=False, n_rows=1, fps=24): + """save videos by video tensor + copy from https://github.com/guoyww/AnimateDiff/blob/e92bd5671ba62c0d774a32951453e328018b7c5b/animatediff/utils/util.py#L61 + + Args: + videos (torch.Tensor): video tensor predicted by the model + path (str): path to save video + rescale (bool, optional): rescale the video tensor from [-1, 1] to . Defaults to False. + n_rows (int, optional): Defaults to 1. + fps (int, optional): video save fps. Defaults to 8. + """ + videos = rearrange(videos, "b c t h w -> t b c h w") + outputs = [] + for x in videos: + x = torchvision.utils.make_grid(x, nrow=n_rows) + x = x.transpose(0, 1).transpose(1, 2).squeeze(-1) + if rescale: + x = (x + 1.0) / 2.0 # -1,1 -> 0,1 + x = torch.clamp(x, 0, 1) + x = (x * 255).numpy().astype(np.uint8) + outputs.append(x) + + os.makedirs(os.path.dirname(path), exist_ok=True) + imageio.mimsave(path, outputs, fps=fps) + + +def cache_video( + tensor, + save_file: str, + fps=30, + suffix=".mp4", + nrow=8, + normalize=True, + value_range=(-1, 1), + retry=5, +): + save_dir = os.path.dirname(save_file) + try: + if not os.path.exists(save_dir): + os.makedirs(save_dir, exist_ok=True) + except Exception as e: + logger.error(f"Failed to create directory: {save_dir}, error: {e}") + return None + + cache_file = save_file + + # save to cache + error = None + for _ in range(retry): + try: + # preprocess + tensor = tensor.clamp(min(value_range), max(value_range)) # type: ignore + tensor = torch.stack( + [torchvision.utils.make_grid(u, nrow=nrow, normalize=normalize, value_range=value_range) for u in tensor.unbind(2)], + dim=1, + ).permute(1, 2, 3, 0) + tensor = (tensor * 255).type(torch.uint8).cpu() + + # write video + writer = imageio.get_writer(cache_file, fps=fps, codec="libx264", quality=8) + for frame in tensor.numpy(): + writer.append_data(frame) + writer.close() + del tensor + torch.cuda.empty_cache() + return cache_file + except Exception as e: + error = e + continue + else: + logger.info(f"cache_video failed, error: {error}", flush=True) + return None + + +def vae_to_comfyui_image(vae_output: torch.Tensor) -> torch.Tensor: + """ + Convert VAE decoder output to ComfyUI Image format + + Args: + vae_output: VAE decoder output tensor, typically in range [-1, 1] + Shape: [B, C, T, H, W] or [B, C, H, W] + + Returns: + ComfyUI Image tensor in range [0, 1] + Shape: [B, H, W, C] for single frame or [B*T, H, W, C] for video + """ + # Handle video tensor (5D) vs image tensor (4D) + if vae_output.dim() == 5: + # Video tensor: [B, C, T, H, W] + B, C, T, H, W = vae_output.shape + # Reshape to [B*T, C, H, W] for processing + vae_output = vae_output.permute(0, 2, 1, 3, 4).reshape(B * T, C, H, W) + + # Normalize from [-1, 1] to [0, 1] + images = (vae_output + 1) / 2 + + # Clamp values to [0, 1] + images = torch.clamp(images, 0, 1) + + # Convert from [B, C, H, W] to [B, H, W, C] + images = images.permute(0, 2, 3, 1).cpu() + + return images + + +def vae_to_comfyui_image_inplace(vae_output: torch.Tensor) -> torch.Tensor: + """ + Convert VAE decoder output to ComfyUI Image format (inplace operation) + + Args: + vae_output: VAE decoder output tensor, typically in range [-1, 1] + Shape: [B, C, T, H, W] or [B, C, H, W] + WARNING: This tensor will be modified in-place! + + Returns: + ComfyUI Image tensor in range [0, 1] + Shape: [B, H, W, C] for single frame or [B*T, H, W, C] for video + Note: The returned tensor is the same object as input (modified in-place) + """ + # Handle video tensor (5D) vs image tensor (4D) + if vae_output.dim() == 5: + # Video tensor: [B, C, T, H, W] + B, C, T, H, W = vae_output.shape + # Reshape to [B*T, C, H, W] for processing (inplace view) + vae_output = vae_output.permute(0, 2, 1, 3, 4).contiguous().view(B * T, C, H, W) + + # Normalize from [-1, 1] to [0, 1] (inplace) + vae_output.add_(1).div_(2) + + # Clamp values to [0, 1] (inplace) + vae_output.clamp_(0, 1) + + # Convert from [B, C, H, W] to [B, H, W, C] and move to CPU + vae_output = vae_output.permute(0, 2, 3, 1).cpu() + + return vae_output + + +def save_to_video( + images: torch.Tensor, + output_path: str, + fps: float = 24.0, + method: str = "imageio", + lossless: bool = False, + output_pix_fmt: Optional[str] = "yuv420p", +) -> None: + """ + Save ComfyUI Image tensor to video file + + Args: + images: ComfyUI Image tensor [N, H, W, C] in range [0, 1] + output_path: Path to save the video + fps: Frames per second + method: Save method - "imageio" or "ffmpeg" + lossless: Whether to use lossless encoding (ffmpeg method only) + output_pix_fmt: Pixel format for output (ffmpeg method only) + """ + assert images.dim() == 4 and images.shape[-1] == 3, "Input must be [N, H, W, C] with C=3" + + # Ensure output directory exists + os.makedirs(os.path.dirname(output_path) or ".", exist_ok=True) + + if method == "imageio": + # Convert to uint8 + # frames = (images * 255).cpu().numpy().astype(np.uint8) + frames = (images * 255).to(torch.uint8).cpu().numpy() + imageio.mimsave(output_path, frames, fps=fps) # type: ignore + + elif method == "ffmpeg": + # Convert to numpy and scale to [0, 255] + # frames = (images * 255).cpu().numpy().clip(0, 255).astype(np.uint8) + frames = (images * 255).clamp(0, 255).to(torch.uint8).cpu().numpy() + + # Convert RGB to BGR for OpenCV/FFmpeg + frames = frames[..., ::-1].copy() + + N, height, width, _ = frames.shape + + # Ensure even dimensions for x264 + width += width % 2 + height += height % 2 + + # Get ffmpeg executable from imageio_ffmpeg + ffmpeg_exe = ffmpeg.get_ffmpeg_exe() + + if lossless: + command = [ + ffmpeg_exe, + "-y", # Overwrite output file if it exists + "-f", + "rawvideo", + "-s", + f"{int(width)}x{int(height)}", + "-pix_fmt", + "bgr24", + "-r", + f"{fps}", + "-loglevel", + "error", + "-threads", + "4", + "-i", + "-", # Input from pipe + "-vcodec", + "libx264rgb", + "-crf", + "0", + "-an", # No audio + output_path, + ] + else: + command = [ + ffmpeg_exe, + "-y", # Overwrite output file if it exists + "-f", + "rawvideo", + "-s", + f"{int(width)}x{int(height)}", + "-pix_fmt", + "bgr24", + "-r", + f"{fps}", + "-loglevel", + "error", + "-threads", + "4", + "-i", + "-", # Input from pipe + "-vcodec", + "libx264", + "-pix_fmt", + output_pix_fmt, + "-an", # No audio + output_path, + ] + + # Run FFmpeg + process = subprocess.Popen( + command, + stdin=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if process.stdin is None: + raise BrokenPipeError("No stdin buffer received.") + + # Write frames to FFmpeg + for frame in frames: + # Pad frame if needed + if frame.shape[0] < height or frame.shape[1] < width: + padded = np.zeros((height, width, 3), dtype=np.uint8) + padded[: frame.shape[0], : frame.shape[1]] = frame + frame = padded + process.stdin.write(frame.tobytes()) + + process.stdin.close() + process.wait() + + if process.returncode != 0: + error_output = process.stderr.read().decode() if process.stderr else "Unknown error" + raise RuntimeError(f"FFmpeg failed with error: {error_output}") + + else: + raise ValueError(f"Unknown save method: {method}") + + +def remove_substrings_from_keys(original_dict, substr): + new_dict = {} + for key, value in original_dict.items(): + new_dict[key.replace(substr, "")] = value + return new_dict + + +def find_torch_model_path(config, ckpt_config_key=None, filename=None, subdir=["original", "fp8", "int8", "distill_models", "distill_fp8", "distill_int8"]): + if ckpt_config_key and config.get(ckpt_config_key, None) is not None: + return config.get(ckpt_config_key) + + paths_to_check = [ + os.path.join(config["model_path"], filename), + ] + if isinstance(subdir, list): + for sub in subdir: + paths_to_check.insert(0, os.path.join(config["model_path"], sub, filename)) + else: + paths_to_check.insert(0, os.path.join(config["model_path"], subdir, filename)) + + for path in paths_to_check: + if os.path.exists(path): + return path + raise FileNotFoundError(f"PyTorch model file '{filename}' not found.\nPlease download the model from https://huggingface.co/lightx2v/ or specify the model path in the configuration file.") + + +def load_safetensors(in_path, remove_key=None, include_keys=None): + """加载safetensors文件或目录,支持按key包含筛选或排除""" + include_keys = include_keys or [] + if os.path.isdir(in_path): + return load_safetensors_from_dir(in_path, remove_key, include_keys) + elif os.path.isfile(in_path): + return load_safetensors_from_path(in_path, remove_key, include_keys) + else: + raise ValueError(f"{in_path} does not exist") + + +def load_safetensors_from_path(in_path, remove_key=None, include_keys=None): + include_keys = include_keys or [] + tensors = {} + with safetensors.safe_open(in_path, framework="pt", device="cpu") as f: + for key in f.keys(): + if include_keys: + if any(inc_key in key for inc_key in include_keys): + tensors[key] = f.get_tensor(key) + else: + if not (remove_key and remove_key in key): + tensors[key] = f.get_tensor(key) + return tensors + + +def load_safetensors_from_dir(in_dir, remove_key=None, include_keys=None): + """从目录加载所有safetensors文件,支持按key筛选""" + include_keys = include_keys or [] + tensors = {} + safetensors_files = os.listdir(in_dir) + safetensors_files = [f for f in safetensors_files if f.endswith(".safetensors")] + for f in safetensors_files: + tensors.update(load_safetensors_from_path(os.path.join(in_dir, f), remove_key, include_keys)) + return tensors + + +def load_pt_safetensors(in_path, remove_key=None, include_keys=None): + """加载pt/pth或safetensors权重,支持按key筛选""" + include_keys = include_keys or [] + ext = os.path.splitext(in_path)[-1] + if ext in (".pt", ".pth", ".tar"): + state_dict = torch.load(in_path, map_location="cpu", weights_only=True) + # 处理筛选逻辑 + keys_to_keep = [] + for key in state_dict.keys(): + if include_keys: + if any(inc_key in key for inc_key in include_keys): + keys_to_keep.append(key) + else: + if not (remove_key and remove_key in key): + keys_to_keep.append(key) + # 只保留符合条件的key + state_dict = {k: state_dict[k] for k in keys_to_keep} + else: + state_dict = load_safetensors(in_path, remove_key, include_keys) + return state_dict + + +def load_weights(checkpoint_path, cpu_offload=False, remove_key=None, load_from_rank0=False, include_keys=None): + if not dist.is_initialized() or not load_from_rank0: + # Single GPU mode + logger.info(f"Loading weights from {checkpoint_path}") + cpu_weight_dict = load_pt_safetensors(checkpoint_path, remove_key, include_keys) + return cpu_weight_dict + + # Multi-GPU mode + is_weight_loader = False + current_rank = dist.get_rank() + if current_rank == 0: + is_weight_loader = True + + cpu_weight_dict = {} + if is_weight_loader: + logger.info(f"Loading weights from {checkpoint_path}") + cpu_weight_dict = load_pt_safetensors(checkpoint_path, remove_key) + + meta_dict = {} + if is_weight_loader: + for key, tensor in cpu_weight_dict.items(): + meta_dict[key] = {"shape": tensor.shape, "dtype": tensor.dtype} + + obj_list = [meta_dict] if is_weight_loader else [None] + + src_global_rank = 0 + dist.broadcast_object_list(obj_list, src=src_global_rank) + synced_meta_dict = obj_list[0] + + if cpu_offload: + target_device = "cpu" + distributed_weight_dict = {key: torch.empty(meta["shape"], dtype=meta["dtype"], device=target_device) for key, meta in synced_meta_dict.items()} + dist.barrier() + else: + target_device = torch.device(f"cuda:{current_rank}") + distributed_weight_dict = {key: torch.empty(meta["shape"], dtype=meta["dtype"], device=target_device) for key, meta in synced_meta_dict.items()} + dist.barrier(device_ids=[torch.cuda.current_device()]) + + for key in sorted(synced_meta_dict.keys()): + tensor_to_broadcast = distributed_weight_dict[key] + if is_weight_loader: + tensor_to_broadcast.copy_(cpu_weight_dict[key], non_blocking=True) + + if cpu_offload: + if is_weight_loader: + gpu_tensor = tensor_to_broadcast.cuda() + dist.broadcast(gpu_tensor, src=src_global_rank) + tensor_to_broadcast.copy_(gpu_tensor.cpu(), non_blocking=True) + del gpu_tensor + torch.cuda.empty_cache() + else: + gpu_tensor = torch.empty_like(tensor_to_broadcast, device="cuda") + dist.broadcast(gpu_tensor, src=src_global_rank) + tensor_to_broadcast.copy_(gpu_tensor.cpu(), non_blocking=True) + del gpu_tensor + torch.cuda.empty_cache() + else: + dist.broadcast(tensor_to_broadcast, src=src_global_rank) + + if is_weight_loader: + del cpu_weight_dict + + if cpu_offload: + torch.cuda.empty_cache() + + logger.info(f"Weights distributed across {dist.get_world_size()} devices on {target_device}") + return distributed_weight_dict + + +def masks_like(tensor, zero=False, generator=None, p=0.2, prev_len=1): + assert isinstance(tensor, torch.Tensor) + out = torch.ones_like(tensor) + if zero: + if generator is not None: + random_num = torch.rand(1, generator=generator, device=generator.device).item() + if random_num < p: + out[:, :prev_len] = torch.zeros_like(out[:, :prev_len]) + else: + out[:, :prev_len] = torch.zeros_like(out[:, :prev_len]) + return out + + +def best_output_size(w, h, dw, dh, expected_area): + # float output size + ratio = w / h + ow = (expected_area * ratio) ** 0.5 + oh = expected_area / ow + + # process width first + ow1 = int(ow // dw * dw) + oh1 = int(expected_area / ow1 // dh * dh) + assert ow1 % dw == 0 and oh1 % dh == 0 and ow1 * oh1 <= expected_area + ratio1 = ow1 / oh1 + + # process height first + oh2 = int(oh // dh * dh) + ow2 = int(expected_area / oh2 // dw * dw) + assert oh2 % dh == 0 and ow2 % dw == 0 and ow2 * oh2 <= expected_area + ratio2 = ow2 / oh2 + + # compare ratios + if max(ratio / ratio1, ratio1 / ratio) < max(ratio / ratio2, ratio2 / ratio): + return ow1, oh1 + else: + return ow2, oh2 diff --git a/lightx2v_kernel/CMakeLists.txt b/lightx2v_kernel/CMakeLists.txt new file mode 100644 index 0000000..7b27460 --- /dev/null +++ b/lightx2v_kernel/CMakeLists.txt @@ -0,0 +1,103 @@ +cmake_minimum_required(VERSION 3.22 FATAL_ERROR) +project(lightx2v-kernel LANGUAGES CXX CUDA) + +include(${CMAKE_CURRENT_LIST_DIR}/cmake/utils.cmake) + +# Python +find_package(Python COMPONENTS Interpreter Development.Module ${SKBUILD_SABI_COMPONENT} REQUIRED) + +# CXX +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") + +# CUDA +enable_language(CUDA) +find_package(CUDAToolkit REQUIRED) +set_property(GLOBAL PROPERTY CUDA_SEPARABLE_COMPILATION ON) + +# Torch +find_package(Torch REQUIRED) +# clean Torch Flag +clear_cuda_arches(CMAKE_FLAG) + + +# cutlass +if(CUTLASS_PATH) + set(repo-cutlass_SOURCE_DIR ${CUTLASS_PATH}) + message(STATUS "Using local CUTLASS from: ${CUTLASS_PATH}") +else() + message(FATAL_ERROR "CUTLASS_PATH is not set. Please manually download CUTLASS first.") +endif() + + +# ccache option +option(ENABLE_CCACHE "Whether to use ccache" ON) +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND AND ENABLE_CCACHE AND DEFINED ENV{CCACHE_DIR}) + message(STATUS "Building with CCACHE enabled") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "ccache") + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "ccache") +endif() + + +include_directories( + ${PROJECT_SOURCE_DIR}/include + ${PROJECT_SOURCE_DIR}/csrc + ${repo-cutlass_SOURCE_DIR}/include + ${repo-cutlass_SOURCE_DIR}/tools/util/include +) + +set(LIGHTX2V_KERNEL_CUDA_FLAGS + "-DNDEBUG" + "-DOPERATOR_NAMESPACE=lightx2v-kernel" + "-O3" + "-Xcompiler" + "-fPIC" + "-std=c++17" + "-DCUTE_USE_PACKED_TUPLE=1" + "-DCUTLASS_ENABLE_TENSOR_CORE_MMA=1" + "-DCUTLASS_VERSIONS_GENERATED" + "-DCUTLASS_TEST_LEVEL=0" + "-DCUTLASS_TEST_ENABLE_CACHED_RESULTS=1" + "-DCUTLASS_DEBUG_TRACE_LEVEL=0" + "--expt-relaxed-constexpr" + "--expt-extended-lambda" + "--threads=32" + + # Suppress warnings + "-Xcompiler=-Wconversion" + "-Xcompiler=-fno-strict-aliasing" + +) + + +list(APPEND LIGHTX2V_KERNEL_CUDA_FLAGS + # "-gencode=arch=compute_90,code=sm_90" + # "-gencode=arch=compute_90a,code=sm_90a" + # "-gencode=arch=compute_100,code=sm_100" + # "-gencode=arch=compute_100a,code=sm_100a" + # "-gencode=arch=compute_120,code=sm_120" + "-gencode=arch=compute_120a,code=sm_120a" +) + + +set(SOURCES + "csrc/gemm/nvfp4_scaled_mm_kernels_sm120.cu" + "csrc/gemm/nvfp4_quant_kernels_sm120.cu" + "csrc/gemm/mxfp4_quant_kernels_sm120.cu" + "csrc/gemm/mxfp8_quant_kernels_sm120.cu" + "csrc/gemm/mxfp6_quant_kernels_sm120.cu" + "csrc/gemm/mxfp4_scaled_mm_kernels_sm120.cu" + "csrc/gemm/mxfp6_mxfp8_scaled_mm_kernels_sm120.cu" + "csrc/gemm/mxfp8_scaled_mm_kernels_sm120.cu" + "csrc/common_extension.cc" +) + +Python_add_library(common_ops MODULE USE_SABI ${SKBUILD_SABI_VERSION} WITH_SOABI ${SOURCES}) + +message(STATUS "LIGHTX2V_KERNEL_CUDA_FLAGS: ${LIGHTX2V_KERNEL_CUDA_FLAGS}") + +target_compile_options(common_ops PRIVATE $<$:${LIGHTX2V_KERNEL_CUDA_FLAGS}>) +target_link_libraries(common_ops PRIVATE ${TORCH_LIBRARIES} c10 cuda cublas cublasLt) + +install(TARGETS common_ops LIBRARY DESTINATION lightx2v_kernel) diff --git a/lightx2v_kernel/LICENSE b/lightx2v_kernel/LICENSE new file mode 100644 index 0000000..9c42268 --- /dev/null +++ b/lightx2v_kernel/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023-2024 SGLang Team + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/lightx2v_kernel/README.md b/lightx2v_kernel/README.md new file mode 100644 index 0000000..e16130f --- /dev/null +++ b/lightx2v_kernel/README.md @@ -0,0 +1,56 @@ +# lightx2v_kernel + +### Preparation +``` +# Install torch, at least version 2.7 + +pip install scikit_build_core uv +``` + +### Build whl + +``` +git clone https://github.com/NVIDIA/cutlass.git + +git clone https://github.com/ModelTC/LightX2V.git + +cd LightX2V/lightx2v_kernel + +# Set the /path/to/cutlass below to the absolute path of cutlass you download. + +MAX_JOBS=$(nproc) && CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) \ +uv build --wheel \ + -Cbuild-dir=build . \ + -Ccmake.define.CUTLASS_PATH=/path/to/cutlass \ + --verbose \ + --color=always \ + --no-build-isolation +``` + + +### Install whl +``` +pip install dist/*whl --force-reinstall --no-deps +``` + +### Test + +##### cos and speed test, mm without bias +``` +python test/nvfp4_nvfp4/test_bench2.py +``` + +##### cos and speed test, mm with bias +``` +python test/nvfp4_nvfp4/test_bench3_bias.py +``` + +##### Bandwidth utilization test for quant +``` +python test/nvfp4_nvfp4/test_quant_mem_utils.py +``` + +##### tflops test for mm +``` +python test/nvfp4_nvfp4/test_mm_tflops.py +``` diff --git a/lightx2v_kernel/cmake/utils.cmake b/lightx2v_kernel/cmake/utils.cmake new file mode 100644 index 0000000..0eaa7a6 --- /dev/null +++ b/lightx2v_kernel/cmake/utils.cmake @@ -0,0 +1,21 @@ +# Adapt from: https://github.com/neuralmagic/vllm-flash-attention/blob/main/cmake/utils.cmake +# +# Clear all `-gencode` flags from `CMAKE_CUDA_FLAGS` and store them in +# `CUDA_ARCH_FLAGS`. +# +# Example: +# CMAKE_CUDA_FLAGS="-Wall -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75" +# clear_cuda_arches(CUDA_ARCH_FLAGS) +# CUDA_ARCH_FLAGS="-gencode arch=compute_70,code=sm_70;-gencode arch=compute_75,code=sm_75" +# CMAKE_CUDA_FLAGS="-Wall" +# +macro(clear_cuda_arches CUDA_ARCH_FLAGS) + # Extract all `-gencode` flags from `CMAKE_CUDA_FLAGS` + string(REGEX MATCHALL "-gencode arch=[^ ]+" CUDA_ARCH_FLAGS + ${CMAKE_CUDA_FLAGS}) + + # Remove all `-gencode` flags from `CMAKE_CUDA_FLAGS` since they will be modified + # and passed back via the `CUDA_ARCHITECTURES` property. + string(REGEX REPLACE "-gencode arch=[^ ]+ *" "" CMAKE_CUDA_FLAGS + ${CMAKE_CUDA_FLAGS}) +endmacro() diff --git a/lightx2v_kernel/csrc/common_extension.cc b/lightx2v_kernel/csrc/common_extension.cc new file mode 100644 index 0000000..18b1567 --- /dev/null +++ b/lightx2v_kernel/csrc/common_extension.cc @@ -0,0 +1,51 @@ +#include +#include +#include + +#include "lightx2v_kernel_ops.h" + +TORCH_LIBRARY_FRAGMENT(lightx2v_kernel, m) { + + m.def( + "cutlass_scaled_nvfp4_mm_sm120(Tensor! out, Tensor mat_a, Tensor mat_b, Tensor scales_a, Tensor scales_b, Tensor " + "alpha, Tensor? bias) -> ()"); + m.impl("cutlass_scaled_nvfp4_mm_sm120", torch::kCUDA, &cutlass_scaled_nvfp4_mm_sm120); + + m.def( + "scaled_nvfp4_quant_sm120(Tensor! output, Tensor! input," + " Tensor! output_scale, Tensor! input_scale) -> ()"); + m.impl("scaled_nvfp4_quant_sm120", torch::kCUDA, &scaled_nvfp4_quant_sm120); + + m.def( + "scaled_mxfp4_quant_sm120(Tensor! output, Tensor! input," + " Tensor! output_scale) -> ()"); + m.impl("scaled_mxfp4_quant_sm120", torch::kCUDA, &scaled_mxfp4_quant_sm120); + + m.def( + "scaled_mxfp8_quant_sm120(Tensor! output, Tensor! input," + " Tensor! output_scale) -> ()"); + m.impl("scaled_mxfp8_quant_sm120", torch::kCUDA, &scaled_mxfp8_quant_sm120); + + m.def( + "scaled_mxfp6_quant_sm120(Tensor! output, Tensor! input," + " Tensor! output_scale) -> ()"); + m.impl("scaled_mxfp6_quant_sm120", torch::kCUDA, &scaled_mxfp6_quant_sm120); + + m.def( + "cutlass_scaled_mxfp4_mm_sm120(Tensor! out, Tensor mat_a, Tensor mat_b, Tensor scales_a, Tensor scales_b, Tensor " + "alpha, Tensor? bias) -> ()"); + m.impl("cutlass_scaled_mxfp4_mm_sm120", torch::kCUDA, &cutlass_scaled_mxfp4_mm_sm120); + + m.def( + "cutlass_scaled_mxfp6_mxfp8_mm_sm120(Tensor! out, Tensor mat_a, Tensor mat_b, Tensor scales_a, Tensor scales_b, Tensor " + "alpha, Tensor? bias) -> ()"); + m.impl("cutlass_scaled_mxfp6_mxfp8_mm_sm120", torch::kCUDA, &cutlass_scaled_mxfp6_mxfp8_mm_sm120); + + m.def( + "cutlass_scaled_mxfp8_mm_sm120(Tensor! out, Tensor mat_a, Tensor mat_b, Tensor scales_a, Tensor scales_b, Tensor " + "alpha, Tensor? bias) -> ()"); + m.impl("cutlass_scaled_mxfp8_mm_sm120", torch::kCUDA, &cutlass_scaled_mxfp8_mm_sm120); + +} + +REGISTER_EXTENSION(common_ops) diff --git a/lightx2v_kernel/csrc/gemm/mxfp4_quant_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/mxfp4_quant_kernels_sm120.cu new file mode 100644 index 0000000..d895603 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/mxfp4_quant_kernels_sm120.cu @@ -0,0 +1,324 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +// Get type2 from type or vice versa (applied to half and bfloat16) +template +struct TypeConverter { + using Type = half2; +}; // keep for generality + +template <> +struct TypeConverter { + using Type = half; +}; + +template <> +struct TypeConverter { + using Type = half2; +}; + +template <> +struct TypeConverter<__nv_bfloat162> { + using Type = __nv_bfloat16; +}; + +template <> +struct TypeConverter<__nv_bfloat16> { + using Type = __nv_bfloat162; +}; + +#define ELTS_PER_THREAD 8 + +constexpr int CVT_FP4_ELTS_PER_THREAD = 8; +constexpr int CVT_FP4_SF_VEC_SIZE = 32; + + +// Convert 4 float2 values into 8 e2m1 values (represented as one uint32_t). +inline __device__ uint32_t fp32_vec_to_e2m1(float2 (&array)[4]) { + // PTX instructions used here requires sm100a. +// #if CUDA_VERSION >= 12080 +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) && __CUDA_ARCH_HAS_FEATURE__(SM100_ALL) + uint32_t val; + asm volatile( + "{\n" + ".reg .b8 byte0;\n" + ".reg .b8 byte1;\n" + ".reg .b8 byte2;\n" + ".reg .b8 byte3;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte0, %2, %1;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte1, %4, %3;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte2, %6, %5;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte3, %8, %7;\n" + "mov.b32 %0, {byte0, byte1, byte2, byte3};\n" + "}" + : "=r"(val) + : "f"(array[0].x), + "f"(array[0].y), + "f"(array[1].x), + "f"(array[1].y), + "f"(array[2].x), + "f"(array[2].y), + "f"(array[3].x), + "f"(array[3].y)); + return val; +// #else +// return 0; +// #endif +// #endif +} + +// Fast reciprocal. +inline __device__ float reciprocal_approximate_ftz(float a) { + float b; + asm volatile("rcp.approx.ftz.f32 %0, %1;\n" : "=f"(b) : "f"(a)); + return b; +} + +template +__device__ uint8_t* get_sf_out_address(int rowIdx, int colIdx, int numCols, SFType* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + static_assert(CVT_FP4_NUM_THREADS_PER_SF == 4); + + // One pair of threads write one SF to global memory. + // TODO: stage through smem for packed STG.32 + // is it better than STG.8 from 4 threads ? + if (threadIdx.x % CVT_FP4_NUM_THREADS_PER_SF == 0) { + // SF vector index (16 elements share one SF in the K dimension). + int32_t kIdx = colIdx / CVT_FP4_NUM_THREADS_PER_SF; + int32_t mIdx = rowIdx; + + // SF layout [numMTiles, numKTiles, 32 (mTile), 4 (mTile), 4(kTile)] + // --> index [mTileIdx, kTileIdx, outerMIdx, innerMIdx, innerKIdx] + + int32_t mTileIdx = mIdx / (32 * 4); + // SF vector size 16. + int factor = CVT_FP4_SF_VEC_SIZE * 4; + int32_t numKTiles = (numCols + factor - 1) / factor; + int64_t mTileStride = numKTiles * 32 * 4 * 4; + + int32_t kTileIdx = (kIdx / 4); + int64_t kTileStride = 32 * 4 * 4; + + // M tile layout [32, 4] is column-major. + int32_t outerMIdx = (mIdx % 32); + int64_t outerMStride = 4 * 4; + + int32_t innerMIdx = (mIdx % (32 * 4)) / 32; + int64_t innerMStride = 4; + + int32_t innerKIdx = (kIdx % 4); + int64_t innerKStride = 1; + + // Compute the global offset. + int64_t SFOffset = mTileIdx * mTileStride + kTileIdx * kTileStride + outerMIdx * outerMStride + + innerMIdx * innerMStride + innerKIdx * innerKStride; + + return reinterpret_cast(SFout) + SFOffset; + } +// #endif + return nullptr; +} + +// Define a 16 bytes packed data type. +template +struct PackedVec { + typename TypeConverter::Type elts[4]; +}; + +template <> +struct PackedVec<__nv_fp8_e4m3> { + __nv_fp8x2_e4m3 elts[8]; +}; + +// Quantizes the provided PackedVec into the uint32_t output +template +__device__ uint32_t cvt_warp_fp16_to_fp4(PackedVec& vec, uint8_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + // Get absolute maximum values among the local 8 values. + auto localMax = __habs2(vec.elts[0]); + +// Local maximum value. +#pragma unroll + for (int i = 1; i < CVT_FP4_ELTS_PER_THREAD / 2; i++) { + localMax = __hmax2(localMax, __habs2(vec.elts[i])); + } + + // Get the absolute maximum among all 32 values (four threads). + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 1), localMax); + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 2), localMax); + // Get the final absolute maximum values. + float vecMax = float(__hmax(localMax.x, localMax.y)); + + // Get the SF (max value of the vector / max value of e2m1). + // maximum value of e2m1 = 6.0. + // TODO: use half as compute data type. + float SFValue = vecMax * 0.16666666666666666f; + // 8 bits representation of the SF. + uint8_t fp8SFVal; + // Write the SF to global memory (STG.8). + __nv_fp8_e8m0 tmp; + tmp.__x = __nv_cvt_float_to_e8m0(SFValue, __NV_SATFINITE, cudaRoundPosInf); + SFValue = static_cast(tmp); + fp8SFVal = tmp.__x; + + // Get the output scale. + float outputScale = + SFValue != 0 ? reciprocal_approximate_ftz(SFValue) : 0.0f; + + if (SFout) { + // Write the SF to global memory (STG.8). + *SFout = fp8SFVal; + } + + // Convert the input to float. + float2 fp2Vals[CVT_FP4_ELTS_PER_THREAD / 2]; + +#pragma unroll + for (int i = 0; i < CVT_FP4_ELTS_PER_THREAD / 2; i++) { + if constexpr (std::is_same_v) { + fp2Vals[i] = __half22float2(vec.elts[i]); + } else { + fp2Vals[i] = __bfloat1622float2(vec.elts[i]); + } + fp2Vals[i].x *= outputScale; + fp2Vals[i].y *= outputScale; + } + + // Convert to e2m1 values. + uint32_t e2m1Vec = fp32_vec_to_e2m1(fp2Vals); + + // Write the e2m1 values to global memory. + return e2m1Vec; +// #else +// return 0; +// #endif +} + +// Use UE4M3 by default. +template +__global__ void +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) +__launch_bounds__(256, 6) cvt_fp16_to_fp4( +// #else +// cvt_fp16_to_fp4( +// #endif + int32_t numRows, int32_t numCols, Type const* in, uint32_t* out, uint32_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + using PackedVec = PackedVec; + static constexpr int CVT_FP4_NUM_THREADS_PER_SF = (CVT_FP4_SF_VEC_SIZE / CVT_FP4_ELTS_PER_THREAD); + static_assert(sizeof(PackedVec) == sizeof(Type) * CVT_FP4_ELTS_PER_THREAD, "Vec size is not matched."); + + // Input tensor row/col loops. + for (int rowIdx = blockIdx.x; rowIdx < numRows; rowIdx += gridDim.x) { + for (int colIdx = threadIdx.x; colIdx < numCols / CVT_FP4_ELTS_PER_THREAD; colIdx += blockDim.x) { + int64_t inOffset = rowIdx * (numCols / CVT_FP4_ELTS_PER_THREAD) + colIdx; + PackedVec in_vec = reinterpret_cast(in)[inOffset]; + // Get the output tensor offset. + // Same as inOffset because 8 elements are packed into one uint32_t. + int64_t outOffset = inOffset; + auto& out_pos = out[outOffset]; + + auto sf_out = + get_sf_out_address(rowIdx, colIdx, numCols, SFout); + + out_pos = cvt_warp_fp16_to_fp4(in_vec, sf_out); + } + } +// #endif +} + +template +void invokeFP4Quantization( + int m, + int n, + T const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream) { + // Grid, Block size. + // Each thread converts 8 values. + dim3 block(std::min(int(n / ELTS_PER_THREAD), 256)); + // Get number of blocks per SM (assume we can fully utilize the SM). + int const numBlocksPerSM = 1536 / block.x; + dim3 grid(std::min(int(m), multiProcessorCount * numBlocksPerSM)); + + // Launch the cvt kernel. + cvt_fp16_to_fp4<<>>( + m, n, input, reinterpret_cast(output), reinterpret_cast(SFOuput)); +} + +// Instantiate the function. +template void invokeFP4Quantization( + int m, + int n, + half const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream); + +template void invokeFP4Quantization( + int m, + int n, + __nv_bfloat16 const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream); + +inline int getMultiProcessorCount() { + static int multi_processor_count = []() { + int device_id = 0; + int count = 0; + + // Get the current CUDA device ID + CHECK_CUDA_SUCCESS(cudaGetDevice(&device_id)); + + // Get the number of multiprocessors for the current device + CHECK_CUDA_SUCCESS(cudaDeviceGetAttribute(&count, cudaDevAttrMultiProcessorCount, device_id)); + + return count; // Initialize the static variable + }(); + + return multi_processor_count; // Return the cached value on subsequent calls +} + +void scaled_mxfp4_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf) { + int32_t m = input.size(0); + int32_t n = input.size(1); + + TORCH_CHECK(n % 16 == 0, "The N dimension must be multiple of 16."); + + int multiProcessorCount = getMultiProcessorCount(); + + auto sf_out = static_cast(output_sf.data_ptr()); + auto output_ptr = static_cast(output.data_ptr()); + at::cuda::CUDAGuard device_guard{(char)input.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(input.get_device()); + + switch (input.scalar_type()) { + case torch::kHalf: { + auto input_ptr = reinterpret_cast(input.data_ptr()); + invokeFP4Quantization(m, n, input_ptr, output_ptr, sf_out, multiProcessorCount, stream); + break; + } + case torch::kBFloat16: { + auto input_ptr = reinterpret_cast<__nv_bfloat16 const*>(input.data_ptr()); + invokeFP4Quantization(m, n, input_ptr, output_ptr, sf_out, multiProcessorCount, stream); + break; + } + default: { + std::cerr << "Observing: " << input.scalar_type() << " for the input datatype which is invalid"; + throw std::runtime_error("Unsupported input data type for quantize_to_fp4."); + } + } +} diff --git a/lightx2v_kernel/csrc/gemm/mxfp4_scaled_mm_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/mxfp4_scaled_mm_kernels_sm120.cu new file mode 100644 index 0000000..18d0391 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/mxfp4_scaled_mm_kernels_sm120.cu @@ -0,0 +1,323 @@ +#include +#include +#include + +// clang-format off +#include "cutlass/cutlass.h" +#include "cutlass/epilogue/fusion/operations.hpp" +#include "cutlass/gemm/collective/collective_builder.hpp" +#include "cutlass/epilogue/collective/collective_builder.hpp" +#include "cutlass/gemm/device/gemm_universal_adapter.h" +#include "cutlass/gemm/kernel/gemm_universal.hpp" +#include "cutlass/util/packed_stride.hpp" +// clang-format on + +#define CUTLASS_CHECK(status) \ + { \ + cutlass::Status error = status; \ + TORCH_CHECK(error == cutlass::Status::kSuccess, cutlassGetStatusString(error)); \ + } + +#define CHECK_TYPE(x, st, m) TORCH_CHECK(x.scalar_type() == st, "Inconsistency of Tensor type:", m) +#define CHECK_TH_CUDA(x, m) TORCH_CHECK(x.is_cuda(), m, "must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x, m) TORCH_CHECK(x.is_contiguous(), m, "must be contiguous") +#define CHECK_INPUT(x, st, m) \ + CHECK_TH_CUDA(x, m); \ + CHECK_CONTIGUOUS(x, m); \ + CHECK_TYPE(x, st, m) + + +using namespace cute; + + +struct Mxfp4GemmSm120 { + ///////////////////////////////////////////////////////////////////////////////////////////////// + /// GEMM kernel configurations + ///////////////////////////////////////////////////////////////////////////////////////////////// + + // A matrix configuration + using ElementA = cutlass::mx_float4_t; // Element type for A matrix operand + using LayoutATag = cutlass::layout::RowMajor; // Layout type for A matrix operand + static constexpr int AlignmentA = 128; // Memory access granularity/alignment of A matrix in units of elements (up to 16 bytes) + + // B matrix configuration + using ElementB = cutlass::mx_float4_t; // Element type for B matrix operand + using LayoutBTag = cutlass::layout::ColumnMajor; // Layout type for B matrix operand + static constexpr int AlignmentB = 128; // Memory access granularity/alignment of B matrix in units of elements (up to 16 bytes) + + // C/D matrix configuration + using ElementD = cutlass::bfloat16_t; // Element type for D matrix operand + using ElementC = cutlass::bfloat16_t; // Element type for C matrix operand + using LayoutCTag = cutlass::layout::RowMajor; // Layout type for C matrix operand + using LayoutDTag = cutlass::layout::RowMajor; // Layout type for D matrix operand + static constexpr int AlignmentD = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + static constexpr int AlignmentC = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + // Kernel functional config + using ElementAccumulator = float; // Element type for internal accumulation + using ArchTag = cutlass::arch::Sm120; // Tag indicating the minimum SM that supports the intended feature + using OperatorClass = cutlass::arch::OpClassBlockScaledTensorOp; // Operator class tag + + // Kernel Perf config + using ThreadBlockShape = Shape<_128,_128,_128>; // Threadblock's tile size + using ClusterShape = Shape<_1,_1,_1>; // Shape of the threadblocks in a cluster + + // use per-column bias, i.e. every column has different bias + using EVTOp = cutlass::epilogue::fusion::LinCombPerColBias; + + using CollectiveEpilogue = typename cutlass::epilogue::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ThreadBlockShape, ClusterShape, + cutlass::epilogue::collective::EpilogueTileAuto, + ElementAccumulator, ElementAccumulator, + ElementC, LayoutCTag, AlignmentC, + ElementD, LayoutDTag, AlignmentD, + cutlass::epilogue::collective::EpilogueScheduleAuto, // Epilogue schedule policy + EVTOp + >::CollectiveOp; + + using CollectiveMainloop = typename cutlass::gemm::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ElementA, LayoutATag, AlignmentA, + ElementB, LayoutBTag, AlignmentB, + ElementAccumulator, + ThreadBlockShape, ClusterShape, + cutlass::gemm::collective::StageCountAutoCarveout(sizeof(typename CollectiveEpilogue::SharedStorage))>, + cutlass::gemm::collective::KernelScheduleAuto // Kernel schedule policy. Auto defaults to cooperative kernel schedule + >::CollectiveOp; + + using GemmKernel = cutlass::gemm::kernel::GemmUniversal< + Shape, // Indicates ProblemShape + CollectiveMainloop, + CollectiveEpilogue, + void>; + + using Gemm = cutlass::gemm::device::GemmUniversalAdapter; + + // Reference device GEMM implementation type + using StrideA = typename Gemm::GemmKernel::StrideA; + using LayoutA = decltype(cute::make_layout(make_shape(0,0,0), StrideA{})); + using LayoutSFA = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFA; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideB = typename Gemm::GemmKernel::StrideB; + using LayoutB = decltype(cute::make_layout(make_shape(0,0,0), StrideB{})); + using LayoutSFB = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFB; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideC = typename Gemm::GemmKernel::StrideC; + using LayoutC = decltype(cute::make_layout(make_shape(0,0,0), StrideC{})); + using StrideD = typename Gemm::GemmKernel::StrideD; + using LayoutD = decltype(cute::make_layout(make_shape(0,0,0), StrideD{})); +}; + + +// Populates a Gemm::Arguments structure from the given commandline options +typename Mxfp4GemmSm120::Gemm::Arguments args_from_options_mxp4_mxfp4( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t M, + int64_t N, + int64_t K) { + using Sm1xxBlkScaledConfig = typename Mxfp4GemmSm120::Gemm::GemmKernel::CollectiveMainloop::Sm1xxBlkScaledConfig; + + int m = static_cast(M); + int n = static_cast(N); + int k = static_cast(K); + auto stride_A = cutlass::make_cute_packed_stride(Mxfp4GemmSm120::StrideA{}, {m, k, 1}); + auto stride_B = cutlass::make_cute_packed_stride(Mxfp4GemmSm120::StrideB{}, {n, k, 1}); + auto stride_D = cutlass::make_cute_packed_stride(Mxfp4GemmSm120::StrideD{}, {m, n, 1}); + + auto layout_SFA = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFA(cute::make_shape(m, n, k, 1)); + auto layout_SFB = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFB(cute::make_shape(m, n, k, 1)); + + if (bias){ + using StrideBias = Stride; + + typename Mxfp4GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + fusion_args.bias_ptr = static_cast(bias->data_ptr()); + fusion_args.dBias = StrideBias{}; + return arguments; + } else { + typename Mxfp4GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + return arguments; + } +} + + +void runGemmMxfp4Sm120( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t m, + int64_t n, + int64_t k, + cudaStream_t stream) { + typename Mxfp4GemmSm120::Gemm gemm; + + auto arguments = args_from_options_mxp4_mxfp4(D, A, B, A_sf, B_sf, alpha, bias, m, n, k); + size_t workspace_size = Mxfp4GemmSm120::Gemm::get_workspace_size(arguments); + auto const workspace_options = torch::TensorOptions().dtype(torch::kUInt8).device(A.device()); + auto workspace = torch::empty(workspace_size, workspace_options); + + CUTLASS_CHECK(gemm.can_implement(arguments)); + CUTLASS_CHECK(gemm.initialize(arguments, workspace.data_ptr(), stream)); + CUTLASS_CHECK(gemm.run(arguments, workspace.data_ptr(), stream)); +} + + +constexpr auto FLOAT4_E2M1X2 = at::ScalarType::Byte; +constexpr auto SF_DTYPE = at::ScalarType::Float8_e8m0fnu; + +void cutlass_scaled_mxfp4_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias) { + + CHECK_INPUT(A, FLOAT4_E2M1X2, "a"); + CHECK_INPUT(B, FLOAT4_E2M1X2, "b"); + + CHECK_INPUT(A_sf, SF_DTYPE, "scale_a"); + CHECK_INPUT(B_sf, SF_DTYPE, "scale_b"); + CHECK_INPUT(alpha, at::ScalarType::Float, "alpha"); + + + TORCH_CHECK(A.dim() == 2, "a must be a matrix"); + TORCH_CHECK(B.dim() == 2, "b must be a matrix"); + TORCH_CHECK( + A.sizes()[1] == B.sizes()[1], + "a and b shapes cannot be multiplied (", + A.sizes()[0], + "x", + A.sizes()[1], + " and ", + B.sizes()[0], + "x", + B.sizes()[1], + ")"); + + auto const m = A.sizes()[0]; + auto const n = B.sizes()[0]; + auto const k = A.sizes()[1] * 2; + + constexpr int alignment = 128; + TORCH_CHECK( + k % alignment == 0, + "Expected k to be divisible by ", + alignment, + ", but got a shape: (", + A.sizes()[0], + "x", + A.sizes()[1], + "), k: ", + k, + "."); + TORCH_CHECK( + n % alignment == 0, + "Expected n to be divisible by ", + alignment, + ", but got b shape: (", + B.sizes()[0], + "x", + B.sizes()[1], + ")."); + + auto round_up = [](int x, int y) { return (x + y - 1) / y * y; }; + int rounded_m = round_up(m, 128); + int rounded_n = round_up(n, 128); + // Since k is divisible by 128 (alignment), k / 32 is guaranteed to be an + // integer. + int rounded_k = round_up(k / 32, 4); + + TORCH_CHECK(A_sf.dim() == 2, "scale_a must be a matrix"); + TORCH_CHECK(B_sf.dim() == 2, "scale_b must be a matrix"); + TORCH_CHECK( + A_sf.sizes()[1] == B_sf.sizes()[1], + "scale_a and scale_b shapes cannot be multiplied (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + " and ", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + TORCH_CHECK( + A_sf.sizes()[0] == rounded_m && A_sf.sizes()[1] == rounded_k, + "scale_a must be padded and swizzled to a shape (", + rounded_m, + "x", + rounded_k, + "), but got a shape (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + ")"); + TORCH_CHECK( + B_sf.sizes()[0] == rounded_n && B_sf.sizes()[1] == rounded_k, + "scale_b must be padded and swizzled to a shape (", + rounded_n, + "x", + rounded_k, + "), but got a shape (", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + + auto out_dtype = D.dtype(); + at::cuda::CUDAGuard device_guard{(char)A.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(A.get_device()); + + runGemmMxfp4Sm120(D, A, B, A_sf, B_sf, alpha, bias, m, n, k, stream); +} diff --git a/lightx2v_kernel/csrc/gemm/mxfp6_mxfp8_scaled_mm_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/mxfp6_mxfp8_scaled_mm_kernels_sm120.cu new file mode 100644 index 0000000..7b2e178 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/mxfp6_mxfp8_scaled_mm_kernels_sm120.cu @@ -0,0 +1,324 @@ +#include +#include +#include + +// clang-format off +#include "cutlass/cutlass.h" +#include "cutlass/epilogue/fusion/operations.hpp" +#include "cutlass/gemm/collective/collective_builder.hpp" +#include "cutlass/epilogue/collective/collective_builder.hpp" +#include "cutlass/gemm/device/gemm_universal_adapter.h" +#include "cutlass/gemm/kernel/gemm_universal.hpp" +#include "cutlass/util/packed_stride.hpp" +// clang-format on + +#define CUTLASS_CHECK(status) \ + { \ + cutlass::Status error = status; \ + TORCH_CHECK(error == cutlass::Status::kSuccess, cutlassGetStatusString(error)); \ + } + +#define CHECK_TYPE(x, st, m) TORCH_CHECK(x.scalar_type() == st, "Inconsistency of Tensor type:", m) +#define CHECK_TH_CUDA(x, m) TORCH_CHECK(x.is_cuda(), m, "must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x, m) TORCH_CHECK(x.is_contiguous(), m, "must be contiguous") +#define CHECK_INPUT(x, st, m) \ + CHECK_TH_CUDA(x, m); \ + CHECK_CONTIGUOUS(x, m); \ + CHECK_TYPE(x, st, m) + + +using namespace cute; + + +struct Mxfp6Mxfp8GemmSm120 { + ///////////////////////////////////////////////////////////////////////////////////////////////// + /// GEMM kernel configurations + ///////////////////////////////////////////////////////////////////////////////////////////////// + + // A matrix configuration + using ElementA = cutlass::mx_float8_t; // Element type for A matrix operand + using LayoutATag = cutlass::layout::RowMajor; // Layout type for A matrix operand + static constexpr int AlignmentA = 16; // Memory access granularity/alignment of A matrix in units of elements (up to 16 bytes) + + // B matrix configuration + using ElementB = cutlass::mx_float6_t; // Element type for B matrix operand + using LayoutBTag = cutlass::layout::ColumnMajor; // Layout type for B matrix operand + static constexpr int AlignmentB = 128; // Memory access granularity/alignment of B matrix in units of elements (up to 16 bytes) + + // C/D matrix configuration + using ElementD = cutlass::bfloat16_t; // Element type for D matrix operand + using ElementC = cutlass::bfloat16_t; // Element type for C matrix operand + using LayoutCTag = cutlass::layout::RowMajor; // Layout type for C matrix operand + using LayoutDTag = cutlass::layout::RowMajor; // Layout type for D matrix operand + static constexpr int AlignmentD = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + static constexpr int AlignmentC = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + // Kernel functional config + using ElementAccumulator = float; // Element type for internal accumulation + using ArchTag = cutlass::arch::Sm120; // Tag indicating the minimum SM that supports the intended feature + using OperatorClass = cutlass::arch::OpClassBlockScaledTensorOp; // Operator class tag + + // Kernel Perf config + using ThreadBlockShape = Shape<_128,_128,_128>; // Threadblock's tile size + using ClusterShape = Shape<_1,_1,_1>; // Shape of the threadblocks in a cluster + + // use per-column bias, i.e. every column has different bias + using EVTOp = cutlass::epilogue::fusion::LinCombPerColBias; + + using CollectiveEpilogue = typename cutlass::epilogue::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ThreadBlockShape, ClusterShape, + cutlass::epilogue::collective::EpilogueTileAuto, + ElementAccumulator, ElementAccumulator, + ElementC, LayoutCTag, AlignmentC, + ElementD, LayoutDTag, AlignmentD, + cutlass::epilogue::collective::EpilogueScheduleAuto, // Epilogue schedule policy + EVTOp + >::CollectiveOp; + + using CollectiveMainloop = typename cutlass::gemm::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ElementA, LayoutATag, AlignmentA, + ElementB, LayoutBTag, AlignmentB, + ElementAccumulator, + ThreadBlockShape, ClusterShape, + cutlass::gemm::collective::StageCountAutoCarveout(sizeof(typename CollectiveEpilogue::SharedStorage))>, + cutlass::gemm::collective::KernelScheduleAuto // Kernel schedule policy. Auto defaults to cooperative kernel schedule + >::CollectiveOp; + + using GemmKernel = cutlass::gemm::kernel::GemmUniversal< + Shape, // Indicates ProblemShape + CollectiveMainloop, + CollectiveEpilogue, + void>; + + using Gemm = cutlass::gemm::device::GemmUniversalAdapter; + + // Reference device GEMM implementation type + using StrideA = typename Gemm::GemmKernel::StrideA; + using LayoutA = decltype(cute::make_layout(make_shape(0,0,0), StrideA{})); + using LayoutSFA = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFA; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideB = typename Gemm::GemmKernel::StrideB; + using LayoutB = decltype(cute::make_layout(make_shape(0,0,0), StrideB{})); + using LayoutSFB = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFB; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideC = typename Gemm::GemmKernel::StrideC; + using LayoutC = decltype(cute::make_layout(make_shape(0,0,0), StrideC{})); + using StrideD = typename Gemm::GemmKernel::StrideD; + using LayoutD = decltype(cute::make_layout(make_shape(0,0,0), StrideD{})); +}; + + +// Populates a Gemm::Arguments structure from the given commandline options +typename Mxfp6Mxfp8GemmSm120::Gemm::Arguments args_from_options_mxfp6_mxfp8( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t M, + int64_t N, + int64_t K) { + using Sm1xxBlkScaledConfig = typename Mxfp6Mxfp8GemmSm120::Gemm::GemmKernel::CollectiveMainloop::Sm1xxBlkScaledConfig; + + int m = static_cast(M); + int n = static_cast(N); + int k = static_cast(K); + auto stride_A = cutlass::make_cute_packed_stride(Mxfp6Mxfp8GemmSm120::StrideA{}, {m, k, 1}); + auto stride_B = cutlass::make_cute_packed_stride(Mxfp6Mxfp8GemmSm120::StrideB{}, {n, k, 1}); + auto stride_D = cutlass::make_cute_packed_stride(Mxfp6Mxfp8GemmSm120::StrideD{}, {m, n, 1}); + + auto layout_SFA = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFA(cute::make_shape(m, n, k, 1)); + auto layout_SFB = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFB(cute::make_shape(m, n, k, 1)); + + if (bias){ + using StrideBias = Stride; + + typename Mxfp6Mxfp8GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + fusion_args.bias_ptr = static_cast(bias->data_ptr()); + fusion_args.dBias = StrideBias{}; + return arguments; + } else { + typename Mxfp6Mxfp8GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + return arguments; + } +} + + +void runGemmMxfp6Mxfp8Sm120( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t m, + int64_t n, + int64_t k, + cudaStream_t stream) { + typename Mxfp6Mxfp8GemmSm120::Gemm gemm; + + auto arguments = args_from_options_mxfp6_mxfp8(D, A, B, A_sf, B_sf, alpha, bias, m, n, k); + size_t workspace_size = Mxfp6Mxfp8GemmSm120::Gemm::get_workspace_size(arguments); + auto const workspace_options = torch::TensorOptions().dtype(torch::kUInt8).device(A.device()); + auto workspace = torch::empty(workspace_size, workspace_options); + + CUTLASS_CHECK(gemm.can_implement(arguments)); + CUTLASS_CHECK(gemm.initialize(arguments, workspace.data_ptr(), stream)); + CUTLASS_CHECK(gemm.run(arguments, workspace.data_ptr(), stream)); +} + + +constexpr auto FP6_FP8_TYPE = at::ScalarType::Byte; +constexpr auto SF_DTYPE = at::ScalarType::Float8_e8m0fnu; + +void cutlass_scaled_mxfp6_mxfp8_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias) { + + CHECK_INPUT(A, FP6_FP8_TYPE, "a"); + CHECK_INPUT(B, FP6_FP8_TYPE, "b"); + + CHECK_INPUT(A_sf, SF_DTYPE, "scale_a"); + CHECK_INPUT(B_sf, SF_DTYPE, "scale_b"); + CHECK_INPUT(alpha, at::ScalarType::Float, "alpha"); + + + TORCH_CHECK(A.dim() == 2, "a must be a matrix"); + TORCH_CHECK(B.dim() == 2, "b must be a matrix"); +// TORCH_CHECK( +// A.sizes()[1] == B.sizes()[1], +// "a and b shapes cannot be multiplied (", +// A.sizes()[0], +// "x", +// A.sizes()[1], +// " and ", +// B.sizes()[0], +// "x", +// B.sizes()[1], +// ")"); + + auto const m = A.sizes()[0]; + auto const n = B.sizes()[0]; + auto const k = A.sizes()[1]; + + constexpr int alignment_a = 16; + constexpr int alignment_b = 128; + TORCH_CHECK( + k % alignment_a == 0, + "Expected k to be divisible by ", + alignment_a, + ", but got a shape: (", + A.sizes()[0], + "x", + A.sizes()[1], + "), k: ", + k, + "."); + TORCH_CHECK( + n % alignment_b == 0, + "Expected n to be divisible by ", + alignment_b, + ", but got b shape: (", + B.sizes()[0], + "x", + B.sizes()[1], + ")."); + + auto round_up = [](int x, int y) { return (x + y - 1) / y * y; }; + int rounded_m = round_up(m, 128); + int rounded_n = round_up(n, 128); + // Since k is divisible by 32 (alignment), k / 16 is guaranteed to be an + // integer. + int rounded_k = round_up(k / 32, 4); + + TORCH_CHECK(A_sf.dim() == 2, "scale_a must be a matrix"); + TORCH_CHECK(B_sf.dim() == 2, "scale_b must be a matrix"); + TORCH_CHECK( + A_sf.sizes()[1] == B_sf.sizes()[1], + "scale_a and scale_b shapes cannot be multiplied (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + " and ", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + TORCH_CHECK( + A_sf.sizes()[0] == rounded_m && A_sf.sizes()[1] == rounded_k, + "scale_a must be padded and swizzled to a shape (", + rounded_m, + "x", + rounded_k, + "), but got a shape (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + ")"); + TORCH_CHECK( + B_sf.sizes()[0] == rounded_n && B_sf.sizes()[1] == rounded_k, + "scale_b must be padded and swizzled to a shape (", + rounded_n, + "x", + rounded_k, + "), but got a shape (", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + + auto out_dtype = D.dtype(); + at::cuda::CUDAGuard device_guard{(char)A.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(A.get_device()); + + runGemmMxfp6Mxfp8Sm120(D, A, B, A_sf, B_sf, alpha, bias, m, n, k, stream); +} diff --git a/lightx2v_kernel/csrc/gemm/mxfp6_quant_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/mxfp6_quant_kernels_sm120.cu new file mode 100644 index 0000000..99b684b --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/mxfp6_quant_kernels_sm120.cu @@ -0,0 +1,348 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +// Get type2 from type or vice versa (applied to half and bfloat16) +template +struct TypeConverter { + using Type = half2; +}; // keep for generality + +template <> +struct TypeConverter { + using Type = half; +}; + +template <> +struct TypeConverter { + using Type = half2; +}; + +template <> +struct TypeConverter<__nv_bfloat162> { + using Type = __nv_bfloat16; +}; + +template <> +struct TypeConverter<__nv_bfloat16> { + using Type = __nv_bfloat162; +}; + +#define ELTS_PER_THREAD 8 + +constexpr int CVT_FP6_ELTS_PER_THREAD = 8; +constexpr int CVT_FP6_SF_VEC_SIZE = 32; + +struct uint8x6_t { + uint8_t elts[6]; +}; + +// Convert 4 float2 values into 8 e3m2 values (represented as one uint8x6_t). +inline __device__ uint8x6_t fp32_vec_to_e3m2(float2 (&array)[4]) { + uint64_t val; + asm volatile( + "{\n" + ".reg .b16 pack0;\n" + ".reg .b16 pack1;\n" + ".reg .b16 pack2;\n" + ".reg .b16 pack3;\n" + "cvt.rn.satfinite.e3m2x2.f32 pack0, %2, %1;\n" + "cvt.rn.satfinite.e3m2x2.f32 pack1, %4, %3;\n" + "cvt.rn.satfinite.e3m2x2.f32 pack2, %6, %5;\n" + "cvt.rn.satfinite.e3m2x2.f32 pack3, %8, %7;\n" + "mov.b64 %0, {pack0, pack1, pack2, pack3};\n" + "}" + : "=l"(val) + : "f"(array[0].x), + "f"(array[0].y), + "f"(array[1].x), + "f"(array[1].y), + "f"(array[2].x), + "f"(array[2].y), + "f"(array[3].x), + "f"(array[3].y)); + + uint8x6_t result; + + // pack 8 uint8_t into 6 uint8_t + // here is how to pack: + // 4个fp6 a b c d. a:[a5 a4 a3 a2 a1 a0], b..., c..., d... + // 3个unint8 pack0 pack1 pack2 + // packed0: [b1 b0][a5 a4 a3 a2 a1 a0] + // packed1: [c3 c2 c1 c0][b5 b4 b3 b2] + // packed2: [d5 d4 d3 d2 d1 d0][c5 c4] + + // lower 4 uint8_t + uint8_t l_val_0 = val & 0xFF; + uint8_t l_val_1 = (val >> 8) & 0xFF; + uint8_t l_val_2 = (val >> 16) & 0xFF; + uint8_t l_val_3 = (val >> 24) & 0xFF; + // higher 4 uint8_t + uint8_t h_val_0 = (val >> 32) & 0xFF; + uint8_t h_val_1 = (val >> 40) & 0xFF; + uint8_t h_val_2 = (val >> 48) & 0xFF; + uint8_t h_val_3 = (val >> 56) & 0xFF; + + // pack result + result.elts[0] = (l_val_1 << 6) | l_val_0; + result.elts[1] = (l_val_2 << 4) | (l_val_1 >> 2); + result.elts[2] = (l_val_3 << 2) | (l_val_2 >> 4); + result.elts[3] = (h_val_1 << 6) | h_val_0; + result.elts[4] = (h_val_2 << 4) | (h_val_1 >> 2); + result.elts[5] = (h_val_3 << 2) | (h_val_2 >> 4); + + return result; +} + +// Fast reciprocal. +inline __device__ float reciprocal_approximate_ftz(float a) { + float b; + asm volatile("rcp.approx.ftz.f32 %0, %1;\n" : "=f"(b) : "f"(a)); + return b; +} + +template +__device__ uint8_t* get_sf_out_address(int rowIdx, int colIdx, int numCols, SFType* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + static_assert(CVT_FP6_NUM_THREADS_PER_SF == 4); + + // one of 4 threads write one SF to global memory. + // TODO: stage through smem for packed STG.32 + // is it better than STG.8 from 4 threads ? + if (threadIdx.x % CVT_FP6_NUM_THREADS_PER_SF == 0) { + // SF vector index (32 elements share one SF in the K dimension). + int32_t kIdx = colIdx / CVT_FP6_NUM_THREADS_PER_SF; + int32_t mIdx = rowIdx; + + // SF layout [numMTiles, numKTiles, 32 (mTile), 4 (mTile), 4(kTile)] + // --> index [mTileIdx, kTileIdx, outerMIdx, innerMIdx, innerKIdx] + + int32_t mTileIdx = mIdx / (32 * 4); + // SF vector size 32. + int factor = CVT_FP6_SF_VEC_SIZE * 4; + int32_t numKTiles = (numCols + factor - 1) / factor; + int64_t mTileStride = numKTiles * 32 * 4 * 4; + + int32_t kTileIdx = (kIdx / 4); + int64_t kTileStride = 32 * 4 * 4; + + // M tile layout [32, 4] is column-major. + int32_t outerMIdx = (mIdx % 32); // same as (mIdx % 128) % 32 + int64_t outerMStride = 4 * 4; + + int32_t innerMIdx = (mIdx % (32 * 4)) / 32; + int64_t innerMStride = 4; + + int32_t innerKIdx = (kIdx % 4); + int64_t innerKStride = 1; + + // Compute the global offset. + int64_t SFOffset = mTileIdx * mTileStride + kTileIdx * kTileStride + outerMIdx * outerMStride + + innerMIdx * innerMStride + innerKIdx * innerKStride; + + return reinterpret_cast(SFout) + SFOffset; + } else { + // Other threads do not write to SFout. + return nullptr; + } +} + +// Define a 16 bytes packed data type. +template +struct PackedVec { + typename TypeConverter::Type elts[4]; +}; + +// template <> +// struct PackedVec<__nv_fp8_e4m3> { +// __nv_fp8x2_e4m3 elts[8]; +// }; + +template // Type can be half or bfloat16 +__device__ uint8x6_t cvt_warp_fp16_to_fp6(PackedVec& vec, uint8_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + // Get absolute maximum values among the local 8 values. + auto localMax = __habs2(vec.elts[0]); + +// Local maximum value. +#pragma unroll + for (int i = 1; i < CVT_FP6_ELTS_PER_THREAD / 2; i++) { + localMax = __hmax2(localMax, __habs2(vec.elts[i])); + } + + // Get the absolute maximum among all 32 values (four threads). + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 1), localMax); + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 2), localMax); + // Get the final absolute maximum values. + float vecMax = float(__hmax(localMax.x, localMax.y)); + + // Get the SF (max value of the vector / max value of e3m2). + // maximum value of e3m2 = 28.0. + // TODO: use half as compute data type. + float SFValue = (vecMax / 28.0f); + // 8 bits representation of the SF. + uint8_t fp8SFVal; + // Write the SF to global memory (STG.8). + __nv_fp8_e8m0 tmp; + tmp.__x = __nv_cvt_float_to_e8m0(SFValue, __NV_SATFINITE, cudaRoundPosInf); + SFValue = static_cast(tmp); + fp8SFVal = tmp.__x; + + + float outputScale = + SFValue != 0 ? reciprocal_approximate_ftz(SFValue) : 0.0f; + + if (SFout) { + // Write the SF to global memory (STG.8). + *SFout = fp8SFVal; + } + + // Convert the input to float. + float2 fp2Vals[CVT_FP6_ELTS_PER_THREAD / 2]; + +#pragma unroll + for (int i = 0; i < CVT_FP6_ELTS_PER_THREAD / 2; i++) { + if constexpr (std::is_same_v) { + fp2Vals[i] = __half22float2(vec.elts[i]); + } else { + fp2Vals[i] = __bfloat1622float2(vec.elts[i]); + } + fp2Vals[i].x *= outputScale; + fp2Vals[i].y *= outputScale; + } + + // Convert to e3m2 values. + uint8x6_t e3m2Vec = fp32_vec_to_e3m2(fp2Vals); + + return e3m2Vec; +} + + +template // Type can be half or bfloat16 +__global__ void +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) +__launch_bounds__(256, 6) cvt_fp16_to_fp6( +// #else +// cvt_fp16_to_fp6( +// #endif + int32_t numRows, int32_t numCols, Type const* in, uint8x6_t* out, uint32_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + using PackedVec = PackedVec; + static constexpr int CVT_FP6_NUM_THREADS_PER_SF = (CVT_FP6_SF_VEC_SIZE / CVT_FP6_ELTS_PER_THREAD); + static_assert(sizeof(PackedVec) == sizeof(Type) * CVT_FP6_ELTS_PER_THREAD, "Vec size is not matched."); + + // Input tensor row/col loops. + for (int rowIdx = blockIdx.x; rowIdx < numRows; rowIdx += gridDim.x) { + for (int colIdx = threadIdx.x; colIdx < numCols / CVT_FP6_ELTS_PER_THREAD; colIdx += blockDim.x) { + int64_t inOffset = rowIdx * (numCols / CVT_FP6_ELTS_PER_THREAD) + colIdx; + PackedVec in_vec = reinterpret_cast(in)[inOffset]; + // Get the output tensor offset. + // Same as inOffset because 8 elements(E3M2) are packed into one uint8x6_t. + int64_t outOffset = inOffset; + auto& out_pos = out[outOffset]; + + auto sf_out = + get_sf_out_address(rowIdx, colIdx, numCols, SFout); + + out_pos = cvt_warp_fp16_to_fp6(in_vec, sf_out); + } + } +// #endif +} + +template +void invokeFP6Quantization( + int m, + int n, + T const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream) { + // Grid, Block size. + // Each thread converts 8 values. + dim3 block(std::min(int(n / ELTS_PER_THREAD), 256)); + // Get number of blocks per SM (assume we can fully utilize the SM). + int const numBlocksPerSM = 1536 / block.x; + dim3 grid(std::min(int(m), multiProcessorCount * numBlocksPerSM)); + + // Launch the cvt kernel. + cvt_fp16_to_fp6 + <<>>( + m, n, input, reinterpret_cast(output), reinterpret_cast(SFOuput)); +} + +// Instantiate the function. +template void invokeFP6Quantization( + int m, + int n, + half const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream); + +template void invokeFP6Quantization( + int m, + int n, + __nv_bfloat16 const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream); + +inline int getMultiProcessorCount() { + static int multi_processor_count = []() { + int device_id = 0; + int count = 0; + + // Get the current CUDA device ID + CHECK_CUDA_SUCCESS(cudaGetDevice(&device_id)); + + // Get the number of multiprocessors for the current device + CHECK_CUDA_SUCCESS(cudaDeviceGetAttribute(&count, cudaDevAttrMultiProcessorCount, device_id)); + + return count; // Initialize the static variable + }(); + + return multi_processor_count; // Return the cached value on subsequent calls +} + +void scaled_mxfp6_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf) { + int32_t m = input.size(0); + int32_t n = input.size(1); + + TORCH_CHECK(n % 32 == 0, "The N dimension must be multiple of 32."); + + int multiProcessorCount = getMultiProcessorCount(); + + auto sf_out = static_cast(output_sf.data_ptr()); + auto output_ptr = static_cast(output.data_ptr()); + at::cuda::CUDAGuard device_guard{(char)input.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(input.get_device()); + + switch (input.scalar_type()) { + case torch::kHalf: { + auto input_ptr = reinterpret_cast(input.data_ptr()); + invokeFP6Quantization(m, n, input_ptr, output_ptr, sf_out, multiProcessorCount, stream); + break; + } + case torch::kBFloat16: { + auto input_ptr = reinterpret_cast<__nv_bfloat16 const*>(input.data_ptr()); + invokeFP6Quantization(m, n, input_ptr, output_ptr, sf_out, multiProcessorCount, stream); + break; + } + default: { + std::cerr << "Observing: " << input.scalar_type() << " for the input datatype which is invalid"; + throw std::runtime_error("Unsupported input data type for quantize_to_fp6."); + } + } +} diff --git a/lightx2v_kernel/csrc/gemm/mxfp8_quant_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/mxfp8_quant_kernels_sm120.cu new file mode 100644 index 0000000..2c8cd81 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/mxfp8_quant_kernels_sm120.cu @@ -0,0 +1,315 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +// Get type2 from type or vice versa (applied to half and bfloat16) +template +struct TypeConverter { + using Type = half2; +}; // keep for generality + +template <> +struct TypeConverter { + using Type = half; +}; + +template <> +struct TypeConverter { + using Type = half2; +}; + +template <> +struct TypeConverter<__nv_bfloat162> { + using Type = __nv_bfloat16; +}; + +template <> +struct TypeConverter<__nv_bfloat16> { + using Type = __nv_bfloat162; +}; + +#define ELTS_PER_THREAD 8 + +constexpr int CVT_FP8_ELTS_PER_THREAD = 8; +constexpr int CVT_FP8_SF_VEC_SIZE = 32; + + +// Convert 4 float2 values into 8 e4m3 values (represented as one uint64_t). +inline __device__ uint64_t fp32_vec_to_e4m3(float2 (&array)[4]) { + uint64_t val; + asm volatile( + "{\n" + ".reg .b16 pack0;\n" + ".reg .b16 pack1;\n" + ".reg .b16 pack2;\n" + ".reg .b16 pack3;\n" + "cvt.rn.satfinite.e4m3x2.f32 pack0, %2, %1;\n" + "cvt.rn.satfinite.e4m3x2.f32 pack1, %4, %3;\n" + "cvt.rn.satfinite.e4m3x2.f32 pack2, %6, %5;\n" + "cvt.rn.satfinite.e4m3x2.f32 pack3, %8, %7;\n" + "mov.b64 %0, {pack0, pack1, pack2, pack3};\n" + "}" + : "=l"(val) + : "f"(array[0].x), + "f"(array[0].y), + "f"(array[1].x), + "f"(array[1].y), + "f"(array[2].x), + "f"(array[2].y), + "f"(array[3].x), + "f"(array[3].y)); + return val; +} + +// Fast reciprocal. +inline __device__ float reciprocal_approximate_ftz(float a) { + float b; + asm volatile("rcp.approx.ftz.f32 %0, %1;\n" : "=f"(b) : "f"(a)); + return b; +} + +template +__device__ uint8_t* get_sf_out_address(int rowIdx, int colIdx, int numCols, SFType* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + static_assert(CVT_FP8_NUM_THREADS_PER_SF == 4); + + // one of 4 threads write one SF to global memory. + // TODO: stage through smem for packed STG.32 + // is it better than STG.8 from 4 threads ? + if (threadIdx.x % CVT_FP8_NUM_THREADS_PER_SF == 0) { + // SF vector index (16 elements share one SF in the K dimension). + int32_t kIdx = colIdx / CVT_FP8_NUM_THREADS_PER_SF; + int32_t mIdx = rowIdx; + + // SF layout [numMTiles, numKTiles, 32 (mTile), 4 (mTile), 4(kTile)] + // --> index [mTileIdx, kTileIdx, outerMIdx, innerMIdx, innerKIdx] + + int32_t mTileIdx = mIdx / (32 * 4); + // SF vector size 32. + int factor = CVT_FP8_SF_VEC_SIZE * 4; + int32_t numKTiles = (numCols + factor - 1) / factor; + int64_t mTileStride = numKTiles * 32 * 4 * 4; + + int32_t kTileIdx = (kIdx / 4); + int64_t kTileStride = 32 * 4 * 4; + + // M tile layout [32, 4] is column-major. + int32_t outerMIdx = (mIdx % 32); // same as (mIdx % 128) % 32 + int64_t outerMStride = 4 * 4; + + int32_t innerMIdx = (mIdx % (32 * 4)) / 32; + int64_t innerMStride = 4; + + int32_t innerKIdx = (kIdx % 4); + int64_t innerKStride = 1; + + // Compute the global offset. + int64_t SFOffset = mTileIdx * mTileStride + kTileIdx * kTileStride + outerMIdx * outerMStride + + innerMIdx * innerMStride + innerKIdx * innerKStride; + + return reinterpret_cast(SFout) + SFOffset; + } else { + // Other threads do not write to SFout. + return nullptr; + } +} + +// Define a 16 bytes packed data type. +template +struct PackedVec { + typename TypeConverter::Type elts[4]; +}; + +template <> +struct PackedVec<__nv_fp8_e4m3> { + __nv_fp8x2_e4m3 elts[8]; +}; + +// Quantizes the provided PackedVec into the uint64_t output +template // Type can be half or bfloat16 +__device__ uint64_t cvt_warp_fp16_to_fp8(PackedVec& vec, uint8_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + // Get absolute maximum values among the local 8 values. + auto localMax = __habs2(vec.elts[0]); + +// Local maximum value. +#pragma unroll + for (int i = 1; i < CVT_FP8_ELTS_PER_THREAD / 2; i++) { + localMax = __hmax2(localMax, __habs2(vec.elts[i])); + } + + // Get the absolute maximum among all 32 values (four threads). + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 1), localMax); + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 2), localMax); + // Get the final absolute maximum values. + float vecMax = float(__hmax(localMax.x, localMax.y)); + + // Get the SF (max value of the vector / max value of e4m3). + // maximum value of e4m3 = 448.0. + // TODO: use half as compute data type. + float SFValue = (vecMax / 448.0f); + // 8 bits representation of the SF. + uint8_t fp8SFVal; + // Write the SF to global memory (STG.8). + __nv_fp8_e8m0 tmp; + tmp.__x = __nv_cvt_float_to_e8m0(SFValue, __NV_SATFINITE, cudaRoundPosInf); + SFValue = static_cast(tmp); + fp8SFVal = tmp.__x; + + + float outputScale = + SFValue != 0 ? reciprocal_approximate_ftz(SFValue) : 0.0f; + + if (SFout) { + // Write the SF to global memory (STG.8). + *SFout = fp8SFVal; + } + + // Convert the input to float. + float2 fp2Vals[CVT_FP8_ELTS_PER_THREAD / 2]; + +#pragma unroll + for (int i = 0; i < CVT_FP8_ELTS_PER_THREAD / 2; i++) { + if constexpr (std::is_same_v) { + fp2Vals[i] = __half22float2(vec.elts[i]); + } else { + fp2Vals[i] = __bfloat1622float2(vec.elts[i]); + } + fp2Vals[i].x *= outputScale; + fp2Vals[i].y *= outputScale; + } + + // Convert to e4m3 values. + uint64_t e4m3Vec = fp32_vec_to_e4m3(fp2Vals); + + return e4m3Vec; +} + + +template // Type can be half or bfloat16 +__global__ void +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) +__launch_bounds__(256, 6) cvt_fp16_to_fp8( +// #else +// cvt_fp16_to_fp8( +// #endif + int32_t numRows, int32_t numCols, Type const* in, uint64_t* out, uint32_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + using PackedVec = PackedVec; + static constexpr int CVT_FP8_NUM_THREADS_PER_SF = (CVT_FP8_SF_VEC_SIZE / CVT_FP8_ELTS_PER_THREAD); + static_assert(sizeof(PackedVec) == sizeof(Type) * CVT_FP8_ELTS_PER_THREAD, "Vec size is not matched."); + + // Input tensor row/col loops. + for (int rowIdx = blockIdx.x; rowIdx < numRows; rowIdx += gridDim.x) { + for (int colIdx = threadIdx.x; colIdx < numCols / CVT_FP8_ELTS_PER_THREAD; colIdx += blockDim.x) { + int64_t inOffset = rowIdx * (numCols / CVT_FP8_ELTS_PER_THREAD) + colIdx; + PackedVec in_vec = reinterpret_cast(in)[inOffset]; + // Get the output tensor offset. + // Same as inOffset because 8 elements(E4M3) are packed into one uint64_t. + int64_t outOffset = inOffset; + auto& out_pos = out[outOffset]; + + auto sf_out = + get_sf_out_address(rowIdx, colIdx, numCols, SFout); + + out_pos = cvt_warp_fp16_to_fp8(in_vec, sf_out); + } + } +// #endif +} + +template +void invokeFP8Quantization( + int m, + int n, + T const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream) { + // Grid, Block size. + // Each thread converts 8 values. + dim3 block(std::min(int(n / ELTS_PER_THREAD), 256)); + // Get number of blocks per SM (assume we can fully utilize the SM). + int const numBlocksPerSM = 1536 / block.x; + dim3 grid(std::min(int(m), multiProcessorCount * numBlocksPerSM)); + + // Launch the cvt kernel. + cvt_fp16_to_fp8 + <<>>( + m, n, input, reinterpret_cast(output), reinterpret_cast(SFOuput)); +} + +// Instantiate the function. +template void invokeFP8Quantization( + int m, + int n, + half const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream); + +template void invokeFP8Quantization( + int m, + int n, + __nv_bfloat16 const* input, + int64_t* output, + int32_t* SFOuput, + int multiProcessorCount, + cudaStream_t stream); + +inline int getMultiProcessorCount() { + static int multi_processor_count = []() { + int device_id = 0; + int count = 0; + + // Get the current CUDA device ID + CHECK_CUDA_SUCCESS(cudaGetDevice(&device_id)); + + // Get the number of multiprocessors for the current device + CHECK_CUDA_SUCCESS(cudaDeviceGetAttribute(&count, cudaDevAttrMultiProcessorCount, device_id)); + + return count; // Initialize the static variable + }(); + + return multi_processor_count; // Return the cached value on subsequent calls +} + +void scaled_mxfp8_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf) { + int32_t m = input.size(0); + int32_t n = input.size(1); + + TORCH_CHECK(n % 32 == 0, "The N dimension must be multiple of 32."); + + int multiProcessorCount = getMultiProcessorCount(); + + auto sf_out = static_cast(output_sf.data_ptr()); + auto output_ptr = static_cast(output.data_ptr()); + at::cuda::CUDAGuard device_guard{(char)input.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(input.get_device()); + + switch (input.scalar_type()) { + case torch::kHalf: { + auto input_ptr = reinterpret_cast(input.data_ptr()); + invokeFP8Quantization(m, n, input_ptr, output_ptr, sf_out, multiProcessorCount, stream); + break; + } + case torch::kBFloat16: { + auto input_ptr = reinterpret_cast<__nv_bfloat16 const*>(input.data_ptr()); + invokeFP8Quantization(m, n, input_ptr, output_ptr, sf_out, multiProcessorCount, stream); + break; + } + default: { + std::cerr << "Observing: " << input.scalar_type() << " for the input datatype which is invalid"; + throw std::runtime_error("Unsupported input data type for quantize_to_fp8."); + } + } +} diff --git a/lightx2v_kernel/csrc/gemm/mxfp8_scaled_mm_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/mxfp8_scaled_mm_kernels_sm120.cu new file mode 100644 index 0000000..f3a1558 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/mxfp8_scaled_mm_kernels_sm120.cu @@ -0,0 +1,325 @@ +#include +#include +#include + +// clang-format off +#include "cutlass/cutlass.h" +#include "cutlass/epilogue/fusion/operations.hpp" +#include "cutlass/gemm/collective/collective_builder.hpp" +#include "cutlass/epilogue/collective/collective_builder.hpp" +#include "cutlass/gemm/device/gemm_universal_adapter.h" +#include "cutlass/gemm/kernel/gemm_universal.hpp" +#include "cutlass/util/packed_stride.hpp" +// clang-format on + +#define CUTLASS_CHECK(status) \ + { \ + cutlass::Status error = status; \ + TORCH_CHECK(error == cutlass::Status::kSuccess, cutlassGetStatusString(error)); \ + } + +#define CHECK_TYPE(x, st, m) TORCH_CHECK(x.scalar_type() == st, "Inconsistency of Tensor type:", m) +#define CHECK_TH_CUDA(x, m) TORCH_CHECK(x.is_cuda(), m, "must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x, m) TORCH_CHECK(x.is_contiguous(), m, "must be contiguous") +#define CHECK_INPUT(x, st, m) \ + CHECK_TH_CUDA(x, m); \ + CHECK_CONTIGUOUS(x, m); \ + CHECK_TYPE(x, st, m) + + +using namespace cute; + + +struct Mxfp8GemmSm120 { + ///////////////////////////////////////////////////////////////////////////////////////////////// + /// GEMM kernel configurations + ///////////////////////////////////////////////////////////////////////////////////////////////// + + // A matrix configuration + using ElementA = cutlass::mx_float8_t; // Element type for A matrix operand + using LayoutATag = cutlass::layout::RowMajor; // Layout type for A matrix operand + static constexpr int AlignmentA = 16; // Memory access granularity/alignment of A matrix in units of elements (up to 16 bytes) + + // B matrix configuration + using ElementB = cutlass::mx_float8_t; // Element type for B matrix operand + using LayoutBTag = cutlass::layout::ColumnMajor; // Layout type for B matrix operand + static constexpr int AlignmentB = 128; // Memory access granularity/alignment of B matrix in units of elements (up to 16 bytes) + + // C/D matrix configuration + using ElementD = cutlass::bfloat16_t; // Element type for D matrix operand + using ElementC = cutlass::bfloat16_t; // Element type for C matrix operand + using LayoutCTag = cutlass::layout::RowMajor; // Layout type for C matrix operand + using LayoutDTag = cutlass::layout::RowMajor; // Layout type for D matrix operand + static constexpr int AlignmentD = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + static constexpr int AlignmentC = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + // Kernel functional config + using ElementAccumulator = float; // Element type for internal accumulation + using ArchTag = cutlass::arch::Sm120; // Tag indicating the minimum SM that supports the intended feature + using OperatorClass = cutlass::arch::OpClassBlockScaledTensorOp; // Operator class tag + + // Kernel Perf config + using ThreadBlockShape = Shape<_128,_128,_128>; // Threadblock's tile size + using ClusterShape = Shape<_1,_1,_1>; // Shape of the threadblocks in a cluster + + // use per-column bias, i.e. every column has different bias + using EVTOp = cutlass::epilogue::fusion::LinCombPerColBias; + + using CollectiveEpilogue = typename cutlass::epilogue::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ThreadBlockShape, ClusterShape, + cutlass::epilogue::collective::EpilogueTileAuto, + ElementAccumulator, ElementAccumulator, + ElementC, LayoutCTag, AlignmentC, + ElementD, LayoutDTag, AlignmentD, + cutlass::epilogue::collective::EpilogueScheduleAuto, // Epilogue schedule policy + EVTOp + >::CollectiveOp; + + using CollectiveMainloop = typename cutlass::gemm::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ElementA, LayoutATag, AlignmentA, + ElementB, LayoutBTag, AlignmentB, + ElementAccumulator, + ThreadBlockShape, ClusterShape, + cutlass::gemm::collective::StageCountAutoCarveout(sizeof(typename CollectiveEpilogue::SharedStorage))>, + cutlass::gemm::collective::KernelScheduleAuto // Kernel schedule policy. Auto defaults to cooperative kernel schedule + >::CollectiveOp; + + using GemmKernel = cutlass::gemm::kernel::GemmUniversal< + Shape, // Indicates ProblemShape + CollectiveMainloop, + CollectiveEpilogue, + void>; + + using Gemm = cutlass::gemm::device::GemmUniversalAdapter; + + // Reference device GEMM implementation type + using StrideA = typename Gemm::GemmKernel::StrideA; + using LayoutA = decltype(cute::make_layout(make_shape(0,0,0), StrideA{})); + using LayoutSFA = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFA; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideB = typename Gemm::GemmKernel::StrideB; + using LayoutB = decltype(cute::make_layout(make_shape(0,0,0), StrideB{})); + using LayoutSFB = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFB; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideC = typename Gemm::GemmKernel::StrideC; + using LayoutC = decltype(cute::make_layout(make_shape(0,0,0), StrideC{})); + using StrideD = typename Gemm::GemmKernel::StrideD; + using LayoutD = decltype(cute::make_layout(make_shape(0,0,0), StrideD{})); +}; + + +// Populates a Gemm::Arguments structure from the given commandline options +typename Mxfp8GemmSm120::Gemm::Arguments args_from_options_mxfp8( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t M, + int64_t N, + int64_t K) { + using Sm1xxBlkScaledConfig = typename Mxfp8GemmSm120::Gemm::GemmKernel::CollectiveMainloop::Sm1xxBlkScaledConfig; + + int m = static_cast(M); + int n = static_cast(N); + int k = static_cast(K); + auto stride_A = cutlass::make_cute_packed_stride(Mxfp8GemmSm120::StrideA{}, {m, k, 1}); + auto stride_B = cutlass::make_cute_packed_stride(Mxfp8GemmSm120::StrideB{}, {n, k, 1}); + auto stride_D = cutlass::make_cute_packed_stride(Mxfp8GemmSm120::StrideD{}, {m, n, 1}); + + auto layout_SFA = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFA(cute::make_shape(m, n, k, 1)); + auto layout_SFB = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFB(cute::make_shape(m, n, k, 1)); + + if (bias){ + using StrideBias = Stride; + + typename Mxfp8GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + fusion_args.bias_ptr = static_cast(bias->data_ptr()); + fusion_args.dBias = StrideBias{}; + return arguments; + } else { + typename Mxfp8GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + return arguments; + } +} + + +void runGemmMxfp8Sm120( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t m, + int64_t n, + int64_t k, + cudaStream_t stream) { + typename Mxfp8GemmSm120::Gemm gemm; + + auto arguments = args_from_options_mxfp8(D, A, B, A_sf, B_sf, alpha, bias, m, n, k); + size_t workspace_size = Mxfp8GemmSm120::Gemm::get_workspace_size(arguments); + auto const workspace_options = torch::TensorOptions().dtype(torch::kUInt8).device(A.device()); + auto workspace = torch::empty(workspace_size, workspace_options); + + CUTLASS_CHECK(gemm.can_implement(arguments)); + CUTLASS_CHECK(gemm.initialize(arguments, workspace.data_ptr(), stream)); + CUTLASS_CHECK(gemm.run(arguments, workspace.data_ptr(), stream)); +} + + +constexpr auto FP6_FP8_TYPE = at::ScalarType::Byte; +constexpr auto SF_DTYPE = at::ScalarType::Float8_e8m0fnu; + +void cutlass_scaled_mxfp8_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias) { + + CHECK_INPUT(A, FP6_FP8_TYPE, "a"); + CHECK_INPUT(B, FP6_FP8_TYPE, "b"); + + CHECK_INPUT(A_sf, SF_DTYPE, "scale_a"); + CHECK_INPUT(B_sf, SF_DTYPE, "scale_b"); + CHECK_INPUT(alpha, at::ScalarType::Float, "alpha"); + + + TORCH_CHECK(A.dim() == 2, "a must be a matrix"); + TORCH_CHECK(B.dim() == 2, "b must be a matrix"); + + TORCH_CHECK( + A.sizes()[1] == B.sizes()[1], + "a and b shapes cannot be multiplied (", + A.sizes()[0], + "x", + A.sizes()[1], + " and ", + B.sizes()[0], + "x", + B.sizes()[1], + ")"); + + auto const m = A.sizes()[0]; + auto const n = B.sizes()[0]; + auto const k = A.sizes()[1]; + + constexpr int alignment_a = 16; + constexpr int alignment_b = 128; + TORCH_CHECK( + k % alignment_a == 0, + "Expected k to be divisible by ", + alignment_a, + ", but got a shape: (", + A.sizes()[0], + "x", + A.sizes()[1], + "), k: ", + k, + "."); + TORCH_CHECK( + n % alignment_b == 0, + "Expected n to be divisible by ", + alignment_b, + ", but got b shape: (", + B.sizes()[0], + "x", + B.sizes()[1], + ")."); + + auto round_up = [](int x, int y) { return (x + y - 1) / y * y; }; + int rounded_m = round_up(m, 128); + int rounded_n = round_up(n, 128); + // Since k is divisible by 32 (alignment), k / 32 is guaranteed to be an + // integer. + int rounded_k = round_up(k / 32, 4); + + TORCH_CHECK(A_sf.dim() == 2, "scale_a must be a matrix"); + TORCH_CHECK(B_sf.dim() == 2, "scale_b must be a matrix"); + TORCH_CHECK( + A_sf.sizes()[1] == B_sf.sizes()[1], + "scale_a and scale_b shapes cannot be multiplied (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + " and ", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + TORCH_CHECK( + A_sf.sizes()[0] == rounded_m && A_sf.sizes()[1] == rounded_k, + "scale_a must be padded and swizzled to a shape (", + rounded_m, + "x", + rounded_k, + "), but got a shape (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + ")"); + TORCH_CHECK( + B_sf.sizes()[0] == rounded_n && B_sf.sizes()[1] == rounded_k, + "scale_b must be padded and swizzled to a shape (", + rounded_n, + "x", + rounded_k, + "), but got a shape (", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + + auto out_dtype = D.dtype(); + at::cuda::CUDAGuard device_guard{(char)A.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(A.get_device()); + + runGemmMxfp8Sm120(D, A, B, A_sf, B_sf, alpha, bias, m, n, k, stream); +} diff --git a/lightx2v_kernel/csrc/gemm/nvfp4_quant_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/nvfp4_quant_kernels_sm120.cu new file mode 100644 index 0000000..ad50950 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/nvfp4_quant_kernels_sm120.cu @@ -0,0 +1,387 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "utils.h" + +// Get type2 from type or vice versa (applied to half and bfloat16) +template +struct TypeConverter { + using Type = half2; +}; // keep for generality + +template <> +struct TypeConverter { + using Type = half; +}; + +template <> +struct TypeConverter { + using Type = half2; +}; + +template <> +struct TypeConverter<__nv_bfloat162> { + using Type = __nv_bfloat16; +}; + +template <> +struct TypeConverter<__nv_bfloat16> { + using Type = __nv_bfloat162; +}; + +#define ELTS_PER_THREAD 8 + +constexpr int CVT_FP4_ELTS_PER_THREAD = 8; +constexpr int CVT_FP4_SF_VEC_SIZE = 16; + +// Convert 8 float32 values into 8 e2m1 values (represented as one uint32_t). +inline __device__ uint32_t fp32_vec_to_e2m1(float (&array)[8]) { + // PTX instructions used here requires sm100a. +// #if CUDA_VERSION >= 12080 +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) && __CUDA_ARCH_HAS_FEATURE__(SM100_ALL) + uint32_t val; + asm volatile( + "{\n" + ".reg .b8 byte0;\n" + ".reg .b8 byte1;\n" + ".reg .b8 byte2;\n" + ".reg .b8 byte3;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte0, %2, %1;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte1, %4, %3;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte2, %6, %5;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte3, %8, %7;\n" + "mov.b32 %0, {byte0, byte1, byte2, byte3};\n" + "}" + : "=r"(val) + : "f"(array[0]), + "f"(array[1]), + "f"(array[2]), + "f"(array[3]), + "f"(array[4]), + "f"(array[5]), + "f"(array[6]), + "f"(array[7])); + return val; +// #else +// return 0; +// #endif +// #endif +} + +// Convert 4 float2 values into 8 e2m1 values (represented as one uint32_t). +inline __device__ uint32_t fp32_vec_to_e2m1(float2 (&array)[4]) { + // PTX instructions used here requires sm100a. +// #if CUDA_VERSION >= 12080 +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) && __CUDA_ARCH_HAS_FEATURE__(SM100_ALL) + uint32_t val; + asm volatile( + "{\n" + ".reg .b8 byte0;\n" + ".reg .b8 byte1;\n" + ".reg .b8 byte2;\n" + ".reg .b8 byte3;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte0, %2, %1;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte1, %4, %3;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte2, %6, %5;\n" + "cvt.rn.satfinite.e2m1x2.f32 byte3, %8, %7;\n" + "mov.b32 %0, {byte0, byte1, byte2, byte3};\n" + "}" + : "=r"(val) + : "f"(array[0].x), + "f"(array[0].y), + "f"(array[1].x), + "f"(array[1].y), + "f"(array[2].x), + "f"(array[2].y), + "f"(array[3].x), + "f"(array[3].y)); + return val; +// #else +// return 0; +// #endif +// #endif +} + +// Fast reciprocal. +inline __device__ float reciprocal_approximate_ftz(float a) { + float b; + asm volatile("rcp.approx.ftz.f32 %0, %1;\n" : "=f"(b) : "f"(a)); + return b; +} + +template +__device__ uint8_t* cvt_quant_to_fp4_get_sf_out_offset(int rowIdx, int colIdx, int numCols, SFType* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + static_assert(CVT_FP4_NUM_THREADS_PER_SF == 1 || CVT_FP4_NUM_THREADS_PER_SF == 2); + + // One pair of threads write one SF to global memory. + // TODO: stage through smem for packed STG.32 + // is it better than STG.8 from 4 threads ? + if (threadIdx.x % CVT_FP4_NUM_THREADS_PER_SF == 0) { + // SF vector index (16 elements share one SF in the K dimension). + int32_t kIdx = colIdx / CVT_FP4_NUM_THREADS_PER_SF; + int32_t mIdx = rowIdx; + + // SF layout [numMTiles, numKTiles, 32 (mTile), 4 (mTile), 4(kTile)] + // --> index [mTileIdx, kTileIdx, outerMIdx, innerMIdx, innerKIdx] + + int32_t mTileIdx = mIdx / (32 * 4); + // SF vector size 16. + int factor = CVT_FP4_SF_VEC_SIZE * 4; + int32_t numKTiles = (numCols + factor - 1) / factor; + int64_t mTileStride = numKTiles * 32 * 4 * 4; + + int32_t kTileIdx = (kIdx / 4); + int64_t kTileStride = 32 * 4 * 4; + + // M tile layout [32, 4] is column-major. + int32_t outerMIdx = (mIdx % 32); + int64_t outerMStride = 4 * 4; + + int32_t innerMIdx = (mIdx % (32 * 4)) / 32; + int64_t innerMStride = 4; + + int32_t innerKIdx = (kIdx % 4); + int64_t innerKStride = 1; + + // Compute the global offset. + int64_t SFOffset = mTileIdx * mTileStride + kTileIdx * kTileStride + outerMIdx * outerMStride + + innerMIdx * innerMStride + innerKIdx * innerKStride; + + return reinterpret_cast(SFout) + SFOffset; + } +// #endif + return nullptr; +} + +// Define a 16 bytes packed data type. +template +struct PackedVec { + typename TypeConverter::Type elts[4]; +}; + +template <> +struct PackedVec<__nv_fp8_e4m3> { + __nv_fp8x2_e4m3 elts[8]; +}; + +// Quantizes the provided PackedVec into the uint32_t output +template +__device__ uint32_t cvt_warp_fp16_to_fp4(PackedVec& vec, float SFScaleVal, uint8_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + // Get absolute maximum values among the local 8 values. + auto localMax = __habs2(vec.elts[0]); + +// Local maximum value. +#pragma unroll + for (int i = 1; i < CVT_FP4_ELTS_PER_THREAD / 2; i++) { + localMax = __hmax2(localMax, __habs2(vec.elts[i])); + } + + // Get the absolute maximum among all 16 values (two threads). + localMax = __hmax2(__shfl_xor_sync(uint32_t(-1), localMax, 1), localMax); + // Get the final absolute maximum values. + float vecMax = float(__hmax(localMax.x, localMax.y)); + + // Get the SF (max value of the vector / max value of e2m1). + // maximum value of e2m1 = 6.0. + // TODO: use half as compute data type. + float SFValue = SFScaleVal * (vecMax * 0.16666666666666666f); + // 8 bits representation of the SF. + uint8_t fp8SFVal; + // Write the SF to global memory (STG.8). + if constexpr (UE8M0_SF) { + __nv_fp8_e8m0 tmp; + tmp.__x = __nv_cvt_float_to_e8m0(SFValue, __NV_SATFINITE, cudaRoundPosInf); + SFValue = static_cast(tmp); + fp8SFVal = tmp.__x; + } else { + // Here SFValue is always positive, so E4M3 is the same as UE4M3. + __nv_fp8_e4m3 tmp = __nv_fp8_e4m3(SFValue); + fp8SFVal = tmp.__x; + SFValue = static_cast(tmp); + } + // Get the output scale. + // Recipe: final_scale = reciprocal(fp32(fp8(SFValue * SFScaleVal))) * + // reciprocal(SFScaleVal)) +// float outputScale = +// SFValue != 0 ? reciprocal_approximate_ftz(SFValue * reciprocal_approximate_ftz(SFScaleVal)) : 0.0f; + + float outputScale = + SFValue != 0 ? SFScaleVal * reciprocal_approximate_ftz(SFValue) : 0.0f; + + if (SFout) { + // Write the SF to global memory (STG.8). + *SFout = fp8SFVal; + } + + // Convert the input to float. + float2 fp2Vals[CVT_FP4_ELTS_PER_THREAD / 2]; + +#pragma unroll + for (int i = 0; i < CVT_FP4_ELTS_PER_THREAD / 2; i++) { + if constexpr (std::is_same_v) { + fp2Vals[i] = __half22float2(vec.elts[i]); + } else { + fp2Vals[i] = __bfloat1622float2(vec.elts[i]); + } + fp2Vals[i].x *= outputScale; + fp2Vals[i].y *= outputScale; + } + + // Convert to e2m1 values. + uint32_t e2m1Vec = fp32_vec_to_e2m1(fp2Vals); + + // Write the e2m1 values to global memory. + return e2m1Vec; +// #else +// return 0; +// #endif +} + +// Use UE4M3 by default. +template +__global__ void +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) +__launch_bounds__(256, 6) cvt_fp16_to_fp4( +// #else +// cvt_fp16_to_fp4( +// #endif + int32_t numRows, int32_t numCols, Type const* in, float const* SFScale, uint32_t* out, uint32_t* SFout) { +// #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 1000) + using PackedVec = PackedVec; + static constexpr int CVT_FP4_NUM_THREADS_PER_SF = (CVT_FP4_SF_VEC_SIZE / CVT_FP4_ELTS_PER_THREAD); + static_assert(sizeof(PackedVec) == sizeof(Type) * CVT_FP4_ELTS_PER_THREAD, "Vec size is not matched."); + + // Get the global scaling factor, which will be applied to the SF. + // Note SFScale is the same as next GEMM's alpha, which is + // (448.f / (Alpha_A / 6.f)). + float const SFScaleVal = SFScale == nullptr ? 1.0f : SFScale[0]; + + // Input tensor row/col loops. + for (int rowIdx = blockIdx.x; rowIdx < numRows; rowIdx += gridDim.x) { + for (int colIdx = threadIdx.x; colIdx < numCols / CVT_FP4_ELTS_PER_THREAD; colIdx += blockDim.x) { + int64_t inOffset = rowIdx * (numCols / CVT_FP4_ELTS_PER_THREAD) + colIdx; + PackedVec in_vec = reinterpret_cast(in)[inOffset]; + // Get the output tensor offset. + // Same as inOffset because 8 elements are packed into one uint32_t. + int64_t outOffset = inOffset; + auto& out_pos = out[outOffset]; + + auto sf_out = + cvt_quant_to_fp4_get_sf_out_offset(rowIdx, colIdx, numCols, SFout); + + out_pos = cvt_warp_fp16_to_fp4(in_vec, SFScaleVal, sf_out); + } + } +// #endif +} + +template +void invokeFP4Quantization( + int m, + int n, + T const* input, + float const* SFScale, + int64_t* output, + int32_t* SFOuput, + bool useUE8M0, + int multiProcessorCount, + cudaStream_t stream) { + // Grid, Block size. + // Each thread converts 8 values. + dim3 block(std::min(int(n / ELTS_PER_THREAD), 256)); + // Get number of blocks per SM (assume we can fully utilize the SM). + int const numBlocksPerSM = 1536 / block.x; + dim3 grid(std::min(int(m), multiProcessorCount * numBlocksPerSM)); + + // Launch the cvt kernel. + if (useUE8M0) { + cvt_fp16_to_fp4<<>>( + m, n, input, SFScale, reinterpret_cast(output), reinterpret_cast(SFOuput)); + } else { + cvt_fp16_to_fp4<<>>( + m, n, input, SFScale, reinterpret_cast(output), reinterpret_cast(SFOuput)); + } +} + +// Instantiate the function. +template void invokeFP4Quantization( + int m, + int n, + half const* input, + float const* SFScale, + int64_t* output, + int32_t* SFOuput, + bool useUE8M0, + int multiProcessorCount, + cudaStream_t stream); + +template void invokeFP4Quantization( + int m, + int n, + __nv_bfloat16 const* input, + float const* SFScale, + int64_t* output, + int32_t* SFOuput, + bool useUE8M0, + int multiProcessorCount, + cudaStream_t stream); + +inline int getMultiProcessorCount() { + static int multi_processor_count = []() { + int device_id = 0; + int count = 0; + + // Get the current CUDA device ID + CHECK_CUDA_SUCCESS(cudaGetDevice(&device_id)); + + // Get the number of multiprocessors for the current device + CHECK_CUDA_SUCCESS(cudaDeviceGetAttribute(&count, cudaDevAttrMultiProcessorCount, device_id)); + + return count; // Initialize the static variable + }(); + + return multi_processor_count; // Return the cached value on subsequent calls +} + +void scaled_nvfp4_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf, torch::Tensor const& input_sf) { + int32_t m = input.size(0); + int32_t n = input.size(1); + + TORCH_CHECK(n % 16 == 0, "The N dimension must be multiple of 16."); + + int multiProcessorCount = getMultiProcessorCount(); + + auto input_sf_ptr = static_cast(input_sf.data_ptr()); + auto sf_out = static_cast(output_sf.data_ptr()); + auto output_ptr = static_cast(output.data_ptr()); + at::cuda::CUDAGuard device_guard{(char)input.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(input.get_device()); + + // We don't support e8m0 scales at this moment. + bool useUE8M0 = false; + + switch (input.scalar_type()) { + case torch::kHalf: { + auto input_ptr = reinterpret_cast(input.data_ptr()); + invokeFP4Quantization(m, n, input_ptr, input_sf_ptr, output_ptr, sf_out, useUE8M0, multiProcessorCount, stream); + break; + } + case torch::kBFloat16: { + auto input_ptr = reinterpret_cast<__nv_bfloat16 const*>(input.data_ptr()); + invokeFP4Quantization(m, n, input_ptr, input_sf_ptr, output_ptr, sf_out, useUE8M0, multiProcessorCount, stream); + break; + } + default: { + std::cerr << "Observing: " << input.scalar_type() << " for the input datatype which is invalid"; + throw std::runtime_error("Unsupported input data type for quantize_to_fp4."); + } + } +} diff --git a/lightx2v_kernel/csrc/gemm/nvfp4_scaled_mm_kernels_sm120.cu b/lightx2v_kernel/csrc/gemm/nvfp4_scaled_mm_kernels_sm120.cu new file mode 100644 index 0000000..8dd2838 --- /dev/null +++ b/lightx2v_kernel/csrc/gemm/nvfp4_scaled_mm_kernels_sm120.cu @@ -0,0 +1,323 @@ +#include +#include +#include + +// clang-format off +#include "cutlass/cutlass.h" +#include "cutlass/epilogue/fusion/operations.hpp" +#include "cutlass/gemm/collective/collective_builder.hpp" +#include "cutlass/epilogue/collective/collective_builder.hpp" +#include "cutlass/gemm/device/gemm_universal_adapter.h" +#include "cutlass/gemm/kernel/gemm_universal.hpp" +#include "cutlass/util/packed_stride.hpp" +// clang-format on + +#define CUTLASS_CHECK(status) \ + { \ + cutlass::Status error = status; \ + TORCH_CHECK(error == cutlass::Status::kSuccess, cutlassGetStatusString(error)); \ + } + +#define CHECK_TYPE(x, st, m) TORCH_CHECK(x.scalar_type() == st, "Inconsistency of Tensor type:", m) +#define CHECK_TH_CUDA(x, m) TORCH_CHECK(x.is_cuda(), m, "must be a CUDA tensor") +#define CHECK_CONTIGUOUS(x, m) TORCH_CHECK(x.is_contiguous(), m, "must be contiguous") +#define CHECK_INPUT(x, st, m) \ + CHECK_TH_CUDA(x, m); \ + CHECK_CONTIGUOUS(x, m); \ + CHECK_TYPE(x, st, m) + + +using namespace cute; + + +struct Fp4GemmSm120 { + ///////////////////////////////////////////////////////////////////////////////////////////////// + /// GEMM kernel configurations + ///////////////////////////////////////////////////////////////////////////////////////////////// + + // A matrix configuration + using ElementA = cutlass::nv_float4_t; // Element type for A matrix operand + using LayoutATag = cutlass::layout::RowMajor; // Layout type for A matrix operand + static constexpr int AlignmentA = 32; // Memory access granularity/alignment of A matrix in units of elements (up to 16 bytes) + + // B matrix configuration + using ElementB = cutlass::nv_float4_t; // Element type for B matrix operand + using LayoutBTag = cutlass::layout::ColumnMajor; // Layout type for B matrix operand + static constexpr int AlignmentB = 32; // Memory access granularity/alignment of B matrix in units of elements (up to 16 bytes) + + // C/D matrix configuration + using ElementD = cutlass::bfloat16_t; // Element type for D matrix operand + using ElementC = cutlass::bfloat16_t; // Element type for C matrix operand + using LayoutCTag = cutlass::layout::RowMajor; // Layout type for C matrix operand + using LayoutDTag = cutlass::layout::RowMajor; // Layout type for D matrix operand + static constexpr int AlignmentD = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + static constexpr int AlignmentC = 128 / cutlass::sizeof_bits::value; // Memory access granularity/alignment of C matrix in units of elements (up to 16 bytes) + // Kernel functional config + using ElementAccumulator = float; // Element type for internal accumulation + using ArchTag = cutlass::arch::Sm120; // Tag indicating the minimum SM that supports the intended feature + using OperatorClass = cutlass::arch::OpClassBlockScaledTensorOp; // Operator class tag + + // Kernel Perf config + using ThreadBlockShape = Shape<_128,_128,_128>; // Threadblock's tile size + using ClusterShape = Shape<_1,_1,_1>; // Shape of the threadblocks in a cluster + + // use per-column bias, i.e. every column has different bias + using EVTOp = cutlass::epilogue::fusion::LinCombPerColBias; + + using CollectiveEpilogue = typename cutlass::epilogue::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ThreadBlockShape, ClusterShape, + cutlass::epilogue::collective::EpilogueTileAuto, + ElementAccumulator, ElementAccumulator, + ElementC, LayoutCTag, AlignmentC, + ElementD, LayoutDTag, AlignmentD, + cutlass::epilogue::collective::EpilogueScheduleAuto, // Epilogue schedule policy + EVTOp + >::CollectiveOp; + + using CollectiveMainloop = typename cutlass::gemm::collective::CollectiveBuilder< + ArchTag, OperatorClass, + ElementA, LayoutATag, AlignmentA, + ElementB, LayoutBTag, AlignmentB, + ElementAccumulator, + ThreadBlockShape, ClusterShape, + cutlass::gemm::collective::StageCountAutoCarveout(sizeof(typename CollectiveEpilogue::SharedStorage))>, + cutlass::gemm::collective::KernelScheduleAuto // Kernel schedule policy. Auto defaults to cooperative kernel schedule + >::CollectiveOp; + + using GemmKernel = cutlass::gemm::kernel::GemmUniversal< + Shape, // Indicates ProblemShape + CollectiveMainloop, + CollectiveEpilogue, + void>; + + using Gemm = cutlass::gemm::device::GemmUniversalAdapter; + + // Reference device GEMM implementation type + using StrideA = typename Gemm::GemmKernel::StrideA; + using LayoutA = decltype(cute::make_layout(make_shape(0,0,0), StrideA{})); + using LayoutSFA = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFA; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideB = typename Gemm::GemmKernel::StrideB; + using LayoutB = decltype(cute::make_layout(make_shape(0,0,0), StrideB{})); + using LayoutSFB = typename Gemm::GemmKernel::CollectiveMainloop::LayoutSFB; // Scale Factor tensors have an interleaved layout. Bring Layout instead of stride. + using StrideC = typename Gemm::GemmKernel::StrideC; + using LayoutC = decltype(cute::make_layout(make_shape(0,0,0), StrideC{})); + using StrideD = typename Gemm::GemmKernel::StrideD; + using LayoutD = decltype(cute::make_layout(make_shape(0,0,0), StrideD{})); +}; + + +// Populates a Gemm::Arguments structure from the given commandline options +typename Fp4GemmSm120::Gemm::Arguments args_from_options_nvfp4_nvfp4( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t M, + int64_t N, + int64_t K) { + using Sm1xxBlkScaledConfig = typename Fp4GemmSm120::Gemm::GemmKernel::CollectiveMainloop::Sm1xxBlkScaledConfig; + + int m = static_cast(M); + int n = static_cast(N); + int k = static_cast(K); + auto stride_A = cutlass::make_cute_packed_stride(Fp4GemmSm120::StrideA{}, {m, k, 1}); + auto stride_B = cutlass::make_cute_packed_stride(Fp4GemmSm120::StrideB{}, {n, k, 1}); + auto stride_D = cutlass::make_cute_packed_stride(Fp4GemmSm120::StrideD{}, {m, n, 1}); + + auto layout_SFA = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFA(cute::make_shape(m, n, k, 1)); + auto layout_SFB = Sm1xxBlkScaledConfig::tile_atom_to_shape_SFB(cute::make_shape(m, n, k, 1)); + + if (bias){ + using StrideBias = Stride; + + typename Fp4GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + fusion_args.bias_ptr = static_cast(bias->data_ptr()); + fusion_args.dBias = StrideBias{}; + return arguments; + } else { + typename Fp4GemmSm120::Gemm::Arguments arguments{ + cutlass::gemm::GemmUniversalMode::kGemm, + {m, n, k, 1}, + {// Mainloop arguments + static_cast(A.data_ptr()), + stride_A, + static_cast(B.data_ptr()), + stride_B, + static_cast(A_sf.data_ptr()), + layout_SFA, + static_cast(B_sf.data_ptr()), + layout_SFB}, + { // Epilogue arguments + {}, // epilogue.thread + static_cast(D.data_ptr()), + stride_D, + static_cast(D.data_ptr()), + stride_D}}; + auto& fusion_args = arguments.epilogue.thread; + fusion_args.alpha_ptr = static_cast(alpha.data_ptr()); + static const float beta_zero = 0.0f; + fusion_args.beta_ptr = &beta_zero; + return arguments; + } +} + + +void runGemmNvfp4Sm120( + at::Tensor& D, + at::Tensor const& A, + at::Tensor const& B, + at::Tensor const& A_sf, + at::Tensor const& B_sf, + at::Tensor const& alpha, + c10::optional const& bias, + int64_t m, + int64_t n, + int64_t k, + cudaStream_t stream) { + typename Fp4GemmSm120::Gemm gemm; + + auto arguments = args_from_options_nvfp4_nvfp4(D, A, B, A_sf, B_sf, alpha, bias, m, n, k); + size_t workspace_size = Fp4GemmSm120::Gemm::get_workspace_size(arguments); + auto const workspace_options = torch::TensorOptions().dtype(torch::kUInt8).device(A.device()); + auto workspace = torch::empty(workspace_size, workspace_options); + + CUTLASS_CHECK(gemm.can_implement(arguments)); + CUTLASS_CHECK(gemm.initialize(arguments, workspace.data_ptr(), stream)); + CUTLASS_CHECK(gemm.run(arguments, workspace.data_ptr(), stream)); +} + + +constexpr auto FLOAT4_E2M1X2 = at::ScalarType::Byte; +constexpr auto SF_DTYPE = at::ScalarType::Float8_e4m3fn; + +void cutlass_scaled_nvfp4_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias) { + + CHECK_INPUT(A, FLOAT4_E2M1X2, "a"); + CHECK_INPUT(B, FLOAT4_E2M1X2, "b"); + + CHECK_INPUT(A_sf, SF_DTYPE, "scale_a"); + CHECK_INPUT(B_sf, SF_DTYPE, "scale_b"); + CHECK_INPUT(alpha, at::ScalarType::Float, "alpha"); + + + TORCH_CHECK(A.dim() == 2, "a must be a matrix"); + TORCH_CHECK(B.dim() == 2, "b must be a matrix"); + TORCH_CHECK( + A.sizes()[1] == B.sizes()[1], + "a and b shapes cannot be multiplied (", + A.sizes()[0], + "x", + A.sizes()[1], + " and ", + B.sizes()[0], + "x", + B.sizes()[1], + ")"); + + auto const m = A.sizes()[0]; + auto const n = B.sizes()[0]; + auto const k = A.sizes()[1] * 2; + + constexpr int alignment = 32; + TORCH_CHECK( + k % alignment == 0, + "Expected k to be divisible by ", + alignment, + ", but got a shape: (", + A.sizes()[0], + "x", + A.sizes()[1], + "), k: ", + k, + "."); + TORCH_CHECK( + n % alignment == 0, + "Expected n to be divisible by ", + alignment, + ", but got b shape: (", + B.sizes()[0], + "x", + B.sizes()[1], + ")."); + + auto round_up = [](int x, int y) { return (x + y - 1) / y * y; }; + int rounded_m = round_up(m, 128); + int rounded_n = round_up(n, 128); + // Since k is divisible by 32 (alignment), k / 16 is guaranteed to be an + // integer. + int rounded_k = round_up(k / 16, 4); + + TORCH_CHECK(A_sf.dim() == 2, "scale_a must be a matrix"); + TORCH_CHECK(B_sf.dim() == 2, "scale_b must be a matrix"); + TORCH_CHECK( + A_sf.sizes()[1] == B_sf.sizes()[1], + "scale_a and scale_b shapes cannot be multiplied (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + " and ", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + TORCH_CHECK( + A_sf.sizes()[0] == rounded_m && A_sf.sizes()[1] == rounded_k, + "scale_a must be padded and swizzled to a shape (", + rounded_m, + "x", + rounded_k, + "), but got a shape (", + A_sf.sizes()[0], + "x", + A_sf.sizes()[1], + ")"); + TORCH_CHECK( + B_sf.sizes()[0] == rounded_n && B_sf.sizes()[1] == rounded_k, + "scale_b must be padded and swizzled to a shape (", + rounded_n, + "x", + rounded_k, + "), but got a shape (", + B_sf.sizes()[0], + "x", + B_sf.sizes()[1], + ")"); + + auto out_dtype = D.dtype(); + at::cuda::CUDAGuard device_guard{(char)A.get_device()}; + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(A.get_device()); + + runGemmNvfp4Sm120(D, A, B, A_sf, B_sf, alpha, bias, m, n, k, stream); +} diff --git a/lightx2v_kernel/docs/en_US/mx_formats_quantization_basics.md b/lightx2v_kernel/docs/en_US/mx_formats_quantization_basics.md new file mode 100644 index 0000000..8241eac --- /dev/null +++ b/lightx2v_kernel/docs/en_US/mx_formats_quantization_basics.md @@ -0,0 +1,35 @@ +# MX-Formats Quantization Basics + +**Note: The following focuses on sharing the differences between MX-Formats quantization and Per-Row/Per-Column quantization, as well as the layout requirements for compatibility with Cutlass Block Scaled GEMMs.** + +### Data Formats and Quantization Factors +Target data format reference: [MX-Formats](https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf). Note that we do not need to pack raw data and scale factors together here. + +Source data format: fp16/bf16 + +Target data format: mxfp4/6/8 + +Quantization factor data format: E8M0, Per-Row/Per-Column quantization typically stores quantization factors in fp32, whereas E8M0 has the same numerical range as fp32. After rounding, the quantization factors can be stored directly, though the loss of mantissa bits may affect precision. + +Quantization granularity: \[1X32\] + +Quantization dimension: Following Cutlass GEMM conventions, where M, N, K represent the three dimensions of matrix multiplication, we should quantize along K dimension. + +### Rounding and Clamp +Unlike software emulation, CUDA can efficiently handle complex rounding and clamping operations using PTX or built-in functions. +For example, `cvt.rn.satfinite.e2m1x2.f32` can convert two fp32 inputs into two fp4 outputs. +Rounding mode: `rn` (round-to-nearest-even) +Clamp mode: `satfinite` (clamped to the maximum finite value within the target range, excluding infinities and NaN) +For more data types and modes, refer to: [PTX cvt Instructions](https://docs.nvidia.com/cuda/parallel-thread-execution/#data-movement-and-conversion-instructions-cvt) + +### Data Layout and Quantization Factor Layout +**Data Layout** +- mxfp4 requires packing two values into a uint8. +- mxfp6 requires packing every four values into three uint8s. For the format, refer to: [mxfp6 cutlass mm format packing](https://github.com/ModelTC/LightX2V/blob/main/lightx2v_kernel/csrc/gemm/mxfp6_quant_kernels_sm120.cu#L74). + +**Quantization Factor Layout** +Cutlass Block Scaled GEMMs impose special swizzle requirements on quantization factor layouts to optimize matrix operations. +Reference: [Scale Factor Layouts](https://github.com/NVIDIA/cutlass/blob/main/media/docs/cpp/blackwell_functionality.md#scale-factor-layouts) + +### Quantization Method +After understanding the above, the calculation of the target data and quantization factor values can refer to [nvfp4 Quantization Basics](https://github.com/theNiemand/lightx2v/blob/main/lightx2v_kernel/docs/zh_CN/nvfp4%E9%87%8F%E5%8C%96%E5%9F%BA%E7%A1%80.md). Note that MX-Formats do not require quantizing the scale itself. diff --git a/lightx2v_kernel/docs/en_US/nvfp4_quantization_basics.md b/lightx2v_kernel/docs/en_US/nvfp4_quantization_basics.md new file mode 100644 index 0000000..80a4ba0 --- /dev/null +++ b/lightx2v_kernel/docs/en_US/nvfp4_quantization_basics.md @@ -0,0 +1,80 @@ +# nvfp4 Quantization Basics + +### Data Format + +The calculation method for fp is: + +`ans = (-1)^s * 2^(p-b) * (1 + d1/2 + d2/4 + d3/8 + ...)` + +Where `b = 2^(e-1) - 1`, p represents the value of the exponent bits, d1, d2, d3 represent the values of the mantissa bits + +For fp4, the format is E2M1, and the above formula is simplified to: + +`b = 2^(e-1) - 1 = 2^(2-1) - 1 = 1` + +`ans = (-1)^s * 2^(p-1) * (1 + d1/2)` + +Example: 0101 + +`s=0, p=(10)=2, d1=1` + +`ans = 2^0 * 2^(2-1) * (1 + 1/2) = 3` + +In normal fp data format, some data represents inf and nan, with a maximum representation of ±3. Specialized for nvfp4, inf and nan are removed, allowing a maximum representation of ±6. + +Specifically, 0000 represents +0, 1000 represents -0, 0001 represents 0.5, and 1001 represents -0.5. + +In summary: + +| E2M1 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | +|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------| +| ans | +0 | 0.5 | 1.0 | 1.5 | 2.0 | 3.0 | 4.0 | 6.0 | +0 | -0.5 | -1.0 | -1.5 | -2.0 | -3.0 | -4.0 | -6.0 | + + +### Quantization Process + +**Both weight and activation use per-group quantization, with a group size of 16, and quantization scales are stored in fp8(e4m3) format** + +Since the quantization scale needs to be stored in fp8, the scale also needs to be rescaled, so the fp4 quantization process differs somewhat from the common w8a8-int8 process. + +The quantization process is as follows: + +Given a set of numbers, denoted as `X` + +#### Calculate scale + +`scale1 = max(abs(Xg)) / 6.0` + +Where Xg represents a group of numbers, and 6.0 represents the maximum value of nvfp4 + +#### Quantize scale + +`global_scale = 6.0 * 448.0 / max(abs(X))` + +`scale2 = global_scale * scale1` + +That is `scale2 = 6.0 * 448.0 / max(abs(X)) * max(abs(Xg)) / 6.0` + +That is `scale2 = max(abs(Xg)) / max(abs(X)) * 448.0` + +At this point, scale2 is rescaled to the range of fp8(e4m3), then scale2 is quantized to fp8 + +`scale2_fp8 = quant_fp8(scale2)` + +`scale2_fp8` serves as the final quantization scale parameter required for matrix multiplication + +#### Quantize X + +`scale2_fp32 = cvt2fp32(scale2_fp8)` + +`Xquant = quant_fp4(X * global_scale / scale2_fp32)` + +Then `Xquant ≈ quant_fp4(X / scale1)` + +#### fp4 Matrix Multiplication + +`ans = Aquant * Bquant * Ascale2 * Bscale2 / Aglobal_scale / Bglobal_scale` + +That is `ans ≈ Aquant * Bquant * Aglobal_scale * Ascale1 * Bglobal_scale * Bscale1 / Aglobal_scale / Bglobal_scale` + +That is `ans ≈ Aquant * Bquant * Ascale1 * Bscale1` diff --git "a/lightx2v_kernel/docs/zh_CN/mx_formats\351\207\217\345\214\226\345\237\272\347\241\200.md" "b/lightx2v_kernel/docs/zh_CN/mx_formats\351\207\217\345\214\226\345\237\272\347\241\200.md" new file mode 100644 index 0000000..cdacde3 --- /dev/null +++ "b/lightx2v_kernel/docs/zh_CN/mx_formats\351\207\217\345\214\226\345\237\272\347\241\200.md" @@ -0,0 +1,35 @@ +# MX-Formats量化基础 + +**注:下文关注于分享MX-Formats量化相对于Per-Row/Per-Column量化的区别,以及与Cutlass Block Scaled GEMMs配合使用需要满足的一些布局要求。** + +### 数据格式与量化因子 +目标数据格式参考:[MX-Formats](https://www.opencompute.org/documents/ocp-microscaling-formats-mx-v1-0-spec-final-pdf),需要注意的是,我们这里不需要将raw data和scale factor打包在一起 + +源数据格式:fp16/bf16 + +目标数据格式:mxfp4/6/8 + +量化因子数据格式:E8M0, Per-Row/Per-Column量化的量化因子一般以fp32进行存储,而E8M0与fp32数值范围一致,经过rounding后可直接存储量化因子,缺点是尾数的丢失会影响精度。 + +量化粒度:\[1X32\] + +量化维度:以Cutlass GEMM的规范,M N K表示矩阵乘的三个维度,需要沿着K维度量化 + +### Rounding与Clamp +不同于软件模拟,CUDA可以通过PTX或者内置函数高性能地便捷地来完成繁琐的Rouding和Clamp操作。 +例如,`cvt.rn.satfinite.e2m1x2.f32` 可以将两个fp32类型的输入,转换为​两个fp4类型的输出 +Rounding模式为:`rn`,​round-to-nearest-even​ +Clamp模式为:`satfinite`,钳制到目标范围内的最大有限值,​排除无穷和 NaN +更多数据类型和模式参考:[PTX cvt指令](https://docs.nvidia.com/cuda/parallel-thread-execution/#data-movement-and-conversion-instructions-cvt) + +### 数据布局与量化因子布局 +数据布局 +- mxfp4需要两两打包为uint8 +- mxfp6需要每4个打包为3个uint8,格式参考:[mxfp6 cutlass mm 格式打包](https://github.com/ModelTC/LightX2V/blob/main/lightx2v_kernel/csrc/gemm/mxfp6_quant_kernels_sm120.cu#L74) + +量化因子布局 +Cutlass Block Scaled GEMMs为了满足矩阵运算加速,对量化因子布局有特殊的swizzle要求 +参考:[Scale Factor Layouts](https://github.com/NVIDIA/cutlass/blob/main/media/docs/cpp/blackwell_functionality.md#scale-factor-layouts) + +### 量化方法 +了解完上述后,目标数据和量化因子两者自身数值的求解,可参考[nvfp4量化基础](https://github.com/theNiemand/lightx2v/blob/main/lightx2v_kernel/docs/zh_CN/nvfp4%E9%87%8F%E5%8C%96%E5%9F%BA%E7%A1%80.md),注意MX-Formats无需量化scale本身 diff --git "a/lightx2v_kernel/docs/zh_CN/nvfp4\351\207\217\345\214\226\345\237\272\347\241\200.md" "b/lightx2v_kernel/docs/zh_CN/nvfp4\351\207\217\345\214\226\345\237\272\347\241\200.md" new file mode 100644 index 0000000..be9b175 --- /dev/null +++ "b/lightx2v_kernel/docs/zh_CN/nvfp4\351\207\217\345\214\226\345\237\272\347\241\200.md" @@ -0,0 +1,80 @@ +# nvfp4量化基础 + +### 数据格式 + +fp的计算方式是: + +`ans = (-1)^s * 2^(p-b) * (1 + d1/2 + d2/4 + d3/8 + ...)` + +其中,`b = 2^(e-1) - 1`,p表示指数位的值,d1, d2, d3表示尾数位的值 + +对于fp4,格式是E2M1,上述的式子简化为: + +`b = 2^(e-1) - 1 = 2^(2-1) - 1 = 1` + +`ans = (-1)^s * 2^(p-1) * (1 + d1/2)` + +举例:0101 + +`s=0, p=(10)=2, d1=1` + +`ans = 2^0 * 2^(2-1) * (1 + 1/2) = 3` + +正常的fp数据格式,还会有部分数据表示inf和nan,最大只能表示±3,特化到nvfp4,取消了inf和nan,最大可以表示±6 + +特殊的,其中0000表示+0,1000表示-0,0001表示0.5,1001表示-0.5 + +综上: + +| E2M1 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | +|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------|------| +| ans | +0 | 0.5 | 1.0 | 1.5 | 2.0 | 3.0 | 4.0 | 6.0 | +0 | -0.5 | -1.0 | -1.5 | -2.0 | -3.0 | -4.0 | -6.0 | + + +### 量化过程 + +**weight和act都是per group量化,group size都是16,量化scale以fp8(e4m3)格式存储** + +由于量化scale要用fp8存储,需要对scale也进行放缩,所以fp4量化的过程和常见的w8a8-int8过程,有一些不同 + +量化过程如下: + +给定一组数,记作`X` + +#### 计算scale + +`scale1 = max(abs(Xg)) / 6.0` + +其中Xg表示一个group的数,6.0表示nvfp4的最大值 + +#### 量化scale + +`global_scale = 6.0 * 448.0 / max(abs(X))` + +`scale2 = global_scale * scale1` + +即 `scale2 = 6.0 * 448.0 / max(abs(X)) * max(abs(Xg)) / 6.0` + +即 `scale2 = max(abs(Xg)) / max(abs(X)) * 448.0` + +此时scale2被放缩到fp8(e4m3)的范围,然后对scale2进行量化到fp8 + +`scale2_fp8 = quant_fp8(scale2)` + +`scale2_fp8`则作为最终的矩阵乘法所需的量化scale参数 + +#### 量化X + +`scale2_fp32 = cvt2fp32(scale2_fp8)` + +`Xquant = quant_fp4(X * global_scale / scale2_fp32)` + +则 `Xquant ≈ quant_fp4(X / scale1)` + +#### fp4矩阵乘法 + +`ans = Aquant * Bquant * Ascale2 * Bscale2 / Aglobal_scale / Bglobal_scale` + +即 `ans ≈ Aquant * Bquant * Aglobal_scale * Ascale1 * Bglobal_scale * Bscale1 / Aglobal_scale / Bglobal_scale` + +即 `ans ≈ Aquant * Bquant * Ascale1 * Bscale1` diff --git a/lightx2v_kernel/include/lightx2v_kernel_ops.h b/lightx2v_kernel/include/lightx2v_kernel_ops.h new file mode 100644 index 0000000..b937971 --- /dev/null +++ b/lightx2v_kernel/include/lightx2v_kernel_ops.h @@ -0,0 +1,92 @@ +/* Copyright 2025 SGLang Team. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + + +#define _CONCAT(A, B) A##B +#define CONCAT(A, B) _CONCAT(A, B) + +#define _STRINGIFY(A) #A +#define STRINGIFY(A) _STRINGIFY(A) + + +#define REGISTER_EXTENSION(NAME) \ + PyMODINIT_FUNC CONCAT(PyInit_, NAME)() { \ + static struct PyModuleDef module = {PyModuleDef_HEAD_INIT, STRINGIFY(NAME), nullptr, 0, nullptr}; \ + return PyModule_Create(&module); \ + } + + +/* + * From csrc/gemm + */ +void scaled_nvfp4_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf, torch::Tensor const& input_sf); + +void scaled_mxfp4_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf); + +void scaled_mxfp6_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf); + +void scaled_mxfp8_quant_sm120( + torch::Tensor& output, torch::Tensor const& input, torch::Tensor& output_sf); + +void cutlass_scaled_nvfp4_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias); + +void cutlass_scaled_mxfp4_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias); + +void cutlass_scaled_mxfp6_mxfp8_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias); + + +void cutlass_scaled_mxfp8_mm_sm120( + torch::Tensor& D, + torch::Tensor const& A, + torch::Tensor const& B, + torch::Tensor const& A_sf, + torch::Tensor const& B_sf, + torch::Tensor const& alpha, + c10::optional const& bias); diff --git a/lightx2v_kernel/include/utils.h b/lightx2v_kernel/include/utils.h new file mode 100644 index 0000000..229c6e9 --- /dev/null +++ b/lightx2v_kernel/include/utils.h @@ -0,0 +1,348 @@ +/* Copyright 2025 SGLang Team. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#pragma once + +#include +#include +#include + +#include + +#ifndef USE_ROCM +// Adapt from FlashInfer +#ifdef FLASHINFER_ENABLE_F16 +#define _DISPATCH_CASE_F16(c_type, ...) \ + case at::ScalarType::Half: { \ + using c_type = nv_half; \ + return __VA_ARGS__(); \ + } +#else +#define _DISPATCH_CASE_F16(c_type, ...) +#endif + +#ifdef FLASHINFER_ENABLE_BF16 +#define _DISPATCH_CASE_BF16(c_type, ...) \ + case at::ScalarType::BFloat16: { \ + using c_type = nv_bfloat16; \ + return __VA_ARGS__(); \ + } +#else +#define _DISPATCH_CASE_BF16(c_type, ...) +#endif + +#ifdef FLASHINFER_ENABLE_FP8_E4M3 +#define _DISPATCH_CASE_FP8_E4M3(c_type, ...) \ + case at::ScalarType::Float8_e4m3fn: { \ + using c_type = __nv_fp8_e4m3; \ + return __VA_ARGS__(); \ + } +#else +#define _DISPATCH_CASE_FP8_E4M3(c_type, ...) +#endif + +#ifdef FLASHINFER_ENABLE_FP8_E5M2 +#define _DISPATCH_CASE_FP8_E5M2(c_type, ...) \ + case at::ScalarType::Float8_e5m2: { \ + using c_type = __nv_fp8_e5m2; \ + return __VA_ARGS__(); \ + } +#else +#define _DISPATCH_CASE_FP8_E5M2(c_type, ...) +#endif + +#define DISPATCH_PYTORCH_DTYPE_TO_CTYPE_FP16(pytorch_dtype, c_type, ...) \ + [&]() -> bool { \ + switch (pytorch_dtype) { \ + _DISPATCH_CASE_F16(c_type, __VA_ARGS__) \ + _DISPATCH_CASE_BF16(c_type, __VA_ARGS__) \ + default: \ + std::ostringstream oss; \ + oss << __PRETTY_FUNCTION__ << " failed to dispatch data type " << pytorch_dtype; \ + TORCH_CHECK(false, oss.str()); \ + return false; \ + } \ + }() + +#define DISPATCH_PYTORCH_DTYPE_TO_CTYPE_FP8(pytorch_dtype, c_type, ...) \ + [&]() -> bool { \ + switch (pytorch_dtype) { \ + _DISPATCH_CASE_FP8_E4M3(c_type, __VA_ARGS__) \ + _DISPATCH_CASE_FP8_E5M2(c_type, __VA_ARGS__) \ + default: \ + std::ostringstream oss; \ + oss << __PRETTY_FUNCTION__ << " failed to dispatch fp8 data type " << pytorch_dtype; \ + TORCH_CHECK(false, oss.str()); \ + return false; \ + } \ + }() + +#define DISPATCH_PYTORCH_DTYPE_TO_CTYPE(pytorch_dtype, c_type, ...) \ + [&]() -> bool { \ + switch (pytorch_dtype) { \ + _DISPATCH_CASE_F16(c_type, __VA_ARGS__) \ + _DISPATCH_CASE_BF16(c_type, __VA_ARGS__) \ + _DISPATCH_CASE_FP8_E4M3(c_type, __VA_ARGS__) \ + _DISPATCH_CASE_FP8_E5M2(c_type, __VA_ARGS__) \ + default: \ + std::ostringstream oss; \ + oss << __PRETTY_FUNCTION__ << " failed to dispatch data type " << pytorch_dtype; \ + TORCH_CHECK(false, oss.str()); \ + return false; \ + } \ + }() + +#define _DISPATCH_SWITCH(var_name, cond, ...) \ + [&]() -> bool { \ + switch (cond) { \ + __VA_ARGS__ \ + default: \ + std::ostringstream oss; \ + oss << __PRETTY_FUNCTION__ << " failed to dispatch " var_name " " << int(cond); \ + TORCH_CHECK(false, oss.str()); \ + return false; \ + } \ + }() + +#define _DISPATCH_SWITCH_U16x2(var1_name, var2_name, cond1, cond2, ...) \ + [&]() -> bool { \ + switch (pack_u16(cond1, cond2)) { \ + __VA_ARGS__ \ + default: \ + std::ostringstream oss; \ + oss << __PRETTY_FUNCTION__ << " failed to dispatch (" var1_name ", " var2_name "): (" << int(cond1) << ", " \ + << int(cond2) << ")"; \ + TORCH_CHECK(false, oss.str()); \ + return false; \ + } \ + }() + +#define _DISPATCH_CASE(case_expr, case_var, ...) \ + case case_expr: { \ + constexpr auto case_var = case_expr; \ + return __VA_ARGS__(); \ + } + +#define _DISPATCH_CASE_U16x2(case_expr1, case_expr2, case_var1, case_var2, ...) \ + case pack_u16(case_expr1, case_expr2): { \ + constexpr auto case_var1 = case_expr1; \ + constexpr auto case_var2 = case_expr2; \ + return __VA_ARGS__(); \ + } + +#define DISPATCH_BOOL(expr, const_expr, ...) \ + [&]() -> bool { \ + if (expr) { \ + constexpr bool const_expr = true; \ + return __VA_ARGS__(); \ + } else { \ + constexpr bool const_expr = false; \ + return __VA_ARGS__(); \ + } \ + }() + +inline void check_shape(const at::Tensor& a, const at::Tensor& b, const char* a_name, const char* b_name) { + TORCH_CHECK(a.dim() == b.dim(), a_name, ".dim() != ", b_name, ".dim(). ", a.dim(), " vs ", b.dim()); + for (int i = 0; i < a.dim(); ++i) { + TORCH_CHECK(a.size(i) == b.size(i), a_name, ".size(", i, ") != ", b_name, ".size(", i, ")"); + } +} + +inline constexpr uint32_t pack_u16(uint16_t a, uint16_t b) { + return (uint32_t(a) << 16) | uint32_t(b); +} + +#define CHECK_GQA_HEAD_DIVISIBLE(num_qo_heads, num_kv_heads) \ + TORCH_CHECK( \ + num_qo_heads % num_kv_heads == 0, \ + "num_qo_heads(", \ + num_qo_heads, \ + ") must be divisible by num_kv_heads(", \ + num_kv_heads, \ + ")") + +#define CHECK_CUDA(x) TORCH_CHECK(x.is_cuda(), #x " must be a CUDA tensor") + +#define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be contiguous") +#define CHECK_LAST_DIM_CONTIGUOUS(x) \ + TORCH_CHECK(x.strides()[x.strides().size() - 1] == 1, #x "must be contiguous at last dimension") + +#define CHECK_INPUT(x) \ + CHECK_CUDA(x); \ + CHECK_CONTIGUOUS(x) +#define CHECK_LAST_DIM_CONTIGUOUS_INPUT(x) \ + CHECK_CUDA(x); \ + CHECK_LAST_DIM_CONTIGUOUS(x) + +#define CHECK_DIM(d, x) TORCH_CHECK(x.dim() == d, #x " must be a " #d "D tensor") + +#define CHECK_SHAPE(a, b) check_shape(a, b, #a, #b) + +#define CHECK_EQ(a, b) TORCH_CHECK((a) == (b), "CHECK_EQ(" #a ", " #b ") failed. ", a, " vs ", b) + +#define CHECK_GE(a, b) TORCH_CHECK((a) >= (b), "CHECK_GE(" #a ", " #b ") failed. ", a, " vs ", b) + +inline bool is_float8_tensor(const at::Tensor& tensor) { + return tensor.scalar_type() == at::ScalarType::Float8_e4m3fn || tensor.scalar_type() == at::ScalarType::Float8_e5m2; +} +#endif + +struct cuda_error : public std::runtime_error { + /** + * @brief Constructs a `cuda_error` object with the given `message`. + * + * @param message The error char array used to construct `cuda_error` + */ + cuda_error(const char* message) : std::runtime_error(message) {} + /** + * @brief Constructs a `cuda_error` object with the given `message` string. + * + * @param message The `std::string` used to construct `cuda_error` + */ + cuda_error(std::string const& message) : cuda_error{message.c_str()} {} +}; + +#define CHECK_CUDA_SUCCESS(cmd) \ + do { \ + cudaError_t e = cmd; \ + if (e != cudaSuccess) { \ + std::stringstream _message; \ + auto s = cudaGetErrorString(e); \ + _message << std::string(s) + "\n" << __FILE__ << ':' << __LINE__; \ + throw cuda_error(_message.str()); \ + } \ + } while (0) + +#define CHECK_IS_CUDA(x) TORCH_CHECK(x.device().is_cuda(), #x " must be a CUDA tensor") +#define CHECK_IS_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be contiguous") +#define CHECK_CUDA_INPUT(x) \ + CHECK_IS_CUDA(x); \ + CHECK_IS_CONTIGUOUS(x) + +inline int getSMVersion() { + int device{-1}; + CHECK_CUDA_SUCCESS(cudaGetDevice(&device)); + int sm_major = 0; + int sm_minor = 0; + CHECK_CUDA_SUCCESS(cudaDeviceGetAttribute(&sm_major, cudaDevAttrComputeCapabilityMajor, device)); + CHECK_CUDA_SUCCESS(cudaDeviceGetAttribute(&sm_minor, cudaDevAttrComputeCapabilityMinor, device)); + return sm_major * 10 + sm_minor; +} + +// SGLANG_SHFL_XOR_* adapted from https://github.com/vllm-project/vllm/blob/v0.7.3/csrc/cuda_compat.h#L19-L28 +#ifndef USE_ROCM +#define SGLANG_SHFL_XOR_SYNC(mask, var, lane_mask) __shfl_xor_sync((mask), (var), (lane_mask)) +#define SGLANG_SHFL_XOR_SYNC_WIDTH(mask, var, lane_mask, width) __shfl_xor_sync((mask), (var), (lane_mask), (width)) +#else +#define SGLANG_SHFL_XOR_SYNC(mask, var, lane_mask) __shfl_xor((var), (lane_mask)) +#define SGLANG_SHFL_XOR_SYNC_WIDTH(mask, var, lane_mask, width) __shfl_xor((var), (lane_mask), (width)) +#endif + +#ifndef USE_ROCM +#define DISPATCH_PYTORCH_DTYPE_TO_CTYPE_FLOAT_FP16(pytorch_dtype, c_type, ...) \ + [&]() -> bool { \ + switch (pytorch_dtype) { \ + case at::ScalarType::Float: { \ + using c_type = float; \ + return __VA_ARGS__(); \ + } \ + _DISPATCH_CASE_F16(c_type, __VA_ARGS__) \ + _DISPATCH_CASE_BF16(c_type, __VA_ARGS__) \ + default: \ + std::ostringstream oss; \ + oss << __PRETTY_FUNCTION__ << " failed to dispatch data type " << pytorch_dtype; \ + TORCH_CHECK(false, oss.str()); \ + return false; \ + } \ + }() +#endif + +#define DISPATCH_CASE_INTEGRAL_TYPES(...) \ + AT_DISPATCH_CASE(at::ScalarType::Byte, __VA_ARGS__) \ + AT_DISPATCH_CASE(at::ScalarType::Char, __VA_ARGS__) \ + AT_DISPATCH_CASE(at::ScalarType::Short, __VA_ARGS__) \ + AT_DISPATCH_CASE(at::ScalarType::Int, __VA_ARGS__) \ + AT_DISPATCH_CASE(at::ScalarType::Long, __VA_ARGS__) + +#define DISPATCH_INTEGRAL_TYPES(TYPE, NAME, ...) \ + AT_DISPATCH_SWITCH(TYPE, NAME, DISPATCH_CASE_INTEGRAL_TYPES(__VA_ARGS__)) + +#define CEILDIV(x, y) (((x) + (y) - 1) / (y)) +#define WARP_SIZE 32 + +#ifndef USE_ROCM +#include +using FP8_TYPE = c10::Float8_e4m3fn; +C10_HOST_DEVICE constexpr auto FP8_E4M3_MAX = std::numeric_limits::max(); +#else +#include + +using FP8_TYPE = c10::Float8_e4m3fnuz; +constexpr auto FP8_E4M3_MAX = 224.0f; +#endif + +#ifndef USE_ROCM +__device__ __forceinline__ float atomicMaxFloat(float* addr, float value) { + float old; + old = (value >= 0) ? __int_as_float(atomicMax((int*)addr, __float_as_int(value))) + : __uint_as_float(atomicMin((unsigned int*)addr, __float_as_uint(value))); + return old; +} + +__device__ __forceinline__ float warpReduceMax(float max_value) { + max_value = fmaxf(max_value, SGLANG_SHFL_XOR_SYNC(0xffffffff, max_value, 16)); + max_value = fmaxf(max_value, SGLANG_SHFL_XOR_SYNC(0xffffffff, max_value, 8)); + max_value = fmaxf(max_value, SGLANG_SHFL_XOR_SYNC(0xffffffff, max_value, 4)); + max_value = fmaxf(max_value, SGLANG_SHFL_XOR_SYNC(0xffffffff, max_value, 2)); + max_value = fmaxf(max_value, SGLANG_SHFL_XOR_SYNC(0xffffffff, max_value, 1)); + return max_value; +} + +__device__ __forceinline__ float blockReduceMax(float max_value) { + static __shared__ float warpLevelMaxs[WARP_SIZE]; + const int laneId = threadIdx.x % WARP_SIZE; + const int warpId = threadIdx.x / WARP_SIZE; + + max_value = warpReduceMax(max_value); + + if (laneId == 0) warpLevelMaxs[warpId] = max_value; + __syncthreads(); + + max_value = (threadIdx.x < blockDim.x / WARP_SIZE) ? warpLevelMaxs[laneId] : 0; + if (warpId == 0) max_value = warpReduceMax(max_value); + + return max_value; +} +#endif + +// Pads to a multiple of `alignment` rows. +inline torch::Tensor pad_tensor(const torch::Tensor& tensor, int64_t alignment = 4, bool is_column_major = false) { + int64_t rows = tensor.size(0); + int64_t cols = tensor.size(1); + int64_t pad_rows = (alignment - (rows % alignment)) % alignment; // Compute padding size + + if (pad_rows == 0) { + return tensor; // Already aligned + } + + torch::Tensor padding = torch::zeros({pad_rows, cols}, tensor.options()); + torch::Tensor tensor_padded = torch::cat({tensor, padding}, 0); // Pad along rows + + // Ensure column-major layout + if (is_column_major) { + return tensor_padded.t().contiguous().t(); + } + return tensor_padded; +} diff --git a/lightx2v_kernel/pyproject.toml b/lightx2v_kernel/pyproject.toml new file mode 100644 index 0000000..058ee7e --- /dev/null +++ b/lightx2v_kernel/pyproject.toml @@ -0,0 +1,39 @@ +[build-system] +requires = [ + "scikit-build-core>=0.10", + "torch>=2.7.0", + "wheel", +] +build-backend = "scikit_build_core.build" + +[project] +name = "lightx2v-kernel" +version = "0.0.1" +description = "Kernel Library for lightx2v" +readme = "README.md" +requires-python = ">=3.9" +license = { file = "LICENSE" } +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", + "Environment :: GPU :: NVIDIA CUDA" +] +dependencies = [] + +[project.urls] +"Homepage" = "" +"Bug Tracker" = "" + +[tool.wheel] +exclude = [ + "dist*", + "tests*", +] + +[tool.scikit-build] +cmake.build-type = "Release" +minimum-version = "build-system.requires" + +wheel.py-api = "cp39" +wheel.license-files = [] +wheel.packages = ["python/lightx2v_kernel"] diff --git a/lightx2v_kernel/python/lightx2v_kernel/__init__.py b/lightx2v_kernel/python/lightx2v_kernel/__init__.py new file mode 100644 index 0000000..3f78cf8 --- /dev/null +++ b/lightx2v_kernel/python/lightx2v_kernel/__init__.py @@ -0,0 +1,15 @@ +import ctypes +import os +import platform +from lightx2v_kernel import common_ops # noqa: F401 +from lightx2v_kernel.version import __version__ + + +SYSTEM_ARCH = platform.machine() + +cuda_path = f"/usr/local/cuda/targets/{SYSTEM_ARCH}-linux/lib/libcudart.so.12" +if os.path.exists(cuda_path): + ctypes.CDLL(cuda_path, mode=ctypes.RTLD_GLOBAL) + + +build_tree_kernel = None diff --git a/lightx2v_kernel/python/lightx2v_kernel/gemm.py b/lightx2v_kernel/python/lightx2v_kernel/gemm.py new file mode 100644 index 0000000..d79ca21 --- /dev/null +++ b/lightx2v_kernel/python/lightx2v_kernel/gemm.py @@ -0,0 +1,115 @@ +import torch + + +def cutlass_scaled_nvfp4_mm(mat_a, mat_b, scales_a, scales_b, alpha, bias=None): + m, n = mat_a.shape[0], mat_b.shape[0] + out = torch.empty((m, n), dtype=torch.bfloat16, device=mat_a.device) + torch.ops.lightx2v_kernel.cutlass_scaled_nvfp4_mm_sm120.default(out, mat_a, mat_b, scales_a, scales_b, alpha, bias) + return out + + +def scaled_nvfp4_quant(input: torch.Tensor, input_global_scale: torch.Tensor): + """ + Quantize input tensor to FP4 and return quantized tensor and scale. + + This function quantizes the last dimension of the given tensor `input`. For + every 16 consecutive elements, a single dynamically computed scaling factor + is shared. This scaling factor is quantized using the `input_global_scale` + and is stored in a swizzled layout (see + https://docs.nvidia.com/cuda/parallel-thread-execution/#tcgen05-mma-scale-factor-b-layout-4x). + + Args: + input: The input tensor to be quantized to FP4 + input_global_scale: A scalar scaling factor for the entire tensor. + + Returns: + Tuple[torch.Tensor, torch.Tensor]: The output tensor in FP4 but every + two values are packed into a uint8 and float8_e4m3 scaling factors + in a sizzled layout. + """ + # assert input.ndim >= 1, f"input.ndim needs to be >= 1, but got {input.ndim}." + # other_dims = 1 if input.ndim == 1 else -1 + # input = input.reshape(other_dims, input.shape[-1]) + m, n = input.shape + block_size = 16 + device = input.device + + # assert n % block_size == 0, f"last dim has to be multiple of 16, but got {n}." + # assert input.dtype in ( + # torch.float16, + # torch.bfloat16, + # ), f"input.dtype needs to be fp16 or bf16 but got {input.dtype}." + + # Two fp4 values will be packed into an uint8. + output = torch.empty((m, n // 2), device=device, dtype=torch.uint8) + + # We use the rounded values to store the swizzled values. Then, the scaling + # factors in float8_e4m3fn are packed into an int32 for every 4 values. + # rounded_m = ((m + 128 - 1) // 128) * 128 + # scale_n = n // block_size + # rounded_n = ((scale_n + 4 - 1) // 4) * 4 + output_scale = torch.zeros((((m + 128 - 1) // 128) * 128, (n // block_size + 4 - 1) // 4), device=device, dtype=torch.int32) + + torch.ops.lightx2v_kernel.scaled_nvfp4_quant_sm120.default(output, input, output_scale, input_global_scale) + output_scale = output_scale.view(torch.float8_e4m3fn) + return output, output_scale + + +def scaled_mxfp4_quant(input: torch.Tensor): + m, n = input.shape + block_size = 32 + device = input.device + + output = torch.empty((m, n // 2), device=device, dtype=torch.uint8) + output_scale = torch.zeros(((m + 128 - 1) // 128 * 128, (n // block_size + 4 - 1) // 4), device=device, dtype=torch.int32) + + torch.ops.lightx2v_kernel.scaled_mxfp4_quant_sm120.default(output, input, output_scale) + output_scale = output_scale.view(torch.float8_e8m0fnu) + return output, output_scale + + +def scaled_mxfp6_quant(input: torch.Tensor): + m, n = input.shape + block_size = 32 + device = input.device + + output = torch.empty((m, 3 * n // 4), device=device, dtype=torch.uint8) + output_scale = torch.zeros(((m + 128 - 1) // 128 * 128, (n // block_size + 4 - 1) // 4), device=device, dtype=torch.int32) + + torch.ops.lightx2v_kernel.scaled_mxfp6_quant_sm120.default(output, input, output_scale) + output_scale = output_scale.view(torch.float8_e8m0fnu) + return output, output_scale + + +def scaled_mxfp8_quant(input: torch.Tensor): + m, n = input.shape + block_size = 32 + device = input.device + + output = torch.empty((m, n), device=device, dtype=torch.uint8) + output_scale = torch.empty(((m + 128 - 1) // 128 * 128, (n // block_size + 4 - 1) // 4), device=device, dtype=torch.int32) + + torch.ops.lightx2v_kernel.scaled_mxfp8_quant_sm120.default(output, input, output_scale) + output_scale = output_scale.view(torch.float8_e8m0fnu) + return output, output_scale + + +def cutlass_scaled_mxfp4_mm(mat_a, mat_b, scales_a, scales_b, alpha, bias=None): + m, n = mat_a.shape[0], mat_b.shape[0] + out = torch.empty((m, n), dtype=torch.bfloat16, device=mat_a.device) + torch.ops.lightx2v_kernel.cutlass_scaled_mxfp4_mm_sm120.default(out, mat_a, mat_b, scales_a, scales_b, alpha, bias) + return out + + +def cutlass_scaled_mxfp6_mxfp8_mm(mat_a, mat_b, scales_a, scales_b, alpha, bias=None): + m, n = mat_a.shape[0], mat_b.shape[0] + out = torch.empty((m, n), dtype=torch.bfloat16, device=mat_a.device) + torch.ops.lightx2v_kernel.cutlass_scaled_mxfp6_mxfp8_mm_sm120.default(out, mat_a, mat_b, scales_a, scales_b, alpha, bias) + return out + + +def cutlass_scaled_mxfp8_mm(mat_a, mat_b, scales_a, scales_b, alpha, bias=None): + m, n = mat_a.shape[0], mat_b.shape[0] + out = torch.empty((m, n), dtype=torch.bfloat16, device=mat_a.device) + torch.ops.lightx2v_kernel.cutlass_scaled_mxfp8_mm_sm120.default(out, mat_a, mat_b, scales_a, scales_b, alpha, bias) + return out diff --git a/lightx2v_kernel/python/lightx2v_kernel/utils.py b/lightx2v_kernel/python/lightx2v_kernel/utils.py new file mode 100644 index 0000000..c01be93 --- /dev/null +++ b/lightx2v_kernel/python/lightx2v_kernel/utils.py @@ -0,0 +1,157 @@ +import functools +from typing import Dict, Tuple, Callable, List + +import torch + + +def get_cuda_stream() -> int: + return torch.cuda.current_stream().cuda_stream + + +_cache_buf: Dict[Tuple[str, torch.device], torch.Tensor] = {} + + +def _get_cache_buf(name: str, bytes: int, device: torch.device) -> torch.Tensor: + key = (name, device) + buf = _cache_buf.get(key) + if buf is None: + buf = torch.empty(bytes, dtype=torch.uint8, device=device) + _cache_buf[key] = buf + return buf + + +def _to_tensor_scalar_tuple(x): + if isinstance(x, torch.Tensor): + return (x, 0) + else: + return (None, x) + + +@functools.lru_cache(maxsize=1) +def is_hopper_arch() -> bool: + # Hopper arch's compute capability == 9.0 + device = torch.cuda.current_device() + major, minor = torch.cuda.get_device_capability(device) + return major == 9 + + +def error(y_pred: torch.Tensor, y_real: torch.Tensor) -> torch.Tensor: + """ + Compute SNR between y_pred(tensor) and y_real(tensor) + + SNR can be calcualted as following equation: + + SNR(pred, real) = (pred - real) ^ 2 / (real) ^ 2 + + if x and y are matrixs, SNR error over matrix should be the mean value of SNR error over all elements. + + SNR(pred, real) = mean((pred - real) ^ 2 / (real) ^ 2) + + + Args: + y_pred (torch.Tensor): _description_ + y_real (torch.Tensor): _description_ + reduction (str, optional): _description_. Defaults to 'mean'. + + Raises: + ValueError: _description_ + ValueError: _description_ + + Returns: + torch.Tensor: _description_ + """ + y_pred = torch.flatten(y_pred).float() + y_real = torch.flatten(y_real).float() + + if y_pred.shape != y_real.shape: + raise ValueError(f"Can not compute snr loss for tensors with different shape. ({y_pred.shape} and {y_real.shape})") + + noise_power = torch.pow(y_pred - y_real, 2).sum(dim=-1) + signal_power = torch.pow(y_real, 2).sum(dim=-1) + snr = (noise_power) / (signal_power + 1e-7) + return snr.item() + + +def benchmark(func: Callable, shape: List[int], tflops: float, steps: int, *args, **kwargs): + """ + A decorator function to assist in performance testing of CUDA operations. + + This function will: + 1. Automatically determine whether any parameters in the argument list, + or the output of the `func`, are of type `torch.Tensor`. + 2. If so, calculate the memory usage of the input and output tensors + on the GPU (based on their data type and `torch.numel()`). + 3. Establish a CUDA graph and attempt to execute `func` repeatedly for `steps` iterations. + 4. Record the execution time during these iterations. + 5. Use the information above to compute the compute performance (TFLOPS) and memory throughput. + + Args: + func (function): The function to benchmark. + shape (list of int): The problem shape. + tflops (float): The computational workload (in TFLOPS) per call of `func`. + steps (int): The number of times the function is executed during benchmarking. + *args: Positional arguments to be passed to the `func`. + **kwargs: Keyword arguments to be passed to the `func`. + + Returns: + function result + """ + + # Ensure CUDA is available + if not torch.cuda.is_available(): + raise RuntimeError("CUDA is required for benchmarking.") + + # Check for torch.Tensor in inputs and outputs + input_tensors = [arg for arg in args if isinstance(arg, torch.Tensor)] + input_tensors += [value for value in kwargs.values() if isinstance(value, torch.Tensor)] + + def calculate_memory(tensor: torch.Tensor): + """Calculate memory usage in bytes for a tensor.""" + return tensor.numel() * tensor.element_size() + + input_memory = sum(calculate_memory(t) for t in input_tensors) + + # Execute the function to inspect outputs + with torch.no_grad(): + output = func(*args, **kwargs) + + output_memory = 0 + if isinstance(output, torch.Tensor): + output_memory = calculate_memory(output) + elif isinstance(output, (list, tuple)): + output_memory = sum(calculate_memory(o) for o in output if isinstance(o, torch.Tensor)) + + total_memory = input_memory + output_memory + + # Warm-up and CUDA graph creation + for _ in range(10): # Warm-up + func(*args, **kwargs) + + torch.cuda.synchronize() # Ensure no pending operations + + # Benchmark the function + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + start_event.record() + for _ in range(steps): + func(*args, **kwargs) + end_event.record() + + torch.cuda.synchronize() # Ensure all operations are finished + elapsed_time_ms = start_event.elapsed_time(end_event) # Time in milliseconds + + # Calculate performance metrics + elapsed_time_s = elapsed_time_ms / 1000 # Convert to seconds + avg_time_per_step = elapsed_time_s / steps + compute_performance = tflops / avg_time_per_step # TFLOPS + memory_throughput = (total_memory * steps / (1024**3)) / elapsed_time_s # GB/s + + # Print performance metrics + print(f"Function: {func.__name__}{shape}") + # print(f"Function: {func.__ne__}{shape}") + print(f"Elapsed Time (total): {elapsed_time_s:.4f} seconds") + print(f"Average Time Per Step: {avg_time_per_step * 1000:.3f} ms") + print(f"Compute Performance: {compute_performance:.2f} TFLOPS") + print(f"Memory Throughput: {memory_throughput:.2f} GB/s") + print("") # print a blank line. diff --git a/lightx2v_kernel/python/lightx2v_kernel/version.py b/lightx2v_kernel/python/lightx2v_kernel/version.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/lightx2v_kernel/python/lightx2v_kernel/version.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/lightx2v_kernel/test/mxfp4_mxfp4/test_bench.py b/lightx2v_kernel/test/mxfp4_mxfp4/test_bench.py new file mode 100644 index 0000000..5495b6f --- /dev/null +++ b/lightx2v_kernel/test/mxfp4_mxfp4/test_bench.py @@ -0,0 +1,121 @@ +import torch +from lightx2v_kernel.gemm import scaled_mxfp4_quant, cutlass_scaled_mxfp4_mm +import time + + +class MMWeightMxfp4ActMxfp4: + def __init__(self, weight, bias): + self.load_fp4_weight(weight, bias) + self.act_quant_func = self.act_quant_fp4 + self.set_alpha() + + @torch.no_grad() + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = cutlass_scaled_mxfp4_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + @torch.no_grad() + def load_fp4_weight(self, weight, bias): + self.weight, self.weight_scale = scaled_mxfp4_quant(weight) + self.bias = bias + + def set_alpha(self): + self.alpha = torch.tensor(1.0, dtype=torch.float32, device=self.weight.device) + + @torch.no_grad() + def act_quant_fp4(self, x): + return scaled_mxfp4_quant(x) + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + mm = MMWeightMxfp4ActMxfp4(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightMxfp4ActMxfp4(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/mxfp4_mxfp4/test_bench3_bias.py b/lightx2v_kernel/test/mxfp4_mxfp4/test_bench3_bias.py new file mode 100644 index 0000000..a6a2b16 --- /dev/null +++ b/lightx2v_kernel/test/mxfp4_mxfp4/test_bench3_bias.py @@ -0,0 +1,94 @@ +import torch +import time +from test_bench import MMWeightMxfp4ActMxfp4 + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.ones(1, n, dtype=torch.bfloat16).cuda() * 50 + + mm = MMWeightMxfp4ActMxfp4(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.ones(1, n, dtype=torch.bfloat16).cuda() * 50 + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightMxfp4ActMxfp4(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/mxfp4_mxfp4/test_mxfp4_quant.py b/lightx2v_kernel/test/mxfp4_mxfp4/test_mxfp4_quant.py new file mode 100644 index 0000000..34762b1 --- /dev/null +++ b/lightx2v_kernel/test/mxfp4_mxfp4/test_mxfp4_quant.py @@ -0,0 +1,52 @@ +import unittest +import torch +from lightx2v_kernel.gemm import cutlass_scaled_mxfp4_mm +from lightx2v_kernel.gemm import scaled_mxfp4_quant +from torch.nn.functional import linear +from lightx2v_kernel.utils import error, benchmark + + +class TestQuantBF162MXFP4(unittest.TestCase): + def setUp(self): + self.tokens = [128, 257, 512, 1024, 13325, 32130, 32760] # , 75348 + self.channels = [128, 1536, 5120, 8960] # , 13824 + self.hiddenDims = [128, 1536, 3072, 5120, 8960, 12800] # , 13824 + + self.device = "cuda" + self.dtype = torch.bfloat16 + + def test_accuracy(self): + """Test the accuracy of quantization from BF16 to MXFP4.""" + for m in self.tokens: + for k in self.hiddenDims: + for n in self.channels: + with self.subTest(shape=[m, k, n]): + activation = torch.randn(m, k, dtype=self.dtype, device=self.device) + activation_quant_pred, activation_scale_pred = scaled_mxfp4_quant(activation) + + weight = torch.randn(n, k, dtype=self.dtype, device=self.device) + weight_quant_pred, weight_scale_pred = scaled_mxfp4_quant(weight) + + bias = torch.rand(1, n, dtype=self.dtype, device=self.device) * 10 + + alpha = torch.tensor(1.0, device=self.device, dtype=torch.float32) + mm_pred = cutlass_scaled_mxfp4_mm(activation_quant_pred, weight_quant_pred, activation_scale_pred, weight_scale_pred, alpha=alpha, bias=bias) + + mm_real = linear(activation, weight, bias=bias).to(torch.bfloat16) + + # mxfp4_mxfp4 mm have very low accuracy, so we set the threshold to 3e-2. + self.assertTrue(error(mm_pred, mm_real) < 3e-2, f"Accuracy test failed for shape {m, k, n}: Error {error(mm_pred, mm_real)} exceeds threshold.") + + def test_performance(self): + """Benchmark the performance of Activation quantization from BF16 to MXFP4.""" + for m in self.tokens: + for k in self.hiddenDims: + with self.subTest(shape=[m, k]): + input = torch.randn(m, k, dtype=self.dtype, device=self.device) + shape = [m, k] + tflops = 2 * (m * k / 1024**4) + benchmark(scaled_mxfp4_quant, shape, tflops, 100, input) + + +if __name__ == "__main__": + unittest.main() diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test.py b/lightx2v_kernel/test/mxfp6_mxfp8/test.py new file mode 100644 index 0000000..62993f6 --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test.py @@ -0,0 +1,29 @@ +import torch +from lightx2v_kernel.gemm import cutlass_scaled_mxfp6_mxfp8_mm + + +def test_cutlass_scaled_mxfp6_mxfp8_mm_sm120(): + m, k, n = 1024, 2048, 4096 + + input_shape = (m, k) + weight_shape = (n, k) + + input_tensor_quant = (torch.rand((input_shape[0], input_shape[1]), device="cuda") * 10).to(torch.uint8) + weight = (torch.rand((weight_shape[0], weight_shape[1] * 3 // 4), device="cuda") * 10).to(torch.uint8) + + print(f"shape: {input_tensor_quant.shape}, {weight.shape}") + + input_tensor_scale = torch.rand((input_shape[0], input_shape[1] // 32), device="cuda").to(torch.float8_e8m0fnu) + weight_scale = torch.rand(weight_shape[0], weight_shape[1] // 32, device="cuda").to(torch.float8_e8m0fnu) + + print(f"shape: {input_tensor_scale.shape}, {weight_scale.shape}") + + alpha = torch.tensor(0.0002765655517578125, device="cuda", dtype=torch.float32) + bias = None + + out = cutlass_scaled_mxfp6_mxfp8_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + print(f"out: {out}, shape: {out.shape}") + + +if __name__ == "__main__": + test_cutlass_scaled_mxfp6_mxfp8_mm_sm120() diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test_bench.py b/lightx2v_kernel/test/mxfp6_mxfp8/test_bench.py new file mode 100644 index 0000000..77779cc --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test_bench.py @@ -0,0 +1,121 @@ +import torch +from lightx2v_kernel.gemm import scaled_mxfp8_quant, scaled_mxfp6_quant, cutlass_scaled_mxfp6_mxfp8_mm +import time + + +class MMWeightMxfp6ActMxfp8: + def __init__(self, weight, bias): + self.load_fp6_weight(weight, bias) + self.act_quant_func = self.act_quant_fp8 + self.set_alpha() + + @torch.no_grad() + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = cutlass_scaled_mxfp6_mxfp8_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + @torch.no_grad() + def load_fp6_weight(self, weight, bias): + self.weight, self.weight_scale = scaled_mxfp6_quant(weight) + self.bias = bias + + def set_alpha(self): + self.alpha = torch.tensor(1.0, dtype=torch.float32, device=self.weight.device) + + @torch.no_grad() + def act_quant_fp8(self, x): + return scaled_mxfp8_quant(x) + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + mm = MMWeightMxfp6ActMxfp8(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightMxfp6ActMxfp8(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test_bench3_bias.py b/lightx2v_kernel/test/mxfp6_mxfp8/test_bench3_bias.py new file mode 100644 index 0000000..878c21e --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test_bench3_bias.py @@ -0,0 +1,94 @@ +import torch +import time +from test_bench import MMWeightMxfp6ActMxfp8 + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + + mm = MMWeightMxfp6ActMxfp8(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.ones(1, n, dtype=torch.bfloat16).cuda() * 50 + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightMxfp6ActMxfp8(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test_fake_quant.py b/lightx2v_kernel/test/mxfp6_mxfp8/test_fake_quant.py new file mode 100644 index 0000000..5b83e54 --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test_fake_quant.py @@ -0,0 +1,181 @@ +import torch +from torchao.prototype.mx_formats.constants import DTYPE_FP6_E3M2 +from torchao.prototype.mx_formats.mx_tensor import to_mx, pack_uint6 + + +def quant2mxfp8(x: torch.Tensor): + block_size = 32 + m, _ = x.shape + scale, output = to_mx(x, torch.float8_e4m3fn, block_size=block_size) + return scale.reshape(m, -1), output + + +def quant2mxfp6(x: torch.Tensor): + block_size = 32 + m, _ = x.shape + scale, output = to_mx(x, DTYPE_FP6_E3M2, block_size=block_size, pack_fp6=False) + return scale.reshape(m, -1), output + + +def scale_pad_and_swizzle(scale: torch.Tensor): + m, s = scale.shape + + # pad the m up to 128, s up to 4 + padded_m = (m + 127) // 128 * 128 + padded_s = (s + 3) // 4 * 4 + padded_scale = torch.empty(padded_m, padded_s, device=scale.device, dtype=scale.dtype) + padded_scale[:m, :s] = scale + + # swizzle the padded scale + swizzled_scale = padded_scale.reshape(padded_m // 128, 128, padded_s // 4, 4).reshape(padded_m // 128, 4, 32, padded_s // 4, 4).permute(0, 3, 2, 1, 4) + + return swizzled_scale.reshape(padded_m, padded_s) + + +############################################################### +# Packing kernel and func +############################################################### + +import triton # noqa: E402 +import triton.language as tl # noqa: E402 + + +@triton.autotune( + configs=[ + triton.Config({"BLOCK_SIZE_IN": 2}, num_warps=1), + triton.Config({"BLOCK_SIZE_IN": 4}, num_warps=1), + triton.Config({"BLOCK_SIZE_IN": 8}, num_warps=1), + triton.Config({"BLOCK_SIZE_IN": 16}, num_warps=1), + ], + key=["n_mx_blocks"], +) +@triton.jit +def triton_pack_uint6_kernel( + input_ptr, + output_ptr, + n_mx_blocks, + MX_BLOCK_SIZE: tl.constexpr, + PACKED_MX_BLOCK_SIZE: tl.constexpr, + BLOCK_SIZE_IN: tl.constexpr, +): + pid = tl.program_id(axis=0) + block_start = pid * BLOCK_SIZE_IN + + # input_ptr is shape [n_mx_blocks, MX_BLOCK_SIZE] + # Load BLOCK_SIZE rows of input_ptr + offsets_rows = block_start + tl.arange(0, BLOCK_SIZE_IN) + offsets_cols = tl.arange(0, MX_BLOCK_SIZE // 4) + offsets = offsets_rows[:, None] * MX_BLOCK_SIZE + (4 * offsets_cols[None, :]) + mask = (offsets_rows[:, None] < n_mx_blocks) & (offsets_cols[None, :] < MX_BLOCK_SIZE // 4) + + # x is shape [BLOCK_SIZE, MX_BLOCK_SIZE] + x_0 = tl.load(input_ptr + offsets, mask=mask) + x_1 = tl.load(input_ptr + offsets + 1, mask=mask) + x_2 = tl.load(input_ptr + offsets + 2, mask=mask) + x_3 = tl.load(input_ptr + offsets + 3, mask=mask) + + # 4个fp6 a b c d. a:[a5 a4 a3 a2 a1 a0], b..., c..., d... + # 3个unint8 pack0 pack1 pack2 + # cutlass需要的: + # packed0: [b1 b0][a5 a4 a3 a2 a1 a0] + # packed1: [c3 c2 c1 c0][b5 b4 b3 b2] + # packed2: [d5 d4 d3 d2 d1 d0][c5 c4] + bits_packed0 = (x_1 << 6) | x_0 + bits_packed1 = (x_2 << 4) | (x_1 >> 2) + bits_packed2 = (x_3 << 2) | (x_2 >> 4) + + # Store values in a uint8 tensor of length `3 * MX_BLOCK_SIZE / 4` + offsets_out_4_a = offsets_rows[:, None] * PACKED_MX_BLOCK_SIZE + 3 * offsets_cols[None, :] + offsets_out_4_b = offsets_rows[:, None] * PACKED_MX_BLOCK_SIZE + 3 * offsets_cols[None, :] + 1 + offsets_out_2 = offsets_rows[:, None] * PACKED_MX_BLOCK_SIZE + 3 * offsets_cols[None, :] + 2 + + # Store into output tensor + tl.store( + output_ptr + offsets_out_4_a, + bits_packed0, + mask=mask, + ) + + tl.store( + output_ptr + offsets_out_4_b, + bits_packed1, + mask=mask, + ) + + tl.store( + output_ptr + offsets_out_2, + bits_packed2, + mask=mask, + ) + + +def pack_uint6(uint8_data: torch.Tensor) -> torch.Tensor: + # ensure input data is contiguous before passing to kernel + assert uint8_data.is_contiguous() + + # tensor should already be of shape [..., mx_block_size] + mx_block_size = uint8_data.shape[-1] + assert mx_block_size % 4 == 0 + + # effective mx block size since we're packing 2 fp4 into 1 uint8 + packed_mx_block_size = 3 * mx_block_size // 4 + packed_shape = [uint8_data.shape[0], packed_mx_block_size] + n_mx_blocks = uint8_data.numel() // mx_block_size + + grid = lambda meta: (triton.cdiv(n_mx_blocks, meta["BLOCK_SIZE_IN"]),) # noqa: E731 + + # contiguous uint8 container in which we can store the unpacked tensor + packed_uint8_data = torch.empty(packed_shape, dtype=torch.uint8, device=uint8_data.device) + + triton_pack_uint6_kernel[grid]( + uint8_data, + packed_uint8_data, + n_mx_blocks, + MX_BLOCK_SIZE=mx_block_size, + PACKED_MX_BLOCK_SIZE=packed_mx_block_size, + ) + + return packed_uint8_data + + +M = [257, 512, 1024, 13325, 32130, 32760] # , 75348 +N = [1536, 5120, 8960] # , 13824 +K = [128, 256, 512, 1024, 2048, 4096] # , 13824 + + +for m in M: + for n in N: + for k in K: + x = torch.randn(m, k, device="cuda", dtype=torch.bfloat16) + w = torch.randn(n, k, device="cuda", dtype=torch.bfloat16) + # excute quant + x_scale, x_quant = quant2mxfp8(x) + w_scale, w_quant = quant2mxfp6(w) + + # pack fp6 for cutlass + w_quant_packed = pack_uint6(w_quant.reshape(-1, 32)) + + # pad and swizzle scale + padded_and_swizzled_x_scale = scale_pad_and_swizzle(x_scale) + padded_and_swizzled_w_scale = scale_pad_and_swizzle(w_scale) + + # ref mm result + ref_mm = torch.nn.functional.linear(x, w).to(torch.bfloat16) + + # custom scaled mm + from lightx2v_kernel.gemm import cutlass_scaled_mxfp6_mxfp8_mm + + alpha = torch.tensor(1.0, device="cuda", dtype=torch.float32) + bias = None + x_quant = x_quant.reshape(m, k).view(torch.uint8) + w_quant_packed = w_quant_packed.reshape(n, 3 * k // 4) + custom_mm = cutlass_scaled_mxfp6_mxfp8_mm(x_quant, w_quant_packed, padded_and_swizzled_x_scale, padded_and_swizzled_w_scale, alpha, bias) + + # cal snr + from lightx2v_kernel.utils import error + + print(f"m: {m}, n: {n}, k: {k}, error: {error(ref_mm, custom_mm)}") + + # cal cos + cos_sim = torch.nn.functional.cosine_similarity(ref_mm.flatten(), custom_mm.flatten(), dim=0) + print(f"m: {m}, n: {n}, k: {k}, cos_sim: {cos_sim}") diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test_mm_tflops.py b/lightx2v_kernel/test/mxfp6_mxfp8/test_mm_tflops.py new file mode 100644 index 0000000..b62efe5 --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test_mm_tflops.py @@ -0,0 +1,115 @@ +import torch +from lightx2v_kernel.gemm import cutlass_scaled_mxfp6_mxfp8_mm + + +""" +input_shape = (1024, 2048) +weight_shape = (4096, 2048) + +input_tensor_quant = (torch.rand((1024, 1024), device="cuda") * 10).to(torch.uint8) +weight = (torch.rand((4096, 1024), device="cuda") * 10).to(torch.uint8) +input_tensor_scale = torch.rand(1024, 128, device="cuda").to(torch.float8_e8m0fnu) +weight_scale = torch.rand(4096, 128, device="cuda").to(torch.float8_e8m0fnu) +alpha = torch.tensor(1.0, device="cuda").to(torch.float32) +bias = None +""" + + +def test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias): + output_tensor = cutlass_scaled_mxfp6_mxfp8_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha=alpha, bias=bias) + return output_tensor + + +def test_tflops(input_shape, weight_shape, num_warmup=10, num_runs=100): + """ + 测试test_mm函数的TFLOPS性能 + """ + + # 创建输入数据 + input_tensor_quant = (torch.rand((input_shape[0], input_shape[1]), device="cuda") * 10).to(torch.uint8) + weight = (torch.rand((weight_shape[0], 3 * weight_shape[1] // 4), device="cuda") * 10).to(torch.uint8) + + input_tensor_scale = torch.rand(((input_shape[0] + 128 - 1) // 128) * 128, (input_shape[1] // 32 + 4 - 1) // 4 * 4, device="cuda").to(torch.float8_e8m0fnu) + weight_scale = torch.rand(weight_shape[0], weight_shape[1] // 32, device="cuda").to(torch.float8_e8m0fnu) + alpha = torch.tensor(1.0, device="cuda", dtype=torch.float32) + bias = None + + # 预热GPU + for _ in range(num_warmup): + test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + + # 同步GPU + torch.cuda.synchronize() + + # 创建GPU事件用于精确计时 + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + # 测量时间 + start_event.record() + for _ in range(num_runs): + result = test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + end_event.record() + + # 同步并计算时间 + torch.cuda.synchronize() + elapsed_time_ms = start_event.elapsed_time(end_event) + elapsed_time_s = elapsed_time_ms / 1000.0 + + # 计算FLOPS + # 矩阵乘法 A(M x K) @ B(K x N) = C(M x N) + # M = batch_size, K = input_dim, N = output_dim + M = input_shape[0] + K = input_shape[1] + N = weight_shape[0] + + # 每次矩阵乘法的FLOPS = 2 * M * N * K (每个输出元素需要K次乘法和K次加法) + flops_per_run = 2 * M * N * K + total_flops = flops_per_run * num_runs + + # 计算TFLOPS (万亿次浮点运算每秒) + tflops = total_flops / (elapsed_time_s * 1e12) + + print(f"测试结果:") + print(f" 输入形状: {input_shape} (M={M}, K={K})") + print(f" 权重形状: {weight_shape} (N={N}, K={K})") + print(f" 输出形状: ({M}, {N})") + print(f" 运行次数: {num_runs}") + print(f" 总执行时间: {elapsed_time_ms:.2f} ms") + print(f" 平均每次执行时间: {elapsed_time_ms / num_runs:.4f} ms") + print(f" 每次运行FLOPS: {flops_per_run / 1e9:.2f} GFLOPS") + print(f" 总FLOPS: {total_flops / 1e12:.2f} TFLOPS") + print(f" 计算性能: {tflops:.2f} TFLOPS") + + return tflops + + +if __name__ == "__main__": + # 测试不同大小的矩阵乘法 + # (m,k) (n,k) + test_cases = [ + ((32130, 5120), (5120, 5120)), + ((512, 1536), (1536, 1536)), + ((512, 5120), (5120, 5120)), + ((257, 5120), (5120, 5120)), + ((32130, 5120), (13824, 5120)), + ((32130, 13824), (5120, 13824)), + ((75348, 5120), (5120, 5120)), + ((75348, 5120), (13824, 5120)), + ((75348, 13824), (5120, 13824)), + ((32760, 1536), (1536, 1536)), + ((512, 1536), (1536, 1536)), + ((32760, 1536), (8960, 1536)), + ((32760, 8960), (1536, 8960)), + ] + + print("=== test_mm TFLOPS性能测试 ===\n") + + for i, (input_shape, weight_shape) in enumerate(test_cases): + print(f"测试 {i + 1}: 输入形状 {input_shape}, 权重形状 {weight_shape}") + print("-" * 60) + + tflops = test_tflops(input_shape, weight_shape) + print(f"✓ 成功完成测试,性能: {tflops:.2f} TFLOPS\n") + + print("=== 测试完成 ===") diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test_mxfp6_quant.py b/lightx2v_kernel/test/mxfp6_mxfp8/test_mxfp6_quant.py new file mode 100644 index 0000000..8daeced --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test_mxfp6_quant.py @@ -0,0 +1,51 @@ +import unittest +import torch +from lightx2v_kernel.gemm import cutlass_scaled_mxfp6_mxfp8_mm +from lightx2v_kernel.gemm import scaled_mxfp6_quant, scaled_mxfp8_quant +from torch.nn.functional import linear +from lightx2v_kernel.utils import error, benchmark + + +class TestQuantBF162MXFP6(unittest.TestCase): + def setUp(self): + self.tokens = [128, 257, 512, 1024, 13325, 32130, 32760] # , 75348 + self.channels = [128, 1536, 5120, 8960] # , 13824 + self.hiddenDims = [128, 1536, 3072, 5120, 8960, 12800] # , 13824 + + self.device = "cuda" + self.dtype = torch.bfloat16 + + def test_accuracy(self): + """Test the accuracy of quantization from BF16 to MXFP6.""" + for m in self.tokens: + for k in self.hiddenDims: + for n in self.channels: + with self.subTest(shape=[m, k, n]): + activation = torch.randn(m, k, dtype=self.dtype, device=self.device) + activation_quant_pred, activation_scale_pred = scaled_mxfp8_quant(activation) + + weight = torch.randn(n, k, dtype=self.dtype, device=self.device) + weight_quant_pred, weight_scale_pred = scaled_mxfp6_quant(weight) + + bias = torch.rand(1, n, dtype=self.dtype, device=self.device) * 10 + + alpha = torch.tensor(1.0, device=self.device, dtype=torch.float32) + mm_pred = cutlass_scaled_mxfp6_mxfp8_mm(activation_quant_pred, weight_quant_pred, activation_scale_pred, weight_scale_pred, alpha=alpha, bias=bias) + + mm_real = linear(activation, weight, bias=bias).to(torch.bfloat16) + + self.assertTrue(error(mm_pred, mm_real) < 1e-2, f"Accuracy test failed for shape {m, k, n}: Error {error(mm_pred, mm_real)} exceeds threshold.") + + def test_performance(self): + """Benchmark the performance of Activation quantization from BF16 to MXFP6.""" + for m in self.tokens: + for k in self.hiddenDims: + with self.subTest(shape=[m, k]): + input = torch.randn(m, k, dtype=self.dtype, device=self.device) + shape = [m, k] + tflops = 2 * (m * k / 1024**4) + benchmark(scaled_mxfp6_quant, shape, tflops, 100, input) + + +if __name__ == "__main__": + unittest.main() diff --git a/lightx2v_kernel/test/mxfp6_mxfp8/test_quant_mem_utils.py b/lightx2v_kernel/test/mxfp6_mxfp8/test_quant_mem_utils.py new file mode 100644 index 0000000..77d60e6 --- /dev/null +++ b/lightx2v_kernel/test/mxfp6_mxfp8/test_quant_mem_utils.py @@ -0,0 +1,158 @@ +import torch +from lightx2v_kernel.gemm import scaled_mxfp6_quant + + +def quantize_fp6(x): + return scaled_mxfp6_quant(x) + + +def test_memory_bandwidth(func, x, num_warmup=10, num_runs=100): + """ + 测试函数的显存带宽 + """ + # 预热GPU + for _ in range(num_warmup): + func(x) + + # 同步GPU + torch.cuda.synchronize() + + # 创建GPU事件用于精确计时 + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + # 测量时间 + start_event.record() + for _ in range(num_runs): + result = func(x) + end_event.record() + + # 同步并计算时间 + torch.cuda.synchronize() + elapsed_time_ms = start_event.elapsed_time(end_event) + elapsed_time_s = elapsed_time_ms / 1000.0 + + # 计算数据量 + input_bytes = x.numel() * x.element_size() # 输入数据字节数 + + # FP6量化后,每个元素占用 3/ 4字节 + output_bytes = x.numel() * (3 / 4) # FP6输出数据字节数 + + scale_bytes = x.numel() / 32 # group_size = 32 + + # 总数据传输量(读取输入 + 写入输出 + scale) + total_bytes = (input_bytes + output_bytes + scale_bytes) * num_runs + + # 计算带宽 + bandwidth_gbps = (total_bytes / elapsed_time_s) / (1024**3) # GB/s + + print(f"测试结果:") + print(f" 输入张量形状: {x.shape}") + print(f" 输入数据类型: {x.dtype}") + print(f" 运行次数: {num_runs}") + print(f" 总执行时间: {elapsed_time_ms:.2f} ms") + print(f" 平均每次执行时间: {elapsed_time_ms / num_runs:.4f} ms") + print(f" 输入数据大小: {input_bytes / (1024**2):.2f} MB") + print(f" 输出数据大小: {output_bytes / (1024**2):.2f} MB") + print(f" 总数据传输量: {total_bytes / (1024**3):.2f} GB") + print(f" 显存带宽: {bandwidth_gbps:.2f} GB/s") + + return bandwidth_gbps + + +if __name__ == "__main__": + # 测试不同大小的张量 + test_sizes = [ + # (1, 1024), + # (1, 2048), + # (1, 4096), + # (1, 8192), + # (1, 16384), + # (1, 32768), + # (2, 1024), + # (2, 2048), + # (2, 4096), + # (2, 8192), + # (2, 16384), + # (2, 32768), + # (4, 1024), + # (4, 2048), + # (4, 4096), + # (4, 8192), + # (4, 16384), + # (4, 32768), + # (128, 1024), + # (128, 2048), + # (128, 4096), + # (128, 8192), + # (128, 16384), + # (128, 32768), + # (512, 1024), + # (512, 2048), + # (512, 4096), + # (512, 8192), + # (512, 16384), + # (512, 32768), + # (1024, 1024), + # (1024, 2048), + # (1024, 4096), + # (1024, 8192), + # (1024, 16384), + # (1024, 32768), + # (2048, 1024), + # (2048, 2048), + # (2048, 4096), + # (2048, 8192), + # (2048, 16384), + # (2048, 32768), + # (4096, 1024), + # (4096, 2048), + # (4096, 4096), + # (4096, 8192), + # (4096, 16384), + # (4096, 32768), + # (8192, 1024), + # (8192, 2048), + # (8192, 4096), + # (8192, 8192), + # (8192, 16384), + # (8192, 32768), + # (16384, 1024), + # (16384, 2048), + # (16384, 4096), + # (16384, 8192), + # (16384, 16384), + # (16384, 32768), + # (32768, 1024), + # (32768, 2048), + # (32768, 4096), + # (32768, 8192), + # (32768, 16384), + # (32768, 32768), + (32130, 5120), + (512, 5120), + (257, 5120), + (32130, 13824), + (75348, 5120), + (75348, 13824), + (32760, 1536), + (512, 3072), + (512, 1536), + (32760, 8960), + ] + + print("=== quantize_fp8 显存带宽测试 ===\n") + + for i, (h, w) in enumerate(test_sizes): + print(f"测试 {i + 1}: 张量大小 ({h}, {w})") + print("-" * 50) + + x = torch.randn(h, w, dtype=torch.bfloat16).cuda() + + try: + bandwidth = test_memory_bandwidth(quantize_fp6, x) + print(f"✓ 成功完成测试,带宽: {bandwidth:.2f} GB/s\n") + except Exception as e: + print(f"✗ 测试失败: {e}\n") + + print("=== 测试完成 ===") diff --git a/lightx2v_kernel/test/mxfp8_mxfp8/test_bench.py b/lightx2v_kernel/test/mxfp8_mxfp8/test_bench.py new file mode 100644 index 0000000..085f75c --- /dev/null +++ b/lightx2v_kernel/test/mxfp8_mxfp8/test_bench.py @@ -0,0 +1,121 @@ +import torch +from lightx2v_kernel.gemm import scaled_mxfp8_quant, cutlass_scaled_mxfp8_mm +import time + + +class MMWeightMxfp8: + def __init__(self, weight, bias): + self.load_fp8_weight(weight, bias) + self.act_quant_func = self.act_quant_fp8 + self.set_alpha() + + @torch.no_grad() + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = cutlass_scaled_mxfp8_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + @torch.no_grad() + def load_fp8_weight(self, weight, bias): + self.weight, self.weight_scale = scaled_mxfp8_quant(weight) + self.bias = bias + + def set_alpha(self): + self.alpha = torch.tensor(1.0, dtype=torch.float32, device=self.weight.device) + + @torch.no_grad() + def act_quant_fp8(self, x): + return scaled_mxfp8_quant(x) + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + mm = MMWeightMxfp8(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightMxfp8(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/mxfp8_mxfp8/test_bench3_bias.py b/lightx2v_kernel/test/mxfp8_mxfp8/test_bench3_bias.py new file mode 100644 index 0000000..19a4f95 --- /dev/null +++ b/lightx2v_kernel/test/mxfp8_mxfp8/test_bench3_bias.py @@ -0,0 +1,94 @@ +import torch +import time +from test_bench import MMWeightMxfp8 + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + + mm = MMWeightMxfp8(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightMxfp8(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/mxfp8_mxfp8/test_mm_tflops.py b/lightx2v_kernel/test/mxfp8_mxfp8/test_mm_tflops.py new file mode 100644 index 0000000..627c5a8 --- /dev/null +++ b/lightx2v_kernel/test/mxfp8_mxfp8/test_mm_tflops.py @@ -0,0 +1,115 @@ +import torch +from lightx2v_kernel.gemm import cutlass_scaled_mxfp8_mm + + +""" +input_shape = (1024, 2048) +weight_shape = (4096, 2048) + +input_tensor_quant = (torch.rand((1024, 1024), device="cuda") * 10).to(torch.uint8) +weight = (torch.rand((4096, 1024), device="cuda") * 10).to(torch.uint8) +input_tensor_scale = torch.rand(1024, 128, device="cuda").to(torch.float8_e8m0fnu) +weight_scale = torch.rand(4096, 128, device="cuda").to(torch.float8_e8m0fnu) +alpha = torch.tensor(1.0, device="cuda").to(torch.float32) +bias = None +""" + + +def test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias): + output_tensor = cutlass_scaled_mxfp8_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha=alpha, bias=bias) + return output_tensor + + +def test_tflops(input_shape, weight_shape, num_warmup=10, num_runs=100): + """ + 测试test_mm函数的TFLOPS性能 + """ + + # 创建输入数据 + input_tensor_quant = (torch.rand((input_shape[0], input_shape[1]), device="cuda") * 10).to(torch.uint8) + weight = (torch.rand((weight_shape[0], weight_shape[1]), device="cuda") * 10).to(torch.uint8) + + input_tensor_scale = torch.rand(((input_shape[0] + 128 - 1) // 128) * 128, (input_shape[1] // 32 + 4 - 1) // 4 * 4, device="cuda").to(torch.float8_e8m0fnu) + weight_scale = torch.rand(weight_shape[0], weight_shape[1] // 32, device="cuda").to(torch.float8_e8m0fnu) + alpha = torch.tensor(1.0, device="cuda", dtype=torch.float32) + bias = None + + # 预热GPU + for _ in range(num_warmup): + test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + + # 同步GPU + torch.cuda.synchronize() + + # 创建GPU事件用于精确计时 + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + # 测量时间 + start_event.record() + for _ in range(num_runs): + result = test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + end_event.record() + + # 同步并计算时间 + torch.cuda.synchronize() + elapsed_time_ms = start_event.elapsed_time(end_event) + elapsed_time_s = elapsed_time_ms / 1000.0 + + # 计算FLOPS + # 矩阵乘法 A(M x K) @ B(K x N) = C(M x N) + # M = batch_size, K = input_dim, N = output_dim + M = input_shape[0] + K = input_shape[1] + N = weight_shape[0] + + # 每次矩阵乘法的FLOPS = 2 * M * N * K (每个输出元素需要K次乘法和K次加法) + flops_per_run = 2 * M * N * K + total_flops = flops_per_run * num_runs + + # 计算TFLOPS (万亿次浮点运算每秒) + tflops = total_flops / (elapsed_time_s * 1e12) + + print(f"测试结果:") + print(f" 输入形状: {input_shape} (M={M}, K={K})") + print(f" 权重形状: {weight_shape} (N={N}, K={K})") + print(f" 输出形状: ({M}, {N})") + print(f" 运行次数: {num_runs}") + print(f" 总执行时间: {elapsed_time_ms:.2f} ms") + print(f" 平均每次执行时间: {elapsed_time_ms / num_runs:.4f} ms") + print(f" 每次运行FLOPS: {flops_per_run / 1e9:.2f} GFLOPS") + print(f" 总FLOPS: {total_flops / 1e12:.2f} TFLOPS") + print(f" 计算性能: {tflops:.2f} TFLOPS") + + return tflops + + +if __name__ == "__main__": + # 测试不同大小的矩阵乘法 + # (m,k) (n,k) + test_cases = [ + ((32130, 5120), (5120, 5120)), + ((512, 1536), (1536, 1536)), + ((512, 5120), (5120, 5120)), + ((257, 5120), (5120, 5120)), + ((32130, 5120), (13824, 5120)), + ((32130, 13824), (5120, 13824)), + ((75348, 5120), (5120, 5120)), + ((75348, 5120), (13824, 5120)), + ((75348, 13824), (5120, 13824)), + ((32760, 1536), (1536, 1536)), + ((512, 1536), (1536, 1536)), + ((32760, 1536), (8960, 1536)), + ((32760, 8960), (1536, 8960)), + ] + + print("=== test_mm TFLOPS性能测试 ===\n") + + for i, (input_shape, weight_shape) in enumerate(test_cases): + print(f"测试 {i + 1}: 输入形状 {input_shape}, 权重形状 {weight_shape}") + print("-" * 60) + + tflops = test_tflops(input_shape, weight_shape) + print(f"✓ 成功完成测试,性能: {tflops:.2f} TFLOPS\n") + + print("=== 测试完成 ===") diff --git a/lightx2v_kernel/test/mxfp8_mxfp8/test_mxfp8_quant.py b/lightx2v_kernel/test/mxfp8_mxfp8/test_mxfp8_quant.py new file mode 100644 index 0000000..41af9bd --- /dev/null +++ b/lightx2v_kernel/test/mxfp8_mxfp8/test_mxfp8_quant.py @@ -0,0 +1,51 @@ +import unittest +import torch +from lightx2v_kernel.gemm import cutlass_scaled_mxfp8_mm +from lightx2v_kernel.gemm import scaled_mxfp8_quant +from torch.nn.functional import linear +from lightx2v_kernel.utils import error, benchmark + + +class TestQuantBF162MXFP8(unittest.TestCase): + def setUp(self): + self.tokens = [257, 512, 1024, 13325, 32130, 32760] # , 75348 + self.channels = [1536, 5120, 8960] # , 13824 + self.hiddenDims = [1536, 3072, 5120, 8960, 12800] # , 13824 + + self.device = "cuda" + self.dtype = torch.bfloat16 + + def test_accuracy(self): + """Test the accuracy of quantization from BF16 to MXFP8.""" + for m in self.tokens: + for k in self.hiddenDims: + for n in self.channels: + with self.subTest(shape=[m, k, n]): + activation = torch.randn(m, k, dtype=self.dtype, device=self.device) + activation_quant_pred, activation_scale_pred = scaled_mxfp8_quant(activation) + + weight = torch.randn(n, k, dtype=self.dtype, device=self.device) + weight_quant_pred, weight_scale_pred = scaled_mxfp8_quant(weight) + + bias = torch.rand(1, n, dtype=self.dtype, device=self.device) * 10 + + alpha = torch.tensor(1.0, device=self.device, dtype=torch.float32) + mm_pred = cutlass_scaled_mxfp8_mm(activation_quant_pred, weight_quant_pred, activation_scale_pred, weight_scale_pred, alpha=alpha, bias=bias) + + mm_real = linear(activation, weight, bias=bias).to(torch.bfloat16) + + self.assertTrue(error(mm_pred, mm_real) < 1e-2, f"Accuracy test failed for shape {m, k, n}: Error {error(mm_pred, mm_real)} exceeds threshold.") + + def test_performance(self): + """Benchmark the performance of Activation quantization from BF16 to MXFP8.""" + for m in self.tokens: + for k in self.hiddenDims: + with self.subTest(shape=[m, k]): + input = torch.randn(m, k, dtype=self.dtype, device=self.device) + shape = [m, k] + tflops = 2 * (m * k / 1024**4) + benchmark(scaled_mxfp8_quant, shape, tflops, 100, input) + + +if __name__ == "__main__": + unittest.main() diff --git a/lightx2v_kernel/test/mxfp8_mxfp8/test_quant_mem_utils.py b/lightx2v_kernel/test/mxfp8_mxfp8/test_quant_mem_utils.py new file mode 100644 index 0000000..13400d4 --- /dev/null +++ b/lightx2v_kernel/test/mxfp8_mxfp8/test_quant_mem_utils.py @@ -0,0 +1,158 @@ +import torch +from lightx2v_kernel.gemm import scaled_mxfp8_quant + + +def quantize_fp8(x): + return scaled_mxfp8_quant(x) + + +def test_memory_bandwidth(func, x, num_warmup=10, num_runs=100): + """ + 测试函数的显存带宽 + """ + # 预热GPU + for _ in range(num_warmup): + func(x) + + # 同步GPU + torch.cuda.synchronize() + + # 创建GPU事件用于精确计时 + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + # 测量时间 + start_event.record() + for _ in range(num_runs): + result = func(x) + end_event.record() + + # 同步并计算时间 + torch.cuda.synchronize() + elapsed_time_ms = start_event.elapsed_time(end_event) + elapsed_time_s = elapsed_time_ms / 1000.0 + + # 计算数据量 + input_bytes = x.numel() * x.element_size() # 输入数据字节数 + + # FP8量化后,每个元素占用1字节 + output_bytes = x.numel() * 1 # FP8输出数据字节数 + + scale_bytes = x.numel() / 32 # group_size = 32 + + # 总数据传输量(读取输入 + 写入输出 + scale) + total_bytes = (input_bytes + output_bytes + scale_bytes) * num_runs + + # 计算带宽 + bandwidth_gbps = (total_bytes / elapsed_time_s) / (1024**3) # GB/s + + print(f"测试结果:") + print(f" 输入张量形状: {x.shape}") + print(f" 输入数据类型: {x.dtype}") + print(f" 运行次数: {num_runs}") + print(f" 总执行时间: {elapsed_time_ms:.2f} ms") + print(f" 平均每次执行时间: {elapsed_time_ms / num_runs:.4f} ms") + print(f" 输入数据大小: {input_bytes / (1024**2):.2f} MB") + print(f" 输出数据大小: {output_bytes / (1024**2):.2f} MB") + print(f" 总数据传输量: {total_bytes / (1024**3):.2f} GB") + print(f" 显存带宽: {bandwidth_gbps:.2f} GB/s") + + return bandwidth_gbps + + +if __name__ == "__main__": + # 测试不同大小的张量 + test_sizes = [ + # (1, 1024), + # (1, 2048), + # (1, 4096), + # (1, 8192), + # (1, 16384), + # (1, 32768), + # (2, 1024), + # (2, 2048), + # (2, 4096), + # (2, 8192), + # (2, 16384), + # (2, 32768), + # (4, 1024), + # (4, 2048), + # (4, 4096), + # (4, 8192), + # (4, 16384), + # (4, 32768), + # (128, 1024), + # (128, 2048), + # (128, 4096), + # (128, 8192), + # (128, 16384), + # (128, 32768), + # (512, 1024), + # (512, 2048), + # (512, 4096), + # (512, 8192), + # (512, 16384), + # (512, 32768), + # (1024, 1024), + # (1024, 2048), + # (1024, 4096), + # (1024, 8192), + # (1024, 16384), + # (1024, 32768), + # (2048, 1024), + # (2048, 2048), + # (2048, 4096), + # (2048, 8192), + # (2048, 16384), + # (2048, 32768), + # (4096, 1024), + # (4096, 2048), + # (4096, 4096), + # (4096, 8192), + # (4096, 16384), + # (4096, 32768), + # (8192, 1024), + # (8192, 2048), + # (8192, 4096), + # (8192, 8192), + # (8192, 16384), + # (8192, 32768), + # (16384, 1024), + # (16384, 2048), + # (16384, 4096), + # (16384, 8192), + # (16384, 16384), + # (16384, 32768), + # (32768, 1024), + # (32768, 2048), + # (32768, 4096), + # (32768, 8192), + # (32768, 16384), + # (32768, 32768), + (32130, 5120), + (512, 5120), + (257, 5120), + (32130, 13824), + (75348, 5120), + (75348, 13824), + (32760, 1536), + (512, 3072), + (512, 1536), + (32760, 8960), + ] + + print("=== quantize_fp8 显存带宽测试 ===\n") + + for i, (h, w) in enumerate(test_sizes): + print(f"测试 {i + 1}: 张量大小 ({h}, {w})") + print("-" * 50) + + x = torch.randn(h, w, dtype=torch.bfloat16).cuda() + + try: + bandwidth = test_memory_bandwidth(quantize_fp8, x) + print(f"✓ 成功完成测试,带宽: {bandwidth:.2f} GB/s\n") + except Exception as e: + print(f"✗ 测试失败: {e}\n") + + print("=== 测试完成 ===") diff --git a/lightx2v_kernel/test/nvfp4_nvfp4/fake_quant.py b/lightx2v_kernel/test/nvfp4_nvfp4/fake_quant.py new file mode 100644 index 0000000..36f419c --- /dev/null +++ b/lightx2v_kernel/test/nvfp4_nvfp4/fake_quant.py @@ -0,0 +1,55 @@ +import torch + + +BLOCK_SIZE = 16 + +FLOAT4_E2M1_MAX = 6.0 +FLOAT8_E4M3_MAX = torch.finfo(torch.float8_e4m3fn).max + + +def cast_to_fp4(x): + sign = torch.sign(x) + x = torch.abs(x) + x[(x >= 0.0) & (x <= 0.25)] = 0.0 + x[(x > 0.25) & (x < 0.75)] = 0.5 + x[(x >= 0.75) & (x <= 1.25)] = 1.0 + x[(x > 1.25) & (x < 1.75)] = 1.5 + x[(x >= 1.75) & (x <= 2.5)] = 2.0 + x[(x > 2.5) & (x < 3.5)] = 3.0 + x[(x >= 3.5) & (x <= 5.0)] = 4.0 + x[x > 5.0] = 6.0 + return x * sign + + +def get_reciprocal(x): + if isinstance(x, torch.Tensor): + return torch.where(x == 0, torch.tensor(0.0, dtype=x.dtype), 1.0 / x) + elif isinstance(x, (float, int)): + return 0.0 if x == 0 else 1.0 / x + else: + raise TypeError("Input must be a float, int, or a torch.Tensor.") + + +def ref_nvfp4_quant(x, global_scale): + assert global_scale.dtype == torch.float32 + assert x.ndim == 2 + m, n = x.shape + x = torch.reshape(x, (m, n // BLOCK_SIZE, BLOCK_SIZE)) + vec_max = torch.max(torch.abs(x), dim=-1, keepdim=True)[0].to(torch.float32) + scale = global_scale * (vec_max * get_reciprocal(FLOAT4_E2M1_MAX)) + scale = scale.to(torch.float8_e4m3fn).to(torch.float32) + # output_scale = get_reciprocal(scale * get_reciprocal(global_scale)) + output_scale = global_scale * get_reciprocal(scale) + + scaled_x = x.to(torch.float32) * output_scale + clipped_x = torch.clamp(scaled_x, -6.0, 6.0).reshape(m, n) + return cast_to_fp4(clipped_x), scale.squeeze(-1) + + +if __name__ == "__main__": + x = torch.randn(1, 16, dtype=torch.bfloat16).cuda() + print(f"x: {x}, {x.shape}") + global_scale = (6.0 * 448.0 / torch.max(torch.abs(x))).to(torch.float32).cuda() + quant_x, scale = ref_nvfp4_quant(x, global_scale) + print(f"quant_x: {quant_x}, {quant_x.shape}") + print(f"scale: {scale}, {scale.shape}") diff --git a/lightx2v_kernel/test/nvfp4_nvfp4/test_bench1.py b/lightx2v_kernel/test/nvfp4_nvfp4/test_bench1.py new file mode 100644 index 0000000..e5071f5 --- /dev/null +++ b/lightx2v_kernel/test/nvfp4_nvfp4/test_bench1.py @@ -0,0 +1,142 @@ +import torch +from lightx2v_kernel.gemm import scaled_nvfp4_quant, cutlass_scaled_nvfp4_mm + + +FLOAT4_E2M1_MAX = 6.0 +FLOAT8_E4M3_MAX = torch.finfo(torch.float8_e4m3fn).max + + +kE2M1ToFloatArray = [ + 0.0, + 0.5, + 1.0, + 1.5, + 2.0, + 3.0, + 4.0, + 6.0, +] + + +def convert_swizzled_to_linear(a_sf_swizzled: torch.Tensor, m, k, block_size): + sf_m, sf_k = a_sf_swizzled.shape + m_tiles = (m + 128 - 1) // 128 + f = block_size * 4 + k_tiles = (k + f - 1) // f + tmp = torch.reshape(a_sf_swizzled, (1, m_tiles, k_tiles, 32, 4, 4)) + tmp = torch.permute(tmp, (0, 1, 4, 3, 2, 5)) + out = tmp.reshape(m_tiles * 128, k_tiles * f // block_size) + return out[0:m, 0:k] + + +def e2m1_to_fp32(int4_value): + signBit = int4_value & 0x8 + int4_absValue = int4_value & 0x7 + float_result = kE2M1ToFloatArray[int4_absValue] + if signBit: + float_result = -float_result + return float_result + + +def break_fp4_bytes(a, dtype): + assert a.dtype == torch.uint8 + m, n = a.shape + a = a.flatten() + # Get upper 4 bits + highHalfByte = (a & 0xF0) >> 4 + # Get lower 4 bits + lowHalfByte = a & 0x0F + fH = torch.tensor([e2m1_to_fp32(x) for x in highHalfByte]).to(a.device) + fL = torch.tensor([e2m1_to_fp32(x) for x in lowHalfByte]).to(a.device) + # [0xAB, 0xCD] -> [0xB, 0xA, 0xD, 0xC] + out = torch.stack((fL, fH), dim=-1).reshape(m, n * 2) + return out + + +def dequantize_to_dtype(tensor_fp4, tensor_sf, global_scale, dtype, device, block_size=16): + """Dequantize the fp4 tensor back to high precision.""" + # Two fp4 values are packed into one uint8. + assert tensor_fp4.dtype == torch.uint8 + m, packed_k = tensor_fp4.shape + k = packed_k * 2 + tensor_f32 = break_fp4_bytes(tensor_fp4, dtype) + tensor_f32 = tensor_f32.reshape(m, k // block_size, block_size) + tensor_sf = tensor_sf.view(torch.float8_e4m3fn) + tensor_sf = convert_swizzled_to_linear(tensor_sf, m, k, block_size) + tensor_sf_dtype = tensor_sf.to(torch.float32) / global_scale + + # scale the tensor + out = (tensor_f32 * tensor_sf_dtype.unsqueeze(-1)).reshape(m, k) + return out + + +def get_ref_results( + a_fp4, + b_fp4, + a_sf, + b_sf, + a_global_scale, + b_global_scale, + m, + n, + dtype, + block_size, + device, +): + _, m_k = a_fp4.shape + _, n_k = b_fp4.shape + assert m_k == n_k + a_in_dtype = dequantize_to_dtype(a_fp4, a_sf, a_global_scale, dtype=dtype, device=device, block_size=block_size) + b_in_dtype = dequantize_to_dtype(b_fp4, b_sf, b_global_scale, dtype=dtype, device=device, block_size=block_size) + return torch.matmul(a_in_dtype, b_in_dtype.t()) + + +@torch.inference_mode() +def test_nvfp4_gemm( + dtype: torch.dtype, + shape: tuple[int, int], +) -> None: + m, n, packed_k = shape + k = packed_k * 2 + block_size = 16 + a_dtype = torch.randn((m, k), dtype=dtype, device="cuda") + b_dtype = torch.randn((n, k), dtype=dtype, device="cuda") + bias = torch.randn((1, n), dtype=dtype, device="cuda") + + a_global_scale = ((FLOAT8_E4M3_MAX * FLOAT4_E2M1_MAX) / torch.amax(a_dtype.flatten(), dim=-1)).to(torch.float32) + b_global_scale = ((FLOAT8_E4M3_MAX * FLOAT4_E2M1_MAX) / torch.amax(b_dtype.flatten(), dim=-1)).to(torch.float32) + + print(f"a_global_scale : {a_global_scale}, {a_global_scale.shape}") + print(f"b_global_scale : {b_global_scale}, {b_global_scale.shape}") + + alpha = 1.0 / (a_global_scale * b_global_scale) + a_fp4, a_scale_interleaved = scaled_nvfp4_quant(a_dtype, a_global_scale) + b_fp4, b_scale_interleaved = scaled_nvfp4_quant(b_dtype, b_global_scale) + + expected_out = get_ref_results( + a_fp4, + b_fp4, + a_scale_interleaved, + b_scale_interleaved, + a_global_scale, + b_global_scale, + m, + n, + dtype, + block_size, + "cuda", + ) + expected_out = expected_out + bias + + print(f"alpha {alpha}, {alpha.shape}, {alpha.dtype}") + + out = cutlass_scaled_nvfp4_mm(a_fp4, b_fp4, a_scale_interleaved, b_scale_interleaved, alpha, bias) + + print(f"out : {out}, {out.shape}, {out.dtype}") + print(f"expected_out : {expected_out}, {expected_out.shape}, {expected_out.dtype}") + + torch.testing.assert_close(out, expected_out.to(dtype=dtype), atol=1e-1, rtol=1e-1) + + +if __name__ == "__main__": + test_nvfp4_gemm(torch.bfloat16, (128, 512, 128)) diff --git a/lightx2v_kernel/test/nvfp4_nvfp4/test_bench2.py b/lightx2v_kernel/test/nvfp4_nvfp4/test_bench2.py new file mode 100644 index 0000000..1af8296 --- /dev/null +++ b/lightx2v_kernel/test/nvfp4_nvfp4/test_bench2.py @@ -0,0 +1,126 @@ +import torch +from lightx2v_kernel.gemm import scaled_nvfp4_quant, cutlass_scaled_nvfp4_mm +import time + + +class MMWeightFp4: + def __init__(self, weight, bias): + self.load_fp4_weight(weight, bias) + self.act_quant_func = self.act_quant_fp4 + + # calibrate x_max + self.calibrate_x_absmax() + + @torch.no_grad() + def apply(self, input_tensor): + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = cutlass_scaled_nvfp4_mm(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale, alpha=self.alpha, bias=self.bias) + return output_tensor + + @torch.no_grad() + def load_fp4_weight(self, weight, bias): + self.weight_global_scale = (2688.0 / torch.max(torch.abs(weight))).to(torch.float32) + self.weight, self.weight_scale = scaled_nvfp4_quant(weight, self.weight_global_scale) + self.bias = bias + + def calibrate_x_absmax(self): + self.x_absmax = torch.tensor(5.0, dtype=torch.float32, device=self.weight.device) # need to be calibrated + self.input_global_scale = (2688.0 / self.x_absmax).to(torch.float32) + self.alpha = 1.0 / (self.input_global_scale * self.weight_global_scale) + + @torch.no_grad() + def act_quant_fp4(self, x): + return scaled_nvfp4_quant(x, self.input_global_scale) + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + mm = MMWeightFp4(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + # bias = torch.randn(1, n, dtype=torch.bfloat16).cuda() + bias = None + + linear = torch.nn.Linear(k, n, bias=False).cuda() + linear.weight.data = weight + # linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightFp4(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/nvfp4_nvfp4/test_bench3_bias.py b/lightx2v_kernel/test/nvfp4_nvfp4/test_bench3_bias.py new file mode 100644 index 0000000..5997b57 --- /dev/null +++ b/lightx2v_kernel/test/nvfp4_nvfp4/test_bench3_bias.py @@ -0,0 +1,94 @@ +import torch +import time +from test_bench2 import MMWeightFp4 + + +def test_speed(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.ones(1, n, dtype=torch.bfloat16).cuda() * 50 + + mm = MMWeightFp4(weight, bias) + + # warmup + output_tensor = mm.apply(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + output_tensor = mm.apply(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + lightx2v_kernel_time = (end_time - start_time) / 100 + print(f"lightx2v-kernel time: {lightx2v_kernel_time}") + + input_tensor = torch.randn(m, n, dtype=torch.bfloat16).cuda() + weight = torch.randn(k, n, dtype=torch.bfloat16, device="cuda") + bias = torch.randn(1, k, dtype=torch.bfloat16).cuda() + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + # warmup + ref_output_tensor = linear(input_tensor) + + torch.cuda.synchronize() + start_time = time.time() + for i in range(100): + ref_output_tensor = linear(input_tensor) + torch.cuda.synchronize() + end_time = time.time() + + ref_time = (end_time - start_time) / 100 + print(f"ref time: {ref_time}") + + print(f"speedup: {ref_time / lightx2v_kernel_time:.3f}") + + +def test_accuracy(m, k, n): + with torch.no_grad(): + input_tensor = torch.randn(m, k, dtype=torch.bfloat16).cuda() + weight = torch.randn(n, k, dtype=torch.bfloat16, device="cuda") + bias = torch.ones(1, n, dtype=torch.bfloat16).cuda() * 50 + + linear = torch.nn.Linear(k, n, bias=True).cuda() + linear.weight.data = weight + linear.bias.data = bias + + ref_output_tensor = linear(input_tensor) + + mm = MMWeightFp4(weight, bias) + + output_tensor = mm.apply(input_tensor) + + # print(f"ref_output_tensor: {ref_output_tensor}") + # print(f"output_tensor: {output_tensor}") + + # cosine + cos = torch.nn.functional.cosine_similarity(ref_output_tensor.flatten(), output_tensor.flatten(), dim=0) + print(f"cos : {cos}") + + +if __name__ == "__main__": + test_sizes = [ + (32130, 5120, 5120), + (512, 5120, 5120), + (257, 5120, 5120), + (32130, 5120, 13824), + (32130, 13824, 5120), + (75348, 5120, 5120), + (75348, 13824, 5120), + (32760, 1536, 1536), + (512, 1536, 1536), + (32760, 1536, 8960), + (32760, 8960, 1536), + ] + + for i, (m, k, n) in enumerate(test_sizes): + print("-" * 30) + print(f"测试 {i + 1}: 张量大小 ({m}, {k}, {n})") + test_accuracy(m, k, n) + test_speed(m, k, n) diff --git a/lightx2v_kernel/test/nvfp4_nvfp4/test_mm_tflops.py b/lightx2v_kernel/test/nvfp4_nvfp4/test_mm_tflops.py new file mode 100644 index 0000000..3fd9994 --- /dev/null +++ b/lightx2v_kernel/test/nvfp4_nvfp4/test_mm_tflops.py @@ -0,0 +1,114 @@ +import torch +from lightx2v_kernel.gemm import cutlass_scaled_nvfp4_mm + + +""" +input_shape = (1024, 2048) +weight_shape = (4096, 2048) + +input_tensor_quant = (torch.rand((1024, 1024), device="cuda") * 10).to(torch.uint8) +weight = (torch.rand((4096, 1024), device="cuda") * 10).to(torch.uint8) +input_tensor_scale = torch.rand(1024, 128, device="cuda").to(torch.float8_e4m3fn) +weight_scale = torch.rand(4096, 128, device="cuda").to(torch.float8_e4m3fn) +alpha = torch.tensor(0.0002765655517578125, device="cuda").to(torch.float32) +bias = None +""" + + +def test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias): + output_tensor = cutlass_scaled_nvfp4_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha=alpha, bias=bias) + return output_tensor + + +def test_tflops(input_shape, weight_shape, num_warmup=10, num_runs=100): + """ + 测试test_mm函数的TFLOPS性能 + """ + + # 创建输入数据 + input_tensor_quant = (torch.rand((input_shape[0], input_shape[1] // 2), device="cuda") * 10).to(torch.uint8) + weight = (torch.rand((weight_shape[0], weight_shape[1] // 2), device="cuda") * 10).to(torch.uint8) + + input_tensor_scale = torch.rand(((input_shape[0] + 128 - 1) // 128) * 128, (input_shape[1] // 16 + 4 - 1) // 4 * 4, device="cuda").to(torch.float8_e4m3fn) + weight_scale = torch.rand(weight_shape[0], weight_shape[1] // 16, device="cuda").to(torch.float8_e4m3fn) + alpha = torch.tensor(0.0002765655517578125, device="cuda", dtype=torch.float32) + bias = None + + # 预热GPU + for _ in range(num_warmup): + test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + + # 同步GPU + torch.cuda.synchronize() + + # 创建GPU事件用于精确计时 + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + # 测量时间 + start_event.record() + for _ in range(num_runs): + result = test_mm(input_tensor_quant, weight, input_tensor_scale, weight_scale, alpha, bias) + end_event.record() + + # 同步并计算时间 + torch.cuda.synchronize() + elapsed_time_ms = start_event.elapsed_time(end_event) + elapsed_time_s = elapsed_time_ms / 1000.0 + + # 计算FLOPS + # 矩阵乘法 A(M x K) @ B(K x N) = C(M x N) + # M = batch_size, K = input_dim, N = output_dim + M = input_shape[0] + K = input_shape[1] + N = weight_shape[0] + + # 每次矩阵乘法的FLOPS = 2 * M * N * K (每个输出元素需要K次乘法和K次加法) + flops_per_run = 2 * M * N * K + total_flops = flops_per_run * num_runs + + # 计算TFLOPS (万亿次浮点运算每秒) + tflops = total_flops / (elapsed_time_s * 1e12) + + print(f"测试结果:") + print(f" 输入形状: {input_shape} (M={M}, K={K})") + print(f" 权重形状: {weight_shape} (N={N}, K={K})") + print(f" 输出形状: ({M}, {N})") + print(f" 运行次数: {num_runs}") + print(f" 总执行时间: {elapsed_time_ms:.2f} ms") + print(f" 平均每次执行时间: {elapsed_time_ms / num_runs:.4f} ms") + print(f" 每次运行FLOPS: {flops_per_run / 1e9:.2f} GFLOPS") + print(f" 总FLOPS: {total_flops / 1e12:.2f} TFLOPS") + print(f" 计算性能: {tflops:.2f} TFLOPS") + + return tflops + + +if __name__ == "__main__": + # 测试不同大小的矩阵乘法 + # (m,k) (n,k) + test_cases = [ + ((32130, 5120), (5120, 5120)), + ((512, 5120), (5120, 5120)), + ((257, 5120), (5120, 5120)), + ((32130, 5120), (13824, 5120)), + ((32130, 13824), (5120, 13824)), + ((75348, 5120), (5120, 5120)), + ((75348, 5120), (13824, 5120)), + ((75348, 13824), (5120, 13824)), + ((32760, 1536), (1536, 1536)), + ((512, 1536), (1536, 1536)), + ((32760, 1536), (8960, 1536)), + ((32760, 8960), (1536, 8960)), + ] + + print("=== test_mm TFLOPS性能测试 ===\n") + + for i, (input_shape, weight_shape) in enumerate(test_cases): + print(f"测试 {i + 1}: 输入形状 {input_shape}, 权重形状 {weight_shape}") + print("-" * 60) + + tflops = test_tflops(input_shape, weight_shape) + print(f"✓ 成功完成测试,性能: {tflops:.2f} TFLOPS\n") + + print("=== 测试完成 ===") diff --git a/lightx2v_kernel/test/nvfp4_nvfp4/test_quant_mem_utils.py b/lightx2v_kernel/test/nvfp4_nvfp4/test_quant_mem_utils.py new file mode 100644 index 0000000..b7d56f8 --- /dev/null +++ b/lightx2v_kernel/test/nvfp4_nvfp4/test_quant_mem_utils.py @@ -0,0 +1,160 @@ +import torch +from lightx2v_kernel.gemm import scaled_nvfp4_quant + + +input_global_scale = torch.tensor(808.0, dtype=torch.float32).cuda() + + +def quantize_fp4(x): + return scaled_nvfp4_quant(x, input_global_scale) + + +def test_memory_bandwidth(func, x, num_warmup=10, num_runs=100): + """ + 测试函数的显存带宽 + """ + # 预热GPU + for _ in range(num_warmup): + func(x) + + # 同步GPU + torch.cuda.synchronize() + + # 创建GPU事件用于精确计时 + start_event = torch.cuda.Event(enable_timing=True) + end_event = torch.cuda.Event(enable_timing=True) + + # 测量时间 + start_event.record() + for _ in range(num_runs): + result = func(x) + end_event.record() + + # 同步并计算时间 + torch.cuda.synchronize() + elapsed_time_ms = start_event.elapsed_time(end_event) + elapsed_time_s = elapsed_time_ms / 1000.0 + + # 计算数据量 + input_bytes = x.numel() * x.element_size() # 输入数据字节数 + + # FP4量化后,每个元素占用0.5字节 + output_bytes = x.numel() * 0.5 # FP4输出数据字节数 + + scale_bytes = x.numel() / 16 # group_size = 16 + + # 总数据传输量(读取输入 + 写入输出 + scale) + total_bytes = (input_bytes + output_bytes + scale_bytes) * num_runs + + # 计算带宽 + bandwidth_gbps = (total_bytes / elapsed_time_s) / (1024**3) # GB/s + + print(f"测试结果:") + print(f" 输入张量形状: {x.shape}") + print(f" 输入数据类型: {x.dtype}") + print(f" 运行次数: {num_runs}") + print(f" 总执行时间: {elapsed_time_ms:.2f} ms") + print(f" 平均每次执行时间: {elapsed_time_ms / num_runs:.4f} ms") + print(f" 输入数据大小: {input_bytes / (1024**2):.2f} MB") + print(f" 输出数据大小: {output_bytes / (1024**2):.2f} MB") + print(f" 总数据传输量: {total_bytes / (1024**3):.2f} GB") + print(f" 显存带宽: {bandwidth_gbps:.2f} GB/s") + + return bandwidth_gbps + + +if __name__ == "__main__": + # 测试不同大小的张量 + test_sizes = [ + # (1, 1024), + # (1, 2048), + # (1, 4096), + # (1, 8192), + # (1, 16384), + # (1, 32768), + # (2, 1024), + # (2, 2048), + # (2, 4096), + # (2, 8192), + # (2, 16384), + # (2, 32768), + # (4, 1024), + # (4, 2048), + # (4, 4096), + # (4, 8192), + # (4, 16384), + # (4, 32768), + # (128, 1024), + # (128, 2048), + # (128, 4096), + # (128, 8192), + # (128, 16384), + # (128, 32768), + # (512, 1024), + # (512, 2048), + # (512, 4096), + # (512, 8192), + # (512, 16384), + # (512, 32768), + # (1024, 1024), + # (1024, 2048), + # (1024, 4096), + # (1024, 8192), + # (1024, 16384), + # (1024, 32768), + # (2048, 1024), + # (2048, 2048), + # (2048, 4096), + # (2048, 8192), + # (2048, 16384), + # (2048, 32768), + # (4096, 1024), + # (4096, 2048), + # (4096, 4096), + # (4096, 8192), + # (4096, 16384), + # (4096, 32768), + # (8192, 1024), + # (8192, 2048), + # (8192, 4096), + # (8192, 8192), + # (8192, 16384), + # (8192, 32768), + # (16384, 1024), + # (16384, 2048), + # (16384, 4096), + # (16384, 8192), + # (16384, 16384), + # (16384, 32768), + # (32768, 1024), + # (32768, 2048), + # (32768, 4096), + # (32768, 8192), + # (32768, 16384), + # (32768, 32768), + (32130, 5120), + (512, 5120), + (257, 5120), + (32130, 13824), + (75348, 5120), + (75348, 13824), + (32760, 1536), + (512, 1536), + (32760, 8960), + ] + + print("=== quantize_fp4 显存带宽测试 ===\n") + + for i, (h, w) in enumerate(test_sizes): + print(f"测试 {i + 1}: 张量大小 ({h}, {w})") + print("-" * 50) + + x = torch.randn(h, w, dtype=torch.bfloat16).cuda() + + try: + bandwidth = test_memory_bandwidth(quantize_fp4, x) + print(f"✓ 成功完成测试,带宽: {bandwidth:.2f} GB/s\n") + except Exception as e: + print(f"✗ 测试失败: {e}\n") + + print("=== 测试完成 ===") diff --git a/lightx2v_platform/__init__.py b/lightx2v_platform/__init__.py new file mode 100644 index 0000000..9b5ed21 --- /dev/null +++ b/lightx2v_platform/__init__.py @@ -0,0 +1 @@ +from .base import * diff --git a/lightx2v_platform/base/__init__.py b/lightx2v_platform/base/__init__.py new file mode 100644 index 0000000..6ff25e3 --- /dev/null +++ b/lightx2v_platform/base/__init__.py @@ -0,0 +1,7 @@ +from lightx2v_platform.base.base import check_ai_device, init_ai_device +from lightx2v_platform.base.cambricon_mlu import MluDevice +from lightx2v_platform.base.dcu import DcuDevice +from lightx2v_platform.base.metax import MetaxDevice +from lightx2v_platform.base.nvidia import CudaDevice + +__all__ = ["init_ai_device", "check_ai_device", "CudaDevice", "MluDevice", "MetaxDevice", "DcuDevice"] diff --git a/lightx2v_platform/base/base.py b/lightx2v_platform/base/base.py new file mode 100644 index 0000000..84df151 --- /dev/null +++ b/lightx2v_platform/base/base.py @@ -0,0 +1,33 @@ +import os + +from loguru import logger + +from lightx2v_platform.base import global_var +from lightx2v_platform.registry_factory import PLATFORM_DEVICE_REGISTER + + +def init_ai_device(platform="cuda"): + platform_device = PLATFORM_DEVICE_REGISTER.get(platform, None) + if platform_device is None: + available_platforms = list(PLATFORM_DEVICE_REGISTER.keys()) + raise RuntimeError(f"Unsupported platform: {platform}. Available platforms: {available_platforms}") + global_var.AI_DEVICE = platform_device.get_device() + logger.info(f"Initialized AI_DEVICE: {global_var.AI_DEVICE}") + return global_var.AI_DEVICE + + +def check_ai_device(platform="cuda"): + platform_device = PLATFORM_DEVICE_REGISTER.get(platform, None) + if platform_device is None: + available_platforms = list(PLATFORM_DEVICE_REGISTER.keys()) + raise RuntimeError(f"Unsupported platform: {platform}. Available platforms: {available_platforms}") + is_available = platform_device.is_available() + if not is_available: + skip_platform_check = os.getenv("SKIP_PLATFORM_CHECK", "False") in ["1", "True"] + error_msg = f"AI device for platform '{platform}' is not available. Please check your runtime environment." + if skip_platform_check: + logger.warning(error_msg) + return True + raise RuntimeError(error_msg) + logger.info(f"AI device for platform '{platform}' is available.") + return True diff --git a/lightx2v_platform/base/cambricon_mlu.py b/lightx2v_platform/base/cambricon_mlu.py new file mode 100644 index 0000000..90c8087 --- /dev/null +++ b/lightx2v_platform/base/cambricon_mlu.py @@ -0,0 +1,27 @@ +import torch +import torch.distributed as dist + +from lightx2v_platform.registry_factory import PLATFORM_DEVICE_REGISTER + + +@PLATFORM_DEVICE_REGISTER("mlu") +class MluDevice: + name = "mlu" + + @staticmethod + def is_available() -> bool: + try: + import torch_mlu + + return torch_mlu.mlu.is_available() + except ImportError: + return False + + @staticmethod + def get_device() -> str: + return "mlu" + + @staticmethod + def init_parallel_env(): + dist.init_process_group(backend="cncl") + torch.mlu.set_device(dist.get_rank()) diff --git a/lightx2v_platform/base/dcu.py b/lightx2v_platform/base/dcu.py new file mode 100644 index 0000000..b2a896e --- /dev/null +++ b/lightx2v_platform/base/dcu.py @@ -0,0 +1,55 @@ +import torch +import torch.distributed as dist + +from lightx2v_platform.registry_factory import PLATFORM_DEVICE_REGISTER + + +@PLATFORM_DEVICE_REGISTER("dcu") +class DcuDevice: + """ + DCU (AMD GPU) Device implementation for LightX2V. + + DCU uses ROCm which provides CUDA-compatible APIs through HIP. + Most PyTorch operations work transparently through the ROCm backend. + """ + + name = "dcu" + + @staticmethod + def is_available() -> bool: + """ + Check if DCU is available. + + DCU uses the standard CUDA API through ROCm's HIP compatibility layer. + Returns: + bool: True if DCU/CUDA is available + """ + try: + return torch.cuda.is_available() + except ImportError: + return False + + @staticmethod + def get_device() -> str: + """ + Get the device type string. + + Returns "cuda" because DCU uses CUDA-compatible APIs through ROCm. + This allows seamless integration with existing PyTorch code. + + Returns: + str: "cuda" for ROCm compatibility + """ + return "cuda" + + @staticmethod + def init_parallel_env(): + """ + Initialize distributed parallel environment for DCU. + + Uses RCCL (ROCm Collective Communications Library) which is + compatible with NCCL APIs for multi-GPU communication. + """ + # RCCL is compatible with NCCL backend + dist.init_process_group(backend="nccl") + torch.cuda.set_device(dist.get_rank()) diff --git a/lightx2v_platform/base/global_var.py b/lightx2v_platform/base/global_var.py new file mode 100644 index 0000000..01d393a --- /dev/null +++ b/lightx2v_platform/base/global_var.py @@ -0,0 +1 @@ +AI_DEVICE = None diff --git a/lightx2v_platform/base/metax.py b/lightx2v_platform/base/metax.py new file mode 100644 index 0000000..c43161a --- /dev/null +++ b/lightx2v_platform/base/metax.py @@ -0,0 +1,7 @@ +from lightx2v_platform.base.nvidia import CudaDevice +from lightx2v_platform.registry_factory import PLATFORM_DEVICE_REGISTER + + +@PLATFORM_DEVICE_REGISTER("metax") +class MetaxDevice(CudaDevice): + name = "cuda" diff --git a/lightx2v_platform/base/nvidia.py b/lightx2v_platform/base/nvidia.py new file mode 100644 index 0000000..75a625e --- /dev/null +++ b/lightx2v_platform/base/nvidia.py @@ -0,0 +1,36 @@ +import torch +import torch.distributed as dist + +from lightx2v_platform.registry_factory import PLATFORM_DEVICE_REGISTER + +try: + from torch.distributed import ProcessGroupNCCL +except ImportError: + ProcessGroupNCCL = None + + +@PLATFORM_DEVICE_REGISTER("cuda") +class CudaDevice: + name = "cuda" + + @staticmethod + def is_available() -> bool: + try: + import torch + + return torch.cuda.is_available() + except ImportError: + return False + + @staticmethod + def get_device() -> str: + return "cuda" + + @staticmethod + def init_parallel_env(): + if ProcessGroupNCCL is None: + raise RuntimeError("ProcessGroupNCCL is not available. Please check your runtime environment.") + pg_options = ProcessGroupNCCL.Options() + pg_options.is_high_priority_stream = True + dist.init_process_group(backend="nccl", pg_options=pg_options) + torch.cuda.set_device(dist.get_rank()) diff --git a/lightx2v_platform/ops/__init__.py b/lightx2v_platform/ops/__init__.py new file mode 100644 index 0000000..a435af2 --- /dev/null +++ b/lightx2v_platform/ops/__init__.py @@ -0,0 +1,12 @@ +import os + +from lightx2v_platform.base.global_var import AI_DEVICE + +if AI_DEVICE == "mlu": + from .attn.cambricon_mlu import * + from .mm.cambricon_mlu import * +elif AI_DEVICE == "cuda": + # Check if running on DCU platform + if os.getenv("PLATFORM") == "dcu": + from .attn.dcu import * + from .mm.dcu import * diff --git a/lightx2v_platform/ops/attn/__init__.py b/lightx2v_platform/ops/attn/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v_platform/ops/attn/cambricon_mlu/__init__.py b/lightx2v_platform/ops/attn/cambricon_mlu/__init__.py new file mode 100644 index 0000000..848e743 --- /dev/null +++ b/lightx2v_platform/ops/attn/cambricon_mlu/__init__.py @@ -0,0 +1,2 @@ +from .flash_attn import * +from .sage_attn import * diff --git a/lightx2v_platform/ops/attn/cambricon_mlu/flash_attn.py b/lightx2v_platform/ops/attn/cambricon_mlu/flash_attn.py new file mode 100644 index 0000000..19b916b --- /dev/null +++ b/lightx2v_platform/ops/attn/cambricon_mlu/flash_attn.py @@ -0,0 +1,42 @@ +import math + +from lightx2v_platform.ops.attn.template import AttnWeightTemplate +from lightx2v_platform.registry_factory import PLATFORM_ATTN_WEIGHT_REGISTER + +try: + import torch_mlu_ops as tmo +except ImportError: + tmo = None + + +@PLATFORM_ATTN_WEIGHT_REGISTER("mlu_flash_attn") +class MluFlashAttnWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + assert tmo is not None, "torch_mlu_ops is not installed." + + def apply(self, q, k, v, cu_seqlens_q=None, cu_seqlens_kv=None, max_seqlen_q=None, max_seqlen_kv=None, model_cls=None): + if len(q.shape) == 3: + bs = 1 + q, k, v = q.unsqueeze(0), k.unsqueeze(0), v.unsqueeze(0) + elif len(q.shape) == 4: + bs = q.shape[0] + softmax_scale = 1 / math.sqrt(q.shape[-1]) + x = tmo.flash_attention( + q=q, + k=k, + v=v, + cu_seq_lens_q=cu_seqlens_q, + cu_seq_lens_kv=cu_seqlens_kv, + max_seq_len_q=max_seqlen_q, + max_seq_len_kv=max_seqlen_kv, + softmax_scale=softmax_scale, + return_lse=False, + out_dtype=q.dtype, + is_causal=False, + out=None, + alibi_slope=None, + attn_bias=None, + ) + x = x.reshape(bs * max_seqlen_q, -1) + return x diff --git a/lightx2v_platform/ops/attn/cambricon_mlu/sage_attn.py b/lightx2v_platform/ops/attn/cambricon_mlu/sage_attn.py new file mode 100644 index 0000000..687e654 --- /dev/null +++ b/lightx2v_platform/ops/attn/cambricon_mlu/sage_attn.py @@ -0,0 +1,31 @@ +import math + +import torch + +from lightx2v_platform.ops.attn.template import AttnWeightTemplate +from lightx2v_platform.registry_factory import PLATFORM_ATTN_WEIGHT_REGISTER + +try: + import torch_mlu_ops as tmo +except ImportError: + tmo = None + + +@PLATFORM_ATTN_WEIGHT_REGISTER("mlu_sage_attn") +class MluSageAttnWeight(AttnWeightTemplate): + def __init__(self): + self.config = {} + assert tmo is not None, "torch_mlu_ops is not installed." + + def apply(self, q, k, v, cu_seqlens_q=None, cu_seqlens_kv=None, max_seqlen_q=None, max_seqlen_kv=None, model_cls=None): + if len(q.shape) == 3: + bs = 1 + q, k, v = q.unsqueeze(0), k.unsqueeze(0), v.unsqueeze(0) + elif len(q.shape) == 4: + bs = q.shape[0] + softmax_scale = 1 / math.sqrt(q.shape[-1]) + x = tmo.sage_attn( + q=q, k=k, v=v, cu_seq_lens_q=None, cu_seq_lens_kv=None, max_seq_len_kv=max_seqlen_kv, max_seq_len_q=max_seqlen_q, is_causal=False, compute_dtype=torch.bfloat16, softmax_scale=softmax_scale + ) + x = x.reshape(bs * max_seqlen_q, -1) + return x diff --git a/lightx2v_platform/ops/attn/dcu/__init__.py b/lightx2v_platform/ops/attn/dcu/__init__.py new file mode 100644 index 0000000..9ecd991 --- /dev/null +++ b/lightx2v_platform/ops/attn/dcu/__init__.py @@ -0,0 +1 @@ +from .flash_attn import * diff --git a/lightx2v_platform/ops/attn/dcu/flash_attn.py b/lightx2v_platform/ops/attn/dcu/flash_attn.py new file mode 100644 index 0000000..b174bb7 --- /dev/null +++ b/lightx2v_platform/ops/attn/dcu/flash_attn.py @@ -0,0 +1,146 @@ +import torch +from loguru import logger + +from lightx2v_platform.ops.attn.template import AttnWeightTemplate +from lightx2v_platform.registry_factory import PLATFORM_ATTN_WEIGHT_REGISTER + +# Try to import Flash Attention (ROCm version 2.6.1) +try: + from flash_attn import flash_attn_varlen_func + + FLASH_ATTN_AVAILABLE = True + logger.info(f"Flash Attention (ROCm) is available") +except ImportError: + logger.warning("Flash Attention not found. Will use PyTorch SDPA as fallback.") + flash_attn_varlen_func = None + FLASH_ATTN_AVAILABLE = False + + +@PLATFORM_ATTN_WEIGHT_REGISTER("flash_attn_dcu") +class FlashAttnDcu(AttnWeightTemplate): + """ + DCU Flash Attention implementation. + + Uses AMD ROCm version of Flash Attention 2.6.1 when available. + Falls back to PyTorch SDPA (Scaled Dot Product Attention) if Flash Attention is not installed. + + Tested Environment: + - PyTorch: 2.7.1 + - Python: 3.10 + - Flash Attention: 2.6.1 (ROCm) + Reference: https://developer.sourcefind.cn/codes/modelzoo/wan2.1_pytorch/-/blob/master/wan/modules/attention.py + """ + + def __init__(self, weight_name="flash_attn_dcu"): + super().__init__(weight_name) + self.use_flash_attn = FLASH_ATTN_AVAILABLE + + if self.use_flash_attn: + logger.info("Flash Attention 2.6.1 (ROCm) is available and will be used.") + else: + logger.warning("Flash Attention not available. Using PyTorch SDPA fallback.") + + def apply( + self, + q, + k, + v, + q_lens=None, + k_lens=None, + dropout_p=0.0, + softmax_scale=None, + causal=False, + window_size=(-1, -1), + deterministic=False, + ): + """ + Execute Flash Attention computation. + Args: + q: [B, Lq, Nq, C1] Query tensor + k: [B, Lk, Nk, C1] Key tensor + v: [B, Lk, Nk, C2] Value tensor + q_lens: [B] Optional sequence lengths for queries + k_lens: [B] Optional sequence lengths for keys + dropout_p: Dropout probability + softmax_scale: Scaling factor for QK^T before softmax + causal: Whether to apply causal mask + window_size: Sliding window size tuple (left, right) + deterministic: Whether to use deterministic algorithm + Returns: + Output tensor: [B, Lq, Nq, C2] + """ + if not self.use_flash_attn: + # Fallback to PyTorch SDPA + return self._sdpa_fallback(q, k, v, causal, dropout_p) + + # Ensure data types are half precision + half_dtypes = (torch.float16, torch.bfloat16) + dtype = q.dtype if q.dtype in half_dtypes else torch.bfloat16 + out_dtype = q.dtype + + b, lq, lk = q.size(0), q.size(1), k.size(1) + + def half(x): + return x if x.dtype in half_dtypes else x.to(dtype) + + # Preprocess query + if q_lens is None: + q_flat = half(q.flatten(0, 1)) + q_lens = torch.tensor([lq] * b, dtype=torch.int32, device=q.device) + else: + q_flat = half(torch.cat([u[:v] for u, v in zip(q, q_lens)])) + + # Preprocess key/value + if k_lens is None: + k_flat = half(k.flatten(0, 1)) + v_flat = half(v.flatten(0, 1)) + k_lens = torch.tensor([lk] * b, dtype=torch.int32, device=k.device) + else: + k_flat = half(torch.cat([u[:v] for u, v in zip(k, k_lens)])) + v_flat = half(torch.cat([u[:v] for u, v in zip(v, k_lens)])) + + # Compute cumulative sequence lengths + cu_seqlens_q = torch.cat([q_lens.new_zeros([1]), q_lens]).cumsum(0, dtype=torch.int32) + cu_seqlens_k = torch.cat([k_lens.new_zeros([1]), k_lens]).cumsum(0, dtype=torch.int32) + + # Use Flash Attention 2.6.1 (ROCm version) + output = flash_attn_varlen_func( + q=q_flat, + k=k_flat, + v=v_flat, + cu_seqlens_q=cu_seqlens_q, + cu_seqlens_k=cu_seqlens_k, + max_seqlen_q=lq, + max_seqlen_k=lk, + dropout_p=dropout_p, + softmax_scale=softmax_scale, + causal=causal, + window_size=window_size, + deterministic=deterministic, + ) + + # Reshape back to batch dimension + output = output.unflatten(0, (b, lq)) + return output.to(out_dtype) + + def _sdpa_fallback(self, q, k, v, causal=False, dropout_p=0.0): + """ + Fallback to PyTorch Scaled Dot Product Attention. + Args: + q: [B, Lq, Nq, C] Query tensor + k: [B, Lk, Nk, C] Key tensor + v: [B, Lk, Nk, C] Value tensor + causal: Whether to apply causal mask + dropout_p: Dropout probability + Returns: + Output tensor: [B, Lq, Nq, C] + """ + # Transpose to [B, Nq, Lq, C] for SDPA + q = q.transpose(1, 2) + k = k.transpose(1, 2) + v = v.transpose(1, 2) + + out = torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=None, is_causal=causal, dropout_p=dropout_p) + + # Transpose back to [B, Lq, Nq, C] + return out.transpose(1, 2).contiguous() diff --git a/lightx2v_platform/ops/attn/template.py b/lightx2v_platform/ops/attn/template.py new file mode 100644 index 0000000..10b236e --- /dev/null +++ b/lightx2v_platform/ops/attn/template.py @@ -0,0 +1,32 @@ +from abc import ABCMeta, abstractmethod + + +class AttnWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name): + self.weight_name = weight_name + self.config = {} + + def load(self, weight_dict): + pass + + @abstractmethod + def apply(self, input_tensor): + pass + + def set_config(self, config=None): + if config is not None: + self.config = config + + def to_cpu(self, non_blocking=False): + pass + + def to_cuda(self, non_blocking=False): + pass + + def state_dict(self, destination=None): + if destination is None: + destination = {} + return destination + + def load_state_dict(self, destination, block_index, adapter_block_inde=None): + return {} diff --git a/lightx2v_platform/ops/mm/__init__.py b/lightx2v_platform/ops/mm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v_platform/ops/mm/cambricon_mlu/__init__.py b/lightx2v_platform/ops/mm/cambricon_mlu/__init__.py new file mode 100644 index 0000000..3f98981 --- /dev/null +++ b/lightx2v_platform/ops/mm/cambricon_mlu/__init__.py @@ -0,0 +1 @@ +from .mm_weight import * diff --git a/lightx2v_platform/ops/mm/cambricon_mlu/mm_weight.py b/lightx2v_platform/ops/mm/cambricon_mlu/mm_weight.py new file mode 100644 index 0000000..da2b980 --- /dev/null +++ b/lightx2v_platform/ops/mm/cambricon_mlu/mm_weight.py @@ -0,0 +1,37 @@ +from lightx2v_platform.ops.mm.template import MMWeightQuantTemplate +from lightx2v_platform.registry_factory import PLATFORM_MM_WEIGHT_REGISTER + +try: + import torch_mlu_ops as tmo +except ImportError: + tmo = None + + +@PLATFORM_MM_WEIGHT_REGISTER("int8-tmo") +class MMWeightWint8channelAint8channeldynamicMlu(MMWeightQuantTemplate): + """ + Name: W-int8-channel-sym-A-int8-channel-sym-dynamic-Mlu + + Quant MM: + Weight: int8 perchannel sym + Act: int8 perchannel dynamic sym + Kernel: mlu + """ + + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.load_func = self.load_int8_perchannel_sym + self.weight_need_transpose = False + self.act_quant_func = self.act_quant_int8_perchannel_sym_tmo + + def act_quant_int8_perchannel_sym_tmo(self, x): + input_tensor_quant, input_tensor_scale = tmo.scaled_quantize(x) + return input_tensor_quant, input_tensor_scale + + def apply(self, input_tensor): + dtype = input_tensor.dtype + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = tmo.scaled_matmul( + input_tensor_quant, self.weight.contiguous(), input_tensor_scale, self.weight_scale.squeeze(-1), bias=self.bias if self.bias is not None else None, output_dtype=dtype, use_hp_active=True + ) + return output_tensor diff --git a/lightx2v_platform/ops/mm/cambricon_mlu/q_linear.py b/lightx2v_platform/ops/mm/cambricon_mlu/q_linear.py new file mode 100644 index 0000000..5037a89 --- /dev/null +++ b/lightx2v_platform/ops/mm/cambricon_mlu/q_linear.py @@ -0,0 +1,47 @@ +import torch +import torch.nn as nn + +try: + import torch_mlu_ops as tmo +except ImportError: + tmo = None + + +class MluQuantLinearInt8(nn.Module): + def __init__(self, in_features, out_features, bias=True, dtype=torch.bfloat16): + super().__init__() + self.in_features = in_features + self.out_features = out_features + + self.register_buffer("weight", torch.empty((out_features, in_features), dtype=torch.int8)) + self.register_buffer("weight_scale", torch.empty((out_features, 1), dtype=torch.float32)) + + if bias: + self.register_buffer("bias", torch.empty(out_features, dtype=dtype)) + else: + self.register_buffer("bias", None) + + def act_quant_func(self, x): + input_tensor_quant, input_tensor_scale = tmo.scaled_quantize(x) + return input_tensor_quant, input_tensor_scale + + def forward(self, input_tensor): + input_tensor = input_tensor.squeeze(0) + dtype = input_tensor.dtype + input_tensor_quant, input_tensor_scale = self.act_quant_func(input_tensor) + output_tensor = tmo.scaled_matmul(input_tensor_quant, self.weight, input_tensor_scale, self.weight_scale.squeeze(-1), output_dtype=dtype) + return output_tensor.unsqueeze(0) + + def _apply(self, fn): + for module in self.children(): + module._apply(fn) + + def maybe_cast(t): + if t is not None and t.device != fn(t).device: + return fn(t) + return t + + self.weight = maybe_cast(self.weight) + self.weight_scale = maybe_cast(self.weight_scale) + self.bias = maybe_cast(self.bias) + return self diff --git a/lightx2v_platform/ops/mm/template.py b/lightx2v_platform/ops/mm/template.py new file mode 100644 index 0000000..f418ca0 --- /dev/null +++ b/lightx2v_platform/ops/mm/template.py @@ -0,0 +1,466 @@ +from abc import ABCMeta, abstractmethod + +import torch + +from lightx2v_platform.base.global_var import AI_DEVICE + + +class MMWeightTemplate(metaclass=ABCMeta): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + self.weight_name = weight_name + self.bias_name = bias_name + self.create_cuda_buffer = create_cuda_buffer + self.create_cpu_buffer = create_cpu_buffer + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.is_post_adapter = is_post_adapter + self.config = {} + + @abstractmethod + def load(self, weight_dict): + pass + + @abstractmethod + def apply(self): + pass + + def set_config(self, config={}): + self.config = config + + def to_cuda(self, non_blocking=False): + self.weight = self.pin_weight.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_weight_scale"): + self.weight_scale = self.pin_weight_scale.to(AI_DEVICE, non_blocking=non_blocking) + if hasattr(self, "pin_bias") and self.pin_bias is not None: + self.bias = self.pin_bias.to(AI_DEVICE, non_blocking=non_blocking) + + def to_cpu(self, non_blocking=False): + if hasattr(self, "pin_weight"): + self.weight = self.pin_weight.copy_(self.weight, non_blocking=non_blocking).cpu() + if hasattr(self, "weight_scale_name"): + self.weight_scale = self.pin_weight_scale.copy_(self.weight_scale, non_blocking=non_blocking).cpu() + if self.bias is not None: + self.bias = self.pin_bias.copy_(self.bias, non_blocking=non_blocking).cpu() + else: + self.weight = self.weight.to("cpu", non_blocking=non_blocking) + if hasattr(self, "weight_scale"): + self.weight_scale = self.weight_scale.to("cpu", non_blocking=non_blocking) + if hasattr(self, "bias") and self.bias is not None: + self.bias = self.bias.to("cpu", non_blocking=non_blocking) + + +class MMWeightQuantTemplate(MMWeightTemplate): + def __init__(self, weight_name, bias_name, create_cuda_buffer=False, create_cpu_buffer=False, lazy_load=False, lazy_load_file=None, is_post_adapter=False): + super().__init__(weight_name, bias_name, create_cuda_buffer, create_cpu_buffer, lazy_load, lazy_load_file, is_post_adapter) + self.weight_scale_name = self.weight_name.removesuffix(".weight") + ".weight_scale" + self.load_func = None + self.weight_need_transpose = True + self.act_quant_func = None + self.lazy_load = lazy_load + self.lazy_load_file = lazy_load_file + self.infer_dtype = torch.bfloat16 # bias dtype + self.bias_force_fp32 = False + + # ========================= + # weight load functions + # ========================= + def load(self, weight_dict): + self.load_quantized(weight_dict) + if self.weight_need_transpose: + if hasattr(self, "weight") and self.weight is not None: + self.weight = self.weight.t() + if hasattr(self, "pin_weight") and self.pin_weight is not None: + self.pin_weight = self.pin_weight.t() + if hasattr(self, "weight_cuda_buffer") and self.weight_cuda_buffer is not None: + self.weight_cuda_buffer = self.weight_cuda_buffer.t() + + def load_quantized(self, weight_dict): + if self.create_cuda_buffer: + self._load_cuda_buffers(weight_dict) + elif self.create_cpu_buffer: + self._load_cpu_pin_buffers() + else: + self._load_default_tensors(weight_dict) + + def _load_cuda_buffers(self, weight_dict): + source = self.lazy_load_file if self.lazy_load else weight_dict + self.weight_cuda_buffer, self.weight_scale_cuda_buffer = self._get_cuda_tensor_pair(source, self.lazy_load) + self.bias_cuda_buffer = self._get_cuda_bias_tensor(source, self.lazy_load) + + def _get_cuda_tensor_pair(self, source, is_lazy): + if is_lazy: + weight = source.get_tensor(self.weight_name).to(AI_DEVICE) + scale = source.get_tensor(self.weight_scale_name).float().to(AI_DEVICE) + else: + weight = source[self.weight_name].to(AI_DEVICE) + scale = source[self.weight_scale_name].float().to(AI_DEVICE) + return weight, scale + + def _get_cuda_bias_tensor(self, source, is_lazy): + if self.bias_name is None: + return None + if is_lazy: + bias = source.get_tensor(self.bias_name) + dtype = self.infer_dtype + else: + bias = source[self.bias_name] + dtype = bias.dtype + if self.bias_force_fp32: + bias = bias.to(torch.float32) + else: + bias = bias.to(dtype) + return bias.to(AI_DEVICE) + + def _load_cpu_pin_buffers(self): + self.pin_weight, self.pin_weight_scale = self._get_cpu_pin_tensor_pair(self.lazy_load_file, is_lazy=True) + self.pin_bias = self._get_cpu_pin_bias_tensor(self.lazy_load_file, is_lazy=True) + self.bias = None + + def _get_cpu_pin_tensor_pair(self, source, is_lazy): + if is_lazy: + weight_tensor = source.get_tensor(self.weight_name) + scale_tensor = source.get_tensor(self.weight_scale_name) + scale_dtype = torch.float + else: + weight_tensor = source[self.weight_name] + scale_tensor = source[self.weight_scale_name] + scale_dtype = torch.float + + pin_weight = self._create_pin_tensor(weight_tensor) + pin_scale = self._create_pin_tensor(scale_tensor, scale_dtype) + return pin_weight, pin_scale + + def _get_cpu_pin_bias_tensor(self, source, is_lazy): + if self.bias_name is None: + return None + if is_lazy: + bias_tensor = source.get_tensor(self.bias_name) + if not self.bias_force_fp32: + bias_tensor = bias_tensor.to(self.infer_dtype) + else: + bias_tensor = source[self.bias_name] + if self.bias_force_fp32: + bias_tensor = bias_tensor.to(torch.float32) + return self._create_pin_tensor(bias_tensor) + + def _create_pin_tensor(self, tensor, dtype=None): + dtype = dtype or tensor.dtype + pin_tensor = torch.empty(tensor.shape, pin_memory=True, dtype=dtype) + pin_tensor.copy_(tensor) + del tensor + return pin_tensor + + def _load_default_tensors(self, weight_dict): + if not self.lazy_load: + self.weight, self.weight_scale, self.pin_weight, self.pin_weight_scale = self._get_device_tensor_pair(weight_dict) + self._load_default_bias(weight_dict) + else: + self.bias = None + self.pin_bias = None + + def _get_device_tensor_pair(self, source): + device = source[self.weight_name].device + if device.type == "cpu": + pin_weight, pin_scale = self._get_cpu_pin_tensor_pair(source, is_lazy=False) + return None, None, pin_weight, pin_scale + else: + return source[self.weight_name], source[self.weight_scale_name].float(), None, None + + def _load_default_bias(self, source): + if self.bias_name is None: + self.bias = None + self.pin_bias = None + self.bias_cuda_buffer = None + return + + if self.create_cuda_buffer: + self.bias_cuda_buffer = self._get_cuda_bias_tensor(source, is_lazy=False) + self.bias = None + self.pin_bias = None + else: + bias_tensor = source[self.bias_name].float() if self.bias_force_fp32 else source[self.bias_name] + device = bias_tensor.device + if device.type == "cpu": + self.pin_bias = self._get_cpu_pin_bias_tensor(source, is_lazy=False) + self.bias = None + else: + self.bias = bias_tensor + self.pin_bias = None + + def load_fp8_perchannel_sym(self, weight_dict): + if self.config.get("weight_auto_quant", False): + self.weight = weight_dict[self.weight_name].to(torch.float32) + w_quantizer = FloatQuantizer("e4m3", True, "per_channel") + self.weight, self.weight_scale, _ = w_quantizer.real_quant_tensor(self.weight) + self.weight = self.weight.to(torch.float8_e4m3fn) + self.weight_scale = self.weight_scale.to(torch.float32) + else: + self.load_quantized(weight_dict) + + def load_int8_perchannel_sym(self, weight_dict): + if self.config.get("weight_auto_quant", False): + self.weight = weight_dict[self.weight_name].to(torch.float32) + w_quantizer = IntegerQuantizer(8, True, "per_channel") + self.weight, self.weight_scale, _ = w_quantizer.real_quant_tensor(self.weight) + self.weight = self.weight.to(torch.int8) + self.weight_scale = self.weight_scale.to(torch.float32) + else: + self.load_quantized(weight_dict) + + def load_mxfp4(self, weight_dict): + if self.config.get("weight_auto_quant", False): + device = weight_dict[self.weight_name].device + self.weight = weight_dict[self.weight_name].to(AI_DEVICE).to(torch.bfloat16) + self.weight, self.weight_scale = scaled_mxfp4_quant(self.weight) + self.weight, self.weight_scale = self.weight.to(device), self.weight_scale.to(device) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + + def load_mxfp6(self, weight_dict): + if self.config.get("weight_auto_quant", False): + device = weight_dict[self.weight_name].device + self.weight = weight_dict[self.weight_name].to(AI_DEVICE).to(torch.bfloat16) + self.weight, self.weight_scale = scaled_mxfp6_quant(self.weight) + self.weight, self.weight_scale = self.weight.to(device), self.weight_scale.to(device) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + + def load_mxfp8(self, weight_dict): + if self.config.get("weight_auto_quant", False): + device = weight_dict[self.weight_name].device + self.weight = weight_dict[self.weight_name].to(AI_DEVICE).to(torch.bfloat16) + self.weight, self.weight_scale = scaled_mxfp8_quant(self.weight) + self.weight, self.weight_scale = self.weight.to(device), self.weight_scale.to(device) + else: + device = weight_dict[self.weight_name].device + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + + def load_nvfp4(self, weight_dict): + device = weight_dict[self.weight_name].device + + input_absmax = weight_dict[self.weight_name.replace(".weight", ".input_absmax")] + input_global_scale = (2688.0 / input_absmax).to(torch.float32) + weight_global_scale = weight_dict[f"{self.weight_name}_global_scale"] + alpha = 1.0 / (input_global_scale * weight_global_scale) + + if device.type == "cpu": + weight_shape = weight_dict[self.weight_name].shape + weight_dtype = weight_dict[self.weight_name].dtype + self.pin_weight = torch.empty(weight_shape, pin_memory=True, dtype=weight_dtype) + self.pin_weight.copy_(weight_dict[self.weight_name]) + + weight_scale_shape = weight_dict[self.weight_scale_name].shape + weight_scale_dtype = weight_dict[self.weight_scale_name].dtype + self.pin_weight_scale = torch.empty(weight_scale_shape, pin_memory=True, dtype=weight_scale_dtype) + self.pin_weight_scale.copy_(weight_dict[self.weight_scale_name]) + + input_global_scale_shape = input_global_scale.shape + input_global_scale_dtype = input_global_scale.dtype + self.pin_input_global_scale = torch.empty(input_global_scale_shape, pin_memory=True, dtype=input_global_scale_dtype) + self.pin_input_global_scale.copy_(input_global_scale) + + alpha_shape = alpha.shape + alpha_dtype = alpha.dtype + self.pin_alpha = torch.empty(alpha_shape, pin_memory=True, dtype=alpha_dtype) + self.pin_alpha.copy_(alpha) + + del weight_dict[self.weight_name] + else: + self.weight = weight_dict[self.weight_name] + self.weight_scale = weight_dict[self.weight_scale_name] + self.input_global_scale = input_global_scale + self.alpha = alpha + + if self.bias_name is not None: + if self.create_cuda_buffer: + self.bias_cuda_buffer = weight_dict[self.bias_name].to(AI_DEVICE) + else: + device = weight_dict[self.bias_name].device + if device.type == "cpu": + bias_shape = weight_dict[self.bias_name].shape + bias_dtype = weight_dict[self.bias_name].dtype + self.pin_bias = torch.empty(bias_shape, pin_memory=True, dtype=bias_dtype) + self.pin_bias.copy_(weight_dict[self.bias_name]) + else: + self.bias = weight_dict[self.bias_name] + else: + self.bias = None + self.pin_bias = None + + def load_fp8_perblock128_sym(self, weight_dict): + if self.config.get("weight_auto_quant", False): + self.weight = weight_dict[self.weight_name] + self.weight, self.weight_scale = self.per_block_cast_to_fp8(self.weight) + else: + self.load_quantized(weight_dict) + + def per_block_cast_to_fp8(self, x): + assert x.dim() == 2 + m, n = x.shape + x_padded = torch.zeros( + (deep_gemm.ceil_div(m, 128) * 128, deep_gemm.ceil_div(n, 128) * 128), + dtype=x.dtype, + device=x.device, + ) + x_padded[:m, :n] = x + x_view = x_padded.view(-1, 128, x_padded.size(1) // 128, 128) + x_amax = x_view.abs().float().amax(dim=(1, 3), keepdim=True).clamp(1e-4) + x_scaled = (x_view * (448.0 / x_amax)).to(torch.float8_e4m3fn) + return x_scaled.view_as(x_padded)[:m, :n].contiguous(), (x_amax / 448.0).view(x_view.size(0), x_view.size(2)) + + # ========================= + # act quant kernels + # ========================= + def act_quant_int8_perchannel_sym_torchao(self, x): + input_tensor_quant, input_tensor_scale = quantize_activation_per_token_absmax(x) + return input_tensor_quant, input_tensor_scale + + def act_quant_fp8_perchannel_sym_vllm(self, x): + input_tensor_quant, input_tensor_scale = ops.scaled_fp8_quant(x, None, scale_ub=None, use_per_token_if_dynamic=True) + return input_tensor_quant, input_tensor_scale + + def act_quant_fp8_perchannel_sym_sgl(self, x): + m, k = x.shape + input_tensor_quant = torch.empty((m, k), dtype=torch.float8_e4m3fn, device="cuda", requires_grad=False) + input_tensor_scale = torch.empty((m, 1), dtype=torch.float32, device="cuda", requires_grad=False) + sgl_kernel.sgl_per_token_quant_fp8(x, input_tensor_quant, input_tensor_scale) + return input_tensor_quant, input_tensor_scale + + def act_quant_int8_perchannel_sym_vllm(self, x): + input_tensor_quant, input_tensor_scale, _ = ops.scaled_int8_quant(x, scale=None, azp=None, symmetric=True) + return input_tensor_quant, input_tensor_scale + + def act_quant_nvfp4(self, x): + input_tensor_quant, input_tensor_scale = scaled_nvfp4_quant(x, self.input_global_scale) + return input_tensor_quant, input_tensor_scale + + def act_quant_mxfp4(self, x): + input_tensor_quant, input_tensor_scale = scaled_mxfp4_quant(x) + return input_tensor_quant, input_tensor_scale + + def act_quant_mxfp8(self, x): + input_tensor_quant, input_tensor_scale = scaled_mxfp8_quant(x) + return input_tensor_quant, input_tensor_scale + + def act_quant_fp8_perchannelgroup128_sym_deepgemm(self, x): + assert x.dim() == 2 and x.size(1) % 128 == 0 + m, n = x.shape + x_view = x.view(m, -1, 128) + x_amax = x_view.abs().float().amax(dim=2).view(m, -1).clamp(1e-4) + return (x_view * (448.0 / x_amax.unsqueeze(2))).to(torch.float8_e4m3fn).view(m, n), (x_amax / 448.0).view(m, -1) + + def act_quant_fp8_perchannelgroup128_sym_sgl(self, x): + m, k = x.shape + input_tensor_quant = torch.empty((m, k), dtype=torch.float8_e4m3fn, device="cuda", requires_grad=False) + input_tensor_scale = torch.empty((m, k // 128), dtype=torch.float32, device="cuda", requires_grad=False) + sgl_kernel.sgl_per_token_group_quant_fp8( + x, + input_tensor_quant, + input_tensor_scale, + group_size=128, + eps=1e-10, + fp8_min=-448.0, + fp8_max=448.0, + ) + return input_tensor_quant, input_tensor_scale + + def state_dict(self, destination=None): + if destination is None: + destination = {} + destination[self.weight_name] = self.pin_weight if hasattr(self, "pin_weight") else self.weight + if self.bias_name is not None: + destination[self.bias_name] = self.pin_bias if hasattr(self, "pin_bias") else self.bias + destination[self.weight_scale_name] = self.pin_weight_scale if hasattr(self, "pin_weight_scale") else self.weight_scale + return destination + + def load_state_dict(self, destination, block_index, adapter_block_index=None): + if self.is_post_adapter: + weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + weight_scale_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_scale_name, count=1) + else: + weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + weight_scale_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_scale_name, count=1) + + if weight_name not in destination: + self.weight = None + return + + self.weight = self.weight_cuda_buffer.copy_(destination[weight_name], non_blocking=True) + self.weight_scale = self.weight_scale_cuda_buffer.copy_(destination[weight_scale_name], non_blocking=True) + + if self.bias_name is not None: + bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + self.bias = self.bias_cuda_buffer.copy_(destination[bias_name], non_blocking=True) + else: + self.bias = None + + def load_state_dict_from_disk(self, block_index, adapter_block_index=None): + if self.is_post_adapter: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_name, count=1) + self.weight_scale_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.weight_scale_name, count=1) + else: + self.weight_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_name, count=1) + self.weight_scale_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.weight_scale_name, count=1) + + if self.weight_need_transpose: + weight_tensor = self.lazy_load_file.get_tensor(self.weight_name).t() + else: + weight_tensor = self.lazy_load_file.get_tensor(self.weight_name) + self.pin_weight = self.pin_weight.copy_(weight_tensor) + + weight_scale_tensor = self.lazy_load_file.get_tensor(self.weight_scale_name) + self.pin_weight_scale = self.pin_weight_scale.copy_(weight_scale_tensor) + + del weight_tensor + + if self.bias_name is not None: + if self.is_post_adapter: + assert adapter_block_index is not None + self.bias_name = re.sub(r"\.\d+", lambda m: f".{adapter_block_index}", self.bias_name, count=1) + else: + self.bias_name = re.sub(r"\.\d+", lambda m: f".{block_index}", self.bias_name, count=1) + + bias_tensor = self.lazy_load_file.get_tensor(self.bias_name) + self.pin_bias.copy_(bias_tensor) + del bias_tensor diff --git a/lightx2v_platform/ops/norm/__init__.py b/lightx2v_platform/ops/norm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v_platform/ops/rope/__init__.py b/lightx2v_platform/ops/rope/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lightx2v_platform/registry_factory.py b/lightx2v_platform/registry_factory.py new file mode 100644 index 0000000..777cf52 --- /dev/null +++ b/lightx2v_platform/registry_factory.py @@ -0,0 +1,58 @@ +class Register(dict): + def __init__(self, *args, **kwargs): + super(Register, self).__init__(*args, **kwargs) + self._dict = {} + + def __call__(self, target_or_name): + if callable(target_or_name): + return self.register(target_or_name) + else: + return lambda x: self.register(x, key=target_or_name) + + def register(self, target, key=None): + if not callable(target): + raise Exception(f"Error: {target} must be callable!") + + if key is None: + key = target.__name__ + + if key in self._dict: + raise Exception(f"{key} already exists.") + + self[key] = target + return target + + def __setitem__(self, key, value): + self._dict[key] = value + + def __getitem__(self, key): + return self._dict[key] + + def __contains__(self, key): + return key in self._dict + + def __str__(self): + return str(self._dict) + + def keys(self): + return self._dict.keys() + + def values(self): + return self._dict.values() + + def items(self): + return self._dict.items() + + def get(self, key, default=None): + return self._dict.get(key, default) + + def merge(self, other_register): + for key, value in other_register.items(): + if key in self._dict: + raise Exception(f"{key} already exists in target register.") + self[key] = value + + +PLATFORM_DEVICE_REGISTER = Register() +PLATFORM_ATTN_WEIGHT_REGISTER = Register() +PLATFORM_MM_WEIGHT_REGISTER = Register() diff --git a/lightx2v_platform/set_ai_device.py b/lightx2v_platform/set_ai_device.py new file mode 100644 index 0000000..e52b4dd --- /dev/null +++ b/lightx2v_platform/set_ai_device.py @@ -0,0 +1,15 @@ +import os + +from lightx2v_platform import * + + +def set_ai_device(): + platform = os.getenv("PLATFORM", "cuda") + init_ai_device(platform) + from lightx2v_platform.base.global_var import AI_DEVICE + + check_ai_device(AI_DEVICE) + + +set_ai_device() +from lightx2v_platform.ops import * # noqa: E402 diff --git a/lightx2v_platform/test/test_device.py b/lightx2v_platform/test/test_device.py new file mode 100644 index 0000000..c1047bf --- /dev/null +++ b/lightx2v_platform/test/test_device.py @@ -0,0 +1,11 @@ +""" +PYTHONPATH=/path-to-LightX2V PLATFORM=cuda python test_device.py +PYTHONPATH=/path-to-LightX2V PLATFORM=mlu python test_device.py +PYTHONPATH=/path-to-LightX2V PLATFORM=metax python test_device.py +""" + +# This import will initialize the AI device +import lightx2v_platform.set_ai_device # noqa: F401 +from lightx2v_platform.base.global_var import AI_DEVICE + +print(f"AI_DEVICE: {AI_DEVICE}") diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..884766c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,114 @@ +[build-system] +requires = [ + "setuptools>=61.0", + "wheel", + "packaging", + "ninja", +] +build-backend = "setuptools.build_meta" + +[project] +name = "lightx2v" +version = "0.1.0" +authors = [ + {name = "LightX2V Contributors"}, +] +description = "LightX2V: Light Video Generation Inference Framework" +readme = "README.md" +license = "Apache-2.0" +requires-python = ">=3.10" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Multimedia :: Video", +] + +dependencies = [ + "numpy", + "scipy", + "torch<=2.8.0", + "torchvision<=0.23.0", + "torchaudio<=2.8.0", + "diffusers", + "transformers", + "tokenizers", + "tqdm", + "accelerate", + "safetensors", + "opencv-python", + "imageio", + "imageio-ffmpeg", + "einops", + "loguru", + "qtorch", + "ftfy", + "gradio", + "aiohttp", + "pydantic", + "prometheus-client", + "gguf", + "fastapi", + "uvicorn", + "PyJWT", + "requests", + "aio-pika", + "asyncpg>=0.27.0", + "aioboto3>=12.0.0", + "alibabacloud_dypnsapi20170525==1.2.2", + "redis==6.4.0", + "tos", + "decord", + "av", +] + +[project.urls] +Homepage = "https://github.com/ModelTC/LightX2V" +Documentation = "https://lightx2v-en.readthedocs.io/en/latest/" +Repository = "https://github.com/ModelTC/LightX2V" + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +include = ["lightx2v*"] +exclude = ["lightx2v_kernel*"] + +[tool.ruff] +exclude = [ + ".git", + ".mypy_cache", + ".ruff_cache", + ".venv", + "dist", + "build", + "__pycache__", + "*.egg-info", + ".pytest_cache", + ".cluade", + ".cursor", + "lightx2v_kernel", +] +target-version = "py311" +line-length = 200 +indent-width = 4 + + +[tool.ruff.lint] +extend-select = ["I", "F401"] +ignore = ["F"] + +[tool.ruff.lint.per-file-ignores] +"**/__init__.py" = ["F401"] +"**/lightx2v_kernel/*" = ["F401"] +"**/{cookbook,docs}/*" = ["E402", "F401", "F811", "F841"] + +[tool.ruff.lint.isort] +known-first-party = ["lightx2v"] +case-sensitive = true diff --git a/requirements-docs.txt b/requirements-docs.txt new file mode 100644 index 0000000..1c8eec4 --- /dev/null +++ b/requirements-docs.txt @@ -0,0 +1,7 @@ +sphinx == 6.2.1 +sphinx-book-theme == 1.0.1 +sphinx-copybutton == 0.5.2 +myst-parser == 2.0.0 +sphinx-argparse +sphinxcontrib.redoc +sphinxcontrib.openapi diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e9cb436 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,40 @@ +packaging +ninja +numpy +scipy +torch<=2.8.0 +torchvision<=0.23.0 +torchaudio<=2.8.0 +diffusers +transformers +tokenizers +tqdm +accelerate +safetensors +opencv-python +imageio +imageio-ffmpeg +einops +loguru +sgl-kernel +qtorch +ftfy +gradio +aiohttp +pydantic +aio-pika +asyncpg>=0.27.0 +aioboto3>=12.0.0 +prometheus-client +gguf +fastapi +uvicorn +PyJWT +requests +alibabacloud_dypnsapi20170525==1.2.2 +redis==6.4.0 +tos +decord +zmq +jsonschema +pymongo diff --git a/requirements_animate.txt b/requirements_animate.txt new file mode 100644 index 0000000..13d6093 --- /dev/null +++ b/requirements_animate.txt @@ -0,0 +1,8 @@ +decord +peft +onnxruntime +pandas +matplotlib +-e git+https://github.com/facebookresearch/sam2.git@0e78a118995e66bb27d78518c4bd9a3e95b4e266#egg=SAM-2 +loguru +sentencepiece diff --git a/requirements_win.txt b/requirements_win.txt new file mode 100644 index 0000000..1cada8f --- /dev/null +++ b/requirements_win.txt @@ -0,0 +1,18 @@ +packaging +ninja +diffusers +transformers +tokenizers +accelerate +safetensors +opencv-python +numpy +imageio +imageio-ffmpeg +einops +loguru +qtorch +ftfy +gradio +aiohttp +pydantic diff --git a/save_results/.gitkeep b/save_results/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/base/base.sh b/scripts/base/base.sh new file mode 100644 index 0000000..4ae0167 --- /dev/null +++ b/scripts/base/base.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +# always set false to avoid some warnings +export TOKENIZERS_PARALLELISM=false +# set expandable_segments to True to avoid OOM +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +# ===================================================================================== +# ⚠️ IMPORTANT CONFIGURATION PARAMETERS - READ CAREFULLY AND MODIFY WITH CAUTION ⚠️ +# ===================================================================================== + +# Model Inference Data Type Setting (IMPORTANT!) +# Key parameter affecting model accuracy and performance +# Available options: [BF16, FP16] +# If not set, default value: BF16 +export DTYPE=BF16 + +# Sensitive Layer Data Type Setting (IMPORTANT!) +# Used for layers requiring higher precision +# Available options: [FP32, None] +# If not set, default value: None (follows DTYPE setting) +export SENSITIVE_LAYER_DTYPE=None + +# Performance Profiling Debug Level (Debug Only) +# Enables detailed performance analysis output, such as time cost and memory usage +# Available options: [0, 1, 2] +# If not set, default value: 0 +# Note: This option can be set to 0 for production. +export PROFILING_DEBUG_LEVEL=2 + + +echo "===============================================================================" +echo "LightX2V Base Environment Variables Summary:" +echo "-------------------------------------------------------------------------------" +echo "lightx2v_path: ${lightx2v_path}" +echo "model_path: ${model_path}" +echo "-------------------------------------------------------------------------------" +echo "Model Inference Data Type: ${DTYPE}" +echo "Sensitive Layer Data Type: ${SENSITIVE_LAYER_DTYPE}" +echo "Performance Profiling Debug Level: ${PROFILING_DEBUG_LEVEL}" +echo "===============================================================================" diff --git a/scripts/bench/run_lightx2v_1.sh b/scripts/bench/run_lightx2v_1.sh new file mode 100644 index 0000000..a44ca39 --- /dev/null +++ b/scripts/bench/run_lightx2v_1.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH +export DTYPE=BF16 +export SENSITIVE_LAYER_DTYPE=FP32 +export PROFILING_DEBUG_LEVEL=2 + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_1.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_1.mp4 diff --git a/scripts/bench/run_lightx2v_2.sh b/scripts/bench/run_lightx2v_2.sh new file mode 100644 index 0000000..5a15c63 --- /dev/null +++ b/scripts/bench/run_lightx2v_2.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +export PROFILING_DEBUG_LEVEL=2 +export DTYPE=BF16 + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_2.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_2.mp4 diff --git a/scripts/bench/run_lightx2v_3.sh b/scripts/bench/run_lightx2v_3.sh new file mode 100644 index 0000000..30d6a8c --- /dev/null +++ b/scripts/bench/run_lightx2v_3.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +export PROFILING_DEBUG_LEVEL=2 +export DTYPE=BF16 + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_3.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_3.mp4 diff --git a/scripts/bench/run_lightx2v_3_distill.sh b/scripts/bench/run_lightx2v_3_distill.sh new file mode 100644 index 0000000..b99136f --- /dev/null +++ b/scripts/bench/run_lightx2v_3_distill.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +export PROFILING_DEBUG_LEVEL=2 +export DTYPE=BF16 + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_3_distill.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_3_distill.mp4 diff --git a/scripts/bench/run_lightx2v_4.sh b/scripts/bench/run_lightx2v_4.sh new file mode 100644 index 0000000..a6c57c5 --- /dev/null +++ b/scripts/bench/run_lightx2v_4.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +export PROFILING_DEBUG_LEVEL=2 +export DTYPE=BF16 + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_4.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_4.mp4 diff --git a/scripts/bench/run_lightx2v_5.sh b/scripts/bench/run_lightx2v_5.sh new file mode 100644 index 0000000..0be7a05 --- /dev/null +++ b/scripts/bench/run_lightx2v_5.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH +export DTYPE=BF16 +export SENSITIVE_LAYER_DTYPE=FP32 +export PROFILING_DEBUG_LEVEL=2 + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_5.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_5.mp4 diff --git a/scripts/bench/run_lightx2v_5_distill.sh b/scripts/bench/run_lightx2v_5_distill.sh new file mode 100644 index 0000000..108c990 --- /dev/null +++ b/scripts/bench/run_lightx2v_5_distill.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH +export DTYPE=BF16 +export SENSITIVE_LAYER_DTYPE=FP32 +export PROFILING_DEBUG_LEVEL=2 + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_5_distill.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_5_distill.mp4 diff --git a/scripts/bench/run_lightx2v_6.sh b/scripts/bench/run_lightx2v_6.sh new file mode 100644 index 0000000..9d08af1 --- /dev/null +++ b/scripts/bench/run_lightx2v_6.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +export PROFILING_DEBUG_LEVEL=2 +export DTYPE=BF16 + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_6.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_6.mp4 diff --git a/scripts/bench/run_lightx2v_6_distill.sh b/scripts/bench/run_lightx2v_6_distill.sh new file mode 100644 index 0000000..1f6f223 --- /dev/null +++ b/scripts/bench/run_lightx2v_6_distill.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/path/to/lightx2v +model_path=/path/to/lightx2v/Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v +# model_path=/path/to/lightx2v/Wan2.1-I2V-14B-720P-StepDistill-CfgDistill-Lightx2v + +# check section +if [ -z "${CUDA_VISIBLE_DEVICES}" ]; then + cuda_devices=0 + echo "Warn: CUDA_VISIBLE_DEVICES is not set, using default value: ${cuda_devices}, change at shell script or set env variable." + export CUDA_VISIBLE_DEVICES=${cuda_devices} +fi + +if [ -z "${lightx2v_path}" ]; then + echo "Error: lightx2v_path is not set. Please set this variable first." + exit 1 +fi + +if [ -z "${model_path}" ]; then + echo "Error: model_path is not set. Please set this variable first." + exit 1 +fi + +export TOKENIZERS_PARALLELISM=false + +export PYTHONPATH=${lightx2v_path}:$PYTHONPATH + +export PROFILING_DEBUG_LEVEL=2 +export DTYPE=BF16 + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/bench/lightx2v_6_distill.json \ +--prompt "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_2.jpg \ +--save_result_path ${lightx2v_path}/save_results/lightx2v_6_distill.mp4 diff --git a/scripts/cache/readme.md b/scripts/cache/readme.md new file mode 100644 index 0000000..05c2756 --- /dev/null +++ b/scripts/cache/readme.md @@ -0,0 +1,11 @@ +# Feature Caching + +The config files for feature caching are available [here](https://github.com/ModelTC/lightx2v/tree/main/configs/caching) + +By specifying --config_json to the specific config file, you can test different cache algorithms. + +Please refer our feature caching doc: + +[English doc: Feature Caching](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/cache.html) + +[中文文档: 特征缓存](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/cache.html) diff --git a/scripts/cache/run_wan_i2v_dist_cfg_ulysses_mag.sh b/scripts/cache/run_wan_i2v_dist_cfg_ulysses_mag.sh new file mode 100644 index 0000000..20cd5e8 --- /dev/null +++ b/scripts/cache/run_wan_i2v_dist_cfg_ulysses_mag.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/magcache/wan_i2v_dist_cfg_ulysses_mag_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_dist_cfg_ulysses_mag.mp4 diff --git a/scripts/cache/run_wan_i2v_mag.sh b/scripts/cache/run_wan_i2v_mag.sh new file mode 100644 index 0000000..8cb0930 --- /dev/null +++ b/scripts/cache/run_wan_i2v_mag.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/magcache/wan_i2v_mag_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_mag.mp4 diff --git a/scripts/cache/run_wan_i2v_mag_calibration.sh b/scripts/cache/run_wan_i2v_mag_calibration.sh new file mode 100644 index 0000000..9ac834c --- /dev/null +++ b/scripts/cache/run_wan_i2v_mag_calibration.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/magcache/wan_i2v_mag_calibration_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_mag.mp4 diff --git a/scripts/cache/run_wan_i2v_tea.sh b/scripts/cache/run_wan_i2v_tea.sh new file mode 100644 index 0000000..85901d4 --- /dev/null +++ b/scripts/cache/run_wan_i2v_tea.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/teacache/wan_i2v_tea_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_tea.mp4 diff --git a/scripts/cache/run_wan_t2v_dist_cfg_ulysses_mag.sh b/scripts/cache/run_wan_t2v_dist_cfg_ulysses_mag.sh new file mode 100644 index 0000000..f0fcffb --- /dev/null +++ b/scripts/cache/run_wan_t2v_dist_cfg_ulysses_mag.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/magcache/wan_t2v_dist_cfg_ulysses_mag_1_3b.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_dist_cfg_ulysses_mag.mp4 diff --git a/scripts/cache/run_wan_t2v_mag.sh b/scripts/cache/run_wan_t2v_mag.sh new file mode 100644 index 0000000..6bdae93 --- /dev/null +++ b/scripts/cache/run_wan_t2v_mag.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/magcache/wan_t2v_mag_1_3b.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_mag.mp4 diff --git a/scripts/cache/run_wan_t2v_mag_calibration.sh b/scripts/cache/run_wan_t2v_mag_calibration.sh new file mode 100644 index 0000000..22ec233 --- /dev/null +++ b/scripts/cache/run_wan_t2v_mag_calibration.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/magcache/wan_t2v_mag_calibration_1_3b.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_mag.mp4 diff --git a/scripts/cache/run_wan_t2v_tea.sh b/scripts/cache/run_wan_t2v_tea.sh new file mode 100644 index 0000000..74c28e6 --- /dev/null +++ b/scripts/cache/run_wan_t2v_tea.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/caching/teacache/wan_t2v_1_3b_tea_480p.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_tea.mp4 diff --git a/scripts/changing_resolution/run_wan_i2v_changing_resolution.sh b/scripts/changing_resolution/run_wan_i2v_changing_resolution.sh new file mode 100644 index 0000000..010497f --- /dev/null +++ b/scripts/changing_resolution/run_wan_i2v_changing_resolution.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/changing_resolution/wan_i2v_U.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_changing_resolution.mp4 diff --git a/scripts/changing_resolution/run_wan_t2v_changing_resolution.sh b/scripts/changing_resolution/run_wan_t2v_changing_resolution.sh new file mode 100644 index 0000000..3e4881d --- /dev/null +++ b/scripts/changing_resolution/run_wan_t2v_changing_resolution.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/changing_resolution/wan_t2v_U.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_changing_resolution.mp4 diff --git a/scripts/dist_infer/run_wan22_moe_i2v_cfg.sh b/scripts/dist_infer/run_wan22_moe_i2v_cfg.sh new file mode 100644 index 0000000..3369b95 --- /dev/null +++ b/scripts/dist_infer/run_wan22_moe_i2v_cfg.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=2 -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_moe_i2v_cfg.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_i2v_parallel_cfg.mp4 diff --git a/scripts/dist_infer/run_wan22_moe_i2v_cfg_ulysses.sh b/scripts/dist_infer/run_wan22_moe_i2v_cfg_ulysses.sh new file mode 100644 index 0000000..ccee8f4 --- /dev/null +++ b/scripts/dist_infer/run_wan22_moe_i2v_cfg_ulysses.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_moe_i2v_cfg_ulysses.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_i2v_parallel_cfg_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_moe_i2v_ulysses.sh b/scripts/dist_infer/run_wan22_moe_i2v_ulysses.sh new file mode 100644 index 0000000..614c086 --- /dev/null +++ b/scripts/dist_infer/run_wan22_moe_i2v_ulysses.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=4 -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_moe_i2v_ulysses.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_i2v_parallel_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_moe_t2v_cfg.sh b/scripts/dist_infer/run_wan22_moe_t2v_cfg.sh new file mode 100644 index 0000000..b7e4f77 --- /dev/null +++ b/scripts/dist_infer/run_wan22_moe_t2v_cfg.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=2 -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_moe_t2v_cfg.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_t2v_parallel_cfg.mp4 diff --git a/scripts/dist_infer/run_wan22_moe_t2v_cfg_ulysses.sh b/scripts/dist_infer/run_wan22_moe_t2v_cfg_ulysses.sh new file mode 100644 index 0000000..dd6b01c --- /dev/null +++ b/scripts/dist_infer/run_wan22_moe_t2v_cfg_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_moe_t2v_cfg_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_t2v_parallel_cfg_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_moe_t2v_ulysses.sh b/scripts/dist_infer/run_wan22_moe_t2v_ulysses.sh new file mode 100644 index 0000000..90cbec0 --- /dev/null +++ b/scripts/dist_infer/run_wan22_moe_t2v_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=4 -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_moe_t2v_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_t2v_parallel_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_ti2v_i2v_cfg.sh b/scripts/dist_infer/run_wan22_ti2v_i2v_cfg.sh new file mode 100644 index 0000000..0f640eb --- /dev/null +++ b/scripts/dist_infer/run_wan22_ti2v_i2v_cfg.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=2 -m lightx2v.infer \ +--model_cls wan2.2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_ti2v_i2v_cfg.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_i2v_parallel_cfg.mp4 diff --git a/scripts/dist_infer/run_wan22_ti2v_i2v_cfg_ulysses.sh b/scripts/dist_infer/run_wan22_ti2v_i2v_cfg_ulysses.sh new file mode 100644 index 0000000..3111ada --- /dev/null +++ b/scripts/dist_infer/run_wan22_ti2v_i2v_cfg_ulysses.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_ti2v_i2v_cfg_ulysses.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_i2v_parallel_cfg_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_ti2v_i2v_ulysses.sh b/scripts/dist_infer/run_wan22_ti2v_i2v_ulysses.sh new file mode 100644 index 0000000..ef4ebc8 --- /dev/null +++ b/scripts/dist_infer/run_wan22_ti2v_i2v_ulysses.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=4 -m lightx2v.infer \ +--model_cls wan2.2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_ti2v_i2v_ulysses.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_i2v_parallel_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_ti2v_t2v_cfg.sh b/scripts/dist_infer/run_wan22_ti2v_t2v_cfg.sh new file mode 100644 index 0000000..0e6d3d2 --- /dev/null +++ b/scripts/dist_infer/run_wan22_ti2v_t2v_cfg.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=2 -m lightx2v.infer \ +--model_cls wan2.2 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_ti2v_t2v_cfg.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_t2v_parallel_cfg.mp4 diff --git a/scripts/dist_infer/run_wan22_ti2v_t2v_cfg_ulysses.sh b/scripts/dist_infer/run_wan22_ti2v_t2v_cfg_ulysses.sh new file mode 100644 index 0000000..d1aa07b --- /dev/null +++ b/scripts/dist_infer/run_wan22_ti2v_t2v_cfg_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.2 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_ti2v_t2v_cfg_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_t2v_parallel_cfg_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan22_ti2v_t2v_ulysses.sh b/scripts/dist_infer/run_wan22_ti2v_t2v_ulysses.sh new file mode 100644 index 0000000..82599c8 --- /dev/null +++ b/scripts/dist_infer/run_wan22_ti2v_t2v_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=4 -m lightx2v.infer \ +--model_cls wan2.2 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan22_ti2v_t2v_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_t2v_parallel_ulysses.mp4 diff --git a/scripts/dist_infer/run_wan_i2v_dist_cfg_ulysses.sh b/scripts/dist_infer/run_wan_i2v_dist_cfg_ulysses.sh new file mode 100644 index 0000000..843b120 --- /dev/null +++ b/scripts/dist_infer/run_wan_i2v_dist_cfg_ulysses.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan_i2v_dist_cfg_ulysses.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/scripts/dist_infer/run_wan_i2v_dist_ulysses.sh b/scripts/dist_infer/run_wan_i2v_dist_ulysses.sh new file mode 100644 index 0000000..b6eed52 --- /dev/null +++ b/scripts/dist_infer/run_wan_i2v_dist_ulysses.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=4 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan_i2v_dist_ulysses.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/scripts/dist_infer/run_wan_t2v_dist_cfg.sh b/scripts/dist_infer/run_wan_t2v_dist_cfg.sh new file mode 100644 index 0000000..a38f57f --- /dev/null +++ b/scripts/dist_infer/run_wan_t2v_dist_cfg.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=2 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan_t2v_dist_cfg.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/scripts/dist_infer/run_wan_t2v_dist_cfg_ulysses.sh b/scripts/dist_infer/run_wan_t2v_dist_cfg_ulysses.sh new file mode 100644 index 0000000..f849940 --- /dev/null +++ b/scripts/dist_infer/run_wan_t2v_dist_cfg_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan_t2v_dist_cfg_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/scripts/dist_infer/run_wan_t2v_dist_ulysses.sh b/scripts/dist_infer/run_wan_t2v_dist_ulysses.sh new file mode 100644 index 0000000..898b7f7 --- /dev/null +++ b/scripts/dist_infer/run_wan_t2v_dist_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=4 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan_t2v_dist_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/scripts/hunyuan_video_15/README.md b/scripts/hunyuan_video_15/README.md new file mode 100644 index 0000000..108b5d6 --- /dev/null +++ b/scripts/hunyuan_video_15/README.md @@ -0,0 +1,103 @@ +# HunyuanVideo1.5 + +## Quick Start + +1. Prepare docker environment: + +```bash +docker pull lightx2v/lightx2v:25111101-cu128 +``` + +2. Run the container: +```bash +docker run --gpus all -itd --ipc=host --name [container_name] -v [mount_settings] --entrypoint /bin/bash [image_id] +``` + +3. Prepare the models + +Please follow the instructions in [HunyuanVideo1.5 Github](https://github.com/Tencent-Hunyuan/HunyuanVideo-1.5/blob/main/checkpoints-download.md) to download and place the model files. + +4. Running + +Running using bash script +```bash +# enter the docker container + +git clone https://github.com/ModelTC/LightX2V.git +cd LightX2V/scripts/hunyuan_video_15 + +# set LightX2V path and model path in the script +bash run_hy15_t2v_480p.sh +``` + +Running using Python code +```python +""" +HunyuanVideo-1.5 text-to-video generation example. +This example demonstrates how to use LightX2V with HunyuanVideo-1.5 model for T2V generation. +""" + +from lightx2v import LightX2VPipeline + +# Initialize pipeline for HunyuanVideo-1.5 +pipe = LightX2VPipeline( + model_path="/path/to/ckpts/hunyuanvideo-1.5/", + model_cls="hunyuan_video_1.5", + transformer_model_name="720p_t2v", + task="t2v", +) + +# Alternative: create generator from config JSON file +# pipe.create_generator(config_json="configs/hunyuan_video_15/hunyuan_video_t2v_720p.json") + +# Enable offloading to significantly reduce VRAM usage with minimal speed impact +# Suitable for RTX 30/40/50 consumer GPUs +pipe.enable_offload( + cpu_offload=True, + offload_granularity="block", # For HunyuanVideo-1.5, only "block" is supported + text_encoder_offload=True, + image_encoder_offload=False, + vae_offload=False, +) + +# Use lighttae +pipe.enable_lightvae( + use_tae=True, + tae_path="/path/to/lighttaehy1_5.safetensors", + use_lightvae=False, + vae_path=None, +) + +# Create generator with specified parameters +pipe.create_generator( + attn_mode="sage_attn2", + infer_steps=50, + num_frames=121, + guidance_scale=6.0, + sample_shift=9.0, + aspect_ratio="16:9", + fps=24, +) + +# Generation parameters +seed = 123 +prompt = "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." +negative_prompt = "" +save_result_path = "/path/to/save_results/output.mp4" + +# Generate video +pipe.generate( + seed=seed, + prompt=prompt, + negative_prompt=negative_prompt, + save_result_path=save_result_path, +) +``` + +5. Check results + +You can find the generated video files in the `save_results` folder. + +6. Modify detailed configurations + +You can refer to the config file pointed to by `--config_json` in the script and modify its parameters as needed. diff --git a/scripts/hunyuan_video_15/run_hy15_i2v_480p.sh b/scripts/hunyuan_video_15/run_hy15_i2v_480p.sh new file mode 100644 index 0000000..add987c --- /dev/null +++ b/scripts/hunyuan_video_15/run_hy15_i2v_480p.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--seed 123 \ +--model_cls hunyuan_video_1.5 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/hunyuan_video_i2v_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_hunyuan_video_15_i2v.mp4 diff --git a/scripts/hunyuan_video_15/run_hy15_i2v_480p_vsr.sh b/scripts/hunyuan_video_15/run_hy15_i2v_480p_vsr.sh new file mode 100644 index 0000000..eaeb1c9 --- /dev/null +++ b/scripts/hunyuan_video_15/run_hy15_i2v_480p_vsr.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--seed 123 \ +--model_cls hunyuan_video_1.5 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/vsr/hy15_i2v_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_hunyuan_video_15_i2v.mp4 diff --git a/scripts/hunyuan_video_15/run_hy15_i2v_720p.sh b/scripts/hunyuan_video_15/run_hy15_i2v_720p.sh new file mode 100644 index 0000000..e398174 --- /dev/null +++ b/scripts/hunyuan_video_15/run_hy15_i2v_720p.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--seed 123 \ +--model_cls hunyuan_video_1.5 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/hunyuan_video_i2v_720p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_hunyuan_video_15_i2v.mp4 diff --git a/scripts/hunyuan_video_15/run_hy15_t2v_480p.sh b/scripts/hunyuan_video_15/run_hy15_t2v_480p.sh new file mode 100644 index 0000000..c533b69 --- /dev/null +++ b/scripts/hunyuan_video_15/run_hy15_t2v_480p.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--seed 123 \ +--model_cls hunyuan_video_1.5 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/hunyuan_video_t2v_480p.json \ +--prompt "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." \ +--negative_prompt "" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_hunyuan_video_15_t2v.mp4 diff --git a/scripts/hunyuan_video_15/run_hy15_t2v_480p_distill.sh b/scripts/hunyuan_video_15/run_hy15_t2v_480p_distill.sh new file mode 100644 index 0000000..060978a --- /dev/null +++ b/scripts/hunyuan_video_15/run_hy15_t2v_480p_distill.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--seed 123 \ +--model_cls hunyuan_video_1.5_distill \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/hunyuan_video_t2v_480p_distill.json \ +--prompt "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." \ +--negative_prompt "" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_hunyuan_video_15_t2v_distill.mp4 diff --git a/scripts/hunyuan_video_15/run_hy15_t2v_720p.sh b/scripts/hunyuan_video_15/run_hy15_t2v_720p.sh new file mode 100644 index 0000000..16902ba --- /dev/null +++ b/scripts/hunyuan_video_15/run_hy15_t2v_720p.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=2 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--seed 123 \ +--model_cls hunyuan_video_1.5 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/hunyuan_video_t2v_720p.json \ +--prompt "A close-up shot captures a scene on a polished, light-colored granite kitchen counter, illuminated by soft natural light from an unseen window. Initially, the frame focuses on a tall, clear glass filled with golden, translucent apple juice standing next to a single, shiny red apple with a green leaf still attached to its stem. The camera moves horizontally to the right. As the shot progresses, a white ceramic plate smoothly enters the frame, revealing a fresh arrangement of about seven or eight more apples, a mix of vibrant reds and greens, piled neatly upon it. A shallow depth of field keeps the focus sharply on the fruit and glass, while the kitchen backsplash in the background remains softly blurred. The scene is in a realistic style." \ +--negative_prompt "" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_hunyuan_video_15_t2v.mp4 diff --git a/scripts/matrix_game2/run_matrix_game2_gta_drive.sh b/scripts/matrix_game2/run_matrix_game2_gta_drive.sh new file mode 100644 index 0000000..43c41ff --- /dev/null +++ b/scripts/matrix_game2/run_matrix_game2_gta_drive.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=path to Lightx2v +model_path=path to Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_gta_drive.json \ +--prompt '' \ +--image_path gta_drive/0003.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_gta_drive.mp4 \ +--seed 42 diff --git a/scripts/matrix_game2/run_matrix_game2_gta_drive_streaming.sh b/scripts/matrix_game2/run_matrix_game2_gta_drive_streaming.sh new file mode 100644 index 0000000..5b5b130 --- /dev/null +++ b/scripts/matrix_game2/run_matrix_game2_gta_drive_streaming.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/data/nvme2/wushuo/LightX2V +model_path=/data/nvme2/wushuo/hf_models/Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_gta_drive_streaming.json \ +--prompt '' \ +--image_path gta_drive/0003.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_gta_drive_streaming.mp4 \ +--seed 42 diff --git a/scripts/matrix_game2/run_matrix_game2_templerun.sh b/scripts/matrix_game2/run_matrix_game2_templerun.sh new file mode 100644 index 0000000..0768aa9 --- /dev/null +++ b/scripts/matrix_game2/run_matrix_game2_templerun.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=path to Lightx2v +model_path=path to Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_templerun.json \ +--prompt '' \ +--image_path templerun/0005.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_templerun.mp4 \ +--seed 42 diff --git a/scripts/matrix_game2/run_matrix_game2_templerun_streaming.sh b/scripts/matrix_game2/run_matrix_game2_templerun_streaming.sh new file mode 100644 index 0000000..6765ce4 --- /dev/null +++ b/scripts/matrix_game2/run_matrix_game2_templerun_streaming.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=path to Lightx2v +model_path=path to Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_templerun_streaming.json \ +--prompt '' \ +--image_path templerun/0005.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_templerun_streaming.mp4 \ +--seed 42 diff --git a/scripts/matrix_game2/run_matrix_game2_universal.sh b/scripts/matrix_game2/run_matrix_game2_universal.sh new file mode 100644 index 0000000..fb464c4 --- /dev/null +++ b/scripts/matrix_game2/run_matrix_game2_universal.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=path to Lightx2v +model_path=path to Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES= + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_universal.json \ +--prompt '' \ +--image_path universal/0007.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_universal.mp4 \ +--seed 42 diff --git a/scripts/matrix_game2/run_matrix_game2_universal_streaming.sh b/scripts/matrix_game2/run_matrix_game2_universal_streaming.sh new file mode 100644 index 0000000..30f9d0e --- /dev/null +++ b/scripts/matrix_game2/run_matrix_game2_universal_streaming.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=path to Lightx2v +model_path=path to Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_universal_streaming.json \ +--prompt '' \ +--image_path universal/0007.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_universal_streaming.mp4 \ +--seed 42 diff --git a/scripts/quantization/gguf/run_wan_i2v_gguf_q4_k.sh b/scripts/quantization/gguf/run_wan_i2v_gguf_q4_k.sh new file mode 100644 index 0000000..b079908 --- /dev/null +++ b/scripts/quantization/gguf/run_wan_i2v_gguf_q4_k.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/quantization/gguf/wan_i2v_q4_k.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/scripts/quantization/readme.md b/scripts/quantization/readme.md new file mode 100644 index 0000000..2835da0 --- /dev/null +++ b/scripts/quantization/readme.md @@ -0,0 +1,11 @@ +# Model Quantization + +The config files for model quantization are available [here](https://github.com/ModelTC/lightx2v/tree/main/configs/quantization) + +By specifying --config_json to the specific config file, you can test quantization inference. + +Please refer our model quantization doc: + +[English doc: Model Quantization](https://lightx2v-en.readthedocs.io/en/latest/method_tutorials/quantization.html) + +[中文文档: 模型量化](https://lightx2v-zhcn.readthedocs.io/zh-cn/latest/method_tutorials/quantization.html) diff --git a/scripts/quantization/run_wan_i2v_quantization.sh b/scripts/quantization/run_wan_i2v_quantization.sh new file mode 100644 index 0000000..33a8138 --- /dev/null +++ b/scripts/quantization/run_wan_i2v_quantization.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/quantization/wan_i2v.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/scripts/qwen_image/qwen_image_i2i.sh b/scripts/qwen_image/qwen_image_i2i.sh new file mode 100644 index 0000000..2893150 --- /dev/null +++ b/scripts/qwen_image/qwen_image_i2i.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ + --model_cls qwen_image \ + --task i2i \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/qwen_image/qwen_image_i2i.json \ + --prompt "turn the style of the photo to vintage comic book" \ + --negative_prompt " " \ + --image_path pie.png \ + --save_result_path ${lightx2v_path}/save_results/qwen_image_i2i.png \ + --seed 0 diff --git a/scripts/qwen_image/qwen_image_i2i_2509.sh b/scripts/qwen_image/qwen_image_i2i_2509.sh new file mode 100644 index 0000000..f127d2d --- /dev/null +++ b/scripts/qwen_image/qwen_image_i2i_2509.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ + --model_cls qwen_image \ + --task i2i \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/qwen_image/qwen_image_i2i_2509.json \ + --prompt "Have the two characters swap clothes and stand in front of the castle." \ + --negative_prompt " " \ + --image_path 1.jpeg,2.jpeg \ + --save_result_path ${lightx2v_path}/save_results/qwen_image_i2i_2509.png \ + --seed 0 diff --git a/scripts/qwen_image/qwen_image_i2i_2509_block.sh b/scripts/qwen_image/qwen_image_i2i_2509_block.sh new file mode 100644 index 0000000..e437d77 --- /dev/null +++ b/scripts/qwen_image/qwen_image_i2i_2509_block.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES= + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ + --model_cls qwen_image \ + --task i2i \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/offload/block/qwen_image_i2i_2509_block.json \ + --prompt "Have the two characters swap clothes and stand in front of the castle." \ + --negative_prompt " " \ + --image_path 1.jpeg,2.jpeg \ + --save_result_path ${lightx2v_path}/save_results/qwen_image_i2i_2509.png \ + --seed 0 diff --git a/scripts/qwen_image/qwen_image_i2i_block.sh b/scripts/qwen_image/qwen_image_i2i_block.sh new file mode 100644 index 0000000..6b1c675 --- /dev/null +++ b/scripts/qwen_image/qwen_image_i2i_block.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ + --model_cls qwen_image \ + --task i2i \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/offload/block/qwen_image_i2i_block.json \ + --prompt "turn the style of the photo to vintage comic book" \ + --negative_prompt " " \ + --image_path pie.png \ + --save_result_path ${lightx2v_path}/save_results/qwen_image_i2i.png \ + --seed 0 diff --git a/scripts/qwen_image/qwen_image_i2i_lora.sh b/scripts/qwen_image/qwen_image_i2i_lora.sh new file mode 100644 index 0000000..e5312b0 --- /dev/null +++ b/scripts/qwen_image/qwen_image_i2i_lora.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ + --model_cls qwen_image \ + --task i2i \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/qwen_image/qwen_image_i2i_lora.json \ + --prompt "Change the person to a standing position, bending over to hold the dog's front paws." \ + --negative_prompt " " \ + --image_path qwen_image_edit/qwen_edit1.webp \ + --save_result_path ${lightx2v_path}/save_results/qwen_image_i2i.png \ + --seed 0 diff --git a/scripts/qwen_image/qwen_image_t2i.sh b/scripts/qwen_image/qwen_image_t2i.sh new file mode 100644 index 0000000..cb0b75e --- /dev/null +++ b/scripts/qwen_image/qwen_image_t2i.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls qwen_image \ +--task t2i \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/qwen_image/qwen_image_t2i.json \ +--prompt 'A coffee shop entrance features a chalkboard sign reading "Qwen Coffee 😊 $2 per cup," with a neon light beside it displaying "通义千问". Next to it hangs a poster showing a beautiful Chinese woman, and beneath the poster is written "π≈3.1415926-53589793-23846264-33832795-02384197". Ultra HD, 4K, cinematic composition, Ultra HD, 4K, cinematic composition.' \ +--negative_prompt " " \ +--save_result_path ${lightx2v_path}/save_results/qwen_image_t2i.png \ +--seed 42 diff --git a/scripts/qwen_image/qwen_image_t2i_block.sh b/scripts/qwen_image/qwen_image_t2i_block.sh new file mode 100644 index 0000000..15f6493 --- /dev/null +++ b/scripts/qwen_image/qwen_image_t2i_block.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls qwen_image \ +--task t2i \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/offload/block/qwen_image_t2i_block.json \ +--prompt 'A coffee shop entrance features a chalkboard sign reading "Qwen Coffee 😊 $2 per cup," with a neon light beside it displaying "通义千问". Next to it hangs a poster showing a beautiful Chinese woman, and beneath the poster is written "π≈3.1415926-53589793-23846264-33832795-02384197". Ultra HD, 4K, cinematic composition, Ultra HD, 4K, cinematic composition.' \ +--negative_prompt " " \ +--save_result_path ${lightx2v_path}/save_results/qwen_image_t2i.png \ +--seed 42 diff --git a/scripts/seko_talk/multi_person/01_base.sh b/scripts/seko_talk/multi_person/01_base.sh new file mode 100644 index 0000000..9f8e665 --- /dev/null +++ b/scripts/seko_talk/multi_person/01_base.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/multi_person/01_base.json \ +--prompt "The video features a man and a woman standing by a bench in the park, their expressions tense and voices raised as they argue. The man gestures with both hands, his arms swinging slightly as if to emphasize each heated word, while the woman stands with her hands on her waist, her brows furrowed in frustration. The background is a wide expanse of sunlit grass, the golden light contrasting with the sharp energy of their quarrel. Their voices seem to clash in the air, and the rhythm of their hand movements and body postures interweaves with the rising tension, creating a vivid scene of confrontation." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/multi_person/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/multi_person \ +--save_result_path ${lightx2v_path}/save_results/seko_talk_multi_person.mp4 diff --git a/scripts/seko_talk/multi_person/03_dist.sh b/scripts/seko_talk/multi_person/03_dist.sh new file mode 100644 index 0000000..faab432 --- /dev/null +++ b/scripts/seko_talk/multi_person/03_dist.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 4 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/multi_person/03_dist.json \ +--prompt "The video features a man and a woman standing by a bench in the park, their expressions tense and voices raised as they argue. The man gestures with both hands, his arms swinging slightly as if to emphasize each heated word, while the woman stands with her hands on her waist, her brows furrowed in frustration. The background is a wide expanse of sunlit grass, the golden light contrasting with the sharp energy of their quarrel. Their voices seem to clash in the air, and the rhythm of their hand movements and body postures interweaves with the rising tension, creating a vivid scene of confrontation." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/multi_person/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/multi_person \ +--save_result_path ${lightx2v_path}/save_results/seko_talk_multi_person_dist.mp4 diff --git a/scripts/seko_talk/run_seko_talk_01_base.sh b/scripts/seko_talk/run_seko_talk_01_base.sh new file mode 100644 index 0000000..de3970e --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_01_base.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_01_base.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_02_fp8.sh b/scripts/seko_talk/run_seko_talk_02_fp8.sh new file mode 100644 index 0000000..dc32d3a --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_02_fp8.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_02_fp8.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_03_dist.sh b/scripts/seko_talk/run_seko_talk_03_dist.sh new file mode 100644 index 0000000..b4e8c6e --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_03_dist.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_03_dist.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_04_fp8_dist.sh b/scripts/seko_talk/run_seko_talk_04_fp8_dist.sh new file mode 100644 index 0000000..69a768b --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_04_fp8_dist.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_04_fp8_dist.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_05_offload_fp8_4090.sh b/scripts/seko_talk/run_seko_talk_05_offload_fp8_4090.sh new file mode 100644 index 0000000..6a2a1cc --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_05_offload_fp8_4090.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/LightX2V +model_path=/path/to/SekoTalk-Distill-fp8/ + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_05_offload_fp8_4090.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_06_offload_fp8_H100.sh b/scripts/seko_talk/run_seko_talk_06_offload_fp8_H100.sh new file mode 100644 index 0000000..7f46fa6 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_06_offload_fp8_H100.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/LightX2V +model_path=/path/to/SekoTalk-Distill-fp8/ + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_06_offload_fp8_H100.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_07_dist_offload.sh b/scripts/seko_talk/run_seko_talk_07_dist_offload.sh new file mode 100644 index 0000000..a1d7c59 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_07_dist_offload.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 4 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_07_dist_offload.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_08_5B_base.sh b/scripts/seko_talk/run_seko_talk_08_5B_base.sh new file mode 100644 index 0000000..2f34860 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_08_5B_base.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-5B + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_08_5B_base.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_09_base_fixed_min_area.sh b/scripts/seko_talk/run_seko_talk_09_base_fixed_min_area.sh new file mode 100644 index 0000000..36616d0 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_09_base_fixed_min_area.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_09_base_fixed_min_area.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_10_fp8_dist_fixed_min_area.sh b/scripts/seko_talk/run_seko_talk_10_fp8_dist_fixed_min_area.sh new file mode 100644 index 0000000..48829fe --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_10_fp8_dist_fixed_min_area.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 4 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_10_fp8_dist_fixed_min_area.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_11_fp8_dist_fixed_shape.sh b/scripts/seko_talk/run_seko_talk_11_fp8_dist_fixed_shape.sh new file mode 100644 index 0000000..252d1e9 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_11_fp8_dist_fixed_shape.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 4 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_11_fp8_dist_fixed_shape.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.sh b/scripts/seko_talk/run_seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.sh new file mode 100644 index 0000000..fcf61b1 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_12_fp8_dist_fixed_shape_8gpus_1s.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.sh b/scripts/seko_talk/run_seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.sh new file mode 100644 index 0000000..e2c7be6 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_13_fp8_dist_bucket_shape_8gpus_5s_realtime.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.sh b/scripts/seko_talk/run_seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.sh new file mode 100644 index 0000000..115bb70 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_14_fp8_dist_bucket_shape_8gpus_1s_realtime.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_15_base_compile.sh b/scripts/seko_talk/run_seko_talk_15_base_compile.sh new file mode 100644 index 0000000..4c2210a --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_15_base_compile.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_15_base_compile.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_16_fp8_dist_compile.sh b/scripts/seko_talk/run_seko_talk_16_fp8_dist_compile.sh new file mode 100644 index 0000000..b7d662c --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_16_fp8_dist_compile.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_16_fp8_dist_compile.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_17_vsr.sh b/scripts/seko_talk/run_seko_talk_17_vsr.sh new file mode 100644 index 0000000..9192253 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_17_vsr.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path="" +model_path="" + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_17_base_vsr.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_18_5090_base.sh b/scripts/seko_talk/run_seko_talk_18_5090_base.sh new file mode 100644 index 0000000..d3a9bde --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_18_5090_base.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/LightX2V +model_path=/path/to/SekoTalk-Distill/ + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/5090/seko_talk_5090_bf16.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_19_A800_int8_dist.sh b/scripts/seko_talk/run_seko_talk_19_A800_int8_dist.sh new file mode 100644 index 0000000..6a36475 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_19_A800_int8_dist.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-int8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/A800/seko_talk_A800_int8_dist_8gpu.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_20_A800_int8.sh b/scripts/seko_talk/run_seko_talk_20_A800_int8.sh new file mode 100644 index 0000000..c52a18c --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_20_A800_int8.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-int8 + + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/A800/seko_talk_A800_int8.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_21_5090_int8.sh b/scripts/seko_talk/run_seko_talk_21_5090_int8.sh new file mode 100644 index 0000000..7b06a1f --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_21_5090_int8.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-int8 + + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/5090/seko_talk_5090_int8.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_21_5090_int8_dist.sh b/scripts/seko_talk/run_seko_talk_21_5090_int8_dist.sh new file mode 100644 index 0000000..e0c6c7d --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_21_5090_int8_dist.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-int8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/5090/seko_talk_5090_int8_8gpu.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_22_nbhd_attn.sh b/scripts/seko_talk/run_seko_talk_22_nbhd_attn.sh new file mode 100644 index 0000000..fef9ba5 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_22_nbhd_attn.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_22_nbhd_attn.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_23_fp8_dist_nbhd_attn.sh b/scripts/seko_talk/run_seko_talk_23_fp8_dist_nbhd_attn.sh new file mode 100644 index 0000000..e7a32a4 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_23_fp8_dist_nbhd_attn.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_23_fp8_dist_nbhd_attn.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_24_fp8_dist_compile_nbhd_attn.sh b/scripts/seko_talk/run_seko_talk_24_fp8_dist_compile_nbhd_attn.sh new file mode 100644 index 0000000..de447fa --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_24_fp8_dist_compile_nbhd_attn.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-fp8 + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_24_fp8_dist_compile_nbhd_attn.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_25_mlu_bf16.sh b/scripts/seko_talk/run_seko_talk_25_mlu_bf16.sh new file mode 100644 index 0000000..4005fa4 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_25_mlu_bf16.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export PLATFORM=mlu +export MLU_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/mlu/seko_talk_bf16.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_26_mlu_int8.sh b/scripts/seko_talk/run_seko_talk_26_mlu_int8.sh new file mode 100644 index 0000000..205942e --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_26_mlu_int8.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-int8 + +export PLATFORM=mlu +export MLU_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/mlu/seko_talk_int8.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_27_mlu_int8_dist.sh b/scripts/seko_talk/run_seko_talk_27_mlu_int8_dist.sh new file mode 100644 index 0000000..935bf48 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_27_mlu_int8_dist.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill-int8 + +export PLATFORM=mlu +export MLU_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +torchrun --nproc-per-node 8 -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/mlu/seko_talk_int8_dist.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/seko_talk/run_seko_talk_28_f2v.sh b/scripts/seko_talk/run_seko_talk_28_f2v.sh new file mode 100644 index 0000000..50e04a8 --- /dev/null +++ b/scripts/seko_talk/run_seko_talk_28_f2v.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_28_f2v.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/scripts/self_forcing/run_wan_t2v_sf.sh b/scripts/self_forcing/run_wan_t2v_sf.sh new file mode 100644 index 0000000..bd8c4e9 --- /dev/null +++ b/scripts/self_forcing/run_wan_t2v_sf.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= # path to Wan2.1-T2V-1.3B +sf_model_path= # path to gdhe17/Self-Forcing + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf \ +--task t2v \ +--model_path $model_path \ +--sf_model_path $sf_model_path \ +--config_json ${lightx2v_path}/configs/self_forcing/wan_t2v_sf.json \ +--prompt 'A stylish woman strolls down a bustling Tokyo street, the warm glow of neon lights and animated city signs casting vibrant reflections. She wears a sleek black leather jacket paired with a flowing red dress and black boots, her black purse slung over her shoulder. Sunglasses perched on her nose and a bold red lipstick add to her confident, casual demeanor. The street is damp and reflective, creating a mirror-like effect that enhances the colorful lights and shadows. Pedestrians move about, adding to the lively atmosphere. The scene is captured in a dynamic medium shot with the woman walking slightly to one side, highlighting her graceful strides.' \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_sf.mp4 diff --git a/scripts/server/check_status.py b/scripts/server/check_status.py new file mode 100644 index 0000000..ef2166e --- /dev/null +++ b/scripts/server/check_status.py @@ -0,0 +1,13 @@ +import requests +from loguru import logger + +response = requests.get("http://localhost:8000/v1/service/status") +logger.info(response.json()) + + +response = requests.get("http://localhost:8000/v1/tasks/") +logger.info(response.json()) + + +response = requests.get("http://localhost:8000/v1/tasks/test_task_001/status") +logger.info(response.json()) diff --git a/scripts/server/post.py b/scripts/server/post.py new file mode 100644 index 0000000..0abe32c --- /dev/null +++ b/scripts/server/post.py @@ -0,0 +1,17 @@ +import requests +from loguru import logger + +if __name__ == "__main__": + url = "http://localhost:8000/v1/tasks/" + + message = { + "prompt": "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage.", + "negative_prompt": "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + "image_path": "", + } + + logger.info(f"message: {message}") + + response = requests.post(url, json=message) + + logger.info(f"response: {response.json()}") diff --git a/scripts/server/post_enhancer.py b/scripts/server/post_enhancer.py new file mode 100644 index 0000000..49a350f --- /dev/null +++ b/scripts/server/post_enhancer.py @@ -0,0 +1,17 @@ +import requests +from loguru import logger + +url = "http://localhost:8000/v1/tasks/" + +message = { + "prompt": "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage.", + "negative_prompt": "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + "image_path": "", + "use_prompt_enhancer": True, +} + +logger.info(f"message: {message}") + +response = requests.post(url, json=message) + +logger.info(f"response: {response.json()}") diff --git a/scripts/server/post_i2v.py b/scripts/server/post_i2v.py new file mode 100644 index 0000000..3500f2e --- /dev/null +++ b/scripts/server/post_i2v.py @@ -0,0 +1,27 @@ +import base64 + +import requests +from loguru import logger + + +def image_to_base64(image_path): + """Convert an image file to base64 string""" + with open(image_path, "rb") as f: + image_data = f.read() + return base64.b64encode(image_data).decode("utf-8") + + +if __name__ == "__main__": + url = "http://localhost:8000/v1/tasks/" + + message = { + "prompt": "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside.", + "negative_prompt": "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + "image_path": image_to_base64("assets/inputs/imgs/img_0.jpg"), # 图片地址 + } + + logger.info(f"message: {message}") + + response = requests.post(url, json=message) + + logger.info(f"response: {response.json()}") diff --git a/scripts/server/post_multi_servers.py b/scripts/server/post_multi_servers.py new file mode 100644 index 0000000..eb18dbe --- /dev/null +++ b/scripts/server/post_multi_servers.py @@ -0,0 +1,148 @@ +import base64 +import os +import threading +import time +from typing import Any + +import requests +from loguru import logger +from tqdm import tqdm + + +def image_to_base64(image_path): + """Convert an image file to base64 string""" + with open(image_path, "rb") as f: + image_data = f.read() + return base64.b64encode(image_data).decode("utf-8") + + +def process_image_path(image_path) -> Any | str: + """Process image_path: convert to base64 if local path, keep unchanged if HTTP link""" + if not image_path: + return image_path + + if image_path.startswith(("http://", "https://")): + return image_path + + if os.path.exists(image_path): + return image_to_base64(image_path) + else: + logger.warning(f"Image path not found: {image_path}") + return image_path + + +def send_and_monitor_task(url, message, task_index, complete_bar, complete_lock): + """Send task to server and monitor until completion""" + try: + if "image_path" in message and message["image_path"]: + message["image_path"] = process_image_path(message["image_path"]) + + response = requests.post(f"{url}/v1/tasks/", json=message) + response_data = response.json() + task_id = response_data.get("task_id") + + if not task_id: + logger.error(f"No task_id received from {url}") + return False + + # Step 2: Monitor task status until completion + while True: + try: + status_response = requests.get(f"{url}/v1/tasks/{task_id}/status") + status_data = status_response.json() + task_status = status_data.get("status") + + if task_status == "completed": + # Update completion bar safely + if complete_bar and complete_lock: + with complete_lock: + complete_bar.update(1) + return True + elif task_status == "failed": + logger.error(f"Task {task_index + 1} (task_id: {task_id}) failed") + if complete_bar and complete_lock: + with complete_lock: + complete_bar.update(1) # Still update progress even if failed + return False + else: + time.sleep(0.5) + + except Exception as e: + logger.error(f"Failed to check status for task_id {task_id}: {e}") + time.sleep(0.5) + + except Exception as e: + logger.error(f"Failed to send task to {url}: {e}") + return False + + +def get_available_urls(urls): + """Check which URLs are available and return the list""" + available_urls = [] + for url in urls: + try: + _ = requests.get(f"{url}/v1/service/status").json() + available_urls.append(url) + except Exception as e: + continue + + if not available_urls: + logger.error("No available urls.") + return None + + logger.info(f"available_urls: {available_urls}") + return available_urls + + +def find_idle_server(available_urls): + """Find an idle server from available URLs""" + while True: + for url in available_urls: + try: + response = requests.get(f"{url}/v1/service/status").json() + if response["service_status"] == "idle": + return url + except Exception as e: + continue + time.sleep(3) + + +def process_tasks_async(messages, available_urls, show_progress=True): + """Process a list of tasks asynchronously across multiple servers""" + if not available_urls: + logger.error("No available servers to process tasks.") + return False + + active_threads = [] + + logger.info(f"Sending {len(messages)} tasks to available servers...") + + complete_bar = None + complete_lock = None + if show_progress: + complete_bar = tqdm(total=len(messages), desc="Completing tasks") + complete_lock = threading.Lock() # Thread-safe updates to completion bar + + for idx, message in enumerate(messages): + # Find an idle server + server_url = find_idle_server(available_urls) + + # Create and start thread for sending and monitoring task + thread = threading.Thread(target=send_and_monitor_task, args=(server_url, message, idx, complete_bar, complete_lock)) + thread.daemon = False + thread.start() + active_threads.append(thread) + + # Small delay to let thread start + time.sleep(0.5) + + # Wait for all threads to complete + for thread in active_threads: + thread.join() + + # Close completion bar + if complete_bar: + complete_bar.close() + + logger.info("All tasks processing completed!") + return True diff --git a/scripts/server/post_multi_servers_i2v.py b/scripts/server/post_multi_servers_i2v.py new file mode 100644 index 0000000..7d13026 --- /dev/null +++ b/scripts/server/post_multi_servers_i2v.py @@ -0,0 +1,40 @@ +import base64 + +from loguru import logger +from post_multi_servers import get_available_urls, process_tasks_async + + +def image_to_base64(image_path): + """Convert an image file to base64 string""" + with open(image_path, "rb") as f: + image_data = f.read() + return base64.b64encode(image_data).decode("utf-8") + + +if __name__ == "__main__": + urls = [f"http://localhost:{port}" for port in range(8000, 8008)] + img_prompts = { + "assets/inputs/imgs/img_0.jpg": "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside.", + "assets/inputs/imgs/img_2.jpg": "A close-up cinematic view of a person cooking in a warm,sunlit kitchen, using a wooden spatula to stir-fry a colorful mix of freshvegetables—carrots, broccoli, and bell peppers—in a black frying pan on amodern induction stove. The scene captures the glistening texture of thevegetables, steam gently rising, and subtle reflections on the stove surface.In the background, soft-focus jars, fruits, and a window with natural daylightcreate a cozy atmosphere. The hand motions are smooth and rhythmic, with a realisticsense of motion blur and lighting.", + } + negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + + messages = [] + for i, (image_path, prompt) in enumerate(img_prompts.items()): + messages.append({"seed": 42, "prompt": prompt, "negative_prompt": negative_prompt, "image_path": image_path, "save_result_path": f"./output_lightx2v_wan_i2v_{i + 1}.mp4"}) + + logger.info(f"urls: {urls}") + + # Get available servers + available_urls = get_available_urls(urls) + if not available_urls: + exit(1) + + # Process tasks asynchronously + success = process_tasks_async(messages, available_urls, show_progress=True) + + if success: + logger.info("All tasks completed successfully!") + else: + logger.error("Some tasks failed.") + exit(1) diff --git a/scripts/server/post_multi_servers_t2v.py b/scripts/server/post_multi_servers_t2v.py new file mode 100644 index 0000000..4f9f1e5 --- /dev/null +++ b/scripts/server/post_multi_servers_t2v.py @@ -0,0 +1,166 @@ +import argparse +from pathlib import Path + +from loguru import logger +from post_multi_servers import get_available_urls, process_tasks_async + + +def load_prompts_from_folder(folder_path): + """Load prompts from all files in the specified folder. + + Returns: + tuple: (prompts, filenames) where prompts is a list of prompt strings + and filenames is a list of corresponding filenames + """ + prompts = [] + filenames = [] + folder = Path(folder_path) + + if not folder.exists() or not folder.is_dir(): + logger.error(f"Prompt folder does not exist or is not a directory: {folder_path}") + return prompts, filenames + + # Get all files in the folder and sort them + files = sorted(folder.glob("*")) + files = [f for f in files if f.is_file()] + + for file_path in files: + try: + with open(file_path, "r", encoding="utf-8") as f: + content = f.read().strip() + if content: # Only add non-empty prompts + prompts.append(content) + filenames.append(file_path.name) + # logger.info(f"Loaded prompt from {file_path.name}") + except Exception as e: + logger.warning(f"Failed to read file {file_path}: {e}") + + return prompts, filenames + + +def load_prompts_from_file(file_path): + """Load prompts from a file, one prompt per line. + + Returns: + list: prompts, where each element is a prompt string + """ + prompts = [] + file = Path(file_path) + + if not file.exists() or not file.is_file(): + logger.error(f"Prompt file does not exist or is not a file: {file_path}") + return prompts + + try: + with open(file, "r", encoding="utf-8") as f: + for line in f: + prompt = line.strip() + if prompt: # Only add non-empty prompts + prompts.append(prompt) + except Exception as e: + logger.error(f"Failed to read prompt file {file_path}: {e}") + + return prompts + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Post prompts to multiple T2V servers") + parser.add_argument("--prompt-folder", type=str, default=None, help="Folder containing prompt files. If not specified, use default prompts.") + parser.add_argument("--prompt-file", type=str, default=None, help="File containing prompts, one prompt per line. Cannot be used together with --prompt-folder.") + parser.add_argument("--save-folder", type=str, default="./", help="Folder to save output videos. Default is current directory.") + args = parser.parse_args() + + # Check that --prompt-folder and --prompt-file are not used together + if args.prompt_folder and args.prompt_file: + logger.error("Cannot use --prompt-folder and --prompt-file together. Please choose one.") + exit(1) + + # Generate URLs from IPs (each IP has 8 ports: 8000-8007) + ips = ["localhost"] + urls = [f"http://{ip}:{port}" for ip in ips for port in range(8000, 8008)] + # urls = ["http://localhost:8007"] + + logger.info(f"urls: {urls}") + + # Get available servers + available_urls = get_available_urls(urls) + if not available_urls: + exit(1) + + logger.info(f"Total {len(available_urls)} available servers.") + + # Load prompts from folder, file, or use default prompts + prompt_filenames = None + if args.prompt_folder: + logger.info(f"Loading prompts from folder: {args.prompt_folder}") + prompts, prompt_filenames = load_prompts_from_folder(args.prompt_folder) + if not prompts: + logger.error("No valid prompts loaded from folder.") + exit(1) + elif args.prompt_file: + logger.info(f"Loading prompts from file: {args.prompt_file}") + prompts = load_prompts_from_file(args.prompt_file) + if not prompts: + logger.error("No valid prompts loaded from file.") + exit(1) + else: + logger.info("Using default prompts") + prompts = [ + "A cat walks on the grass, realistic style.", + "A person is riding a bike. Realistic, Natural lighting, Casual.", + "A car turns a corner. Realistic, Natural lighting, Casual.", + "An astronaut is flying in space, Van Gogh style. Dark, Mysterious.", + "A beautiful coastal beach in spring, waves gently lapping on the sand, the camera movement is Zoom In. Realistic, Natural lighting, Peaceful.", + "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage.", + ] + + negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + + # Prepare save folder + save_folder = Path(args.save_folder) + save_folder.mkdir(parents=True, exist_ok=True) + + messages = [] + total_count = len(prompts) + skipped_count = 0 + + for i, prompt in enumerate(prompts): + # Generate output filename + if prompt_filenames: + # Use prompt filename, replace extension with .mp4 + filename = Path(prompt_filenames[i]).stem + ".mp4" + else: + # Use default naming + filename = f"output_lightx2v_wan_t2v_{i + 1}.mp4" + + save_path = save_folder / filename + + # Skip if file already exists (only when using prompt_filenames) + if prompt_filenames and save_path.exists(): + logger.info(f"Skipping {filename} - file already exists") + skipped_count += 1 + continue + + messages.append({"seed": 42, "prompt": prompt, "negative_prompt": negative_prompt, "image_path": "", "save_result_path": str(save_path)}) + + # Log statistics + to_process_count = len(messages) + logger.info("=" * 80) + logger.info("Task Statistics:") + logger.info(f" Total prompts: {total_count}") + logger.info(f" Skipped (already exists): {skipped_count}") + logger.info(f" To process: {to_process_count}") + logger.info("=" * 80) + + if to_process_count == 0: + logger.info("No tasks to process. All files already exist.") + exit(0) + + # Process tasks asynchronously + success = process_tasks_async(messages, available_urls, show_progress=True) + + if success: + logger.info("All tasks completed successfully!") + else: + logger.error("Some tasks failed.") + exit(1) diff --git a/scripts/server/post_vbench_i2v.py b/scripts/server/post_vbench_i2v.py new file mode 100644 index 0000000..c971b7e --- /dev/null +++ b/scripts/server/post_vbench_i2v.py @@ -0,0 +1,68 @@ +import argparse +import glob +import os + +from loguru import logger +from post_multi_servers import get_available_urls, process_tasks_async + + +def create_i2v_messages(img_files, output_path): + """Create messages for image-to-video tasks""" + messages = [] + negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + + for img_path in img_files: + file_name = os.path.basename(img_path) + prompt = os.path.splitext(file_name)[0] + save_result_path = os.path.join(output_path, f"{prompt}.mp4") + + message = { + "seed": 42, + "prompt": prompt, + "negative_prompt": negative_prompt, + "image_path": img_path, + "save_result_path": save_result_path, + } + messages.append(message) + + return messages + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--data_path", type=str, required=True, help="path to img files.") + parser.add_argument("--output_path", type=str, default="./vbench_i2v", help="output video path.") + args = parser.parse_args() + + # Create server URLs + urls = [f"http://localhost:{port}" for port in range(8000, 8008)] + + # Get available servers + available_urls = get_available_urls(urls) + if not available_urls: + exit(1) + + # Find image files + if os.path.exists(args.data_path): + img_files = glob.glob(os.path.join(args.data_path, "*.jpg")) + logger.info(f"Found {len(img_files)} image files.") + + if not img_files: + logger.error("No image files found.") + exit(1) + + # Create messages for all images + messages = create_i2v_messages(img_files, args.output_path) + logger.info(f"Created {len(messages)} tasks.") + + # Process tasks asynchronously + success = process_tasks_async(messages, available_urls, show_progress=True) + + if success: + logger.info("All image-to-video tasks completed successfully!") + else: + logger.error("Some tasks failed.") + exit(1) + else: + logger.error(f"Data path does not exist: {args.data_path}") + exit(1) diff --git a/scripts/server/readme.md b/scripts/server/readme.md new file mode 100644 index 0000000..8a6fb13 --- /dev/null +++ b/scripts/server/readme.md @@ -0,0 +1 @@ +## todo diff --git a/scripts/server/start_multi_servers.sh b/scripts/server/start_multi_servers.sh new file mode 100644 index 0000000..809e32c --- /dev/null +++ b/scripts/server/start_multi_servers.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path=/mnt/afs/users/lijiaqi2/deploy-comfyui-ljq-custom_nodes/ComfyUI-Lightx2vWrapper/lightx2v +model_path=/mnt/afs/users/lijiaqi2/wan_model/Wan2.1-R2V0909-Audio-14B-720P-fp8 + + +export CUDA_VISIBLE_DEVICES=0,1,2,3 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +# Start multiple servers +torchrun --nproc_per_node 4 -m lightx2v.server \ + --model_cls seko_talk \ + --task i2v \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/seko_talk/xxx_dist.json \ + --port 8000 diff --git a/scripts/server/start_server.sh b/scripts/server/start_server.sh new file mode 100644 index 0000000..3b1644a --- /dev/null +++ b/scripts/server/start_server.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +# Start API server with distributed inference service +python -m lightx2v.server \ +--model_cls hunyuan_video_1.5_distill \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/hunyuan_video_15/hunyuan_video_t2v_480p_distill.json \ +--port 8000 + +echo "Service stopped" diff --git a/scripts/server/start_server_i2i.sh b/scripts/server/start_server_i2i.sh new file mode 100644 index 0000000..ba814b2 --- /dev/null +++ b/scripts/server/start_server_i2i.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +# Start API server with distributed inference service +python -m lightx2v.server \ +--model_cls qwen_image \ +--task i2i \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/qwen_image/qwen_image_i2i.json \ +--port 8000 + +echo "Service stopped" + +# { +# "prompt": "turn the style of the photo to vintage comic book", +# "image_path": "assets/inputs/imgs/snake.png", +# "infer_steps": 50 +# } diff --git a/scripts/server/start_server_t2i.sh b/scripts/server/start_server_t2i.sh new file mode 100644 index 0000000..d740778 --- /dev/null +++ b/scripts/server/start_server_t2i.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +# Start API server with distributed inference service +python -m lightx2v.server \ +--model_cls qwen_image \ +--task t2i \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/qwen_image/qwen_image_t2i.json \ +--port 8000 + +echo "Service stopped" + + +# { +# "prompt": "a beautiful sunset over the ocean", +# "aspect_ratio": "16:9", +# "infer_steps": 50 +# } diff --git a/scripts/server/stop_running_task.py b/scripts/server/stop_running_task.py new file mode 100644 index 0000000..65f643c --- /dev/null +++ b/scripts/server/stop_running_task.py @@ -0,0 +1,5 @@ +import requests +from loguru import logger + +response = requests.get("http://localhost:8000/v1/local/video/generate/stop_running_task") +logger.info(response.json()) diff --git a/scripts/sparse_attn/spas_sage_attn/run_wan_i2v.sh b/scripts/sparse_attn/spas_sage_attn/run_wan_i2v.sh new file mode 100644 index 0000000..67e5a71 --- /dev/null +++ b/scripts/sparse_attn/spas_sage_attn/run_wan_i2v.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/sparse_attn/spas_sage_attn/wan_i2v.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_spas_sage_attn.mp4 diff --git a/scripts/sparse_attn/spas_sage_attn/run_wan_t2v.sh b/scripts/sparse_attn/spas_sage_attn/run_wan_t2v.sh new file mode 100644 index 0000000..13ad8bf --- /dev/null +++ b/scripts/sparse_attn/spas_sage_attn/run_wan_t2v.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/sparse_attn/spas_sage_attn/wan_t2v.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_spas_sage_attn.mp4 diff --git a/scripts/video_frame_interpolation/run_wan_t2v_video_frame_interpolation.sh b/scripts/video_frame_interpolation/run_wan_t2v_video_frame_interpolation.sh new file mode 100644 index 0000000..3ce5131 --- /dev/null +++ b/scripts/video_frame_interpolation/run_wan_t2v_video_frame_interpolation.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +# Run inference with VFI enabled through config file +# The wan_t2v.json config contains video_frame_interpolation settings +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/video_frame_interpolation/wan_t2v.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_video_frame_interpolation.mp4 diff --git a/scripts/wan/run_wan_flf2v.sh b/scripts/wan/run_wan_flf2v.sh new file mode 100644 index 0000000..35ff640 --- /dev/null +++ b/scripts/wan/run_wan_flf2v.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task flf2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan/wan_flf2v.json \ +--prompt "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird’s feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/flf2v_input_first_frame-fs8.png \ +--last_frame_path ${lightx2v_path}/assets/inputs/imgs/flf2v_input_last_frame-fs8.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_flf2v.mp4 diff --git a/scripts/wan/run_wan_i2v.sh b/scripts/wan/run_wan_i2v.sh new file mode 100644 index 0000000..f838412 --- /dev/null +++ b/scripts/wan/run_wan_i2v.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan/wan_i2v.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/scripts/wan/run_wan_i2v_causvid.sh b/scripts/wan/run_wan_i2v_causvid.sh new file mode 100644 index 0000000..0b93f19 --- /dev/null +++ b/scripts/wan/run_wan_i2v_causvid.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_causvid \ +--task i2v \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/causvid/wan_i2v_causvid.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_causvid.mp4 diff --git a/scripts/wan/run_wan_i2v_distill_4step_cfg.sh b/scripts/wan/run_wan_i2v_distill_4step_cfg.sh new file mode 100644 index 0000000..e6cbb78 --- /dev/null +++ b/scripts/wan/run_wan_i2v_distill_4step_cfg.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/distill/wan_i2v_distill_4step_cfg.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_distill.mp4 diff --git a/scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh b/scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh new file mode 100644 index 0000000..8e54a88 --- /dev/null +++ b/scripts/wan/run_wan_i2v_distill_4step_cfg_lora.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/distill/wan_i2v_distill_4step_cfg_lora.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_distill.mp4 diff --git a/scripts/wan/run_wan_i2v_lazy_load.sh b/scripts/wan/run_wan_i2v_lazy_load.sh new file mode 100644 index 0000000..07ac971 --- /dev/null +++ b/scripts/wan/run_wan_i2v_lazy_load.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh +export DTYPE=FP16 +export SENSITIVE_LAYER_DTYPE=FP16 +export PROFILING_DEBUG_LEVEL=2 + +echo "===============================================================================" +echo "LightX2V Lazyload Environment Variables Summary:" +echo "-------------------------------------------------------------------------------" +echo "lightx2v_path: ${lightx2v_path}" +echo "model_path: ${model_path}" +echo "-------------------------------------------------------------------------------" +echo "Model Inference Data Type: ${DTYPE}" +echo "Sensitive Layer Data Type: ${SENSITIVE_LAYER_DTYPE}" +echo "Performance Profiling Debug Level: ${PROFILING_DEBUG_LEVEL}" +echo "===============================================================================" + + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/offload/disk/wan_i2v_phase_lazy_load_720p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/scripts/wan/run_wan_i2v_nbhd_attn_480p.sh b/scripts/wan/run_wan_i2v_nbhd_attn_480p.sh new file mode 100644 index 0000000..c91dd8e --- /dev/null +++ b/scripts/wan/run_wan_i2v_nbhd_attn_480p.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/attentions/wan_i2v_nbhd_480p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_nbhd_attn_480p.mp4 diff --git a/scripts/wan/run_wan_i2v_nbhd_attn_720p.sh b/scripts/wan/run_wan_i2v_nbhd_attn_720p.sh new file mode 100644 index 0000000..1fb3514 --- /dev/null +++ b/scripts/wan/run_wan_i2v_nbhd_attn_720p.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/attentions/wan_i2v_nbhd_720p.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v_nbhd_attn_720p.mp4 diff --git a/scripts/wan/run_wan_t2v.sh b/scripts/wan/run_wan_t2v.sh new file mode 100644 index 0000000..a539ebe --- /dev/null +++ b/scripts/wan/run_wan_t2v.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan/wan_t2v.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/scripts/wan/run_wan_t2v_causvid.sh b/scripts/wan/run_wan_t2v_causvid.sh new file mode 100644 index 0000000..a467258 --- /dev/null +++ b/scripts/wan/run_wan_t2v_causvid.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_causvid \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/causvid/wan_t2v_causvid.json \ +--prompt "Two anthropomorphic cats fight intensely on a spotlighted stage; the left cat wearing blue boxing gear with matching gloves, the right cat in bright red boxing attire and gloves." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_causvid.mp4 diff --git a/scripts/wan/run_wan_t2v_distill_4step_cfg.sh b/scripts/wan/run_wan_t2v_distill_4step_cfg.sh new file mode 100644 index 0000000..586cc82 --- /dev/null +++ b/scripts/wan/run_wan_t2v_distill_4step_cfg.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--use_prompt_enhancer \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/scripts/wan/run_wan_t2v_distill_4step_cfg_dynamic.sh b/scripts/wan/run_wan_t2v_distill_4step_cfg_dynamic.sh new file mode 100644 index 0000000..f15cfd0 --- /dev/null +++ b/scripts/wan/run_wan_t2v_distill_4step_cfg_dynamic.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg_dynamic.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--use_prompt_enhancer \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_cfg_4.mp4 diff --git a/scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh b/scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh new file mode 100644 index 0000000..09bb104 --- /dev/null +++ b/scripts/wan/run_wan_t2v_distill_4step_cfg_lora.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_distill \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/distill/wan_t2v_distill_4step_cfg_lora.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--use_prompt_enhancer \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/scripts/wan/run_wan_vace.sh b/scripts/wan/run_wan_vace.sh new file mode 100644 index 0000000..8d6a733 --- /dev/null +++ b/scripts/wan/run_wan_vace.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=1 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_vace \ +--task vace \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan/wan_vace.json \ +--prompt "在一个欢乐而充满节日气氛的场景中,穿着鲜艳红色春服的小女孩正与她的可爱卡通蛇嬉戏。她的春服上绣着金色吉祥图案,散发着喜庆的气息,脸上洋溢着灿烂的笑容。蛇身呈现出亮眼的绿色,形状圆润,宽大的眼睛让它显得既友善又幽默。小女孩欢快地用手轻轻抚摸着蛇的头部,共同享受着这温馨的时刻。周围五彩斑斓的灯笼和彩带装饰着环境,阳光透过洒在她们身上,营造出一个充满友爱与幸福的新年氛围。" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--src_ref_images ${lightx2v_path}/assets/inputs/imgs/girl.png,${lightx2v_path}/assets/inputs/imgs/snake.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_vace.mp4\ diff --git a/scripts/wan22/run_wan22_animate.sh b/scripts/wan22/run_wan22_animate.sh new file mode 100644 index 0000000..89e2f03 --- /dev/null +++ b/scripts/wan22/run_wan22_animate.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= +video_path= +refer_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +# process +python ${lightx2v_path}/tools/preprocess/preprocess_data.py \ + --ckpt_path ${model_path}/process_checkpoint \ + --video_path $video_path \ + --refer_path $refer_path \ + --save_path ${lightx2v_path}/save_results/animate/process_results \ + --resolution_area 1280 720 \ + --retarget_flag \ + +python -m lightx2v.infer \ +--model_cls wan2.2_animate \ +--task animate \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_animate.json \ +--src_pose_path ${lightx2v_path}/save_results/animate/process_results/src_pose.mp4 \ +--src_face_path ${lightx2v_path}/save_results/animate/process_results/src_face.mp4 \ +--src_ref_images ${lightx2v_path}/save_results/animate/process_results/src_ref.png \ +--prompt "视频中的人在做动作" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_animate.mp4 diff --git a/scripts/wan22/run_wan22_animate_lora.sh b/scripts/wan22/run_wan22_animate_lora.sh new file mode 100644 index 0000000..8919630 --- /dev/null +++ b/scripts/wan22/run_wan22_animate_lora.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= +video_path= +refer_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +# process +python ${lightx2v_path}/tools/preprocess/preprocess_data.py \ + --ckpt_path ${model_path}/process_checkpoint \ + --video_path $video_path \ + --refer_path $refer_path \ + --save_path ${lightx2v_path}/save_results/animate/process_results \ + --resolution_area 1280 720 \ + --retarget_flag \ + +python -m lightx2v.infer \ +--model_cls wan2.2_animate \ +--task animate \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_animate_lora.json \ +--src_pose_path ${lightx2v_path}/save_results/animate/process_results/src_pose.mp4 \ +--src_face_path ${lightx2v_path}/save_results/animate/process_results/src_face.mp4 \ +--src_ref_images ${lightx2v_path}/save_results/animate/process_results/src_ref.png \ +--prompt "视频中的人在做动作" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_animate_lora.mp4 diff --git a/scripts/wan22/run_wan22_animate_replace.sh b/scripts/wan22/run_wan22_animate_replace.sh new file mode 100644 index 0000000..8932c48 --- /dev/null +++ b/scripts/wan22/run_wan22_animate_replace.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= +video_path= +refer_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +# process +python ${lightx2v_path}/tools/preprocess/preprocess_data.py \ + --ckpt_path ${model_path}/process_checkpoint \ + --video_path $video_path \ + --refer_path $refer_path \ + --save_path ${lightx2v_path}/save_results/replace/process_results \ + --resolution_area 1280 720 \ + --iterations 3 \ + --k 7 \ + --w_len 1 \ + --h_len 1 \ + --replace_flag + +python -m lightx2v.infer \ +--model_cls wan2.2_animate \ +--task animate \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_animate_replace_4090.json \ +--src_pose_path ${lightx2v_path}/save_results/animate/process_results/src_pose.mp4 \ +--src_face_path ${lightx2v_path}/save_results/animate/process_results/src_face.mp4 \ +--src_ref_images ${lightx2v_path}/save_results/animate/process_results/src_ref.png \ +--src_bg_path ${lightx2v_path}/save_results/animate/process_results/src_bg.mp4 \ +--src_mask_path ${lightx2v_path}/save_results/animate/process_results/src_mask.mp4 \ +--prompt "视频中的人在做动作" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_replace.mp4 diff --git a/scripts/wan22/run_wan22_distill_moe_flf2v.sh b/scripts/wan22/run_wan22_distill_moe_flf2v.sh new file mode 100644 index 0000000..1741ce2 --- /dev/null +++ b/scripts/wan22/run_wan22_distill_moe_flf2v.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + + +python -m lightx2v.infer \ +--model_cls wan2.2_moe_distill \ +--task flf2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_distill_moe_flf2v.json \ +--prompt "A bearded man with red facial hair wearing a yellow straw hat and dark coat in Van Gogh's self-portrait style, slowly and continuously transforms into a space astronaut. The transformation flows like liquid paint - his beard fades away strand by strand, the yellow hat melts and reforms smoothly into a silver space helmet, dark coat gradually lightens and restructures into a white spacesuit. The background swirling brushstrokes slowly organize and clarify into realistic stars and space, with Earth appearing gradually in the distance. Every change happens in seamless waves, maintaining visual continuity throughout the metamorphosis.\n\nConsistent soft lighting throughout, medium close-up maintaining same framing, central composition stays fixed, gentle color temperature shift from warm to cool, gradual contrast increase, smooth style transition from painterly to photorealistic. Static camera with subtle slow zoom, emphasizing the flowing transformation process without abrupt changes." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path /mtc/gushiqiao/llmc_workspace/wan22_14B_flf2v_start_image.png \ +--last_frame_path /mtc/gushiqiao/llmc_workspace/wan22_14B_flf2v_end_image.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_flf2v.mp4 diff --git a/scripts/wan22/run_wan22_moe_flf2v.sh b/scripts/wan22/run_wan22_moe_flf2v.sh new file mode 100644 index 0000000..24419ac --- /dev/null +++ b/scripts/wan22/run_wan22_moe_flf2v.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task flf2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_moe_flf2v.json \ +--prompt "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird’s feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/flf2v_input_first_frame-fs8.png \ +--last_frame_path ${lightx2v_path}/assets/inputs/imgs/flf2v_input_last_frame-fs8.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_flf2v.mp4 diff --git a/scripts/wan22/run_wan22_moe_i2v.sh b/scripts/wan22/run_wan22_moe_i2v.sh new file mode 100644 index 0000000..bf974d1 --- /dev/null +++ b/scripts/wan22/run_wan22_moe_i2v.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_moe_i2v.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_i2v.mp4 diff --git a/scripts/wan22/run_wan22_moe_i2v_distill.sh b/scripts/wan22/run_wan22_moe_i2v_distill.sh new file mode 100644 index 0000000..edd1c6f --- /dev/null +++ b/scripts/wan22/run_wan22_moe_i2v_distill.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2_moe_distill \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_moe_i2v_distill.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_i2v_distill.mp4 diff --git a/scripts/wan22/run_wan22_moe_t2v.sh b/scripts/wan22/run_wan22_moe_t2v.sh new file mode 100644 index 0000000..9b1494f --- /dev/null +++ b/scripts/wan22/run_wan22_moe_t2v.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2_moe \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_moe_t2v.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_t2v.mp4 diff --git a/scripts/wan22/run_wan22_moe_t2v_distill.sh b/scripts/wan22/run_wan22_moe_t2v_distill.sh new file mode 100644 index 0000000..f412ab4 --- /dev/null +++ b/scripts/wan22/run_wan22_moe_t2v_distill.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2_moe_distill \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_moe_t2v_distill.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_moe_t2v_distill.mp4 diff --git a/scripts/wan22/run_wan22_ti2v_i2v.sh b/scripts/wan22/run_wan22_ti2v_i2v.sh new file mode 100644 index 0000000..045d3b0 --- /dev/null +++ b/scripts/wan22/run_wan22_ti2v_i2v.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_ti2v_i2v.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_i2v.mp4 diff --git a/scripts/wan22/run_wan22_ti2v_t2v.sh b/scripts/wan22/run_wan22_ti2v_t2v.sh new file mode 100644 index 0000000..13d9b5f --- /dev/null +++ b/scripts/wan22/run_wan22_ti2v_t2v.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.2 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan22/wan_ti2v_t2v.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" \ +--negative_prompt "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan22_ti2v_t2v.mp4 diff --git a/scripts/win/run_wan_i2v.bat b/scripts/win/run_wan_i2v.bat new file mode 100644 index 0000000..bc998a6 --- /dev/null +++ b/scripts/win/run_wan_i2v.bat @@ -0,0 +1,53 @@ +@echo off +chcp 65001 >nul +echo 启动LightX2V I2V推理... + +:: 设置路径 +set lightx2v_path=D:\LightX2V +set model_path=D:\models\Wan2.1-I2V-14B-480P-Lightx2v + +:: 检查CUDA_VISIBLE_DEVICES +if "%CUDA_VISIBLE_DEVICES%"=="" ( + set cuda_devices=0 + echo Warn: CUDA_VISIBLE_DEVICES is not set, using default value: %cuda_devices%, change at shell script or set env variable. + set CUDA_VISIBLE_DEVICES=%cuda_devices% +) + +:: 检查路径 +if "%lightx2v_path%"=="" ( + echo Error: lightx2v_path is not set. Please set this variable first. + exit /b 1 +) + +if "%model_path%"=="" ( + echo Error: model_path is not set. Please set this variable first. + exit /b 1 +) + +:: 设置环境变量 +set TOKENIZERS_PARALLELISM=false +set PYTHONPATH=%lightx2v_path%;%PYTHONPATH% +set PROFILING_DEBUG_LEVEL=2 +set DTYPE=BF16 + +echo 环境变量设置完成! +echo PYTHONPATH: %PYTHONPATH% +echo CUDA_VISIBLE_DEVICES: %CUDA_VISIBLE_DEVICES% +echo 模型路径: %model_path% + +:: 切换到项目目录 +cd /d %lightx2v_path% + +:: 运行推理 +python -m lightx2v.infer ^ +--model_cls wan2.1 ^ +--task i2v ^ +--model_path %model_path% ^ +--config_json %lightx2v_path%/configs/offload/disk/wan_i2v_phase_lazy_load_480p.json ^ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." ^ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" ^ +--image_path %lightx2v_path%/assets/inputs/imgs/img_0.jpg ^ +--save_result_path %lightx2v_path%/save_results/output_lightx2v_wan_i2v.mp4 + +echo 推理完成! +pause diff --git a/scripts/win/run_wan_t2v.bat b/scripts/win/run_wan_t2v.bat new file mode 100644 index 0000000..52caede --- /dev/null +++ b/scripts/win/run_wan_t2v.bat @@ -0,0 +1,52 @@ +@echo off +chcp 65001 >nul +echo 启动LightX2V T2V推理... + +:: 设置路径 +set lightx2v_path=D:\LightX2V +set model_path=D:\models\Wan2.1-T2V-1.3B-Lightx2v + +:: 检查CUDA_VISIBLE_DEVICES +if "%CUDA_VISIBLE_DEVICES%"=="" ( + set cuda_devices=0 + echo Warn: CUDA_VISIBLE_DEVICES is not set, using default value: %cuda_devices%, change at shell script or set env variable. + set CUDA_VISIBLE_DEVICES=%cuda_devices% +) + +:: 检查路径 +if "%lightx2v_path%"=="" ( + echo Error: lightx2v_path is not set. Please set this variable first. + exit /b 1 +) + +if "%model_path%"=="" ( + echo Error: model_path is not set. Please set this variable first. + exit /b 1 +) + +:: 设置环境变量 +set TOKENIZERS_PARALLELISM=false +set PYTHONPATH=%lightx2v_path%;%PYTHONPATH% +set PROFILING_DEBUG_LEVEL=2 +set DTYPE=BF16 + +echo 环境变量设置完成! +echo PYTHONPATH: %PYTHONPATH% +echo CUDA_VISIBLE_DEVICES: %CUDA_VISIBLE_DEVICES% +echo 模型路径: %model_path% + +:: 切换到项目目录 +cd /d %lightx2v_path% + +:: 运行推理 +python -m lightx2v.infer ^ +--model_cls wan2.1 ^ +--task t2v ^ +--model_path %model_path% ^ +--config_json %lightx2v_path%/configs/offload/block/wan_t2v_1_3b.json ^ +--prompt "A beautiful sunset over a calm ocean, with golden rays of light reflecting on the water surface. The sky is painted with vibrant orange and pink clouds. A peaceful and serene atmosphere." ^ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" ^ +--save_result_path %lightx2v_path%/save_results/output_lightx2v_wan_t2v.mp4 + +echo 推理完成! +pause diff --git a/setup_vae.py b/setup_vae.py new file mode 100644 index 0000000..3814252 --- /dev/null +++ b/setup_vae.py @@ -0,0 +1,86 @@ +""" +LightX2V Setup Script +Minimal installation for VAE models only +""" + +import os + +from setuptools import find_packages, setup + + +# Read the README file +def read_readme(): + readme_path = os.path.join(os.path.dirname(__file__), "README.md") + if os.path.exists(readme_path): + with open(readme_path, "r", encoding="utf-8") as f: + return f.read() + return "" + + +# Core dependencies for VAE models +vae_dependencies = [ + "torch>=2.0.0", + "numpy>=1.20.0", + "einops>=0.6.0", + "loguru>=0.6.0", +] + +# Full dependencies for complete LightX2V +full_dependencies = [ + "packaging", + "ninja", + "torch", + "torchvision", + "diffusers", + "transformers", + "tokenizers", + "tqdm", + "accelerate", + "safetensors", + "opencv-python", + "numpy", + "imageio", + "imageio-ffmpeg", + "einops", + "loguru", + "ftfy", + "gradio", + "aiohttp", + "pydantic", + "fastapi", + "uvicorn", + "requests", + "decord", +] + +setup( + name="lightx2v", + version="1.0.0", + author="LightX2V Team", + author_email="", + description="LightX2V: High-performance video generation models with optimized VAE", + long_description=read_readme(), + long_description_content_type="text/markdown", + url="https://github.com/ModelTC/LightX2V", + packages=find_packages(include=["lightx2v", "lightx2v.*"]), + classifiers=[ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + ], + python_requires=">=3.8", + install_requires=vae_dependencies, + extras_require={ + "full": full_dependencies, + "vae": vae_dependencies, + }, + include_package_data=True, + zip_safe=False, +) diff --git a/test_cases/run_matrix_game2_gta_drive.sh b/test_cases/run_matrix_game2_gta_drive.sh new file mode 100644 index 0000000..43c41ff --- /dev/null +++ b/test_cases/run_matrix_game2_gta_drive.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path=path to Lightx2v +model_path=path to Skywork/Matrix-Game-2.0 + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf_mtxg2 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/matrix_game2/matrix_game2_gta_drive.json \ +--prompt '' \ +--image_path gta_drive/0003.png \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_matrix_game2_gta_drive.mp4 \ +--seed 42 diff --git a/test_cases/run_qwen_image_i2i_2509.sh b/test_cases/run_qwen_image_i2i_2509.sh new file mode 100644 index 0000000..f127d2d --- /dev/null +++ b/test_cases/run_qwen_image_i2i_2509.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# set path and first +export lightx2v_path= +export model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ + --model_cls qwen_image \ + --task i2i \ + --model_path $model_path \ + --config_json ${lightx2v_path}/configs/qwen_image/qwen_image_i2i_2509.json \ + --prompt "Have the two characters swap clothes and stand in front of the castle." \ + --negative_prompt " " \ + --image_path 1.jpeg,2.jpeg \ + --save_result_path ${lightx2v_path}/save_results/qwen_image_i2i_2509.png \ + --seed 0 diff --git a/test_cases/run_seko_talk_01_base.sh b/test_cases/run_seko_talk_01_base.sh new file mode 100644 index 0000000..cd9258f --- /dev/null +++ b/test_cases/run_seko_talk_01_base.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +lightx2v_path=/path/to/Lightx2v +model_path=/path/to/SekoTalk-Distill + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True + +export SENSITIVE_LAYER_DTYPE=None + +python -m lightx2v.infer \ +--model_cls seko_talk \ +--task s2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/seko_talk/seko_talk_01_base.json \ +--prompt "The video features a male speaking to the camera with arms spread out, a slightly furrowed brow, and a focused gaze." \ +--negative_prompt 色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走 \ +--image_path ${lightx2v_path}/assets/inputs/audio/seko_input.png \ +--audio_path ${lightx2v_path}/assets/inputs/audio/seko_input.mp3 \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_seko_talk.mp4 diff --git a/test_cases/run_wan_i2v.sh b/test_cases/run_wan_i2v.sh new file mode 100644 index 0000000..f838412 --- /dev/null +++ b/test_cases/run_wan_i2v.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan/wan_i2v.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/test_cases/run_wan_i2v_offload.sh b/test_cases/run_wan_i2v_offload.sh new file mode 100644 index 0000000..c657dfa --- /dev/null +++ b/test_cases/run_wan_i2v_offload.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task i2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/offload/phase/wan_i2v_phase.json \ +--prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--image_path ${lightx2v_path}/assets/inputs/imgs/img_0.jpg \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_i2v.mp4 diff --git a/test_cases/run_wan_t2v.sh b/test_cases/run_wan_t2v.sh new file mode 100644 index 0000000..a539ebe --- /dev/null +++ b/test_cases/run_wan_t2v.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/wan/wan_t2v.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/test_cases/run_wan_t2v_dist_cfg_ulysses.sh b/test_cases/run_wan_t2v_dist_cfg_ulysses.sh new file mode 100644 index 0000000..f849940 --- /dev/null +++ b/test_cases/run_wan_t2v_dist_cfg_ulysses.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= + +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +torchrun --nproc_per_node=8 -m lightx2v.infer \ +--model_cls wan2.1 \ +--task t2v \ +--model_path $model_path \ +--config_json ${lightx2v_path}/configs/dist_infer/wan_t2v_dist_cfg_ulysses.json \ +--prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \ +--negative_prompt "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v.mp4 diff --git a/test_cases/run_wan_t2v_sf.sh b/test_cases/run_wan_t2v_sf.sh new file mode 100644 index 0000000..bd8c4e9 --- /dev/null +++ b/test_cases/run_wan_t2v_sf.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# set path and first +lightx2v_path= +model_path= # path to Wan2.1-T2V-1.3B +sf_model_path= # path to gdhe17/Self-Forcing + +export CUDA_VISIBLE_DEVICES=0 + +# set environment variables +source ${lightx2v_path}/scripts/base/base.sh + +python -m lightx2v.infer \ +--model_cls wan2.1_sf \ +--task t2v \ +--model_path $model_path \ +--sf_model_path $sf_model_path \ +--config_json ${lightx2v_path}/configs/self_forcing/wan_t2v_sf.json \ +--prompt 'A stylish woman strolls down a bustling Tokyo street, the warm glow of neon lights and animated city signs casting vibrant reflections. She wears a sleek black leather jacket paired with a flowing red dress and black boots, her black purse slung over her shoulder. Sunglasses perched on her nose and a bold red lipstick add to her confident, casual demeanor. The street is damp and reflective, creating a mirror-like effect that enhances the colorful lights and shadows. Pedestrians move about, adding to the lively atmosphere. The scene is captured in a dynamic medium shot with the woman walking slightly to one side, highlighting her graceful strides.' \ +--save_result_path ${lightx2v_path}/save_results/output_lightx2v_wan_t2v_sf.mp4 diff --git a/tools/convert/converter.py b/tools/convert/converter.py new file mode 100644 index 0000000..f5faaf6 --- /dev/null +++ b/tools/convert/converter.py @@ -0,0 +1,883 @@ +import argparse +import gc +import glob +import json +import multiprocessing +import os +import re +import shutil +from collections import defaultdict +from concurrent.futures import ThreadPoolExecutor, as_completed + +import torch +from loguru import logger + +try: + from lora_loader import LoRALoader +except ImportError: + pass +import sys +from pathlib import Path + +from safetensors import safe_open +from safetensors import torch as st +from tqdm import tqdm + +sys.path.append(str(Path(__file__).parent.parent.parent)) +from lightx2v.utils.registry_factory import CONVERT_WEIGHT_REGISTER +from tools.convert.quant import * + +dtype_mapping = { + "int8": torch.int8, + "fp8": torch.float8_e4m3fn, +} + + +def get_key_mapping_rules(direction, model_type): + if model_type == "wan_dit": + unified_rules = [ + { + "forward": (r"^head\.head$", "proj_out"), + "backward": (r"^proj_out$", "head.head"), + }, + { + "forward": (r"^head\.modulation$", "scale_shift_table"), + "backward": (r"^scale_shift_table$", "head.modulation"), + }, + { + "forward": ( + r"^text_embedding\.0\.", + "condition_embedder.text_embedder.linear_1.", + ), + "backward": ( + r"^condition_embedder.text_embedder.linear_1\.", + "text_embedding.0.", + ), + }, + { + "forward": ( + r"^text_embedding\.2\.", + "condition_embedder.text_embedder.linear_2.", + ), + "backward": ( + r"^condition_embedder.text_embedder.linear_2\.", + "text_embedding.2.", + ), + }, + { + "forward": ( + r"^time_embedding\.0\.", + "condition_embedder.time_embedder.linear_1.", + ), + "backward": ( + r"^condition_embedder.time_embedder.linear_1\.", + "time_embedding.0.", + ), + }, + { + "forward": ( + r"^time_embedding\.2\.", + "condition_embedder.time_embedder.linear_2.", + ), + "backward": ( + r"^condition_embedder.time_embedder.linear_2\.", + "time_embedding.2.", + ), + }, + { + "forward": (r"^time_projection\.1\.", "condition_embedder.time_proj."), + "backward": (r"^condition_embedder.time_proj\.", "time_projection.1."), + }, + { + "forward": (r"blocks\.(\d+)\.self_attn\.q\.", r"blocks.\1.attn1.to_q."), + "backward": ( + r"blocks\.(\d+)\.attn1\.to_q\.", + r"blocks.\1.self_attn.q.", + ), + }, + { + "forward": (r"blocks\.(\d+)\.self_attn\.k\.", r"blocks.\1.attn1.to_k."), + "backward": ( + r"blocks\.(\d+)\.attn1\.to_k\.", + r"blocks.\1.self_attn.k.", + ), + }, + { + "forward": (r"blocks\.(\d+)\.self_attn\.v\.", r"blocks.\1.attn1.to_v."), + "backward": ( + r"blocks\.(\d+)\.attn1\.to_v\.", + r"blocks.\1.self_attn.v.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.self_attn\.o\.", + r"blocks.\1.attn1.to_out.0.", + ), + "backward": ( + r"blocks\.(\d+)\.attn1\.to_out\.0\.", + r"blocks.\1.self_attn.o.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.q\.", + r"blocks.\1.attn2.to_q.", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.to_q\.", + r"blocks.\1.cross_attn.q.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.k\.", + r"blocks.\1.attn2.to_k.", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.to_k\.", + r"blocks.\1.cross_attn.k.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.v\.", + r"blocks.\1.attn2.to_v.", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.to_v\.", + r"blocks.\1.cross_attn.v.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.o\.", + r"blocks.\1.attn2.to_out.0.", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.to_out\.0\.", + r"blocks.\1.cross_attn.o.", + ), + }, + { + "forward": (r"blocks\.(\d+)\.norm3\.", r"blocks.\1.norm2."), + "backward": (r"blocks\.(\d+)\.norm2\.", r"blocks.\1.norm3."), + }, + { + "forward": (r"blocks\.(\d+)\.ffn\.0\.", r"blocks.\1.ffn.net.0.proj."), + "backward": ( + r"blocks\.(\d+)\.ffn\.net\.0\.proj\.", + r"blocks.\1.ffn.0.", + ), + }, + { + "forward": (r"blocks\.(\d+)\.ffn\.2\.", r"blocks.\1.ffn.net.2."), + "backward": (r"blocks\.(\d+)\.ffn\.net\.2\.", r"blocks.\1.ffn.2."), + }, + { + "forward": ( + r"blocks\.(\d+)\.modulation\.", + r"blocks.\1.scale_shift_table.", + ), + "backward": ( + r"blocks\.(\d+)\.scale_shift_table(?=\.|$)", + r"blocks.\1.modulation", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.k_img\.", + r"blocks.\1.attn2.add_k_proj.", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.add_k_proj\.", + r"blocks.\1.cross_attn.k_img.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.v_img\.", + r"blocks.\1.attn2.add_v_proj.", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.add_v_proj\.", + r"blocks.\1.cross_attn.v_img.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.norm_k_img\.weight", + r"blocks.\1.attn2.norm_added_k.weight", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.norm_added_k\.weight", + r"blocks.\1.cross_attn.norm_k_img.weight", + ), + }, + { + "forward": ( + r"img_emb\.proj\.0\.", + r"condition_embedder.image_embedder.norm1.", + ), + "backward": ( + r"condition_embedder\.image_embedder\.norm1\.", + r"img_emb.proj.0.", + ), + }, + { + "forward": ( + r"img_emb\.proj\.1\.", + r"condition_embedder.image_embedder.ff.net.0.proj.", + ), + "backward": ( + r"condition_embedder\.image_embedder\.ff\.net\.0\.proj\.", + r"img_emb.proj.1.", + ), + }, + { + "forward": ( + r"img_emb\.proj\.3\.", + r"condition_embedder.image_embedder.ff.net.2.", + ), + "backward": ( + r"condition_embedder\.image_embedder\.ff\.net\.2\.", + r"img_emb.proj.3.", + ), + }, + { + "forward": ( + r"img_emb\.proj\.4\.", + r"condition_embedder.image_embedder.norm2.", + ), + "backward": ( + r"condition_embedder\.image_embedder\.norm2\.", + r"img_emb.proj.4.", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.self_attn\.norm_q\.weight", + r"blocks.\1.attn1.norm_q.weight", + ), + "backward": ( + r"blocks\.(\d+)\.attn1\.norm_q\.weight", + r"blocks.\1.self_attn.norm_q.weight", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.self_attn\.norm_k\.weight", + r"blocks.\1.attn1.norm_k.weight", + ), + "backward": ( + r"blocks\.(\d+)\.attn1\.norm_k\.weight", + r"blocks.\1.self_attn.norm_k.weight", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.norm_q\.weight", + r"blocks.\1.attn2.norm_q.weight", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.norm_q\.weight", + r"blocks.\1.cross_attn.norm_q.weight", + ), + }, + { + "forward": ( + r"blocks\.(\d+)\.cross_attn\.norm_k\.weight", + r"blocks.\1.attn2.norm_k.weight", + ), + "backward": ( + r"blocks\.(\d+)\.attn2\.norm_k\.weight", + r"blocks.\1.cross_attn.norm_k.weight", + ), + }, + # head projection mapping + { + "forward": (r"^head\.head\.", "proj_out."), + "backward": (r"^proj_out\.", "head.head."), + }, + ] + + if direction == "forward": + return [rule["forward"] for rule in unified_rules] + elif direction == "backward": + return [rule["backward"] for rule in unified_rules] + else: + raise ValueError(f"Invalid direction: {direction}") + else: + raise ValueError(f"Unsupported model type: {model_type}") + + +def quantize_model( + weights, + w_bit=8, + target_keys=["attn", "ffn"], + adapter_keys=None, + key_idx=2, + ignore_key=None, + linear_type="int8", + non_linear_dtype=torch.float, + comfyui_mode=False, + comfyui_keys=[], +): + """ + Quantize model weights in-place + + Args: + weights: Model state dictionary + w_bit: Quantization bit width + target_keys: List of module names to quantize + + Returns: + Modified state dictionary with quantized weights and scales + """ + total_quantized = 0 + original_size = 0 + quantized_size = 0 + non_quantized_size = 0 + keys = list(weights.keys()) + + with tqdm(keys, desc="Quantizing weights") as pbar: + for key in pbar: + pbar.set_postfix(current_key=key, refresh=False) + + if ignore_key is not None and any(ig_key in key for ig_key in ignore_key): + del weights[key] + continue + + tensor = weights[key] + + # Skip non-tensors and non-2D tensors + if not isinstance(tensor, torch.Tensor) or tensor.dim() != 2: + if tensor.dtype != non_linear_dtype: + weights[key] = tensor.to(non_linear_dtype) + non_quantized_size += weights[key].numel() * weights[key].element_size() + else: + non_quantized_size += tensor.numel() * tensor.element_size() + continue + + # Check if key matches target modules + parts = key.split(".") + + if comfyui_mode and (comfyui_keys is not None and key in comfyui_keys): + pass + elif len(parts) < key_idx + 1 or parts[key_idx] not in target_keys: + if adapter_keys is None: + if tensor.dtype != non_linear_dtype: + weights[key] = tensor.to(non_linear_dtype) + non_quantized_size += weights[key].numel() * weights[key].element_size() + else: + non_quantized_size += tensor.numel() * tensor.element_size() + elif not any(adapter_key in parts for adapter_key in adapter_keys): + if tensor.dtype != non_linear_dtype: + weights[key] = tensor.to(non_linear_dtype) + non_quantized_size += weights[key].numel() * weights[key].element_size() + else: + non_quantized_size += tensor.numel() * tensor.element_size() + else: + non_quantized_size += tensor.numel() * tensor.element_size() + continue + + # try: + original_tensor_size = tensor.numel() * tensor.element_size() + original_size += original_tensor_size + + # Quantize tensor and store results + quantizer = CONVERT_WEIGHT_REGISTER[linear_type](tensor) + w_q, scales, extra = quantizer.weight_quant_func(tensor, comfyui_mode) + weight_global_scale = extra.get("weight_global_scale", None) # For nvfp4 + + # Replace original tensor and store scales + weights[key] = w_q + if comfyui_mode: + weights[key.replace(".weight", ".scale_weight")] = scales + else: + weights[key + "_scale"] = scales + if weight_global_scale: + weights[key + "_global_scale"] = weight_global_scale + + quantized_tensor_size = w_q.numel() * w_q.element_size() + scale_size = scales.numel() * scales.element_size() + quantized_size += quantized_tensor_size + scale_size + + total_quantized += 1 + del w_q, scales + + # except Exception as e: + # logger.error(f"Error quantizing {key}: {str(e)}") + + gc.collect() + + original_size_mb = original_size / (1024**2) + quantized_size_mb = quantized_size / (1024**2) + non_quantized_size_mb = non_quantized_size / (1024**2) + total_final_size_mb = (quantized_size + non_quantized_size) / (1024**2) + size_reduction_mb = original_size_mb - quantized_size_mb + + logger.info(f"Quantized {total_quantized} tensors") + logger.info(f"Original quantized tensors size: {original_size_mb:.2f} MB") + logger.info(f"After quantization size: {quantized_size_mb:.2f} MB (includes scales)") + logger.info(f"Non-quantized tensors size: {non_quantized_size_mb:.2f} MB") + logger.info(f"Total final model size: {total_final_size_mb:.2f} MB") + logger.info(f"Size reduction in quantized tensors: {size_reduction_mb:.2f} MB ({size_reduction_mb / original_size_mb * 100:.1f}%)") + + if comfyui_mode: + weights["scaled_fp8"] = torch.zeros(2, dtype=torch.float8_e4m3fn) + + return weights + + +def load_loras(lora_path, weight_dict, alpha, key_mapping_rules=None, strength=1.0): + """ + Load and apply LoRA weights to model weights using the LoRALoader class. + + Args: + lora_path: Path to LoRA safetensors file + weight_dict: Model weights dictionary (will be modified in place) + alpha: Global alpha scaling factor + key_mapping_rules: Optional list of (pattern, replacement) regex rules for key mapping + strength: Additional strength factor for LoRA deltas + """ + logger.info(f"Loading LoRA from: {lora_path} with alpha={alpha}, strength={strength}") + + # Load LoRA weights from safetensors file + with safe_open(lora_path, framework="pt") as f: + lora_weights = {k: f.get_tensor(k) for k in f.keys()} + + # Create LoRA loader with key mapping rules + lora_loader = LoRALoader(key_mapping_rules=key_mapping_rules) + + # Apply LoRA weights to model + lora_loader.apply_lora( + weight_dict=weight_dict, + lora_weights=lora_weights, + alpha=alpha, + strength=strength, + ) + + +def convert_weights(args): + if os.path.isdir(args.source): + src_files = glob.glob(os.path.join(args.source, "*.safetensors"), recursive=True) + elif args.source.endswith((".pth", ".safetensors", "pt")): + src_files = [args.source] + else: + raise ValueError("Invalid input path") + + merged_weights = {} + logger.info(f"Processing source files: {src_files}") + + # Optimize loading for better memory usage + for file_path in tqdm(src_files, desc="Loading weights"): + logger.info(f"Loading weights from: {file_path}") + if file_path.endswith(".pt") or file_path.endswith(".pth"): + weights = torch.load(file_path, map_location=args.device, weights_only=True) + if args.model_type == "hunyuan_dit": + weights = weights["module"] + elif file_path.endswith(".safetensors"): + # Use lazy loading for safetensors to reduce memory usage + with safe_open(file_path, framework="pt") as f: + # Only load tensors when needed (lazy loading) + weights = {} + keys = f.keys() + + # For large files, show progress + if len(keys) > 100: + for k in tqdm(keys, desc=f"Loading {os.path.basename(file_path)}", leave=False): + weights[k] = f.get_tensor(k) + else: + weights = {k: f.get_tensor(k) for k in keys} + + duplicate_keys = set(weights.keys()) & set(merged_weights.keys()) + if duplicate_keys: + raise ValueError(f"Duplicate keys found: {duplicate_keys} in file {file_path}") + + # Update weights more efficiently + merged_weights.update(weights) + + # Clear weights dict to free memory + del weights + if len(src_files) > 1: + gc.collect() # Force garbage collection between files + + if args.direction is not None: + rules = get_key_mapping_rules(args.direction, args.model_type) + converted_weights = {} + logger.info("Converting keys...") + + # Pre-compile regex patterns for better performance + compiled_rules = [(re.compile(pattern), replacement) for pattern, replacement in rules] + + def convert_key(key): + """Convert a single key using compiled rules""" + new_key = key + for pattern, replacement in compiled_rules: + new_key = pattern.sub(replacement, new_key) + return new_key + + # Batch convert keys using list comprehension (faster than loop) + keys_list = list(merged_weights.keys()) + + # Use parallel processing for large models + if len(keys_list) > 1000 and args.parallel: + logger.info(f"Using parallel processing for {len(keys_list)} keys") + # Use ThreadPoolExecutor for I/O bound regex operations + num_workers = min(8, multiprocessing.cpu_count()) + + with ThreadPoolExecutor(max_workers=num_workers) as executor: + # Submit all conversion tasks + future_to_key = {executor.submit(convert_key, key): key for key in keys_list} + + # Process results as they complete with progress bar + for future in tqdm(as_completed(future_to_key), total=len(keys_list), desc="Converting keys (parallel)"): + original_key = future_to_key[future] + new_key = future.result() + converted_weights[new_key] = merged_weights[original_key] + else: + # For smaller models, use simple loop with less overhead + for key in tqdm(keys_list, desc="Converting keys"): + new_key = convert_key(key) + converted_weights[new_key] = merged_weights[key] + else: + converted_weights = merged_weights + + # Apply LoRA AFTER key conversion to ensure proper key matching + if args.lora_path is not None: + # Handle alpha list - if single alpha, replicate for all LoRAs + if args.lora_alpha is not None: + if len(args.lora_alpha) == 1 and len(args.lora_path) > 1: + args.lora_alpha = args.lora_alpha * len(args.lora_path) + elif len(args.lora_alpha) != len(args.lora_path): + raise ValueError(f"Number of lora_alpha ({len(args.lora_alpha)}) must match number of lora_path ({len(args.lora_path)}) or be 1") + + # Normalize strength list + if args.lora_strength is not None: + if len(args.lora_strength) == 1 and len(args.lora_path) > 1: + args.lora_strength = args.lora_strength * len(args.lora_path) + elif len(args.lora_strength) != len(args.lora_path): + raise ValueError(f"Number of strength ({len(args.lora_strength)}) must match number of lora_path ({len(args.lora_path)}) or be 1") + + # Determine if we should apply key mapping rules to LoRA keys + key_mapping_rules = None + if args.lora_key_convert == "convert" and args.direction is not None: + # Apply same conversion as model + key_mapping_rules = get_key_mapping_rules(args.direction, args.model_type) + logger.info("Applying key conversion to LoRA weights") + elif args.lora_key_convert == "same": + # Don't convert LoRA keys + logger.info("Using original LoRA keys without conversion") + else: # auto + # Auto-detect: if model was converted, try with conversion first + if args.direction is not None: + key_mapping_rules = get_key_mapping_rules(args.direction, args.model_type) + logger.info("Auto mode: will try with key conversion first") + + for idx, path in enumerate(args.lora_path): + # Pass key mapping rules to handle converted keys properly + strength = args.lora_strength[idx] if args.lora_strength is not None else 1.0 + alpha = args.lora_alpha[idx] if args.lora_alpha is not None else None + load_loras(path, converted_weights, alpha, key_mapping_rules, strength=strength) + + if args.quantized: + if args.full_quantized and args.comfyui_mode: + logger.info("Quant all tensors...") + assert args.linear_dtype, f"Error: only support 'torch.int8' and 'torch.float8_e4m3fn'." + for k in converted_weights.keys(): + converted_weights[k] = converted_weights[k].float().to(args.linear_dtype) + else: + converted_weights = quantize_model( + converted_weights, + w_bit=args.bits, + target_keys=args.target_keys, + adapter_keys=args.adapter_keys, + key_idx=args.key_idx, + ignore_key=args.ignore_key, + linear_type=args.linear_type, + non_linear_dtype=args.non_linear_dtype, + comfyui_mode=args.comfyui_mode, + comfyui_keys=args.comfyui_keys, + ) + + os.makedirs(args.output, exist_ok=True) + + if args.output_ext == ".pth": + torch.save(converted_weights, os.path.join(args.output, args.output_name + ".pth")) + + else: + index = {"metadata": {"total_size": 0}, "weight_map": {}} + if args.single_file: + output_filename = f"{args.output_name}.safetensors" + output_path = os.path.join(args.output, output_filename) + logger.info(f"Saving model to single file: {output_path}") + + # For memory efficiency with large models + try: + # If model is very large (over threshold), consider warning + total_size = sum(tensor.numel() * tensor.element_size() for tensor in converted_weights.values()) + total_size_gb = total_size / (1024**3) + + if total_size_gb > 10: # Warn if model is larger than 10GB + logger.warning(f"Model size is {total_size_gb:.2f}GB. This will require significant memory to save as a single file.") + logger.warning("Consider using --save_by_block or default chunked saving for better memory efficiency.") + + # Save the entire model as a single file + st.save_file(converted_weights, output_path) + logger.info(f"Model saved successfully to: {output_path} ({total_size_gb:.2f}GB)") + + except MemoryError: + logger.error("Memory error while saving. The model is too large to save as a single file.") + logger.error("Please use --save_by_block or remove --single_file to use chunked saving.") + raise + except Exception as e: + logger.error(f"Error saving model: {e}") + raise + elif args.save_by_block: + logger.info("Backward conversion: grouping weights by block") + block_groups = defaultdict(dict) + non_block_weights = {} + block_pattern = re.compile(r"blocks\.(\d+)\.") + + for key, tensor in converted_weights.items(): + match = block_pattern.search(key) + if match: + block_idx = match.group(1) + if args.model_type == "wan_animate_dit" and "face_adapter" in key: + block_idx = str(int(block_idx) * 5) + block_groups[block_idx][key] = tensor + else: + non_block_weights[key] = tensor + + for block_idx, weights_dict in tqdm(block_groups.items(), desc="Saving block chunks"): + output_filename = f"block_{block_idx}.safetensors" + output_path = os.path.join(args.output, output_filename) + st.save_file(weights_dict, output_path) + for key in weights_dict: + index["weight_map"][key] = output_filename + index["metadata"]["total_size"] += os.path.getsize(output_path) + + if non_block_weights: + output_filename = f"non_block.safetensors" + output_path = os.path.join(args.output, output_filename) + st.save_file(non_block_weights, output_path) + for key in non_block_weights: + index["weight_map"][key] = output_filename + index["metadata"]["total_size"] += os.path.getsize(output_path) + + else: + chunk_idx = 0 + current_chunk = {} + for idx, (k, v) in tqdm(enumerate(converted_weights.items()), desc="Saving chunks"): + current_chunk[k] = v + if args.chunk_size > 0 and (idx + 1) % args.chunk_size == 0: + output_filename = f"{args.output_name}_part{chunk_idx}.safetensors" + output_path = os.path.join(args.output, output_filename) + logger.info(f"Saving chunk to: {output_path}") + st.save_file(current_chunk, output_path) + for key in current_chunk: + index["weight_map"][key] = output_filename + index["metadata"]["total_size"] += os.path.getsize(output_path) + current_chunk = {} + chunk_idx += 1 + + if current_chunk: + output_filename = f"{args.output_name}_part{chunk_idx}.safetensors" + output_path = os.path.join(args.output, output_filename) + logger.info(f"Saving final chunk to: {output_path}") + st.save_file(current_chunk, output_path) + for key in current_chunk: + index["weight_map"][key] = output_filename + index["metadata"]["total_size"] += os.path.getsize(output_path) + + # Save index file + if not args.single_file: + index_path = os.path.join(args.output, "diffusion_pytorch_model.safetensors.index.json") + with open(index_path, "w", encoding="utf-8") as f: + json.dump(index, f, indent=2) + logger.info(f"Index file written to: {index_path}") + + if os.path.isdir(args.source) and args.copy_no_weight_files: + copy_non_weight_files(args.source, args.output) + + +def copy_non_weight_files(source_dir, target_dir): + ignore_extensions = [".pth", ".pt", ".safetensors", ".index.json"] + + logger.info(f"Start copying non-weighted files and subdirectories...") + + for item in tqdm(os.listdir(source_dir), desc="copy non-weighted file"): + source_item = os.path.join(source_dir, item) + target_item = os.path.join(target_dir, item) + + try: + if os.path.isdir(source_item): + os.makedirs(target_item, exist_ok=True) + copy_non_weight_files(source_item, target_item) + elif os.path.isfile(source_item) and not any(source_item.endswith(ext) for ext in ignore_extensions): + shutil.copy2(source_item, target_item) + logger.debug(f"copy file: {source_item} -> {target_item}") + except Exception as e: + logger.error(f"copy {source_item} : {str(e)}") + + logger.info(f"Non-weight files and subdirectories copied") + + +def main(): + parser = argparse.ArgumentParser(description="Model weight format converter") + parser.add_argument("-s", "--source", required=True, help="Input path (file or directory)") + parser.add_argument("-o_e", "--output_ext", default=".safetensors", choices=[".pth", ".safetensors"]) + parser.add_argument("-o_n", "--output_name", type=str, default="converted", help="Output file name") + parser.add_argument("-o", "--output", required=True, help="Output directory path") + parser.add_argument( + "-d", + "--direction", + choices=[None, "forward", "backward"], + default=None, + help="Conversion direction: forward = 'lightx2v' -> 'Diffusers', backward = reverse", + ) + parser.add_argument( + "-c", + "--chunk-size", + type=int, + default=100, + help="Chunk size for saving (only applies to forward), 0 = no chunking", + ) + parser.add_argument( + "-t", + "--model_type", + choices=["wan_dit", "hunyuan_dit", "wan_t5", "wan_clip", "wan_animate_dit", "qwen_image_dit", "qwen25vl_llm"], + default="wan_dit", + help="Model type", + ) + parser.add_argument("-b", "--save_by_block", action="store_true") + + # Quantization + parser.add_argument("--comfyui_mode", action="store_true") + parser.add_argument("--full_quantized", action="store_true") + parser.add_argument("--quantized", action="store_true") + parser.add_argument("--bits", type=int, default=8, choices=[8], help="Quantization bit width") + parser.add_argument( + "--device", + type=str, + default="cuda", + help="Device to use for quantization (cpu/cuda)", + ) + parser.add_argument( + "--linear_type", + type=str, + choices=["int8", "fp8", "nvfp4", "mxfp4", "mxfp6", "mxfp8"], + help="Quant type for linear", + ) + parser.add_argument( + "--non_linear_dtype", + type=str, + default="torch.float32", + choices=["torch.bfloat16", "torch.float16"], + help="Data type for non-linear", + ) + parser.add_argument("--lora_path", type=str, nargs="*", help="Path(s) to LoRA file(s). Can specify multiple paths separated by spaces.") + parser.add_argument( + "--lora_alpha", + type=float, + nargs="*", + default=None, + help="Alpha for LoRA weight scaling, Default non scaling. ", + ) + parser.add_argument( + "--lora_strength", + type=float, + nargs="*", + help="Additional strength factor(s) for LoRA deltas; default 1.0", + ) + parser.add_argument("--copy_no_weight_files", action="store_true") + parser.add_argument("--single_file", action="store_true", help="Save as a single safetensors file instead of chunking (warning: requires loading entire model in memory)") + parser.add_argument( + "--lora_key_convert", + choices=["auto", "same", "convert"], + default="auto", + help="How to handle LoRA key conversion: 'auto' (detect from LoRA), 'same' (use original keys), 'convert' (apply same conversion as model)", + ) + parser.add_argument("--parallel", action="store_true", default=True, help="Use parallel processing for faster conversion (default: True)") + parser.add_argument("--no-parallel", dest="parallel", action="store_false", help="Disable parallel processing") + args = parser.parse_args() + + # Validate conflicting arguments + if args.single_file and args.save_by_block: + parser.error("--single_file and --save_by_block cannot be used together. Choose one saving strategy.") + + if args.single_file and args.chunk_size > 0 and args.chunk_size != 100: + logger.warning("--chunk_size is ignored when using --single_file option.") + + if args.quantized: + args.linear_dtype = dtype_mapping.get(args.linear_type, None) + args.non_linear_dtype = eval(args.non_linear_dtype) + + model_type_keys_map = { + "qwen_image_dit": { + "key_idx": 2, + "target_keys": ["attn", "img_mlp", "txt_mlp", "txt_mod", "img_mod"], + "ignore_key": None, + "comfyui_keys": [ + "time_text_embed.timestep_embedder.linear_1.weight", + "time_text_embed.timestep_embedder.linear_2.weight", + "img_in.weight", + "txt_in.weight", + "norm_out.linear.weight", + "proj_out.weight", + ], + }, + "wan_dit": { + "key_idx": 2, + "target_keys": ["self_attn", "cross_attn", "ffn"], + "ignore_key": ["ca", "audio"], + }, + "wan_animate_dit": {"key_idx": 2, "target_keys": ["self_attn", "cross_attn", "ffn"], "adapter_keys": ["linear1_kv", "linear1_q", "linear2"], "ignore_key": None}, + "hunyuan_dit": { + "key_idx": 2, + "target_keys": [ + "img_mod", + "img_attn_q", + "img_attn_k", + "img_attn_v", + "img_attn_proj", + "img_mlp", + "txt_mod", + "txt_attn_q", + "txt_attn_k", + "txt_attn_v", + "txt_attn_proj", + "txt_mlp", + ], + "ignore_key": None, + }, + "wan_t5": {"key_idx": 2, "target_keys": ["attn", "ffn"], "ignore_key": None}, + "wan_clip": { + "key_idx": 3, + "target_keys": ["attn", "mlp"], + "ignore_key": ["textual"], + }, + "qwen25vl_llm": { + "key_idx": 3, + "target_keys": ["self_attn", "mlp"], + "ignore_key": ["visual"], + }, + } + + args.target_keys = model_type_keys_map[args.model_type]["target_keys"] + args.adapter_keys = model_type_keys_map[args.model_type]["adapter_keys"] if "adapter_keys" in model_type_keys_map[args.model_type] else None + args.key_idx = model_type_keys_map[args.model_type]["key_idx"] + args.ignore_key = model_type_keys_map[args.model_type]["ignore_key"] + args.comfyui_keys = model_type_keys_map[args.model_type]["comfyui_keys"] if "comfyui_keys" in model_type_keys_map[args.model_type] else None + + if os.path.isfile(args.output): + raise ValueError("Output path must be a directory, not a file") + + logger.info("Starting model weight conversion...") + convert_weights(args) + logger.info(f"Conversion completed! Files saved to: {args.output}") + + +if __name__ == "__main__": + main() diff --git a/tools/convert/lora_loader.py b/tools/convert/lora_loader.py new file mode 100644 index 0000000..61a61f8 --- /dev/null +++ b/tools/convert/lora_loader.py @@ -0,0 +1,448 @@ +""" +LoRA (Low-Rank Adaptation) loader with support for multiple format patterns. + +Supported formats: +- Standard: {key}.lora_up.weight and {key}.lora_down.weight +- Diffusers: {key}_lora.up.weight and {key}_lora.down.weight +- Diffusers v2: {key}.lora_B.weight and {key}.lora_A.weight (B=up, A=down) +- Diffusers v3: {key}.lora.up.weight and {key}.lora.down.weight +- Mochi: {key}.lora_B and {key}.lora_A (no .weight suffix) +- Transformers: {key}.lora_linear_layer.up.weight and {key}.lora_linear_layer.down.weight +- Qwen: {key}.lora_B.default.weight and {key}.lora_A.default.weight +""" + +import re +from enum import Enum +from typing import Dict, List, Optional, Tuple + +import torch +from loguru import logger + + +class LoRAFormat(Enum): + """Enum for different LoRA format patterns.""" + + STANDARD = "standard" + DIFFUSERS = "diffusers" + DIFFUSERS_V2 = "diffusers_v2" + DIFFUSERS_V3 = "diffusers_v3" + MOCHI = "mochi" + TRANSFORMERS = "transformers" + QWEN = "qwen" + + +class LoRAPatternDefinition: + """Defines a single LoRA format pattern and how to extract its components.""" + + def __init__( + self, + format_name: LoRAFormat, + up_suffix: str, + down_suffix: str, + has_weight_suffix: bool = True, + mid_suffix: Optional[str] = None, + ): + """ + Args: + format_name: The LoRA format type + up_suffix: Suffix for the up (B) weight matrix (e.g., ".lora_up.weight") + down_suffix: Suffix for the down (A) weight matrix (e.g., ".lora_down.weight") + has_weight_suffix: Whether the format includes .weight suffix + mid_suffix: Optional suffix for mid weight (only used in standard format) + """ + self.format_name = format_name + self.up_suffix = up_suffix + self.down_suffix = down_suffix + self.has_weight_suffix = has_weight_suffix + self.mid_suffix = mid_suffix + + def get_base_key(self, key: str, detected_suffix: str) -> Optional[str]: + """Extract base key by removing the detected suffix.""" + if key.endswith(detected_suffix): + return key[: -len(detected_suffix)] + return None + + +class LoRAPatternMatcher: + """Detects and matches LoRA format patterns in state dicts.""" + + def __init__(self): + """Initialize the pattern matcher with all supported formats.""" + self.patterns: Dict[LoRAFormat, LoRAPatternDefinition] = { + LoRAFormat.STANDARD: LoRAPatternDefinition( + LoRAFormat.STANDARD, + up_suffix=".lora_up.weight", + down_suffix=".lora_down.weight", + mid_suffix=".lora_mid.weight", + ), + LoRAFormat.DIFFUSERS: LoRAPatternDefinition( + LoRAFormat.DIFFUSERS, + up_suffix="_lora.up.weight", + down_suffix="_lora.down.weight", + ), + LoRAFormat.DIFFUSERS_V2: LoRAPatternDefinition( + LoRAFormat.DIFFUSERS_V2, + up_suffix=".lora_B.weight", + down_suffix=".lora_A.weight", + ), + LoRAFormat.DIFFUSERS_V3: LoRAPatternDefinition( + LoRAFormat.DIFFUSERS_V3, + up_suffix=".lora.up.weight", + down_suffix=".lora.down.weight", + ), + LoRAFormat.MOCHI: LoRAPatternDefinition( + LoRAFormat.MOCHI, + up_suffix=".lora_B", + down_suffix=".lora_A", + has_weight_suffix=False, + ), + LoRAFormat.TRANSFORMERS: LoRAPatternDefinition( + LoRAFormat.TRANSFORMERS, + up_suffix=".lora_linear_layer.up.weight", + down_suffix=".lora_linear_layer.down.weight", + ), + LoRAFormat.QWEN: LoRAPatternDefinition( + LoRAFormat.QWEN, + up_suffix=".lora_B.default.weight", + down_suffix=".lora_A.default.weight", + ), + } + + def detect_format(self, key: str, lora_weights: Dict) -> Optional[Tuple[LoRAFormat, str]]: + """ + Detect the LoRA format of a given key. + + Args: + key: The weight key to check + lora_weights: The full LoRA weights dictionary + + Returns: + Tuple of (LoRAFormat, detected_suffix) if format detected, None otherwise + """ + for format_type, pattern in self.patterns.items(): + if key.endswith(pattern.up_suffix): + return (format_type, pattern.up_suffix) + return None + + def extract_lora_pair( + self, + key: str, + lora_weights: Dict, + lora_alphas: Dict, + ) -> Optional[Dict]: + """ + Extract a complete LoRA pair (up and down weights) from the state dict. + + Args: + key: The up weight key + lora_weights: The full LoRA weights dictionary + lora_alphas: Dictionary of alpha values by base key + + Returns: + Dictionary with extracted LoRA information, or None if pair is incomplete + """ + format_detected = self.detect_format(key, lora_weights) + if format_detected is None: + return None + + format_type, up_suffix = format_detected + pattern = self.patterns[format_type] + + # Extract base key + base_key = pattern.get_base_key(key, up_suffix) + if base_key is None: + return None + + # Check if down weight exists + down_key = base_key + pattern.down_suffix + if down_key not in lora_weights: + return None + + # Check for mid weight (only for standard format) + mid_key = None + if pattern.mid_suffix: + mid_key = base_key + pattern.mid_suffix + if mid_key not in lora_weights: + mid_key = None + + # Get alpha value + alpha = lora_alphas.get(base_key, None) + + return { + "format": format_type, + "base_key": base_key, + "up_key": key, + "down_key": down_key, + "mid_key": mid_key, + "alpha": alpha, + } + + +class LoRALoader: + """Loads and applies LoRA weights to model weights using pattern matching.""" + + def __init__(self, key_mapping_rules: Optional[List[Tuple[str, str]]] = None): + """ + Args: + key_mapping_rules: Optional list of (pattern, replacement) regex rules for key mapping + """ + self.pattern_matcher = LoRAPatternMatcher() + self.key_mapping_rules = key_mapping_rules or [] + self._compile_rules() + + def _compile_rules(self): + """Pre-compile regex patterns for better performance.""" + self.compiled_rules = [(re.compile(pattern), replacement) for pattern, replacement in self.key_mapping_rules] + + def _apply_key_mapping(self, key: str) -> str: + """Apply key mapping rules to a key.""" + for pattern, replacement in self.compiled_rules: + key = pattern.sub(replacement, key) + return key + + def _get_model_key( + self, + lora_key: str, + base_key: str, + suffix_to_remove: str, + suffix_to_add: str = ".weight", + ) -> Optional[str]: + """ + Extract the model weight key from LoRA key with proper prefix handling. + + Args: + lora_key: The original LoRA key + base_key: The base key after removing LoRA suffix + suffix_to_remove: The suffix that was removed + suffix_to_add: The suffix to add for model key + + Returns: + The model key, or None if extraction fails + """ + # For Qwen models, keep transformer_blocks prefix + if base_key.startswith("transformer_blocks.") and len(base_key.split(".")) > 1: + if base_key.split(".")[1].isdigit(): + # Keep the full path for Qwen models + model_key = base_key + suffix_to_add + else: + # Remove common prefixes for other models + model_key = self._remove_prefixes(base_key) + suffix_to_add + else: + # Remove common prefixes for other models + model_key = self._remove_prefixes(base_key) + suffix_to_add + + # Apply key mapping rules if provided + if self.compiled_rules: + model_key = self._apply_key_mapping(model_key) + + return model_key + + @staticmethod + def _remove_prefixes(key: str) -> str: + """Remove common model prefixes from a key.""" + prefixes_to_remove = ["diffusion_model.", "model.", "unet."] + for prefix in prefixes_to_remove: + if key.startswith(prefix): + return key[len(prefix) :] + return key + + def extract_lora_alphas(self, lora_weights: Dict) -> Dict: + """Extract LoRA alpha values from the state dict.""" + lora_alphas = {} + for key in lora_weights.keys(): + if key.endswith(".alpha"): + base_key = key[:-6] # Remove .alpha + lora_alphas[base_key] = lora_weights[key].item() + return lora_alphas + + def extract_lora_pairs(self, lora_weights: Dict) -> Dict[str, Dict]: + """ + Extract all LoRA pairs from the state dict, mapping to model keys. + + Args: + lora_weights: The LoRA state dictionary + + Returns: + Dictionary mapping model keys to LoRA pair information + """ + lora_alphas = self.extract_lora_alphas(lora_weights) + lora_pairs = {} + + for key in lora_weights.keys(): + # Skip alpha parameters + if key.endswith(".alpha"): + continue + + # Try to extract LoRA pair + pair_info = self.pattern_matcher.extract_lora_pair(key, lora_weights, lora_alphas) + if pair_info is None: + continue + + # Determine the suffix to remove and add based on format + format_type = pair_info["format"] + pattern = self.pattern_matcher.patterns[format_type] + + # Get the model key + model_key = self._get_model_key( + pair_info["up_key"], + pair_info["base_key"], + pattern.up_suffix, + ".weight", + ) + + if model_key is None: + logger.warning(f"Failed to extract model key from LoRA key: {key}") + continue + + lora_pairs[model_key] = pair_info + + return lora_pairs + + def extract_lora_diffs(self, lora_weights: Dict) -> Dict[str, Dict]: + """ + Extract diff-style LoRA weights (direct addition, not matrix multiplication). + + Args: + lora_weights: The LoRA state dictionary + + Returns: + Dictionary mapping model keys to diff information + """ + lora_diffs = {} + + # Define diff patterns: (suffix_to_check, suffix_to_remove, suffix_to_add) + diff_patterns = [ + (".diff", ".diff", ".weight"), + (".diff_b", ".diff_b", ".bias"), + (".diff_m", ".diff_m", ".modulation"), + ] + + for key in lora_weights.keys(): + for check_suffix, remove_suffix, add_suffix in diff_patterns: + if key.endswith(check_suffix): + base_key = key[: -len(remove_suffix)] + model_key = self._get_model_key(key, base_key, remove_suffix, add_suffix) + + if model_key: + lora_diffs[model_key] = { + "diff_key": key, + "type": check_suffix, + } + break + + return lora_diffs + + def apply_lora( + self, + weight_dict: Dict[str, torch.Tensor], + lora_weights: Dict[str, torch.Tensor], + alpha: float = None, + strength: float = 1.0, + ) -> int: + """ + Apply LoRA weights to model weights. + + Args: + weight_dict: The model weights dictionary (will be modified in place) + lora_weights: The LoRA weights dictionary + alpha: Global alpha scaling factor + strength: Additional strength factor for LoRA deltas + + Returns: + Number of LoRA weights successfully applied + """ + # Extract LoRA pairs, diffs, and alphas + lora_pairs = self.extract_lora_pairs(lora_weights) + lora_diffs = self.extract_lora_diffs(lora_weights) + + applied_count = 0 + used_lora_keys = set() + + # Apply LoRA pairs (matrix multiplication) + for model_key, pair_info in lora_pairs.items(): + if model_key not in weight_dict: + logger.debug(f"Model key not found: {model_key}") + continue + + param = weight_dict[model_key] + up_key = pair_info["up_key"] + down_key = pair_info["down_key"] + + # Track used keys + used_lora_keys.add(up_key) + used_lora_keys.add(down_key) + if pair_info["mid_key"]: + used_lora_keys.add(pair_info["mid_key"]) + + try: + lora_up = lora_weights[up_key].to(param.device, param.dtype) + lora_down = lora_weights[down_key].to(param.device, param.dtype) + + # Get LoRA-specific alpha if available, otherwise use global alpha + # Apply LoRA: W' = W + (alpha/rank) * B @ A + # where B = up (out_features, rank), A = down (rank, in_features) + if pair_info["alpha"]: + lora_scale = pair_info["alpha"] / lora_down.shape[0] + elif alpha is not None: + lora_scale = alpha / lora_down.shape[0] + else: + lora_scale = 1 + + if len(lora_down.shape) == 2 and len(lora_up.shape) == 2: + lora_delta = torch.mm(lora_up, lora_down) * lora_scale + if strength is not None: + lora_delta = lora_delta * float(strength) + + param.data += lora_delta + applied_count += 1 + logger.debug(f"Applied LoRA to {model_key} with lora_scale={lora_scale}") + else: + logger.warning(f"Unexpected LoRA shape for {model_key}: down={lora_down.shape}, up={lora_up.shape}") + + except Exception as e: + logger.warning(f"Failed to apply LoRA pair for {model_key}: {e}") + logger.warning(f" Shapes - param: {param.shape}, down: {lora_weights[down_key].shape}, up: {lora_weights[up_key].shape}") + + # Apply diff weights (direct addition) + for model_key, diff_info in lora_diffs.items(): + if model_key not in weight_dict: + logger.debug(f"Model key not found for diff: {model_key}") + continue + + param = weight_dict[model_key] + diff_key = diff_info["diff_key"] + + # Track used keys + used_lora_keys.add(diff_key) + + try: + lora_diff = lora_weights[diff_key].to(param.device, param.dtype) + if alpha is not None: + param.data += lora_diff * alpha * (float(strength) if strength is not None else 1.0) + else: + param.data += lora_diff * (float(strength) if strength is not None else 1.0) + applied_count += 1 + logger.debug(f"Applied LoRA diff to {model_key} (type: {diff_info['type']})") + except Exception as e: + logger.warning(f"Failed to apply LoRA diff for {model_key}: {e}") + + # Warn about unused keys + all_lora_keys = set(k for k in lora_weights.keys() if not k.endswith(".alpha")) + unused_lora_keys = all_lora_keys - used_lora_keys + + if unused_lora_keys: + logger.warning(f"Found {len(unused_lora_keys)} unused LoRA weights - this may indicate key mismatch:") + for key in list(unused_lora_keys)[:10]: # Show first 10 + logger.warning(f" Unused: {key}") + if len(unused_lora_keys) > 10: + logger.warning(f" ... and {len(unused_lora_keys) - 10} more") + + logger.info(f"Applied {applied_count} LoRA weight adjustments out of {len(lora_pairs) + len(lora_diffs)} possible") + + if applied_count == 0 and (lora_pairs or lora_diffs): + logger.error("No LoRA weights were applied! Check for key name mismatches.") + logger.info("Model weight keys sample: " + str(list(weight_dict.keys())[:5])) + logger.info("LoRA pairs keys sample: " + str(list(lora_pairs.keys())[:5])) + logger.info("LoRA diffs keys sample: " + str(list(lora_diffs.keys())[:5])) + + return applied_count diff --git a/tools/convert/quant/__init__.py b/tools/convert/quant/__init__.py new file mode 100644 index 0000000..79b37f9 --- /dev/null +++ b/tools/convert/quant/__init__.py @@ -0,0 +1 @@ +from .quant import * diff --git a/tools/convert/quant/quant.py b/tools/convert/quant/quant.py new file mode 100644 index 0000000..c2a6c93 --- /dev/null +++ b/tools/convert/quant/quant.py @@ -0,0 +1,141 @@ +from abc import ABCMeta + +import torch +# from qtorch.quant import float_quantize + +from lightx2v.utils.registry_factory import CONVERT_WEIGHT_REGISTER + +try: + from lightx2v_kernel.gemm import scaled_mxfp4_quant, scaled_mxfp6_quant, scaled_mxfp8_quant, scaled_nvfp4_quant +except ImportError: + pass + + +class QuantTemplate(metaclass=ABCMeta): + def __init__(self, weight): + if weight.dim() != 2: + raise ValueError(f"Only 2D tensors supported. Got {weight.dim()}D tensor") + if torch.isnan(weight).any(): + raise ValueError("Tensor contains NaN values") + + self.weight_quant_func = None + self.extra = {} + + +@CONVERT_WEIGHT_REGISTER("int8") +class QuantWeightINT8(QuantTemplate): + def __init__(self, weight): + super().__init__(weight) + self.weight_quant_func = self.load_int8_weight + + @torch.no_grad() + def load_int8_weight(self, w, comfyui_mode=False): + org_w_shape = w.shape + if not comfyui_mode: + max_val = w.abs().amax(dim=1, keepdim=True).clamp(min=1e-5) + else: + max_val = w.abs().max() + qmin, qmax = -128, 127 + scales = max_val / qmax + w_q = torch.clamp(torch.round(w / scales), qmin, qmax).to(torch.int8) + + assert torch.isnan(scales).sum() == 0 + assert torch.isnan(w_q).sum() == 0 + + if not comfyui_mode: + scales = scales.view(org_w_shape[0], -1) + w_q = w_q.reshape(org_w_shape) + + return w_q, scales, self.extra + + +@CONVERT_WEIGHT_REGISTER("fp8") +class QuantWeightFP8(QuantTemplate): + def __init__(self, weight): + super().__init__(weight) + self.weight_quant_func = self.load_fp8_weight + + @torch.no_grad() + def load_fp8_weight(self, w, comfyui_mode=False): + org_w_shape = w.shape + if not comfyui_mode: + max_val = w.abs().amax(dim=1, keepdim=True).clamp(min=1e-5) + else: + max_val = w.abs().max() + finfo = torch.finfo(torch.float8_e4m3fn) + qmin, qmax = finfo.min, finfo.max + scales = max_val / qmax + scaled_tensor = w / scales + scaled_tensor = torch.clip(scaled_tensor, qmin, qmax) + w_q = float_quantize(scaled_tensor.float(), 4, 3, rounding="nearest").to(torch.float8_e4m3fn) + + assert torch.isnan(scales).sum() == 0 + assert torch.isnan(w_q).sum() == 0 + + if not comfyui_mode: + scales = scales.view(org_w_shape[0], -1) + w_q = w_q.reshape(org_w_shape) + + return w_q, scales, self.extra + + +@CONVERT_WEIGHT_REGISTER("mxfp4") +class QuantWeightMxFP4(QuantTemplate): + def __init__(self, weight): + super().__init__(weight) + self.weight_quant_func = self.load_mxfp4_weight + + @torch.no_grad() + def load_mxfp4_weight(self, w, comfyui_mode=False): + device = w.device + w = w.cuda().to(torch.bfloat16) + w_q, scales = scaled_mxfp4_quant(w) + w_q, scales = w_q.to(device), scales.to(device) + return w_q, scales, self.extra + + +@CONVERT_WEIGHT_REGISTER("mxfp6") +class QuantWeightMxFP6(QuantTemplate): + def __init__(self, weight): + super().__init__(weight) + self.weight_quant_func = self.load_mxfp6_weight + + @torch.no_grad() + def load_mxfp6_weight(self, w, comfyui_mode=False): + device = w.device + w = w.cuda().to(torch.bfloat16) + w_q, scales = scaled_mxfp6_quant(w) + w_q, scales = w_q.to(device), scales.to(device) + return w_q, scales, self.extra + + +@CONVERT_WEIGHT_REGISTER("mxfp8") +class QuantWeightMxFP8(QuantTemplate): + def __init__(self, weight): + super().__init__(weight) + self.weight_quant_func = self.load_mxfp8_weight + + @torch.no_grad() + def load_mxfp8_weight(self, w, comfyui_mode=False): + device = w.device + w = w.cuda().to(torch.bfloat16) + w_q, scales = scaled_mxfp8_quant(w) + w_q, scales = w_q.to(device), scales.to(device) + return w_q, scales, self.extra + + +@CONVERT_WEIGHT_REGISTER("nvfp4") +class QuantWeightNVFP4(QuantTemplate): + def __init__(self, weight): + super().__init__(weight) + self.weight_quant_func = self.load_fp4_weight + + @torch.no_grad() + def load_fp4_weight(self, w, comfyui_mode=False): + device = w.device + w = w.cuda().to(torch.bfloat16) + weight_global_scale = (2688.0 / torch.max(torch.abs(w))).to(torch.float32) + w_q, scales = scaled_nvfp4_quant(w, weight_global_scale) + w_q, scales = w_q.to(device), scales.to(device) + self.extra["weight_global_scale"] = weight_global_scale.to(device) + return w_q, scales, self.extra diff --git a/tools/convert/quant_adapter.py b/tools/convert/quant_adapter.py new file mode 100644 index 0000000..8355919 --- /dev/null +++ b/tools/convert/quant_adapter.py @@ -0,0 +1,75 @@ +import argparse +import sys +from pathlib import Path + +import safetensors +import torch +from safetensors.torch import save_file + +sys.path.append(str(Path(__file__).parent.parent.parent)) + +from lightx2v.utils.quant_utils import FloatQuantizer +from tools.convert.quant import * + + +def main(): + # 获取脚本所在目录 + script_dir = Path(__file__).parent + project_root = script_dir.parent.parent + + parser = argparse.ArgumentParser(description="Quantize audio adapter model to FP8") + parser.add_argument( + "--model_path", + type=str, + default=str(project_root / "models" / "SekoTalk-Distill" / "audio_adapter_model.safetensors"), + help="Path to input model file", + ) + parser.add_argument( + "--output_path", + type=str, + default=str(project_root / "models" / "SekoTalk-Distill-fp8" / "audio_adapter_model_fp8.safetensors"), + help="Path to output quantized model file", + ) + args = parser.parse_args() + + model_path = Path(args.model_path) + output_path = Path(args.output_path) + + output_path.parent.mkdir(parents=True, exist_ok=True) + + state_dict = {} + with safetensors.safe_open(model_path, framework="pt", device="cpu") as f: + for key in f.keys(): + state_dict[key] = f.get_tensor(key) + + new_state_dict = {} + + for key in state_dict.keys(): + if key.startswith("ca") and ".to" in key and "weight" in key: + print(f"Converting {key} to FP8, dtype: {state_dict[key].dtype}") + + ## fp8 + weight = state_dict[key].to(torch.float32).cuda() + w_quantizer = FloatQuantizer("e4m3", True, "per_channel") + weight, weight_scale, _ = w_quantizer.real_quant_tensor(weight) + weight = weight.to(torch.float8_e4m3fn) + weight_scale = weight_scale.to(torch.float32) + + ## QuantWeightMxFP4, QuantWeightMxFP6, QuantWeightMxFP8 for mxfp4,mxfp6,mxfp8 + # weight = state_dict[key].to(torch.bfloat16).cuda() + # quantizer = QuantWeightMxFP4(weight) + # weight, weight_scale, _ = quantizer.weight_quant_func(weight) + + new_state_dict[key] = weight.cpu() + new_state_dict[key + "_scale"] = weight_scale.cpu() + else: + # 不匹配的权重转换为BF16 + print(f"Converting {key} to BF16, dtype: {state_dict[key].dtype}") + new_state_dict[key] = state_dict[key].to(torch.bfloat16) + + save_file(new_state_dict, str(output_path)) + print(f"Quantized model saved to: {output_path}") + + +if __name__ == "__main__": + main() diff --git a/tools/convert/readme.md b/tools/convert/readme.md new file mode 100644 index 0000000..16f03c2 --- /dev/null +++ b/tools/convert/readme.md @@ -0,0 +1,445 @@ +# Model Conversion Tool + +A powerful model weight conversion tool that supports format conversion, quantization, LoRA merging, and more. + +## Main Features + +- **Format Conversion**: Support PyTorch (.pth) and SafeTensors (.safetensors) format conversion +- **Model Quantization**: Support INT8, FP8, NVFP4, MXFP4, MXFP6 and MXFP8 quantization to significantly reduce model size +- **Architecture Conversion**: Support conversion between LightX2V and Diffusers architectures +- **LoRA Merging**: Support loading and merging multiple LoRA formats +- **Multi-Model Support**: Support Wan DiT, Qwen Image DiT, T5, CLIP, etc. +- **Flexible Saving**: Support single file, block-based, and chunked saving methods +- **Parallel Processing**: Support parallel acceleration for large model conversion + +## Supported Model Types + +- `hunyuan_dit`: hunyuan DiT 1.5 models +- `wan_dit`: Wan DiT series models (default) +- `wan_animate_dit`: Wan Animate DiT models +- `qwen_image_dit`: Qwen Image DiT models +- `wan_t5`: Wan T5 text encoder +- `wan_clip`: Wan CLIP vision encoder + +## Core Parameters + +### Basic Parameters + +- `-s, --source`: Input path (file or directory) +- `-o, --output`: Output directory path +- `-o_e, --output_ext`: Output format, `.pth` or `.safetensors` (default) +- `-o_n, --output_name`: Output file name (default: `converted`) +- `-t, --model_type`: Model type (default: `wan_dit`) + +### Architecture Conversion Parameters + +- `-d, --direction`: Conversion direction + - `None`: No architecture conversion (default) + - `forward`: LightX2V → Diffusers + - `backward`: Diffusers → LightX2V + +### Quantization Parameters + +- `--quantized`: Enable quantization +- `--bits`: Quantization bit width, currently only supports 8-bit +- `--linear_type`: Linear layer quantization type + - `int8`: INT8 quantization (torch.int8) + - `fp8`: FP8 quantization (torch.float8_e4m3fn) + - `nvfp4`: NVFP4 quantization + - `mxfp4`: MXFP4 quantization + - `mxfp6`: MXFP6 quantization + - `mxfp8`: MXFP8 quantization +- `--non_linear_dtype`: Non-linear layer data type + - `torch.bfloat16`: BF16 + - `torch.float16`: FP16 + - `torch.float32`: FP32 (default) +- `--device`: Device for quantization, `cpu` or `cuda` (default) +- `--comfyui_mode`: ComfyUI compatible mode (only int8 and fp8) +- `--full_quantized`: Full quantization mode (effective in ComfyUI mode) +For nvfp4, mxfp4, mxfp6 and mxfp8, please install them fllowing LightX2V/lightx2v_kernel/README.md. + +### LoRA Parameters + +- `--lora_path`: LoRA file path(s), supports multiple (separated by spaces) +- `--lora_strength`: LoRA strength coefficients, supports multiple (default: 1.0) +- `--alpha`: LoRA alpha parameters, supports multiple +- `--lora_key_convert`: LoRA key conversion mode + - `auto`: Auto-detect (default) + - `same`: Use original key names + - `convert`: Apply same conversion as model + +### Saving Parameters + +- `--single_file`: Save as single file (note: large models consume significant memory) +- `-b, --save_by_block`: Save by blocks (recommended for backward conversion) +- `-c, --chunk-size`: Chunk size (default: 100, 0 means no chunking) +- `--copy_no_weight_files`: Copy non-weight files from source directory + +### Performance Parameters + +- `--parallel`: Enable parallel processing (default: True) +- `--no-parallel`: Disable parallel processing + +## Supported LoRA Formats + +The tool automatically detects and supports the following LoRA formats: + +1. **Standard**: `{key}.lora_up.weight` and `{key}.lora_down.weight` +2. **Diffusers**: `{key}_lora.up.weight` and `{key}_lora.down.weight` +3. **Diffusers V2**: `{key}.lora_B.weight` and `{key}.lora_A.weight` +4. **Diffusers V3**: `{key}.lora.up.weight` and `{key}.lora.down.weight` +5. **Mochi**: `{key}.lora_B` and `{key}.lora_A` (no .weight suffix) +6. **Transformers**: `{key}.lora_linear_layer.up.weight` and `{key}.lora_linear_layer.down.weight` +7. **Qwen**: `{key}.lora_B.default.weight` and `{key}.lora_A.default.weight` + +Additionally supports diff formats: +- `.diff`: Weight diff +- `.diff_b`: Bias diff +- `.diff_m`: Modulation diff + +## Usage Examples + +### 1. Model Quantization + +#### 1.1 Wan DiT Quantization to INT8 + +**Multiple safetensors, saved by dit blocks** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan_int8 \ + --linear_type int8 \ + --model_type wan_dit \ + --quantized \ + --save_by_block +``` + +**Single safetensor file** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_int8_lightx2v \ + --linear_type int8 \ + --model_type wan_dit \ + --quantized \ + --single_file +``` + +#### 1.2 Wan DiT Quantization to FP8 + +**Multiple safetensors, saved by dit blocks** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan_fp8 \ + --linear_type fp8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --save_by_block +``` + +**Single safetensor file** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v \ + --linear_type fp8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --single_file +``` + +**ComfyUI scaled_fp8 format** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_comfyui \ + --linear_type fp8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --single_file \ + --comfyui_mode +``` + +**ComfyUI full FP8 format** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_comfyui \ + --linear_type fp8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --single_file \ + --comfyui_mode \ + --full_quantized +``` + +> **Tip**: For other DIT models, simply switch the `--model_type` parameter + +#### 1.3 T5 Encoder Quantization + +**INT8 Quantization** +```bash +python converter.py \ + --source /path/to/models_t5_umt5-xxl-enc-bf16.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_t5_umt5-xxl-enc-int8 \ + --linear_type int8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_t5 \ + --quantized +``` + +**FP8 Quantization** +```bash +python converter.py \ + --source /path/to/models_t5_umt5-xxl-enc-bf16.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_t5_umt5-xxl-enc-fp8 \ + --linear_type fp8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_t5 \ + --quantized +``` + +#### 1.4 CLIP Encoder Quantization + +**INT8 Quantization** +```bash +python converter.py \ + --source /path/to/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_clip_open-clip-xlm-roberta-large-vit-huge-14-int8 \ + --linear_type int8 \ + --non_linear_dtype torch.float16 \ + --model_type wan_clip \ + --quantized +``` + +**FP8 Quantization** +```bash +python converter.py \ + --source /path/to/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_clip_open-clip-xlm-roberta-large-vit-huge-14-fp8 \ + --linear_type fp8 \ + --non_linear_dtype torch.float16 \ + --model_type wan_clip \ + --quantized +``` + + + +#### 1.5 Qwen25_vl llm Quantization + +**INT8 Quantization** +```bash +python converter.py \ + --source /path/to/hunyuanvideo-1.5/text_encoder/llm \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name qwen25vl-llm-int8 \ + --linear_dtype torch.int8 \ + --non_linear_dtype torch.float16 \ + --model_type qwen25vl_llm \ + --quantized \ + --single_file +``` + +**FP8 Quantization** +```bash +python converter.py \ + --source /path/to/hunyuanvideo-1.5/text_encoder/llm \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name qwen25vl-llm-fp8 \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.float16 \ + --model_type qwen25vl_llm \ + --quantized \ + --single_file +``` + +### 2. LoRA Merging + +#### 2.1 Merge Single LoRA + +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_model \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --single_file +``` + +#### 2.2 Merge Multiple LoRAs + +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_model \ + --model_type wan_dit \ + --lora_path /path/to/lora1.safetensors /path/to/lora2.safetensors \ + --lora_strength 1.0 0.8 \ + --single_file +``` + +#### 2.3 LoRA Merging with Quantization + +**LoRA Merge → FP8 Quantization** +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_quantized \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --quantized \ + --linear_type fp8 \ + --single_file +``` + +**LoRA Merge → ComfyUI scaled_fp8** +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_quantized \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --quantized \ + --linear_type fp8 \ + --single_file \ + --comfyui_mode +``` + +**LoRA Merge → ComfyUI Full FP8** +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_quantized \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --quantized \ + --linear_type fp8 \ + --single_file \ + --comfyui_mode \ + --full_quantized +``` + +#### 2.4 LoRA Key Conversion Modes + +**Auto-detect mode (recommended)** +```bash +python converter.py \ + --source /path/to/model/ \ + --output /path/to/output \ + --lora_path /path/to/lora.safetensors \ + --lora_key_convert auto \ + --single_file +``` + +**Use original key names (LoRA already in target format)** +```bash +python converter.py \ + --source /path/to/model/ \ + --output /path/to/output \ + --direction forward \ + --lora_path /path/to/lora.safetensors \ + --lora_key_convert same \ + --single_file +``` + +**Apply conversion (LoRA in source format)** +```bash +python converter.py \ + --source /path/to/model/ \ + --output /path/to/output \ + --direction forward \ + --lora_path /path/to/lora.safetensors \ + --lora_key_convert convert \ + --single_file +``` + +### 3. Architecture Format Conversion + +#### 3.1 LightX2V → Diffusers + +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P \ + --output /path/to/Wan2.1-I2V-14B-480P-Diffusers \ + --output_ext .safetensors \ + --model_type wan_dit \ + --direction forward \ + --chunk-size 100 +``` + +#### 3.2 Diffusers → LightX2V + +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P-Diffusers \ + --output /path/to/Wan2.1-I2V-14B-480P \ + --output_ext .safetensors \ + --model_type wan_dit \ + --direction backward \ + --save_by_block +``` + +### 4. Format Conversion + +#### 4.1 .pth → .safetensors + +```bash +python converter.py \ + --source /path/to/model.pth \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name model \ + --single_file +``` + +#### 4.2 Multiple .safetensors → Single File + +```bash +python converter.py \ + --source /path/to/model_directory/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_model \ + --single_file +``` diff --git a/tools/convert/readme_zh.md b/tools/convert/readme_zh.md new file mode 100644 index 0000000..6c5d0d0 --- /dev/null +++ b/tools/convert/readme_zh.md @@ -0,0 +1,438 @@ +# 模型转换工具 + +这是一个功能强大的模型权重转换工具,支持格式转换、量化、LoRA融合等多种功能。 + +## 主要特性 + +- **格式转换**: 支持 PyTorch (.pth) 和 SafeTensors (.safetensors) 格式互转 +- **模型量化**: 支持 INT8 和 FP8 量化,显著减小模型体积 +- **架构转换**: 支持 LightX2V 和 Diffusers 架构互转 +- **LoRA 融合**: 支持多种 LoRA 格式的加载和融合 +- **多模型支持**: 支持 Wan DiT、Qwen Image DiT、T5、CLIP 等 +- **灵活保存**: 支持单文件、按块、分块等多种保存方式 +- **并行处理**: 大模型转换支持并行加速 + +## 支持的模型类型 + +- `hunyuan_dit`: hunyuan DiT 1.5模型 +- `wan_dit`: Wan DiT 系列模型(默认) +- `wan_animate_dit`: Wan Animate DiT 模型 +- `qwen_image_dit`: Qwen Image DiT 模型 +- `wan_t5`: Wan T5 文本编码器 +- `wan_clip`: Wan CLIP 视觉编码器 + +## 核心参数说明 + +### 基础参数 + +- `-s, --source`: 输入路径(文件或目录) +- `-o, --output`: 输出目录路径 +- `-o_e, --output_ext`: 输出格式,可选 `.pth` 或 `.safetensors`(默认) +- `-o_n, --output_name`: 输出文件名(默认: `converted`) +- `-t, --model_type`: 模型类型(默认: `wan_dit`) + +### 架构转换参数 + +- `-d, --direction`: 转换方向 + - `None`: 不进行架构转换(默认) + - `forward`: LightX2V → Diffusers + - `backward`: Diffusers → LightX2V + +### 量化参数 + +- `--quantized`: 启用量化 +- `--bits`: 量化位宽,当前仅支持 8 位 +- `--linear_dtype`: 线性层量化类型 + - `torch.int8`: INT8 量化 + - `torch.float8_e4m3fn`: FP8 量化 +- `--non_linear_dtype`: 非线性层数据类型 + - `torch.bfloat16`: BF16 + - `torch.float16`: FP16 + - `torch.float32`: FP32(默认) +- `--device`: 量化使用的设备,可选 `cpu` 或 `cuda`(默认) +- `--comfyui_mode`: ComfyUI 兼容模式 +- `--full_quantized`: 全量化模式(ComfyUI 模式下有效) + +### LoRA 参数 + +- `--lora_path`: LoRA 文件路径,支持多个(用空格分隔) +- `--lora_strength`: LoRA 强度系数,支持多个(默认: 1.0) +- `--alpha`: LoRA alpha 参数,支持多个 +- `--lora_key_convert`: LoRA 键转换模式 + - `auto`: 自动检测(默认) + - `same`: 使用原始键名 + - `convert`: 应用与模型相同的转换 + +### 保存参数 + +- `--single_file`: 保存为单个文件(注意: 大模型会消耗大量内存) +- `-b, --save_by_block`: 按块保存(推荐用于 backward 转换) +- `-c, --chunk-size`: 分块大小(默认: 100,0 表示不分块) +- `--copy_no_weight_files`: 复制源目录中的非权重文件 + +### 性能参数 + +- `--parallel`: 启用并行处理(默认: True) +- `--no-parallel`: 禁用并行处理 + +## 支持的 LoRA 格式 + +工具自动检测并支持以下 LoRA 格式: + +1. **Standard**: `{key}.lora_up.weight` 和 `{key}.lora_down.weight` +2. **Diffusers**: `{key}_lora.up.weight` 和 `{key}_lora.down.weight` +3. **Diffusers V2**: `{key}.lora_B.weight` 和 `{key}.lora_A.weight` +4. **Diffusers V3**: `{key}.lora.up.weight` 和 `{key}.lora.down.weight` +5. **Mochi**: `{key}.lora_B` 和 `{key}.lora_A`(无 .weight 后缀) +6. **Transformers**: `{key}.lora_linear_layer.up.weight` 和 `{key}.lora_linear_layer.down.weight` +7. **Qwen**: `{key}.lora_B.default.weight` 和 `{key}.lora_A.default.weight` + +此外还支持差值(diff)格式: +- `.diff`: 权重差值 +- `.diff_b`: bias 差值 +- `.diff_m`: modulation 差值 + +## 使用示例 + +### 1. 模型量化 + +#### 1.1 Wan DiT 量化为 INT8 + +**多个 safetensors,按 dit block 存储** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan_int8 \ + --linear_dtype torch.int8 \ + --model_type wan_dit \ + --quantized \ + --save_by_block +``` + +**单个 safetensor 文件** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_int8_lightx2v \ + --linear_dtype torch.int8 \ + --model_type wan_dit \ + --quantized \ + --single_file +``` + +#### 1.2 Wan DiT 量化为 FP8 + +**多个 safetensors,按 dit block 存储** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan_fp8 \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --save_by_block +``` + +**单个 safetensor 文件** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --single_file +``` + +**ComfyUI 的 scaled_fp8 格式** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_comfyui \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --single_file \ + --comfyui_mode +``` + +**ComfyUI 的全 FP8 格式** +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name wan2.1_i2v_480p_scaled_fp8_e4m3_lightx2v_comfyui \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_dit \ + --quantized \ + --single_file \ + --comfyui_mode \ + --full_quantized +``` + +> **提示**: 对于其他 DIT 模型,切换 `--model_type` 参数即可 + +#### 1.3 T5 编码器量化 + +**INT8 量化** +```bash +python converter.py \ + --source /path/to/models_t5_umt5-xxl-enc-bf16.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_t5_umt5-xxl-enc-int8 \ + --linear_dtype torch.int8 \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_t5 \ + --quantized +``` + +**FP8 量化** +```bash +python converter.py \ + --source /path/to/models_t5_umt5-xxl-enc-bf16.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_t5_umt5-xxl-enc-fp8 \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.bfloat16 \ + --model_type wan_t5 \ + --quantized +``` + +#### 1.4 CLIP 编码器量化 + +**INT8 量化** +```bash +python converter.py \ + --source /path/to/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_clip_open-clip-xlm-roberta-large-vit-huge-14-int8 \ + --linear_dtype torch.int8 \ + --non_linear_dtype torch.float16 \ + --model_type wan_clip \ + --quantized +``` + +**FP8 量化** +```bash +python converter.py \ + --source /path/to/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth \ + --output /path/to/output \ + --output_ext .pth \ + --output_name models_clip_open-clip-xlm-roberta-large-vit-huge-14-fp8 \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.float16 \ + --model_type wan_clip \ + --quantized +``` + +#### 1.5 Qwen25_vl 語言部分量化 + +**INT8 量化** +```bash +python converter.py \ + --source /path/to/hunyuanvideo-1.5/text_encoder/llm \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name qwen25vl-llm-int8 \ + --linear_dtype torch.int8 \ + --non_linear_dtype torch.float16 \ + --model_type qwen25vl_llm \ + --quantized \ + --single_file +``` + +**FP8 量化** +```bash +python converter.py \ + --source /path/to/hunyuanvideo-1.5/text_encoder/llm \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name qwen25vl-llm-fp8 \ + --linear_dtype torch.float8_e4m3fn \ + --non_linear_dtype torch.float16 \ + --model_type qwen25vl_llm \ + --quantized \ + --single_file +``` + +### 2. LoRA 融合 + +#### 2.1 融合单个 LoRA + +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_model \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --single_file +``` + +#### 2.2 融合多个 LoRA + +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_model \ + --model_type wan_dit \ + --lora_path /path/to/lora1.safetensors /path/to/lora2.safetensors \ + --lora_strength 1.0 0.8 \ + --single_file +``` + +#### 2.3 LoRA 融合后量化 + +**LoRA 融合 → FP8 量化** +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_quantized \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --quantized \ + --linear_dtype torch.float8_e4m3fn \ + --single_file +``` + +**LoRA 融合 → ComfyUI scaled_fp8** +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_quantized \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --quantized \ + --linear_dtype torch.float8_e4m3fn \ + --single_file \ + --comfyui_mode +``` + +**LoRA 融合 → ComfyUI 全 FP8** +```bash +python converter.py \ + --source /path/to/base_model/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_quantized \ + --model_type wan_dit \ + --lora_path /path/to/lora.safetensors \ + --lora_strength 1.0 \ + --quantized \ + --linear_dtype torch.float8_e4m3fn \ + --single_file \ + --comfyui_mode \ + --full_quantized +``` + +#### 2.4 LoRA 键转换模式 + +**自动检测模式(推荐)** +```bash +python converter.py \ + --source /path/to/model/ \ + --output /path/to/output \ + --lora_path /path/to/lora.safetensors \ + --lora_key_convert auto \ + --single_file +``` + +**使用原始键名(LoRA 已经是目标格式)** +```bash +python converter.py \ + --source /path/to/model/ \ + --output /path/to/output \ + --direction forward \ + --lora_path /path/to/lora.safetensors \ + --lora_key_convert same \ + --single_file +``` + +**应用转换(LoRA 使用源格式)** +```bash +python converter.py \ + --source /path/to/model/ \ + --output /path/to/output \ + --direction forward \ + --lora_path /path/to/lora.safetensors \ + --lora_key_convert convert \ + --single_file +``` + +### 3. 架构格式转换 + +#### 3.1 LightX2V → Diffusers + +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P \ + --output /path/to/Wan2.1-I2V-14B-480P-Diffusers \ + --output_ext .safetensors \ + --model_type wan_dit \ + --direction forward \ + --chunk-size 100 +``` + +#### 3.2 Diffusers → LightX2V + +```bash +python converter.py \ + --source /path/to/Wan2.1-I2V-14B-480P-Diffusers \ + --output /path/to/Wan2.1-I2V-14B-480P \ + --output_ext .safetensors \ + --model_type wan_dit \ + --direction backward \ + --save_by_block +``` + +### 4. 格式转换 + +#### 4.1 .pth → .safetensors + +```bash +python converter.py \ + --source /path/to/model.pth \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name model \ + --single_file +``` + +#### 4.2 多个 .safetensors → 单文件 + +```bash +python converter.py \ + --source /path/to/model_directory/ \ + --output /path/to/output \ + --output_ext .safetensors \ + --output_name merged_model \ + --single_file +``` diff --git a/tools/convert/seko_talk_converter.py b/tools/convert/seko_talk_converter.py new file mode 100644 index 0000000..cb3c1dd --- /dev/null +++ b/tools/convert/seko_talk_converter.py @@ -0,0 +1,452 @@ +""" +Model Merge and Multi-Precision Conversion Script + +This script supports three conversion modes: +1. 'both' (default): Convert both R2V model and audio adapter +2. 'r2v': Only convert R2V model (R2V + distill via LoRA) +3. 'audio': Only convert audio adapter + +Pipeline: +- R2V model: R2V + distill via LoRA → merged.safetensors (FP32) → BF16/FP8 +- Audio adapter: (optional: + LoRA) → audio_adapter.pt → BF16 → FP8 + +Usage Examples: + # Convert both (default) + python tools/convert/seko_talk_converter.py \ + --r2v_model /path/to/model.pt \ + --distill_model /path/to/model_ema.pt \ + --audio_adapter /path/to/audio_adapter.pt \ + --output_dir /data/output + + # Only convert R2V model + python tools/convert/seko_talk_converter.py \ + --mode r2v \ + --r2v_model /path/to/model.pt \ + --distill_model /path/to/model_ema.pt \ + --output_dir /data/output + + # Only convert audio adapter + python tools/convert/seko_talk_converter.py \ + --mode audio \ + --audio_adapter /path/to/audio_adapter.pt \ + --output_dir /data/output + + # Convert audio adapter with LoRA merge + python tools/convert/seko_talk_converter.py \ + --mode audio \ + --audio_adapter /path/to/audio_adapter.pt \ + --audio_lora /path/to/audio_lora.pt \ + --output_dir /data/output + +Output files (depending on mode): + - merged.safetensors (FP32, R2V + distill merged) + - merged_bf16.safetensors (BF16) + - merged_fp8.safetensors (FP8) + - audio_adapter_merged.safetensors (FP32, audio + lora merged, optional) + - audio_adapter_model.safetensors (BF16) + - audio_adapter_model_fp8.safetensors (FP8) +""" + +import argparse +import subprocess +import sys +from pathlib import Path + +import torch +from loguru import logger +from safetensors.torch import load_file, save_file +from tqdm import tqdm + + +def run_command(cmd: list, description: str): + """Run a subprocess command and handle errors.""" + logger.info(f"\n{description}") + logger.info("Command: " + " \\\n ".join(cmd)) + + result = subprocess.run(cmd, capture_output=True, text=True) + + if result.returncode != 0: + logger.error(f"{description} FAILED!") + logger.error(f"STDOUT:\n{result.stdout}") + logger.error(f"STDERR:\n{result.stderr}") + raise RuntimeError(f"{description} failed") + + logger.info(f"✓ {description} completed!") + return result + + +def load_checkpoint(ckpt_path: Path) -> dict: + """Load checkpoint from .pt or .safetensors file.""" + logger.info(f"Loading: {ckpt_path.name}") + + if ckpt_path.suffix in [".pt", ".pth"]: + checkpoint = torch.load(ckpt_path, map_location="cpu", weights_only=True) + elif ckpt_path.suffix == ".safetensors": + checkpoint = load_file(str(ckpt_path)) + else: + raise ValueError(f"Unsupported format: {ckpt_path.suffix}") + + logger.info(f" Loaded {len(checkpoint)} keys") + return checkpoint + + +def convert_to_bf16(state_dict: dict) -> dict: + """Convert all tensors to bfloat16.""" + logger.info("Converting to BF16...") + bf16_dict = {} + for key, tensor in tqdm(state_dict.items(), desc="BF16 conversion"): + bf16_dict[key] = tensor.to(torch.bfloat16) + return bf16_dict + + +def step1_merge_via_lora(r2v_model_path: Path, distill_model_path: Path, output_dir: Path, lora_alpha: float, temp_dir: Path) -> Path: + """ + Step 1: Merge R2V + distillation model via LoRA using converter.py. + Both models in FP32, output merged.safetensors (FP32). + """ + logger.info("=" * 80) + logger.info("STEP 1: Merge R2V + Distillation via LoRA (FP32)") + logger.info("=" * 80) + + temp_dir.mkdir(parents=True, exist_ok=True) + + # Convert R2V to safetensors (keep FP32) + logger.info("\n[1.1] Converting R2V model to safetensors (FP32)...") + r2v_dict = load_checkpoint(r2v_model_path) + r2v_safetensors = temp_dir / "model.safetensors" + save_file(r2v_dict, str(r2v_safetensors)) + logger.info(f" Saved: {r2v_safetensors}") + + # Convert distill to safetensors (keep FP32 for LoRA merge) + logger.info("\n[1.2] Converting distillation model to safetensors (FP32)...") + distill_dict = load_checkpoint(distill_model_path) + distill_safetensors = temp_dir / "model_ema.safetensors" + save_file(distill_dict, str(distill_safetensors)) + logger.info(f" Saved: {distill_safetensors}") + + # Merge via LoRA using converter.py (FP32 + FP32 → FP32) + logger.info("\n[1.3] Merging via LoRA (converter.py)...") + cmd = [ + "python", + "tools/convert/converter.py", + "-s", + str(r2v_safetensors), + "-o", + str(output_dir), + "-o_n", + "merged", + "--lora_path", + str(distill_safetensors), + "--lora_alpha", + str(lora_alpha), + "--single_file", + ] + + run_command(cmd, "LoRA merge") + + merged_path = output_dir / "merged.safetensors" + if not merged_path.exists(): + raise FileNotFoundError(f"Merged file not found: {merged_path}") + + logger.info(f" ✓ Created: {merged_path} (FP32)") + return merged_path + + +def step2_convert_merged_to_bf16(merged_path: Path, output_dir: Path): + """ + Step 2: Convert merged.safetensors (FP32) to BF16. + """ + logger.info("=" * 80) + logger.info("STEP 2: Convert merged.safetensors (FP32) → BF16") + logger.info("=" * 80) + + merged_dict = load_file(str(merged_path)) + merged_bf16 = convert_to_bf16(merged_dict) + + bf16_path = output_dir / "merged_bf16.safetensors" + save_file(merged_bf16, str(bf16_path)) + logger.info(f" ✓ Created: {bf16_path}") + + +def step3_convert_merged_to_fp8(merged_path: Path, output_dir: Path, device: str = "cuda"): + """ + Step 3: Convert merged.safetensors (FP32) to FP8 using converter.py --quantized. + """ + logger.info("=" * 80) + logger.info("STEP 3: Convert merged.safetensors (FP32) → FP8") + logger.info("=" * 80) + + cmd = [ + "python", + "tools/convert/converter.py", + "-s", + str(merged_path), + "-o", + str(output_dir), + "-o_n", + "merged_fp8", + "--linear_type", + "fp8", + "--quantized", + "--device", + device, + "--single_file", + ] + + run_command(cmd, "Merged FP8 conversion") + + fp8_path = output_dir / "merged_fp8.safetensors" + logger.info(f" ✓ Created: {fp8_path}") + + +def step_audio_merge_lora(audio_adapter_path: Path, audio_lora_path: Path, output_dir: Path, lora_alpha: float, temp_dir: Path) -> Path: + """ + Merge audio adapter + LoRA using converter.py. + Both in FP32, output audio_adapter_merged.safetensors (FP32). + """ + logger.info("=" * 80) + logger.info("AUDIO STEP 1: Merge Audio Adapter + LoRA (FP32)") + logger.info("=" * 80) + + temp_dir.mkdir(parents=True, exist_ok=True) + + logger.info("\n[1.1] Converting audio adapter to safetensors (FP32)...") + audio_dict = load_checkpoint(audio_adapter_path) + audio_safetensors = temp_dir / "audio_adapter.safetensors" + save_file(audio_dict, str(audio_safetensors)) + logger.info(f" Saved: {audio_safetensors}") + + logger.info("\n[1.2] Converting audio LoRA to safetensors (FP32)...") + lora_dict = load_checkpoint(audio_lora_path) + lora_safetensors = temp_dir / "audio_lora.safetensors" + save_file(lora_dict, str(lora_safetensors)) + logger.info(f" Saved: {lora_safetensors}") + + logger.info("\n[1.3] Merging via LoRA (converter.py)...") + cmd = [ + "python", + "tools/convert/converter.py", + "-s", + str(audio_safetensors), + "-o", + str(output_dir), + "-o_n", + "audio_adapter_merged", + "--lora_path", + str(lora_safetensors), + "--lora_alpha", + str(lora_alpha), + "--single_file", + ] + + run_command(cmd, "Audio LoRA merge") + + merged_path = output_dir / "audio_adapter_merged.safetensors" + if not merged_path.exists(): + raise FileNotFoundError(f"Merged audio file not found: {merged_path}") + + logger.info(f" ✓ Created: {merged_path} (FP32)") + return merged_path + + +def step4_convert_audio_adapter_to_bf16(audio_adapter_path: Path, output_dir: Path): + """ + Step 4: Convert audio adapter to BF16. + """ + logger.info("=" * 80) + logger.info("AUDIO STEP 2: Convert audio adapter → BF16") + logger.info("=" * 80) + + audio_dict = load_checkpoint(audio_adapter_path) + audio_bf16 = convert_to_bf16(audio_dict) + + bf16_path = output_dir / "audio_adapter_model.safetensors" + save_file(audio_bf16, str(bf16_path)) + logger.info(f" ✓ Created: {bf16_path}") + + +def step5_convert_audio_adapter_to_fp8(output_dir: Path): + """ + Step 5: Convert audio adapter BF16 to FP8 using quant_adapter.py. + """ + logger.info("=" * 80) + logger.info("AUDIO STEP 3: Convert audio adapter → FP8") + logger.info("=" * 80) + + input_path = output_dir / "audio_adapter_model.safetensors" + output_path = output_dir / "audio_adapter_model_fp8.safetensors" + + cmd = ["python", "tools/convert/quant_adapter.py", "--model_path", str(input_path), "--output_path", str(output_path)] + + run_command(cmd, "Audio adapter FP8 conversion") + + logger.info(f" ✓ Created: {output_path}") + + +def main(): + parser = argparse.ArgumentParser(description="Merge R2V+distill via LoRA and convert to multiple formats") + + # Mode selection + parser.add_argument("--mode", type=str, choices=["both", "r2v", "audio"], default="both", help="Conversion mode: 'both' (default), 'r2v' (only R2V model), or 'audio' (only audio adapter)") + + # Inputs (conditionally required based on mode) + parser.add_argument("--r2v_model", type=str, help="Path to R2V model (.pt) [required for 'both' and 'r2v' modes]") + parser.add_argument("--distill_model", type=str, help="Path to distillation model (.pt) [required for 'both' and 'r2v' modes]") + parser.add_argument("--audio_adapter", type=str, help="Path to audio adapter (.pt) [required for 'both' and 'audio' modes]") + parser.add_argument("--audio_lora", type=str, help="Path to audio LoRA (.pt/.safetensors) [optional, for merging with audio adapter]") + parser.add_argument("--audio_lora_alpha", type=float, default=8.0, help="Alpha for audio LoRA merge (default: 8.0)") + + # Outputs + parser.add_argument("--output_dir", type=str, required=True, help="Output directory") + parser.add_argument("--temp_dir", type=str, default=None, help="Temp directory (default: output_dir/temp)") + + # Settings + parser.add_argument("--lora_alpha", type=float, default=8.0, help="Alpha for LoRA merge (default: 8.0)") + parser.add_argument("--device", type=str, default="cuda", help="Device for FP8 quantization (default: cuda)") + + # Options + parser.add_argument("--skip_merged_fp8", action="store_true", help="Skip merged FP8 conversion") + parser.add_argument("--skip_audio_fp8", action="store_true", help="Skip audio adapter FP8 conversion") + + args = parser.parse_args() + + # Validate required arguments based on mode + if args.mode in ["both", "r2v"]: + if not args.r2v_model or not args.distill_model: + parser.error("--r2v_model and --distill_model are required for 'both' and 'r2v' modes") + + if args.mode in ["both", "audio"]: + if not args.audio_adapter: + parser.error("--audio_adapter is required for 'both' and 'audio' modes") + + # Setup paths + output_dir = Path(args.output_dir) + temp_dir = Path(args.temp_dir) if args.temp_dir else output_dir / "temp" + + r2v_path = Path(args.r2v_model) if args.r2v_model else None + distill_path = Path(args.distill_model) if args.distill_model else None + audio_path = Path(args.audio_adapter) if args.audio_adapter else None + audio_lora_path = Path(args.audio_lora) if args.audio_lora else None + + # Validate file existence + if r2v_path and not r2v_path.exists(): + raise FileNotFoundError(f"R2V model not found: {r2v_path}") + if distill_path and not distill_path.exists(): + raise FileNotFoundError(f"Distill model not found: {distill_path}") + if audio_path and not audio_path.exists(): + raise FileNotFoundError(f"Audio adapter not found: {audio_path}") + if audio_lora_path and not audio_lora_path.exists(): + raise FileNotFoundError(f"Audio LoRA not found: {audio_lora_path}") + + output_dir.mkdir(parents=True, exist_ok=True) + + logger.info("=" * 80) + logger.info("MODEL CONVERSION PIPELINE") + logger.info("=" * 80) + logger.info(f"Mode: {args.mode}") + if r2v_path: + logger.info(f"R2V model: {r2v_path}") + if distill_path: + logger.info(f"Distill model: {distill_path}") + if audio_path: + logger.info(f"Audio adapter: {audio_path}") + if audio_lora_path: + logger.info(f"Audio LoRA: {audio_lora_path}") + logger.info(f"Output dir: {output_dir}") + if args.mode in ["both", "r2v"]: + logger.info(f"LoRA alpha: {args.lora_alpha}") + if audio_lora_path: + logger.info(f"Audio LoRA alpha: {args.audio_lora_alpha}") + logger.info(f"Device: {args.device}") + logger.info("=" * 80) + + # Execute pipeline based on mode + try: + merged_path = None + + # Process R2V model (modes: 'both', 'r2v') + if args.mode in ["both", "r2v"]: + logger.info("\n>>> Processing R2V MODEL") + + # Step 1: Merge R2V + Distill via LoRA + merged_path = step1_merge_via_lora(r2v_path, distill_path, output_dir, args.lora_alpha, temp_dir) + + # Step 2: Convert merged to BF16 + step2_convert_merged_to_bf16(merged_path, output_dir) + + # Step 3: Convert merged to FP8 + if not args.skip_merged_fp8: + step3_convert_merged_to_fp8(merged_path, output_dir, args.device) + + # Process audio adapter (modes: 'both', 'audio') + if args.mode in ["both", "audio"]: + logger.info("\n>>> Processing AUDIO ADAPTER") + + audio_source_path = audio_path + + # Optional: Merge audio adapter + LoRA + if audio_lora_path: + audio_source_path = step_audio_merge_lora(audio_path, audio_lora_path, output_dir, args.audio_lora_alpha, temp_dir) + + # Convert audio adapter to BF16 + step4_convert_audio_adapter_to_bf16(audio_source_path, output_dir) + + # Convert audio adapter to FP8 + if not args.skip_audio_fp8: + step5_convert_audio_adapter_to_fp8(output_dir) + + except Exception as e: + logger.error(f"\n{'=' * 80}") + logger.error("PIPELINE FAILED") + logger.error(f"{'=' * 80}") + logger.error(f"Error: {e}") + sys.exit(1) + + # Summary + logger.info("\n" + "=" * 80) + logger.info("✓ PIPELINE COMPLETED SUCCESSFULLY!") + logger.info("=" * 80) + logger.info(f"\nMode: {args.mode}") + logger.info(f"Output directory: {output_dir}\n") + logger.info("Generated files:") + + # Show files based on mode + if args.mode in ["both", "r2v"]: + logger.info(" ✓ merged.safetensors (FP32, R2V+distill merged)") + logger.info(" ✓ merged_bf16.safetensors (BF16)") + if not args.skip_merged_fp8: + logger.info(" ✓ merged_fp8.safetensors (FP8)") + + if args.mode in ["both", "audio"]: + if audio_lora_path: + logger.info(" ✓ audio_adapter_merged.safetensors (FP32, audio+lora merged)") + logger.info(" ✓ audio_adapter_model.safetensors (BF16)") + if not args.skip_audio_fp8: + logger.info(" ✓ audio_adapter_model_fp8.safetensors (FP8)") + + if args.mode in ["both", "r2v"]: + logger.info(f"\nTemp files: {temp_dir}") + + # Show conversion flow + logger.info("\nConversion flow:") + if args.mode in ["both", "r2v"]: + logger.info(" R2V model:") + logger.info(" 1. R2V (FP32) + Distill (FP32) --LoRA--> merged.safetensors (FP32)") + logger.info(" 2. merged.safetensors (FP32) --> merged_bf16.safetensors") + if not args.skip_merged_fp8: + logger.info(" 3. merged.safetensors (FP32) --> merged_fp8.safetensors") + + if args.mode in ["both", "audio"]: + logger.info(" Audio adapter:") + step_num = 1 + if audio_lora_path: + logger.info(f" {step_num}. audio_adapter.pt + audio_lora --LoRA--> audio_adapter_merged.safetensors (FP32)") + step_num += 1 + logger.info(f" {step_num}. audio_adapter --> audio_adapter_model.safetensors (BF16)") + step_num += 1 + if not args.skip_audio_fp8: + logger.info(f" {step_num}. audio_adapter_model.safetensors --> audio_adapter_model_fp8.safetensors") + + +if __name__ == "__main__": + main() diff --git a/tools/download_rife.py b/tools/download_rife.py new file mode 100644 index 0000000..dd77c2f --- /dev/null +++ b/tools/download_rife.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 +# coding: utf-8 + +import argparse +import os +import shutil +import sys +import zipfile +from pathlib import Path + +import requests + + +def get_base_dir(): + """Get project root directory""" + return Path(__file__).parent.parent + + +def download_file(url, save_path): + """Download file""" + print(f"Starting download: {url}") + response = requests.get(url, stream=True) + response.raise_for_status() + + total_size = int(response.headers.get("content-length", 0)) + downloaded_size = 0 + + with open(save_path, "wb") as f: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + f.write(chunk) + downloaded_size += len(chunk) + if total_size > 0: + progress = (downloaded_size / total_size) * 100 + print(f"\rDownload progress: {progress:.1f}%", end="", flush=True) + + print(f"\nDownload completed: {save_path}") + + +def extract_zip(zip_path, extract_to): + """Extract zip file""" + print(f"Starting extraction: {zip_path}") + with zipfile.ZipFile(zip_path, "r") as zip_ref: + zip_ref.extractall(extract_to) + print(f"Extraction completed: {extract_to}") + + +def find_flownet_pkl(extract_dir): + """Find flownet.pkl file in extracted directory""" + for root, dirs, files in os.walk(extract_dir): + for file in files: + if file == "flownet.pkl": + return os.path.join(root, file) + return None + + +def main(): + parser = argparse.ArgumentParser(description="Download RIFE model to specified directory") + parser.add_argument("target_directory", help="Target directory path") + + args = parser.parse_args() + + target_dir = Path(args.target_directory) + if not target_dir.is_absolute(): + target_dir = Path.cwd() / target_dir + + base_dir = get_base_dir() + temp_dir = base_dir / "_temp" + + # Create temporary directory + temp_dir.mkdir(exist_ok=True) + + target_dir.mkdir(parents=True, exist_ok=True) + + zip_url = "https://huggingface.co/hzwer/RIFE/resolve/main/RIFEv4.26_0921.zip" + zip_path = temp_dir / "RIFEv4.26_0921.zip" + + try: + # Download zip file + download_file(zip_url, zip_path) + + # Extract file + extract_zip(zip_path, temp_dir) + + # Find flownet.pkl file + flownet_pkl = find_flownet_pkl(temp_dir) + if flownet_pkl: + # Copy flownet.pkl to target directory + target_file = target_dir / "flownet.pkl" + shutil.copy2(flownet_pkl, target_file) + print(f"flownet.pkl copied to: {target_file}") + else: + print("Error: flownet.pkl file not found") + return 1 + + print("RIFE model download and installation completed!") + return 0 + + except Exception as e: + print(f"Error: {e}") + return 1 + finally: + # Clean up temporary files + print("Cleaning up temporary files...") + + # Delete zip file if exists + if zip_path.exists(): + try: + zip_path.unlink() + print(f"Deleted: {zip_path}") + except Exception as e: + print(f"Error deleting zip file: {e}") + + # Delete extracted folders + for item in temp_dir.iterdir(): + if item.is_dir(): + try: + shutil.rmtree(item) + print(f"Deleted directory: {item}") + except Exception as e: + print(f"Error deleting directory {item}: {e}") + + # Delete the temp directory itself if empty + if temp_dir.exists() and not any(temp_dir.iterdir()): + try: + temp_dir.rmdir() + print(f"Deleted temp directory: {temp_dir}") + except Exception as e: + print(f"Error deleting temp directory: {e}") + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/extract/convert_vigen_to_x2v_lora.py b/tools/extract/convert_vigen_to_x2v_lora.py new file mode 100644 index 0000000..171850e --- /dev/null +++ b/tools/extract/convert_vigen_to_x2v_lora.py @@ -0,0 +1,144 @@ +### Using this script to convert ViGen-DiT Lora Format to Lightx2v +### +### Cmd line:python convert_vigen_to_x2v_lora.py model_lora.pt model_lora_converted.safetensors +### +### ViGen-DiT Project Url: https://github.com/yl-1993/ViGen-DiT +### +import os +import sys + +import torch +from safetensors.torch import load_file, save_file + +if len(sys.argv) != 3: + print("用法: python convert_lora.py <输入文件> <输出文件.safetensors>") + sys.exit(1) + +ckpt_path = sys.argv[1] +output_path = sys.argv[2] + +if not os.path.exists(ckpt_path): + print(f"❌ 输入文件不存在: {ckpt_path}") + sys.exit(1) + +if ckpt_path.endswith(".safetensors"): + state_dict = load_file(ckpt_path) +else: + state_dict = torch.load(ckpt_path, map_location="cpu") + +if "state_dict" in state_dict: + state_dict = state_dict["state_dict"] +elif "model" in state_dict: + state_dict = state_dict["model"] + +mapped_dict = {} + +# 映射表定义 +attn_map = { + "attn1": "self_attn", + "attn2": "cross_attn", +} +proj_map = { + "to_q": "q", + "to_k": "k", + "to_v": "v", + "to_out": "o", + "add_k_proj": "k_img", + "add_v_proj": "v_img", +} +lora_map = { + "lora_A": "lora_down", + "lora_B": "lora_up", +} + +for k, v in state_dict.items(): + # 预处理:将 to_out.0 / to_out.1 统一替换为 to_out + k = k.replace("to_out.0", "to_out").replace("to_out.1", "to_out") + k = k.replace(".default", "") # 去除.default + + parts = k.split(".") + + # === Attention Blocks === + if k.startswith("blocks.") and len(parts) >= 5: + block_id = parts[1] + + if parts[2].startswith("attn"): + attn_raw = parts[2] + proj_raw = parts[3] + lora_raw = parts[4] + + if attn_raw in attn_map and proj_raw in proj_map and lora_raw in lora_map: + attn_name = attn_map[attn_raw] + proj_name = proj_map[proj_raw] + lora_name = lora_map[lora_raw] + new_k = f"diffusion_model.blocks.{block_id}.{attn_name}.{proj_name}.{lora_name}.weight" + mapped_dict[new_k] = v + continue + else: + print(f"无法映射 attention key: {k}") + continue + # === FFN Blocks === + elif parts[2] == "ffn": + if parts[3:6] == ["net", "0", "proj"]: + layer_id = "0" + lora_raw = parts[6] + elif parts[3:5] == ["net", "2"]: + layer_id = "2" + lora_raw = parts[5] + else: + print(f"无法解析 FFN key: {k}") + continue + + if lora_raw not in lora_map: + print(f"未知 FFN LoRA 类型: {k}") + continue + + lora_name = lora_map[lora_raw] + new_k = f"diffusion_model.blocks.{block_id}.ffn.{layer_id}.{lora_name}.weight" + mapped_dict[new_k] = v + continue + # === Text Embedding === + elif k.startswith("condition_embedder.text_embedder.linear_"): + layer_id = parts[2].split("_")[1] + lora_raw = parts[3] + if lora_raw in lora_map: + lora_name = lora_map[lora_raw] + new_k = f"diffusion_model.text_embedding.{layer_id}.{lora_name}.weight" + mapped_dict[new_k] = v + continue + else: + print(f"text_embedder 未知 LoRA 类型: {k}") + continue + """ + # === Time Embedding === + elif k.startswith("condition_embedder.time_embedder.linear_"): + layer_id = parts[2].split("_")[1] + lora_raw = parts[3] + if lora_raw in lora_map: + lora_name = lora_map[lora_raw] + new_k = f"diffusion_model.time_embedding.{layer_id}.{lora_name}.weight" + mapped_dict[new_k] = v + continue + else: + print(f"time_embedder 未知 LoRA 类型: {k}") + continue + + # === Time Projection === + elif k.startswith("condition_embedder.time_proj."): + lora_raw = parts[2] + if lora_raw in lora_map: + lora_name = lora_map[lora_raw] + new_k = f"diffusion_model.time_projection.1.{lora_name}.weight" + mapped_dict[new_k] = v + continue + else: + print(f"time_proj 未知 LoRA 类型: {k}") + continue + """ + # fallback + print(f"未识别结构 key: {k}") + +# 保存 +print(f"\n✅ 成功重命名 {len(mapped_dict)} 个 LoRA 参数") +save_file(mapped_dict, output_path) +print(f"💾 已保存为: {output_path}") diff --git a/tools/extract/lora_extractor.py b/tools/extract/lora_extractor.py new file mode 100644 index 0000000..05ffa52 --- /dev/null +++ b/tools/extract/lora_extractor.py @@ -0,0 +1,456 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +LoRA Extractor Script +Extract LoRA weights from the difference between two models +""" + +import argparse +import os +from typing import Dict, Optional + +import torch +from safetensors import safe_open +from safetensors import torch as st +from tqdm import tqdm + + +def _get_torch_dtype(dtype_str: str) -> torch.dtype: + """ + Convert string to torch data type + + Args: + dtype_str: Data type string + + Returns: + Torch data type + """ + dtype_mapping = { + "float32": torch.float32, + "fp32": torch.float32, + "float16": torch.float16, + "fp16": torch.float16, + "bfloat16": torch.bfloat16, + "bf16": torch.bfloat16, + } + + if dtype_str not in dtype_mapping: + raise ValueError(f"Unsupported data type: {dtype_str}") + + return dtype_mapping[dtype_str] + + +def parse_args(): + """Parse command line arguments""" + parser = argparse.ArgumentParser(description="Extract LoRA weights from the difference between source and target models", formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + # Source model parameters + parser.add_argument("--source-model", type=str, required=True, help="Path to source model") + parser.add_argument("--source-type", type=str, choices=["safetensors", "pytorch"], default="safetensors", help="Source model format type") + + # Target model parameters + parser.add_argument("--target-model", type=str, required=True, help="Path to target model (fine-tuned model)") + parser.add_argument("--target-type", type=str, choices=["safetensors", "pytorch"], default="safetensors", help="Target model format type") + + # Output parameters + parser.add_argument("--output", type=str, required=True, help="Path to output LoRA model") + parser.add_argument("--output-format", type=str, choices=["safetensors", "pytorch"], default="safetensors", help="Output LoRA model format") + + # LoRA related parameters + parser.add_argument("--rank", type=int, default=32, help="LoRA rank value") + + parser.add_argument("--output-dtype", type=str, choices=["float32", "fp32", "float16", "fp16", "bfloat16", "bf16"], default="bf16", help="Output weight data type") + parser.add_argument("--diff-only", action="store_true", help="Save all weights as direct diff without LoRA decomposition") + + return parser.parse_args() + + +def load_model_weights(model_path: str, model_type: str) -> Dict[str, torch.Tensor]: + """ + Load model weights (using fp32 precision) + + Args: + model_path: Model file path or directory path + model_type: Model type ("safetensors" or "pytorch") + + Returns: + Model weights dictionary (fp32 precision) + """ + print(f"Loading model: {model_path} (type: {model_type}, precision: fp32)") + + if not os.path.exists(model_path): + raise FileNotFoundError(f"Model path does not exist: {model_path}") + + weights = {} + + if model_type == "safetensors": + if os.path.isdir(model_path): + # If it's a directory, load all .safetensors files in the directory + safetensors_files = [] + for file in os.listdir(model_path): + if file.endswith(".safetensors"): + safetensors_files.append(os.path.join(model_path, file)) + + if not safetensors_files: + raise ValueError(f"No .safetensors files found in directory: {model_path}") + + print(f"Found {len(safetensors_files)} safetensors files") + + # Load all files and merge weights + for file_path in sorted(safetensors_files): + print(f" Loading file: {os.path.basename(file_path)}") + with safe_open(file_path, framework="pt", device="cpu") as f: + for key in f.keys(): + if key in weights: + print(f"Warning: weight key '{key}' is duplicated in multiple files, will be overwritten") + weights[key] = f.get_tensor(key) + + elif os.path.isfile(model_path): + # If it's a single file + if model_path.endswith(".safetensors"): + with safe_open(model_path, framework="pt", device="cpu") as f: + for key in f.keys(): + weights[key] = f.get_tensor(key) + else: + raise ValueError(f"safetensors type file should end with .safetensors: {model_path}") + else: + raise ValueError(f"Invalid path type: {model_path}") + + elif model_type == "pytorch": + # Load pytorch format (.pt, .pth) + if model_path.endswith((".pt", ".pth")): + checkpoint = torch.load(model_path, map_location="cpu") + + # Handle possible nested structure + if isinstance(checkpoint, dict): + if "state_dict" in checkpoint: + weights = checkpoint["state_dict"] + elif "model" in checkpoint: + weights = checkpoint["model"] + else: + weights = checkpoint + else: + weights = checkpoint + else: + raise ValueError(f"pytorch type file should end with .pt or .pth: {model_path}") + else: + raise ValueError(f"Unsupported model type: {model_type}") + + # Convert all floating point weights to fp32 to ensure computational precision + print("Converting weights to fp32 to ensure computational precision...") + + converted_weights = {} + for key, tensor in weights.items(): + # Only convert floating point tensors, keep integer tensors unchanged + if tensor.dtype.is_floating_point: + converted_weights[key] = tensor.to(torch.float32) + else: + converted_weights[key] = tensor + + print(f"Successfully loaded model with {len(converted_weights)} weight tensors") + return converted_weights + + +def save_lora_weights(lora_weights: Dict[str, torch.Tensor], output_path: str, output_format: str, output_dtype: str = "bf16"): + """ + Save LoRA weights + + Args: + lora_weights: LoRA weights dictionary + output_path: Output path + output_format: Output format + output_dtype: Output data type + """ + print(f"Saving LoRA weights to: {output_path} (format: {output_format}, data type: {output_dtype})") + + # Ensure output directory exists + output_dir = os.path.dirname(output_path) + if output_dir and not os.path.exists(output_dir): + os.makedirs(output_dir, exist_ok=True) + + # Convert data type + target_dtype = _get_torch_dtype(output_dtype) + print(f"Converting LoRA weights to {output_dtype} type...") + + converted_weights = {} + with tqdm(lora_weights.items(), desc="Converting data type", unit="weights") as pbar: + for key, tensor in pbar: + # Only convert floating point tensors, keep integer tensors unchanged + if tensor.dtype.is_floating_point: + converted_weights[key] = tensor.to(target_dtype).contiguous() + else: + converted_weights[key] = tensor.contiguous() + + if output_format == "safetensors": + # Save as safetensors format + if not output_path.endswith(".safetensors"): + output_path += ".safetensors" + st.save_file(converted_weights, output_path) + + elif output_format == "pytorch": + # Save as pytorch format + if not output_path.endswith((".pt", ".pth")): + output_path += ".pt" + torch.save(converted_weights, output_path) + else: + raise ValueError(f"Unsupported output format: {output_format}") + + print(f"LoRA weights saved to: {output_path}") + + +def _compute_weight_diff(source_tensor: torch.Tensor, target_tensor: torch.Tensor, key: str) -> Optional[torch.Tensor]: + """ + Compute the difference between two weight tensors + + Args: + source_tensor: Source weight tensor + target_tensor: Target weight tensor + key: Weight key name (for logging) + + Returns: + Difference tensor, returns None if no change + """ + # Check if tensor shapes match + if source_tensor.shape != target_tensor.shape: + return None + + # Check if tensor data types match + if source_tensor.dtype != target_tensor.dtype: + target_tensor = target_tensor.to(source_tensor.dtype) + + # Compute difference + diff = target_tensor - source_tensor + + # Check if there are actual changes + if torch.allclose(diff, torch.zeros_like(diff), atol=1e-8): + # No change + return None + + return diff + + +def _decompose_to_lora(diff: torch.Tensor, key: str, rank: int) -> Dict[str, torch.Tensor]: + """ + Decompose weight difference into LoRA format + + Args: + diff: Weight difference tensor + key: Original weight key name + rank: LoRA rank + + Returns: + LoRA weights dictionary (containing lora_up and lora_down) + """ + # Ensure it's a 2D tensor + if len(diff.shape) != 2: + raise ValueError(f"LoRA decomposition only supports 2D weights, but got {len(diff.shape)}D tensor: {key}") + + a, b = diff.shape + + # Check if rank is reasonable + max_rank = min(a, b) + if rank > max_rank: + rank = max_rank + + # Choose compute device (prefer GPU, fallback to CPU) + device = "cuda" if torch.cuda.is_available() else "cpu" + diff_device = diff.to(device) + + # SVD decomposition + U, S, V = torch.linalg.svd(diff_device, full_matrices=False) + + # Take the first rank components + U = U[:, :rank] # (a, rank) + S = S[:rank] # (rank,) + V = V[:rank, :] # (rank, b) + + # Distribute square root of singular values to both matrices + S_sqrt = S.sqrt() + lora_up = U * S_sqrt.unsqueeze(0) # (a, rank) * (1, rank) = (a, rank) + lora_down = S_sqrt.unsqueeze(1) * V # (rank, 1) * (rank, b) = (rank, b) + + # Move back to CPU and convert to original data type, ensure contiguous + lora_up = lora_up.cpu().to(diff.dtype).contiguous() + lora_down = lora_down.cpu().to(diff.dtype).contiguous() + + # Generate LoRA weight key names + base_key = key.replace(".weight", "") + lora_up_key = "diffusion_model." + f"{base_key}.lora_up.weight" + lora_down_key = "diffusion_model." + f"{base_key}.lora_down.weight" + + # Return the decomposed weights + lora_weights = {lora_up_key: lora_up, lora_down_key: lora_down} + + return lora_weights + + +def extract_lora_from_diff(source_weights: Dict[str, torch.Tensor], target_weights: Dict[str, torch.Tensor], rank: int = 16, diff_only: bool = False) -> Dict[str, torch.Tensor]: + """ + Extract LoRA weights from model difference + + Args: + source_weights: Source model weights + target_weights: Target model weights + rank: LoRA rank + diff_only: If True, save all weights as direct diff without LoRA decomposition + + Returns: + LoRA weights dictionary + """ + print("Starting LoRA weight extraction...") + if diff_only: + print("Mode: Direct diff only (no LoRA decomposition)") + else: + print(f"Mode: Smart extraction - rank: {rank}") + print(f"Source model weight count: {len(source_weights)}") + print(f"Target model weight count: {len(target_weights)}") + + lora_weights = {} + processed_count = 0 + diff_count = 0 + lora_count = 0 + similar_count = 0 + skipped_count = 0 + fail_count = 0 + + # Find common keys between two models + common_keys = set(source_weights.keys()) & set(target_weights.keys()) + source_only_keys = set(source_weights.keys()) - set(target_weights.keys()) + target_only_keys = set(target_weights.keys()) - set(source_weights.keys()) + + if source_only_keys: + print(f"Warning: Source model exclusive weight keys ({len(source_only_keys)} keys): {list(source_only_keys)[:5]}...") + if target_only_keys: + print(f"Warning: Target model exclusive weight keys ({len(target_only_keys)} keys): {list(target_only_keys)[:5]}...") + + print(f"Common weight keys count: {len(common_keys)}") + + # Process common keys, extract LoRA weights + common_keys_sorted = sorted(common_keys) + pbar = tqdm(common_keys_sorted, desc="Extracting LoRA weights", unit="layer") + + for key in pbar: + source_tensor = source_weights[key] + target_tensor = target_weights[key] + + # Update progress bar description + short_key = key.split(".")[-2:] if "." in key else [key] + pbar.set_postfix_str(f"Processing: {'.'.join(short_key)}") + + # Compute weight difference + diff = _compute_weight_diff(source_tensor, target_tensor, key) + + if diff is None: + # No change or shape mismatch + if source_tensor.shape == target_tensor.shape: + similar_count += 1 + else: + skipped_count += 1 + continue + + # Calculate parameter count + param_count = source_tensor.numel() + is_1d = len(source_tensor.shape) == 1 + + # Decide whether to save diff directly or perform LoRA decomposition + if diff_only or is_1d or param_count < 1000000: + # Save diff directly + lora_key = _generate_lora_diff_key(key) + if lora_key == "skip": + skipped_count += 1 + continue + lora_weights[lora_key] = diff + diff_count += 1 + + else: + # Perform LoRA decomposition + if len(diff.shape) == 2 and key.endswith(".weight"): + try: + decomposed_weights = _decompose_to_lora(diff, key, rank) + lora_weights.update(decomposed_weights) + lora_count += 1 + except Exception as e: + print(f"Error: {e}") + fail_count += 1 + + else: + print(f"Error: {key} is not a 2D weight tensor") + fail_count += 1 + + processed_count += 1 + + # Close progress bar + pbar.close() + + print(f"\nExtraction statistics:") + print(f" Processed weights: {processed_count}") + print(f" Direct diff: {diff_count}") + print(f" LoRA decomposition: {lora_count}") + print(f" Skipped weights: {skipped_count}") + print(f" Similar weights: {similar_count}") + print(f" Failed weights: {fail_count}") + print(f" Total extracted LoRA weights: {len(lora_weights)}") + print("LoRA weight extraction completed") + + return lora_weights + + +def _generate_lora_diff_key(original_key: str) -> str: + """ + Generate LoRA weight key based on original weight key + + Args: + original_key: Original weight key name + + Returns: + LoRA weight key name + """ + ret_key = "diffusion_model." + original_key + if original_key.endswith(".weight"): + return ret_key.replace(".weight", ".diff") + elif original_key.endswith(".bias"): + return ret_key.replace(".bias", ".diff_b") + elif original_key.endswith(".modulation"): + return ret_key.replace(".modulation", ".diff_m") + else: + # If no matching suffix, skip + return "skip" + + +def main(): + """Main function""" + args = parse_args() + + print("=" * 50) + print("LoRA Extractor Started") + print("=" * 50) + print(f"Source model: {args.source_model} ({args.source_type})") + print(f"Target model: {args.target_model} ({args.target_type})") + print(f"Output path: {args.output} ({args.output_format})") + print(f"Output data type: {args.output_dtype}") + print(f"LoRA parameters: rank={args.rank}") + print(f"Diff only mode: {args.diff_only}") + print("=" * 50) + + try: + # Load source and target models + source_weights = load_model_weights(args.source_model, args.source_type) + target_weights = load_model_weights(args.target_model, args.target_type) + + # Extract LoRA weights + lora_weights = extract_lora_from_diff(source_weights, target_weights, rank=args.rank, diff_only=args.diff_only) + + # Save LoRA weights + save_lora_weights(lora_weights, args.output, args.output_format, args.output_dtype) + + print("=" * 50) + print("LoRA extraction completed!") + print("=" * 50) + + except Exception as e: + print(f"Error: {e}") + raise + + +if __name__ == "__main__": + main() diff --git a/tools/extract/lora_merger.py b/tools/extract/lora_merger.py new file mode 100644 index 0000000..1217da5 --- /dev/null +++ b/tools/extract/lora_merger.py @@ -0,0 +1,418 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +LoRA Merger Script +Merge a source model with LoRA weights to create a new model +""" + +import argparse +import os +from typing import Dict, Optional + +import torch +from safetensors import safe_open +from safetensors import torch as st +from tqdm import tqdm + + +def _get_torch_dtype(dtype_str: str) -> torch.dtype: + """ + Convert string to torch data type + + Args: + dtype_str: Data type string + + Returns: + Torch data type + """ + dtype_mapping = { + "float32": torch.float32, + "fp32": torch.float32, + "float16": torch.float16, + "fp16": torch.float16, + "bfloat16": torch.bfloat16, + "bf16": torch.bfloat16, + } + + if dtype_str not in dtype_mapping: + raise ValueError(f"Unsupported data type: {dtype_str}") + + return dtype_mapping[dtype_str] + + +def parse_args(): + """Parse command line arguments""" + parser = argparse.ArgumentParser(description="Merge a source model with LoRA weights to create a new model", formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + # Source model parameters + parser.add_argument("--source-model", type=str, required=True, help="Path to source model") + parser.add_argument("--source-type", type=str, choices=["safetensors", "pytorch"], default="safetensors", help="Source model format type") + + # LoRA parameters + parser.add_argument("--lora-model", type=str, required=True, help="Path to LoRA weights") + parser.add_argument("--lora-type", type=str, choices=["safetensors", "pytorch"], default="safetensors", help="LoRA weights format type") + + # Output parameters + parser.add_argument("--output", type=str, required=True, help="Path to output merged model") + parser.add_argument("--output-format", type=str, choices=["safetensors", "pytorch"], default="safetensors", help="Output model format") + + # Merge parameters + parser.add_argument("--alpha", type=float, default=1.0, help="LoRA merge strength (alpha value)") + parser.add_argument("--output-dtype", type=str, choices=["float32", "fp32", "float16", "fp16", "bfloat16", "bf16"], default="bf16", help="Output weight data type") + + return parser.parse_args() + + +def load_model_weights(model_path: str, model_type: str) -> Dict[str, torch.Tensor]: + """ + Load model weights (using fp32 precision) + + Args: + model_path: Model file path or directory path + model_type: Model type ("safetensors" or "pytorch") + + Returns: + Model weights dictionary (fp32 precision) + """ + print(f"Loading model: {model_path} (type: {model_type}, precision: fp32)") + + if not os.path.exists(model_path): + raise FileNotFoundError(f"Model path does not exist: {model_path}") + + weights = {} + + if model_type == "safetensors": + if os.path.isdir(model_path): + # If it's a directory, load all .safetensors files in the directory + safetensors_files = [] + for file in os.listdir(model_path): + if file.endswith(".safetensors"): + safetensors_files.append(os.path.join(model_path, file)) + + if not safetensors_files: + raise ValueError(f"No .safetensors files found in directory: {model_path}") + + print(f"Found {len(safetensors_files)} safetensors files") + + # Load all files and merge weights + for file_path in sorted(safetensors_files): + print(f" Loading file: {os.path.basename(file_path)}") + with safe_open(file_path, framework="pt", device="cpu") as f: + for key in f.keys(): + if key in weights: + print(f"Warning: weight key '{key}' is duplicated in multiple files, will be overwritten") + weights[key] = f.get_tensor(key) + + elif os.path.isfile(model_path): + # If it's a single file + if model_path.endswith(".safetensors"): + with safe_open(model_path, framework="pt", device="cpu") as f: + for key in f.keys(): + weights[key] = f.get_tensor(key) + else: + raise ValueError(f"safetensors type file should end with .safetensors: {model_path}") + else: + raise ValueError(f"Invalid path type: {model_path}") + + elif model_type == "pytorch": + # Load pytorch format (.pt, .pth) + if model_path.endswith((".pt", ".pth")): + checkpoint = torch.load(model_path, map_location="cpu") + + # Handle possible nested structure + if isinstance(checkpoint, dict): + if "state_dict" in checkpoint: + weights = checkpoint["state_dict"] + elif "model" in checkpoint: + weights = checkpoint["model"] + else: + weights = checkpoint + else: + weights = checkpoint + else: + raise ValueError(f"pytorch type file should end with .pt or .pth: {model_path}") + else: + raise ValueError(f"Unsupported model type: {model_type}") + + # Convert all floating point weights to fp32 to ensure computational precision + print("Converting weights to fp32 to ensure computational precision...") + + converted_weights = {} + for key, tensor in weights.items(): + # Only convert floating point tensors, keep integer tensors unchanged + if tensor.dtype.is_floating_point: + converted_weights[key] = tensor.to(torch.float32) + else: + converted_weights[key] = tensor + + print(f"Successfully loaded model with {len(converted_weights)} weight tensors") + return converted_weights + + +def save_model_weights(model_weights: Dict[str, torch.Tensor], output_path: str, output_format: str, output_dtype: str = "bf16"): + """ + Save model weights + + Args: + model_weights: Model weights dictionary + output_path: Output path + output_format: Output format + output_dtype: Output data type + """ + print(f"Saving merged model to: {output_path} (format: {output_format}, data type: {output_dtype})") + + # Ensure output directory exists + output_dir = os.path.dirname(output_path) + if output_dir and not os.path.exists(output_dir): + os.makedirs(output_dir, exist_ok=True) + + # Convert data type + target_dtype = _get_torch_dtype(output_dtype) + print(f"Converting model weights to {output_dtype} type...") + + converted_weights = {} + with tqdm(model_weights.items(), desc="Converting data type", unit="weights") as pbar: + for key, tensor in pbar: + # Only convert floating point tensors, keep integer tensors unchanged + if tensor.dtype.is_floating_point: + converted_weights[key] = tensor.to(target_dtype).contiguous() + else: + converted_weights[key] = tensor.contiguous() + + if output_format == "safetensors": + # Save as safetensors format + if not output_path.endswith(".safetensors"): + output_path += ".safetensors" + st.save_file(converted_weights, output_path) + + elif output_format == "pytorch": + # Save as pytorch format + if not output_path.endswith((".pt", ".pth")): + output_path += ".pt" + torch.save(converted_weights, output_path) + else: + raise ValueError(f"Unsupported output format: {output_format}") + + print(f"Merged model saved to: {output_path}") + + +def merge_lora_weights(source_weights: Dict[str, torch.Tensor], lora_weights: Dict[str, torch.Tensor], alpha: float = 1.0) -> Dict[str, torch.Tensor]: + """ + Merge source model with LoRA weights + + Args: + source_weights: Source model weights + lora_weights: LoRA weights + alpha: LoRA merge strength + + Returns: + Merged model weights + """ + print("Starting LoRA merge...") + print(f"Merge parameters - alpha: {alpha}") + print(f"Source model weight count: {len(source_weights)}") + print(f"LoRA weight count: {len(lora_weights)}") + + merged_weights = source_weights.copy() + processed_count = 0 + lora_merged_count = 0 + diff_merged_count = 0 + skipped_source_count = 0 + skipped_lora_count = 0 + skipped_source_keys = [] + skipped_lora_keys = [] + + # Group LoRA weights by base key + lora_pairs = {} + diff_weights = {} + + for lora_key, lora_tensor in lora_weights.items(): + if lora_key.endswith(".lora_up.weight"): + base_key = lora_key.replace(".lora_up.weight", "") + if base_key not in lora_pairs: + lora_pairs[base_key] = {} + lora_pairs[base_key]["up"] = lora_tensor + elif lora_key.endswith(".lora_down.weight"): + base_key = lora_key.replace(".lora_down.weight", "") + if base_key not in lora_pairs: + lora_pairs[base_key] = {} + lora_pairs[base_key]["down"] = lora_tensor + elif lora_key.endswith((".diff", ".diff_b", ".diff_m")): + diff_weights[lora_key] = lora_tensor + + print(f"Found {len(lora_pairs)} LoRA pairs and {len(diff_weights)} diff weights") + + # Process with progress bar + all_items = list(lora_pairs.items()) + list(diff_weights.items()) + pbar = tqdm(all_items, desc="Merging LoRA weights", unit="weight") + + for item in pbar: + if isinstance(item[1], dict): # LoRA pair + base_key, lora_pair = item + if "up" in lora_pair and "down" in lora_pair: + # Find corresponding source weight + source_key = _find_source_key(base_key, source_weights) + if source_key: + if source_weights[source_key].shape != (lora_pair["up"].shape[0], lora_pair["down"].shape[1]): + skipped_source_count += 1 + skipped_source_keys.append(source_key) + continue + lora_up = lora_pair["up"] + lora_down = lora_pair["down"] + + # Compute LoRA delta: alpha * (lora_up @ lora_down) + lora_delta = alpha * (lora_up @ lora_down) + + # Apply to source weight + merged_weights[source_key] = source_weights[source_key] + lora_delta + lora_merged_count += 1 + pbar.set_postfix_str(f"LoRA: {source_key.split('.')[-1]}") + else: + skipped_source_count += 1 + skipped_source_keys.append(base_key) + else: + print(f"Warning: Incomplete LoRA pair for: {base_key}") + skipped_lora_count += 1 + skipped_lora_keys.append(base_key) + else: # Diff weight + diff_key, diff_tensor = item + # Find corresponding source weight + source_key = _find_source_key_from_diff(diff_key, source_weights) + if source_key: + if source_weights[source_key].shape != diff_tensor.shape: + skipped_source_count += 1 + skipped_source_keys.append(source_key) + continue + # Apply diff: source + alpha * diff + merged_weights[source_key] = source_weights[source_key] + alpha * diff_tensor + diff_merged_count += 1 + pbar.set_postfix_str(f"Diff: {source_key.split('.')[-1]}") + else: + skipped_lora_count += 1 + skipped_lora_keys.append(diff_key) + + processed_count += 1 + + pbar.close() + + print(f"\nMerge statistics:") + print(f" Processed weights: {processed_count}") + print(f" LoRA merged: {lora_merged_count}") + print(f" Diff merged: {diff_merged_count}") + print(f" Skipped source weights: {skipped_source_count}") + if skipped_source_count > 0: + print(f" Skipped source keys:") + for key in skipped_source_keys: + print(f" {key}") + print(f" Skipped LoRA weights: {skipped_lora_count}") + if skipped_lora_count > 0: + print(f" Skipped LoRA keys:") + for key in skipped_lora_keys: + print(f" {key}") + print(f" Total merged model weights: {len(merged_weights)}") + print("LoRA merge completed") + + return merged_weights + + +def _find_source_key(lora_base_key: str, source_weights: Dict[str, torch.Tensor]) -> Optional[str]: + """ + Find corresponding source weight key for LoRA base key + + Args: + lora_base_key: LoRA base key (e.g., "diffusion_model.input_blocks.0.0.weight") + source_weights: Source model weights + + Returns: + Corresponding source key or None + """ + # Remove diffusion_model prefix if present + if lora_base_key.startswith("diffusion_model."): + source_key = lora_base_key[16:] + ".weight" # Remove "diffusion_model." and add ".weight" + else: + source_key = lora_base_key + ".weight" + + if source_key in source_weights: + return source_key + + # Try without adding .weight (in case it's already included) + if lora_base_key.startswith("diffusion_model."): + source_key_alt = lora_base_key[16:] + else: + source_key_alt = lora_base_key + + if source_key_alt in source_weights: + return source_key_alt + + return None + + +def _find_source_key_from_diff(diff_key: str, source_weights: Dict[str, torch.Tensor]) -> Optional[str]: + """ + Find corresponding source weight key for diff key + + Args: + diff_key: Diff key (e.g., "diffusion_model.input_blocks.0.diff") + source_weights: Source model weights + + Returns: + Corresponding source key or None + """ + # Remove diffusion_model prefix and diff suffix + if diff_key.startswith("diffusion_model."): + base_key = diff_key[16:] # Remove "diffusion_model." + else: + base_key = diff_key + + # Remove diff suffixes + if base_key.endswith(".diff"): + source_key = base_key[:-5] + ".weight" # Remove ".diff" with ".weight" + elif base_key.endswith(".diff_b"): + source_key = base_key[:-7] + ".bias" # Replace ".diff_b" with ".bias" + elif base_key.endswith(".diff_m"): + source_key = base_key[:-7] + ".modulation" # Replace ".diff_m" with ".modulation" + else: + source_key = base_key + + if source_key in source_weights: + return source_key + + return None + + +def main(): + """Main function""" + args = parse_args() + + print("=" * 50) + print("LoRA Merger Started") + print("=" * 50) + print(f"Source model: {args.source_model} ({args.source_type})") + print(f"LoRA weights: {args.lora_model} ({args.lora_type})") + print(f"Output path: {args.output} ({args.output_format})") + print(f"Output data type: {args.output_dtype}") + print(f"Merge parameters: alpha={args.alpha}") + print("=" * 50) + + try: + # Load source model and LoRA weights + source_weights = load_model_weights(args.source_model, args.source_type) + lora_weights = load_model_weights(args.lora_model, args.lora_type) + + # Merge LoRA weights with source model + merged_weights = merge_lora_weights(source_weights, lora_weights, alpha=args.alpha) + + # Save merged model + save_model_weights(merged_weights, args.output, args.output_format, args.output_dtype) + + print("=" * 50) + print("LoRA merge completed!") + print("=" * 50) + + except Exception as e: + print(f"Error: {e}") + raise + + +if __name__ == "__main__": + main() diff --git a/tools/preprocess/UserGuider.md b/tools/preprocess/UserGuider.md new file mode 100644 index 0000000..8a3e455 --- /dev/null +++ b/tools/preprocess/UserGuider.md @@ -0,0 +1,70 @@ +# Wan-animate Preprocessing User Guider + +## 1. Introductions + + +Wan-animate offers two generation modes: `animation` and `replacement`. While both modes extract the skeleton from the reference video, they each have a distinct preprocessing pipeline. + +### 1.1 Animation Mode + +In this mode, it is highly recommended to enable pose retargeting, especially if the body proportions of the reference and driving characters are dissimilar. + + - A simplified version of pose retargeting pipeline is provided to help developers quickly implement this functionality. + + - **NOTE:** Due to the potential complexity of input data, the results from this simplified retargeting version are NOT guaranteed to be perfect. It is strongly advised to verify the preprocessing results before proceeding. + + - Community contributions to improve on this feature are welcome. + +### 1.2 Replacement Mode + + - Pose retargeting is DISABLED by default in this mode. This is a deliberate choice to account for potential spatial interactions between the character and the environment. + + - **WARNING**: If there is a significant mismatch in body proportions between the reference and driving characters, artifacts or deformations may appear in the final output. + + - A simplified version for extracting the character's mask is also provided. + - **WARNING:** This mask extraction process is designed for **single-person videos ONLY** and may produce incorrect results or fail in multi-person videos (incorrect pose tracking). For multi-person video, users are required to either develop their own solution or integrate a suitable open-source tool. + +--- + +## 2. Preprocessing Instructions and Recommendations + +### 2.1 Basic Usage + +- The preprocessing process requires some additional models, including pose detection (mandatory), and mask extraction and image editing models (optional, as needed). Place them according to the following directory structure: +``` + /path/to/your/ckpt_path/ + ├── det/ + │ └── yolov10m.onnx + ├── pose2d/ + │ └── vitpose_h_wholebody.onnx + ├── sam2/ + │ └── sam2_hiera_large.pt + └── FLUX.1-Kontext-dev/ +``` +- `video_path`, `refer_path`, and `save_path` correspond to the paths for the input driving video, the character image, and the preprocessed results. + +- When using `animation` mode, two videos, `src_face.mp4` and `src_pose.mp4`, will be generated in `save_path`. When using `replacement` mode, two additional videos, `src_bg.mp4` and `src_mask.mp4`, will also be generated. + +- The `resolution_area` parameter determines the resolution for both preprocessing and the generation model. Its size is determined by pixel area. + +- The `fps` parameter can specify the frame rate for video processing. A lower frame rate can improve generation efficiency, but may cause stuttering or choppiness. + +--- + +### 2.2 Animation Mode + +- We support three forms: not using pose retargeting, using basic pose retargeting, and using enhanced pose retargeting based on the `FLUX.1-Kontext-dev` image editing model. These are specified via the `retarget_flag` and `use_flux` parameters. + +- Specifying `retarget_flag` to use basic pose retargeting requires ensuring that both the reference character and the character in the first frame of the driving video are in a front-facing, stretched pose. + +- Other than that, we recommend using enhanced pose retargeting by specifying both `retarget_flag` and `use_flux`. **NOTE:** Due to the limited capabilities of `FLUX.1-Kontext-dev`, it is NOT guaranteed to produce the expected results (e.g., consistency is not maintained, the pose is incorrect, etc.). It is recommended to check the intermediate results as well as the finally generated pose video; both are stored in `save_path`. Of course, users can also use a better image editing model, or explore the prompts for Flux on their own. + +--- + +### 2.3 Replacement Mode + +- Specifying `replace_flag` to enable data preprocessing for this mode. The preprocessing will additionally process a mask for the character in the video, and its size and shape can be adjusted by specifying some parameters. +- `iterations` and `k` can make the mask larger, covering more area. +- `w_len` and `h_len` can adjust the mask's shape. Smaller values will make the outline coarser, while larger values will make it finer. + +- A smaller, finer-contoured mask can allow for more of the original background to be preserved, but may potentially limit the character's generation area (considering potential appearance differences, this can lead to some shape leakage). A larger, coarser mask can allow the character generation to be more flexible and consistent, but because it includes more of the background, it might affect the background's consistency. We recommend users to adjust the relevant parameters based on their specific input data. diff --git a/tools/preprocess/__init__.py b/tools/preprocess/__init__.py new file mode 100644 index 0000000..7b76b62 --- /dev/null +++ b/tools/preprocess/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +from .process_pipepline import ProcessPipeline +from .video_predictor import SAM2VideoPredictor diff --git a/tools/preprocess/human_visualization.py b/tools/preprocess/human_visualization.py new file mode 100644 index 0000000..519fbab --- /dev/null +++ b/tools/preprocess/human_visualization.py @@ -0,0 +1,1337 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import math +import random +from typing import Dict, List + +import cv2 +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +from pose2d_utils import AAPoseMeta + + +def draw_handpose(canvas, keypoints, hand_score_th=0.6): + """ + Draw keypoints and connections representing hand pose on a given canvas. + + Args: + canvas (np.ndarray): A 3D numpy array representing the canvas (image) on which to draw the hand pose. + keypoints (List[Keypoint]| None): A list of Keypoint objects representing the hand keypoints to be drawn + or None if no keypoints are present. + + Returns: + np.ndarray: A 3D numpy array representing the modified canvas with the drawn hand pose. + + Note: + The function expects the x and y coordinates of the keypoints to be normalized between 0 and 1. + """ + eps = 0.01 + + H, W, C = canvas.shape + stickwidth = max(int(min(H, W) / 200), 1) + + edges = [ + [0, 1], + [1, 2], + [2, 3], + [3, 4], + [0, 5], + [5, 6], + [6, 7], + [7, 8], + [0, 9], + [9, 10], + [10, 11], + [11, 12], + [0, 13], + [13, 14], + [14, 15], + [15, 16], + [0, 17], + [17, 18], + [18, 19], + [19, 20], + ] + + for ie, (e1, e2) in enumerate(edges): + k1 = keypoints[e1] + k2 = keypoints[e2] + if k1 is None or k2 is None: + continue + if k1[2] < hand_score_th or k2[2] < hand_score_th: + continue + + x1 = int(k1[0]) + y1 = int(k1[1]) + x2 = int(k2[0]) + y2 = int(k2[1]) + if x1 > eps and y1 > eps and x2 > eps and y2 > eps: + cv2.line( + canvas, + (x1, y1), + (x2, y2), + matplotlib.colors.hsv_to_rgb([ie / float(len(edges)), 1.0, 1.0]) * 255, + thickness=stickwidth, + ) + + for keypoint in keypoints: + if keypoint is None: + continue + if keypoint[2] < hand_score_th: + continue + + x, y = keypoint[0], keypoint[1] + x = int(x) + y = int(y) + if x > eps and y > eps: + cv2.circle(canvas, (x, y), stickwidth, (0, 0, 255), thickness=-1) + return canvas + + +def draw_handpose_new(canvas, keypoints, stickwidth_type="v2", hand_score_th=0.6): + """ + Draw keypoints and connections representing hand pose on a given canvas. + + Args: + canvas (np.ndarray): A 3D numpy array representing the canvas (image) on which to draw the hand pose. + keypoints (List[Keypoint]| None): A list of Keypoint objects representing the hand keypoints to be drawn + or None if no keypoints are present. + + Returns: + np.ndarray: A 3D numpy array representing the modified canvas with the drawn hand pose. + + Note: + The function expects the x and y coordinates of the keypoints to be normalized between 0 and 1. + """ + eps = 0.01 + + H, W, C = canvas.shape + if stickwidth_type == "v1": + stickwidth = max(int(min(H, W) / 200), 1) + elif stickwidth_type == "v2": + stickwidth = max(max(int(min(H, W) / 200) - 1, 1) // 2, 1) + + edges = [ + [0, 1], + [1, 2], + [2, 3], + [3, 4], + [0, 5], + [5, 6], + [6, 7], + [7, 8], + [0, 9], + [9, 10], + [10, 11], + [11, 12], + [0, 13], + [13, 14], + [14, 15], + [15, 16], + [0, 17], + [17, 18], + [18, 19], + [19, 20], + ] + + for ie, (e1, e2) in enumerate(edges): + k1 = keypoints[e1] + k2 = keypoints[e2] + if k1 is None or k2 is None: + continue + if k1[2] < hand_score_th or k2[2] < hand_score_th: + continue + + x1 = int(k1[0]) + y1 = int(k1[1]) + x2 = int(k2[0]) + y2 = int(k2[1]) + if x1 > eps and y1 > eps and x2 > eps and y2 > eps: + cv2.line( + canvas, + (x1, y1), + (x2, y2), + matplotlib.colors.hsv_to_rgb([ie / float(len(edges)), 1.0, 1.0]) * 255, + thickness=stickwidth, + ) + + for keypoint in keypoints: + if keypoint is None: + continue + if keypoint[2] < hand_score_th: + continue + + x, y = keypoint[0], keypoint[1] + x = int(x) + y = int(y) + if x > eps and y > eps: + cv2.circle(canvas, (x, y), stickwidth, (0, 0, 255), thickness=-1) + return canvas + + +def draw_ellipse_by_2kp(img, keypoint1, keypoint2, color, threshold=0.6): + H, W, C = img.shape + stickwidth = max(int(min(H, W) / 200), 1) + + if keypoint1[-1] < threshold or keypoint2[-1] < threshold: + return img + + Y = np.array([keypoint1[0], keypoint2[0]]) + X = np.array([keypoint1[1], keypoint2[1]]) + mX = np.mean(X) + mY = np.mean(Y) + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + polygon = cv2.ellipse2Poly((int(mY), int(mX)), (int(length / 2), stickwidth), int(angle), 0, 360, 1) + cv2.fillConvexPoly(img, polygon, [int(float(c) * 0.6) for c in color]) + return img + + +def split_pose2d_kps_to_aa(kp2ds: np.ndarray) -> List[np.ndarray]: + """Convert the 133 keypoints from pose2d to body and hands keypoints. + + Args: + kp2ds (np.ndarray): [133, 2] + + Returns: + List[np.ndarray]: _description_ + """ + kp2ds_body = (kp2ds[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + kp2ds[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kp2ds_lhand = kp2ds[91:112] + kp2ds_rhand = kp2ds[112:133] + return kp2ds_body.copy(), kp2ds_lhand.copy(), kp2ds_rhand.copy() + + +def draw_aapose_by_meta(img, meta: AAPoseMeta, threshold=0.5, stick_width_norm=200, draw_hand=True, draw_head=True): + kp2ds = np.concatenate([meta.kps_body, meta.kps_body_p[:, None]], axis=1) + kp2ds_lhand = np.concatenate([meta.kps_lhand, meta.kps_lhand_p[:, None]], axis=1) + kp2ds_rhand = np.concatenate([meta.kps_rhand, meta.kps_rhand_p[:, None]], axis=1) + pose_img = draw_aapose(img, kp2ds, threshold, kp2ds_lhand=kp2ds_lhand, kp2ds_rhand=kp2ds_rhand, stick_width_norm=stick_width_norm, draw_hand=draw_hand, draw_head=draw_head) + return pose_img + + +def draw_aapose_by_meta_new(img, meta: AAPoseMeta, threshold=0.5, stickwidth_type="v2", draw_hand=True, draw_head=True): + kp2ds = np.concatenate([meta.kps_body, meta.kps_body_p[:, None]], axis=1) + kp2ds_lhand = np.concatenate([meta.kps_lhand, meta.kps_lhand_p[:, None]], axis=1) + kp2ds_rhand = np.concatenate([meta.kps_rhand, meta.kps_rhand_p[:, None]], axis=1) + pose_img = draw_aapose_new(img, kp2ds, threshold, kp2ds_lhand=kp2ds_lhand, kp2ds_rhand=kp2ds_rhand, stickwidth_type=stickwidth_type, draw_hand=draw_hand, draw_head=draw_head) + return pose_img + + +def draw_hand_by_meta(img, meta: AAPoseMeta, threshold=0.5, stick_width_norm=200): + kp2ds = np.concatenate([meta.kps_body, meta.kps_body_p[:, None] * 0], axis=1) + kp2ds_lhand = np.concatenate([meta.kps_lhand, meta.kps_lhand_p[:, None]], axis=1) + kp2ds_rhand = np.concatenate([meta.kps_rhand, meta.kps_rhand_p[:, None]], axis=1) + pose_img = draw_aapose(img, kp2ds, threshold, kp2ds_lhand=kp2ds_lhand, kp2ds_rhand=kp2ds_rhand, stick_width_norm=stick_width_norm, draw_hand=True, draw_head=False) + return pose_img + + +def draw_aaface_by_meta(img, meta: AAPoseMeta, threshold=0.5, stick_width_norm=200, draw_hand=False, draw_head=True): + kp2ds = np.concatenate([meta.kps_body, meta.kps_body_p[:, None]], axis=1) + # kp2ds_lhand = np.concatenate([meta.kps_lhand, meta.kps_lhand_p[:, None]], axis=1) + # kp2ds_rhand = np.concatenate([meta.kps_rhand, meta.kps_rhand_p[:, None]], axis=1) + pose_img = draw_M(img, kp2ds, threshold, kp2ds_lhand=None, kp2ds_rhand=None, stick_width_norm=stick_width_norm, draw_hand=draw_hand, draw_head=draw_head) + return pose_img + + +def draw_aanose_by_meta(img, meta: AAPoseMeta, threshold=0.5, stick_width_norm=100, draw_hand=False): + kp2ds = np.concatenate([meta.kps_body, meta.kps_body_p[:, None]], axis=1) + # kp2ds_lhand = np.concatenate([meta.kps_lhand, meta.kps_lhand_p[:, None]], axis=1) + # kp2ds_rhand = np.concatenate([meta.kps_rhand, meta.kps_rhand_p[:, None]], axis=1) + pose_img = draw_nose(img, kp2ds, threshold, kp2ds_lhand=None, kp2ds_rhand=None, stick_width_norm=stick_width_norm, draw_hand=draw_hand) + return pose_img + + +def gen_face_motion_seq(img, metas: List[AAPoseMeta], threshold=0.5, stick_width_norm=200): + return + + +def draw_M(img, kp2ds, threshold=0.6, data_to_json=None, idx=-1, kp2ds_lhand=None, kp2ds_rhand=None, draw_hand=False, stick_width_norm=200, draw_head=True): + """ + Draw keypoints and connections representing hand pose on a given canvas. + + Args: + canvas (np.ndarray): A 3D numpy array representing the canvas (image) on which to draw the hand pose. + keypoints (List[Keypoint]| None): A list of Keypoint objects representing the hand keypoints to be drawn + or None if no keypoints are present. + + Returns: + np.ndarray: A 3D numpy array representing the modified canvas with the drawn hand pose. + + Note: + The function expects the x and y coordinates of the keypoints to be normalized between 0 and 1. + """ + + new_kep_list = [ + "Nose", + "Neck", + "RShoulder", + "RElbow", + "RWrist", # No.4 + "LShoulder", + "LElbow", + "LWrist", # No.7 + "RHip", + "RKnee", + "RAnkle", # No.10 + "LHip", + "LKnee", + "LAnkle", # No.13 + "REye", + "LEye", + "REar", + "LEar", + "LToe", + "RToe", + ] + # kp2ds_body = (kp2ds.copy()[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + \ + # kp2ds.copy()[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kp2ds = kp2ds.copy() + # import ipdb; ipdb.set_trace() + kp2ds[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 18, 19], 2] = 0 + if not draw_head: + kp2ds[[0, 14, 15, 16, 17], 2] = 0 + kp2ds_body = kp2ds + # kp2ds_body = kp2ds_body[:18] + + # kp2ds_lhand = kp2ds.copy()[91:112] + # kp2ds_rhand = kp2ds.copy()[112:133] + + limbSeq = [ + # [2, 3], + # [2, 6], # shoulders + # [3, 4], + # [4, 5], # left arm + # [6, 7], + # [7, 8], # right arm + # [2, 9], + # [9, 10], + # [10, 11], # right leg + # [2, 12], + # [12, 13], + # [13, 14], # left leg + # [2, 1], + [1, 15], + [15, 17], + [1, 16], + [16, 18], # face (nose, eyes, ears) + # [14, 19], + # [11, 20], # foot + ] + + colors = [ + # [255, 0, 0], + # [255, 85, 0], + # [255, 170, 0], + # [255, 255, 0], + # [170, 255, 0], + # [85, 255, 0], + # [0, 255, 0], + # [0, 255, 85], + # [0, 255, 170], + # [0, 255, 255], + # [0, 170, 255], + # [0, 85, 255], + # [0, 0, 255], + # [85, 0, 255], + [170, 0, 255], + [255, 0, 255], + [255, 0, 170], + [255, 0, 85], + # foot + # [200, 200, 0], + # [100, 100, 0], + ] + + H, W, C = img.shape + stickwidth = max(int(min(H, W) / stick_width_norm), 1) + + for _idx, ((k1_index, k2_index), color) in enumerate(zip(limbSeq, colors)): + keypoint1 = kp2ds_body[k1_index - 1] + keypoint2 = kp2ds_body[k2_index - 1] + + if keypoint1[-1] < threshold or keypoint2[-1] < threshold: + continue + + Y = np.array([keypoint1[0], keypoint2[0]]) + X = np.array([keypoint1[1], keypoint2[1]]) + mX = np.mean(X) + mY = np.mean(Y) + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + polygon = cv2.ellipse2Poly((int(mY), int(mX)), (int(length / 2), stickwidth), int(angle), 0, 360, 1) + cv2.fillConvexPoly(img, polygon, [int(float(c) * 0.6) for c in color]) + + for _idx, (keypoint, color) in enumerate(zip(kp2ds_body, colors)): + if keypoint[-1] < threshold: + continue + x, y = keypoint[0], keypoint[1] + # cv2.circle(canvas, (int(x), int(y)), 4, color, thickness=-1) + cv2.circle(img, (int(x), int(y)), stickwidth, color, thickness=-1) + + if draw_hand: + img = draw_handpose(img, kp2ds_lhand, hand_score_th=threshold) + img = draw_handpose(img, kp2ds_rhand, hand_score_th=threshold) + + kp2ds_body[:, 0] /= W + kp2ds_body[:, 1] /= H + + if data_to_json is not None: + if idx == -1: + data_to_json.append( + { + "image_id": "frame_{:05d}.jpg".format(len(data_to_json) + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + ) + else: + data_to_json[idx] = { + "image_id": "frame_{:05d}.jpg".format(idx + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + return img + + +def draw_nose( + img, + kp2ds, + threshold=0.6, + data_to_json=None, + idx=-1, + kp2ds_lhand=None, + kp2ds_rhand=None, + draw_hand=False, + stick_width_norm=200, +): + """ + Draw keypoints and connections representing hand pose on a given canvas. + + Args: + canvas (np.ndarray): A 3D numpy array representing the canvas (image) on which to draw the hand pose. + keypoints (List[Keypoint]| None): A list of Keypoint objects representing the hand keypoints to be drawn + or None if no keypoints are present. + + Returns: + np.ndarray: A 3D numpy array representing the modified canvas with the drawn hand pose. + + Note: + The function expects the x and y coordinates of the keypoints to be normalized between 0 and 1. + """ + + new_kep_list = [ + "Nose", + "Neck", + "RShoulder", + "RElbow", + "RWrist", # No.4 + "LShoulder", + "LElbow", + "LWrist", # No.7 + "RHip", + "RKnee", + "RAnkle", # No.10 + "LHip", + "LKnee", + "LAnkle", # No.13 + "REye", + "LEye", + "REar", + "LEar", + "LToe", + "RToe", + ] + # kp2ds_body = (kp2ds.copy()[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + \ + # kp2ds.copy()[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kp2ds = kp2ds.copy() + kp2ds[1:, 2] = 0 + # kp2ds[0, 2] = 1 + kp2ds_body = kp2ds + # kp2ds_body = kp2ds_body[:18] + + # kp2ds_lhand = kp2ds.copy()[91:112] + # kp2ds_rhand = kp2ds.copy()[112:133] + + limbSeq = [ + # [2, 3], + # [2, 6], # shoulders + # [3, 4], + # [4, 5], # left arm + # [6, 7], + # [7, 8], # right arm + # [2, 9], + # [9, 10], + # [10, 11], # right leg + # [2, 12], + # [12, 13], + # [13, 14], # left leg + # [2, 1], + [1, 15], + [15, 17], + [1, 16], + [16, 18], # face (nose, eyes, ears) + # [14, 19], + # [11, 20], # foot + ] + + colors = [ + # [255, 0, 0], + # [255, 85, 0], + # [255, 170, 0], + # [255, 255, 0], + # [170, 255, 0], + # [85, 255, 0], + # [0, 255, 0], + # [0, 255, 85], + # [0, 255, 170], + # [0, 255, 255], + # [0, 170, 255], + # [0, 85, 255], + # [0, 0, 255], + # [85, 0, 255], + [170, 0, 255], + # [255, 0, 255], + # [255, 0, 170], + # [255, 0, 85], + # foot + # [200, 200, 0], + # [100, 100, 0], + ] + + H, W, C = img.shape + stickwidth = max(int(min(H, W) / stick_width_norm), 1) + + # for _idx, ((k1_index, k2_index), color) in enumerate(zip(limbSeq, colors)): + # keypoint1 = kp2ds_body[k1_index - 1] + # keypoint2 = kp2ds_body[k2_index - 1] + + # if keypoint1[-1] < threshold or keypoint2[-1] < threshold: + # continue + + # Y = np.array([keypoint1[0], keypoint2[0]]) + # X = np.array([keypoint1[1], keypoint2[1]]) + # mX = np.mean(X) + # mY = np.mean(Y) + # length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + # angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + # polygon = cv2.ellipse2Poly((int(mY), int(mX)), (int(length / 2), stickwidth), int(angle), 0, 360, 1) + # cv2.fillConvexPoly(img, polygon, [int(float(c) * 0.6) for c in color]) + + for _idx, (keypoint, color) in enumerate(zip(kp2ds_body, colors)): + if keypoint[-1] < threshold: + continue + x, y = keypoint[0], keypoint[1] + # cv2.circle(canvas, (int(x), int(y)), 4, color, thickness=-1) + cv2.circle(img, (int(x), int(y)), stickwidth, color, thickness=-1) + + if draw_hand: + img = draw_handpose(img, kp2ds_lhand, hand_score_th=threshold) + img = draw_handpose(img, kp2ds_rhand, hand_score_th=threshold) + + kp2ds_body[:, 0] /= W + kp2ds_body[:, 1] /= H + + if data_to_json is not None: + if idx == -1: + data_to_json.append( + { + "image_id": "frame_{:05d}.jpg".format(len(data_to_json) + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + ) + else: + data_to_json[idx] = { + "image_id": "frame_{:05d}.jpg".format(idx + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + return img + + +def draw_aapose(img, kp2ds, threshold=0.6, data_to_json=None, idx=-1, kp2ds_lhand=None, kp2ds_rhand=None, draw_hand=False, stick_width_norm=200, draw_head=True): + """ + Draw keypoints and connections representing hand pose on a given canvas. + + Args: + canvas (np.ndarray): A 3D numpy array representing the canvas (image) on which to draw the hand pose. + keypoints (List[Keypoint]| None): A list of Keypoint objects representing the hand keypoints to be drawn + or None if no keypoints are present. + + Returns: + np.ndarray: A 3D numpy array representing the modified canvas with the drawn hand pose. + + Note: + The function expects the x and y coordinates of the keypoints to be normalized between 0 and 1. + """ + + new_kep_list = [ + "Nose", + "Neck", + "RShoulder", + "RElbow", + "RWrist", # No.4 + "LShoulder", + "LElbow", + "LWrist", # No.7 + "RHip", + "RKnee", + "RAnkle", # No.10 + "LHip", + "LKnee", + "LAnkle", # No.13 + "REye", + "LEye", + "REar", + "LEar", + "LToe", + "RToe", + ] + # kp2ds_body = (kp2ds.copy()[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + \ + # kp2ds.copy()[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kp2ds = kp2ds.copy() + if not draw_head: + kp2ds[[0, 14, 15, 16, 17], 2] = 0 + kp2ds_body = kp2ds + + # kp2ds_lhand = kp2ds.copy()[91:112] + # kp2ds_rhand = kp2ds.copy()[112:133] + + limbSeq = [ + [2, 3], + [2, 6], # shoulders + [3, 4], + [4, 5], # left arm + [6, 7], + [7, 8], # right arm + [2, 9], + [9, 10], + [10, 11], # right leg + [2, 12], + [12, 13], + [13, 14], # left leg + [2, 1], + [1, 15], + [15, 17], + [1, 16], + [16, 18], # face (nose, eyes, ears) + [14, 19], + [11, 20], # foot + ] + + colors = [ + [255, 0, 0], + [255, 85, 0], + [255, 170, 0], + [255, 255, 0], + [170, 255, 0], + [85, 255, 0], + [0, 255, 0], + [0, 255, 85], + [0, 255, 170], + [0, 255, 255], + [0, 170, 255], + [0, 85, 255], + [0, 0, 255], + [85, 0, 255], + [170, 0, 255], + [255, 0, 255], + [255, 0, 170], + [255, 0, 85], + # foot + [200, 200, 0], + [100, 100, 0], + ] + + H, W, C = img.shape + stickwidth = max(int(min(H, W) / stick_width_norm), 1) + + for _idx, ((k1_index, k2_index), color) in enumerate(zip(limbSeq, colors)): + keypoint1 = kp2ds_body[k1_index - 1] + keypoint2 = kp2ds_body[k2_index - 1] + + if keypoint1[-1] < threshold or keypoint2[-1] < threshold: + continue + + Y = np.array([keypoint1[0], keypoint2[0]]) + X = np.array([keypoint1[1], keypoint2[1]]) + mX = np.mean(X) + mY = np.mean(Y) + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + polygon = cv2.ellipse2Poly((int(mY), int(mX)), (int(length / 2), stickwidth), int(angle), 0, 360, 1) + cv2.fillConvexPoly(img, polygon, [int(float(c) * 0.6) for c in color]) + + for _idx, (keypoint, color) in enumerate(zip(kp2ds_body, colors)): + if keypoint[-1] < threshold: + continue + x, y = keypoint[0], keypoint[1] + # cv2.circle(canvas, (int(x), int(y)), 4, color, thickness=-1) + cv2.circle(img, (int(x), int(y)), stickwidth, color, thickness=-1) + + if draw_hand: + img = draw_handpose(img, kp2ds_lhand, hand_score_th=threshold) + img = draw_handpose(img, kp2ds_rhand, hand_score_th=threshold) + + kp2ds_body[:, 0] /= W + kp2ds_body[:, 1] /= H + + if data_to_json is not None: + if idx == -1: + data_to_json.append( + { + "image_id": "frame_{:05d}.jpg".format(len(data_to_json) + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + ) + else: + data_to_json[idx] = { + "image_id": "frame_{:05d}.jpg".format(idx + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + return img + + +def draw_aapose_new(img, kp2ds, threshold=0.6, data_to_json=None, idx=-1, kp2ds_lhand=None, kp2ds_rhand=None, draw_hand=False, stickwidth_type="v2", draw_head=True): + """ + Draw keypoints and connections representing hand pose on a given canvas. + + Args: + canvas (np.ndarray): A 3D numpy array representing the canvas (image) on which to draw the hand pose. + keypoints (List[Keypoint]| None): A list of Keypoint objects representing the hand keypoints to be drawn + or None if no keypoints are present. + + Returns: + np.ndarray: A 3D numpy array representing the modified canvas with the drawn hand pose. + + Note: + The function expects the x and y coordinates of the keypoints to be normalized between 0 and 1. + """ + + new_kep_list = [ + "Nose", + "Neck", + "RShoulder", + "RElbow", + "RWrist", # No.4 + "LShoulder", + "LElbow", + "LWrist", # No.7 + "RHip", + "RKnee", + "RAnkle", # No.10 + "LHip", + "LKnee", + "LAnkle", # No.13 + "REye", + "LEye", + "REar", + "LEar", + "LToe", + "RToe", + ] + # kp2ds_body = (kp2ds.copy()[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + \ + # kp2ds.copy()[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kp2ds = kp2ds.copy() + if not draw_head: + kp2ds[[0, 14, 15, 16, 17], 2] = 0 + kp2ds_body = kp2ds + + # kp2ds_lhand = kp2ds.copy()[91:112] + # kp2ds_rhand = kp2ds.copy()[112:133] + + limbSeq = [ + [2, 3], + [2, 6], # shoulders + [3, 4], + [4, 5], # left arm + [6, 7], + [7, 8], # right arm + [2, 9], + [9, 10], + [10, 11], # right leg + [2, 12], + [12, 13], + [13, 14], # left leg + [2, 1], + [1, 15], + [15, 17], + [1, 16], + [16, 18], # face (nose, eyes, ears) + [14, 19], + [11, 20], # foot + ] + + colors = [ + [255, 0, 0], + [255, 85, 0], + [255, 170, 0], + [255, 255, 0], + [170, 255, 0], + [85, 255, 0], + [0, 255, 0], + [0, 255, 85], + [0, 255, 170], + [0, 255, 255], + [0, 170, 255], + [0, 85, 255], + [0, 0, 255], + [85, 0, 255], + [170, 0, 255], + [255, 0, 255], + [255, 0, 170], + [255, 0, 85], + # foot + [200, 200, 0], + [100, 100, 0], + ] + + H, W, C = img.shape + H, W, C = img.shape + + if stickwidth_type == "v1": + stickwidth = max(int(min(H, W) / 200), 1) + elif stickwidth_type == "v2": + stickwidth = max(int(min(H, W) / 200) - 1, 1) + else: + raise + + for _idx, ((k1_index, k2_index), color) in enumerate(zip(limbSeq, colors)): + keypoint1 = kp2ds_body[k1_index - 1] + keypoint2 = kp2ds_body[k2_index - 1] + + if keypoint1[-1] < threshold or keypoint2[-1] < threshold: + continue + + Y = np.array([keypoint1[0], keypoint2[0]]) + X = np.array([keypoint1[1], keypoint2[1]]) + mX = np.mean(X) + mY = np.mean(Y) + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + polygon = cv2.ellipse2Poly((int(mY), int(mX)), (int(length / 2), stickwidth), int(angle), 0, 360, 1) + cv2.fillConvexPoly(img, polygon, [int(float(c) * 0.6) for c in color]) + + for _idx, (keypoint, color) in enumerate(zip(kp2ds_body, colors)): + if keypoint[-1] < threshold: + continue + x, y = keypoint[0], keypoint[1] + # cv2.circle(canvas, (int(x), int(y)), 4, color, thickness=-1) + cv2.circle(img, (int(x), int(y)), stickwidth, color, thickness=-1) + + if draw_hand: + img = draw_handpose_new(img, kp2ds_lhand, stickwidth_type=stickwidth_type, hand_score_th=threshold) + img = draw_handpose_new(img, kp2ds_rhand, stickwidth_type=stickwidth_type, hand_score_th=threshold) + + kp2ds_body[:, 0] /= W + kp2ds_body[:, 1] /= H + + if data_to_json is not None: + if idx == -1: + data_to_json.append( + { + "image_id": "frame_{:05d}.jpg".format(len(data_to_json) + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + ) + else: + data_to_json[idx] = { + "image_id": "frame_{:05d}.jpg".format(idx + 1), + "height": H, + "width": W, + "category_id": 1, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + } + return img + + +def draw_bbox(img, bbox, color=(255, 0, 0)): + img = load_image(img) + bbox = [int(bbox_tmp) for bbox_tmp in bbox] + cv2.rectangle(img, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color, 2) + return img + + +def draw_kp2ds(img, kp2ds, threshold=0, color=(255, 0, 0), skeleton=None, reverse=False): + img = load_image(img, reverse) + + if skeleton is not None: + if skeleton == "coco17": + skeleton_list = [ + [6, 8], + [8, 10], + [5, 7], + [7, 9], + [11, 13], + [13, 15], + [12, 14], + [14, 16], + [5, 6], + [6, 12], + [12, 11], + [11, 5], + ] + color_list = [ + (255, 0, 0), + (0, 255, 0), + (0, 0, 255), + (255, 255, 0), + (255, 0, 255), + (0, 255, 255), + ] + elif skeleton == "cocowholebody": + skeleton_list = [ + [6, 8], + [8, 10], + [5, 7], + [7, 9], + [11, 13], + [13, 15], + [12, 14], + [14, 16], + [5, 6], + [6, 12], + [12, 11], + [11, 5], + [15, 17], + [15, 18], + [15, 19], + [16, 20], + [16, 21], + [16, 22], + [91, 92, 93, 94, 95], + [91, 96, 97, 98, 99], + [91, 100, 101, 102, 103], + [91, 104, 105, 106, 107], + [91, 108, 109, 110, 111], + [112, 113, 114, 115, 116], + [112, 117, 118, 119, 120], + [112, 121, 122, 123, 124], + [112, 125, 126, 127, 128], + [112, 129, 130, 131, 132], + ] + color_list = [ + (255, 0, 0), + (0, 255, 0), + (0, 0, 255), + (255, 255, 0), + (255, 0, 255), + (0, 255, 255), + ] + else: + color_list = [color] + for _idx, _skeleton in enumerate(skeleton_list): + for i in range(len(_skeleton) - 1): + cv2.line( + img, + (int(kp2ds[_skeleton[i], 0]), int(kp2ds[_skeleton[i], 1])), + (int(kp2ds[_skeleton[i + 1], 0]), int(kp2ds[_skeleton[i + 1], 1])), + color_list[_idx % len(color_list)], + 3, + ) + + for _idx, kp2d in enumerate(kp2ds): + if kp2d[2] > threshold: + cv2.circle(img, (int(kp2d[0]), int(kp2d[1])), 3, color, -1) + # cv2.putText(img, + # str(_idx), + # (int(kp2d[0, i, 0])*1, + # int(kp2d[0, i, 1])*1), + # cv2.FONT_HERSHEY_SIMPLEX, + # 0.75, + # color, + # 2 + # ) + + return img + + +def draw_mask(img, mask, background=0, return_rgba=False): + img = load_image(img) + h, w, _ = img.shape + if type(background) == int: # noqa + background = np.ones((h, w, 3)).astype(np.uint8) * 255 * background + backgournd = cv2.resize(background, (w, h)) + img_rgba = np.concatenate([img, mask], -1) + return alphaMerge(img_rgba, background, 0, 0, return_rgba=True) + + +def draw_pcd(pcd_list, save_path=None): + fig = plt.figure() + ax = fig.add_subplot(111, projection="3d") + + color_list = ["r", "g", "b", "y", "p"] + + for _idx, _pcd in enumerate(pcd_list): + ax.scatter(_pcd[:, 0], _pcd[:, 1], _pcd[:, 2], c=color_list[_idx], marker="o") + + ax.set_xlabel("X") + ax.set_ylabel("Y") + ax.set_zlabel("Z") + + if save_path is not None: + plt.savefig(save_path) + else: + plt.savefig("tmp.png") + + +def load_image(img, reverse=False): + if type(img) == str: # noqa + img = cv2.imread(img) + if reverse: + img = img.astype(np.float32) + img = img[:, :, ::-1] + img = img.astype(np.uint8) + return img + + +def draw_skeleten(meta): + kps = [] + for i, kp in enumerate(meta["keypoints_body"]): + if kp is None: + # if kp is None: + kps.append([0, 0, 0]) + else: + kps.append([*kp, 1]) + kps = np.array(kps) + + kps[:, 0] *= meta["width"] + kps[:, 1] *= meta["height"] + pose_img = np.zeros([meta["height"], meta["width"], 3], dtype=np.uint8) + + pose_img = draw_aapose( + pose_img, + kps, + draw_hand=True, + kp2ds_lhand=meta["keypoints_left_hand"], + kp2ds_rhand=meta["keypoints_right_hand"], + ) + return pose_img + + +def draw_skeleten_with_pncc(pncc: np.ndarray, meta: Dict) -> np.ndarray: + """ + Args: + pncc: [H,W,3] + meta: required keys: keypoints_body: [N, 3] keypoints_left_hand, keypoints_right_hand + Return: + np.ndarray [H, W, 3] + """ + # preprocess keypoints + kps = [] + for i, kp in enumerate(meta["keypoints_body"]): + if kp is None: + # if kp is None: + kps.append([0, 0, 0]) + elif i in [14, 15, 16, 17]: + kps.append([0, 0, 0]) + else: + kps.append([*kp]) + kps = np.stack(kps) + + kps[:, 0] *= pncc.shape[1] + kps[:, 1] *= pncc.shape[0] + + # draw neck + canvas = np.zeros_like(pncc) + if kps[0][2] > 0.6 and kps[1][2] > 0.6: + canvas = draw_ellipse_by_2kp(canvas, kps[0], kps[1], [0, 0, 255]) + + # draw pncc + mask = (pncc > 0).max(axis=2) + canvas[mask] = pncc[mask] + pncc = canvas + + # draw other skeleten + kps[0] = 0 + + meta["keypoints_left_hand"][:, 0] *= meta["width"] + meta["keypoints_left_hand"][:, 1] *= meta["height"] + + meta["keypoints_right_hand"][:, 0] *= meta["width"] + meta["keypoints_right_hand"][:, 1] *= meta["height"] + pose_img = draw_aapose( + pncc, + kps, + draw_hand=True, + kp2ds_lhand=meta["keypoints_left_hand"], + kp2ds_rhand=meta["keypoints_right_hand"], + ) + return pose_img + + +FACE_CUSTOM_STYLE = { + "eyeball": {"indexs": [68, 69], "color": [255, 255, 255], "connect": False}, + "left_eyebrow": {"indexs": [17, 18, 19, 20, 21], "color": [0, 255, 0]}, + "right_eyebrow": {"indexs": [22, 23, 24, 25, 26], "color": [0, 0, 255]}, + "left_eye": {"indexs": [36, 37, 38, 39, 40, 41], "color": [255, 255, 0], "close": True}, + "right_eye": {"indexs": [42, 43, 44, 45, 46, 47], "color": [255, 0, 255], "close": True}, + "mouth_outside": {"indexs": list(range(48, 60)), "color": [100, 255, 50], "close": True}, + "mouth_inside": {"indexs": [60, 61, 62, 63, 64, 65, 66, 67], "color": [255, 100, 50], "close": True}, +} + + +def draw_face_kp(img, kps, thickness=2, style=FACE_CUSTOM_STYLE): + """ + Args: + img: [H, W, 3] + kps: [70, 2] + """ + img = img.copy() + for key, item in style.items(): + pts = np.array(kps[item["indexs"]]).astype(np.int32) + connect = item.get("connect", True) + color = item["color"] + close = item.get("close", False) + if connect: + cv2.polylines(img, [pts], close, color, thickness=thickness) + else: + for kp in pts: + kp = np.array(kp).astype(np.int32) + cv2.circle(img, kp, thickness * 2, color=color, thickness=-1) + return img + + +def draw_traj(metas: List[AAPoseMeta], threshold=0.6): + colors = [ + [255, 0, 0], + [255, 85, 0], + [255, 170, 0], + [255, 255, 0], + [170, 255, 0], + [85, 255, 0], + [0, 255, 0], + [0, 255, 85], + [0, 255, 170], + [0, 255, 255], + [0, 170, 255], + [0, 85, 255], + [0, 0, 255], + [85, 0, 255], + [170, 0, 255], + [255, 0, 255], + [255, 0, 170], + [255, 0, 85], + [100, 255, 50], + [255, 100, 50], + # foot + [200, 200, 0], + [100, 100, 0], + ] + limbSeq = [ + [1, 2], + [1, 5], # shoulders + [2, 3], + [3, 4], # left arm + [5, 6], + [6, 7], # right arm + [1, 8], + [8, 9], + [9, 10], # right leg + [1, 11], + [11, 12], + [12, 13], # left leg + # face (nose, eyes, ears) + [13, 18], + [10, 19], # foot + ] + + face_seq = [[1, 0], [0, 14], [14, 16], [0, 15], [15, 17]] + kp_body = np.array([meta.kps_body for meta in metas]) + kp_body_p = np.array([meta.kps_body_p for meta in metas]) + + face_seq = random.sample(face_seq, 2) + + kp_lh = np.array([meta.kps_lhand for meta in metas]) + kp_rh = np.array([meta.kps_rhand for meta in metas]) + + kp_lh_p = np.array([meta.kps_lhand_p for meta in metas]) + kp_rh_p = np.array([meta.kps_rhand_p for meta in metas]) + + # kp_lh = np.concatenate([kp_lh, kp_lh_p], axis=-1) + # kp_rh = np.concatenate([kp_rh, kp_rh_p], axis=-1) + + new_limbSeq = [] + key_point_list = [] + for _idx, ((k1_index, k2_index)) in enumerate(limbSeq): + vis = (kp_body_p[:, k1_index] > threshold) * (kp_body_p[:, k2_index] > threshold) * 1 + if vis.sum() * 1.0 / vis.shape[0] > 0.4: + new_limbSeq.append([k1_index, k2_index]) + + for _idx, ((k1_index, k2_index)) in enumerate(limbSeq): + keypoint1 = kp_body[:, k1_index - 1] + keypoint2 = kp_body[:, k2_index - 1] + interleave = random.randint(4, 7) + randind = random.randint(0, interleave - 1) + # randind = random.rand(range(interleave), sampling_num) + + Y = np.array([keypoint1[:, 0], keypoint2[:, 0]]) + X = np.array([keypoint1[:, 1], keypoint2[:, 1]]) + + vis = (keypoint1[:, -1] > threshold) * (keypoint2[:, -1] > threshold) * 1 + + # for randidx in randind: + t = randind / interleave + x = (1 - t) * Y[0, :] + t * Y[1, :] + y = (1 - t) * X[0, :] + t * X[1, :] + + # np.array([1]) + x = x.astype(int) + y = y.astype(int) + + new_array = np.array([x, y, vis]).T + + key_point_list.append(new_array) + + indx_lh = random.randint(0, kp_lh.shape[1] - 1) + lh = kp_lh[:, indx_lh, :] + lh_p = kp_lh_p[:, indx_lh : indx_lh + 1] + lh = np.concatenate([lh, lh_p], axis=-1) + + indx_rh = random.randint(0, kp_rh.shape[1] - 1) + rh = kp_rh[:, random.randint(0, kp_rh.shape[1] - 1), :] + rh_p = kp_rh_p[:, indx_rh : indx_rh + 1] + rh = np.concatenate([rh, rh_p], axis=-1) + + lh[-1, :] = (lh[-1, :] > threshold) * 1 + rh[-1, :] = (rh[-1, :] > threshold) * 1 + + # print(rh.shape, new_array.shape) + # exit() + key_point_list.append(lh.astype(int)) + key_point_list.append(rh.astype(int)) + + key_points_list = np.stack(key_point_list) + num_points = len(key_points_list) + sample_colors = random.sample(colors, num_points) + + stickwidth = max(int(min(metas[0].width, metas[0].height) / 150), 2) + + image_list_ori = [] + for i in range(key_points_list.shape[-2]): + _image_vis = np.zeros((metas[0].width, metas[0].height, 3)) + points = key_points_list[:, i, :] + for idx, point in enumerate(points): + x, y, vis = point + if vis == 1: + cv2.circle(_image_vis, (x, y), stickwidth, sample_colors[idx], thickness=-1) + + image_list_ori.append(_image_vis) + + return image_list_ori + + return [np.zeros([meta.width, meta.height, 3], dtype=np.uint8) for meta in metas] + + +if __name__ == "__main__": + meta = { + "image_id": "00472.jpg", + "height": 540, + "width": 414, + "category_id": 1, + "keypoints_body": [ + [0.5084776947463768, 0.11350188078703703], + [0.504467655495169, 0.20419560185185184], + [0.3982016153381642, 0.198046875], + [0.3841664779589372, 0.34869068287037036], + [0.3901815368357488, 0.4670536747685185], + [0.610733695652174, 0.2103443287037037], + [0.6167487545289855, 0.3517650462962963], + [0.6448190292874396, 0.4762767650462963], + [0.4523371452294686, 0.47320240162037036], + [0.4503321256038647, 0.6776475694444445], + [0.47639738073671495, 0.8544234664351852], + [0.5766483620169082, 0.47320240162037036], + [0.5666232638888888, 0.6761103877314815], + [0.534542949879227, 0.863646556712963], + [0.4864224788647343, 0.09505570023148148], + [0.5285278910024155, 0.09351851851851851], + [0.46236224335748793, 0.10581597222222222], + [0.5586031853864735, 0.10274160879629629], + [0.4994551064311594, 0.9405056423611111], + [0.4152442821557971, 0.9312825520833333], + ], + "keypoints_left_hand": [ + [267.78515625, 263.830078125, 1.2840936183929443], + [265.294921875, 269.640625, 1.2546794414520264], + [263.634765625, 277.111328125, 1.2863062620162964], + [262.8046875, 285.412109375, 1.267038345336914], + [261.14453125, 292.8828125, 1.280144453048706], + [273.595703125, 281.26171875, 1.2592815160751343], + [271.10546875, 291.22265625, 1.3256099224090576], + [265.294921875, 294.54296875, 1.2368024587631226], + [261.14453125, 294.54296875, 0.9771889448165894], + [274.42578125, 282.091796875, 1.250044584274292], + [269.4453125, 291.22265625, 1.2571144104003906], + [264.46484375, 292.8828125, 1.177802324295044], + [260.314453125, 292.052734375, 0.9283463358879089], + [273.595703125, 282.091796875, 1.1834490299224854], + [269.4453125, 290.392578125, 1.188171625137329], + [265.294921875, 290.392578125, 1.192609429359436], + [261.974609375, 289.5625, 0.9366656541824341], + [271.935546875, 281.26171875, 1.0946396589279175], + [268.615234375, 287.072265625, 0.9906131029129028], + [265.294921875, 287.90234375, 1.0219476222991943], + [262.8046875, 287.072265625, 0.9240120053291321], + ], + "keypoints_right_hand": [ + [161.53515625, 258.849609375, 1.2069408893585205], + [168.17578125, 263.0, 1.1846840381622314], + [173.986328125, 269.640625, 1.1435924768447876], + [173.986328125, 277.94140625, 1.1802611351013184], + [173.986328125, 286.2421875, 1.2599592208862305], + [165.685546875, 275.451171875, 1.0633569955825806], + [167.345703125, 286.2421875, 1.1693341732025146], + [169.8359375, 291.22265625, 1.2698509693145752], + [170.666015625, 294.54296875, 1.0619274377822876], + [160.705078125, 276.28125, 1.0995020866394043], + [163.1953125, 287.90234375, 1.2735884189605713], + [166.515625, 291.22265625, 1.339503526687622], + [169.005859375, 294.54296875, 1.0835273265838623], + [157.384765625, 277.111328125, 1.0866981744766235], + [161.53515625, 287.072265625, 1.2468621730804443], + [164.025390625, 289.5625, 1.2817761898040771], + [166.515625, 292.052734375, 1.099466323852539], + [155.724609375, 277.111328125, 1.1065717935562134], + [159.044921875, 285.412109375, 1.1924479007720947], + [160.705078125, 287.072265625, 1.1304771900177002], + [162.365234375, 287.90234375, 1.0040509700775146], + ], + } + demo_meta = AAPoseMeta(meta) + res = draw_traj([demo_meta] * 5) + cv2.imwrite("traj.png", res[0][..., ::-1]) diff --git a/tools/preprocess/pose2d.py b/tools/preprocess/pose2d.py new file mode 100644 index 0000000..dbd26e4 --- /dev/null +++ b/tools/preprocess/pose2d.py @@ -0,0 +1,414 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import os +from typing import List, Union + +import cv2 +import numpy as np +import onnxruntime +import torch +from pose2d_utils import bbox_from_detector, box_convert_simple, crop, keypoints_from_heatmaps, load_pose_metas_from_kp2ds_seq, read_img + + +class SimpleOnnxInference(object): + def __init__(self, checkpoint, device="cuda", reverse_input=False, **kwargs): + if isinstance(device, str): + device = torch.device(device) + if device.type == "cuda": + device = "{}:{}".format(device.type, device.index) + providers = [("CUDAExecutionProvider", {"device_id": device[-1:] if device[-1] in [str(_i) for _i in range(10)] else "0"}), "CPUExecutionProvider"] + else: + providers = ["CPUExecutionProvider"] + self.device = device + if not os.path.exists(checkpoint): + raise RuntimeError("{} is not existed!".format(checkpoint)) + + if os.path.isdir(checkpoint): + checkpoint = os.path.join(checkpoint, "end2end.onnx") + + self.session = onnxruntime.InferenceSession(checkpoint, providers=providers) + self.input_name = self.session.get_inputs()[0].name + self.output_name = self.session.get_outputs()[0].name + self.input_resolution = self.session.get_inputs()[0].shape[2:] if not reverse_input else self.session.get_inputs()[0].shape[2:][::-1] + self.input_resolution = np.array(self.input_resolution) + + def __call__(self, *args, **kwargs): + return self.forward(*args, **kwargs) + + def get_output_names(self): + output_names = [] + for node in self.session.get_outputs(): + output_names.append(node.name) + return output_names + + def set_device(self, device): + if isinstance(device, str): + device = torch.device(device) + if device.type == "cuda": + device = "{}:{}".format(device.type, device.index) + providers = [("CUDAExecutionProvider", {"device_id": device[-1:] if device[-1] in [str(_i) for _i in range(10)] else "0"}), "CPUExecutionProvider"] + else: + providers = ["CPUExecutionProvider"] + self.session.set_providers(providers) + self.device = device + + +class Yolo(SimpleOnnxInference): + def __init__( + self, + checkpoint, + device="cuda", + threshold_conf=0.05, + threshold_multi_persons=0.1, + input_resolution=(640, 640), + threshold_iou=0.5, + threshold_bbox_shape_ratio=0.4, + cat_id=[1], + select_type="max", + strict=True, + sorted_func=None, + **kwargs, + ): + super(Yolo, self).__init__(checkpoint, device=device, **kwargs) + + model_inputs = self.session.get_inputs() + input_shape = model_inputs[0].shape + + self.input_width = 640 + self.input_height = 640 + + self.threshold_multi_persons = threshold_multi_persons + self.threshold_conf = threshold_conf + self.threshold_iou = threshold_iou + self.threshold_bbox_shape_ratio = threshold_bbox_shape_ratio + self.input_resolution = input_resolution + self.cat_id = cat_id + self.select_type = select_type + self.strict = strict + self.sorted_func = sorted_func + + def preprocess(self, input_image): + """ + Preprocesses the input image before performing inference. + + Returns: + image_data: Preprocessed image data ready for inference. + """ + img = read_img(input_image) + # Get the height and width of the input image + img_height, img_width = img.shape[:2] + # Resize the image to match the input shape + img = cv2.resize(img, (self.input_resolution[1], self.input_resolution[0])) + # Normalize the image data by dividing it by 255.0 + image_data = np.array(img) / 255.0 + # Transpose the image to have the channel dimension as the first dimension + image_data = np.transpose(image_data, (2, 0, 1)) # Channel first + # Expand the dimensions of the image data to match the expected input shape + # image_data = np.expand_dims(image_data, axis=0).astype(np.float32) + image_data = image_data.astype(np.float32) + # Return the preprocessed image data + return image_data, np.array([img_height, img_width]) + + def postprocess(self, output, shape_raw, cat_id=[1]): + """ + Performs post-processing on the model's output to extract bounding boxes, scores, and class IDs. + + Args: + input_image (numpy.ndarray): The input image. + output (numpy.ndarray): The output of the model. + + Returns: + numpy.ndarray: The input image with detections drawn on it. + """ + # Transpose and squeeze the output to match the expected shape + + outputs = np.squeeze(output) + if len(outputs.shape) == 1: + outputs = outputs[None] + if output.shape[-1] != 6 and output.shape[1] == 84: + outputs = np.transpose(outputs) + + # Get the number of rows in the outputs array + rows = outputs.shape[0] + + # Calculate the scaling factors for the bounding box coordinates + x_factor = shape_raw[1] / self.input_width + y_factor = shape_raw[0] / self.input_height + + # Lists to store the bounding boxes, scores, and class IDs of the detections + boxes = [] + scores = [] + class_ids = [] + + if outputs.shape[-1] == 6: + max_scores = outputs[:, 4] + classid = outputs[:, -1] + + threshold_conf_masks = max_scores >= self.threshold_conf + classid_masks = classid[threshold_conf_masks] != 3.14159 + + max_scores = max_scores[threshold_conf_masks][classid_masks] + classid = classid[threshold_conf_masks][classid_masks] + + boxes = outputs[:, :4][threshold_conf_masks][classid_masks] + boxes[:, [0, 2]] *= x_factor + boxes[:, [1, 3]] *= y_factor + boxes[:, 2] = boxes[:, 2] - boxes[:, 0] + boxes[:, 3] = boxes[:, 3] - boxes[:, 1] + boxes = boxes.astype(np.int32) + + else: + classes_scores = outputs[:, 4:] + max_scores = np.amax(classes_scores, -1) + threshold_conf_masks = max_scores >= self.threshold_conf + + classid = np.argmax(classes_scores[threshold_conf_masks], -1) + + classid_masks = classid != 3.14159 + + classes_scores = classes_scores[threshold_conf_masks][classid_masks] + max_scores = max_scores[threshold_conf_masks][classid_masks] + classid = classid[classid_masks] + + xywh = outputs[:, :4][threshold_conf_masks][classid_masks] + + x = xywh[:, 0:1] + y = xywh[:, 1:2] + w = xywh[:, 2:3] + h = xywh[:, 3:4] + + left = (x - w / 2) * x_factor + top = (y - h / 2) * y_factor + width = w * x_factor + height = h * y_factor + boxes = np.concatenate([left, top, width, height], axis=-1).astype(np.int32) + + boxes = boxes.tolist() + scores = max_scores.tolist() + class_ids = classid.tolist() + + # Apply non-maximum suppression to filter out overlapping bounding boxes + indices = cv2.dnn.NMSBoxes(boxes, scores, self.threshold_conf, self.threshold_iou) + # Iterate over the selected indices after non-maximum suppression + + results = [] + for i in indices: + # Get the box, score, and class ID corresponding to the index + box = box_convert_simple(boxes[i], "xywh2xyxy") + score = scores[i] + class_id = class_ids[i] + results.append(box + [score] + [class_id]) + # # Draw the detection on the input image + + # Return the modified input image + return np.array(results) + + def process_results(self, results, shape_raw, cat_id=[1], single_person=True): + if isinstance(results, tuple): + det_results = results[0] + else: + det_results = results + + person_results = [] + person_count = 0 + if len(results): + max_idx = -1 + max_bbox_size = shape_raw[0] * shape_raw[1] * -10 + max_bbox_shape = -1 + + bboxes = [] + idx_list = [] + for i in range(results.shape[0]): + bbox = results[i] + if (bbox[-1] + 1 in cat_id) and (bbox[-2] > self.threshold_conf): + idx_list.append(i) + bbox_shape = max((bbox[2] - bbox[0]), (bbox[3] - bbox[1])) + if bbox_shape > max_bbox_shape: + max_bbox_shape = bbox_shape + + results = results[idx_list] + + for i in range(results.shape[0]): + bbox = results[i] + bboxes.append(bbox) + if self.select_type == "max": + bbox_size = (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) + elif self.select_type == "center": + bbox_size = (abs((bbox[2] + bbox[0]) / 2 - shape_raw[1] / 2)) * -1 + bbox_shape = max((bbox[2] - bbox[0]), (bbox[3] - bbox[1])) + if bbox_size > max_bbox_size: + if (self.strict or max_idx != -1) and bbox_shape < max_bbox_shape * self.threshold_bbox_shape_ratio: + continue + max_bbox_size = bbox_size + max_bbox_shape = bbox_shape + max_idx = i + + if self.sorted_func is not None and len(bboxes) > 0: + max_idx = self.sorted_func(bboxes, shape_raw) + bbox = bboxes[max_idx] + if self.select_type == "max": + max_bbox_size = (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) + elif self.select_type == "center": + max_bbox_size = (abs((bbox[2] + bbox[0]) / 2 - shape_raw[1] / 2)) * -1 + + if max_idx != -1: + person_count = 1 + + if max_idx != -1: + person = {} + person["bbox"] = results[max_idx, :5] + person["track_id"] = int(0) + person_results.append(person) + + for i in range(results.shape[0]): + bbox = results[i] + if (bbox[-1] + 1 in cat_id) and (bbox[-2] > self.threshold_conf): + if self.select_type == "max": + bbox_size = (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) + elif self.select_type == "center": + bbox_size = (abs((bbox[2] + bbox[0]) / 2 - shape_raw[1] / 2)) * -1 + if i != max_idx and bbox_size > max_bbox_size * self.threshold_multi_persons and bbox_size < max_bbox_size: + person_count += 1 + if not single_person: + person = {} + person["bbox"] = results[i, :5] + person["track_id"] = int(person_count - 1) + person_results.append(person) + return person_results + else: + return None + + def postprocess_threading(self, outputs, shape_raw, person_results, i, single_person=True, **kwargs): + result = self.postprocess(outputs[i], shape_raw[i], cat_id=self.cat_id) + result = self.process_results(result, shape_raw[i], cat_id=self.cat_id, single_person=single_person) + if result is not None and len(result) != 0: + person_results[i] = result + + def forward(self, img, shape_raw, **kwargs): + """ + Performs inference using an ONNX model and returns the output image with drawn detections. + + Returns: + output_img: The output image with drawn detections. + """ + if isinstance(img, torch.Tensor): + img = img.cpu().numpy() + shape_raw = shape_raw.cpu().numpy() + + outputs = self.session.run(None, {self.session.get_inputs()[0].name: img})[0] + person_results = [[{"bbox": np.array([0.0, 0.0, 1.0 * shape_raw[i][1], 1.0 * shape_raw[i][0], -1]), "track_id": -1}] for i in range(len(outputs))] + + for i in range(len(outputs)): + self.postprocess_threading(outputs, shape_raw, person_results, i, **kwargs) + return person_results + + +class ViTPose(SimpleOnnxInference): + def __init__(self, checkpoint, device="cuda", **kwargs): + super(ViTPose, self).__init__(checkpoint, device=device) + + def forward(self, img, center, scale, **kwargs): + heatmaps = self.session.run([], {self.session.get_inputs()[0].name: img})[0] + points, prob = keypoints_from_heatmaps(heatmaps=heatmaps, center=center, scale=scale * 200, unbiased=True, use_udp=False) + return np.concatenate([points, prob], axis=2) + + @staticmethod + def preprocess(img, bbox=None, input_resolution=(256, 192), rescale=1.25, mask=None, **kwargs): + if bbox is None or bbox[-1] <= 0 or (bbox[2] - bbox[0]) < 10 or (bbox[3] - bbox[1]) < 10: + bbox = np.array([0, 0, img.shape[1], img.shape[0]]) + + bbox_xywh = bbox + if mask is not None: + img = np.where(mask > 128, img, mask) + + if isinstance(input_resolution, int): + center, scale = bbox_from_detector(bbox_xywh, (input_resolution, input_resolution), rescale=rescale) + img, new_shape, old_xy, new_xy = crop(img, center, scale, (input_resolution, input_resolution)) + else: + center, scale = bbox_from_detector(bbox_xywh, input_resolution, rescale=rescale) + img, new_shape, old_xy, new_xy = crop(img, center, scale, (input_resolution[0], input_resolution[1])) + + IMG_NORM_MEAN = np.array([0.485, 0.456, 0.406]) + IMG_NORM_STD = np.array([0.229, 0.224, 0.225]) + img_norm = (img / 255.0 - IMG_NORM_MEAN) / IMG_NORM_STD + img_norm = img_norm.transpose(2, 0, 1).astype(np.float32) + return img_norm, np.array(center), np.array(scale) + + +class Pose2d: + def __init__(self, checkpoint, detector_checkpoint=None, device="cuda", **kwargs): + if detector_checkpoint is not None: + self.detector = Yolo(detector_checkpoint, device) + else: + self.detector = None + + self.model = ViTPose(checkpoint, device) + self.device = device + + def load_images(self, inputs): + """ + Load images from various input types. + + Args: + inputs (Union[str, np.ndarray, List[np.ndarray]]): Input can be file path, + single image array, or list of image arrays + + Returns: + List[np.ndarray]: List of RGB image arrays + + Raises: + ValueError: If file format is unsupported or image cannot be read + """ + if isinstance(inputs, str): + if inputs.lower().endswith((".mp4", ".avi", ".mov", ".mkv")): + cap = cv2.VideoCapture(inputs) + frames = [] + while True: + ret, frame = cap.read() + if not ret: + break + frames.append(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) + cap.release() + images = frames + elif inputs.lower().endswith((".jpg", ".jpeg", ".png", ".bmp")): + img = cv2.cvtColor(cv2.imread(inputs), cv2.COLOR_BGR2RGB) + if img is None: + raise ValueError(f"Cannot read image: {inputs}") + images = [img] + else: + raise ValueError(f"Unsupported file format: {inputs}") + + elif isinstance(inputs, np.ndarray): + images = [cv2.cvtColor(image, cv2.COLOR_BGR2RGB) for image in inputs] + elif isinstance(inputs, list): + images = [cv2.cvtColor(image, cv2.COLOR_BGR2RGB) for image in inputs] + return images + + def __call__(self, inputs: Union[str, np.ndarray, List[np.ndarray]], return_image: bool = False, **kwargs): + """ + Process input and estimate 2D keypoints. + + Args: + inputs (Union[str, np.ndarray, List[np.ndarray]]): Input can be file path, + single image array, or list of image arrays + **kwargs: Additional arguments for processing + + Returns: + np.ndarray: Array of detected 2D keypoints for all input images + """ + images = self.load_images(inputs) + H, W = images[0].shape[:2] + if self.detector is not None: + bboxes = [] + for _image in images: + img, shape = self.detector.preprocess(_image) + bboxes.append(self.detector(img[None], shape[None])[0][0]["bbox"]) + else: + bboxes = [None] * len(images) + + kp2ds = [] + for _image, _bbox in zip(images, bboxes): + img, center, scale = self.model.preprocess(_image, _bbox) + kp2ds.append(self.model(img[None], center[None], scale[None])) + kp2ds = np.concatenate(kp2ds, 0) + metas = load_pose_metas_from_kp2ds_seq(kp2ds, width=W, height=H) + return metas diff --git a/tools/preprocess/pose2d_utils.py b/tools/preprocess/pose2d_utils.py new file mode 100644 index 0000000..bdf93e1 --- /dev/null +++ b/tools/preprocess/pose2d_utils.py @@ -0,0 +1,1117 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import warnings +from typing import List + +import cv2 +import numpy as np +from PIL import Image + + +def box_convert_simple(box, convert_type="xyxy2xywh"): + if convert_type == "xyxy2xywh": + return [box[0], box[1], box[2] - box[0], box[3] - box[1]] + elif convert_type == "xywh2xyxy": + return [box[0], box[1], box[2] + box[0], box[3] + box[1]] + elif convert_type == "xyxy2ctwh": + return [(box[0] + box[2]) / 2, (box[1] + box[3]) / 2, box[2] - box[0], box[3] - box[1]] + elif convert_type == "ctwh2xyxy": + return [box[0] - box[2] // 2, box[1] - box[3] // 2, box[0] + (box[2] - box[2] // 2), box[1] + (box[3] - box[3] // 2)] + + +def read_img(image, convert="RGB", check_exist=False): + if isinstance(image, str): + if check_exist and not osp.exists(image): + return None + try: + img = Image.open(image) + if convert: + img = img.convert(convert) + except: # noqa + raise IOError("File error: ", image) + return np.asarray(img) + else: + if isinstance(image, np.ndarray): + if convert: + return image[..., ::-1] + else: + if convert: + img = img.convert(convert) + return np.asarray(img) + + +class AAPoseMeta: + def __init__(self, meta=None, kp2ds=None): + self.image_id = "" + self.height = 0 + self.width = 0 + + self.kps_body: np.ndarray = None + self.kps_lhand: np.ndarray = None + self.kps_rhand: np.ndarray = None + self.kps_face: np.ndarray = None + self.kps_body_p: np.ndarray = None + self.kps_lhand_p: np.ndarray = None + self.kps_rhand_p: np.ndarray = None + self.kps_face_p: np.ndarray = None + + if meta is not None: + self.load_from_meta(meta) + elif kp2ds is not None: + self.load_from_kp2ds(kp2ds) + + def is_valid(self, kp, p, threshold): + x, y = kp + if x < 0 or y < 0 or x > self.width or y > self.height or p < threshold: + return False + else: + return True + + def get_bbox(self, kp, kp_p, threshold=0.5): + kps = kp[kp_p > threshold] + if kps.size == 0: + return 0, 0, 0, 0 + x0, y0 = kps.min(axis=0) + x1, y1 = kps.max(axis=0) + return x0, y0, x1, y1 + + def crop(self, x0, y0, x1, y1): + all_kps = [self.kps_body, self.kps_lhand, self.kps_rhand, self.kps_face] + for kps in all_kps: + if kps is not None: + kps[:, 0] -= x0 + kps[:, 1] -= y0 + self.width = x1 - x0 + self.height = y1 - y0 + return self + + def resize(self, width, height): + scale_x = width / self.width + scale_y = height / self.height + all_kps = [self.kps_body, self.kps_lhand, self.kps_rhand, self.kps_face] + for kps in all_kps: + if kps is not None: + kps[:, 0] *= scale_x + kps[:, 1] *= scale_y + self.width = width + self.height = height + return self + + def get_kps_body_with_p(self, normalize=False): + kps_body = self.kps_body.copy() + if normalize: + kps_body = kps_body / np.array([self.width, self.height]) + + return np.concatenate([kps_body, self.kps_body_p[:, None]]) + + @staticmethod + def from_kps_face(kps_face: np.ndarray, height: int, width: int): + pose_meta = AAPoseMeta() + pose_meta.kps_face = kps_face[:, :2] + if kps_face.shape[1] == 3: + pose_meta.kps_face_p = kps_face[:, 2] + else: + pose_meta.kps_face_p = kps_face[:, 0] * 0 + 1 + pose_meta.height = height + pose_meta.width = width + return pose_meta + + @staticmethod + def from_kps_body(kps_body: np.ndarray, height: int, width: int): + pose_meta = AAPoseMeta() + pose_meta.kps_body = kps_body[:, :2] + pose_meta.kps_body_p = kps_body[:, 2] + pose_meta.height = height + pose_meta.width = width + return pose_meta + + @staticmethod + def from_humanapi_meta(meta): + pose_meta = AAPoseMeta() + width, height = meta["width"], meta["height"] + pose_meta.width = width + pose_meta.height = height + pose_meta.kps_body = meta["keypoints_body"][:, :2] * (width, height) + pose_meta.kps_body_p = meta["keypoints_body"][:, 2] + pose_meta.kps_lhand = meta["keypoints_left_hand"][:, :2] * (width, height) + pose_meta.kps_lhand_p = meta["keypoints_left_hand"][:, 2] + pose_meta.kps_rhand = meta["keypoints_right_hand"][:, :2] * (width, height) + pose_meta.kps_rhand_p = meta["keypoints_right_hand"][:, 2] + if "keypoints_face" in meta: + pose_meta.kps_face = meta["keypoints_face"][:, :2] * (width, height) + pose_meta.kps_face_p = meta["keypoints_face"][:, 2] + return pose_meta + + def load_from_meta(self, meta, norm_body=True, norm_hand=False): + self.image_id = meta.get("image_id", "00000.png") + self.height = meta["height"] + self.width = meta["width"] + kps_body_p = [] + kps_body = [] + for kp in meta["keypoints_body"]: + if kp is None: + kps_body.append([0, 0]) + kps_body_p.append(0) + else: + kps_body.append(kp) + kps_body_p.append(1) + + self.kps_body = np.array(kps_body) + self.kps_body[:, 0] *= self.width + self.kps_body[:, 1] *= self.height + self.kps_body_p = np.array(kps_body_p) + + self.kps_lhand = np.array(meta["keypoints_left_hand"])[:, :2] + self.kps_lhand_p = np.array(meta["keypoints_left_hand"])[:, 2] + self.kps_rhand = np.array(meta["keypoints_right_hand"])[:, :2] + self.kps_rhand_p = np.array(meta["keypoints_right_hand"])[:, 2] + + @staticmethod + def load_from_kp2ds(kp2ds: List[np.ndarray], width: int, height: int): + """input 133x3 numpy keypoints and output AAPoseMeta + + Args: + kp2ds (List[np.ndarray]): _description_ + width (int): _description_ + height (int): _description_ + + Returns: + _type_: _description_ + """ + pose_meta = AAPoseMeta() + pose_meta.width = width + pose_meta.height = height + kps_body = (kp2ds[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + kp2ds[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kps_lhand = kp2ds[91:112] + kps_rhand = kp2ds[112:133] + kps_face = np.concatenate([kp2ds[23 : 23 + 68], kp2ds[1:3]], axis=0) + pose_meta.kps_body = kps_body[:, :2] + pose_meta.kps_body_p = kps_body[:, 2] + pose_meta.kps_lhand = kps_lhand[:, :2] + pose_meta.kps_lhand_p = kps_lhand[:, 2] + pose_meta.kps_rhand = kps_rhand[:, :2] + pose_meta.kps_rhand_p = kps_rhand[:, 2] + pose_meta.kps_face = kps_face[:, :2] + pose_meta.kps_face_p = kps_face[:, 2] + return pose_meta + + @staticmethod + def from_dwpose(dwpose_det_res, height, width): + pose_meta = AAPoseMeta() + pose_meta.kps_body = dwpose_det_res["bodies"]["candidate"] + pose_meta.kps_body_p = dwpose_det_res["bodies"]["score"] + pose_meta.kps_body[:, 0] *= width + pose_meta.kps_body[:, 1] *= height + + pose_meta.kps_lhand, pose_meta.kps_rhand = dwpose_det_res["hands"] + pose_meta.kps_lhand[:, 0] *= width + pose_meta.kps_lhand[:, 1] *= height + pose_meta.kps_rhand[:, 0] *= width + pose_meta.kps_rhand[:, 1] *= height + pose_meta.kps_lhand_p, pose_meta.kps_rhand_p = dwpose_det_res["hands_score"] + + pose_meta.kps_face = dwpose_det_res["faces"][0] + pose_meta.kps_face[:, 0] *= width + pose_meta.kps_face[:, 1] *= height + pose_meta.kps_face_p = dwpose_det_res["faces_score"][0] + return pose_meta + + def save_json(self): + pass + + def draw_aapose(self, img, threshold=0.5, stick_width_norm=200, draw_hand=True, draw_head=True): + from .human_visualization import draw_aapose_by_meta + + return draw_aapose_by_meta(img, self, threshold, stick_width_norm, draw_hand, draw_head) + + def translate(self, x0, y0): + all_kps = [self.kps_body, self.kps_lhand, self.kps_rhand, self.kps_face] + for kps in all_kps: + if kps is not None: + kps[:, 0] -= x0 + kps[:, 1] -= y0 + + def scale(self, sx, sy): + all_kps = [self.kps_body, self.kps_lhand, self.kps_rhand, self.kps_face] + for kps in all_kps: + if kps is not None: + kps[:, 0] *= sx + kps[:, 1] *= sy + + def padding_resize2(self, height=512, width=512): + """kps will be changed inplace""" + + all_kps = [self.kps_body, self.kps_lhand, self.kps_rhand, self.kps_face] + + ori_height, ori_width = self.height, self.width + + if (ori_height / ori_width) > (height / width): + new_width = int(height / ori_height * ori_width) + padding = int((width - new_width) / 2) + padding_width = padding + padding_height = 0 + scale = height / ori_height + + for kps in all_kps: + if kps is not None: + kps[:, 0] = kps[:, 0] * scale + padding + kps[:, 1] = kps[:, 1] * scale + + else: + new_height = int(width / ori_width * ori_height) + padding = int((height - new_height) / 2) + padding_width = 0 + padding_height = padding + scale = width / ori_width + for kps in all_kps: + if kps is not None: + kps[:, 1] = kps[:, 1] * scale + padding + kps[:, 0] = kps[:, 0] * scale + + self.width = width + self.height = height + return self + + +def transform_preds(coords, center, scale, output_size, use_udp=False): + """Get final keypoint predictions from heatmaps and apply scaling and + translation to map them back to the image. + + Note: + num_keypoints: K + + Args: + coords (np.ndarray[K, ndims]): + + * If ndims=2, corrds are predicted keypoint location. + * If ndims=4, corrds are composed of (x, y, scores, tags) + * If ndims=5, corrds are composed of (x, y, scores, tags, + flipped_tags) + + center (np.ndarray[2, ]): Center of the bounding box (x, y). + scale (np.ndarray[2, ]): Scale of the bounding box + wrt [width, height]. + output_size (np.ndarray[2, ] | list(2,)): Size of the + destination heatmaps. + use_udp (bool): Use unbiased data processing + + Returns: + np.ndarray: Predicted coordinates in the images. + """ + assert coords.shape[1] in (2, 4, 5) + assert len(center) == 2 + assert len(scale) == 2 + assert len(output_size) == 2 + + # Recover the scale which is normalized by a factor of 200. + # scale = scale * 200.0 + + if use_udp: + scale_x = scale[0] / (output_size[0] - 1.0) + scale_y = scale[1] / (output_size[1] - 1.0) + else: + scale_x = scale[0] / output_size[0] + scale_y = scale[1] / output_size[1] + + target_coords = np.ones_like(coords) + target_coords[:, 0] = coords[:, 0] * scale_x + center[0] - scale[0] * 0.5 + target_coords[:, 1] = coords[:, 1] * scale_y + center[1] - scale[1] * 0.5 + + return target_coords + + +def _calc_distances(preds, targets, mask, normalize): + """Calculate the normalized distances between preds and target. + + Note: + batch_size: N + num_keypoints: K + dimension of keypoints: D (normally, D=2 or D=3) + + Args: + preds (np.ndarray[N, K, D]): Predicted keypoint location. + targets (np.ndarray[N, K, D]): Groundtruth keypoint location. + mask (np.ndarray[N, K]): Visibility of the target. False for invisible + joints, and True for visible. Invisible joints will be ignored for + accuracy calculation. + normalize (np.ndarray[N, D]): Typical value is heatmap_size + + Returns: + np.ndarray[K, N]: The normalized distances. \ + If target keypoints are missing, the distance is -1. + """ + N, K, _ = preds.shape + # set mask=0 when normalize==0 + _mask = mask.copy() + _mask[np.where((normalize == 0).sum(1))[0], :] = False + distances = np.full((N, K), -1, dtype=np.float32) + # handle invalid values + normalize[np.where(normalize <= 0)] = 1e6 + distances[_mask] = np.linalg.norm(((preds - targets) / normalize[:, None, :])[_mask], axis=-1) + return distances.T + + +def _distance_acc(distances, thr=0.5): + """Return the percentage below the distance threshold, while ignoring + distances values with -1. + + Note: + batch_size: N + Args: + distances (np.ndarray[N, ]): The normalized distances. + thr (float): Threshold of the distances. + + Returns: + float: Percentage of distances below the threshold. \ + If all target keypoints are missing, return -1. + """ + distance_valid = distances != -1 + num_distance_valid = distance_valid.sum() + if num_distance_valid > 0: + return (distances[distance_valid] < thr).sum() / num_distance_valid + return -1 + + +def _get_max_preds(heatmaps): + """Get keypoint predictions from score maps. + + Note: + batch_size: N + num_keypoints: K + heatmap height: H + heatmap width: W + + Args: + heatmaps (np.ndarray[N, K, H, W]): model predicted heatmaps. + + Returns: + tuple: A tuple containing aggregated results. + + - preds (np.ndarray[N, K, 2]): Predicted keypoint location. + - maxvals (np.ndarray[N, K, 1]): Scores (confidence) of the keypoints. + """ + assert isinstance(heatmaps, np.ndarray), "heatmaps should be numpy.ndarray" + assert heatmaps.ndim == 4, "batch_images should be 4-ndim" + + N, K, _, W = heatmaps.shape + heatmaps_reshaped = heatmaps.reshape((N, K, -1)) + idx = np.argmax(heatmaps_reshaped, 2).reshape((N, K, 1)) + maxvals = np.amax(heatmaps_reshaped, 2).reshape((N, K, 1)) + + preds = np.tile(idx, (1, 1, 2)).astype(np.float32) + preds[:, :, 0] = preds[:, :, 0] % W + preds[:, :, 1] = preds[:, :, 1] // W + + preds = np.where(np.tile(maxvals, (1, 1, 2)) > 0.0, preds, -1) + return preds, maxvals + + +def _get_max_preds_3d(heatmaps): + """Get keypoint predictions from 3D score maps. + + Note: + batch size: N + num keypoints: K + heatmap depth size: D + heatmap height: H + heatmap width: W + + Args: + heatmaps (np.ndarray[N, K, D, H, W]): model predicted heatmaps. + + Returns: + tuple: A tuple containing aggregated results. + + - preds (np.ndarray[N, K, 3]): Predicted keypoint location. + - maxvals (np.ndarray[N, K, 1]): Scores (confidence) of the keypoints. + """ + assert isinstance(heatmaps, np.ndarray), "heatmaps should be numpy.ndarray" + assert heatmaps.ndim == 5, "heatmaps should be 5-ndim" + + N, K, D, H, W = heatmaps.shape + heatmaps_reshaped = heatmaps.reshape((N, K, -1)) + idx = np.argmax(heatmaps_reshaped, 2).reshape((N, K, 1)) + maxvals = np.amax(heatmaps_reshaped, 2).reshape((N, K, 1)) + + preds = np.zeros((N, K, 3), dtype=np.float32) + _idx = idx[..., 0] + preds[..., 2] = _idx // (H * W) + preds[..., 1] = (_idx // W) % H + preds[..., 0] = _idx % W + + preds = np.where(maxvals > 0.0, preds, -1) + return preds, maxvals + + +def pose_pck_accuracy(output, target, mask, thr=0.05, normalize=None): + """Calculate the pose accuracy of PCK for each individual keypoint and the + averaged accuracy across all keypoints from heatmaps. + + Note: + PCK metric measures accuracy of the localization of the body joints. + The distances between predicted positions and the ground-truth ones + are typically normalized by the bounding box size. + The threshold (thr) of the normalized distance is commonly set + as 0.05, 0.1 or 0.2 etc. + + - batch_size: N + - num_keypoints: K + - heatmap height: H + - heatmap width: W + + Args: + output (np.ndarray[N, K, H, W]): Model output heatmaps. + target (np.ndarray[N, K, H, W]): Groundtruth heatmaps. + mask (np.ndarray[N, K]): Visibility of the target. False for invisible + joints, and True for visible. Invisible joints will be ignored for + accuracy calculation. + thr (float): Threshold of PCK calculation. Default 0.05. + normalize (np.ndarray[N, 2]): Normalization factor for H&W. + + Returns: + tuple: A tuple containing keypoint accuracy. + + - np.ndarray[K]: Accuracy of each keypoint. + - float: Averaged accuracy across all keypoints. + - int: Number of valid keypoints. + """ + N, K, H, W = output.shape + if K == 0: + return None, 0, 0 + if normalize is None: + normalize = np.tile(np.array([[H, W]]), (N, 1)) + + pred, _ = _get_max_preds(output) + gt, _ = _get_max_preds(target) + return keypoint_pck_accuracy(pred, gt, mask, thr, normalize) + + +def keypoint_pck_accuracy(pred, gt, mask, thr, normalize): + """Calculate the pose accuracy of PCK for each individual keypoint and the + averaged accuracy across all keypoints for coordinates. + + Note: + PCK metric measures accuracy of the localization of the body joints. + The distances between predicted positions and the ground-truth ones + are typically normalized by the bounding box size. + The threshold (thr) of the normalized distance is commonly set + as 0.05, 0.1 or 0.2 etc. + + - batch_size: N + - num_keypoints: K + + Args: + pred (np.ndarray[N, K, 2]): Predicted keypoint location. + gt (np.ndarray[N, K, 2]): Groundtruth keypoint location. + mask (np.ndarray[N, K]): Visibility of the target. False for invisible + joints, and True for visible. Invisible joints will be ignored for + accuracy calculation. + thr (float): Threshold of PCK calculation. + normalize (np.ndarray[N, 2]): Normalization factor for H&W. + + Returns: + tuple: A tuple containing keypoint accuracy. + + - acc (np.ndarray[K]): Accuracy of each keypoint. + - avg_acc (float): Averaged accuracy across all keypoints. + - cnt (int): Number of valid keypoints. + """ + distances = _calc_distances(pred, gt, mask, normalize) + + acc = np.array([_distance_acc(d, thr) for d in distances]) + valid_acc = acc[acc >= 0] + cnt = len(valid_acc) + avg_acc = valid_acc.mean() if cnt > 0 else 0 + return acc, avg_acc, cnt + + +def keypoint_auc(pred, gt, mask, normalize, num_step=20): + """Calculate the pose accuracy of PCK for each individual keypoint and the + averaged accuracy across all keypoints for coordinates. + + Note: + - batch_size: N + - num_keypoints: K + + Args: + pred (np.ndarray[N, K, 2]): Predicted keypoint location. + gt (np.ndarray[N, K, 2]): Groundtruth keypoint location. + mask (np.ndarray[N, K]): Visibility of the target. False for invisible + joints, and True for visible. Invisible joints will be ignored for + accuracy calculation. + normalize (float): Normalization factor. + + Returns: + float: Area under curve. + """ + nor = np.tile(np.array([[normalize, normalize]]), (pred.shape[0], 1)) + x = [1.0 * i / num_step for i in range(num_step)] + y = [] + for thr in x: + _, avg_acc, _ = keypoint_pck_accuracy(pred, gt, mask, thr, nor) + y.append(avg_acc) + + auc = 0 + for i in range(num_step): + auc += 1.0 / num_step * y[i] + return auc + + +def keypoint_nme(pred, gt, mask, normalize_factor): + """Calculate the normalized mean error (NME). + + Note: + - batch_size: N + - num_keypoints: K + + Args: + pred (np.ndarray[N, K, 2]): Predicted keypoint location. + gt (np.ndarray[N, K, 2]): Groundtruth keypoint location. + mask (np.ndarray[N, K]): Visibility of the target. False for invisible + joints, and True for visible. Invisible joints will be ignored for + accuracy calculation. + normalize_factor (np.ndarray[N, 2]): Normalization factor. + + Returns: + float: normalized mean error + """ + distances = _calc_distances(pred, gt, mask, normalize_factor) + distance_valid = distances[distances != -1] + return distance_valid.sum() / max(1, len(distance_valid)) + + +def keypoint_epe(pred, gt, mask): + """Calculate the end-point error. + + Note: + - batch_size: N + - num_keypoints: K + + Args: + pred (np.ndarray[N, K, 2]): Predicted keypoint location. + gt (np.ndarray[N, K, 2]): Groundtruth keypoint location. + mask (np.ndarray[N, K]): Visibility of the target. False for invisible + joints, and True for visible. Invisible joints will be ignored for + accuracy calculation. + + Returns: + float: Average end-point error. + """ + + distances = _calc_distances(pred, gt, mask, np.ones((pred.shape[0], pred.shape[2]), dtype=np.float32)) + distance_valid = distances[distances != -1] + return distance_valid.sum() / max(1, len(distance_valid)) + + +def _taylor(heatmap, coord): + """Distribution aware coordinate decoding method. + + Note: + - heatmap height: H + - heatmap width: W + + Args: + heatmap (np.ndarray[H, W]): Heatmap of a particular joint type. + coord (np.ndarray[2,]): Coordinates of the predicted keypoints. + + Returns: + np.ndarray[2,]: Updated coordinates. + """ + H, W = heatmap.shape[:2] + px, py = int(coord[0]), int(coord[1]) + if 1 < px < W - 2 and 1 < py < H - 2: + dx = 0.5 * (heatmap[py][px + 1] - heatmap[py][px - 1]) + dy = 0.5 * (heatmap[py + 1][px] - heatmap[py - 1][px]) + dxx = 0.25 * (heatmap[py][px + 2] - 2 * heatmap[py][px] + heatmap[py][px - 2]) + dxy = 0.25 * (heatmap[py + 1][px + 1] - heatmap[py - 1][px + 1] - heatmap[py + 1][px - 1] + heatmap[py - 1][px - 1]) + dyy = 0.25 * (heatmap[py + 2 * 1][px] - 2 * heatmap[py][px] + heatmap[py - 2 * 1][px]) + derivative = np.array([[dx], [dy]]) + hessian = np.array([[dxx, dxy], [dxy, dyy]]) + if dxx * dyy - dxy**2 != 0: + hessianinv = np.linalg.inv(hessian) + offset = -hessianinv @ derivative + offset = np.squeeze(np.array(offset.T), axis=0) + coord += offset + return coord + + +def post_dark_udp(coords, batch_heatmaps, kernel=3): + """DARK post-pocessing. Implemented by udp. Paper ref: Huang et al. The + Devil is in the Details: Delving into Unbiased Data Processing for Human + Pose Estimation (CVPR 2020). Zhang et al. Distribution-Aware Coordinate + Representation for Human Pose Estimation (CVPR 2020). + + Note: + - batch size: B + - num keypoints: K + - num persons: N + - height of heatmaps: H + - width of heatmaps: W + + B=1 for bottom_up paradigm where all persons share the same heatmap. + B=N for top_down paradigm where each person has its own heatmaps. + + Args: + coords (np.ndarray[N, K, 2]): Initial coordinates of human pose. + batch_heatmaps (np.ndarray[B, K, H, W]): batch_heatmaps + kernel (int): Gaussian kernel size (K) for modulation. + + Returns: + np.ndarray([N, K, 2]): Refined coordinates. + """ + if not isinstance(batch_heatmaps, np.ndarray): + batch_heatmaps = batch_heatmaps.cpu().numpy() + B, K, H, W = batch_heatmaps.shape + N = coords.shape[0] + assert B == 1 or B == N + for heatmaps in batch_heatmaps: + for heatmap in heatmaps: + cv2.GaussianBlur(heatmap, (kernel, kernel), 0, heatmap) + np.clip(batch_heatmaps, 0.001, 50, batch_heatmaps) + np.log(batch_heatmaps, batch_heatmaps) + + batch_heatmaps_pad = np.pad(batch_heatmaps, ((0, 0), (0, 0), (1, 1), (1, 1)), mode="edge").flatten() + + index = coords[..., 0] + 1 + (coords[..., 1] + 1) * (W + 2) + index += (W + 2) * (H + 2) * np.arange(0, B * K).reshape(-1, K) + index = index.astype(int).reshape(-1, 1) + i_ = batch_heatmaps_pad[index] + ix1 = batch_heatmaps_pad[index + 1] + iy1 = batch_heatmaps_pad[index + W + 2] + ix1y1 = batch_heatmaps_pad[index + W + 3] + ix1_y1_ = batch_heatmaps_pad[index - W - 3] + ix1_ = batch_heatmaps_pad[index - 1] + iy1_ = batch_heatmaps_pad[index - 2 - W] + + dx = 0.5 * (ix1 - ix1_) + dy = 0.5 * (iy1 - iy1_) + derivative = np.concatenate([dx, dy], axis=1) + derivative = derivative.reshape(N, K, 2, 1) + dxx = ix1 - 2 * i_ + ix1_ + dyy = iy1 - 2 * i_ + iy1_ + dxy = 0.5 * (ix1y1 - ix1 - iy1 + i_ + i_ - ix1_ - iy1_ + ix1_y1_) + hessian = np.concatenate([dxx, dxy, dxy, dyy], axis=1) + hessian = hessian.reshape(N, K, 2, 2) + hessian = np.linalg.inv(hessian + np.finfo(np.float32).eps * np.eye(2)) + coords -= np.einsum("ijmn,ijnk->ijmk", hessian, derivative).squeeze() + return coords + + +def _gaussian_blur(heatmaps, kernel=11): + """Modulate heatmap distribution with Gaussian. + sigma = 0.3*((kernel_size-1)*0.5-1)+0.8 + sigma~=3 if k=17 + sigma=2 if k=11; + sigma~=1.5 if k=7; + sigma~=1 if k=3; + + Note: + - batch_size: N + - num_keypoints: K + - heatmap height: H + - heatmap width: W + + Args: + heatmaps (np.ndarray[N, K, H, W]): model predicted heatmaps. + kernel (int): Gaussian kernel size (K) for modulation, which should + match the heatmap gaussian sigma when training. + K=17 for sigma=3 and k=11 for sigma=2. + + Returns: + np.ndarray ([N, K, H, W]): Modulated heatmap distribution. + """ + assert kernel % 2 == 1 + + border = (kernel - 1) // 2 + batch_size = heatmaps.shape[0] + num_joints = heatmaps.shape[1] + height = heatmaps.shape[2] + width = heatmaps.shape[3] + for i in range(batch_size): + for j in range(num_joints): + origin_max = np.max(heatmaps[i, j]) + dr = np.zeros((height + 2 * border, width + 2 * border), dtype=np.float32) + dr[border:-border, border:-border] = heatmaps[i, j].copy() + dr = cv2.GaussianBlur(dr, (kernel, kernel), 0) + heatmaps[i, j] = dr[border:-border, border:-border].copy() + heatmaps[i, j] *= origin_max / np.max(heatmaps[i, j]) + return heatmaps + + +def keypoints_from_regression(regression_preds, center, scale, img_size): + """Get final keypoint predictions from regression vectors and transform + them back to the image. + + Note: + - batch_size: N + - num_keypoints: K + + Args: + regression_preds (np.ndarray[N, K, 2]): model prediction. + center (np.ndarray[N, 2]): Center of the bounding box (x, y). + scale (np.ndarray[N, 2]): Scale of the bounding box + wrt height/width. + img_size (list(img_width, img_height)): model input image size. + + Returns: + tuple: + + - preds (np.ndarray[N, K, 2]): Predicted keypoint location in images. + - maxvals (np.ndarray[N, K, 1]): Scores (confidence) of the keypoints. + """ + N, K, _ = regression_preds.shape + preds, maxvals = regression_preds, np.ones((N, K, 1), dtype=np.float32) + + preds = preds * img_size + + # Transform back to the image + for i in range(N): + preds[i] = transform_preds(preds[i], center[i], scale[i], img_size) + + return preds, maxvals + + +def keypoints_from_heatmaps(heatmaps, center, scale, unbiased=False, post_process="default", kernel=11, valid_radius_factor=0.0546875, use_udp=False, target_type="GaussianHeatmap"): + """Get final keypoint predictions from heatmaps and transform them back to + the image. + + Note: + - batch size: N + - num keypoints: K + - heatmap height: H + - heatmap width: W + + Args: + heatmaps (np.ndarray[N, K, H, W]): model predicted heatmaps. + center (np.ndarray[N, 2]): Center of the bounding box (x, y). + scale (np.ndarray[N, 2]): Scale of the bounding box + wrt height/width. + post_process (str/None): Choice of methods to post-process + heatmaps. Currently supported: None, 'default', 'unbiased', + 'megvii'. + unbiased (bool): Option to use unbiased decoding. Mutually + exclusive with megvii. + Note: this arg is deprecated and unbiased=True can be replaced + by post_process='unbiased' + Paper ref: Zhang et al. Distribution-Aware Coordinate + Representation for Human Pose Estimation (CVPR 2020). + kernel (int): Gaussian kernel size (K) for modulation, which should + match the heatmap gaussian sigma when training. + K=17 for sigma=3 and k=11 for sigma=2. + valid_radius_factor (float): The radius factor of the positive area + in classification heatmap for UDP. + use_udp (bool): Use unbiased data processing. + target_type (str): 'GaussianHeatmap' or 'CombinedTarget'. + GaussianHeatmap: Classification target with gaussian distribution. + CombinedTarget: The combination of classification target + (response map) and regression target (offset map). + Paper ref: Huang et al. The Devil is in the Details: Delving into + Unbiased Data Processing for Human Pose Estimation (CVPR 2020). + + Returns: + tuple: A tuple containing keypoint predictions and scores. + + - preds (np.ndarray[N, K, 2]): Predicted keypoint location in images. + - maxvals (np.ndarray[N, K, 1]): Scores (confidence) of the keypoints. + """ + # Avoid being affected + heatmaps = heatmaps.copy() + + # detect conflicts + if unbiased: + assert post_process not in [False, None, "megvii"] + if post_process in ["megvii", "unbiased"]: + assert kernel > 0 + if use_udp: + assert not post_process == "megvii" + + # normalize configs + if post_process is False: + warnings.warn("post_process=False is deprecated, please use post_process=None instead", DeprecationWarning) + post_process = None + elif post_process is True: + if unbiased is True: + warnings.warn("post_process=True, unbiased=True is deprecated, please use post_process='unbiased' instead", DeprecationWarning) + post_process = "unbiased" + else: + warnings.warn("post_process=True, unbiased=False is deprecated, please use post_process='default' instead", DeprecationWarning) + post_process = "default" + elif post_process == "default": + if unbiased is True: + warnings.warn("unbiased=True is deprecated, please use post_process='unbiased' instead", DeprecationWarning) + post_process = "unbiased" + + # start processing + if post_process == "megvii": + heatmaps = _gaussian_blur(heatmaps, kernel=kernel) + + N, K, H, W = heatmaps.shape + if use_udp: + if target_type.lower() == "GaussianHeatMap".lower(): + preds, maxvals = _get_max_preds(heatmaps) + preds = post_dark_udp(preds, heatmaps, kernel=kernel) + elif target_type.lower() == "CombinedTarget".lower(): + for person_heatmaps in heatmaps: + for i, heatmap in enumerate(person_heatmaps): + kt = 2 * kernel + 1 if i % 3 == 0 else kernel + cv2.GaussianBlur(heatmap, (kt, kt), 0, heatmap) + # valid radius is in direct proportion to the height of heatmap. + valid_radius = valid_radius_factor * H + offset_x = heatmaps[:, 1::3, :].flatten() * valid_radius + offset_y = heatmaps[:, 2::3, :].flatten() * valid_radius + heatmaps = heatmaps[:, ::3, :] + preds, maxvals = _get_max_preds(heatmaps) + index = preds[..., 0] + preds[..., 1] * W + index += W * H * np.arange(0, N * K / 3) + index = index.astype(int).reshape(N, K // 3, 1) + preds += np.concatenate((offset_x[index], offset_y[index]), axis=2) + else: + raise ValueError("target_type should be either 'GaussianHeatmap' or 'CombinedTarget'") + else: + preds, maxvals = _get_max_preds(heatmaps) + if post_process == "unbiased": # alleviate biased coordinate + # apply Gaussian distribution modulation. + heatmaps = np.log(np.maximum(_gaussian_blur(heatmaps, kernel), 1e-10)) + for n in range(N): + for k in range(K): + preds[n][k] = _taylor(heatmaps[n][k], preds[n][k]) + elif post_process is not None: + # add +/-0.25 shift to the predicted locations for higher acc. + for n in range(N): + for k in range(K): + heatmap = heatmaps[n][k] + px = int(preds[n][k][0]) + py = int(preds[n][k][1]) + if 1 < px < W - 1 and 1 < py < H - 1: + diff = np.array([heatmap[py][px + 1] - heatmap[py][px - 1], heatmap[py + 1][px] - heatmap[py - 1][px]]) + preds[n][k] += np.sign(diff) * 0.25 + if post_process == "megvii": + preds[n][k] += 0.5 + + # Transform back to the image + for i in range(N): + preds[i] = transform_preds(preds[i], center[i], scale[i], [W, H], use_udp=use_udp) + + if post_process == "megvii": + maxvals = maxvals / 255.0 + 0.5 + + return preds, maxvals + + +def keypoints_from_heatmaps3d(heatmaps, center, scale): + """Get final keypoint predictions from 3d heatmaps and transform them back + to the image. + + Note: + - batch size: N + - num keypoints: K + - heatmap depth size: D + - heatmap height: H + - heatmap width: W + + Args: + heatmaps (np.ndarray[N, K, D, H, W]): model predicted heatmaps. + center (np.ndarray[N, 2]): Center of the bounding box (x, y). + scale (np.ndarray[N, 2]): Scale of the bounding box + wrt height/width. + + Returns: + tuple: A tuple containing keypoint predictions and scores. + + - preds (np.ndarray[N, K, 3]): Predicted 3d keypoint location \ + in images. + - maxvals (np.ndarray[N, K, 1]): Scores (confidence) of the keypoints. + """ + N, K, D, H, W = heatmaps.shape + preds, maxvals = _get_max_preds_3d(heatmaps) + # Transform back to the image + for i in range(N): + preds[i, :, :2] = transform_preds(preds[i, :, :2], center[i], scale[i], [W, H]) + return preds, maxvals + + +def multilabel_classification_accuracy(pred, gt, mask, thr=0.5): + """Get multi-label classification accuracy. + + Note: + - batch size: N + - label number: L + + Args: + pred (np.ndarray[N, L, 2]): model predicted labels. + gt (np.ndarray[N, L, 2]): ground-truth labels. + mask (np.ndarray[N, 1] or np.ndarray[N, L] ): reliability of + ground-truth labels. + + Returns: + float: multi-label classification accuracy. + """ + # we only compute accuracy on the samples with ground-truth of all labels. + valid = (mask > 0).min(axis=1) if mask.ndim == 2 else (mask > 0) + pred, gt = pred[valid], gt[valid] + + if pred.shape[0] == 0: + acc = 0.0 # when no sample is with gt labels, set acc to 0. + else: + # The classification of a sample is regarded as correct + # only if it's correct for all labels. + acc = (((pred - thr) * (gt - thr)) > 0).all(axis=1).mean() + return acc + + +def get_transform(center, scale, res, rot=0): + """Generate transformation matrix.""" + # res: (height, width), (rows, cols) + crop_aspect_ratio = res[0] / float(res[1]) + h = 200 * scale + w = h / crop_aspect_ratio + t = np.zeros((3, 3)) + t[0, 0] = float(res[1]) / w + t[1, 1] = float(res[0]) / h + t[0, 2] = res[1] * (-float(center[0]) / w + 0.5) + t[1, 2] = res[0] * (-float(center[1]) / h + 0.5) + t[2, 2] = 1 + if not rot == 0: + rot = -rot # To match direction of rotation from cropping + rot_mat = np.zeros((3, 3)) + rot_rad = rot * np.pi / 180 + sn, cs = np.sin(rot_rad), np.cos(rot_rad) + rot_mat[0, :2] = [cs, -sn] + rot_mat[1, :2] = [sn, cs] + rot_mat[2, 2] = 1 + # Need to rotate around center + t_mat = np.eye(3) + t_mat[0, 2] = -res[1] / 2 + t_mat[1, 2] = -res[0] / 2 + t_inv = t_mat.copy() + t_inv[:2, 2] *= -1 + t = np.dot(t_inv, np.dot(rot_mat, np.dot(t_mat, t))) + return t + + +def transform(pt, center, scale, res, invert=0, rot=0): + """Transform pixel location to different reference.""" + t = get_transform(center, scale, res, rot=rot) + if invert: + t = np.linalg.inv(t) + new_pt = np.array([pt[0] - 1, pt[1] - 1, 1.0]).T + new_pt = np.dot(t, new_pt) + return np.array([round(new_pt[0]), round(new_pt[1])], dtype=int) + 1 + + +def bbox_from_detector(bbox, input_resolution=(224, 224), rescale=1.25): + """ + Get center and scale of bounding box from bounding box. + The expected format is [min_x, min_y, max_x, max_y]. + """ + CROP_IMG_HEIGHT, CROP_IMG_WIDTH = input_resolution + CROP_ASPECT_RATIO = CROP_IMG_HEIGHT / float(CROP_IMG_WIDTH) + + # center + center_x = (bbox[0] + bbox[2]) / 2.0 + center_y = (bbox[1] + bbox[3]) / 2.0 + center = np.array([center_x, center_y]) + + # scale + bbox_w = bbox[2] - bbox[0] + bbox_h = bbox[3] - bbox[1] + bbox_size = max(bbox_w * CROP_ASPECT_RATIO, bbox_h) + + scale = np.array([bbox_size / CROP_ASPECT_RATIO, bbox_size]) / 200.0 + # scale = bbox_size / 200.0 + # adjust bounding box tightness + scale *= rescale + return center, scale + + +def crop(img, center, scale, res): + """ + Crop image according to the supplied bounding box. + res: [rows, cols] + """ + # Upper left point + ul = np.array(transform([1, 1], center, max(scale), res, invert=1)) - 1 + # Bottom right point + br = np.array(transform([res[1] + 1, res[0] + 1], center, max(scale), res, invert=1)) - 1 + + # Padding so that when rotated proper amount of context is included + pad = int(np.linalg.norm(br - ul) / 2 - float(br[1] - ul[1]) / 2) + + new_shape = [br[1] - ul[1], br[0] - ul[0]] + if len(img.shape) > 2: + new_shape += [img.shape[2]] + new_img = np.zeros(new_shape, dtype=np.float32) + + # Range to fill new array + new_x = max(0, -ul[0]), min(br[0], len(img[0])) - ul[0] + new_y = max(0, -ul[1]), min(br[1], len(img)) - ul[1] + # Range to sample from original image + old_x = max(0, ul[0]), min(len(img[0]), br[0]) + old_y = max(0, ul[1]), min(len(img), br[1]) + try: + new_img[new_y[0] : new_y[1], new_x[0] : new_x[1]] = img[old_y[0] : old_y[1], old_x[0] : old_x[1]] + except Exception as e: + print(e) + + new_img = cv2.resize(new_img, (res[1], res[0])) # (cols, rows) + return new_img, new_shape, (old_x, old_y), (new_x, new_y) # , ul, br + + +def split_kp2ds_for_aa(kp2ds, ret_face=False): + kp2ds_body = (kp2ds[[0, 6, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 17, 20]] + kp2ds[[0, 5, 6, 8, 10, 5, 7, 9, 12, 14, 16, 11, 13, 15, 2, 1, 4, 3, 18, 21]]) / 2 + kp2ds_lhand = kp2ds[91:112] + kp2ds_rhand = kp2ds[112:133] + kp2ds_face = kp2ds[22:91] + if ret_face: + return kp2ds_body.copy(), kp2ds_lhand.copy(), kp2ds_rhand.copy(), kp2ds_face.copy() + return kp2ds_body.copy(), kp2ds_lhand.copy(), kp2ds_rhand.copy() + + +def load_pose_metas_from_kp2ds_seq_list(kp2ds_seq, width, height): + metas = [] + for kps in kp2ds_seq: + if len(kps) != 1: + return None + kps = kps[0].copy() + kps[:, 0] /= width + kps[:, 1] /= height + kp2ds_body, kp2ds_lhand, kp2ds_rhand, kp2ds_face = split_kp2ds_for_aa(kps, ret_face=True) + + if kp2ds_body[:, :2].min(axis=1).max() < 0: + kp2ds_body = last_kp2ds_body + last_kp2ds_body = kp2ds_body + + meta = { + "width": width, + "height": height, + "keypoints_body": kp2ds_body.tolist(), + "keypoints_left_hand": kp2ds_lhand.tolist(), + "keypoints_right_hand": kp2ds_rhand.tolist(), + "keypoints_face": kp2ds_face.tolist(), + } + metas.append(meta) + return metas + + +def load_pose_metas_from_kp2ds_seq(kp2ds_seq, width, height): + metas = [] + for kps in kp2ds_seq: + kps = kps.copy() + kps[:, 0] /= width + kps[:, 1] /= height + kp2ds_body, kp2ds_lhand, kp2ds_rhand, kp2ds_face = split_kp2ds_for_aa(kps, ret_face=True) + + # 排除全部小于0的情况 + if kp2ds_body[:, :2].min(axis=1).max() < 0: + kp2ds_body = last_kp2ds_body + last_kp2ds_body = kp2ds_body + + meta = { + "width": width, + "height": height, + "keypoints_body": kp2ds_body, + "keypoints_left_hand": kp2ds_lhand, + "keypoints_right_hand": kp2ds_rhand, + "keypoints_face": kp2ds_face, + } + metas.append(meta) + return metas diff --git a/tools/preprocess/preprocess_data.py b/tools/preprocess/preprocess_data.py new file mode 100644 index 0000000..8f60e30 --- /dev/null +++ b/tools/preprocess/preprocess_data.py @@ -0,0 +1,88 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import argparse +import os + +from process_pipepline import ProcessPipeline + + +def get_preprocess_parser(): + parser = argparse.ArgumentParser(description="The preprocessing pipeline for Wan-animate.") + + parser.add_argument("--ckpt_path", type=str, default=None, help="The path to the preprocessing model's checkpoint directory. ") + + parser.add_argument("--video_path", type=str, default=None, help="The path to the driving video.") + parser.add_argument("--refer_path", type=str, default=None, help="The path to the refererence image.") + parser.add_argument("--save_path", type=str, default=None, help="The path to save the processed results.") + + parser.add_argument( + "--resolution_area", + type=int, + nargs=2, + default=[1280, 720], + help="The target resolution for processing, specified as [width, height]. To handle different aspect ratios, the video is resized to have a total area equivalent to width * height, while preserving the original aspect ratio.", + ) + parser.add_argument("--fps", type=int, default=30, help="The target FPS for processing the driving video. Set to -1 to use the video's original FPS.") + + parser.add_argument("--replace_flag", action="store_true", default=False, help="Whether to use replacement mode.") + parser.add_argument("--retarget_flag", action="store_true", default=False, help="Whether to use pose retargeting. Currently only supported in animation mode") + parser.add_argument( + "--use_flux", + action="store_true", + default=False, + help="Whether to use image editing in pose retargeting. Recommended if the character in the reference image or the first frame of the driving video is not in a standard, front-facing pose", + ) + + # Parameters for the mask strategy in replacement mode. These control the mask's size and shape. Refer to https://arxiv.org/pdf/2502.06145 + parser.add_argument("--iterations", type=int, default=3, help="Number of iterations for mask dilation.") + parser.add_argument("--k", type=int, default=7, help="Number of kernel size for mask dilation.") + parser.add_argument( + "--w_len", + type=int, + default=1, + help="The number of subdivisions for the grid along the 'w' dimension. A higher value results in a more detailed contour. A value of 1 means no subdivision is performed.", + ) + parser.add_argument( + "--h_len", + type=int, + default=1, + help="The number of subdivisions for the grid along the 'h' dimension. A higher value results in a more detailed contour. A value of 1 means no subdivision is performed.", + ) + return parser + + +def process_input_video(args): + args_dict = vars(args) + print(args_dict) + + assert len(args.resolution_area) == 2, "resolution_area should be a list of two integers [width, height]" + assert not args.use_flux or args.retarget_flag, "Image editing with FLUX can only be used when pose retargeting is enabled." + + pose2d_checkpoint_path = os.path.join(args.ckpt_path, "pose2d/vitpose_h_wholebody.onnx") + det_checkpoint_path = os.path.join(args.ckpt_path, "det/yolov10m.onnx") + + sam2_checkpoint_path = os.path.join(args.ckpt_path, "sam2/sam2_hiera_large.pt") if args.replace_flag else None + flux_kontext_path = os.path.join(args.ckpt_path, "FLUX.1-Kontext-dev") if args.use_flux else None + process_pipeline = ProcessPipeline( + det_checkpoint_path=det_checkpoint_path, pose2d_checkpoint_path=pose2d_checkpoint_path, sam_checkpoint_path=sam2_checkpoint_path, flux_kontext_path=flux_kontext_path + ) + os.makedirs(args.save_path, exist_ok=True) + process_pipeline( + video_path=args.video_path, + refer_image_path=args.refer_path, + output_path=args.save_path, + resolution_area=args.resolution_area, + fps=args.fps, + iterations=args.iterations, + k=args.k, + w_len=args.w_len, + h_len=args.h_len, + retarget_flag=args.retarget_flag, + use_flux=args.use_flux, + replace_flag=args.replace_flag, + ) + + +if __name__ == "__main__": + parser = get_preprocess_parser() + args = parser.parse_args() + process_input_video(args) diff --git a/tools/preprocess/process_pipepline.py b/tools/preprocess/process_pipepline.py new file mode 100644 index 0000000..5a49024 --- /dev/null +++ b/tools/preprocess/process_pipepline.py @@ -0,0 +1,355 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import os +import shutil + +import cv2 +import numpy as np +import torch +from PIL import Image +from diffusers import FluxKontextPipeline +from loguru import logger + +try: + import moviepy.editor as mpy +except: # noqa + import moviepy as mpy + +import sam2.modeling.sam.transformer as transformer +from decord import VideoReader +from human_visualization import draw_aapose_by_meta_new +from pose2d import Pose2d +from pose2d_utils import AAPoseMeta +from retarget_pose import get_retarget_pose +from utils import get_aug_mask, get_face_bboxes, get_frame_indices, get_mask_body_img, padding_resize, resize_by_area + +transformer.USE_FLASH_ATTN = False +transformer.MATH_KERNEL_ON = True +transformer.OLD_GPU = True +from sam_utils import build_sam2_video_predictor # noqa + + +class ProcessPipeline: + def __init__(self, det_checkpoint_path, pose2d_checkpoint_path, sam_checkpoint_path, flux_kontext_path): + self.pose2d = Pose2d(checkpoint=pose2d_checkpoint_path, detector_checkpoint=det_checkpoint_path) + + model_cfg = "sam2_hiera_l.yaml" + if sam_checkpoint_path is not None: + self.predictor = build_sam2_video_predictor(model_cfg, sam_checkpoint_path) + if flux_kontext_path is not None: + self.flux_kontext = FluxKontextPipeline.from_pretrained(flux_kontext_path, torch_dtype=torch.bfloat16).to("cuda") + + def __call__(self, video_path, refer_image_path, output_path, resolution_area=[1280, 720], fps=30, iterations=3, k=7, w_len=1, h_len=1, retarget_flag=False, use_flux=False, replace_flag=False): + if replace_flag: + video_reader = VideoReader(video_path) + frame_num = len(video_reader) + print("frame_num: {}".format(frame_num)) + + video_fps = video_reader.get_avg_fps() + print("video_fps: {}".format(video_fps)) + print("fps: {}".format(fps)) + + # TODO: Maybe we can switch to PyAV later, which can get accurate frame num + duration = video_reader.get_frame_timestamp(-1)[-1] + expected_frame_num = int(duration * video_fps + 0.5) + ratio = abs((frame_num - expected_frame_num) / frame_num) + if ratio > 0.1: + print("Warning: The difference between the actual number of frames and the expected number of frames is two large") + frame_num = expected_frame_num + + if fps == -1: + fps = video_fps + + target_num = int(frame_num / video_fps * fps) + print("target_num: {}".format(target_num)) + idxs = get_frame_indices(frame_num, video_fps, target_num, fps) + frames = video_reader.get_batch(idxs).asnumpy() + + frames = [resize_by_area(frame, resolution_area[0] * resolution_area[1], divisor=16) for frame in frames] + height, width = frames[0].shape[:2] + logger.info(f"Processing pose meta") + + tpl_pose_metas = self.pose2d(frames) + + face_images = [] + for idx, meta in enumerate(tpl_pose_metas): + face_bbox_for_image = get_face_bboxes(meta["keypoints_face"][:, :2], scale=1.3, image_shape=(frames[0].shape[0], frames[0].shape[1])) + + x1, x2, y1, y2 = face_bbox_for_image + face_image = frames[idx][y1:y2, x1:x2] + face_image = cv2.resize(face_image, (512, 512)) + face_images.append(face_image) + + logger.info(f"Processing reference image: {refer_image_path}") + refer_img = cv2.imread(refer_image_path) + src_ref_path = os.path.join(output_path, "src_ref.png") + shutil.copy(refer_image_path, src_ref_path) + refer_img = refer_img[..., ::-1] + + refer_img = padding_resize(refer_img, height, width) + logger.info(f"Processing template video: {video_path}") + tpl_retarget_pose_metas = [AAPoseMeta.from_humanapi_meta(meta) for meta in tpl_pose_metas] + cond_images = [] + + for idx, meta in enumerate(tpl_retarget_pose_metas): + canvas = np.zeros_like(refer_img) + conditioning_image = draw_aapose_by_meta_new(canvas, meta) + cond_images.append(conditioning_image) + masks = self.get_mask(frames, 400, tpl_pose_metas) + + bg_images = [] + aug_masks = [] + + for frame, mask in zip(frames, masks): + if iterations > 0: + _, each_mask = get_mask_body_img(frame, mask, iterations=iterations, k=k) + each_aug_mask = get_aug_mask(each_mask, w_len=w_len, h_len=h_len) + else: + each_aug_mask = mask + + each_bg_image = frame * (1 - each_aug_mask[:, :, None]) + bg_images.append(each_bg_image) + aug_masks.append(each_aug_mask) + + src_face_path = os.path.join(output_path, "src_face.mp4") + mpy.ImageSequenceClip(face_images, fps=fps).write_videofile(src_face_path) + + src_pose_path = os.path.join(output_path, "src_pose.mp4") + mpy.ImageSequenceClip(cond_images, fps=fps).write_videofile(src_pose_path) + + src_bg_path = os.path.join(output_path, "src_bg.mp4") + mpy.ImageSequenceClip(bg_images, fps=fps).write_videofile(src_bg_path) + + aug_masks_new = [np.stack([mask * 255, mask * 255, mask * 255], axis=2) for mask in aug_masks] + src_mask_path = os.path.join(output_path, "src_mask.mp4") + mpy.ImageSequenceClip(aug_masks_new, fps=fps).write_videofile(src_mask_path) + return True + else: + logger.info(f"Processing reference image: {refer_image_path}") + refer_img = cv2.imread(refer_image_path) + src_ref_path = os.path.join(output_path, "src_ref.png") + shutil.copy(refer_image_path, src_ref_path) + refer_img = refer_img[..., ::-1] + + refer_img = resize_by_area(refer_img, resolution_area[0] * resolution_area[1], divisor=16) + + refer_pose_meta = self.pose2d([refer_img])[0] + + logger.info(f"Processing template video: {video_path}") + video_reader = VideoReader(video_path) + frame_num = len(video_reader) + print("frame_num: {}".format(frame_num)) + + video_fps = video_reader.get_avg_fps() + print("video_fps: {}".format(video_fps)) + print("fps: {}".format(fps)) + + # TODO: Maybe we can switch to PyAV later, which can get accurate frame num + duration = video_reader.get_frame_timestamp(-1)[-1] + expected_frame_num = int(duration * video_fps + 0.5) + ratio = abs((frame_num - expected_frame_num) / frame_num) + if ratio > 0.1: + print("Warning: The difference between the actual number of frames and the expected number of frames is two large") + frame_num = expected_frame_num + + if fps == -1: + fps = video_fps + + target_num = int(frame_num / video_fps * fps) + print("target_num: {}".format(target_num)) + idxs = get_frame_indices(frame_num, video_fps, target_num, fps) + frames = video_reader.get_batch(idxs).asnumpy() + + logger.info(f"Processing pose meta") + + tpl_pose_meta0 = self.pose2d(frames[:1])[0] + tpl_pose_metas = self.pose2d(frames) + + face_images = [] + for idx, meta in enumerate(tpl_pose_metas): + face_bbox_for_image = get_face_bboxes(meta["keypoints_face"][:, :2], scale=1.3, image_shape=(frames[0].shape[0], frames[0].shape[1])) + + x1, x2, y1, y2 = face_bbox_for_image + face_image = frames[idx][y1:y2, x1:x2] + face_image = cv2.resize(face_image, (512, 512)) + face_images.append(face_image) + + if retarget_flag: + if use_flux: + tpl_prompt, refer_prompt = self.get_editing_prompts(tpl_pose_metas, refer_pose_meta) + refer_input = Image.fromarray(refer_img) + refer_edit = self.flux_kontext( + image=refer_input, + height=refer_img.shape[0], + width=refer_img.shape[1], + prompt=refer_prompt, + guidance_scale=2.5, + num_inference_steps=28, + ).images[0] + + refer_edit = Image.fromarray(padding_resize(np.array(refer_edit), refer_img.shape[0], refer_img.shape[1])) + refer_edit_path = os.path.join(output_path, "refer_edit.png") + refer_edit.save(refer_edit_path) + refer_edit_pose_meta = self.pose2d([np.array(refer_edit)])[0] + + tpl_img = frames[1] + tpl_input = Image.fromarray(tpl_img) + + tpl_edit = self.flux_kontext( + image=tpl_input, + height=tpl_img.shape[0], + width=tpl_img.shape[1], + prompt=tpl_prompt, + guidance_scale=2.5, + num_inference_steps=28, + ).images[0] + + tpl_edit = Image.fromarray(padding_resize(np.array(tpl_edit), tpl_img.shape[0], tpl_img.shape[1])) + tpl_edit_path = os.path.join(output_path, "tpl_edit.png") + tpl_edit.save(tpl_edit_path) + tpl_edit_pose_meta0 = self.pose2d([np.array(tpl_edit)])[0] + tpl_retarget_pose_metas = get_retarget_pose(tpl_pose_meta0, refer_pose_meta, tpl_pose_metas, tpl_edit_pose_meta0, refer_edit_pose_meta) + else: + tpl_retarget_pose_metas = get_retarget_pose(tpl_pose_meta0, refer_pose_meta, tpl_pose_metas, None, None) + else: + tpl_retarget_pose_metas = [AAPoseMeta.from_humanapi_meta(meta) for meta in tpl_pose_metas] + + cond_images = [] + for idx, meta in enumerate(tpl_retarget_pose_metas): + if retarget_flag: + canvas = np.zeros_like(refer_img) + conditioning_image = draw_aapose_by_meta_new(canvas, meta) + else: + canvas = np.zeros_like(frames[0]) + conditioning_image = draw_aapose_by_meta_new(canvas, meta) + conditioning_image = padding_resize(conditioning_image, refer_img.shape[0], refer_img.shape[1]) + + cond_images.append(conditioning_image) + + src_face_path = os.path.join(output_path, "src_face.mp4") + mpy.ImageSequenceClip(face_images, fps=fps).write_videofile(src_face_path) + + src_pose_path = os.path.join(output_path, "src_pose.mp4") + mpy.ImageSequenceClip(cond_images, fps=fps).write_videofile(src_pose_path) + return True + + def get_editing_prompts(self, tpl_pose_metas, refer_pose_meta): + arm_visible = False + leg_visible = False + for tpl_pose_meta in tpl_pose_metas: + tpl_keypoints = tpl_pose_meta["keypoints_body"] + if tpl_keypoints[3].all() != 0 or tpl_keypoints[4].all() != 0 or tpl_keypoints[6].all() != 0 or tpl_keypoints[7].all() != 0: + if ( + (tpl_keypoints[3][0] <= 1 and tpl_keypoints[3][1] <= 1 and tpl_keypoints[3][2] >= 0.75) + or (tpl_keypoints[4][0] <= 1 and tpl_keypoints[4][1] <= 1 and tpl_keypoints[4][2] >= 0.75) + or (tpl_keypoints[6][0] <= 1 and tpl_keypoints[6][1] <= 1 and tpl_keypoints[6][2] >= 0.75) + or (tpl_keypoints[7][0] <= 1 and tpl_keypoints[7][1] <= 1 and tpl_keypoints[7][2] >= 0.75) + ): + arm_visible = True + if tpl_keypoints[9].all() != 0 or tpl_keypoints[12].all() != 0 or tpl_keypoints[10].all() != 0 or tpl_keypoints[13].all() != 0: + if ( + (tpl_keypoints[9][0] <= 1 and tpl_keypoints[9][1] <= 1 and tpl_keypoints[9][2] >= 0.75) + or (tpl_keypoints[12][0] <= 1 and tpl_keypoints[12][1] <= 1 and tpl_keypoints[12][2] >= 0.75) + or (tpl_keypoints[10][0] <= 1 and tpl_keypoints[10][1] <= 1 and tpl_keypoints[10][2] >= 0.75) + or (tpl_keypoints[13][0] <= 1 and tpl_keypoints[13][1] <= 1 and tpl_keypoints[13][2] >= 0.75) + ): + leg_visible = True + if arm_visible and leg_visible: + break + + if leg_visible: + if tpl_pose_meta["width"] > tpl_pose_meta["height"]: + tpl_prompt = "Change the person to a standard T-pose (facing forward with arms extended). The person is standing. Feet and Hands are visible in the image." + else: + tpl_prompt = "Change the person to a standard pose with the face oriented forward and arms extending straight down by the sides. The person is standing. Feet and Hands are visible in the image." + + if refer_pose_meta["width"] > refer_pose_meta["height"]: + refer_prompt = "Change the person to a standard T-pose (facing forward with arms extended). The person is standing. Feet and Hands are visible in the image." + else: + refer_prompt = "Change the person to a standard pose with the face oriented forward and arms extending straight down by the sides. The person is standing. Feet and Hands are visible in the image." + elif arm_visible: + if tpl_pose_meta["width"] > tpl_pose_meta["height"]: + tpl_prompt = "Change the person to a standard T-pose (facing forward with arms extended). Hands are visible in the image." + else: + tpl_prompt = "Change the person to a standard pose with the face oriented forward and arms extending straight down by the sides. Hands are visible in the image." + + if refer_pose_meta["width"] > refer_pose_meta["height"]: + refer_prompt = "Change the person to a standard T-pose (facing forward with arms extended). Hands are visible in the image." + else: + refer_prompt = "Change the person to a standard pose with the face oriented forward and arms extending straight down by the sides. Hands are visible in the image." + else: + tpl_prompt = "Change the person to face forward." + refer_prompt = "Change the person to face forward." + + return tpl_prompt, refer_prompt + + def get_mask(self, frames, th_step, kp2ds_all): + frame_num = len(frames) + if frame_num < th_step: + num_step = 1 + else: + num_step = (frame_num + th_step) // th_step + + all_mask = [] + for index in range(num_step): + each_frames = frames[index * th_step : (index + 1) * th_step] + + kp2ds = kp2ds_all[index * th_step : (index + 1) * th_step] + if len(each_frames) > 4: + key_frame_num = 4 + elif 4 >= len(each_frames) > 0: + key_frame_num = 1 + else: + continue + + key_frame_step = len(kp2ds) // key_frame_num + key_frame_index_list = list(range(0, len(kp2ds), key_frame_step)) + + key_points_index = [0, 1, 2, 5, 8, 11, 10, 13] + key_frame_body_points_list = [] + for key_frame_index in key_frame_index_list: + keypoints_body_list = [] + body_key_points = kp2ds[key_frame_index]["keypoints_body"] + for each_index in key_points_index: + each_keypoint = body_key_points[each_index] + if None is each_keypoint: + continue + keypoints_body_list.append(each_keypoint) + + keypoints_body = np.array(keypoints_body_list)[:, :2] + wh = np.array([[kp2ds[0]["width"], kp2ds[0]["height"]]]) + points = (keypoints_body * wh).astype(np.int32) + key_frame_body_points_list.append(points) + + inference_state = self.predictor.init_state_v2(frames=each_frames) + self.predictor.reset_state(inference_state) + ann_obj_id = 1 + for ann_frame_idx, points in zip(key_frame_index_list, key_frame_body_points_list): + labels = np.array([1] * points.shape[0], np.int32) + _, out_obj_ids, out_mask_logits = self.predictor.add_new_points( + inference_state=inference_state, + frame_idx=ann_frame_idx, + obj_id=ann_obj_id, + points=points, + labels=labels, + ) + + video_segments = {} + for out_frame_idx, out_obj_ids, out_mask_logits in self.predictor.propagate_in_video(inference_state): + video_segments[out_frame_idx] = {out_obj_id: (out_mask_logits[i] > 0.0).cpu().numpy() for i, out_obj_id in enumerate(out_obj_ids)} + + for out_frame_idx in range(len(video_segments)): + for out_obj_id, out_mask in video_segments[out_frame_idx].items(): + out_mask = out_mask[0].astype(np.uint8) + all_mask.append(out_mask) + + return all_mask + + def convert_list_to_array(self, metas): + metas_list = [] + for meta in metas: + for key, value in meta.items(): + if type(value) is list: + value = np.array(value) + meta[key] = value + metas_list.append(meta) + return metas_list diff --git a/tools/preprocess/retarget_pose.py b/tools/preprocess/retarget_pose.py new file mode 100644 index 0000000..3e24b7b --- /dev/null +++ b/tools/preprocess/retarget_pose.py @@ -0,0 +1,850 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import copy +import math +from typing import NamedTuple + +import numpy as np +from pose2d_utils import AAPoseMeta +from tqdm import tqdm + +# load skeleton name and bone lines +keypoint_list = [ + "Nose", + "Neck", + "RShoulder", + "RElbow", + "RWrist", # No.4 + "LShoulder", + "LElbow", + "LWrist", # No.7 + "RHip", + "RKnee", + "RAnkle", # No.10 + "LHip", + "LKnee", + "LAnkle", # No.13 + "REye", + "LEye", + "REar", + "LEar", + "LToe", + "RToe", +] + + +limbSeq = [ + [2, 3], + [2, 6], # shoulders + [3, 4], + [4, 5], # left arm + [6, 7], + [7, 8], # right arm + [2, 9], + [9, 10], + [10, 11], # right leg + [2, 12], + [12, 13], + [13, 14], # left leg + [2, 1], + [1, 15], + [15, 17], + [1, 16], + [16, 18], # face (nose, eyes, ears) + [14, 19], # left foot + [11, 20], # right foot +] + +eps = 0.01 + + +class Keypoint(NamedTuple): + x: float + y: float + score: float = 1.0 + id: int = -1 + + +# for each limb, calculate src & dst bone's length +# and calculate their ratios +def get_length(skeleton, limb): + k1_index, k2_index = limb + + H, W = skeleton["height"], skeleton["width"] + keypoints = skeleton["keypoints_body"] + keypoint1 = keypoints[k1_index - 1] + keypoint2 = keypoints[k2_index - 1] + + if keypoint1 is None or keypoint2 is None: + return None, None, None + + X = np.array([keypoint1[0], keypoint2[0]]) * float(W) + Y = np.array([keypoint1[1], keypoint2[1]]) * float(H) + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + + return X, Y, length + + +def get_handpose_meta(keypoints, delta, src_H, src_W): + new_keypoints = [] + + for idx, keypoint in enumerate(keypoints): + if keypoint is None: + new_keypoints.append(None) + continue + if keypoint.score == 0: + new_keypoints.append(None) + continue + + x, y = keypoint.x, keypoint.y + x = int(x * src_W + delta[0]) + y = int(y * src_H + delta[1]) + + new_keypoints.append( + Keypoint( + x=x, + y=y, + score=keypoint.score, + ) + ) + + return new_keypoints + + +def deal_hand_keypoints(hand_res, r_ratio, l_ratio, hand_score_th=0.5): + left_hand = [] + right_hand = [] + + left_delta_x = hand_res["left"][0][0] * (l_ratio - 1) + left_delta_y = hand_res["left"][0][1] * (l_ratio - 1) + + right_delta_x = hand_res["right"][0][0] * (r_ratio - 1) + right_delta_y = hand_res["right"][0][1] * (r_ratio - 1) + + length = len(hand_res["left"]) + + for i in range(length): + # left hand + if hand_res["left"][i][2] < hand_score_th: + left_hand.append( + Keypoint( + x=-1, + y=-1, + score=0, + ) + ) + else: + left_hand.append(Keypoint(x=hand_res["left"][i][0] * l_ratio - left_delta_x, y=hand_res["left"][i][1] * l_ratio - left_delta_y, score=hand_res["left"][i][2])) + + # right hand + if hand_res["right"][i][2] < hand_score_th: + right_hand.append( + Keypoint( + x=-1, + y=-1, + score=0, + ) + ) + else: + right_hand.append(Keypoint(x=hand_res["right"][i][0] * r_ratio - right_delta_x, y=hand_res["right"][i][1] * r_ratio - right_delta_y, score=hand_res["right"][i][2])) + + return right_hand, left_hand + + +def get_scaled_pose(canvas, src_canvas, keypoints, keypoints_hand, bone_ratio_list, delta_ground_x, delta_ground_y, rescaled_src_ground_x, body_flag, id, scale_min, threshold=0.4): + H, W = canvas + src_H, src_W = src_canvas + + new_length_list = [] + angle_list = [] + + # keypoints from 0-1 to H/W range + for idx in range(len(keypoints)): + if keypoints[idx] is None or len(keypoints[idx]) == 0: + continue + + keypoints[idx] = [keypoints[idx][0] * src_W, keypoints[idx][1] * src_H, keypoints[idx][2]] + + # first traverse, get new_length_list and angle_list + for idx, (k1_index, k2_index) in enumerate(limbSeq): + keypoint1 = keypoints[k1_index - 1] + keypoint2 = keypoints[k2_index - 1] + + if keypoint1 is None or keypoint2 is None or len(keypoint1) == 0 or len(keypoint2) == 0: + new_length_list.append(None) + angle_list.append(None) + continue + + Y = np.array([keypoint1[0], keypoint2[0]]) # * float(W) + X = np.array([keypoint1[1], keypoint2[1]]) # * float(H) + + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + + new_length = length * bone_ratio_list[idx] + angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + + new_length_list.append(new_length) + angle_list.append(angle) + + # Keep foot length within 0.5x calf length + foot_lower_leg_ratio = 0.5 + if new_length_list[8] != None and new_length_list[18] != None: # noqa + if new_length_list[18] > new_length_list[8] * foot_lower_leg_ratio: + new_length_list[18] = new_length_list[8] * foot_lower_leg_ratio + + if new_length_list[11] != None and new_length_list[17] != None: # noqa + if new_length_list[17] > new_length_list[11] * foot_lower_leg_ratio: + new_length_list[17] = new_length_list[11] * foot_lower_leg_ratio + + # second traverse, calculate new keypoints + rescale_keypoints = keypoints.copy() + + for idx, (k1_index, k2_index) in enumerate(limbSeq): + # update dst_keypoints + start_keypoint = rescale_keypoints[k1_index - 1] + new_length = new_length_list[idx] + angle = angle_list[idx] + + if rescale_keypoints[k1_index - 1] is None or rescale_keypoints[k2_index - 1] is None or len(rescale_keypoints[k1_index - 1]) == 0 or len(rescale_keypoints[k2_index - 1]) == 0: + continue + + # calculate end_keypoint + delta_x = new_length * math.cos(math.radians(angle)) + delta_y = new_length * math.sin(math.radians(angle)) + + end_keypoint_x = start_keypoint[0] - delta_x + end_keypoint_y = start_keypoint[1] - delta_y + + # update keypoints + rescale_keypoints[k2_index - 1] = [end_keypoint_x, end_keypoint_y, rescale_keypoints[k2_index - 1][2]] + + if id == 0: + if body_flag == "full_body" and rescale_keypoints[8] != None and rescale_keypoints[11] != None: # noqa + delta_ground_x_offset_first_frame = (rescale_keypoints[8][0] + rescale_keypoints[11][0]) / 2 - rescaled_src_ground_x + delta_ground_x += delta_ground_x_offset_first_frame + elif body_flag == "half_body" and rescale_keypoints[1] != None: # noqa + delta_ground_x_offset_first_frame = rescale_keypoints[1][0] - rescaled_src_ground_x + delta_ground_x += delta_ground_x_offset_first_frame + + # offset all keypoints + for idx in range(len(rescale_keypoints)): + if rescale_keypoints[idx] is None or len(rescale_keypoints[idx]) == 0: + continue + rescale_keypoints[idx][0] -= delta_ground_x + rescale_keypoints[idx][1] -= delta_ground_y + + # rescale keypoints to original size + rescale_keypoints[idx][0] /= scale_min + rescale_keypoints[idx][1] /= scale_min + + # Scale hand proportions based on body skeletal ratios + r_ratio = max(bone_ratio_list[0], bone_ratio_list[1]) / scale_min + l_ratio = max(bone_ratio_list[0], bone_ratio_list[1]) / scale_min + left_hand, right_hand = deal_hand_keypoints(keypoints_hand, r_ratio, l_ratio, hand_score_th=threshold) + + left_hand_new = left_hand.copy() + right_hand_new = right_hand.copy() + + if rescale_keypoints[4] == None and rescale_keypoints[7] == None: # noqa + pass + + elif rescale_keypoints[4] == None and rescale_keypoints[7] != None: # noqa + right_hand_delta = np.array(rescale_keypoints[7][:2]) - np.array(keypoints[7][:2]) + right_hand_new = get_handpose_meta(right_hand, right_hand_delta, src_H, src_W) + + elif rescale_keypoints[4] != None and rescale_keypoints[7] == None: # noqa + left_hand_delta = np.array(rescale_keypoints[4][:2]) - np.array(keypoints[4][:2]) + left_hand_new = get_handpose_meta(left_hand, left_hand_delta, src_H, src_W) + + else: + # get left_hand and right_hand offset + left_hand_delta = np.array(rescale_keypoints[4][:2]) - np.array(keypoints[4][:2]) + right_hand_delta = np.array(rescale_keypoints[7][:2]) - np.array(keypoints[7][:2]) + + if keypoints[4][0] != None and left_hand[0].x != -1: # noqa + left_hand_root_offset = np.array((keypoints[4][0] - left_hand[0].x * src_W, keypoints[4][1] - left_hand[0].y * src_H)) + left_hand_delta += left_hand_root_offset + + if keypoints[7][0] != None and right_hand[0].x != -1: # noqa + right_hand_root_offset = np.array((keypoints[7][0] - right_hand[0].x * src_W, keypoints[7][1] - right_hand[0].y * src_H)) + right_hand_delta += right_hand_root_offset + + dis_left_hand = ((keypoints[4][0] - left_hand[0].x * src_W) ** 2 + (keypoints[4][1] - left_hand[0].y * src_H) ** 2) ** 0.5 + dis_right_hand = ((keypoints[7][0] - left_hand[0].x * src_W) ** 2 + (keypoints[7][1] - left_hand[0].y * src_H) ** 2) ** 0.5 + + if dis_left_hand > dis_right_hand: + right_hand_new = get_handpose_meta(left_hand, right_hand_delta, src_H, src_W) + left_hand_new = get_handpose_meta(right_hand, left_hand_delta, src_H, src_W) + else: + left_hand_new = get_handpose_meta(left_hand, left_hand_delta, src_H, src_W) + right_hand_new = get_handpose_meta(right_hand, right_hand_delta, src_H, src_W) + + # get normalized keypoints_body + norm_body_keypoints = [] + for body_keypoint in rescale_keypoints: + if body_keypoint != None: # noqa + norm_body_keypoints.append([body_keypoint[0] / W, body_keypoint[1] / H, body_keypoint[2]]) + else: + norm_body_keypoints.append(None) + + frame_info = { + "height": H, + "width": W, + "keypoints_body": norm_body_keypoints, + "keypoints_left_hand": left_hand_new, + "keypoints_right_hand": right_hand_new, + } + + return frame_info + + +def rescale_skeleton(H, W, keypoints, bone_ratio_list): + rescale_keypoints = keypoints.copy() + + new_length_list = [] + angle_list = [] + + # keypoints from 0-1 to H/W range + for idx in range(len(rescale_keypoints)): + if rescale_keypoints[idx] is None or len(rescale_keypoints[idx]) == 0: + continue + + rescale_keypoints[idx] = [rescale_keypoints[idx][0] * W, rescale_keypoints[idx][1] * H] + + # first traverse, get new_length_list and angle_list + for idx, (k1_index, k2_index) in enumerate(limbSeq): + keypoint1 = rescale_keypoints[k1_index - 1] + keypoint2 = rescale_keypoints[k2_index - 1] + + if keypoint1 is None or keypoint2 is None or len(keypoint1) == 0 or len(keypoint2) == 0: + new_length_list.append(None) + angle_list.append(None) + continue + + Y = np.array([keypoint1[0], keypoint2[0]]) # * float(W) + X = np.array([keypoint1[1], keypoint2[1]]) # * float(H) + + length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + + new_length = length * bone_ratio_list[idx] + angle = math.degrees(math.atan2(X[0] - X[1], Y[0] - Y[1])) + + new_length_list.append(new_length) + angle_list.append(angle) + + # # second traverse, calculate new keypoints + for idx, (k1_index, k2_index) in enumerate(limbSeq): + # update dst_keypoints + start_keypoint = rescale_keypoints[k1_index - 1] + new_length = new_length_list[idx] + angle = angle_list[idx] + + if rescale_keypoints[k1_index - 1] is None or rescale_keypoints[k2_index - 1] is None or len(rescale_keypoints[k1_index - 1]) == 0 or len(rescale_keypoints[k2_index - 1]) == 0: + continue + + # calculate end_keypoint + delta_x = new_length * math.cos(math.radians(angle)) + delta_y = new_length * math.sin(math.radians(angle)) + + end_keypoint_x = start_keypoint[0] - delta_x + end_keypoint_y = start_keypoint[1] - delta_y + + # update keypoints + rescale_keypoints[k2_index - 1] = [end_keypoint_x, end_keypoint_y] + + return rescale_keypoints + + +def fix_lack_keypoints_use_sym(skeleton): + keypoints = skeleton["keypoints_body"] + H, W = skeleton["height"], skeleton["width"] + + limb_points_list = [ + [3, 4, 5], + [6, 7, 8], + [12, 13, 14, 19], + [9, 10, 11, 20], + ] + + for limb_points in limb_points_list: + miss_flag = False + for point in limb_points: + if keypoints[point - 1] is None: + miss_flag = True + continue + if miss_flag: + skeleton["keypoints_body"][point - 1] = None + + repair_limb_seq_left = [ + [3, 4], + [4, 5], # left arm + [12, 13], + [13, 14], # left leg + [14, 19], # left foot + ] + + repair_limb_seq_right = [ + [6, 7], + [7, 8], # right arm + [9, 10], + [10, 11], # right leg + [11, 20], # right foot + ] + + repair_limb_seq = [repair_limb_seq_left, repair_limb_seq_right] + + for idx_part, part in enumerate(repair_limb_seq): + for idx, limb in enumerate(part): + k1_index, k2_index = limb + keypoint1 = keypoints[k1_index - 1] + keypoint2 = keypoints[k2_index - 1] + + if keypoint1 != None and keypoint2 is None: # noqa + # reference to symmetric limb + sym_limb = repair_limb_seq[1 - idx_part][idx] + k1_index_sym, k2_index_sym = sym_limb + keypoint1_sym = keypoints[k1_index_sym - 1] + keypoint2_sym = keypoints[k2_index_sym - 1] + ref_length = 0 + + if keypoint1_sym != None and keypoint2_sym != None: # noqa + X = np.array([keypoint1_sym[0], keypoint2_sym[0]]) * float(W) + Y = np.array([keypoint1_sym[1], keypoint2_sym[1]]) * float(H) + ref_length = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + else: + ref_length_left, ref_length_right = 0, 0 + if keypoints[1] != None and keypoints[8] != None: # noqa + X = np.array([keypoints[1][0], keypoints[8][0]]) * float(W) + Y = np.array([keypoints[1][1], keypoints[8][1]]) * float(H) + ref_length_left = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + if idx <= 1: # arms + ref_length_left /= 2 + + if keypoints[1] != None and keypoints[11] != None: # noqa + X = np.array([keypoints[1][0], keypoints[11][0]]) * float(W) + Y = np.array([keypoints[1][1], keypoints[11][1]]) * float(H) + ref_length_right = ((X[0] - X[1]) ** 2 + (Y[0] - Y[1]) ** 2) ** 0.5 + if idx <= 1: # arms + ref_length_right /= 2 + elif idx == 4: # foot + ref_length_right /= 5 + + ref_length = max(ref_length_left, ref_length_right) + + if ref_length != 0: + skeleton["keypoints_body"][k2_index - 1] = [0, 0] # init + skeleton["keypoints_body"][k2_index - 1][0] = skeleton["keypoints_body"][k1_index - 1][0] + skeleton["keypoints_body"][k2_index - 1][1] = skeleton["keypoints_body"][k1_index - 1][1] + ref_length / H + return skeleton + + +def rescale_shorten_skeleton(ratio_list, src_length_list, dst_length_list): + modify_bone_list = [[0, 1], [2, 4], [3, 5], [6, 9], [7, 10], [8, 11], [17, 18]] + + for modify_bone in modify_bone_list: + new_ratio = max(ratio_list[modify_bone[0]], ratio_list[modify_bone[1]]) + ratio_list[modify_bone[0]] = new_ratio + ratio_list[modify_bone[1]] = new_ratio + + if ratio_list[13] != None and ratio_list[15] != None: # noqa + ratio_eye_avg = (ratio_list[13] + ratio_list[15]) / 2 + ratio_list[13] = ratio_eye_avg + ratio_list[15] = ratio_eye_avg + + if ratio_list[14] != None and ratio_list[16] != None: # noqa + ratio_eye_avg = (ratio_list[14] + ratio_list[16]) / 2 + ratio_list[14] = ratio_eye_avg + ratio_list[16] = ratio_eye_avg + + return ratio_list, src_length_list, dst_length_list + + +def check_full_body(keypoints, threshold=0.4): + body_flag = "half_body" + + # 1. If ankle points exist, confidence is greater than the threshold, and points do not exceed the frame, return full_body + if keypoints[10] != None and keypoints[13] != None and keypoints[8] != None and keypoints[11] != None: # noqa + if ( + (keypoints[10][1] <= 1 and keypoints[13][1] <= 1) + and (keypoints[10][2] >= threshold and keypoints[13][2] >= threshold) + and (keypoints[8][1] <= 1 and keypoints[11][1] <= 1) + and (keypoints[8][2] >= threshold and keypoints[11][2] >= threshold) + ): + body_flag = "full_body" + return body_flag + + # 2. If hip points exist, return three_quarter_body + if keypoints[8] != None and keypoints[11] != None: # noqa + if (keypoints[8][1] <= 1 and keypoints[11][1] <= 1) and (keypoints[8][2] >= threshold and keypoints[11][2] >= threshold): + body_flag = "three_quarter_body" + return body_flag + + return body_flag + + +def check_full_body_both(flag1, flag2): + body_flag_dict = {"full_body": 2, "three_quarter_body": 1, "half_body": 0} + + body_flag_dict_reverse = {2: "full_body", 1: "three_quarter_body", 0: "half_body"} + + flag1_num = body_flag_dict[flag1] + flag2_num = body_flag_dict[flag2] + flag_both_num = min(flag1_num, flag2_num) + return body_flag_dict_reverse[flag_both_num] + + +def write_to_poses(data_to_json, none_idx, dst_shape, bone_ratio_list, delta_ground_x, delta_ground_y, rescaled_src_ground_x, body_flag, scale_min): + outputs = [] + length = len(data_to_json) + for id in tqdm(range(length)): + src_height, src_width = data_to_json[id]["height"], data_to_json[id]["width"] + width, height = dst_shape + keypoints = data_to_json[id]["keypoints_body"] + for idx in range(len(keypoints)): + if idx in none_idx: + keypoints[idx] = None + new_keypoints = keypoints.copy() + + # get hand keypoints + keypoints_hand = {"left": data_to_json[id]["keypoints_left_hand"], "right": data_to_json[id]["keypoints_right_hand"]} + # Normalize hand coordinates to 0-1 range + for hand_idx in range(len(data_to_json[id]["keypoints_left_hand"])): + data_to_json[id]["keypoints_left_hand"][hand_idx][0] = data_to_json[id]["keypoints_left_hand"][hand_idx][0] / src_width + data_to_json[id]["keypoints_left_hand"][hand_idx][1] = data_to_json[id]["keypoints_left_hand"][hand_idx][1] / src_height + + for hand_idx in range(len(data_to_json[id]["keypoints_right_hand"])): + data_to_json[id]["keypoints_right_hand"][hand_idx][0] = data_to_json[id]["keypoints_right_hand"][hand_idx][0] / src_width + data_to_json[id]["keypoints_right_hand"][hand_idx][1] = data_to_json[id]["keypoints_right_hand"][hand_idx][1] / src_height + + frame_info = get_scaled_pose( + (height, width), (src_height, src_width), new_keypoints, keypoints_hand, bone_ratio_list, delta_ground_x, delta_ground_y, rescaled_src_ground_x, body_flag, id, scale_min + ) + outputs.append(frame_info) + + return outputs + + +def calculate_scale_ratio(skeleton, skeleton_edit, scale_ratio_flag): + if scale_ratio_flag: + headw = max(skeleton["keypoints_body"][0][0], skeleton["keypoints_body"][14][0], skeleton["keypoints_body"][15][0], skeleton["keypoints_body"][16][0], skeleton["keypoints_body"][17][0]) - min( + skeleton["keypoints_body"][0][0], skeleton["keypoints_body"][14][0], skeleton["keypoints_body"][15][0], skeleton["keypoints_body"][16][0], skeleton["keypoints_body"][17][0] + ) + headw_edit = max( + skeleton_edit["keypoints_body"][0][0], + skeleton_edit["keypoints_body"][14][0], + skeleton_edit["keypoints_body"][15][0], + skeleton_edit["keypoints_body"][16][0], + skeleton_edit["keypoints_body"][17][0], + ) - min( + skeleton_edit["keypoints_body"][0][0], + skeleton_edit["keypoints_body"][14][0], + skeleton_edit["keypoints_body"][15][0], + skeleton_edit["keypoints_body"][16][0], + skeleton_edit["keypoints_body"][17][0], + ) + headw_ratio = headw / headw_edit + + _, _, shoulder = get_length(skeleton, [6, 3]) + _, _, shoulder_edit = get_length(skeleton_edit, [6, 3]) + shoulder_ratio = shoulder / shoulder_edit + + return max(headw_ratio, shoulder_ratio) + + else: + return 1 + + +def retarget_pose(src_skeleton, dst_skeleton, all_src_skeleton, src_skeleton_edit, dst_skeleton_edit, threshold=0.4): + if src_skeleton_edit is not None and dst_skeleton_edit is not None: # noqa + use_edit_for_base = True + else: + use_edit_for_base = False + + src_skeleton_ori = copy.deepcopy(src_skeleton) + + dst_skeleton_ori_h, dst_skeleton_ori_w = dst_skeleton["height"], dst_skeleton["width"] + if ( + src_skeleton["keypoints_body"][0] != None # noqa + and src_skeleton["keypoints_body"][10] != None # noqa + and src_skeleton["keypoints_body"][13] != None # noqa + and dst_skeleton["keypoints_body"][0] != None # noqa + and dst_skeleton["keypoints_body"][10] != None # noqa + and dst_skeleton["keypoints_body"][13] != None # noqa + and src_skeleton["keypoints_body"][0][2] > 0.5 + and src_skeleton["keypoints_body"][10][2] > 0.5 + and src_skeleton["keypoints_body"][13][2] > 0.5 + and dst_skeleton["keypoints_body"][0][2] > 0.5 + and dst_skeleton["keypoints_body"][10][2] > 0.5 + and dst_skeleton["keypoints_body"][13][2] > 0.5 + ): + src_height = src_skeleton["height"] * abs((src_skeleton["keypoints_body"][10][1] + src_skeleton["keypoints_body"][13][1]) / 2 - src_skeleton["keypoints_body"][0][1]) + dst_height = dst_skeleton["height"] * abs((dst_skeleton["keypoints_body"][10][1] + dst_skeleton["keypoints_body"][13][1]) / 2 - dst_skeleton["keypoints_body"][0][1]) + scale_min = 1.0 * src_height / dst_height + elif ( + src_skeleton["keypoints_body"][0] != None # noqa + and src_skeleton["keypoints_body"][8] != None # noqa + and src_skeleton["keypoints_body"][11] != None # noqa + and dst_skeleton["keypoints_body"][0] != None # noqa + and dst_skeleton["keypoints_body"][8] != None # noqa + and dst_skeleton["keypoints_body"][11] != None # noqa + and src_skeleton["keypoints_body"][0][2] > 0.5 + and src_skeleton["keypoints_body"][8][2] > 0.5 + and src_skeleton["keypoints_body"][11][2] > 0.5 + and dst_skeleton["keypoints_body"][0][2] > 0.5 + and dst_skeleton["keypoints_body"][8][2] > 0.5 + and dst_skeleton["keypoints_body"][11][2] > 0.5 + ): + src_height = src_skeleton["height"] * abs((src_skeleton["keypoints_body"][8][1] + src_skeleton["keypoints_body"][11][1]) / 2 - src_skeleton["keypoints_body"][0][1]) + dst_height = dst_skeleton["height"] * abs((dst_skeleton["keypoints_body"][8][1] + dst_skeleton["keypoints_body"][11][1]) / 2 - dst_skeleton["keypoints_body"][0][1]) + scale_min = 1.0 * src_height / dst_height + else: + scale_min = np.sqrt(src_skeleton["height"] * src_skeleton["width"]) / np.sqrt(dst_skeleton["height"] * dst_skeleton["width"]) + + if use_edit_for_base: + scale_ratio_flag = False + if ( + src_skeleton_edit["keypoints_body"][0] != None # noqa + and src_skeleton_edit["keypoints_body"][10] != None # noqa + and src_skeleton_edit["keypoints_body"][13] != None # noqa + and dst_skeleton_edit["keypoints_body"][0] != None # noqa + and dst_skeleton_edit["keypoints_body"][10] != None # noqa + and dst_skeleton_edit["keypoints_body"][13] != None # noqa + and src_skeleton_edit["keypoints_body"][0][2] > 0.5 + and src_skeleton_edit["keypoints_body"][10][2] > 0.5 + and src_skeleton_edit["keypoints_body"][13][2] > 0.5 + and dst_skeleton_edit["keypoints_body"][0][2] > 0.5 + and dst_skeleton_edit["keypoints_body"][10][2] > 0.5 + and dst_skeleton_edit["keypoints_body"][13][2] > 0.5 + ): + src_height_edit = src_skeleton_edit["height"] * abs( + (src_skeleton_edit["keypoints_body"][10][1] + src_skeleton_edit["keypoints_body"][13][1]) / 2 - src_skeleton_edit["keypoints_body"][0][1] + ) + dst_height_edit = dst_skeleton_edit["height"] * abs( + (dst_skeleton_edit["keypoints_body"][10][1] + dst_skeleton_edit["keypoints_body"][13][1]) / 2 - dst_skeleton_edit["keypoints_body"][0][1] + ) + scale_min_edit = 1.0 * src_height_edit / dst_height_edit + elif ( + src_skeleton_edit["keypoints_body"][0] != None # noqa + and src_skeleton_edit["keypoints_body"][8] != None # noqa + and src_skeleton_edit["keypoints_body"][11] != None # noqa + and dst_skeleton_edit["keypoints_body"][0] != None # noqa + and dst_skeleton_edit["keypoints_body"][8] != None # noqa + and dst_skeleton_edit["keypoints_body"][11] != None # noqa + and src_skeleton_edit["keypoints_body"][0][2] > 0.5 + and src_skeleton_edit["keypoints_body"][8][2] > 0.5 + and src_skeleton_edit["keypoints_body"][11][2] > 0.5 + and dst_skeleton_edit["keypoints_body"][0][2] > 0.5 + and dst_skeleton_edit["keypoints_body"][8][2] > 0.5 + and dst_skeleton_edit["keypoints_body"][11][2] > 0.5 + ): + src_height_edit = src_skeleton_edit["height"] * abs( + (src_skeleton_edit["keypoints_body"][8][1] + src_skeleton_edit["keypoints_body"][11][1]) / 2 - src_skeleton_edit["keypoints_body"][0][1] + ) + dst_height_edit = dst_skeleton_edit["height"] * abs( + (dst_skeleton_edit["keypoints_body"][8][1] + dst_skeleton_edit["keypoints_body"][11][1]) / 2 - dst_skeleton_edit["keypoints_body"][0][1] + ) + scale_min_edit = 1.0 * src_height_edit / dst_height_edit + else: + scale_min_edit = np.sqrt(src_skeleton_edit["height"] * src_skeleton_edit["width"]) / np.sqrt(dst_skeleton_edit["height"] * dst_skeleton_edit["width"]) + scale_ratio_flag = True + + # Flux may change the scale, compensate for it here + ratio_src = calculate_scale_ratio(src_skeleton, src_skeleton_edit, scale_ratio_flag) + ratio_dst = calculate_scale_ratio(dst_skeleton, dst_skeleton_edit, scale_ratio_flag) + + dst_skeleton_edit["height"] = int(dst_skeleton_edit["height"] * scale_min_edit) + dst_skeleton_edit["width"] = int(dst_skeleton_edit["width"] * scale_min_edit) + for idx in range(len(dst_skeleton_edit["keypoints_left_hand"])): + dst_skeleton_edit["keypoints_left_hand"][idx][0] *= scale_min_edit + dst_skeleton_edit["keypoints_left_hand"][idx][1] *= scale_min_edit + for idx in range(len(dst_skeleton_edit["keypoints_right_hand"])): + dst_skeleton_edit["keypoints_right_hand"][idx][0] *= scale_min_edit + dst_skeleton_edit["keypoints_right_hand"][idx][1] *= scale_min_edit + + dst_skeleton["height"] = int(dst_skeleton["height"] * scale_min) + dst_skeleton["width"] = int(dst_skeleton["width"] * scale_min) + for idx in range(len(dst_skeleton["keypoints_left_hand"])): + dst_skeleton["keypoints_left_hand"][idx][0] *= scale_min + dst_skeleton["keypoints_left_hand"][idx][1] *= scale_min + for idx in range(len(dst_skeleton["keypoints_right_hand"])): + dst_skeleton["keypoints_right_hand"][idx][0] *= scale_min + dst_skeleton["keypoints_right_hand"][idx][1] *= scale_min + + dst_body_flag = check_full_body(dst_skeleton["keypoints_body"], threshold) + src_body_flag = check_full_body(src_skeleton_ori["keypoints_body"], threshold) + body_flag = check_full_body_both(dst_body_flag, src_body_flag) + # print('body_flag: ', body_flag) + + if use_edit_for_base: + src_skeleton_edit = fix_lack_keypoints_use_sym(src_skeleton_edit) + dst_skeleton_edit = fix_lack_keypoints_use_sym(dst_skeleton_edit) + else: + src_skeleton = fix_lack_keypoints_use_sym(src_skeleton) + dst_skeleton = fix_lack_keypoints_use_sym(dst_skeleton) + + none_idx = [] + for idx in range(len(dst_skeleton["keypoints_body"])): + if dst_skeleton["keypoints_body"][idx] == None or src_skeleton["keypoints_body"][idx] == None: # noqa + src_skeleton["keypoints_body"][idx] = None + dst_skeleton["keypoints_body"][idx] = None + none_idx.append(idx) + + # get bone ratio list + ratio_list, src_length_list, dst_length_list = [], [], [] + for idx, limb in enumerate(limbSeq): + if use_edit_for_base: + src_X, src_Y, src_length = get_length(src_skeleton_edit, limb) + dst_X, dst_Y, dst_length = get_length(dst_skeleton_edit, limb) + + if src_X is None or src_Y is None or dst_X is None or dst_Y is None: # noqa + ratio = -1 + else: + ratio = 1.0 * dst_length * ratio_dst / src_length / ratio_src + + else: + src_X, src_Y, src_length = get_length(src_skeleton, limb) + dst_X, dst_Y, dst_length = get_length(dst_skeleton, limb) + + if src_X is None or src_Y is None or dst_X is None or dst_Y is None: # noqa + ratio = -1 + else: + ratio = 1.0 * dst_length / src_length + + ratio_list.append(ratio) + src_length_list.append(src_length) + dst_length_list.append(dst_length) + + for idx, ratio in enumerate(ratio_list): + if ratio == -1: + if ratio_list[0] != -1 and ratio_list[1] != -1: + ratio_list[idx] = (ratio_list[0] + ratio_list[1]) / 2 + + # Consider adding constraints when Flux fails to correct head pose, causing neck issues. + # if ratio_list[12] > (ratio_list[0]+ratio_list[1])/2*1.25: + # ratio_list[12] = (ratio_list[0]+ratio_list[1])/2*1.25 + + ratio_list, src_length_list, dst_length_list = rescale_shorten_skeleton(ratio_list, src_length_list, dst_length_list) + + rescaled_src_skeleton_ori = rescale_skeleton(src_skeleton_ori["height"], src_skeleton_ori["width"], src_skeleton_ori["keypoints_body"], ratio_list) + + # get global translation offset_x and offset_y + if body_flag == "full_body": + # print('use foot mark.') + dst_ground_y = max(dst_skeleton["keypoints_body"][10][1], dst_skeleton["keypoints_body"][13][1]) * dst_skeleton["height"] + # The midpoint between toe and ankle + if dst_skeleton["keypoints_body"][18] != None and dst_skeleton["keypoints_body"][19] != None: # noqa + right_foot_mid = (dst_skeleton["keypoints_body"][10][1] + dst_skeleton["keypoints_body"][19][1]) / 2 + left_foot_mid = (dst_skeleton["keypoints_body"][13][1] + dst_skeleton["keypoints_body"][18][1]) / 2 + dst_ground_y = max(left_foot_mid, right_foot_mid) * dst_skeleton["height"] + + rescaled_src_ground_y = max(rescaled_src_skeleton_ori[10][1], rescaled_src_skeleton_ori[13][1]) + delta_ground_y = rescaled_src_ground_y - dst_ground_y + + dst_ground_x = (dst_skeleton["keypoints_body"][8][0] + dst_skeleton["keypoints_body"][11][0]) * dst_skeleton["width"] / 2 + rescaled_src_ground_x = (rescaled_src_skeleton_ori[8][0] + rescaled_src_skeleton_ori[11][0]) / 2 + delta_ground_x = rescaled_src_ground_x - dst_ground_x + delta_x, delta_y = delta_ground_x, delta_ground_y + + else: + # print('use neck mark.') + # use neck keypoint as mark + src_neck_y = rescaled_src_skeleton_ori[1][1] + dst_neck_y = dst_skeleton["keypoints_body"][1][1] + delta_neck_y = src_neck_y - dst_neck_y * dst_skeleton["height"] + + src_neck_x = rescaled_src_skeleton_ori[1][0] + dst_neck_x = dst_skeleton["keypoints_body"][1][0] + delta_neck_x = src_neck_x - dst_neck_x * dst_skeleton["width"] + delta_x, delta_y = delta_neck_x, delta_neck_y + rescaled_src_ground_x = src_neck_x + + dst_shape = (dst_skeleton_ori_w, dst_skeleton_ori_h) + output = write_to_poses(all_src_skeleton, none_idx, dst_shape, ratio_list, delta_x, delta_y, rescaled_src_ground_x, body_flag, scale_min) + return output + + +def get_retarget_pose(tpl_pose_meta0, refer_pose_meta, tpl_pose_metas, tql_edit_pose_meta0, refer_edit_pose_meta): + for key, value in tpl_pose_meta0.items(): + if type(value) is np.ndarray: + if key in ["keypoints_left_hand", "keypoints_right_hand"]: + value = value * np.array([[tpl_pose_meta0["width"], tpl_pose_meta0["height"], 1.0]]) + if not isinstance(value, list): + value = value.tolist() + tpl_pose_meta0[key] = value + + for key, value in refer_pose_meta.items(): + if type(value) is np.ndarray: + if key in ["keypoints_left_hand", "keypoints_right_hand"]: + value = value * np.array([[refer_pose_meta["width"], refer_pose_meta["height"], 1.0]]) + if not isinstance(value, list): + value = value.tolist() + refer_pose_meta[key] = value + + tpl_pose_metas_new = [] + for meta in tpl_pose_metas: + for key, value in meta.items(): + if type(value) is np.ndarray: + if key in ["keypoints_left_hand", "keypoints_right_hand"]: + value = value * np.array([[meta["width"], meta["height"], 1.0]]) + if not isinstance(value, list): + value = value.tolist() + meta[key] = value + tpl_pose_metas_new.append(meta) + + if tql_edit_pose_meta0 is not None: + for key, value in tql_edit_pose_meta0.items(): + if type(value) is np.ndarray: + if key in ["keypoints_left_hand", "keypoints_right_hand"]: + value = value * np.array([[tql_edit_pose_meta0["width"], tql_edit_pose_meta0["height"], 1.0]]) + if not isinstance(value, list): + value = value.tolist() + tql_edit_pose_meta0[key] = value + + if refer_edit_pose_meta is not None: + for key, value in refer_edit_pose_meta.items(): + if type(value) is np.ndarray: + if key in ["keypoints_left_hand", "keypoints_right_hand"]: + value = value * np.array([[refer_edit_pose_meta["width"], refer_edit_pose_meta["height"], 1.0]]) + if not isinstance(value, list): + value = value.tolist() + refer_edit_pose_meta[key] = value + + retarget_tpl_pose_metas = retarget_pose(tpl_pose_meta0, refer_pose_meta, tpl_pose_metas_new, tql_edit_pose_meta0, refer_edit_pose_meta) + + pose_metas = [] + for meta in retarget_tpl_pose_metas: + pose_meta = AAPoseMeta() + width, height = meta["width"], meta["height"] + pose_meta.width = width + pose_meta.height = height + pose_meta.kps_body = np.array(meta["keypoints_body"])[:, :2] * (width, height) + pose_meta.kps_body_p = np.array(meta["keypoints_body"])[:, 2] + + kps_lhand = [] + kps_lhand_p = [] + for each_kps_lhand in meta["keypoints_left_hand"]: + if each_kps_lhand is not None: + kps_lhand.append([each_kps_lhand.x, each_kps_lhand.y]) + kps_lhand_p.append(each_kps_lhand.score) + else: + kps_lhand.append([None, None]) + kps_lhand_p.append(0.0) + + pose_meta.kps_lhand = np.array(kps_lhand) + pose_meta.kps_lhand_p = np.array(kps_lhand_p) + + kps_rhand = [] + kps_rhand_p = [] + for each_kps_rhand in meta["keypoints_right_hand"]: + if each_kps_rhand is not None: + kps_rhand.append([each_kps_rhand.x, each_kps_rhand.y]) + kps_rhand_p.append(each_kps_rhand.score) + else: + kps_rhand.append([None, None]) + kps_rhand_p.append(0.0) + + pose_meta.kps_rhand = np.array(kps_rhand) + pose_meta.kps_rhand_p = np.array(kps_rhand_p) + + pose_metas.append(pose_meta) + + return pose_metas diff --git a/tools/preprocess/sam_utils.py b/tools/preprocess/sam_utils.py new file mode 100644 index 0000000..7fb2149 --- /dev/null +++ b/tools/preprocess/sam_utils.py @@ -0,0 +1,146 @@ +# Copyright (c) 2025. Your modifications here. +# This file wraps and extends sam2.utils.misc for custom modifications. + +import os + +import numpy as np +import torch +from PIL import Image +from hydra import compose +from hydra.utils import instantiate +from omegaconf import OmegaConf +from sam2.build_sam import _load_checkpoint +from sam2.utils.misc import * +from sam2.utils.misc import AsyncVideoFrameLoader, _load_img_as_tensor +from tqdm import tqdm + + +def _load_img_v2_as_tensor(img, image_size): + img_pil = Image.fromarray(img.astype(np.uint8)) + img_np = np.array(img_pil.convert("RGB").resize((image_size, image_size))) + if img_np.dtype == np.uint8: # np.uint8 is expected for JPEG images + img_np = img_np / 255.0 + else: + raise RuntimeError(f"Unknown image dtype: {img_np.dtype}") + img = torch.from_numpy(img_np).permute(2, 0, 1) + video_width, video_height = img_pil.size # the original video size + return img, video_height, video_width + + +def load_video_frames( + video_path, + image_size, + offload_video_to_cpu, + img_mean=(0.485, 0.456, 0.406), + img_std=(0.229, 0.224, 0.225), + async_loading_frames=False, + frame_names=None, +): + """ + Load the video frames from a directory of JPEG files (".jpg" format). + + The frames are resized to image_size x image_size and are loaded to GPU if + `offload_video_to_cpu` is `False` and to CPU if `offload_video_to_cpu` is `True`. + + You can load a frame asynchronously by setting `async_loading_frames` to `True`. + """ + if isinstance(video_path, str) and os.path.isdir(video_path): + jpg_folder = video_path + else: + raise NotImplementedError("Only JPEG frames are supported at this moment") + if frame_names is None: + frame_names = [p for p in os.listdir(jpg_folder) if os.path.splitext(p)[-1] in [".jpg", ".jpeg", ".JPG", ".JPEG", ".png"]] + frame_names.sort(key=lambda p: int(os.path.splitext(p)[0])) + + num_frames = len(frame_names) + if num_frames == 0: + raise RuntimeError(f"no images found in {jpg_folder}") + img_paths = [os.path.join(jpg_folder, frame_name) for frame_name in frame_names] + img_mean = torch.tensor(img_mean, dtype=torch.float32)[:, None, None] + img_std = torch.tensor(img_std, dtype=torch.float32)[:, None, None] + + if async_loading_frames: + lazy_images = AsyncVideoFrameLoader(img_paths, image_size, offload_video_to_cpu, img_mean, img_std) + return lazy_images, lazy_images.video_height, lazy_images.video_width + + images = torch.zeros(num_frames, 3, image_size, image_size, dtype=torch.float32) + for n, img_path in enumerate(tqdm(img_paths, desc="frame loading (JPEG)")): + images[n], video_height, video_width = _load_img_as_tensor(img_path, image_size) + if not offload_video_to_cpu: + images = images.cuda() + img_mean = img_mean.cuda() + img_std = img_std.cuda() + # normalize by mean and std + images -= img_mean + images /= img_std + return images, video_height, video_width + + +def load_video_frames_v2( + frames, + image_size, + offload_video_to_cpu, + img_mean=(0.485, 0.456, 0.406), + img_std=(0.229, 0.224, 0.225), + async_loading_frames=False, + frame_names=None, +): + """ + Load the video frames from a directory of JPEG files (".jpg" format). + + The frames are resized to image_size x image_size and are loaded to GPU if + `offload_video_to_cpu` is `False` and to CPU if `offload_video_to_cpu` is `True`. + + You can load a frame asynchronously by setting `async_loading_frames` to `True`. + """ + num_frames = len(frames) + img_mean = torch.tensor(img_mean, dtype=torch.float32)[:, None, None] + img_std = torch.tensor(img_std, dtype=torch.float32)[:, None, None] + + images = torch.zeros(num_frames, 3, image_size, image_size, dtype=torch.float32) + for n, frame in enumerate(tqdm(frames, desc="video frame")): + images[n], video_height, video_width = _load_img_v2_as_tensor(frame, image_size) + if not offload_video_to_cpu: + images = images.cuda() + img_mean = img_mean.cuda() + img_std = img_std.cuda() + # normalize by mean and std + images -= img_mean + images /= img_std + return images, video_height, video_width + + +def build_sam2_video_predictor( + config_file, + ckpt_path=None, + device="cuda", + mode="eval", + hydra_overrides_extra=[], + apply_postprocessing=True, +): + hydra_overrides = [ + "++model._target_=video_predictor.SAM2VideoPredictor", + ] + if apply_postprocessing: + hydra_overrides_extra = hydra_overrides_extra.copy() + hydra_overrides_extra += [ + # dynamically fall back to multi-mask if the single mask is not stable + "++model.sam_mask_decoder_extra_args.dynamic_multimask_via_stability=true", + "++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_delta=0.05", + "++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_thresh=0.98", + # the sigmoid mask logits on interacted frames with clicks in the memory encoder so that the encoded masks are exactly as what users see from clicking + "++model.binarize_mask_from_pts_for_mem_enc=true", + # fill small holes in the low-res masks up to `fill_hole_area` (before resizing them to the original video resolution) + "++model.fill_hole_area=8", + ] + + hydra_overrides.extend(hydra_overrides_extra) + # Read config and init model + cfg = compose(config_name=config_file, overrides=hydra_overrides) + OmegaConf.resolve(cfg) + model = instantiate(cfg.model, _recursive_=True) + _load_checkpoint(model, ckpt_path) + model = model.to(device) + if mode == "eval": + model.eval() + return model diff --git a/tools/preprocess/utils.py b/tools/preprocess/utils.py new file mode 100644 index 0000000..a18c244 --- /dev/null +++ b/tools/preprocess/utils.py @@ -0,0 +1,219 @@ +# Copyright 2024-2025 The Alibaba Wan Team Authors. All rights reserved. +import math +import random + +import cv2 +import numpy as np + + +def get_mask_boxes(mask): + """ + + Args: + mask: [h, w] + Returns: + + """ + y_coords, x_coords = np.nonzero(mask) + x_min = x_coords.min() + x_max = x_coords.max() + y_min = y_coords.min() + y_max = y_coords.max() + bbox = np.array([x_min, y_min, x_max, y_max]).astype(np.int32) + return bbox + + +def get_aug_mask(body_mask, w_len=10, h_len=20): + body_bbox = get_mask_boxes(body_mask) + + bbox_wh = body_bbox[2:4] - body_bbox[0:2] + w_slice = np.int32(bbox_wh[0] / w_len) + h_slice = np.int32(bbox_wh[1] / h_len) + + for each_w in range(body_bbox[0], body_bbox[2], w_slice): + w_start = min(each_w, body_bbox[2]) + w_end = min((each_w + w_slice), body_bbox[2]) + # print(w_start, w_end) + for each_h in range(body_bbox[1], body_bbox[3], h_slice): + h_start = min(each_h, body_bbox[3]) + h_end = min((each_h + h_slice), body_bbox[3]) + if body_mask[h_start:h_end, w_start:w_end].sum() > 0: + body_mask[h_start:h_end, w_start:w_end] = 1 + + return body_mask + + +def get_mask_body_img(img_copy, hand_mask, k=7, iterations=1): + kernel = np.ones((k, k), np.uint8) + dilation = cv2.dilate(hand_mask, kernel, iterations=iterations) + mask_hand_img = img_copy * (1 - dilation[:, :, None]) + + return mask_hand_img, dilation + + +def get_face_bboxes(kp2ds, scale, image_shape, ratio_aug): + h, w = image_shape + kp2ds_face = kp2ds.copy()[23:91, :2] + + min_x, min_y = np.min(kp2ds_face, axis=0) + max_x, max_y = np.max(kp2ds_face, axis=0) + + initial_width = max_x - min_x + initial_height = max_y - min_y + + initial_area = initial_width * initial_height + + expanded_area = initial_area * scale + + new_width = np.sqrt(expanded_area * (initial_width / initial_height)) + new_height = np.sqrt(expanded_area * (initial_height / initial_width)) + + delta_width = (new_width - initial_width) / 2 + delta_height = (new_height - initial_height) / 4 + + if ratio_aug: + if random.random() > 0.5: + delta_width += random.uniform(0, initial_width // 10) + else: + delta_height += random.uniform(0, initial_height // 10) + + expanded_min_x = max(min_x - delta_width, 0) + expanded_max_x = min(max_x + delta_width, w) + expanded_min_y = max(min_y - 3 * delta_height, 0) + expanded_max_y = min(max_y + delta_height, h) + + return [int(expanded_min_x), int(expanded_max_x), int(expanded_min_y), int(expanded_max_y)] + + +def calculate_new_size(orig_w, orig_h, target_area, divisor=64): + target_ratio = orig_w / orig_h + + def check_valid(w, h): + if w <= 0 or h <= 0: + return False + return w * h <= target_area and w % divisor == 0 and h % divisor == 0 + + def get_ratio_diff(w, h): + return abs(w / h - target_ratio) + + def round_to_64(value, round_up=False, divisor=64): + if round_up: + return divisor * ((value + (divisor - 1)) // divisor) + return divisor * (value // divisor) + + possible_sizes = [] + + max_area_h = int(np.sqrt(target_area / target_ratio)) + max_area_w = int(max_area_h * target_ratio) + + max_h = round_to_64(max_area_h, round_up=True, divisor=divisor) + max_w = round_to_64(max_area_w, round_up=True, divisor=divisor) + + for h in range(divisor, max_h + divisor, divisor): + ideal_w = h * target_ratio + + w_down = round_to_64(ideal_w) + w_up = round_to_64(ideal_w, round_up=True) + + for w in [w_down, w_up]: + if check_valid(w, h, divisor): + possible_sizes.append((w, h, get_ratio_diff(w, h))) + + if not possible_sizes: + raise ValueError("Can not find suitable size") + + possible_sizes.sort(key=lambda x: (-x[0] * x[1], x[2])) + + best_w, best_h, _ = possible_sizes[0] + return int(best_w), int(best_h) + + +def resize_by_area(image, target_area, keep_aspect_ratio=True, divisor=64, padding_color=(0, 0, 0)): + h, w = image.shape[:2] + try: + new_w, new_h = calculate_new_size(w, h, target_area, divisor) + except: # noqa + aspect_ratio = w / h + + if keep_aspect_ratio: + new_h = math.sqrt(target_area / aspect_ratio) + new_w = target_area / new_h + else: + new_w = new_h = math.sqrt(target_area) + + new_w, new_h = int((new_w // divisor) * divisor), int((new_h // divisor) * divisor) + + interpolation = cv2.INTER_AREA if (new_w * new_h < w * h) else cv2.INTER_LINEAR + + resized_image = padding_resize(image, height=new_h, width=new_w, padding_color=padding_color, interpolation=interpolation) + return resized_image + + +def padding_resize(img_ori, height=512, width=512, padding_color=(0, 0, 0), interpolation=cv2.INTER_LINEAR): + ori_height = img_ori.shape[0] + ori_width = img_ori.shape[1] + channel = img_ori.shape[2] + + img_pad = np.zeros((height, width, channel)) + if channel == 1: + img_pad[:, :, 0] = padding_color[0] + else: + img_pad[:, :, 0] = padding_color[0] + img_pad[:, :, 1] = padding_color[1] + img_pad[:, :, 2] = padding_color[2] + + if (ori_height / ori_width) > (height / width): + new_width = int(height / ori_height * ori_width) + img = cv2.resize(img_ori, (new_width, height), interpolation=interpolation) + padding = int((width - new_width) / 2) + if len(img.shape) == 2: + img = img[:, :, np.newaxis] + img_pad[:, padding : padding + new_width, :] = img + else: + new_height = int(width / ori_width * ori_height) + img = cv2.resize(img_ori, (width, new_height), interpolation=interpolation) + padding = int((height - new_height) / 2) + if len(img.shape) == 2: + img = img[:, :, np.newaxis] + img_pad[padding : padding + new_height, :, :] = img + + img_pad = np.uint8(img_pad) + + return img_pad + + +def get_frame_indices(frame_num, video_fps, clip_length, train_fps): + start_frame = 0 + times = np.arange(0, clip_length) / train_fps + frame_indices = start_frame + np.round(times * video_fps).astype(int) + frame_indices = np.clip(frame_indices, 0, frame_num - 1) + + return frame_indices.tolist() + + +def get_face_bboxes(kp2ds, scale, image_shape): + h, w = image_shape + kp2ds_face = kp2ds.copy()[1:] * (w, h) + + min_x, min_y = np.min(kp2ds_face, axis=0) + max_x, max_y = np.max(kp2ds_face, axis=0) + + initial_width = max_x - min_x + initial_height = max_y - min_y + + initial_area = initial_width * initial_height + + expanded_area = initial_area * scale + + new_width = np.sqrt(expanded_area * (initial_width / initial_height)) + new_height = np.sqrt(expanded_area * (initial_height / initial_width)) + + delta_width = (new_width - initial_width) / 2 + delta_height = (new_height - initial_height) / 4 + + expanded_min_x = max(min_x - delta_width, 0) + expanded_max_x = min(max_x + delta_width, w) + expanded_min_y = max(min_y - 3 * delta_height, 0) + expanded_max_y = min(max_y + delta_height, h) + + return [int(expanded_min_x), int(expanded_max_x), int(expanded_min_y), int(expanded_max_y)] diff --git a/tools/preprocess/video_predictor.py b/tools/preprocess/video_predictor.py new file mode 100644 index 0000000..b4c4d81 --- /dev/null +++ b/tools/preprocess/video_predictor.py @@ -0,0 +1,131 @@ +# Copyright (c) 2025. Your modifications here. +# A wrapper for sam2 functions +from collections import OrderedDict + +import torch +from sam2.sam2_video_predictor import SAM2VideoPredictor as _SAM2VideoPredictor +from sam_utils import load_video_frames, load_video_frames_v2 + + +class SAM2VideoPredictor(_SAM2VideoPredictor): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + @torch.inference_mode() + def init_state(self, video_path, offload_video_to_cpu=False, offload_state_to_cpu=False, async_loading_frames=False, frame_names=None): + """Initialize a inference state.""" + images, video_height, video_width = load_video_frames( + video_path=video_path, image_size=self.image_size, offload_video_to_cpu=offload_video_to_cpu, async_loading_frames=async_loading_frames, frame_names=frame_names + ) + inference_state = {} + inference_state["images"] = images + inference_state["num_frames"] = len(images) + # whether to offload the video frames to CPU memory + # turning on this option saves the GPU memory with only a very small overhead + inference_state["offload_video_to_cpu"] = offload_video_to_cpu + # whether to offload the inference state to CPU memory + # turning on this option saves the GPU memory at the cost of a lower tracking fps + # (e.g. in a test case of 768x768 model, fps dropped from 27 to 24 when tracking one object + # and from 24 to 21 when tracking two objects) + inference_state["offload_state_to_cpu"] = offload_state_to_cpu + # the original video height and width, used for resizing final output scores + inference_state["video_height"] = video_height + inference_state["video_width"] = video_width + inference_state["device"] = torch.device("cuda") + if offload_state_to_cpu: + inference_state["storage_device"] = torch.device("cpu") + else: + inference_state["storage_device"] = torch.device("cuda") + # inputs on each frame + inference_state["point_inputs_per_obj"] = {} + inference_state["mask_inputs_per_obj"] = {} + # visual features on a small number of recently visited frames for quick interactions + inference_state["cached_features"] = {} + # values that don't change across frames (so we only need to hold one copy of them) + inference_state["constants"] = {} + # mapping between client-side object id and model-side object index + inference_state["obj_id_to_idx"] = OrderedDict() + inference_state["obj_idx_to_id"] = OrderedDict() + inference_state["obj_ids"] = [] + # A storage to hold the model's tracking results and states on each frame + inference_state["output_dict"] = { + "cond_frame_outputs": {}, # dict containing {frame_idx: } + "non_cond_frame_outputs": {}, # dict containing {frame_idx: } + } + # Slice (view) of each object tracking results, sharing the same memory with "output_dict" + inference_state["output_dict_per_obj"] = {} + # A temporary storage to hold new outputs when user interact with a frame + # to add clicks or mask (it's merged into "output_dict" before propagation starts) + inference_state["temp_output_dict_per_obj"] = {} + # Frames that already holds consolidated outputs from click or mask inputs + # (we directly use their consolidated outputs during tracking) + inference_state["consolidated_frame_inds"] = { + "cond_frame_outputs": set(), # set containing frame indices + "non_cond_frame_outputs": set(), # set containing frame indices + } + # metadata for each tracking frame (e.g. which direction it's tracked) + inference_state["tracking_has_started"] = False + inference_state["frames_already_tracked"] = {} + # Warm up the visual backbone and cache the image feature on frame 0 + self._get_image_feature(inference_state, frame_idx=0, batch_size=1) + return inference_state + + @torch.inference_mode() + def init_state_v2(self, frames, offload_video_to_cpu=False, offload_state_to_cpu=False, async_loading_frames=False, frame_names=None): + """Initialize a inference state.""" + images, video_height, video_width = load_video_frames_v2( + frames=frames, image_size=self.image_size, offload_video_to_cpu=offload_video_to_cpu, async_loading_frames=async_loading_frames, frame_names=frame_names + ) + inference_state = {} + inference_state["images"] = images + inference_state["num_frames"] = len(images) + # whether to offload the video frames to CPU memory + # turning on this option saves the GPU memory with only a very small overhead + inference_state["offload_video_to_cpu"] = offload_video_to_cpu + # whether to offload the inference state to CPU memory + # turning on this option saves the GPU memory at the cost of a lower tracking fps + # (e.g. in a test case of 768x768 model, fps dropped from 27 to 24 when tracking one object + # and from 24 to 21 when tracking two objects) + inference_state["offload_state_to_cpu"] = offload_state_to_cpu + # the original video height and width, used for resizing final output scores + inference_state["video_height"] = video_height + inference_state["video_width"] = video_width + inference_state["device"] = torch.device("cuda") + if offload_state_to_cpu: + inference_state["storage_device"] = torch.device("cpu") + else: + inference_state["storage_device"] = torch.device("cuda") + # inputs on each frame + inference_state["point_inputs_per_obj"] = {} + inference_state["mask_inputs_per_obj"] = {} + # visual features on a small number of recently visited frames for quick interactions + inference_state["cached_features"] = {} + # values that don't change across frames (so we only need to hold one copy of them) + inference_state["constants"] = {} + # mapping between client-side object id and model-side object index + inference_state["obj_id_to_idx"] = OrderedDict() + inference_state["obj_idx_to_id"] = OrderedDict() + inference_state["obj_ids"] = [] + # A storage to hold the model's tracking results and states on each frame + inference_state["output_dict"] = { + "cond_frame_outputs": {}, # dict containing {frame_idx: } + "non_cond_frame_outputs": {}, # dict containing {frame_idx: } + } + # Slice (view) of each object tracking results, sharing the same memory with "output_dict" + inference_state["output_dict_per_obj"] = {} + # A temporary storage to hold new outputs when user interact with a frame + # to add clicks or mask (it's merged into "output_dict" before propagation starts) + inference_state["temp_output_dict_per_obj"] = {} + # Frames that already holds consolidated outputs from click or mask inputs + # (we directly use their consolidated outputs during tracking) + inference_state["consolidated_frame_inds"] = { + "cond_frame_outputs": set(), # set containing frame indices + "non_cond_frame_outputs": set(), # set containing frame indices + } + # metadata for each tracking frame (e.g. which direction it's tracked) + inference_state["tracking_has_started"] = False + inference_state["frames_already_tracked"] = {} + inference_state["frames_tracked_per_obj"] = {} + # Warm up the visual backbone and cache the image feature on frame 0 + self._get_image_feature(inference_state, frame_idx=0, batch_size=1) + return inference_state -- GitLab
    + + + + +
    + + + + +
    + +
    +
    +
    +
    +
    + + 可用模型 +
    +
    +
    +
    +
    +
    +
    +
    任务类型:{{ model.task }}
    +

    模型名称:{{ model.model_cls }}

    + 推理模式: {{ model.stage }} +
    +
    +
    +
    + 暂无可用模型 +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + 提交新任务 +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + 预览图片 +
    +
    +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + 任务列表 +
    +
    + + + +
    +
    +
    +
    + 暂无任务记录 +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + {{ task.task_id }} +
    +
    + + + {{ task.task_type }} + + + + {{ task.model_cls }} + + + + {{ task.stage }} + +
    +
    +
    +
    +
    +

    + + + 提示词: + + + {{ task.params.prompt.length > 50 ? task.params.prompt.substring(0, 50) + '...' : task.params.prompt }} + +

    +

    + + + 种子值: + + {{ task.params.seed }} +

    +
    +
    +

    + + + 创建时间: + + {{ formatTime(task.create_t) }} +

    +

    + + + 输出: + + + + {{ key }} + + + + +

    +
    +
    +
    +
    +
    + + + {{ task.status }} + +
    + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + 完整提示词 +
    +
    +

    {{ task.params.prompt || '无提示词' }}

    +
    +
    +
    +
    + + 任务参数 +
    +
    +
    + 任务类型: + + + {{ task.task_type }} + +
    +
    + 模型名称: + + + {{ task.model_cls }} + +
    +
    + 推理模式: + + + {{ task.stage }} + +
    +
    + 种子值: + {{ task.params.seed }} +
    +
    +
    +
    +
    +
    +
    + + 时间信息 +
    +
    +
      +
    • 创建时间: {{ formatTime(task.create_t) }}
    • +
    • 更新时间: {{ formatTime(task.update_t) }}
    • +
    +
    +
    +
    +
    + + 输入文件/输出结果 +
    +
    +
    + 输入文件: + {{ key }} +
    +
    + 输出结果: + {{ key }} +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + 显示第 {{ (pagination.page - 1) * pagination.page_size + 1 }} - + {{ Math.min(pagination.page * pagination.page_size, pagination.total) }} 条, + 共 {{ pagination.total }} 条记录 +
    + + + +
    + 每页显示: + +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + 加载中... +
    +
    + + +
    +
    + {{ alert.message }} + +
    +
    +

    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 z�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�}?!fb8Y2A<_S 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 UGG&-&)$HLrQE5{C$5%Zs_bygbdV=$&MTT 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 NoinyFdTmIE`yT-!ce(%o literal 0 HcmV?d00001 diff --git a/assets/inputs/imgs/girl.png b/assets/inputs/imgs/girl.png new file mode 100644 index 0000000000000000000000000000000000000000..8174bf2122301340e7aa9ceb005e1964def965d2 GIT binary patch literal 248908 zcmXtebx_pb_x^otuuFHxE+HWxSb)?nA)!dBfYd4m3Q~eJ`yvz&6%>__SOo>;t)PgY z#4e(MB7)ML(%rG~_4Awg&D@!L|2T8+nKS2k&Yg3fBwK59ZVm|!006h8g{eINsDDQk zz#{)`7WMt_06+}eTAe=5VzK@p5eNuT4?(RE)X9dVLQo$U@-qZALr^ys(Fj515X8mK z`y2ujVrWrL?otRE5k&Fwh{y;_aG}s+!su5JG$n}{6Ye|7) zMh1&Uan8$f?H=M4;};&{N3}nW-zR~S5Lb$Ypil(#<57YL8oj5(mj*%dT-@_*H0I2J zl9INdknCLu!sFDv5eT}WunJy<@wfZP0o}cUU-Xeb3MiDBy5{uHudAK)`wv(ik-;B2 zY&rb3<}eazj6fJFDysc!F687)XaDuIDfzCD+jBcN zG1ExOM3|q^{JP)$1pN`b>!!XD<<+Aq*dA})f5WrMOKWqdZ)51yXxBh9C3E|x?r@0i z;?!*UaoM%+$vbnU!{!6sVS>R(da zb~iSr>_t|-ews2CUV3-qjGWZY()_rO;^d3#lMllBOM|!QbLrtpqaTW1;rRZ%^h=TE z`S#!YiQms&-EDvKo3r%%ij?srj>ty-A3b1!c^VEc0nJ>zC{i3dw z3tO3fb;axW^2;;J@h);Ly@MDD$NH!ALp`s&T+0N{b8snO}szWJP1Z^;?)#)=vHvMRBv zcY+TG&2G|>dL+-Y#_x1HkP;8>3SG{sVk84&e&i^b$AS(^g^EpC$0TF4y56$ z(^vgI_8}P#>q;1Z67YxZowX5fa@2W+OI-B|4hq$nuNh)~;7 z#couMA(5I_{a95Ao9@9h_(RR5qba*pzJ0gQsmMpc@|1~^p?=?rn>TZR{1uFER^F9v zL$*Xy$a#BA`|^oWNWoPMcDT@S2Q*XX(;uO?7nr~DBHlX?`3__@9 zMhJJkm?hy)8N5TK@7yY04Th{pab)VJYUuSM)8po*N8)qF;tj~!?@&H9~ct+Qk z|2mx3x!b7csuU_|y#U9tIHpl$XiN9%zg`i zy4cE=dg;69#>wN|9lMPJkRs%^(*WaLNeoer0C?U8qNG|VEPt&VMX^zK$!}SS;P{I$ zrKc@VilmjZj&D44Il`?4hnz&!Mh4jO9VnvjwUPB}*~ZwNh`J9F8{21sZu5i(y}mY= zvdEhG>A*H3L%TJt0#cz234OVZT0I$C|U}z8}v6svT zDCBC3(QZ+&QBAUkh3drAwimA>Sr5%==Wy0Ahqsps?2 zP1KXX_bdij81gbiRb!af58b}wavo!Q9Uf3O<@=RaL3qvd-VaidromXvv4$)NlPH-K zRJwyB1S5zjTXDQg2LubiSDmy7N1a((pP>ctV(QYy;Q0Vxq~pi)^z&}nu68hzPnI)- zw-5XwNVBiT#6N|hjQyaL{s36H?-b)fh7_=1DeO@8%y%k&BT}J@Dy($o=>}&J3}5`3 zFUacuFPdZbKQfAZ6UGKZb~<1NcYwI+akz+6rxP)8^kv7I<%)-@^oXK|iJ=iNRibaN?-y}hZQkF0jNUw>S? z^9w;Ks{Lm%8+?VVwMyWHk_%W)fciO3TaKu3NaWZh#1BYr0Bd>-nY!8i(2L$JWb?DT1TmUzzL6Lj4XEQ8B0+d9HRxq2;syfW$H&# z9`UZo3o0W=xM(VPoT4gazz+{n>5^40E>*)_lG3eZJ~^A6DH+kv$Eep;8JN`ytS|fW z`?>9h5NdRO=ICSS!*`&(kaACjGtq~K=MwbP?jlfR)1Y+_aBI3%m{%Jcr)NoXmNjLw z&bQqc3KObVkzKWydX4s4SCv+j)RVbmyRrLyzY`wtn(+OSctVgO>An46crzlD>mE&i zmz=$3giXALOf<`{UP)LV?r~FK__e*u)eW_$uF?K<=1%yj;6~2UI93T0eh+uk3dko5 z5l5i64%eEm$D&66+ZgWNCH#7G{1L=8Tzij?ZY1-^QFdA1<`bYg3sR9!)j$MnIEVXPt1`grXsAxi6|bvdqx#E#wWnR66WAU zhpF<1>@gIPpS0WcwIZZ?!u4m?$zK7>Q|E`PcKx2yHPnq*;Ej$3}#C1zC7mvD| zl5!)>&yK$Ji0PfpRDVcVC)Ao^YWCp{_dq&`ZS`J3HSCoJSz#t=&W{o_rp42Vxy$W7 zi5o9(STx%I_#C0CRGZ3WvjQ{=3c%jgYbBjLpjhs?N)-^LP;jb4$JTV)^<~kO4>Xvxmq#1ip zsjTJM5b8cdmaCz>(Kh=9!dh=Ju6Ac?&bo1JaoENAoS4jHHSZ|znu#V`n?@PaZ@47k zrD!>_!2a11fgUtH*;!oHt)zmqDx7}tx2Z`abDK|sr?wMWL82S+_Lm!MTWH^Wrcd3qfFyvp)`;N@|t#RA;*APAE=EZB*9&!+B zbPd87W?o@AQX_T==8O}pqrxml3zjQANwr(Vg5Ji=zoMb-w8I)p>*=8g>PN37h~AC7 z8M{nfoo!)@=Nv75Wl%DB5QDjh^pEk5nYMXKTh`e-m)LgHpSp zUN=$2F&8WHZejAbi5mT6&CcKD?hB4W#^k3xUp0$$UC_g$JIp zqzB>1yyza+>WjPi3=hu+-WcjP8hN^7YS`#b-Jm6MXs}oY`ggMcH3G8^E#`SdOJwj{ z2#?ruNi5H*B+{Cbl{^GCsE@AFUT0gsv`0>^J)J{sDD3)g#-2vhh-qru}Ny)!!Wf zCMY0gXpk(V+~uS7n7ui2XdklM(J|x%BqU_$$@1g0jF^c0axrD!%mqtrV>B*%>_pG= z*Z%vGX0-2L;Q9Wwj^RCc`^}jIomcN8E3O+4Y7S6_I-jJU@f^6JXw}kOs>kOL{c|T- zMf20eU-@l(E4L{1wCwclq5!pEi`TS_95_h9%?O+xNtsntRgRP(M-kMkES~ah*#t-` z792d3+he_+e{@7{bK|+tY2oW%Pc8HEzd(CFMHyr3$|?^z_P6*7Prt=|e7f*wYhFx< zbna|cNoJ`)j4Z8(pg#JDvR`PVxZrs{r%v`MkKY=J?r2>lNcv;LN7byO7c3T=#o_Ya9cGyeahVV~;Nl zp;Mc?)HQecVjl&R&HQ&rN>m@vZ^R$3IdsPWZh0WX^Q1TR0C=w!hi?5ChPF{Cz*3Z+ z(c?{l0!ix;cx{vGLAB+eP?q^weubW^J7=aA{#HD-3o68`-R`LOyUeM%L_6uTTz+1d znt3%`<|kM8^k)9HoA}1$h4!~*Ps&kH&s(+jpG4?{3$Md6$jXdCoeo7b32=>vc33$e z#oo?I=%0t6k6ED{uTb*`_G_uS`pqkl`jikIrv5L4h(@ELi>!qHLl@FLHth1&=&zHR z^JAAr_Pu?|wSAOp`zvt zpD$P9L4d8D3LN{zq?)Rdrm*NRQ`tJHx4RXSXG~2fNKn3OB;Lbg%A5G?eD2iAjI)V< z1I1s)q#Y1>buvJLccj<3?=7xG`;?)?o11fGhn)h6(Ad{s{U6=$Mc&zDlj*lf4{m>E zrUpVMq`s1bbUvqCCLXRCLg7P6lw!=UA9bbpt2Fw#a`b*>u9bA<2lG=Gb5wn+Z(R#{ zL^BcKdD5?7?hDprzhav9q$+C>*SeIzdC_8jRE+MMe%{_ezwx9?`HQQU1`9dDnN=skxtr81{nY0We<|jT+~Ar zxh3g6O_uBwD4_U%DRUOxIKB_lqw}I6)=&j}^TRTffeEut2yIzAjSLH19_>1Pe!ZF>^ z*S?9&{{S~TPyrD@2!>cHoD>Co-R7-mqW_n{X8JPi&F3i&4ui#BX7V+@Jv)xEG^v05 z&&=QI-pAT&8$M!EQTwIH_u5;(zb!moHL-AxM%LxO6VrRGrC7~#A0@-9TIG02SBiVb zylX{9n^qPAb=lCG0okKiiBi{&xVU^I2_ja&2-1be=QU+AnvC(&i9V+uiV#1lxT~OT zZKs#FqFe(gxFg+(Z|O>G9I0V$t0`>w#|T>%BKeY+blJ}%_>&-yiasarC%L>DT-h_G z$Dr+K)ISyik2veGSuK~7Es0{=o0U?n4M~OP1Mrrw^V3ee5u& zD9hhO2}`QI1@gL!Tb_XL_Be9}mno2Fjj|Ggq~2`3+G>2>fMX~>3=rq!eu^Xt*f*^u zb$N@x3q1LT95iuX=McYb%=|RN!`q%+jnjA&*MeW{pMZ4I5`x3+W7ha(=t^rEw;enL-0weL@Z z(Ju~mm9h8N(@l9)-zAW)-da+9#-46yuKE{#j+g&?q2-%sY5DuWrt=L-9;>_)Q6;ZG z_dlg$+<4pD54U@oJ*O^3Et%KIohPdv{X(y~)%uH@mpA2B-S+mjO4awq9QyGLB%5$4 zmEck*^{lt9&OW%~zlC?YF!g~;&VIt+1>|}?z^lgzgrbEKObii z!{w-7x-74mo%v|!-=)Ro??L=TKRAU-xP3qU3VZP5*?Feu$ z8dG*zp^qYt4-(_>*!mHPoNT>sJ|rC=4PChzvXzx~_+Fpsr_=9?IR{C6YL0I|*ACkW zZud70TdQ2XoS%IEF6T+{5lO=S4wv5xHl6ln;N!^DNS-9(!qiSi5;!BsLBuR`;5iyG z%4|AziV3GGi%(I!x)*Aff}*LPKi4u#%lYo+>1oTjUY#+WV~(Duk}VodvQuYj&wj-O zJs$&wDLs381TljC`Q|bWjl`yzR-t=sf9bc!<9;3HTKE3Kd{xK7D zIJwmhwq(mtrohL6Xp%?*3y3K9SFN#GF2e zMhASz{m)zo=j!4#5Kdj2?`1Tg8g8BT)?Y5Z%7!|djVLNeBfeCJG?|j0ddR;H68A$x z%&uX?&>bIY0iXr_&QPOBuhbn7UeM->*5i1jLSsX+1?A7UrY70tj&E%4BzODMRlf4} zesg)HaqG+PCdd^m&siYol~&0*0@i$AM+@^Bbf0Z`zE|bUBZRF?_7=Ac3M#R^b{anU z;5Iw5ax{gvJV+>2m9G6K?Av8we5v12kRq1%dC3p*yQK(Lhc4yLKX}|O#!`TQie5su z%$rHA&sEnHZ&UUsCb_S95cZnqGz85EJHZ(8m+kYdNs-n2GeJRvo`lWC|CSLB@FU%` z)&fnTI(K*Ez05kBc6!0e_OL=mLaa5*hgf-oapMU_ zN01nPso`H7IDE9b`D&{k=q$9;?gth-&_*hPb@6Fr)f<8Ve zb+#3BK(?#8-`Iscf6^R$9br^&B&MaN895+_y4JX z0S20EMZ+Dlyi0~sms(fD`)0|Z!JI79WD9wz)OWJL(hzqD=85+nL!z*Kn#g03w~}S| zJ;!r#p_TU~VW!nH6^cF7eSOq|L%J?YoZ3~q92xNKE#v9O!^D^NkY>muq?BMN`^cMV z6mh$xN{ohvdIS4h(Ui$-vabtJj;U#B^y}H0T5jc`rw&q8R-r8#^)?Uf2FSzTGXuK( z0alTeOHzW|Z8u)YwJVOiM$pf{+Ex!w5i)*g!Jl1Ku@ODB(kIlaQStPC#>HDR%octc z>&vhg-0+CXUM<`e&G^r!>rY3SG5!jaeWRqOsgGm+TIW%u5xsSB$#<#R-7<=LxyXgS zrOrI|$$T5LxR24s&gFHM1PqhnER5-bNUynBc_@bR$r^CjZkk}F{n1yG>V}>}cv6MT*RIZ-@Z@K-CNEfATcAdF# z4=xjY!5AD|@V&Cna##H4&fT;~M(#KA1$s2sXzM{Tp2pX(X1*?}PMrAZc>%o2Z#x8E zu+gA!`jAtff#_!aAMwvQ2NgF;=>=hi{~d zjQqKlC(l8ed`T6o7XDLPf6d*!#j*7-C|l54cnOO&1Yek*XnMift*vE9U1>WzBRuZ$ z()@OT)iVC{g+oySOQxO*K!6V*v#fB4bKX+XD!NmS5u$??td#V?{Q*lBlwDkO1lDUwiHA=g($mOzLF zq5Ll@6y;!IEhCj$vkl1SuX=i}oH+TyK=;H(gw79rX79l{SfV7MmgOx?QiUG*_UV=DUAu(oza+ z{bHFvAU?Da=kaPZ@=}1(l0KX<$yq-pPH{r73xsR9R@RgU`;XH1abQF9RzJvlF)fsU zC47u(m+>zqHi9>=Py-FT(f(E2Pc~C<^|h`iL$pQG^KVwEzxY|_F;k!WrtxWkOyTxp z%WjqHu{UXtU|q$#x+9SWbuv8|PJF$R({dct^a&Fyj>n?C!RON#x!P`D^C~l@UGfqh ziAONQydZy~@sNi_Gx~hw_{_p_84WXqHlK+=Xzi*ho)tDz28KAi$hTQIeS7u~Wz=S* ziM&5O#MiC1>s&bqukIjFa+Thu<=uqKVd||nDQ0jY&`Jd@v-_4Z9rSku;1#qzA z6VON{I-31z#IB=3ivY27u`q5#n5Kv&>Vj#}JL0r>=tTKU#D`=2@SN>YQ#;vF@}1`~ z1%78>Zgx{K_nnq}rSz7b(Z$V#Q&k7N7A>%v$96Pu$WYZ>#$G32qfe>ERPPP1c*;+e z5Go_4y1u=mJXUZmP5VeGZ0XY<)axL=Hhz(ZBwPOuXi9k>{nWbe3qSFv?>SJV08Bfy z#G@UiM7buLE<(o94Mt#(%wJy0S9J zaSwx8wbcQmA%A=$;&K{MhI2Ko1Qo98jw(F{pQ>g1ae&)GK{GX$HRi8;@u7d^+h7rT zTGQF;U%Xfp^TnwR72iqu^VZQ4CH{rHBUUJyCE1~)Oa}K0ry41{925Qf0z0ubr`qss zzILD;NPyItgS>AZj_Au8G#Vo!ZIVpmJ_->%xVdPD@RfrzJ_Db<5>gDEK7Vdm0p=(g zYocRdi@I77SMj_Tw*^>6-R#8oc^8;3sxmsryX*dK7aFrn2;&~lUWslijlBBM(HK<| z;3CoUR7!fZ`kqB@WW|R|WJPehj6~;XIF=pF=_}K2^ng`nM=kY}U`xE)?`IG{ns)F8 zmXm!Qn{^Gi!dsaXQLlM&q znw;I(catG%!y2Q`yBQ@*H3}<=2|d-hBP|v5z|Mk4oKx25$3ei z?a$9+wa)WcIv~Ga!cL6j^Xe+6!WvP(_7%DY_M`FyVz0}knUE4(kC>Gb@Jo9`#hH(z zV_)WlTqz$sTxR%lt7a);=}f2g74;9)2odIUrt~GCwRWpan_ku>3Po_x&5H1U-V4^^ zVIkpe{xh^E%S!yV+_n=Dc6$|9mohirp%eL!p9fjcl8L1LEcrE;&OvzN>km-;IDi;; zrd|=*=cK+gOx|0(x8ynktLBl@bw@V3OWgKaZ3!fgahFuU=N4Jj!Ou^o)*46b_(5o_H3kc%Z}~rvJO(` z=#$+#tw=6>EvqI%Z+keS{H&A4b_EAs!n%aezDM>N9JP^slBWml;)vj5_kZ{)=$Y6Eowh6VykEevC)y4 zwu!lNK$=ZhzSxS*R=BMv1MkTF`4WN3V!CO<(guM`)3Z|V;{@YQ6p$8@`5mNWZGC&B?p!Iu-aX} zRvzNIbF(6$0t0E5>G8p5*zZC2cZ5|9Ur1~p#xlLDuQ{H&E2hfFb4V1>(~yB_jxDc) zP}xh9$vkE>9+mnTlalD2H%n1uUFFa_^~KPb4z;;^>G3+NOSP=WHJ%*6f|qQyrt6v* zYR`ZB$urbj3=bQk0XslO*ADU%pEPH^Ul}<%C_3$;4t@>s*85!k?9NV;Jk!)avaf*G zh67u`e~x2+QtEQX`)zJC)v!t9)Zr`+3&WJ;<6Db^jvP=TwlZv{zgrQJG1fL_<53$l z)A{rvGt9q)#wx#3Mtwnct8WgD((KNd`u1Om^{#^3r>V=Iqirk!4+R~Rm^& z{erM|jRzLbqdVo86(8Dn(D&0n;YJg#kL$m`-~PkT7T5+s8X*+L&%hH*usWO$`j?%M z_3NU54Uib&S54m_Tc;5nq$Hr~^)JGo$+^uDbLB;QtE!NY1Zg3qcxmRPx$n$7$(>W# z{6oip5L031ys|oUM*c9R`isF;WiN3fqb-7rGf&y&Y_2fd{uR;mJxTO`=xC_Bw)%Q)l zCAD{)S}uJ|$2<7}^ZmcZA!382ycY*DHiO-GPsDn4L2pw3s$c}*eS0IBKl$rk$&!RY zSWY8&=T35<)v0=*3V-sS5oy}^%yW&;3OTZ1pBUF_sX+XwOR*(>(Sj&o4Pq}$|8K8i z=?=OQgV6cB+fO}(OH|>x3!IoHyVQ+*OuOmXS$@W8D*R2|eLL`|Pp7Y6Ar{w1 zp8Ss=zDBiqSe3SR?xo4cU*G1^yU2FndEco$y~*_vRcj!`mU>0a3(l7>N`2 zptySiF^J{E(3a;r=pwKOSdywxsQ{afN9!=lqD>x`Xl$4F%0`E?y3%0Wj8RI5nh9JmB+j zYHI3AVIF;H`qy7k^1&#XmpVrfe3)fl78iYM+wW6i!ra~o50Yy@)d4ORY1{huQjYIX zaU3Hz^l~dtevPnZok@#_Bx5Y>gS{N$v*n z4Wsh|ILQwUY1nay`P8QY6e)@-?Qa%>*kd#u8w6{MPBaUL8S?ohBYmD@{qo96;axb_ zL!LsoFa3dbS(bG@ToAfaNM+5B=bg&?mo@vD8#79C2-aX0tD)9qjxI_s)78YqfA5NHfqC6DbA@4%^;>)5R93S7?GeRsM%79RS z!YNAR3;oS8^zWC7G7O#57+I1;hH8RUvi5s67$Y0U#SJ+4+yN4cj@)kau>OBO{1Ta( zav2=zHmI5BEvwc4(EORqLFNZ5THV`P*BDXFa-?Pmw9qa>KiAGY3!0|@3*atH6(BCZ zdh1X+CR0P!QG~F$DYwA$CtEvUqMJR$X``Z#43JIV2L5IV@%xBa^s|%Tk*(u!tq@|; zb9hS;F}cbs40#x281g$v+3Sa1obh-cwswT+a+6uE(z6)7y6k=wxGtH{m3H_)%#|<< z<+@ug7@zWB$G0I$*GoR*b_^4NCO#r)$!^XO-PY+O?R2aPEm9;N8!Q(62MR}CKzNA< z77~nPt?!w^Pw_~FOR(T2_`ufFPquI+AnZqJ z0o_!!ZF7EN?(GXW&6If?jv~8Vhhdw~v^Q@Zw2H11o9qt5Lh)7zX&Rbav%+H9SzX(x_w=P7tu?t@JBQ3dx_QaX$EM(N4FSuLl$Z(3RJZ zI=R_A4HJ)p-OFp0AX`ZJev(~YO981aS zaOyuX`mVKVjM6tY8s=^r=>Il$ao|52CAN&Q)MdZrkk+xhhz(J?wulei1eC6tvjah* z9AEXbttA)ht@9ij=X3Ldqve4e`0i*1*6Eh^wHIX451rioZ+Rb$I#=0?@imf8RfHpl zRNvgDaA&$b%fg+Uvc}?H(w@1=!`V@$ zeOqcWHzG`)lbNKz0YV6;l8PJrP+<{LKZ65u&|g|fZ#>Ru45ZkU=|zWlZ8>|K zfp}S70-IgIZ%&$lUlm0Qg?K_dXbVg3`OhI_z8*0`K^s}qC*~i42^WK?3*1ESa9WW4 zdN}3SmKsv`7y4bB#?pa91WwL%Y1x!3{L9O%A0X`0Y4_4}apc8M!mel8+lseZgEh9( zOVZwYq#{I=l#>2ElQ9P*O)``rtcdrR1*P@sQ|%erF5Bo*Nk-GV4e@L$G%OYhM)La1)BJW zMJ~iNWgd#uxc2O<@icm}+|h{k+4xOKoW_XyHTc*q7^apSR)95u4{QN%gx@&iL1W7{ z2-nFG)cJPfE=#HZIWuYb&!~6k2j4OcRwiHRcd{^$5vE<-RuUzmm7&tXsZY<9&JsW0 zL|FjVm8HIb0gLw|`!;#xt8Ss${tEvnF;+Zb_SlYHh)BA=o z**^ET<%3Q{OphqPMsmkIdr#A&4xi|bv(!-j6+;y^$~MM#{q%ZfFi;4L{vJASw07!u zNCu-bLORpfX~9WTQh(xJ-ur2fTkP8nL;KJcLR_1;ik6)Ei=PNbCO|U+)zrMeCJrz( zJS~vWdR$?IQ630~8=eT~`W$`0o^3^D;0lGirmvqb(#o zZj+ko$jWZOf%)uY`qf)pM2Kcg*tlvWzI@ZA`>)TT5e@-ceo8Jcj`fyVLnHhc9quG& zGRD)+x1sa!Kxz$xDCJ39&wB+jrVlPS+>YK`d~xprm|aul!WVC*%K}r-<@zHgrnRT9 z;!ro|$)3e-`PGQaVanmj>uSAznYd9u4HUw}i-Hx9Z2)m-ggyMh`c-pt{5I99d7pYk z{l1I!kQ6{D(>CSUw5!f8e!!E#jj?xEp+kBPu{WW`W__&}(|R<^`u^l&_{fH)Rd z?WnqcAV+fhlh_S?R*`!x5h!JL#PClycW%f6C<=jesk80iHb`!U=fa#t&&8C>IJIK* zOZ;S5dP^zqckkyV7_b_1nB%^!O$TVrmoD?d@nkg~7^X?mv7qNicZK=Q-HWZGANJV6 zwjscH?OY1miQ-wr{sTnCkD1vScB5$`2MHk~G!k1O7yu4{d=I1CkKD_3U8E*dAdHHp zX}2FSLWrS8Rz7BM>DaPKkst*0Hlgzp@jA!rsknVC9HC>keevB}l6f+_xs9fICBsr!NaQ%L!>Vjp9nFN@mX1?mA&6K4?lpEBU(HM{!A|@E3q<11t}tk zZUAo;ks?3fZa-nf?2bh*E8!d~^l@wAi_G!=w#mxO;SK8TsEr@rvB16x0>U(RB+)G8 z!J8U81H%uXG+p%0unX%uD5Y^?X-z4{u+>o;4k92GZPr;DEHc`JY!{FJJ#0e0m06+q z30h>0-#P+8YE$w(cDNu2&XY{tD@;o9XQd~}jreDLx!riU0da@l-_~H6vEj{l^J+@| z9r+teX3lPSXna^>H;zkrCofM9qU_|!n?Y@TNKVpx+eGtkrdZF=Ni`VbrQr?QAesSO zMB`og1u}{)*XkH5>|TADm(%0@0kO333wZe$9aCNzYkF50o2r$zyP1*6TpBcqZ093g z+N_9A(a;1Y+DS+n50Ng3coa@L{x5kOc1&ieXXq|ttvyppFIW!D5NXPC$}Is`ei}8W!sq~92%0}1?X7h_yUcpD zj>dv68N2xGDm02a~?)t+-~RaB7|)XTRws{+X4sk z#&C|n&Du?}`TIP$UpZ$!Y{9qw8q57{&%2n6}M+-E!4 zN$-B>KKH42$GvFRo=HAJdldK^9R$fDw2~k>TGoJ~5ZcKKZDk4{_lSXBS#l}^JdJ;( zdfST_jF=1CT-z&tLH1p^(Bl9!cN=vgbsGW&EmT+)pO+n~SQr8DAE-SH|3SgOW%Adu zHWK@Ey*e z-O_~l%=Ow(9JKio5s2yXV0~rPUI#X%?PO=smZ`u$=LnDMYXvBz~ z{+fCi+=T4-6W(`$y%sy_qx-8Mq3Jp~X zPW!t*Elow}U@Cw7<0df_oms<_=v@16MPsK`HNt?A_r5ksg!PlclblZ^{ohh=urzNqNy*Pvs8?y;8GzF zV&~n&lPNkhp{}?+V94!nXme^S5p?J2(B}Nkuyw56o#OpNcJFWb5BKSh<5}9un(a0@ zllfGAqK>ukZ$N*+t*J$bwg^q?U*l=Y08{jL@03Kqw2RwRoHQ(3Q46UhL;eSCw~H|r zEhV4aKh7_s{T5x;x{l;%pfrSt59TjL;o(c+wm^}rFOPnl=k3=#Ie${tQ;o%@GxC4GVzD}w3xMU+E|Fsy`#-0}NL^dDeQJ)7r1TCQp#gfK;;k#wA-wp%xeMWjpXxgeht~Dp zNX`KTXw;ou?G{Ll?2WekF6~e9Q2$0|kCb1yZW1oIq#;7zl#(L8Yqh8Cd_F?ufEJ}j z!j&Uphp1g1FT-;WF{d(D2+8#+mnd6;eu~AiJ6V{pp7R=fM4LW+GHzkGA-R!s;m#Ki-H<2YgwRFH|L9A(F!e zIk>Kb9Trl|j4O5kJ8-kxfzTvdP^uP!>N!Ijtv-_XXD2!lOi4pbJ95r!*!yL&$p(3` zqoK-yJh9@u(wYo5cd3okCL$*ishwJbXHC6pO zAoBx`kmhqB)TsbjSpzRv<$6n-7psDS4`vQVKwah>aAl!D>GTs`WfX1rcoXpte%0n^ z=^FV1^o-wYuS%YFJ^?nliVbC*CFjqE)vntx2ob_I>*N%c{vwl582{-Xv6J^P*Fqzz zKFn^Y4-&Yx{|h7h8@@uMDBKdF?Pm&?{uAi;uy%D&2-}EesuVckjAsWQmd%ex4;`i? z$9$f5sY8Jw-lBq~Tks`O$R+L7=8iK|XN(}l@Ulv*P*R(5mBZ1N2N1t_4T=AQQ!CSf z-a62I=8K~ayi3+I8)izMVU^KsB8f+7PW3B^r)Zmug@v#Ew7?x%6bNRPs`BO3_G};( zrca|r8gQ1tD+C?Ed4MVk%Evqu;giTiWZWwEC$Vkmz8LL6Hbu$Q(v>vM(mM#srpA+$ zhs1W6OKpPDfv!T3FnqQbrhpF=yGV%l__CwHH*zXwi51Q|EBh~*j}03zUH-D%SmV#~ zSsuEG6W@7*W0fII7pC96iB`|r>KcRnu>NbT*wz7X3T1wst^le5FfL$k(gN4_>gSF< z62aFrXttgk!~m=w+Tv9ZQtMQGRo#uA&!?4XZh!R96wXo|ZXK(u=X!XR-x7`q_ZZOF zHwnjycF@!p=*#e*IL>8J;bnL7yV9BS-?`#*cLTrYu!Q~}ZAv48w=N6N&$sWqY8FCjUqt~Tu{0IlszcZ&n zTM|?RX?oX(Oti@8fuOz>BVJ0kaE=s)j*IBNKd$oxrSUt&tJepstnUep?Fd=C;u1gx z8WArO{*$#mi~RgmA_^KL@s^%FHr{l=``%fXGjYxxke0k0?uB8U7gU?IpYgi!^<7c% zOmXLMY5&(#?!ExTolhN`p0gR00K7r8l-`|gRnr09f$a)4E7lFr}DvRR1RWb zKj2^)Tm**O_*8kCiavMcUJ}r7=j8iWgVY$HIgGwd{`+g`*AmNRdu?ZuGcBqD^-h&~ z>>S+zN75sSa?8%U&G!uE3={5qA$pEFuY3Mj>ZHB;4k-KKJ79pp39wW^%z$Wn3?&=L z>@E7$RO@AaqOpfGrwNSZNi~jYhJ4$}6F^=C90j-cMA{Bopxau8H}8YfEEu{i5;<)X zQU+^8;E8Y1p(2{{G#tz6b8Pw=nV&jU*;#QX*V1~vnlNr0p-rWcZmFdY~u*VvR&^yRy0! zb{Y2Z)b)Q*Cxx`8E5S(xhB)e2t1x<x##uEwqoe$#P_Y|EqiZ zKL(r4(e&BPBC`dnGno+_g`?F$hrQl5eIqc!(?`K`Dd5by)*7G!Ml_K>0LgLa>-&fG zD(E_);M@j~rmvq|!j7D65zjt66~{RHC_aX74=CK=|M3zYu|$l+_5>E*t-Bi;{wvIY zY*J^+kpPqoISe2zKl!N>D34X*30=bhXTI4qIu1%(sO0&<>FK|f)!#9y|8Y>AZ5)Dq zcuBrpuIki}DQ9r=kKfM|GUr!z(;o4IqCWhNi+t)A_kNAKw2`-(EH#*!%K$*?>U*eC z)23zRNaQK-+F;qIMf=Mjq4s)|$S8{6g?TQZ)BQ6W05J_j*8uZ&&+LUQ1zmfQ7ge<6 z^lQ#&@aIpoP9VnK_$5^`BL_LN!j0la57{u!c0yVYFq^Jqs!?*dBWFUC!y~sz;l6VSffIjQ*4T-(dq{r-4cZ&YokR0Ajdq65?n~Fdueuv zYC!o6nIC~%P{c&bpgsh^YlExv`crB znG1$K&~2dhQb2`gb?%A=e%q*!;5$y~8c)r;hwA?o{b-M>*csgRC&~|+G=w{R0Wuem zXg)-fd!N4EyJ9}L9fJrl-(b{3*bT%JTcHBpj!D94F-CFZhfB{`1It=dYcCutztB#O zx^`W!)5Y(I}z-~tVo%uQ*PHQV|<`t@7>%hDuzmxrk^>DZ@Xwbg;;ltH9 zenbx&%vX|#N2EEXGcEi>ob&a|-mB}ZsorW`bminYmRf|f^TWK~85p(7{+YlLe#lV% zzI3C8AqpLi^X@Na5##oP!Cx=-;8Q}Yk1sClaR%*T>Zj<@JENN+%MuUu_akYL6ZB4= zT2W(4)m-gV?Q8I+sOAXtoRe-of~c@I*sr=`&>v>4z!H@ww8tNr;J3I9%7lGE3AcVE zugmV=sIGq{cxCi^>BC@_FIe=X+`?Y^Tj9Bh5guxc8fH}qoYjwv3=a>lfkCFfJ+wua zD`BD*sgFHji!JZoPjnRD94jKGaAi$kcpv)wjLYCl8~~c#QFb@kBS42B_jFbe5~Y+V z_{zPykntkcOy98G!uRtIiYfGiLTs#$4Zgn3%FHkfQj@O|Nny)`h!xSiF z#3E5_I^m-sjp6TT{tvW@@o)Cff>f6!xtV&Mrx2h#L zn0hEB1gp%~EN`*=IuQM1(y`XnsW>yEO1`g2`+;UGsk9*E8&=f9n>-g$PxJ!=`&k{=Z4-_bY)|n8e=oC z;3-&+-WREa>F&G>iTybs%5aKvRMEnG6{Qs84>pY9>r*k#lI0!;AMwuH&<_Ix=x3|R17`efjmB6! z-(34HNFuh1EuL`Olo&m?mYQwC9yD{seZC*tt^bN83@U#KX0r8o08r0@e2IqQ=c-?A zXJc9c7IkFVK;KiP5IWHjf^_%{zmTZLH(+&MYcUN5-IN(Zn3eg9?J0C1hM5MQ8{bPO z>YQfP)pSAqLUu(!BI44oBv@U+x2rAxxNwRPGqntj!)zP%{2G$X`95rZDO%##qUTr~ z4w;7^=|NPB!3%wxhv(|d9u@!GZBpSO#-R-Ww3Vg|p-0eTfGNVze-^d)4+n!(^Ol&8 z5O9>L$@xd(k`O)sVGah^5vCGWd2rT~P`8r^w?unq2OUD81a$^omTGH?evEy^XJbZgDZ25Vcplw)_35fM znIj~JWJMl=KfLZc5`W}2Cl|~3+uhA7j;2hq%U5%X)WMsI34hGZfYW|q)-Bggt?R!|{wW)l}xN*zR-F9G}Jqmyb*bRL5 zG|yFP2u%FlU6?(|=2SG9zd&ISyy?disLDfzfCXCAe?M+Iul#sK!!BS52?1h~Z*`g5 z@E&CbcYi3pn!DF!I?8_jUIUHH?GYp+0!)kBv%82?S+E-^O(T-O>m=X`a&%DG^&dba z%REY03QpFS1^j0IM%PHR!yA_3sFejRaHq~iV7r!MUSWW(?3JJ19?gey{W|=?9LG@F z0VPPce@yuLk9j*=dL1WvIo^IEI&=72<+`SO{?g$wTH8t;#E=4k+r$=+ZHxopu3N#@ zw}EarHah%ZbuAN!ifCNRn?Z$2HG=7in7D`8e|RYK{h@NvaGn*5xLCf7Y%QD#$#s+cvt5 zB3?3c>s|BKBO5PD@<`2Q=03n4A_*z&h~|`re0+ZE-0?*|Sn#ews1CXQaueZ$20T>aL#suMYR^I(vC2 zQLa_!@ae*u<(`enYY90Giq3FKyY@B;x6izZ4A`QUQCYj*y9t0iM?6^EUORfhL(cWa zWKQb#W%AdnQLY){mo;(gHEPU1_1)SIV|=ktLPoL7wSO;U{NT&rW%V}HWiMuu2QS$< zI_!}W;1tceF_)A3wi}wvGl5f^BKyzrfK)(2Pu;bbANuNEB@Twnp-m z(aZD-B9I1dlDHk=nciD>R?*~6s_M^k1lTf*km*HAM(5^98xh7hL~-2I1K5RA7ce@O z2A$8xMgzJ_RiW}rx3bJbh14x7pMI2BG;3u)ZrdLloq|iH*|#9a91p{UyyK^o4#E_u zylKDI+)(UWAoch`xuOPHfGU7)G;h5RexBf^KYtUNfNj4{8Pr9NxMa>2N45dOopz`P z4nMnb8yZN3uGhWyjFg8c?1y5~fhkj4Psjyx9?PZ3A%@dF(j+8tlTRF6{IJrnE$Lut z?OslmA3HQvOp@AQMmdkmsQRxZVo}7n5SM^O`xJ7Lzx2yrW9X*Hf_^VMo**f82NFUvsGs)80?C{ zr82lTc0TVEnu2kD!Vy%0)(=7v?z{Tb%cmd4tZeiSRk;-l9wQQXuCM-k3SCcQaNmOM z!^bqg!nXySIM4o6Vx)b;Nq!}_37)%|b2ja{Gy+jXQrX_xMZGgVs}idrSe>9_xQ?T= zTT{dLVDw{hRUI}YZ?5kZ=2J0|;)K^plSlFag_t7cd&}`hq;y0JzcYKi=-JMMH1Gy5 zz4OLuy?Ucuoba)#IKWa#pV5>YgXxk89+4_}#+UL!Q1Z55)lVDLM<8&bqCXb#_<2&8 zF@hefKT?11+F9&f$xc7)U1)j3(}!7NCde5U#WOST$n%1|!)BJtmi&x;6*$+qoVZ-e zL*Vn!YUsO!u+0^5#*E7mFnqRHV{t$ZDw%1rgb>&_w`h#_VN1Fu=n?{sqd!BDYt-EX&Y%P6EFRmn?m3;T z%3JRFAAd%fBt;`S5dn#0#sOG;IY@LfD0MRq8p#UdRtb}Uzl*D8%#W)|C6GGY8Q_QU zZ^#JzjdJ&LL941b-%720EYz8~HnEC~LEhj1A&NvxYFH;>$QY17%N`xIq&G&$E28Ji zE%#FmB_$umFiF>QVV`c})1O(oRVCWV)geS`gFSNvOLYkG`IWQX43t(y+d*~-s|654 zhyo$fuAPfvFyf6U?BWXCpfOmgJ&Bt1UU*1VlCHH6zBy!QKcucnm&JBH0oa+lJScvP zx5X~Bta*!NRs1t+RLP==94zkTYF*Y5#t_$H^wx(jLC^g@9fTID#>?www#2P&R`JvG z`I&JF5l60&bh<&q`s&h@LnAF17$w%$1J`B;H4MF>E_?26v+OX9K{GL{N}6Ex`-cbv z8Fe%pIDOqnbIl1JkJAKJVOJ%?mB1&pm$iJi88i(iSchAX(Zpm*r|>d>xI`?b&lo1- zQ7jorKQAfD3t*iCdNyMUH_At|c*E|n5|(FiwwnN^6G{vU4;~{U2gj0#1QG?Jg@-Cb ztIv(MHs@ZLJvwZBERJ{K%9S8f2{ZbNnvsPMW|fK|k#t@rySJI2Q3s6)n`gyWU?e7( zXb`C1(ip=b&wUf2?4a<+V@;@zbxhi&i~55me9+|Ao!qV|nQ@30fOr_iTN~pjs|T~j z#n8tv8E)Q|ypTm_#oy?6fXJaktN?EsUnBQvP!QMe2Cn34|v{}9iZEwZz|6wJ&DCO zTYxVn1W1vKOb$?j+SjV5BpJgI7q>v!_kpQVv%!J!hF$fJL@re47%{YWW@V27qr~ho z>w_!}sy!eV$#4g=vF_=&4Y4LF;5_kBsXjrB@#}}42pqaQv-MN)XciF+ai&MlD8tOr zWCZxP6w+W0i3maijB&`z-BD77Z9xs$zbO=^*}otVh8DF!VT;D9sQA99BRn_Pajz|A zV3g$AE5fVu1WT4Lq2gw*nWX!!N$@(pF-QUPwIvq3E) z9(Vo9x|j(UY|+t#M)tvrJxo&ei%47VHd%(Kq7ea0mPAfQy@uj|(m{EZSNG%>ADXOM zxxdQd3bv(xpx>9J?=7T@^EztlYVY04xMZA8o*raRn0^OY(#TnIA#SO;88BKH6a62Cm2amo2!fMm<$zbrGTuFwh^?J75?O~e4 zMsHpQfju(BbtJ>{fy>sdP+z(60liub$0I?veOXd!fh%2!l^x@N1A+yF$Bo zq7A60-3#(z+?9iRd#8R+JT#}22YB*rlktVtZrT%^Xn{pm%%y|R#4rwODgQM*z)MO} zT@_?Fr#jhXVp!x~M}f~~I+nUyd~+f(`|OP~^m6lUo1WWN^_%|AKVMgve27^fH$En3o9|Mo{ z8Y?X2&ue4J*N8Rx?ul;mH%dhdsD0Z4trzY99S9ZGG1&B9ZI$h8Vk)SiesD_OmR%au zHhyCjRIlo^2rV5vO&YI3YhM7ngMLqjO=@4((J-4wpaKjKq>4D9U0vZjZZHQ=OC@po z$F$X1&P!%qribK`MW+lu-K&Xq{C9KZz~hsq`@DwiVH8W+hkO!Nj_8pg&KvssAuE|%-&gFw*{1{fDg1D zRq&!!%wVo;v5jo@aQ-FPbWmb^edMQmc^#J1mc_feDmhd~M)LrzEQD2b;r!Xf(wePC zG=wopdg?Z<6Zjy`Emfn##Kg@ZPcr;yrdYvEUMp_ra%2B$w5`6DQ!TUQX`r`+V6@F# zRouv9B?0$&p2?7}E4Q9{_Zt2@@$0Vs-NMGfx1*0{nj%+&+w*za_pgqYur4hxXo9iG zH)-IauN&v{JeCOl!FM~--SvQu#md^NgS<*9`t_rKp50A)4v`pSy48T7G*^&s-=UW? z(7pnxjVpI;-l@?+IqTdp%q4yRbS*540rwpUFB$Hm9{s8BAbP$PyLFN^dL%`Y zr$C&_MY7!yN?Kl}SM<|-DzYOYoiNnxpaXh}0a_{XLU@?ThXwIC`O}slf#(Ts{&QT& zC;PytZ;hNUf6{nDOFx1l3S{^%o=ll5=C89^%988O^)@M*>h!J_RJ0t@`w$%9W&X{H z@-C^D<~FaUzxhsV4blCOU5Vt9368ebhq29Ue`#bo^1BmI0_up;+-*L68=CMWiwfwt zc^AxMpwC2=uMwZ4__OAZ!3$M&5Q%Joeq)@l&iBLt(aS=vqkBnB2bY19^mAuKpaP(3 zX%7~V(2Sc3Fvaa5_m*#%IbEho{@u1}N)==(4l9U(->2VoJ$zU5_7JG7>32oT!N`OR z#Jss_K4H6v0qZ4Pyq4augBnnc)(u~@jIm4ReFf%5xgiGm_qKFV2z>9Cix|*;B z#NH=F7il;EsSF(!gHrH&62ONwo$dQY()bnU-DFPXL20Eq${T^58ma3_)snsP^mT%*B_=K3ZV8(s9wK&$`H=JW< zF>51}Wq>E=9`|s$`@kB2*ysOVFXt}`NTa*xSfjtFVN!s~Dg%0VYC4&La_O(Nd$z&| z^ajwsh~_2MYW#_RsR882NzBZ6KF9oho=X;zTl$)Xu^F6896vJ;E%BYp1U+SELLz}V z_ZtBw7cvt+tX0~{WKqiLc-POXRf>$O1_}ko9p1^iuN>jFKpcku+qqJ#3VEiUIwok( z+mxY`htHE0zW#viru92)H0K9!4M)>22m`K$s1!r2D!PaY6QBDQG~fe`;y2ZS>u-lA z17<-{W8-B#2n_Vmy;a_9e(xO7rZBKX2RCp_=^vGWAi%z9SGT>@^Nrc z_p--=*?nssHO8M*QM4cN)}%P{0TeHK1Ga>$N}yP{uQ+WcJqQBXvO0dD+7Bc3ukq`2 z{G$jE)$yFk&0|rP=Zwt81_hbyZmqD92976nIfmD*4>tGO_V)t z_^sE7vvQ!sAS&d=2ItFECWL~B$AFCO2A~C9Nb7qzl`j%;{zm+9TP_;P%}@J`9Uu7c zXG?`3p!bfB0mB${YH2_Z#nz=iYX&Q3i>DWEfHN3jptQteGrg+uKCAA|P|Pf3gYg4@ z@gw&z?C4_^v??gq5&%)=PZsN2#M?)0*9!!T3{6fO&MRLfPPIWwn(&r`JvUHZ<3t}( zs2pnF(xJ$Gk#0a8JBtT^VqPjtF#qG(9GxZ0moX=No3HazmSKnO(89Zj;LR(iKslBf zOG3p_9kkd*9jAgxN%mSieplP!aut`xw3Mlf%B!Lk{^mLmKt!vZ48|`2@NNI%uoY1M z4QCSQvpld$!GaJ!)Ap8s$C`)+7uN)UKYQT#Z2l+uHlF$0pfp+V;BUdS_t4nZ1Od7l zQ#b#NPQ_kjtCp?OS(27ai zEbO8c~!(dC34~LysX`-R++| zTrXB+R+QE%I1Bx``m-a>WY-m5J%D2zc?|fs@H$~9lPm=k|47*Y+Md-4ar8cvb0P*5K(niV=T_p& z%Gv}4+lBqVfX_=o4_g#$d0^uE>`Zi*jO;jo5z%8ui!Wb?(x!7e;)eoCq2*d8?u2=< zJt#!3)>UjDxCfU53e!uPGJDh|LmgAX7kULSCDjk61n@?Q6PO<;_1qXM4As@r=Gu~J z*)-R$5(zZkCFy?4;q-kU^AvgK-FAweWgM{FcdRVA;0c=tM?TPAay~`*S~aJ`-?YAp z{hbKXRSO_15%B2hQP9lNgQ50%APNW`+2WT{4s0qrHx2u+r}O@BSr?t++&ua?0RYBC z*^Bu2NJ)~t!{3|yAY+BEkmI7QI4=e|`)e;Kavylei@*q=6DSx;SJ%xt!0=a*rtED( z&~#^vt3N6L|A?x0*X~IQGp^BbT-G*bhs`O+P#}R-hyIYpJIUZVR%Kw`Y@Wu&D zMAOwI{Gi%9y~EW3KKU+!AsMPqg=U8I0Sf7KH>8Qix~n4F$_M7L+s1SGBpao}4#+$y zJp|f#>)w1zzfGd3>?W(2yfaDkQHb4!x0&;?Nn4*<4h#Q`A%IXA<#=G*`G_)B{If>y zN&m{vLdhZ!c-lZe2l%=`AjJX z=`H&+E*9uy#!mZJb2|MaSFT*mIQQ{F9+q)dh>i{W+8@<}fv5tr?z$n`CK z3NzE9b*zpZ=)+*~1Tre33R=JbFQ5pn24+6qG>GTnCTGtFMSzlUl*=o!wImvJ^os*l z-Hkx8_!65v^|ugDxCxWNBlj~g=HIjF2$iDa>v|3h3MV4LG%@HYuvz0WF%%~8HrQAm z0wy%k*bk)~__65ygy5)bTcC;PF~0pPrWq^Y$X^4rki&8t-%^%hV!*9Lz`Nw-XkY`C z%;oL{Ztwzh`pT{P{`G+gTU&6c5KG8^m7fG#>lCYnJP?7}yKW=b&9a&8+~f3>0=!&q zW%Ez>V9{w#MS3rZ$))a_o|APGkNYHpWyu-|i$>v$sSaYeXN`+h)e?U7d%BK2d%swD z{ysndFjZowp6ML~&jG6Pjw-3@fjg2u?>!T9yE9tIPF>cPPE|eAF4!IZHL|$M=kV5- zYA;S-sputMZZjS2OZJk{kz)M%*709j!oV1k@X=;Fk{_4VIBlGPltAIT~))$Tpfp7c;h1kZpm+LyK8 zmO^ytqmIOT>nU&Rit^**cONg{Yv`%IUNL&6tyjSmVoD>s284;1wyl0%IMn^e&v6>h z$Ywz4xbf@sFS?>@%fV`)%Wn>FNSu8QTyo;TcX)I3>(^gvotv9ZfSU56#o=;#{0|@i z?l$t<4cRvb+F$;{6ZD1$SotVJC4K4l(GM|3Pj3L>MLeL67$qHh{4wa6AKJdlDEpRK z-nH4L@U6I##+r{QE?1+K;Gzc+snarMlmH4quz;Kb6TrKTrlt)C&ZYSgR(0kTRDwlZ zusm{1ch*gS0(6!FeB3Oap!9fgMpvdS{%TpNIOqxD;&S60Nk*(0pMY<vi2PINEHTE zp8t+U34y>{mR4u)YW*}?C=FP*#lq!l$)2{ADH(Xf*iw}cwW-6Wgwu!a^FG}*hCfL~ z&P)FL&ne2xTy!Yq2A(b&$XReSd+7%%W5x*FSf-Yam+PqG#Z`t@&XJ!n_M}g2yyt(D zv;!l;=%e0Rbik(6xwz%rx2TM{yLpzEF3dcd_{NGF?!UMhRfOf%R(W`Ig!+>iT_idF z_Zc|a6z}PO3gfRz?hsM+p6M&!`&k~D8cc7A_8duW!5J|AL_}S_dOJ$_9qT5MaSkmY zS#YF2Y$YKpk#x{3EZc0By4!d6a?JK4=*)&g$)GlGKQ;ve63?EYz0I2@Yz+hykM@6R zqI8+dvG|OXJ6dFmdk)DsAPJ-IqPp8@T)Ho(Fqp7ZR(lV!fu>CcD>>_zXBOqi)E&RR zu2<%`9yuz!rUL+2dP;%q{G8$T?aspj%3snGd%%ygNnnb5Eo)b$C~iepTS;=rHg0Gj zJ@Ico3SbZ$-Hh(#W%!o!4zs_hyN1s##2E%OTYjK%mj*Zv zahG&h>0}_afJAwAl}aFW+Qxf67o}V|2K~T@nadCZBQ{5d#v6XA)UT@^X9_t@?0CT!+tC52U6b3B;c7up82J-xd4RFSj?svrHjbJ`n1EP+ z34$sb1~eqtsgtvZK|)sCeleyV$bCdY)az`Q(*BtCp!0NHB1jkpqDYw`PxwB}<&i?; z7t%lgX`xX~an?T?jhTBi_%KC}61G?vNm(NnGP5H~4ZSP0-I2MX$fZa(&#SKHg}!_( zO}p;UHCOpJF_sozVkpONoRiaTOlf!fpP5Qm>o)xvh2gSn?+^7bcB#!MZ!2UJIH|BR zy3AzsjpH%6`+Lsbg~hafR`5?wK5$*tqFlhBJb;htGdk%T6jf`ipbqx(1K)(58$pSJ z`#1lLUIg?A`2*4o?6arf#S?1wi2_;QZ@f2{PqtW^+lT3Q!dzDExphz_#*KGG#DcnQ z8>^$LO5q>33sgEMjhxE4qow`o`Xf|OP|QejQ=NR~4_W8#(uNMU021iHN7P>27`SH; z2>E@ubi|7)86y5tcPGV1#u!U1B#X0Z%?Nm%|9q6|J$1fhswFnVzIO_ldi$8jP?cjC{vOLI8axbUv2>YBT82%t zW)iFXO6zeMu=J9Z=ggtNt+`wqZ5GefwXeFs06%+UO~D)evi5D7Z48UPsVvK!abA!Rds$MOAz>=RKg(J^Qu}Be3N66 z6W1rEBW?cgR_^KS%hP5Xy*F4Db-wfFR?$(8z!6_Ee1h>Mw?Fq#_I`d`VC%+X$Wn1R z75o+k)_CCylSzhu_j@F3(er3o-z2alfg8V8&fV!%J^ziJE-47+pXxiZ$r#FF^taRg zg{_OeSS0|qFxPRxi6FFz(tdO1Go;2(01c0iVU)nD^8_`ngY_^FAB>2o8&zj`dWSy+ zXFc8z`p|0ZT-BY099M;-S9sqlj0A@LJPP+L{28t5s^T%R$5*)-FY+6`<%!PtW|q*m zEH8{Yc0o6rYTON_Lpq=5h~EZuDD)YO@T7oQ;t@m;bS->Yn_kP1sUv`dOD_B=TqUlt zEgmlyf^H$ZD|7kk(!9}(-YEUnbjwE@1(^29okZ|>=ZxirSs{?X4;b{%J|X~33YrK6 zC-?MEukVH!Iwht!M+}m;83&_(1n;4S*KR&yjoF|lKF{zX<(7cS9Wpn6Vq@9onuX*w z9s)3Vf|2Z7-=Gc5@1oL#!B@yvlJUZ&mRPwUrNz7)V%G8#B3(H;CY z?{&s9a0Mo?HFGP@kV2+<&X&Ch)+{jfhIZLLX3X_NYOL|z$t4em%xR{fH6HS zN-K-nr`~rDc1;ZWu-h7WqD7UEMoGv(w!<&7r_8y$6@W(5i(szg1d*Zc^Yj{mmFG+4 zb-gcm=8II!o^ryR5^$`EYGgqY+j+fV|YlDNs;G8Ad%T;u-7ps9I$DRwLNx#o{BR2f20qB0x^Y4%*h?ci|T zECtSc3Z`ZP!fR(w`1ALP25Pss5E!35RJ4QS(5=MJXM~=^-2;g*!xf8c{_J1xZ8BRc z?xB%5tY-PoIpcoesVJ9Ew2~J${%)0vS3p{%Cfp9U}(D#(@=a$)dVS-Pr11}*a=C+_WA)1u^-pcT7I)io*Rxb_)K zN}lQ|8=Z1vgNKSK8g3*-j>U}8U`S5(y$1)spS&z`+{)qZg_kpZL0?yf?HeQGdEW|2 z(0_Gg)twMtefyN0A^D-^R8`!mKtLj8V;B)NQD+5$3CKsH01-1${pUD z`CF$}-hcHFZ|%?N%jxCV!F{UmiC?`B51?vo?01)fbX<@BnN+}`nH|%m9EG*8hb2$V zqj?D;4BRV$#q%vs1yv?7nLw6#OGCkEAJ9W$Ys_`uPoMHauug4ZNYd7)K)CZx@85&> zj?{YbsN)Dq3ga-y=Ex}WU%W3ho4Cu_vfUy&P;FrBiZyiO)9-J;Z{^!#%I)*%KmdA# zrweAR*jZs6*K=0f%&bB42kFaqJQ4^%o>>XS1LL;80nD{9TbO>5VRGUg@!g}Z`gRZC zy+;^LTt&24PRb+dks$?si*tOo>73WaiFG3UY$=|=-{!)CfdR#-K#QGYvf=N2VYdI^ zL6fH>nm1V00HB~}*t5nR_I*(&zEXBiP^`MMot=KHh7?&j9pn9eu#?R0^o_OZ8EgGw zUb=0W$GXz+_RY%B(iYem76!Av%9{0(Z2*8f`eHz*1+t??n0-@38=~c%k>Bb-I>tWz zxLT6nK#qNz98P`x-c9qs?52a`(k-o=t6HM;{Gg8oSSE;pt+!BjJoumGRH1_1C=u+w zVY?St&4jNAx?FE2J_X?B=s}sSUsm1^r6)bxP{Y!lu&%pc1QRi>${22P@MpcN4w~?D z0raB~u(~SBjIG_93HRM+8~_hS_V7FI0JbvipExFi2{_Pa?hCBmdY9}77Kw+x|CzAN zTp#rM8?R`AjNRUX zvA^gQAgsuJ4>T`lLFo8+&tVW4vN(T254|rcAEU4FUu{0P86u;B(`ht6W^HOIDR>gb zwfj*{CZtw{S&0LJ@03_3ppitv%*x2T&H zSVl%}MXf?!a44W04mAI^jfXsR^^QLK^;y2zhuw@W;s;B}3kUKcfnxK1|Lt0Dvh6vh zrn1%g<13^_f}%))7D^I5+4k&CWni7{U$Y;gpXJ~L(LiU$<0kGE_CXi?x$8I?{p~2r zxULP`)c}g9%7J4xw2!zO@EDDV`u@JeDUZ^fba3b8u)6FJKUAXPXpakzi%SO1E*9z# zJ~~Uk(^fGJNduga?NvYZfzh|}8n%!lFS?gX0^N*9#fA%_Xzx4y#KGrM&r~r5N~kZ& z2>9zabCpOjQ_kLcqdrX-O%Xa)%=dH`1OMi(9MzIc;6}(|T6Osej}z|}BX*n4Bny3b zpnK34^q?&)Q(W_XZk|Nhg0k>a^VIZi5fgAgwAPGD1dxKgYj7~L25RW zkn$Tj%3|zT{c~IAWe1)aB$@VX9|hVefgD7SMqXSSzZ}N$B`MYol|8FlwYCvJ5{?gvilVF#eR#I)aG(kWpuMY$RWGg}Rg%50qq&J32R zf3KjHU)Z(6-m$)aCq6K)5U64hRV4g^&g#o4h@Pj;kgnDHrhX*?gc!w5Te`Qb8+}r~ zWeN=OOm)U}KB?35ACI(oVs7+1tO(qB;i*Mn8gL#EQX+D?BeCdr{09*eTuIc5pmOA^ z>opp6PW<$@`ynpMxR?8}i0a)yZmRYv7tk9+m3u zjtz1GS1>4W8J!tf3sZ(?h4m3$9P$9BjtNR}09VIPQ54xdGRw}ajG4OsMg;WteCPSN zwminu$$m)+<%D-aQx^}xCcyx8qCQzNUYe5d9H4K&hh2fWdr_U#bVAP*{jRhqjq&+A zW|M*oH8flQH_OWB%3lBI)KuBA7#f=w7fot3yk|i~ENa;AEu&52R{C70= zbC=A^nXOoQA(no~epGh7-<<&Rmj&J)9)2ls6FP4Qlb5$}&YnzIQ&0u&7;9|+F*|#j za`=NgMZuF}iO?i-F3b3O+=c}L7<1XW8{ynO%3o!&2tDWcJsVlEX6y~TW0m{#LiE>l zWX#3(+V%^`i}}GD+qrk(Yf|eLOpgP@3fix$tEp$MLaP{yf=@B8LL31-5X>%Vs4%=H zn62Z3g5&T_3rH3|Pv7Rci@ohf*}eoI<;NQ|y=HQbPQe7;jZvbT*RBueV`bY)e`gJj zCeua^25!#ZJCe8NhDov6sQLO^ti@yagu4UpVr)^YxMu|)MBW~uW5y}8T7R)ddkrGR znJxGEt^hB1@~A#K!V-}iIQhbDuqL_IRE=={B_`sI$}C{mfb1b0a815YI9{$-{;CJP zBfsdf3plGIXL-W(9i?IM21bM~g$w}mO>jMA)?H&MX(&hTKBE(aw~UaA&4#Rp9miq2 zE%BrIy@g?s&Vx}=8{E9u?t?S+eAt6*^}F7eURvj!KZ9W-(0+7bUuP3;7TL?Fq;X!? ztwpZAQ0O||^y+W)tUbPNqwY`VU%?t^n!R$^HSE7>&U1i;uMdH}Cftd3OC_TSfH*vPe?JOcEfv+%n>X>b+QdW<8XOLd8h6KTLP$YNspD3|Bs zxX=)~D`KKnWGW-KKhdvr{B+6ZS1*;jnO|zHH4t8Kf7Jy`D4);Kh`tLY@Fm#Z$p=Dp zSbai&T;N~Q?6{|IWJSuHT*Jlum6D9j-;*nC=CSyKifns190lAowjVHz@Xh4EZnoFF zG0}TK0D#l89BU{6OiYXzar^wmv7D@Mp5qGJ{msHIN4$HxI+bO-GTkvsm=!4ccDb)J&LrZ_8KTS#~|}m7i8Lko3_^t!nJPEk0hk z^P0@v6ta&Hene*g4&E$ss~je z^2D?vG#g$#qWqjE zUI`2cS<9nL=E}zgPZ=V`-0L_yr3<@S{zF1#;t6t6iW+8uSZiLJb9Hf%P(cjL&q(hW z6#07)M-vm$T;-FHw1KUc?xacxVN7I;3)!>D8wb3&n8*j!Ya>B-!PO_I&Kki<=eMKP ze>CGek{bPDEKSMG zJw%WdhOGnlc6a_lo<3eYt((=rtp4Ez=7aq5)a_Q)Z%eiFj{%br1 ze-4>i%Tqp&CY@>=y|(WIZ}$bfwT2)=n8#&JXbYOTG1u+Ny)kcDHGcNpz}9wRVxpo` z=B;KT+G2BMWAFdbbmrkuy>T0V&Y3Z0?EAh9*>_Ra7+VRUQe-C~WewTqkgN%*l)bE_ zP<}<$Nkk!}qHH7CvL<91Gw;0D^}g3Nf6brIIoEl<&vW1R=SIf_DTe(Ww_Nh2rX*=C z6%zl>`BjY4b^UiK<8@O*=D<0Zlcb&NX=lBlw-9R{mii{TT7A~t?u%?m9Z`BN zy;_K%3^sK{{LWb$xiKTy>$8$@%897TLla5o3~3{81?fdMfj{8BzLtAXlmf&{DQ@UN zIWHS(9SslG{WM0@<)8D?x_xCDCn+d0#64trg_;t91PLfpB%qC%Et@`v&cJCoHZ|m{ zHDs04_?BhR2s9~}_phhP{D)RE0xnN^Nb`GfXKkoyIP|}YCn2CqEDc0Cz-7->#S*}` z)qf28m^#_@?>}aKUKc^l4JWbhC%hXKNbG38+r`=?0S}(ds(F^^zcdS7RWW@&Y|;qS z2yyAsq`9K^#EXmHri4D3hGKDp1Zk(|+V_5k*KM#t&iB8UcNsQ(oK+U;cIvONIx2f2 zlk)E>ZD@$iqZr?w`C@r;(AKIBC5r!%$+3MruQSjp>!4QKEN`QJvp<+mwDP~U{mO~0 zGn`!Hvva8(66bd}W$4rOARmZw4qLjtq~fwLERVs*y`EZFeR8lq6gYpRhri_{!pBep z$Q(g~IS>cKeqYEzFoI!#lQ%Qk4az>oU zNtQtqG>5gJNPBSL>Ri1PC(tKVjui8};7Sn~R3k%nEDuhL;osG_-(sl*7Tk3>cLjG0 zp6zWB=~3!$|GcI2b=s08yTaQ_Vc{w?vm{KXLQ!LD&%#-phx%-qE)ql9TijHbSqGJd zW8xl8y~w$Uomz`PFB1C(-RRI)Nq0Wq*AHMs-Fqox=t>W*z*A+6|5VWj@A~Km+->dq zs@~uX!}n7Km`zKoKP~9>*MMW##&@K@i5D`BF$S%v=CshqdhQc?#P#aP6%fj|vr4H& zlic6tLvjpt!%DfT1lW1u#92ZnTFn_&O9VkiXT6MdBQC=v`GVJ7{_zBG{<*7-M0~>w zH?fm%%z=pjNgA*%W(4^EJVKq71IG%5q4@tGh7x|*>V_cci@G}@jti>#3Q_$xqAzf& zL3kFc{dbqE!)M0c_ zBBQ>XPc2clq$~cu^E$`Tkf}Wn)snS?c+Z|*MXY`d*##l;lguOotrBOo+ znqQ0nu1NUZhFT=Dmma(f_~?5aP^36_Twy|9j0b{D@9T^d)+cOVxZLCsTSoeq(LN$q zgoF)c{KfXp4u^cm3|8t=DHBqTfI9 zCU8KPywDau++m8}Y1kR{7=k0sfC=jBSc5%68?m%xfBCl3&cY^(;9YMT|a-2u<1@X&(4Eb=1d z+n(o+4!p^PL?nZhdaz?T1~oozzsR1I3t^bWnAa&fSCI3}Vq}q8^mg}9PjjnUWv!+( zsp4Xr{mPpo%)acTC9n*+I>bN>Bzc1Qxuq1eyVo8|4v$W)XccGBDMEDcl%~}Rlm%n- z!zDP>>{vMPe%N))N^>xLvba-mjUSJKoM=KB-vi zip}6>$hUZ_`tp0OapK~s25!HqjH4WyR|>-lF3Buv28u4%9KFiya;LvBTqftJ;^9uK z;52a!<;6j$x5nxHYgfCsL&~~mF{~~W)OL*iK#qN7^vL9{x#xdzwm+uUD4*5}<_qrJ zM5}#1`ntXyJ?NXWw4L0@$EqeH?J6#`P((Io3 zQ{rTHO_p!v5APhvx}(QBL$d_zPyv>3y$&<@P)2)UMtq4S*5z=599s(i4)c{s_Z!U+ zmTcs)nXcHnhJ~w`$D8V2ZWR0mkvn|0DivcFJEmk42j@;3%fWe8rn)wKKV%`R`{2*- z(d(i!g7RR_d-(D*6n`r2@XWn8o;ZVsxNDysb#_-C@lbL(9~DFFKMjp-Okwp3fEY@n zOwv$iE?#7OO?K)sC{jqFU`vSHS?zM+iyzP6gfbU~Gv;m=%oIwOZR+~ChjXF9 z{)fmO@bV}F-qz5YR&pL~7Yh!aWPEunhdN(vf``-?7yRD($G(~qd43#h%-zO(G;rvJ z#y_GF5hR2mbF7d5K2rcmc@AiY=Sm@GHFwnFa7ALO=AiXFR!zI@tYaWK`rfCrYy>Sh z^b_^Zl`xkws;;Oo)H79b&5U$t%0s!X^}z4n0_9%dr;FlvE;=%Nwj(IeL(qCMRKS|u z0ys;1O8&=-!t+1S_8hpH@$bd%#t60RQ=Co~a7)0^8g>M(PhCl{%{C zT_L9l$<1V)#bibaH#tNgRzcE^aMe5rF=sg6u9pP`t}Vl5r9I0e5=Xry}uQ^)FCeX0uyn|VsGmx zR6;Rue0S)g;jzn-D7ybIn=V&N=8KB-J=G)D;%Kj%2~Sz%WD=C_Fe5h!S-?g8J`l^5 zNDlWapr-HdTpckA>U5$Wh1auiAQh6{lsjOy%shp1ML#h~l0v%WXIml1+F4>DI3imisy50fZP%$UX9BeohJDzHN3!}?k3g8&eu5cv;U-PV z0*PBijhg!_eU5eaq9Z1hrybDJNV0v%mF;TXB!zD#cb4tZgxuwE?NjMw@-&~A)-RCR zTv)~Mvy6_E>iJ!8w(_xPED{#!q>+VPG@iL8!!F0i1x|tFnjdjeoP+#&EZ?AUu4TK# zlJuuY2_(CZ><$enx*7Ua|9w^TcRIGPC|U8H&xv^G_+M*h6U_Hp!@@s*6^AoLoO*hV zuow9Aqmc?09odGsaR3Ws=Vz}l0nD7A<*#-yB^{!qcZqA*Xw=IAi)%CeZIxQjhbZXx zagQjtZEnhgIt@gDRdV~^2V??O)>f#&nStNihc48G8pwN#xWQE;|_;mf2cp{!uL9F0ariL(KM8FEY>|Rz+Xk zN37a09(hv8;-ERK9nX+wzLWpoC6PzskFO$_TW3-SfA!Q>0YS2xo0MCN`FZagLzv=I z<6;8$%-&gw5B5rQep0Yq2*D55jx&%9rtWthmC7!wd|q)!&rS;; zKlx}(fb`aw;KOZXfm>uE>zp|RLLfH`fx;Lhht%>)k(ey#^cvKTvY4Zi zorY?_RpBm->?g?aHwtxHClu3Mi(=HT^xw9h!_qitmKx=oy5#mmEtJAT4FZ@QT1`z! zJIKaD;zr^(hi@`Ynx!&y>|Y=qhZv8O@&ooK(r)JRJrzCxaoX@f^Gn|KN?hF7-pO#l z$zBJK3VLD)u$*i**i&({sTls?8K8Xq4Mi=R4PD3Y>!-~4i2NZ`wszkahl9v3@(*Iv z?FnxFOCdVWSJ@MS21QP645-G2xO#!tO5_nCe6X|BWenPR9e zA9FEVWY=+5lCEH&V@)d$q)Sa2+i?g zlvVq>$JHdd*QtKu$%xPaFGaqM`;@sv?IScEGx&YCR#X8+3a;Ze{}taJ-+nF^O%fTL zjC)n5Pn<125o-#35HN_**Jo#P*I5k}Xgtq?EBU~3Q;y6mjHD8*_&mR?Wz*AKhT{SQ zedpiHc0V6)jn*jt>3mrxw-0^Cmk|g{0oEM52IPwpUIYz@V9)_asN zjM}-0!;pIx(0(gO2xmtv=h9;~XTX=IK-dB0Acb)t;5e8}xCXy>av=r8@=vTk;lofC zpt$ZIR{3wg3|(?=()+r{Vz8_^65azbX{*YvX-y1eJ16qt-D$^4B`>pne@jBHNo2dl@LVXXhTscW5G z#g;wi;soBHt@5E_uS>y3GDJJPT>M)%j7c1(p3cT5zMG(^wAf%d7(~=a!uki(k7x-y zQ+(6n)2bw!I$GWKww`t;I*ow`x_XZN)dVLKdE;H_jf?(^ZJ&iGGsLI^)dqvM_6>Oj zx}k<5)*t4)yeHkF^|ZAmBbq+9@_>vylNm{mvz9sD+A{+xqEsdgiYK9GZsI>2_{(W6rQCEPz*q#!ZgjelH-43;$Y{qja);5`)9sV^f9vWufv_>Hl8 z;!}o0vY1rRCNyYve&6Yg{LZW>xpNt@?~2dZ}rxTJDwO@iw7|W zBpV&%h|aF1WPQ=eNtFxt-khl^aHTixJeG79^#ZApctov&GDHVgwHltfbUEVln${cK zimbtr%N0`5ISEN<=lgeiy`$@c&7SljpB*RgHw*_gOULsbe!Nw$P`JG6n^w|quHg0A z?AZ@BV_kYoaVXH0?GL?=2|jz6bWSEuK?iq$$EKwns>IVKV8)6obm z01zu%vKYMh!4?AqC8~%deQg^vczt-cgSZ=_lkKwmcl6iJ!M*l^rS@%iI;z9xao3dO z9KgaHGNd=I;OcX3DZs3D0(k%$pKU&3SII_2L}Tk};3}bb#pk4bvqPjG4Vku333_3P zwFHd~*E!N42^v_S@eRTGSPaVgB#6N$zbOKJp#e<-q&$fLR!N*1;39AzkkFpSGF-@$ zi)pH7z|iMI9M7x$#DIM*-@!{z)d*A@nqO{TJ0mv+r9kvV+Ot#&y(wHgNyw364qhqa zA@7wDox7lyuR-G{G&7FE-{vz}*He_uIOlQ)^uZQLWy6_=ZyYL|t;umEAM`Yi>VL}Y z@9VBVd!gCc$;o2URc!PGmVe>I`WjP5za5KoeEl}C&ru&!2%uRi;aDJv*(eUw_nQv-!b<@v_wKwri9>pF?WzBox`0-ZyFZ$k{+ulbUW%OjS?2lj8pOEUQ%xhd0-XkgItYK@cs4zky3 zNWHG9#arKeK#lVPdZD{Tv~Pw1Rz^QE1}>s zmHJi8B6N%IAoD2~Jm%Tv-%NuyAJC)?;wG(!=9@yFTuuTNR014vvKjg&Hk5%@8^4lt z8vZXT6^I1rq`Xs}-;m^9Ab@OlQt9nK<&jRF?ay+Wp{;n&KR9zlNcJ`(2Mb9C*sgrx zg(CVm>)kDUdtD6jthSt+Dvs_s-dFjEu4zz!3VDK@UR*1r$GM zH{@=(_{ZV#8z{nq;&$_G&VJd3&nDx&zbD|VQTxEIwl>YlDuyV@h?5d(E%MOOg)}ky z-uA@yM)aOu*H8Ar6YK9LCcjO7`}S>e@^&ae7py)KACct$NrsGxoeQ$j%2BFOtG$8m z2Z~zTLVl7Ll^otWUA8O@rb$BN%i~yLC6;=bhv>pUT^DS~KYltC<3*dyLAI+wR<0B{gM85QY8_`O%U}GN zBWsko4kAuj@mSR?Em;?xiBFAR`y)PX(NHn7|3XGoSj7 zmI61hhyik{*R*k|6I zIy=GSP^RUTpvghVOECHcDv+nB%v&mMzf!)Ng;vH zpJ>x}N?;4F{%xA@-rJpYb2*lV#tT8mPn7?pU0}8~XGL*D$HzrGdjTcrn;h)mw2#9A zDL|>Zd8oBQuAg&#HhSIU8H_~vf0@yA8JH=D1Pv7wLkvl+)|7oPe z`n0+lJT;pm3Up_FRGk5cvt#qyW?}5L^Y>o!d^S0E-C)*J-A&6}zrPkoE$Z;@oQ^>_bQ6kq-> z{PCE0hYIpABK8Y$sng9SV=69ux^);2ZlB6`WaS3d@N;gHo#1Z)qD8&Wu_ebBi9FyJ z`2D-7$&Ubjv8_;k%>@%e&tcT|-hUM5?Z8VZBYl7XFVCMZVM0AiC}nYa>!~hs`@g6s z3&*(-LDEfW?U=8cK8j+=Uq9X?jO(7baUJzM9=?wHX<%4-M2nS+z=%`JvYsbfUu0W& z=PJU_fvCtv?eq~Ifj)A$9FElc+O(m9c>#uY9srRg27ry(%{Ea(eu$f*5f*m=iq;*t zPG-a2VBaV9+O-~bHo%DbFLCw9Hs>Z7Wdc*PiNqB9^VCAQgH~($MLOSFd>tB9m528O zSFtMkg$4U@0TO4Ey5hJP2rv#G;B%*Z?#z?WwMB9GhUbdUQYJ)JIlU*#ROJaCfiyFz zImz<)DxhY+lDd4Br>^k=8)cS>&_i@RpuI~s^mOZryA_)n10USKt?aa3e#1>S3x%Lx zD;uJ4S?l}z7r#H0Z*GfOC07=V6EBQqwg_9?52dHo~1G$BYD;eCW*f;!as;) zbZy)m*5hZL?Kt&D#pVhJL3A^!po4$7$K~wRTio?+&wDg2!1WA4z;4@@jq`m~CD_g2 zH<@)LsvfYEoB{DMag{n=z4*E7qwjpwddffNs%e>0?IjpbaUw=&_eQV#DQI$j&wMTd z9P7BT`H)kdQ`5?K4NIGwj6o&npm>sc;qvb8tp_SZUc|5BZa+I)qLfD*1&J{Z=9D(2RGI zh0~$SFCoShIPKlLe7!_10w816Ccm1j=N5@)*^sB|OAE`|NrnkTX3=rhf61FmCSM?5 zOx`D-U=#AiaZaA(;+v-7F%%=BoFh>HOSXY-0pTu@65TMK%By>a%Dny2hv?UHd%hxQex(yr!RCG zzf_9 z!4Wii(axOPzX8{MGUae1!imBXx`!DqF$~IoQasv)F?R>W%S>p;4GXxgipL>B_lOpw z3_ho?Y}xcMcYa!BQ*ZfUXZii5g*A9AJd5Ji%g(sv?=6l?zlpA`xR;rTmY>LHQqVbvB zskcNerB^$yy%EXSiwD;8`bQ+;PBDU5m#QRiT_2IA&z1DC%Yi-#rQv?@vpO=)uFG7EDIG9LpHR{7XV#!Na z4*$Ow;FuiW+$fsxj~TUI;$nxz=l5o#Pv!r9{oD&~SeF)&0LfMc+iN;;^^pSFf8xEK zaB!f$_@zMD4u#YP&odAG6AXiqj6?}jmC~b+1xa@fubo%u;6{gt?Jm8C_}ZO!QMcKe z*^Fcol-Zy`ZUAZi-kNZWJABlD`hJH@#&goWI2o_H0!LAr%h+yY^m$LP+nEWqq*d_& z!%=-k0&>ueTZ=h`2M3~#SM;wNzwlvp_9fp=C9~Aa)bmYYcbly=&1)&mhG<_M8&+}nPqNII+1*dKdZw~ z9$fR4dSpS%N-}U85j2C~uA^6zFof-K_XOM5bag>Fh4GX|wGLbfz| zYZCn_IN0dfStl@ff@&L->D`YqCAx14_;(nReZ0)z2inv_h5lv2avP|+Wu0vB$23n0 zsDtld;0ghDNV;im_+A+9LAjq}Irmc8lEZ(xy^L*_3$81)=z48Bnml0`_ky>+?8g!Z z{)dL3yZVsB{XFJhJREe;u+7|jx9s~`4v6J;1|5V<`I#&}dF9?c#uUKOi9S<;kyzTA?ZEeMy78`yzJ5hp7mFzFvn#(1vU-j z>Gt7+Uip%6$mKN0*C&Kqj9@)*nwrRuKn{7N1t!xqw$rE6;eRBaa7! z9$uaGgUaHsGCH3}9~Nd|$In=)I3|oUE&um=SC`-_yq_<;`R@6^^)a7{aXSUG9om-J zS5%+Ur8DwzPo+`uFxB`0W{)`q7(r3I=@zJ#)QR&tJIGe4D@l<9c}=TL?=>X4auQ^C zfQASZeuL<;??F8=YjS%{^n&Ok)ePH*yNYh8y4NzrBQ-NmAIyuX9TRe8An^gTJALqz zgENSGo|>PMQMdAB&!8RwJnS%;cfOS1^aJbuxAq6E{^jGZ?WAHX*{28COlWU?OK0R~ z%O5XN9jxzn3RkP&4~=al|8j>Z&fo5llplLGq-cJVz=9JWh^N6~hT+#D95SCXBuQ(2p=tWQn#uiE&;g(MzRMACjCE`P)q z{g5JoI$0ifg=rO#0%8*MUpP<2(iAyJ0$*v0H`3*%M|Wj!Z6UwCzCPZ`Xe3}FlGrez<1ZU_kUTn|H0>B+ zOgqz9Cg?DzUhCL8xSC? zOK2DhW$N90YKov~m*ivUrxRVrmi_NP#Zr&r?VC-kLQKTo<#0cV?i`32bWv>;Sj5PuU()JSIMI3;|p9Y z{oZ)`nH9;8!pMduz17&vNGko(8n8CTcSA73EH=|vQIiDjcQo-vArCHHh|M6B<^rXA zP?f5uC9?GO`r1LPrzeH~?~TtG0!!nI#+{a%B7+$zj43bCw!_vqb#zD<;CowW0^28Y zJOediCQRg_0^O0z$6`Wh8{3nUld}`aE7q4j9?f~Tx$05cjvlWhK$L~&G@WVW$_P`d z9t=mJb(vY@L0LbHPxc>KI>EA@wzC#**u5+8r};}g8J0p}FOhz)S8>rMDq1Js=@9}i zC>+UcP@SsWTJTs(x30W1D@@yCK;#h4a3Dc#R^nhnhU_G{PK~g!sp#Vw>-u1K$8Ka; zG0Fz9Vpzx_k=V5w0$!pXxW@gNH2Nw#n)|1u((T{LyoTOaLJ7K`;mx*>-aZc@i`zqo zpu0E#c`cqg5!jwks*l|G5IHPE_s?CcSM}>0H~veW=Z|^0(KfGj`CPRKYP98u__br4 zMSULZgDTm$6f?n%gtKGE_1H!+5W%hy%j~?@t;{L)joyXu>;zP0FQ_2>-!J+cc-Hk4 z*8Qp{hXmc?=#E>@Kdc*1zlkr!nSsq@OV4d%4)!k0_btkgshz;lWec_aXOzgep=n z@}*odZR_F5?CmCM^3K{S$ip2XSVP*d!#OUz$Pb+C4#vFUyij3ye%91tfzF9Q)U|sy z`yz9_?dJyA)%cl6e`#1SAF|G)#)YITor@MB-St6G=NuVo} zbW4Oov@Mii7q-wjbB)1@fr9}(%I~0q!_>KG(xyMID7`JlmUxC8ilq?H&^HOVPP(VG z-SRU~@q0tkH*J*!r{y;5ZWX;D1fYaA?o@G*K5${lJDsDWGRL7>7GpXu>FU*(vw^Ri zE^UJly@ww}4VPIvRy<2?7{DB&05*Rq9ApL${%iT_H&MQ|Jw}WPZP2(Bw5s>Sy?9{e z2_I3qw|F?BFCM)x?97&iTqr4VD8b^${ELBN?9y~0ygm&@U*hs_#K@h0XS`psQ|)Lz zHLkz;L9Q1cLU+LVlRV6z>L?nu2MPZJf(j-JWGf?v@(*P@FhGFz&H~(`>moa{ZT9>3 z0D&E^<0W%8HA2ZHx&}?!eEEe|$Ej9(tv!HG4hKGWEY4n2C|Z%0E%a&L=9f*PVrDW$cd8uS#dK{4@G8xQ zywQqOR13t&?QI@YNW+l{wsznl^8FAd;vojCwxPWa3krhQ=}wpyo`dkklCC z1z>^CrTUI+?gjU4jc-cWJFBW>JgeErARe$0T>Y6MO{4wV>6~Jv2fO-?KnWONAgd)K zyl>3=y_g4#HRgN79K!{(N`pq*=l3psjjcd*`H2gN${HSAJD zfu>ash!T4>Xj=a^h8*B7!XFoQPoGde#KF#Sh`q!tKKLXI{^_{#CEhrm&GRdxDv{>J zHf?yb^h8b;u%5y3Ar!U|M)C31{gYj3Dl`7Z4mO1+hmv(&9@<>U?e#%tVh)?4pW)^- z{x*_e9y)f0EQO5gAF@?y(*~Pye+DLKSv2gN>yG$*6z$c?P56|?Mx|_R*b-3yIenVN zfT2VnrJK5Xnri;rVmNG(w$x>_+7i)9jMU*;4F@d5T8ERSAa} z@BL}dhHWn)?oxxoY_4wW!pJ4w!3J@DgsPkg{qBP{8I8ozgU`Oc=<4-v>fsm-YxZ)H zzy2}&RW78Tcv+A)CQVQcF=@D)q)g*3S2#Lz@1=eMx5m=|iS`hU`-2N>p?WvjGzezp zP+!5N&N4PzPYi;?GRn}oE6T{H=kItrl`H>a#JLMO(jk|h6=SNEE?pNS?9ytKpf7-v zG*?@5JHv%sZxkW6F#hHm^GDQwBBwqh>)n0x6|B(cXgd(NEtQa&CQ<7?-5wWQ)NZeCAnv(x``NMWU?9nqFW-QM(=) z1FJhS?&@-Ty=-+i!;WBD;{IgrMwL&;7mJek-WIKO0{X__ddU4pBJp~@CgKuE_arw? zTuy+Lo>vQ1884$J!!Cue(9`bEOxmVM_lbAFISxWILg`7rAFqrJY$QvL zvkV$5+n(?!7DV(3=L87-4Aq*&9uGT!73dMxmab&LsIk;Cn6qP%YE+bxxxHL?L@HQ# z`TI)#8r$uRLVI)&&jmsRGIfX1*IX2c5zZuXlT&%Y~`;RLM6&%+gIKq_lhwc%L zo9V?`c! ze>oL_FbR-sx#?>x^pr{ooO=L;4jVUd5Z^r7ci1joXxT7XTR|hqgAectsZi9t>b08I zW?gML^!hOwX-{7F zba(ecYO=G-%VlkZrWP)EcO;9U_KX^n$LE`$vVn~v4m?}W#xpZaGN*TpgsojKUkXEu z9cg?UdipQ;VCC-sZU573@Pz^So#NB$?MLOqNS7m!-er`Ejg1Y42j5TPqMmch@?%=& zhuvjuW7qQsR*5^qBR^yRm<(87&|aUp^&4_8Nj}Cv_~XWjSkRAO*yK?t%U&cS(NhZ0 z4SD}7hc?8Wz#&?yyOD%N8s}f);!mc>G|Z-knc#nHnS|6yuMwT4m`FP>8xUY3QQ>Y|hY~8zkr1p`V{~%!d9t5ae2iF&gnb0V0U!Go9RKlC00W?Z0TW=HEWo-v*KPGTi|M8&o zDAvYJe|^`TDWXeRUK$c(95ew>neigo-@x>ZX;YZ3MBHax0V>G@NNfO_$rS0M;aP)D z9)VO0{Fy0>pMDan+uksbudS}08J{YbH6K9H3aux?$3mAlP?{5t*@EuPIQ{5j@ve~u z_oY#`N$z;=tb5}`8K3p(u^2v%sOUGVu6|P=4cC5kq(+W}4fg?a6ahu}p?CX9sdCSg z5D%`>2xB00Ggi~q8$8gCyvbw!`iQ`lN%n4x z>MiAULLCQbu;ce{r)FV#;L2;gHotSI?6eNZSORC@PJ@fTpp$=t9Kp}z>0(b@mPPE+ z1ra{vj}1#*DDm>;?#>z`wp|v=n8C)u)An}WtE;SEv5Bk@8N~tJSNX(+tHaoe44T1a z<>=*&w~-S2owP=Asu_fKA+o>=!(-->2Jhn%`C5bsay+TVz|<$1`;ni2L!mtzk^`KXd3IEz zM2%V~H>!zC{KHPHCG9UC6&PNjO^Cm`4n;OGmBHi2k235+7=*v zK8AC*n!dbQ!AuEkzSJy*Ms6CqBUgDl{`+0BR7|?BSk%W~bQE`Z~)th_0@b z3ME_T<;cGq@t59O+3c-9TPURUjY-^fNA^tP^;TKQIU3uT$-Gt50?y&6zU=GCi zSk{ZvE86~c9eM^jQFw_6TJCwtj(9gIs=qh5fO)n~!)Q?>PLZg`!7GSGlT^=F#47h_ zjf)4ljQ583qqwgYz<`O|js&!J@6){#SpW9F2&0lAQc@gxa50(W>kN-#eYLy$BLE*0OM z{vOm(l@1!;x&RJn$xm|q&Kixs5j6IkjPDLJrDeQ-pHxZB-lWp5^vR#SS4@th+|iA!cqS%undh}J@^Qvpw0KAc5no=^ zXNcO?lyg74K)V+Po-*u&5oLD@3Iyf~MU%!vd~kKxbWbPY^{!J_=9s;9sDA_t!tMU9iab`JW~f0h4S{9UH0<_YBoK z^3!*pf5c3?k=oy!d`eqs&{@sd39Q7WX8l^c7n*NpCPcESoRHA~!K9-XpnL&j6S-pY zB}eE4T3RRIF&o(AzS20>?oX3FLs*k;E#~-z4*oj>&!atTLuUMMqFNsu?|kcd z{>isx$s6(LLzsjAQzb56I(2<*&Ed>uFD`L@w`l%g>mW9Uk`b0mFFP#IZ*F?CM?JOy z&TWIYDmSBepq#(_BKC}}BztJltV|vUOQhZZ-@#YpQ3o8o?2eiq$C8F21@KB&I zlmTIb%p0e=FA>Cwdzm($GBTdqJs|;%jRF}Y2gn#!xa_;GE(2p<(GqrP^h zHejh^W=#wGuPzx!CvgP)8aEpp;1vCJi>~b&v6mo@*S=d+zQvxZ&U(dk`O8WuLr-Q7 z8hfrsp(J)RI0a&gLF08}ca~3e@}CXACroVNT$;<6P2y&bI7?Hzb-XnD3I~dV0f8O| zCupjJ*lMKFOFjSj7|V)U_pUiii00t@vJ$~_A3E1}p&wLnk_(HqB`t*TeX}NcfJ4&u z=39MS)iG9g!zLQ}q9pP#%nZme=thRbUJLts!+!-zaD+`cR)?8Ls$v9d!FWn$qA9#{ z50orz_Owb*7%^PRJPOGyeMVnvnGVEDphZn^4w>H0~7p3B;TxY0MzDW~ZaXEDYyAzVd0|hxl`0%(v@l?4}n-QrpIiyG|M8}K~G0@pEY0D#C z2sqEgU?~9l6GTQ28CsL^?4;L50!V(^5me{rE{iUCzN@C}I3?y!JuioP865)^y zkGs^B9uu#{*x^s-XNF8Wtgd+`IMXjezRu&HdI9^)= zM8<2Y6SVVEns_bGyaF(`ft%pKNpHdH9vP^;#)TZE{q14wyLvl^an#tRE>XW_943ho zL<5+(NtGFw*~vH2S$H6a6g%rrPRMcrt-Gl4?^>;Q46*AEmn0r@a&0kYc(4@7ksF8fEj=D$t*%d`H?CKTe3Bj52u-}f|F zM9qOVkuvGw%?rcB!l|+*C=+^8!Q_S)Iw~{vKri?-D2@7@**$W9^Y5-M1HxWPigA`b z9QJ*Rx30kPWhzIB1>B}6M)-WdKJktCn)dM6M?4+{a!A!?C#NPWmdsv{PPl;S3 zla5+|ZfNTLZwI^_`;QlA!V`}AkKGPuu%QEq<$);LZ>OO@n83r!&nzYUdGO!jum0>L zkFJgvO#ZYCt`{~*mI-NH2@ln(FO=wbRD`GLF?yk&CWc*IJ^h7pe10j68)dqzpl);* zi}VWo!$Unv5r1Ap6c~zCp7_Fl+)h|s_y)p+4OKu05z|A->;~g4bq4iu)MtK-+Ll+m zo%KmM2mjI4+zx%F!d)+uA(SzLf}FV$a;i9-mPLpE*6)s3v(}*ngoVYt8G`1oSJEWS?%6a5)&ZMw??3uvx4@nb=o5DFhW7G*mWk(hFjGT{wY4Wub$@*~qLJtoJ_#Jy212WeKH>3s0~j(pwBX$cT_OV%n%>g;qBV3Rh6y&=fAitYDv~y^XD+=3CGsRokcVWZQdg!pND8dYK~xI_E0y6f*-k znHzN_nJy$q9?-sDE2QP$e@<*V)>NAtLU}qZOqe5swO3EjMvg<5}xKS$?v+$1hCh9<*GuU^xn zy=W1%%6?*{_b6s;yHQI=#Y z%iOkzidIT8MOm^&e`Fg{RI+5xHlZw$vCA^^%=39Z&s#6YIcLtC-*tVz`2G%VCs874 zdGc#3T=m~N?OYoY=l|dd_-xT^i%I%PyV8~7zk8BfRa?liscSIy7t!m{(_H)wU!xsx z-Qg29+3Byos}&vipy5k3xzsFk*sZm(D`#pNDuoYRd-*HA#E$$_5l;$Fm)zojge!C~ z-JA>MQ*Ul>=|4Z9Z}V9Mj#BfJnN^zwD~pX7 zlLO97%F`IujcYD(#+9;H+m(FhRx&Yl#XReKC#u(3kLsDz(1=XCJQAe8pYGcG{DQSipTQA!&?*=g4+(Nm3zd8Z z_cTeQ=jsO}=0*F+moDf%3oIaS2~kWw-wT&b-EpGss_gXa?2wU?Xo6z!eYTe%y3`oi zS71I=5CaJY>n1H{*2aIifaPyd?)C{+_EmejpkYoKxow>Q#?&Bxv%{%|LaKtngYln_ z=-&zB8`%xJhH#>VwAPvRnQ=@T#%4O^2zc8QW^Bk*9}E!>r?1QygE^)ohCP2Zj)bpD z3qsqwur$lqZb|vSJV)&D8@V5kTRXjxCkF?g48hc8uvPBMHcmA}BE1G20{pah)z-2W z_5K3P(Wm&W>9N+jw%P5qE19g?Ws)PrG+6TuaE|=eWHt6V2g@c=95sotlmllY=VU%X z-@{BRW>O2O)qldG>sCc(iHRU>k;9}cxA%b-{nTC@NeW4Y{W&|<9^+U8h3?;!d|JPC zCKvGB#$1t&3MP`(>1tY715Ioz3=Fql+_IGl#r~)~%BAw{**OAd3a`JU)W4|x!YOLH z_dK&*ybo$&KAyZuAQyEP2rIv;N?y-=3)!aVSg0HvwUxK_RaIo!jF25W985=b55lCw z?Dw+uVtk7gqZe6V^dC&92KFKs|R-P2TkC#fE5N3 zy2XI(d3D{mqwyCWCccEsB#1*lKji$nw3yd_Vd#)0tw0;|#kN$&=IRco7c?z!0JVfF z9Sb9Z<)AvUNjUTQr}}70dR?lyWL>XE=Ha<%cEbBqdTkCClD-2r^4vvYC5P2n~1(1sW(ulcmm%Bylc4Ck4trVjP^hK5oTzTxs zX%Cc~Rw54h1v|CydYNB@0& zWHMr8t;Tu}I4kQmA-XT!v(8v2^ri`Dg%|-k_gra)=nwwx)?n$??Jzq|`e7{100d*S z&%N`<+Jj`p;Kj^4d*j^<0&N6ncN{A|*z9@;z+y4|aAE-UiM|Geb&0Za8I%L7|sl;dX`Hxfa6$V26-EPlsqIoAPbaPi%d z%B$mDisv?RC3B*M{r4;6bvcOyz3)G97u- zZ~UmP@81Wz{TCSz)3to2eoYnUT)$rXo9q|}+jbWFn{}L5+qX3Tooz{IO#1ZcQ}2Jg zsb%l#M*5D2l$guB#I{Fv)2U+?jszvgn@d`(fZvyafy)NI(cN>MHF zIr_!_s?W{=u-BGD0L=<}ehpZe1!3NtfJ)V+zIm9|MP78e%dw^T8)%c(?PRWAz83(J zb)kn`xruP3CU!tLTMPV$#crL(fm(sT#YJ*~S+3&)jVH%3W;@VzJp-2JixQYA0otif_t=guqyL=Nc> zS;c&`!6vY0ZJUvEx9ML_R4v?#$uLIj24dGc&uxk8LZ1dU#EA48;24f_fAj$ut!Ku< zbe@|O$7!G*Wb9e&H9JU~jH5RXveP_LW%4#%@fFqeKYD%_he;0Fi`|#dP*^=l`uEu?YK2qJykKrU^ z@Ibs;d>ma$X3QnlC3FZICQn9);X^KWwbZa0`%HbFPyxaW!^9iAq_3(oQgK7%i1sfh|NKzvZ%~#wCU`Z%URxtFaAvCY(_$@r1MYVf{xm`+ ztd_nL_W`l7AnrO+1rSgXS^aQ5z{wu>@FuxZF7o;MwsaJDZhWa1OZS9RTGw3fLwO4+{svwhL6Z9⩔f0?4I@e$O+4zSG?c1;} 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%0D~XO&kfm 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 Sx2yAj^_)CrY5Iaiq47VxPYeM7 literal 0 HcmV?d00001 diff --git a/assets/inputs/imgs/img_0.jpg b/assets/inputs/imgs/img_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f6dcced590cbd18f5eda26bc2362b76ed714847 GIT binary patch literal 250628 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

    B)514VC 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 z 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%0DK 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 >V>cf8PEHuGh_Q!p+ax!3^JZ_@nc7vvxK7 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

  • c5oAXXHTyGo{k;YlE_B6U#;jX_Z-X{Oo zD34|1fXjDwbZ^$x{Bzs}n#nML*&qdOfP?|E{(q1AWEWgBJPI1r`ShdJ&Sx-2Fvigu zp01Ui9A0iKu|W*~paZ*?d75ci@B$i)X(n2B$7AC64iXk04ogooyvksTsjgk-Kn#}9Ne7QyHA3HJ)Tjm1soqH@-8a>? zorzJMY4+fa@9fQn5Hc{O)aCFC$r+2M^RC*Pcov|N0ze4os#(*~VHU~(cNzmZ&|^_Q zF^S6$ifLoxO%PBoWf2zOQC;PuaLTMglPSLw#E0@cv|^gpQ$%Gz5~|pH<(UJUQLyNWXb_a{092p8s+hld;xwj)Wwm$j{N8#>>K9 zd~B%sWU}Z`+-DXHH!GGc{PQ`*Dj3I|CuR&)Z$LlMpsfnKlNjR958cKy%}w)^l%m;% zI8QW!3C|acvgbjC!skp#G98%bu#7hNE?efc!C%IGf}1`FTMzQa9fs-)Z+~IZcbZpW zD9}ML=}K=B=KNs1$A^C$q}L2a@c*d=IMdDZ0#bfCdf=HiHQdY4XgfsJFKnEks2kw<8ZbB2-RfiHIL?aw)fA~ax zko`3$rBCBZz{iS^L$!1jMubi~fzEBrNg&~h?|Cj79R0L`QS_X54Qm|mi9g~^c@kr3 zT*S=6!*FC_8Z_asvWU81`#+g>#4S)@_v)$Tr?+ofQ(nLHDezf*Kq|tDl-3ZYfLPKw zQQ;MCCM!@Hcq^S*?ZN!aFpqXK%*7(pWLXcX`pN7GxX$7cuy1dJjtDznbN5Hy?&e+F zQDnc_Kx=-ZwlBB5%O%MrDJ@LjB3>HsXe)PTdkiC}_hsVfrEKbMyWq!p4TiayVLUO6 z&Nv*;>R7Sx6%^%l;k<*t>oMyKHL+rUJNR?=a17i9D=M0i3&H;mEnj_RKkR0pm2HcER)0G)5I5*C zz4lfECgkE}g2$2@Jnpg(Bf!0J9>dIQzZC#UK1Fu{DN`BJ6Q{9w=~Lk6D|X)9J+KvGIQpSa~ic8yOZNwL!uGJXGH&E!;L z-{IGyi#M%otDS0^JT@~%{MUA?gFBp`JYj1<6QIr# z$*2|e1|PKBLW2~m%SX{+>}Dgt@ta#9Sj4e4`{I71A7#bSG5g(<>Z!LY%erl`KZTECP@U5gxq4JDi)u;dlCqz156-N`dwW`^ zVl`pjY+OzRCogL!xoH>m=qlj|#W`&GKi~u~yv@}*1`VYUe0_ZFkarbPnUbc5Ey0H+@QRWH2aqZ&tb+xpXXpNhAKbvu7wt}7okFV?;Z zWdFvTX5wwa##WQeF-=E76~1B>ZMstP?8^J-TZ7q(I@|&=j1=}{0wSyqWf-3cc=+4B z$7h(~rNb}RTfdTr{7lzfi7fln92EFU2Jzx~v!qOhSs8yJp) zpR?nxZl90L2B4kapv&hjBPg6KqU*NLNAtzQuTS1cxlcw*ctmlhCoHPLkN+)gH)xgg&;^^d3H-oPFIPf z&p?D@n&yrPS)C2yddQ+*di3I>ft@YYjjcJ~iML`t#$Kb5%;oq{qgkgrNgc>#i5h^@ zt&M>Y83A#CJsv{}rga(9J2fKm>j>5i7q7k{y!}=4Sarh=^jT2Z{%QBVOi~f&{`!f1 z{~!lf1fW!uBad($gAp=nf#T;!(ZS&^W++}3G!Bgf zrYcJEngqDp%ZGcfK2RnDGa+a>A2o!O@r&|U1F<94+s-j8i38~4-l9F=D9DS)_Y~8v zjad~6Q)t|7&vsEz!Z#;*taYLt1*72^F-coAiM<*K!p8@VJG8L|DPOk+Ry^Wpzok6j zK00^t&Cis)M}I_5Pe5x{cZt(HiGXdtppi7gfH883K$;-F8a2Au3@A;a4iaupmefqn z25!(bk?DQ35+6*Rg5{23{D!Few-B#|Kh;Mcr-D}_F3|{Y6kbs3S-3s%KvRN@OsX(H zm8FiK1LD^Z1W!gRwwk!kl<1VH5(r4MmJI`W7dT z?*+XF`;kj37dkt~I&V*;-8CyBftm2S$b6w0qTq>HiBuFPWatXngNP-5oUzD#tHQkM z6GXw=L#p}9WRPt0>M6VJN$0xCzT)DTIQz4tk2BKzoZhK{V{~Ip)MMu&R`qz?qq?#^ zw&l)kyZxhaKMcZ4)w8n|1$9X9G*%aQbr?;V#5eB5P-6d#CdHLawf9P3?E+G?Y0TouWCDq7E(TEj+HAaXCA?Yb(!i3 zyr=Ls@RnNsj_=CW9M9&@rqYmRUUq`dP-U~dM>`G!y*n)bkBRI;Mvm&O3lH`tY5jb_ z5WEpNM-aap&)#Fa8ZE3DAF+j_^^~JXlqLFThLBgTU&E7Krho!bKP-KJy>3U>v_^Rb=t8*++GYmW~PjM!&v*Krp%}Vs+l@? z6|wZ2M@vV^DN~m4jS1e9+&Pox%F{82IT3yw^CX?noBP9$Y~1*2~yi<)pvEc8P|bz zZiP*n!FRhQ&)8?t^AZZ_*0A-(j{i3pU3-gAZ2p{^oSkd$-nR)kGmJTBhOudY#j!s- zwTp>~PD-Ssy(G1p*3a%xmf>W>E=ZDpYI5@R%lZl$x!M%wl&@!8rU#lV#&{*l8Po>(VMcY>+FbW~e?rNw91Ba_RKPg?mBY2p$7Ugq_3L>cH>j z*KPmwYG1oEa{W_YH>G5_bq18GE)tF^;>2;Fr|HHJYUgW)s4#9+0`u3sQ{gB&I+$Fv z9?Nf)pthZ-ty8V*D))$&Lyp;}+Wb5`JOaFw5wka6|7_w)8>5seKo`S%Y0U3jC&Nv! z@?D)n0~e18km8$=0Bsuz{2po7S^-Qp#EqPw=#F(AvaWESed$*IUDf}`y4@~9n^f8e zkBi5N`h~&U<<=2%*raFmLr($T)_nz5sxE*gCuF2JfskcCU*^mw1>P4hsbc?NZreHG z;D;j#%)E_Hb`YUEyQ^J=oHdc=iY2$*p9>?01K$=~Mz@j*Cubil$v9xRM+|5%*;4eV zWJ|sc4$T!{0=9bR z6^G%YF;)iucJkA_JR-xTqv=wiiiN}rbA|2xH=J7TAh6OYjM%4x8K!9lRA+H+4ZVMo zj!=I?g>>Mbpzy=sy4L`%D@g0^j$BvXe-U!{X8qdV0){U4-$z?_bhRiY&y5*jYDh^l zVmSR{`LQl%ZXS#l648~a0gb`DUAumh+S$#`3Z}#8m*K&aGdN=))a&T%{6#5mU%7|B z&QaRAlvCj+5MyNKfMj&HMep%Y+J{xfVP{a zG|tuzoY{0YNatksqh;)~6ftK$9x>a+;2#hLOfFD+30JpWF7m{L!D7nE1dk`~1^0-) zB7X1h?H}_9L6SY|3NExQ-X*!lN zJ`rBe^GQxNyrtl66`e&0EIn>yn4;u%w6C=WSpg%5UYS_BZrh=#-9c=6+fVwo-KVdP zlefA(XstGT1Xd-ek{pDknxdYibWvp}VnBf7PvGPLsPtLpn42)}gfBC^?(XdDy!cjK z$+yRxxSExFWIOV3;?~8Oz^^aLal9zEEEYLAH^~SY^8J{1{_S4a$4o`HGo?YW`51+( zRO1oBX;8?~yl*6)jHv!vda^wmpq45ul_k$wFV{Z5OG9vMVI47>8c>eF!@$@3R&R#w__?r5-;hgu~N>8;yO&?#kp!qoX z=iTGeJ^oA0OVz}OK|w*v7cXBH-&C9nRaA&lGhCc)3n6|5KzHDN@KQnQ(EvEi@w2ktd0VRyZk%MGOC& z9Ih#x5j(0!f(P>xV}(Uuq4BoH*0W-=Wpnv*a{C&_BPugKvKERS?Qao_ueXMiVBGHV zGZ%Y!?X1gqFK2@V3c!;88*%&_cdW-GwnTcUq0mx2PUf7+THOYK?0SD#NOj9?=k(nx z(v;xBjn`u{R9zl35Z)Nm5;bdR{5z{a`v;&9^tJrW(9Wh}m=Y{!oKCulu%AO-N8sUCp%0N`|5T(thjby6WI0M@I`i zR&;-+F$YZzM!mboB?$tj0=Pwe2Po>`>`Q$nazUGh+cIB0kimA>{hqa*-C})U0S{yj z;BlmLgNix6d9xuKqY)CVi<;>w91oF*Bmk##mJYemfb48`s5DTy@APIQ=zdRKI@pL@ zi4<12poxT#LP_yPB={zGsiB-S9s{&=s93u%4+Abo2XZB4X6_uTYq%CuO6F%it+pkY&F=>Z+KNa)BMY;5TaBh$*HQFi#is0((V>}Fw&62TX6yvs789&H zltvSYB4O%4#u}B7Mv`!ffaFd_Up73EeQn+~OU)(x3A%LL_o_#+%;vYl+1ZGNN=vN$If)~(YXAl-%9sRPuNdC(?-jZ zF&d-!nUgT~{GR7&QZ0F1fc8tqir)swbirpjCE?|(U7a0Q`T+5vixxQy?#!bmSyKz) z<^51yJDR{YAb;)Whqk}%>BOMm#(7L|w?9kbB<9B{p>u#m$n#>QTkz!m!ES5b{_o9gt7n{U zNR$avJdQC7Y0Q`f(K6$7(7@3vu)b$WwEDuqSY5$Cam_EP+=%KvI@>! z`l89m{}~`CN>a}3cb4KtTlQ+QP-oJz(od6-c2lPM%xP^luLo>5yKWXOy`&y~bR_>K z<|Bj*#pw(he^{``5uyi`O}x0@6)>g=^(_AauT^)G(D#3otd6k3C?qb`Sq?d#OTu-t zATu2}UNW%~oH(K!IHF3`z1}R(n$W$Iq%+iky>w=KJf@t>YACIVo*1nvDr{h_(D zPkQdv9#pFy-n#Y+WFYts>9|m1a3ddfM&a9F z!;JqOu$ezK(!}9|J}VhYJ?!_XPxyY&l6TuruD5Hhr`37H(#6xKehWc%BjdsMf35cA zt}_c+Sa?eOM2g3*0;LaDDCc{kt5m~ScrPWSGI9^l>Jka&?#qLh7W@y}6+=fiXnJ=P5td&CV@6H@F9 z=d-Pddun(kt)hd?NU?L* zC@dhi1vK3_IDLH4zwdESdz|WVv6<0$_IRO>x;7xxS^C)*CV4i^|8w3bge%uq`kyby z_*;70hp%O~_c7<~&$j(J$UBiYcm@+pxPBkHGyzaSg@M zGHHPyx;If~xC#2LTr;|ar)Rl|oLh2Ad4EvA=m%I%fvNgs99*glYrF~bLT=qVKhZ7_0grb2bWZTx08g? zy%52JjfkFZKsWfauzG%2Lb~Ot9E}d#+~bv3`F3t^zpMsbK{`vxcst>~Ev8eFZbShQ zhg-TLz$+HK;&E?oVL@MN|BbZ1{fnkYQQonSIdkOzVH8#X&`TkW#X1W;kj3ait*{u) z=}|I^QQHLXk@KG^>>tQK?Z46);P8B_T#yH{`NB~Y;?^!POzYs_#Gj@^it*Cua#wj@PyU-6({$d+WXSKfIs}4GyDyAQ^9P9` z3YO-2RUP-gGY+Qy#%s88Y`+EUrMzgaZxtnlY-qg!Mxpd?etO&Yk=7rPA-@CL{Fb}! z+#DH?DPMnC-h@JAFg+_NZ(MJFakphF(e9w})k&8Paj1gWUtu5R@=nK+WkHygC!rr) z##EgWW&}&s3=b_29aYBW8hjLQDJ34d2KAIa>K7u8GQ9osKKOX?nvd^JSbgB`VVBI- z_e$TCXW^B_HBS28`C)J@Yh6vgO#u(LrGWnK=;_SScAJn_qjl>>_s%Y0Cn>)ixJj-0 zZCL49rkj2>=DCw2KMHBpFzXgJ2?IScyV;D~&Xv=>lP!V4$56t=SEX*`C{GCk2?uJ6w+|Y?GefbmlywmHSj!Qy3Q%bM9 zYzN3zVWlGn(lzwE<;u4?(VKco?n1=|N-ZrycMm`99277d)ug}uOl}wI`T>rBgdw(Q z!U~01jZAAP8{Tz+I|hV}>>yd)pP=K)19?1l0|%961QmFW{60-dqP~MMzRbuRu;DdqF0fwrD3%9ci+zPDV1x%@$5h(Ix za+CW8t4J5fhZ)drsm5}voT(-qFz$GPB{kMda`xTPTw@S90B1Ov`q6xIG_80 z0}R5>6$tK98wqXiY^Zjb7%YFaOoVy8Aym%D9IMGzW!l+uL##w%7$Rv^_aW+58kUt3 z_yBj=mfqADgLVf?MrS5pNCYsqrs3YF;B-@P;%7W9H!|T^&U2a)x@ik_X&U;4gsnoL zRFtb#7%TfuZt5BytlbNc4%4x|DEEB&4hb*4BL~u16vFQ6---WEDfheuI5L4{^8Z?n z6fSWXkp8tW|ez9WsrVdkcxq;v8h}ms>U#}C3i94@?_k}`!EuQ|WKK{C}KVM&84;_E=GRL}DW?UvM z=g-5JMGrD9;l6(6RqFw*syka-`s1JzL(b~te$zq3wZ9Q|2Qin3c!ozG0$ca%pRL{8 zsl90vMit&`OjwG(+t8@ttPZ|7UcziH7T*umMu$#lRG}^5MMi^l(}wHrVErz31ox4gVSeB5=KiZ0m5%w!*k&d&pvMg9=fF4igK^b> z_c6>B+YgjUIWA_UYsO~&Pc1+uPPgQ~3c53F8HK4wPeZ9qP+nzU~Cu}h-RQZhO1l+v7H6OCrqDp)aqV#H^zwnFEfW<1* z1o%wbUSqWj`@pbv-dXq>FmdZ!xHCSE+4Z8ldyUp1I(o zoSjGeN{bKd@-5&guj^+?CwH$xHp>M!PX1(j{+jsxX{2@K08m{I5G&GKR|PIV>H#XsFpA?Fsw_j!4{CHbR1jL(RPb(i8)FD>w_rr59gzOS6JY0 z`RWEeW?Dy~TJgmgQj{G^#!P)xtb}cY%xR#P_e(O+;L}n={H%-@pW?*bE($Va`2+SW z4ZvY7p$~gm9r4fN-&W#r zAdniBxR&kLfw}8lOSd zI0>gy;wvY&E=+SDIn0zA$@ip$4DrtM&-DEQVEmAX8)bJ20cD6M@|>Pf@TqI?9@q@8 z{chOf)dHcV{>8J2Sx!lxXH9gNr01a7Onbt%LEWoQNA-RS#LSULLz}KDaiP>GdzS(x z4Pjoocb=Nl1eIcrD4{BcWy|hDl~E23i;^;Gp}3Qzz1d95G6W^ZhU;y>R=rQn~EOaLZ1> z0P$2s&)FP1?8ZI~xt`shP*Bj$_+K)5*J(2_Bw4gNz|xCX6e$pzMrmd2;9$%gKKf=; zx9#|S@CMO;MCr^sRH@B;;e^=GqfEu>ac9PYE0<&4u#KdRtQ*@ix92i|=N`Bd(6PI7 zTp~|wwaI%Rosue9AgsbKIX+tVgT#ISHB+M>sm^8-<@-8cN=3`lQ_C(=k zKsKs_>f}rEylD(b75K0$v;mfaVru~*_b%fpHcHkNHO&Pwd=2r8R&by3DsMpvzENS? zZkGZ^wtf^7i)Vzc;B~Dgnz)rz?uvJ{I_DnvchbGn@)p3ocNkzQuR%}iIDb$piz({u zGIJ_KRawHD4ng1dmCMKTmtXIEsvl|IRTT0Q8pGtzlvM&R=YeGzHcjj*JcGst!FYZn zU=Inl@=pz&et)wac*+0A_R$DRth$W`2d6{!W zxkrdICZ^+7rk6z0)-2f!Ei;990iP}t=!_E3Q|5^ie}adOaz85}s}$?)&&0>*Iq?m> zwi?O%9s5L~KF;%naJ25uP>jpj6581RrPlPJr&ymsa{WAeAYaMhyxtbGvy``(zexo5kjmpz3w1AH96%0r>Q zl`Gnn<+&DiKYefA&pT)`{5#F;ca1BnIgI9he%4bqwI3vBL1*J&czCB{fluuy2-}59 zB+KW^GHC$`Q9xSM+8eB=*G!oi2*3)Iq3p^0P0`#PveoZQt4SW@x;D0a4DcoW=si*| z7x?XgVZaK2KBDcDYmySQHqPJ=F2vc}|L=LDZuw4)bHNS0OwX^1I|q>J!#LOd{WSod zv^euyK=dTNAiyYV3W)Fk8UXr?XC)JxclEqeBT&!u#Qatx3-lV(1(b|}KJT|i|hJ}TRLhYf; z&09kEQwxP-3#X@VyNf%whbEkd=DzWTt3Df}1?rE_y_1dt)OKf^is5kZ&|j!7 zV4kL_uO}*%Y~)bjs9Z}G-P&uxJs_mWX z{i&nSy*u*N#7ud{a!FPQB=&wP2*N);#mj)gZcK{c&=0+Is9|)!;vOIk0<@+Id}(IW zCNurrR-5+Sv8Zpq9tl*ZK6ol8}_2yLP@D&_T+SjxRiI2k;gBzNo55WLzvN+ z)zW}^XC6Sw0i>xk9#A}ah{o2{Y))z!Q>Zbnog0-J5eDNLhC~{(I49=|zlUM5EFNEy zmfryd5+nXZ2=KUZ^~Gl9=jZoAp}rd*+y3tDoC0@pv)o`l`2CiUL8Z?csvL-AA(_XV z#3AyvtEtIReaPW(;I*GA*EVN%cFEQO0T1k-W%fYx3-{J`rXUze14Ox4lgx}g zzYTY?Zo5D))BF!J`|X)3pgeM0wweQbS_6o=)R+8cL~ovE5>Kl?xaYUl;rDunFo963%PLl zW@a!O(0~Fsw-xZvekK5z#_4vZJ;e#>IFqCSgH*RzNA@hn(V?keTa4u z8GN&*4AmWT$; zi-4txA^YeUhVl7iBR~0Y!FA;Ol!V=%sHyr);p}zB)VoRBaEjI1@*A`WZlOXcx~XSo zO$yCTxLduoYo00~kpnD0H=ZAs`0@S;nyfb^i5w0$F9`Pn(Wm#wu8cWM7Gj?TeP0fJ zzxni=)viC{MmPkk$mk@>4f+e6OBc9dLw7wLTDCC6gcx1;*331fvNQCp-gWO@%gWxp zkbyRM-Ry_llFpJ2&JJ1ee!ki)2T|7lnnxiahz(*&EKdB3k&c7`;Au9$!KFOf&`?xh z%=YtM@X~tQ)NY>NB00nM$Z*vbnGtCkzZv15dzYI=$NHEHl)!V0Wc4eum4iTxR2{S; z-+J;YI1h9ox7QJDhsHt8;bLd<0GI^Myt{t-VdKxfijTtdNW{BhvDun42e^ zBPU~v#G^&C$$H@2t;Q^v-A+LYks`X8zbG#FzFHsh_KRz5QyuvhydT8yXmauI_wkW{ z%h=a5Mu2@-IR8F(n)^*T;Av~6;kaU{Z~r6_&y2;#aw$X19j4I&tU!YMqo9MkgIbr@ zwwu{^m8<1}d&xBonjZd~JMB|-^n1)KniN^*xz;|Y2%&ZUFA>T0QVuV*^rAOXOf6x> zq=di7x_A10gqTfz@#Hd9IkOkB-FGwvrHl&@BCym|k9$W$fW`V=@aOom-2P^YkVQqR z%5z?bQ8}EuKyYcS>_%@wZlFqaIZ3HO&T%;L=e;m6GbEU4&xrR$V5N6T-q=6??~xgY z?yO11ahbd*OEM~kcc&S#-u0)ar?)t>J4;&Q1@DZLds&MB;nN?$v_5-taCd%z5Eqa; zwUBobkhj~(5F%pAl*EX1F7T<4d>0Q)$^Y6_x_4i8qnGapCyw8l6XUxZ`hEM&SJ~=- zMfSHFp8|ItXHLoa0?)4u*{6uGL1@DrM7gkVN;7jd)(3?pAAJD4KQkXlJk&kiCi;xz zEokR-wWoF^fkHH}s44zk)U;RV-u)lG-UFV>|NS4g_dIr#b*w|#E2EPX2bsqz$(C%A zkQteA93z|Ty-r4ChO9#fM^-2!qcW1L-|O`Le7@h$_xu0-e|P6`^AOJMzOUDHJ)hU> zx}KM``VDWVZli8mqU&F|#No5R>Br=AJ^1HfUXN%T*?a@4W(&c=<9g@r^CkZzeg!^6 zq?SU72|El~8Xc}fv31hXal%=1UM_$3lY7BuV&krEuIfFewgvKXJ23EK$kZ^O=y6ly zn$N6CjjL4lz0vPa)>Q8QNx5IwvTec_8_s%NzeQ2)s{s;#Z9(RD0-D_~uFsk{+{yA3 zyj=zzsWi@cT`mD~E4Pddcai#pEcooZaUQ({V9oxPt?Q-PEo)umi|54G*7w?f$C|Np z9q44-pF6=IH`2`PZmNawEy06+y$||!aDUfc zK6hb$eqbcJ%urS`(XKpWn5Hl$g4E31gAsPu&5H2Tx4G?nITfllOKjeZZ;X_E?JHCt0iF>~~fz!{76{vwjz&`|Fyh*HzFv>`n801n}Gdt-=Kw7|lQl6JO1pbxJ#mHK_`q~noSiEiX zi0m}lgTqCU&!~=tT7nk1e{@-0TFX^(6FVCi%d$Aw26FubreIs>b9OUUEMmnkjpmjotwTkStWn^Tkmu;+j0I@-fV5u2R`BI^h}u# zBO4w9>c~sjWhd!@6$IN|pioii@SlFK*{i#!Zd|!YjMeGV6qj(ky=SG&`?`0pWbXD( zGMO`TQkClCguN`yo_+*HGOxsse*}E*s406>R&HlVxQ#4=K@6hxs;|HW_FqKI=rAM0`yOK4aZ2p?nXSA~XhpBh`14=Ab;v6edHJFK5B0lc&sso{|hg1{}g=5j+sgmw}Yr`LRxvJRp-Kf z&I(w`sVt{}z&npB140)6S0kKm``rt=!MxC_>I|Y3M}94 z4B8anZEu0dO$7+AQCjy%^yG$7iAjm>{6RH&`xl>@j!pVSTKgK;{$wzJg3mgm)W+bI zT0}S%UVKa-MI;?~J!0UT|MS3lSl;;O@J^Sx@Zwg%*n_tu$|C>yE&q?tvBu-T!-pwH z%zdU1H*luLD?6$Zu{r*YKF&j_m#3e>c^D{2h?XvV{P53V(fItIWA%c=Ki>v^tUgf- zR`wCeB|BgTK(3~y!7Em!GUJE6$d7cCURJcnC*9|#+V_tp-T!PiE&BZV5`FjzNj zVASUqNQ~H4bPdpT9y03WXMes@8bVbHZ+%?BHtsFHy6}C+ug((Wm{ppaz$CFH=Y=)m z`-Vck20Rc-5|6$H5Di^klQ(ynxi(CiWXfR+C;vwPG&RZiH?5LJdeQ=tS?J?nUBJ~K zJ%5yc?a(RrXZqp7`Df+XO&@t``HVLKt8j1Llp)g@m~%dQa%5y+enS8I?+M@FpNmK3 zz9(m`-ELycyrIQVl>W^K=GbsJVAN`0{ekq>5%T%_2~O2J|9T|OLlPFFE^qW9SCaWb zqnVU}Xn9&pS!uLKXTH$XQ6l&6pVPqyoagHa3x2y_b}-+Yw^JvC22BveGo{RWx~&i7 z<_KEujqbUOz+pW*+sPOxHVnX+tf*=M`JprCdgWzVrZNi9#^xN?gA|_$Z?Kgc zxaoI30xXgC{vM0C|Ia~IOqdd+1q3dSURKD03J`W*zB(r1C%R3`Rl!6?rwI=398)W=w8Yoqw0FdjTa zZ#30-sBEQp3YczDN>q}ucyUCsGfWFZzj(Fi-TSpLdM^Kc!Dr!~Ps`%BtH)X8-sMW8 zYy6!~tle_Ay_3)dh~=wY1&E!H&#buBMuq`TsAL~k{ugL}WiN?s50C;ODp6GDt#%x_ z;wd%kMBOKlps~D^Rm^4+2cR4;Mf!2-q#ACU*lWLkHJ!ZUUYyCv zUYzsaW!h=2otZJVM$o7cvP7kMsLaA+SP+eb2y43LPaBW)3>~HhpPKjQ@jx(9!1PLeo&Z7W#u|+B+k(IS?x85o6G6A)W$P0A)}v`eekjK#z&e zo*>>1rNzTlDS*|ATIsJe6BB4-7P=0xszZyByf>mW0X@J_D6=L-@xjZpnb9-)nj>wt zrWWkLEjFDN1aqN&BpI&=5b$F$QLDTG0aMXkv~8@$hCt0b)rj1z7}P2@;`IxD4B8Um zIJGrd3FMNpXZME5eGkuY+LnK&&!;kR>+5D7MW#tPqUk6cZhxG{#hY(D&dY-Y6r9tE zuCf-Qi#+gcO8@nmGeEQ3W`dGx1#%Sua&$yz*9#*rnc00VnlR~J&>gnN#VP*T(vX?$ z%GuZHQ$6E4jQo(+Rp(;Y)GfQ)Xm-sQ!$JZmA@5C+Jkk~`?|RRj?xJOf zgv}@qrKYjO5aAEkm5EqZF^dlfRtGGbRBQar{kC zHW8Tio*E7Kw1zF$o+;e})2N|GsMpyW0(1j1n?HEPW{REM;#_$!#q@>J&c7Z`RSrAu z`C&Jno_*d~@IL?W^5j51keu`4O$rGWPR>l7SsYHex(NNR3cSB{c&o#;*n_t{7a0^3 zZeR4(^x_GT31i@gKv^CZiGndy?OR9p|8#>SPw<~FLUSue%ESZLDQD6R;r05>l4uuc z{U{nGftj5!DqX@NYN3mDes0=DABW}Je|``8LELf1c0POUz01oND4JXKm!HA;7(;7~ z$SCVj`y`Eo5$ycYH(d69CsztRfJ?3P_@kB72KW_u-q=GlsL2}Nv<-(cw|)LqhmB#k z&txiMNVx8hrQnQadS#dV?7dV3yTV86=!il#Qp#vcW`9T<1$6aRCih8a$7#I#@eY09 zj{*a^D{ijy0Y@iCFDMJMVl*KrEn#-yFixN{WyRTpcGc{Z(-&yTZv5Wz zeYvUq=ZkQCxKxcgJ8`{rJZ(4-^T7%B*xrUYWsE}0>@F@@>A=i26n+oe)+NJZBphFq zv5$#H1zz<%qtpxdv*6;O_Az^7p_e*on1p#b89bj$U2@uuT_H)NiRKgaFDkZW%##A? z`ei1}RbONFNJq~C7f%n**+yIqllT0D*Jsk0t*h&JLtonyN>MKtD`Mfwa)oHgrM!QN zCjU7rA}Db{M92HKM4ucnB1>>KF0ltoHNso~>c4X~2E+;z86N#KJzHJ;J({!oQSa$D zEr=zk(G05vqpGdD=O`{q>T6QLA^LpG-xRYIO+DP4_m+?LI63dy?16d@mEfPoi~HPX zr|;7!i7=zf7bqzYh)C%RNHdDf4R$&Bb5kC(m|okj%=WL(xPSK-&c5AT?hV*!f8;hk)6fsPyTyu<1a8(AOB}mk>^N&v%rS=E z);SFR@0vP(E;HqRzB;Po!WTz4yFZS@h5YSDlavy*9#NRx@|MbM|80NhC^9LzAqS>U z6!JwFsX|>HuO@BUXK<$eRjp9TSbflFPC=0>q!o-P~EFm>r>RC7mZL7N zPNKr1#-PdWaP~F$r}yGX#`&LGMQYj%$Z4}`Q1l7d+UY(=Ct39kbO{R(BWPTt2fMB^7yE4iU#~@m zW-r9DdnzL;-^r1qL!r7Ez0J(NnrV@UF^d(e%UYKXp=35)76tlYYH-bcs6XRA-qC|5 zcrmS4FY{e2kA6?ecN}G3JKG8NI`}ryySH}5HM`?*ylB0iN!S$w6=4p6rb0d2m_cAl zW5Krv^{Gt0euop39nHGEHj!bTKC=0q`(*#+`OlgsD~rcDm3wK-vr>&;3)i#+s|z>$ zLPLjRT;16030PGk2&p+rzSKfcJ)NNIaw4nzwa)0WN&mi>$#9t391&t)%_LF%k*0~J znp$swcghRLx#N%LCx>&U$u}DweVUuwQfs4_5akv5NJ!-z9SUU)%e1fKlP>?1CBQf+ zlR(&I4p|LBvyg+n^}5lJwb)2&r&mkIA$I&i}=&;k4f|Mx4wmd;-bVUfhJ z&jms?*Lx)B+)sTL>e?qf9P`X4**$Px-lJuhmPwE#UkDT&Gnr8^Knzrm51;P1pLB2^ z{iq3i;OrfCvor+CnZzSv1~J=*O4gb|RK}Rd@g+%VfxPLYi2mMJ`NH?)XX5IAewfS# zJpyd1e-eWa$#YJ#uvM4y-;u>eGD4`MA(UZ(5C|F$nVx{$in{TdUuPPl&3?S z0;U*LjK)OyJ6c_PPF_z}>P+1k!6NV9Sp09?|pG;17{5=1iemI@}z3u5yPAuEb z)sD%CugN412t#2&OjDnb#IksTMzUWsaPed`b{d#mxPZ->al9w25mIxf4qO6qEF-cUWU~11h&1F_io9p#rsBm>2 z-dFk?-$vp~W`WZu*P;+Aesn#&(@v9B``eN_5mXXIvRoX^A~}+ES?<_HdwC1u7_Feb z8p3XdBg=Y>cJgo_n(@YJIb1c~&KMbVF)5Md1|z;X?*AZl51dw#yRvu_?r|G$1?f+& zlW~@~x}`VwHA3m4d^DH+(dz^MZ2`a<5*&$`xojBdz_ZWc02)Zk3J_7b0;uFIzpsS4 zre5!$MSRdyu5V*TkyLFA;jZR;daC=NKjviR{H$rG?WxnapSL%}P?JuZ5k_OUmDFPx zLrQKnmb5YB0OUgkb;)EWBr5hclzksJ`Z{8^x3?Vw&y3oCia$N|KJWKVcQvAk zCgv2N4h`*TdqYF_Yi0{WI15l!l?P)rYI9d~LEH|Vn3I!x zpV%{?ts6!;WwV#A1tFe|lPtN+{&MaLnmy_uEvZDmo`EO&9h3wuLN%7O99*=0f;>I#|lYUmXp~p}d*sp?GOpYthaP#YI zlqG8WPP*<|z=YrUw(eo0^J#SM(c<^OZ)^E6FT!6iaT2HKJX9OsBZ};=#H~IyAhQ}X zVy`tTwE>D`P;iS&be_u)$7TvnV9X?id#V!E^};+#Bd@CM=kqW|JbYXn{3HGTqoWf= ztatr&5l=U7NW_(o{LGAKH5&xu9UBCMM1IKTrUSA;F#s>l(i(<=4#(V6WDuLt#rG-4 zy#(raS1}HwWf?h+pK?YVG2h6!=Ysm!g1{EzN>x(8_ghv4YNOAgz#JOwYYm912N0+k zM}Q+TbDsHV+5kkM9S_9&{yT>Fad~U14TOew65>|<0f2=OBe;gTI^}Gc9X>OIyPo%S zbF)2k!hR}WLX#*QwJuVNqJgMuhU6R!JD%+a1V2>G)D_I;AsB$NM?h1>OrV6U+WA8M z%S)isFr-r~!j9FYP@f**;^rzmXlJ`ycfMbD|0Lr6A6)Q>o?gJG32}?&@axYDh2Rtt z=uWdJ;1?h&l$oB(43|A+LQ|ixdunKAiBM%z4BKWvZ>2YAE;mYwqRk}V8?KwBu|(X8 z=$moiiS}8iuy~(EGd9PLP=@}>Aa<&H5HUqgo%6s@U-P{}9?I79V|2P@9Kej(39ibJ+hnh8VRuDa1Y$WzKL5NUcy(U(Z%K5Xn8(3))rTOv3iWbY6);F;IaY z8@)wMQ~3EG$Djy$b$~7OnDfy|lat`c#>uuwvMB8wun)5UZfG&#ESDX+nvLcDv~bkD zc5=q;e@yRtICncyTHsY@@ypN9ikEh*cK&ig*Tn!V_k;sNM2x8XD;4@*5hCHf;fEwe zD~2dZG`l0-Jt)NY5XP=(+T^|6B`6U!*VD`wVpPj7p$kJrK=ZBOTiD?Bfc8UI_cL-f zxz^ZBPJ{Ip;p~to2wDv&i=-A36`FZ~_?i9=kDY#~NtLGPBb0P%{H=3xM%MxY0wy*d z`T8Cra(%u}2hIs1QaiI|my0$0r0cEeK|=n%4hv{(Ef#J~ zhIa@_t1`AgI#v|}^}Y2$#y4z&h8eI|G7%HCe4#NThJ2w{@O(D4?pygfr99RvJgo_! zZ@B&Y@xpG-;aP4g=Ey-_vBPI4`f%PjOX9m4HIQ@Tp`4;Be znCO&DR3e`|2=EQK+Ip_naRPKlrg6e{`B0)vnQ9zrSQP0`CQg8tiHV)n035T^ri;*Q zpGfkrA83lz83ihZ09*k#p&+Fa8;BNj%ZBW zo8K73h`YMp3aJmzSEolYqxqmSQxIz2XaNw;y}4pp(phF{(5qvlC8COyU9!5`y>i+j z;JuSJ1XBNT3ht`8vr>e0O4;9a4=>Hl`gKuv?6;mREJn9p;kBKhzHU{ENMad9*cKGN z1k!d~cx2?zEBD?@0*`Lu49IM`5dQ%fZtwjTpaMh|LPWkPkrE1xUtumtu2g6?9~7nc zXh9zUAp=W_=p6M&3KZrHy&F-THjaNjnRfhn8GN>u`{c+=KKjZ>pO`RKK4=8m+2w|& zR^4X;F@LE90HtZ4@Ny`mJZ7I|fHz2QR{CG9nP@w@Vah!>_xVs|^Dt<_`Tl8giAqG4 z5ziV9#mXQ>?a&oXBqS=Q?L@3g+{MV1MS_Po`Csa8L2mEiQnN^A0X2(Hjib&;f<_xa zM3+PGiVP~?0`cb@GktO#v-%7Gu zdaX8h0kMxX^U{O?fM9Ud#ov4P+dk?2lU~gByf)j2dxVg{h^tQi2Oq*Ref0+-(3`b| z0>Be(V$2fF>##gdm+pawki;OSfK{utQ@T0o)Y;%q*`G79G5q=-kSM4e-rf)s_4n{S z7H$7#zxZc+vCrgHR0b z;)7Ghd&x*>GM6R=SLHiAXpA?CGpt|!>>yI3+_|CU76T|12~7RH+I9Wzv}ERwNBb+e zC*tQl(-x;6g}%4EHowYZz^7GGL@~fi*61(7%7woV$)J(;bA+A9O*@>f5?7EjuY+nv(cb~`9sT27JwMK*p&#=on2DLR}B3NP?}R8>uK^NM<+ zz;&1yB_QSm2w?%htz%LoL>tZPvvpHlA_quE*D&U?wHW#1o)q%$N0mY+xPY^!Dj`+E zh-|Te&pm=K);_97cTv;))yrr~fSQbl{AFIGL|g+re^Xz@inpayX7|-->`cJgOwYNg z2eJB>l|WgEq8S)Vc^Jb&I=deI8Vf$&6hGU2srqyGs46Pj%iFvDjqC=ICZdQL!N?0N z1vL1V)k33X%_{*!aX=}n;zML68{mgf5(TU*A&#s(fD$LzhR&HC(Q+7ZkY>&Q6o5JT zc!U1tm?*gC?W;bE!?(JM)o=3^KBR%lIc1>=UyW-MKep#>wg!?|o&OJ?p|FYyM-x+q zKJ!T%ghOmyFw0iSfZ)h$|AR0wP+ner-tenj;SdcGGX;cn4fm-$_aE(=Kh(Vw-kC{Q zgeeu{t6J7D2H-kLHMK&Y2~ejOfPQFVOU=Aba0LQWs4)zc5|#G#?H$awwzjs75w~oh zR*@tg1cZt9MLWKoRe5Kk4b+GpOQFI9l+#(~ZQuo2g)73R+@zbZ4&E+FRVir|* znf~>VZqywrAF%&r?N5jIE*Kl&1`C;LFA7SB9w{F>V03;tfR(S}{>c4w%=hWY+PS3` zLWnM6y(j{aBt5RbQ53+%Hz4=qwm8vnE*?N%wUi<>7?hm;p t;q} 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%0Ahnb{z4(l**d~68z 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%0AQJNF7NBHr!hn(3qm^$;0K^GoyD+fJ_OB*Ki`a8j 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