sdata 0.23.1__tar.gz → 0.23.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.
- {sdata-0.23.1/sdata.egg-info → sdata-0.23.3}/PKG-INFO +1 -1
- {sdata-0.23.1 → sdata-0.23.3}/sdata/__init__.py +3 -3
- {sdata-0.23.1 → sdata-0.23.3}/sdata/data.py +11 -1
- {sdata-0.23.1 → sdata-0.23.3}/sdata/experiments/__init__.py +43 -7
- {sdata-0.23.1 → sdata-0.23.3}/sdata/metadata.py +14 -2
- {sdata-0.23.1 → sdata-0.23.3/sdata.egg-info}/PKG-INFO +1 -1
- {sdata-0.23.1 → sdata-0.23.3}/LICENSE-MIT +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/MANIFEST.in +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/README.md +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/blob.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/attrdict/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/attrdict/default.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/attrdict/dictionary.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/attrdict/mapping.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/attrdict/merge.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/attrdict/mixins.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_common.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_dump.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_exceptions.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_exif.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_insert.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_load.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_remove.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_transplant.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/_webp.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/piexif/helper.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/collections/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/collections/rangebucketmap.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/collections/rangemap.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/collections/rangeset.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/range/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/range/cut.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/ranger/range/range.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/semver.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/simple_graph_db/LICENSE +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/simple_graph_db/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/simple_graph_db/database.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/simple_graph_db/schema.sql +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sobol_seq.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sortedcontainers/LICENSE +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sortedcontainers/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sortedcontainers/sorteddict.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sortedcontainers/sortedlist.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sortedcontainers/sortedset.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/sqlitedict.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/timeflake/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/timeflake/flake.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/contrib/timeflake/utils.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/doe.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/experiments/ks2.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/experiments/lapshear.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/experiments/material.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/image.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/db.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/hdf.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/isomme.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/pgp.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/pud.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/simple_signature.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/iolib/vault.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/suuid.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/timestamp.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/tools.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata/workbook.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata.egg-info/SOURCES.txt +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata.egg-info/dependency_links.txt +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata.egg-info/requires.txt +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/sdata.egg-info/top_level.txt +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/setup.cfg +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/setup.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/iolib/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/iolib/pud/__init__.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/iolib/pud/test_pud.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/iolib/test_hdf.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_attribute.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_blob.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_data.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_image.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_io.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_ks2.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_metadata.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_sqlite.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_suuid.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_table.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_testprogram.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_timeflake.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_timestamp.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_tools.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_vault.py +0 -0
- {sdata-0.23.1 → sdata-0.23.3}/tests/test_workbook.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# -*-coding: utf-8-*-
|
|
2
2
|
from __future__ import division
|
|
3
3
|
|
|
4
|
-
__version__ = '0.23.
|
|
4
|
+
__version__ = '0.23.3'
|
|
5
5
|
__revision__ = None
|
|
6
6
|
__version_info__ = tuple([int(num) for num in __version__.split('.')])
|
|
7
7
|
|
|
@@ -14,8 +14,8 @@ import uuid
|
|
|
14
14
|
import logging
|
|
15
15
|
|
|
16
16
|
# fix "ValueError: unsupported pickle protocol: 5"
|
|
17
|
-
import pickle
|
|
18
|
-
pickle.HIGHEST_PROTOCOL = 4
|
|
17
|
+
#import pickle
|
|
18
|
+
#pickle.HIGHEST_PROTOCOL = 4
|
|
19
19
|
import pandas
|
|
20
20
|
|
|
21
21
|
from sdata.metadata import Metadata, Attribute
|
|
@@ -104,6 +104,7 @@ class Data(object):
|
|
|
104
104
|
self.metadata.add(self.SDATA_CTIME, now_utc_str(), dtype="str", description="creation date")
|
|
105
105
|
self.metadata.add(self.SDATA_MTIME, now_utc_str(), dtype="str", description="modification date")
|
|
106
106
|
self.metadata.add(self.SDATA_URL, "", dtype="str", description="url of the data object")
|
|
107
|
+
self.metadata.add(self.SDATA_PROJECT, "", dtype="str", description="project name")
|
|
107
108
|
|
|
108
109
|
metadata = kwargs.get("metadata")
|
|
109
110
|
if metadata is not None:
|
|
@@ -130,7 +131,8 @@ class Data(object):
|
|
|
130
131
|
self.table = kwargs.get("table", None)
|
|
131
132
|
self._description = ""
|
|
132
133
|
self.description = kwargs.get("description", "")
|
|
133
|
-
self.project = kwargs.get("project", "")
|
|
134
|
+
self.project = kwargs.get("project", "N.N.")
|
|
135
|
+
self.metadata.add(self.SDATA_PROJECT, self.project, dtype="str", description="project name")
|
|
134
136
|
|
|
135
137
|
if (kwargs.get("uuid")=="" or kwargs.get("uuid") is not None) and not self.metadata.get(self.SDATA_UUID).value and kwargs.get("uuid")!="hash":
|
|
136
138
|
# logger.info("uuid in kwargs")
|
|
@@ -656,6 +658,14 @@ class Data(object):
|
|
|
656
658
|
def mdf(self):
|
|
657
659
|
return self.metadata.df
|
|
658
660
|
|
|
661
|
+
@property
|
|
662
|
+
def udf(self):
|
|
663
|
+
return self.metadata.udf
|
|
664
|
+
|
|
665
|
+
@property
|
|
666
|
+
def sdf(self):
|
|
667
|
+
return self.metadata.sdf
|
|
668
|
+
|
|
659
669
|
@property
|
|
660
670
|
def md(self):
|
|
661
671
|
return self.metadata
|
|
@@ -21,6 +21,21 @@ class TestProgram(Data):
|
|
|
21
21
|
"""A sdata Testprogram
|
|
22
22
|
|
|
23
23
|
"""
|
|
24
|
+
ATTRIBUTES = [
|
|
25
|
+
['material_name', '', 'str', '-', 'Der Name des Materials.', '', False],
|
|
26
|
+
['material_norm_name', '', 'str', '-', 'Der normative Name des Materials.', '', False],
|
|
27
|
+
['material_number_norm', '', 'str', '-', 'Die normative Nummer des Materials.', '', False],
|
|
28
|
+
['material_manifacturer', '', 'str', '-', 'Die Hersteller des Materials.', '', False],
|
|
29
|
+
['material_grade', '', 'str', '-', 'Der Zustand des Materials.', '', False],
|
|
30
|
+
['material_coating', '', 'str', '-', 'Die Beschichtung des Materials.', '', False],
|
|
31
|
+
['material_density', '', 'float', 'g/cm^3', 'Die Dichte des Materials.', '', False],
|
|
32
|
+
['material_production_date', '', 'str', '-', 'Das Produktionsdatum des Materials.', '', False],
|
|
33
|
+
['responsible_person', '', 'str', '-', 'Verantwortlicher des Testprogramms.', '', False],
|
|
34
|
+
['responsible_person_phone', '', 'str', '-', 'Telefonnummer des Verantwortlichen vom Testprogramms.', '', False],
|
|
35
|
+
['responsible_person_email', '', 'str', '-', 'Emailadressen des Verantwortlichen vom Testprogramms.', '', False],
|
|
36
|
+
['responsible_person_organisation', '', 'str', '-', 'Organisation des Verantwortlichen vom Testprogramms.', '', False],
|
|
37
|
+
['notes', '', 'str', '-', 'Notizen zum Testprogramm.', '', False],
|
|
38
|
+
]
|
|
24
39
|
|
|
25
40
|
def __init__(self, **kwargs):
|
|
26
41
|
"""
|
|
@@ -48,13 +63,26 @@ class TestProgram(Data):
|
|
|
48
63
|
if kwargs.get("uuid_testprogram") is not None:
|
|
49
64
|
self._set_uuid(kwargs.get("uuid_testprogram"))
|
|
50
65
|
|
|
66
|
+
for attrlist in self.ATTRIBUTES:
|
|
67
|
+
self.metadata.set_attr(attrlist[0], attrlist[1],
|
|
68
|
+
dtype=attrlist[2],
|
|
69
|
+
unit=attrlist[3],
|
|
70
|
+
description=attrlist[4],
|
|
71
|
+
label=attrlist[5],
|
|
72
|
+
required=attrlist[6])
|
|
73
|
+
|
|
74
|
+
|
|
51
75
|
def gen_testseries(self, **kwargs):
|
|
52
76
|
"""generate TestSeries instance
|
|
53
77
|
|
|
54
78
|
:param kwargs:
|
|
55
79
|
:return: TestSeries()
|
|
56
80
|
"""
|
|
57
|
-
|
|
81
|
+
class_name = kwargs.get("class_name", TestSeries)
|
|
82
|
+
if "class_name" in kwargs:
|
|
83
|
+
kwargs.pop("class_name")
|
|
84
|
+
|
|
85
|
+
ts = class_name(**kwargs)
|
|
58
86
|
ts.project = self.project
|
|
59
87
|
ts.name_testprogram = self.name_testprogram
|
|
60
88
|
ts.uuid_testprogram = self.uuid_testprogram
|
|
@@ -63,7 +91,7 @@ class TestProgram(Data):
|
|
|
63
91
|
|
|
64
92
|
@property
|
|
65
93
|
def longname(self):
|
|
66
|
-
return "
|
|
94
|
+
return "|".join([self.name_testprogram])
|
|
67
95
|
|
|
68
96
|
class TestSeries(TestProgram):
|
|
69
97
|
"""A sdata TestSeries
|
|
@@ -75,6 +103,8 @@ class TestSeries(TestProgram):
|
|
|
75
103
|
|
|
76
104
|
SDATA_TESTTYPE = "!sdata_testtype"
|
|
77
105
|
|
|
106
|
+
|
|
107
|
+
|
|
78
108
|
def __init__(self, **kwargs):
|
|
79
109
|
"""Test Series
|
|
80
110
|
|
|
@@ -185,7 +215,11 @@ class TestSeries(TestProgram):
|
|
|
185
215
|
:param kwargs:
|
|
186
216
|
:return: Test()
|
|
187
217
|
"""
|
|
188
|
-
|
|
218
|
+
class_name = kwargs.get("class_name", Test)
|
|
219
|
+
if "class_name" in kwargs:
|
|
220
|
+
kwargs.pop("class_name")
|
|
221
|
+
|
|
222
|
+
t = class_name(**kwargs)
|
|
189
223
|
t.name_testprogram = self.name_testprogram
|
|
190
224
|
t.uuid_testprogram = self.uuid_testprogram
|
|
191
225
|
t.name_testseries = self.name_testseries
|
|
@@ -198,7 +232,7 @@ class TestSeries(TestProgram):
|
|
|
198
232
|
|
|
199
233
|
@property
|
|
200
234
|
def longname(self):
|
|
201
|
-
return "
|
|
235
|
+
return "|".join([self.name_testprogram, self.name])
|
|
202
236
|
|
|
203
237
|
|
|
204
238
|
class Test(TestSeries):
|
|
@@ -209,14 +243,15 @@ class Test(TestSeries):
|
|
|
209
243
|
SDATA_TESTSERIES_NAME = "!sdata_testseries_name"
|
|
210
244
|
SDATA_TESTSERIES_UUID = "!sdata_testseries_uuid"
|
|
211
245
|
|
|
246
|
+
|
|
212
247
|
def __init__(self, **kwargs):
|
|
213
248
|
"""Test
|
|
214
249
|
|
|
215
250
|
:param kwargs:
|
|
216
251
|
"""
|
|
217
252
|
TestSeries.__init__(self, **kwargs)
|
|
218
|
-
self.metadata.add(name=self.SDATA_TESTSERIES_NAME, value="N.N.", dtype="str")
|
|
219
|
-
self.metadata.add(name=self.SDATA_TESTSERIES_UUID, value="", dtype="str")
|
|
253
|
+
self.metadata.add(name=self.SDATA_TESTSERIES_NAME, value="N.N.", dtype="str", description="name of the testseries")
|
|
254
|
+
self.metadata.add(name=self.SDATA_TESTSERIES_UUID, value="", dtype="str", description="uuid of the testseries")
|
|
220
255
|
|
|
221
256
|
if kwargs.get("name") is not None:
|
|
222
257
|
self._set_name(kwargs.get("name"))
|
|
@@ -235,6 +270,7 @@ class Test(TestSeries):
|
|
|
235
270
|
# print("uuid_testprogram", kwargs.get("uuid_testprogram"), self._set_uuid_testprogram)
|
|
236
271
|
self._set_uuid_testprogram(kwargs.get("uuid_testprogram"))
|
|
237
272
|
|
|
273
|
+
|
|
238
274
|
def _get_uuid_testseries(self):
|
|
239
275
|
return self.metadata.get(self.SDATA_TESTSERIES_UUID).value
|
|
240
276
|
|
|
@@ -284,7 +320,7 @@ class Test(TestSeries):
|
|
|
284
320
|
|
|
285
321
|
@property
|
|
286
322
|
def longname(self):
|
|
287
|
-
return "
|
|
323
|
+
return "|".join([self.name_testprogram, self.name_testseries, self.name])
|
|
288
324
|
|
|
289
325
|
|
|
290
326
|
|
|
@@ -59,7 +59,7 @@ class Attribute(object):
|
|
|
59
59
|
DTYPES_INV = {v: k for k, v in DTYPES.items()}
|
|
60
60
|
|
|
61
61
|
def __init__(self, name, value, **kwargs):
|
|
62
|
-
"""Attribute
|
|
62
|
+
"""Attribute(name, value, dtype=str, unit="-", description="", label="", required=False)
|
|
63
63
|
:param name
|
|
64
64
|
:param value
|
|
65
65
|
:param dtype ['float', 'int', 'str', 'timestamp', 'uuid?', 'unicode?']
|
|
@@ -303,10 +303,15 @@ class Metadata(object):
|
|
|
303
303
|
required_attributes = [(attr.name, attr) for attr in self.attributes.values() if attr.required is True]
|
|
304
304
|
return SortedDict(required_attributes)
|
|
305
305
|
|
|
306
|
+
def add_attribute(self, attr, **kwargs):
|
|
307
|
+
"""set Attribute"""
|
|
308
|
+
prefix = kwargs.get("prefix", "")
|
|
309
|
+
self._attributes[prefix + attr.name] = attr
|
|
310
|
+
|
|
306
311
|
def set_attr(self, name="N.N.", value=None, **kwargs):
|
|
307
312
|
"""set Attribute"""
|
|
308
313
|
prefix = kwargs.get("prefix", "")
|
|
309
|
-
if isinstance(name, Attribute):
|
|
314
|
+
if isinstance(name, Attribute) or "Attribute" in name.__class__.__name__:
|
|
310
315
|
attr = name # name is the Attribute!
|
|
311
316
|
else:
|
|
312
317
|
attr = self.get_attr(prefix + name) or Attribute(name, value, **kwargs)
|
|
@@ -419,6 +424,13 @@ class Metadata(object):
|
|
|
419
424
|
d[attr.name] = attr.value
|
|
420
425
|
return d
|
|
421
426
|
|
|
427
|
+
def get_dict(self):
|
|
428
|
+
"""get user attribute as dict"""
|
|
429
|
+
d = {}
|
|
430
|
+
for attr in self.attributes.values():
|
|
431
|
+
d[attr.name] = attr.value
|
|
432
|
+
return d
|
|
433
|
+
|
|
422
434
|
def _to_dataframe(self, attributes):
|
|
423
435
|
"""create dataframe from attributes"""
|
|
424
436
|
d = self._to_dict(attributes)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|