pytrilogy 0.0.3.2__tar.gz → 0.0.3.3__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 pytrilogy might be problematic. Click here for more details.
- {pytrilogy-0.0.3.2/pytrilogy.egg-info → pytrilogy-0.0.3.3}/PKG-INFO +1 -1
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3/pytrilogy.egg-info}/PKG-INFO +1 -1
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_models.py +16 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/__init__.py +1 -1
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/author.py +11 -7
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/LICENSE.md +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/README.md +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pyproject.toml +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/SOURCES.txt +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/dependency_links.txt +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/entry_points.txt +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/requires.txt +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/pytrilogy.egg-info/top_level.txt +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/setup.cfg +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/setup.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_datatypes.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_declarations.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_derived_concepts.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_discovery_nodes.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_enums.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_environment.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_executor.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_functions.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_imports.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_metadata.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_multi_join_assignments.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_parse_engine.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_parsing.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_partial_handling.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_query_processing.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_select.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_show.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_statements.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_undefined_concept.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/tests/test_where_clause.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/compiler.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/constants.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/constants.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/enums.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/env_processor.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/environment_helpers.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/ergonomics.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/exceptions.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/functions.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/graph_models.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/internal.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/build.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/build_environment.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/core.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/datasource.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/environment.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/models/execute.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimization.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/base_optimization.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/inline_constant.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/inline_datasource.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/concept_strategies_v3.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/graph_utils.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/basic_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/common.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/filter_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/group_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/group_to_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/multiselect_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/node_merge_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/rowset_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/synonym_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/union_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/unnest_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/window_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/base_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/filter_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/group_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/merge_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/union_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/unnest_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/nodes/window_node.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/utility.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/query_processor.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/author.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/build.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/common.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/statements/execute.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/base.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/bigquery.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/common.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/config.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/duckdb.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/enums.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/postgres.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/presto.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/snowflake.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/dialect/sql_server.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/engine.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/executor.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/base_hook.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/graph_hook.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/hooks/query_debugger.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/metadata/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parser.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/common.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/config.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/exceptions.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/helpers.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/parse_engine.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/render.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/parsing/trilogy.lark +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/py.typed +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/scripts/__init__.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/scripts/trilogy.py +0 -0
- {pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/utility.py +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from copy import deepcopy
|
|
2
2
|
|
|
3
|
+
from pytest import raises
|
|
4
|
+
|
|
3
5
|
from trilogy import parse
|
|
4
6
|
from trilogy.core.enums import (
|
|
5
7
|
BooleanOperator,
|
|
@@ -22,6 +24,7 @@ from trilogy.core.models.author import (
|
|
|
22
24
|
from trilogy.core.models.build import BuildGrain
|
|
23
25
|
from trilogy.core.models.core import (
|
|
24
26
|
DataType,
|
|
27
|
+
ListWrapper,
|
|
25
28
|
TupleWrapper,
|
|
26
29
|
)
|
|
27
30
|
from trilogy.core.models.datasource import Address
|
|
@@ -206,6 +209,19 @@ def test_base_join(test_environment: Environment):
|
|
|
206
209
|
assert x.concepts == [test_environment.concepts["product_id"]]
|
|
207
210
|
|
|
208
211
|
|
|
212
|
+
def test_comparison():
|
|
213
|
+
with raises(SyntaxError):
|
|
214
|
+
Comparison(left=1, right="abc", operator=ComparisonOperator.EQ)
|
|
215
|
+
|
|
216
|
+
with raises(SyntaxError):
|
|
217
|
+
Comparison(left=1, right=1, operator=ComparisonOperator.IN)
|
|
218
|
+
|
|
219
|
+
# this should not error
|
|
220
|
+
Comparison(left=1, right=[1, 2, 3], operator=ComparisonOperator.IN)
|
|
221
|
+
|
|
222
|
+
Comparison(left=1, right=ListWrapper([1, 2, 3]), operator=ComparisonOperator.IN)
|
|
223
|
+
|
|
224
|
+
|
|
209
225
|
def test_comparison():
|
|
210
226
|
try:
|
|
211
227
|
Comparison(left=1, right="abc", operator=ComparisonOperator.EQ)
|
|
@@ -585,19 +585,23 @@ class Comparison(ConceptArgs, Mergeable, Namespaced, BaseModel):
|
|
|
585
585
|
f"Cannot use {self.operator.value} with non-null or boolean value {self.right}"
|
|
586
586
|
)
|
|
587
587
|
elif self.operator in (ComparisonOperator.IN, ComparisonOperator.NOT_IN):
|
|
588
|
-
|
|
589
|
-
if not
|
|
590
|
-
|
|
588
|
+
right_type = arg_to_datatype(self.right)
|
|
589
|
+
if not any(
|
|
590
|
+
[
|
|
591
|
+
isinstance(self.right, ConceptRef),
|
|
592
|
+
right_type in (DataType.LIST,),
|
|
593
|
+
isinstance(right_type, (ListType, ListWrapper, TupleWrapper)),
|
|
594
|
+
]
|
|
591
595
|
):
|
|
592
596
|
raise SyntaxError(
|
|
593
|
-
f"Cannot use {self.operator.value} with non-list, non-tuple, non-concept object {right} in {str(self)}"
|
|
597
|
+
f"Cannot use {self.operator.value} with non-list, non-tuple, non-concept object {self.right} in {str(self)}"
|
|
594
598
|
)
|
|
595
599
|
|
|
596
|
-
elif isinstance(
|
|
597
|
-
arg_to_datatype(self.left),
|
|
600
|
+
elif isinstance(right_type, ListType) and not is_compatible_datatype(
|
|
601
|
+
arg_to_datatype(self.left), right_type.value_data_type
|
|
598
602
|
):
|
|
599
603
|
raise SyntaxError(
|
|
600
|
-
f"Cannot compare {arg_to_datatype(self.left)} and {
|
|
604
|
+
f"Cannot compare {arg_to_datatype(self.left)} and {right_type} with operator {self.operator} in {str(self)}"
|
|
601
605
|
)
|
|
602
606
|
elif isinstance(self.right, Concept) and not is_compatible_datatype(
|
|
603
607
|
arg_to_datatype(self.left), arg_to_datatype(self.right)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/basic_node.py
RENAMED
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/filter_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/group_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/group_to_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/multiselect_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/node_merge_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/rowset_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_merge_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/select_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/synonym_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/union_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/unnest_node.py
RENAMED
|
File without changes
|
{pytrilogy-0.0.3.2 → pytrilogy-0.0.3.3}/trilogy/core/processing/node_generators/window_node.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
|
|
File without changes
|