get images over HTTPS with self-signed certificate

Co-Authored-By: andrey <motor4ik@gmail.com>
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
This commit is contained in:
Michele Balistreri 2022-01-24 16:18:01 +03:00
parent 9850dd5160
commit 52afbf46ee
No known key found for this signature in database
GPG Key ID: E9567DA33A4F791A
17 changed files with 437 additions and 270 deletions

View File

@ -358,6 +358,7 @@ dependencies {
implementation 'com.github.status-im:function:0.0.1' implementation 'com.github.status-im:function:0.0.1'
implementation 'com.facebook.fresco:fresco:2.2.0' implementation 'com.facebook.fresco:fresco:2.2.0'
implementation 'com.facebook.fresco:animated-gif:2.2.0' implementation 'com.facebook.fresco:animated-gif:2.2.0'
implementation "com.squareup.okhttp3:okhttp-tls:3.12.12"
} }
def getLocalNDKDir = { -> def getLocalNDKDir = { ->

View File

@ -15,12 +15,14 @@ import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.react.NavigationReactNativeHost; import com.reactnativenavigation.react.NavigationReactNativeHost;
import com.facebook.react.ReactPackage; import com.facebook.react.ReactPackage;
import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactInstanceManager;
import com.facebook.react.modules.network.OkHttpClientProvider;
import java.util.List; import java.util.List;
import im.status.ethereum.keycard.RNStatusKeycardPackage; import im.status.ethereum.keycard.RNStatusKeycardPackage;
import im.status.ethereum.module.StatusPackage; import im.status.ethereum.module.StatusPackage;
import im.status.ethereum.pushnotifications.PushNotificationPackage; import im.status.ethereum.pushnotifications.PushNotificationPackage;
import im.status.ethereum.StatusOkHttpClientFactory;
public class MainApplication extends NavigationApplication { public class MainApplication extends NavigationApplication {
@ -57,6 +59,8 @@ public class MainApplication extends NavigationApplication {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
OkHttpClientProvider.setOkHttpClientFactory(new StatusOkHttpClientFactory());
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG_WEBVIEW == "1"); WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG_WEBVIEW == "1");
initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
} }

View File

@ -0,0 +1,44 @@
package im.status.ethereum;
import android.util.Log;
import com.facebook.react.modules.network.OkHttpClientFactory;
import com.facebook.react.modules.network.OkHttpClientProvider;
import okhttp3.OkHttpClient;
import okhttp3.Interceptor;
import okhttp3.tls.HandshakeCertificates;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.RuntimeException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import im.status.ethereum.module.StatusPackage;
class StatusOkHttpClientFactory implements OkHttpClientFactory {
public OkHttpClient createNewNetworkModuleClient() {
String certPem = StatusPackage.getImageTLSCert();
X509Certificate cert;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certPem.getBytes()));
} catch(Exception e) {
Log.e("StatusOkHttpClientFactory", "Could not parse certificate");
cert = null;
}
HandshakeCertificates clientCertificates = new HandshakeCertificates.Builder()
.addPlatformTrustedCertificates()
.addTrustedCertificate(cert)
.build();
return OkHttpClientProvider.createClientBuilder()
.sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager())
.build();
}
}

View File

