pyxcp 0.22.33__cp311-cp311-win_amd64.whl → 0.22.35__cp311-cp311-win_amd64.whl
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 pyxcp might be problematic. Click here for more details.
- pyxcp/__init__.py +1 -1
- pyxcp/config/__init__.py +1 -0
- pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd +0 -0
- pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp310-win_amd64.pyd +0 -0
- pyxcp/daq_stim/stim.cp311-win_amd64.pyd +0 -0
- pyxcp/dllif.py +9 -4
- pyxcp/examples/xcphello.py +9 -10
- pyxcp/master/master.py +1 -0
- pyxcp/recorder/converter/__init__.py +4 -5
- pyxcp/recorder/rekorder.cp310-win_amd64.pyd +0 -0
- pyxcp/recorder/rekorder.cp311-win_amd64.pyd +0 -0
- pyxcp/utils.py +3 -2
- {pyxcp-0.22.33.dist-info → pyxcp-0.22.35.dist-info}/METADATA +1 -1
- {pyxcp-0.22.33.dist-info → pyxcp-0.22.35.dist-info}/RECORD +18 -18
- {pyxcp-0.22.33.dist-info → pyxcp-0.22.35.dist-info}/LICENSE +0 -0
- {pyxcp-0.22.33.dist-info → pyxcp-0.22.35.dist-info}/WHEEL +0 -0
- {pyxcp-0.22.33.dist-info → pyxcp-0.22.35.dist-info}/entry_points.txt +0 -0
pyxcp/__init__.py
CHANGED
pyxcp/config/__init__.py
CHANGED
|
@@ -829,6 +829,7 @@ class General(Configurable):
|
|
|
829
829
|
)
|
|
830
830
|
seed_n_key_dll = Unicode("", allow_none=False, help="Dynamic library used for slave resource unlocking.").tag(config=True)
|
|
831
831
|
seed_n_key_dll_same_bit_width = Bool(False, help="").tag(config=True)
|
|
832
|
+
custom_dll_loader = Unicode(allow_none=True, default_value=None, help="Use an custom seed and key DLL loader.").tag(config=True)
|
|
832
833
|
seed_n_key_function = Callable(
|
|
833
834
|
default_value=None,
|
|
834
835
|
allow_none=True,
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
pyxcp/dllif.py
CHANGED
|
@@ -36,9 +36,14 @@ else:
|
|
|
36
36
|
raise RuntimeError(f"Platform {sys.platform!r} currently not supported.")
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
def getKey(logger, dllName: str, privilege: int, seed: bytes, assume_same_bit_width: bool):
|
|
39
|
+
def getKey(logger, loader_cfg: str, dllName: str, privilege: int, seed: bytes, assume_same_bit_width: bool):
|
|
40
40
|
dllName = str(Path(dllName).absolute()) # Fix loader issues.
|
|
41
41
|
|
|
42
|
+
if loader_cfg is not None:
|
|
43
|
+
loader_exe = loader_cfg
|
|
44
|
+
else:
|
|
45
|
+
loader_exe = LOADER
|
|
46
|
+
|
|
42
47
|
use_ctypes: bool = False
|
|
43
48
|
if assume_same_bit_width:
|
|
44
49
|
use_ctypes = True
|
|
@@ -70,15 +75,15 @@ def getKey(logger, dllName: str, privilege: int, seed: bytes, assume_same_bit_wi
|
|
|
70
75
|
else:
|
|
71
76
|
try:
|
|
72
77
|
p0 = subprocess.Popen(
|
|
73
|
-
[
|
|
78
|
+
[loader_exe, dllName, str(privilege), binascii.hexlify(seed).decode("ascii")],
|
|
74
79
|
stdout=subprocess.PIPE,
|
|
75
80
|
shell=False,
|
|
76
81
|
) # nosec
|
|
77
82
|
except FileNotFoundError as exc:
|
|
78
|
-
logger.error(f"Could not find executable {
|
|
83
|
+
logger.error(f"Could not find executable {loader_exe!r} -- {exc}")
|
|
79
84
|
return (SeedNKeyResult.ERR_COULD_NOT_LOAD_DLL, None)
|
|
80
85
|
except OSError as exc:
|
|
81
|
-
logger.error(f"Cannot execute {
|
|
86
|
+
logger.error(f"Cannot execute {loader_exe!r} -- {exc}")
|
|
82
87
|
return (SeedNKeyResult.ERR_COULD_NOT_LOAD_DLL, None)
|
|
83
88
|
key: bytes = b""
|
|
84
89
|
if p0.stdout:
|
pyxcp/examples/xcphello.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
|
-
"""Very basic hello-world example.
|
|
3
|
-
"""
|
|
2
|
+
"""Very basic hello-world example."""
|
|
4
3
|
from pprint import pprint
|
|
5
4
|
|
|
6
5
|
from pyxcp.cmdline import ArgumentParser
|
|
@@ -17,14 +16,14 @@ def callout(master, args):
|
|
|
17
16
|
|
|
18
17
|
|
|
19
18
|
ap = ArgumentParser(description="pyXCP hello world.", callout=callout)
|
|
20
|
-
ap.parser.add_argument(
|
|
21
|
-
"-d",
|
|
22
|
-
"--daq-info",
|
|
23
|
-
dest="daq_info",
|
|
24
|
-
help="Display DAQ-info",
|
|
25
|
-
default=False,
|
|
26
|
-
action="store_true",
|
|
27
|
-
)
|
|
19
|
+
# ap.parser.add_argument(
|
|
20
|
+
# "-d",
|
|
21
|
+
# "--daq-info",
|
|
22
|
+
# dest="daq_info",
|
|
23
|
+
# help="Display DAQ-info",
|
|
24
|
+
# default=False,
|
|
25
|
+
# action="store_true",
|
|
26
|
+
# )
|
|
28
27
|
|
|
29
28
|
with ap.run() as x:
|
|
30
29
|
x.connect()
|
pyxcp/master/master.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
"""Convert pyXCPs .xmraw files to common data formats.
|
|
2
|
-
"""
|
|
1
|
+
"""Convert pyXCPs .xmraw files to common data formats."""
|
|
3
2
|
|
|
4
3
|
import csv
|
|
5
4
|
import logging
|
|
@@ -318,8 +317,7 @@ class MdfConverter(CollectRows, XcpLogFileDecoder):
|
|
|
318
317
|
time_flags=FLAG_HD_TIME_OFFSET_VALID,
|
|
319
318
|
)
|
|
320
319
|
hdr.comment = f"""<HDcomment><TX>Timezone: {timestamp_info.timezone}</TX></HDcomment>""" # Test-Comment.
|
|
321
|
-
mdf4 = MDF(version="4.10")
|
|
322
|
-
mdf4.header = hdr
|
|
320
|
+
mdf4 = MDF(version="4.10", header=hdr)
|
|
323
321
|
for idx, arr in enumerate(self.tables):
|
|
324
322
|
signals = []
|
|
325
323
|
timestamps = arr.timestamp0
|
|
@@ -369,7 +367,8 @@ class SqliteConverter(XcpLogFileDecoder):
|
|
|
369
367
|
self.create_table(sc)
|
|
370
368
|
self.logger.info(f"Creating table {sc.name!r}.")
|
|
371
369
|
self.insert_stmt[sc.name] = (
|
|
372
|
-
f"""INSERT INTO {sc.name}({', '.join(['timestamp0', 'timestamp1'] + [r.name for r in sc.arr])})
|
|
370
|
+
f"""INSERT INTO {sc.name}({', '.join(['timestamp0', 'timestamp1'] + [r.name for r in sc.arr])})"""
|
|
371
|
+
f""" VALUES({', '.join(["?" for _ in range(len(sc.arr) + 2)])})"""
|
|
373
372
|
)
|
|
374
373
|
|
|
375
374
|
def on_finalize(self) -> None:
|
|
Binary file
|
|
Binary file
|
pyxcp/utils.py
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
import datetime
|
|
3
|
-
from enum import IntEnum
|
|
4
3
|
import functools
|
|
5
4
|
import operator
|
|
6
5
|
import sys
|
|
7
6
|
from binascii import hexlify
|
|
7
|
+
from enum import IntEnum
|
|
8
8
|
from time import perf_counter, sleep
|
|
9
|
+
from typing import Any, List, Optional, Union
|
|
9
10
|
|
|
10
11
|
import chardet
|
|
11
12
|
import pytz
|
|
@@ -13,7 +14,7 @@ import pytz
|
|
|
13
14
|
from pyxcp.cpp_ext.cpp_ext import TimestampInfo
|
|
14
15
|
|
|
15
16
|
|
|
16
|
-
def hexDump(arr):
|
|
17
|
+
def hexDump(arr: Union[bytes | bytearray]):
|
|
17
18
|
if isinstance(arr, (bytes, bytearray)):
|
|
18
19
|
size = len(arr)
|
|
19
20
|
try:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
pyxcp/__init__.py,sha256=
|
|
1
|
+
pyxcp/__init__.py,sha256=cCzCFYz2VXdbLl-oeEcA066T-ZfWBKS32tHhx2YcVag,548
|
|
2
2
|
pyxcp/aml/EtasCANMonitoring.a2l,sha256=EJYwe3Z3H24vyWAa6lUgcdKnQY8pwFxjyCN6ZU1ST8w,1509
|
|
3
3
|
pyxcp/aml/EtasCANMonitoring.aml,sha256=xl0DdyeiIaLW0mmmJNAyJS0CQdOLSxt9dxfgrdSlU8Y,2405
|
|
4
4
|
pyxcp/aml/ifdata_CAN.a2l,sha256=NCUnCUEEgRbZYSLGtUGwL2e7zJ8hrp0SbmLHGv8uY58,612
|
|
@@ -18,14 +18,14 @@ pyxcp/asamkeydll.c,sha256=dVEvU0S1kgIo62S0La-T8xHSw668LM_DYc_fiQ0No6g,2952
|
|
|
18
18
|
pyxcp/asamkeydll.sh,sha256=DC2NKUMwvi39OQgJ6514Chr4wc1LYbTmQHmMq9jAHHs,59
|
|
19
19
|
pyxcp/checksum.py,sha256=hO2JW_eiO9I0A4eiqovMV9d_y5oidq_w8jKdAE4FeOo,11899
|
|
20
20
|
pyxcp/cmdline.py,sha256=na3ZbWQ-5ezsi1MrkuxMTCAXonUF3X6-LutoneyE3dU,1529
|
|
21
|
-
pyxcp/config/__init__.py,sha256=
|
|
21
|
+
pyxcp/config/__init__.py,sha256=vIYPtzzNI4kUmevpOsSFgbfuBXPq7e2bhIIwWcqPcqQ,41835
|
|
22
22
|
pyxcp/config/legacy.py,sha256=4QdDheX8DbBKv5JVT72_C_cjCgKvZmhN3tJ6hsvBEtI,5220
|
|
23
23
|
pyxcp/constants.py,sha256=9yGfujC0ImTYQWfn41wyw8pluJTSrhMGWIVeIZTgsLg,1160
|
|
24
24
|
pyxcp/cpp_ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
25
|
pyxcp/cpp_ext/bin.hpp,sha256=PwJloZek21la-RBSda2Hc0u_6gID0sfTduPeplaAyR4,2561
|
|
26
26
|
pyxcp/cpp_ext/blockmem.hpp,sha256=ysaJwmTWGTfE54Outk3gJYOfAVFd_QaonBMtXLcXwCc,1242
|
|
27
|
-
pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=
|
|
28
|
-
pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=
|
|
27
|
+
pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd,sha256=X1rZXoHpHAprFWKGpSA55a-diCAzV1hCDxulqR5BtOE,285184
|
|
28
|
+
pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd,sha256=FGLv2Mk_VY7IX8Ekrc1pei465rcClJ6FCq383yxHRlQ,286720
|
|
29
29
|
pyxcp/cpp_ext/daqlist.hpp,sha256=g2hlxgoQorAGKHedZFZ0c2FQh1APMIA9sVB6M6hD_n8,7277
|
|
30
30
|
pyxcp/cpp_ext/event.hpp,sha256=Z-1yxsEKsr81NnLVEWJ2ANA8FV7YsM7EbNxaw-elheE,1200
|
|
31
31
|
pyxcp/cpp_ext/extension_wrapper.cpp,sha256=xFs3IcrvHPHA82-n11WPzt8HATGqcks02p84SjQ2BKM,4855
|
|
@@ -37,12 +37,12 @@ pyxcp/daq_stim/optimize/__init__.py,sha256=FUWK0GkNpNT-sUlhibp7xa2aSYpm6Flh5yA2w
|
|
|
37
37
|
pyxcp/daq_stim/optimize/binpacking.py,sha256=Iltho5diKlJG-ltbmx053U2vOFRlCISolXK61T14l_I,1257
|
|
38
38
|
pyxcp/daq_stim/scheduler.cpp,sha256=a7VK7kP2Hs8yMlcDAkXwJ0bH88lr_yz156sphcHS7Z4,715
|
|
39
39
|
pyxcp/daq_stim/scheduler.hpp,sha256=U_6tUbebmzX5vVZS0EFSgTaPsyxMg6yRXHG_aPWA0x4,1884
|
|
40
|
-
pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=
|
|
41
|
-
pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=
|
|
40
|
+
pyxcp/daq_stim/stim.cp310-win_amd64.pyd,sha256=AI-gVCR1lauZUYplnGqeX-c7oX9pHa8liWW7nKeVYOo,204288
|
|
41
|
+
pyxcp/daq_stim/stim.cp311-win_amd64.pyd,sha256=RPq8Bl43UcgT0qWluCMMfGEdLjZAZRngHVZYYDAI1ww,205824
|
|
42
42
|
pyxcp/daq_stim/stim.cpp,sha256=F2OG67W4KKwTTiUCxm-9egIv3TLFdOkRunX6xf7YOtc,177
|
|
43
43
|
pyxcp/daq_stim/stim.hpp,sha256=U-uInRrA6OCdMl1l1SWbQ_KEPpnNYrWut924IvbW6R0,18508
|
|
44
44
|
pyxcp/daq_stim/stim_wrapper.cpp,sha256=iT2yxJ3LRG7HoYC1bwhM3tCAxF9X_HHierBNsLRmTJg,1995
|
|
45
|
-
pyxcp/dllif.py,sha256=
|
|
45
|
+
pyxcp/dllif.py,sha256=qeo7quKQ-_7TjRh_umTD-g0utBcCJd1q4GBRl2m93-M,3444
|
|
46
46
|
pyxcp/errormatrix.py,sha256=iY3VlAem7pNfpK4scD_087wxMlLxNuidB7bbpiUiAyc,45464
|
|
47
47
|
pyxcp/examples/conf_can.toml,sha256=4o-M4xmh7pCzuQLfXnIOLIXqx5aZjMAZ6jtjYJ8hLBQ,370
|
|
48
48
|
pyxcp/examples/conf_can_user.toml,sha256=IJhcc60tKMDgNhviYtHr2OjEl_ID4CsfMKchDeMFdJs,314
|
|
@@ -59,11 +59,11 @@ pyxcp/examples/xcp_read_benchmark.py,sha256=zOG0Yrji10vA0vhHa27KK7zgc3JDpzXzXsFn
|
|
|
59
59
|
pyxcp/examples/xcp_skel.py,sha256=YXLQC8nn8aAwYSVuBGhr1dvmdMBjmO1Ee1w3e5sy16s,1159
|
|
60
60
|
pyxcp/examples/xcp_unlock.py,sha256=5F7oW17MboxKO3REYrGyhYX4Oc0Dg1oD3EQ3fQXB2Is,690
|
|
61
61
|
pyxcp/examples/xcp_user_supplied_driver.py,sha256=bL-6HDvPjgRErvYVdaRL_Pg1GDxu02Jt_GG9LpXXP4c,1078
|
|
62
|
-
pyxcp/examples/xcphello.py,sha256=
|
|
62
|
+
pyxcp/examples/xcphello.py,sha256=ZNfnk0nyz6qiY2i5L0lFFng42RwZdREwevIJW7C5QCA,2638
|
|
63
63
|
pyxcp/examples/xcphello_recorder.py,sha256=QHWJsq5h5CI9t5qEmMSorZyzirTpoXz4nzuKTMzbZCA,3409
|
|
64
64
|
pyxcp/master/__init__.py,sha256=QQbkUJM1WQ-5p2MiNFYxLAmHhNsCQLzDp-S4aoOFxoA,318
|
|
65
65
|
pyxcp/master/errorhandler.py,sha256=ulL6WiraZbVZnM2pfR8S9vlWAAP5UXwXqmbjjxH9rgc,15359
|
|
66
|
-
pyxcp/master/master.py,sha256=
|
|
66
|
+
pyxcp/master/master.py,sha256=FIYCWCh9948cNmQ-D1DcjNcpb4mlXZ8UdCxTFH9Ti4g,78435
|
|
67
67
|
pyxcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
68
|
pyxcp/recorder/__init__.py,sha256=jeTmKvfjIenxHxt7zn6HMjnDpuPQU0d9SdnYK_t3gdE,2850
|
|
69
69
|
pyxcp/recorder/build_clang.cmd,sha256=JvFngSnb28XcBGXxC6MGrcOCGYfahOIvHpgRpqbA6HQ,175
|
|
@@ -71,7 +71,7 @@ pyxcp/recorder/build_clang.sh,sha256=zmU3nZxaNH1pxGWMyQ-S541TuVqxS00p3iPR9NUP4Ec
|
|
|
71
71
|
pyxcp/recorder/build_gcc.cmd,sha256=zj732DdvqDzGAFg7dvF83DUpf8Qf6rQ0cqEaID15Z80,238
|
|
72
72
|
pyxcp/recorder/build_gcc.sh,sha256=nCSh7G8xtxWtDNrMqNUxcjnm_CFpMeduIF0X-RSJtHA,211
|
|
73
73
|
pyxcp/recorder/build_gcc_arm.sh,sha256=jEo6Mgt_aVDL3nHtffecXOrN6gRsEoaA3S4pPrAzpCE,240
|
|
74
|
-
pyxcp/recorder/converter/__init__.py,sha256=
|
|
74
|
+
pyxcp/recorder/converter/__init__.py,sha256=9wsoWJE-PwjsUpQqMT2KUBqa_qdAiX9-cktf6Lkm_xU,14902
|
|
75
75
|
pyxcp/recorder/lz4.c,sha256=rOy3JE2SsOXvJ8a9pgGEfGpbDJnJR03dSVej0CwPmjg,120974
|
|
76
76
|
pyxcp/recorder/lz4.h,sha256=Kz_2V6kvOunNHoPl9-EqxWDVCvYXbU0J-pkSnCeXubs,46483
|
|
77
77
|
pyxcp/recorder/lz4hc.c,sha256=E56iE5CQ6fhQIVi3qNpxiIIP2sTGeC80JtVPyhidV6Q,88870
|
|
@@ -80,8 +80,8 @@ pyxcp/recorder/mio.hpp,sha256=5ASJLKSEykH0deAQD5uak-_yAgd5p2n8t06315GSGrg,63346
|
|
|
80
80
|
pyxcp/recorder/reader.hpp,sha256=rr9XZ_ciL6eF2_xEqyt9XYNqTIze9ytAsnf8uYukO9U,5201
|
|
81
81
|
pyxcp/recorder/reco.py,sha256=6N6FIwfCEVMpi5dr3eUOQa1lowcg2LCnS_sy_-b-UiQ,8725
|
|
82
82
|
pyxcp/recorder/recorder.rst,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
|
-
pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=
|
|
84
|
-
pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=
|
|
83
|
+
pyxcp/recorder/rekorder.cp310-win_amd64.pyd,sha256=1epHArm46oNuEuUM_PqKtjEBjRCRsYVP-HO-b91juK0,385536
|
|
84
|
+
pyxcp/recorder/rekorder.cp311-win_amd64.pyd,sha256=pIQrKREnVtqExyjN1Y-qquSuJvKhYcXPRFCeMpzo7yQ,387584
|
|
85
85
|
pyxcp/recorder/rekorder.cpp,sha256=U0LMyk8pZXx9emgS_WPVthvn_9IpgE7JGrh4kg-8CX4,1900
|
|
86
86
|
pyxcp/recorder/rekorder.hpp,sha256=sWvRch9bVt6mmgrFHp5mwWhap7HoFG4geeb7UqEIzio,7638
|
|
87
87
|
pyxcp/recorder/setup.py,sha256=_99XFPQAd5V4LcJaSGJwdnbxgxJ7kl8DEXfHsnKO1Yg,998
|
|
@@ -118,11 +118,11 @@ pyxcp/transport/sxi.py,sha256=kWB9x5M1pS7GBtBW6R65KBX7zDI9zcRRZhFM8frmzU0,4760
|
|
|
118
118
|
pyxcp/transport/transport_wrapper.cpp,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
119
|
pyxcp/transport/usb_transport.py,sha256=JuYrwkWsUdibdVNA57LBEQT3a3ykOgWPdWcfqj96nDE,8343
|
|
120
120
|
pyxcp/types.py,sha256=mjp3FhsTTbS3D5VuC-dfdbMql0lJwEfbZjf8a2pHi1o,26158
|
|
121
|
-
pyxcp/utils.py,sha256=
|
|
121
|
+
pyxcp/utils.py,sha256=_ag2QMt0IxVhiCLG5BIO8JzIGt-rdqYrY7DRAPQ4AtA,3530
|
|
122
122
|
pyxcp/vector/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
123
123
|
pyxcp/vector/map.py,sha256=7Gnhvr79geMeqqGVIJPxODXGwABdNDinnqzhpooN5TE,2306
|
|
124
|
-
pyxcp-0.22.
|
|
125
|
-
pyxcp-0.22.
|
|
126
|
-
pyxcp-0.22.
|
|
127
|
-
pyxcp-0.22.
|
|
128
|
-
pyxcp-0.22.
|
|
124
|
+
pyxcp-0.22.35.dist-info/entry_points.txt,sha256=LkHsEwubm30s4oiyCy0cKj6k97ALvQ6KjAVdyEcqu7g,358
|
|
125
|
+
pyxcp-0.22.35.dist-info/LICENSE,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
|
|
126
|
+
pyxcp-0.22.35.dist-info/METADATA,sha256=1FG4ObUxb7QK7YO8yFEUJioWfGLPbX0gDB5apo2Hz3Q,4085
|
|
127
|
+
pyxcp-0.22.35.dist-info/WHEEL,sha256=hAjrwIdyeCDRZUAIRkSN3U0jR-RjwzSh5uFvppaSuws,98
|
|
128
|
+
pyxcp-0.22.35.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|