package com.l7tech.server.transport.ftp;

import com.jscape.inet.ftp.Ftp;
import com.jscape.inet.ftp.FtpException;
import com.jscape.inet.ftps.Ftps;
import com.l7tech.common.io.PermissiveX509TrustManager;
import com.l7tech.common.io.SingleCertX509KeyManager;
import com.l7tech.gateway.common.security.keystore.SsgKeyEntry;
import com.l7tech.gateway.common.transport.ftp.FtpClientConfig;
import com.l7tech.gateway.common.transport.ftp.FtpClientConfigImpl;
import com.l7tech.gateway.common.transport.ftp.FtpSecurity;
import com.l7tech.gateway.common.transport.ftp.FtpTestException;
import com.l7tech.gateway.common.transport.ftp.FtpUtils;
import com.l7tech.gateway.common.transport.ftp.FtpUtils.FtpUploadSizeListener;
import com.l7tech.security.prov.JceProvider;
import com.l7tech.server.DefaultKey;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.SecureRandom;
import java.security.UnrecoverableKeyException;
import java.util.ArrayList;
import java.util.Random;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class FtpClientUtils {
   private static final Logger a;
   private static final Random b;
   private static final SecureRandom c;
   private static final String[] d;

   private FtpClientUtils() {
   }

   public static FtpClientConfig newConfig(String var0) {
      return FtpClientConfigImpl.newFtpConfig(var0);
   }

   public static Ftps newFtpsClient(FtpClientConfig var0) throws FtpException {
      return newFtpsClient(var0, null, null, null);
   }

   public static Ftps newFtpsClient(FtpClientConfig var0, DefaultKey var1) throws FtpException {
      return newFtpsClient(var0, var1, null, null);
   }

   public static Ftps newFtpsClient(FtpClientConfig var0, X509TrustManager var1, HostnameVerifier var2) throws FtpException {
      return newFtpsClient(var0, null, var1, var2);
   }

   public static Ftps newFtpsClient(FtpClientConfig param0, DefaultKey param1, X509TrustManager param2, HostnameVerifier param3) throws FtpException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 000: getstatic com/l7tech/gateway/common/transport/ftp/FtpCredentialsSource.SPECIFIED Lcom/l7tech/gateway/common/transport/ftp/FtpCredentialsSource;
      // 003: aload 0
      // 004: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getCredentialsSource ()Lcom/l7tech/gateway/common/transport/ftp/FtpCredentialsSource; 1
      // 009: if_acmpeq 01d
      // 00c: new java/lang/IllegalStateException
      // 00f: dup
      // 010: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 013: bipush 1
      // 014: aaload
      // 015: invokespecial java/lang/IllegalStateException.<init> (Ljava/lang/String;)V
      // 018: athrow
      // 019: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 01c: athrow
      // 01d: getstatic com/l7tech/gateway/common/transport/ftp/FtpSecurity.FTP_UNSECURED Lcom/l7tech/gateway/common/transport/ftp/FtpSecurity;
      // 020: aload 0
      // 021: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getSecurity ()Lcom/l7tech/gateway/common/transport/ftp/FtpSecurity; 1
      // 026: if_acmpne 03b
      // 029: new java/lang/NullPointerException
      // 02c: dup
      // 02d: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 030: bipush 19
      // 032: aaload
      // 033: invokespecial java/lang/NullPointerException.<init> (Ljava/lang/String;)V
      // 036: athrow
      // 037: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 03a: athrow
      // 03b: aload 0
      // 03c: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.isVerifyServerCert ()Z 1
      // 041: ifeq 061
      // 044: aload 2
      // 045: ifnonnull 061
      // 048: goto 04f
      // 04b: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 04e: athrow
      // 04f: new java/lang/NullPointerException
      // 052: dup
      // 053: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 056: bipush 10
      // 058: aaload
      // 059: invokespecial java/lang/NullPointerException.<init> (Ljava/lang/String;)V
      // 05c: athrow
      // 05d: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 060: athrow
      // 061: new com/jscape/inet/ftps/Ftps
      // 064: dup
      // 065: aload 0
      // 066: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getHost ()Ljava/lang/String; 1
      // 06b: aload 0
      // 06c: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getUser ()Ljava/lang/String; 1
      // 071: aload 0
      // 072: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getPass ()Ljava/lang/String; 1
      // 077: aload 0
      // 078: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getPort ()I 1
      // 07d: invokespecial com/jscape/inet/ftps/Ftps.<init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
      // 080: astore 4
      // 082: aload 0
      // 083: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getDebugStream ()Ljava/io/PrintStream; 1
      // 088: ifnull 0a3
      // 08b: aload 4
      // 08d: aload 0
      // 08e: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getDebugStream ()Ljava/io/PrintStream; 1
      // 093: invokevirtual com/jscape/inet/ftps/Ftps.setDebugStream (Ljava/io/PrintStream;)V
      // 096: aload 4
      // 098: bipush 1
      // 099: invokevirtual com/jscape/inet/ftps/Ftps.setDebug (Z)V
      // 09c: goto 0a3
      // 09f: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0a2: athrow
      // 0a3: aload 4
      // 0a5: aload 0
      // 0a6: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getTimeout ()I 1
      // 0ab: invokevirtual com/jscape/inet/ftps/Ftps.setTimeout (I)V
      // 0ae: aconst_null
      // 0af: astore 5
      // 0b1: aload 0
      // 0b2: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.isVerifyServerCert ()Z 1
      // 0b7: ifeq 0d2
      // 0ba: new com/l7tech/server/transport/ftp/f
      // 0bd: dup
      // 0be: aload 2
      // 0bf: aload 3
      // 0c0: aload 0
      // 0c1: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getHost ()Ljava/lang/String; 1
      // 0c6: invokespecial com/l7tech/server/transport/ftp/f.<init> (Ljavax/net/ssl/X509TrustManager;Ljavax/net/ssl/HostnameVerifier;Ljava/lang/String;)V
      // 0c9: astore 5
      // 0cb: aload 4
      // 0cd: aload 5
      // 0cf: invokevirtual com/jscape/inet/ftps/Ftps.setFtpsCertificateVerifier (Lcom/jscape/inet/ftps/FtpsCertificateVerifier;)V
      // 0d2: aload 0
      // 0d3: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.isUseClientCert ()Z 1
      // 0d8: ifeq 245
      // 0db: aload 1
      // 0dc: ifnonnull 0f8
      // 0df: goto 0e6
      // 0e2: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e5: athrow
      // 0e6: new java/lang/IllegalArgumentException
      // 0e9: dup
      // 0ea: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 0ed: bipush 12
      // 0ef: aaload
      // 0f0: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 0f3: athrow
      // 0f4: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0f7: athrow
      // 0f8: aload 0
      // 0f9: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getClientCertAlias ()Ljava/lang/String; 1
      // 0fe: ifnonnull 11d
      // 101: aload 1
      // 102: invokeinterface com/l7tech/server/DefaultKey.getClientSslInfo ()Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry; 1
      // 107: astore 8
      // 109: goto 116
      // 10c: astore 9
      // 10e: aload 1
      // 10f: invokeinterface com/l7tech/server/DefaultKey.getSslInfo ()Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry; 1
      // 114: astore 8
      // 116: aload 8
      // 118: astore 7
      // 11a: goto 131
      // 11d: aload 1
      // 11e: aload 0
      // 11f: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getClientCertAlias ()Ljava/lang/String; 1
      // 124: aload 0
      // 125: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getClientCertId ()Lcom/l7tech/objectmodel/Goid; 1
      // 12a: invokeinterface com/l7tech/server/DefaultKey.lookupKeyByKeyAlias (Ljava/lang/String;Lcom/l7tech/objectmodel/Goid;)Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry; 3
      // 12f: astore 7
      // 131: aload 7
      // 133: astore 6
      // 135: aload 6
      // 137: invokevirtual com/l7tech/gateway/common/security/keystore/SsgKeyEntry.getCertificateChain ()[Ljava/security/cert/X509Certificate;
      // 13a: astore 8
      // 13c: aload 6
      // 13e: invokevirtual com/l7tech/gateway/common/security/keystore/SsgKeyEntry.getPrivateKey ()Ljava/security/PrivateKey;
      // 141: astore 9
      // 143: bipush 16
      // 145: newarray 8
      // 147: astore 10
      // 149: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.b Ljava/util/Random;
      // 14c: aload 10
      // 14e: invokevirtual java/util/Random.nextBytes ([B)V
      // 151: aload 10
      // 153: invokestatic com/l7tech/util/HexUtils.encodeBase64 ([B)Ljava/lang/String;
      // 156: astore 11
      // 158: invokestatic com/l7tech/security/prov/JceProvider.getInstance ()Lcom/l7tech/security/prov/JceProvider;
      // 15b: getstatic com/l7tech/security/prov/JceProvider.SERVICE_KEYSTORE_PKCS12 Ljava/lang/String;
      // 15e: invokevirtual com/l7tech/security/prov/JceProvider.getProviderFor (Ljava/lang/String;)Ljava/security/Provider;
      // 161: astore 12
      // 163: aload 12
      // 165: ifnonnull 178
      // 168: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 16b: bipush 14
      // 16d: aaload
      // 16e: invokestatic java/security/KeyStore.getInstance (Ljava/lang/String;)Ljava/security/KeyStore;
      // 171: goto 187
      // 174: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 177: athrow
      // 178: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 17b: astore 15
      // 17d: aload 15
      // 17f: bipush 6
      // 181: aaload
      // 182: aload 12
      // 184: invokestatic java/security/KeyStore.getInstance (Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyStore;
      // 187: astore 13
      // 189: aload 13
      // 18b: aconst_null
      // 18c: aconst_null
      // 18d: invokevirtual java/security/KeyStore.load (Ljava/io/InputStream;[C)V
      // 190: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 193: astore 15
      // 195: aload 15
      // 197: bipush 3
      // 198: aaload
      // 199: astore 14
      // 19b: aload 13
      // 19d: aload 15
      // 19f: bipush 18
      // 1a1: aaload
      // 1a2: aload 9
      // 1a4: aload 11
      // 1a6: invokevirtual java/lang/String.toCharArray ()[C
      // 1a9: aload 8
      // 1ab: invokevirtual java/security/KeyStore.setKeyEntry (Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V
      // 1ae: aload 4
      // 1b0: aload 13
      // 1b2: aload 11
      // 1b4: invokevirtual com/jscape/inet/ftps/Ftps.setClientCertificates (Ljava/security/KeyStore;Ljava/lang/String;)V
      // 1b7: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.a Ljava/util/logging/Logger;
      // 1ba: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 1bd: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 1c0: ifeq 1e3
      // 1c3: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.a Ljava/util/logging/Logger;
      // 1c6: aload 0
      // 1c7: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getClientCertAlias ()Ljava/lang/String; 1
      // 1cc: aload 15
      // 1ce: bipush 9
      // 1d0: aaload
      // 1d1: swap
      // 1d2: ldc ")"
      // 1d4: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 1d9: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // 1dc: goto 1e3
      // 1df: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1e2: athrow
      // 1e3: goto 248
      // 1e6: astore 7
      // 1e8: new java/lang/StringBuilder
      // 1eb: dup
      // 1ec: aload 0
      // 1ed: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getClientCertAlias ()Ljava/lang/String; 1
      // 1f2: aload 7
      // 1f4: invokevirtual java/lang/Exception.toString ()Ljava/lang/String;
      // 1f7: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 1fa: astore 15
      // 1fc: aload 15
      // 1fe: bipush 20
      // 200: aaload
      // 201: dup_x2
      // 202: pop
      // 203: aload 15
      // 205: bipush 15
      // 207: aaload
      // 208: swap
      // 209: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001\u0001" ]
      // 20e: invokespecial java/lang/StringBuilder.<init> (Ljava/lang/String;)V
      // 211: astore 8
      // 213: aload 7
      // 215: invokevirtual java/lang/Exception.getCause ()Ljava/lang/Throwable;
      // 218: ifnull 238
      // 21b: aload 8
      // 21d: aload 15
      // 21f: bipush 16
      // 221: aaload
      // 222: invokevirtual java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
      // 225: aload 7
      // 227: invokevirtual java/lang/Exception.getCause ()Ljava/lang/Throwable;
      // 22a: invokevirtual java/lang/Throwable.toString ()Ljava/lang/String;
      // 22d: invokevirtual java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
      // 230: pop
      // 231: goto 238
      // 234: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 237: athrow
      // 238: new com/jscape/inet/ftp/FtpException
      // 23b: dup
      // 23c: aload 8
      // 23e: invokevirtual java/lang/StringBuilder.toString ()Ljava/lang/String;
      // 241: invokespecial com/jscape/inet/ftp/FtpException.<init> (Ljava/lang/String;)V
      // 244: athrow
      // 245: aconst_null
      // 246: astore 6
      // 248: getstatic com/l7tech/gateway/common/transport/ftp/FtpSecurity.FTPS_EXPLICIT Lcom/l7tech/gateway/common/transport/ftp/FtpSecurity;
      // 24b: aload 0
      // 24c: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getSecurity ()Lcom/l7tech/gateway/common/transport/ftp/FtpSecurity; 1
      // 251: if_acmpne 2dc
      // 254: aload 4
      // 256: aload 6
      // 258: aload 2
      // 259: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Lcom/jscape/inet/ftps/Ftps;Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry;Ljavax/net/ssl/TrustManager;)V
      // 25c: aload 4
      // 25e: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Lcom/jscape/inet/ftps/Ftps;)V
      // 261: goto 327
      // 264: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 267: athrow
      // 268: astore 7
      // 26a: aload 7
      // 26c: invokevirtual com/jscape/inet/ftp/FtpException.getCause ()Ljava/lang/Throwable;
      // 26f: instanceof java/net/UnknownHostException
      // 272: ifeq 27c
      // 275: aload 7
      // 277: athrow
      // 278: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 27b: athrow
      // 27c: aload 5
      // 27e: ifnull 28d
      // 281: aload 5
      // 283: invokevirtual com/l7tech/server/transport/ftp/f.throwIfFailed ()V
      // 286: goto 28d
      // 289: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 28c: athrow
      // 28d: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.a Ljava/util/logging/Logger;
      // 290: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 293: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 296: ifeq 2ab
      // 299: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.a Ljava/util/logging/Logger;
      // 29c: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 29f: bipush 5
      // 2a0: aaload
      // 2a1: invokevirtual java/util/logging/Logger.fine (Ljava/lang/String;)V
      // 2a4: goto 2ab
      // 2a7: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2aa: athrow
      // 2ab: aload 4
      // 2ad: getstatic com/jscape/inet/ftps/Ftps.AUTH_SSL Lcom/jscape/inet/ftps/Ftps$ConnectionStrategy;
      // 2b0: invokevirtual com/jscape/inet/ftps/Ftps.setConnectionType (Lcom/jscape/inet/ftps/Ftps$ConnectionStrategy;)V
      // 2b3: aload 4
      // 2b5: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Lcom/jscape/inet/ftps/Ftps;)V
      // 2b8: goto 327
      // 2bb: astore 7
      // 2bd: new com/jscape/inet/ftp/FtpException
      // 2c0: dup
      // 2c1: aload 7
      // 2c3: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 2c6: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 2c9: astore 15
      // 2cb: aload 15
      // 2cd: bipush 22
      // 2cf: aaload
      // 2d0: swap
      // 2d1: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 2d6: aload 7
      // 2d8: invokespecial com/jscape/inet/ftp/FtpException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 2db: athrow
      // 2dc: aload 4
      // 2de: getstatic com/jscape/inet/ftps/Ftps.IMPLICIT_SSL Lcom/jscape/inet/ftps/Ftps$ConnectionStrategy;
      // 2e1: invokevirtual com/jscape/inet/ftps/Ftps.setConnectionType (Lcom/jscape/inet/ftps/Ftps$ConnectionStrategy;)V
      // 2e4: aload 4
      // 2e6: aload 6
      // 2e8: aload 2
      // 2e9: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Lcom/jscape/inet/ftps/Ftps;Lcom/l7tech/gateway/common/security/keystore/SsgKeyEntry;Ljavax/net/ssl/TrustManager;)V
      // 2ec: aload 4
      // 2ee: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Lcom/jscape/inet/ftps/Ftps;)V
      // 2f1: goto 327
      // 2f4: astore 7
      // 2f6: aload 5
      // 2f8: ifnull 307
      // 2fb: aload 5
      // 2fd: invokevirtual com/l7tech/server/transport/ftp/f.throwIfFailed ()V
      // 300: goto 307
      // 303: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 306: athrow
      // 307: aload 7
      // 309: athrow
      // 30a: astore 7
      // 30c: new com/jscape/inet/ftp/FtpException
      // 30f: dup
      // 310: aload 7
      // 312: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 315: getstatic com/l7tech/server/transport/ftp/FtpClientUtils.d [Ljava/lang/String;
      // 318: bipush 7
      // 31a: aaload
      // 31b: swap
      // 31c: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 321: aload 7
      // 323: invokespecial com/jscape/inet/ftp/FtpException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 326: athrow
      // 327: aload 0
      // 328: invokeinterface com/l7tech/gateway/common/transport/ftp/FtpClientConfig.getDirectory ()Ljava/lang/String; 1
      // 32d: astore 7
      // 32f: aload 7
      // 331: ifnull 351
      // 334: aload 7
      // 336: invokevirtual java/lang/String.length ()I
      // 339: ifeq 351
      // 33c: goto 343
      // 33f: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 342: athrow
      // 343: aload 4
      // 345: aload 7
      // 347: invokevirtual com/jscape/inet/ftps/Ftps.setDir (Ljava/lang/String;)V
      // 34a: goto 351
      // 34d: invokestatic com/l7tech/server/transport/ftp/FtpClientUtils.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 350: athrow
      // 351: aload 4
      // 353: bipush 0
      // 354: invokevirtual com/jscape/inet/ftps/Ftps.setAuto (Z)V
      // 357: aload 4
      // 359: invokevirtual com/jscape/inet/ftps/Ftps.setBinary ()V
      // 35c: goto 369
      // 35f: astore 8
      // 361: aload 4
      // 363: invokevirtual com/jscape/inet/ftps/Ftps.disconnect ()V
      // 366: aload 8
      // 368: athrow
      // 369: aload 4
      // 36b: areturn
      // try (91 -> 103): 103 java/lang/Exception
      // try (88 -> 93): 94 java/lang/Exception
      // try (55 -> 65): 66 java/lang/Exception
      // try (29 -> 41): 41 java/lang/Exception
      // try (26 -> 31): 32 java/lang/Exception
      // try (13 -> 24): 24 java/lang/Exception
      // try (0 -> 11): 11 java/lang/Exception
      // try (108 -> 111): 112 java/lang/Exception
      // try (174 -> 201): 202 java/lang/Exception
      // try (147 -> 154): 154 java/lang/Exception
      // try (105 -> 204): 205 java/lang/Exception
      // try (226 -> 239): 240 java/lang/Exception
      // try (254 -> 260): 263 com/jscape/inet/ftp/FtpException
      // try (254 -> 260): 297 java/security/GeneralSecurityException
      // try (279 -> 288): 289 java/lang/Exception
      // try (272 -> 276): 277 java/lang/Exception
      // try (264 -> 270): 270 java/lang/Exception
      // try (250 -> 261): 261 java/lang/IllegalStateException
      // try (315 -> 321): 322 com/jscape/inet/ftp/FtpException
      // try (315 -> 321): 332 java/security/GeneralSecurityException
      // try (350 -> 359): 360 java/lang/Exception
      // try (348 -> 353): 354 java/lang/Exception
      // try (323 -> 327): 328 java/lang/Exception
      // try (348 -> 367): 368 com/jscape/inet/ftp/FtpException
   }

   private static void a(Ftps var0, SsgKeyEntry var1, TrustManager var2) throws NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException {
      Provider var3 = JceProvider.getInstance().getProviderFor(JceProvider.SERVICE_TLS10);

      SSLContext var10000;
      label43: {
         try {
            if (var3 == null) {
               var10000 = SSLContext.getInstance(d[2]);
               break label43;
            }
         } catch (NoSuchAlgorithmException var9) {
            throw a(var9);
         }

         var10000 = SSLContext.getInstance(d[17], var3);
      }

      SSLContext var4 = var10000;
      ArrayList var5 = new ArrayList();

      try {
         if (var1 != null) {
            var5.add(new SingleCertX509KeyManager(var1.getCertificateChain(), var1.getPrivateKey()));
         }
      } catch (NoSuchAlgorithmException var8) {
         throw a(var8);
      }

      ArrayList var6 = new ArrayList();

      label29: {
         try {
            if (var2 != null) {
               var6.add(var2);
               break label29;
            }
         } catch (NoSuchAlgorithmException var7) {
            throw a(var7);
         }

         var6.add(new PermissiveX509TrustManager());
      }

      var4.init(var5.toArray(new KeyManager[var5.size()]), var6.toArray(new TrustManager[var6.size()]), c);
      var0.setContext(var4);
   }

   private static void a(Ftps var0) throws FtpException {
      try {
         var0.connect();
      } catch (FtpException var3) {
         FtpException var1 = var3;
         Throwable var2 = var3.getCause();
         if (var2 instanceof UnknownHostException) {
            var1 = new FtpException(d[23] + var0.getHostname(), var2);
         }

         throw var1;
      }
   }

   public static void testFtpsConnection(FtpClientConfig var0, DefaultKey var1, X509TrustManager var2, HostnameVerifier var3) throws FtpTestException {
      ByteArrayOutputStream var4 = null;
      if (var0.getDebugStream() == null) {
         var4 = new ByteArrayOutputStream();
         var0.setDebugStream(new PrintStream(var4));
      }

      Ftps var5 = null;

      try {
         var5 = newFtpsClient(var0, var1, var2, var3);
      } catch (FtpException var18) {
         FtpException var6 = var18;

         FtpTestException var10000;
         FtpTestException var10001;
         String var10002;
         String var10003;
         label92: {
            try {
               var10000 = new FtpTestException;
               var10001 = var10000;
               var10002 = var6.getMessage();
               if (var4 != null) {
                  var10003 = var4.toString();
                  break label92;
               }
            } catch (FtpException var17) {
               throw a(var17);
            }

            var10003 = null;
         }

         var10001./* $VF: Unable to resugar constructor */<init>(var10002, var10003);
         throw var10000;
      } finally {
         try {
            if (var5 != null) {
               var5.disconnect();
            }
         } catch (FtpException var15) {
            throw a(var15);
         }

         try {
            if (var4 != null) {
               var0.getDebugStream().close();
               var0.setDebugStream(null);
            }
         } catch (FtpException var16) {
            throw a(var16);
         }
      }
   }

   public static void upload(FtpClientConfig var0, InputStream var1, long var2, String var4) throws FtpException {
      upload(var0, var1, var2, var4, null, null, null);
   }

   public static void upload(FtpClientConfig var0, InputStream var1, long var2, String var4, DefaultKey var5, X509TrustManager var6, HostnameVerifier var7) throws FtpException {
      try {
         if (FtpSecurity.FTP_UNSECURED == var0.getSecurity()) {
            FtpUtils.upload(var0, var1, var2, var4);
            return;
         }
      } catch (FtpException var20) {
         throw a(var20);
      }

      Ftps var8 = newFtpsClient(var0, var5, var6, var7);
      FtpUploadSizeListener var9 = new FtpUploadSizeListener();

      try {
         var8.addFtpListener(var9);
         var8.upload(var1, var4);
      } finally {
         var8.disconnect();
      }

      try {
         if (var9.isError()) {
            throw new FtpException(d[11] + var4 + d[21] + var9.getError() + d[4]);
         }
      } catch (FtpException var19) {
         throw a(var19);
      }

      if (var9.getSize() < var2) {
         long var11 = var9.getSize();
         String var13 = var4;
         String[] var14 = d;
         throw new FtpException(var14[0] + var13 + var14[13] + var11 + var14[8]);
      }
   }

   public static OutputStream getUploadOutputStream(FtpClientConfig var0, String var1) throws FtpException {
      return getUploadOutputStream(var0, var1, null, null, null);
   }

   public static OutputStream getUploadOutputStream(FtpClientConfig var0, String var1, DefaultKey var2, X509TrustManager var3, HostnameVerifier var4) throws FtpException {
      if (FtpSecurity.FTP_UNSECURED == var0.getSecurity()) {
         Ftp var8 = FtpUtils.newFtpClient(var0);
         return var8.getOutputStream(var1, 0L, false);
      }

      Ftps var5 = newFtpsClient(var0, var2, var3, var4);

      try {
         return var5.getOutputStream(var1, 0L, false);
      } catch (IOException var7) {
         throw new FtpException(d[24], var7);
      }
   }

   static {
      String[] var5 = new String[25];
      int var3 = 0;
      String var2 = "53_M:v>0;]Fu%\b\u0010(VIn4\b5\u000ec\by>F\u001d?P\\s>FS3U\by#M\u0017?]\\s0D\u0000zRZ\u007fqF\u001c.\u0013[j4K\u001a<ZM~\u007f\u0003'\u0016`\u0003\u0015.C\u0002Tt>&4RJv4\b\u00075\u0013Ku?F\u00169G\bo\"A\u001d=\u0013nN\u0001{S\u001bf|Rq|?\t\u001d\bH4\\\u0001#ZF}q_\u001a.[\b[\u0004|;z`{V\u007f\u0006#\u0011p{+c%&4RJv4\b\u00075\u0013At8\\\u001a;_A`4\b'\u0016`\bI\u0002d05]\\\u007f)\\Iz\u0007S8J\\\u007f\"\u0006P2)@A}?M\u0017zCZs'I\u0007?\u0013C\u007f(\b\u00124W\by4Z\u00073UAy0\\\u0016zUGhqn'\n`\by=A\u00164G\b{$\\\u001b?]\\s2I\u00073\\F4q\u0000\u0018?J\b{=A\u0012)\u000eV ?A^\u007f#\b\u0010?A\\s7A\u0010;GM:<I\u001d;TMhqK\u00124]GnqJ\u0016z]]v=\b\u001a<\u0013[\u007f'M\u0001zPMh%A\u00153PIn4\b\u0005;_A~0\\\u001a5]\bs\"\b\u0001?B]s#M\u0017t\u000653_M:v\\2/G@\u007f?\\\u001a9R\\s>FS-Z\\rqK\u001f3VFnqK\u0016(GA|8K\u0012.V\bh4Y\u0006?@\\\u007f5\u0004S8F\\:yL\u0016<R]v%\u0001S1VQ:7A\u001d>VZ:&I\u0000z]GnqX\u00015EA~4L]\u0016TzFXv>I\u0017zGZo?K\u0012.VL:%GS\u0006#\u0011p{+c\u0016ZzUGhqI\u0006.[Mt%A\u0010;GAu?\u0012S\u0002Iz\u0003'\u0016`\u0003\u0015.CE0;]Fu%\b\u0014?]Mh0\\\u0016zu|J\u0002\b\u00105]F\u007f2\\\u001a5]\b|>ZS.[M:2G\u001d<ZOo#M\u0017zu|JqK\u001c4UA}$Z\u0012.ZGt\u007f30;]Fu%\b\u0010(VIn4\b\u0018?J[n>Z\u0016zUZu<\b\u0003(Z^{%MS1VQ:yC\u0016#\u0013Iv8I\u0000g\u0010TzFXv>I\u0017zVZh>ZS}%&4RJv4\b\u00075\u0013At8\\\u001a;_A`4\b'\u0016`\bI\u0002d05]\\\u007f)\\Iz";
      int var4 = "53_M:v>0;]Fu%\b\u0010(VIn4\b5\u000ec\by>F\u001d?P\\s>FS3U\by#M\u0017?]\\s0D\u0000zRZ\u007fqF\u001c.\u0013[j4K\u001a<ZM~\u007f\u0003'\u0016`\u0003\u0015.C\u0002Tt>&4RJv4\b\u00075\u0013Ku?F\u00169G\bo\"A\u001d=\u0013nN\u0001{S\u001bf|Rq|?\t\u001d\bH4\\\u0001#ZF}q_\u001a.[\b[\u0004|;z`{V\u007f\u0006#\u0011p{+c%&4RJv4\b\u00075\u0013At8\\\u001a;_A`4\b'\u0016`\bI\u0002d05]\\\u007f)\\Iz\u0007S8J\\\u007f\"\u0006P2)@A}?M\u0017zCZs'I\u0007?\u0013C\u007f(\b\u00124W\by4Z\u00073UAy0\\\u0016zUGhqn'\n`\by=A\u00164G\b{$\\\u001b?]\\s2I\u00073\\F4q\u0000\u0018?J\b{=A\u0012)\u000eV ?A^\u007f#\b\u0010?A\\s7A\u0010;GM:<I\u001d;TMhqK\u00124]GnqJ\u0016z]]v=\b\u001a<\u0013[\u007f'M\u0001zPMh%A\u00153PIn4\b\u0005;_A~0\\\u001a5]\bs\"\b\u0001?B]s#M\u0017t\u000653_M:v\\2/G@\u007f?\\\u001a9R\\s>FS-Z\\rqK\u001f3VFnqK\u0016(GA|8K\u0012.V\bh4Y\u0006?@\\\u007f5\u0004S8F\\:yL\u0016<R]v%\u0001S1VQ:7A\u001d>VZ:&I\u0000z]GnqX\u00015EA~4L]\u0016TzFXv>I\u0017zGZo?K\u0012.VL:%GS\u0006#\u0011p{+c\u0016ZzUGhqI\u0006.[Mt%A\u0010;GAu?\u0012S\u0002Iz\u0003'\u0016`\u0003\u0015.CE0;]Fu%\b\u0014?]Mh0\\\u0016zu|J\u0002\b\u00105]F\u007f2\\\u001a5]\b|>ZS.[M:2G\u001d<ZOo#M\u0017zu|JqK\u001c4UA}$Z\u0012.ZGt\u007f30;]Fu%\b\u0010(VIn4\b\u0018?J[n>Z\u0016zUZu<\b\u0003(Z^{%MS1VQ:yC\u0016#\u0013Iv8I\u0000g\u0010TzFXv>I\u0017zVZh>ZS}%&4RJv4\b\u00075\u0013At8\\\u001a;_A`4\b'\u0016`\bI\u0002d05]\\\u007f)\\Iz"
         .length();
      char var1 = 6;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 118;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     d = var5;
                     a = Logger.getLogger(FtpClientUtils.class.getName());
                     b = new Random(System.currentTimeMillis());
                     c = new SecureRandom();
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "UG+5\u0006U5 A/(\u001d\u0018{#E[24\u001b\u0002<e]42\u0007E{uY,4\bF{o\\4+\u001cV{s]2>\bOu";
                  var4 = "UG+5\u0006U5 A/(\u001d\u0018{#E[24\u001b\u0002<e]42\u0007E{uY,4\bF{o\\4+\u001cV{s]2>\bOu".length();
                  var1 = 14;
                  var7 = -1;
            }

            var10000 = 5;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static Exception a(Exception var0) {
      return var0;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 94);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 5;
            case 1 -> 44;
            case 2 -> 69;
            case 3 -> 94;
            case 4 -> 108;
            case 5 -> 39;
            default -> 94;
         });
      }

      return new String(var10001).intern();
   }
}
