jvcli 2.0.13__tar.gz → 2.0.15__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.
- {jvcli-2.0.13/jvcli.egg-info → jvcli-2.0.15}/PKG-INFO +1 -1
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/__init__.py +1 -1
- jvcli-2.0.15/jvcli/templates/2.0.0/project/env.example +37 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/utils.py +43 -48
- {jvcli-2.0.13 → jvcli-2.0.15/jvcli.egg-info}/PKG-INFO +1 -1
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_utils.py +51 -20
- jvcli-2.0.13/jvcli/templates/2.0.0/project/env.example +0 -13
- {jvcli-2.0.13 → jvcli-2.0.15}/LICENSE +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/MANIFEST.in +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/README.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/api.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/auth.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/cli.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/__init__.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/app.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/lib/__init__.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/lib/page.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/lib/utils.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/lib/widgets.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/pages/__init__.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/pages/analytics_page.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/pages/chat_page.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/pages/dashboard_page.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/client/pages/graph_page.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/__init__.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/auth.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/client.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/create.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/download.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/info.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/publish.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/startproject.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/studio.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/commands/update.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio/assets/index-DDV79SDu.js +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio/assets/index-DdMMONxd.css +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio/index.html +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio/jac_logo.png +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio/tauri.svg +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio/vite.svg +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio-auth/assets/index-Bh6lyeXA.js +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio-auth/assets/index-DdMMONxd.css +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio-auth/index.html +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio-auth/jac_logo.png +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio-auth/tauri.svg +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/studio-auth/vite.svg +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/action_info.yaml +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/agent_descriptor.yaml +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/agent_info.yaml +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/agent_knowledge.yaml +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/agent_memory.yaml +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/README.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/actions/README.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/daf/README.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/gitignore.example +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/globals.jac +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/main.jac +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/sh/exportenv.sh +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/sh/importagent.sh +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/sh/initagents.sh +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/sh/inituser.sh +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/sh/serve.sh +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/sh/startclient.sh +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/2.0.0/project/tests/README.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/CHANGELOG.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli/templates/README.md +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli.egg-info/SOURCES.txt +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli.egg-info/dependency_links.txt +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli.egg-info/entry_points.txt +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli.egg-info/requires.txt +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/jvcli.egg-info/top_level.txt +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/setup.cfg +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/setup.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_api.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_auth.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_cli.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_create.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_download.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_info.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_publish.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_startproject.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_studio.py +0 -0
- {jvcli-2.0.13 → jvcli-2.0.15}/tests/test_update.py +0 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
# JIVAS/Jaclang configuration
|
2
|
+
JIVAS_ENVIRONMENT=development
|
3
|
+
|
4
|
+
JIVAS_USER=admin@jivas.com
|
5
|
+
JIVAS_PASSWORD=password
|
6
|
+
JIVAS_PORT=8000
|
7
|
+
JIVAS_DESCRIPTOR_ROOT_PATH=".jvdata"
|
8
|
+
JIVAS_ACTIONS_ROOT_PATH="actions"
|
9
|
+
JIVAS_DAF_ROOT_PATH="daf"
|
10
|
+
JIVAS_BASE_URL=http://127.0.0.1:8000
|
11
|
+
JIVAS_STUDIO_URL=http://127.0.0.1:8989
|
12
|
+
JACPATH="./"
|
13
|
+
|
14
|
+
# JIVAS Files Serving Config
|
15
|
+
JIVAS_FILE_INTERFACE="local"
|
16
|
+
JIVAS_FILES_ROOT_PATH=".files"
|
17
|
+
JIVAS_FILES_URL=http://127.0.0.1:9000/files
|
18
|
+
# S3 Config
|
19
|
+
# JIVAS_S3_ENDPOINT=access_key_id # optional
|
20
|
+
# JIVAS_S3_ACCESS_KEY_ID=access_key_id
|
21
|
+
# JIVAS_S3_SECRET_ACCESS_KEY=secret_access_key
|
22
|
+
# JIVAS_S3_REGION=us-east-1
|
23
|
+
# JIVAS_S3_BUCKET_NAME=my-bucket
|
24
|
+
|
25
|
+
# Secrets Config
|
26
|
+
JIVAS_WEBHOOK_SECRET_KEY="ABCDEFGHIJK"
|
27
|
+
TOKEN_SECRET=s3cr3t
|
28
|
+
|
29
|
+
# MongoDB Config
|
30
|
+
# DATABASE_HOST=mongodb://localhost:27017/?replicaSet=my-rs
|
31
|
+
|
32
|
+
# Typesense Config
|
33
|
+
# TYPESENSE_HOST=localhost
|
34
|
+
# TYPESENSE_PORT=8108
|
35
|
+
# TYPESENSE_PROTOCOL=http
|
36
|
+
# TYPESENSE_API_KEY=abcd
|
37
|
+
# TYPESENSE_CONNECTION_TIMEOUT_SECONDS=2
|
@@ -6,8 +6,8 @@ import tarfile
|
|
6
6
|
|
7
7
|
import click
|
8
8
|
import yaml
|
9
|
-
from packaging.specifiers import SpecifierSet
|
10
|
-
from packaging.version import
|
9
|
+
from packaging.specifiers import InvalidSpecifier, SpecifierSet
|
10
|
+
from packaging.version import InvalidVersion, Version
|
11
11
|
|
12
12
|
from jvcli import __supported__jivas__versions__
|
13
13
|
from jvcli.api import RegistryAPI
|
@@ -92,61 +92,56 @@ def validate_package_name(name: str) -> None:
|
|
92
92
|
|
93
93
|
def is_version_compatible(version: str, specifiers: str) -> bool:
|
94
94
|
"""
|
95
|
-
|
95
|
+
Determines if the provided version satisfies the given specifiers or exact version match.
|
96
96
|
|
97
97
|
Args:
|
98
|
-
- version (str): The version to be
|
99
|
-
- specifiers (str): The version specifier set or exact version. E.g., "2.1.0"
|
98
|
+
- version (str): The version to be checked. E.g., "2.1.0".
|
99
|
+
- specifiers (str): The version specifier set or exact version. E.g., "2.1.0", ">=0.2,<0.3", or "^2.0.0".
|
100
100
|
|
101
101
|
Returns:
|
102
102
|
- bool: True if the version satisfies the specifier set or exact match, False otherwise.
|
103
103
|
"""
|
104
104
|
try:
|
105
|
-
#
|
106
|
-
version
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
return version ==
|
112
|
-
|
113
|
-
|
114
|
-
pass
|
115
|
-
|
116
|
-
# Handle "~" shorthand by translating it to a compatible range
|
105
|
+
# Handle edge cases for empty strings or None inputs
|
106
|
+
if not version or not specifiers:
|
107
|
+
return False
|
108
|
+
|
109
|
+
# Handle exact version equality when no special characters present
|
110
|
+
if all(c not in specifiers for c in "<>!=~^*,"):
|
111
|
+
return Version(version) == Version(specifiers)
|
112
|
+
|
113
|
+
# Handle tilde (~) syntax, as in npm semver, if used
|
117
114
|
if specifiers.startswith("~"):
|
118
|
-
base_version = specifiers[1:]
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
115
|
+
base_version = Version(specifiers[1:])
|
116
|
+
if base_version.release is None or len(base_version.release) < 2:
|
117
|
+
raise InvalidSpecifier(f"Invalid tilde specifier: '{specifiers}'")
|
118
|
+
next_minor = base_version.minor + 1
|
119
|
+
specifiers = f">={base_version},<{base_version.major}.{next_minor}.0"
|
120
|
+
|
121
|
+
# Explicitly handle caret (^) syntax (npm semver style)
|
122
|
+
elif specifiers.startswith("^"):
|
123
|
+
base_version = Version(specifiers[1:])
|
124
|
+
major, minor, patch = (
|
125
|
+
base_version.major,
|
126
|
+
base_version.minor,
|
127
|
+
base_version.micro,
|
128
|
+
)
|
129
|
+
|
133
130
|
if major > 0:
|
134
|
-
|
135
|
-
elif minor > 0:
|
136
|
-
|
137
|
-
else:
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
# Handle exceptions if the inputs are malformed or invalid
|
149
|
-
click.secho(f"Error comparing versions: {e}", fg="red")
|
131
|
+
specifiers = f">={base_version},<{major + 1}.0.0"
|
132
|
+
elif major == 0 and minor > 0:
|
133
|
+
specifiers = f">={base_version},<0.{minor + 1}.0"
|
134
|
+
else: # major == 0 and minor == 0
|
135
|
+
specifiers = f">={base_version},<0.0.{patch + 1}"
|
136
|
+
|
137
|
+
# Finally check using the SpecifierSet
|
138
|
+
specifier_set = SpecifierSet(specifiers)
|
139
|
+
parsed_version = Version(version)
|
140
|
+
|
141
|
+
return parsed_version in specifier_set
|
142
|
+
|
143
|
+
except (InvalidVersion, InvalidSpecifier, TypeError) as e:
|
144
|
+
print(f"Version parsing error: {e}")
|
150
145
|
return False
|
151
146
|
|
152
147
|
|
@@ -67,12 +67,6 @@ class TestUtils:
|
|
67
67
|
|
68
68
|
validate_package_name("test-ns/package-name")
|
69
69
|
|
70
|
-
def test_is_version_compatible_with_exact_match(self) -> None:
|
71
|
-
"""is_version_compatible correctly handles exact version matches and version ranges."""
|
72
|
-
assert is_version_compatible("1.0.0", "1.0.0") is True
|
73
|
-
assert is_version_compatible("2.1.0", ">=2.0.0,<3.0.0") is True
|
74
|
-
assert is_version_compatible("1.0.0", "^1.0.0") is True
|
75
|
-
|
76
70
|
def test_validate_snake_case_rejects_invalid_strings(self) -> None:
|
77
71
|
"""validate_snake_case rejects strings with uppercase letters or special characters."""
|
78
72
|
ctx = click.Context(click.Command("test"))
|
@@ -130,6 +124,57 @@ class TestUtils:
|
|
130
124
|
assert is_version_compatible("1.0.0", "invalid") is False
|
131
125
|
assert is_version_compatible("1.0", ">=invalid") is False
|
132
126
|
|
127
|
+
def test_is_version_compatible_with_exact_match(self) -> None:
|
128
|
+
"""is_version_compatible correctly handles exact version matches and version ranges."""
|
129
|
+
assert is_version_compatible("1.0.0", "1.0.0") is True
|
130
|
+
assert is_version_compatible("2.1.0", ">=2.0.0,<3.0.0") is True
|
131
|
+
assert is_version_compatible("1.0.0", "^1.0.0") is True
|
132
|
+
|
133
|
+
def test_is_version_compatible_with_incompatible_versions(self) -> None:
|
134
|
+
"""is_version_compatible returns False for incompatible versions."""
|
135
|
+
assert is_version_compatible("1.0.0", "2.0.0") is False
|
136
|
+
assert is_version_compatible("1.0.0", ">=2.0.0,<3.0.0") is False
|
137
|
+
assert is_version_compatible("1.0.0", "^2.0.0") is False
|
138
|
+
|
139
|
+
def test_is_version_compatible_with_invalid_version(self) -> None:
|
140
|
+
"""is_version_compatible handles invalid version inputs gracefully."""
|
141
|
+
assert is_version_compatible("invalid_version", "1.0.0") is False
|
142
|
+
assert is_version_compatible("1.0.0", "invalid_specifier") is False
|
143
|
+
assert is_version_compatible("invalid_version", "invalid_specifier") is False
|
144
|
+
|
145
|
+
def test_is_version_compatible_with_shorthand_tilde(self) -> None:
|
146
|
+
"""is_version_compatible correctly handles shorthand '~' specifier."""
|
147
|
+
assert is_version_compatible("1.2.3", "~1.2.0") is True
|
148
|
+
assert is_version_compatible("1.3.0", "~1.2.0") is False
|
149
|
+
assert is_version_compatible("1.2.0", "~1.2.0") is True
|
150
|
+
|
151
|
+
def test_is_version_compatible_with_shorthand_caret(self) -> None:
|
152
|
+
"""is_version_compatible correctly handles shorthand '^' specifier."""
|
153
|
+
assert is_version_compatible("1.2.3", "^1.2.0") is True
|
154
|
+
assert is_version_compatible("2.0.0", "^1.2.0") is False
|
155
|
+
assert is_version_compatible("0.2.3", "^0.2.0") is True
|
156
|
+
assert is_version_compatible("0.3.0", "^0.2.0") is False
|
157
|
+
|
158
|
+
def test_is_version_compatible_with_edge_cases(self) -> None:
|
159
|
+
"""is_version_compatible handles edge cases like empty strings and None."""
|
160
|
+
assert is_version_compatible("", "1.0.0") is False
|
161
|
+
assert is_version_compatible("1.0.0", "") is False
|
162
|
+
assert is_version_compatible("", "") is False
|
163
|
+
assert is_version_compatible(None, "1.0.0") is False # type: ignore
|
164
|
+
assert is_version_compatible("1.0.0", None) is False # type: ignore
|
165
|
+
assert is_version_compatible(None, None) is False # type: ignore
|
166
|
+
|
167
|
+
def test_is_version_compatible_with_pre_release_versions(self) -> None:
|
168
|
+
"""is_version_compatible correctly handles pre-release versions."""
|
169
|
+
assert is_version_compatible("1.0.0-alpha", ">=1.0.0-alpha,<2.0.0") is True
|
170
|
+
assert is_version_compatible("1.0.0-alpha", ">=1.0.0,<2.0.0") is False
|
171
|
+
assert is_version_compatible("1.0.0-beta", "^1.0.0-alpha") is True
|
172
|
+
|
173
|
+
def test_is_version_compatible_with_exact_pre_release(self) -> None:
|
174
|
+
"""is_version_compatible correctly matches exact pre-release versions."""
|
175
|
+
assert is_version_compatible("1.0.0-alpha", "1.0.0-alpha") is True
|
176
|
+
assert is_version_compatible("1.0.0-alpha", "1.0.0-beta") is False
|
177
|
+
|
133
178
|
def test_compress_package_to_tgz(self) -> None:
|
134
179
|
"""Test that compress_package_to_tgz correctly creates a .tgz archive, excluding unwanted folders."""
|
135
180
|
|
@@ -167,20 +212,6 @@ class TestUtils:
|
|
167
212
|
assert "__jac_gen__" not in archive_files
|
168
213
|
assert "__pycache__" not in archive_files
|
169
214
|
|
170
|
-
def test_is_version_compatible_with_tilde_and_caret_specifiers(self) -> None:
|
171
|
-
"""is_version_compatible processes tilde (~) and caret (^) version specifiers."""
|
172
|
-
# Test cases for tilde (~) specifier
|
173
|
-
assert is_version_compatible("2.1.0", "~2.1.0") is True
|
174
|
-
assert is_version_compatible("2.1.5", "~2.1.0") is True
|
175
|
-
assert is_version_compatible("2.2.0", "~2.1.0") is False
|
176
|
-
|
177
|
-
# Test cases for caret (^) specifier
|
178
|
-
assert is_version_compatible("2.1.0", "^2.0.0") is True
|
179
|
-
assert is_version_compatible("3.0.0", "^2.0.0") is False
|
180
|
-
assert is_version_compatible("0.2.5", "^0.2.0") is True
|
181
|
-
assert is_version_compatible("0.3.0", "^0.2.0") is False
|
182
|
-
assert is_version_compatible("0.0.6", "^0.0.4") is False
|
183
|
-
|
184
215
|
def test_compress_package_to_tgz_preserves_structure_and_permissions(
|
185
216
|
self, mocker: MockerFixture
|
186
217
|
) -> None:
|
@@ -1,13 +0,0 @@
|
|
1
|
-
JIVAS_USER=admin@jivas.com
|
2
|
-
JIVAS_PASSWORD=password
|
3
|
-
JIVAS_PORT=8000
|
4
|
-
JIVAS_BASE_URL=http://localhost:8000
|
5
|
-
JIVAS_STUDIO_URL=http://localhost:8989
|
6
|
-
JIVAS_FILES_URL=http://localhost:9000/files
|
7
|
-
JIVAS_DESCRIPTOR_ROOT_PATH=".jvdata"
|
8
|
-
JIVAS_ACTIONS_ROOT_PATH="actions"
|
9
|
-
JIVAS_DAF_ROOT_PATH="daf"
|
10
|
-
JIVAS_FILES_ROOT_PATH=".files"
|
11
|
-
JIVAS_WEBHOOK_SECRET_KEY="ABCDEFGHIJK"
|
12
|
-
JIVAS_ENVIRONMENT=development
|
13
|
-
JACPATH="./"
|
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
|