alita-sdk 0.3.118__tar.gz → 0.3.119__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.
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/PKG-INFO +1 -1
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/pyproject.toml +1 -1
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaConfluenceLoader.py +58 -2
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/interfaces/loaders.py +1 -1
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/LICENSE +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/README.md +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/requirements.txt +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/setup.cfg +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/agents/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/agents/llamaAgentParser.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/clients/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/clients/artifact.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/clients/client.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/clients/datasource.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/clients/prompt.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/browseruse/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/browseruse/api_wrapper.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/assistant.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/constants.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/indexer.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/utils.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/llamaindex/assistant.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/llms/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/llms/alita.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/llms/preloaded.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/application.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/tools.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/application.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/artifact.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/datasource.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/echo.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/function.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/llm.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/loop.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/loop_output.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/prompt.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/router.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/tool.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/utils/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/utils/evaluate.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/utils/logging.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/utils/streamlit.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/utils/utils.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk.egg-info/SOURCES.txt +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/tests/__init__.py +0 -0
- {alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/tests/test_jira_analysis.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.119
|
4
4
|
Summary: SDK for building langchain agents using resouces from Alita
|
5
5
|
Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>
|
6
6
|
Project-URL: Homepage, https://projectalita.ai
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from io import BytesIO
|
2
|
-
from typing import Optional
|
2
|
+
from typing import Optional, List
|
3
3
|
|
4
|
+
import requests
|
4
5
|
from PIL import Image
|
5
6
|
from langchain_community.document_loaders import ConfluenceLoader
|
6
7
|
from langchain_community.document_loaders.confluence import ContentFormat
|
@@ -9,7 +10,7 @@ from pdf2image import convert_from_bytes
|
|
9
10
|
from reportlab.graphics import renderPM
|
10
11
|
from svglib.svglib import svg2rlg
|
11
12
|
|
12
|
-
from
|
13
|
+
from src.alita_sdk.langchain.tools.utils import image_to_byte_array, bytes_to_base64
|
13
14
|
|
14
15
|
Image.MAX_IMAGE_PIXELS = 300_000_000
|
15
16
|
|
@@ -73,6 +74,61 @@ class AlitaConfluenceLoader(ConfluenceLoader):
|
|
73
74
|
kwargs['content_format'] = mapping.get(content_formant, ContentFormat.VIEW)
|
74
75
|
return super().load(**kwargs)
|
75
76
|
|
77
|
+
def process_attachment(
|
78
|
+
self,
|
79
|
+
page_id: str,
|
80
|
+
ocr_languages: Optional[str] = None,
|
81
|
+
) -> List[str]:
|
82
|
+
"""
|
83
|
+
Process attachments from a Confluence page and extract text from them.
|
84
|
+
Note: if the attachment is corrupted, it will be skipped and an error will be logged.
|
85
|
+
"""
|
86
|
+
|
87
|
+
try:
|
88
|
+
from PIL import Image # noqa: F401
|
89
|
+
except ImportError:
|
90
|
+
raise ImportError(
|
91
|
+
"`Pillow` package not found, " "please run `pip install Pillow`"
|
92
|
+
)
|
93
|
+
|
94
|
+
attachments = self.confluence.get_attachments_from_content(page_id)["results"]
|
95
|
+
texts = []
|
96
|
+
for attachment in attachments:
|
97
|
+
media_type = attachment["metadata"]["mediaType"]
|
98
|
+
absolute_url = self.base_url + attachment["_links"]["download"]
|
99
|
+
title = attachment["title"]
|
100
|
+
try:
|
101
|
+
if media_type == "application/pdf":
|
102
|
+
text = title + self.process_pdf(absolute_url, ocr_languages)
|
103
|
+
elif (
|
104
|
+
media_type == "image/png"
|
105
|
+
or media_type == "image/jpg"
|
106
|
+
or media_type == "image/jpeg"
|
107
|
+
):
|
108
|
+
text = title + self.process_image(absolute_url, ocr_languages)
|
109
|
+
elif (
|
110
|
+
media_type == "application/vnd.openxmlformats-officedocument"
|
111
|
+
".wordprocessingml.document"
|
112
|
+
):
|
113
|
+
text = title + self.process_doc(absolute_url)
|
114
|
+
elif media_type == "application/vnd.ms-excel":
|
115
|
+
text = title + self.process_xls(absolute_url)
|
116
|
+
# elif media_type == "image/svg+xml":
|
117
|
+
# text = title + self.process_svg(absolute_url, ocr_languages)
|
118
|
+
else:
|
119
|
+
continue
|
120
|
+
texts.append(text)
|
121
|
+
except requests.HTTPError as e:
|
122
|
+
if e.response.status_code == 404:
|
123
|
+
print(f"Attachment not found at {absolute_url}") # noqa: T201
|
124
|
+
continue
|
125
|
+
else:
|
126
|
+
raise
|
127
|
+
except Exception as e:
|
128
|
+
print(f"Error processing attachment {absolute_url}: {e}")
|
129
|
+
continue
|
130
|
+
return texts
|
131
|
+
|
76
132
|
def process_pdf(
|
77
133
|
self,
|
78
134
|
link: str,
|
@@ -19,7 +19,7 @@ from ..document_loaders.AlitaCSVLoader import AlitaCSVLoader
|
|
19
19
|
from ..document_loaders.AlitaExcelLoader import AlitaExcelLoader
|
20
20
|
from ..document_loaders.AlitaDirectoryLoader import AlitaDirectoryLoader
|
21
21
|
from ..document_loaders.AlitaGitRepoLoader import AlitaGitRepoLoader
|
22
|
-
from
|
22
|
+
from alita_tools.confluence.loader import AlitaConfluenceLoader
|
23
23
|
from ..document_loaders.AlitaBDDScenariosLoader import BDDScenariosLoader
|
24
24
|
from ..document_loaders.AlitaJiraLoader import AlitaJiraLoader
|
25
25
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: alita_sdk
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.119
|
4
4
|
Summary: SDK for building langchain agents using resouces from Alita
|
5
5
|
Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedjik@gmail.com>
|
6
6
|
Project-URL: Homepage, https://projectalita.ai
|
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
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/analysis/jira_analyse/__init__.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/community/analysis/jira_analyse/api_wrapper.py
RENAMED
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
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaCSVLoader.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaExcelLoader.py
RENAMED
File without changes
|
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaImageLoader.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaJiraLoader.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaQtestLoader.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/AlitaTableLoader.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/__init__.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/document_loaders/constants.py
RENAMED
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
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/retrievers/AlitaRetriever.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/retrievers/VectorstoreRetriever.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/__init__.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/bdd_exceptions.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/bdd_parser.py
RENAMED
File without changes
|
{alita_sdk-0.3.118 → alita_sdk-0.3.119}/src/alita_sdk/langchain/tools/bdd_parser/feature_types.py
RENAMED
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
|