Chatterbox fine-tuned model + logs
Browse files- training.log +3 -218
training.log
CHANGED
|
@@ -5,222 +5,7 @@ Resolved paths:
|
|
| 5 |
|
| 6 |
Starting training...
|
| 7 |
|
| 8 |
-
/usr/local/lib/python3.13/site-packages/perth/perth_net/__init__.py:1: UserWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html. The pkg_resources package is slated for removal as early as 2025-11-30. Refrain from using this package or pin to Setuptools<81.
|
| 9 |
-
from pkg_resources import resource_filename
|
| 10 |
-
02/08/2026 23:54:54 - INFO - __main__ - Training/evaluation parameters CustomTrainingArguments(
|
| 11 |
-
accelerator_config={'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None, 'use_configured_state': False},
|
| 12 |
-
adam_beta1=0.9,
|
| 13 |
-
adam_beta2=0.999,
|
| 14 |
-
adam_epsilon=1e-08,
|
| 15 |
-
auto_find_batch_size=False,
|
| 16 |
-
average_tokens_across_devices=True,
|
| 17 |
-
batch_eval_metrics=False,
|
| 18 |
-
bf16=False,
|
| 19 |
-
bf16_full_eval=False,
|
| 20 |
-
data_seed=None,
|
| 21 |
-
dataloader_drop_last=False,
|
| 22 |
-
dataloader_num_workers=8,
|
| 23 |
-
dataloader_persistent_workers=False,
|
| 24 |
-
dataloader_pin_memory=False,
|
| 25 |
-
dataloader_prefetch_factor=None,
|
| 26 |
-
ddp_backend=None,
|
| 27 |
-
ddp_broadcast_buffers=None,
|
| 28 |
-
ddp_bucket_cap_mb=None,
|
| 29 |
-
ddp_find_unused_parameters=None,
|
| 30 |
-
ddp_timeout=1800,
|
| 31 |
-
debug=[],
|
| 32 |
-
deepspeed=None,
|
| 33 |
-
disable_tqdm=False,
|
| 34 |
-
do_eval=True,
|
| 35 |
-
do_predict=False,
|
| 36 |
-
do_train=True,
|
| 37 |
-
early_stopping_patience=None,
|
| 38 |
-
enable_jit_checkpoint=False,
|
| 39 |
-
eval_accumulation_steps=None,
|
| 40 |
-
eval_delay=0,
|
| 41 |
-
eval_do_concat_batches=True,
|
| 42 |
-
eval_on_start=True,
|
| 43 |
-
eval_steps=2,
|
| 44 |
-
eval_strategy=IntervalStrategy.STEPS,
|
| 45 |
-
eval_use_gather_object=False,
|
| 46 |
-
fp16=True,
|
| 47 |
-
fp16_full_eval=False,
|
| 48 |
-
fsdp=[],
|
| 49 |
-
fsdp_config={'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False},
|
| 50 |
-
full_determinism=False,
|
| 51 |
-
gradient_accumulation_steps=1,
|
| 52 |
-
gradient_checkpointing=False,
|
| 53 |
-
gradient_checkpointing_kwargs=None,
|
| 54 |
-
greater_is_better=None,
|
| 55 |
-
group_by_length=False,
|
| 56 |
-
hub_always_push=False,
|
| 57 |
-
hub_model_id=None,
|
| 58 |
-
hub_private_repo=None,
|
| 59 |
-
hub_revision=None,
|
| 60 |
-
hub_strategy=HubStrategy.EVERY_SAVE,
|
| 61 |
-
hub_token=<HUB_TOKEN>,
|
| 62 |
-
ignore_data_skip=False,
|
| 63 |
-
include_for_metrics=[],
|
| 64 |
-
include_num_input_tokens_seen=no,
|
| 65 |
-
label_names=['labels_speech'],
|
| 66 |
-
label_smoothing_factor=0.0,
|
| 67 |
-
learning_rate=5e-05,
|
| 68 |
-
length_column_name=length,
|
| 69 |
-
liger_kernel_config=None,
|
| 70 |
-
load_best_model_at_end=False,
|
| 71 |
-
local_rank=-1,
|
| 72 |
-
log_level=passive,
|
| 73 |
-
log_level_replica=warning,
|
| 74 |
-
log_on_each_node=True,
|
| 75 |
-
logging_dir=None,
|
| 76 |
-
logging_first_step=False,
|
| 77 |
-
logging_nan_inf_filter=True,
|
| 78 |
-
logging_steps=1.0,
|
| 79 |
-
logging_strategy=IntervalStrategy.STEPS,
|
| 80 |
-
lr_scheduler_kwargs=None,
|
| 81 |
-
lr_scheduler_type=SchedulerType.LINEAR,
|
| 82 |
-
max_grad_norm=1.0,
|
| 83 |
-
max_steps=-1,
|
| 84 |
-
metric_for_best_model=None,
|
| 85 |
-
neftune_noise_alpha=None,
|
| 86 |
-
num_train_epochs=1.0,
|
| 87 |
-
optim=OptimizerNames.ADAMW_TORCH_FUSED,
|
| 88 |
-
optim_args=None,
|
| 89 |
-
optim_target_modules=None,
|
| 90 |
-
output_dir=/app/checkpoints/v1,
|
| 91 |
-
parallelism_config=None,
|
| 92 |
-
per_device_eval_batch_size=8,
|
| 93 |
-
per_device_train_batch_size=1,
|
| 94 |
-
prediction_loss_only=False,
|
| 95 |
-
project=huggingface,
|
| 96 |
-
push_to_hub=False,
|
| 97 |
-
remove_unused_columns=True,
|
| 98 |
-
report_to=['tensorboard'],
|
| 99 |
-
restore_callback_states_from_checkpoint=False,
|
| 100 |
-
resume_from_checkpoint=None,
|
| 101 |
-
run_name=None,
|
| 102 |
-
save_on_each_node=False,
|
| 103 |
-
save_only_model=False,
|
| 104 |
-
save_steps=1.0,
|
| 105 |
-
save_strategy=SaveStrategy.STEPS,
|
| 106 |
-
save_total_limit=1,
|
| 107 |
-
seed=42,
|
| 108 |
-
skip_memory_metrics=True,
|
| 109 |
-
tf32=None,
|
| 110 |
-
torch_compile=False,
|
| 111 |
-
torch_compile_backend=None,
|
| 112 |
-
torch_compile_mode=None,
|
| 113 |
-
torch_empty_cache_steps=None,
|
| 114 |
-
trackio_space_id=trackio,
|
| 115 |
-
use_cache=False,
|
| 116 |
-
use_cpu=False,
|
| 117 |
-
use_liger_kernel=False,
|
| 118 |
-
warmup_ratio=None,
|
| 119 |
-
warmup_steps=1.0,
|
| 120 |
-
weight_decay=0.0,
|
| 121 |
-
)
|
| 122 |
-
02/08/2026 23:54:54 - INFO - __main__ - Model parameters ModelArguments(model_name_or_path='/app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9', local_model_dir=None, cache_dir=None, freeze_voice_encoder=True, freeze_s3gen=True)
|
| 123 |
-
02/08/2026 23:54:54 - INFO - __main__ - Data parameters DataArguments(language='hi', dataset_dir=None, metadata_file=None, dataset_name='rahul7star/hindi-speech-dataset', dataset_config_name=None, train_split_name='train', eval_split_name='validation', text_column_name='transcript', audio_column_name='audio', max_text_len=256, max_speech_len=800, audio_prompt_duration_s=3.0, eval_split_size=0.0002, preprocessing_num_workers=None, ignore_verifications=False)
|
| 124 |
-
02/08/2026 23:54:54 - INFO - __main__ - Loading ChatterboxTTS model...
|
| 125 |
-
02/08/2026 23:54:54 - INFO - __main__ - Loading model from Hugging Face Hub: /app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9
|
| 126 |
-
02/08/2026 23:54:54 - WARNING - __main__ - Could not download ve.safetensors from /app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9'. Use `repo_type` argument if needed..
|
| 127 |
-
02/08/2026 23:54:54 - WARNING - __main__ - Could not download t3_mtl23ls_v2.safetensors from /app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9'. Use `repo_type` argument if needed..
|
| 128 |
-
02/08/2026 23:54:54 - WARNING - __main__ - Could not download s3gen.safetensors from /app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9'. Use `repo_type` argument if needed..
|
| 129 |
-
02/08/2026 23:54:54 - WARNING - __main__ - Could not download mtl_tokenizer.json from /app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '/app/hf_cache/models--ResembleAI--chatterbox/snapshots/05e904af2b5c7f8e482687a9d7336c5c824467d9'. Use `repo_type` argument if needed..
|
| 130 |
-
02/08/2026 23:54:54 - INFO - __main__ - conds.pt not found on Hub or failed to download for this model.
|
| 131 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/models/ResembleAI/chatterbox/revision/main "HTTP/1.1 200 OK"
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
Downloading (incomplete total...): 0.00B [00:00, ?B/s][A
|
| 135 |
-
|
| 136 |
-
Fetching 6 files: 0%| | 0/6 [00:00<?, ?it/s][A02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/ResembleAI/chatterbox/resolve/05e904af2b5c7f8e482687a9d7336c5c824467d9/Cangjie5_TC.json "HTTP/1.1 307 Temporary Redirect"
|
| 137 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/ResembleAI/chatterbox/resolve/05e904af2b5c7f8e482687a9d7336c5c824467d9/conds.pt "HTTP/1.1 302 Found"
|
| 138 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/ResembleAI/chatterbox/resolve/05e904af2b5c7f8e482687a9d7336c5c824467d9/grapheme_mtl_merged_expanded_v1.json "HTTP/1.1 307 Temporary Redirect"
|
| 139 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/ResembleAI/chatterbox/resolve/05e904af2b5c7f8e482687a9d7336c5c824467d9/t3_mtl23ls_v2.safetensors "HTTP/1.1 302 Found"
|
| 140 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/ResembleAI/chatterbox/resolve/05e904af2b5c7f8e482687a9d7336c5c824467d9/ve.pt "HTTP/1.1 302 Found"
|
| 141 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/api/resolve-cache/models/ResembleAI/chatterbox/05e904af2b5c7f8e482687a9d7336c5c824467d9/Cangjie5_TC.json "HTTP/1.1 200 OK"
|
| 142 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/api/resolve-cache/models/ResembleAI/chatterbox/05e904af2b5c7f8e482687a9d7336c5c824467d9/grapheme_mtl_merged_expanded_v1.json "HTTP/1.1 200 OK"
|
| 143 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: HEAD https://huggingface.co/ResembleAI/chatterbox/resolve/05e904af2b5c7f8e482687a9d7336c5c824467d9/s3gen.pt "HTTP/1.1 302 Found"
|
| 144 |
-
02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/models/ResembleAI/chatterbox/xet-read-token/05e904af2b5c7f8e482687a9d7336c5c824467d9 "HTTP/1.1 200 OK"
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
Downloading (incomplete total...): 0%| | 0.00/2.14G [00:00<?, ?B/s][A02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/models/ResembleAI/chatterbox/xet-read-token/05e904af2b5c7f8e482687a9d7336c5c824467d9 "HTTP/1.1 200 OK"
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
Downloading (incomplete total...): 0%| | 0.00/2.14G [00:00<?, ?B/s][A02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/models/ResembleAI/chatterbox/xet-read-token/05e904af2b5c7f8e482687a9d7336c5c824467d9 "HTTP/1.1 200 OK"
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
Downloading (incomplete total...): 0%| | 0.00/2.15G [00:00<?, ?B/s][A02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/models/ResembleAI/chatterbox/xet-read-token/05e904af2b5c7f8e482687a9d7336c5c824467d9 "HTTP/1.1 200 OK"
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
Downloading (incomplete total...): 0%| | 0.00/3.21G [00:00<?, ?B/s][A02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/resolve-cache/models/ResembleAI/chatterbox/05e904af2b5c7f8e482687a9d7336c5c824467d9/grapheme_mtl_merged_expanded_v1.json "HTTP/1.1 200 OK"
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
Downloading (incomplete total...): 0%| | 0.00/3.21G [00:00<?, ?B/s][A02/08/2026 23:54:54 - INFO - httpx - HTTP Request: GET https://huggingface.co/api/resolve-cache/models/ResembleAI/chatterbox/05e904af2b5c7f8e482687a9d7336c5c824467d9/Cangjie5_TC.json "HTTP/1.1 200 OK"
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
Downloading (incomplete total...): 0%| | 70.0k/3.21G [00:00<50:21, 1.06MB/s][A
|
| 163 |
-
|
| 164 |
-
Downloading (incomplete total...): 0%| | 15.4M/3.21G [00:02<07:59, 6.66MB/s][A
|
| 165 |
-
|
| 166 |
-
Downloading (incomplete total...): 3%|▎ | 82.5M/3.21G [00:04<02:16, 22.8MB/s][A
|
| 167 |
-
|
| 168 |
-
Downloading (incomplete total...): 8%|▊ | 268M/3.21G [00:05<00:49, 59.2MB/s] [A
|
| 169 |
-
|
| 170 |
-
Downloading (incomplete total...): 10%|█ | 335M/3.21G [00:07<00:50, 56.5MB/s][A
|
| 171 |
-
|
| 172 |
-
Downloading (incomplete total...): 26%|██▌ | 825M/3.21G [00:08<00:14, 166MB/s] [A
|
| 173 |
-
|
| 174 |
-
Downloading (incomplete total...): 41%|████ | 1.31G/3.21G [00:10<00:09, 203MB/s][A
|
| 175 |
-
|
| 176 |
-
Downloading (incomplete total...): 50%|████▉ | 1.59G/3.21G [00:11<00:07, 210MB/s][A
|
| 177 |
-
|
| 178 |
-
Fetching 6 files: 67%|██████▋ | 4/6 [00:11<00:05, 2.97s/it][A
|
| 179 |
-
|
| 180 |
-
Downloading (incomplete total...): 91%|█████████ | 2.92G/3.21G [00:12<00:00, 483MB/s][A
|
| 181 |
-
Fetching 6 files: 100%|██████████| 6/6 [00:12<00:00, 2.06s/it]
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
Download complete: 100%|██████████| 3.21G/3.21G [00:12<00:00, 483MB/s] [A
|
| 185 |
-
Download complete: 100%|██████████| 3.21G/3.21G [00:25<00:00, 128MB/s]
|
| 186 |
-
/usr/local/lib/python3.13/site-packages/diffusers/models/lora.py:393: FutureWarning: `LoRACompatibleLinear` is deprecated and will be removed in version 1.0.0. Use of `LoRACompatibleLinear` is deprecated. Please switch to PEFT backend by installing PEFT: `pip install peft`.
|
| 187 |
-
deprecate("LoRACompatibleLinear", "1.0.0", deprecation_message)
|
| 188 |
-
02/08/2026 23:55:21 - INFO - root - input frame rate=25
|
| 189 |
Traceback (most recent call last):
|
| 190 |
-
File "/app/chatterbox-multilingual-finetuning/src/finetune_t3.py", line
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
File "/app/chatterbox-multilingual-finetuning/src/finetune_t3.py", line 616, in main
|
| 194 |
-
chatterbox_model = ChatterboxMultilingualTTS.from_pretrained(device="cpu")
|
| 195 |
-
File "/app/chatterbox-multilingual-finetuning/src/chatterbox/mtl_tts.py", line 203, in from_pretrained
|
| 196 |
-
return cls.from_local(ckpt_dir, device)
|
| 197 |
-
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
| 198 |
-
File "/app/chatterbox-multilingual-finetuning/src/chatterbox/mtl_tts.py", line 174, in from_local
|
| 199 |
-
s3gen.load_state_dict(torch.load(ckpt_dir / "s3gen.pt", weights_only=True))
|
| 200 |
-
~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 201 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 1540, in load
|
| 202 |
-
return _load(
|
| 203 |
-
opened_zipfile,
|
| 204 |
-
...<3 lines>...
|
| 205 |
-
**pickle_load_args,
|
| 206 |
-
)
|
| 207 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 2143, in _load
|
| 208 |
-
result = unpickler.load()
|
| 209 |
-
File "/usr/local/lib/python3.13/site-packages/torch/_weights_only_unpickler.py", line 539, in load
|
| 210 |
-
self.append(self.persistent_load(pid))
|
| 211 |
-
~~~~~~~~~~~~~~~~~~~~^^^^^
|
| 212 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 2107, in persistent_load
|
| 213 |
-
typed_storage = load_tensor(
|
| 214 |
-
dtype, nbytes, key, _maybe_decode_ascii(location)
|
| 215 |
-
)
|
| 216 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 2073, in load_tensor
|
| 217 |
-
wrap_storage = restore_location(storage, location)
|
| 218 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 707, in default_restore_location
|
| 219 |
-
result = fn(storage, location)
|
| 220 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 640, in _deserialize
|
| 221 |
-
device = _validate_device(location, backend_name)
|
| 222 |
-
File "/usr/local/lib/python3.13/site-packages/torch/serialization.py", line 609, in _validate_device
|
| 223 |
-
raise RuntimeError(
|
| 224 |
-
...<5 lines>...
|
| 225 |
-
)
|
| 226 |
-
RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.
|
|
|
|
| 5 |
|
| 6 |
Starting training...
|
| 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
Traceback (most recent call last):
|
| 9 |
+
File "/app/chatterbox-multilingual-finetuning/src/finetune_t3.py", line 19, in <module>
|
| 10 |
+
from src.models.t3 import T3
|
| 11 |
+
ModuleNotFoundError: No module named 'src'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|