Compare commits
114 Commits
release-1.
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4a4147b563 | ||
|
|
08b72af647 | ||
|
|
528e090c6f | ||
|
|
652f9e5705 | ||
|
|
6a91ec7a6b | ||
|
|
c3a9eff96b | ||
|
|
bd05d893eb | ||
|
|
6965bc0acd | ||
|
|
c6e9554026 | ||
|
|
ab8734e373 | ||
|
|
267956b36c | ||
|
|
ec84ddb38b | ||
|
|
ba2db48d8e | ||
|
|
186f61f771 | ||
|
|
47971517cd | ||
|
|
8db182d7e5 | ||
|
|
d44a609d0c | ||
|
|
0a1892d39f | ||
|
|
9b092da37a | ||
|
|
852e2c29e3 | ||
|
|
1b087d59d4 | ||
|
|
30ce8651b5 | ||
|
|
80a8ee4de9 | ||
|
|
354f3bc1cf | ||
|
|
1e6b018ff4 | ||
|
|
eba489bb98 | ||
|
|
2bfdcaaa42 | ||
|
|
c2e71ef52f | ||
|
|
9ee8fe74ba | ||
|
|
95d8783852 | ||
|
|
b4f3604584 | ||
|
|
badccac90c | ||
|
|
1b8d1a5a8d | ||
|
|
2fe57d2597 | ||
|
|
904d5b2ce2 | ||
|
|
1911b3dd97 | ||
|
|
bd430a1009 | ||
|
|
c16d0e8f45 | ||
|
|
847273c558 | ||
|
|
b9bac8b6a5 | ||
|
|
c855967d56 | ||
|
|
bae97e3312 | ||
|
|
f1be3031a7 | ||
|
|
3173486b3b | ||
|
|
c445b21d58 | ||
|
|
9a16cf6e54 | ||
|
|
a22990c1ed | ||
|
|
8262fa183b | ||
|
|
c3f3c6211d | ||
|
|
0c40f39a90 | ||
|
|
20b9aa86f7 | ||
|
|
a00c920382 | ||
|
|
e40d6552bc | ||
|
|
5e1564de6c | ||
|
|
155daae8d0 | ||
|
|
6680abf925 | ||
|
|
9bbfea525a | ||
|
|
979ef077b3 | ||
|
|
b7e1a987fc | ||
|
|
a705caa5fa | ||
|
|
441b28fede | ||
|
|
9c95534f39 | ||
|
|
57015c36b2 | ||
|
|
a2815c75a3 | ||
|
|
9ce82af856 | ||
|
|
4b792ff040 | ||
|
|
904355b0a6 | ||
|
|
02f2fdd4a1 | ||
|
|
9f039ff0b8 | ||
|
|
ba83290fcd | ||
|
|
05f84000b3 | ||
|
|
7302bf9d7a | ||
|
|
8c269541c3 | ||
|
|
324ca1b50b | ||
|
|
79730484c0 | ||
|
|
86fb648dae | ||
|
|
52809d8f2d | ||
|
|
0a906998fe | ||
|
|
4a65bc1726 | ||
|
|
f395ab1cb5 | ||
|
|
e6c051fee4 | ||
|
|
e76701f988 | ||
|
|
e6616a8c36 | ||
|
|
824a9e1124 | ||
|
|
113793045f | ||
|
|
c04937b1fa | ||
|
|
e8994d503e | ||
|
|
768bb6fc64 | ||
|
|
645eba7fe7 | ||
|
|
c76ed41958 | ||
|
|
4a2c1113c1 | ||
|
|
b6f78a8667 | ||
|
|
53c7c81c0f | ||
|
|
6dd250a1ed | ||
|
|
2e2c720241 | ||
|
|
7e3cf8f162 | ||
|
|
dab8d731fa | ||
|
|
65509137b6 | ||
|
|
48ab5f4966 | ||
|
|
a37447d3e8 | ||
|
|
5d1d0fb12a | ||
|
|
790818623f | ||
|
|
d46a227cfc | ||
|
|
e986d4b214 | ||
|
|
7bcffdf0d1 | ||
|
|
f4dd3c4f06 | ||
|
|
f42cf00c35 | ||
|
|
38c347552b | ||
|
|
bab6ec70f5 | ||
|
|
8db25738e2 | ||
|
|
28f770df89 | ||
|
|
a720501fde | ||
|
|
648911b3ed | ||
|
|
ab6c925a9c |
@@ -107,6 +107,10 @@ bridge test:
|
||||
mailbox integration test:
|
||||
extends: .optional_tests
|
||||
rules:
|
||||
- changes:
|
||||
- mailbox-integration-tests/**/*
|
||||
when: on_success
|
||||
allow_failure: false
|
||||
- if: '$CI_PIPELINE_SOURCE == "schedule"'
|
||||
when: on_success
|
||||
- if: '$CI_COMMIT_TAG == null'
|
||||
|
||||
3
.idea/codeStyles/Project.xml
generated
@@ -35,9 +35,6 @@
|
||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
|
||||
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||
</JetCodeStyleSettings>
|
||||
<XML>
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="Groovy">
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
import com.android.build.gradle.tasks.MergeResources
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'witness'
|
||||
apply from: 'witness.gradle'
|
||||
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
buildToolsVersion '30.0.3'
|
||||
compileSdkVersion 33
|
||||
buildToolsVersion '33.0.0'
|
||||
|
||||
packagingOptions {
|
||||
doNotStrip '**/*.so'
|
||||
@@ -14,12 +12,13 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 30
|
||||
versionCode 10415
|
||||
versionName "1.4.15"
|
||||
targetSdkVersion 31
|
||||
versionCode 10419
|
||||
versionName "1.4.19"
|
||||
consumerProguardFiles 'proguard-rules.txt'
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
testInstrumentationRunnerArguments disableAnalytics: 'true'
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
@@ -41,8 +40,16 @@ configurations {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(path: ':bramble-core', configuration: 'default')
|
||||
// In theory this dependency shouldn't be needed, but without it Android Studio's linter will
|
||||
// complain about unresolved symbols for bramble-api test classes in bramble-android tests,
|
||||
// even though the bramble-api test classes are provided by the testImplementation dependency
|
||||
// below and the compiler can find them
|
||||
implementation project(':bramble-api')
|
||||
|
||||
implementation project(':bramble-core')
|
||||
|
||||
implementation 'androidx.annotation:annotation:1.5.0'
|
||||
|
||||
tor "org.briarproject:tor-android:$tor_version"
|
||||
tor "org.briarproject:obfs4proxy-android:$obfs4proxy_version"
|
||||
tor "org.briarproject:snowflake-android:$snowflake_version"
|
||||
@@ -52,18 +59,18 @@ dependencies {
|
||||
compileOnly 'javax.annotation:jsr250-api:1.0'
|
||||
|
||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||
|
||||
testImplementation "junit:junit:$junit_version"
|
||||
testImplementation "org.jmock:jmock:$jmock_version"
|
||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||
testImplementation "org.jmock:jmock-imposters:$jmock_version"
|
||||
}
|
||||
|
||||
def torBinariesDir = 'src/main/res/raw'
|
||||
def torLibsDir = 'src/main/jniLibs'
|
||||
|
||||
task cleanTorBinaries {
|
||||
outputs.dir torLibsDir
|
||||
doLast {
|
||||
delete fileTree(torBinariesDir) { include '*.zip' }
|
||||
delete fileTree(torLibsDir) { include '**/*.so' }
|
||||
}
|
||||
}
|
||||
@@ -71,6 +78,7 @@ task cleanTorBinaries {
|
||||
clean.dependsOn cleanTorBinaries
|
||||
|
||||
task unpackTorBinaries {
|
||||
outputs.dir torLibsDir
|
||||
doLast {
|
||||
configurations.tor.each { outer ->
|
||||
zipTree(outer).each { inner ->
|
||||
@@ -105,8 +113,4 @@ task unpackTorBinaries {
|
||||
dependsOn cleanTorBinaries
|
||||
}
|
||||
|
||||
tasks.withType(MergeResources) {
|
||||
inputs.dir torBinariesDir
|
||||
inputs.dir torLibsDir
|
||||
dependsOn unpackTorBinaries
|
||||
}
|
||||
preBuild.dependsOn unpackTorBinaries
|
||||
|
||||
@@ -1,15 +1,28 @@
|
||||
<manifest
|
||||
package="org.briarproject.bramble"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.briarproject.bramble">
|
||||
|
||||
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
|
||||
<uses-feature
|
||||
android:name="android.hardware.bluetooth"
|
||||
android:required="false" />
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<!-- The BLUETOOTH permission was supposed to be removed in API 31 but is still needed on some Xiaomi/Redmi/POCO devices running API 31 -->
|
||||
<uses-permission
|
||||
android:name="android.permission.BLUETOOTH"
|
||||
android:maxSdkVersion="31" />
|
||||
<uses-permission
|
||||
android:name="android.permission.BLUETOOTH_ADMIN"
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission
|
||||
android:name="android.permission.BLUETOOTH_SCAN"
|
||||
android:usesPermissionFlags="neverForLocation"
|
||||
tools:targetApi="31" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<application
|
||||
android:allowBackup="false"
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.briarproject.bramble.socks.SocksModule;
|
||||
import org.briarproject.bramble.system.AndroidSystemModule;
|
||||
import org.briarproject.bramble.system.AndroidTaskSchedulerModule;
|
||||
import org.briarproject.bramble.system.AndroidWakefulIoExecutorModule;
|
||||
import org.briarproject.bramble.system.DefaultThreadFactoryModule;
|
||||
|
||||
import dagger.Module;
|
||||
|
||||
@@ -18,6 +19,7 @@ import dagger.Module;
|
||||
AndroidSystemModule.class,
|
||||
AndroidTaskSchedulerModule.class,
|
||||
AndroidWakefulIoExecutorModule.class,
|
||||
DefaultThreadFactoryModule.class,
|
||||
CircumventionModule.class,
|
||||
DnsModule.class,
|
||||
ReportingModule.class,
|
||||
|
||||
@@ -55,6 +55,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static java.util.logging.Logger.getLogger;
|
||||
import static org.briarproject.bramble.util.AndroidUtils.hasBtConnectPermission;
|
||||
import static org.briarproject.bramble.util.PrivacyUtils.scrubMacAddress;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@@ -97,6 +98,11 @@ class AndroidBluetoothPlugin extends
|
||||
this.clock = clock;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isBluetoothAccessible() {
|
||||
return hasBtConnectPermission(app);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() throws PluginException {
|
||||
super.start();
|
||||
|
||||
@@ -6,7 +6,6 @@ import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Parcel;
|
||||
import android.os.StrictMode;
|
||||
import android.provider.Settings;
|
||||
@@ -15,11 +14,17 @@ import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static android.os.Build.FINGERPRINT;
|
||||
import static android.os.Build.SERIAL;
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static android.os.Process.myPid;
|
||||
import static android.os.Process.myTid;
|
||||
import static android.os.Process.myUid;
|
||||
import static android.provider.Settings.Secure.ANDROID_ID;
|
||||
|
||||
@Immutable
|
||||
@@ -39,22 +44,27 @@ class AndroidSecureRandomProvider extends UnixSecureRandomProvider {
|
||||
@Override
|
||||
protected void writeToEntropyPool(DataOutputStream out) throws IOException {
|
||||
super.writeToEntropyPool(out);
|
||||
out.writeInt(android.os.Process.myPid());
|
||||
out.writeInt(android.os.Process.myTid());
|
||||
out.writeInt(android.os.Process.myUid());
|
||||
if (Build.FINGERPRINT != null) out.writeUTF(Build.FINGERPRINT);
|
||||
if (Build.SERIAL != null) out.writeUTF(Build.SERIAL);
|
||||
out.writeInt(myPid());
|
||||
out.writeInt(myTid());
|
||||
out.writeInt(myUid());
|
||||
if (FINGERPRINT != null) out.writeUTF(FINGERPRINT);
|
||||
if (SERIAL != null) out.writeUTF(SERIAL);
|
||||
ContentResolver contentResolver = appContext.getContentResolver();
|
||||
String id = Settings.Secure.getString(contentResolver, ANDROID_ID);
|
||||
if (id != null) out.writeUTF(id);
|
||||
Parcel parcel = Parcel.obtain();
|
||||
BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter();
|
||||
if (bt != null) {
|
||||
for (BluetoothDevice device : bt.getBondedDevices())
|
||||
parcel.writeParcelable(device, 0);
|
||||
// On API 31 and higher we need permission to access bonded devices
|
||||
if (SDK_INT < 31) {
|
||||
Parcel parcel = Parcel.obtain();
|
||||
BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter();
|
||||
if (bt != null) {
|
||||
@SuppressLint("MissingPermission")
|
||||
Set<BluetoothDevice> deviceSet = bt.getBondedDevices();
|
||||
for (BluetoothDevice device : deviceSet)
|
||||
parcel.writeParcelable(device, 0);
|
||||
}
|
||||
out.write(parcel.marshall());
|
||||
parcel.recycle();
|
||||
}
|
||||
out.write(parcel.marshall());
|
||||
parcel.recycle();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -77,7 +87,7 @@ class AndroidSecureRandomProvider extends UnixSecureRandomProvider {
|
||||
.invoke(null, (Object) seed);
|
||||
// Mix the output of the Linux PRNG into the OpenSSL PRNG
|
||||
int bytesRead = (Integer) Class.forName(
|
||||
"org.apache.harmony.xnet.provider.jsse.NativeCrypto")
|
||||
"org.apache.harmony.xnet.provider.jsse.NativeCrypto")
|
||||
.getMethod("RAND_load_file", String.class, long.class)
|
||||
.invoke(null, "/dev/urandom", 1024);
|
||||
if (bytesRead != 1024) throw new IOException();
|
||||
|
||||
@@ -41,6 +41,7 @@ import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Logger.getLogger;
|
||||
import static org.briarproject.bramble.system.AlarmConstants.EXTRA_PID;
|
||||
import static org.briarproject.bramble.system.AlarmConstants.REQUEST_ALARM;
|
||||
import static org.briarproject.bramble.util.AndroidUtils.getImmutableFlags;
|
||||
|
||||
@ThreadSafe
|
||||
@NotNullByDefault
|
||||
@@ -199,7 +200,7 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
|
||||
Intent i = new Intent(app, AlarmReceiver.class);
|
||||
i.putExtra(EXTRA_PID, android.os.Process.myPid());
|
||||
return PendingIntent.getBroadcast(app, REQUEST_ALARM, i,
|
||||
FLAG_CANCEL_CURRENT);
|
||||
getImmutableFlags(FLAG_CANCEL_CURRENT));
|
||||
}
|
||||
|
||||
private class ScheduledTask
|
||||
|
||||
@@ -22,8 +22,13 @@ import java.util.Scanner;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static android.Manifest.permission.BLUETOOTH_CONNECT;
|
||||
import static android.app.PendingIntent.FLAG_IMMUTABLE;
|
||||
import static android.content.Context.MODE_PRIVATE;
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
import static android.os.Build.VERSION.SDK_INT;
|
||||
import static android.os.Process.myPid;
|
||||
import static android.os.Process.myUid;
|
||||
import static java.lang.Runtime.getRuntime;
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.briarproject.nullsafety.NullSafety.requireNonNull;
|
||||
@@ -48,6 +53,11 @@ public class AndroidUtils {
|
||||
return abis;
|
||||
}
|
||||
|
||||
public static boolean hasBtConnectPermission(Context ctx) {
|
||||
return SDK_INT < 31 || ctx.checkPermission(BLUETOOTH_CONNECT, myPid(),
|
||||
myUid()) == PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
public static String getBluetoothAddress(Context ctx,
|
||||
BluetoothAdapter adapter) {
|
||||
return getBluetoothAddressAndMethod(ctx, adapter).getFirst();
|
||||
@@ -55,6 +65,9 @@ public class AndroidUtils {
|
||||
|
||||
public static Pair<String, String> getBluetoothAddressAndMethod(Context ctx,
|
||||
BluetoothAdapter adapter) {
|
||||
// If we don't have permission to access the adapter's address, let
|
||||
// the caller know we can't find it
|
||||
if (!hasBtConnectPermission(ctx)) return new Pair<>("", "");
|
||||
// Return the adapter's address if it's valid and not fake
|
||||
@SuppressLint("HardwareIds")
|
||||
String address = adapter.getAddress();
|
||||
@@ -139,4 +152,11 @@ public class AndroidUtils {
|
||||
public static boolean isUiThread() {
|
||||
return Looper.myLooper() == Looper.getMainLooper();
|
||||
}
|
||||
|
||||
public static int getImmutableFlags(int flags) {
|
||||
if (SDK_INT >= 23) {
|
||||
return FLAG_IMMUTABLE | flags;
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,164 +2,58 @@ dependencyVerification {
|
||||
verify = [
|
||||
'androidx.annotation:annotation:1.5.0:annotation-1.5.0.jar:261fb7c0210858500bab66d34354972a75166ab4182add283780b05513d6ec4a',
|
||||
'cglib:cglib:3.2.8:cglib-3.2.8.jar:3f64de999ecc5595dc84ca8ff0879d8a34c8623f9ef3c517a53ed59023fcb9db',
|
||||
'com.android.tools.analytics-library:protos:30.0.3:protos-30.0.3.jar:f62b89dcd9de719c6a7b7e15fb1dd20e45b57222e675cf633607bd0ed6bca7e7',
|
||||
'com.android.tools.analytics-library:shared:30.0.3:shared-30.0.3.jar:05aa9ba3cc890354108521fdf99802565aae5dd6ca44a6ac8bb8d594d1c1cd15',
|
||||
'com.android.tools.analytics-library:tracker:30.0.3:tracker-30.0.3.jar:5d0ef35bf6733e96210b5085a2a202152921bf834d345959dce1ca3369b528df',
|
||||
'com.android.tools.build:aapt2-proto:4.1.0-alpha01-6193524:aapt2-proto-4.1.0-alpha01-6193524.jar:17e75523e1e92dd4f222c7368ee41df9e964a508232f591e265d0c499baf9dca',
|
||||
'com.android.tools.build:apksig:7.0.3:apksig-7.0.3.jar:012337a2803c9a30dfc41dcbc6450686ee9e5f582549f7f126479f743a343ec9',
|
||||
'com.android.tools.build:apkzlib:7.0.3:apkzlib-7.0.3.jar:b31e53174c92db83c5cc6e7dac6734ea4e907a72e452c2bf1818dfd082c59397',
|
||||
'com.android.tools.build:builder-model:7.0.3:builder-model-7.0.3.jar:483f99d7494a5bed027e1e8d29111384cf535d4842f0be5a79805bd44bb68d4e',
|
||||
'com.android.tools.build:builder-test-api:7.0.3:builder-test-api-7.0.3.jar:f6de4bc2cef545e8367bf82d7c733829c7be3b0b3b8b09fd8c58f2150e59ab46',
|
||||
'com.android.tools.build:builder:7.0.3:builder-7.0.3.jar:c6952da0094b094c2ba0fe84c675622097c5d9b9f9beb53485b860320540cf1d',
|
||||
'com.android.tools.build:manifest-merger:30.0.3:manifest-merger-30.0.3.jar:72b346ba6318b4b6260e6e49df4bea5da2e12329ab6c2beb2269c49a9f51f178',
|
||||
'com.android.tools.ddms:ddmlib:30.0.3:ddmlib-30.0.3.jar:7a914a68ab93393657297234e2f37b22410ae9a433cba692ce8c727c9607e3bb',
|
||||
'com.android.tools.external.com-intellij:intellij-core:30.0.3:intellij-core-30.0.3.jar:1ebe858d3f58eeaa8c06507f8ac0f1c7051e6c61f35a70f3c3967d5734d3abc5',
|
||||
'com.android.tools.external.com-intellij:kotlin-compiler:30.0.3:kotlin-compiler-30.0.3.jar:ed00e441f427cb4e0d418287b9da30b12b7f735f9af32e6b5d3dc960b6a742fc',
|
||||
'com.android.tools.external.org-jetbrains:uast:30.0.3:uast-30.0.3.jar:a77801bee6ff509910e459525c9c34d7f04b066ade123547f16f1917548eadea',
|
||||
'com.android.tools.layoutlib:layoutlib-api:30.0.3:layoutlib-api-30.0.3.jar:4caa87e9ca2e11315f650d576cd59fec1793373bc3fca3f6d53c029e7534e7c4',
|
||||
'com.android.tools.lint:lint-api:30.0.3:lint-api-30.0.3.jar:bcecbd2f752a6560096a9029a47d1de6bd788a51bab505c5ebfba6a18524b983',
|
||||
'com.android.tools.lint:lint-checks:30.0.3:lint-checks-30.0.3.jar:25a7cd42dc3ad502337f131fb8b7e873c53301db0a67b1c64dd4ae7a8eb66cec',
|
||||
'com.android.tools.lint:lint-gradle:30.0.3:lint-gradle-30.0.3.jar:94544d6147a809bf2fd3440e51f28a4e42e547d74aab53eefd74938cdad42c26',
|
||||
'com.android.tools.lint:lint-model:30.0.3:lint-model-30.0.3.jar:0b940a7f575c2ff5cbd038260f41dde686a93c672213881ead3ce8af3513b396',
|
||||
'com.android.tools.lint:lint:30.0.3:lint-30.0.3.jar:ee4f11001e0c7e3b776e0d67399ad354b19b0f168822ec2b7db47c0910ed227d',
|
||||
'com.android.tools:annotations:30.0.3:annotations-30.0.3.jar:5c1944982fda8555855c4f5422fabf0dc8e2306e1f5460e9ad82dae71316bc31',
|
||||
'com.android.tools:common:30.0.3:common-30.0.3.jar:8751efaaf2c2ddd1f0a37526c794347def6a3057ca9fc510307c13a6cf0d036f',
|
||||
'com.android.tools:dvlib:30.0.3:dvlib-30.0.3.jar:5affafcec390041e5afd64cb924153f5e474db47ee8ccc2f555b495083141233',
|
||||
'com.android.tools:repository:30.0.3:repository-30.0.3.jar:0a40c6f16c506903ce2c609affd8228aceda73a69d93dfa42d4f02b8491449f6',
|
||||
'com.android.tools:sdk-common:30.0.3:sdk-common-30.0.3.jar:b45570a380360236ffee0f6bb593d66b673bad3834dfe0d6c9871fa7188ee0eb',
|
||||
'com.android.tools:sdklib:30.0.3:sdklib-30.0.3.jar:7088f20a414fab170a21e457825e14ebe099f753558e02c8acc12c67eb412162',
|
||||
'com.android:signflinger:7.0.3:signflinger-7.0.3.jar:903a4536db3e96b4e1e1dc1e400eb0b91bf7866d9b39cd7ec94d75dde158f152',
|
||||
'com.android:zipflinger:7.0.3:zipflinger-7.0.3.jar:fd209c960a3eff7a339e6fcba07d5e9ef4604d1633c69ab2df987460d9804140',
|
||||
'com.beust:jcommander:1.78:jcommander-1.78.jar:7891debb84b5f83e9bd57593ebece3399abbe0fd938cf306b3534c57913b9615',
|
||||
'com.github.javaparser:javaparser-core:3.17.0:javaparser-core-3.17.0.jar:23f5c982e1c7771423d37d52c774e8d2e80fd7ea7305ebe448797a96f67e6fca',
|
||||
'com.google.code.findbugs:annotations:3.0.1:annotations-3.0.1.jar:6b47ff0a6de0ce17cbedc3abb0828ca5bce3009d53ea47b3723ff023c4742f79',
|
||||
'com.google.code.findbugs:jsr305:3.0.2:jsr305-3.0.2.jar:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7',
|
||||
'com.google.code.gson:gson:2.8.6:gson-2.8.6.jar:c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f',
|
||||
'com.google.dagger:dagger-compiler:2.33:dagger-compiler-2.33.jar:aa8a0d8370c578fd6999802d0d90b9829377a46d2c1141e11b8f737970e7155e',
|
||||
'com.google.dagger:dagger-producers:2.33:dagger-producers-2.33.jar:5897f0b6eef799c2adfe3ccacc58c0fb374d58acb063c3ebe5366c38a8bce5c8',
|
||||
'com.google.dagger:dagger-spi:2.33:dagger-spi-2.33.jar:e2dcab2221b8afb9556ef0a1c83b0bd5f42552e254322a257330f754cdbbb9d4',
|
||||
'com.google.dagger:dagger:2.33:dagger-2.33.jar:d8798c5b8cf6b125234e33af5c6293bb9f2208ce29b57924c35b8c0be7b6bdcb',
|
||||
'com.google.errorprone:error_prone_annotations:2.2.0:error_prone_annotations-2.2.0.jar:6ebd22ca1b9d8ec06d41de8d64e0596981d9607b42035f9ed374f9de271a481a',
|
||||
'com.google.errorprone:error_prone_annotations:2.3.4:error_prone_annotations-2.3.4.jar:baf7d6ea97ce606c53e11b6854ba5f2ce7ef5c24dddf0afa18d1260bd25b002c',
|
||||
'com.google.dagger:dagger-compiler:2.43.2:dagger-compiler-2.43.2.jar:298c020ee6ed2f4cc651ebbfdb7f8de329b07c44b618d65be117846a850e2a03',
|
||||
'com.google.dagger:dagger-producers:2.43.2:dagger-producers-2.43.2.jar:e7f5d9ffc85d48a49c8e22e02833d418f7ccad5d7512f529964db5127ab915ff',
|
||||
'com.google.dagger:dagger-spi:2.43.2:dagger-spi-2.43.2.jar:3bae8d9dadeaaa5927da6f094389a560c12c05fec3d2711d2fa79292c7a7d7ad',
|
||||
'com.google.dagger:dagger:2.43.2:dagger-2.43.2.jar:c89681f7cbbf8c527bf4ac2748515d617fdb54a1d425c08d914fdc28192b5fe4',
|
||||
'com.google.devtools.ksp:symbol-processing-api:1.7.0-1.0.6:symbol-processing-api-1.7.0-1.0.6.jar:adc29417be5ca9ff42118105fea4e36d9ef44987abfc41432309371a60198941',
|
||||
'com.google.errorprone:error_prone_annotations:2.7.1:error_prone_annotations-2.7.1.jar:cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3',
|
||||
'com.google.errorprone:javac-shaded:9-dev-r4023-3:javac-shaded-9-dev-r4023-3.jar:65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30',
|
||||
'com.google.googlejavaformat:google-java-format:1.5:google-java-format-1.5.jar:aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e',
|
||||
'com.google.guava:failureaccess:1.0.1:failureaccess-1.0.1.jar:a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26',
|
||||
'com.google.guava:guava:27.1-jre:guava-27.1-jre.jar:4a5aa70cc968a4d137e599ad37553e5cfeed2265e8c193476d7119036c536fe7',
|
||||
'com.google.guava:guava:30.1-jre:guava-30.1-jre.jar:e6dd072f9d3fe02a4600688380bd422bdac184caf6fe2418cfdd0934f09432aa',
|
||||
'com.google.guava:guava:31.0.1-jre:guava-31.0.1-jre.jar:d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9',
|
||||
'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99',
|
||||
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
||||
'com.google.j2objc:j2objc-annotations:1.3:j2objc-annotations-1.3.jar:21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b',
|
||||
'com.google.jimfs:jimfs:1.1:jimfs-1.1.jar:c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd',
|
||||
'com.google.protobuf:protobuf-java:3.10.0:protobuf-java-3.10.0.jar:161d7d61a8cb3970891c299578702fd079646e032329d6c2cabf998d191437c9',
|
||||
'com.googlecode.json-simple:json-simple:1.1:json-simple-1.1.jar:2d9484f4c649f708f47f9a479465fc729770ee65617dca3011836602264f6439',
|
||||
'com.squareup:javapoet:1.13.0:javapoet-1.13.0.jar:4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291',
|
||||
'com.squareup:javawriter:2.5.0:javawriter-2.5.0.jar:fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0',
|
||||
'com.sun.activation:javax.activation:1.2.0:javax.activation-1.2.0.jar:993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce',
|
||||
'com.sun.istack:istack-commons-runtime:3.0.8:istack-commons-runtime-3.0.8.jar:4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef',
|
||||
'com.sun.xml.fastinfoset:FastInfoset:1.2.16:FastInfoset-1.2.16.jar:056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511',
|
||||
'com.thoughtworks.qdox:qdox:1.12.1:qdox-1.12.1.jar:21fba22f830e9268f07cf4ab2d99e8181abbdcb0cb91ee0228eb3cb918dcdd1d',
|
||||
'commons-codec:commons-codec:1.10:commons-codec-1.10.jar:4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569',
|
||||
'commons-io:commons-io:2.4:commons-io-2.4.jar:cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581',
|
||||
'commons-logging:commons-logging:1.2:commons-logging-1.2.jar:daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636',
|
||||
'info.picocli:picocli:4.5.2:picocli-4.5.2.jar:b4395e9a67932616efd2245d984bf5fcd453c2c5049558c3ce959ac2af4d3fac',
|
||||
'it.unimi.dsi:fastutil:8.4.0:fastutil-8.4.0.jar:2ad2824a4a0a0eb836b52ee2fc84ba2134f44bce7bfa54015ae3f31c710a3071',
|
||||
'jakarta.activation:jakarta.activation-api:1.2.1:jakarta.activation-api-1.2.1.jar:8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b',
|
||||
'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2:jakarta.xml.bind-api-2.3.2.jar:69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea',
|
||||
'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f',
|
||||
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
||||
'jline:jline:2.14.6:jline-2.14.6.jar:97d1acaac82409be42e622d7a54d3ae9d08517e8aefdea3d2ba9791150c2f02d',
|
||||
'junit:junit:4.13.1:junit-4.13.1.jar:c30719db974d6452793fe191b3638a5777005485bae145924044530ffa5f6122',
|
||||
'junit:junit:4.13.2:junit-4.13.2.jar:8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3',
|
||||
'net.bytebuddy:byte-buddy:1.9.12:byte-buddy-1.9.12.jar:3688c3d434bebc3edc5516296a2ed0f47b65e451071b4afecad84f902f0efc11',
|
||||
'net.java.dev.jna:jna-platform:5.6.0:jna-platform-5.6.0.jar:9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7',
|
||||
'net.java.dev.jna:jna:5.6.0:jna-5.6.0.jar:5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf',
|
||||
'net.jcip:jcip-annotations:1.0:jcip-annotations-1.0.jar:be5805392060c71474bf6c9a67a099471274d30b83eef84bfc4e0889a4f1dcc0',
|
||||
'net.ltgt.gradle.incap:incap:0.2:incap-0.2.jar:b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd',
|
||||
'net.sf.jopt-simple:jopt-simple:4.9:jopt-simple-4.9.jar:26c5856e954b5f864db76f13b86919b59c6eecf9fd930b96baa8884626baf2f5',
|
||||
'net.sf.kxml:kxml2:2.3.0:kxml2-2.3.0.jar:f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2',
|
||||
'org.apache-extras.beanshell:bsh:2.0b6:bsh-2.0b6.jar:a17955976070c0573235ee662f2794a78082758b61accffce8d3f8aedcd91047',
|
||||
'org.apache.ant:ant-antlr:1.10.9:ant-antlr-1.10.9.jar:7623dc9d0f20ea713290c6bf1a23f4c059447aef7ff9f5b2be75960f3f028d2e',
|
||||
'org.apache.ant:ant-junit:1.10.9:ant-junit-1.10.9.jar:960bdc8827954d62206ba42d0a68a7ee4476175ba47bb113e17e77cce7394630',
|
||||
'org.apache.ant:ant-launcher:1.10.9:ant-launcher-1.10.9.jar:fcce891f57f3be72149ff96ac2a80574165b3e0839866b95d24528f3027d50c1',
|
||||
'org.apache.ant:ant:1.10.9:ant-1.10.9.jar:0715478af585ea80a18985613ebecdc7922122d45b2c3c970ff9b352cddb75fc',
|
||||
'org.apache.commons:commons-compress:1.20:commons-compress-1.20.jar:0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e',
|
||||
'org.apache.httpcomponents:httpclient:4.5.6:httpclient-4.5.6.jar:c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7',
|
||||
'org.apache.httpcomponents:httpcore:4.4.10:httpcore-4.4.10.jar:78ba1096561957db1b55200a159b648876430342d15d461277e62360da19f6fd',
|
||||
'org.apache.httpcomponents:httpmime:4.5.6:httpmime-4.5.6.jar:0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e',
|
||||
'org.bouncycastle:bcpkix-jdk15on:1.56:bcpkix-jdk15on-1.56.jar:7043dee4e9e7175e93e0b36f45b1ec1ecb893c5f755667e8b916eb8dd201c6ca',
|
||||
'org.bouncycastle:bcprov-jdk15on:1.56:bcprov-jdk15on-1.56.jar:963e1ee14f808ffb99897d848ddcdb28fa91ddda867eb18d303e82728f878349',
|
||||
'org.briarproject:obfs4proxy-android:0.0.14-tor1:obfs4proxy-android-0.0.14-tor1.jar:8b08068778b133484b17956d8f7a7710739c33f671a26a68156f4d34e6f28c30',
|
||||
'org.briarproject:snowflake-android:2.3.1:snowflake-android-2.3.1.jar:1f83c9a070f87b7074af13627709a8b5aced5460104be7166af736b1bb73c293',
|
||||
'org.briarproject:tor-android:0.4.5.14:tor-android-0.4.5.14.jar:7cf1beaa6c1db51fc8fac263aba9624ef289c3db29772509efcbc59f7057330a',
|
||||
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
||||
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
||||
'org.checkerframework:checker-qual:3.5.0:checker-qual-3.5.0.jar:729990b3f18a95606fc2573836b6958bcdb44cb52bfbd1b7aa9c339cff35a5a4',
|
||||
'org.codehaus.groovy:groovy-ant:3.0.7:groovy-ant-3.0.7.jar:6ed2ba82813d128f7050c24142e87b3dc2ad8b504786280eb03e81f0cf6a5793',
|
||||
'org.codehaus.groovy:groovy-astbuilder:3.0.7:groovy-astbuilder-3.0.7.jar:b290451eb1583666e906c41f7d14747b4cc96363c99c478b244634fd5dfc9013',
|
||||
'org.codehaus.groovy:groovy-cli-picocli:3.0.7:groovy-cli-picocli-3.0.7.jar:71b4bd11fb30a9c7b5618e22122c9c5141958fb27f4dcf0068b6f715088f6916',
|
||||
'org.codehaus.groovy:groovy-console:3.0.7:groovy-console-3.0.7.jar:0541b358b6b8e5363215026736168fccfec1d91bac678d066fa77349eeeaa5dd',
|
||||
'org.codehaus.groovy:groovy-datetime:3.0.7:groovy-datetime-3.0.7.jar:b9823d14b1a4f94236ae2f8a471701aab17e093e1b33402b91550b5c8dd88f04',
|
||||
'org.codehaus.groovy:groovy-docgenerator:3.0.7:groovy-docgenerator-3.0.7.jar:bf53f7a11c9eb1e278e1b8ed2714c741bcf781235c803ad3ba1555f2614573f3',
|
||||
'org.codehaus.groovy:groovy-groovydoc:3.0.7:groovy-groovydoc-3.0.7.jar:86b24dfc23c005066ab83927cdb54177f06c9531773f2e2d2ecc9a131f7c2677',
|
||||
'org.codehaus.groovy:groovy-groovysh:3.0.7:groovy-groovysh-3.0.7.jar:5c40e78cbc09726aedd1c75fab112d245d665d6294870f9119e6cd3013ed14ab',
|
||||
'org.codehaus.groovy:groovy-jmx:3.0.7:groovy-jmx-3.0.7.jar:0a89f3007884eb156751937d93382038b83d39c7c2f0ab156ebf251a7251f2ab',
|
||||
'org.codehaus.groovy:groovy-json:3.0.7:groovy-json-3.0.7.jar:df1f0ee475e3fc93a6a0d17548294e160cca5de6d9d36817a7be1fbe650de03b',
|
||||
'org.codehaus.groovy:groovy-jsr223:3.0.7:groovy-jsr223-3.0.7.jar:1dbd969595332416193baa660fbb45743d19696eaa25fe98e591a2739e13517e',
|
||||
'org.codehaus.groovy:groovy-macro:3.0.7:groovy-macro-3.0.7.jar:c6cc06df526b39e2c359e2435f0071594c5a1c7babafaa6c184fdd8fa931531f',
|
||||
'org.codehaus.groovy:groovy-nio:3.0.7:groovy-nio-3.0.7.jar:db54c577882b294cd8c975ec5451596441baf54781319c61627dca0e0c2361ef',
|
||||
'org.codehaus.groovy:groovy-servlet:3.0.7:groovy-servlet-3.0.7.jar:5b6a909bf501c209adfb6205b9e740649609074455fd979bf9da4853e6ff9a39',
|
||||
'org.codehaus.groovy:groovy-sql:3.0.7:groovy-sql-3.0.7.jar:252bb6c74e1a9f41756ad4fbd3b0d2eddc93bb61109961dd1952a37bf2d57a64',
|
||||
'org.codehaus.groovy:groovy-swing:3.0.7:groovy-swing-3.0.7.jar:bd942032d9328d54c6679c49a41f6caa0d4a0039ebe598493b8a647730d98cff',
|
||||
'org.codehaus.groovy:groovy-templates:3.0.7:groovy-templates-3.0.7.jar:f119e07f650ef186ae5a4b944f9e30915b14311bad47c94a6b32de8d4f69bc80',
|
||||
'org.codehaus.groovy:groovy-test-junit5:3.0.7:groovy-test-junit5-3.0.7.jar:c16eeea07b8e396891e266d7ba9388b24ac804237ffdd9a792b0d08969bad014',
|
||||
'org.codehaus.groovy:groovy-test:3.0.7:groovy-test-3.0.7.jar:f71afd7c25d43017f89ea47e6de6daec971d159047dae083c1513a8422d44b90',
|
||||
'org.codehaus.groovy:groovy-testng:3.0.7:groovy-testng-3.0.7.jar:713d5f2231bbb5712aefd362151b9ffd884aeb7ef2e773315cc54259cbdd063d',
|
||||
'org.codehaus.groovy:groovy-xml:3.0.7:groovy-xml-3.0.7.jar:8a62e7c9ddece3e82676c4bef2f2c100f459602cd1fb6a14e94187bf863e97ff',
|
||||
'org.codehaus.groovy:groovy:3.0.7:groovy-3.0.7.jar:51d1777e8dd1f00e60ea56e00d8a354ff5aab1f00fc8464ae8d39d71867e401f',
|
||||
'org.codehaus.mojo:animal-sniffer-annotations:1.17:animal-sniffer-annotations-1.17.jar:92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53',
|
||||
'org.glassfish.jaxb:jaxb-runtime:2.3.2:jaxb-runtime-2.3.2.jar:e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b',
|
||||
'org.glassfish.jaxb:txw2:2.3.2:txw2-2.3.2.jar:4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe',
|
||||
'org.hamcrest:hamcrest-core:1.3:hamcrest-core-1.3.jar:66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9',
|
||||
'org.checkerframework:checker-compat-qual:2.5.5:checker-compat-qual-2.5.5.jar:11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a',
|
||||
'org.checkerframework:checker-qual:3.12.0:checker-qual-3.12.0.jar:ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb',
|
||||
'org.hamcrest:hamcrest-core:2.1:hamcrest-core-2.1.jar:e09109e54a289d88506b9bfec987ddd199f4217c9464132668351b9a4f00bee9',
|
||||
'org.hamcrest:hamcrest-library:2.1:hamcrest-library-2.1.jar:b7e2b6895b3b679f0e47b6380fda391b225e9b78505db9d8bdde8d3cc8d52a21',
|
||||
'org.hamcrest:hamcrest:2.1:hamcrest-2.1.jar:ba93b2e3a562322ba432f0a1b53addcc55cb188253319a020ed77f824e692050',
|
||||
'org.jacoco:org.jacoco.agent:0.8.3:org.jacoco.agent-0.8.3.jar:522deb254ee16a04cc8341cc8f335f5cb7232982994d961b9cf3a0454709209f',
|
||||
'org.jacoco:org.jacoco.ant:0.8.3:org.jacoco.ant-0.8.3.jar:735844e1ae15f9b875b42a27ac5cb61cc26e106d9e839e5d1c6756709b424ce0',
|
||||
'org.jacoco:org.jacoco.core:0.8.3:org.jacoco.core-0.8.3.jar:0818437bc060a0c7cc798148f22b713702aae2771aba104444407697d578f1ea',
|
||||
'org.jacoco:org.jacoco.report:0.8.3:org.jacoco.report-0.8.3.jar:aae08fa4ff043c807b8876cdb2d8705eb8449a55efce461baa6c09da245088c1',
|
||||
'org.jetbrains.intellij.deps:trove4j:1.0.20181211:trove4j-1.0.20181211.jar:affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601',
|
||||
'org.jetbrains.kotlin:kotlin-reflect:1.4.32:kotlin-reflect-1.4.32.jar:dbf19e9cdaa9c3c170f3f6f6ce3922f38dfc1d7fa1cab5b7c23a19da8b5eec5b',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.20:kotlin-stdlib-common-1.4.20.jar:a7112c9b3cefee418286c9c9372f7af992bd1e6e030691d52f60cb36dbec8320',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32:kotlin-stdlib-common-1.4.32.jar:e1ff6f55ee9e7591dcc633f7757bac25a7edb1cc7f738b37ec652f10f66a4145',
|
||||
'org.jacoco:org.jacoco.agent:0.8.7:org.jacoco.agent-0.8.7.jar:9cbcc986e0fbe821a78ff1f8f7d5216f200e5eb124e7f6837d1dc4a77b28b143',
|
||||
'org.jacoco:org.jacoco.ant:0.8.7:org.jacoco.ant-0.8.7.jar:97ca96a382c3f23a44d8eb4c4e6c3742a30cb8005774a76ced0fc4806ce49605',
|
||||
'org.jacoco:org.jacoco.core:0.8.7:org.jacoco.core-0.8.7.jar:ad7739b5fb5969aa1a8aead3d74ed54dc82ed012f1f10f336bd1b96e71c1a13c',
|
||||
'org.jacoco:org.jacoco.report:0.8.7:org.jacoco.report-0.8.7.jar:cc89258623700a6c932592153cb528785876b6da183d5431f97efbba6f020e5b',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.7.0:kotlin-stdlib-common-1.7.0.jar:59c6ff64fe9a6604afce03e8aaa75f83586c6030ac71fb0b34ee7cdefed3618f',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10:kotlin-stdlib-common-1.7.10.jar:19f102efe9629f8eabc63853ad15c533e47c47f91fca09285c5bde86e59f91d4',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32:kotlin-stdlib-jdk7-1.4.32.jar:5f801e75ca27d8791c14b07943c608da27620d910a8093022af57f543d5d98b6',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32:kotlin-stdlib-jdk8-1.4.32.jar:adc43e54757b106e0cd7b3b7aa257dff471b61efdabe067fc02b2f57e2396262',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.20:kotlin-stdlib-1.4.20.jar:b8ab1da5cdc89cb084d41e1f28f20a42bd431538642a5741c52bbfae3fa3e656',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.32:kotlin-stdlib-1.4.32.jar:13e9fd3e69dc7230ce0fc873a92a4e5d521d179bcf1bef75a6705baac3bfecba',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0:kotlin-stdlib-jdk7-1.7.0.jar:07e91be9b2ca20672d2bdb7e181b766e73453a2da13492b5ddaee8fa47aea239',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.0:kotlin-stdlib-jdk8-1.7.0.jar:cf058e11db1dfc9944680c8c61b95ac689aaaa8a3eb30bced028100f038f030b',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.7.0:kotlin-stdlib-1.7.0.jar:aa88e9625577957f3249a46cb6e166ee09b369e600f7a11d148d16b0a6d87f05',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.7.10:kotlin-stdlib-1.7.10.jar:e771fe74250a943e8f6346713201ff1d8cb95c3a5d1a91a22b65a9e04f6a8901',
|
||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0:kotlinx-metadata-jvm-0.1.0.jar:9753bb39efef35957c5c15df9a3cb769aabf2cdfa74b47afcb7760e5146be3b5',
|
||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0:kotlinx-metadata-jvm-0.5.0.jar:ca063a96639b08b9eaa0de4d65e899480740a6efbe28ab9a8681a2ced03055a4',
|
||||
'org.jetbrains:annotations:13.0:annotations-13.0.jar:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478',
|
||||
'org.jmock:jmock-imposters:2.12.0:jmock-imposters-2.12.0.jar:3b836269745a137c9b2347e8d7c2104845b126ef04f012d6bfd94f1a7dea7b09',
|
||||
'org.jmock:jmock-junit4:2.12.0:jmock-junit4-2.12.0.jar:3233062fc889637c151a24f1ee086bad04321ab7d8264fef279daff0fa27205b',
|
||||
'org.jmock:jmock-legacy:2.12.0:jmock-legacy-2.12.0.jar:dea3a9cca653d082e2fe7e40232e982fe03a9984c7d67ceff24f3e03fe580dcd',
|
||||
'org.jmock:jmock-testjar:2.12.0:jmock-testjar-2.12.0.jar:efefbcf6cd294d0e29f0c46eb2a3380d4ca4e1763ff719c69e2f2ac62f564a04',
|
||||
'org.jmock:jmock:2.12.0:jmock-2.12.0.jar:266d07314c0cd343c46ff8a55601272de8cf406807caf55e6f313295f83d10be',
|
||||
'org.junit.jupiter:junit-jupiter-api:5.7.0:junit-jupiter-api-5.7.0.jar:b03f78e0daeed2d77a0af9bcd662b4cdb9693f7ee72e01a539b508b84c63d182',
|
||||
'org.junit.jupiter:junit-jupiter-engine:5.7.0:junit-jupiter-engine-5.7.0.jar:dfa26af94644ac2612dde6625852fcb550a0d21caa243257de54cba738ba87af',
|
||||
'org.junit.platform:junit-platform-commons:1.7.0:junit-platform-commons-1.7.0.jar:5330ee87cc7586e6e25175a34e9251624ff12ff525269d3415d0b4ca519b6fea',
|
||||
'org.junit.platform:junit-platform-engine:1.7.0:junit-platform-engine-1.7.0.jar:75f21a20dc594afdc875736725b408cec6d0344874d29f34b2dd3075500236f2',
|
||||
'org.junit.platform:junit-platform-launcher:1.7.0:junit-platform-launcher-1.7.0.jar:fbdc748fde4c4279fe1d3c607447cb3b7ccd45d7338fc574f8a894ddf2d16818',
|
||||
'org.jvnet.staxex:stax-ex:1.8.1:stax-ex-1.8.1.jar:20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a',
|
||||
'org.objenesis:objenesis:3.0.1:objenesis-3.0.1.jar:7a8ff780b9ff48415d7c705f60030b0acaa616e7f823c98eede3b63508d4e984',
|
||||
'org.opentest4j:opentest4j:1.2.0:opentest4j-1.2.0.jar:58812de60898d976fb81ef3b62da05c6604c18fd4a249f5044282479fc286af2',
|
||||
'org.ow2.asm:asm-analysis:7.0:asm-analysis-7.0.jar:e981f8f650c4d900bb033650b18e122fa6b161eadd5f88978d08751f72ee8474',
|
||||
'org.ow2.asm:asm-commons:7.0:asm-commons-7.0.jar:fed348ef05958e3e846a3ac074a12af5f7936ef3d21ce44a62c4fa08a771927d',
|
||||
'org.ow2.asm:asm-tree:7.0:asm-tree-7.0.jar:cfd7a0874f9de36a999c127feeadfbfe6e04d4a71ee954d7af3d853f0be48a6c',
|
||||
'org.ow2.asm:asm-util:7.0:asm-util-7.0.jar:75fbbca440ef463f41c2b0ab1a80abe67e910ac486da60a7863cbcb5bae7e145',
|
||||
'org.ow2.asm:asm:7.0:asm-7.0.jar:b88ef66468b3c978ad0c97fd6e90979e56155b4ac69089ba7a44e9aa7ffe9acf',
|
||||
'org.ow2.asm:asm-analysis:9.1:asm-analysis-9.1.jar:81a88041b1b8beda5a8a99646098046c48709538270c49def68abff25ac3be34',
|
||||
'org.ow2.asm:asm-commons:9.1:asm-commons-9.1.jar:afcb26dc1fc12c0c4a99ada670908dd82e18dfc488caf5ee92546996b470c00c',
|
||||
'org.ow2.asm:asm-tree:9.1:asm-tree-9.1.jar:fd00afa49e9595d7646205b09cecb4a776a8ff0ba06f2d59b8f7bf9c704b4a73',
|
||||
'org.ow2.asm:asm:7.1:asm-7.1.jar:4ab2fa2b6d2cc9ccb1eaa05ea329c407b47b13ed2915f62f8c4b8cc96258d4de',
|
||||
'org.testng:testng:7.3.0:testng-7.3.0.jar:63727488f9717d57f0d0a0fee5a1fc10a2be9cfcff2ec3a7187656d663c0774e',
|
||||
'xerces:xercesImpl:2.12.0:xercesImpl-2.12.0.jar:b50d3a4ca502faa4d1c838acb8aa9480446953421f7327e338c5dda3da5e76d0',
|
||||
'xml-apis:xml-apis:1.4.01:xml-apis-1.4.01.jar:a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad',
|
||||
'org.ow2.asm:asm:9.1:asm-9.1.jar:cda4de455fab48ff0bcb7c48b4639447d4de859a7afc30a094a986f0936beba2',
|
||||
]
|
||||
}
|
||||
|
||||
@@ -8,9 +8,10 @@ apply from: 'witness.gradle'
|
||||
|
||||
dependencies {
|
||||
api 'org.briarproject:null-safety:0.1'
|
||||
api 'com.google.code.findbugs:jsr305:3.0.2'
|
||||
api 'javax.inject:javax.inject:1'
|
||||
api "com.google.dagger:dagger:$dagger_version"
|
||||
|
||||
implementation "com.google.dagger:dagger:$dagger_version"
|
||||
implementation 'com.google.code.findbugs:jsr305:3.0.2'
|
||||
implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version"
|
||||
|
||||
testImplementation "junit:junit:$junit_version"
|
||||
@@ -25,7 +26,7 @@ configurations {
|
||||
testOutput.extendsFrom(testCompile)
|
||||
}
|
||||
task jarTest(type: Jar, dependsOn: testClasses) {
|
||||
from sourceSets.test.output
|
||||
from sourceSets.test.output, sourceSets.main.output
|
||||
classifier = 'test'
|
||||
}
|
||||
artifacts {
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
package org.briarproject.bramble.api.keyagreement;
|
||||
|
||||
public interface KeyAgreementConstants {
|
||||
import org.briarproject.bramble.api.mailbox.MailboxConstants;
|
||||
|
||||
/**
|
||||
* The version of the BQP protocol used in beta releases. This version
|
||||
* number is reserved.
|
||||
*/
|
||||
byte BETA_PROTOCOL_VERSION = 89;
|
||||
public interface KeyAgreementConstants {
|
||||
|
||||
/**
|
||||
* The current version of the BQP protocol.
|
||||
*/
|
||||
byte PROTOCOL_VERSION = 4;
|
||||
|
||||
/**
|
||||
* The QR code format identifier, used to distinguish BQP QR codes from
|
||||
* QR codes used for other purposes. See
|
||||
* {@link MailboxConstants#QR_FORMAT_ID}.
|
||||
*/
|
||||
byte QR_FORMAT_ID = 0;
|
||||
|
||||
/**
|
||||
* The QR code format version.
|
||||
*/
|
||||
byte QR_FORMAT_VERSION = PROTOCOL_VERSION;
|
||||
|
||||
/**
|
||||
* The length of the BQP key commitment in bytes.
|
||||
*/
|
||||
|
||||
@@ -7,5 +7,5 @@ import java.io.IOException;
|
||||
@NotNullByDefault
|
||||
public interface PayloadParser {
|
||||
|
||||
Payload parse(byte[] raw) throws IOException;
|
||||
Payload parse(String payload) throws IOException;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.briarproject.bramble.api.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.keyagreement.KeyAgreementConstants;
|
||||
import org.briarproject.bramble.api.plugin.TransportId;
|
||||
|
||||
import java.util.List;
|
||||
@@ -19,6 +20,18 @@ public interface MailboxConstants {
|
||||
*/
|
||||
TransportId ID = new TransportId("org.briarproject.bramble.mailbox");
|
||||
|
||||
/**
|
||||
* The QR code format identifier, used to distinguish mailbox QR codes
|
||||
* from QR codes used for other purposes. See
|
||||
* {@link KeyAgreementConstants#QR_FORMAT_ID};
|
||||
*/
|
||||
byte QR_FORMAT_ID = 1;
|
||||
|
||||
/**
|
||||
* The QR code format version.
|
||||
*/
|
||||
byte QR_FORMAT_VERSION = 0;
|
||||
|
||||
/**
|
||||
* Mailbox API versions that we support as a client. This is reported to our
|
||||
* contacts by {@link MailboxUpdateManager}.
|
||||
|
||||
@@ -1,17 +1,44 @@
|
||||
package org.briarproject.bramble.api.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
|
||||
public abstract class MailboxPairingState {
|
||||
|
||||
public static class QrCodeReceived extends MailboxPairingState {
|
||||
public abstract static class Pending extends MailboxPairingState {
|
||||
|
||||
public final long timeStarted;
|
||||
|
||||
private Pending(long timeStarted) {
|
||||
this.timeStarted = timeStarted;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Pairing extends MailboxPairingState {
|
||||
public static class QrCodeReceived extends Pending {
|
||||
|
||||
public QrCodeReceived(long timeStarted) {
|
||||
super(timeStarted);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Pairing extends Pending {
|
||||
|
||||
public Pairing(long timeStarted) {
|
||||
super(timeStarted);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Paired extends MailboxPairingState {
|
||||
}
|
||||
|
||||
public static class InvalidQrCode extends MailboxPairingState {
|
||||
|
||||
public final QrCodeType qrCodeType;
|
||||
public final int formatVersion;
|
||||
|
||||
public InvalidQrCode(QrCodeType qrCodeType, int formatVersion) {
|
||||
this.qrCodeType = qrCodeType;
|
||||
this.formatVersion = formatVersion;
|
||||
}
|
||||
}
|
||||
|
||||
public static class MailboxAlreadyPaired extends MailboxPairingState {
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.briarproject.bramble.api.qrcode;
|
||||
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
@NotNullByDefault
|
||||
public interface QrCodeClassifier {
|
||||
|
||||
enum QrCodeType {
|
||||
BQP,
|
||||
MAILBOX,
|
||||
UNKNOWN
|
||||
}
|
||||
|
||||
Pair<QrCodeType, Integer> classifyQrCode(String payload);
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.briarproject.bramble.api.qrcode;
|
||||
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
|
||||
/**
|
||||
* Thrown when a QR code that has been scanned does not have the expected type.
|
||||
*/
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
public class WrongQrCodeTypeException extends FormatException {
|
||||
|
||||
private final QrCodeType qrCodeType;
|
||||
|
||||
public WrongQrCodeTypeException(QrCodeType qrCodeType) {
|
||||
this.qrCodeType = qrCodeType;
|
||||
}
|
||||
|
||||
public QrCodeType getQrCodeType() {
|
||||
return qrCodeType;
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,6 @@ package org.briarproject.bramble.util;
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.CharacterCodingException;
|
||||
import java.nio.charset.Charset;
|
||||
@@ -17,13 +16,18 @@ import javax.annotation.Nullable;
|
||||
import static java.nio.charset.CodingErrorAction.IGNORE;
|
||||
import static java.util.regex.Pattern.CASE_INSENSITIVE;
|
||||
|
||||
@SuppressWarnings("CharsetObjectCanBeUsed")
|
||||
@NotNullByDefault
|
||||
public class StringUtils {
|
||||
|
||||
private static final Charset UTF_8 = Charset.forName("UTF-8");
|
||||
private static Pattern MAC = Pattern.compile("[0-9a-f]{2}:[0-9a-f]{2}:" +
|
||||
"[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}",
|
||||
CASE_INSENSITIVE);
|
||||
public static final Charset UTF_8 = Charset.forName("UTF-8");
|
||||
public static final Charset US_ASCII = Charset.forName("US-ASCII");
|
||||
public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
|
||||
|
||||
private static final Pattern MAC =
|
||||
Pattern.compile("[0-9a-f]{2}:[0-9a-f]{2}:" +
|
||||
"[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}",
|
||||
CASE_INSENSITIVE);
|
||||
|
||||
private static final char[] HEX = new char[] {
|
||||
'0', '1', '2', '3', '4', '5', '6', '7',
|
||||
@@ -45,11 +49,7 @@ public class StringUtils {
|
||||
}
|
||||
|
||||
public static byte[] toUtf8(String s) {
|
||||
try {
|
||||
return s.getBytes("UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
return s.getBytes(UTF_8);
|
||||
}
|
||||
|
||||
public static String fromUtf8(byte[] bytes) {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
dependencyVerification {
|
||||
verify = [
|
||||
'cglib:cglib:3.2.8:cglib-3.2.8.jar:3f64de999ecc5595dc84ca8ff0879d8a34c8623f9ef3c517a53ed59023fcb9db',
|
||||
'com.fasterxml.jackson.core:jackson-annotations:2.13.0:jackson-annotations-2.13.0.jar:81f9724d8843e8b08f8f6c0609e7a2b030d00c34861c4ac7e2099a7235047d6f',
|
||||
'com.fasterxml.jackson.core:jackson-annotations:2.13.4:jackson-annotations-2.13.4.jar:ac5b27a634942391ca113850ee7db01df1499a240174021263501c05fc653b44',
|
||||
'com.google.code.findbugs:annotations:3.0.1:annotations-3.0.1.jar:6b47ff0a6de0ce17cbedc3abb0828ca5bce3009d53ea47b3723ff023c4742f79',
|
||||
'com.google.code.findbugs:jsr305:3.0.2:jsr305-3.0.2.jar:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7',
|
||||
'com.google.dagger:dagger:2.33:dagger-2.33.jar:d8798c5b8cf6b125234e33af5c6293bb9f2208ce29b57924c35b8c0be7b6bdcb',
|
||||
'com.google.dagger:dagger:2.43.2:dagger-2.43.2.jar:c89681f7cbbf8c527bf4ac2748515d617fdb54a1d425c08d914fdc28192b5fe4',
|
||||
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
||||
'junit:junit:4.13.2:junit-4.13.2.jar:8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3',
|
||||
'net.bytebuddy:byte-buddy:1.9.12:byte-buddy-1.9.12.jar:3688c3d434bebc3edc5516296a2ed0f47b65e451071b4afecad84f902f0efc11',
|
||||
|
||||
@@ -9,23 +9,24 @@ apply from: 'witness.gradle'
|
||||
apply from: '../dagger.gradle'
|
||||
|
||||
dependencies {
|
||||
implementation project(path: ':bramble-api', configuration: 'default')
|
||||
implementation 'org.bouncycastle:bcprov-jdk15to18:1.70'
|
||||
api project(':bramble-api')
|
||||
|
||||
api 'org.briarproject:jtorctl:0.5'
|
||||
|
||||
implementation "org.bouncycastle:bcprov-jdk15to18:$bouncy_castle_version"
|
||||
//noinspection GradleDependency
|
||||
implementation 'com.h2database:h2:1.4.192' // The last version that supports Java 1.6
|
||||
implementation 'org.bitlet:weupnp:0.1.4'
|
||||
implementation 'net.i2p.crypto:eddsa:0.2.0'
|
||||
implementation 'org.whispersystems:curve25519-java:0.5.0'
|
||||
implementation 'org.briarproject:jtorctl:0.5'
|
||||
implementation 'org.briarproject:socks-socket:0.1'
|
||||
|
||||
//noinspection GradleDependency
|
||||
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||
implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_version"
|
||||
|
||||
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||
|
||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||
|
||||
testImplementation 'org.hsqldb:hsqldb:2.3.5' // The last version that supports Java 1.6
|
||||
testImplementation 'net.jodah:concurrentunit:0.4.2'
|
||||
testImplementation "junit:junit:$junit_version"
|
||||
@@ -52,7 +53,7 @@ configurations {
|
||||
testOutput.extendsFrom(testCompile)
|
||||
}
|
||||
task jarTest(type: Jar, dependsOn: testClasses) {
|
||||
from sourceSets.test.output
|
||||
from sourceSets.test.output, sourceSets.main.output
|
||||
classifier = 'test'
|
||||
}
|
||||
artifacts {
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.briarproject.bramble.lifecycle.LifecycleModule;
|
||||
import org.briarproject.bramble.mailbox.MailboxModule;
|
||||
import org.briarproject.bramble.plugin.PluginModule;
|
||||
import org.briarproject.bramble.properties.PropertiesModule;
|
||||
import org.briarproject.bramble.qrcode.QrCodeModule;
|
||||
import org.briarproject.bramble.record.RecordModule;
|
||||
import org.briarproject.bramble.reliability.ReliabilityModule;
|
||||
import org.briarproject.bramble.rendezvous.RendezvousModule;
|
||||
@@ -47,6 +48,7 @@ import dagger.Module;
|
||||
MailboxModule.class,
|
||||
PluginModule.class,
|
||||
PropertiesModule.class,
|
||||
QrCodeModule.class,
|
||||
RecordModule.class,
|
||||
ReliabilityModule.class,
|
||||
RendezvousModule.class,
|
||||
|
||||
@@ -4,6 +4,7 @@ import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Logger;
|
||||
@@ -19,9 +20,10 @@ public class TimeLoggingExecutor extends ThreadPoolExecutor {
|
||||
public TimeLoggingExecutor(String tag, int corePoolSize, int maxPoolSize,
|
||||
long keepAliveTime, TimeUnit unit,
|
||||
BlockingQueue<Runnable> workQueue,
|
||||
ThreadFactory threadFactory,
|
||||
RejectedExecutionHandler handler) {
|
||||
super(corePoolSize, maxPoolSize, keepAliveTime, unit, workQueue,
|
||||
handler);
|
||||
threadFactory, handler);
|
||||
log = Logger.getLogger(tag);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -29,6 +28,7 @@ import javax.inject.Inject;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static org.briarproject.bramble.api.crypto.DecryptionResult.INVALID_CIPHERTEXT;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.StringUtils.UTF_8;
|
||||
import static org.briarproject.bramble.util.StringUtils.fromHexString;
|
||||
import static org.briarproject.bramble.util.StringUtils.toHexString;
|
||||
|
||||
@@ -99,7 +99,7 @@ class AccountManagerImpl implements AccountManager {
|
||||
}
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
||||
new FileInputStream(f), Charset.forName("UTF-8")));
|
||||
new FileInputStream(f), UTF_8));
|
||||
String key = reader.readLine();
|
||||
reader.close();
|
||||
return key;
|
||||
@@ -151,7 +151,7 @@ class AccountManagerImpl implements AccountManager {
|
||||
@GuardedBy("stateChangeLock")
|
||||
private void writeDbKeyToFile(String key, File f) throws IOException {
|
||||
FileOutputStream out = new FileOutputStream(f);
|
||||
out.write(key.getBytes(Charset.forName("UTF-8")));
|
||||
out.write(key.getBytes(UTF_8));
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
|
||||
@@ -29,7 +29,6 @@ import org.briarproject.nullsafety.NotNullByDefault;
|
||||
import org.whispersystems.curve25519.Curve25519;
|
||||
import org.whispersystems.curve25519.Curve25519KeyPair;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.Provider;
|
||||
@@ -51,6 +50,7 @@ import static org.briarproject.bramble.api.crypto.DecryptionResult.KEY_STRENGTHE
|
||||
import static org.briarproject.bramble.util.ByteUtils.INT_32_BYTES;
|
||||
import static org.briarproject.bramble.util.LogUtils.logDuration;
|
||||
import static org.briarproject.bramble.util.LogUtils.now;
|
||||
import static org.briarproject.bramble.util.StringUtils.US_ASCII;
|
||||
|
||||
@NotNullByDefault
|
||||
class CryptoComponentImpl implements CryptoComponent {
|
||||
@@ -460,7 +460,7 @@ class CryptoComponentImpl implements CryptoComponent {
|
||||
@Override
|
||||
public String encodeOnion(byte[] publicKey) {
|
||||
Digest digest = new SHA3Digest(256);
|
||||
byte[] label = ".onion checksum".getBytes(Charset.forName("US-ASCII"));
|
||||
byte[] label = ".onion checksum".getBytes(US_ASCII);
|
||||
digest.update(label, 0, label.length);
|
||||
digest.update(publicKey, 0, publicKey.length);
|
||||
digest.update(ONION_HS_PROTOCOL_VERSION);
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -37,31 +38,31 @@ public class CryptoExecutorModule {
|
||||
private static final int MAX_EXECUTOR_THREADS =
|
||||
Math.max(1, Runtime.getRuntime().availableProcessors() - 1);
|
||||
|
||||
private final ExecutorService cryptoExecutor;
|
||||
|
||||
public CryptoExecutorModule() {
|
||||
// Use an unbounded queue
|
||||
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
|
||||
// Discard tasks that are submitted during shutdown
|
||||
RejectedExecutionHandler policy =
|
||||
new ThreadPoolExecutor.DiscardPolicy();
|
||||
// Create a limited # of threads and keep them in the pool for 60 secs
|
||||
cryptoExecutor = new TimeLoggingExecutor("CryptoExecutor", 0,
|
||||
MAX_EXECUTOR_THREADS, 60, SECONDS, queue, policy);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@CryptoExecutor
|
||||
ExecutorService provideCryptoExecutorService(
|
||||
LifecycleManager lifecycleManager) {
|
||||
LifecycleManager lifecycleManager, ThreadFactory threadFactory) {
|
||||
// Use an unbounded queue
|
||||
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
|
||||
// Discard tasks that are submitted during shutdown
|
||||
RejectedExecutionHandler policy =
|
||||
new ThreadPoolExecutor.DiscardPolicy();
|
||||
// Create a limited # of threads and keep them in the pool for 60 secs
|
||||
ExecutorService cryptoExecutor = new TimeLoggingExecutor(
|
||||
"CryptoExecutor", 0, MAX_EXECUTOR_THREADS, 60, SECONDS, queue,
|
||||
threadFactory, policy);
|
||||
lifecycleManager.registerForShutdown(cryptoExecutor);
|
||||
return cryptoExecutor;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@CryptoExecutor
|
||||
Executor provideCryptoExecutor() {
|
||||
Executor provideCryptoExecutor(
|
||||
@CryptoExecutor ExecutorService cryptoExecutor) {
|
||||
return cryptoExecutor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,12 +39,13 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.Scanner;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
|
||||
import static org.briarproject.bramble.util.StringUtils.UTF_8;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
public class MessageEncrypter {
|
||||
@@ -228,7 +229,7 @@ public class MessageEncrypter {
|
||||
PublicKey publicKey =
|
||||
encrypter.getKeyParser().parsePublicKey(keyBytes);
|
||||
String message = readFully(System.in);
|
||||
byte[] plaintext = message.getBytes(Charset.forName("UTF-8"));
|
||||
byte[] plaintext = message.getBytes(UTF_8);
|
||||
byte[] ciphertext = encrypter.encrypt(publicKey, plaintext);
|
||||
System.out.println(AsciiArmour.wrap(ciphertext, LINE_LENGTH));
|
||||
}
|
||||
@@ -242,7 +243,7 @@ public class MessageEncrypter {
|
||||
encrypter.getKeyParser().parsePrivateKey(keyBytes);
|
||||
byte[] ciphertext = AsciiArmour.unwrap(readFully(System.in));
|
||||
byte[] plaintext = encrypter.decrypt(privateKey, ciphertext);
|
||||
System.out.println(new String(plaintext, Charset.forName("UTF-8")));
|
||||
System.out.println(new String(plaintext, UTF_8));
|
||||
}
|
||||
|
||||
private static String readFully(InputStream in) throws IOException {
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -28,24 +29,20 @@ public class DatabaseExecutorModule {
|
||||
ExecutorService executorService;
|
||||
}
|
||||
|
||||
private final ExecutorService databaseExecutor;
|
||||
|
||||
public DatabaseExecutorModule() {
|
||||
@Provides
|
||||
@Singleton
|
||||
@DatabaseExecutor
|
||||
ExecutorService provideDatabaseExecutorService(
|
||||
LifecycleManager lifecycleManager, ThreadFactory threadFactory) {
|
||||
// Use an unbounded queue
|
||||
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
|
||||
// Discard tasks that are submitted during shutdown
|
||||
RejectedExecutionHandler policy =
|
||||
new ThreadPoolExecutor.DiscardPolicy();
|
||||
// Use a single thread and keep it in the pool for 60 secs
|
||||
databaseExecutor = new TimeLoggingExecutor("DatabaseExecutor", 0, 1,
|
||||
60, SECONDS, queue, policy);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@DatabaseExecutor
|
||||
ExecutorService provideDatabaseExecutorService(
|
||||
LifecycleManager lifecycleManager) {
|
||||
ExecutorService databaseExecutor = new TimeLoggingExecutor(
|
||||
"DatabaseExecutor", 0, 1, 60, SECONDS, queue, threadFactory,
|
||||
policy);
|
||||
lifecycleManager.registerForShutdown(databaseExecutor);
|
||||
return databaseExecutor;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.briarproject.bramble.event;
|
||||
import org.briarproject.bramble.api.event.EventExecutor;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@@ -22,10 +23,11 @@ public class DefaultEventExecutorModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
@EventExecutor
|
||||
Executor provideEventExecutor() {
|
||||
Executor provideEventExecutor(ThreadFactory threadFactory) {
|
||||
return newSingleThreadExecutor(r -> {
|
||||
Thread t = new Thread(r);
|
||||
Thread t = threadFactory.newThread(r);
|
||||
t.setDaemon(true);
|
||||
t.setName(t.getName() + "-Event");
|
||||
return t;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package org.briarproject.bramble.keyagreement;
|
||||
|
||||
import org.briarproject.bramble.api.data.BdfReaderFactory;
|
||||
import org.briarproject.bramble.api.data.BdfWriterFactory;
|
||||
import org.briarproject.bramble.api.keyagreement.KeyAgreementTask;
|
||||
import org.briarproject.bramble.api.keyagreement.PayloadEncoder;
|
||||
import org.briarproject.bramble.api.keyagreement.PayloadParser;
|
||||
@@ -19,13 +17,13 @@ public class KeyAgreementModule {
|
||||
}
|
||||
|
||||
@Provides
|
||||
PayloadEncoder providePayloadEncoder(BdfWriterFactory bdfWriterFactory) {
|
||||
return new PayloadEncoderImpl(bdfWriterFactory);
|
||||
PayloadEncoder providePayloadEncoder(PayloadEncoderImpl payloadEncoder) {
|
||||
return payloadEncoder;
|
||||
}
|
||||
|
||||
@Provides
|
||||
PayloadParser providePayloadParser(BdfReaderFactory bdfReaderFactory) {
|
||||
return new PayloadParserImpl(bdfReaderFactory);
|
||||
PayloadParser providePayloadParser(PayloadParserImpl payloadParser) {
|
||||
return payloadParser;
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@@ -13,7 +13,8 @@ import java.io.IOException;
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.QR_FORMAT_ID;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.QR_FORMAT_VERSION;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
@@ -29,7 +30,8 @@ class PayloadEncoderImpl implements PayloadEncoder {
|
||||
@Override
|
||||
public byte[] encode(Payload p) {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
out.write(PROTOCOL_VERSION);
|
||||
int formatIdAndVersion = (QR_FORMAT_ID << 5) | QR_FORMAT_VERSION;
|
||||
out.write(formatIdAndVersion);
|
||||
BdfWriter w = bdfWriterFactory.createWriter(out);
|
||||
try {
|
||||
w.writeListStart(); // Payload start
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.briarproject.bramble.keyagreement;
|
||||
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.UnsupportedVersionException;
|
||||
import org.briarproject.bramble.api.data.BdfList;
|
||||
import org.briarproject.bramble.api.data.BdfReader;
|
||||
@@ -11,6 +12,9 @@ import org.briarproject.bramble.api.keyagreement.TransportDescriptor;
|
||||
import org.briarproject.bramble.api.plugin.BluetoothConstants;
|
||||
import org.briarproject.bramble.api.plugin.LanTcpConstants;
|
||||
import org.briarproject.bramble.api.plugin.TransportId;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
import org.briarproject.bramble.api.qrcode.WrongQrCodeTypeException;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
@@ -21,34 +25,42 @@ import java.util.List;
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.BETA_PROTOCOL_VERSION;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.COMMIT_LENGTH;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.QR_FORMAT_VERSION;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.BQP;
|
||||
import static org.briarproject.bramble.util.StringUtils.ISO_8859_1;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
class PayloadParserImpl implements PayloadParser {
|
||||
|
||||
private final BdfReaderFactory bdfReaderFactory;
|
||||
private final QrCodeClassifier qrCodeClassifier;
|
||||
|
||||
@Inject
|
||||
PayloadParserImpl(BdfReaderFactory bdfReaderFactory) {
|
||||
PayloadParserImpl(BdfReaderFactory bdfReaderFactory,
|
||||
QrCodeClassifier qrCodeClassifier) {
|
||||
this.bdfReaderFactory = bdfReaderFactory;
|
||||
this.qrCodeClassifier = qrCodeClassifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Payload parse(byte[] raw) throws IOException {
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(raw);
|
||||
// First byte: the protocol version
|
||||
int protocolVersion = in.read();
|
||||
if (protocolVersion == -1) throw new FormatException();
|
||||
if (protocolVersion != PROTOCOL_VERSION) {
|
||||
boolean tooOld = protocolVersion < PROTOCOL_VERSION ||
|
||||
protocolVersion == BETA_PROTOCOL_VERSION;
|
||||
public Payload parse(String payloadString) throws IOException {
|
||||
Pair<QrCodeType, Integer> typeAndVersion =
|
||||
qrCodeClassifier.classifyQrCode(payloadString);
|
||||
QrCodeType qrCodeType = typeAndVersion.getFirst();
|
||||
if (qrCodeType != BQP) throw new WrongQrCodeTypeException(qrCodeType);
|
||||
int formatVersion = typeAndVersion.getSecond();
|
||||
if (formatVersion != QR_FORMAT_VERSION) {
|
||||
boolean tooOld = formatVersion < QR_FORMAT_VERSION;
|
||||
throw new UnsupportedVersionException(tooOld);
|
||||
}
|
||||
byte[] raw = payloadString.getBytes(ISO_8859_1);
|
||||
ByteArrayInputStream in = new ByteArrayInputStream(raw);
|
||||
// First byte: the format identifier and version (already parsed)
|
||||
if (in.read() == -1) throw new AssertionError();
|
||||
// The rest of the payload is a BDF list with one or more elements
|
||||
BdfReader r = bdfReaderFactory.createReader(in);
|
||||
BdfList payload = r.readList();
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -28,19 +29,6 @@ public class LifecycleModule {
|
||||
Executor executor;
|
||||
}
|
||||
|
||||
private final ExecutorService ioExecutor;
|
||||
|
||||
public LifecycleModule() {
|
||||
// The thread pool is unbounded, so use direct handoff
|
||||
BlockingQueue<Runnable> queue = new SynchronousQueue<>();
|
||||
// Discard tasks that are submitted during shutdown
|
||||
RejectedExecutionHandler policy =
|
||||
new ThreadPoolExecutor.DiscardPolicy();
|
||||
// Create threads as required and keep them in the pool for 60 seconds
|
||||
ioExecutor = new ThreadPoolExecutor(0, Integer.MAX_VALUE,
|
||||
60, SECONDS, queue, policy);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
ShutdownManager provideShutdownManager() {
|
||||
@@ -57,7 +45,16 @@ public class LifecycleModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
@IoExecutor
|
||||
Executor provideIoExecutor(LifecycleManager lifecycleManager) {
|
||||
Executor provideIoExecutor(LifecycleManager lifecycleManager,
|
||||
ThreadFactory threadFactory) {
|
||||
// The thread pool is unbounded, so use direct handoff
|
||||
BlockingQueue<Runnable> queue = new SynchronousQueue<>();
|
||||
// Discard tasks that are submitted during shutdown
|
||||
RejectedExecutionHandler policy =
|
||||
new ThreadPoolExecutor.DiscardPolicy();
|
||||
// Create threads as required and keep them in the pool for 60 seconds
|
||||
ExecutorService ioExecutor = new ThreadPoolExecutor(0,
|
||||
Integer.MAX_VALUE, 60, SECONDS, queue, threadFactory, policy);
|
||||
lifecycleManager.registerForShutdown(ioExecutor);
|
||||
return ioExecutor;
|
||||
}
|
||||
|
||||
@@ -20,12 +20,15 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
class MailboxApiCallerImpl implements MailboxApiCaller {
|
||||
|
||||
private final TaskScheduler taskScheduler;
|
||||
private final MailboxConfig mailboxConfig;
|
||||
private final Executor ioExecutor;
|
||||
|
||||
@Inject
|
||||
MailboxApiCallerImpl(TaskScheduler taskScheduler,
|
||||
MailboxConfig mailboxConfig,
|
||||
@IoExecutor Executor ioExecutor) {
|
||||
this.taskScheduler = taskScheduler;
|
||||
this.mailboxConfig = mailboxConfig;
|
||||
this.ioExecutor = ioExecutor;
|
||||
}
|
||||
|
||||
@@ -49,7 +52,8 @@ class MailboxApiCallerImpl implements MailboxApiCaller {
|
||||
private boolean cancelled = false;
|
||||
|
||||
@GuardedBy("lock")
|
||||
private long retryIntervalMs = MIN_RETRY_INTERVAL_MS;
|
||||
private long retryIntervalMs =
|
||||
mailboxConfig.getApiCallerMinRetryInterval();
|
||||
|
||||
private Task(ApiCall apiCall) {
|
||||
this.apiCall = apiCall;
|
||||
@@ -74,8 +78,9 @@ class MailboxApiCallerImpl implements MailboxApiCaller {
|
||||
scheduledTask = taskScheduler.schedule(this::callApi,
|
||||
ioExecutor, retryIntervalMs, MILLISECONDS);
|
||||
// Increase the retry interval each time we retry
|
||||
retryIntervalMs =
|
||||
min(MAX_RETRY_INTERVAL_MS, retryIntervalMs * 2);
|
||||
retryIntervalMs = min(
|
||||
mailboxConfig.getApiCallerMaxRetryInterval(),
|
||||
retryIntervalMs * 2);
|
||||
}
|
||||
} else {
|
||||
synchronized (lock) {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.briarproject.bramble.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.plugin.Plugin;
|
||||
|
||||
interface MailboxConfig {
|
||||
|
||||
/**
|
||||
* The minimum interval between API call retries in milliseconds.
|
||||
*/
|
||||
long getApiCallerMinRetryInterval();
|
||||
|
||||
/**
|
||||
* The maximum interval between API call retries in milliseconds.
|
||||
*/
|
||||
long getApiCallerMaxRetryInterval();
|
||||
|
||||
/**
|
||||
* How long (in milliseconds) the Tor plugin needs to be continuously
|
||||
* {@link Plugin.State#ACTIVE active} before we assume our contacts can
|
||||
* reach our hidden service.
|
||||
*/
|
||||
long getTorReachabilityPeriod();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.briarproject.bramble.mailbox;
|
||||
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
class MailboxConfigImpl implements MailboxConfig {
|
||||
|
||||
@Inject
|
||||
MailboxConfigImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getApiCallerMinRetryInterval() {
|
||||
return MailboxApiCaller.MIN_RETRY_INTERVAL_MS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getApiCallerMaxRetryInterval() {
|
||||
return MailboxApiCaller.MAX_RETRY_INTERVAL_MS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getTorReachabilityPeriod() {
|
||||
return TorReachabilityMonitor.REACHABILITY_PERIOD_MS;
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import org.briarproject.bramble.api.event.EventExecutor;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxUpdateManager;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.bramble.api.system.Clock;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
@@ -25,6 +26,7 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
|
||||
private final MailboxApi api;
|
||||
private final MailboxSettingsManager mailboxSettingsManager;
|
||||
private final MailboxUpdateManager mailboxUpdateManager;
|
||||
private final QrCodeClassifier qrCodeClassifier;
|
||||
|
||||
@Inject
|
||||
MailboxPairingTaskFactoryImpl(
|
||||
@@ -34,7 +36,8 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
|
||||
Clock clock,
|
||||
MailboxApi api,
|
||||
MailboxSettingsManager mailboxSettingsManager,
|
||||
MailboxUpdateManager mailboxUpdateManager) {
|
||||
MailboxUpdateManager mailboxUpdateManager,
|
||||
QrCodeClassifier qrCodeClassifier) {
|
||||
this.eventExecutor = eventExecutor;
|
||||
this.db = db;
|
||||
this.crypto = crypto;
|
||||
@@ -42,12 +45,13 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
|
||||
this.api = api;
|
||||
this.mailboxSettingsManager = mailboxSettingsManager;
|
||||
this.mailboxUpdateManager = mailboxUpdateManager;
|
||||
this.qrCodeClassifier = qrCodeClassifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MailboxPairingTask createPairingTask(String qrCodePayload) {
|
||||
return new MailboxPairingTaskImpl(qrCodePayload, eventExecutor, db,
|
||||
crypto, clock, api, mailboxSettingsManager,
|
||||
mailboxUpdateManager);
|
||||
mailboxUpdateManager, qrCodeClassifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.briarproject.bramble.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.Consumer;
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.contact.Contact;
|
||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||
@@ -9,18 +10,26 @@ import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.event.EventExecutor;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.ConnectionError;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.InvalidQrCode;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.MailboxAlreadyPaired;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.Paired;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.Pairing;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.QrCodeReceived;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.UnexpectedError;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxUpdate;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxUpdateManager;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
import org.briarproject.bramble.api.system.Clock;
|
||||
import org.briarproject.bramble.mailbox.MailboxApi.ApiException;
|
||||
import org.briarproject.bramble.mailbox.MailboxApi.MailboxAlreadyPairedException;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
@@ -32,7 +41,10 @@ import javax.annotation.concurrent.ThreadSafe;
|
||||
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static java.util.logging.Logger.getLogger;
|
||||
import static org.briarproject.bramble.api.mailbox.MailboxConstants.QR_FORMAT_VERSION;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.MAILBOX;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.StringUtils.ISO_8859_1;
|
||||
|
||||
@ThreadSafe
|
||||
@NotNullByDefault
|
||||
@@ -40,9 +52,6 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
|
||||
private final static Logger LOG =
|
||||
getLogger(MailboxPairingTaskImpl.class.getName());
|
||||
@SuppressWarnings("CharsetObjectCanBeUsed") // Requires minSdkVersion >= 19
|
||||
private static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
|
||||
private static final int VERSION_REQUIRED = 32;
|
||||
|
||||
private final String payload;
|
||||
private final Executor eventExecutor;
|
||||
@@ -52,6 +61,8 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
private final MailboxApi api;
|
||||
private final MailboxSettingsManager mailboxSettingsManager;
|
||||
private final MailboxUpdateManager mailboxUpdateManager;
|
||||
private final QrCodeClassifier qrCodeClassifier;
|
||||
private final long timeStarted;
|
||||
|
||||
private final Object lock = new Object();
|
||||
@GuardedBy("lock")
|
||||
@@ -68,7 +79,8 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
Clock clock,
|
||||
MailboxApi api,
|
||||
MailboxSettingsManager mailboxSettingsManager,
|
||||
MailboxUpdateManager mailboxUpdateManager) {
|
||||
MailboxUpdateManager mailboxUpdateManager,
|
||||
QrCodeClassifier qrCodeClassifier) {
|
||||
this.payload = payload;
|
||||
this.eventExecutor = eventExecutor;
|
||||
this.db = db;
|
||||
@@ -77,7 +89,9 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
this.api = api;
|
||||
this.mailboxSettingsManager = mailboxSettingsManager;
|
||||
this.mailboxUpdateManager = mailboxUpdateManager;
|
||||
state = new MailboxPairingState.QrCodeReceived();
|
||||
this.qrCodeClassifier = qrCodeClassifier;
|
||||
timeStarted = clock.currentTimeMillis();
|
||||
state = new QrCodeReceived(timeStarted);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,22 +113,30 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Pair<QrCodeType, Integer> typeAndVersion =
|
||||
qrCodeClassifier.classifyQrCode(payload);
|
||||
QrCodeType qrCodeType = typeAndVersion.getFirst();
|
||||
int formatVersion = typeAndVersion.getSecond();
|
||||
if (qrCodeType != MAILBOX || formatVersion != QR_FORMAT_VERSION) {
|
||||
setState(new InvalidQrCode(qrCodeType, formatVersion));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
pairMailbox();
|
||||
} catch (FormatException e) {
|
||||
onMailboxError(e, new MailboxPairingState.InvalidQrCode());
|
||||
onMailboxError(e, new InvalidQrCode(qrCodeType, formatVersion));
|
||||
} catch (MailboxAlreadyPairedException e) {
|
||||
onMailboxError(e, new MailboxPairingState.MailboxAlreadyPaired());
|
||||
onMailboxError(e, new MailboxAlreadyPaired());
|
||||
} catch (IOException e) {
|
||||
onMailboxError(e, new MailboxPairingState.ConnectionError());
|
||||
onMailboxError(e, new ConnectionError());
|
||||
} catch (ApiException | DbException e) {
|
||||
onMailboxError(e, new MailboxPairingState.UnexpectedError());
|
||||
onMailboxError(e, new UnexpectedError());
|
||||
}
|
||||
}
|
||||
|
||||
private void pairMailbox() throws IOException, ApiException, DbException {
|
||||
MailboxProperties mailboxProperties = decodeQrCodePayload(payload);
|
||||
setState(new MailboxPairingState.Pairing());
|
||||
setState(new Pairing(timeStarted));
|
||||
MailboxProperties ownerProperties = api.setup(mailboxProperties);
|
||||
long time = clock.currentTimeMillis();
|
||||
db.transaction(false, txn -> {
|
||||
@@ -133,7 +155,7 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
}
|
||||
}
|
||||
});
|
||||
setState(new MailboxPairingState.Paired());
|
||||
setState(new Paired());
|
||||
}
|
||||
|
||||
private void onMailboxError(Exception e, MailboxPairingState state) {
|
||||
@@ -167,14 +189,6 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
|
||||
}
|
||||
throw new FormatException();
|
||||
}
|
||||
int version = bytes[0] & 0xFF;
|
||||
if (version != VERSION_REQUIRED) {
|
||||
if (LOG.isLoggable(WARNING)) {
|
||||
LOG.warning("QR code has not version " + VERSION_REQUIRED +
|
||||
": " + version);
|
||||
}
|
||||
throw new FormatException();
|
||||
}
|
||||
LOG.info("QR code is valid");
|
||||
byte[] onionPubKey = Arrays.copyOfRange(bytes, 1, 33);
|
||||
String onion = crypto.encodeOnion(onionPubKey);
|
||||
|
||||
@@ -4,7 +4,11 @@ import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class UrlConverterModule {
|
||||
public class ModularMailboxModule {
|
||||
@Provides
|
||||
MailboxConfig provideMailboxConfig(MailboxConfigImpl mailboxConfig) {
|
||||
return mailboxConfig;
|
||||
}
|
||||
|
||||
@Provides
|
||||
UrlConverter provideUrlConverter(UrlConverterImpl urlConverter) {
|
||||
@@ -32,6 +32,7 @@ class TorReachabilityMonitorImpl
|
||||
|
||||
private final Executor ioExecutor;
|
||||
private final TaskScheduler taskScheduler;
|
||||
private final MailboxConfig mailboxConfig;
|
||||
private final PluginManager pluginManager;
|
||||
private final EventBus eventBus;
|
||||
private final Object lock = new Object();
|
||||
@@ -50,10 +51,12 @@ class TorReachabilityMonitorImpl
|
||||
TorReachabilityMonitorImpl(
|
||||
@IoExecutor Executor ioExecutor,
|
||||
TaskScheduler taskScheduler,
|
||||
MailboxConfig mailboxConfig,
|
||||
PluginManager pluginManager,
|
||||
EventBus eventBus) {
|
||||
this.ioExecutor = ioExecutor;
|
||||
this.taskScheduler = taskScheduler;
|
||||
this.mailboxConfig = mailboxConfig;
|
||||
this.pluginManager = pluginManager;
|
||||
this.eventBus = eventBus;
|
||||
}
|
||||
@@ -110,7 +113,7 @@ class TorReachabilityMonitorImpl
|
||||
synchronized (lock) {
|
||||
if (destroyed || task != null) return;
|
||||
task = taskScheduler.schedule(this::onTorReachable, ioExecutor,
|
||||
REACHABILITY_PERIOD_MS, MILLISECONDS);
|
||||
mailboxConfig.getTorReachabilityPeriod(), MILLISECONDS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -89,6 +89,17 @@ abstract class AbstractBluetoothPlugin<S, SS> implements BluetoothPlugin,
|
||||
|
||||
private volatile String contactConnectionsUuid = null;
|
||||
|
||||
/**
|
||||
* Override and return true, if the plugin is now allowed to access the
|
||||
* Bluetooth hardware.
|
||||
* If this returns false, the plugin must be
|
||||
* {@link org.briarproject.bramble.api.plugin.Plugin.State#DISABLED}
|
||||
* in {@link #start()} and not attempt to access Bluetooth hardware.
|
||||
*/
|
||||
protected boolean isBluetoothAccessible() {
|
||||
return true;
|
||||
}
|
||||
|
||||
abstract void initialiseAdapter() throws IOException;
|
||||
|
||||
abstract boolean isAdapterEnabled();
|
||||
@@ -176,19 +187,28 @@ abstract class AbstractBluetoothPlugin<S, SS> implements BluetoothPlugin,
|
||||
DEFAULT_PREF_PLUGIN_ENABLE);
|
||||
everConnected.set(settings.getBoolean(PREF_EVER_CONNECTED,
|
||||
DEFAULT_PREF_EVER_CONNECTED));
|
||||
// disable plugin, if conditions for enabling are not met
|
||||
if (enabledByUser && !isBluetoothAccessible()) {
|
||||
enabledByUser = false;
|
||||
settings.putBoolean(PREF_PLUGIN_ENABLE, false);
|
||||
callback.mergeSettings(settings);
|
||||
}
|
||||
state.setStarted(enabledByUser);
|
||||
try {
|
||||
initialiseAdapter();
|
||||
} catch (IOException e) {
|
||||
throw new PluginException(e);
|
||||
}
|
||||
updateProperties();
|
||||
if (enabledByUser && isAdapterEnabled()) bind();
|
||||
if (enabledByUser) {
|
||||
updateProperties();
|
||||
if (isAdapterEnabled()) bind();
|
||||
}
|
||||
}
|
||||
|
||||
private void bind() {
|
||||
ioExecutor.execute(() -> {
|
||||
if (getState() != INACTIVE) return;
|
||||
if (contactConnectionsUuid == null) updateProperties();
|
||||
// Bind a server socket to accept connections from contacts
|
||||
SS ss;
|
||||
try {
|
||||
@@ -534,7 +554,8 @@ abstract class AbstractBluetoothPlugin<S, SS> implements BluetoothPlugin,
|
||||
private void onSettingsUpdated(Settings settings) {
|
||||
boolean enabledByUser = settings.getBoolean(PREF_PLUGIN_ENABLE,
|
||||
DEFAULT_PREF_PLUGIN_ENABLE);
|
||||
SS ss = state.setEnabledByUser(enabledByUser);
|
||||
boolean shouldEnable = enabledByUser && isBluetoothAccessible();
|
||||
SS ss = state.setEnabledByUser(shouldEnable);
|
||||
State s = getState();
|
||||
if (ss != null) {
|
||||
LOG.info("Disabled by user, closing server socket");
|
||||
|
||||
@@ -46,7 +46,6 @@ import java.io.OutputStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -100,6 +99,7 @@ import static org.briarproject.bramble.util.IoUtils.copyAndClose;
|
||||
import static org.briarproject.bramble.util.IoUtils.tryToClose;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.PrivacyUtils.scrubOnion;
|
||||
import static org.briarproject.bramble.util.StringUtils.UTF_8;
|
||||
import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@@ -419,9 +419,7 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
||||
append(strb, "ClientTransportPlugin meek_lite exec", obfs4Path);
|
||||
String snowflakePath = getSnowflakeExecutableFile().getAbsolutePath();
|
||||
append(strb, "ClientTransportPlugin snowflake exec", snowflakePath);
|
||||
//noinspection CharsetObjectCanBeUsed
|
||||
return new ByteArrayInputStream(
|
||||
strb.toString().getBytes(Charset.forName("UTF-8")));
|
||||
return new ByteArrayInputStream(strb.toString().getBytes(UTF_8));
|
||||
}
|
||||
|
||||
private void listFiles(File f) {
|
||||
@@ -811,7 +809,8 @@ abstract class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
|
||||
@Override
|
||||
public void controlConnectionClosed() {
|
||||
if (state.isTorRunning()) {
|
||||
throw new RuntimeException("Control connection closed");
|
||||
// TODO: Restart the Tor process
|
||||
LOG.warning("Control connection closed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec;
|
||||
import org.bouncycastle.util.encoders.Base64;
|
||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import static org.briarproject.bramble.util.StringUtils.US_ASCII;
|
||||
|
||||
class TorRendezvousCryptoImpl implements TorRendezvousCrypto {
|
||||
|
||||
@@ -31,6 +31,6 @@ class TorRendezvousCryptoImpl implements TorRendezvousCrypto {
|
||||
EdDSAPrivateKeySpec spec = new EdDSAPrivateKeySpec(seed, CURVE_SPEC);
|
||||
byte[] hash = spec.getH();
|
||||
byte[] base64 = Base64.encode(hash);
|
||||
return "ED25519-V3:" + new String(base64, Charset.forName("US-ASCII"));
|
||||
return "ED25519-V3:" + new String(base64, US_ASCII);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package org.briarproject.bramble.qrcode;
|
||||
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.keyagreement.KeyAgreementConstants;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxConstants;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.nullsafety.NotNullByDefault;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.BQP;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.MAILBOX;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.UNKNOWN;
|
||||
import static org.briarproject.bramble.util.StringUtils.ISO_8859_1;
|
||||
|
||||
@Immutable
|
||||
@NotNullByDefault
|
||||
class QrCodeClassifierImpl implements QrCodeClassifier {
|
||||
|
||||
@Inject
|
||||
QrCodeClassifierImpl() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<QrCodeType, Integer> classifyQrCode(String payload) {
|
||||
byte[] bytes = payload.getBytes(ISO_8859_1);
|
||||
if (bytes.length == 0) return new Pair<>(UNKNOWN, 0);
|
||||
// If this is a Bramble QR code then the first byte encodes the
|
||||
// format ID (3 bits) and version (5 bits)
|
||||
int formatIdAndVersion = bytes[0] & 0xFF;
|
||||
int formatId = formatIdAndVersion >> 5;
|
||||
int formatVersion = formatIdAndVersion & 0x1F;
|
||||
if (formatId == KeyAgreementConstants.QR_FORMAT_ID) {
|
||||
return new Pair<>(BQP, formatVersion);
|
||||
}
|
||||
if (formatId == MailboxConstants.QR_FORMAT_ID) {
|
||||
return new Pair<>(MAILBOX, formatVersion);
|
||||
}
|
||||
return new Pair<>(UNKNOWN, 0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.briarproject.bramble.qrcode;
|
||||
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class QrCodeModule {
|
||||
|
||||
@Provides
|
||||
QrCodeClassifier provideQrCodeClassifier(
|
||||
QrCodeClassifierImpl qrCodeClassifier) {
|
||||
return qrCodeClassifier;
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import org.briarproject.bramble.api.system.TaskScheduler;
|
||||
import java.util.concurrent.RejectedExecutionHandler;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
@@ -21,18 +22,15 @@ public class DefaultTaskSchedulerModule {
|
||||
TaskScheduler scheduler;
|
||||
}
|
||||
|
||||
private final ScheduledExecutorService scheduledExecutorService;
|
||||
|
||||
public DefaultTaskSchedulerModule() {
|
||||
@Provides
|
||||
@Singleton
|
||||
TaskScheduler provideTaskScheduler(LifecycleManager lifecycleManager,
|
||||
ThreadFactory threadFactory) {
|
||||
// Discard tasks that are submitted during shutdown
|
||||
RejectedExecutionHandler policy =
|
||||
new ScheduledThreadPoolExecutor.DiscardPolicy();
|
||||
scheduledExecutorService = new ScheduledThreadPoolExecutor(1, policy);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
TaskScheduler provideTaskScheduler(LifecycleManager lifecycleManager) {
|
||||
ScheduledExecutorService scheduledExecutorService =
|
||||
new ScheduledThreadPoolExecutor(1, threadFactory, policy);
|
||||
lifecycleManager.registerForShutdown(scheduledExecutorService);
|
||||
return new TaskSchedulerImpl(scheduledExecutorService);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package org.briarproject.bramble.system;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class DefaultThreadFactoryModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
ThreadFactory provideThreadFactory() {
|
||||
return Executors.defaultThreadFactory();
|
||||
}
|
||||
}
|
||||
@@ -228,15 +228,11 @@ class ClientVersioningManagerImpl implements ClientVersioningManager,
|
||||
Contact contact = db.getContact(txn, c);
|
||||
callVisibilityHooks(txn, contact, before, after);
|
||||
}
|
||||
// Broadcast events for any new client versions
|
||||
Set<ClientVersion> oldRemoteVersions = new HashSet<>();
|
||||
for (ClientState cs : oldRemoteStates) {
|
||||
oldRemoteVersions.add(cs.clientVersion);
|
||||
}
|
||||
// Broadcast events for any client version update
|
||||
for (ClientState cs : newRemoteStates) {
|
||||
if (!oldRemoteVersions.contains(cs.clientVersion)) {
|
||||
txn.attach(new ClientVersionUpdatedEvent(c,
|
||||
cs.clientVersion));
|
||||
if (!oldRemoteStates.contains(cs)) {
|
||||
txn.attach(
|
||||
new ClientVersionUpdatedEvent(c, cs.clientVersion));
|
||||
}
|
||||
}
|
||||
} catch (FormatException e) {
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@@ -34,6 +33,7 @@ import static org.briarproject.bramble.test.TestUtils.getIdentity;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
|
||||
import static org.briarproject.bramble.test.TestUtils.getTestDirectory;
|
||||
import static org.briarproject.bramble.util.StringUtils.UTF_8;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.briarproject.bramble.util.StringUtils.toHexString;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
@@ -342,7 +342,7 @@ public class AccountManagerImplTest extends BrambleMockTestCase {
|
||||
private void storeDatabaseKey(File f, String hex) throws IOException {
|
||||
f.getParentFile().mkdirs();
|
||||
FileOutputStream out = new FileOutputStream(f);
|
||||
out.write(hex.getBytes(Charset.forName("UTF-8")));
|
||||
out.write(hex.getBytes(UTF_8));
|
||||
out.flush();
|
||||
out.close();
|
||||
}
|
||||
@@ -350,7 +350,7 @@ public class AccountManagerImplTest extends BrambleMockTestCase {
|
||||
@Nullable
|
||||
private String loadDatabaseKey(File f) throws IOException {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(
|
||||
new FileInputStream(f), Charset.forName("UTF-8")));
|
||||
new FileInputStream(f), UTF_8));
|
||||
String hex = reader.readLine();
|
||||
reader.close();
|
||||
return hex;
|
||||
|
||||
@@ -9,7 +9,7 @@ import org.briarproject.bramble.api.event.EventBus;
|
||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||
import org.briarproject.bramble.api.lifecycle.IoExecutor;
|
||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
|
||||
import org.briarproject.bramble.test.TestDnsModule;
|
||||
import org.briarproject.bramble.test.TestPluginConfigModule;
|
||||
@@ -25,7 +25,7 @@ import dagger.Component;
|
||||
@Component(modules = {
|
||||
BrambleCoreIntegrationTestModule.class,
|
||||
BrambleCoreModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
TestDnsModule.class,
|
||||
TestSocksModule.class,
|
||||
TestPluginConfigModule.class,
|
||||
|
||||
@@ -2,21 +2,27 @@ package org.briarproject.bramble.keyagreement;
|
||||
|
||||
import org.briarproject.bramble.api.Bytes;
|
||||
import org.briarproject.bramble.api.FormatException;
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.UnsupportedVersionException;
|
||||
import org.briarproject.bramble.api.data.BdfList;
|
||||
import org.briarproject.bramble.api.data.BdfReader;
|
||||
import org.briarproject.bramble.api.data.BdfReaderFactory;
|
||||
import org.briarproject.bramble.api.keyagreement.Payload;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
import org.briarproject.bramble.api.qrcode.WrongQrCodeTypeException;
|
||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||
import org.jmock.Expectations;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.BETA_PROTOCOL_VERSION;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.COMMIT_LENGTH;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.PROTOCOL_VERSION;
|
||||
import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.QR_FORMAT_VERSION;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.BQP;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.MAILBOX;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@@ -26,32 +32,29 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
|
||||
private final BdfReaderFactory bdfReaderFactory =
|
||||
context.mock(BdfReaderFactory.class);
|
||||
private final QrCodeClassifier qrCodeClassifier =
|
||||
context.mock(QrCodeClassifier.class);
|
||||
private final BdfReader bdfReader = context.mock(BdfReader.class);
|
||||
|
||||
private final PayloadParserImpl payloadParser =
|
||||
new PayloadParserImpl(bdfReaderFactory);
|
||||
private final String payload = getRandomString(123);
|
||||
|
||||
@Test(expected = FormatException.class)
|
||||
public void testThrowsFormatExceptionIfPayloadIsEmpty() throws Exception {
|
||||
payloadParser.parse(new byte[0]);
|
||||
private final PayloadParserImpl payloadParser =
|
||||
new PayloadParserImpl(bdfReaderFactory, qrCodeClassifier);
|
||||
|
||||
@Test(expected = WrongQrCodeTypeException.class)
|
||||
public void testThrowsExceptionForWrongQrCodeType() throws Exception {
|
||||
expectClassifyQrCode(payload, MAILBOX, QR_FORMAT_VERSION);
|
||||
|
||||
payloadParser.parse(payload);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testThrowsUnsupportedVersionExceptionForOldVersion()
|
||||
throws Exception {
|
||||
try {
|
||||
payloadParser.parse(new byte[] {PROTOCOL_VERSION - 1});
|
||||
fail();
|
||||
} catch (UnsupportedVersionException e) {
|
||||
assertTrue(e.isTooOld());
|
||||
}
|
||||
}
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION - 1);
|
||||
|
||||
@Test
|
||||
public void testThrowsUnsupportedVersionExceptionForBetaVersion()
|
||||
throws Exception {
|
||||
try {
|
||||
payloadParser.parse(new byte[] {BETA_PROTOCOL_VERSION});
|
||||
payloadParser.parse(payload);
|
||||
fail();
|
||||
} catch (UnsupportedVersionException e) {
|
||||
assertTrue(e.isTooOld());
|
||||
@@ -61,8 +64,10 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
@Test
|
||||
public void testThrowsUnsupportedVersionExceptionForNewVersion()
|
||||
throws Exception {
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION + 1);
|
||||
|
||||
try {
|
||||
payloadParser.parse(new byte[] {PROTOCOL_VERSION + 1});
|
||||
payloadParser.parse(payload);
|
||||
fail();
|
||||
} catch (UnsupportedVersionException e) {
|
||||
assertFalse(e.isTooOld());
|
||||
@@ -71,6 +76,8 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
|
||||
@Test(expected = FormatException.class)
|
||||
public void testThrowsFormatExceptionForEmptyList() throws Exception {
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION);
|
||||
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(bdfReaderFactory).createReader(
|
||||
with(any(ByteArrayInputStream.class)));
|
||||
@@ -79,7 +86,7 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
will(returnValue(new BdfList()));
|
||||
}});
|
||||
|
||||
payloadParser.parse(new byte[] {PROTOCOL_VERSION});
|
||||
payloadParser.parse(payload);
|
||||
}
|
||||
|
||||
@Test(expected = FormatException.class)
|
||||
@@ -87,6 +94,8 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
throws Exception {
|
||||
byte[] commitment = getRandomBytes(COMMIT_LENGTH);
|
||||
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION);
|
||||
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(bdfReaderFactory).createReader(
|
||||
with(any(ByteArrayInputStream.class)));
|
||||
@@ -97,7 +106,7 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
will(returnValue(false));
|
||||
}});
|
||||
|
||||
payloadParser.parse(new byte[] {PROTOCOL_VERSION});
|
||||
payloadParser.parse(payload);
|
||||
}
|
||||
|
||||
@Test(expected = FormatException.class)
|
||||
@@ -105,6 +114,7 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
throws Exception {
|
||||
byte[] commitment = getRandomBytes(COMMIT_LENGTH - 1);
|
||||
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION);
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(bdfReaderFactory).createReader(
|
||||
with(any(ByteArrayInputStream.class)));
|
||||
@@ -115,7 +125,7 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
will(returnValue(true));
|
||||
}});
|
||||
|
||||
payloadParser.parse(new byte[] {PROTOCOL_VERSION});
|
||||
payloadParser.parse(payload);
|
||||
}
|
||||
|
||||
@Test(expected = FormatException.class)
|
||||
@@ -123,6 +133,7 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
throws Exception {
|
||||
byte[] commitment = getRandomBytes(COMMIT_LENGTH + 1);
|
||||
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION);
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(bdfReaderFactory).createReader(
|
||||
with(any(ByteArrayInputStream.class)));
|
||||
@@ -133,12 +144,14 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
will(returnValue(true));
|
||||
}});
|
||||
|
||||
payloadParser.parse(new byte[] {PROTOCOL_VERSION});
|
||||
payloadParser.parse(payload);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAcceptsPayloadWithNoDescriptors() throws Exception {
|
||||
byte[] commitment = getRandomBytes(COMMIT_LENGTH);
|
||||
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION);
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(bdfReaderFactory).createReader(
|
||||
with(any(ByteArrayInputStream.class)));
|
||||
@@ -149,8 +162,16 @@ public class PayloadParserImplTest extends BrambleMockTestCase {
|
||||
will(returnValue(true));
|
||||
}});
|
||||
|
||||
Payload p = payloadParser.parse(new byte[] {PROTOCOL_VERSION});
|
||||
Payload p = payloadParser.parse(payload);
|
||||
assertArrayEquals(commitment, p.getCommitment());
|
||||
assertTrue(p.getTransportDescriptors().isEmpty());
|
||||
}
|
||||
|
||||
private void expectClassifyQrCode(String payload, QrCodeType qrCodeType,
|
||||
int formatVersion) {
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(qrCodeClassifier).classifyQrCode(payload);
|
||||
will(returnValue(new Pair<>(qrCodeType, formatVersion)));
|
||||
}});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,12 +21,13 @@ public class MailboxApiCallerImplTest extends BrambleMockTestCase {
|
||||
|
||||
private final TaskScheduler taskScheduler =
|
||||
context.mock(TaskScheduler.class);
|
||||
private final MailboxConfig mailboxConfig = new MailboxConfigImpl();
|
||||
private final Executor ioExecutor = context.mock(Executor.class);
|
||||
private final ApiCall apiCall = context.mock(ApiCall.class);
|
||||
private final Cancellable scheduledTask = context.mock(Cancellable.class);
|
||||
|
||||
private final MailboxApiCallerImpl caller =
|
||||
new MailboxApiCallerImpl(taskScheduler, ioExecutor);
|
||||
new MailboxApiCallerImpl(taskScheduler, mailboxConfig, ioExecutor);
|
||||
|
||||
@Test
|
||||
public void testSubmitsTaskImmediately() {
|
||||
|
||||
@@ -24,9 +24,6 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.net.SocketFactory;
|
||||
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.mockwebserver.MockResponse;
|
||||
import okhttp3.mockwebserver.MockWebServer;
|
||||
@@ -34,8 +31,8 @@ import okhttp3.mockwebserver.RecordedRequest;
|
||||
import okio.Buffer;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
import static org.briarproject.bramble.api.mailbox.MailboxConstants.CLIENT_SUPPORTS;
|
||||
import static org.briarproject.bramble.mailbox.MailboxTestUtils.createHttpClientProvider;
|
||||
import static org.briarproject.bramble.test.TestUtils.getContactId;
|
||||
import static org.briarproject.bramble.test.TestUtils.getMailboxProperties;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
@@ -56,18 +53,8 @@ public class MailboxApiTest extends BrambleTestCase {
|
||||
@Rule
|
||||
public TemporaryFolder folder = new TemporaryFolder();
|
||||
|
||||
private final OkHttpClient client = new OkHttpClient.Builder()
|
||||
.socketFactory(SocketFactory.getDefault())
|
||||
.connectTimeout(60_000, MILLISECONDS)
|
||||
.build();
|
||||
private final WeakSingletonProvider<OkHttpClient> httpClientProvider =
|
||||
new WeakSingletonProvider<OkHttpClient>() {
|
||||
@Override
|
||||
@Nonnull
|
||||
public OkHttpClient createInstance() {
|
||||
return client;
|
||||
}
|
||||
};
|
||||
createHttpClientProvider();
|
||||
// We aren't using a real onion address, so use the given address verbatim
|
||||
private final UrlConverter urlConverter = onion -> onion;
|
||||
private final MailboxApiImpl api = new MailboxApiImpl(httpClientProvider,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.briarproject.bramble.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.contact.Contact;
|
||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||
import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||
@@ -7,13 +8,24 @@ import org.briarproject.bramble.api.db.DbException;
|
||||
import org.briarproject.bramble.api.db.Transaction;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxAuthToken;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.ConnectionError;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.InvalidQrCode;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.MailboxAlreadyPaired;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.Paired;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.Pairing;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.QrCodeReceived;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingState.UnexpectedError;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxProperties;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxUpdate;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxUpdateManager;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxVersion;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
import org.briarproject.bramble.api.system.Clock;
|
||||
import org.briarproject.bramble.mailbox.MailboxApi.ApiException;
|
||||
import org.briarproject.bramble.mailbox.MailboxApi.MailboxAlreadyPairedException;
|
||||
import org.briarproject.bramble.test.BrambleMockTestCase;
|
||||
import org.briarproject.bramble.test.DbExpectations;
|
||||
import org.briarproject.bramble.test.ImmediateExecutor;
|
||||
@@ -22,13 +34,15 @@ import org.jmock.Expectations;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static java.util.Collections.singletonList;
|
||||
import static org.briarproject.bramble.api.mailbox.MailboxConstants.QR_FORMAT_VERSION;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.BQP;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.MAILBOX;
|
||||
import static org.briarproject.bramble.mailbox.MailboxTestUtils.getQrCodePayload;
|
||||
import static org.briarproject.bramble.test.TestUtils.getContact;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomId;
|
||||
@@ -49,9 +63,8 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
context.mock(MailboxSettingsManager.class);
|
||||
private final MailboxUpdateManager mailboxUpdateManager =
|
||||
context.mock(MailboxUpdateManager.class);
|
||||
private final MailboxPairingTaskFactory factory =
|
||||
new MailboxPairingTaskFactoryImpl(executor, db, crypto, clock, api,
|
||||
mailboxSettingsManager, mailboxUpdateManager);
|
||||
private final QrCodeClassifier qrCodeClassifier =
|
||||
context.mock(QrCodeClassifier.class);
|
||||
|
||||
private final String onion = getRandomString(56);
|
||||
private final byte[] onionBytes = getRandomBytes(32);
|
||||
@@ -59,7 +72,8 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
new MailboxAuthToken(getRandomId());
|
||||
private final MailboxAuthToken ownerToken =
|
||||
new MailboxAuthToken(getRandomId());
|
||||
private final String validPayload = getValidPayload();
|
||||
private final String validPayload =
|
||||
getQrCodePayload(onionBytes, setupToken.getBytes());
|
||||
private final long time = System.currentTimeMillis();
|
||||
private final MailboxProperties setupProperties = new MailboxProperties(
|
||||
onion, setupToken, new ArrayList<>());
|
||||
@@ -68,32 +82,50 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
|
||||
@Test
|
||||
public void testInitialQrCodeReceivedState() {
|
||||
MailboxPairingTask task =
|
||||
factory.createPairingTask(getRandomString(42));
|
||||
MailboxPairingTask task = createPairingTask(getRandomString(42));
|
||||
task.addObserver(state ->
|
||||
assertTrue(state instanceof MailboxPairingState.QrCodeReceived)
|
||||
);
|
||||
assertTrue(state instanceof QrCodeReceived));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidQrCode() {
|
||||
MailboxPairingTask task1 =
|
||||
factory.createPairingTask(getRandomString(42));
|
||||
task1.run();
|
||||
task1.addObserver(state ->
|
||||
assertTrue(state instanceof MailboxPairingState.InvalidQrCode)
|
||||
);
|
||||
public void testInvalidQrCodeType() {
|
||||
String payload = getRandomString(65);
|
||||
MailboxPairingTask task = createPairingTask(payload);
|
||||
|
||||
String goodLength = "00" + getRandomString(63);
|
||||
MailboxPairingTask task2 = factory.createPairingTask(goodLength);
|
||||
task2.run();
|
||||
task2.addObserver(state ->
|
||||
assertTrue(state instanceof MailboxPairingState.InvalidQrCode)
|
||||
);
|
||||
expectClassifyQrCode(payload, BQP, QR_FORMAT_VERSION);
|
||||
|
||||
task.run();
|
||||
task.addObserver(state ->
|
||||
assertTrue(state instanceof InvalidQrCode));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidQrCodeVersion() {
|
||||
String payload = getRandomString(65);
|
||||
MailboxPairingTask task = createPairingTask(payload);
|
||||
|
||||
expectClassifyQrCode(payload, MAILBOX, QR_FORMAT_VERSION + 1);
|
||||
|
||||
task.run();
|
||||
task.addObserver(state ->
|
||||
assertTrue(state instanceof InvalidQrCode));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvalidQrCodeLength() {
|
||||
String payload = getRandomString(42);
|
||||
MailboxPairingTask task = createPairingTask(payload);
|
||||
|
||||
expectClassifyQrCode(payload, MAILBOX, QR_FORMAT_VERSION);
|
||||
|
||||
task.run();
|
||||
task.addObserver(state ->
|
||||
assertTrue(state instanceof InvalidQrCode));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuccessfulPairing() throws Exception {
|
||||
expectClassifyQrCode(validPayload, MAILBOX, QR_FORMAT_VERSION);
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(crypto).encodeOnion(onionBytes);
|
||||
will(returnValue(onion));
|
||||
@@ -121,17 +153,14 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
}});
|
||||
|
||||
AtomicInteger i = new AtomicInteger(0);
|
||||
MailboxPairingTask task = factory.createPairingTask(validPayload);
|
||||
MailboxPairingTask task = createPairingTask(validPayload);
|
||||
task.addObserver(state -> {
|
||||
if (i.get() == 0) {
|
||||
assertEquals(MailboxPairingState.QrCodeReceived.class,
|
||||
state.getClass());
|
||||
assertEquals(QrCodeReceived.class, state.getClass());
|
||||
} else if (i.get() == 1) {
|
||||
assertEquals(MailboxPairingState.Pairing.class,
|
||||
state.getClass());
|
||||
assertEquals(Pairing.class, state.getClass());
|
||||
} else if (i.get() == 2) {
|
||||
assertEquals(MailboxPairingState.Paired.class,
|
||||
state.getClass());
|
||||
assertEquals(Paired.class, state.getClass());
|
||||
} else fail("Unexpected change of state " + state.getClass());
|
||||
i.getAndIncrement();
|
||||
});
|
||||
@@ -140,24 +169,23 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
|
||||
@Test
|
||||
public void testAlreadyPaired() throws Exception {
|
||||
testApiException(new MailboxApi.MailboxAlreadyPairedException(),
|
||||
MailboxPairingState.MailboxAlreadyPaired.class);
|
||||
testApiException(new MailboxAlreadyPairedException(),
|
||||
MailboxAlreadyPaired.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMailboxApiException() throws Exception {
|
||||
testApiException(new MailboxApi.ApiException(),
|
||||
MailboxPairingState.UnexpectedError.class);
|
||||
testApiException(new ApiException(), UnexpectedError.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApiIOException() throws Exception {
|
||||
testApiException(new IOException(),
|
||||
MailboxPairingState.ConnectionError.class);
|
||||
testApiException(new IOException(), ConnectionError.class);
|
||||
}
|
||||
|
||||
private void testApiException(Exception e,
|
||||
Class<? extends MailboxPairingState> s) throws Exception {
|
||||
expectClassifyQrCode(validPayload, MAILBOX, QR_FORMAT_VERSION);
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(crypto).encodeOnion(onionBytes);
|
||||
will(returnValue(onion));
|
||||
@@ -165,13 +193,14 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
will(throwException(e));
|
||||
}});
|
||||
|
||||
MailboxPairingTask task = factory.createPairingTask(validPayload);
|
||||
MailboxPairingTask task = createPairingTask(validPayload);
|
||||
task.run();
|
||||
task.addObserver(state -> assertEquals(state.getClass(), s));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDbException() throws Exception {
|
||||
expectClassifyQrCode(validPayload, MAILBOX, QR_FORMAT_VERSION);
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(crypto).encodeOnion(onionBytes);
|
||||
will(returnValue(onion));
|
||||
@@ -188,20 +217,10 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
will(throwException(new DbException()));
|
||||
}});
|
||||
|
||||
MailboxPairingTask task = factory.createPairingTask(validPayload);
|
||||
MailboxPairingTask task = createPairingTask(validPayload);
|
||||
task.run();
|
||||
task.addObserver(state -> assertEquals(state.getClass(),
|
||||
MailboxPairingState.UnexpectedError.class));
|
||||
}
|
||||
|
||||
private String getValidPayload() {
|
||||
byte[] payloadBytes = ByteBuffer.allocate(65)
|
||||
.put((byte) 32) // 1
|
||||
.put(onionBytes) // 32
|
||||
.put(setupToken.getBytes()) // 32
|
||||
.array();
|
||||
//noinspection CharsetObjectCanBeUsed
|
||||
return new String(payloadBytes, Charset.forName("ISO-8859-1"));
|
||||
task.addObserver(state ->
|
||||
assertEquals(state.getClass(), UnexpectedError.class));
|
||||
}
|
||||
|
||||
private PredicateMatcher<MailboxProperties> matches(MailboxProperties p2) {
|
||||
@@ -212,4 +231,22 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
|
||||
p1.getServerSupports().equals(p2.getServerSupports()));
|
||||
}
|
||||
|
||||
private MailboxPairingTask createPairingTask(String qrCodePayload) {
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(clock).currentTimeMillis();
|
||||
will(returnValue(time));
|
||||
}});
|
||||
|
||||
return new MailboxPairingTaskImpl(qrCodePayload, executor, db,
|
||||
crypto, clock, api, mailboxSettingsManager,
|
||||
mailboxUpdateManager, qrCodeClassifier);
|
||||
}
|
||||
|
||||
private void expectClassifyQrCode(String payload, QrCodeType qrCodeType,
|
||||
int formatVersion) {
|
||||
context.checking(new Expectations() {{
|
||||
oneOf(qrCodeClassifier).classifyQrCode(payload);
|
||||
will(returnValue(new Pair<>(qrCodeType, formatVersion)));
|
||||
}});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package org.briarproject.bramble.mailbox;
|
||||
|
||||
import org.briarproject.bramble.api.WeakSingletonProvider;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.net.SocketFactory;
|
||||
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
import static org.briarproject.bramble.api.mailbox.MailboxConstants.QR_FORMAT_ID;
|
||||
import static org.briarproject.bramble.api.mailbox.MailboxConstants.QR_FORMAT_VERSION;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomId;
|
||||
import static org.briarproject.bramble.util.StringUtils.ISO_8859_1;
|
||||
|
||||
class MailboxTestUtils {
|
||||
|
||||
static String getQrCodePayload(byte[] onionBytes, byte[] setupToken) {
|
||||
int formatIdAndVersion = (QR_FORMAT_ID << 5) | QR_FORMAT_VERSION;
|
||||
byte[] payloadBytes = ByteBuffer.allocate(65)
|
||||
.put((byte) formatIdAndVersion) // 1
|
||||
.put(onionBytes) // 32
|
||||
.put(setupToken) // 32
|
||||
.array();
|
||||
return new String(payloadBytes, ISO_8859_1);
|
||||
}
|
||||
|
||||
// Used by mailbox integration tests
|
||||
static String getQrCodePayload(byte[] setupToken) {
|
||||
return getQrCodePayload(getRandomId(), setupToken);
|
||||
}
|
||||
|
||||
static WeakSingletonProvider<OkHttpClient> createHttpClientProvider() {
|
||||
return new WeakSingletonProvider<OkHttpClient>() {
|
||||
@Override
|
||||
@Nonnull
|
||||
public OkHttpClient createInstance() {
|
||||
return new OkHttpClient.Builder()
|
||||
.socketFactory(SocketFactory.getDefault())
|
||||
.connectTimeout(60_000, MILLISECONDS)
|
||||
.build();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ public class TorReachabilityMonitorImplTest extends BrambleMockTestCase {
|
||||
private final Executor ioExecutor = context.mock(Executor.class);
|
||||
private final TaskScheduler taskScheduler =
|
||||
context.mock(TaskScheduler.class);
|
||||
private final MailboxConfig mailboxConfig = new MailboxConfigImpl();
|
||||
private final PluginManager pluginManager =
|
||||
context.mock(PluginManager.class);
|
||||
private final EventBus eventBus = context.mock(EventBus.class);
|
||||
@@ -39,7 +40,7 @@ public class TorReachabilityMonitorImplTest extends BrambleMockTestCase {
|
||||
|
||||
private final TorReachabilityMonitorImpl monitor =
|
||||
new TorReachabilityMonitorImpl(ioExecutor, taskScheduler,
|
||||
pluginManager, eventBus);
|
||||
mailboxConfig, pluginManager, eventBus);
|
||||
|
||||
@Test
|
||||
public void testSchedulesTaskWhenStartedIfTorIsActive() {
|
||||
|
||||
@@ -9,7 +9,8 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.bramble.api.plugin.file.RemovableDriveManager;
|
||||
import org.briarproject.bramble.battery.DefaultBatteryManagerModule;
|
||||
import org.briarproject.bramble.event.DefaultEventExecutorModule;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
import org.briarproject.bramble.system.DefaultThreadFactoryModule;
|
||||
import org.briarproject.bramble.system.DefaultWakefulIoExecutorModule;
|
||||
import org.briarproject.bramble.system.TimeTravelModule;
|
||||
import org.briarproject.bramble.test.TestDatabaseConfigModule;
|
||||
@@ -29,13 +30,14 @@ import dagger.Component;
|
||||
DefaultBatteryManagerModule.class,
|
||||
DefaultEventExecutorModule.class,
|
||||
DefaultWakefulIoExecutorModule.class,
|
||||
DefaultThreadFactoryModule.class,
|
||||
TestDatabaseConfigModule.class,
|
||||
TestDnsModule.class,
|
||||
TestFeatureFlagModule.class,
|
||||
TestMailboxDirectoryModule.class,
|
||||
RemovableDriveIntegrationTestModule.class,
|
||||
RemovableDriveModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
TestSecureRandomModule.class,
|
||||
TimeTravelModule.class,
|
||||
TestSocksModule.class,
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package org.briarproject.bramble.qrcode;
|
||||
|
||||
import org.briarproject.bramble.api.Pair;
|
||||
import org.briarproject.bramble.api.keyagreement.KeyAgreementConstants;
|
||||
import org.briarproject.bramble.api.mailbox.MailboxConstants;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier;
|
||||
import org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType;
|
||||
import org.briarproject.bramble.test.BrambleTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.BQP;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.MAILBOX;
|
||||
import static org.briarproject.bramble.api.qrcode.QrCodeClassifier.QrCodeType.UNKNOWN;
|
||||
import static org.briarproject.bramble.test.TestUtils.getRandomBytes;
|
||||
import static org.briarproject.bramble.util.StringUtils.ISO_8859_1;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class QrCodeClassifierImplTest extends BrambleTestCase {
|
||||
|
||||
private final QrCodeClassifier classifier = new QrCodeClassifierImpl();
|
||||
|
||||
@Test
|
||||
public void testClassifiesEmptyStringAsUnknown() {
|
||||
Pair<QrCodeType, Integer> result = classifier.classifyQrCode("");
|
||||
assertEquals(UNKNOWN, result.getFirst());
|
||||
assertEquals(0, result.getSecond().intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClassifiesKeyAgreement() {
|
||||
byte[] payloadBytes = getRandomBytes(123);
|
||||
for (int version = 0; version < 32; version++) {
|
||||
int typeAndVersion =
|
||||
(KeyAgreementConstants.QR_FORMAT_ID << 5) | version;
|
||||
payloadBytes[0] = (byte) typeAndVersion;
|
||||
String payload = new String(payloadBytes, ISO_8859_1);
|
||||
Pair<QrCodeType, Integer> result =
|
||||
classifier.classifyQrCode(payload);
|
||||
assertEquals(BQP, result.getFirst());
|
||||
assertEquals(version, result.getSecond().intValue());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClassifiesMailbox() {
|
||||
byte[] payloadBytes = getRandomBytes(123);
|
||||
for (int version = 0; version < 32; version++) {
|
||||
int typeAndVersion =
|
||||
(MailboxConstants.QR_FORMAT_ID << 5) | version;
|
||||
payloadBytes[0] = (byte) typeAndVersion;
|
||||
String payload = new String(payloadBytes, ISO_8859_1);
|
||||
Pair<QrCodeType, Integer> result =
|
||||
classifier.classifyQrCode(payload);
|
||||
assertEquals(MAILBOX, result.getFirst());
|
||||
assertEquals(version, result.getSecond().intValue());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClassifiesUnknownFormatIdAsUnknown() {
|
||||
byte[] payloadBytes = getRandomBytes(123);
|
||||
int unknownFormatId = MailboxConstants.QR_FORMAT_ID + 1;
|
||||
int typeAndVersion = unknownFormatId << 5;
|
||||
payloadBytes[0] = (byte) typeAndVersion;
|
||||
String payload = new String(payloadBytes, ISO_8859_1);
|
||||
Pair<QrCodeType, Integer> result = classifier.classifyQrCode(payload);
|
||||
assertEquals(UNKNOWN, result.getFirst());
|
||||
assertEquals(0, result.getSecond().intValue());
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package org.briarproject.bramble.sync;
|
||||
|
||||
import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
|
||||
import org.briarproject.bramble.BrambleCoreModule;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
|
||||
import org.briarproject.bramble.test.TestDnsModule;
|
||||
import org.briarproject.bramble.test.TestPluginConfigModule;
|
||||
@@ -16,7 +16,7 @@ import dagger.Component;
|
||||
@Component(modules = {
|
||||
BrambleCoreIntegrationTestModule.class,
|
||||
BrambleCoreModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
TestDnsModule.class,
|
||||
TestSocksModule.class,
|
||||
TestPluginConfigModule.class,
|
||||
|
||||
@@ -11,6 +11,7 @@ import dagger.Module;
|
||||
DefaultBatteryManagerModule.class,
|
||||
DefaultEventExecutorModule.class,
|
||||
DefaultWakefulIoExecutorModule.class,
|
||||
TestThreadFactoryModule.class,
|
||||
TestDatabaseConfigModule.class,
|
||||
TestFeatureFlagModule.class,
|
||||
TestMailboxDirectoryModule.class,
|
||||
|
||||
@@ -235,11 +235,16 @@ public abstract class BrambleIntegrationTest<C extends BrambleIntegrationTestCom
|
||||
|
||||
protected void awaitPendingMessageDelivery(int num)
|
||||
throws TimeoutException {
|
||||
deliveryWaiter.await(TIMEOUT, num);
|
||||
awaitPendingMessageDelivery(num, TIMEOUT);
|
||||
}
|
||||
|
||||
protected void awaitPendingMessageDelivery(int num, long timeout)
|
||||
throws TimeoutException {
|
||||
deliveryWaiter.await(timeout, num);
|
||||
assertEquals("Messages delivered", num, deliveryCounter.getAndSet(0));
|
||||
|
||||
try {
|
||||
messageSemaphore.tryAcquire(num, TIMEOUT, MILLISECONDS);
|
||||
messageSemaphore.tryAcquire(num, timeout, MILLISECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
LOG.info("Interrupted while waiting for messages");
|
||||
Thread.currentThread().interrupt();
|
||||
|
||||
@@ -6,7 +6,7 @@ import org.briarproject.bramble.api.client.ClientHelper;
|
||||
import org.briarproject.bramble.api.connection.ConnectionManager;
|
||||
import org.briarproject.bramble.api.event.EventBus;
|
||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
@@ -16,7 +16,7 @@ import dagger.Component;
|
||||
@Component(modules = {
|
||||
BrambleCoreIntegrationTestModule.class,
|
||||
BrambleCoreModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
TestDnsModule.class,
|
||||
TestSocksModule.class,
|
||||
TestPluginConfigModule.class,
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
package org.briarproject.bramble.test;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
|
||||
@Module
|
||||
public class TestThreadFactoryModule {
|
||||
|
||||
@Nullable
|
||||
private final String prefix;
|
||||
|
||||
public TestThreadFactoryModule() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public TestThreadFactoryModule(@Nullable String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
@Provides
|
||||
ThreadFactory provideThreadFactory() {
|
||||
if (prefix == null) return Executors.defaultThreadFactory();
|
||||
return new TestThreadFactory(prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is mostly copied from
|
||||
* {@link Executors#defaultThreadFactory()} only adds a given prefix.
|
||||
*/
|
||||
static class TestThreadFactory implements ThreadFactory {
|
||||
private static final AtomicInteger poolNumber = new AtomicInteger(1);
|
||||
private final ThreadGroup group;
|
||||
private final AtomicInteger threadNumber = new AtomicInteger(1);
|
||||
private final String namePrefix;
|
||||
|
||||
private TestThreadFactory(String prefix) {
|
||||
SecurityManager s = System.getSecurityManager();
|
||||
this.group = s != null ? s.getThreadGroup() :
|
||||
Thread.currentThread().getThreadGroup();
|
||||
this.namePrefix =
|
||||
prefix + "-p-" + poolNumber.getAndIncrement() + "-t-";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Thread newThread(@Nonnull Runnable r) {
|
||||
Thread t = new Thread(this.group, r,
|
||||
this.namePrefix + this.threadNumber.getAndIncrement(), 0L);
|
||||
if (t.isDaemon()) {
|
||||
t.setDaemon(false);
|
||||
}
|
||||
|
||||
if (t.getPriority() != 5) {
|
||||
t.setPriority(5);
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
|
||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||
import org.briarproject.bramble.api.properties.TransportPropertyManager;
|
||||
import org.briarproject.bramble.api.transport.KeyManager;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule;
|
||||
import org.briarproject.bramble.test.BrambleIntegrationTestComponent;
|
||||
import org.briarproject.bramble.test.TestDnsModule;
|
||||
@@ -22,7 +22,7 @@ import dagger.Component;
|
||||
@Component(modules = {
|
||||
BrambleCoreIntegrationTestModule.class,
|
||||
BrambleCoreModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
TestDnsModule.class,
|
||||
TestSocksModule.class,
|
||||
TestPluginConfigModule.class,
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
dependencyVerification {
|
||||
verify = [
|
||||
'cglib:cglib:3.2.8:cglib-3.2.8.jar:3f64de999ecc5595dc84ca8ff0879d8a34c8623f9ef3c517a53ed59023fcb9db',
|
||||
'com.fasterxml.jackson.core:jackson-annotations:2.13.0:jackson-annotations-2.13.0.jar:81f9724d8843e8b08f8f6c0609e7a2b030d00c34861c4ac7e2099a7235047d6f',
|
||||
'com.fasterxml.jackson.core:jackson-core:2.13.0:jackson-core-2.13.0.jar:348bc59b348df2e807b356f1d62d2afb41a974073328abc773eb0932b855d2c8',
|
||||
'com.fasterxml.jackson.core:jackson-databind:2.13.0:jackson-databind-2.13.0.jar:9c826d27176268777adcf97e1c6e2051c7e33a7aaa2c370c2e8c6077fd9da3f4',
|
||||
'com.fasterxml.jackson.core:jackson-annotations:2.13.4:jackson-annotations-2.13.4.jar:ac5b27a634942391ca113850ee7db01df1499a240174021263501c05fc653b44',
|
||||
'com.fasterxml.jackson.core:jackson-core:2.13.4:jackson-core-2.13.4.jar:4c2e043200edd9ee7ba6fc378bd5c17784a5bf2388e152d208068b51fd0839cf',
|
||||
'com.fasterxml.jackson.core:jackson-databind:2.13.4:jackson-databind-2.13.4.jar:c9faff420d9e2c7e1e4711dbeebec2506a32c9942027211c5c293d8d87807eb6',
|
||||
'com.google.code.findbugs:annotations:3.0.1:annotations-3.0.1.jar:6b47ff0a6de0ce17cbedc3abb0828ca5bce3009d53ea47b3723ff023c4742f79',
|
||||
'com.google.code.findbugs:jsr305:3.0.2:jsr305-3.0.2.jar:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7',
|
||||
'com.google.dagger:dagger-compiler:2.33:dagger-compiler-2.33.jar:aa8a0d8370c578fd6999802d0d90b9829377a46d2c1141e11b8f737970e7155e',
|
||||
'com.google.dagger:dagger-producers:2.33:dagger-producers-2.33.jar:5897f0b6eef799c2adfe3ccacc58c0fb374d58acb063c3ebe5366c38a8bce5c8',
|
||||
'com.google.dagger:dagger-spi:2.33:dagger-spi-2.33.jar:e2dcab2221b8afb9556ef0a1c83b0bd5f42552e254322a257330f754cdbbb9d4',
|
||||
'com.google.dagger:dagger:2.33:dagger-2.33.jar:d8798c5b8cf6b125234e33af5c6293bb9f2208ce29b57924c35b8c0be7b6bdcb',
|
||||
'com.google.errorprone:error_prone_annotations:2.2.0:error_prone_annotations-2.2.0.jar:6ebd22ca1b9d8ec06d41de8d64e0596981d9607b42035f9ed374f9de271a481a',
|
||||
'com.google.dagger:dagger-compiler:2.43.2:dagger-compiler-2.43.2.jar:298c020ee6ed2f4cc651ebbfdb7f8de329b07c44b618d65be117846a850e2a03',
|
||||
'com.google.dagger:dagger-producers:2.43.2:dagger-producers-2.43.2.jar:e7f5d9ffc85d48a49c8e22e02833d418f7ccad5d7512f529964db5127ab915ff',
|
||||
'com.google.dagger:dagger-spi:2.43.2:dagger-spi-2.43.2.jar:3bae8d9dadeaaa5927da6f094389a560c12c05fec3d2711d2fa79292c7a7d7ad',
|
||||
'com.google.dagger:dagger:2.43.2:dagger-2.43.2.jar:c89681f7cbbf8c527bf4ac2748515d617fdb54a1d425c08d914fdc28192b5fe4',
|
||||
'com.google.devtools.ksp:symbol-processing-api:1.7.0-1.0.6:symbol-processing-api-1.7.0-1.0.6.jar:adc29417be5ca9ff42118105fea4e36d9ef44987abfc41432309371a60198941',
|
||||
'com.google.errorprone:error_prone_annotations:2.7.1:error_prone_annotations-2.7.1.jar:cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3',
|
||||
'com.google.errorprone:javac-shaded:9-dev-r4023-3:javac-shaded-9-dev-r4023-3.jar:65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30',
|
||||
'com.google.googlejavaformat:google-java-format:1.5:google-java-format-1.5.jar:aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e',
|
||||
'com.google.guava:failureaccess:1.0.1:failureaccess-1.0.1.jar:a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26',
|
||||
'com.google.guava:guava:27.1-jre:guava-27.1-jre.jar:4a5aa70cc968a4d137e599ad37553e5cfeed2265e8c193476d7119036c536fe7',
|
||||
'com.google.guava:guava:31.0.1-jre:guava-31.0.1-jre.jar:d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9',
|
||||
'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99',
|
||||
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
||||
'com.google.j2objc:j2objc-annotations:1.3:j2objc-annotations-1.3.jar:21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b',
|
||||
'com.h2database:h2:1.4.192:h2-1.4.192.jar:225b22e9857235c46c93861410b60b8c81c10dc8985f4faf188985ba5445126c',
|
||||
'com.squareup.okhttp3:mockwebserver:4.9.3:mockwebserver-4.9.3.jar:9c8c581c29f22f877a35d11380462f75bb24bf1886204fe835ee695594a2784e',
|
||||
'com.squareup.okhttp3:okhttp:3.12.13:okhttp-3.12.13.jar:508234e024ef7e270ab1a6d5b356f5b98e786511239ca986d684fd1e2cf7bc82',
|
||||
@@ -24,7 +25,6 @@ dependencyVerification {
|
||||
'com.squareup.okio:okio:1.15.0:okio-1.15.0.jar:693fa319a7e8843300602b204023b7674f106ebcb577f2dd5807212b66118bd2',
|
||||
'com.squareup.okio:okio:2.8.0:okio-jvm-2.8.0.jar:4496b06e73982fcdd8a5393f46e5df2ce2fa4465df5895454cac68a32f09bbc8',
|
||||
'com.squareup:javapoet:1.13.0:javapoet-1.13.0.jar:4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291',
|
||||
'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f',
|
||||
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
||||
'junit:junit:4.13.2:junit-4.13.2.jar:8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3',
|
||||
'net.bytebuddy:byte-buddy:1.9.12:byte-buddy-1.9.12.jar:3688c3d434bebc3edc5516296a2ed0f47b65e451071b4afecad84f902f0efc11',
|
||||
@@ -34,14 +34,13 @@ dependencyVerification {
|
||||
'net.ltgt.gradle.incap:incap:0.2:incap-0.2.jar:b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd',
|
||||
'org.apache-extras.beanshell:bsh:2.0b6:bsh-2.0b6.jar:a17955976070c0573235ee662f2794a78082758b61accffce8d3f8aedcd91047',
|
||||
'org.bitlet:weupnp:0.1.4:weupnp-0.1.4.jar:88df7e6504929d00bdb832863761385c68ab92af945b04f0770b126270a444fb',
|
||||
'org.bouncycastle:bcprov-jdk15to18:1.70:bcprov-jdk15to18-1.70.jar:7df4c54f29ce2dd616dc3b198ca4db3dfcc79e3cb397c084a0aff97b85c0bf38',
|
||||
'org.bouncycastle:bcprov-jdk15to18:1.71:bcprov-jdk15to18-1.71.jar:143aaa4a40edd5fc2a18db7900059f6c16f4d931b94b94b20f7e2238e6662886',
|
||||
'org.briarproject:jtorctl:0.5:jtorctl-0.5.jar:43f8c7d390169772b9a2c82ab806c8414c136a2a8636c555e22754bb7260793b',
|
||||
'org.briarproject:null-safety:0.1:null-safety-0.1.jar:161760de5e838cb982bafa973df820675d4397098e9a91637a36a306d43ba011',
|
||||
'org.briarproject:socks-socket:0.1:socks-socket-0.1.jar:e5898822d10f5390363c5dddb945891648c92cf93ba50709e07f0d173ec0eb4b',
|
||||
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
||||
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
||||
'org.checkerframework:checker-compat-qual:2.5.5:checker-compat-qual-2.5.5.jar:11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a',
|
||||
'org.checkerframework:checker-qual:3.12.0:checker-qual-3.12.0.jar:ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb',
|
||||
'org.codehaus.mojo.signature:java16:1.1:java16-1.1.signature:53799223a2c98dba2d0add810bed76315460df285c69e4f397ae6098f87dd619',
|
||||
'org.codehaus.mojo:animal-sniffer-annotations:1.17:animal-sniffer-annotations-1.17.jar:92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53',
|
||||
'org.codehaus.mojo:animal-sniffer-ant-tasks:1.20:animal-sniffer-ant-tasks-1.20.jar:bb7d2498144118311d968bb08ff6fae3fc535fb1cb9cca8b8e9ea65b189422ac',
|
||||
'org.codehaus.mojo:animal-sniffer:1.20:animal-sniffer-1.20.jar:80c422523c38db91260c6d78e5ee4b012862ab61cc55020c9e243dd7b5c62249',
|
||||
'org.hamcrest:hamcrest-core:2.1:hamcrest-core-2.1.jar:e09109e54a289d88506b9bfec987ddd199f4217c9464132668351b9a4f00bee9',
|
||||
@@ -49,12 +48,14 @@ dependencyVerification {
|
||||
'org.hamcrest:hamcrest:2.1:hamcrest-2.1.jar:ba93b2e3a562322ba432f0a1b53addcc55cb188253319a020ed77f824e692050',
|
||||
'org.hsqldb:hsqldb:2.3.5:hsqldb-2.3.5.jar:6676a6977ac98997a80f827ddbd3fe8ca1e0853dad1492512135fd1a222ccfad',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.10:kotlin-stdlib-common-1.4.10.jar:4681f2d436a68c7523595d84ed5758e1382f9da0f67c91e6a848690d711274fe',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.20:kotlin-stdlib-common-1.4.20.jar:a7112c9b3cefee418286c9c9372f7af992bd1e6e030691d52f60cb36dbec8320',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.7.0:kotlin-stdlib-common-1.7.0.jar:59c6ff64fe9a6604afce03e8aaa75f83586c6030ac71fb0b34ee7cdefed3618f',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10:kotlin-stdlib-jdk7-1.4.10.jar:f9566380c08722c780ce33ceee23e98ddf765ca98fabd3e2fabae7975c8d232b',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0:kotlin-stdlib-jdk7-1.7.0.jar:07e91be9b2ca20672d2bdb7e181b766e73453a2da13492b5ddaee8fa47aea239',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10:kotlin-stdlib-jdk8-1.4.10.jar:39b7a9442d7a3865e0f4a732c56c1d5da0e11ffb3bb82a461d32deb0c0ca7673',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.0:kotlin-stdlib-jdk8-1.7.0.jar:cf058e11db1dfc9944680c8c61b95ac689aaaa8a3eb30bced028100f038f030b',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.10:kotlin-stdlib-1.4.10.jar:01ecb09782c042b931c1839acf21a188340b295d05400afd6e3415d4475b8daa',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.20:kotlin-stdlib-1.4.20.jar:b8ab1da5cdc89cb084d41e1f28f20a42bd431538642a5741c52bbfae3fa3e656',
|
||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0:kotlinx-metadata-jvm-0.1.0.jar:9753bb39efef35957c5c15df9a3cb769aabf2cdfa74b47afcb7760e5146be3b5',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.7.0:kotlin-stdlib-1.7.0.jar:aa88e9625577957f3249a46cb6e166ee09b369e600f7a11d148d16b0a6d87f05',
|
||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0:kotlinx-metadata-jvm-0.5.0.jar:ca063a96639b08b9eaa0de4d65e899480740a6efbe28ab9a8681a2ced03055a4',
|
||||
'org.jetbrains:annotations:13.0:annotations-13.0.jar:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478',
|
||||
'org.jmock:jmock-imposters:2.12.0:jmock-imposters-2.12.0.jar:3b836269745a137c9b2347e8d7c2104845b126ef04f012d6bfd94f1a7dea7b09',
|
||||
'org.jmock:jmock-junit4:2.12.0:jmock-junit4-2.12.0.jar:3233062fc889637c151a24f1ee086bad04321ab7d8264fef279daff0fa27205b',
|
||||
|
||||
@@ -12,11 +12,13 @@ configurations {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(path: ':bramble-core', configuration: 'default')
|
||||
implementation project(':bramble-core')
|
||||
|
||||
implementation fileTree(dir: 'libs', include: '*.jar')
|
||||
def jna_version = '4.5.2'
|
||||
implementation "net.java.dev.jna:jna:$jna_version"
|
||||
implementation "net.java.dev.jna:jna-platform:$jna_version"
|
||||
|
||||
tor "org.briarproject:tor-linux:$tor_version"
|
||||
tor "org.briarproject:tor-windows:$tor_version"
|
||||
tor "org.briarproject:obfs4proxy-linux:$obfs4proxy_version"
|
||||
@@ -28,9 +30,11 @@ dependencies {
|
||||
|
||||
testImplementation project(path: ':bramble-api', configuration: 'testOutput')
|
||||
testImplementation project(path: ':bramble-core', configuration: 'testOutput')
|
||||
|
||||
testImplementation "junit:junit:$junit_version"
|
||||
testImplementation "org.jmock:jmock:$jmock_version"
|
||||
testImplementation "org.jmock:jmock-junit4:$jmock_version"
|
||||
testImplementation "com.squareup.okhttp3:okhttp:$okhttp_version"
|
||||
|
||||
testAnnotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package org.briarproject.bramble;
|
||||
|
||||
import org.briarproject.bramble.io.DnsModule;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
import org.briarproject.bramble.network.JavaNetworkModule;
|
||||
import org.briarproject.bramble.plugin.tor.CircumventionModule;
|
||||
import org.briarproject.bramble.socks.SocksModule;
|
||||
@@ -14,7 +14,7 @@ import dagger.Module;
|
||||
DnsModule.class,
|
||||
JavaNetworkModule.class,
|
||||
JavaSystemModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
SocksModule.class
|
||||
})
|
||||
public class BrambleJavaModule {
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.CharacterCodingException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.CharsetDecoder;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Semaphore;
|
||||
@@ -33,6 +32,7 @@ import static java.util.logging.Level.WARNING;
|
||||
import static jssc.SerialPort.PURGE_RXCLEAR;
|
||||
import static jssc.SerialPort.PURGE_TXCLEAR;
|
||||
import static org.briarproject.bramble.util.LogUtils.logException;
|
||||
import static org.briarproject.bramble.util.StringUtils.US_ASCII;
|
||||
|
||||
@MethodsNotNullByDefault
|
||||
@ParametersNotNullByDefault
|
||||
@@ -41,7 +41,6 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener {
|
||||
private static final Logger LOG =
|
||||
Logger.getLogger(ModemImpl.class.getName());
|
||||
|
||||
private static final Charset US_ASCII = Charset.forName("US-ASCII");
|
||||
private static final int MAX_LINE_LENGTH = 256;
|
||||
private static final int[] BAUD_RATES = {
|
||||
256000, 128000, 115200, 57600, 38400, 19200, 14400, 9600, 4800, 1200
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.junit.runners.Parameterized.Parameters;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
@@ -198,6 +199,11 @@ public class BridgeTest extends BrambleTestCase {
|
||||
|
||||
@Test
|
||||
public void testBridges() throws Exception {
|
||||
if (params.stats.hasSucceeded(params.bridge)) {
|
||||
LOG.info("Skipping previously successful bridge: " + params.bridge);
|
||||
return;
|
||||
}
|
||||
|
||||
DuplexPlugin duplexPlugin =
|
||||
factory.createPlugin(new TestPluginCallback());
|
||||
assertNotNull(duplexPlugin);
|
||||
@@ -209,10 +215,13 @@ public class BridgeTest extends BrambleTestCase {
|
||||
long start = clock.currentTimeMillis();
|
||||
long timeout = params.bridgeType == MEEK ? MEEK_TIMEOUT : TIMEOUT;
|
||||
while (clock.currentTimeMillis() - start < timeout) {
|
||||
if (plugin.getState() == ACTIVE) return;
|
||||
if (plugin.getState() == ACTIVE) break;
|
||||
clock.sleep(500);
|
||||
}
|
||||
if (plugin.getState() != ACTIVE) {
|
||||
if (plugin.getState() == ACTIVE) {
|
||||
LOG.info("Connected to Tor: " + params.bridge);
|
||||
params.stats.countSuccess(params.bridge);
|
||||
} else {
|
||||
LOG.warning("Could not connect to Tor within timeout: "
|
||||
+ params.bridge);
|
||||
params.stats.countFailure(params.bridge, params.essential);
|
||||
@@ -240,11 +249,21 @@ public class BridgeTest extends BrambleTestCase {
|
||||
|
||||
private static class Stats {
|
||||
|
||||
@GuardedBy("this")
|
||||
private final Set<String> successes = new HashSet<>();
|
||||
@GuardedBy("this")
|
||||
private final Multiset<String> failures = new Multiset<>();
|
||||
@GuardedBy("this")
|
||||
private final Set<String> unreachable = new TreeSet<>();
|
||||
|
||||
private synchronized boolean hasSucceeded(String bridge) {
|
||||
return successes.contains(bridge);
|
||||
}
|
||||
|
||||
private synchronized void countSuccess(String bridge) {
|
||||
successes.add(bridge);
|
||||
}
|
||||
|
||||
private synchronized void countFailure(String bridge,
|
||||
boolean essential) {
|
||||
if (failures.add(bridge) == ATTEMPTS_PER_BRIDGE) {
|
||||
|
||||
@@ -3,7 +3,7 @@ package org.briarproject.bramble.test;
|
||||
import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
|
||||
import org.briarproject.bramble.BrambleCoreModule;
|
||||
import org.briarproject.bramble.BrambleJavaModule;
|
||||
import org.briarproject.bramble.mailbox.UrlConverterModule;
|
||||
import org.briarproject.bramble.mailbox.ModularMailboxModule;
|
||||
import org.briarproject.bramble.plugin.tor.BridgeTest;
|
||||
import org.briarproject.bramble.plugin.tor.CircumventionProvider;
|
||||
|
||||
@@ -16,7 +16,7 @@ import dagger.Component;
|
||||
BrambleCoreIntegrationTestModule.class,
|
||||
BrambleCoreModule.class,
|
||||
BrambleJavaModule.class,
|
||||
UrlConverterModule.class,
|
||||
ModularMailboxModule.class,
|
||||
TestTorPortsModule.class,
|
||||
TestPluginConfigModule.class,
|
||||
})
|
||||
|
||||
@@ -3,19 +3,21 @@ dependencyVerification {
|
||||
'cglib:cglib:3.2.8:cglib-3.2.8.jar:3f64de999ecc5595dc84ca8ff0879d8a34c8623f9ef3c517a53ed59023fcb9db',
|
||||
'com.google.code.findbugs:annotations:3.0.1:annotations-3.0.1.jar:6b47ff0a6de0ce17cbedc3abb0828ca5bce3009d53ea47b3723ff023c4742f79',
|
||||
'com.google.code.findbugs:jsr305:3.0.2:jsr305-3.0.2.jar:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7',
|
||||
'com.google.dagger:dagger-compiler:2.33:dagger-compiler-2.33.jar:aa8a0d8370c578fd6999802d0d90b9829377a46d2c1141e11b8f737970e7155e',
|
||||
'com.google.dagger:dagger-producers:2.33:dagger-producers-2.33.jar:5897f0b6eef799c2adfe3ccacc58c0fb374d58acb063c3ebe5366c38a8bce5c8',
|
||||
'com.google.dagger:dagger-spi:2.33:dagger-spi-2.33.jar:e2dcab2221b8afb9556ef0a1c83b0bd5f42552e254322a257330f754cdbbb9d4',
|
||||
'com.google.dagger:dagger:2.33:dagger-2.33.jar:d8798c5b8cf6b125234e33af5c6293bb9f2208ce29b57924c35b8c0be7b6bdcb',
|
||||
'com.google.errorprone:error_prone_annotations:2.2.0:error_prone_annotations-2.2.0.jar:6ebd22ca1b9d8ec06d41de8d64e0596981d9607b42035f9ed374f9de271a481a',
|
||||
'com.google.dagger:dagger-compiler:2.43.2:dagger-compiler-2.43.2.jar:298c020ee6ed2f4cc651ebbfdb7f8de329b07c44b618d65be117846a850e2a03',
|
||||
'com.google.dagger:dagger-producers:2.43.2:dagger-producers-2.43.2.jar:e7f5d9ffc85d48a49c8e22e02833d418f7ccad5d7512f529964db5127ab915ff',
|
||||
'com.google.dagger:dagger-spi:2.43.2:dagger-spi-2.43.2.jar:3bae8d9dadeaaa5927da6f094389a560c12c05fec3d2711d2fa79292c7a7d7ad',
|
||||
'com.google.dagger:dagger:2.43.2:dagger-2.43.2.jar:c89681f7cbbf8c527bf4ac2748515d617fdb54a1d425c08d914fdc28192b5fe4',
|
||||
'com.google.devtools.ksp:symbol-processing-api:1.7.0-1.0.6:symbol-processing-api-1.7.0-1.0.6.jar:adc29417be5ca9ff42118105fea4e36d9ef44987abfc41432309371a60198941',
|
||||
'com.google.errorprone:error_prone_annotations:2.7.1:error_prone_annotations-2.7.1.jar:cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3',
|
||||
'com.google.errorprone:javac-shaded:9-dev-r4023-3:javac-shaded-9-dev-r4023-3.jar:65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30',
|
||||
'com.google.googlejavaformat:google-java-format:1.5:google-java-format-1.5.jar:aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e',
|
||||
'com.google.guava:failureaccess:1.0.1:failureaccess-1.0.1.jar:a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26',
|
||||
'com.google.guava:guava:27.1-jre:guava-27.1-jre.jar:4a5aa70cc968a4d137e599ad37553e5cfeed2265e8c193476d7119036c536fe7',
|
||||
'com.google.guava:guava:31.0.1-jre:guava-31.0.1-jre.jar:d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9',
|
||||
'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava:listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99',
|
||||
'com.google.j2objc:j2objc-annotations:1.1:j2objc-annotations-1.1.jar:2994a7eb78f2710bd3d3bfb639b2c94e219cedac0d4d084d516e78c16dddecf6',
|
||||
'com.google.j2objc:j2objc-annotations:1.3:j2objc-annotations-1.3.jar:21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b',
|
||||
'com.squareup.okhttp3:okhttp:3.12.13:okhttp-3.12.13.jar:508234e024ef7e270ab1a6d5b356f5b98e786511239ca986d684fd1e2cf7bc82',
|
||||
'com.squareup.okio:okio:1.15.0:okio-1.15.0.jar:693fa319a7e8843300602b204023b7674f106ebcb577f2dd5807212b66118bd2',
|
||||
'com.squareup:javapoet:1.13.0:javapoet-1.13.0.jar:4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291',
|
||||
'javax.annotation:jsr250-api:1.0:jsr250-api-1.0.jar:a1a922d0d9b6d183ed3800dfac01d1e1eb159f0e8c6f94736931c1def54a941f',
|
||||
'javax.inject:javax.inject:1:javax.inject-1.jar:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff',
|
||||
'junit:junit:4.13.2:junit-4.13.2.jar:8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3',
|
||||
'net.bytebuddy:byte-buddy:1.9.12:byte-buddy-1.9.12.jar:3688c3d434bebc3edc5516296a2ed0f47b65e451071b4afecad84f902f0efc11',
|
||||
@@ -30,15 +32,16 @@ dependencyVerification {
|
||||
'org.briarproject:snowflake-windows:2.3.1:snowflake-windows-2.3.1.jar:d011f1a72c00a221f56380c19aad8ff11db8c2bb1adb0784125572d80b4d275a',
|
||||
'org.briarproject:tor-linux:0.4.5.14:tor-linux-0.4.5.14.jar:1844e54cf6df0c85cec219381a3364c759ae444a6b63f7558b757becb7d41d08',
|
||||
'org.briarproject:tor-windows:0.4.5.14:tor-windows-0.4.5.14.jar:d337afa1043f0cfa7e6e8c2473d682a5663a2c8052bb97a770450893c78c9b4f',
|
||||
'org.checkerframework:checker-compat-qual:2.5.3:checker-compat-qual-2.5.3.jar:d76b9afea61c7c082908023f0cbc1427fab9abd2df915c8b8a3e7a509bccbc6d',
|
||||
'org.checkerframework:checker-qual:2.5.2:checker-qual-2.5.2.jar:64b02691c8b9d4e7700f8ee2e742dce7ea2c6e81e662b7522c9ee3bf568c040a',
|
||||
'org.codehaus.mojo:animal-sniffer-annotations:1.17:animal-sniffer-annotations-1.17.jar:92654f493ecfec52082e76354f0ebf87648dc3d5cec2e3c3cdb947c016747a53',
|
||||
'org.checkerframework:checker-compat-qual:2.5.5:checker-compat-qual-2.5.5.jar:11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a',
|
||||
'org.checkerframework:checker-qual:3.12.0:checker-qual-3.12.0.jar:ff10785ac2a357ec5de9c293cb982a2cbb605c0309ea4cc1cb9b9bc6dbe7f3cb',
|
||||
'org.hamcrest:hamcrest-core:2.1:hamcrest-core-2.1.jar:e09109e54a289d88506b9bfec987ddd199f4217c9464132668351b9a4f00bee9',
|
||||
'org.hamcrest:hamcrest-library:2.1:hamcrest-library-2.1.jar:b7e2b6895b3b679f0e47b6380fda391b225e9b78505db9d8bdde8d3cc8d52a21',
|
||||
'org.hamcrest:hamcrest:2.1:hamcrest-2.1.jar:ba93b2e3a562322ba432f0a1b53addcc55cb188253319a020ed77f824e692050',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.4.20:kotlin-stdlib-common-1.4.20.jar:a7112c9b3cefee418286c9c9372f7af992bd1e6e030691d52f60cb36dbec8320',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.4.20:kotlin-stdlib-1.4.20.jar:b8ab1da5cdc89cb084d41e1f28f20a42bd431538642a5741c52bbfae3fa3e656',
|
||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.1.0:kotlinx-metadata-jvm-0.1.0.jar:9753bb39efef35957c5c15df9a3cb769aabf2cdfa74b47afcb7760e5146be3b5',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-common:1.7.0:kotlin-stdlib-common-1.7.0.jar:59c6ff64fe9a6604afce03e8aaa75f83586c6030ac71fb0b34ee7cdefed3618f',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.0:kotlin-stdlib-jdk7-1.7.0.jar:07e91be9b2ca20672d2bdb7e181b766e73453a2da13492b5ddaee8fa47aea239',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.0:kotlin-stdlib-jdk8-1.7.0.jar:cf058e11db1dfc9944680c8c61b95ac689aaaa8a3eb30bced028100f038f030b',
|
||||
'org.jetbrains.kotlin:kotlin-stdlib:1.7.0:kotlin-stdlib-1.7.0.jar:aa88e9625577957f3249a46cb6e166ee09b369e600f7a11d148d16b0a6d87f05',
|
||||
'org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.5.0:kotlinx-metadata-jvm-0.5.0.jar:ca063a96639b08b9eaa0de4d65e899480740a6efbe28ab9a8681a2ced03055a4',
|
||||
'org.jetbrains:annotations:13.0:annotations-13.0.jar:ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478',
|
||||
'org.jmock:jmock-imposters:2.12.0:jmock-imposters-2.12.0.jar:3b836269745a137c9b2347e8d7c2104845b126ef04f012d6bfd94f1a7dea7b09',
|
||||
'org.jmock:jmock-junit4:2.12.0:jmock-junit4-2.12.0.jar:3233062fc889637c151a24f1ee086bad04321ab7d8264fef279daff0fa27205b',
|
||||
|
||||
7
briar-android/.gitignore
vendored
@@ -13,7 +13,6 @@ src/main/res/values-iw
|
||||
/fastlane/README.md
|
||||
/fastlane/metadata/android/*/changelogs
|
||||
# Local Fastlane installation
|
||||
/fastlane/vendor
|
||||
/fastlane/.bundle
|
||||
/fastlane/Gemfile
|
||||
/fastlane/Gemfile.lock
|
||||
/vendor
|
||||
/Gemfile
|
||||
/Gemfile.lock
|
||||
|
||||
@@ -9,7 +9,7 @@ source_lang = en
|
||||
type = TXT
|
||||
minimum_perc = 100
|
||||
# https://support.google.com/googleplay/android-developer/answer/9844778?hl=en#zippy=%2Cview-list-of-available-languages
|
||||
lang_map = de: de-DE, is: is-IS, ja: ja-JP, tr: tr-TR, zh-Hans: zh-CN, ru: ru-RU, sv: sv-SE, hu: hu-HU, it: it-IT, my: my-MM, en: en-US, es: es-ES, fr: fr-FR, gl: gl-ES, pl: pl-PL, el: el-GR
|
||||
lang_map = de: de-DE, is: is-IS, ja: ja-JP, tr: tr-TR, zh-Hans: zh-CN, ru: ru-RU, sv: sv-SE, hu: hu-HU, it: it-IT, my: my-MM, en: en-US, es: es-ES, fr: fr-FR, gl: gl-ES, pl: pl-PL, el: el-GR, ka: ka-GE, pt-rBR: pt-BR
|
||||
|
||||
[o:otf:p:briar:r:google-play-short-description]
|
||||
file_filter = fastlane/metadata/android/<lang>/short_description.txt
|
||||
@@ -17,7 +17,7 @@ source_file = fastlane/metadata/android/en-US/short_description.txt
|
||||
source_lang = en
|
||||
type = TXT
|
||||
minimum_perc = 100
|
||||
lang_map = en: en-US, es: es-ES, is: is-IS, tr: tr-TR, gl: gl-ES, it: it-IT, my: my-MM, sv: sv-SE, zh-Hans: zh-CN, de: de-DE, ja: ja-JP, ru: ru-RU, fr: fr-FR, hu: hu-HU, pl: pl-PL, el: el-GR
|
||||
lang_map = en: en-US, es: es-ES, is: is-IS, tr: tr-TR, gl: gl-ES, it: it-IT, my: my-MM, sv: sv-SE, zh-Hans: zh-CN, de: de-DE, ja: ja-JP, ru: ru-RU, fr: fr-FR, hu: hu-HU, pl: pl-PL, el: el-GR, ka: ka-GE, pt-rBR: pt-BR
|
||||
|
||||
[o:otf:p:briar:r:stringsxml-5]
|
||||
file_filter = src/main/res/values-<lang>/strings.xml
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="500" height="175" viewBox="0 0 500 175"
|
||||
id="svg2" version="1.1" sodipodi:docname="bluetooth.svg" inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="892"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.93337848"
|
||||
inkscape:cx="-49.861215"
|
||||
inkscape:cy="137.66042"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="144"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg2" />
|
||||
<defs
|
||||
id="defs4" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<path
|
||||
id="path4201"
|
||||
d="m 459.80937,167.15983 -4.32657,-4.3343 -7.06956,-2.42737 c -3.88825,-1.33505 -8.72285,-2.99587 -10.74354,-3.6907 l -3.674,-1.26333 3.524,-0.1726 c 8.24183,-0.40367 12.98778,-4.00671 14.33634,-10.88389 0.79628,-4.06078 1.12887,-17.29805 0.83016,-33.04122 -0.15338,-8.08375 -0.16617,-15.41641 -0.0284,-16.29481 0.13775,-0.8784 0.53527,-2.42011 0.88339,-3.42602 1.22247,-3.53243 0.33996,-11.90828 -1.8577,-17.63146 -0.34848,-0.9075 -1.93434,-4.215 -3.52415,-7.35 -4.15849,-8.2003 -4.50458,-8.94188 -4.89292,-10.4841 -0.45865,-1.82145 -0.21161,-5.43531 0.4625,-6.7659 0.66625,-1.31505 2.15695,-2.91616 3.24622,-3.48662 1.29885,-0.68024 2.61568,0.12202 4.6864,2.85512 3.42153,4.51599 14.00135,19.44095 15.73191,22.19301 3.74551,5.95636 5.95558,11.16496 7.9722,18.78849 0.6547,2.475 1.88525,6.9975 2.73456,10.05 0.84931,3.0525 2.71404,10.15792 4.14385,15.78983 l 2.59964,10.23983 4.65,5.19319 c 2.5575,2.85626 5.7975,6.46371 7.2,8.01657 1.4025,1.55286 2.55,2.97543 2.55,3.16127 0,0.33546 -34.49955,29.29931 -34.89913,29.29931 -0.11475,0 -2.15559,-1.95044 -4.5352,-4.3343 z M 365.9443,150.77206 c -1.25762,-0.62844 -2.20557,-1.3788 -2.91402,-2.30663 -2.08931,-2.73629 -1.95034,2.36868 -1.86433,-68.48249 l 0.0777,-64.03881 0.66066,-1.23494 c 1.0152,-1.89767 1.99201,-2.91087 3.73952,-3.87887 l 1.59982,-0.88619 37.78387,-0.0796 c 42.45592,-0.0894 39.40239,-0.2483 42.11646,2.19188 0.87544,0.78709 1.75715,1.95946 2.18393,2.90385 0.71264,1.57698 0.71613,1.63839 0.80561,14.20405 l 0.0899,12.62022 -1.79817,-0.13007 c -1.42577,-0.10313 -2.08143,0.007 -3.16601,0.5321 -2.01294,0.97445 -3.93993,2.89871 -5.11476,5.10753 l -1.03717,1.95 -0.007,-12.825 -0.007,-12.825 h -33.6 -33.6 v 51.3 51.3 h 33.59873 33.59874 l 0.0763,-34.425 c 0.073,-32.96021 0.0982,-34.36117 0.59098,-32.925 0.28309,0.825 1.80562,3.9975 3.3834,7.05 5.49252,10.62624 5.40494,9.86009 5.39597,47.20335 -0.007,27.62122 -0.12358,29.95084 -1.66204,33.10906 -1.07144,2.19949 -2.71143,3.71042 -5.05823,4.66019 l -1.67381,0.6774 -36.1677,0.0797 -36.16769,0.0797 -1.864,-0.93145 z m 42.39939,-5.03813 c 2.87119,-1.30885 4.45771,-3.6784 4.43003,-6.61652 -0.0388,-4.11587 -3.1088,-7.22328 -7.1364,-7.22328 -2.11956,0 -3.56727,0.60889 -5.16364,2.17177 -2.24518,2.19807 -2.75398,5.43897 -1.30101,8.28704 0.71312,1.39782 2.52137,3.00905 3.96214,3.53045 1.49707,0.54176 3.84003,0.47454 5.20888,-0.14946 z"
|
||||
style="fill:#000000;stroke:none" />
|
||||
<path
|
||||
id="path4201-1"
|
||||
d="m 39.434334,167.15983 4.32657,-4.3343 7.06956,-2.42737 c 3.88825,-1.33505 8.72285,-2.99587 10.74354,-3.6907 l 3.674,-1.26333 -3.524,-0.1726 c -8.24183,-0.40367 -12.98778,-4.00671 -14.33634,-10.88389 -0.79628,-4.06078 -1.12887,-17.29805 -0.83016,-33.04122 0.15338,-8.08375 0.16617,-15.41641 0.0284,-16.29481 -0.13775,-0.8784 -0.53527,-2.42011 -0.88339,-3.42602 -1.22247,-3.53243 -0.33996,-11.90828 1.8577,-17.63146 0.34848,-0.9075 1.93434,-4.215 3.52415,-7.35 4.15849,-8.2003 4.50458,-8.94188 4.89292,-10.4841 0.45865,-1.82145 0.21161,-5.43531 -0.4625,-6.7659 -0.66625,-1.31505 -2.15695,-2.91616 -3.24622,-3.48662 -1.29885,-0.68024 -2.61568,0.12202 -4.6864,2.85512 -3.42153,4.51599 -14.00135,19.44095 -15.73191,22.19301 -3.74551,5.95636 -5.955584,11.16496 -7.972204,18.78849 -0.6547,2.475 -1.88525,6.9975 -2.73456,10.05 -0.84931,3.0525 -2.71404,10.15792 -4.14385,15.78983 L 14.4,125.82379 9.75,131.01698 c -2.5575,2.85626 -5.7975,6.46371 -7.2,8.01657 -1.4025,1.55286 -2.55,2.97543 -2.55,3.16127 0,0.33546 34.499554,29.29931 34.899134,29.29931 0.11475,0 2.15559,-1.95044 4.53519,-4.3343 z m 93.865056,-16.38777 c 1.25762,-0.62844 2.20557,-1.3788 2.91402,-2.30663 2.08931,-2.73629 1.95034,2.36868 1.86433,-68.48249 l -0.0777,-64.03881 -0.66066,-1.23494 c -1.0152,-1.89767 -1.99201,-2.91087 -3.73952,-3.87887 L 132.00004,9.94413 94.216184,9.86453 c -42.45592,-0.0894 -39.40239,-0.2483 -42.11646,2.19188 -0.87544,0.78709 -1.75715,1.95946 -2.18393,2.90385 -0.71264,1.57698 -0.71613,1.63839 -0.80561,14.20405 l -0.0899,12.62022 1.79817,-0.13007 c 1.42577,-0.10313 2.08143,0.007 3.16601,0.5321 2.01294,0.97445 3.93993,2.89871 5.11476,5.10753 l 1.03717,1.95 0.007,-12.825 0.007,-12.825 h 33.6 33.599986 v 51.3 51.3 H 93.751664 60.152924 l -0.0763,-34.425 c -0.073,-32.96021 -0.0982,-34.36117 -0.59098,-32.925 -0.28309,0.825 -1.80562,3.9975 -3.3834,7.05 -5.49252,10.62624 -5.40494,9.86009 -5.39597,47.20335 0.007,27.62122 0.12358,29.95084 1.66204,33.10906 1.07144,2.19949 2.71143,3.71042 5.05823,4.66019 l 1.67381,0.6774 36.1677,0.0797 36.167676,0.0797 1.864,-0.93145 z m -42.399376,-5.03813 c -2.87119,-1.30885 -4.45771,-3.6784 -4.43003,-6.61652 0.0388,-4.11587 3.1088,-7.22328 7.1364,-7.22328 2.11956,0 3.56727,0.60889 5.16364,2.17177 2.245176,2.19807 2.753976,5.43897 1.301006,8.28704 -0.713116,1.39782 -2.521366,3.00905 -3.962136,3.53045 -1.49707,0.54176 -3.84003,0.47454 -5.20888,-0.14946 z"
|
||||
style="fill:#000000;stroke:none" />
|
||||
<path
|
||||
id="rect4270"
|
||||
d="m 247.25369,71.97921 h 4.73637 c 13.16497,0 23.76348,10.598514 23.76348,23.763485 v 32.174615 c 0,13.16497 -10.59851,23.76348 -23.76348,23.76348 h -4.73637 c -13.16497,0 -23.76349,-10.59851 -23.76349,-23.76348 V 95.742695 c 0,-13.164971 10.59852,-23.763485 23.76349,-23.763485 z"
|
||||
style="fill:#0a3d91;stroke:none" />
|
||||
<path
|
||||
id="path4844"
|
||||
d="m 143.67921,23.5571 c -1.59043,2.623831 0.18153,5.574737 2.78461,6.642714 2.69504,1.572445 6.1706,4.987176 9.14793,2.232151 2.23313,-2.039515 0.60129,-5.727894 -2.04109,-6.67035 -3.06433,-1.676733 -6.55172,-5.514807 -9.89145,-2.204515 z M 351.7046,23.12937 c -2.76779,1.960623 -7.06819,2.694997 -8.37782,6.042717 -0.64195,2.73095 1.93572,4.99255 4.58419,4.426453 3.2021,-1.637914 7.05658,-2.8424 9.17849,-5.94769 0.56931,-2.60435 -1.49324,-5.35066 -4.26769,-4.745697 -0.41558,-0.107679 -0.76003,0.03505 -1.11717,0.224217 z m -26.76172,13.17187 c -2.93431,1.708015 -7.32039,1.922759 -8.93076,5.153004 -0.90775,2.654328 1.43202,5.159236 4.12365,4.861044 3.35587,-1.304271 7.31954,-2.112696 9.73662,-5.002268 0.81368,-2.537666 -0.97658,-5.469583 -3.79644,-5.128908 -0.4035,-0.14574 -0.75969,-0.03824 -1.13307,0.117128 z m -155.23633,2.46289 c -1.21948,2.711869 0.75683,5.460507 3.4437,6.14538 2.85847,1.080772 6.66937,4.11785 9.31224,1.23392 2.3151,-2.03652 0.33929,-5.835383 -2.40983,-6.41823 -3.32833,-1.175814 -7.38479,-4.713633 -10.34611,-0.96107 z m 127.27344,7.61719 c -3.12289,1.309174 -7.49226,0.970678 -9.49244,3.970097 -1.23184,2.518748 0.7727,5.298264 3.48037,5.339749 3.48706,-0.907308 7.56742,-1.1128 10.30314,-3.739116 1.11397,-2.422222 -0.31199,-5.546068 -3.1516,-5.551016 -0.3827,-0.195662 -0.75023,-0.126964 -1.13947,-0.01971 z m -97.49023,1.54492 c -2.22858,1.461838 -2.68005,4.865948 -0.27553,6.376909 2.5869,1.470583 5.91459,1.954941 8.83971,2.495346 2.78485,0.332188 4.74603,-2.479173 3.89118,-5.048668 -2.04264,-3.279676 -6.47206,-2.73364 -9.71704,-4.089227 -0.91277,0.08855 -1.82555,0.177093 -2.73832,0.26564 z m 68.51367,4.50782 c -3.27623,0.788856 -7.46081,-0.187875 -9.93635,2.381992 -1.64972,2.268076 -0.15709,5.353662 2.50432,5.86185 3.61172,-0.292365 7.71764,0.09072 10.84009,-2.093962 1.46245,-2.227649 0.52336,-5.531725 -2.28478,-5.959415 -0.34949,-0.249225 -0.72211,-0.239347 -1.12328,-0.190465 z m -39.44922,1.41796 c -1.93309,1.83595 -1.76537,5.266611 0.87081,6.321491 2.80857,0.988807 6.17065,0.846733 9.1444,0.861366 2.79909,-0.172766 4.22635,-3.289835 2.92376,-5.664738 -2.60365,-2.851635 -6.84699,-1.541752 -10.29251,-2.269899 -0.88215,0.250593 -1.76431,0.501187 -2.64646,0.75178 z"
|
||||
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;white-space:normal;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#0a3d91;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:7.55;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:7.55, 22.65;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
|
||||
<path
|
||||
d="m 252.50083,112.08988 11.6563,-11.45156 -17.12592,-19.790888 0.0193,25.792048 -9.14185,-9.24454 -3.12531,3.09064 11.5214,11.58063 -11.49773,11.30756 c 3.03061,3.05593 0,0 3.03061,3.05593 l 9.18921,-8.97308 c 0.0443,4.73517 0.004,27.16515 0.004,27.16515 l 17.10224,-20.77257 z m -1.07721,-19.570428 6.79869,7.863838 -6.79869,6.63278 z m -0.0237,40.027828 0.0237,-15.39623 6.89338,6.9879 z"
|
||||
id="path1536"
|
||||
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.254891"
|
||||
sodipodi:nodetypes="ccccccccccccccccccccc" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 10 KiB |
@@ -1,91 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="162"
|
||||
height="156"
|
||||
viewBox="0 0 162 156"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg16"
|
||||
sodipodi:docname="No-Posts.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata22">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs20" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="754"
|
||||
inkscape:window-height="480"
|
||||
id="namedview18"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.5128205"
|
||||
inkscape:cx="81"
|
||||
inkscape:cy="78"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg16" />
|
||||
<rect
|
||||
width="80.9997"
|
||||
height="78"
|
||||
fill="black"
|
||||
fill-opacity="0"
|
||||
transform="scale(2)"
|
||||
id="rect2" />
|
||||
<rect
|
||||
width="80.9997"
|
||||
height="78"
|
||||
fill="black"
|
||||
fill-opacity="0"
|
||||
transform="scale(2)"
|
||||
id="rect4" />
|
||||
<path
|
||||
d="M140.87 53.647H91.5654V64.2352H140.87V53.647Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path6" />
|
||||
<path
|
||||
d="M140.869 99.5292V88.9409H115.512L126.077 99.5292H140.869Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path8" />
|
||||
<path
|
||||
d="M140.869 71.2939H97.9038L108.469 81.8822H140.869V71.2939Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path10" />
|
||||
<path
|
||||
d="M147.912 14.8232H41.5557L84.5209 57.8821V28.9409H147.912V120.706H147.208L157.773 131.294C160.59 128.47 161.999 124.941 161.999 120.706V28.9409C161.999 21.1762 155.66 14.8232 147.912 14.8232Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path12" />
|
||||
<path
|
||||
d="M129.6 120.706L84.5217 75.5294L23.9478 14.8235L9.15652 0L0 9.17647L10.5652 19.7647C8.45217 21.8824 7.04348 25.4118 7.04348 28.9412V120.706C7.04348 128.471 13.3826 134.824 21.1304 134.824H125.374L146.504 156L155.661 146.824L143.687 134.824L129.6 120.706ZM84.5217 120.706V93.8824L111.287 120.706H84.5217Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path14" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,56 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="164"
|
||||
height="164"
|
||||
viewBox="0 0 164 164"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="empty_state_contact_list.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata18">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1020"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.4390244"
|
||||
inkscape:cx="81.305085"
|
||||
inkscape:cy="109.79661"
|
||||
inkscape:window-x="1440"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg12" />
|
||||
<path
|
||||
style="clip-rule:evenodd;display:inline;fill:#ffffff;fill-rule:evenodd"
|
||||
d="M 27.333984 0 L 27.333984 13.666016 L 136.66797 13.666016 L 136.66797 0 L 27.333984 0 z M 27.333984 27.333984 C 19.817284 27.333984 13.666016 33.4834 13.666016 41 L 13.666016 123 C 13.666016 130.517 19.817284 136.66797 27.333984 136.66797 L 136.66797 136.66797 C 144.18397 136.66797 150.33203 130.517 150.33203 123 L 150.33203 41 C 150.33203 33.4834 144.18397 27.333984 136.66797 27.333984 L 27.333984 27.333984 z M 82.150391 44.757812 C 89.592295 44.757812 95.348492 46.476807 99.419922 49.914062 C 103.52467 53.351338 105.57617 58.23949 105.57617 64.580078 C 105.57617 67.349967 105.0272 69.869409 103.92578 72.138672 C 102.82458 74.407935 101.05521 76.728225 98.619141 79.097656 L 92.863281 84.453125 C 91.227921 86.021639 90.093094 87.640125 89.458984 89.308594 C 88.824874 90.943745 88.475053 93.030171 88.408203 95.566406 L 74.091797 95.566406 C 74.091797 90.694273 74.640917 86.855942 75.742188 84.052734 C 76.843435 81.216209 78.63001 78.762286 81.099609 76.693359 C 83.568995 74.624218 85.436853 72.739109 86.705078 71.037109 C 88.006403 69.30179 88.658203 67.400958 88.658203 65.332031 C 88.658203 60.292857 86.488795 57.771484 82.150391 57.771484 C 80.1481 57.771484 78.529614 58.506262 77.294922 59.974609 C 76.060186 61.442955 75.40854 63.42881 75.341797 65.931641 L 58.423828 65.931641 C 58.490468 59.25736 60.592402 54.067509 64.730469 50.363281 C 68.868538 46.625672 74.675257 44.757813 82.150391 44.757812 z M 81.398438 102.32422 C 84.068159 102.32422 86.287795 103.12473 88.056641 104.72656 C 89.858601 106.29508 90.759766 108.31381 90.759766 110.7832 C 90.759766 113.2528 89.858601 115.28879 88.056641 116.89062 C 86.287795 118.45914 84.068159 119.24219 81.398438 119.24219 C 78.728717 119.24219 76.493467 118.45914 74.691406 116.89062 C 72.922705 115.28879 72.039062 113.2528 72.039062 110.7832 C 72.039062 108.31381 72.922705 106.29508 74.691406 104.72656 C 76.493467 103.12473 78.728716 102.32422 81.398438 102.32422 z M 27.333984 150.33203 L 27.333984 164 L 136.66797 164 L 136.66797 150.33203 L 27.333984 150.33203 z "
|
||||
id="path8" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@@ -1,81 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="148"
|
||||
height="148"
|
||||
viewBox="0 0 148 148"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg12"
|
||||
sodipodi:docname="No-Forums.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata18">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs16" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="720"
|
||||
id="namedview14"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.5945946"
|
||||
inkscape:cx="74"
|
||||
inkscape:cy="74"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg12" />
|
||||
<rect
|
||||
width="74"
|
||||
height="74"
|
||||
fill="black"
|
||||
fill-opacity="0"
|
||||
transform="scale(2)"
|
||||
id="rect2" />
|
||||
<rect
|
||||
width="74"
|
||||
height="74"
|
||||
fill="black"
|
||||
fill-opacity="0"
|
||||
transform="scale(2)"
|
||||
id="rect4" />
|
||||
<path
|
||||
d="M107.266 74.6791C111.34 74.6791 114.055 71.9635 114.055 67.8901V6.78901C114.055 2.7156 111.34 0 107.266 0H24.4404L99.1194 74.6791H107.266Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path6" />
|
||||
<path
|
||||
d="M141.211 27.156H127.633V88.2571H112.697L148 123.56V33.945C148 29.8716 144.606 27.156 141.211 27.156Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path8" />
|
||||
<path
|
||||
d="M8.8257 1.35742L0 10.1831L12.2202 22.4033V101.835L39.3762 74.6787H64.4955L78.0735 88.2567H39.3762V101.835C39.3762 105.908 42.0918 108.624 46.1652 108.624H98.4405L137.817 148L146.642 139.174L8.8257 1.35742Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path10" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -1,86 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="172"
|
||||
height="140"
|
||||
viewBox="0 0 172 140"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg14"
|
||||
sodipodi:docname="No-Groups.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata20">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs18" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="754"
|
||||
inkscape:window-height="480"
|
||||
id="namedview16"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.6857143"
|
||||
inkscape:cx="86"
|
||||
inkscape:cy="70"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg14" />
|
||||
<rect
|
||||
width="85.9999"
|
||||
height="70"
|
||||
fill="black"
|
||||
fill-opacity="0"
|
||||
transform="scale(2)"
|
||||
id="rect2" />
|
||||
<rect
|
||||
width="85.9999"
|
||||
height="70"
|
||||
fill="black"
|
||||
fill-opacity="0"
|
||||
transform="scale(2)"
|
||||
id="rect4" />
|
||||
<path
|
||||
d="M125.091 103.444L71.9274 50.5556L38.3092 17.1111L21.1091 0L10.9455 10.1111L31.2728 30.3333C31.2728 31.8889 31.2728 32.6667 31.2728 34.2222C31.2728 47.4444 41.4365 57.5556 54.7274 57.5556C56.291 57.5556 57.0729 57.5556 58.6365 56.7778L78.182 76.2222C69.582 74.6667 60.982 73.1111 54.7274 73.1111C36.7455 73.1111 0 82.4444 0 100.333V119.778H109.455V107.333L142.291 140L152.455 129.889L142.291 119.778L125.091 103.444Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path6" />
|
||||
<path
|
||||
d="M117.273 57.5549C130.227 57.5549 140.728 47.1082 140.728 34.2215C140.728 21.3349 130.227 10.8882 117.273 10.8882C104.319 10.8882 93.8184 21.3349 93.8184 34.2215C93.8184 47.1082 104.319 57.5549 117.273 57.5549Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path8" />
|
||||
<path
|
||||
d="M78.1819 34.2215C78.1819 20.9993 68.0182 10.8882 54.7273 10.8882C53.9455 10.8882 53.1637 10.8882 52.3818 10.8882L78.1819 36.5548C78.1819 35.7771 78.1819 34.9993 78.1819 34.2215Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path10" />
|
||||
<path
|
||||
d="M117.272 73.1104C116.49 73.1104 115.709 73.1104 114.927 73.1104L161.836 119.777H172V100.333C172 82.4437 135.254 73.1104 117.272 73.1104Z"
|
||||
fill="white"
|
||||
fill-opacity="0.6"
|
||||
id="path12" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.9 KiB |
34
briar-android/artwork/il_add_contact_remote_dark.svg
Normal file
@@ -0,0 +1,34 @@
|
||||
<svg width="289" height="145" viewBox="0 0 289 145" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M48.8682 41C48.8682 36.5817 45.2864 33 40.8682 33H14.8682C10.4499 33 6.86816 36.5817 6.86816 41V103C6.86816 107.418 10.4499 111 14.8682 111H40.8682C45.2864 111 48.8682 107.418 48.8682 103V41Z" fill="#1E293B"/>
|
||||
<path d="M48.8682 47.248H6.86834V101.248H48.8682V47.248Z" fill="#0B1120"/>
|
||||
<path d="M11.4736 69.1006C11.4736 66.8914 13.2645 65.1006 15.4736 65.1006H40.2633C42.4724 65.1006 44.2633 66.8914 44.2633 69.1006V79.3936C44.2633 81.6028 42.4724 83.3936 40.2633 83.3936H15.4736C13.2645 83.3936 11.4736 81.6028 11.4736 79.3936V69.1006Z" fill="#184080"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2358 71.5547C17.2358 71.1405 17.5716 70.8047 17.9858 70.8047H37.8583C38.2726 70.8047 38.6083 71.1405 38.6083 71.5547C38.6083 71.9689 38.2726 72.3047 37.8583 72.3047H17.9858C17.5716 72.3047 17.2358 71.9689 17.2358 71.5547Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2358 77.6523C17.2358 77.2381 17.5716 76.9023 17.9858 76.9023H28.6658C29.08 76.9023 29.4158 77.2381 29.4158 77.6523C29.4158 78.0666 29.08 78.4023 28.6658 78.4023H17.9858C17.5716 78.4023 17.2358 78.0666 17.2358 77.6523Z" fill="#52ADF9"/>
|
||||
<path d="M27.8682 42.0024C27.3159 42.0024 26.8682 41.5541 26.8682 41.0012C26.8682 40.4482 27.3159 40 27.8682 40C28.4204 40 28.8682 40.4482 28.8682 41.0012C28.8682 41.5541 28.4204 42.0024 27.8682 42.0024Z" fill="#A3E635"/>
|
||||
<path d="M19.1182 41.0244C19.1182 40.6102 19.454 40.2744 19.8682 40.2744H23.8682C24.2824 40.2744 24.6182 40.6102 24.6182 41.0244C24.6182 41.4386 24.2824 41.7744 23.8682 41.7744H19.8682C19.454 41.7744 19.1182 41.4386 19.1182 41.0244Z" fill="#A3E635"/>
|
||||
<path d="M31.8682 40.2744C31.454 40.2744 31.1182 40.6102 31.1182 41.0244C31.1182 41.4386 31.454 41.7744 31.8682 41.7744H35.8682C36.2824 41.7744 36.6182 41.4386 36.6182 41.0244C36.6182 40.6102 36.2824 40.2744 35.8682 40.2744H31.8682Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.8682 41V103C48.8682 107.418 45.2864 111 40.8682 111H14.8682C10.4499 111 6.86816 107.418 6.86816 103V41C6.86816 36.5817 10.4499 33 14.8682 33H40.8682C45.2864 33 48.8682 36.5817 48.8682 41ZM14.8682 34.5H40.8682C44.458 34.5 47.3682 37.4101 47.3682 41V47.248H8.36816V41C8.36816 37.4101 11.2783 34.5 14.8682 34.5ZM47.3682 48.748V99.748H8.36834V48.748H47.3682ZM47.3682 103V101.248H8.36816V103C8.36816 106.59 11.2783 109.5 14.8682 109.5H40.8682C44.458 109.5 47.3682 106.59 47.3682 103Z" fill="#A3E635"/>
|
||||
<path d="M281.868 41C281.868 36.5817 278.286 33 273.868 33H247.868C243.45 33 239.868 36.5817 239.868 41V103C239.868 107.418 243.45 111 247.868 111H273.868C278.286 111 281.868 107.418 281.868 103V41Z" fill="#1E293B"/>
|
||||
<path d="M281.868 47.248H239.868V101.248H281.868V47.248Z" fill="#0B1120"/>
|
||||
<path d="M244.473 69.1006C244.473 66.8914 246.264 65.1006 248.473 65.1006H273.263C275.472 65.1006 277.263 66.8914 277.263 69.1006V79.3936C277.263 81.6028 275.472 83.3936 273.263 83.3936H248.473C246.264 83.3936 244.473 81.6028 244.473 79.3936V69.1006Z" fill="#365314"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M250.236 71.5547C250.236 71.1405 250.572 70.8047 250.986 70.8047H270.858C271.273 70.8047 271.608 71.1405 271.608 71.5547C271.608 71.9689 271.273 72.3047 270.858 72.3047H250.986C250.572 72.3047 250.236 71.9689 250.236 71.5547Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M250.236 77.6523C250.236 77.2381 250.572 76.9023 250.986 76.9023H261.666C262.08 76.9023 262.416 77.2381 262.416 77.6523C262.416 78.0666 262.08 78.4023 261.666 78.4023H250.986C250.572 78.4023 250.236 78.0666 250.236 77.6523Z" fill="#A3E635"/>
|
||||
<path d="M260.868 42.0024C260.316 42.0024 259.868 41.5541 259.868 41.0012C259.868 40.4482 260.316 40 260.868 40C261.42 40 261.868 40.4482 261.868 41.0012C261.868 41.5541 261.42 42.0024 260.868 42.0024Z" fill="#52ADF9"/>
|
||||
<path d="M252.118 41.0244C252.118 40.6102 252.454 40.2744 252.868 40.2744H256.868C257.282 40.2744 257.618 40.6102 257.618 41.0244C257.618 41.4386 257.282 41.7744 256.868 41.7744H252.868C252.454 41.7744 252.118 41.4386 252.118 41.0244Z" fill="#52ADF9"/>
|
||||
<path d="M264.868 40.2744C264.454 40.2744 264.118 40.6102 264.118 41.0244C264.118 41.4386 264.454 41.7744 264.868 41.7744H268.868C269.282 41.7744 269.618 41.4386 269.618 41.0244C269.618 40.6102 269.282 40.2744 268.868 40.2744H264.868Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M281.868 41V103C281.868 107.418 278.286 111 273.868 111H247.868C243.45 111 239.868 107.418 239.868 103V41C239.868 36.5817 243.45 33 247.868 33H273.868C278.286 33 281.868 36.5817 281.868 41ZM247.868 34.5H273.868C277.458 34.5 280.368 37.4101 280.368 41V47.248H241.368V41C241.368 37.4101 244.278 34.5 247.868 34.5ZM280.368 48.748V99.748H241.368V48.748H280.368ZM280.368 103V101.248H241.368V103C241.368 106.59 244.278 109.5 247.868 109.5H273.868C277.458 109.5 280.368 106.59 280.368 103Z" fill="#52ADF9"/>
|
||||
<path d="M150.868 54C150.868 49.5817 147.286 46 142.868 46H126.868C122.45 46 118.868 49.5817 118.868 54V70C118.868 74.4183 122.45 78 126.868 78H142.868C147.286 78 150.868 74.4183 150.868 70V54Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M126.868 47.5H142.868C146.458 47.5 149.368 50.4101 149.368 54V70C149.368 73.5899 146.458 76.5 142.868 76.5H126.868C123.278 76.5 120.368 73.5899 120.368 70V54C120.368 50.4101 123.278 47.5 126.868 47.5ZM142.868 46C147.286 46 150.868 49.5817 150.868 54V70C150.868 74.4183 147.286 78 142.868 78H126.868C122.45 78 118.868 74.4183 118.868 70V54C118.868 49.5817 122.45 46 126.868 46H142.868Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M138.934 61.3778C139.519 62.63 139.295 64.1672 138.261 65.2012L134.282 69.1801C132.962 70.5002 130.822 70.5002 129.501 69.1801C128.181 67.8599 128.181 65.7194 129.501 64.3992L133.48 60.4203C134.515 59.386 136.052 59.162 137.305 59.7485L136.108 60.9452C135.551 60.8746 134.969 61.0533 134.541 61.481L130.562 65.4599C129.828 66.1943 129.828 67.385 130.562 68.1194C131.296 68.8538 132.487 68.8538 133.222 68.1194L137.2 64.1405C137.628 63.7132 137.806 63.1314 137.736 62.5749L138.934 61.3778Z" fill="#BEF264"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M132.432 64.25C133.684 64.8362 135.222 64.6123 136.256 63.578L140.235 59.5991C141.555 58.2789 141.555 56.1385 140.235 54.8183C138.915 53.4981 136.774 53.4981 135.454 54.8183L131.475 58.7971C130.441 59.8312 130.217 61.3686 130.803 62.6209L132 61.4239C131.93 60.8672 132.109 60.2852 132.536 59.8578L136.515 55.8789C137.249 55.1445 138.44 55.1445 139.174 55.8789C139.909 56.6133 139.909 57.8041 139.174 58.5385L135.196 62.5173C134.768 62.945 134.186 63.1236 133.629 63.0532L132.432 64.25Z" fill="#BEF264"/>
|
||||
<path d="M169.868 73C169.868 68.5817 166.286 65 161.868 65H145.868C141.45 65 137.868 68.5817 137.868 73V89C137.868 93.4183 141.45 97 145.868 97H161.868C166.286 97 169.868 93.4183 169.868 89V73Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.868 66.5H161.868C165.458 66.5 168.368 69.4101 168.368 73V89C168.368 92.5899 165.458 95.5 161.868 95.5H145.868C142.278 95.5 139.368 92.5899 139.368 89V73C139.368 69.4101 142.278 66.5 145.868 66.5ZM161.868 65C166.286 65 169.868 68.5817 169.868 73V89C169.868 93.4183 166.286 97 161.868 97H145.868C141.45 97 137.868 93.4183 137.868 89V73C137.868 68.5817 141.45 65 145.868 65H161.868Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M157.934 80.3778C158.519 81.63 158.295 83.1672 157.261 84.2012L153.282 88.18C151.962 89.5002 149.822 89.5002 148.501 88.18C147.181 86.8599 147.181 84.7194 148.501 83.3992L152.48 79.4203C153.515 78.386 155.052 78.162 156.305 78.7485L155.108 79.9452C154.551 79.8746 153.969 80.0532 153.541 80.481L149.562 84.4599C148.828 85.1943 148.828 86.385 149.562 87.1194C150.296 87.8538 151.487 87.8538 152.222 87.1194L156.2 83.1405C156.628 82.7132 156.806 82.1314 156.736 81.5749L157.934 80.3778Z" fill="#BEF264"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M151.432 83.25C152.684 83.8362 154.222 83.6123 155.256 82.578L159.235 78.5991C160.555 77.2789 160.555 75.1385 159.235 73.8183C157.915 72.4981 155.774 72.4981 154.454 73.8183L150.475 77.7971C149.441 78.8312 149.217 80.3686 149.803 81.6209L151 80.4239C150.93 79.8672 151.109 79.2852 151.536 78.8578L155.515 74.8789C156.249 74.1445 157.44 74.1445 158.174 74.8789C158.909 75.6133 158.909 76.8041 158.174 77.5385L154.196 81.5173C153.768 81.945 153.186 82.1236 152.629 82.0532L151.432 83.25Z" fill="#BEF264"/>
|
||||
<path d="M87.8682 62C87.8682 64.2091 86.0773 66 83.8682 66C81.659 66 79.8682 64.2091 79.8682 62C79.8682 59.7909 81.659 58 83.8682 58C86.0773 58 87.8682 59.7909 87.8682 62Z" fill="#1457C5"/>
|
||||
<path d="M103.868 62C103.868 64.2091 102.077 66 99.8682 66C97.659 66 95.8682 64.2091 95.8682 62C95.8682 59.7909 97.659 58 99.8682 58C102.077 58 103.868 59.7909 103.868 62Z" fill="#2B8EF1"/>
|
||||
<path d="M71.8682 62C71.8682 64.2091 70.0773 66 67.8682 66C65.659 66 63.8682 64.2091 63.8682 62C63.8682 59.7909 65.659 58 67.8682 58C70.0773 58 71.8682 59.7909 71.8682 62Z" fill="#184080"/>
|
||||
<path d="M200.868 81C200.868 78.7909 202.659 77 204.868 77C207.077 77 208.868 78.7909 208.868 81C208.868 83.2091 207.077 85 204.868 85C202.659 85 200.868 83.2091 200.868 81Z" fill="#4D7C0F"/>
|
||||
<path d="M184.868 81C184.868 78.7909 186.659 77 188.868 77C191.077 77 192.868 78.7909 192.868 81C192.868 83.2091 191.077 85 188.868 85C186.659 85 184.868 83.2091 184.868 81Z" fill="#82C91E"/>
|
||||
<path d="M216.868 81C216.868 78.7909 218.659 77 220.868 77C223.077 77 224.868 78.7909 224.868 81C224.868 83.2091 223.077 85 220.868 85C218.659 85 216.868 83.2091 216.868 81Z" fill="#365314"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
40
briar-android/artwork/il_add_contact_remote_light.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<svg width="289" height="145" viewBox="0 0 289 145" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M48.3203 41C48.3203 36.5817 44.7386 33 40.3203 33H14.3203C9.90203 33 6.32031 36.5817 6.32031 41V103C6.32031 107.418 9.90203 111 14.3203 111H40.3203C44.7386 111 48.3203 107.418 48.3203 103V41Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.3203 34.5H40.3203C43.9102 34.5 46.8203 37.4101 46.8203 41V103C46.8203 106.59 43.9102 109.5 40.3203 109.5H14.3203C10.7305 109.5 7.82031 106.59 7.82031 103V41C7.82031 37.4101 10.7305 34.5 14.3203 34.5ZM40.3203 33C44.7386 33 48.3203 36.5817 48.3203 41V103C48.3203 107.418 44.7386 111 40.3203 111H14.3203C9.90203 111 6.32031 107.418 6.32031 103V41C6.32031 36.5817 9.90203 33 14.3203 33H40.3203Z" fill="#65A30D"/>
|
||||
<path d="M48.3203 47.248H6.32049V101.248H48.3203V47.248Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.82049 48.748H46.8203V99.748H7.82049V48.748ZM48.3203 47.248V101.248H6.32049V47.248H48.3203Z" fill="#65A30D"/>
|
||||
<path d="M10.9258 69.1006C10.9258 66.8914 12.7166 65.1006 14.9258 65.1006H39.7154C41.9245 65.1006 43.7154 66.8914 43.7154 69.1006V79.3936C43.7154 81.6028 41.9245 83.3936 39.7154 83.3936H14.9258C12.7166 83.3936 10.9258 81.6028 10.9258 79.3936V69.1006Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.6885 71.5547C16.6885 71.1405 17.0243 70.8047 17.4385 70.8047H37.311C37.7252 70.8047 38.061 71.1405 38.061 71.5547C38.061 71.9689 37.7252 72.3047 37.311 72.3047H17.4385C17.0243 72.3047 16.6885 71.9689 16.6885 71.5547Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.6885 77.6523C16.6885 77.2381 17.0243 76.9023 17.4385 76.9023H28.1185C28.5327 76.9023 28.8685 77.2381 28.8685 77.6523C28.8685 78.0666 28.5327 78.4023 28.1185 78.4023H17.4385C17.0243 78.4023 16.6885 78.0666 16.6885 77.6523Z" fill="#196FDE"/>
|
||||
<path d="M26.3203 41.0012C26.3203 41.5541 26.768 42.0024 27.3203 42.0024C27.8726 42.0024 28.3203 41.5541 28.3203 41.0012C28.3203 40.4482 27.8726 40 27.3203 40C26.768 40 26.3203 40.4482 26.3203 41.0012Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.5703 41.0244C18.5703 40.6102 18.9061 40.2744 19.3203 40.2744H23.3203C23.7345 40.2744 24.0703 40.6102 24.0703 41.0244C24.0703 41.4386 23.7345 41.7744 23.3203 41.7744H19.3203C18.9061 41.7744 18.5703 41.4386 18.5703 41.0244Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.5703 41.0244C30.5703 40.6102 30.9061 40.2744 31.3203 40.2744H35.3203C35.7345 40.2744 36.0703 40.6102 36.0703 41.0244C36.0703 41.4386 35.7345 41.7744 35.3203 41.7744H31.3203C30.9061 41.7744 30.5703 41.4386 30.5703 41.0244Z" fill="#65A30D"/>
|
||||
<path d="M150.32 54C150.32 49.5817 146.739 46 142.32 46H126.32C121.902 46 118.32 49.5817 118.32 54V70C118.32 74.4183 121.902 78 126.32 78H142.32C146.739 78 150.32 74.4183 150.32 70V54Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M126.32 47.5H142.32C145.91 47.5 148.82 50.4101 148.82 54V70C148.82 73.5899 145.91 76.5 142.32 76.5H126.32C122.73 76.5 119.82 73.5899 119.82 70V54C119.82 50.4101 122.73 47.5 126.32 47.5ZM142.32 46C146.739 46 150.32 49.5817 150.32 54V70C150.32 74.4183 146.739 78 142.32 78H126.32C121.902 78 118.32 74.4183 118.32 70V54C118.32 49.5817 121.902 46 126.32 46H142.32Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M132.932 60.4207C134.253 59.1005 136.393 59.1005 137.713 60.4207C139.033 61.7409 139.033 63.8814 137.713 65.2015L133.734 69.1804C132.414 70.5006 130.274 70.5006 128.953 69.1804C127.633 67.8602 127.633 65.7197 128.953 64.3996L132.932 60.4207ZM136.653 61.4814C135.918 60.7469 134.727 60.7469 133.993 61.4814L130.014 65.4602C129.28 66.1946 129.28 67.3853 130.014 68.1197C130.749 68.8541 131.939 68.8541 132.674 68.1197L136.653 64.1409C137.387 63.4065 137.387 62.2158 136.653 61.4814Z" fill="#BEF264"/>
|
||||
<path d="M137.184 59.3223L138.813 60.9512L137.184 62.5802L135.555 60.9512L137.184 59.3223Z" fill="#D9D9D9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M135.708 63.5783C134.388 64.8985 132.248 64.8985 130.927 63.5783C129.607 62.2581 129.607 60.1177 130.927 58.7975L134.906 54.8186C136.226 53.4984 138.367 53.4984 139.687 54.8186C141.007 56.1388 141.007 58.2793 139.687 59.5995L135.708 63.5783ZM131.988 62.5177C132.723 63.2521 133.913 63.2521 134.648 62.5177L138.626 58.5388C139.361 57.8044 139.361 56.6137 138.626 55.8793C137.892 55.1449 136.701 55.1449 135.967 55.8793L131.988 59.8581C131.254 60.5925 131.254 61.7833 131.988 62.5177Z" fill="#BEF264"/>
|
||||
<path d="M131.457 64.6768L129.828 63.0478L131.457 61.4189L133.086 63.0478L131.457 64.6768Z" fill="#D9D9D9"/>
|
||||
<path d="M281.32 41C281.32 36.5817 277.739 33 273.32 33H247.32C242.902 33 239.32 36.5817 239.32 41V103C239.32 107.418 242.902 111 247.32 111H273.32C277.739 111 281.32 107.418 281.32 103V41Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M247.32 34.5H273.32C276.91 34.5 279.82 37.4101 279.82 41V103C279.82 106.59 276.91 109.5 273.32 109.5H247.32C243.73 109.5 240.82 106.59 240.82 103V41C240.82 37.4101 243.73 34.5 247.32 34.5ZM273.32 33C277.739 33 281.32 36.5817 281.32 41V103C281.32 107.418 277.739 111 273.32 111H247.32C242.902 111 239.32 107.418 239.32 103V41C239.32 36.5817 242.902 33 247.32 33H273.32Z" fill="#196FDE"/>
|
||||
<path d="M281.32 47.248H239.32V101.248H281.32V47.248Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M240.82 48.748H279.82V99.748H240.82V48.748ZM281.32 47.248V101.248H239.32V47.248H281.32Z" fill="#196FDE"/>
|
||||
<path d="M243.925 69.1006C243.925 66.8914 245.716 65.1006 247.925 65.1006H272.715C274.924 65.1006 276.715 66.8914 276.715 69.1006V79.3936C276.715 81.6028 274.924 83.3936 272.715 83.3936H247.925C245.716 83.3936 243.925 81.6028 243.925 79.3936V69.1006Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M249.688 71.5547C249.688 71.1405 250.023 70.8047 250.438 70.8047H270.31C270.724 70.8047 271.06 71.1405 271.06 71.5547C271.06 71.9689 270.724 72.3047 270.31 72.3047H250.438C250.023 72.3047 249.688 71.9689 249.688 71.5547Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M249.688 77.6523C249.688 77.2381 250.023 76.9023 250.438 76.9023H261.117C261.532 76.9023 261.867 77.2381 261.867 77.6523C261.867 78.0666 261.532 78.4023 261.117 78.4023H250.438C250.023 78.4023 249.688 78.0666 249.688 77.6523Z" fill="#65A30D"/>
|
||||
<path d="M259.32 41.0012C259.32 41.5541 259.768 42.0024 260.32 42.0024C260.873 42.0024 261.32 41.5541 261.32 41.0012C261.32 40.4482 260.873 40 260.32 40C259.768 40 259.32 40.4482 259.32 41.0012Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M251.57 41.0244C251.57 40.6102 251.906 40.2744 252.32 40.2744H256.32C256.735 40.2744 257.07 40.6102 257.07 41.0244C257.07 41.4386 256.735 41.7744 256.32 41.7744H252.32C251.906 41.7744 251.57 41.4386 251.57 41.0244Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M263.57 41.0244C263.57 40.6102 263.906 40.2744 264.32 40.2744H268.32C268.735 40.2744 269.07 40.6102 269.07 41.0244C269.07 41.4386 268.735 41.7744 268.32 41.7744H264.32C263.906 41.7744 263.57 41.4386 263.57 41.0244Z" fill="#196FDE"/>
|
||||
<path d="M169.32 73C169.32 68.5817 165.739 65 161.32 65H145.32C140.902 65 137.32 68.5817 137.32 73V89C137.32 93.4183 140.902 97 145.32 97H161.32C165.739 97 169.32 93.4183 169.32 89V73Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.32 66.5H161.32C164.91 66.5 167.82 69.4101 167.82 73V89C167.82 92.5899 164.91 95.5 161.32 95.5H145.32C141.73 95.5 138.82 92.5899 138.82 89V73C138.82 69.4101 141.73 66.5 145.32 66.5ZM161.32 65C165.739 65 169.32 68.5817 169.32 73V89C169.32 93.4183 165.739 97 161.32 97H145.32C140.902 97 137.32 93.4183 137.32 89V73C137.32 68.5817 140.902 65 145.32 65H161.32Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M151.932 79.4207C153.253 78.1005 155.393 78.1005 156.713 79.4207C158.033 80.7409 158.033 82.8814 156.713 84.2015L152.734 88.1804C151.414 89.5006 149.274 89.5006 147.953 88.1804C146.633 86.8602 146.633 84.7197 147.953 83.3996L151.932 79.4207ZM155.653 80.4814C154.918 79.7469 153.727 79.7469 152.993 80.4814L149.014 84.4602C148.28 85.1946 148.28 86.3853 149.014 87.1197C149.749 87.8541 150.939 87.8541 151.674 87.1197L155.653 83.1409C156.387 82.4065 156.387 81.2158 155.653 80.4814Z" fill="#BEF264"/>
|
||||
<path d="M156.184 78.3223L157.813 79.9512L156.184 81.5802L154.555 79.9512L156.184 78.3223Z" fill="#D9D9D9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M154.708 82.5783C153.388 83.8985 151.248 83.8985 149.927 82.5783C148.607 81.2581 148.607 79.1177 149.927 77.7975L153.906 73.8186C155.226 72.4984 157.367 72.4984 158.687 73.8186C160.007 75.1388 160.007 77.2793 158.687 78.5995L154.708 82.5783ZM150.988 81.5177C151.723 82.2521 152.913 82.2521 153.648 81.5177L157.626 77.5388C158.361 76.8044 158.361 75.6137 157.626 74.8793C156.892 74.1449 155.701 74.1449 154.967 74.8793L150.988 78.8581C150.254 79.5925 150.254 80.7833 150.988 81.5177Z" fill="#BEF264"/>
|
||||
<path d="M150.457 83.6768L148.828 82.0478L150.457 80.4189L152.086 82.0478L150.457 83.6768Z" fill="#D9D9D9"/>
|
||||
<path d="M87.3203 62C87.3203 64.2091 85.5295 66 83.3203 66C81.1112 66 79.3203 64.2091 79.3203 62C79.3203 59.7909 81.1112 58 83.3203 58C85.5295 58 87.3203 59.7909 87.3203 62Z" fill="#8BCAFD"/>
|
||||
<path d="M103.32 62C103.32 64.2091 101.529 66 99.3203 66C97.1112 66 95.3203 64.2091 95.3203 62C95.3203 59.7909 97.1112 58 99.3203 58C101.529 58 103.32 59.7909 103.32 62Z" fill="#52ADF9"/>
|
||||
<path d="M71.3203 62C71.3203 64.2091 69.5295 66 67.3203 66C65.1112 66 63.3203 64.2091 63.3203 62C63.3203 59.7909 65.1112 58 67.3203 58C69.5295 58 71.3203 59.7909 71.3203 62Z" fill="#BDDFFE"/>
|
||||
<path d="M200.32 81C200.32 78.7909 202.111 77 204.32 77C206.529 77 208.32 78.7909 208.32 81C208.32 83.2091 206.529 85 204.32 85C202.111 85 200.32 83.2091 200.32 81Z" fill="#BEF264"/>
|
||||
<path d="M184.32 81C184.32 78.7909 186.111 77 188.32 77C190.529 77 192.32 78.7909 192.32 81C192.32 83.2091 190.529 85 188.32 85C186.111 85 184.32 83.2091 184.32 81Z" fill="#A3E635"/>
|
||||
<path d="M216.32 81C216.32 78.7909 218.111 77 220.32 77C222.529 77 224.32 78.7909 224.32 81C224.32 83.2091 222.529 85 220.32 85C218.111 85 216.32 83.2091 216.32 81Z" fill="#D9F99D"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,45 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M41.8016 13.7002H95.8016C102.002 13.7002 107.002 18.7002 107.002 24.9002V145.9C107.002 152.1 102.002 157.1 95.8016 157.1H41.8016C35.6016 157.1 30.6016 152.1 30.6016 145.9V25.0002C30.6016 18.7002 35.6016 13.7002 41.8016 13.7002Z" fill="#1E293B"/>
|
||||
<path d="M100.101 40.5999C100.101 36.5999 96.9012 33.3999 92.9012 33.3999H44.9012C40.9012 33.3999 37.7012 36.5999 37.7012 40.5999V136.6C37.7012 140.6 40.9012 143.8 44.9012 143.8H92.9012C96.9012 143.8 100.101 140.6 100.101 136.6V40.5999Z" fill="#0B1120"/>
|
||||
<path d="M95.8013 13H41.8013C35.2013 13 29.8013 18.4 29.8013 25V146C29.8013 152.6 35.2013 158 41.8013 158H95.8013C102.401 158 107.801 152.6 107.801 146V25C107.801 18.3 102.501 13 95.8013 13ZM106.301 146C106.301 151.8 101.601 156.5 95.8013 156.5H41.8013C36.0013 156.5 31.3013 151.8 31.3013 146V25C31.3013 19.2 36.0013 14.5 41.8013 14.5H95.8013C101.601 14.5 106.301 19.2 106.301 25V146Z" fill="#52ADF9"/>
|
||||
<path d="M68.8013 26.8999C70.5013 26.8999 71.8013 25.5999 71.8013 23.8999C71.8013 22.1999 70.5013 20.8999 68.8013 20.8999C67.1013 20.8999 65.8013 22.1999 65.8013 23.8999C65.8013 25.5999 67.2013 26.8999 68.8013 26.8999ZM68.8013 22.3999C69.6013 22.3999 70.3013 23.0999 70.3013 23.8999C70.3013 24.6999 69.6013 25.3999 68.8013 25.3999C68.0013 25.3999 67.3013 24.6999 67.3013 23.8999C67.3013 23.0999 68.0013 22.3999 68.8013 22.3999Z" fill="#52ADF9"/>
|
||||
<path d="M50.8015 24.3998H60.8015C61.2015 24.3998 61.6015 24.0998 61.6015 23.5998C61.6015 23.0998 61.3015 22.7998 60.8015 22.7998H50.8015C50.4015 22.7998 50.0015 23.0998 50.0015 23.5998C50.0015 24.0998 50.4015 24.3998 50.8015 24.3998Z" fill="#52ADF9"/>
|
||||
<path d="M76.8015 24.3998H86.8015C87.2015 24.3998 87.6015 24.0998 87.6015 23.5998C87.6015 23.0998 87.3015 22.7998 86.8015 22.7998H76.8015C76.4015 22.7998 76.0015 23.0998 76.0015 23.5998C76.0015 24.0998 76.4015 24.3998 76.8015 24.3998Z" fill="#52ADF9"/>
|
||||
<path d="M92.8013 32.6001H44.8013C40.4013 32.6001 36.8013 36.2001 36.8013 40.6001V136.6C36.8013 141 40.4013 144.6 44.8013 144.6H92.8013C97.2013 144.6 100.801 141 100.801 136.6V40.6001C100.801 36.2001 97.2013 32.6001 92.8013 32.6001ZM99.3013 136.6C99.3013 140.2 96.4013 143.1 92.8013 143.1H44.8013C41.2013 143.1 38.3013 140.2 38.3013 136.6V40.6001C38.3013 37.0001 41.2013 34.1001 44.8013 34.1001H92.8013C96.4013 34.1001 99.3013 37.0001 99.3013 40.6001V136.6Z" fill="#52ADF9"/>
|
||||
<path d="M90.8016 45.8002H61.4016C61.0016 45.8002 60.6016 45.5002 60.6016 45.0002C60.6016 44.5002 60.9016 44.2002 61.4016 44.2002H90.9016C91.3016 44.2002 91.7016 44.5002 91.7016 45.0002C91.7016 45.5002 91.2016 45.8002 90.8016 45.8002Z" fill="#184080"/>
|
||||
<path d="M77.2016 51.7001H61.4016C61.0016 51.7001 60.6016 51.4001 60.6016 50.9001C60.6016 50.4001 60.9016 50.1001 61.4016 50.1001H77.2016C77.6016 50.1001 78.0016 50.4001 78.0016 50.9001C78.0016 51.4001 77.6016 51.7001 77.2016 51.7001Z" fill="#184080"/>
|
||||
<path d="M90.8016 87.8002H61.4016C61.0016 87.8002 60.6016 87.5002 60.6016 87.0002C60.6016 86.5002 60.9016 86.2002 61.4016 86.2002H90.9016C91.3016 86.2002 91.7016 86.5002 91.7016 87.0002C91.7016 87.5002 91.2016 87.8002 90.8016 87.8002Z" fill="#184080"/>
|
||||
<path d="M77.2016 93.7001H61.4016C61.0016 93.7001 60.6016 93.4001 60.6016 92.9001C60.6016 92.4001 60.9016 92.1001 61.4016 92.1001H77.2016C77.6016 92.1001 78.0016 92.4001 78.0016 92.9001C78.0016 93.4001 77.6016 93.7001 77.2016 93.7001Z" fill="#184080"/>
|
||||
<path d="M90.8016 66.8002H61.4016C61.0016 66.8002 60.6016 66.5002 60.6016 66.0002C60.6016 65.5002 60.9016 65.2002 61.4016 65.2002H90.9016C91.3016 65.2002 91.7016 65.5002 91.7016 66.0002C91.7016 66.5002 91.2016 66.8002 90.8016 66.8002Z" fill="#184080"/>
|
||||
<path d="M77.2016 72.7001H61.4016C61.0016 72.7001 60.6016 72.4001 60.6016 71.9001C60.6016 71.4001 60.9016 71.1001 61.4016 71.1001H77.2016C77.6016 71.1001 78.0016 71.4001 78.0016 71.9001C78.0016 72.4001 77.6016 72.7001 77.2016 72.7001Z" fill="#184080"/>
|
||||
<path d="M90.8016 129.8H61.4016C61.0016 129.8 60.6016 129.5 60.6016 129C60.6016 128.5 60.9016 128.2 61.4016 128.2H90.9016C91.3016 128.2 91.7016 128.5 91.7016 129C91.7016 129.5 91.2016 129.8 90.8016 129.8Z" fill="#184080"/>
|
||||
<path d="M77.2016 135.7H61.4016C61.0016 135.7 60.6016 135.4 60.6016 134.9C60.6016 134.4 60.9016 134.1 61.4016 134.1H77.2016C77.6016 134.1 78.0016 134.4 78.0016 134.9C78.0016 135.4 77.6016 135.7 77.2016 135.7Z" fill="#184080"/>
|
||||
<path d="M90.8016 108.8H61.4016C61.0016 108.8 60.6016 108.5 60.6016 108C60.6016 107.5 60.9016 107.2 61.4016 107.2H90.9016C91.3016 107.2 91.7016 107.5 91.7016 108C91.7016 108.5 91.2016 108.8 90.8016 108.8Z" fill="#184080"/>
|
||||
<path d="M77.2016 114.7H61.4016C61.0016 114.7 60.6016 114.4 60.6016 113.9C60.6016 113.4 60.9016 113.1 61.4016 113.1H77.2016C77.6016 113.1 78.0016 113.4 78.0016 113.9C78.0016 114.4 77.6016 114.7 77.2016 114.7Z" fill="#184080"/>
|
||||
<path d="M96.8016 34.7998H150.802C157.002 34.7998 162.002 39.7998 162.002 45.9998V167C162.002 173.2 157.002 178.2 150.802 178.2H96.8016C90.6016 178.2 85.6016 173.2 85.6016 167V45.9998C85.6016 39.7998 90.6016 34.7998 96.8016 34.7998Z" fill="#1E293B"/>
|
||||
<path d="M155.101 61.5999C155.101 57.5999 151.901 54.3999 147.901 54.3999H99.9012C95.9012 54.3999 92.7012 57.5999 92.7012 61.5999V157.6C92.7012 161.6 95.9012 164.8 99.9012 164.8H147.901C151.901 164.8 155.101 161.6 155.101 157.6V61.5999Z" fill="#0B1120"/>
|
||||
<path d="M150.801 34H96.8013C90.2013 34 84.8013 39.4 84.8013 46V167C84.8013 173.6 90.2013 179 96.8013 179H150.801C157.401 179 162.801 173.6 162.801 167V46C162.801 39.4 157.501 34 150.801 34ZM161.301 167C161.301 172.8 156.601 177.5 150.801 177.5H96.8013C91.0013 177.5 86.3013 172.8 86.3013 167V46C86.3013 40.2 91.0013 35.5 96.8013 35.5H150.801C156.601 35.5 161.301 40.2 161.301 46V167Z" fill="#A3E635"/>
|
||||
<path d="M123.801 47.8999C125.501 47.8999 126.801 46.5999 126.801 44.8999C126.801 43.1999 125.501 41.8999 123.801 41.8999C122.101 41.8999 120.801 43.1999 120.801 44.8999C120.801 46.5999 122.201 47.8999 123.801 47.8999ZM123.801 43.3999C124.601 43.3999 125.301 44.0999 125.301 44.8999C125.301 45.6999 124.601 46.3999 123.801 46.3999C123.001 46.3999 122.301 45.6999 122.301 44.8999C122.301 44.0999 123.001 43.3999 123.801 43.3999Z" fill="#A3E635"/>
|
||||
<path d="M105.801 45.3998H115.801C116.201 45.3998 116.601 45.0998 116.601 44.5998C116.601 44.0998 116.301 43.7998 115.801 43.7998H105.801C105.401 43.7998 105.001 44.0998 105.001 44.5998C105.001 45.0998 105.401 45.3998 105.801 45.3998Z" fill="#A3E635"/>
|
||||
<path d="M131.801 45.3998H141.801C142.201 45.3998 142.601 45.0998 142.601 44.5998C142.601 44.0998 142.301 43.7998 141.801 43.7998H131.801C131.401 43.7998 131.001 44.0998 131.001 44.5998C131.001 45.0998 131.401 45.3998 131.801 45.3998Z" fill="#A3E635"/>
|
||||
<path d="M147.801 53.6001H99.8013C95.4013 53.6001 91.8013 57.2001 91.8013 61.6001V157.6C91.8013 162 95.4013 165.6 99.8013 165.6H147.801C152.201 165.6 155.801 162 155.801 157.6V61.6001C155.801 57.2001 152.201 53.6001 147.801 53.6001ZM154.301 157.6C154.301 161.2 151.401 164.1 147.801 164.1H99.8013C96.2013 164.1 93.3013 161.2 93.3013 157.6V61.6001C93.3013 58.0001 96.2013 55.1001 99.8013 55.1001H147.801C151.401 55.1001 154.301 58.0001 154.301 61.6001V157.6Z" fill="#A3E635"/>
|
||||
<path d="M49.8014 54C53.0598 54 55.7014 51.3137 55.7014 48C55.7014 44.6863 53.0598 42 49.8014 42C46.5429 42 43.9014 44.6863 43.9014 48C43.9014 51.3137 46.5429 54 49.8014 54Z" fill="#1E293B"/>
|
||||
<path d="M49.8014 96C53.0598 96 55.7014 93.3137 55.7014 90C55.7014 86.6863 53.0598 84 49.8014 84C46.5429 84 43.9014 86.6863 43.9014 90C43.9014 93.3137 46.5429 96 49.8014 96Z" fill="#1E293B"/>
|
||||
<path d="M49.8014 75C53.0598 75 55.7014 72.3137 55.7014 69C55.7014 65.6863 53.0598 63 49.8014 63C46.5429 63 43.9014 65.6863 43.9014 69C43.9014 72.3137 46.5429 75 49.8014 75Z" fill="#1E293B"/>
|
||||
<path d="M49.8014 138C53.0598 138 55.7014 135.314 55.7014 132C55.7014 128.686 53.0598 126 49.8014 126C46.5429 126 43.9014 128.686 43.9014 132C43.9014 135.314 46.5429 138 49.8014 138Z" fill="#1E293B"/>
|
||||
<path d="M49.8014 117C53.0598 117 55.7014 114.314 55.7014 111C55.7014 107.686 53.0598 105 49.8014 105C46.5429 105 43.9014 107.686 43.9014 111C43.9014 114.314 46.5429 117 49.8014 117Z" fill="#1E293B"/>
|
||||
<path d="M104.801 75C108.06 75 110.701 72.3137 110.701 69C110.701 65.6863 108.06 63 104.801 63C101.543 63 98.9014 65.6863 98.9014 69C98.9014 72.3137 101.543 75 104.801 75Z" fill="#1E293B"/>
|
||||
<path d="M104.801 159C108.06 159 110.701 156.314 110.701 153C110.701 149.686 108.06 147 104.801 147C101.543 147 98.9014 149.686 98.9014 153C98.9014 156.314 101.543 159 104.801 159Z" fill="#1E293B"/>
|
||||
<path d="M104.801 138C108.06 138 110.701 135.314 110.701 132C110.701 128.686 108.06 126 104.801 126C101.543 126 98.9014 128.686 98.9014 132C98.9014 135.314 101.543 138 104.801 138Z" fill="#1E293B"/>
|
||||
<path d="M116.402 66.8002H145.902C146.302 66.8002 146.702 66.5002 146.702 66.0002C146.702 65.5002 146.402 65.2002 145.902 65.2002H116.402C116.002 65.2002 115.602 65.5002 115.602 66.0002C115.602 66.5002 116.002 66.8002 116.402 66.8002Z" fill="#365314"/>
|
||||
<path d="M116.402 72.7001H132.202C132.602 72.7001 133.002 72.4001 133.002 71.9001C133.002 71.4001 132.702 71.1001 132.202 71.1001H116.402C116.002 71.1001 115.602 71.4001 115.602 71.9001C115.602 72.4001 116.002 72.7001 116.402 72.7001Z" fill="#365314"/>
|
||||
<path d="M145.802 149.3H116.402C116.002 149.3 115.602 149.6 115.602 150.1C115.602 150.6 115.902 150.9 116.402 150.9H145.902C146.302 150.9 146.702 150.6 146.702 150.1C146.702 149.6 146.202 149.3 145.802 149.3Z" fill="#365314"/>
|
||||
<path d="M132.202 155.2H116.402C116.002 155.2 115.602 155.5 115.602 156C115.602 156.5 115.902 156.8 116.402 156.8H132.202C132.602 156.8 133.002 156.5 133.002 156C133.002 155.5 132.602 155.2 132.202 155.2Z" fill="#365314"/>
|
||||
<path d="M145.802 128.3H116.402C116.002 128.3 115.602 128.6 115.602 129.1C115.602 129.6 115.902 129.9 116.402 129.9H145.902C146.302 129.9 146.702 129.6 146.702 129.1C146.702 128.6 146.202 128.3 145.802 128.3Z" fill="#365314"/>
|
||||
<path d="M116.402 135.7H132.202C132.602 135.7 133.002 135.4 133.002 134.9C133.002 134.4 132.702 134.1 132.202 134.1H116.402C116.002 134.1 115.602 134.4 115.602 134.9C115.602 135.4 116.002 135.7 116.402 135.7Z" fill="#365314"/>
|
||||
<path d="M74.8013 83H172.801C175.001 83 176.801 84.8 176.801 87V114C176.801 116.2 175.001 118 172.801 118H74.8013C72.6013 118 70.8013 116.2 70.8013 114V87C70.8013 84.8 72.6013 83 74.8013 83Z" fill="#1649A0"/>
|
||||
<path d="M164.801 95.2998H112.801C112.401 95.2998 112.001 95.5998 112.001 96.0998C112.001 96.5998 112.301 96.8998 112.801 96.8998H164.801C165.201 96.8998 165.601 96.5998 165.601 96.0998C165.601 95.5998 165.201 95.2998 164.801 95.2998Z" fill="#52ADF9"/>
|
||||
<path d="M140.801 104.1H112.801C112.401 104.1 112.001 104.4 112.001 104.9C112.001 105.4 112.301 105.7 112.801 105.7H140.801C141.201 105.7 141.601 105.4 141.601 104.9C141.601 104.4 141.201 104.1 140.801 104.1Z" fill="#52ADF9"/>
|
||||
<path d="M92.3015 102.2H90.8015C86.0015 102.2 82.0015 106.1 82.0015 111V111.1C82.0015 111.5 82.3015 111.8 82.8015 111.8C83.3015 111.8 83.6015 111.4 83.6015 111C83.6015 107 86.9015 103.8 90.8015 103.8H92.3015C96.3015 103.8 99.5015 107.1 99.5015 111.1C99.5015 111.5 99.8015 111.8 100.301 111.8C100.801 111.8 101.101 111.4 101.101 111C101.001 106.1 97.1015 102.2 92.3015 102.2Z" fill="#E2E8F0"/>
|
||||
<path d="M91.6012 99.5002C94.3012 99.5002 96.5012 97.3002 96.5012 94.6002C96.5012 91.9002 94.3012 89.7002 91.6012 89.7002C88.9012 89.7002 86.7012 91.9002 86.7012 94.6002C86.7012 97.4002 88.9012 99.5002 91.6012 99.5002ZM91.6012 91.3002C93.5012 91.3002 95.0012 92.8002 95.0012 94.7002C95.0012 96.6002 93.4012 98.0002 91.6012 98.0002C89.8012 98.0002 88.2012 96.5002 88.2012 94.6002C88.2012 92.7002 89.7012 91.3002 91.6012 91.3002Z" fill="#E2E8F0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,45 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M41.3016 13.7002H95.3016C101.502 13.7002 106.502 18.7002 106.502 24.9002V145.9C106.502 152.1 101.502 157.1 95.3016 157.1H41.3016C35.1016 157.1 30.1016 152.1 30.1016 145.9V25.0002C30.1016 18.7002 35.1016 13.7002 41.3016 13.7002Z" fill="#DDEDFE"/>
|
||||
<path d="M99.6012 40.5999C99.6012 36.5999 96.4012 33.3999 92.4012 33.3999H44.4012C40.4012 33.3999 37.2012 36.5999 37.2012 40.5999V136.6C37.2012 140.6 40.4012 143.8 44.4012 143.8H92.4012C96.4012 143.8 99.6012 140.6 99.6012 136.6V40.5999Z" fill="#F9FAFB"/>
|
||||
<path d="M95.3013 13H41.3013C34.7013 13 29.3013 18.4 29.3013 25V146C29.3013 152.6 34.7013 158 41.3013 158H95.3013C101.901 158 107.301 152.6 107.301 146V25C107.301 18.3 102.001 13 95.3013 13ZM105.801 146C105.801 151.8 101.101 156.5 95.3013 156.5H41.3013C35.5013 156.5 30.8013 151.8 30.8013 146V25C30.8013 19.2 35.5013 14.5 41.3013 14.5H95.3013C101.101 14.5 105.801 19.2 105.801 25V146Z" fill="#196FDE"/>
|
||||
<path d="M68.3013 26.8999C70.0013 26.8999 71.3013 25.5999 71.3013 23.8999C71.3013 22.1999 70.0013 20.8999 68.3013 20.8999C66.6013 20.8999 65.3013 22.1999 65.3013 23.8999C65.3013 25.5999 66.7013 26.8999 68.3013 26.8999ZM68.3013 22.3999C69.1013 22.3999 69.8013 23.0999 69.8013 23.8999C69.8013 24.6999 69.1013 25.3999 68.3013 25.3999C67.5013 25.3999 66.8013 24.6999 66.8013 23.8999C66.8013 23.0999 67.5013 22.3999 68.3013 22.3999Z" fill="#196FDE"/>
|
||||
<path d="M50.3015 24.3998H60.3015C60.7015 24.3998 61.1015 24.0998 61.1015 23.5998C61.1015 23.0998 60.8015 22.7998 60.3015 22.7998H50.3015C49.9015 22.7998 49.5015 23.0998 49.5015 23.5998C49.5015 24.0998 49.9015 24.3998 50.3015 24.3998Z" fill="#196FDE"/>
|
||||
<path d="M76.3015 24.3998H86.3015C86.7015 24.3998 87.1015 24.0998 87.1015 23.5998C87.1015 23.0998 86.8015 22.7998 86.3015 22.7998H76.3015C75.9015 22.7998 75.5015 23.0998 75.5015 23.5998C75.5015 24.0998 75.9015 24.3998 76.3015 24.3998Z" fill="#196FDE"/>
|
||||
<path d="M92.3013 32.6001H44.3013C39.9013 32.6001 36.3013 36.2001 36.3013 40.6001V136.6C36.3013 141 39.9013 144.6 44.3013 144.6H92.3013C96.7013 144.6 100.301 141 100.301 136.6V40.6001C100.301 36.2001 96.7013 32.6001 92.3013 32.6001ZM98.8013 136.6C98.8013 140.2 95.9013 143.1 92.3013 143.1H44.3013C40.7013 143.1 37.8013 140.2 37.8013 136.6V40.6001C37.8013 37.0001 40.7013 34.1001 44.3013 34.1001H92.3013C95.9013 34.1001 98.8013 37.0001 98.8013 40.6001V136.6Z" fill="#196FDE"/>
|
||||
<path d="M90.3016 45.8002H60.9016C60.5016 45.8002 60.1016 45.5002 60.1016 45.0002C60.1016 44.5002 60.4016 44.2002 60.9016 44.2002H90.4016C90.8016 44.2002 91.2016 44.5002 91.2016 45.0002C91.2016 45.5002 90.7016 45.8002 90.3016 45.8002Z" fill="#BDDFFE"/>
|
||||
<path d="M76.7016 51.7001H60.9016C60.5016 51.7001 60.1016 51.4001 60.1016 50.9001C60.1016 50.4001 60.4016 50.1001 60.9016 50.1001H76.7016C77.1016 50.1001 77.5016 50.4001 77.5016 50.9001C77.5016 51.4001 77.1016 51.7001 76.7016 51.7001Z" fill="#BDDFFE"/>
|
||||
<path d="M90.3016 87.8002H60.9016C60.5016 87.8002 60.1016 87.5002 60.1016 87.0002C60.1016 86.5002 60.4016 86.2002 60.9016 86.2002H90.4016C90.8016 86.2002 91.2016 86.5002 91.2016 87.0002C91.2016 87.5002 90.7016 87.8002 90.3016 87.8002Z" fill="#BDDFFE"/>
|
||||
<path d="M76.7016 93.7001H60.9016C60.5016 93.7001 60.1016 93.4001 60.1016 92.9001C60.1016 92.4001 60.4016 92.1001 60.9016 92.1001H76.7016C77.1016 92.1001 77.5016 92.4001 77.5016 92.9001C77.5016 93.4001 77.1016 93.7001 76.7016 93.7001Z" fill="#BDDFFE"/>
|
||||
<path d="M90.3016 66.8002H60.9016C60.5016 66.8002 60.1016 66.5002 60.1016 66.0002C60.1016 65.5002 60.4016 65.2002 60.9016 65.2002H90.4016C90.8016 65.2002 91.2016 65.5002 91.2016 66.0002C91.2016 66.5002 90.7016 66.8002 90.3016 66.8002Z" fill="#BDDFFE"/>
|
||||
<path d="M76.7016 72.7001H60.9016C60.5016 72.7001 60.1016 72.4001 60.1016 71.9001C60.1016 71.4001 60.4016 71.1001 60.9016 71.1001H76.7016C77.1016 71.1001 77.5016 71.4001 77.5016 71.9001C77.5016 72.4001 77.1016 72.7001 76.7016 72.7001Z" fill="#BDDFFE"/>
|
||||
<path d="M90.3016 129.8H60.9016C60.5016 129.8 60.1016 129.5 60.1016 129C60.1016 128.5 60.4016 128.2 60.9016 128.2H90.4016C90.8016 128.2 91.2016 128.5 91.2016 129C91.2016 129.5 90.7016 129.8 90.3016 129.8Z" fill="#BDDFFE"/>
|
||||
<path d="M76.7016 135.7H60.9016C60.5016 135.7 60.1016 135.4 60.1016 134.9C60.1016 134.4 60.4016 134.1 60.9016 134.1H76.7016C77.1016 134.1 77.5016 134.4 77.5016 134.9C77.5016 135.4 77.1016 135.7 76.7016 135.7Z" fill="#BDDFFE"/>
|
||||
<path d="M90.3016 108.8H60.9016C60.5016 108.8 60.1016 108.5 60.1016 108C60.1016 107.5 60.4016 107.2 60.9016 107.2H90.4016C90.8016 107.2 91.2016 107.5 91.2016 108C91.2016 108.5 90.7016 108.8 90.3016 108.8Z" fill="#BDDFFE"/>
|
||||
<path d="M76.7016 114.7H60.9016C60.5016 114.7 60.1016 114.4 60.1016 113.9C60.1016 113.4 60.4016 113.1 60.9016 113.1H76.7016C77.1016 113.1 77.5016 113.4 77.5016 113.9C77.5016 114.4 77.1016 114.7 76.7016 114.7Z" fill="#BDDFFE"/>
|
||||
<path d="M96.3016 34.7998H150.302C156.502 34.7998 161.502 39.7998 161.502 45.9998V167C161.502 173.2 156.502 178.2 150.302 178.2H96.3016C90.1016 178.2 85.1016 173.2 85.1016 167V45.9998C85.1016 39.7998 90.1016 34.7998 96.3016 34.7998Z" fill="#ECFCCB"/>
|
||||
<path d="M154.601 61.5999C154.601 57.5999 151.401 54.3999 147.401 54.3999H99.4012C95.4012 54.3999 92.2012 57.5999 92.2012 61.5999V157.6C92.2012 161.6 95.4012 164.8 99.4012 164.8H147.401C151.401 164.8 154.601 161.6 154.601 157.6V61.5999Z" fill="#F9FAFB"/>
|
||||
<path d="M150.301 34H96.3013C89.7013 34 84.3013 39.4 84.3013 46V167C84.3013 173.6 89.7013 179 96.3013 179H150.301C156.901 179 162.301 173.6 162.301 167V46C162.301 39.4 157.001 34 150.301 34ZM160.801 167C160.801 172.8 156.101 177.5 150.301 177.5H96.3013C90.5013 177.5 85.8013 172.8 85.8013 167V46C85.8013 40.2 90.5013 35.5 96.3013 35.5H150.301C156.101 35.5 160.801 40.2 160.801 46V167Z" fill="#65A30D"/>
|
||||
<path d="M123.301 47.8999C125.001 47.8999 126.301 46.5999 126.301 44.8999C126.301 43.1999 125.001 41.8999 123.301 41.8999C121.601 41.8999 120.301 43.1999 120.301 44.8999C120.301 46.5999 121.701 47.8999 123.301 47.8999ZM123.301 43.3999C124.101 43.3999 124.801 44.0999 124.801 44.8999C124.801 45.6999 124.101 46.3999 123.301 46.3999C122.501 46.3999 121.801 45.6999 121.801 44.8999C121.801 44.0999 122.501 43.3999 123.301 43.3999Z" fill="#65A30D"/>
|
||||
<path d="M105.301 45.3998H115.301C115.701 45.3998 116.101 45.0998 116.101 44.5998C116.101 44.0998 115.801 43.7998 115.301 43.7998H105.301C104.901 43.7998 104.501 44.0998 104.501 44.5998C104.501 45.0998 104.901 45.3998 105.301 45.3998Z" fill="#65A30D"/>
|
||||
<path d="M131.301 45.3998H141.301C141.701 45.3998 142.101 45.0998 142.101 44.5998C142.101 44.0998 141.801 43.7998 141.301 43.7998H131.301C130.901 43.7998 130.501 44.0998 130.501 44.5998C130.501 45.0998 130.901 45.3998 131.301 45.3998Z" fill="#65A30D"/>
|
||||
<path d="M147.301 53.6001H99.3013C94.9013 53.6001 91.3013 57.2001 91.3013 61.6001V157.6C91.3013 162 94.9013 165.6 99.3013 165.6H147.301C151.701 165.6 155.301 162 155.301 157.6V61.6001C155.301 57.2001 151.701 53.6001 147.301 53.6001ZM153.801 157.6C153.801 161.2 150.901 164.1 147.301 164.1H99.3013C95.7013 164.1 92.8013 161.2 92.8013 157.6V61.6001C92.8013 58.0001 95.7013 55.1001 99.3013 55.1001H147.301C150.901 55.1001 153.801 58.0001 153.801 61.6001V157.6Z" fill="#65A30D"/>
|
||||
<path d="M49.3014 54C52.5598 54 55.2014 51.3137 55.2014 48C55.2014 44.6863 52.5598 42 49.3014 42C46.0429 42 43.4014 44.6863 43.4014 48C43.4014 51.3137 46.0429 54 49.3014 54Z" fill="#E5E7EB"/>
|
||||
<path d="M49.3014 96C52.5598 96 55.2014 93.3137 55.2014 90C55.2014 86.6863 52.5598 84 49.3014 84C46.0429 84 43.4014 86.6863 43.4014 90C43.4014 93.3137 46.0429 96 49.3014 96Z" fill="#E5E7EB"/>
|
||||
<path d="M49.3014 75C52.5598 75 55.2014 72.3137 55.2014 69C55.2014 65.6863 52.5598 63 49.3014 63C46.0429 63 43.4014 65.6863 43.4014 69C43.4014 72.3137 46.0429 75 49.3014 75Z" fill="#E5E7EB"/>
|
||||
<path d="M49.3014 138C52.5598 138 55.2014 135.314 55.2014 132C55.2014 128.686 52.5598 126 49.3014 126C46.0429 126 43.4014 128.686 43.4014 132C43.4014 135.314 46.0429 138 49.3014 138Z" fill="#E5E7EB"/>
|
||||
<path d="M49.3014 117C52.5598 117 55.2014 114.314 55.2014 111C55.2014 107.686 52.5598 105 49.3014 105C46.0429 105 43.4014 107.686 43.4014 111C43.4014 114.314 46.0429 117 49.3014 117Z" fill="#E5E7EB"/>
|
||||
<path d="M104.301 75C107.56 75 110.201 72.3137 110.201 69C110.201 65.6863 107.56 63 104.301 63C101.043 63 98.4014 65.6863 98.4014 69C98.4014 72.3137 101.043 75 104.301 75Z" fill="#E5E7EB"/>
|
||||
<path d="M104.301 159C107.56 159 110.201 156.314 110.201 153C110.201 149.686 107.56 147 104.301 147C101.043 147 98.4014 149.686 98.4014 153C98.4014 156.314 101.043 159 104.301 159Z" fill="#E5E7EB"/>
|
||||
<path d="M104.301 138C107.56 138 110.201 135.314 110.201 132C110.201 128.686 107.56 126 104.301 126C101.043 126 98.4014 128.686 98.4014 132C98.4014 135.314 101.043 138 104.301 138Z" fill="#E5E7EB"/>
|
||||
<path d="M115.902 66.8002H145.402C145.802 66.8002 146.202 66.5002 146.202 66.0002C146.202 65.5002 145.902 65.2002 145.402 65.2002H115.902C115.502 65.2002 115.102 65.5002 115.102 66.0002C115.102 66.5002 115.502 66.8002 115.902 66.8002Z" fill="#D9F99D"/>
|
||||
<path d="M115.902 72.7001H131.702C132.102 72.7001 132.502 72.4001 132.502 71.9001C132.502 71.4001 132.202 71.1001 131.702 71.1001H115.902C115.502 71.1001 115.102 71.4001 115.102 71.9001C115.102 72.4001 115.502 72.7001 115.902 72.7001Z" fill="#D9F99D"/>
|
||||
<path d="M145.301 149.3H115.801C115.401 149.3 115.001 149.6 115.001 150.1C115.001 150.6 115.301 150.9 115.801 150.9H145.301C145.701 150.9 146.101 150.6 146.101 150.1C146.101 149.6 145.701 149.3 145.301 149.3Z" fill="#D9F99D"/>
|
||||
<path d="M131.702 155.2H115.902C115.502 155.2 115.102 155.5 115.102 156C115.102 156.5 115.402 156.8 115.902 156.8H131.702C132.102 156.8 132.502 156.5 132.502 156C132.502 155.5 132.102 155.2 131.702 155.2Z" fill="#D9F99D"/>
|
||||
<path d="M145.301 128.3H115.801C115.401 128.3 115.001 128.6 115.001 129.1C115.001 129.6 115.301 129.9 115.801 129.9H145.301C145.701 129.9 146.101 129.6 146.101 129.1C146.101 128.6 145.701 128.3 145.301 128.3Z" fill="#D9F99D"/>
|
||||
<path d="M115.902 135.7H131.702C132.102 135.7 132.502 135.4 132.502 134.9C132.502 134.4 132.202 134.1 131.702 134.1H115.902C115.502 134.1 115.102 134.4 115.102 134.9C115.102 135.4 115.502 135.7 115.902 135.7Z" fill="#D9F99D"/>
|
||||
<path d="M74.3013 83H172.301C174.501 83 176.301 84.8 176.301 87V114C176.301 116.2 174.501 118 172.301 118H74.3013C72.1013 118 70.3013 116.2 70.3013 114V87C70.3013 84.8 72.1013 83 74.3013 83Z" fill="#52ADF9"/>
|
||||
<path d="M164.301 95.2998H112.301C111.901 95.2998 111.501 95.5998 111.501 96.0998C111.501 96.5998 111.801 96.8998 112.301 96.8998H164.301C164.701 96.8998 165.101 96.5998 165.101 96.0998C165.101 95.5998 164.701 95.2998 164.301 95.2998Z" fill="#F9FAFB"/>
|
||||
<path d="M140.301 104.1H112.301C111.901 104.1 111.501 104.4 111.501 104.9C111.501 105.4 111.801 105.7 112.301 105.7H140.301C140.701 105.7 141.101 105.4 141.101 104.9C141.101 104.4 140.701 104.1 140.301 104.1Z" fill="#F9FAFB"/>
|
||||
<path d="M91.8015 102.2H90.3015C85.5015 102.2 81.5015 106.1 81.5015 111V111.1C81.5015 111.5 81.8015 111.8 82.3015 111.8C82.8015 111.8 83.1015 111.4 83.1015 111C83.1015 107 86.4015 103.8 90.3015 103.8H91.8015C95.8015 103.8 99.0015 107.1 99.0015 111.1C99.0015 111.5 99.3015 111.8 99.8015 111.8C100.301 111.8 100.601 111.4 100.601 111C100.501 106.1 96.6015 102.2 91.8015 102.2Z" fill="#F9FAFB"/>
|
||||
<path d="M91.1012 99.5002C93.8012 99.5002 96.0012 97.3002 96.0012 94.6002C96.0012 91.9002 93.8012 89.7002 91.1012 89.7002C88.4012 89.7002 86.2012 91.9002 86.2012 94.6002C86.2012 97.4002 88.4012 99.5002 91.1012 99.5002ZM91.1012 91.3002C93.0012 91.3002 94.5012 92.8002 94.5012 94.7002C94.5012 96.6002 92.9012 98.0002 91.1012 98.0002C89.3012 98.0002 87.7012 96.5002 87.7012 94.6002C87.7012 92.7002 89.2012 91.3002 91.1012 91.3002Z" fill="#F9FAFB"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 11 KiB |
25
briar-android/artwork/il_bluetooth_connect_dark.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<svg width="289" height="145" viewBox="0 0 289 145" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M268.901 41.8047C268.901 37.3864 265.32 33.8047 260.901 33.8047H234.901C230.483 33.8047 226.901 37.3864 226.901 41.8047V103.805C226.901 108.223 230.483 111.805 234.901 111.805H260.901C265.32 111.805 268.901 108.223 268.901 103.805V41.8047Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M234.901 35.3047H260.901C264.491 35.3047 267.401 38.2148 267.401 41.8047V103.805C267.401 107.395 264.491 110.305 260.901 110.305H234.901C231.312 110.305 228.401 107.395 228.401 103.805V41.8047C228.401 38.2148 231.312 35.3047 234.901 35.3047ZM260.901 33.8047C265.32 33.8047 268.901 37.3864 268.901 41.8047V103.805C268.901 108.223 265.32 111.805 260.901 111.805H234.901C230.483 111.805 226.901 108.223 226.901 103.805V41.8047C226.901 37.3864 230.483 33.8047 234.901 33.8047H260.901Z" fill="#52ADF9"/>
|
||||
<path d="M246.901 41.8059C246.901 42.3588 247.349 42.8071 247.901 42.8071C248.454 42.8071 248.901 42.3588 248.901 41.8059C248.901 41.2529 248.454 40.8047 247.901 40.8047C247.349 40.8047 246.901 41.2529 246.901 41.8059Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M239.151 41.8291C239.151 41.4149 239.487 41.0791 239.901 41.0791H243.901C244.316 41.0791 244.651 41.4149 244.651 41.8291C244.651 42.2433 244.316 42.5791 243.901 42.5791H239.901C239.487 42.5791 239.151 42.2433 239.151 41.8291Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M251.151 41.8291C251.151 41.4149 251.487 41.0791 251.901 41.0791H255.901C256.316 41.0791 256.651 41.4149 256.651 41.8291C256.651 42.2433 256.316 42.5791 255.901 42.5791H251.901C251.487 42.5791 251.151 42.2433 251.151 41.8291Z" fill="#52ADF9"/>
|
||||
<path d="M268.901 48.0527H226.902V102.053H268.901V48.0527Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M228.402 49.5527H267.401V100.553H228.402V49.5527ZM268.901 48.0527V102.053H226.902V48.0527H268.901Z" fill="#52ADF9"/>
|
||||
<path d="M61.9014 41.8047C61.9014 37.3864 58.3196 33.8047 53.9014 33.8047H27.9014C23.4831 33.8047 19.9014 37.3864 19.9014 41.8047V103.805C19.9014 108.223 23.4831 111.805 27.9014 111.805H53.9014C58.3196 111.805 61.9014 108.223 61.9014 103.805V41.8047Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.9014 35.3047H53.9014C57.4912 35.3047 60.4014 38.2148 60.4014 41.8047V103.805C60.4014 107.395 57.4912 110.305 53.9014 110.305H27.9014C24.3115 110.305 21.4014 107.395 21.4014 103.805V41.8047C21.4014 38.2148 24.3115 35.3047 27.9014 35.3047ZM53.9014 33.8047C58.3196 33.8047 61.9014 37.3864 61.9014 41.8047V103.805C61.9014 108.223 58.3196 111.805 53.9014 111.805H27.9014C23.4831 111.805 19.9014 108.223 19.9014 103.805V41.8047C19.9014 37.3864 23.4831 33.8047 27.9014 33.8047H53.9014Z" fill="#A3E635"/>
|
||||
<path d="M39.9014 41.8059C39.9014 42.3588 40.3491 42.8071 40.9014 42.8071C41.4537 42.8071 41.9014 42.3588 41.9014 41.8059C41.9014 41.2529 41.4537 40.8047 40.9014 40.8047C40.3491 40.8047 39.9014 41.2529 39.9014 41.8059Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.1514 41.8291C32.1514 41.4149 32.4872 41.0791 32.9014 41.0791H36.9014C37.3156 41.0791 37.6514 41.4149 37.6514 41.8291C37.6514 42.2433 37.3156 42.5791 36.9014 42.5791H32.9014C32.4872 42.5791 32.1514 42.2433 32.1514 41.8291Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M44.1514 41.8291C44.1514 41.4149 44.4872 41.0791 44.9014 41.0791H48.9014C49.3156 41.0791 49.6514 41.4149 49.6514 41.8291C49.6514 42.2433 49.3156 42.5791 48.9014 42.5791H44.9014C44.4872 42.5791 44.1514 42.2433 44.1514 41.8291Z" fill="#A3E635"/>
|
||||
<path d="M61.9014 48.0527H19.9015V102.053H61.9014V48.0527Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4015 49.5527H60.4014V100.553H21.4015V49.5527ZM61.9014 48.0527V102.053H19.9015V48.0527H61.9014Z" fill="#A3E635"/>
|
||||
<path d="M96.1514 72.8047C96.1514 75.0138 94.3605 76.8047 92.1514 76.8047C89.9422 76.8047 88.1514 75.0138 88.1514 72.8047C88.1514 70.5955 89.9422 68.8047 92.1514 68.8047C94.3605 68.8047 96.1514 70.5955 96.1514 72.8047Z" fill="#4D7C0F"/>
|
||||
<path d="M112.151 72.8047C112.151 75.0138 110.361 76.8047 108.151 76.8047C105.942 76.8047 104.151 75.0138 104.151 72.8047C104.151 70.5955 105.942 68.8047 108.151 68.8047C110.361 68.8047 112.151 70.5955 112.151 72.8047Z" fill="#82C91E"/>
|
||||
<path d="M80.1514 72.8047C80.1514 75.0138 78.3605 76.8047 76.1514 76.8047C73.9422 76.8047 72.1514 75.0138 72.1514 72.8047C72.1514 70.5955 73.9422 68.8047 76.1514 68.8047C78.3605 68.8047 80.1514 70.5955 80.1514 72.8047Z" fill="#365314"/>
|
||||
<path d="M192.651 72.8047C192.651 70.5955 194.442 68.8047 196.651 68.8047C198.861 68.8047 200.651 70.5955 200.651 72.8047C200.651 75.0138 198.861 76.8047 196.651 76.8047C194.442 76.8047 192.651 75.0138 192.651 72.8047Z" fill="#1457C5"/>
|
||||
<path d="M176.651 72.8047C176.651 70.5955 178.442 68.8047 180.651 68.8047C182.861 68.8047 184.651 70.5955 184.651 72.8047C184.651 75.0138 182.861 76.8047 180.651 76.8047C178.442 76.8047 176.651 75.0138 176.651 72.8047Z" fill="#2B8EF1"/>
|
||||
<path d="M208.651 72.8047C208.651 70.5955 210.442 68.8047 212.651 68.8047C214.861 68.8047 216.651 70.5955 216.651 72.8047C216.651 75.0138 214.861 76.8047 212.651 76.8047C210.442 76.8047 208.651 75.0138 208.651 72.8047Z" fill="#184080"/>
|
||||
<path d="M166.271 62.8047C166.271 56.1773 160.899 50.8047 154.271 50.8047H134.271C127.644 50.8047 122.271 56.1773 122.271 62.8047V82.8047C122.271 89.4321 127.644 94.8047 134.271 94.8047H154.271C160.899 94.8047 166.271 89.4321 166.271 82.8047V62.8047Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M134.271 52.3047H154.271C160.07 52.3047 164.771 57.0057 164.771 62.8047V82.8047C164.771 88.6037 160.07 93.3047 154.271 93.3047H134.271C128.472 93.3047 123.771 88.6037 123.771 82.8047V62.8047C123.771 57.0057 128.472 52.3047 134.271 52.3047ZM154.271 50.8047C160.899 50.8047 166.271 56.1773 166.271 62.8047V82.8047C166.271 89.4321 160.899 94.8047 154.271 94.8047H134.271C127.644 94.8047 122.271 89.4321 122.271 82.8047V62.8047C122.271 56.1773 127.644 50.8047 134.271 50.8047H154.271Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M144.082 62.349C144.344 62.2252 144.655 62.264 144.879 62.4488L150.582 67.1538C150.753 67.2942 150.852 67.5025 150.855 67.7232C150.858 67.9439 150.763 68.1546 150.596 68.2991L145.547 72.6754L150.596 77.0516C150.761 77.1939 150.855 77.4004 150.855 77.6176C150.855 77.8348 150.761 78.0415 150.598 78.1841L144.894 83.1486C144.672 83.3416 144.358 83.3873 144.091 83.2655C143.823 83.1437 143.651 82.8768 143.651 82.5829V74.3178L139.189 78.1852C138.876 78.4564 138.402 78.4226 138.131 78.1096C137.86 77.7966 137.894 77.3229 138.207 77.0516L143.256 72.6754L138.207 68.2991C137.894 68.0278 137.86 67.5542 138.131 67.2411C138.402 66.9281 138.876 66.8943 139.189 67.1655L143.651 71.0329V63.0274C143.651 62.737 143.819 62.4728 144.082 62.349ZM145.151 74.3178L148.961 77.6196L145.151 80.9358V74.3178ZM145.151 71.0329V64.6183L148.944 67.7465L145.151 71.0329Z" fill="#52ADF9"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
25
briar-android/artwork/il_bluetooth_connect_light.svg
Normal file
@@ -0,0 +1,25 @@
|
||||
<svg width="289" height="145" viewBox="0 0 289 145" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M268.901 40.8047C268.901 36.3864 265.32 32.8047 260.901 32.8047H234.901C230.483 32.8047 226.901 36.3864 226.901 40.8047V102.805C226.901 107.223 230.483 110.805 234.901 110.805H260.901C265.32 110.805 268.901 107.223 268.901 102.805V40.8047Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M234.901 34.3047H260.901C264.491 34.3047 267.401 37.2148 267.401 40.8047V102.805C267.401 106.395 264.491 109.305 260.901 109.305H234.901C231.312 109.305 228.401 106.395 228.401 102.805V40.8047C228.401 37.2148 231.312 34.3047 234.901 34.3047ZM260.901 32.8047C265.32 32.8047 268.901 36.3864 268.901 40.8047V102.805C268.901 107.223 265.32 110.805 260.901 110.805H234.901C230.483 110.805 226.901 107.223 226.901 102.805V40.8047C226.901 36.3864 230.483 32.8047 234.901 32.8047H260.901Z" fill="#196FDE"/>
|
||||
<path d="M246.901 40.8059C246.901 41.3588 247.349 41.8071 247.901 41.8071C248.454 41.8071 248.901 41.3588 248.901 40.8059C248.901 40.2529 248.454 39.8047 247.901 39.8047C247.349 39.8047 246.901 40.2529 246.901 40.8059Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M239.151 40.8291C239.151 40.4149 239.487 40.0791 239.901 40.0791H243.901C244.316 40.0791 244.651 40.4149 244.651 40.8291C244.651 41.2433 244.316 41.5791 243.901 41.5791H239.901C239.487 41.5791 239.151 41.2433 239.151 40.8291Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M251.151 40.8291C251.151 40.4149 251.487 40.0791 251.901 40.0791H255.901C256.316 40.0791 256.651 40.4149 256.651 40.8291C256.651 41.2433 256.316 41.5791 255.901 41.5791H251.901C251.487 41.5791 251.151 41.2433 251.151 40.8291Z" fill="#196FDE"/>
|
||||
<path d="M268.901 47.0527H226.902V101.053H268.901V47.0527Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M228.402 48.5527H267.401V99.5527H228.402V48.5527ZM268.901 47.0527V101.053H226.902V47.0527H268.901Z" fill="#196FDE"/>
|
||||
<path d="M61.9014 40.8047C61.9014 36.3864 58.3196 32.8047 53.9014 32.8047H27.9014C23.4831 32.8047 19.9014 36.3864 19.9014 40.8047V102.805C19.9014 107.223 23.4831 110.805 27.9014 110.805H53.9014C58.3196 110.805 61.9014 107.223 61.9014 102.805V40.8047Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.9014 34.3047H53.9014C57.4912 34.3047 60.4014 37.2148 60.4014 40.8047V102.805C60.4014 106.395 57.4912 109.305 53.9014 109.305H27.9014C24.3115 109.305 21.4014 106.395 21.4014 102.805V40.8047C21.4014 37.2148 24.3115 34.3047 27.9014 34.3047ZM53.9014 32.8047C58.3196 32.8047 61.9014 36.3864 61.9014 40.8047V102.805C61.9014 107.223 58.3196 110.805 53.9014 110.805H27.9014C23.4831 110.805 19.9014 107.223 19.9014 102.805V40.8047C19.9014 36.3864 23.4831 32.8047 27.9014 32.8047H53.9014Z" fill="#65A30D"/>
|
||||
<path d="M39.9014 40.8059C39.9014 41.3588 40.3491 41.8071 40.9014 41.8071C41.4537 41.8071 41.9014 41.3588 41.9014 40.8059C41.9014 40.2529 41.4537 39.8047 40.9014 39.8047C40.3491 39.8047 39.9014 40.2529 39.9014 40.8059Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.1514 40.8291C32.1514 40.4149 32.4872 40.0791 32.9014 40.0791H36.9014C37.3156 40.0791 37.6514 40.4149 37.6514 40.8291C37.6514 41.2433 37.3156 41.5791 36.9014 41.5791H32.9014C32.4872 41.5791 32.1514 41.2433 32.1514 40.8291Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M44.1514 40.8291C44.1514 40.4149 44.4872 40.0791 44.9014 40.0791H48.9014C49.3156 40.0791 49.6514 40.4149 49.6514 40.8291C49.6514 41.2433 49.3156 41.5791 48.9014 41.5791H44.9014C44.4872 41.5791 44.1514 41.2433 44.1514 40.8291Z" fill="#65A30D"/>
|
||||
<path d="M61.9014 47.0527H19.9015V101.053H61.9014V47.0527Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4015 48.5527H60.4014V99.5527H21.4015V48.5527ZM61.9014 47.0527V101.053H19.9015V47.0527H61.9014Z" fill="#65A30D"/>
|
||||
<path d="M96.1514 71.8047C96.1514 74.0138 94.3605 75.8047 92.1514 75.8047C89.9422 75.8047 88.1514 74.0138 88.1514 71.8047C88.1514 69.5955 89.9422 67.8047 92.1514 67.8047C94.3605 67.8047 96.1514 69.5955 96.1514 71.8047Z" fill="#BEF264"/>
|
||||
<path d="M112.151 71.8047C112.151 74.0138 110.361 75.8047 108.151 75.8047C105.942 75.8047 104.151 74.0138 104.151 71.8047C104.151 69.5955 105.942 67.8047 108.151 67.8047C110.361 67.8047 112.151 69.5955 112.151 71.8047Z" fill="#A3E635"/>
|
||||
<path d="M80.1514 71.8047C80.1514 74.0138 78.3605 75.8047 76.1514 75.8047C73.9422 75.8047 72.1514 74.0138 72.1514 71.8047C72.1514 69.5955 73.9422 67.8047 76.1514 67.8047C78.3605 67.8047 80.1514 69.5955 80.1514 71.8047Z" fill="#D9F99D"/>
|
||||
<path d="M192.651 71.8047C192.651 69.5955 194.442 67.8047 196.651 67.8047C198.861 67.8047 200.651 69.5955 200.651 71.8047C200.651 74.0138 198.861 75.8047 196.651 75.8047C194.442 75.8047 192.651 74.0138 192.651 71.8047Z" fill="#8BCAFD"/>
|
||||
<path d="M176.651 71.8047C176.651 69.5955 178.442 67.8047 180.651 67.8047C182.861 67.8047 184.651 69.5955 184.651 71.8047C184.651 74.0138 182.861 75.8047 180.651 75.8047C178.442 75.8047 176.651 74.0138 176.651 71.8047Z" fill="#52ADF9"/>
|
||||
<path d="M208.651 71.8047C208.651 69.5955 210.442 67.8047 212.651 67.8047C214.861 67.8047 216.651 69.5955 216.651 71.8047C216.651 74.0138 214.861 75.8047 212.651 75.8047C210.442 75.8047 208.651 74.0138 208.651 71.8047Z" fill="#BDDFFE"/>
|
||||
<path d="M166.271 61.8047C166.271 55.1773 160.899 49.8047 154.271 49.8047H134.271C127.644 49.8047 122.271 55.1773 122.271 61.8047V81.8047C122.271 88.4321 127.644 93.8047 134.271 93.8047H154.271C160.899 93.8047 166.271 88.4321 166.271 81.8047V61.8047Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M134.271 51.3047H154.271C160.07 51.3047 164.771 56.0057 164.771 61.8047V81.8047C164.771 87.6037 160.07 92.3047 154.271 92.3047H134.271C128.472 92.3047 123.771 87.6037 123.771 81.8047V61.8047C123.771 56.0057 128.472 51.3047 134.271 51.3047ZM154.271 49.8047C160.899 49.8047 166.271 55.1773 166.271 61.8047V81.8047C166.271 88.4321 160.899 93.8047 154.271 93.8047H134.271C127.644 93.8047 122.271 88.4321 122.271 81.8047V61.8047C122.271 55.1773 127.644 49.8047 134.271 49.8047H154.271Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M144.082 61.349C144.344 61.2252 144.655 61.264 144.879 61.4488L150.582 66.1538C150.753 66.2942 150.852 66.5025 150.855 66.7232C150.858 66.9439 150.763 67.1546 150.596 67.2991L145.547 71.6754L150.596 76.0516C150.761 76.1939 150.855 76.4004 150.855 76.6176C150.855 76.8348 150.761 77.0415 150.598 77.1841L144.894 82.1486C144.672 82.3416 144.358 82.3873 144.091 82.2655C143.823 82.1437 143.651 81.8768 143.651 81.5829V73.3178L139.189 77.1852C138.876 77.4564 138.402 77.4226 138.131 77.1096C137.86 76.7966 137.894 76.3229 138.207 76.0516L143.256 71.6754L138.207 67.2991C137.894 67.0278 137.86 66.5542 138.131 66.2411C138.402 65.9281 138.876 65.8943 139.189 66.1655L143.651 70.0329V62.0274C143.651 61.737 143.819 61.4728 144.082 61.349ZM145.151 73.3178L148.961 76.6196L145.151 79.9358V73.3178ZM145.151 70.0329V63.6183L148.944 66.7465L145.151 70.0329Z" fill="#196FDE"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
17
briar-android/artwork/il_empty_state_blogs_dark.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_142_9184)">
|
||||
<path d="M14.4937 62.0026C13.3891 62.0026 12.4937 61.1071 12.4937 60.0026L12.4937 30.003C12.4936 28.8984 13.3891 28.003 14.4937 28.003L34.4936 28.003C35.5982 28.003 36.4936 28.8984 36.4936 30.003L36.4936 60.0029C36.4936 61.1075 35.5982 62.0029 34.4936 62.0029L14.4937 62.0026Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.4936 29.503L14.4937 29.503C14.2175 29.503 13.9937 29.7268 13.9937 30.003L13.9937 60.0026C13.9937 60.2787 14.2176 60.5026 14.4937 60.5026L34.4936 60.5029C34.7698 60.5029 34.9936 60.2791 34.9936 60.0029L34.9936 30.003C34.9936 29.7268 34.7698 29.503 34.4936 29.503ZM12.4937 60.0026C12.4937 61.1071 13.3891 62.0026 14.4937 62.0026L34.4936 62.0029C35.5982 62.0029 36.4936 61.1075 36.4936 60.0029L36.4936 30.003C36.4936 28.8984 35.5982 28.003 34.4936 28.003L14.4937 28.003C13.3891 28.003 12.4936 28.8984 12.4937 30.003L12.4937 60.0026Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.1289 40.6699C45.1289 40.2557 45.4647 39.9199 45.8789 39.9199L67.8786 39.9199C68.2928 39.9199 68.6286 40.2557 68.6286 40.6699C68.6286 41.0841 68.2928 41.4199 67.8786 41.4199L45.8789 41.4199C45.4647 41.4199 45.1289 41.0841 45.1289 40.6699Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.1289 32.0039C45.1289 31.5897 45.4647 31.2539 45.8789 31.2539L67.8786 31.2539C68.2928 31.2539 68.6286 31.5897 68.6286 32.0039C68.6286 32.4181 68.2928 32.7539 67.8786 32.7539L45.8789 32.7539C45.4647 32.7539 45.1289 32.4181 45.1289 32.0039Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.1289 49.3369C45.1289 48.9227 45.4647 48.5869 45.8789 48.5869L67.8789 48.5869C68.2931 48.5869 68.6289 48.9227 68.6289 49.3369C68.6289 49.7511 68.2931 50.0869 67.8789 50.0869L45.8789 50.0869C45.4647 50.0869 45.1289 49.7511 45.1289 49.3369Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.1289 58.0029C45.1289 57.5887 45.4647 57.2529 45.8789 57.2529L56.879 57.2529C57.2932 57.2529 57.629 57.5887 57.629 58.0029C57.629 58.4171 57.2932 58.7529 56.879 58.7529L45.8789 58.7529C45.4647 58.7529 45.1289 58.4171 45.1289 58.0029Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M79.4013 24.9019C79.3854 20.4972 75.8098 16.9314 71.4014 16.9314L9.40142 16.9314C4.98314 16.9314 1.40142 20.5131 1.40142 24.9314L1.40137 16.874C1.40137 12.4557 4.98309 8.87403 9.40137 8.87403L71.4013 8.87402C75.8196 8.87402 79.4013 12.4557 79.4013 16.874V24.9019Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.651422 16.874C0.651429 12.0415 4.56894 8.12403 9.40142 8.12403L71.4014 8.12402C76.2339 8.12402 80.1514 12.0415 80.1514 16.874V64.874C80.1514 69.7065 76.2338 73.6241 71.4013 73.624L9.40129 73.6235C4.56882 73.6234 0.651361 69.7059 0.651367 64.8735L0.651378 56.8491L0.651367 56.8435L0.651422 16.874ZM9.40142 9.62403L71.4014 9.62402C75.4054 9.62402 78.6514 12.87 78.6514 16.874V19.954C77.0782 17.6312 74.4181 16.1046 71.4014 16.1046L9.40142 16.1046C6.38472 16.1046 3.72458 17.6312 2.15142 19.954L2.15142 16.874C2.15143 12.87 5.39736 9.62403 9.40142 9.62403ZM2.15137 64.8735C2.15136 68.8775 5.39726 72.1234 9.4013 72.1235L71.4013 72.124C75.4054 72.1241 78.6514 68.8781 78.6514 64.874L78.6514 24.9046L78.6514 24.9026C78.6358 20.9118 75.3959 17.6814 71.4014 17.6814L9.40147 17.6814C5.39741 17.6814 2.15148 20.9273 2.15147 24.9314L2.15137 64.8735Z" fill="#64748B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_142_9184">
|
||||
<rect width="80" height="80" fill="white" transform="translate(0.401367 0.78125)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
17
briar-android/artwork/il_empty_state_blogs_light.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_142_9186)">
|
||||
<path d="M14.9605 62.0026C13.8559 62.0026 12.9605 61.1071 12.9605 60.0026L12.9604 30.003C12.9604 28.8984 13.8559 28.003 14.9604 28.003L34.9604 28.003C36.065 28.003 36.9604 28.8984 36.9604 30.003L36.9604 60.0029C36.9604 61.1075 36.065 62.0029 34.9604 62.0029L14.9605 62.0026Z" fill="#E5E7EB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.9604 29.503L14.9604 29.503C14.6843 29.503 14.4604 29.7268 14.4604 30.003L14.4605 60.0026C14.4605 60.2787 14.6844 60.5026 14.9605 60.5026L34.9604 60.5029C35.2366 60.5029 35.4604 60.2791 35.4604 60.0029L35.4604 30.003C35.4604 29.7268 35.2366 29.503 34.9604 29.503ZM12.9605 60.0026C12.9605 61.1071 13.8559 62.0026 14.9605 62.0026L34.9604 62.0029C36.065 62.0029 36.9604 61.1075 36.9604 60.0029L36.9604 30.003C36.9604 28.8984 36.065 28.003 34.9604 28.003L14.9604 28.003C13.8559 28.003 12.9604 28.8984 12.9604 30.003L12.9605 60.0026Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.5957 40.6699C45.5957 40.2557 45.9315 39.9199 46.3457 39.9199L68.3454 39.9199C68.7596 39.9199 69.0954 40.2557 69.0954 40.6699C69.0954 41.0841 68.7596 41.4199 68.3454 41.4199L46.3457 41.4199C45.9315 41.4199 45.5957 41.0841 45.5957 40.6699Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.5957 32.0039C45.5957 31.5897 45.9315 31.2539 46.3457 31.2539L68.3454 31.2539C68.7596 31.2539 69.0954 31.5897 69.0954 32.0039C69.0954 32.4181 68.7596 32.7539 68.3454 32.7539L46.3457 32.7539C45.9315 32.7539 45.5957 32.4181 45.5957 32.0039Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.5957 49.3369C45.5957 48.9227 45.9315 48.5869 46.3457 48.5869L68.3457 48.5869C68.7599 48.5869 69.0957 48.9227 69.0957 49.3369C69.0957 49.7511 68.7599 50.0869 68.3457 50.0869L46.3457 50.0869C45.9315 50.0869 45.5957 49.7511 45.5957 49.3369Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.5957 58.0029C45.5957 57.5887 45.9315 57.2529 46.3457 57.2529L57.3458 57.2529C57.76 57.2529 58.0958 57.5887 58.0958 58.0029C58.0958 58.4171 57.76 58.7529 57.3458 58.7529L46.3457 58.7529C45.9315 58.7529 45.5957 58.4171 45.5957 58.0029Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M79.8681 24.9019C79.8522 20.4972 76.2766 16.9314 71.8682 16.9314L9.86821 16.9314C5.44994 16.9314 1.86822 20.5131 1.86822 24.9314L1.86816 16.874C1.86817 12.4557 5.44989 8.87403 9.86816 8.87403L71.8681 8.87402C76.2864 8.87402 79.8681 12.4557 79.8681 16.874V24.9019Z" fill="#E5E7EB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.11822 16.874C1.11823 12.0415 5.03573 8.12403 9.86822 8.12403L71.8682 8.12402C76.7007 8.12402 80.6182 12.0415 80.6182 16.874V64.874C80.6182 69.7065 76.7006 73.6241 71.8681 73.624L9.86809 73.6235C5.03562 73.6234 1.11816 69.7059 1.11816 64.8735L1.11818 56.8491L1.11816 56.8435L1.11822 16.874ZM9.86822 9.62403L71.8682 9.62402C75.8722 9.62402 79.1182 12.87 79.1182 16.874V19.954C77.545 17.6312 74.8849 16.1046 71.8682 16.1046L9.86822 16.1046C6.85152 16.1046 4.19138 17.6312 2.61822 19.954L2.61822 16.874C2.61822 12.87 5.86416 9.62403 9.86822 9.62403ZM2.61816 64.8735C2.61816 68.8775 5.86406 72.1234 9.8681 72.1235L71.8681 72.124C75.8722 72.1241 79.1182 68.8781 79.1182 64.874L79.1182 24.9046L79.1182 24.9026C79.1026 20.9118 75.8627 17.6814 71.8682 17.6814L9.86827 17.6814C5.86421 17.6814 2.61828 20.9273 2.61827 24.9314L2.61816 64.8735Z" fill="#9CA3AF"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_142_9186">
|
||||
<rect width="80" height="80" fill="white" transform="translate(0.868164 0.78125)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,7 @@
|
||||
<svg width="81" height="80" viewBox="0 0 81 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M55.8771 3.19912L71.2942 5.82176C76.4078 6.69164 79.8553 11.4996 79.0387 16.6225L70.73 68.746C69.7481 74.9062 63.0013 78.3146 57.4761 75.4418L58.1751 74.1118C62.7908 76.5117 68.4271 73.6643 69.2474 68.5181L77.5561 16.3946C78.2438 12.0806 75.3406 8.03176 71.0344 7.29922L57.3985 4.9796L58.1751 74.1118L56.6739 74.1365L55.8771 3.19912Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.6021 74.9992L10.6021 4H58.6021C63.0203 4 66.6021 7.58172 66.6021 12V67C66.6021 71.4183 63.0202 75.0001 58.6019 75L10.6021 74.9992ZM22.8896 49.1657V53.0394C22.8896 57.4577 26.4714 61.0394 30.8896 61.0394H46.8472C51.2655 61.0394 54.8472 57.4577 54.8472 53.0394V49.1657C54.8472 44.7474 51.2655 41.1657 46.8472 41.1657H30.8896C26.4714 41.1657 22.8896 44.7474 22.8896 49.1657ZM38.8685 34.8533C43.5566 34.8533 47.3572 31.0717 47.3572 26.4069C47.3572 21.7421 43.5566 17.9606 38.8685 17.9606C34.1803 17.9606 30.3797 21.7421 30.3797 26.4069C30.3797 31.0717 34.1803 34.8533 38.8685 34.8533Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M22.8896 49.1657V53.0394C22.8896 57.4577 26.4714 61.0394 30.8896 61.0394H46.8472C51.2655 61.0394 54.8472 57.4577 54.8472 53.0394V49.1657C54.8472 44.7474 51.2655 41.1657 46.8472 41.1657H30.8896C26.4714 41.1657 22.8896 44.7474 22.8896 49.1657ZM24.3896 53.0394V49.1657C24.3896 45.5758 27.2998 42.6657 30.8896 42.6657H46.8472C50.437 42.6657 53.3472 45.5758 53.3472 49.1657V53.0394C53.3472 56.6293 50.437 59.5394 46.8472 59.5394H30.8896C27.2998 59.5394 24.3896 56.6293 24.3896 53.0394Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.8685 34.8532C43.5566 34.8532 47.3572 31.0717 47.3572 26.4069C47.3572 21.7421 43.5566 17.9606 38.8685 17.9606C34.1803 17.9606 30.3797 21.7421 30.3797 26.4069C30.3797 31.0717 34.1803 34.8532 38.8685 34.8532ZM45.8572 26.4069C45.8572 30.2362 42.7353 33.3533 38.8685 33.3533C35.0016 33.3533 31.8797 30.2362 31.8797 26.4069C31.8797 22.5776 35.0016 19.4606 38.8685 19.4606C42.7353 19.4606 45.8572 22.5776 45.8572 26.4069Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.6021 2.5H9.10205L9.10205 17.7334H3.85059C3.43637 17.7334 3.10059 18.0692 3.10059 18.4834C3.10059 18.8976 3.43637 19.2334 3.85059 19.2334H9.10205L9.10205 38.8779H3.85059C3.43637 38.8779 3.10059 39.2137 3.10059 39.6279C3.10059 40.0421 3.43637 40.3779 3.85059 40.3779H9.10205L9.10205 60.752H3.85059C3.43637 60.752 3.10059 61.0877 3.10059 61.502C3.10059 61.9162 3.43637 62.252 3.85059 62.252H9.10205L9.10205 76.4992L58.6019 76.5C63.8487 76.5001 68.1021 72.2468 68.1021 67V12C68.1021 6.75329 63.8488 2.5 58.6021 2.5ZM10.6021 62.252L10.6021 74.9992L58.6019 75C63.0202 75.0001 66.6021 71.4183 66.6021 67V12C66.6021 7.58172 63.0203 4 58.6021 4H10.6021L10.6021 17.7334H15.6148C16.029 17.7334 16.3648 18.0692 16.3648 18.4834C16.3648 18.8976 16.029 19.2334 15.6148 19.2334H10.6021L10.6021 38.8779H15.6148C16.029 38.8779 16.3648 39.2137 16.3648 39.6279C16.3648 40.0421 16.029 40.3779 15.6148 40.3779H10.6021L10.6021 60.752H15.6148C16.029 60.752 16.3648 61.0877 16.3648 61.502C16.3648 61.9162 16.029 62.252 15.6148 62.252H10.6021Z" fill="#64748B"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,7 @@
|
||||
<svg width="81" height="80" viewBox="0 0 81 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.8771 3.19912L70.2942 5.82176C75.4078 6.69164 78.8553 11.4996 78.0387 16.6225L69.73 68.746C68.7481 74.9062 62.0013 78.3146 56.4761 75.4418L57.1751 74.1118C61.7908 76.5117 67.4271 73.6643 68.2474 68.5181L76.5561 16.3946C77.2438 12.0806 74.3406 8.03176 70.0344 7.29922L56.3985 4.9796L57.1751 74.1118L55.6739 74.1365L54.8771 3.19912Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.60205 74.9992L9.60205 4H57.6021C62.0203 4 65.6021 7.58172 65.6021 12V67C65.6021 71.4183 62.0202 75.0001 57.6019 75L9.60205 74.9992ZM21.8896 49.1657V53.0394C21.8896 57.4577 25.4714 61.0394 29.8896 61.0394H45.8472C50.2655 61.0394 53.8472 57.4577 53.8472 53.0394V49.1657C53.8472 44.7474 50.2655 41.1657 45.8472 41.1657H29.8896C25.4714 41.1657 21.8896 44.7474 21.8896 49.1657ZM37.8685 34.8533C42.5566 34.8533 46.3572 31.0717 46.3572 26.4069C46.3572 21.7421 42.5566 17.9606 37.8685 17.9606C33.1803 17.9606 29.3797 21.7421 29.3797 26.4069C29.3797 31.0717 33.1803 34.8533 37.8685 34.8533Z" fill="#E5E7EB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.8896 49.1657V53.0394C21.8896 57.4577 25.4714 61.0394 29.8896 61.0394H45.8472C50.2655 61.0394 53.8472 57.4577 53.8472 53.0394V49.1657C53.8472 44.7474 50.2655 41.1657 45.8472 41.1657H29.8896C25.4714 41.1657 21.8896 44.7474 21.8896 49.1657ZM23.3896 53.0394V49.1657C23.3896 45.5758 26.2998 42.6657 29.8896 42.6657H45.8472C49.437 42.6657 52.3472 45.5758 52.3472 49.1657V53.0394C52.3472 56.6293 49.437 59.5394 45.8472 59.5394H29.8896C26.2998 59.5394 23.3896 56.6293 23.3896 53.0394Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M37.8685 34.8532C42.5566 34.8532 46.3572 31.0717 46.3572 26.4069C46.3572 21.7421 42.5566 17.9606 37.8685 17.9606C33.1803 17.9606 29.3797 21.7421 29.3797 26.4069C29.3797 31.0717 33.1803 34.8532 37.8685 34.8532ZM44.8572 26.4069C44.8572 30.2362 41.7353 33.3533 37.8685 33.3533C34.0016 33.3533 30.8797 30.2362 30.8797 26.4069C30.8797 22.5776 34.0016 19.4606 37.8685 19.4606C41.7353 19.4606 44.8572 22.5776 44.8572 26.4069Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M57.6021 2.5H8.10205L8.10205 17.7334H2.85059C2.43637 17.7334 2.10059 18.0692 2.10059 18.4834C2.10059 18.8976 2.43637 19.2334 2.85059 19.2334H8.10205L8.10205 38.8779H2.85059C2.43637 38.8779 2.10059 39.2137 2.10059 39.6279C2.10059 40.0421 2.43637 40.3779 2.85059 40.3779H8.10205L8.10205 60.752H2.85059C2.43637 60.752 2.10059 61.0877 2.10059 61.502C2.10059 61.9162 2.43637 62.252 2.85059 62.252H8.10205L8.10205 76.4992L57.6019 76.5C62.8487 76.5001 67.1021 72.2468 67.1021 67V12C67.1021 6.75329 62.8488 2.5 57.6021 2.5ZM9.60205 62.252L9.60205 74.9992L57.6019 75C62.0202 75.0001 65.6021 71.4183 65.6021 67V12C65.6021 7.58172 62.0203 4 57.6021 4H9.60205L9.60205 17.7334H14.6148C15.029 17.7334 15.3648 18.0692 15.3648 18.4834C15.3648 18.8976 15.029 19.2334 14.6148 19.2334H9.60205L9.60205 38.8779H14.6148C15.029 38.8779 15.3648 39.2137 15.3648 39.6279C15.3648 40.0421 15.029 40.3779 14.6148 40.3779H9.60205L9.60205 60.752H14.6148C15.029 60.752 15.3648 61.0877 15.3648 61.502C15.3648 61.9162 15.029 62.252 14.6148 62.252H9.60205Z" fill="#9CA3AF"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
11
briar-android/artwork/il_empty_state_forum_list_dark.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_142_9249)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3936 48.6422V58.2131C20.3936 62.6314 23.9753 66.2131 28.3936 66.2131H63.0813L79.4015 75.3286V30.9092C79.4015 26.4909 75.8198 22.9092 71.4015 22.9092H60.4067V40.6422C60.4067 45.0605 56.825 48.6422 52.4067 48.6422H20.3936Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.40137 4.5791C4.56888 4.5791 0.651367 8.4966 0.651367 13.3291V59.0201L17.9148 49.3778H19.6436V58.2131C19.6436 63.0456 23.5611 66.9631 28.3936 66.9631H62.8861L80.1515 76.6065V30.9092C80.1515 26.0767 76.234 22.1592 71.4015 22.1592H61.1522V13.3291C61.1522 8.49661 57.2347 4.5791 52.4022 4.5791H9.40137ZM2.15137 13.3291C2.15137 9.32503 5.3973 6.0791 9.40137 6.0791H52.4022C56.4062 6.0791 59.6522 9.32504 59.6522 13.3291V40.6278C59.6522 44.6319 56.4062 47.8778 52.4022 47.8778H17.5243L2.15137 56.4642V13.3291ZM61.1567 40.6422V23.6592H71.4015C75.4055 23.6592 78.6515 26.9051 78.6515 30.9092V74.0506L63.2766 65.4631H28.3936C24.3895 65.4631 21.1436 62.2172 21.1436 58.2131V49.3922H52.4067C57.2392 49.3922 61.1567 45.4747 61.1567 40.6422Z" fill="#64748B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_142_9249">
|
||||
<rect width="80" height="80" fill="white" transform="translate(0.401367 0.0859375)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
11
briar-android/artwork/il_empty_state_forum_list_light.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_142_9251)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.3936 48.6422V58.2131C20.3936 62.6314 23.9753 66.2131 28.3936 66.2131H63.0813L79.4015 75.3286V30.9092C79.4015 26.4909 75.8198 22.9092 71.4015 22.9092H60.4067V40.6422C60.4067 45.0605 56.825 48.6422 52.4067 48.6422H20.3936Z" fill="#E5E7EB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.40137 4.5791C4.56888 4.5791 0.651367 8.4966 0.651367 13.3291V59.0201L17.9148 49.3778H19.6436V58.2131C19.6436 63.0456 23.5611 66.9631 28.3936 66.9631H62.8861L80.1515 76.6065V30.9092C80.1515 26.0767 76.234 22.1592 71.4015 22.1592H61.1522V13.3291C61.1522 8.49661 57.2347 4.5791 52.4022 4.5791H9.40137ZM2.15137 13.3291C2.15137 9.32503 5.3973 6.0791 9.40137 6.0791H52.4022C56.4062 6.0791 59.6522 9.32504 59.6522 13.3291V40.6278C59.6522 44.6319 56.4062 47.8778 52.4022 47.8778H17.5243L2.15137 56.4642V13.3291ZM61.1567 40.6422V23.6592H71.4015C75.4055 23.6592 78.6515 26.9051 78.6515 30.9092V74.0506L63.2766 65.4631H28.3936C24.3895 65.4631 21.1436 62.2172 21.1436 58.2131V49.3922H52.4067C57.2392 49.3922 61.1567 45.4747 61.1567 40.6422Z" fill="#9CA3AF"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_142_9251">
|
||||
<rect width="80" height="80" fill="white" transform="translate(0.868164 0.0859375)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
13
briar-android/artwork/il_empty_state_group_list_dark.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_142_9298)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.6662 16.6539C48.6662 21.2186 44.9657 24.9191 40.401 24.9191C35.8362 24.9191 32.1357 21.2186 32.1357 16.6539C32.1357 12.0891 35.8362 8.38867 40.401 8.38867C44.9657 8.38867 48.6662 12.0891 48.6662 16.6539ZM47.1662 16.6539C47.1662 20.3902 44.1373 23.4191 40.401 23.4191C36.6646 23.4191 33.6357 20.3902 33.6357 16.6539C33.6357 12.9176 36.6646 9.88867 40.401 9.88867C44.1373 9.88867 47.1662 12.9176 47.1662 16.6539Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.2785 25.9195C25.2785 30.4843 21.578 34.1847 17.0133 34.1847C12.4485 34.1847 8.74805 30.4843 8.74805 25.9195C8.74805 21.3548 12.4485 17.6543 17.0133 17.6543C21.578 17.6543 25.2785 21.3548 25.2785 25.9195ZM23.7785 25.9195C23.7785 29.6558 20.7496 32.6847 17.0133 32.6847C13.2769 32.6847 10.248 29.6558 10.248 25.9195C10.248 22.1832 13.2769 19.1543 17.0133 19.1543C20.7496 19.1543 23.7785 22.1832 23.7785 25.9195Z" fill="#64748B"/>
|
||||
<path d="M2.15137 49.1689C2.15137 45.1649 5.3973 41.9189 9.40137 41.9189H24.0391V61.1648C24.0391 61.579 24.3748 61.9148 24.7891 61.9148C25.2033 61.9148 25.5391 61.579 25.5391 61.1648V41.976C29.1119 42.4252 31.8755 45.4743 31.8755 49.1689V72.3931C31.8755 72.8073 32.2113 73.1431 32.6255 73.1431C33.0397 73.1431 33.3755 72.8073 33.3755 72.3931V49.1689C33.3755 44.645 29.9422 40.9229 25.5391 40.4661V39.7774C25.5391 35.7733 28.785 32.5273 32.7891 32.5273H48.0132C52.0173 32.5273 55.2632 35.7733 55.2632 39.7773V40.4661C50.8603 40.9231 47.4272 44.6451 47.4272 49.169V70.5564C47.4272 70.9706 47.763 71.3064 48.1772 71.3064C48.5915 71.3064 48.9272 70.9706 48.9272 70.5564V49.169C48.9272 45.4745 51.6906 42.4254 55.2632 41.976V61.1648C55.2632 61.579 55.599 61.9148 56.0132 61.9148C56.4274 61.9148 56.7632 61.579 56.7632 61.1648V41.9189H71.4014C75.4054 41.9189 78.6514 45.1649 78.6514 49.1689V70.5564C78.6514 70.9706 78.9872 71.3064 79.4014 71.3064C79.8156 71.3064 80.1514 70.9706 80.1514 70.5564V49.1689C80.1514 44.3365 76.2339 40.4189 71.4014 40.4189H56.7632V39.7773C56.7632 34.9449 52.8457 31.0273 48.0132 31.0273H32.7891C27.9566 31.0273 24.0391 34.9449 24.0391 39.7774V40.4189H9.40137C4.56888 40.4189 0.651367 44.3365 0.651367 49.1689V72.3931C0.651367 72.8073 0.987154 73.1431 1.40137 73.1431C1.81558 73.1431 2.15137 72.8073 2.15137 72.3931V49.1689Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M72.0543 25.9195C72.0543 30.4843 68.3539 34.1847 63.7891 34.1847C59.2244 34.1847 55.5239 30.4843 55.5239 25.9195C55.5239 21.3548 59.2244 17.6543 63.7891 17.6543C68.3539 17.6543 72.0543 21.3548 72.0543 25.9195ZM70.5543 25.9195C70.5543 29.6558 67.5255 32.6847 63.7891 32.6847C60.0528 32.6847 57.0239 29.6558 57.0239 25.9195C57.0239 22.1832 60.0528 19.1543 63.7891 19.1543C67.5255 19.1543 70.5543 22.1832 70.5543 25.9195Z" fill="#64748B"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_142_9298">
|
||||
<rect width="80" height="80" fill="white" transform="translate(0.401367 0.390625)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
13
briar-android/artwork/il_empty_state_group_list_light.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<svg width="81" height="81" viewBox="0 0 81 81" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_142_9300)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.1334 16.6539C49.1334 21.2186 45.4329 24.919 40.8682 24.919C36.3035 24.919 32.603 21.2186 32.603 16.6539C32.603 12.0891 36.3035 8.38867 40.8682 8.38867C45.4329 8.38867 49.1334 12.0891 49.1334 16.6539ZM47.6334 16.6539C47.6334 20.3902 44.6045 23.419 40.8682 23.419C37.1319 23.419 34.103 20.3902 34.103 16.6539C34.103 12.9175 37.1319 9.88867 40.8682 9.88867C44.6045 9.88867 47.6334 12.9175 47.6334 16.6539Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M25.7452 25.9195C25.7452 30.4842 22.0448 34.1847 17.48 34.1847C12.9153 34.1847 9.21484 30.4842 9.21484 25.9195C9.21484 21.3547 12.9153 17.6543 17.48 17.6543C22.0448 17.6543 25.7452 21.3547 25.7452 25.9195ZM24.2452 25.9195C24.2452 29.6558 21.2163 32.6847 17.48 32.6847C13.7437 32.6847 10.7148 29.6558 10.7148 25.9195C10.7148 22.1832 13.7437 19.1543 17.48 19.1543C21.2163 19.1543 24.2452 22.1832 24.2452 25.9195Z" fill="#9CA3AF"/>
|
||||
<path d="M2.61816 49.168C2.61816 45.1639 5.8641 41.918 9.86816 41.918H24.5063V61.1647C24.5063 61.5789 24.8421 61.9147 25.2563 61.9147C25.6706 61.9147 26.0063 61.5789 26.0063 61.1647V41.975C29.5789 42.4245 32.3422 45.4735 32.3422 49.168V72.392C32.3422 72.8062 32.678 73.142 33.0922 73.142C33.5064 73.142 33.8422 72.8062 33.8422 72.392V49.168C33.8422 44.6442 30.4092 40.9222 26.0063 40.4651V39.7773C26.0063 35.7733 29.2523 32.5273 33.2563 32.5273H48.4804C52.4845 32.5273 55.7304 35.7733 55.7304 39.7773V40.4651C51.3273 40.9219 47.894 44.644 47.894 49.168V70.5553C47.894 70.9695 48.2298 71.3053 48.644 71.3053C49.0583 71.3053 49.394 70.9695 49.394 70.5553V49.168C49.394 45.4734 52.1576 42.4242 55.7304 41.975V61.1647C55.7304 61.5789 56.0662 61.9147 56.4804 61.9147C56.8946 61.9147 57.2304 61.5789 57.2304 61.1647V41.918H71.8681C75.8721 41.918 79.1181 45.1639 79.1181 49.168V70.5553C79.1181 70.9695 79.4539 71.3053 79.8681 71.3053C80.2823 71.3053 80.6181 70.9695 80.6181 70.5553V49.168C80.6181 44.3355 76.7006 40.418 71.8681 40.418H57.2304V39.7773C57.2304 34.9449 53.3129 31.0273 48.4804 31.0273H33.2563C28.4239 31.0273 24.5063 34.9449 24.5063 39.7773V40.418H9.86816C5.03567 40.418 1.11816 44.3355 1.11816 49.168V72.392C1.11816 72.8062 1.45395 73.142 1.86816 73.142C2.28238 73.142 2.61816 72.8062 2.61816 72.392V49.168Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M72.5216 25.9195C72.5216 30.4842 68.8211 34.1847 64.2564 34.1847C59.6917 34.1847 55.9912 30.4842 55.9912 25.9195C55.9912 21.3547 59.6917 17.6543 64.2564 17.6543C68.8211 17.6543 72.5216 21.3547 72.5216 25.9195ZM71.0216 25.9195C71.0216 29.6558 67.9927 32.6847 64.2564 32.6847C60.5201 32.6847 57.4912 29.6558 57.4912 25.9195C57.4912 22.1832 60.5201 19.1543 64.2564 19.1543C67.9927 19.1543 71.0216 22.1832 71.0216 25.9195Z" fill="#9CA3AF"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_142_9300">
|
||||
<rect width="80" height="80" fill="white" transform="translate(0.868164 0.390625)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
37
briar-android/artwork/il_mailbox_dark.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M112.401 21C112.401 16.5817 108.82 13 104.401 13H88.4014C83.9831 13 80.4014 16.5817 80.4014 21V37C80.4014 41.4183 83.9831 45 88.4014 45H104.401C108.82 45 112.401 41.4183 112.401 37V21Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M88.4014 14.5H104.401C107.991 14.5 110.901 17.4101 110.901 21V37C110.901 40.5899 107.991 43.5 104.401 43.5H88.4014C84.8115 43.5 81.9014 40.5899 81.9014 37V21C81.9014 17.4101 84.8115 14.5 88.4014 14.5ZM104.401 13C108.82 13 112.401 16.5817 112.401 21V37C112.401 41.4183 108.82 45 104.401 45H88.4014C83.9831 45 80.4014 41.4183 80.4014 37V21C80.4014 16.5817 83.9831 13 88.4014 13H104.401Z" fill="#52ADF9"/>
|
||||
<path d="M60.4014 127C60.4014 122.582 56.8196 119 52.4014 119H36.4014C31.9831 119 28.4014 122.582 28.4014 127V143C28.4014 147.418 31.9831 151 36.4014 151H52.4014C56.8196 151 60.4014 147.418 60.4014 143V127Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.4014 120.5H52.4014C55.9912 120.5 58.9014 123.41 58.9014 127V143C58.9014 146.59 55.9912 149.5 52.4014 149.5H36.4014C32.8115 149.5 29.9014 146.59 29.9014 143V127C29.9014 123.41 32.8115 120.5 36.4014 120.5ZM52.4014 119C56.8196 119 60.4014 122.582 60.4014 127V143C60.4014 147.418 56.8196 151 52.4014 151H36.4014C31.9831 151 28.4014 147.418 28.4014 143V127C28.4014 122.582 31.9831 119 36.4014 119H52.4014Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.6514 116L43.6514 100L45.1514 100L45.1514 116L43.6514 116Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M95.6514 66L95.6514 48L97.1514 48L97.1514 66L95.6514 66Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M95.6514 155L95.6514 126L97.1514 126L97.1514 155L95.6514 155Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M150.151 67V92H148.651V67H150.151Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M149.171 96.4512H126.401V94.9512H149.171C153.579 94.9512 157.151 98.524 157.151 102.931L157.151 121.701L155.651 121.701L155.651 102.931C155.651 99.3524 152.75 96.4512 149.171 96.4512Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.6314 95.25L66.4014 95.25L66.4014 96.75L43.6314 96.75C39.2241 96.75 35.6514 93.1772 35.6515 88.77L35.6518 70L37.1518 70L37.1515 88.77C37.1514 92.3488 40.0526 95.25 43.6314 95.25Z" fill="#A3E635"/>
|
||||
<path d="M157.401 52C157.401 49.7909 155.611 48 153.401 48H145.401C143.192 48 141.401 49.7909 141.401 52V60C141.401 62.2091 143.192 64 145.401 64H153.401C155.611 64 157.401 62.2091 157.401 60V52Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.401 49.5H153.401C154.782 49.5 155.901 50.6193 155.901 52V60C155.901 61.3807 154.782 62.5 153.401 62.5H145.401C144.021 62.5 142.901 61.3807 142.901 60V52C142.901 50.6193 144.021 49.5 145.401 49.5ZM153.401 48C155.611 48 157.401 49.7909 157.401 52V60C157.401 62.2091 155.611 64 153.401 64H145.401C143.192 64 141.401 62.2091 141.401 60V52C141.401 49.7909 143.192 48 145.401 48H153.401Z" fill="#64748B"/>
|
||||
<path d="M104.401 162C104.401 159.791 102.611 158 100.401 158H92.4014C90.1922 158 88.4014 159.791 88.4014 162V170C88.4014 172.209 90.1922 174 92.4014 174H100.401C102.611 174 104.401 172.209 104.401 170V162Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M92.4014 159.5H100.401C101.782 159.5 102.901 160.619 102.901 162V170C102.901 171.381 101.782 172.5 100.401 172.5H92.4014C91.0207 172.5 89.9014 171.381 89.9014 170V162C89.9014 160.619 91.0207 159.5 92.4014 159.5ZM100.401 158C102.611 158 104.401 159.791 104.401 162V170C104.401 172.209 102.611 174 100.401 174H92.4014C90.1922 174 88.4014 172.209 88.4014 170V162C88.4014 159.791 90.1922 158 92.4014 158H100.401Z" fill="#64748B"/>
|
||||
<path d="M123.242 81C123.242 74.3726 117.87 69 111.242 69H81.2422C74.6148 69 69.2422 74.3726 69.2422 81V111C69.2422 117.627 74.6148 123 81.2422 123H111.242C117.87 123 123.242 117.627 123.242 111V81Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M81.2422 70.5H111.242C117.041 70.5 121.742 75.201 121.742 81V111C121.742 116.799 117.041 121.5 111.242 121.5H81.2422C75.4432 121.5 70.7422 116.799 70.7422 111V81C70.7422 75.201 75.4432 70.5 81.2422 70.5ZM111.242 69C117.87 69 123.242 74.3726 123.242 81V111C123.242 117.627 117.87 123 111.242 123H81.2422C74.6148 123 69.2422 117.627 69.2422 111V81C69.2422 74.3726 74.6148 69 81.2422 69H111.242Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M86.1254 83.5728H105.57C106.307 83.5728 107.013 83.8671 107.534 84.3911C108.055 84.9151 108.348 85.6257 108.348 86.3667L108.348 110.313C108.348 111.38 107.11 111.962 106.296 111.278L101.256 107.573H86.1254C85.3887 107.573 84.6822 107.278 84.1613 106.754C83.6403 106.23 83.3477 105.52 83.3477 104.779V86.3667C83.3477 85.6257 83.6403 84.9151 84.1613 84.3911C84.6822 83.8671 85.3887 83.5728 86.1254 83.5728ZM93.5152 95.9531H87.7921V88.0431H103.903V95.9531H98.2747V98.6887H100.333C100.705 98.6887 100.891 99.1402 100.628 99.4042L96.1896 103.869C96.0269 104.032 95.7631 104.032 95.6004 103.869L91.1619 99.4042C90.8994 99.1402 91.0853 98.6887 91.4566 98.6887H93.5152V95.9531Z" fill="#A3E635"/>
|
||||
<path d="M172.401 132C172.401 127.582 168.82 124 164.401 124H148.401C143.983 124 140.401 127.582 140.401 132V148C140.401 152.418 143.983 156 148.401 156H164.401C168.82 156 172.401 152.418 172.401 148V132Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M148.401 125.5H164.401C167.991 125.5 170.901 128.41 170.901 132V148C170.901 151.59 167.991 154.5 164.401 154.5H148.401C144.812 154.5 141.901 151.59 141.901 148V132C141.901 128.41 144.812 125.5 148.401 125.5ZM164.401 124C168.82 124 172.401 127.582 172.401 132V148C172.401 152.418 168.82 156 164.401 156H148.401C143.983 156 140.401 152.418 140.401 148V132C140.401 127.582 143.983 124 148.401 124H164.401Z" fill="#A3E635"/>
|
||||
<path d="M152 138.541V145.66C152 146.238 152.471 146.714 153.054 146.714H153.549C154.127 146.714 154.603 146.238 154.603 145.66V138.541H152Z" fill="#82C91E"/>
|
||||
<path d="M154.597 135.109V133.769C154.597 133.191 154.127 132.714 153.549 132.714H153.054C152.477 132.714 152 133.191 152 133.769V135.109H154.597Z" fill="#82C91E"/>
|
||||
<path d="M160.376 140.888V133.769C160.376 133.191 159.906 132.714 159.328 132.714H158.833C158.255 132.714 157.779 133.191 157.779 133.769V140.888H160.376Z" fill="#82C91E"/>
|
||||
<path d="M157.779 144.319V145.66C157.779 146.238 158.255 146.714 158.833 146.714H159.328C159.906 146.714 160.382 146.238 160.382 145.66V144.319H157.779Z" fill="#82C91E"/>
|
||||
<path d="M151.583 141.305H150.243C149.665 141.305 149.188 141.775 149.188 142.359V142.854C149.188 143.431 149.659 143.908 150.243 143.908H151.583V141.305Z" fill="#A3E635"/>
|
||||
<path d="M162.134 141.305H155.015V143.908H162.134C162.712 143.908 163.188 143.431 163.188 142.854V142.359C163.188 141.775 162.712 141.305 162.134 141.305Z" fill="#A3E635"/>
|
||||
<path d="M157.362 135.526H150.243C149.665 135.526 149.188 135.997 149.188 136.58V137.075C149.188 137.653 149.659 138.129 150.243 138.129H157.362V135.526Z" fill="#A3E635"/>
|
||||
<path d="M162.134 135.526H160.794V138.129H162.134C162.712 138.129 163.188 137.659 163.188 137.075V136.58C163.188 135.997 162.712 135.526 162.134 135.526Z" fill="#A3E635"/>
|
||||
<path d="M28.0254 50.6526V64.891C28.0254 66.0468 28.9667 67 30.1343 67H31.1233C32.279 67 33.2322 66.0468 33.2322 64.891V50.6526H28.0254Z" fill="#82C91E"/>
|
||||
<path d="M33.2203 43.7899V41.109C33.2203 39.9532 32.279 39 31.1233 39H30.1343C28.9786 39 28.0254 39.9532 28.0254 41.109V43.7899H33.2203Z" fill="#82C91E"/>
|
||||
<path d="M44.7777 55.3474V41.109C44.7777 39.9532 43.8364 39 42.6807 39H41.6917C40.536 39 39.5828 39.9532 39.5828 41.109V55.3474H44.7777Z" fill="#82C91E"/>
|
||||
<path d="M39.5828 62.2099V64.8908C39.5828 66.0466 40.536 66.9998 41.6917 66.9998H42.6807C43.8364 66.9998 44.7896 66.0466 44.7896 64.8908V62.2099H39.5828Z" fill="#82C91E"/>
|
||||
<path d="M27.1912 56.1805H24.5103C23.3546 56.1805 22.4014 57.1218 22.4014 58.2894V59.2784C22.4014 60.4341 23.3426 61.3873 24.5103 61.3873H27.1912V56.1805Z" fill="#A3E635"/>
|
||||
<path d="M48.2924 56.1805H34.054V61.3873H48.2924C49.4481 61.3873 50.4013 60.4341 50.4013 59.2784V58.2894C50.4013 57.1218 49.4481 56.1805 48.2924 56.1805Z" fill="#A3E635"/>
|
||||
<path d="M38.7486 44.6231H24.5103C23.3546 44.6231 22.4014 45.5644 22.4014 46.7321V47.721C22.4014 48.8768 23.3426 49.83 24.5103 49.83H38.7486V44.6231Z" fill="#A3E635"/>
|
||||
<path d="M48.2924 44.623H45.6116V49.8299H48.2924C49.4482 49.8299 50.4014 48.8886 50.4014 47.721V46.732C50.4014 45.5643 49.4482 44.623 48.2924 44.623Z" fill="#A3E635"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.4 KiB |
37
briar-android/artwork/il_mailbox_light.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M112.401 21C112.401 16.5817 108.82 13 104.401 13H88.4014C83.9831 13 80.4014 16.5817 80.4014 21V37C80.4014 41.4183 83.9831 45 88.4014 45H104.401C108.82 45 112.401 41.4183 112.401 37V21Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M88.4014 14.5H104.401C107.991 14.5 110.901 17.4101 110.901 21V37C110.901 40.5899 107.991 43.5 104.401 43.5H88.4014C84.8115 43.5 81.9014 40.5899 81.9014 37V21C81.9014 17.4101 84.8115 14.5 88.4014 14.5ZM104.401 13C108.82 13 112.401 16.5817 112.401 21V37C112.401 41.4183 108.82 45 104.401 45H88.4014C83.9831 45 80.4014 41.4183 80.4014 37V21C80.4014 16.5817 83.9831 13 88.4014 13H104.401Z" fill="#196FDE"/>
|
||||
<path d="M60.4014 127C60.4014 122.582 56.8196 119 52.4014 119H36.4014C31.9831 119 28.4014 122.582 28.4014 127V143C28.4014 147.418 31.9831 151 36.4014 151H52.4014C56.8196 151 60.4014 147.418 60.4014 143V127Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.4014 120.5H52.4014C55.9912 120.5 58.9014 123.41 58.9014 127V143C58.9014 146.59 55.9912 149.5 52.4014 149.5H36.4014C32.8115 149.5 29.9014 146.59 29.9014 143V127C29.9014 123.41 32.8115 120.5 36.4014 120.5ZM52.4014 119C56.8196 119 60.4014 122.582 60.4014 127V143C60.4014 147.418 56.8196 151 52.4014 151H36.4014C31.9831 151 28.4014 147.418 28.4014 143V127C28.4014 122.582 31.9831 119 36.4014 119H52.4014Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.6514 116L43.6514 100L45.1514 100L45.1514 116L43.6514 116Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M95.6514 66L95.6514 48L97.1514 48L97.1514 66L95.6514 66Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M95.6514 155L95.6514 126L97.1514 126L97.1514 155L95.6514 155Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M150.151 67V92H148.651V67H150.151Z" fill="#9CA3AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M149.171 96.4512H126.401V94.9512H149.171C153.579 94.9512 157.151 98.524 157.151 102.931L157.151 121.701L155.651 121.701L155.651 102.931C155.651 99.3524 152.75 96.4512 149.171 96.4512Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.6314 95.25L66.4014 95.25L66.4014 96.75L43.6314 96.75C39.2241 96.75 35.6514 93.1772 35.6515 88.77L35.6518 70L37.1518 70L37.1515 88.77C37.1514 92.3488 40.0526 95.25 43.6314 95.25Z" fill="#65A30D"/>
|
||||
<path d="M157.401 52C157.401 49.7909 155.611 48 153.401 48H145.401C143.192 48 141.401 49.7909 141.401 52V60C141.401 62.2091 143.192 64 145.401 64H153.401C155.611 64 157.401 62.2091 157.401 60V52Z" fill="#E5E7EB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.401 49.5H153.401C154.782 49.5 155.901 50.6193 155.901 52V60C155.901 61.3807 154.782 62.5 153.401 62.5H145.401C144.021 62.5 142.901 61.3807 142.901 60V52C142.901 50.6193 144.021 49.5 145.401 49.5ZM153.401 48C155.611 48 157.401 49.7909 157.401 52V60C157.401 62.2091 155.611 64 153.401 64H145.401C143.192 64 141.401 62.2091 141.401 60V52C141.401 49.7909 143.192 48 145.401 48H153.401Z" fill="#9CA3AF"/>
|
||||
<path d="M104.401 162C104.401 159.791 102.611 158 100.401 158H92.4014C90.1922 158 88.4014 159.791 88.4014 162V170C88.4014 172.209 90.1922 174 92.4014 174H100.401C102.611 174 104.401 172.209 104.401 170V162Z" fill="#E5E7EB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M92.4014 159.5H100.401C101.782 159.5 102.901 160.619 102.901 162V170C102.901 171.381 101.782 172.5 100.401 172.5H92.4014C91.0207 172.5 89.9014 171.381 89.9014 170V162C89.9014 160.619 91.0207 159.5 92.4014 159.5ZM100.401 158C102.611 158 104.401 159.791 104.401 162V170C104.401 172.209 102.611 174 100.401 174H92.4014C90.1922 174 88.4014 172.209 88.4014 170V162C88.4014 159.791 90.1922 158 92.4014 158H100.401Z" fill="#9CA3AF"/>
|
||||
<path d="M123.242 81C123.242 74.3726 117.87 69 111.242 69H81.2422C74.6148 69 69.2422 74.3726 69.2422 81V111C69.2422 117.627 74.6148 123 81.2422 123H111.242C117.87 123 123.242 117.627 123.242 111V81Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M81.2422 70.5H111.242C117.041 70.5 121.742 75.201 121.742 81V111C121.742 116.799 117.041 121.5 111.242 121.5H81.2422C75.4432 121.5 70.7422 116.799 70.7422 111V81C70.7422 75.201 75.4432 70.5 81.2422 70.5ZM111.242 69C117.87 69 123.242 74.3726 123.242 81V111C123.242 117.627 117.87 123 111.242 123H81.2422C74.6148 123 69.2422 117.627 69.2422 111V81C69.2422 74.3726 74.6148 69 81.2422 69H111.242Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M86.9663 83.5728H106.411C107.147 83.5728 107.854 83.8671 108.375 84.3911C108.896 84.9151 109.188 85.6257 109.188 86.3667L109.188 110.313C109.188 111.38 107.951 111.962 107.137 111.278L102.097 107.573H86.9663C86.2295 107.573 85.523 107.278 85.0021 106.754C84.4811 106.23 84.1885 105.52 84.1885 104.779V86.3667C84.1885 85.6257 84.4811 84.9151 85.0021 84.3911C85.523 83.8671 86.2295 83.5728 86.9663 83.5728ZM94.356 95.9531H88.6329V88.0431H104.744V95.9531H99.1156V98.6887H101.174C101.545 98.6887 101.731 99.1402 101.469 99.4042L97.0304 103.869C96.8677 104.032 96.6039 104.032 96.4412 103.869L92.0027 99.4042C91.7403 99.1402 91.9262 98.6887 92.2974 98.6887H94.356V95.9531Z" fill="#82C91E"/>
|
||||
<path d="M172.401 132C172.401 127.582 168.82 124 164.401 124H148.401C143.983 124 140.401 127.582 140.401 132V148C140.401 152.418 143.983 156 148.401 156H164.401C168.82 156 172.401 152.418 172.401 148V132Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M148.401 125.5H164.401C167.991 125.5 170.901 128.41 170.901 132V148C170.901 151.59 167.991 154.5 164.401 154.5H148.401C144.812 154.5 141.901 151.59 141.901 148V132C141.901 128.41 144.812 125.5 148.401 125.5ZM164.401 124C168.82 124 172.401 127.582 172.401 132V148C172.401 152.418 168.82 156 164.401 156H148.401C143.983 156 140.401 152.418 140.401 148V132C140.401 127.582 143.983 124 148.401 124H164.401Z" fill="#65A30D"/>
|
||||
<path d="M152 138.541V145.66C152 146.238 152.471 146.714 153.055 146.714H153.549C154.127 146.714 154.604 146.238 154.604 145.66V138.541H152Z" fill="#82C91E"/>
|
||||
<path d="M154.598 135.109V133.769C154.598 133.191 154.127 132.714 153.549 132.714H153.055C152.477 132.714 152 133.191 152 133.769V135.109H154.598Z" fill="#82C91E"/>
|
||||
<path d="M160.377 140.888V133.769C160.377 133.191 159.906 132.714 159.328 132.714H158.834C158.256 132.714 157.779 133.191 157.779 133.769V140.888H160.377Z" fill="#82C91E"/>
|
||||
<path d="M157.779 144.319V145.66C157.779 146.238 158.256 146.714 158.834 146.714H159.328C159.906 146.714 160.383 146.238 160.383 145.66V144.319H157.779Z" fill="#82C91E"/>
|
||||
<path d="M151.583 141.305H150.243C149.665 141.305 149.188 141.775 149.188 142.359V142.854C149.188 143.431 149.659 143.908 150.243 143.908H151.583V141.305Z" fill="#A3E635"/>
|
||||
<path d="M162.134 141.305H155.015V143.908H162.134C162.712 143.908 163.188 143.431 163.188 142.854V142.359C163.188 141.775 162.712 141.305 162.134 141.305Z" fill="#A3E635"/>
|
||||
<path d="M157.362 135.526H150.243C149.665 135.526 149.188 135.997 149.188 136.58V137.075C149.188 137.653 149.659 138.129 150.243 138.129H157.362V135.526Z" fill="#A3E635"/>
|
||||
<path d="M162.134 135.526H160.794V138.129H162.134C162.712 138.129 163.188 137.659 163.188 137.075V136.58C163.188 135.997 162.712 135.526 162.134 135.526Z" fill="#A3E635"/>
|
||||
<path d="M28.0254 50.6526V64.891C28.0254 66.0468 28.9667 67 30.1343 67H31.1233C32.279 67 33.2322 66.0468 33.2322 64.891V50.6526H28.0254Z" fill="#82C91E"/>
|
||||
<path d="M33.2203 43.7899V41.109C33.2203 39.9532 32.279 39 31.1233 39H30.1343C28.9786 39 28.0254 39.9532 28.0254 41.109V43.7899H33.2203Z" fill="#82C91E"/>
|
||||
<path d="M44.7777 55.3474V41.109C44.7777 39.9532 43.8364 39 42.6807 39H41.6917C40.536 39 39.5828 39.9532 39.5828 41.109V55.3474H44.7777Z" fill="#82C91E"/>
|
||||
<path d="M39.5828 62.2099V64.8908C39.5828 66.0466 40.536 66.9998 41.6917 66.9998H42.6807C43.8364 66.9998 44.7896 66.0466 44.7896 64.8908V62.2099H39.5828Z" fill="#82C91E"/>
|
||||
<path d="M27.1912 56.1805H24.5103C23.3546 56.1805 22.4014 57.1218 22.4014 58.2894V59.2784C22.4014 60.4341 23.3426 61.3873 24.5103 61.3873H27.1912V56.1805Z" fill="#A3E635"/>
|
||||
<path d="M48.2924 56.1805H34.054V61.3873H48.2924C49.4481 61.3873 50.4013 60.4341 50.4013 59.2784V58.2894C50.4013 57.1218 49.4481 56.1805 48.2924 56.1805Z" fill="#A3E635"/>
|
||||
<path d="M38.7486 44.6231H24.5103C23.3546 44.6231 22.4014 45.5644 22.4014 46.7321V47.721C22.4014 48.8768 23.3426 49.83 24.5103 49.83H38.7486V44.6231Z" fill="#A3E635"/>
|
||||
<path d="M48.2924 44.623H45.6116V49.8299H48.2924C49.4482 49.8299 50.4014 48.8886 50.4014 47.721V46.732C50.4014 45.5643 49.4482 44.623 48.2924 44.623Z" fill="#A3E635"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.4 KiB |
31
briar-android/artwork/il_mailbox_setup_dark.svg
Normal file
@@ -0,0 +1,31 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M189.401 29C189.401 22.3726 184.029 17 177.401 17H86.4014C79.7739 17 74.4014 22.3726 74.4014 29V163C74.4014 169.627 79.7739 175 86.4014 175H177.401C184.029 175 189.401 169.627 189.401 163V29Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M86.4014 18.5H177.401C183.2 18.5 187.901 23.201 187.901 29V163C187.901 168.799 183.2 173.5 177.401 173.5H86.4014C80.6024 173.5 75.9014 168.799 75.9014 163V29C75.9014 23.201 80.6024 18.5 86.4014 18.5ZM177.401 17C184.029 17 189.401 22.3726 189.401 29V163C189.401 169.627 184.029 175 177.401 175H86.4014C79.7739 175 74.4014 169.627 74.4014 163V29C74.4014 22.3726 79.7739 17 86.4014 17H177.401Z" fill="#52ADF9"/>
|
||||
<path d="M183.401 35C183.401 30.5817 179.82 27 175.401 27H88.4014C83.9831 27 80.4014 30.5817 80.4014 35V157C80.4014 161.418 83.9831 165 88.4014 165H175.401C179.82 165 183.401 161.418 183.401 157V35Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M88.4014 28.5H175.401C178.991 28.5 181.901 31.4101 181.901 35V157C181.901 160.59 178.991 163.5 175.401 163.5H88.4014C84.8115 163.5 81.9014 160.59 81.9014 157V35C81.9014 31.4102 84.8115 28.5 88.4014 28.5ZM175.401 27C179.82 27 183.401 30.5817 183.401 35V157C183.401 161.418 179.82 165 175.401 165H88.4014C83.9831 165 80.4014 161.418 80.4014 157V35C80.4014 30.5817 83.9831 27 88.4014 27H175.401Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M131.901 38.2559C131.073 38.2559 130.401 37.5843 130.401 36.7559C130.401 35.9274 131.073 35.2559 131.901 35.2559C132.73 35.2559 133.401 35.9274 133.401 36.7559C133.401 37.5843 132.73 38.2559 131.901 38.2559ZM131.901 39.7559C130.245 39.7559 128.901 38.4127 128.901 36.7559C128.901 35.099 130.245 33.7559 131.901 33.7559C133.558 33.7559 134.901 35.099 134.901 36.7559C134.901 38.4127 133.558 39.7559 131.901 39.7559Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M115.846 74H146.957C148.136 74 149.266 74.4731 150.1 75.3152C150.933 76.1573 151.401 77.2994 151.401 78.4903L151.401 116.975C151.401 118.69 149.421 119.625 148.119 118.526L140.055 112.571H115.846C114.667 112.571 113.537 112.098 112.703 111.256C111.87 110.414 111.401 109.272 111.401 108.081V78.4903C111.401 77.2994 111.87 76.1573 112.703 75.3152C113.537 74.4731 114.667 74 115.846 74ZM127.669 93.897H118.512V81.1845H144.29V93.897H135.285V98.2936H138.579C139.173 98.2936 139.47 99.0191 139.05 99.4434L131.948 106.618C131.688 106.881 131.266 106.881 131.006 106.618L123.904 99.4434C123.484 99.0191 123.782 98.2936 124.376 98.2936H127.669V93.897Z" fill="#A3E635"/>
|
||||
<path d="M3.40137 29.0259C3.40137 22.3985 8.77395 17.0259 15.4014 17.0259H55.4014C62.0288 17.0259 67.4014 22.3985 67.4014 29.0259V125.026C67.4014 131.653 62.0288 137.026 55.4014 137.026H15.4014C8.77395 137.026 3.40137 131.653 3.40137 125.026V29.0259Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M55.4014 18.5259H15.4014C9.60238 18.5259 4.90137 23.2269 4.90137 29.0259V125.026C4.90137 130.825 9.60238 135.526 15.4014 135.526H55.4014C61.2004 135.526 65.9014 130.825 65.9014 125.026V29.0259C65.9014 23.2269 61.2004 18.5259 55.4014 18.5259ZM15.4014 17.0259C8.77395 17.0259 3.40137 22.3985 3.40137 29.0259V125.026C3.40137 131.653 8.77395 137.026 15.4014 137.026H55.4014C62.0288 137.026 67.4014 131.653 67.4014 125.026V29.0259C67.4014 22.3985 62.0288 17.0259 55.4014 17.0259H15.4014Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.4013 27.0109C34.8823 27.0109 34.4397 26.5831 34.4397 26.0282C34.4397 25.4732 34.8823 25.0454 35.4013 25.0454C35.9202 25.0454 36.3628 25.4732 36.3628 26.0282C36.3628 26.5831 35.9202 27.0109 35.4013 27.0109ZM35.4013 28.5109C34.0418 28.5109 32.9397 27.3994 32.9397 26.0282C32.9397 24.657 34.0418 23.5454 35.4013 23.5454C36.7607 23.5454 37.8628 24.657 37.8628 26.0282C37.8628 27.3994 36.7607 28.5109 35.4013 28.5109Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.8823 25.7661C19.8823 25.3519 20.2181 25.0161 20.6323 25.0161H28.8375C29.2517 25.0161 29.5875 25.3519 29.5875 25.7661C29.5875 26.1803 29.2517 26.5161 28.8375 26.5161H20.6323C20.2181 26.5161 19.8823 26.1803 19.8823 25.7661Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.2153 25.7661C41.2153 25.3519 41.5511 25.0161 41.9653 25.0161L50.1705 25.0161C50.5847 25.0161 50.9205 25.3519 50.9205 25.7661C50.9205 26.1803 50.5847 26.5161 50.1705 26.5161L41.9653 26.5161C41.5511 26.5161 41.2153 26.1803 41.2153 25.7661Z" fill="#A3E635"/>
|
||||
<path d="M61.6577 41.2485C61.6577 36.8303 58.076 33.2485 53.6577 33.2485H17.1449C12.7266 33.2485 9.1449 36.8303 9.1449 41.2485V117.938C9.1449 122.356 12.7266 125.938 17.1449 125.938H53.6577C58.076 125.938 61.6577 122.356 61.6577 117.938V41.2485Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.1449 34.7485H53.6577C57.2476 34.7485 60.1577 37.6587 60.1577 41.2485V117.938C60.1577 121.528 57.2476 124.438 53.6577 124.438H17.1449C13.555 124.438 10.6449 121.528 10.6449 117.938V41.2485C10.6449 37.6587 13.555 34.7485 17.1449 34.7485ZM53.6577 33.2485C58.076 33.2485 61.6577 36.8303 61.6577 41.2485V117.938C61.6577 122.356 58.076 125.938 53.6577 125.938H17.1449C12.7266 125.938 9.1449 122.356 9.1449 117.938V41.2485C9.1449 36.8303 12.7266 33.2485 17.1449 33.2485H53.6577Z" fill="#A3E635"/>
|
||||
<path d="M27.5469 74.9572V88.4241C27.5469 89.5172 28.4295 90.4188 29.5245 90.4188H30.4518C31.5356 90.4188 32.4295 89.5172 32.4295 88.4241V74.9572H27.5469Z" fill="#82C91E"/>
|
||||
<path d="M32.4183 68.4663V65.9307C32.4183 64.8376 31.5356 63.936 30.4518 63.936H29.5245C28.4407 63.936 27.5469 64.8376 27.5469 65.9307V68.4663H32.4183Z" fill="#82C91E"/>
|
||||
<path d="M43.256 79.3977V65.9307C43.256 64.8376 42.3733 63.936 41.2895 63.936H40.3622C39.2784 63.936 38.3846 64.8376 38.3846 65.9307V79.3977H43.256Z" fill="#82C91E"/>
|
||||
<path d="M38.3846 85.8883V88.4239C38.3846 89.517 39.2784 90.4186 40.3622 90.4186H41.2895C42.3733 90.4186 43.2672 89.517 43.2672 88.4239V85.8883H38.3846Z" fill="#82C91E"/>
|
||||
<path d="M26.7645 80.1855H24.2506C23.1668 80.1855 22.2729 81.0758 22.2729 82.1802V83.1156C22.2729 84.2087 23.1556 85.1103 24.2506 85.1103H26.7645V80.1855Z" fill="#A3E635"/>
|
||||
<path d="M46.5517 80.1855H33.2V85.1103H46.5517C47.6355 85.1103 48.5293 84.2087 48.5293 83.1156V82.1802C48.5293 81.0758 47.6355 80.1855 46.5517 80.1855Z" fill="#A3E635"/>
|
||||
<path d="M37.6023 69.2544H24.2506C23.1668 69.2544 22.2729 70.1447 22.2729 71.2491V72.1845C22.2729 73.2776 23.1556 74.1792 24.2506 74.1792H37.6023V69.2544Z" fill="#A3E635"/>
|
||||
<path d="M46.5517 69.2544H44.0378V74.1791H46.5517C47.6355 74.1791 48.5294 73.2888 48.5294 72.1844V71.2491C48.5294 70.1447 47.6355 69.2544 46.5517 69.2544Z" fill="#A3E635"/>
|
||||
<path d="M67.4014 155C67.4014 150.582 63.8196 147 59.4014 147H47.4014C42.9831 147 39.4014 150.582 39.4014 155V167C39.4014 171.418 42.9831 175 47.4014 175H59.4014C63.8196 175 67.4014 171.418 67.4014 167V155Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M47.4014 148.5H59.4014C62.9912 148.5 65.9014 151.41 65.9014 155V167C65.9014 170.59 62.9912 173.5 59.4014 173.5H47.4014C43.8115 173.5 40.9014 170.59 40.9014 167V155C40.9014 151.41 43.8115 148.5 47.4014 148.5ZM59.4014 147C63.8196 147 67.4014 150.582 67.4014 155V167C67.4014 171.418 63.8196 175 59.4014 175H47.4014C42.9831 175 39.4014 171.418 39.4014 167V155C39.4014 150.582 42.9831 147 47.4014 147H59.4014Z" fill="#52ADF9"/>
|
||||
<path d="M56.3172 155.31H52.9994L48.7515 162.624H52.9994L51.7425 167.727L58.0515 159.633H53.8791L56.3172 155.31Z" fill="#52ADF9"/>
|
||||
<path d="M31.4014 155C31.4014 150.582 27.8196 147 23.4014 147H11.4014C6.98309 147 3.40137 150.582 3.40137 155V167C3.40137 171.418 6.98309 175 11.4014 175H23.4014C27.8196 175 31.4014 171.418 31.4014 167V155Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.4014 148.5H23.4014C26.9912 148.5 29.9014 151.41 29.9014 155V167C29.9014 170.59 26.9912 173.5 23.4014 173.5H11.4014C7.81152 173.5 4.90137 170.59 4.90137 167V155C4.90137 151.41 7.81152 148.5 11.4014 148.5ZM23.4014 147C27.8196 147 31.4014 150.582 31.4014 155V167C31.4014 171.418 27.8196 175 23.4014 175H11.4014C6.98309 175 3.40137 171.418 3.40137 167V155C3.40137 150.582 6.98309 147 11.4014 147H23.4014Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.1787 158.864C11.9957 158.047 12.9655 157.399 14.0329 156.957C15.1003 156.515 16.2444 156.287 17.3997 156.287C18.5551 156.287 19.6991 156.515 20.7665 156.957C21.8339 157.399 22.8038 158.047 23.6207 158.864L22.56 159.924C21.8824 159.247 21.0779 158.709 20.1925 158.343C19.3071 157.976 18.3581 157.787 17.3997 157.787C16.4414 157.787 15.4924 157.976 14.607 158.343C13.7216 158.709 12.9171 159.247 12.2394 159.924L11.1787 158.864Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.5059 161.187C14.0174 160.676 14.6246 160.27 15.2929 159.993C15.9613 159.716 16.6776 159.574 17.4009 159.574C18.1243 159.574 18.8406 159.716 19.5089 159.993C20.1773 160.27 20.7845 160.676 21.296 161.187L20.2353 162.248C19.8631 161.875 19.4212 161.58 18.9349 161.379C18.4486 161.177 17.9273 161.074 17.4009 161.074C16.8745 161.074 16.3533 161.177 15.867 161.379C15.3807 161.58 14.9388 161.875 14.5666 162.248L13.5059 161.187Z" fill="#A3E635"/>
|
||||
<path d="M18.3581 164.126C18.3581 164.654 17.9296 165.083 17.401 165.083C16.8724 165.083 16.4438 164.654 16.4438 164.126C16.4438 163.597 16.8724 163.168 17.401 163.168C17.9296 163.168 18.3581 163.597 18.3581 164.126Z" fill="#A3E635"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.3 KiB |
31
briar-android/artwork/il_mailbox_setup_light.svg
Normal file
@@ -0,0 +1,31 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M189.854 29C189.854 22.3726 184.481 17 177.854 17H86.8535C80.2261 17 74.8535 22.3726 74.8535 29V163C74.8535 169.627 80.2261 175 86.8535 175H177.854C184.481 175 189.854 169.627 189.854 163V29Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M86.8535 18.5H177.854C183.653 18.5 188.354 23.201 188.354 29V163C188.354 168.799 183.653 173.5 177.854 173.5H86.8535C81.0545 173.5 76.3535 168.799 76.3535 163V29C76.3535 23.201 81.0545 18.5 86.8535 18.5ZM177.854 17C184.481 17 189.854 22.3726 189.854 29V163C189.854 169.627 184.481 175 177.854 175H86.8535C80.2261 175 74.8535 169.627 74.8535 163V29C74.8535 22.3726 80.2261 17 86.8535 17H177.854Z" fill="#196FDE"/>
|
||||
<path d="M183.854 35C183.854 30.5817 180.272 27 175.854 27H88.8535C84.4352 27 80.8535 30.5817 80.8535 35V157C80.8535 161.418 84.4352 165 88.8535 165H175.854C180.272 165 183.854 161.418 183.854 157V35Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M88.8535 28.5H175.854C179.443 28.5 182.354 31.4101 182.354 35V157C182.354 160.59 179.443 163.5 175.854 163.5H88.8535C85.2637 163.5 82.3535 160.59 82.3535 157V35C82.3535 31.4102 85.2637 28.5 88.8535 28.5ZM175.854 27C180.272 27 183.854 30.5817 183.854 35V157C183.854 161.418 180.272 165 175.854 165H88.8535C84.4352 165 80.8535 161.418 80.8535 157V35C80.8535 30.5817 84.4352 27 88.8535 27H175.854Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M132.354 38.2559C131.525 38.2559 130.854 37.5843 130.854 36.7559C130.854 35.9274 131.525 35.2559 132.354 35.2559C133.182 35.2559 133.854 35.9274 133.854 36.7559C133.854 37.5843 133.182 38.2559 132.354 38.2559ZM132.354 39.7559C130.697 39.7559 129.354 38.4127 129.354 36.7559C129.354 35.099 130.697 33.7559 132.354 33.7559C134.01 33.7559 135.354 35.099 135.354 36.7559C135.354 38.4127 134.01 39.7559 132.354 39.7559Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M116.298 74H147.409C148.588 74 149.718 74.4731 150.552 75.3152C151.385 76.1573 151.854 77.2994 151.854 78.4903L151.854 116.975C151.854 118.69 149.873 119.625 148.571 118.526L140.508 112.571H116.298C115.119 112.571 113.989 112.098 113.155 111.256C112.322 110.414 111.854 109.272 111.854 108.081V78.4903C111.854 77.2994 112.322 76.1573 113.155 75.3152C113.989 74.4731 115.119 74 116.298 74ZM128.122 93.897H118.965V81.1845H144.742V93.897H135.737V98.2936H139.031C139.625 98.2936 139.922 99.0191 139.502 99.4434L132.401 106.618C132.14 106.881 131.718 106.881 131.458 106.618L124.356 99.4434C123.936 99.0191 124.234 98.2936 124.828 98.2936H128.122V93.897Z" fill="#82C91E"/>
|
||||
<path d="M3.85352 29.0259C3.85352 22.3985 9.2261 17.0259 15.8535 17.0259H55.8535C62.4809 17.0259 67.8535 22.3985 67.8535 29.0259V125.026C67.8535 131.653 62.4809 137.026 55.8535 137.026H15.8535C9.2261 137.026 3.85352 131.653 3.85352 125.026V29.0259Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M55.8535 18.5259H15.8535C10.0545 18.5259 5.35352 23.2269 5.35352 29.0259V125.026C5.35352 130.825 10.0545 135.526 15.8535 135.526H55.8535C61.6525 135.526 66.3535 130.825 66.3535 125.026V29.0259C66.3535 23.2269 61.6525 18.5259 55.8535 18.5259ZM15.8535 17.0259C9.2261 17.0259 3.85352 22.3985 3.85352 29.0259V125.026C3.85352 131.653 9.2261 137.026 15.8535 137.026H55.8535C62.4809 137.026 67.8535 131.653 67.8535 125.026V29.0259C67.8535 22.3985 62.4809 17.0259 55.8535 17.0259H15.8535Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M35.8534 27.0109C35.3345 27.0109 34.8919 26.5831 34.8919 26.0282C34.8919 25.4732 35.3345 25.0454 35.8534 25.0454C36.3723 25.0454 36.8149 25.4732 36.8149 26.0282C36.8149 26.5831 36.3723 27.0109 35.8534 27.0109ZM35.8534 28.5109C34.4939 28.5109 33.3919 27.3994 33.3919 26.0282C33.3919 24.657 34.4939 23.5454 35.8534 23.5454C37.2129 23.5454 38.3149 24.657 38.3149 26.0282C38.3149 27.3994 37.2129 28.5109 35.8534 28.5109Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.334 25.7661C20.334 25.3519 20.6698 25.0161 21.084 25.0161H29.2891C29.7033 25.0161 30.0391 25.3519 30.0391 25.7661C30.0391 26.1803 29.7033 26.5161 29.2891 26.5161H21.084C20.6698 26.5161 20.334 26.1803 20.334 25.7661Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.6675 25.7661C41.6675 25.3519 42.0033 25.0161 42.4175 25.0161L50.6226 25.0161C51.0368 25.0161 51.3726 25.3519 51.3726 25.7661C51.3726 26.1803 51.0368 26.5161 50.6226 26.5161L42.4175 26.5161C42.0033 26.5161 41.6675 26.1803 41.6675 25.7661Z" fill="#65A30D"/>
|
||||
<path d="M62.1099 41.2485C62.1099 36.8303 58.5281 33.2485 54.1099 33.2485H17.597C13.1788 33.2485 9.59705 36.8303 9.59705 41.2485V117.938C9.59705 122.356 13.1788 125.938 17.597 125.938H54.1099C58.5281 125.938 62.1099 122.356 62.1099 117.938V41.2485Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.597 34.7485H54.1099C57.6997 34.7485 60.6099 37.6587 60.6099 41.2485V117.938C60.6099 121.528 57.6997 124.438 54.1099 124.438H17.597C14.0072 124.438 11.097 121.528 11.097 117.938V41.2485C11.097 37.6587 14.0072 34.7485 17.597 34.7485ZM54.1099 33.2485C58.5281 33.2485 62.1099 36.8303 62.1099 41.2485V117.938C62.1099 122.356 58.5281 125.938 54.1099 125.938H17.597C13.1788 125.938 9.59705 122.356 9.59705 117.938V41.2485C9.59705 36.8303 13.1788 33.2485 17.597 33.2485H54.1099Z" fill="#65A30D"/>
|
||||
<path d="M27.9985 74.9572V88.4241C27.9985 89.5172 28.8812 90.4188 29.9761 90.4188H30.9035C31.9873 90.4188 32.8811 89.5172 32.8811 88.4241V74.9572H27.9985Z" fill="#82C91E"/>
|
||||
<path d="M32.8699 68.4663V65.9307C32.8699 64.8376 31.9873 63.936 30.9035 63.936H29.9761C28.8924 63.936 27.9985 64.8376 27.9985 65.9307V68.4663H32.8699Z" fill="#82C91E"/>
|
||||
<path d="M43.7076 79.3977V65.9307C43.7076 64.8376 42.825 63.936 41.7412 63.936H40.8138C39.7301 63.936 38.8362 64.8376 38.8362 65.9307V79.3977H43.7076Z" fill="#82C91E"/>
|
||||
<path d="M38.8362 85.8883V88.4239C38.8362 89.517 39.7301 90.4186 40.8138 90.4186H41.7412C42.825 90.4186 43.7188 89.517 43.7188 88.4239V85.8883H38.8362Z" fill="#82C91E"/>
|
||||
<path d="M27.2166 80.1855H24.7027C23.6189 80.1855 22.7251 81.0758 22.7251 82.1802V83.1156C22.7251 84.2087 23.6078 85.1103 24.7027 85.1103H27.2166V80.1855Z" fill="#A3E635"/>
|
||||
<path d="M47.0038 80.1855H33.6521V85.1103H47.0038C48.0876 85.1103 48.9814 84.2087 48.9814 83.1156V82.1802C48.9814 81.0758 48.0876 80.1855 47.0038 80.1855Z" fill="#A3E635"/>
|
||||
<path d="M38.0544 69.2544H24.7027C23.6189 69.2544 22.7251 70.1447 22.7251 71.2491V72.1845C22.7251 73.2776 23.6078 74.1792 24.7027 74.1792H38.0544V69.2544Z" fill="#A3E635"/>
|
||||
<path d="M47.0039 69.2544H44.49V74.1791H47.0039C48.0877 74.1791 48.9815 73.2888 48.9815 72.1844V71.2491C48.9815 70.1447 48.0877 69.2544 47.0039 69.2544Z" fill="#A3E635"/>
|
||||
<path d="M67.8535 155C67.8535 150.582 64.2718 147 59.8535 147H47.8535C43.4352 147 39.8535 150.582 39.8535 155V167C39.8535 171.418 43.4352 175 47.8535 175H59.8535C64.2718 175 67.8535 171.418 67.8535 167V155Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M47.8535 148.5H59.8535C63.4434 148.5 66.3535 151.41 66.3535 155V167C66.3535 170.59 63.4434 173.5 59.8535 173.5H47.8535C44.2637 173.5 41.3535 170.59 41.3535 167V155C41.3535 151.41 44.2637 148.5 47.8535 148.5ZM59.8535 147C64.2718 147 67.8535 150.582 67.8535 155V167C67.8535 171.418 64.2718 175 59.8535 175H47.8535C43.4352 175 39.8535 171.418 39.8535 167V155C39.8535 150.582 43.4352 147 47.8535 147H59.8535Z" fill="#196FDE"/>
|
||||
<path d="M56.7688 155.31H53.4511L49.2031 162.624H53.4511L52.1942 167.727L58.5032 159.633H54.3307L56.7688 155.31Z" fill="#196FDE"/>
|
||||
<path d="M31.8535 155C31.8535 150.582 28.2718 147 23.8535 147H11.8535C7.43524 147 3.85351 150.582 3.85351 155V167C3.85351 171.418 7.43524 175 11.8535 175H23.8535C28.2718 175 31.8535 171.418 31.8535 167V155Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.8535 148.5H23.8535C27.4434 148.5 30.3535 151.41 30.3535 155V167C30.3535 170.59 27.4434 173.5 23.8535 173.5H11.8535C8.26366 173.5 5.35351 170.59 5.35351 167V155C5.35351 151.41 8.26366 148.5 11.8535 148.5ZM23.8535 147C28.2718 147 31.8535 150.582 31.8535 155V167C31.8535 171.418 28.2718 175 23.8535 175H11.8535C7.43524 175 3.85351 171.418 3.85351 167V155C3.85351 150.582 7.43524 147 11.8535 147H23.8535Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.6309 158.864C12.4478 158.047 13.4177 157.399 14.4851 156.957C15.5525 156.515 16.6965 156.287 17.8519 156.287C19.0072 156.287 20.1513 156.515 21.2187 156.957C22.2861 157.399 23.2559 158.047 24.0729 158.864L23.0122 159.924C22.3345 159.247 21.53 158.709 20.6446 158.343C19.7592 157.976 18.8102 157.787 17.8519 157.787C16.8935 157.787 15.9445 157.976 15.0591 158.343C14.1737 158.709 13.3692 159.247 12.6916 159.924L11.6309 158.864Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.958 161.187C14.4695 160.676 15.0768 160.27 15.7451 159.993C16.4134 159.716 17.1297 159.574 17.8531 159.574C18.5765 159.574 19.2928 159.716 19.9611 159.993C20.6294 160.27 21.2367 160.676 21.7482 161.187L20.6875 162.248C20.3153 161.875 19.8734 161.58 19.387 161.379C18.9007 161.177 18.3795 161.074 17.8531 161.074C17.3267 161.074 16.8055 161.177 16.3191 161.379C15.8328 161.58 15.3909 161.875 15.0187 162.248L13.958 161.187Z" fill="#65A30D"/>
|
||||
<path d="M18.8098 164.126C18.8098 164.654 18.3813 165.083 17.8527 165.083C17.324 165.083 16.8955 164.654 16.8955 164.126C16.8955 163.597 17.324 163.168 17.8527 163.168C18.3813 163.168 18.8098 163.597 18.8098 164.126Z" fill="#65A30D"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 9.3 KiB |
20
briar-android/artwork/il_qr_code_dark.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M101.813 89.0796L92.5043 83.8145L92.5043 94.3447L101.813 89.0796Z" fill="#A3E635"/>
|
||||
<path d="M92.9893 102.92L102.298 108.185L102.298 97.6553L92.9893 102.92Z" fill="#52ADF9"/>
|
||||
<path d="M6.40137 36.0312C6.40137 29.4038 11.774 24.0312 18.4014 24.0312H72.4014C79.0288 24.0312 84.4014 29.4038 84.4014 36.0312V157.031C84.4014 163.659 79.0288 169.031 72.4014 169.031H18.4014C11.7739 169.031 6.40137 163.659 6.40137 157.031V36.0312Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M72.4014 25.5312H18.4014C12.6024 25.5312 7.90137 30.2323 7.90137 36.0312V157.031C7.90137 162.83 12.6024 167.531 18.4014 167.531H72.4014C78.2004 167.531 82.9014 162.83 82.9014 157.031V36.0312C82.9014 30.2323 78.2004 25.5312 72.4014 25.5312ZM18.4014 24.0312C11.774 24.0312 6.40137 29.4038 6.40137 36.0312V157.031C6.40137 163.659 11.7739 169.031 18.4014 169.031H72.4014C79.0288 169.031 84.4014 163.659 84.4014 157.031V36.0312C84.4014 29.4038 79.0288 24.0312 72.4014 24.0312H18.4014Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.4014 36.4092C44.5729 36.4092 43.9014 35.7376 43.9014 34.9092C43.9014 34.0808 44.5729 33.4092 45.4014 33.4092C46.2298 33.4092 46.9014 34.0808 46.9014 34.9092C46.9014 35.7376 46.2298 36.4092 45.4014 36.4092ZM45.4014 37.9092C43.7445 37.9092 42.4014 36.566 42.4014 34.9092C42.4014 33.2523 43.7445 31.9092 45.4014 31.9092C47.0582 31.9092 48.4014 33.2523 48.4014 34.9092C48.4014 36.566 47.0582 37.9092 45.4014 37.9092Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.6514 34.5923C26.6514 34.1781 26.9872 33.8423 27.4014 33.8423H37.4014C37.8156 33.8423 38.1514 34.1781 38.1514 34.5923C38.1514 35.0065 37.8156 35.3423 37.4014 35.3423H27.4014C26.9872 35.3423 26.6514 35.0065 26.6514 34.5923Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M52.6514 34.5923C52.6514 34.1781 52.9872 33.8423 53.4014 33.8423L63.4014 33.8423C63.8156 33.8423 64.1514 34.1781 64.1514 34.5923C64.1514 35.0065 63.8156 35.3423 63.4014 35.3423L53.4014 35.3423C52.9872 35.3423 52.6514 35.0065 52.6514 34.5923Z" fill="#A3E635"/>
|
||||
<path d="M77.4014 51.6338C77.4014 47.2155 73.8196 43.6338 69.4014 43.6338H21.4014C16.9831 43.6338 13.4014 47.2155 13.4014 51.6338V147.634C13.4014 152.052 16.9831 155.634 21.4014 155.634H69.4014C73.8196 155.634 77.4014 152.052 77.4014 147.634V51.6338Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.4014 45.1338H69.4014C72.9912 45.1338 75.9014 48.0439 75.9014 51.6338V147.634C75.9014 151.224 72.9912 154.134 69.4014 154.134H21.4014C17.8115 154.134 14.9014 151.224 14.9014 147.634V51.6338C14.9014 48.0439 17.8115 45.1338 21.4014 45.1338ZM69.4014 43.6338C73.8196 43.6338 77.4014 47.2155 77.4014 51.6338V147.634C77.4014 152.052 73.8196 155.634 69.4014 155.634H21.4014C16.9831 155.634 13.4014 152.052 13.4014 147.634V51.6338C13.4014 47.2155 16.9831 43.6338 21.4014 43.6338H69.4014Z" fill="#A3E635"/>
|
||||
<path d="M51.068 114H47.2902V110.222H51.068V114ZM47.2902 100.778H43.5125V110.222H47.2902V100.778ZM62.4014 97H58.6236V104.556H62.4014V97ZM58.6236 93.2222H54.8458V97H58.6236V93.2222ZM35.9569 97H32.1791V100.778H35.9569V97ZM32.1791 93.2222H28.4014V97H32.1791V93.2222ZM45.4014 83.7778H49.1791V80H45.4014V83.7778ZM31.2347 82.8333V88.5H36.9014V82.8333H31.2347ZM39.7347 91.3333H28.4014V80H39.7347V91.3333ZM31.2347 105.5V111.167H36.9014V105.5H31.2347ZM39.7347 114H28.4014V102.667H39.7347V114ZM53.9014 82.8333V88.5H59.568V82.8333H53.9014ZM62.4014 91.3333H51.068V80H56.7347H62.4014V91.3333ZM58.6236 110.222V104.556H51.068V108.333H54.8458V114H62.4014V110.222H58.6236ZM54.8458 97H47.2902V100.778H54.8458V97ZM47.2902 93.2222H35.9569V97H39.7347V100.778H43.5125V97H47.2902V93.2222ZM49.1791 91.3333V87.5556H45.4014V83.7778H41.6236V91.3333H49.1791ZM35.4847 84.25H32.6513V87.0833H35.4847V84.25ZM35.4847 106.917H32.6513V109.75H35.4847V106.917ZM58.1514 84.25H55.318V87.0833H58.1514V84.25Z" fill="#A3E635"/>
|
||||
<path d="M109.401 35.9502C109.401 29.3228 114.774 23.9502 121.401 23.9502H175.401C182.029 23.9502 187.401 29.3228 187.401 35.9502V156.95C187.401 163.578 182.029 168.95 175.401 168.95H121.401C114.774 168.95 109.401 163.578 109.401 156.95V35.9502Z" fill="#1E293B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M175.401 25.4502H121.401C115.602 25.4502 110.901 30.1512 110.901 35.9502V156.95C110.901 162.749 115.602 167.45 121.401 167.45H175.401C181.2 167.45 185.901 162.749 185.901 156.95V35.9502C185.901 30.1512 181.2 25.4502 175.401 25.4502ZM121.401 23.9502C114.774 23.9502 109.401 29.3228 109.401 35.9502V156.95C109.401 163.578 114.774 168.95 121.401 168.95H175.401C182.029 168.95 187.401 163.578 187.401 156.95V35.9502C187.401 29.3228 182.029 23.9502 175.401 23.9502H121.401Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M148.401 36.4092C147.573 36.4092 146.901 35.7376 146.901 34.9092C146.901 34.0808 147.573 33.4092 148.401 33.4092C149.23 33.4092 149.901 34.0808 149.901 34.9092C149.901 35.7376 149.23 36.4092 148.401 36.4092ZM148.401 37.9092C146.745 37.9092 145.401 36.566 145.401 34.9092C145.401 33.2523 146.745 31.9092 148.401 31.9092C150.058 31.9092 151.401 33.2523 151.401 34.9092C151.401 36.566 150.058 37.9092 148.401 37.9092Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M129.651 34.5923C129.651 34.1781 129.987 33.8423 130.401 33.8423H140.401C140.816 33.8423 141.151 34.1781 141.151 34.5923C141.151 35.0065 140.816 35.3423 140.401 35.3423H130.401C129.987 35.3423 129.651 35.0065 129.651 34.5923Z" fill="#52ADF9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M155.651 34.5923C155.651 34.1781 155.987 33.8423 156.401 33.8423L166.401 33.8423C166.816 33.8423 167.151 34.1781 167.151 34.5923C167.151 35.0065 166.816 35.3423 166.401 35.3423L156.401 35.3423C155.987 35.3423 155.651 35.0065 155.651 34.5923Z" fill="#52ADF9"/>
|
||||
<path d="M180.401 51.6338C180.401 47.2155 176.82 43.6338 172.401 43.6338H124.401C119.983 43.6338 116.401 47.2155 116.401 51.6338V147.634C116.401 152.052 119.983 155.634 124.401 155.634H172.401C176.82 155.634 180.401 152.052 180.401 147.634V51.6338Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M124.401 45.1338H172.401C175.991 45.1338 178.901 48.0439 178.901 51.6338V147.634C178.901 151.224 175.991 154.134 172.401 154.134H124.401C120.812 154.134 117.901 151.224 117.901 147.634V51.6338C117.901 48.0439 120.812 45.1338 124.401 45.1338ZM172.401 43.6338C176.82 43.6338 180.401 47.2155 180.401 51.6338V147.634C180.401 152.052 176.82 155.634 172.401 155.634H124.401C119.983 155.634 116.401 152.052 116.401 147.634V51.6338C116.401 47.2155 119.983 43.6338 124.401 43.6338H172.401Z" fill="#52ADF9"/>
|
||||
<path d="M154.068 114H150.29V110.222H154.068V114ZM150.29 100.778H146.512V110.222H150.29V100.778ZM165.401 97H161.624V104.556H165.401V97ZM161.624 93.2222H157.846V97H161.624V93.2222ZM138.957 97H135.179V100.778H138.957V97ZM135.179 93.2222H131.401V97H135.179V93.2222ZM148.401 83.7778H152.179V80H148.401V83.7778ZM134.235 82.8333V88.5H139.901V82.8333H134.235ZM142.735 91.3333H131.401V80H142.735V91.3333ZM134.235 105.5V111.167H139.901V105.5H134.235ZM142.735 114H131.401V102.667H142.735V114ZM156.901 82.8333V88.5H162.568V82.8333H156.901ZM165.401 91.3333H154.068V80H159.735H165.401V91.3333ZM161.624 110.222V104.556H154.068V108.333H157.846V114H165.401V110.222H161.624ZM157.846 97H150.29V100.778H157.846V97ZM150.29 93.2222H138.957V97H142.735V100.778H146.512V97H150.29V93.2222ZM152.179 91.3333V87.5556H148.401V83.7778H144.624V91.3333H152.179ZM138.485 84.25H135.651V87.0833H138.485V84.25ZM138.485 106.917H135.651V109.75H138.485V106.917ZM161.151 84.25H158.318V87.0833H161.151V84.25Z" fill="#52ADF9"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
130
briar-android/artwork/il_qr_code_error_dark.svg
Normal file
@@ -0,0 +1,130 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="192"
|
||||
height="96"
|
||||
viewBox="0 0 192 96"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg38"
|
||||
sodipodi:docname="29.dark-export(288x144)1.5x.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs42" />
|
||||
<sodipodi:namedview
|
||||
id="namedview40"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.3477509"
|
||||
inkscape:cx="199.12675"
|
||||
inkscape:cy="119.90199"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="892"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="144"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg38" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 95.999995,42.073872 c -0.57705,0 -1.04539,0.468057 -1.04539,1.045393 v 12.593501 c 0,0.577336 0.46834,1.045393 1.04539,1.045393 0.57845,0 1.0454,-0.468057 1.0454,-1.045393 V 43.119265 c 0,-0.577336 -0.46695,-1.045393 -1.0454,-1.045393 z m 0,17.530404 c -0.57705,0 -1.04539,0.468058 -1.04539,1.045393 v 0.125029 c 0,0.577336 0.46834,1.045393 1.04539,1.045393 0.57845,0 1.0454,-0.468057 1.0454,-1.045393 v -0.125029 c 0,-0.577335 -0.46695,-1.045393 -1.0454,-1.045393 z"
|
||||
fill="#fbbf24"
|
||||
id="path2"
|
||||
style="stroke-width:1.39386" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 114.71631,64.456712 96.690957,33.857222 c -0.29968,-0.507504 -1.08303,-0.507504 -1.38132,0 l -18.026758,30.59949 c -0.248107,0.423175 0.01951,1.078567 0.691353,1.078567 h 36.052118 c 0.67184,0 0.93946,-0.655392 0.68996,-1.078567 z M 98.491807,32.795939 c -1.10671,-1.880174 -3.87631,-1.880174 -4.98443,0 L 75.482015,63.395568 c -1.108116,1.880175 0.277378,4.230497 2.492217,4.230497 h 36.052118 c 2.21484,0 3.59894,-2.350322 2.49222,-4.230497 z"
|
||||
fill="#fbbf24"
|
||||
id="path4"
|
||||
style="stroke-width:1.39386" />
|
||||
<path
|
||||
d="m 180.901,17 c 0,-4.4183 -3.581,-8 -8,-8 h -26 c -4.418,0 -8,3.5817 -8,8 v 62 c 0,4.418 3.582,8 8,8 h 26 c 4.419,0 8,-3.582 8,-8 z"
|
||||
fill="#334155"
|
||||
id="path6" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 146.901,10.5 h 26 c 3.59,0 6.5,2.9101 6.5,6.5 v 62 c 0,3.59 -2.91,6.5 -6.5,6.5 h -26 c -3.589,0 -6.5,-2.91 -6.5,-6.5 V 17 c 0,-3.5899 2.911,-6.5 6.5,-6.5 z m 26,-1.5 c 4.419,0 8,3.5817 8,8 v 62 c 0,4.418 -3.581,8 -8,8 h -26 c -4.418,0 -8,-3.582 -8,-8 V 17 c 0,-4.4183 3.582,-8 8,-8 z"
|
||||
fill="#64748b"
|
||||
id="path8" />
|
||||
<path
|
||||
d="m 180.901,23.248 h -41.999 v 54 h 41.999 z"
|
||||
fill="#0b1120"
|
||||
id="path10" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 140.402,24.748 h 38.999 v 51 h -38.999 z m 40.499,-1.5 v 54 h -41.999 v -54 z"
|
||||
fill="#64748b"
|
||||
id="path12" />
|
||||
<path
|
||||
d="m 163.235,60.248 h -2.223 v -2.2222 h 2.223 z m -2.223,-7.7777 h -2.222 v 5.5555 h 2.222 z m 8.889,-2.2223 h -2.222 v 4.4445 h 2.222 z m -2.222,-2.2222 h -2.222 v 2.2222 h 2.222 z m -13.333,2.2222 h -2.222 v 2.2223 h 2.222 z m -2.222,-2.2222 h -2.223 v 2.2222 h 2.223 z m 7.777,-5.5555 h 2.223 V 40.248 h -2.223 z m -8.333,-0.5556 v 3.3333 h 3.333 v -3.3333 z m 5,5 h -6.667 V 40.248 h 6.667 z m -5,8.3333 v 3.3334 h 3.333 V 55.248 Z m 5,5 h -6.667 v -6.6666 h 6.667 z m 8.333,-18.3333 v 3.3333 h 3.334 v -3.3333 z m 5,5 h -6.666 V 40.248 h 3.333 3.333 z m -2.222,11.1111 v -3.3333 h -4.444 v 2.2222 h 2.222 v 3.3333 h 4.444 v -2.2222 z m -2.222,-7.7778 h -4.445 v 2.2223 h 4.445 z m -4.445,-2.2222 h -6.666 v 2.2222 h 2.222 v 2.2223 h 2.222 V 50.248 h 2.222 z m 1.112,-1.1111 v -2.2222 h -2.223 v -2.2222 h -2.222 v 4.4444 z m -8.056,-4.1667 h -1.667 v 1.6667 h 1.667 z m 0,13.3334 h -1.667 v 1.6666 h 1.667 z M 167.401,42.748 h -1.666 v 1.6667 h 1.666 z"
|
||||
fill="#64748b"
|
||||
id="path14" />
|
||||
<path
|
||||
d="m 158.901,17.0012 c 0,0.5529 0.448,1.0012 1,1.0012 0.553,0 1,-0.4483 1,-1.0012 0,-0.553 -0.447,-1.0012 -1,-1.0012 -0.552,0 -1,0.4482 -1,1.0012 z"
|
||||
fill="#64748b"
|
||||
id="path16" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 151.151,17.0244 c 0,-0.4142 0.336,-0.75 0.75,-0.75 h 4 c 0.415,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.335,0.75 -0.75,0.75 h -4 c -0.414,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#64748b"
|
||||
id="path18" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 163.151,17.0244 c 0,-0.4142 0.336,-0.75 0.75,-0.75 h 4 c 0.415,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.335,0.75 -0.75,0.75 h -4 c -0.414,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#64748b"
|
||||
id="path20" />
|
||||
<path
|
||||
d="m 55.901,17 c 0,-4.4183 -3.581,-8 -8,-8 H 21.9014 c -4.4183,0 -8,3.5817 -8,8 v 62 c 0,4.418 3.5817,8 8,8 H 47.901 c 4.419,0 8,-3.582 8,-8 z"
|
||||
fill="#334155"
|
||||
id="path22" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 21.9014,10.5 H 47.901 c 3.59,0 6.5,2.9101 6.5,6.5 v 62 c 0,3.59 -2.91,6.5 -6.5,6.5 H 21.9014 c -3.5899,0 -6.5,-2.91 -6.5,-6.5 V 17 c 0,-3.5899 2.9101,-6.5 6.5,-6.5 z M 47.901,9 c 4.419,0 8,3.5817 8,8 v 62 c 0,4.418 -3.581,8 -8,8 H 21.9014 c -4.4183,0 -8,-3.582 -8,-8 V 17 c 0,-4.4183 3.5817,-8 8,-8 z"
|
||||
fill="#64748b"
|
||||
id="path24" />
|
||||
<path
|
||||
d="M 55.901,23.248 H 13.9015 v 54 H 55.901 Z"
|
||||
fill="#0b1120"
|
||||
id="path26" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 15.4015,24.748 H 54.401 v 51 H 15.4015 Z m 40.4995,-1.5 v 54 H 13.9015 v -54 z"
|
||||
fill="#64748b"
|
||||
id="path28" />
|
||||
<path
|
||||
d="m 38.2347,60.248 h -2.2222 v -2.2222 h 2.2222 z m -2.2222,-7.7777 h -2.2223 v 5.5555 h 2.2223 z M 44.901,50.248 h -2.2219 v 4.4445 h 2.2219 z m -2.2219,-2.2222 h -2.2222 v 2.2222 h 2.2222 z M 29.3458,50.248 h -2.2222 v 2.2223 h 2.2222 z m -2.2222,-2.2222 h -2.2222 v 2.2222 h 2.2222 z m 7.7778,-5.5555 h 2.2222 V 40.248 H 34.9014 Z M 26.568,41.9147 v 3.3333 h 3.3334 v -3.3333 z m 5,5 H 24.9014 V 40.248 h 6.6666 z m -5,8.3333 v 3.3334 h 3.3334 V 55.248 Z m 5,5 h -6.6666 v -6.6666 h 6.6666 z m 8.3334,-18.3333 v 3.3333 h 3.3333 v -3.3333 z m 4.9996,5 H 38.2347 V 40.248 h 3.3333 3.333 z m -2.2219,11.1111 v -3.3333 h -4.4444 v 2.2222 h 2.2222 V 60.248 H 44.901 V 58.0258 Z M 40.4569,50.248 h -4.4444 v 2.2223 h 4.4444 z m -4.4444,-2.2222 h -6.6667 v 2.2222 h 2.2222 v 2.2223 h 2.2222 V 50.248 h 2.2223 z m 1.1111,-1.1111 v -2.2222 h -2.2222 v -2.2222 h -2.2223 v 4.4444 z M 29.068,42.748 h -1.6666 v 1.6667 h 1.6666 z m 0,13.3334 H 27.4014 V 57.748 H 29.068 Z M 42.4014,42.748 h -1.6667 v 1.6667 h 1.6667 z"
|
||||
fill="#64748b"
|
||||
id="path30" />
|
||||
<path
|
||||
d="m 33.9014,17.0012 c 0,0.5529 0.4477,1.0012 1,1.0012 0.5523,0 1,-0.4483 1,-1.0012 0,-0.553 -0.4477,-1.0012 -1,-1.0012 -0.5523,0 -1,0.4482 -1,1.0012 z"
|
||||
fill="#64748b"
|
||||
id="path32" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 26.1514,17.0244 c 0,-0.4142 0.3358,-0.75 0.75,-0.75 h 4 c 0.4142,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.3358,0.75 -0.75,0.75 h -4 c -0.4142,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#64748b"
|
||||
id="path34" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 38.1514,17.0244 c 0,-0.4142 0.3358,-0.75 0.75,-0.75 h 4 c 0.4142,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.3358,0.75 -0.75,0.75 h -4 c -0.4142,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#64748b"
|
||||
id="path36" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.4 KiB |
130
briar-android/artwork/il_qr_code_error_light.svg
Normal file
@@ -0,0 +1,130 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="192"
|
||||
height="96"
|
||||
viewBox="0 0 192 96"
|
||||
fill="none"
|
||||
version="1.1"
|
||||
id="svg38"
|
||||
sodipodi:docname="29.light-export(288x144)1.5x.svg"
|
||||
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs42" />
|
||||
<sodipodi:namedview
|
||||
id="namedview40"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.3202211"
|
||||
inkscape:cx="140.80388"
|
||||
inkscape:cy="54.062664"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="892"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="144"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg38" />
|
||||
<path
|
||||
d="m 180.901,17 c 0,-4.4183 -3.581,-8 -8,-8 h -26 c -4.418,0 -8,3.5817 -8,8 v 62 c 0,4.418 3.582,8 8,8 h 26 c 4.419,0 8,-3.582 8,-8 z"
|
||||
fill="#e5e7eb"
|
||||
id="path2" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 146.901,10.5 h 26 c 3.59,0 6.5,2.9101 6.5,6.5 v 62 c 0,3.59 -2.91,6.5 -6.5,6.5 h -26 c -3.589,0 -6.5,-2.91 -6.5,-6.5 V 17 c 0,-3.5899 2.911,-6.5 6.5,-6.5 z m 26,-1.5 c 4.419,0 8,3.5817 8,8 v 62 c 0,4.418 -3.581,8 -8,8 h -26 c -4.418,0 -8,-3.582 -8,-8 V 17 c 0,-4.4183 3.582,-8 8,-8 z"
|
||||
fill="#9ca3af"
|
||||
id="path4" />
|
||||
<path
|
||||
d="m 180.901,23.248 h -41.999 v 54 h 41.999 z"
|
||||
fill="#f9fafb"
|
||||
id="path6" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 140.402,24.748 h 38.999 v 51 h -38.999 z m 40.499,-1.5 v 54 h -41.999 v -54 z"
|
||||
fill="#9ca3af"
|
||||
id="path8" />
|
||||
<path
|
||||
d="m 163.235,60.248 h -2.223 v -2.2222 h 2.223 z m -2.223,-7.7777 h -2.222 v 5.5555 h 2.222 z m 8.889,-2.2223 h -2.222 v 4.4445 h 2.222 z m -2.222,-2.2222 h -2.222 v 2.2222 h 2.222 z m -13.333,2.2222 h -2.222 v 2.2223 h 2.222 z m -2.222,-2.2222 h -2.223 v 2.2222 h 2.223 z m 7.777,-5.5555 h 2.223 V 40.248 h -2.223 z m -8.333,-0.5556 v 3.3333 h 3.333 v -3.3333 z m 5,5 h -6.667 V 40.248 h 6.667 z m -5,8.3333 v 3.3334 h 3.333 V 55.248 Z m 5,5 h -6.667 v -6.6666 h 6.667 z m 8.333,-18.3333 v 3.3333 h 3.334 v -3.3333 z m 5,5 h -6.666 V 40.248 h 3.333 3.333 z m -2.222,11.1111 v -3.3333 h -4.444 v 2.2222 h 2.222 v 3.3333 h 4.444 v -2.2222 z m -2.222,-7.7778 h -4.445 v 2.2223 h 4.445 z m -4.445,-2.2222 h -6.666 v 2.2222 h 2.222 v 2.2223 h 2.222 V 50.248 h 2.222 z m 1.112,-1.1111 v -2.2222 h -2.223 v -2.2222 h -2.222 v 4.4444 z m -8.056,-4.1667 h -1.667 v 1.6667 h 1.667 z m 0,13.3334 h -1.667 v 1.6666 h 1.667 z M 167.401,42.748 h -1.666 v 1.6667 h 1.666 z"
|
||||
fill="#9ca3af"
|
||||
id="path10" />
|
||||
<path
|
||||
d="m 158.901,17.0012 c 0,0.5529 0.448,1.0012 1,1.0012 0.553,0 1,-0.4483 1,-1.0012 0,-0.553 -0.447,-1.0012 -1,-1.0012 -0.552,0 -1,0.4482 -1,1.0012 z"
|
||||
fill="#9ca3af"
|
||||
id="path12" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 151.151,17.0244 c 0,-0.4142 0.336,-0.75 0.75,-0.75 h 4 c 0.415,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.335,0.75 -0.75,0.75 h -4 c -0.414,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#9ca3af"
|
||||
id="path14" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 163.151,17.0244 c 0,-0.4142 0.336,-0.75 0.75,-0.75 h 4 c 0.415,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.335,0.75 -0.75,0.75 h -4 c -0.414,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#9ca3af"
|
||||
id="path16" />
|
||||
<path
|
||||
d="m 53.901,17 c 0,-4.4183 -3.581,-8 -8,-8 H 19.9014 c -4.4183,0 -8,3.5817 -8,8 v 62 c 0,4.418 3.5817,8 8,8 H 45.901 c 4.419,0 8,-3.582 8,-8 z"
|
||||
fill="#e5e7eb"
|
||||
id="path18" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 19.9014,10.5 H 45.901 c 3.59,0 6.5,2.9101 6.5,6.5 v 62 c 0,3.59 -2.91,6.5 -6.5,6.5 H 19.9014 c -3.5899,0 -6.5,-2.91 -6.5,-6.5 V 17 c 0,-3.5899 2.9101,-6.5 6.5,-6.5 z M 45.901,9 c 4.419,0 8,3.5817 8,8 v 62 c 0,4.418 -3.581,8 -8,8 H 19.9014 c -4.4183,0 -8,-3.582 -8,-8 V 17 c 0,-4.4183 3.5817,-8 8,-8 z"
|
||||
fill="#9ca3af"
|
||||
id="path20" />
|
||||
<path
|
||||
d="M 53.901,23.248 H 11.9015 v 54 H 53.901 Z"
|
||||
fill="#f9fafb"
|
||||
id="path22" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 13.4015,24.748 H 52.401 v 51 H 13.4015 Z m 40.4995,-1.5 v 54 H 11.9015 v -54 z"
|
||||
fill="#9ca3af"
|
||||
id="path24" />
|
||||
<path
|
||||
d="m 36.2347,60.248 h -2.2222 v -2.2222 h 2.2222 z m -2.2222,-7.7777 h -2.2223 v 5.5555 h 2.2223 z M 42.901,50.248 h -2.2219 v 4.4445 h 2.2219 z m -2.2219,-2.2222 h -2.2222 v 2.2222 h 2.2222 z M 27.3458,50.248 h -2.2222 v 2.2223 h 2.2222 z m -2.2222,-2.2222 h -2.2222 v 2.2222 h 2.2222 z m 7.7778,-5.5555 h 2.2222 V 40.248 H 32.9014 Z M 24.568,41.9147 v 3.3333 h 3.3334 v -3.3333 z m 5,5 H 22.9014 V 40.248 h 6.6666 z m -5,8.3333 v 3.3334 h 3.3334 V 55.248 Z m 5,5 h -6.6666 v -6.6666 h 6.6666 z m 8.3334,-18.3333 v 3.3333 h 3.3333 v -3.3333 z m 4.9996,5 H 36.2347 V 40.248 h 3.3333 3.333 z m -2.2219,11.1111 v -3.3333 h -4.4444 v 2.2222 h 2.2222 V 60.248 H 42.901 V 58.0258 Z M 38.4569,50.248 h -4.4444 v 2.2223 h 4.4444 z m -4.4444,-2.2222 h -6.6667 v 2.2222 h 2.2222 v 2.2223 h 2.2222 V 50.248 h 2.2223 z m 1.1111,-1.1111 v -2.2222 h -2.2222 v -2.2222 h -2.2223 v 4.4444 z M 27.068,42.748 h -1.6666 v 1.6667 h 1.6666 z m 0,13.3334 H 25.4014 V 57.748 H 27.068 Z M 40.4014,42.748 h -1.6667 v 1.6667 h 1.6667 z"
|
||||
fill="#9ca3af"
|
||||
id="path26" />
|
||||
<path
|
||||
d="m 31.9014,17.0012 c 0,0.5529 0.4477,1.0012 1,1.0012 0.5523,0 1,-0.4483 1,-1.0012 0,-0.553 -0.4477,-1.0012 -1,-1.0012 -0.5523,0 -1,0.4482 -1,1.0012 z"
|
||||
fill="#9ca3af"
|
||||
id="path28" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 24.1514,17.0244 c 0,-0.4142 0.3358,-0.75 0.75,-0.75 h 4 c 0.4142,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.3358,0.75 -0.75,0.75 h -4 c -0.4142,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#9ca3af"
|
||||
id="path30" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 36.1514,17.0244 c 0,-0.4142 0.3358,-0.75 0.75,-0.75 h 4 c 0.4142,0 0.75,0.3358 0.75,0.75 0,0.4142 -0.3358,0.75 -0.75,0.75 h -4 c -0.4142,0 -0.75,-0.3358 -0.75,-0.75 z"
|
||||
fill="#9ca3af"
|
||||
id="path32" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="m 96.000005,42.488311 c -0.576779,0 -1.044887,0.467828 -1.044887,1.044881 v 12.58734 c 0,0.577053 0.468108,1.044882 1.044887,1.044882 0.578163,0 1.044877,-0.467829 1.044877,-1.044882 v -12.58734 c 0,-0.577053 -0.466714,-1.044881 -1.044877,-1.044881 z m 0,17.521827 c -0.576779,0 -1.044887,0.467829 -1.044887,1.044882 v 0.124968 c 0,0.577053 0.468108,1.044881 1.044887,1.044881 0.578163,0 1.044877,-0.467828 1.044877,-1.044881 V 61.05502 c 0,-0.577053 -0.466714,-1.044882 -1.044877,-1.044882 z"
|
||||
fill="#f59e0b"
|
||||
id="path34"
|
||||
style="stroke-width:1.39318" />
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
clip-rule="evenodd"
|
||||
d="M 114.70715,64.8602 96.690601,34.275682 c -0.29953,-0.507256 -1.082495,-0.507256 -1.38063,0 L 77.292031,64.8602 c -0.247986,0.422968 0.0195,1.078039 0.691015,1.078039 h 36.034484 c 0.67151,0 0.939,-0.655071 0.68962,-1.078039 z M 98.490584,33.214918 c -1.106178,-1.879254 -3.874418,-1.879254 -4.981991,0 L 75.492048,63.799575 c -1.107574,1.879255 0.277243,4.228427 2.490998,4.228427 h 36.034484 c 2.21376,0 3.59718,-2.349172 2.491,-4.228427 z"
|
||||
fill="#f59e0b"
|
||||
id="path36"
|
||||
style="stroke-width:1.39318" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
20
briar-android/artwork/il_qr_code_light.svg
Normal file
@@ -0,0 +1,20 @@
|
||||
<svg width="193" height="192" viewBox="0 0 193 192" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M102.266 89.0796L92.9564 83.8145L92.9564 94.3447L102.266 89.0796Z" fill="#82C91E"/>
|
||||
<path d="M93.4409 102.92L102.75 108.185L102.75 97.6553L93.4409 102.92Z" fill="#2B8EF1"/>
|
||||
<path d="M6.85352 36.0312C6.85352 29.4038 12.2261 24.0312 18.8535 24.0312H72.8535C79.4809 24.0312 84.8535 29.4038 84.8535 36.0312V157.031C84.8535 163.659 79.4809 169.031 72.8535 169.031H18.8535C12.2261 169.031 6.85352 163.659 6.85352 157.031V36.0312Z" fill="#ECFCCB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M72.8535 25.5312H18.8535C13.0545 25.5312 8.35352 30.2323 8.35352 36.0312V157.031C8.35352 162.83 13.0545 167.531 18.8535 167.531H72.8535C78.6525 167.531 83.3535 162.83 83.3535 157.031V36.0312C83.3535 30.2323 78.6525 25.5312 72.8535 25.5312ZM18.8535 24.0312C12.2261 24.0312 6.85352 29.4038 6.85352 36.0312V157.031C6.85352 163.659 12.2261 169.031 18.8535 169.031H72.8535C79.4809 169.031 84.8535 163.659 84.8535 157.031V36.0312C84.8535 29.4038 79.4809 24.0312 72.8535 24.0312H18.8535Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.8535 36.4092C45.0251 36.4092 44.3535 35.7376 44.3535 34.9092C44.3535 34.0808 45.0251 33.4092 45.8535 33.4092C46.6819 33.4092 47.3535 34.0808 47.3535 34.9092C47.3535 35.7376 46.6819 36.4092 45.8535 36.4092ZM45.8535 37.9092C44.1967 37.9092 42.8535 36.566 42.8535 34.9092C42.8535 33.2523 44.1967 31.9092 45.8535 31.9092C47.5104 31.9092 48.8535 33.2523 48.8535 34.9092C48.8535 36.566 47.5104 37.9092 45.8535 37.9092Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M27.1035 34.5923C27.1035 34.1781 27.4393 33.8423 27.8535 33.8423H37.8535C38.2677 33.8423 38.6035 34.1781 38.6035 34.5923C38.6035 35.0065 38.2677 35.3423 37.8535 35.3423H27.8535C27.4393 35.3423 27.1035 35.0065 27.1035 34.5923Z" fill="#65A30D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M53.1035 34.5923C53.1035 34.1781 53.4393 33.8423 53.8535 33.8423L63.8535 33.8423C64.2677 33.8423 64.6035 34.1781 64.6035 34.5923C64.6035 35.0065 64.2677 35.3423 63.8535 35.3423L53.8535 35.3423C53.4393 35.3423 53.1035 35.0065 53.1035 34.5923Z" fill="#65A30D"/>
|
||||
<path d="M77.8535 51.6338C77.8535 47.2155 74.2718 43.6338 69.8535 43.6338H21.8535C17.4352 43.6338 13.8535 47.2155 13.8535 51.6338V147.634C13.8535 152.052 17.4352 155.634 21.8535 155.634H69.8535C74.2718 155.634 77.8535 152.052 77.8535 147.634V51.6338Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M21.8535 45.1338H69.8535C73.4434 45.1338 76.3535 48.0439 76.3535 51.6338V147.634C76.3535 151.224 73.4434 154.134 69.8535 154.134H21.8535C18.2637 154.134 15.3535 151.224 15.3535 147.634V51.6338C15.3535 48.0439 18.2637 45.1338 21.8535 45.1338ZM69.8535 43.6338C74.2718 43.6338 77.8535 47.2155 77.8535 51.6338V147.634C77.8535 152.052 74.2718 155.634 69.8535 155.634H21.8535C17.4352 155.634 13.8535 152.052 13.8535 147.634V51.6338C13.8535 47.2155 17.4352 43.6338 21.8535 43.6338H69.8535Z" fill="#65A30D"/>
|
||||
<path d="M51.5202 114H47.7424V110.222H51.5202V114ZM47.7424 100.778H43.9646V110.222H47.7424V100.778ZM62.8535 97H59.0757V104.556H62.8535V97ZM59.0757 93.2222H55.298V97H59.0757V93.2222ZM36.4091 97H32.6313V100.778H36.4091V97ZM32.6313 93.2222H28.8535V97H32.6313V93.2222ZM45.8535 83.7778H49.6313V80H45.8535V83.7778ZM31.6868 82.8333V88.5H37.3535V82.8333H31.6868ZM40.1868 91.3333H28.8535V80H40.1868V91.3333ZM31.6868 105.5V111.167H37.3535V105.5H31.6868ZM40.1868 114H28.8535V102.667H40.1868V114ZM54.3535 82.8333V88.5H60.0202V82.8333H54.3535ZM62.8535 91.3333H51.5202V80H57.1868H62.8535V91.3333ZM59.0757 110.222V104.556H51.5202V108.333H55.298V114H62.8535V110.222H59.0757ZM55.298 97H47.7424V100.778H55.298V97ZM47.7424 93.2222H36.4091V97H40.1868V100.778H43.9646V97H47.7424V93.2222ZM49.6313 91.3333V87.5556H45.8535V83.7778H42.0757V91.3333H49.6313ZM35.9368 84.25H33.1035V87.0833H35.9368V84.25ZM35.9368 106.917H33.1035V109.75H35.9368V106.917ZM58.6035 84.25H55.7702V87.0833H58.6035V84.25Z" fill="#82C91E"/>
|
||||
<path d="M109.854 36.0312C109.854 29.4038 115.226 24.0312 121.854 24.0312H175.854C182.481 24.0312 187.854 29.4038 187.854 36.0312V157.031C187.854 163.659 182.481 169.031 175.854 169.031H121.854C115.226 169.031 109.854 163.659 109.854 157.031V36.0312Z" fill="#DDEDFE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M175.854 25.5312H121.854C116.055 25.5312 111.354 30.2323 111.354 36.0312V157.031C111.354 162.83 116.055 167.531 121.854 167.531H175.854C181.653 167.531 186.354 162.83 186.354 157.031V36.0312C186.354 30.2323 181.653 25.5312 175.854 25.5312ZM121.854 24.0312C115.226 24.0312 109.854 29.4038 109.854 36.0312V157.031C109.854 163.659 115.226 169.031 121.854 169.031H175.854C182.481 169.031 187.854 163.659 187.854 157.031V36.0312C187.854 29.4038 182.481 24.0312 175.854 24.0312H121.854Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M148.854 36.4092C148.025 36.4092 147.354 35.7376 147.354 34.9092C147.354 34.0808 148.025 33.4092 148.854 33.4092C149.682 33.4092 150.354 34.0808 150.354 34.9092C150.354 35.7376 149.682 36.4092 148.854 36.4092ZM148.854 37.9092C147.197 37.9092 145.854 36.566 145.854 34.9092C145.854 33.2523 147.197 31.9092 148.854 31.9092C150.51 31.9092 151.854 33.2523 151.854 34.9092C151.854 36.566 150.51 37.9092 148.854 37.9092Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M130.104 34.5923C130.104 34.1781 130.439 33.8423 130.854 33.8423H140.854C141.268 33.8423 141.604 34.1781 141.604 34.5923C141.604 35.0065 141.268 35.3423 140.854 35.3423H130.854C130.439 35.3423 130.104 35.0065 130.104 34.5923Z" fill="#196FDE"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M156.104 34.5923C156.104 34.1781 156.439 33.8423 156.854 33.8423L166.854 33.8423C167.268 33.8423 167.604 34.1781 167.604 34.5923C167.604 35.0065 167.268 35.3423 166.854 35.3423L156.854 35.3423C156.439 35.3423 156.104 35.0065 156.104 34.5923Z" fill="#196FDE"/>
|
||||
<path d="M180.854 51.6338C180.854 47.2155 177.272 43.6338 172.854 43.6338H124.854C120.435 43.6338 116.854 47.2155 116.854 51.6338V147.634C116.854 152.052 120.435 155.634 124.854 155.634H172.854C177.272 155.634 180.854 152.052 180.854 147.634V51.6338Z" fill="#F9FAFB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M124.854 45.1338H172.854C176.443 45.1338 179.354 48.0439 179.354 51.6338V147.634C179.354 151.224 176.443 154.134 172.854 154.134H124.854C121.264 154.134 118.354 151.224 118.354 147.634V51.6338C118.354 48.0439 121.264 45.1338 124.854 45.1338ZM172.854 43.6338C177.272 43.6338 180.854 47.2155 180.854 51.6338V147.634C180.854 152.052 177.272 155.634 172.854 155.634H124.854C120.435 155.634 116.854 152.052 116.854 147.634V51.6338C116.854 47.2155 120.435 43.6338 124.854 43.6338H172.854Z" fill="#196FDE"/>
|
||||
<path d="M154.52 114H150.742V110.222H154.52V114ZM150.742 100.778H146.965V110.222H150.742V100.778ZM165.854 97H162.076V104.556H165.854V97ZM162.076 93.2222H158.298V97H162.076V93.2222ZM139.409 97H135.631V100.778H139.409V97ZM135.631 93.2222H131.854V97H135.631V93.2222ZM148.854 83.7778H152.631V80H148.854V83.7778ZM134.687 82.8333V88.5H140.354V82.8333H134.687ZM143.187 91.3333H131.854V80H143.187V91.3333ZM134.687 105.5V111.167H140.354V105.5H134.687ZM143.187 114H131.854V102.667H143.187V114ZM157.354 82.8333V88.5H163.02V82.8333H157.354ZM165.854 91.3333H154.52V80H160.187H165.854V91.3333ZM162.076 110.222V104.556H154.52V108.333H158.298V114H165.854V110.222H162.076ZM158.298 97H150.742V100.778H158.298V97ZM150.742 93.2222H139.409V97H143.187V100.778H146.965V97H150.742V93.2222ZM152.631 91.3333V87.5556H148.854V83.7778H145.076V91.3333H152.631ZM138.937 84.25H136.103V87.0833H138.937V84.25ZM138.937 106.917H136.103V109.75H138.937V106.917ZM161.604 84.25H158.77V87.0833H161.604V84.25Z" fill="#2B8EF1"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
49
briar-android/artwork/il_qr_code_nearby_dark.svg
Normal file
@@ -0,0 +1,49 @@
|
||||
<svg width="289" height="144" viewBox="0 0 289 144" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M72.4014 56C72.4014 51.5817 68.8196 48 64.4014 48H38.4014C33.9831 48 30.4014 51.5817 30.4014 56V118C30.4014 122.418 33.9831 126 38.4014 126H64.4014C68.8196 126 72.4014 122.418 72.4014 118V56Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.4014 49.5H64.4014C67.9912 49.5 70.9014 52.4101 70.9014 56V118C70.9014 121.59 67.9912 124.5 64.4014 124.5H38.4014C34.8115 124.5 31.9014 121.59 31.9014 118V56C31.9014 52.4101 34.8115 49.5 38.4014 49.5ZM64.4014 48C68.8196 48 72.4014 51.5817 72.4014 56V118C72.4014 122.418 68.8196 126 64.4014 126H38.4014C33.9831 126 30.4014 122.418 30.4014 118V56C30.4014 51.5817 33.9831 48 38.4014 48H64.4014Z" fill="#64748B"/>
|
||||
<path d="M72.4014 62.2476H30.4015V116.248H72.4014V62.2476Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M31.9015 63.7476H70.9014V114.748H31.9015V63.7476ZM72.4014 62.2476V116.248H30.4015V62.2476H72.4014Z" fill="#64748B"/>
|
||||
<path d="M50.4014 56.0012C50.4014 56.5541 50.8491 57.0024 51.4014 57.0024C51.9537 57.0024 52.4014 56.5541 52.4014 56.0012C52.4014 55.4482 51.9537 55 51.4014 55C50.8491 55 50.4014 55.4482 50.4014 56.0012Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M42.6514 56.0244C42.6514 55.6102 42.9872 55.2744 43.4014 55.2744H47.4014C47.8156 55.2744 48.1514 55.6102 48.1514 56.0244C48.1514 56.4386 47.8156 56.7744 47.4014 56.7744H43.4014C42.9872 56.7744 42.6514 56.4386 42.6514 56.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.6514 56.0244C54.6514 55.6102 54.9872 55.2744 55.4014 55.2744H59.4014C59.8156 55.2744 60.1514 55.6102 60.1514 56.0244C60.1514 56.4386 59.8156 56.7744 59.4014 56.7744H55.4014C54.9872 56.7744 54.6514 56.4386 54.6514 56.0244Z" fill="#64748B"/>
|
||||
<path d="M50.4014 51C50.4014 46.5817 46.8196 43 42.4014 43H16.4014C11.9831 43 8.40137 46.5817 8.40137 51V113C8.40137 117.418 11.9831 121 16.4014 121H42.4014C46.8196 121 50.4014 117.418 50.4014 113V51Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.4014 44.5H42.4014C45.9912 44.5 48.9014 47.4101 48.9014 51V113C48.9014 116.59 45.9912 119.5 42.4014 119.5H16.4014C12.8115 119.5 9.90137 116.59 9.90137 113V51C9.90137 47.4101 12.8115 44.5 16.4014 44.5ZM42.4014 43C46.8196 43 50.4014 46.5817 50.4014 51V113C50.4014 117.418 46.8196 121 42.4014 121H16.4014C11.9831 121 8.40137 117.418 8.40137 113V51C8.40137 46.5817 11.9831 43 16.4014 43H42.4014Z" fill="#64748B"/>
|
||||
<path d="M50.4014 57.2476H8.40155V111.248H50.4014V57.2476Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.90155 58.7476H48.9014V109.748H9.90155V58.7476ZM50.4014 57.2476V111.248H8.40155V57.2476H50.4014Z" fill="#64748B"/>
|
||||
<path d="M28.4014 51.0012C28.4014 51.5541 28.8491 52.0024 29.4014 52.0024C29.9537 52.0024 30.4014 51.5541 30.4014 51.0012C30.4014 50.4482 29.9537 50 29.4014 50C28.8491 50 28.4014 50.4482 28.4014 51.0012Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.6514 51.0244C20.6514 50.6102 20.9872 50.2744 21.4014 50.2744H25.4014C25.8156 50.2744 26.1514 50.6102 26.1514 51.0244C26.1514 51.4386 25.8156 51.7744 25.4014 51.7744H21.4014C20.9872 51.7744 20.6514 51.4386 20.6514 51.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.6514 51.0244C32.6514 50.6102 32.9872 50.2744 33.4014 50.2744H37.4014C37.8156 50.2744 38.1514 50.6102 38.1514 51.0244C38.1514 51.4386 37.8156 51.7744 37.4014 51.7744H33.4014C32.9872 51.7744 32.6514 51.4386 32.6514 51.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M61.4014 38.5C66.6481 38.5 70.9014 34.2467 70.9014 29C70.9014 23.7533 66.6481 19.5 61.4014 19.5C56.1547 19.5 51.9014 23.7533 51.9014 29C51.9014 34.2467 56.1547 38.5 61.4014 38.5ZM61.4014 40C67.4765 40 72.4014 35.0751 72.4014 29C72.4014 22.9249 67.4765 18 61.4014 18C55.3262 18 50.4014 22.9249 50.4014 29C50.4014 35.0751 55.3262 40 61.4014 40Z" fill="#A3E635"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.9549 25.994C66.2344 26.2997 66.2131 26.7741 65.9074 27.0536L59.932 32.5162L56.8953 29.7402C56.5896 29.4608 56.5683 28.9864 56.8478 28.6806C57.1273 28.3749 57.6017 28.3536 57.9074 28.6331L59.9319 30.4838L64.8953 25.9465C65.201 25.667 65.6754 25.6882 65.9549 25.994Z" fill="#A3E635"/>
|
||||
<path d="M176.401 56C176.401 51.5817 172.82 48 168.401 48H142.401C137.983 48 134.401 51.5817 134.401 56V118C134.401 122.418 137.983 126 142.401 126H168.401C172.82 126 176.401 122.418 176.401 118V56Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M142.401 49.5H168.401C171.991 49.5 174.901 52.4101 174.901 56V118C174.901 121.59 171.991 124.5 168.401 124.5H142.401C138.812 124.5 135.901 121.59 135.901 118V56C135.901 52.4101 138.812 49.5 142.401 49.5ZM168.401 48C172.82 48 176.401 51.5817 176.401 56V118C176.401 122.418 172.82 126 168.401 126H142.401C137.983 126 134.401 122.418 134.401 118V56C134.401 51.5817 137.983 48 142.401 48H168.401Z" fill="#64748B"/>
|
||||
<path d="M176.401 62.2476H134.402V116.248H176.401V62.2476Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M135.902 63.7476H174.901V114.748H135.902V63.7476ZM176.401 62.2476V116.248H134.402V62.2476H176.401Z" fill="#64748B"/>
|
||||
<path d="M154.401 56.0012C154.401 56.5541 154.849 57.0024 155.401 57.0024C155.954 57.0024 156.401 56.5541 156.401 56.0012C156.401 55.4482 155.954 55 155.401 55C154.849 55 154.401 55.4482 154.401 56.0012Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M146.651 56.0244C146.651 55.6102 146.987 55.2744 147.401 55.2744H151.401C151.816 55.2744 152.151 55.6102 152.151 56.0244C152.151 56.4386 151.816 56.7744 151.401 56.7744H147.401C146.987 56.7744 146.651 56.4386 146.651 56.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M158.651 56.0244C158.651 55.6102 158.987 55.2744 159.401 55.2744H163.401C163.816 55.2744 164.151 55.6102 164.151 56.0244C164.151 56.4386 163.816 56.7744 163.401 56.7744H159.401C158.987 56.7744 158.651 56.4386 158.651 56.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M161.871 25.4697C162.164 25.1768 162.639 25.1768 162.932 25.4697L165.401 27.9393L167.871 25.4697C168.164 25.1768 168.639 25.1768 168.932 25.4697C169.225 25.7626 169.225 26.2374 168.932 26.5303L166.462 29L168.932 31.4697C169.225 31.7626 169.225 32.2374 168.932 32.5303C168.639 32.8232 168.164 32.8232 167.871 32.5303L165.401 30.0607L162.932 32.5303C162.639 32.8232 162.164 32.8232 161.871 32.5303C161.578 32.2374 161.578 31.7626 161.871 31.4697L164.341 29L161.871 26.5303C161.578 26.2374 161.578 25.7626 161.871 25.4697Z" fill="#EF4444"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M165.401 38.5C170.648 38.5 174.901 34.2467 174.901 29C174.901 23.7533 170.648 19.5 165.401 19.5C160.155 19.5 155.901 23.7533 155.901 29C155.901 34.2467 160.155 38.5 165.401 38.5ZM165.401 40C171.476 40 176.401 35.0751 176.401 29C176.401 22.9249 171.476 18 165.401 18C159.326 18 154.401 22.9249 154.401 29C154.401 35.0751 159.326 40 165.401 40Z" fill="#EF4444"/>
|
||||
<path d="M125.561 78.4772C126.157 76.9365 127.639 75.9209 129.291 75.9209H145.617C147.269 75.9209 148.751 76.9365 149.347 78.4772L151.454 83.9209H123.454L125.561 78.4772Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M124.862 78.2065C125.57 76.3769 127.33 75.1709 129.291 75.1709H145.617C147.579 75.1709 149.339 76.3769 150.047 78.2065L152.549 84.6709H122.36L124.862 78.2065ZM129.291 76.6709C127.949 76.6709 126.745 77.4961 126.261 78.7479L124.549 83.1709H150.36L148.648 78.7479C148.164 77.4961 146.959 76.6709 145.617 76.6709H129.291Z" fill="#64748B"/>
|
||||
<path d="M113.401 91.9209C113.401 87.5026 116.983 83.9209 121.401 83.9209H153.401C157.82 83.9209 161.401 87.5026 161.401 91.9209V111.921C161.401 116.339 157.82 119.921 153.401 119.921H121.401C116.983 119.921 113.401 116.339 113.401 111.921V91.9209Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M112.651 91.9209C112.651 87.0884 116.569 83.1709 121.401 83.1709H153.401C158.234 83.1709 162.151 87.0884 162.151 91.9209V111.921C162.151 116.753 158.234 120.671 153.401 120.671H121.401C116.569 120.671 112.651 116.753 112.651 111.921V91.9209ZM121.401 84.6709C117.397 84.6709 114.151 87.9168 114.151 91.9209V111.921C114.151 115.925 117.397 119.171 121.401 119.171H153.401C157.405 119.171 160.651 115.925 160.651 111.921V91.9209C160.651 87.9168 157.405 84.6709 153.401 84.6709H121.401Z" fill="#64748B"/>
|
||||
<path d="M150.401 101.921C150.401 109.101 144.581 114.921 137.401 114.921C130.222 114.921 124.401 109.101 124.401 101.921C124.401 94.7412 130.222 88.9209 137.401 88.9209C144.581 88.9209 150.401 94.7412 150.401 101.921Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M137.401 113.421C143.753 113.421 148.901 108.272 148.901 101.921C148.901 95.5696 143.753 90.4209 137.401 90.4209C131.05 90.4209 125.901 95.5696 125.901 101.921C125.901 108.272 131.05 113.421 137.401 113.421ZM137.401 114.921C144.581 114.921 150.401 109.101 150.401 101.921C150.401 94.7412 144.581 88.9209 137.401 88.9209C130.222 88.9209 124.401 94.7412 124.401 101.921C124.401 109.101 130.222 114.921 137.401 114.921Z" fill="#64748B"/>
|
||||
<path d="M144.401 101.921C144.401 105.787 141.267 108.921 137.401 108.921C133.535 108.921 130.401 105.787 130.401 101.921C130.401 98.0549 133.535 94.9209 137.401 94.9209C141.267 94.9209 144.401 98.0549 144.401 101.921Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M137.401 107.421C140.439 107.421 142.901 104.958 142.901 101.921C142.901 98.8833 140.439 96.4209 137.401 96.4209C134.364 96.4209 131.901 98.8833 131.901 101.921C131.901 104.958 134.364 107.421 137.401 107.421ZM137.401 108.921C141.267 108.921 144.401 105.787 144.401 101.921C144.401 98.0549 141.267 94.9209 137.401 94.9209C133.535 94.9209 130.401 98.0549 130.401 101.921C130.401 105.787 133.535 108.921 137.401 108.921Z" fill="#64748B"/>
|
||||
<path d="M280.401 56C280.401 51.5817 276.82 48 272.401 48H246.401C241.983 48 238.401 51.5817 238.401 56V118C238.401 122.418 241.983 126 246.401 126H272.401C276.82 126 280.401 122.418 280.401 118V56Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M246.401 49.5H272.401C275.991 49.5 278.901 52.4101 278.901 56V118C278.901 121.59 275.991 124.5 272.401 124.5H246.401C242.812 124.5 239.901 121.59 239.901 118V56C239.901 52.4101 242.812 49.5 246.401 49.5ZM272.401 48C276.82 48 280.401 51.5817 280.401 56V118C280.401 122.418 276.82 126 272.401 126H246.401C241.983 126 238.401 122.418 238.401 118V56C238.401 51.5817 241.983 48 246.401 48H272.401Z" fill="#64748B"/>
|
||||
<path d="M280.401 62.2476H238.402V116.248H280.401V62.2476Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M239.902 63.7476H278.901V114.748H239.902V63.7476ZM280.401 62.2476V116.248H238.402V62.2476H280.401Z" fill="#64748B"/>
|
||||
<path d="M258.401 56.0012C258.401 56.5541 258.849 57.0024 259.401 57.0024C259.954 57.0024 260.401 56.5541 260.401 56.0012C260.401 55.4482 259.954 55 259.401 55C258.849 55 258.401 55.4482 258.401 56.0012Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M250.651 56.0244C250.651 55.6102 250.987 55.2744 251.401 55.2744H255.401C255.816 55.2744 256.151 55.6102 256.151 56.0244C256.151 56.4386 255.816 56.7744 255.401 56.7744H251.401C250.987 56.7744 250.651 56.4386 250.651 56.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M262.651 56.0244C262.651 55.6102 262.987 55.2744 263.401 55.2744H267.401C267.816 55.2744 268.151 55.6102 268.151 56.0244C268.151 56.4386 267.816 56.7744 267.401 56.7744H263.401C262.987 56.7744 262.651 56.4386 262.651 56.0244Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M269.401 38.5C274.648 38.5 278.901 34.2467 278.901 29C278.901 23.7533 274.648 19.5 269.401 19.5C264.155 19.5 259.901 23.7533 259.901 29C259.901 34.2467 264.155 38.5 269.401 38.5ZM269.401 40C275.476 40 280.401 35.0751 280.401 29C280.401 22.9249 275.476 18 269.401 18C263.326 18 258.401 22.9249 258.401 29C258.401 35.0751 263.326 40 269.401 40Z" fill="#EF4444"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M265.871 25.4697C266.164 25.1768 266.639 25.1768 266.932 25.4697L269.401 27.9393L271.871 25.4697C272.164 25.1768 272.639 25.1768 272.932 25.4697C273.225 25.7626 273.225 26.2374 272.932 26.5303L270.462 29L272.932 31.4697C273.225 31.7626 273.225 32.2374 272.932 32.5303C272.639 32.8232 272.164 32.8232 271.871 32.5303L269.401 30.0607L266.932 32.5303C266.639 32.8232 266.164 32.8232 265.871 32.5303C265.578 32.2374 265.578 31.7626 265.871 31.4697L268.341 29L265.871 26.5303C265.578 26.2374 265.578 25.7626 265.871 25.4697Z" fill="#EF4444"/>
|
||||
<path d="M259.32 85.2935C263.739 85.2935 267.32 88.8752 267.32 93.2935L267.32 113.293C267.32 117.712 263.739 121.293 259.32 121.293L225.32 121.293C220.902 121.293 217.32 117.712 217.32 113.293L217.32 93.2935C217.32 88.8752 220.902 85.2935 225.32 85.2935L259.32 85.2935Z" fill="#0B1120"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M259.32 84.5435C264.153 84.5435 268.07 88.461 268.07 93.2935L268.07 113.293C268.07 118.126 264.153 122.043 259.32 122.043L225.32 122.043C220.488 122.043 216.57 118.126 216.57 113.293L216.57 93.2935C216.57 88.461 220.488 84.5435 225.32 84.5435L259.32 84.5435ZM266.57 93.2935C266.57 89.2894 263.324 86.0435 259.32 86.0435L225.32 86.0435C221.316 86.0435 218.07 89.2894 218.07 93.2935L218.07 113.293C218.07 117.298 221.316 120.543 225.32 120.543L259.32 120.543C263.324 120.543 266.57 117.298 266.57 113.293L266.57 93.2935Z" fill="#64748B"/>
|
||||
<path d="M264.149 91.5839C265.472 90.6285 267.32 91.5736 267.32 93.2052L267.32 113.293C267.32 117.712 263.739 121.293 259.32 121.293L225.32 121.293C220.902 121.293 217.32 117.712 217.32 113.293L217.32 93.2053C217.32 91.5737 219.169 90.6286 220.491 91.584L242.32 107.352L264.149 91.5839Z" fill="#334155"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M235.039 103.293L217.881 90.9016L218.759 89.6855L242.32 106.702L265.881 89.6855L266.759 90.9016L249.601 103.293L266.759 115.685L265.881 116.901L248.32 104.219L242.32 108.552L236.32 104.219L218.759 116.902L217.881 115.686L235.039 103.293Z" fill="#64748B"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M259.32 84.5435C264.153 84.5435 268.07 88.461 268.07 93.2935L268.07 113.293C268.07 118.126 264.153 122.043 259.32 122.043L225.32 122.043C220.488 122.043 216.57 118.126 216.57 113.293L216.57 93.2935C216.57 88.461 220.488 84.5435 225.32 84.5435L259.32 84.5435ZM266.57 93.2935C266.57 89.2894 263.324 86.0435 259.32 86.0435L225.32 86.0435C221.316 86.0435 218.07 89.2894 218.07 93.2935L218.07 113.293C218.07 117.298 221.316 120.543 225.32 120.543L259.32 120.543C263.324 120.543 266.57 117.298 266.57 113.293L266.57 93.2935Z" fill="#64748B"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |