detox 19.8.4 → 19.9.2
Sign up to get free protection for your applications and to get access to all the features.
- package/Detox-android/com/wix/detox/{19.8.4/detox-19.8.4-javadoc.jar → 19.9.2/detox-19.9.2-javadoc.jar} +0 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-javadoc.jar.md5 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-javadoc.jar.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-javadoc.jar.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-javadoc.jar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{19.8.4/detox-19.8.4-sources.jar → 19.9.2/detox-19.9.2-sources.jar} +0 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-sources.jar.md5 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-sources.jar.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-sources.jar.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2-sources.jar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{19.8.4/detox-19.8.4.aar → 19.9.2/detox-19.9.2.aar} +0 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.aar.md5 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.aar.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.aar.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.aar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{19.8.4/detox-19.8.4.pom → 19.9.2/detox-19.9.2.pom} +1 -1
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.pom.md5 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.pom.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.pom.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.9.2/detox-19.9.2.pom.sha512 +1 -0
- package/Detox-android/com/wix/detox/maven-metadata.xml +4 -4
- package/Detox-android/com/wix/detox/maven-metadata.xml.md5 +1 -1
- package/Detox-android/com/wix/detox/maven-metadata.xml.sha1 +1 -1
- package/Detox-android/com/wix/detox/maven-metadata.xml.sha256 +1 -1
- package/Detox-android/com/wix/detox/maven-metadata.xml.sha512 +1 -1
- package/Detox-ios-src.tbz +0 -0
- package/Detox-ios.tbz +0 -0
- package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/uimodule/RN66Workaround.kt +13 -4
- package/package.json +2 -2
- package/src/artifacts/timeline/TimelineArtifactPlugin.js +9 -4
- package/src/devices/allocation/drivers/android/genycloud/GenyAllocDriver.js +1 -0
- package/src/devices/common/drivers/android/exec/ADB.js +5 -0
- package/src/devices/common/drivers/ios/tools/AppleSimUtils.js +3 -1
- package/src/utils/ChromeTracingExporter.js +6 -5
- package/src/utils/environment.js +30 -15
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-javadoc.jar.md5 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-javadoc.jar.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-javadoc.jar.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-javadoc.jar.sha512 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-sources.jar.md5 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-sources.jar.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-sources.jar.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4-sources.jar.sha512 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.aar.md5 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.aar.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.aar.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.aar.sha512 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.pom.md5 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.pom.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.pom.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.8.4/detox-19.8.4.pom.sha512 +0 -1
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
445b3420c7150f8bea0a85311a33315d
|
@@ -0,0 +1 @@
|
|
1
|
+
42e5208f60f7384b0d367a11633d05e0c89bb02a
|
@@ -0,0 +1 @@
|
|
1
|
+
1bb7381a2ffda512bb2f1d3704381cf59e323cd8f7c61de46270f1e419ad8357
|
@@ -0,0 +1 @@
|
|
1
|
+
10576a45ba33b66912fd02cb19337b47719c2ce7c0f2234f03fd8c9ce93f31ef8e5f684d3539677a39d6b8472c0cb027fa31db4ab2863aa89ee5d42f468078c4
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
4cfde044c88da921818ab32db0493e6d
|
@@ -0,0 +1 @@
|
|
1
|
+
a8f1e5c74446f6e7571861d1987ab839c4829559
|
@@ -0,0 +1 @@
|
|
1
|
+
a25dcc79498abea1edfe6827b7ffd85b320318f47a1ec2310c56c3c9a0dcbd3c
|
@@ -0,0 +1 @@
|
|
1
|
+
823c23be31da691a931ee32d96845dc22eb7598366728c240b6457b88b541e03a0bfffc629a56906a8c12ee99d261fa761d519717b089c1b0c291800fd5bee63
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
f00a26db2932c0f5dd9e4ea695c5f55c
|
@@ -0,0 +1 @@
|
|
1
|
+
39dba13a0e694adb108fc6bb4d15b58b21a4eed5
|
@@ -0,0 +1 @@
|
|
1
|
+
c9897fd212cfefb379527e059f6f29a94f29c4681b3659e26f8f08b22e20d1ea
|
@@ -0,0 +1 @@
|
|
1
|
+
f12faacdbbcf214aba48971b1054310eca06c2a69d403404376b087d86beb76345e383bc6d452f6af8ec25b050895700bd930f8a33c9439153a972a179b3c763
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<modelVersion>4.0.0</modelVersion>
|
4
4
|
<groupId>com.wix</groupId>
|
5
5
|
<artifactId>detox</artifactId>
|
6
|
-
<version>19.
|
6
|
+
<version>19.9.2</version>
|
7
7
|
<packaging>aar</packaging>
|
8
8
|
<name>Detox</name>
|
9
9
|
<description>Gray box end-to-end testing and automation library for mobile apps</description>
|
@@ -0,0 +1 @@
|
|
1
|
+
4349454740407bfe0a84123f722d4c50
|
@@ -0,0 +1 @@
|
|
1
|
+
54d373ae29b5c1c51a5c284026dcfea431c5c40b
|
@@ -0,0 +1 @@
|
|
1
|
+
f3d3d79f0ee51a1b60535c305ceaac120dcf8a3662b2731a760b3914c925e7a3
|
@@ -0,0 +1 @@
|
|
1
|
+
a4ed018382a78e1cd3b68380244b7610384f5ff9b0891cc992af2c43052012e6728004a6d629dd5e257005e03a15e54373549e0b9cb28d07d68e4669275f43f2
|
@@ -3,11 +3,11 @@
|
|
3
3
|
<groupId>com.wix</groupId>
|
4
4
|
<artifactId>detox</artifactId>
|
5
5
|
<versioning>
|
6
|
-
<latest>19.
|
7
|
-
<release>19.
|
6
|
+
<latest>19.9.2</latest>
|
7
|
+
<release>19.9.2</release>
|
8
8
|
<versions>
|
9
|
-
<version>19.
|
9
|
+
<version>19.9.2</version>
|
10
10
|
</versions>
|
11
|
-
<lastUpdated>
|
11
|
+
<lastUpdated>20220814171948</lastUpdated>
|
12
12
|
</versioning>
|
13
13
|
</metadata>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
599c8ee4cd5b6c0a76e4e6587929371c
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
c933b6a10c3326641f2f4f67d105d6c25546092f
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2ef5136da194e277ca17be542f43edcc8b6eb5a36cf6359dbb7fa2a669721cd6
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
738f2da22dc48e931699662eb116096506ad79b14583a9323b61ff369a19dec46f07033a5752593b20eb6d1123e3fcf35c9201cc74c4c2f0d9207084f7db5f4f
|
package/Detox-ios-src.tbz
CHANGED
Binary file
|
package/Detox-ios.tbz
CHANGED
Binary file
|
@@ -2,6 +2,7 @@ package com.wix.detox.reactnative.idlingresources.uimodule
|
|
2
2
|
|
3
3
|
import android.util.Log
|
4
4
|
import android.view.View
|
5
|
+
import com.facebook.react.uimanager.IllegalViewOperationException
|
5
6
|
import com.wix.detox.common.DetoxLog.Companion.LOG_TAG
|
6
7
|
import com.wix.detox.reactnative.ReactNativeInfo
|
7
8
|
import java.lang.ref.WeakReference
|
@@ -19,9 +20,7 @@ class RN66Workaround {
|
|
19
20
|
fun isScarceUISwitchCommandStuckInQueue(uiManagerModuleReflected: UIManagerModuleReflected): Boolean {
|
20
21
|
var isStuckSwitchOperation = false
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
if (rnVersion.minor >= 66 && uiManagerModuleReflected.getUIOpsCount() >= 1) {
|
23
|
+
if (isRelevantRNVersion() && uiManagerModuleReflected.getUIOpsCount() >= 1) {
|
25
24
|
val nextUIOperation = uiManagerModuleReflected.getNextUIOpReflected()
|
26
25
|
val view = getUIOpView(uiManagerModuleReflected, nextUIOperation)
|
27
26
|
val isReactSwitch = isReactSwitch(view)
|
@@ -46,10 +45,20 @@ class RN66Workaround {
|
|
46
45
|
return isStuckSwitchOperation
|
47
46
|
}
|
48
47
|
|
48
|
+
private fun isRelevantRNVersion(): Boolean {
|
49
|
+
val rnVersion = ReactNativeInfo.rnVersion()
|
50
|
+
return rnVersion.minor == 66 || (rnVersion.minor == 67 && rnVersion.patch < 4)
|
51
|
+
}
|
52
|
+
|
49
53
|
private fun getUIOpView(uiManagerModuleReflected: UIManagerModuleReflected, uiOperation: DispatchCommandOperationReflected?): View? {
|
50
54
|
val nativeViewHierarchyManager = uiManagerModuleReflected.nativeViewHierarchyManager() ?: return null
|
51
55
|
val tag = uiOperation?.tag ?: return null
|
52
|
-
return
|
56
|
+
return try {
|
57
|
+
nativeViewHierarchyManager.getViewClass(tag)
|
58
|
+
} catch(e: IllegalViewOperationException) {
|
59
|
+
Log.e(LOG_TAG, "failed to get view from tag ", e.cause)
|
60
|
+
null
|
61
|
+
}
|
53
62
|
}
|
54
63
|
|
55
64
|
private fun isReactSwitch(view: View?) = try {
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "detox",
|
3
3
|
"description": "E2E tests and automation for mobile",
|
4
|
-
"version": "19.
|
4
|
+
"version": "19.9.2",
|
5
5
|
"bin": {
|
6
6
|
"detox": "local-cli/cli.js"
|
7
7
|
},
|
@@ -177,5 +177,5 @@
|
|
177
177
|
}
|
178
178
|
}
|
179
179
|
},
|
180
|
-
"gitHead": "
|
180
|
+
"gitHead": "4427cebefaee0119ec757e18238be088f6c8ed99"
|
181
181
|
}
|
@@ -12,6 +12,11 @@ const traceNoop = {
|
|
12
12
|
endSection: _noop,
|
13
13
|
};
|
14
14
|
|
15
|
+
const CONTEXT_TYPES = {
|
16
|
+
TEST: 'test',
|
17
|
+
DESCRIBE: 'describe'
|
18
|
+
};
|
19
|
+
|
15
20
|
class TimelineArtifactPlugin extends ArtifactPlugin {
|
16
21
|
constructor(config) {
|
17
22
|
super(config);
|
@@ -32,23 +37,23 @@ class TimelineArtifactPlugin extends ArtifactPlugin {
|
|
32
37
|
|
33
38
|
async onRunDescribeStart(suite) {
|
34
39
|
const sectionName = (suite.name === 'ROOT_DESCRIBE_BLOCK' ? this._deviceName : suite.name);
|
35
|
-
this._trace.startSection(sectionName);
|
40
|
+
this._trace.startSection(sectionName, { context: CONTEXT_TYPES.DESCRIBE });
|
36
41
|
await super.onRunDescribeStart(suite);
|
37
42
|
}
|
38
43
|
|
39
44
|
async onRunDescribeFinish(suite) {
|
40
45
|
const sectionName = (suite.name === 'ROOT_DESCRIBE_BLOCK' ? this._deviceName : suite.name);
|
41
|
-
this._trace.endSection(sectionName);
|
46
|
+
this._trace.endSection(sectionName, { context: CONTEXT_TYPES.DESCRIBE });
|
42
47
|
await super.onRunDescribeFinish(suite);
|
43
48
|
}
|
44
49
|
|
45
50
|
async onTestStart(testSummary) {
|
46
|
-
this._trace.startSection(testSummary.title);
|
51
|
+
this._trace.startSection(testSummary.title, { context: CONTEXT_TYPES.TEST });
|
47
52
|
await super.onTestStart(testSummary);
|
48
53
|
}
|
49
54
|
|
50
55
|
async onTestDone(testSummary) {
|
51
|
-
this._trace.endSection(testSummary.title, { status: testSummary.status });
|
56
|
+
this._trace.endSection(testSummary.title, { status: testSummary.status, context: CONTEXT_TYPES.TEST });
|
52
57
|
await super.onTestDone(testSummary);
|
53
58
|
}
|
54
59
|
|
@@ -40,6 +40,7 @@ class GenyAllocDriver extends AllocationDriverBase {
|
|
40
40
|
const { adbName } = instance;
|
41
41
|
|
42
42
|
await this._adb.disableAndroidAnimations(adbName);
|
43
|
+
await this._adb.setWiFiToggle(adbName, true);
|
43
44
|
await this._adb.apiLevel(adbName);
|
44
45
|
return new GenycloudEmulatorCookie(instance);
|
45
46
|
}
|
@@ -206,6 +206,11 @@ class ADB {
|
|
206
206
|
await this.shell(deviceId, `settings put global transition_animation_scale 0`);
|
207
207
|
}
|
208
208
|
|
209
|
+
async setWiFiToggle(deviceId, state) {
|
210
|
+
const value = (state === true ? 'enable' : 'disable');
|
211
|
+
await this.shell(deviceId, `svc wifi ${value}`);
|
212
|
+
}
|
213
|
+
|
209
214
|
async screencap(deviceId, path) {
|
210
215
|
await this.shell(deviceId, `screencap ${path}`);
|
211
216
|
}
|
@@ -246,7 +246,9 @@ class AppleSimUtils {
|
|
246
246
|
// ```
|
247
247
|
// This workaround is done to ignore the error above, as we do not care if the app was running before, we just
|
248
248
|
// want to make sure it isn't now.
|
249
|
-
if (err.code === 3 &&
|
249
|
+
if (err.code === 3 &&
|
250
|
+
(err.stderr.includes(`the app is not currently running`) ||
|
251
|
+
err.stderr.includes(`The operation couldn’t be completed. found nothing to terminate`))) {
|
250
252
|
return;
|
251
253
|
}
|
252
254
|
|
@@ -26,15 +26,16 @@ class ChromeTracingExporter {
|
|
26
26
|
|
27
27
|
_parseEvent(event) {
|
28
28
|
const { name, ts, args, type } = event;
|
29
|
+
const tsInMicroseconds = ts * 1000;
|
29
30
|
switch (type) {
|
30
|
-
case 'start': return this._event(name, 'B',
|
31
|
-
case 'end': return this._event(name, 'E',
|
31
|
+
case 'start': return this._event(name, 'B', tsInMicroseconds, args);
|
32
|
+
case 'end': return this._event(name, 'E', tsInMicroseconds, args);
|
32
33
|
case 'init': return [
|
33
|
-
this._event('process_name', 'M',
|
34
|
-
this._event('thread_name', 'M',
|
34
|
+
this._event('process_name', 'M', tsInMicroseconds, { name: this._process.name }),
|
35
|
+
this._event('thread_name', 'M', tsInMicroseconds, { name: this._thread.name }),
|
35
36
|
];
|
36
37
|
default:
|
37
|
-
throw new DetoxRuntimeError(`Invalid type '${type}' in event: ${event}`);
|
38
|
+
throw new DetoxRuntimeError({ message: `Invalid type '${type}' in event: ${event}` });
|
38
39
|
}
|
39
40
|
}
|
40
41
|
|
package/src/utils/environment.js
CHANGED
@@ -78,7 +78,7 @@ function getAndroidEmulatorPath() {
|
|
78
78
|
return legacyPath;
|
79
79
|
}
|
80
80
|
|
81
|
-
|
81
|
+
throwSdkBinIntegrityError(sdkRoot, 'emulator/emulator');
|
82
82
|
}
|
83
83
|
|
84
84
|
async function getAaptPath() {
|
@@ -88,23 +88,33 @@ async function getAaptPath() {
|
|
88
88
|
}
|
89
89
|
|
90
90
|
const latestBuildTools = await getLatestBuildToolsPath(sdkRoot);
|
91
|
-
|
91
|
+
if (!latestBuildTools) {
|
92
|
+
throwSdkIntegrityError('Failed to find the "aapt" tool under the Android SDK: No build-tools are installed!');
|
93
|
+
}
|
94
|
+
|
95
|
+
const defaultPath = which('aapt', latestBuildTools);
|
92
96
|
if (defaultPath) {
|
93
97
|
return defaultPath;
|
94
98
|
}
|
95
99
|
|
96
|
-
|
100
|
+
throwSdkToolPathError(`${latestBuildTools}/aapt`);
|
97
101
|
}
|
98
102
|
|
99
103
|
async function getLatestBuildToolsPath(sdkRoot) {
|
100
|
-
if (!sdkRoot)
|
104
|
+
if (!sdkRoot) {
|
105
|
+
return '';
|
106
|
+
}
|
101
107
|
|
102
108
|
const buildToolsDir = path.join(sdkRoot, 'build-tools');
|
103
|
-
if (!fs.existsSync(buildToolsDir))
|
109
|
+
if (!fs.existsSync(buildToolsDir)) {
|
110
|
+
return '';
|
111
|
+
}
|
104
112
|
|
105
113
|
const buildToolsVersions = await fsext.getDirectories(buildToolsDir);
|
106
114
|
const latestBuildToolsVersion = _.last(buildToolsVersions);
|
107
|
-
if (!latestBuildToolsVersion)
|
115
|
+
if (!latestBuildToolsVersion) {
|
116
|
+
return '';
|
117
|
+
}
|
108
118
|
|
109
119
|
return path.join(buildToolsDir, latestBuildToolsVersion);
|
110
120
|
}
|
@@ -120,7 +130,7 @@ function getAdbPath() {
|
|
120
130
|
return defaultPath;
|
121
131
|
}
|
122
132
|
|
123
|
-
|
133
|
+
throwSdkBinIntegrityError(sdkRoot, 'platform-tools/adb');
|
124
134
|
}
|
125
135
|
|
126
136
|
function getGmsaasPath() {
|
@@ -142,15 +152,20 @@ function throwMissingAvdError(avdName, avdPath, avdIniPath) {
|
|
142
152
|
);
|
143
153
|
}
|
144
154
|
|
145
|
-
function
|
146
|
-
const executablePath = path.join(sdkRoot,
|
147
|
-
|
148
|
-
|
155
|
+
function throwSdkBinIntegrityError(sdkRoot, relativeBinPath) {
|
156
|
+
const executablePath = path.join(sdkRoot, relativeBinPath);
|
157
|
+
throwSdkToolPathError(executablePath);
|
158
|
+
}
|
149
159
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
160
|
+
function throwSdkToolPathError(sdkToolPath) {
|
161
|
+
const name = path.basename(sdkToolPath);
|
162
|
+
const dir = path.dirname(sdkToolPath);
|
163
|
+
|
164
|
+
throwSdkIntegrityError(`There was no "${name}" executable file in directory: ${dir}`);
|
165
|
+
}
|
166
|
+
|
167
|
+
function throwSdkIntegrityError(errMessage) {
|
168
|
+
throw new DetoxRuntimeError(`${errMessage}\nCheck the integrity of your Android SDK.`);
|
154
169
|
}
|
155
170
|
|
156
171
|
function throwMissingGmsaasError() {
|
@@ -1 +0,0 @@
|
|
1
|
-
f1eff49df29549c4f094b94f820d8659
|
@@ -1 +0,0 @@
|
|
1
|
-
00703d0219b1e8ad51dfe52206f2ff795956136d
|
@@ -1 +0,0 @@
|
|
1
|
-
c40e8c0d55385f0ee35aec198dcf9ae2a63c4279786603aa9294436384fb3dcd
|
@@ -1 +0,0 @@
|
|
1
|
-
00742f6f56f5314f0a1ffa99e4e831615a926fe8e9e32d94725903e23ee6ed8067682d0bedd19350f092aebbe2a90c705e050a20967103e6599ae237a0882baf
|
@@ -1 +0,0 @@
|
|
1
|
-
7070b5efa82ce7926d40972ca14ec8fd
|
@@ -1 +0,0 @@
|
|
1
|
-
f6c4c5b5f2eb5d89f6605df7b09f7b2689bd132d
|
@@ -1 +0,0 @@
|
|
1
|
-
558d13035ea21c4f584b8463cfd923bbcfcfd0ef904ec4e9d45b17bff8aa5cea
|
@@ -1 +0,0 @@
|
|
1
|
-
631b37c92c17dd5158e8b72b305ba18adc69b71a7a72449c00fd9cffa36d7627a341f6825d1c809a77c9dfecd5ffe3a795d23f3f48be3081f2a6cce4a5bd2d8e
|
@@ -1 +0,0 @@
|
|
1
|
-
6d3f9250a50b2297577f126aa0253833
|
@@ -1 +0,0 @@
|
|
1
|
-
e8a6d8b30ca550020ddcc21a061ea5cb360515d8
|
@@ -1 +0,0 @@
|
|
1
|
-
bc528b332ad97156496b6d44e60005884f2d9ffe79808319e4a844b65cad9810
|
@@ -1 +0,0 @@
|
|
1
|
-
d3b944c0bedc48769416f46594853b759776b04befafc96314f2023f01f94607b43a22f2ebffe2ccd2c1c9144357d8e8888b600bfed1c8550263ff1c63d1f22f
|
@@ -1 +0,0 @@
|
|
1
|
-
73a0b8c6ccc7b6f6eb6b3cc381eafba5
|
@@ -1 +0,0 @@
|
|
1
|
-
9212f8d378d2bb72115181b5e2c4d086eaa7ba2f
|
@@ -1 +0,0 @@
|
|
1
|
-
4a350adbac62859765229611809d3cd99eec3c0d3d46c8dcf49916c9cb53fe34
|
@@ -1 +0,0 @@
|
|
1
|
-
3fd69cb6ccc763c9bae624716a6e76bcafafd0946c9562505ab5c3592c27ab6873f1f2adaa6d30fc89549f3b50ca451e902559ef290596b903beb696ac883d4e
|