dtSpark 1.1.0a9__tar.gz → 1.1.0a10__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.
- {dtspark-1.1.0a9/src/dtSpark.egg-info → dtspark-1.1.0a10}/PKG-INFO +1 -1
- dtspark-1.1.0a10/src/dtSpark/_version.txt +1 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/tools/builtin.py +18 -13
- {dtspark-1.1.0a9 → dtspark-1.1.0a10/src/dtSpark.egg-info}/PKG-INFO +1 -1
- dtspark-1.1.0a9/src/dtSpark/_version.txt +0 -1
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/LICENSE +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/MANIFEST.in +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/README.md +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/pyproject.toml +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/setup.cfg +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/setup.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/_description.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/_full_name.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/_licence.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/_metadata.yaml +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/_name.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/aws/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/aws/authentication.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/aws/bedrock.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/aws/costs.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/aws/pricing.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/cli_interface.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/conversation_manager.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/core/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/core/application.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/core/context_compaction.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/__main__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/action_monitor.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/daemon_app.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/daemon_manager.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/execution_coordinator.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/daemon/pid_file.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/autonomous_actions.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/backends.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/connection.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/conversations.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/credential_prompt.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/files.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/mcp_ops.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/messages.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/schema.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/tool_permissions.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/database/usage.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/files/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/files/manager.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/launch.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/limits/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/limits/costs.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/limits/tokens.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/llm/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/llm/anthropic_direct.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/llm/base.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/llm/context_limits.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/llm/manager.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/llm/ollama.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/mcp_integration/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/mcp_integration/manager.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/mcp_integration/tool_selector.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/resources/config.yaml.template +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/safety/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/safety/llm_service.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/safety/patterns.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/safety/prompt_inspector.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/safety/violation_logger.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/scheduler/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/scheduler/creation_tools.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/scheduler/execution_queue.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/scheduler/executor.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/scheduler/manager.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/tools/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/auth.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/dependencies.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/endpoints/__init__.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/endpoints/autonomous_actions.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/endpoints/chat.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/endpoints/conversations.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/endpoints/main_menu.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/endpoints/streaming.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/server.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/session.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/ssl_utils.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/static/css/dark-theme.css +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/static/js/actions.js +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/static/js/chat.js +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/static/js/main.js +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/static/js/sse-client.js +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/actions.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/base.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/chat.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/conversations.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/goodbye.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/login.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/main_menu.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/templates/new_conversation.html +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark/web/web_interface.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark.egg-info/SOURCES.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark.egg-info/dependency_links.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark.egg-info/entry_points.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark.egg-info/not-zip-safe +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark.egg-info/requires.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/src/dtSpark.egg-info/top_level.txt +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/README.md +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/debug_bulk_api.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/diagnose_aws_costs.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_builtin_tools.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_builtin_tools_integration.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_bulk_pricing.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_document_archive_tools.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_filesystem_tools.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_mcp_server.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_ollama_context.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_ollama_conversation.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_ollama_integration.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_pricing_integration.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_prompt_inspection.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_status_indicator.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_tool_selector.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_web_auth.py +0 -0
- {dtspark-1.1.0a9 → dtspark-1.1.0a10}/tests/test_web_session.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dtSpark
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.0a10
|
|
4
4
|
Summary: Secure Personal AI Research Kit - Multi-provider LLM CLI/Web interface with MCP tool integration
|
|
5
5
|
Home-page: https://github.com/digital-thought/dtSpark
|
|
6
6
|
Author: Matthew Westwood-Hill
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.1.0a10
|
|
@@ -1043,8 +1043,9 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1043
1043
|
"description": f"Create a Microsoft Word document (.docx) within the allowed path ({allowed_path}). "
|
|
1044
1044
|
"ONLY use this tool when the user specifically requests a Word/.docx file. "
|
|
1045
1045
|
"Do NOT use this for HTML, plain text, Markdown, or other text-based formats — use write_file instead. "
|
|
1046
|
-
"
|
|
1047
|
-
"
|
|
1046
|
+
"CRITICAL: You MUST provide 'content' with 'title' and 'paragraphs' to create a document with actual content. "
|
|
1047
|
+
"If you only provide 'path' without 'content', the document will be EMPTY. "
|
|
1048
|
+
"Example: {{\"path\": \"doc.docx\", \"content\": {{\"title\": \"My Title\", \"paragraphs\": [{{\"text\": \"First paragraph\", \"style\": \"Normal\"}}]}}}}",
|
|
1048
1049
|
"input_schema": {
|
|
1049
1050
|
"type": "object",
|
|
1050
1051
|
"properties": {
|
|
@@ -1054,29 +1055,31 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1054
1055
|
},
|
|
1055
1056
|
"content": {
|
|
1056
1057
|
"type": "object",
|
|
1057
|
-
"description": "
|
|
1058
|
+
"description": "REQUIRED to create a document with content. Without this, document will be empty.",
|
|
1058
1059
|
"properties": {
|
|
1059
|
-
"title": {"type": "string", "description": "Document title"},
|
|
1060
|
+
"title": {"type": "string", "description": "Document title displayed at top"},
|
|
1060
1061
|
"paragraphs": {
|
|
1061
1062
|
"type": "array",
|
|
1062
1063
|
"items": {
|
|
1063
1064
|
"type": "object",
|
|
1064
1065
|
"properties": {
|
|
1065
|
-
"text": {"type": "string"},
|
|
1066
|
-
"style": {"type": "string", "description": "
|
|
1067
|
-
}
|
|
1066
|
+
"text": {"type": "string", "description": "The paragraph text"},
|
|
1067
|
+
"style": {"type": "string", "description": "Normal, Heading 1, Heading 2, Heading 3, or Title. Defaults to Normal."}
|
|
1068
|
+
},
|
|
1069
|
+
"required": ["text"]
|
|
1068
1070
|
},
|
|
1069
|
-
"description": "
|
|
1071
|
+
"description": "Array of paragraphs with 'text' (required) and 'style' (optional)"
|
|
1070
1072
|
}
|
|
1071
|
-
}
|
|
1073
|
+
},
|
|
1074
|
+
"required": ["title", "paragraphs"]
|
|
1072
1075
|
},
|
|
1073
1076
|
"template_path": {
|
|
1074
1077
|
"type": "string",
|
|
1075
|
-
"description": "
|
|
1078
|
+
"description": "Alternative to 'content': path to a .docx template file with {{placeholder}} markers"
|
|
1076
1079
|
},
|
|
1077
1080
|
"placeholders": {
|
|
1078
1081
|
"type": "object",
|
|
1079
|
-
"description": "
|
|
1082
|
+
"description": "Only with template_path: dictionary mapping placeholder names to replacement values",
|
|
1080
1083
|
"additionalProperties": {"type": "string"}
|
|
1081
1084
|
}
|
|
1082
1085
|
},
|
|
@@ -1088,7 +1091,8 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1088
1091
|
"description": f"Create a Microsoft Excel document (.xlsx) within the allowed path ({allowed_path}). "
|
|
1089
1092
|
"ONLY use this tool when the user specifically requests an Excel/.xlsx spreadsheet. "
|
|
1090
1093
|
"Do NOT use this for CSV or other text-based tabular formats — use write_file instead. "
|
|
1091
|
-
"
|
|
1094
|
+
"CRITICAL: You MUST provide 'sheets' array with sheet data. "
|
|
1095
|
+
"Example: {{\"path\": \"data.xlsx\", \"sheets\": [{{\"name\": \"Sheet1\", \"headers\": [\"Col1\", \"Col2\"], \"data\": [[\"A\", \"B\"]]}}]}}",
|
|
1092
1096
|
"input_schema": {
|
|
1093
1097
|
"type": "object",
|
|
1094
1098
|
"properties": {
|
|
@@ -1122,7 +1126,8 @@ def _get_document_tools(doc_config: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
|
1122
1126
|
"description": f"Create a Microsoft PowerPoint document (.pptx) within the allowed path ({allowed_path}). "
|
|
1123
1127
|
"ONLY use this tool when the user specifically requests a PowerPoint/.pptx presentation. "
|
|
1124
1128
|
"Do NOT use this for HTML presentations or other text-based formats — use write_file instead. "
|
|
1125
|
-
"
|
|
1129
|
+
"CRITICAL: You MUST provide 'slides' array with slide content. "
|
|
1130
|
+
"Example: {{\"path\": \"pres.pptx\", \"slides\": [{{\"layout\": \"title\", \"title\": \"My Title\", \"content\": [\"Bullet 1\"]}}]}}",
|
|
1126
1131
|
"input_schema": {
|
|
1127
1132
|
"type": "object",
|
|
1128
1133
|
"properties": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dtSpark
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.0a10
|
|
4
4
|
Summary: Secure Personal AI Research Kit - Multi-provider LLM CLI/Web interface with MCP tool integration
|
|
5
5
|
Home-page: https://github.com/digital-thought/dtSpark
|
|
6
6
|
Author: Matthew Westwood-Hill
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.1.0a9
|
|
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
|
|
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
|