waldiez 0.1.18__tar.gz → 0.1.20__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of waldiez might be problematic. Click here for more details.
- {waldiez-0.1.18 → waldiez-0.1.20}/PKG-INFO +1 -1
- {waldiez-0.1.18 → waldiez-0.1.20}/pyproject.toml +1 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/__init__.py +3 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/_version.py +1 -1
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/model/__init__.py +2 -1
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/model/model.py +37 -2
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/runner.py +108 -19
- {waldiez-0.1.18 → waldiez-0.1.20}/.gitignore +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/LICENSE +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/README.md +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/__main__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/cli.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/conflict_checker.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporter.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/agent.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/agent_skills.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/code_execution.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/group_manager.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/llm_config.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/chroma_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/mongo_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/pgvector_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/qdrant_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/rag_user.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/rag_user/vector_db.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/teachability.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/agents/termination_message.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/chats/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/chats/chats.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/chats/helpers.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/chats/nested.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/flow/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/flow/def_main.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/flow/flow.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/models/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/skills/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/comments.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/importing.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/logging_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/method_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/naming.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/object_string.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/exporting/utils/path_check.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/agent.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/agent_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/code_execution.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/linked_skill.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/nested_chat.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/teachability.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agent/termination_message.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/agents.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/assistant/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/assistant/assistant.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/assistant/assistant_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/group_manager/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/group_manager/group_manager.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/group_manager/group_manager_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/group_manager/speakers.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/rag_user/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/rag_user/rag_user.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/rag_user/rag_user_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/rag_user/retrieve_config.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/rag_user/vector_db_config.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/user_proxy/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/user_proxy/user_proxy.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/agents/user_proxy/user_proxy_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/chat/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/chat/chat.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/chat/chat_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/chat/chat_message.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/chat/chat_nested.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/chat/chat_summary.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/common/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/common/base.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/common/method_utils.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/flow/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/flow/flow.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/flow/flow_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/model/model_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/skill/__init__.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/skill/skill.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/skill/skill_data.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/models/waldiez.py +0 -0
- {waldiez-0.1.18 → waldiez-0.1.20}/waldiez/py.typed +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Waldiez package."""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
import warnings
|
|
4
5
|
|
|
5
6
|
from ._version import __version__
|
|
6
7
|
from .conflict_checker import check_conflicts
|
|
@@ -8,6 +9,8 @@ from .exporter import WaldiezExporter
|
|
|
8
9
|
from .models import Waldiez
|
|
9
10
|
from .runner import WaldiezRunner
|
|
10
11
|
|
|
12
|
+
warnings.filterwarnings("ignore", "flaml.automl is not available")
|
|
13
|
+
|
|
11
14
|
|
|
12
15
|
# pylint: disable=too-few-public-methods
|
|
13
16
|
class FlamlFilter(logging.Filter):
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Waldiez model."""
|
|
2
2
|
|
|
3
|
-
from .model import WaldiezModel
|
|
3
|
+
from .model import DEFAULT_BASE_URLS, WaldiezModel
|
|
4
4
|
from .model_data import WaldiezModelAPIType, WaldiezModelData, WaldiezModelPrice
|
|
5
5
|
|
|
6
6
|
__all__ = [
|
|
7
|
+
"DEFAULT_BASE_URLS",
|
|
7
8
|
"WaldiezModel",
|
|
8
9
|
"WaldiezModelData",
|
|
9
10
|
"WaldiezModelPrice",
|
|
@@ -7,7 +7,16 @@ from pydantic import Field
|
|
|
7
7
|
from typing_extensions import Annotated, Literal
|
|
8
8
|
|
|
9
9
|
from ..common import WaldiezBase, now
|
|
10
|
-
from .model_data import WaldiezModelData
|
|
10
|
+
from .model_data import WaldiezModelAPIType, WaldiezModelData
|
|
11
|
+
|
|
12
|
+
DEFAULT_BASE_URLS: Dict[WaldiezModelAPIType, str] = {
|
|
13
|
+
"google": "https://generativelanguage.googleapis.com/v1beta",
|
|
14
|
+
"anthropic": "https://api.anthropic.com/v1",
|
|
15
|
+
"mistral": "https://api.mistral.ai/v1",
|
|
16
|
+
"groq": "https://api.groq.com/openai/v1",
|
|
17
|
+
"together": "https://api.together.xyz/v1",
|
|
18
|
+
"nim": "https://integrate.api.nvidia.com/v1",
|
|
19
|
+
}
|
|
11
20
|
|
|
12
21
|
|
|
13
22
|
class WaldiezModel(WaldiezBase):
|
|
@@ -166,4 +175,30 @@ class WaldiezModel(WaldiezBase):
|
|
|
166
175
|
value = getattr(self, attr)
|
|
167
176
|
if value:
|
|
168
177
|
_llm_config[attr] = value
|
|
169
|
-
return _llm_config
|
|
178
|
+
return set_default_base_url(_llm_config, self.data.api_type)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def set_default_base_url(
|
|
182
|
+
llm_config: Dict[str, Any], api_type: WaldiezModelAPIType
|
|
183
|
+
) -> Dict[str, Any]:
|
|
184
|
+
"""Set the default base url if not provided.
|
|
185
|
+
|
|
186
|
+
Parameters
|
|
187
|
+
----------
|
|
188
|
+
llm_config : Dict[str, Any]
|
|
189
|
+
The llm config dictionary.
|
|
190
|
+
api_type : str
|
|
191
|
+
The api type.
|
|
192
|
+
|
|
193
|
+
Returns
|
|
194
|
+
-------
|
|
195
|
+
Dict[str, Any]
|
|
196
|
+
The llm config dictionary with the default base url set.
|
|
197
|
+
"""
|
|
198
|
+
if api_type in ("openai", "other", "azure"):
|
|
199
|
+
return llm_config
|
|
200
|
+
if "base_url" not in llm_config or not llm_config["base_url"]:
|
|
201
|
+
dict_copy = llm_config.copy()
|
|
202
|
+
dict_copy["base_url"] = DEFAULT_BASE_URLS.get(api_type, "")
|
|
203
|
+
return dict_copy
|
|
204
|
+
return llm_config
|
|
@@ -7,6 +7,8 @@ return the results. Before running the flow, any additional environment
|
|
|
7
7
|
variables specified in the waldiez file are set.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
# pylint: disable=import-outside-toplevel,reimported
|
|
11
|
+
|
|
10
12
|
import datetime
|
|
11
13
|
import importlib.util
|
|
12
14
|
import io
|
|
@@ -16,6 +18,7 @@ import site
|
|
|
16
18
|
import subprocess # nosemgrep # nosec
|
|
17
19
|
import sys
|
|
18
20
|
import tempfile
|
|
21
|
+
import warnings
|
|
19
22
|
from contextlib import contextmanager
|
|
20
23
|
from pathlib import Path
|
|
21
24
|
from types import TracebackType
|
|
@@ -26,6 +29,7 @@ from typing import (
|
|
|
26
29
|
Iterator,
|
|
27
30
|
List,
|
|
28
31
|
Optional,
|
|
32
|
+
Tuple,
|
|
29
33
|
Type,
|
|
30
34
|
Union,
|
|
31
35
|
)
|
|
@@ -59,11 +63,6 @@ def _chdir(to: Union[str, Path]) -> Iterator[None]:
|
|
|
59
63
|
os.chdir(old_cwd)
|
|
60
64
|
|
|
61
65
|
|
|
62
|
-
def refresh_site_packages() -> None:
|
|
63
|
-
"""Refresh the site packages."""
|
|
64
|
-
site.main()
|
|
65
|
-
|
|
66
|
-
|
|
67
66
|
class WaldiezRunner:
|
|
68
67
|
"""Waldiez runner class."""
|
|
69
68
|
|
|
@@ -75,6 +74,7 @@ class WaldiezRunner:
|
|
|
75
74
|
self._running = False
|
|
76
75
|
self._file_path = file_path
|
|
77
76
|
self._exporter = WaldiezExporter(waldiez)
|
|
77
|
+
self._called_install_requirements = False
|
|
78
78
|
|
|
79
79
|
@classmethod
|
|
80
80
|
def load(
|
|
@@ -147,8 +147,10 @@ class WaldiezRunner:
|
|
|
147
147
|
"""Get the running status."""
|
|
148
148
|
return self._running
|
|
149
149
|
|
|
150
|
-
def
|
|
150
|
+
def install_requirements(self) -> None:
|
|
151
151
|
"""Install the requirements for the flow."""
|
|
152
|
+
self._called_install_requirements = True
|
|
153
|
+
printer = get_printer()
|
|
152
154
|
extra_requirements = set(
|
|
153
155
|
req for req in self.waldiez.requirements if req not in sys.modules
|
|
154
156
|
)
|
|
@@ -169,13 +171,7 @@ class WaldiezRunner:
|
|
|
169
171
|
if proc.stderr:
|
|
170
172
|
for line in io.TextIOWrapper(proc.stderr, encoding="utf-8"):
|
|
171
173
|
printer(line.strip())
|
|
172
|
-
|
|
173
|
-
refresh_site_packages()
|
|
174
|
-
printer(
|
|
175
|
-
"Requirements installed.\n"
|
|
176
|
-
"NOTE: If new packages were added and you are using Jupyter, "
|
|
177
|
-
"you might need to restart the kernel."
|
|
178
|
-
)
|
|
174
|
+
refresh_environment()
|
|
179
175
|
|
|
180
176
|
@staticmethod
|
|
181
177
|
def _after_run(
|
|
@@ -245,11 +241,16 @@ class WaldiezRunner:
|
|
|
245
241
|
Union[ChatResult, List[ChatResult]]
|
|
246
242
|
The result(s) of the chat(s).
|
|
247
243
|
"""
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
244
|
+
if not self._called_install_requirements:
|
|
245
|
+
self.install_requirements()
|
|
246
|
+
else:
|
|
247
|
+
refresh_environment()
|
|
248
|
+
printer = get_printer()
|
|
249
|
+
printer(
|
|
250
|
+
"Requirements installed.\n"
|
|
251
|
+
"NOTE: If new packages were added and you are using Jupyter, "
|
|
252
|
+
"you might need to restart the kernel."
|
|
253
|
+
)
|
|
253
254
|
results: Union["ChatResult", List["ChatResult"]] = []
|
|
254
255
|
if not uploads_root:
|
|
255
256
|
uploads_root = Path(tempfile.mkdtemp())
|
|
@@ -277,7 +278,7 @@ class WaldiezRunner:
|
|
|
277
278
|
old_vars = self._set_env_vars()
|
|
278
279
|
module = importlib.util.module_from_spec(spec)
|
|
279
280
|
spec.loader.exec_module(module)
|
|
280
|
-
printer("Starting workflow...")
|
|
281
|
+
printer("<Waldiez> - Starting workflow...")
|
|
281
282
|
results = module.main()
|
|
282
283
|
sys.path.pop(0)
|
|
283
284
|
self._reset_env_vars(old_vars)
|
|
@@ -329,3 +330,91 @@ def in_virtualenv() -> bool:
|
|
|
329
330
|
return hasattr(sys, "real_prefix") or (
|
|
330
331
|
hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
|
|
331
332
|
)
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def refresh_environment() -> None:
|
|
336
|
+
"""Refresh the environment."""
|
|
337
|
+
# backup the default IOStream
|
|
338
|
+
from autogen.io import IOStream # type: ignore
|
|
339
|
+
|
|
340
|
+
default_io_stream = IOStream.get_default()
|
|
341
|
+
site.main()
|
|
342
|
+
# pylint: disable=import-outside-toplevel
|
|
343
|
+
modules_to_reload = [
|
|
344
|
+
mod for mod in sys.modules if mod.startswith("autogen")
|
|
345
|
+
]
|
|
346
|
+
for mod in modules_to_reload:
|
|
347
|
+
del sys.modules[mod]
|
|
348
|
+
import autogen
|
|
349
|
+
from autogen.io import IOStream
|
|
350
|
+
|
|
351
|
+
importlib.reload(autogen)
|
|
352
|
+
# restore the default IOStream
|
|
353
|
+
IOStream.set_global_default(default_io_stream)
|
|
354
|
+
warnings.filterwarnings("ignore", "flaml.automl is not available")
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def get_printer() -> Callable[..., None]:
|
|
358
|
+
"""Get the printer function.
|
|
359
|
+
|
|
360
|
+
Returns
|
|
361
|
+
-------
|
|
362
|
+
Callable[..., None]
|
|
363
|
+
The printer function.
|
|
364
|
+
"""
|
|
365
|
+
from autogen.io import IOStream
|
|
366
|
+
|
|
367
|
+
printer = IOStream.get_default().print
|
|
368
|
+
|
|
369
|
+
def safe_printer(*args: object, **kwargs: object) -> None:
|
|
370
|
+
try:
|
|
371
|
+
printer(*args, **kwargs)
|
|
372
|
+
except UnicodeEncodeError:
|
|
373
|
+
# pylint: disable=too-many-try-statements
|
|
374
|
+
try:
|
|
375
|
+
msg, flush = get_what_to_print(*args, **kwargs)
|
|
376
|
+
printer(msg, end="", flush=flush)
|
|
377
|
+
except UnicodeEncodeError:
|
|
378
|
+
sys.stdout = io.TextIOWrapper(
|
|
379
|
+
sys.stdout.buffer, encoding="utf-8"
|
|
380
|
+
)
|
|
381
|
+
sys.stderr = io.TextIOWrapper(
|
|
382
|
+
sys.stderr.buffer, encoding="utf-8"
|
|
383
|
+
)
|
|
384
|
+
try:
|
|
385
|
+
printer(*args, **kwargs)
|
|
386
|
+
except UnicodeEncodeError:
|
|
387
|
+
sys.stderr.write(
|
|
388
|
+
"Could not print the message due to encoding issues.\n"
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
return safe_printer
|
|
392
|
+
|
|
393
|
+
|
|
394
|
+
def get_what_to_print(*args: object, **kwargs: object) -> Tuple[str, bool]:
|
|
395
|
+
"""Get what to print.
|
|
396
|
+
|
|
397
|
+
Parameters
|
|
398
|
+
----------
|
|
399
|
+
args : object
|
|
400
|
+
The arguments.
|
|
401
|
+
kwargs : object
|
|
402
|
+
The keyword arguments.
|
|
403
|
+
|
|
404
|
+
Returns
|
|
405
|
+
-------
|
|
406
|
+
Tuple[str, bool]
|
|
407
|
+
The message and whether to flush.
|
|
408
|
+
"""
|
|
409
|
+
sep = kwargs.get("sep", " ")
|
|
410
|
+
if not isinstance(sep, str):
|
|
411
|
+
sep = " "
|
|
412
|
+
end = kwargs.get("end", "\n")
|
|
413
|
+
if not isinstance(end, str):
|
|
414
|
+
end = "\n"
|
|
415
|
+
flush = kwargs.get("flush", False)
|
|
416
|
+
if not isinstance(flush, bool):
|
|
417
|
+
flush = False
|
|
418
|
+
msg = sep.join(str(arg) for arg in args) + end
|
|
419
|
+
utf8_msg = msg.encode("utf-8", errors="replace").decode("utf-8")
|
|
420
|
+
return utf8_msg, flush
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|