Instructions to use Kijai/LTX2.3_comfy with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Diffusion Single File
How to use Kijai/LTX2.3_comfy with Diffusion Single File:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
ltx pruna vae doesnt work.
ltx pruna vae doesnt work in comfyui. Getting size mismatch error.
Just update ComfyUI and your custom nodes, and it will work perfectly.
Yes it needs latest ComfyUI commits.
I just did full update of comfy (0.29.0) as well as kjnodes (1.4.8) and LTXVideo (nightly) and all the other ones that are updatable, and when I use the Pruna VAE, I get these errors:
[INFO] got prompt
[ERROR] !!! Exception during processing !!! Error(s) in loading state_dict for VideoVAE:
size mismatch for decoder.conv_in.conv.weight: copying a param with shape torch.Size([1024, 128, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 128, 3, 3, 3]).
size mismatch for decoder.conv_in.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv1.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv1.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv2.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv2.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv1.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv1.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv2.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv2.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.1.conv.conv.weight: copying a param with shape torch.Size([4096, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([8192, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.1.conv.conv.bias: copying a param with shape torch.Size([4096]) from checkpoint, the shape in current model is torch.Size([8192]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv1.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv1.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv2.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv2.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv1.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv1.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv2.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv2.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.3.conv1.conv.weight: copying a param with shape torch.Size([384, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.3.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.3.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.3.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.3.conv_shortcut.weight: copying a param with shape torch.Size([384, 512, 1, 1, 1]) from checkpoint, the shape in current model is torch.Size([512, 1024, 1, 1, 1]).
size mismatch for decoder.up_blocks.3.conv_shortcut.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.3.norm3.norm.weight: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.3.norm3.norm.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.4.conv.conv.weight: copying a param with shape torch.Size([3072, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([4096, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.4.conv.conv.bias: copying a param with shape torch.Size([3072]) from checkpoint, the shape in current model is torch.Size([4096]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.6.conv1.conv.weight: copying a param with shape torch.Size([256, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.6.conv_shortcut.weight: copying a param with shape torch.Size([256, 384, 1, 1, 1]) from checkpoint, the shape in current model is torch.Size([256, 512, 1, 1, 1]).
size mismatch for decoder.up_blocks.6.norm3.norm.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.6.norm3.norm.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
[ERROR] Traceback (most recent call last):
File "/Users/mike/ComfyUI-Installs/ComfyUI/ComfyUI/execution.py", line 543, in execute
output_data, output_ui, has_subgraph, has_pending_tasks = await get_output_data(prompt_id, unique_id, obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/mike/ComfyUI-Installs/ComfyUI/ComfyUI/execution.py", line 342, in get_output_data
return_values = await _async_map_node_over_list(prompt_id, unique_id, obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, v3_data=v3_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/mike/ComfyUI-Installs/ComfyUI/ComfyUI/execution.py", line 316, in _async_map_node_over_list
await process_inputs(input_dict, i)
File "/Users/mike/ComfyUI-Installs/ComfyUI/ComfyUI/execution.py", line 304, in process_inputs
result = f(**inputs)
^^^^^^^^^^^
File "/Users/mike/Documents/ComfyUI/custom_nodes/comfyui-kjnodes/nodes/nodes.py", line 2425, in load_vae
vae = VAE(sd=sd, device=device, dtype=dtype, metadata=metadata)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/mike/ComfyUI-Installs/ComfyUI/ComfyUI/comfy/sd.py", line 973, in init
m, u = self.first_stage_model.load_state_dict(sd, strict=False, assign=self.patcher.is_dynamic())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/mike/Documents/ComfyUI/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py", line 2638, in load_state_dict
raise RuntimeError(
RuntimeError: Error(s) in loading state_dict for VideoVAE:
size mismatch for decoder.conv_in.conv.weight: copying a param with shape torch.Size([1024, 128, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 128, 3, 3, 3]).
size mismatch for decoder.conv_in.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv1.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv1.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv2.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.0.conv2.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv1.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv1.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv2.conv.weight: copying a param with shape torch.Size([1024, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([2048, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.0.res_blocks.1.conv2.conv.bias: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([2048]).
size mismatch for decoder.up_blocks.1.conv.conv.weight: copying a param with shape torch.Size([4096, 1024, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([8192, 2048, 3, 3, 3]).
size mismatch for decoder.up_blocks.1.conv.conv.bias: copying a param with shape torch.Size([4096]) from checkpoint, the shape in current model is torch.Size([8192]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv1.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv1.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv2.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.0.conv2.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv1.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv1.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv2.conv.weight: copying a param with shape torch.Size([512, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([1024, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.2.res_blocks.1.conv2.conv.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.3.conv1.conv.weight: copying a param with shape torch.Size([384, 512, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 1024, 3, 3, 3]).
size mismatch for decoder.up_blocks.3.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.3.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.3.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.3.conv_shortcut.weight: copying a param with shape torch.Size([384, 512, 1, 1, 1]) from checkpoint, the shape in current model is torch.Size([512, 1024, 1, 1, 1]).
size mismatch for decoder.up_blocks.3.conv_shortcut.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.3.norm3.norm.weight: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.3.norm3.norm.bias: copying a param with shape torch.Size([512]) from checkpoint, the shape in current model is torch.Size([1024]).
size mismatch for decoder.up_blocks.4.conv.conv.weight: copying a param with shape torch.Size([3072, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([4096, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.4.conv.conv.bias: copying a param with shape torch.Size([3072]) from checkpoint, the shape in current model is torch.Size([4096]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.0.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.1.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.2.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv1.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv1.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv2.conv.weight: copying a param with shape torch.Size([384, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([512, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.5.res_blocks.3.conv2.conv.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.6.conv1.conv.weight: copying a param with shape torch.Size([256, 384, 3, 3, 3]) from checkpoint, the shape in current model is torch.Size([256, 512, 3, 3, 3]).
size mismatch for decoder.up_blocks.6.conv_shortcut.weight: copying a param with shape torch.Size([256, 384, 1, 1, 1]) from checkpoint, the shape in current model is torch.Size([256, 512, 1, 1, 1]).
size mismatch for decoder.up_blocks.6.norm3.norm.weight: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
size mismatch for decoder.up_blocks.6.norm3.norm.bias: copying a param with shape torch.Size([384]) from checkpoint, the shape in current model is torch.Size([512]).
It needs latest commit, it isn't in any numbered ComfyUI version yet: https://github.com/Comfy-Org/ComfyUI/commit/c38171ddb93368ee6a6bbc677b92e4b50cead865
