Skip to content

Commit d3287c0

Browse files
committed
Update 1.1.0
1 parent 1505a5f commit d3287c0

File tree

11 files changed

+318
-3
lines changed

11 files changed

+318
-3
lines changed

common/src/main/java/com/fox2code/foxloader/launcher/DependencyHelper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,16 @@ GSON_DEPENDENCY, new Dependency("com.google.guava:guava:21.0", MAVEN_CENTRAL, "c
4848

4949
private static File mcLibraries;
5050

51+
static {
52+
if (Platform.getJvmVersion() == 8) {
53+
try {
54+
LetsEncryptHelper.installCertificates();
55+
} catch (Exception e) {
56+
e.printStackTrace();
57+
}
58+
}
59+
}
60+
5161
static void loadDependencies(boolean client) {
5262
if (client) {
5363
URL url = DependencyHelper.class.getResource("/org/lwjgl/opengl/GLChecks.class");

common/src/main/java/com/fox2code/foxloader/launcher/FoxClassLoader.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,9 @@ public URL getResource(String name) {
193193
return this.getParent().getResource(name);
194194
}
195195
}
196+
if (name.startsWith("assets/foxloader/certificates/")) {
197+
return this.getParent().getResource(name);
198+
}
196199
URL resource = this.findResource(name);
197200
if (resource != null) return resource;
198201
if (minecraftExclusiveSource != null) {

common/src/main/java/com/fox2code/foxloader/launcher/FoxLauncher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ static void initForClientFromArgs(String[] args) {
7575
foxClassLoader.addTransformerExclusion("org.spongepowered.tools.");
7676
foxClassLoader.addTransformerExclusion("com.llamalad7.mixinextras.");
7777
foxClassLoader.addTransformerExclusion("com.fox2code.foxloader.loader.");
78+
installLoggerHelper(); // Install special logger before libraries loading
7879
DependencyHelper.loadDependencies(true);
79-
installLoggerHelper();
8080
}
8181

8282
static void initForServerFromArgs(String[] args) {
@@ -97,8 +97,8 @@ static void initForServerFromArgs(String[] args) {
9797
foxClassLoader.addTransformerExclusion("org.spongepowered.tools.");
9898
foxClassLoader.addTransformerExclusion("com.llamalad7.mixinextras.");
9999
foxClassLoader.addTransformerExclusion("com.fox2code.foxloader.loader.");
100+
installLoggerHelper(); // Install special logger before libraries loading
100101
DependencyHelper.loadDependencies(false);
101-
installLoggerHelper();
102102
}
103103

104104
private static void installLoggerHelper() {
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package com.fox2code.foxloader.launcher;
2+
3+
import javax.net.ssl.*;
4+
import java.io.IOException;
5+
import java.lang.reflect.Field;
6+
import java.security.GeneralSecurityException;
7+
import java.security.KeyStore;
8+
import java.security.cert.Certificate;
9+
import java.security.cert.CertificateException;
10+
import java.security.cert.CertificateFactory;
11+
import java.security.cert.X509Certificate;
12+
import java.util.Arrays;
13+
import java.util.HashSet;
14+
import java.util.LinkedList;
15+
import java.util.Objects;
16+
17+
final class LetsEncryptHelper {
18+
private static final String prefix = "/assets/foxloader/certificates/";
19+
private static final String[] certificates = new String[]{"jitpack-io-chain.pem",
20+
"lets_encrypt_x1_cross_signed.pem", "lets_encrypt_x2_cross_signed.pem",
21+
"lets_encrypt_x3_cross_signed.pem", "lets_encrypt_x4_cross_signed.pem"};
22+
23+
public static void installCertificates() throws Exception {
24+
System.out.println("Using let's encrypt certificates");
25+
TrustManagerFactory tmf = TrustManagerFactory.getInstance(
26+
TrustManagerFactory.getDefaultAlgorithm());
27+
X509TrustManager letsEncryptTrustManager = makeLetsEncryptTrustManager();
28+
tmf.init((KeyStore) null);
29+
SSLContext sslContext = SSLContext.getInstance("TLS");
30+
TrustManager[] systemTrustManagers = tmf.getTrustManagers();
31+
X509TrustManager systemTrustManager;
32+
if (systemTrustManagers.length != 1 || !(systemTrustManagers[0] instanceof X509TrustManager)) {
33+
throw new IllegalStateException("Unexpected default trust managers:" +
34+
Arrays.toString(systemTrustManagers));
35+
}
36+
systemTrustManager = (X509TrustManager) systemTrustManagers[0];
37+
sslContext.init(null, new TrustManager[]{
38+
new X509DualTrustManager(letsEncryptTrustManager, systemTrustManager)
39+
}, null);
40+
Field field = SSLSocketFactory.class.getDeclaredField("theFactory");
41+
field.setAccessible(true);
42+
field.set(null, sslContext.getSocketFactory());
43+
}
44+
45+
public static X509TrustManager makeLetsEncryptTrustManager()
46+
throws GeneralSecurityException, IOException {
47+
LinkedList<Certificate> certificates = new LinkedList<>();
48+
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
49+
for (String certificate : LetsEncryptHelper.certificates) {
50+
certificates.addAll(certificateFactory.generateCertificates(Objects.requireNonNull(
51+
LetsEncryptHelper.class.getResourceAsStream(prefix + certificate), certificate)));
52+
}
53+
54+
// Put the certificates a key store.
55+
char[] password = "password".toCharArray(); // Any password will work.
56+
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
57+
keyStore.load(null, password);
58+
int index = 0;
59+
for (Certificate certificate : certificates) {
60+
String certificateAlias = Integer.toString(index++);
61+
keyStore.setCertificateEntry(certificateAlias, certificate);
62+
}
63+
64+
// Use it to build an X509 trust manager.
65+
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
66+
keyManagerFactory.init(keyStore, password);
67+
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
68+
trustManagerFactory.init(keyStore);
69+
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
70+
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
71+
throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
72+
}
73+
74+
return (X509TrustManager) trustManagers[0];
75+
}
76+
77+
public static class X509DualTrustManager implements X509TrustManager {
78+
private final X509TrustManager letsEncrypt;
79+
private final X509TrustManager system;
80+
private final X509Certificate[] certificates;
81+
82+
public X509DualTrustManager(X509TrustManager letsEncrypt, X509TrustManager system) {
83+
this.letsEncrypt = letsEncrypt;
84+
this.system = system;
85+
HashSet<X509Certificate> certificates = new HashSet<>();
86+
certificates.addAll(Arrays.asList(this.letsEncrypt.getAcceptedIssuers()));
87+
certificates.addAll(Arrays.asList(this.system.getAcceptedIssuers()));
88+
this.certificates = certificates.toArray(new X509Certificate[0]);
89+
}
90+
91+
@Override
92+
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
93+
try {
94+
this.letsEncrypt.checkClientTrusted(chain, authType);
95+
} catch (CertificateException | SecurityException e) {
96+
this.system.checkClientTrusted(chain, authType);
97+
}
98+
}
99+
100+
@Override
101+
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
102+
try {
103+
this.letsEncrypt.checkServerTrusted(chain, authType);
104+
System.out.println("checkServerTrusted let's encrypt trust!");
105+
} catch (CertificateException | SecurityException e) {
106+
this.system.checkServerTrusted(chain, authType);
107+
System.out.println("checkServerTrusted system trust!");
108+
}
109+
}
110+
111+
@Override
112+
public X509Certificate[] getAcceptedIssuers() {
113+
return this.certificates;
114+
}
115+
}
116+
}

common/src/main/java/com/fox2code/foxloader/loader/transformer/MinecraftClientDebugTransformer.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
public class MinecraftClientDebugTransformer implements PreClassTransformer {
66
@Override
77
public void transform(ClassNode classNode, String className) {
8+
if ("net.minecraft.src.client.ThreadGetSkin".equals(className)) {
9+
MethodNode methodNode = TransformerUtils.getMethod(classNode, "run");
10+
if (methodNode.tryCatchBlocks == null) return;
11+
hotfixThreadGetSkin(methodNode);
12+
return;
13+
}
814
if (!"net.minecraft.client.Minecraft".equals(className)) return;
915
MethodNode methodNode = TransformerUtils.getMethod(classNode, "run");
1016
if (methodNode.tryCatchBlocks == null) return;
@@ -37,6 +43,23 @@ private void patchExceptionPrint(MethodNode methodNode, String type) {
3743
return;
3844
}
3945
}
46+
}
4047

48+
private void hotfixThreadGetSkin(MethodNode methodNode) {
49+
for (TryCatchBlockNode tryCatchBlockNode : methodNode.tryCatchBlocks) {
50+
if ("java/lang/Exception".equals(tryCatchBlockNode.type)) {
51+
tryCatchBlockNode.type = "java/lang/Throwable";
52+
AbstractInsnNode abstractInsnNode = tryCatchBlockNode.handler.getNext();
53+
if (abstractInsnNode instanceof FrameNode) {
54+
FrameNode frameNode = (FrameNode) abstractInsnNode;
55+
if (frameNode.stack.size() == 1 &&
56+
"java/lang/Exception".equals(
57+
frameNode.stack.get(0))) {
58+
frameNode.stack.set(0, "java/lang/Throwable");
59+
}
60+
}
61+
return;
62+
}
63+
}
4164
}
4265
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDvTCCA0OgAwIBAgISBBqIEbKz7bjULLax9b8z7IstMAoGCCqGSM49BAMDMDIx
3+
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
4+
MTAeFw0yMzA0MTgwMDIyMTVaFw0yMzA3MTcwMDIyMTRaMBUxEzARBgNVBAMTCmpp
5+
dHBhY2suaW8wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASdFNjZ77uKTX8tx26o
6+
uA70KAIPBOoT0ekyS0JOYtjRAgEyVFua7cCJurroUj9h4lBT8jIbKVkEUFaAcThC
7+
7LJso4ICVDCCAlAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMB
8+
BggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTeJxT/CIBCHh5yl7Kh
9+
hYd1/yLTiDAfBgNVHSMEGDAWgBRa8+0r/DbCN3m5UjDqVG/PVcsurDBVBggrBgEF
10+
BQcBAQRJMEcwIQYIKwYBBQUHMAGGFWh0dHA6Ly9lMS5vLmxlbmNyLm9yZzAiBggr
11+
BgEFBQcwAoYWaHR0cDovL2UxLmkubGVuY3Iub3JnLzAjBgNVHREEHDAaggwqLmpp
12+
dHBhY2suaW+CCmppdHBhY2suaW8wTAYDVR0gBEUwQzAIBgZngQwBAgEwNwYLKwYB
13+
BAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5v
14+
cmcwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwB6MoxU2LcttiDqOOBSHumEFnAy
15+
E4VNO9IrwTpXo1LrUgAAAYeR9IpvAAAEAwBIMEYCIQDr5GzIx23g9xv6keIW/Iy9
16+
mBPx5M+nscK8NXvF66lgAAIhAP9xFK1sycgyNYOzouq5e6aR5de8Ci7sIHeH9L7D
17+
woDtAHYArfe++nz/EMiLnT2cHj4YarRnKV3PsQwkyoWGNOvcgooAAAGHkfSKjQAA
18+
BAMARzBFAiBZPsjEUheq8D1oymy1qQz5neMSVnDpU2dwAzMUu8n/PgIhAIfx5Vko
19+
n3Vf+zR253EFyCIlnpFWgbGnmVFJxQYHX+TdMAoGCCqGSM49BAMDA2gAMGUCMDkT
20+
ZB1vUkZ75l3QZn4ykvaL7eElmjT2H7EWsfuNuCrnaG6Vqdd7lnIcMiLEW8o2PwIx
21+
APz5nJEyqCz5a6cODT+rtPQhvlAOq7ihtf6fhB+BEukUaPaiJJA4GaI+MyR8pVGL
22+
Yg==
23+
-----END CERTIFICATE-----
24+
-----BEGIN CERTIFICATE-----
25+
MIICxjCCAk2gAwIBAgIRALO93/inhFu86QOgQTWzSkUwCgYIKoZIzj0EAwMwTzEL
26+
MAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNo
27+
IEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDIwHhcNMjAwOTA0MDAwMDAwWhcN
28+
MjUwOTE1MTYwMDAwWjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3MgRW5j
29+
cnlwdDELMAkGA1UEAxMCRTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQkXC2iKv0c
30+
S6Zdl3MnMayyoGli72XoprDwrEuf/xwLcA/TmC9N/A8AmzfwdAVXMpcuBe8qQyWj
31+
+240JxP2T35p0wKZXuskR5LBJJvmsSGPwSSB/GjMH2m6WPUZIvd0xhajggEIMIIB
32+
BDAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
33+
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFrz7Sv8NsI3eblSMOpUb89V
34+
yy6sMB8GA1UdIwQYMBaAFHxClq7eS0g7+pL4nozPbYupcjeVMDIGCCsGAQUFBwEB
35+
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gyLmkubGVuY3Iub3JnLzAnBgNVHR8E
36+
IDAeMBygGqAYhhZodHRwOi8veDIuYy5sZW5jci5vcmcvMCIGA1UdIAQbMBkwCAYG
37+
Z4EMAQIBMA0GCysGAQQBgt8TAQEBMAoGCCqGSM49BAMDA2cAMGQCMHt01VITjWH+
38+
Dbo/AwCd89eYhNlXLr3pD5xcSAQh8suzYHKOl9YST8pE9kLJ03uGqQIwWrGxtO3q
39+
YJkgsTgDyj2gJrjubi1K9sZmHzOa25JK1fUpE8ZwYii6I4zPPS/Lgul/
40+
-----END CERTIFICATE-----
41+
-----BEGIN CERTIFICATE-----
42+
MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw
43+
CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
44+
R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00
45+
MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT
46+
ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw
47+
EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW
48+
+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9
49+
ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
50+
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI
51+
zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW
52+
tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
53+
/q4AaOeMSQ+2b1tbFfLn
54+
-----END CERTIFICATE-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEqDCCA5CgAwIBAgIRAJgT9HUT5XULQ+dDHpceRL0wDQYJKoZIhvcNAQELBQAw
3+
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
4+
Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjMzMzZaFw0yMDEwMTkyMjMzMzZa
5+
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
6+
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTCCASIwDQYJKoZIhvcNAQEBBQAD
7+
ggEPADCCAQoCggEBAJzTDPBa5S5Ht3JdN4OzaGMw6tc1Jhkl4b2+NfFwki+3uEtB
8+
BaupnjUIWOyxKsRohwuj43Xk5vOnYnG6eYFgH9eRmp/z0HhncchpDpWRz/7mmelg
9+
PEjMfspNdxIknUcbWuu57B43ABycrHunBerOSuu9QeU2mLnL/W08lmjfIypCkAyG
10+
dGfIf6WauFJhFBM/ZemCh8vb+g5W9oaJ84U/l4avsNwa72sNlRZ9xCugZbKZBDZ1
11+
gGusSvMbkEl4L6KWTyogJSkExnTA0DHNjzE4lRa6qDO4Q/GxH8Mwf6J5MRM9LTb4
12+
4/zyM2q5OTHFr8SNDR1kFjOq+oQpttQLwNh9w5MCAwEAAaOCAZIwggGOMBIGA1Ud
13+
EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy
14+
BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j
15+
b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv
16+
ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ
17+
MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH
18+
AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw
19+
MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM
20+
LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUqEpqYwR93brm0Tm3
21+
pkVl7/Oo7KEwDQYJKoZIhvcNAQELBQADggEBANHIIkus7+MJiZZQsY14cCoBG1hd
22+
v0J20/FyWo5ppnfjL78S2k4s2GLRJ7iD9ZDKErndvbNFGcsW+9kKK/TnY21hp4Dd
23+
ITv8S9ZYQ7oaoqs7HwhEMY9sibED4aXw09xrJZTC9zK1uIfW6t5dHQjuOWv+HHoW
24+
ZnupyxpsEUlEaFb+/SCI4KCSBdAsYxAcsHYI5xxEI4LutHp6s3OT2FuO90WfdsIk
25+
6q78OMSdn875bNjdBYAqxUp2/LEIHfDBkLoQz0hFJmwAbYahqKaLn73PAAm1X2kj
26+
f1w8DdnkabOLGeOVcj9LQ+s67vBykx4anTjURkbqZslUEUsn2k5xeua2zUk=
27+
-----END CERTIFICATE-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEqDCCA5CgAwIBAgIRAMODTJjAvWslLKN5tm+lKw4wDQYJKoZIhvcNAQELBQAw
3+
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
4+
Ew5EU1QgUm9vdCBDQSBYMzAeFw0xNTEwMTkyMjM1MDFaFw0yMDEwMTkyMjM1MDFa
5+
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
6+
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMjCCASIwDQYJKoZIhvcNAQEBBQAD
7+
ggEPADCCAQoCggEBAOEkdEJ7t5Ex2XP/OKrYzkRctzkK3ESuDb1FuZc3Z6+9UE9f
8+
0xBUa/dB2o5j5m1bwOhAqYxB/NEDif9iYQlg1gcFeJqQvRpkPk/cz3cviWvLZ69B
9+
TcWNAMBr/o2E3LXylTGo6PaQoENKk3Rcsz5DaUuJIkd0UT6ZZMPNJAH5hC8odxci
10+
p93DbAhMZi83dMVvk46wRjcWYdFQmMiwD09YU3ys9totlmFQrUPcCqZPnrVSuZyO
11+
707fRrMx3CD8acKjIHU+7DgbNk5mZtLf9Wakky97pg6UPmA9Skscb7q0TRw8kVhu
12+
L03E2nDb7QE5dsBJ5+k1tRQGkMHlkuIQ/Wu5tIUCAwEAAaOCAZIwggGOMBIGA1Ud
13+
EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMH8GCCsGAQUFBwEBBHMwcTAy
14+
BggrBgEFBQcwAYYmaHR0cDovL2lzcmcudHJ1c3RpZC5vY3NwLmlkZW50cnVzdC5j
15+
b20wOwYIKwYBBQUHMAKGL2h0dHA6Ly9hcHBzLmlkZW50cnVzdC5jb20vcm9vdHMv
16+
ZHN0cm9vdGNheDMucDdjMB8GA1UdIwQYMBaAFMSnsaR7LHH62+FLkHX/xBVghYkQ
17+
MFQGA1UdIARNMEswCAYGZ4EMAQIBMD8GCysGAQQBgt8TAQEBMDAwLgYIKwYBBQUH
18+
AgEWImh0dHA6Ly9jcHMucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcwPAYDVR0fBDUw
19+
MzAxoC+gLYYraHR0cDovL2NybC5pZGVudHJ1c3QuY29tL0RTVFJPT1RDQVgzQ1JM
20+
LmNybDATBgNVHR4EDDAKoQgwBoIELm1pbDAdBgNVHQ4EFgQUxbGrTkyxzWQwk37B
21+
hJkFq+YD4iUwDQYJKoZIhvcNAQELBQADggEBAAcSAhaE7rvHxyUnhgkEpMR56o2I
22+
IH+mlw5kknjhAuvaBIAM59MZkFbFg5CrNWt8K+G3UoxJgFwv7HvJJxqwgPpNgXC/
23+
uT3prkvwt+2lvzKJKbqdH+lo40P8EuSyyJOz2hjrRzNMHbJHYDS9OhF5WC5LOQQa
24+
ydgLZ/JHxXgJypEZqcmVgQ+yYBs0XPwXjE7OE8vbx5REwu7gToMIqAoWRoWW2MxS
25+
g28RGPVnHzHk2XV1nZGy9T+NYQ91vWWJr1pzNEFZ0cnA2xGwTeJ+zZ3URCfw3Z1U
26+
+YAL3YUmrvdoRBlASOTmNJmXSo9qvMYPa3DEomAPoFQFZqsSN6kuqDEIqMA=
27+
-----END CERTIFICATE-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
3+
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
4+
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
5+
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
6+
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
7+
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
8+
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
9+
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
10+
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
11+
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
12+
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
13+
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
14+
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
15+
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
16+
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
17+
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
18+
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
19+
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
20+
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
21+
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
22+
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
23+
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
24+
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
25+
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
26+
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
27+
-----END CERTIFICATE-----
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc6bLEeMfizANBgkqhkiG9w0BAQsFADA/
3+
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
4+
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDEwMloXDTIxMDMxNzE2NDEwMlow
5+
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
6+
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFg0MIIBIjANBgkqhkiG9w0BAQEFAAOC
7+
AQ8AMIIBCgKCAQEA4SR0Qnu3kTHZc/84qtjORFy3OQrcRK4NvUW5lzdnr71QT1/T
8+
EFRr90HajmPmbVvA6ECpjEH80QOJ/2JhCWDWBwV4mpC9GmQ+T9zPdy+Ja8tnr0FN
9+
xY0AwGv+jYTctfKVMajo9pCgQ0qTdFyzPkNpS4kiR3RRPplkw80kAfmELyh3FyKn
10+
3cNsCExmLzd0xW+TjrBGNxZh0VCYyLAPT1hTfKz22i2WYVCtQ9wKpk+etVK5nI7v
11+
Tt9GszHcIPxpwqMgdT7sOBs2TmZm0t/1ZqSTL3umDpQ+YD1KSxxvurRNHDyRWG4v
12+
TcTacNvtATl2wEnn6TW1FAaQweWS4hD9a7m0hQIDAQABo4IBfTCCAXkwEgYDVR0T
13+
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
14+
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
15+
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
16+
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
17+
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
18+
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
19+
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
20+
Y3JsMB0GA1UdDgQWBBTFsatOTLHNZDCTfsGEmQWr5gPiJTANBgkqhkiG9w0BAQsF
21+
AAOCAQEANlaeSdstfAtqFN3jdRZJFjx9X+Ob3PIDlekPYQ1OQ1Uw43rE1FUj7hUw
22+
g2MJKfs9b7M0WoQg7C20nJY/ajsg7pWhUG3J6rlkDTfVY9faeWi0qsPYXE6BpBDr
23+
5BrW/Xv8yT8U2BiEAmNggWq8dmFl82fghmLzHBM8X8NZ3ZwA1fGePA53AP5IoD+0
24+
ArpW8Ik1sSuQBjZ8oQLfN+G8OoY7MNRopyLyQQCNy4aWfE+xYnoVoa5+yr+aPiX0
25+
7YQrY/cKawAn7QB4PyF5//IKSAVs7mAuB68wbMdE3FKfOHfJ24W4z/bIJTrTY8Y5
26+
Sr4AUhtzf8oVDrHZYWRrP4joIcOu/Q==
27+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)