@ -19,10 +19,23 @@
#import <React/RCTBridge.h> #import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h> #import <React/RCTBundleURLProvider.h>
#import <React/RCTHTTPRequestHandler.h>
#import <UserNotifications/UserNotifications.h> #import <UserNotifications/UserNotifications.h>
#import <RNCPushNotificationIOS.h> #import <RNCPushNotificationIOS.h>
#import <SDWebImage/SDWebImageDownloaderConfig.h>
#import <SDWebImage/SDWebImageDownloaderOperation.h>
#import <Security/Security.h>
//TODO: properly import the framework
extern NSString* StatusgoImageServerTLSCert();
@interface StatusDownloaderOperation : SDWebImageDownloaderOperation
+ (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler;
@end
/* /*
#if DEBUG #if DEBUG
#import <FlipperKit/FlipperClient.h> #import <FlipperKit/FlipperClient.h>
@ -84,6 +97,8 @@ static void InitializeFlipper(UIApplication *application) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self; center.delegate = self;
SDWebImageDownloaderConfig.defaultDownloaderConfig.operationClass = [StatusDownloaderOperation class];
return YES; return YES;
} }
@ -180,3 +195,56 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response
} }
@end @end
@implementation StatusDownloaderOperation
+ (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
__block NSURLCredential *credential = nil;
NSString *pemCert = StatusgoImageServerTLSCert();
pemCert = [pemCert stringByReplacingOccurrencesOfString:@"-----BEGIN CERTIFICATE-----\n" withString:@""];
pemCert = [pemCert stringByReplacingOccurrencesOfString:@"\n-----END CERTIFICATE-----" withString:@""];
NSData *derCert = [[NSData alloc] initWithBase64EncodedString:pemCert options:NSDataBase64DecodingIgnoreUnknownCharacters];
SecCertificateRef certRef = SecCertificateCreateWithData(NULL, (__bridge_retained CFDataRef) derCert);
CFArrayRef certArrayRef = CFArrayCreate(NULL, (void *)&certRef, 1, NULL);
SecTrustSetAnchorCertificates(challenge.protectionSpace.serverTrust, certArrayRef);
SecTrustResultType trustResult;
SecTrustEvaluate(challenge.protectionSpace.serverTrust, &trustResult);
if ((trustResult == kSecTrustResultProceed) || (trustResult == kSecTrustResultUnspecified)) {
disposition = NSURLSessionAuthChallengeUseCredential;
credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
}
if (completionHandler) {
completionHandler(disposition, credential);
}
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] &&
[challenge.protectionSpace.host isEqualToString:@"localhost"]) {
[StatusDownloaderOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
} else {
[super URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
}
}
@end
@implementation RCTHTTPRequestHandler (SelfSigned)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] &&
[challenge.protectionSpace.host isEqualToString:@"localhost"]) {
[StatusDownloaderOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
} else {
if (completionHandler) {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
}
}
@end

View File

@ -10,10 +10,16 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import statusgo.Statusgo;
public class StatusPackage implements ReactPackage { public class StatusPackage implements ReactPackage {
private boolean rootedDevice; private boolean rootedDevice;
public static String getImageTLSCert() {
return Statusgo.imageServerTLSCert();
}
public StatusPackage(boolean rootedDevice) { public StatusPackage(boolean rootedDevice) {
this.rootedDevice = rootedDevice; this.rootedDevice = rootedDevice;
} }

View File

@ -3933,48 +3933,6 @@
} }
}, },
{
"path": "com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3",
"host": "https://plugins.gradle.org/m2",
"type": "jar",
"pom": {
"sha1": "de3576b735ff4fb2c9b60701b7c346c905c48433",
"sha256": "1pra3yy7pig69a9dz508wxarl1g4m7rdhvyga22lh16szpvc5rsk"
},
"jar": {
"sha1": "c4540aecb99b9ec380acef6c10bb6f700de8ac2c",
"sha256": "1h0whgk0bj7zid7kdy4hwz5n3jxcz8wi5mycqwjsqsndvlyk3ip2"
}
},
{
"path": "com/facebook/flipper/flipper-fresco-plugin/0.54.0/flipper-fresco-plugin-0.54.0",
"host": "https://plugins.gradle.org/m2",
"type": "aar",
"pom": {
"sha1": "78b6dd76ca355a13262d1b6fe97ea225d5b8c445",
"sha256": "0p5j7nix6q86xa3fiq0i2bnnb6qaszdl2yyq0w5c8yva86drvfrw"
},
"jar": {
"sha1": "36a4f4a3f4173cd4bdfe9a7f078e56fc93b63e64",
"sha256": "0kbv37kcj3lr3bikjfyfk48a0cq06n8jadbcyl7i6w7pr9lh7hlc"
}
},
{
"path": "com/facebook/flipper/flipper/0.54.0/flipper-0.54.0",
"host": "https://plugins.gradle.org/m2",
"type": "aar",
"pom": {
"sha1": "f1e963be185c5c5d5a8416faf16af29fddeaf1ab",
"sha256": "023hmlkczyswy2bdl559rasw7w3fi8210qkspl2wdh70axq8qvjq"
},
"jar": {
"sha1": "55d7417b5db25a08ac19048a6d03a44770ef1f68",
"sha256": "0aifn1d43f9b2xvww0r3xn59hv4np3s84m737xd2rkhvl38hcr5p"
}
},
{ {
"path": "com/facebook/fresco/drawee/2.2.0/drawee-2.2.0", "path": "com/facebook/fresco/drawee/2.2.0/drawee-2.2.0",
"host": "https://plugins.gradle.org/m2", "host": "https://plugins.gradle.org/m2",
@ -4101,20 +4059,6 @@
} }
}, },
{
"path": "com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1",
"host": "https://plugins.gradle.org/m2",
"type": "jar",
"pom": {
"sha1": "59f786ef9485f034cfed3f0c9cd7bdee8155314b",
"sha256": "1c11zbpsmfyaklgjc5r401li1155jb89f9mx53hb84zp4zd28nqk"
},
"jar": {
"sha1": "3d015bb821875657ac8e4b808a223aae339defb2",
"sha256": "02czcs5blwl6l60ka82h5k355ib4szfrawg7s8dnba0jrdm8gs4z"
}
},
{ {
"path": "antlr/antlr/2.7.7/antlr-2.7.7", "path": "antlr/antlr/2.7.7/antlr-2.7.7",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -5109,6 +5053,20 @@
} }
}, },
{
"path": "com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "de3576b735ff4fb2c9b60701b7c346c905c48433",
"sha256": "1pra3yy7pig69a9dz508wxarl1g4m7rdhvyga22lh16szpvc5rsk"
},
"jar": {
"sha1": "c4540aecb99b9ec380acef6c10bb6f700de8ac2c",
"sha256": "1h0whgk0bj7zid7kdy4hwz5n3jxcz8wi5mycqwjsqsndvlyk3ip2"
}
},
{ {
"path": "com/facebook/fbjni/fbjni/0.0.2/fbjni-0.0.2", "path": "com/facebook/fbjni/fbjni/0.0.2/fbjni-0.0.2",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -5123,6 +5081,34 @@
} }
}, },
{
"path": "com/facebook/flipper/flipper-fresco-plugin/0.54.0/flipper-fresco-plugin-0.54.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "aar",
"pom": {
"sha1": "78b6dd76ca355a13262d1b6fe97ea225d5b8c445",
"sha256": "0p5j7nix6q86xa3fiq0i2bnnb6qaszdl2yyq0w5c8yva86drvfrw"
},
"jar": {
"sha1": "36a4f4a3f4173cd4bdfe9a7f078e56fc93b63e64",
"sha256": "0kbv37kcj3lr3bikjfyfk48a0cq06n8jadbcyl7i6w7pr9lh7hlc"
}
},
{
"path": "com/facebook/flipper/flipper/0.54.0/flipper-0.54.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "aar",
"pom": {
"sha1": "f1e963be185c5c5d5a8416faf16af29fddeaf1ab",
"sha256": "023hmlkczyswy2bdl559rasw7w3fi8210qkspl2wdh70axq8qvjq"
},
"jar": {
"sha1": "55d7417b5db25a08ac19048a6d03a44770ef1f68",
"sha256": "0aifn1d43f9b2xvww0r3xn59hv4np3s84m737xd2rkhvl38hcr5p"
}
},
{ {
"path": "com/facebook/fresco/animated-base/2.2.0/animated-base-2.2.0", "path": "com/facebook/fresco/animated-base/2.2.0/animated-base-2.2.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -5501,6 +5487,20 @@
} }
}, },
{
"path": "com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "59f786ef9485f034cfed3f0c9cd7bdee8155314b",
"sha256": "1c11zbpsmfyaklgjc5r401li1155jb89f9mx53hb84zp4zd28nqk"
},
"jar": {
"sha1": "3d015bb821875657ac8e4b808a223aae339defb2",
"sha256": "02czcs5blwl6l60ka82h5k355ib4szfrawg7s8dnba0jrdm8gs4z"
}
},
{ {
"path": "com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0", "path": "com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -5960,16 +5960,16 @@
}, },
{ {
"path": "com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0", "path": "com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "972fdb73175fce135e78555269ede8c8d3b36f74", "sha1": "ced1afa200bbf344ccdef14b92aa84f7863f395c",
"sha256": "1k6021km41hzmh68yzzj9hhsfs5i1qjw7cljv7facxwaaygxr06n" "sha256": "026z5plz8bpn8g4nnjr9zf2v68v3qm15vrzcw8marsfjy80wlq82"
}, },
"jar": { "jar": {
"sha1": "9bc20b94d3ac42489cf6ce1e42509c86f6f861a1", "sha1": "c5a0ace696d3f8b1c1d8cc036d8c03cc0cbe6b69",
"sha256": "18940w3fbh9z4d9xrazfkw69y640ymfk7z42dhgd91pvbp9d8jd2" "sha256": "1v5p6w0ml7hy0n9vjqr2nvlf3f684m94s43xhiba0vxl88cbj73j"
} }
}, },
@ -6014,12 +6014,12 @@
}, },
{ {
"path": "com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0", "path": "com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "pom", "type": "pom",
"pom": { "pom": {
"sha1": "0d70888ba27b15543d639b0be077b1d0d6d38c40", "sha1": "bd585f378139da5b5e670840892c48e75d03cf7b",
"sha256": "1yl9y1rcgq47cdk11y3xi8f0fvnbq5gfkglp430h1ychqj3im287" "sha256": "0l85aka3gs1x3jarlp38ndl5lwcaic5xhvqb6ffsf9668k5z10w2"
} }
}, },
@ -6537,6 +6537,20 @@
} }
}, },
{
"path": "com/squareup/okhttp3/okhttp-tls/3.12.12/okhttp-tls-3.12.12",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "46fd244a7b499ca9c9915617267bf5bb67709816",
"sha256": "0lq2fwzq3i8h5361x9zbgnc0z3nqkczbh4kk5qxiwqnl5wgfq7xb"
},
"jar": {
"sha1": "05abcbe1626d83fb6c82306396ec479b49683675",
"sha256": "1cm73al26q0vv2dpb258yjbc375161bhbjrsjqn93mbca006c42f"
}
},
{ {
"path": "com/squareup/okhttp3/okhttp-urlconnection/3.12.12/okhttp-urlconnection-3.12.12", "path": "com/squareup/okhttp3/okhttp-urlconnection/3.12.12/okhttp-urlconnection-3.12.12",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -6594,16 +6608,16 @@
}, },
{ {
"path": "com/squareup/okhttp3/okhttp/5.0.0-alpha.3/okhttp-5.0.0-alpha.3", "path": "com/squareup/okhttp3/okhttp/5.0.0-alpha.4/okhttp-5.0.0-alpha.4",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "f57e69bf80c4307a338188b1629fd0dc09814df4", "sha1": "928427ff8d8c2326263733462bc5f8ea1021b5cb",
"sha256": "1nsq0ar2sr9yhhkip3f6jzpyp66jz1vzb1mb2b7xn0hn24zd2nbd" "sha256": "11iwhxf9ndkd6qmnb3iim97hm9h20v3fkvr8hnav5ypy44mgxilk"
}, },
"jar": { "jar": {
"sha1": "b1636a6c8b77837a3a34f197ebdf8e9f48bdc1d7", "sha1": "bca0daab030b78fbc74e97e45dd01c6826cf4959",
"sha256": "1a3iya8n1gc50m79pjh1520gckgbfs7882kmkzj8frhg5sjc97gh" "sha256": "0s305pbn9rc8y37grz2gmzgmzpi4zdhg9r0sm4fknnimyzdk6j5x"
} }
}, },
@ -6637,20 +6651,6 @@
} }
}, },
{
"path": "com/squareup/okio/okio-jvm/3.0.0/okio-jvm-3.0.0",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "63dca88e80ade884bc68585baa9940f5c8027bfa",
"sha256": "1ym2ydp7b9nqfi9nfmliyjqhwhny926698jk58xmhyb39i277jxh"
},
"jar": {
"sha1": "0ab5a73fa2ccb4a36b0b5c69fe10b16d0255bcf8",
"sha256": "01z946cpr2dzjyrrbi1qsw4chwmgaxspxpbhr7arrsi83z6a0r5y"
}
},
{ {
"path": "com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0", "path": "com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -6993,6 +6993,34 @@
} }
}, },
{
"path": "com/willowtreeapps/assertk/assertk/0.25/assertk-0.25",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "557170cd696a66845f2f97c36b20b372739dff34",
"sha256": "0d6lqsv2j6z9bjzag72bffyswnbbgrz1qcaydm7i2kc34wxz5hjs"
},
"jar": {
"sha1": "c20894404c38109ed837f6f6d254987777a06b0c",
"sha256": "0341gbcpz37abbk61xyfxmj5gjxggpvwpq5s16zrjkkrgx7v1sfi"
}
},
{
"path": "com/willowtreeapps/opentest4k/opentest4k/1.2.2/opentest4k-1.2.2",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "e5c64dc093a91d1e2f591d0742798bb8f325b0ea",
"sha256": "1wn81995g9qdnxfgbscrm4a07m565dmk7mnycrw575w6vjjl0sca"
},
"jar": {
"sha1": "cc1388f1517c5fb7b83009abbc2f0eb2883739ef",
"sha256": "0g31fw5nvd09nc3pkgzpiwmbvizbxw2wv0vz76m2xbpy8wh8n9jg"
}
},
{ {
"path": "de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3", "path": "de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -8519,6 +8547,20 @@
} }
}, },
{
"path": "org/bouncycastle/bcprov-jdk15on/1.70/bcprov-jdk15on-1.70",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "696dce53f1cd6ea922402e76a6adce522cedda05",
"sha256": "1c5b2vhc175kf34qkjq76s0awm3iwn2s435dciv02qlhdnvvbx3d"
},
"jar": {
"sha1": "4636a0d01f74acaf28082fb62b317f1080118371",
"sha256": "1m1hmjyv3jkg94k70amn76ngimyh6xx8bm786dpx4rfmwbij0g4g"
}
},
{ {
"path": "org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2", "path": "org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -8534,16 +8576,16 @@
}, },
{ {
"path": "org/checkerframework/checker-qual/3.21.1/checker-qual-3.21.1", "path": "org/checkerframework/checker-qual/3.21.2/checker-qual-3.21.2",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "8702ac7cebf178330090c6a3a9149a33a5c32ade", "sha1": "5210da6cfdbdeb9371e82e7c763b40da9d9cf729",
"sha256": "1ajmkrhrpvdwp2qldnp7cp7nd3z4d8rp65bghzx2il270fv6jsw7" "sha256": "15d34cvi8vyb81lsxia5qn4w66kzhnddi16mpi05mxkpj5qd9iw1"
}, },
"jar": { "jar": {
"sha1": "cfa7c49db84e21f9fd7799584d7d09f28a665db7", "sha1": "630f15607e9850363c10c81283a65bfbce622146",
"sha256": "0czlxlbxzpa7ys9rjpz9kwm729dpbf7jfah25x35h88syvvxsyvn" "sha256": "1s7cm30zbr6qpw8c8lmnivxspv449jkf7kwn2gk3kf5r0b4m91by"
} }
}, },
@ -8600,16 +8642,16 @@
}, },
{ {
"path": "org/codehaus/mojo/animal-sniffer-annotations/1.20/animal-sniffer-annotations-1.20", "path": "org/codehaus/mojo/animal-sniffer-annotations/1.21/animal-sniffer-annotations-1.21",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "4daa545f375cc4e539a97425fb75aa52f856d5e4", "sha1": "4468907f1901b842bab7bc4c7ef16f84d6e576df",
"sha256": "149f92fjjr21y0hv0sxfwaayl3dwgm8sadi472i6dchvpaj6wdz6" "sha256": "1br40cgyfpv32xr6c3mb3fzg5sx6my1kp8s6d3nhicxgjq0drsnd"
}, },
"jar": { "jar": {
"sha1": "0d98c2b001fcb9031859ec9d21914c2ce78912a5", "sha1": "419a9acd297cb6fe6f91b982d909f2c20e9fa5c0",
"sha256": "1b12fpkw0gz0d04jd0bpqr70jx6fw3qddlccq3svihidrbgl9pdy" "sha256": "0m0xcnqk1v9bkcf52bkgac7ksnsjp32f4c5nayd9a93yjcf8899g"
} }
}, },
@ -8634,12 +8676,12 @@
}, },
{ {
"path": "org/codehaus/mojo/animal-sniffer-parent/1.20/animal-sniffer-parent-1.20", "path": "org/codehaus/mojo/animal-sniffer-parent/1.21/animal-sniffer-parent-1.21",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "pom", "type": "pom",
"pom": { "pom": {
"sha1": "a1725fa054a1b943fa3a8e7ee72f1b57b507488d", "sha1": "33f21501882f382578c943ddf5e9035de80ee9fa",
"sha256": "1bqwv253zjjgm0fdm3hinqmbmvgj8vpwh650cvfrvcg6mdsfd4y4" "sha256": "1z2i1kl10l44w6vwmxg37b51c60b8c3ibn12ja4a3flf9fkmfqs2"
} }
}, },
@ -8664,12 +8706,12 @@
}, },
{ {
"path": "org/codehaus/mojo/mojo-parent/61/mojo-parent-61", "path": "org/codehaus/mojo/mojo-parent/65/mojo-parent-65",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "pom", "type": "pom",
"pom": { "pom": {
"sha1": "11fdf4908dbf89fc128efc868ad990ad0a0a8b8a", "sha1": "0599365e99855a082531d962070c67aeba360d0e",
"sha256": "1bh5g5nzl8624prasq9r4r8i3r7cw7b7bwa9g7342rghbjsl4cvm" "sha256": "0xm6m26l5c52a4p59s1kn276i4wla6ccb2hhrbn3xf4plm0b97y8"
} }
}, },
@ -9771,6 +9813,20 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.5.30/kotlin-stdlib-common-1.5.30",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "850c3ca345e0afacbfaf203f5259e3e1be59df9e",
"sha256": "1g74j6k1lbnljsy2dif47mmc3hrwqch6j6zi1mdp4mh11r812w6d"
},
"jar": {
"sha1": "649ffab7767038323fec0cc41e2d7b0a8f65a378",
"sha256": "1f346x78anwcxyj1lbywjz4vwa66la5sgfyhz3h2514p199srcwf"
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31", "path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -9785,6 +9841,20 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.6.10/kotlin-stdlib-common-1.6.10",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "d3974425e52440bfe098563c1f10f5712471453d",
"sha256": "157hbi7c8zk5mbz762rr384jl29j9841iq70n43rxpfqrlbz4npp"
},
"jar": {
"sha1": "0c118700e3a33c8a0d9adc920e9dec0831171925",
"sha256": "1zgg6x5lfnq2cr84fnb12zrbihnx8yqc30gf96d0qmp4jh4xs398"
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71", "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -9841,20 +9911,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.5.31/kotlin-stdlib-jdk7-1.5.31",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "b3f53ded7aa6f0f85abfeca4b1a721849587de2d",
"sha256": "0y4p0y6csx1h7knpn649z4da3gq0yx2pg1v8f0cnhfi9xs4q84r3"
},
"jar": {
"sha1": "77e0f2568912e45d26c31fd417a332458508acdf",
"sha256": "0py1sypb9rq10f6pzagvwxrk99r1sqbfbpmx7j29v2ffadrz8nx2"
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71", "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -9911,20 +9967,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.5.31/kotlin-stdlib-jdk8-1.5.31",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "6b1353e3e341eeddeea8e67db3d89bed51ceb920",
"sha256": "1pwkm0nx186pma90db27hxzb7lhqmwnjpc07b20jnybl02mhl4a5"
},
"jar": {
"sha1": "ff5d99aecd328872494e8921b72bf6e3af97af3e",
"sha256": "1p2z9ifcwm1mwa307dhrvsz3wvdx883l8ivy8792kw5cg9vgfj5m"
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0", "path": "org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -10107,20 +10149,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib/1.5.31/kotlin-stdlib-1.5.31",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "f0765608cf114ef9fd254be913fcc39797b40cc4",
"sha256": "0v1fhm2dhr0jvdiislprp39vjxdd3gfk7w6914q8fkmc0h0pcxlg"
},
"jar": {
"sha1": "6628d61d0f5603568e72d2d5915d2c034b4f1c55",
"sha256": "0s3y58i395qvpga35fjfxb8yl62kwfw58w88kaavj2zcnancw028"
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-test-common/1.4.31/kotlin-test-common-1.4.31", "path": "org/jetbrains/kotlin/kotlin-test-common/1.4.31/kotlin-test-common-1.4.31",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -10215,6 +10243,16 @@
} }
}, },
{
"path": "org/junit/junit-bom/5.8.2/junit-bom-5.8.2",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "90eab8a5a400f15b8e1cb6e65af0ceb616f23bba",
"sha256": "1ql6yb1zqznlzn26vl9zplvz2qqj57d24qip91pcbqwfkv56jq43"
}
},
{ {
"path": "org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0", "path": "org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
@ -10960,54 +10998,54 @@
}, },
{ {
"path": "org/slf4j/jcl-over-slf4j/2.0.0-alpha5/jcl-over-slf4j-2.0.0-alpha5", "path": "org/slf4j/jcl-over-slf4j/2.0.0-alpha6/jcl-over-slf4j-2.0.0-alpha6",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "10fd59906c5a47da77f96834c464da7fd472851a", "sha1": "0c2080c93f767a568f99911768b2ab2abcb78009",
"sha256": "11k9830p0ifvwdrravzxm3l3b116k9978bw54lg1av4x8w48d737" "sha256": "0nkpxccmxdgzma06nh7rknxiymv1m3yd8m5i2z9c159bhia446zs"
}, },
"jar": { "jar": {
"sha1": "b7bf757b84f08ee7449da3122aa1ad5462ab6eec", "sha1": "1833f64b12761f8e4fafac490df27379db2c8b58",
"sha256": "1ck382s2x4dxv9svvxlbd5m9czy5nk3ynjsjjgwc5hx0i0phxsz2" "sha256": "1bqx6k6gw6124skxr3pwi6x5awxpf1wvzm9c6agjs879hbsjylqq"
} }
}, },
{ {
"path": "org/slf4j/slf4j-api/2.0.0-alpha5/slf4j-api-2.0.0-alpha5", "path": "org/slf4j/slf4j-api/2.0.0-alpha6/slf4j-api-2.0.0-alpha6",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "81b5496c77956334945b92738f2407d6c6eb8065", "sha1": "0435fb3801e7b028a169062383f34a1aa7b12e1a",
"sha256": "1swyj4dk8b1g93b9kw5jrx5m1jx5jin0nap13i3agjq5ld1hkwqn" "sha256": "1z0nx6rw8l2shn3w18cmy4455i69pc3z7b2wgs9qarf2sqh57mqa"
}, },
"jar": { "jar": {
"sha1": "241721b0e0ef3cd6cf584b8f0e24d24ea80799ea", "sha1": "4dbe258ca244936b915f15bc6006cb4224421390",
"sha256": "1nzyyj2mjyv2n70r6g0nb75gnn5prizjqcxa392ca3lmjm8r77r9" "sha256": "0bjgx4biww7na0cjcwm9m8nbr38jgzw2lnfyxrriw2yq94gkls4b"
} }
}, },
{ {
"path": "org/slf4j/slf4j-jdk14/2.0.0-alpha5/slf4j-jdk14-2.0.0-alpha5", "path": "org/slf4j/slf4j-jdk14/2.0.0-alpha6/slf4j-jdk14-2.0.0-alpha6",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "jar", "type": "jar",
"pom": { "pom": {
"sha1": "9055ded49a361930af4696831f2e5c9ea92e52b9", "sha1": "a3434dc6e8c66d7c0043192fcd2b2bc3ac58ad64",
"sha256": "1b6yw0lwlmd51sjcqw143x894xzf82z16dj9db0pa1cizlpb2c0c" "sha256": "0skwqjwzvvysva5kd6lgxl5z0y51bsnj13vfznppcsagia1xaa88"
}, },
"jar": { "jar": {
"sha1": "303aca334e7eccf86bfe61d3c8f769bc1b81ae82", "sha1": "26af0196ec5f631d9565257bcfb10993e7b2c5fa",
"sha256": "0krwvrda0p9gqvv14gqzd8cxwgndgsrwfh2336zyzv741xlqfgkc" "sha256": "0jj3vln4s0gw443cyfs93n8309y9an3n4q20vrz4azpkg3586pib"
} }
}, },
{ {
"path": "org/slf4j/slf4j-parent/2.0.0-alpha5/slf4j-parent-2.0.0-alpha5", "path": "org/slf4j/slf4j-parent/2.0.0-alpha6/slf4j-parent-2.0.0-alpha6",
"host": "https://repo.maven.apache.org/maven2", "host": "https://repo.maven.apache.org/maven2",
"type": "pom", "type": "pom",
"pom": { "pom": {
"sha1": "7099e8b69993614780298f3ec9be6621a45a12c8", "sha1": "22a1b39a5a2298f1ec637604000423988700627d",
"sha256": "01rj9wp9x09685ds1w14alzs7nfr3gks9yss9gh8am2xp45akbya" "sha256": "09ra3bf0yz6r5k0rcpr0mw0w0xfk26sybgcsfby4z4apsjjw5gwv"
} }
}, },

View File

@ -390,6 +390,7 @@ com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0
com.parse.bolts:bolts-applinks:1.4.0 com.parse.bolts:bolts-applinks:1.4.0
com.parse.bolts:bolts-tasks:1.4.0 com.parse.bolts:bolts-tasks:1.4.0
com.squareup.assertj:assertj-android:1.1.1 com.squareup.assertj:assertj-android:1.1.1
com.squareup.okhttp3:okhttp-tls:3.12.12
com.squareup.okhttp3:okhttp-urlconnection:3.12.12 com.squareup.okhttp3:okhttp-urlconnection:3.12.12
com.squareup.okhttp3:okhttp:3.12.12 com.squareup.okhttp3:okhttp:3.12.12
com.squareup.okio:okio:1.15.0 com.squareup.okio:okio:1.15.0

View File

@ -279,9 +279,6 @@ https://jitpack.io/com/github/status-im/status-keycard-java/lib/3.0.4/lib-3.0.4.
https://jitpack.io/com/github/wix-playground/ahbottomnavigation/3.3.0/ahbottomnavigation-3.3.0.pom https://jitpack.io/com/github/wix-playground/ahbottomnavigation/3.3.0/ahbottomnavigation-3.3.0.pom
https://jitpack.io/com/github/wix-playground/reflow-animator/1.0.6/reflow-animator-1.0.6.pom https://jitpack.io/com/github/wix-playground/reflow-animator/1.0.6/reflow-animator-1.0.6.pom
https://jitpack.io/com/github/yalantis/ucrop/2.2.6-native/ucrop-2.2.6-native.pom https://jitpack.io/com/github/yalantis/ucrop/2.2.6-native/ucrop-2.2.6-native.pom
https://plugins.gradle.org/m2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
https://plugins.gradle.org/m2/com/facebook/flipper/flipper-fresco-plugin/0.54.0/flipper-fresco-plugin-0.54.0.pom
https://plugins.gradle.org/m2/com/facebook/flipper/flipper/0.54.0/flipper-0.54.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/drawee/2.2.0/drawee-2.2.0.pom https://plugins.gradle.org/m2/com/facebook/fresco/drawee/2.2.0/drawee-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/fbcore/2.2.0/fbcore-2.2.0.pom https://plugins.gradle.org/m2/com/facebook/fresco/fbcore/2.2.0/fbcore-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/fresco/2.2.0/fresco-2.2.0.pom https://plugins.gradle.org/m2/com/facebook/fresco/fresco/2.2.0/fresco-2.2.0.pom
@ -291,7 +288,6 @@ https://plugins.gradle.org/m2/com/facebook/fresco/memory-type-java/2.2.0/memory-
https://plugins.gradle.org/m2/com/facebook/fresco/memory-type-native/2.2.0/memory-type-native-2.2.0.pom https://plugins.gradle.org/m2/com/facebook/fresco/memory-type-native/2.2.0/memory-type-native-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/nativeimagefilters/2.2.0/nativeimagefilters-2.2.0.pom https://plugins.gradle.org/m2/com/facebook/fresco/nativeimagefilters/2.2.0/nativeimagefilters-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/stetho/2.2.0/stetho-2.2.0.pom https://plugins.gradle.org/m2/com/facebook/fresco/stetho/2.2.0/stetho-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
https://repo.maven.apache.org/maven2/antlr/antlr/2.7.7/antlr-2.7.7.pom https://repo.maven.apache.org/maven2/antlr/antlr/2.7.7/antlr-2.7.7.pom
https://repo.maven.apache.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2.pom https://repo.maven.apache.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.4/commons-codec-1.4.pom https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.4/commons-codec-1.4.pom
@ -363,7 +359,10 @@ https://repo.maven.apache.org/maven2/com/android/tools/sdk-common/24.3.1/sdk-com
https://repo.maven.apache.org/maven2/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0.pom https://repo.maven.apache.org/maven2/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0.pom
https://repo.maven.apache.org/maven2/com/drewnoakes/metadata-extractor/2.9.1/metadata-extractor-2.9.1.pom https://repo.maven.apache.org/maven2/com/drewnoakes/metadata-extractor/2.9.1/metadata-extractor-2.9.1.pom
https://repo.maven.apache.org/maven2/com/facebook/conceal/conceal/1.1.3/conceal-1.1.3.pom https://repo.maven.apache.org/maven2/com/facebook/conceal/conceal/1.1.3/conceal-1.1.3.pom
https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni/0.0.2/fbjni-0.0.2.pom https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni/0.0.2/fbjni-0.0.2.pom
https://repo.maven.apache.org/maven2/com/facebook/flipper/flipper-fresco-plugin/0.54.0/flipper-fresco-plugin-0.54.0.pom
https://repo.maven.apache.org/maven2/com/facebook/flipper/flipper/0.54.0/flipper-0.54.0.pom
https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-base/2.2.0/animated-base-2.2.0.pom https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-base/2.2.0/animated-base-2.2.0.pom
https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-drawable/2.2.0/animated-drawable-2.2.0.pom https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-drawable/2.2.0/animated-drawable-2.2.0.pom
https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-gif/2.2.0/animated-gif-2.2.0.pom https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-gif/2.2.0/animated-gif-2.2.0.pom
@ -391,6 +390,7 @@ https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.6.0/soload
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.8.2/soloader-0.8.2.pom https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.8.2/soloader-0.8.2.pom
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.9.0/soloader-0.9.0.pom https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.9.0/soloader-0.9.0.pom
https://repo.maven.apache.org/maven2/com/facebook/stetho/stetho/1.3.1/stetho-1.3.1.pom https://repo.maven.apache.org/maven2/com/facebook/stetho/stetho/1.3.1/stetho-1.3.1.pom
https://repo.maven.apache.org/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0.pom https://repo.maven.apache.org/maven2/com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/compiler/4.12.0/compiler-4.12.0.pom https://repo.maven.apache.org/maven2/com/github/bumptech/glide/compiler/4.12.0/compiler-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/disklrucache/4.12.0/disklrucache-4.12.0.pom https://repo.maven.apache.org/maven2/com/github/bumptech/glide/disklrucache/4.12.0/disklrucache-4.12.0.pom
@ -426,12 +426,12 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotatio
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.1.2/error_prone_annotations-2.1.2.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.1.2/error_prone_annotations-2.1.2.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.2/error_prone_parent-2.1.2.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.2/error_prone_parent-2.1.2.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0.pom https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-parent-17.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-parent-17.0.pom
@ -473,15 +473,15 @@ https://repo.maven.apache.org/maven2/com/parse/bolts/bolts-tasks/1.4.0/bolts-tas
https://repo.maven.apache.org/maven2/com/squareup/assertj/assertj-android/1.1.1/assertj-android-1.1.1.pom https://repo.maven.apache.org/maven2/com/squareup/assertj/assertj-android/1.1.1/assertj-android-1.1.1.pom
https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-tls/3.12.12/okhttp-tls-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/3.12.12/okhttp-urlconnection-3.12.12.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/3.12.12/okhttp-urlconnection-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.12/okhttp-3.12.12.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.12/okhttp-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.3/okhttp-5.0.0-alpha.3.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.4/okhttp-5.0.0-alpha.4.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.12/parent-3.12.12.pom https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.12/parent-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.0.0/okio-jvm-3.0.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.pom https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0/okio-3.0.0.pom https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0/okio-3.0.0.pom
@ -511,6 +511,8 @@ https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-master/4.9.0/an
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.5/antlr4-runtime-4.5.pom https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.5/antlr4-runtime-4.5.pom
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.9.0/antlr4-runtime-4.9.0.pom https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.9.0/antlr4-runtime-4.9.0.pom
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.pom https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.pom
https://repo.maven.apache.org/maven2/com/willowtreeapps/assertk/assertk/0.25/assertk-0.25.pom
https://repo.maven.apache.org/maven2/com/willowtreeapps/opentest4k/opentest4k/1.2.2/opentest4k-1.2.2.pom
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3.pom https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3.pom
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/4.0.2/gradle-download-task-4.0.2.pom https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/4.0.2/gradle-download-task-4.0.2.pom
https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
@ -636,19 +638,20 @@ https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.48/bcprov
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.pom https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60.pom https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.65/bcprov-jdk15on-1.65.pom https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.65/bcprov-jdk15on-1.65.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.70/bcprov-jdk15on-1.70.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.pom https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.21.1/checker-qual-3.21.1.pom https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.21.2/checker-qual-3.21.2.pom
https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.pom https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.20/animal-sniffer-annotations-1.20.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.21/animal-sniffer-annotations-1.21.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.14/animal-sniffer-parent-1.14.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.14/animal-sniffer-parent-1.14.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.17/animal-sniffer-parent-1.17.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.17/animal-sniffer-parent-1.17.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.20/animal-sniffer-parent-1.20.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.21/animal-sniffer-parent-1.21.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-parent-34.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-parent-34.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/40/mojo-parent-40.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/40/mojo-parent-40.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/61/mojo-parent-61.pom https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/65/mojo-parent-65.pom
https://repo.maven.apache.org/maven2/org/conscrypt/conscrypt-android/2.0.0/conscrypt-android-2.0.0.pom https://repo.maven.apache.org/maven2/org/conscrypt/conscrypt-android/2.0.0/conscrypt-android-2.0.0.pom
https://repo.maven.apache.org/maven2/org/easymock/easymockclassextension/3.2/easymockclassextension-3.2.pom https://repo.maven.apache.org/maven2/org/easymock/easymockclassextension/3.2/easymockclassextension-3.2.pom
https://repo.maven.apache.org/maven2/org/easymock/easymock-parent/3.2/easymock-parent-3.2.pom https://repo.maven.apache.org/maven2/org/easymock/easymock-parent/3.2/easymock-parent-3.2.pom
@ -730,17 +733,17 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.31/kotlin-stdlib-common-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.31/kotlin-stdlib-common-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.30/kotlin-stdlib-common-1.5.30.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.6.10/kotlin-stdlib-common-1.6.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.31/kotlin-stdlib-jdk7-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.31/kotlin-stdlib-jdk7-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.5.31/kotlin-stdlib-jdk7-1.5.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50/kotlin-stdlib-jdk8-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50/kotlin-stdlib-jdk8-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.31/kotlin-stdlib-jdk8-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.31/kotlin-stdlib-jdk8-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.5.31/kotlin-stdlib-jdk8-1.5.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/kotlin-stdlib-1.1.3-2.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/kotlin-stdlib-1.1.3-2.pom
@ -754,7 +757,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/k
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.30/kotlin-stdlib-1.4.30.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.30/kotlin-stdlib-1.4.30.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.31/kotlin-stdlib-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.31/kotlin-stdlib-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.5.31/kotlin-stdlib-1.5.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.4.31/kotlin-test-common-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.4.31/kotlin-test-common-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.4.31/kotlin-test-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.4.31/kotlin-test-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.3.50/kotlin-util-io-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.3.50/kotlin-util-io-1.3.50.pom
@ -762,6 +764,7 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.4.31/
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.4.31/kotlin-util-klib-1.4.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.4.31/kotlin-util-klib-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.7.0/junit-bom-5.7.0.pom https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.7.0/junit-bom-5.7.0.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.8.2/junit-bom-5.8.2.pom
https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.pom https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.pom
https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.pom https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.pom
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
@ -818,10 +821,10 @@ https://repo.maven.apache.org/maven2/org/robolectric/shadowapi/4.4/shadowapi-4.4
https://repo.maven.apache.org/maven2/org/robolectric/shadows-framework/4.4/shadows-framework-4.4.pom https://repo.maven.apache.org/maven2/org/robolectric/shadows-framework/4.4/shadows-framework-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/utils-reflector/4.4/utils-reflector-4.4.pom https://repo.maven.apache.org/maven2/org/robolectric/utils-reflector/4.4/utils-reflector-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/utils/4.4/utils-4.4.pom https://repo.maven.apache.org/maven2/org/robolectric/utils/4.4/utils-4.4.pom
https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/2.0.0-alpha5/jcl-over-slf4j-2.0.0-alpha5.pom https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/2.0.0-alpha6/jcl-over-slf4j-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/2.0.0-alpha5/slf4j-api-2.0.0-alpha5.pom https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/2.0.0-alpha6/slf4j-api-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/2.0.0-alpha5/slf4j-jdk14-2.0.0-alpha5.pom https://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/2.0.0-alpha6/slf4j-jdk14-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/2.0.0-alpha5/slf4j-parent-2.0.0-alpha5.pom https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/2.0.0-alpha6/slf4j-parent-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/4/oss-parent-4.pom https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/4/oss-parent-4.pom
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.pom https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.pom

View File

@ -1,5 +1,6 @@
app app
react-native-background-timer react-native-background-timer
react-native-blob-util
react-native-camera-kit react-native-camera-kit
react-native-community_async-storage react-native-community_async-storage
react-native-community_audio-toolkit react-native-community_audio-toolkit

View File

@ -40,18 +40,19 @@
"react-native-device-info": "^7.4.0", "react-native-device-info": "^7.4.0",
"react-native-dialogs": "^1.0.4", "react-native-dialogs": "^1.0.4",
"react-native-draggable-flatlist": "^3.0.3", "react-native-draggable-flatlist": "^3.0.3",
"react-native-fast-image": "8.5.11", "react-native-fast-image": "^8.5.11",
"react-native-fetch-polyfill": "^1.1.2", "react-native-fetch-polyfill": "^1.1.2",
"react-native-fs": "^2.14.1", "react-native-fs": "^2.14.1",
"react-native-gesture-handler": "^1.8.0", "react-native-gesture-handler": "^1.8.0",
"react-native-haptic-feedback": "^1.9.0", "react-native-haptic-feedback": "^1.9.0",
"react-native-image-crop-picker": "git+https://github.com/status-im/react-native-image-crop-picker.git#v0.36.2-status.0", "react-native-image-crop-picker": "git+https://github.com/status-im/react-native-image-crop-picker.git#v0.36.2-status.0",
"react-native-image-resizer": "^1.2.3", "react-native-image-resizer": "^1.2.3",
"react-native-image-viewing": "git+https://github.com/Ferossgp/react-native-image-viewing.git#v0.2.1", "react-native-image-viewing": "git+https://github.com/status-im/react-native-image-viewing.git#v0.2.1.status",
"react-native-keychain": "git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-5-status", "react-native-keychain": "git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-5-status",
"react-native-languages": "^3.0.2", "react-native-languages": "^3.0.2",
"react-native-linear-gradient": "^2.5.6", "react-native-linear-gradient": "^2.5.6",
"react-native-mail": "^6.1.1", "react-native-mail": "^6.1.1",
"react-native-blob-util": "^0.13.18",
"react-native-navigation": "^7.13.0", "react-native-navigation": "^7.13.0",
"react-native-permissions": "^2.1.5", "react-native-permissions": "^2.1.5",
"react-native-reanimated": "^2.1.0", "react-native-reanimated": "^2.1.0",

View File

@ -2,6 +2,7 @@
(:require [re-frame.core :as re-frame] (:require [re-frame.core :as re-frame]
[status-im.utils.fx :as fx] [status-im.utils.fx :as fx]
["@react-native-community/cameraroll" :as CameraRoll] ["@react-native-community/cameraroll" :as CameraRoll]
["react-native-blob-util" :default ReactNativeBlobUtil]
[status-im.utils.types :as types] [status-im.utils.types :as types]
[status-im.utils.config :as config] [status-im.utils.config :as config]
[status-im.ui.components.permissions :as permissions] [status-im.ui.components.permissions :as permissions]
@ -12,6 +13,7 @@
[status-im.i18n.i18n :as i18n] [status-im.i18n.i18n :as i18n]
[status-im.utils.utils :as utils] [status-im.utils.utils :as utils]
[status-im.utils.platform :as platform] [status-im.utils.platform :as platform]
[status-im.utils.fs :as fs]
[status-im.chat.models :as chat])) [status-im.chat.models :as chat]))
(def maximum-image-size-px 2000) (def maximum-image-size-px 2000)
@ -37,31 +39,27 @@
(.-localIdentifier result) (.-localIdentifier result)
(.-path result))) (.-path result)))
(defn android-save-image-to-gallery [base64-uri] (def temp-image-url (str (fs/cache-dir) "/StatusIm_Image.jpeg"))
(react/image-get-size
base64-uri (defn download-image-http [base64-uri on-success]
(fn [width height] (-> (.config ReactNativeBlobUtil (clj->js {:trusty platform/ios?
(image-processing/resize :path temp-image-url}))
base64-uri (.fetch "GET" base64-uri)
width (.then #(on-success (.path %)))
height (.catch #(log/error "could not save image"))))
100
(fn [^js resized-image] (defn save-to-gallery [path] (.save CameraRoll path))
(let [path (.-path resized-image)
path (if (string/starts-with? path "file") path (str "file://" path))]
(.save CameraRoll path)))
#(log/error "could not resize image" %)))))
(re-frame/reg-fx (re-frame/reg-fx
::save-image-to-gallery ::save-image-to-gallery
(fn [base64-uri] (fn [base64-uri]
(if platform/ios? (if platform/ios?
(-> (.save CameraRoll base64-uri) (-> (download-image-http base64-uri save-to-gallery)
(.catch #(utils/show-popup (i18n/label :t/error) (.catch #(utils/show-popup (i18n/label :t/error)
(i18n/label :t/external-storage-denied)))) (i18n/label :t/external-storage-denied))))
(permissions/request-permissions (permissions/request-permissions
{:permissions [:write-external-storage] {:permissions [:write-external-storage]
:on-allowed #(android-save-image-to-gallery base64-uri) :on-allowed #(download-image-http base64-uri save-to-gallery)
:on-denied (fn [] :on-denied (fn []
(utils/set-timeout (utils/set-timeout
#(utils/show-popup (i18n/label :t/error) #(utils/show-popup (i18n/label :t/error)

View File

@ -9,13 +9,10 @@
["react-native-image-viewing" :default image-viewing] ["react-native-image-viewing" :default image-viewing]
[status-im.utils.share :as share] [status-im.utils.share :as share]
[taoensso.timbre :as log] [taoensso.timbre :as log]
[status-im.utils.fs :as fs] [status-im.chat.models.images :as images]))
[clojure.string :as string]))
(def temp-image-url (str (fs/cache-dir) "/image.jpeg")) (defn share [path]
(share/open {:url (str (when platform/android? "file://") path)
(defn share []
(share/open {:url (str (when platform/android? "file://") temp-image-url)
:type "image/jpeg"} :type "image/jpeg"}
#(log/debug "image shared successfully") #(log/debug "image shared successfully")
#(log/error "could not share image"))) #(log/error "could not share image")))
@ -40,12 +37,7 @@
:height 24} :height 24}
:color colors/white-persist}]] :color colors/white-persist}]]
[react/touchable-opacity [react/touchable-opacity
{:on-press (fn [] {:on-press #(images/download-image-http (get-in message [:content :image]) share)
(fs/write-file
temp-image-url
(last (string/split (get-in message [:content :image]) ",")) "base64"
#(share)
#(log/error "error writing image to cache dir")))
:style {:margin-left 10} :style {:margin-left 10}
:accessibility-label :share-button} :accessibility-label :share-button}
[icons/icon :main-icons/share-default {:container-style {:width 24 [icons/icon :main-icons/share-default {:container-style {:width 24

View File

@ -99,7 +99,7 @@
(if (and image (if (and image
;; Disabling images for public-chats ;; Disabling images for public-chats
(not public?)) (not public?))
[react/image {:style {:width 56 [react/fast-image {:style {:width 56
:height 56 :height 56
:background-color :black :background-color :black
:border-radius 4} :border-radius 4}
@ -341,24 +341,27 @@
(def image-max-height 192) (def image-max-height 192)
(defn image-set-size [dimensions] (defn image-set-size [dimensions]
(fn [width height] (fn [evt]
(when (< width height) (let [width (.-width (.-nativeEvent evt))
height (.-height (.-nativeEvent evt))]
(if (< width height)
;; if width less than the height we reduce width proportionally to height ;; if width less than the height we reduce width proportionally to height
(let [k (/ height image-max-height)] (let [k (/ height image-max-height)]
(when (not= (/ width k) (first @dimensions)) (when (not= (/ width k) (first @dimensions))
(reset! dimensions [(/ width k) image-max-height])))))) (reset! dimensions {:width (/ width k) :height image-max-height :loaded true})))
(swap! dimensions assoc :loaded true)))))
(defn message-content-image (defn message-content-image
[{:keys [content outgoing in-popover?] :as message} [{:keys [content outgoing in-popover?] :as message}
{:keys [on-long-press]}] {:keys [on-long-press]}]
(let [dimensions (reagent/atom [image-max-width image-max-height]) (let [dimensions (reagent/atom {:width image-max-width :height image-max-height :loaded false})
visible (reagent/atom false) visible (reagent/atom false)
uri (:image content)] uri (:image content)]
(react/image-get-size uri (image-set-size dimensions))
(fn [] (fn []
(let [style-opts {:outgoing outgoing (let [style-opts {:outgoing outgoing
:width (first @dimensions) :opacity (if (:loaded @dimensions) 1 0)
:height (second @dimensions)}] :width (:width @dimensions)
:height (:height @dimensions)}]
[:<> [:<>
[preview/preview-image {:message message [preview/preview-image {:message message
:visible @visible :visible @visible
@ -371,10 +374,10 @@
:disabled in-popover?} :disabled in-popover?}
[react/view {:style (style/image-message style-opts) [react/view {:style (style/image-message style-opts)
:accessibility-label :image-message} :accessibility-label :image-message}
[react/image {:style (dissoc style-opts :outgoing) [react/fast-image {:style (dissoc style-opts :outgoing)
:resize-mode :cover :on-load (image-set-size dimensions)
:source {:uri uri}} :source {:uri uri}}]
[react/view {:style (style/image-message-border style-opts)}]]]]])))) [react/view {:style (style/image-message-border style-opts)}]]]]))))
(defmulti ->message :content-type) (defmulti ->message :content-type)

View File

@ -12,9 +12,8 @@
(fn [photo-path size accessibility-label _] (fn [photo-path size accessibility-label _]
(let [identicon? (when photo-path (profile.db/base64-png? photo-path))] (let [identicon? (when photo-path (profile.db/base64-png? photo-path))]
[react/view {:style (style/photo-container size)} [react/view {:style (style/photo-container size)}
[react/image {:source (utils.image/source photo-path) [react/fast-image {:source (utils.image/source photo-path)
:style (style/photo size) :style (style/photo size)
:resize-mode :cover
:accessibility-label (or accessibility-label :chat-icon)}] :accessibility-label (or accessibility-label :chat-icon)}]
(when identicon? (when identicon?
[react/view {:style (style/photo-border size)}])])))) [react/view {:style (style/photo-border size)}])]))))
@ -37,8 +36,7 @@
(defn member-identicon [identicon] (defn member-identicon [identicon]
(let [size style/default-size] (let [size style/default-size]
[react/view {:style (style/photo-container size)} [react/view {:style (style/photo-container size)}
[react/image {:source {:uri identicon} [react/fast-image {:source {:uri identicon}
:style (style/photo size) :style (style/photo size)
:resize-mode :cover
:accessibility-label :member-photo}] :accessibility-label :member-photo}]
[react/view {:style (style/photo-border size)}]])) [react/view {:style (style/photo-border size)}]]))

View File

@ -24,40 +24,29 @@
(defonce messages-list-ref (atom nil)) (defonce messages-list-ref (atom nil))
(def image-max-dimension 192) (def image-max-dimension 192)
(def image-sizes (atom {}))
(defn image-set-size [dimensions uri] (defn image-set-size [width]
(fn [width height] (fn [evt]
(swap! image-sizes assoc uri {:initialized? true}) (reset! width (/ (.-width (.-nativeEvent evt)) (/ (.-height (.-nativeEvent evt)) image-max-dimension)))))
(when (< width height)
;; if width less than the height we reduce width proportionally to height
(let [k (/ height image-max-dimension)]
(when (not= (/ width k) (first @dimensions))
(swap! image-sizes assoc uri {:width (/ width k)})
(reset! dimensions [(/ width k) image-max-dimension]))))))
(defn message-content-image [uri _] (defn message-content-image [_ _]
(let [stored-image (get @image-sizes uri) (let [width (reagent/atom nil)]
dimensions (reagent/atom [nil image-max-dimension])]
(if stored-image
(reset! dimensions [(:width stored-image) image-max-dimension])
(js/setTimeout #(react/image-get-size uri (image-set-size dimensions uri)) 20))
(fn [uri show-close?] (fn [uri show-close?]
[react/view {:style {:width (first @dimensions) [react/view {:style {:width @width
:height image-max-dimension :height image-max-dimension
:overflow :hidden :overflow :hidden
:opacity (if @width 1 0)
:border-radius 16 :border-radius 16
:margin-top 8} :margin-top 8}
:accessibility-label :image-message} :accessibility-label :image-message}
[react/image {:style {:width (first @dimensions) [react/fast-image {:style {:width @width
:height image-max-dimension} :height image-max-dimension}
:cache :force-cache :on-load (image-set-size width)
:resize-mode :cover
:source {:uri uri}}] :source {:uri uri}}]
[react/view {:border-width 1 [react/view {:border-width 1
:top 0 :top 0
:left 0 :left 0
:width (first @dimensions) :width @width
:height image-max-dimension :height image-max-dimension
:border-radius 16 :border-radius 16
:position :absolute :position :absolute

View File

@ -3,7 +3,7 @@
"_comment": "Instead use: scripts/update-status-go.sh <rev>", "_comment": "Instead use: scripts/update-status-go.sh <rev>",
"owner": "status-im", "owner": "status-im",
"repo": "status-go", "repo": "status-go",
"version": "v0.93.5", "version": "v0.94.0",
"commit-sha1": "54b35b051052a0eaa74e4d0b123aca3427a27734", "commit-sha1": "5925b3b7cca127805c200a631e9b88d4ce5d31d5",
"src-sha256": "14d55yd4rdm9hdc5k888xlm5sjl3iclggzrgxsmjlvfvcg81lf85" "src-sha256": "0wzlvap62m85rqn69vy7a3ny1kjcaxfhrzcjsx2p16xwjmi0i1rm"
} }

View File

@ -1987,7 +1987,7 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
base-64@^0.1.0: base-64@0.1.0, base-64@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs=
@ -3741,6 +3741,18 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
glob@^7.1.6:
version "7.2.0"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
global@~4.3.0: global@~4.3.0:
version "4.3.2" version "4.3.2"
resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
@ -6586,6 +6598,14 @@ react-native-background-timer@^2.1.1:
resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.2.0.tgz#ff82d30899209b924983cc00e6ce174b8de5054a" resolved "https://registry.yarnpkg.com/react-native-background-timer/-/react-native-background-timer-2.2.0.tgz#ff82d30899209b924983cc00e6ce174b8de5054a"
integrity sha512-Y7N6diSFko/FCJPMmB0PoBlmY1kEcma7qDVwn8t7zi12GLqpe/Vwls97onkSD8/QL+BR33BygUHOrLTPwgeKfg== integrity sha512-Y7N6diSFko/FCJPMmB0PoBlmY1kEcma7qDVwn8t7zi12GLqpe/Vwls97onkSD8/QL+BR33BygUHOrLTPwgeKfg==
react-native-blob-util@^0.13.18:
version "0.13.18"
resolved "https://registry.yarnpkg.com/react-native-blob-util/-/react-native-blob-util-0.13.18.tgz#7b924d55607bda380d6e9862b621ed1ac0c007ec"
integrity sha512-f9NyydQKMd24QiyW+LZmDg2rjCTi4GBff3UJzP1BDgEQ8aoHMs4MZmPs5erNH4E577qhEFp5v7HGzXVRQL8SnQ==
dependencies:
base-64 "0.1.0"
glob "^7.1.6"
react-native-camera-kit@^8.0.4: react-native-camera-kit@^8.0.4:
version "8.0.4" version "8.0.4"
resolved "https://registry.yarnpkg.com/react-native-camera-kit/-/react-native-camera-kit-8.0.4.tgz#8e350b37a205054ceb140a8babe1d032acdcdbd5" resolved "https://registry.yarnpkg.com/react-native-camera-kit/-/react-native-camera-kit-8.0.4.tgz#8e350b37a205054ceb140a8babe1d032acdcdbd5"
@ -6623,7 +6643,7 @@ react-native-draggable-flatlist@^3.0.3:
resolved "https://registry.yarnpkg.com/react-native-draggable-flatlist/-/react-native-draggable-flatlist-3.0.3.tgz#e85503585253be01ad251f78d5b341ac22f9d952" resolved "https://registry.yarnpkg.com/react-native-draggable-flatlist/-/react-native-draggable-flatlist-3.0.3.tgz#e85503585253be01ad251f78d5b341ac22f9d952"
integrity sha512-bDro6aqQMvvTm/CuHre9dAjSBKosAfZRLDx3nmrjOz799kxcn0bq+uCB6yF6m+g1Xd/gVPl7E3Ss4uX+oPUlHg== integrity sha512-bDro6aqQMvvTm/CuHre9dAjSBKosAfZRLDx3nmrjOz799kxcn0bq+uCB6yF6m+g1Xd/gVPl7E3Ss4uX+oPUlHg==
react-native-fast-image@8.5.11: react-native-fast-image@^8.5.11:
version "8.5.11" version "8.5.11"
resolved "https://registry.yarnpkg.com/react-native-fast-image/-/react-native-fast-image-8.5.11.tgz#e3dc969d0e4e8df026646bf18194465aa55cbc2b" resolved "https://registry.yarnpkg.com/react-native-fast-image/-/react-native-fast-image-8.5.11.tgz#e3dc969d0e4e8df026646bf18194465aa55cbc2b"
integrity sha512-cNW4bIJg3nvKaheG8vGMfqCt5LMWX9MS5+wMudgKIHbGO51spRr4sgnlhVgwHLcZ5aeNOVJ8CPRxDIWKRq/0QA== integrity sha512-cNW4bIJg3nvKaheG8vGMfqCt5LMWX9MS5+wMudgKIHbGO51spRr4sgnlhVgwHLcZ5aeNOVJ8CPRxDIWKRq/0QA==
@ -6665,9 +6685,9 @@ react-native-image-resizer@^1.2.3:
resolved "https://registry.yarnpkg.com/react-native-image-resizer/-/react-native-image-resizer-1.2.3.tgz#21cb2b158ff950e55a0fc01c2cb61375bd5a03ba" resolved "https://registry.yarnpkg.com/react-native-image-resizer/-/react-native-image-resizer-1.2.3.tgz#21cb2b158ff950e55a0fc01c2cb61375bd5a03ba"
integrity sha512-RDPNJglRmWDZ/7hvu+CbpsKYl6AQmseL8cWX4UkLAHxQWNc5ZdYhP/9avC5xCfyiwkRw+Zmkmv78HO0kt0ewhQ== integrity sha512-RDPNJglRmWDZ/7hvu+CbpsKYl6AQmseL8cWX4UkLAHxQWNc5ZdYhP/9avC5xCfyiwkRw+Zmkmv78HO0kt0ewhQ==
"react-native-image-viewing@git+https://github.com/Ferossgp/react-native-image-viewing.git#v0.2.1": "react-native-image-viewing@git+https://github.com/status-im/react-native-image-viewing.git#v0.2.1.status":
version "0.2.1" version "0.2.1"
resolved "git+https://github.com/Ferossgp/react-native-image-viewing.git#8ef67cdce7b7c66065a939847e45db71347c678e" resolved "git+https://github.com/status-im/react-native-image-viewing.git#94af89356f2e4e08f462370c77e4778d7626ce2f"
"react-native-keychain@git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-5-status": "react-native-keychain@git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-5-status":
version "3.0.0-rc.3" version "3.0.0-rc.3"