public class org.apache.catalina.startup.ExpandWar
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.startup.ExpandWar
  super_class: java.lang.Object
{
  private static final org.apache.juli.logging.Log log;
    descriptor: Lorg/apache/juli/logging/Log;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  protected static final org.apache.tomcat.util.res.StringManager sm;
    descriptor: Lorg/apache/tomcat/util/res/StringManager;
    flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 48
            ldc Lorg/apache/catalina/startup/ExpandWar;
            invokestatic org.apache.juli.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/juli/logging/Log;
            putstatic org.apache.catalina.startup.ExpandWar.log:Lorg/apache/juli/logging/Log;
         1: .line 54
            ldc "org.apache.catalina.startup"
            invokestatic org.apache.tomcat.util.res.StringManager.getManager:(Ljava/lang/String;)Lorg/apache/tomcat/util/res/StringManager;
         2: .line 53
            putstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
         3: .line 54
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.startup.ExpandWar this
         0: .line 46
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.apache.catalina.startup.ExpandWar this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/startup/ExpandWar;

  public static java.lang.String expand(org.apache.catalina.Host, java.net.URL, java.lang.String);
    descriptor: (Lorg/apache/catalina/Host;Ljava/net/URL;Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=8, locals=27, args_size=3
        start local 0 // org.apache.catalina.Host host
        start local 1 // java.net.URL war
        start local 2 // java.lang.String pathname
         0: .line 80
            aload 1 /* war */
            invokevirtual java.net.URL.openConnection:()Ljava/net/URLConnection;
            checkcast java.net.JarURLConnection
            astore 3 /* juc */
        start local 3 // java.net.JarURLConnection juc
         1: .line 81
            aload 3 /* juc */
            iconst_0
            invokevirtual java.net.JarURLConnection.setUseCaches:(Z)V
         2: .line 82
            aload 3 /* juc */
            invokevirtual java.net.JarURLConnection.getJarFileURL:()Ljava/net/URL;
            astore 4 /* jarFileUrl */
        start local 4 // java.net.URL jarFileUrl
         3: .line 83
            aload 4 /* jarFileUrl */
            invokevirtual java.net.URL.openConnection:()Ljava/net/URLConnection;
            astore 5 /* jfuc */
        start local 5 // java.net.URLConnection jfuc
         4: .line 85
            iconst_0
            istore 6 /* success */
        start local 6 // boolean success
         5: .line 86
            new java.io.File
            dup
            aload 0 /* host */
            invokeinterface org.apache.catalina.Host.getAppBaseFile:()Ljava/io/File;
            aload 2 /* pathname */
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 7 /* docBase */
        start local 7 // java.io.File docBase
         6: .line 87
            new java.io.File
            dup
            aload 0 /* host */
            invokeinterface org.apache.catalina.Host.getAppBaseFile:()Ljava/io/File;
            new java.lang.StringBuilder
            dup
            aload 2 /* pathname */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "/META-INF/war-tracker"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 8 /* warTracker */
        start local 8 // java.io.File warTracker
         7: .line 88
            ldc -1
            lstore 9 /* warLastModified */
        start local 9 // long warLastModified
         8: .line 90
            aconst_null
            astore 11
            aconst_null
            astore 12
         9: aload 5 /* jfuc */
            invokevirtual java.net.URLConnection.getInputStream:()Ljava/io/InputStream;
            astore 13 /* is */
        start local 13 // java.io.InputStream is
        10: .line 92
            aload 5 /* jfuc */
            invokevirtual java.net.URLConnection.getLastModified:()J
            lstore 9 /* warLastModified */
        11: .line 93
            aload 13 /* is */
            ifnull 17
            aload 13 /* is */
            invokevirtual java.io.InputStream.close:()V
            goto 17
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.Throwable java.lang.Throwable java.io.InputStream
      StackMap stack: java.lang.Throwable
        12: astore 11
            aload 13 /* is */
            ifnull 13
            aload 13 /* is */
            invokevirtual java.io.InputStream.close:()V
        end local 13 // java.io.InputStream is
      StackMap locals:
      StackMap stack:
        13: aload 11
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: astore 12
            aload 11
            ifnonnull 15
            aload 12
            astore 11
            goto 16
      StackMap locals:
      StackMap stack:
        15: aload 11
            aload 12
            if_acmpeq 16
            aload 11
            aload 12
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        16: aload 11
            athrow
        17: .line 96
      StackMap locals:
      StackMap stack:
            aload 7 /* docBase */
            invokevirtual java.io.File.exists:()Z
            ifeq 24
        18: .line 100
            aload 8 /* warTracker */
            invokevirtual java.io.File.exists:()Z
            ifeq 19
            aload 8 /* warTracker */
            invokevirtual java.io.File.lastModified:()J
            lload 9 /* warLastModified */
            lcmp
            ifne 21
        19: .line 102
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 6 /* success */
        20: .line 103
            aload 7 /* docBase */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            areturn
        21: .line 107
      StackMap locals:
      StackMap stack:
            getstatic org.apache.catalina.startup.ExpandWar.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.deleteOld"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* docBase */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.info:(Ljava/lang/Object;)V
        22: .line 108
            aload 7 /* docBase */
            invokestatic org.apache.catalina.startup.ExpandWar.delete:(Ljava/io/File;)Z
            ifne 24
        23: .line 109
            new java.io.IOException
            dup
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.deleteFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* docBase */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        24: .line 114
      StackMap locals:
      StackMap stack:
            aload 7 /* docBase */
            invokevirtual java.io.File.mkdir:()Z
            ifne 26
            aload 7 /* docBase */
            invokevirtual java.io.File.isDirectory:()Z
            ifne 26
        25: .line 115
            new java.io.IOException
            dup
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.createFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* docBase */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        26: .line 119
      StackMap locals:
      StackMap stack:
            aload 7 /* docBase */
            invokevirtual java.io.File.getCanonicalPath:()Ljava/lang/String;
            astore 11 /* canonicalDocBasePrefix */
        start local 11 // java.lang.String canonicalDocBasePrefix
        27: .line 120
            aload 11 /* canonicalDocBasePrefix */
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifne 29
        28: .line 121
            new java.lang.StringBuilder
            dup
            aload 11 /* canonicalDocBasePrefix */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 11 /* canonicalDocBasePrefix */
        29: .line 125
      StackMap locals: java.lang.String
      StackMap stack:
            aload 8 /* warTracker */
            invokevirtual java.io.File.getParentFile:()Ljava/io/File;
            astore 12 /* warTrackerParent */
        start local 12 // java.io.File warTrackerParent
        30: .line 126
            aload 12 /* warTrackerParent */
            invokevirtual java.io.File.isDirectory:()Z
            ifne 32
            aload 12 /* warTrackerParent */
            invokevirtual java.io.File.mkdirs:()Z
            ifne 32
        31: .line 127
            new java.io.IOException
            dup
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.createFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 12 /* warTrackerParent */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        32: .line 130
      StackMap locals: java.io.File
      StackMap stack:
            aconst_null
            astore 13
            aconst_null
            astore 14
        33: aload 3 /* juc */
            invokevirtual java.net.JarURLConnection.getJarFile:()Ljava/util/jar/JarFile;
            astore 15 /* jarFile */
        start local 15 // java.util.jar.JarFile jarFile
        34: .line 132
            aload 15 /* jarFile */
            invokevirtual java.util.jar.JarFile.entries:()Ljava/util/Enumeration;
            astore 16 /* jarEntries */
        start local 16 // java.util.Enumeration jarEntries
        35: .line 133
            goto 79
        36: .line 134
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.String java.io.File java.lang.Throwable java.lang.Throwable java.util.jar.JarFile java.util.Enumeration
      StackMap stack:
            aload 16 /* jarEntries */
            invokeinterface java.util.Enumeration.nextElement:()Ljava/lang/Object;
            checkcast java.util.jar.JarEntry
            astore 17 /* jarEntry */
        start local 17 // java.util.jar.JarEntry jarEntry
        37: .line 135
            aload 17 /* jarEntry */
            invokevirtual java.util.jar.JarEntry.getName:()Ljava/lang/String;
            astore 18 /* name */
        start local 18 // java.lang.String name
        38: .line 136
            new java.io.File
            dup
            aload 7 /* docBase */
            aload 18 /* name */
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 19 /* expandedFile */
        start local 19 // java.io.File expandedFile
        39: .line 137
            aload 19 /* expandedFile */
            invokevirtual java.io.File.getCanonicalPath:()Ljava/lang/String;
        40: .line 138
            aload 11 /* canonicalDocBasePrefix */
        41: .line 137
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
        42: .line 138
            ifne 49
        43: .line 141
            new java.lang.IllegalArgumentException
            dup
        44: .line 142
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.illegalPath"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* war */
            aastore
            dup
            iconst_1
            aload 18 /* name */
            aastore
            dup
            iconst_2
        45: .line 143
            aload 19 /* expandedFile */
            invokevirtual java.io.File.getCanonicalPath:()Ljava/lang/String;
            aastore
            dup
            iconst_3
        46: .line 144
            aload 11 /* canonicalDocBasePrefix */
            aastore
        47: .line 142
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        48: .line 141
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        49: .line 146
      StackMap locals: java.util.jar.JarEntry java.lang.String java.io.File
      StackMap stack:
            aload 18 /* name */
            bipush 47
            invokevirtual java.lang.String.lastIndexOf:(I)I
            istore 20 /* last */
        start local 20 // int last
        50: .line 147
            iload 20 /* last */
            iflt 58
        51: .line 148
            new java.io.File
            dup
            aload 7 /* docBase */
        52: .line 149
            aload 18 /* name */
            iconst_0
            iload 20 /* last */
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
        53: .line 148
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 21 /* parent */
        start local 21 // java.io.File parent
        54: .line 150
            aload 21 /* parent */
            invokevirtual java.io.File.mkdirs:()Z
            ifne 58
            aload 21 /* parent */
            invokevirtual java.io.File.isDirectory:()Z
            ifne 58
        55: .line 151
            new java.io.IOException
            dup
        56: .line 152
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.createFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 21 /* parent */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        57: .line 151
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        end local 21 // java.io.File parent
        58: .line 155
      StackMap locals: int
      StackMap stack:
            aload 18 /* name */
            ldc "/"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 60
        59: .line 156
            goto 79
        60: .line 159
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 21
            aconst_null
            astore 22
        61: aload 15 /* jarFile */
            aload 17 /* jarEntry */
            invokevirtual java.util.jar.JarFile.getInputStream:(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;
            astore 23 /* input */
        start local 23 // java.io.InputStream input
        62: .line 160
            aload 23 /* input */
            ifnonnull 66
        63: .line 161
            new java.util.zip.ZipException
            dup
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.missingJarEntry"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        64: .line 162
            aload 17 /* jarEntry */
            invokevirtual java.util.jar.JarEntry.getName:()Ljava/lang/String;
            aastore
        65: .line 161
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.util.zip.ZipException.<init>:(Ljava/lang/String;)V
            athrow
        66: .line 166
      StackMap locals: java.lang.Throwable java.lang.Throwable java.io.InputStream
      StackMap stack:
            aload 23 /* input */
            aload 19 /* expandedFile */
            invokestatic org.apache.catalina.startup.ExpandWar.expand:(Ljava/io/InputStream;Ljava/io/File;)V
        67: .line 167
            aload 17 /* jarEntry */
            invokevirtual java.util.jar.JarEntry.getTime:()J
            lstore 24 /* lastModified */
        start local 24 // long lastModified
        68: .line 168
            lload 24 /* lastModified */
            ldc -1
            lcmp
            ifeq 73
            lload 24 /* lastModified */
            lconst_0
            lcmp
            ifeq 73
        69: .line 169
            aload 19 /* expandedFile */
            lload 24 /* lastModified */
            invokevirtual java.io.File.setLastModified:(J)Z
            ifne 73
        70: .line 170
            new java.io.IOException
            dup
        71: .line 171
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.lastModifiedFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 19 /* expandedFile */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        72: .line 170
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        end local 24 // long lastModified
        73: .line 174
      StackMap locals:
      StackMap stack:
            aload 23 /* input */
            ifnull 79
            aload 23 /* input */
            invokevirtual java.io.InputStream.close:()V
            goto 79
      StackMap locals:
      StackMap stack: java.lang.Throwable
        74: astore 21
            aload 23 /* input */
            ifnull 75
            aload 23 /* input */
            invokevirtual java.io.InputStream.close:()V
        end local 23 // java.io.InputStream input
      StackMap locals:
      StackMap stack:
        75: aload 21
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        76: astore 22
            aload 21
            ifnonnull 77
            aload 22
            astore 21
            goto 78
      StackMap locals:
      StackMap stack:
        77: aload 21
            aload 22
            if_acmpeq 78
            aload 21
            aload 22
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        78: aload 21
            athrow
        end local 20 // int last
        end local 19 // java.io.File expandedFile
        end local 18 // java.lang.String name
        end local 17 // java.util.jar.JarEntry jarEntry
        79: .line 133
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.String java.io.File java.lang.Throwable java.lang.Throwable java.util.jar.JarFile java.util.Enumeration
      StackMap stack:
            aload 16 /* jarEntries */
            invokeinterface java.util.Enumeration.hasMoreElements:()Z
            ifne 36
        80: .line 179
            aload 8 /* warTracker */
            invokevirtual java.io.File.createNewFile:()Z
            ifne 82
        81: .line 180
            new java.io.IOException
            dup
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.createFileFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 8 /* warTracker */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        82: .line 182
      StackMap locals:
      StackMap stack:
            aload 8 /* warTracker */
            lload 9 /* warLastModified */
            invokevirtual java.io.File.setLastModified:(J)Z
            ifne 84
        83: .line 183
            new java.io.IOException
            dup
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.lastModifiedFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 8 /* warTracker */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        84: .line 186
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 6 /* success */
        end local 16 // java.util.Enumeration jarEntries
        85: .line 187
            aload 15 /* jarFile */
            ifnull 97
            aload 15 /* jarFile */
            invokevirtual java.util.jar.JarFile.close:()V
            goto 97
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.String java.io.File java.lang.Throwable java.lang.Throwable java.util.jar.JarFile
      StackMap stack: java.lang.Throwable
        86: astore 13
            aload 15 /* jarFile */
            ifnull 87
            aload 15 /* jarFile */
            invokevirtual java.util.jar.JarFile.close:()V
        end local 15 // java.util.jar.JarFile jarFile
      StackMap locals:
      StackMap stack:
        87: aload 13
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        88: astore 14
            aload 13
            ifnonnull 89
            aload 14
            astore 13
            goto 90
      StackMap locals:
      StackMap stack:
        89: aload 13
            aload 14
            if_acmpeq 90
            aload 13
            aload 14
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        90: aload 13
            athrow
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.String java.io.File
      StackMap stack: java.io.IOException
        91: astore 13 /* e */
        start local 13 // java.io.IOException e
        92: .line 188
            aload 13 /* e */
            athrow
        end local 13 // java.io.IOException e
        93: .line 189
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 26
        94: .line 190
            iload 6 /* success */
            ifne 96
        95: .line 193
            aload 7 /* docBase */
            invokestatic org.apache.catalina.startup.ExpandWar.deleteDir:(Ljava/io/File;)Z
            pop
        96: .line 195
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.String java.io.File top top top top top top top top top top top top top java.lang.Throwable
      StackMap stack:
            aload 26
            athrow
        97: .line 190
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.net.JarURLConnection java.net.URL java.net.URLConnection int java.io.File java.io.File long java.lang.String java.io.File
      StackMap stack:
            iload 6 /* success */
            ifne 99
        98: .line 193
            aload 7 /* docBase */
            invokestatic org.apache.catalina.startup.ExpandWar.deleteDir:(Ljava/io/File;)Z
            pop
        99: .line 198
      StackMap locals:
      StackMap stack:
            aload 7 /* docBase */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            areturn
        end local 12 // java.io.File warTrackerParent
        end local 11 // java.lang.String canonicalDocBasePrefix
        end local 9 // long warLastModified
        end local 8 // java.io.File warTracker
        end local 7 // java.io.File docBase
        end local 6 // boolean success
        end local 5 // java.net.URLConnection jfuc
        end local 4 // java.net.URL jarFileUrl
        end local 3 // java.net.JarURLConnection juc
        end local 2 // java.lang.String pathname
        end local 1 // java.net.URL war
        end local 0 // org.apache.catalina.Host host
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0  100     0                    host  Lorg/apache/catalina/Host;
            0  100     1                     war  Ljava/net/URL;
            0  100     2                pathname  Ljava/lang/String;
            1  100     3                     juc  Ljava/net/JarURLConnection;
            3  100     4              jarFileUrl  Ljava/net/URL;
            4  100     5                    jfuc  Ljava/net/URLConnection;
            5  100     6                 success  Z
            6  100     7                 docBase  Ljava/io/File;
            7  100     8              warTracker  Ljava/io/File;
            8  100     9         warLastModified  J
           10   13    13                      is  Ljava/io/InputStream;
           27  100    11  canonicalDocBasePrefix  Ljava/lang/String;
           30  100    12        warTrackerParent  Ljava/io/File;
           34   87    15                 jarFile  Ljava/util/jar/JarFile;
           35   85    16              jarEntries  Ljava/util/Enumeration<Ljava/util/jar/JarEntry;>;
           37   79    17                jarEntry  Ljava/util/jar/JarEntry;
           38   79    18                    name  Ljava/lang/String;
           39   79    19            expandedFile  Ljava/io/File;
           50   79    20                    last  I
           54   58    21                  parent  Ljava/io/File;
           62   75    23                   input  Ljava/io/InputStream;
           68   73    24            lastModified  J
           92   93    13                       e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          10    11      12  any
           9    14      14  any
          62    73      74  any
          61    76      76  any
          34    85      86  any
          33    88      88  any
          32    91      91  Class java.io.IOException
          32    93      93  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      host      
      war       
      pathname  

  public static void validate(org.apache.catalina.Host, java.net.URL, java.lang.String);
    descriptor: (Lorg/apache/catalina/Host;Ljava/net/URL;Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=8, locals=13, args_size=3
        start local 0 // org.apache.catalina.Host host
        start local 1 // java.net.URL war
        start local 2 // java.lang.String pathname
         0: .line 217
            new java.io.File
            dup
            aload 0 /* host */
            invokeinterface org.apache.catalina.Host.getAppBaseFile:()Ljava/io/File;
            aload 2 /* pathname */
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 3 /* docBase */
        start local 3 // java.io.File docBase
         1: .line 220
            aload 3 /* docBase */
            invokevirtual java.io.File.getCanonicalPath:()Ljava/lang/String;
            astore 4 /* canonicalDocBasePrefix */
        start local 4 // java.lang.String canonicalDocBasePrefix
         2: .line 221
            aload 4 /* canonicalDocBasePrefix */
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifne 4
         3: .line 222
            new java.lang.StringBuilder
            dup
            aload 4 /* canonicalDocBasePrefix */
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            getstatic java.io.File.separator:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 4 /* canonicalDocBasePrefix */
         4: .line 224
      StackMap locals: java.io.File java.lang.String
      StackMap stack:
            aload 1 /* war */
            invokevirtual java.net.URL.openConnection:()Ljava/net/URLConnection;
            checkcast java.net.JarURLConnection
            astore 5 /* juc */
        start local 5 // java.net.JarURLConnection juc
         5: .line 225
            aload 5 /* juc */
            iconst_0
            invokevirtual java.net.JarURLConnection.setUseCaches:(Z)V
         6: .line 226
            aconst_null
            astore 6
            aconst_null
            astore 7
         7: aload 5 /* juc */
            invokevirtual java.net.JarURLConnection.getJarFile:()Ljava/util/jar/JarFile;
            astore 8 /* jarFile */
        start local 8 // java.util.jar.JarFile jarFile
         8: .line 227
            aload 8 /* jarFile */
            invokevirtual java.util.jar.JarFile.entries:()Ljava/util/Enumeration;
            astore 9 /* jarEntries */
        start local 9 // java.util.Enumeration jarEntries
         9: .line 228
            goto 23
        10: .line 229
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.io.File java.lang.String java.net.JarURLConnection java.lang.Throwable java.lang.Throwable java.util.jar.JarFile java.util.Enumeration
      StackMap stack:
            aload 9 /* jarEntries */
            invokeinterface java.util.Enumeration.nextElement:()Ljava/lang/Object;
            checkcast java.util.jar.JarEntry
            astore 10 /* jarEntry */
        start local 10 // java.util.jar.JarEntry jarEntry
        11: .line 230
            aload 10 /* jarEntry */
            invokevirtual java.util.jar.JarEntry.getName:()Ljava/lang/String;
            astore 11 /* name */
        start local 11 // java.lang.String name
        12: .line 231
            new java.io.File
            dup
            aload 3 /* docBase */
            aload 11 /* name */
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 12 /* expandedFile */
        start local 12 // java.io.File expandedFile
        13: .line 232
            aload 12 /* expandedFile */
            invokevirtual java.io.File.getCanonicalPath:()Ljava/lang/String;
        14: .line 233
            aload 4 /* canonicalDocBasePrefix */
        15: .line 232
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
        16: .line 233
            ifne 23
        17: .line 236
            new java.lang.IllegalArgumentException
            dup
        18: .line 237
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.illegalPath"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
            aload 1 /* war */
            aastore
            dup
            iconst_1
            aload 11 /* name */
            aastore
            dup
            iconst_2
        19: .line 238
            aload 12 /* expandedFile */
            invokevirtual java.io.File.getCanonicalPath:()Ljava/lang/String;
            aastore
            dup
            iconst_3
        20: .line 239
            aload 4 /* canonicalDocBasePrefix */
            aastore
        21: .line 237
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        22: .line 236
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 12 // java.io.File expandedFile
        end local 11 // java.lang.String name
        end local 10 // java.util.jar.JarEntry jarEntry
        23: .line 228
      StackMap locals:
      StackMap stack:
            aload 9 /* jarEntries */
            invokeinterface java.util.Enumeration.hasMoreElements:()Z
            ifne 10
        end local 9 // java.util.Enumeration jarEntries
        24: .line 242
            aload 8 /* jarFile */
            ifnull 32
            aload 8 /* jarFile */
            invokevirtual java.util.jar.JarFile.close:()V
            goto 32
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.io.File java.lang.String java.net.JarURLConnection java.lang.Throwable java.lang.Throwable java.util.jar.JarFile
      StackMap stack: java.lang.Throwable
        25: astore 6
            aload 8 /* jarFile */
            ifnull 26
            aload 8 /* jarFile */
            invokevirtual java.util.jar.JarFile.close:()V
        end local 8 // java.util.jar.JarFile jarFile
      StackMap locals:
      StackMap stack:
        26: aload 6
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        27: astore 7
            aload 6
            ifnonnull 28
            aload 7
            astore 6
            goto 29
      StackMap locals:
      StackMap stack:
        28: aload 6
            aload 7
            if_acmpeq 29
            aload 6
            aload 7
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        29: aload 6
            athrow
      StackMap locals: org.apache.catalina.Host java.net.URL java.lang.String java.io.File java.lang.String java.net.JarURLConnection
      StackMap stack: java.io.IOException
        30: astore 6 /* e */
        start local 6 // java.io.IOException e
        31: .line 243
            aload 6 /* e */
            athrow
        end local 6 // java.io.IOException e
        32: .line 245
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.net.JarURLConnection juc
        end local 4 // java.lang.String canonicalDocBasePrefix
        end local 3 // java.io.File docBase
        end local 2 // java.lang.String pathname
        end local 1 // java.net.URL war
        end local 0 // org.apache.catalina.Host host
      LocalVariableTable:
        Start  End  Slot                    Name  Signature
            0   33     0                    host  Lorg/apache/catalina/Host;
            0   33     1                     war  Ljava/net/URL;
            0   33     2                pathname  Ljava/lang/String;
            1   33     3                 docBase  Ljava/io/File;
            2   33     4  canonicalDocBasePrefix  Ljava/lang/String;
            5   33     5                     juc  Ljava/net/JarURLConnection;
            8   26     8                 jarFile  Ljava/util/jar/JarFile;
            9   24     9              jarEntries  Ljava/util/Enumeration<Ljava/util/jar/JarEntry;>;
           11   23    10                jarEntry  Ljava/util/jar/JarEntry;
           12   23    11                    name  Ljava/lang/String;
           13   23    12            expandedFile  Ljava/io/File;
           31   32     6                       e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           8    24      25  any
           7    27      27  any
           6    30      30  Class java.io.IOException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      host      
      war       
      pathname  

  public static boolean copy(java.io.File, java.io.File);
    descriptor: (Ljava/io/File;Ljava/io/File;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=11, args_size=2
        start local 0 // java.io.File src
        start local 1 // java.io.File dest
         0: .line 257
            iconst_1
            istore 2 /* result */
        start local 2 // boolean result
         1: .line 259
            aconst_null
            astore 3 /* files */
        start local 3 // java.lang.String[] files
         2: .line 260
            aload 0 /* src */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 6
         3: .line 261
            aload 0 /* src */
            invokevirtual java.io.File.list:()[Ljava/lang/String;
            astore 3 /* files */
         4: .line 262
            aload 1 /* dest */
            invokevirtual java.io.File.mkdir:()Z
            istore 2 /* result */
         5: .line 263
            goto 8
         6: .line 264
      StackMap locals: int java.lang.String[]
      StackMap stack:
            iconst_1
            anewarray java.lang.String
            astore 3 /* files */
         7: .line 265
            aload 3 /* files */
            iconst_0
            ldc ""
            aastore
         8: .line 267
      StackMap locals:
      StackMap stack:
            aload 3 /* files */
            ifnonnull 10
         9: .line 268
            iconst_0
            anewarray java.lang.String
            astore 3 /* files */
        10: .line 270
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 4 /* i */
        start local 4 // int i
        11: goto 36
        12: .line 271
      StackMap locals: int
      StackMap stack:
            new java.io.File
            dup
            aload 0 /* src */
            aload 3 /* files */
            iload 4 /* i */
            aaload
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 5 /* fileSrc */
        start local 5 // java.io.File fileSrc
        13: .line 272
            new java.io.File
            dup
            aload 1 /* dest */
            aload 3 /* files */
            iload 4 /* i */
            aaload
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 6 /* fileDest */
        start local 6 // java.io.File fileDest
        14: .line 273
            aload 5 /* fileSrc */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 17
        15: .line 274
            aload 5 /* fileSrc */
            aload 6 /* fileDest */
            invokestatic org.apache.catalina.startup.ExpandWar.copy:(Ljava/io/File;Ljava/io/File;)Z
            istore 2 /* result */
        16: .line 275
            goto 35
        17: .line 276
      StackMap locals: java.io.File java.io.File
      StackMap stack:
            aconst_null
            astore 7
            aconst_null
            astore 8
        18: new java.io.FileInputStream
            dup
            aload 5 /* fileSrc */
            invokespecial java.io.FileInputStream.<init>:(Ljava/io/File;)V
            invokevirtual java.io.FileInputStream.getChannel:()Ljava/nio/channels/FileChannel;
            astore 9 /* ic */
        start local 9 // java.nio.channels.FileChannel ic
        19: .line 277
            new java.io.FileOutputStream
            dup
            aload 6 /* fileDest */
            invokespecial java.io.FileOutputStream.<init>:(Ljava/io/File;)V
            invokevirtual java.io.FileOutputStream.getChannel:()Ljava/nio/channels/FileChannel;
            astore 10 /* oc */
        start local 10 // java.nio.channels.FileChannel oc
        20: .line 278
            aload 9 /* ic */
            lconst_0
            aload 9 /* ic */
            invokevirtual java.nio.channels.FileChannel.size:()J
            aload 10 /* oc */
            invokevirtual java.nio.channels.FileChannel.transferTo:(JJLjava/nio/channels/WritableByteChannel;)J
            pop2
        21: .line 279
            aload 10 /* oc */
            ifnull 24
            aload 10 /* oc */
            invokevirtual java.nio.channels.FileChannel.close:()V
            goto 24
      StackMap locals: java.io.File java.io.File int java.lang.String[] int java.io.File java.io.File java.lang.Throwable java.lang.Throwable java.nio.channels.FileChannel java.nio.channels.FileChannel
      StackMap stack: java.lang.Throwable
        22: astore 7
            aload 10 /* oc */
            ifnull 23
            aload 10 /* oc */
            invokevirtual java.nio.channels.FileChannel.close:()V
        end local 10 // java.nio.channels.FileChannel oc
      StackMap locals:
      StackMap stack:
        23: aload 7
            athrow
      StackMap locals:
      StackMap stack:
        24: aload 9 /* ic */
            ifnull 35
            aload 9 /* ic */
            invokevirtual java.nio.channels.FileChannel.close:()V
            goto 35
      StackMap locals:
      StackMap stack: java.lang.Throwable
        25: astore 8
            aload 7
            ifnonnull 26
            aload 8
            astore 7
            goto 27
      StackMap locals:
      StackMap stack:
        26: aload 7
            aload 8
            if_acmpeq 27
            aload 7
            aload 8
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        27: aload 9 /* ic */
            ifnull 28
            aload 9 /* ic */
            invokevirtual java.nio.channels.FileChannel.close:()V
        end local 9 // java.nio.channels.FileChannel ic
      StackMap locals:
      StackMap stack:
        28: aload 7
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        29: astore 8
            aload 7
            ifnonnull 30
            aload 8
            astore 7
            goto 31
      StackMap locals:
      StackMap stack:
        30: aload 7
            aload 8
            if_acmpeq 31
            aload 7
            aload 8
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        31: aload 7
            athrow
      StackMap locals: java.io.File java.io.File int java.lang.String[] int java.io.File java.io.File
      StackMap stack: java.io.IOException
        32: astore 7 /* e */
        start local 7 // java.io.IOException e
        33: .line 280
            getstatic org.apache.catalina.startup.ExpandWar.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "expandWar.copy"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 5 /* fileSrc */
            aastore
            dup
            iconst_1
            aload 6 /* fileDest */
            aastore
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            aload 7 /* e */
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        34: .line 281
            iconst_0
            istore 2 /* result */
        end local 7 // java.io.IOException e
        end local 6 // java.io.File fileDest
        end local 5 // java.io.File fileSrc
        35: .line 270
      StackMap locals:
      StackMap stack:
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        36: iload 4 /* i */
            aload 3 /* files */
            arraylength
            if_icmpge 37
            iload 2 /* result */
            ifne 12
        end local 4 // int i
        37: .line 285
      StackMap locals:
      StackMap stack:
            iload 2 /* result */
            ireturn
        end local 3 // java.lang.String[] files
        end local 2 // boolean result
        end local 1 // java.io.File dest
        end local 0 // java.io.File src
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   38     0       src  Ljava/io/File;
            0   38     1      dest  Ljava/io/File;
            1   38     2    result  Z
            2   38     3     files  [Ljava/lang/String;
           11   37     4         i  I
           13   35     5   fileSrc  Ljava/io/File;
           14   35     6  fileDest  Ljava/io/File;
           19   28     9        ic  Ljava/nio/channels/FileChannel;
           20   23    10        oc  Ljava/nio/channels/FileChannel;
           33   35     7         e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
          20    21      22  any
          19    24      25  any
          18    29      29  any
          17    32      32  Class java.io.IOException
    MethodParameters:
      Name  Flags
      src   
      dest  

  public static boolean delete(java.io.File);
    descriptor: (Ljava/io/File;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.io.File dir
         0: .line 298
            aload 0 /* dir */
            iconst_1
            invokestatic org.apache.catalina.startup.ExpandWar.delete:(Ljava/io/File;Z)Z
            ireturn
        end local 0 // java.io.File dir
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   dir  Ljava/io/File;
    MethodParameters:
      Name  Flags
      dir   

  public static boolean delete(java.io.File, boolean);
    descriptor: (Ljava/io/File;Z)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=3, args_size=2
        start local 0 // java.io.File dir
        start local 1 // boolean logFailure
         0: .line 313
            aload 0 /* dir */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 3
         1: .line 314
            aload 0 /* dir */
            iload 1 /* logFailure */
            invokestatic org.apache.catalina.startup.ExpandWar.deleteDir:(Ljava/io/File;Z)Z
            istore 2 /* result */
        start local 2 // boolean result
         2: .line 315
            goto 7
        end local 2 // boolean result
         3: .line 316
      StackMap locals:
      StackMap stack:
            aload 0 /* dir */
            invokevirtual java.io.File.exists:()Z
            ifeq 6
         4: .line 317
            aload 0 /* dir */
            invokevirtual java.io.File.delete:()Z
            istore 2 /* result */
        start local 2 // boolean result
         5: .line 318
            goto 7
        end local 2 // boolean result
         6: .line 319
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 2 /* result */
        start local 2 // boolean result
         7: .line 322
      StackMap locals: int
      StackMap stack:
            iload 1 /* logFailure */
            ifeq 11
            iload 2 /* result */
            ifne 11
         8: .line 323
            getstatic org.apache.catalina.startup.ExpandWar.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
         9: .line 324
            ldc "expandWar.deleteFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* dir */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            aastore
        10: .line 323
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;)V
        11: .line 326
      StackMap locals:
      StackMap stack:
            iload 2 /* result */
            ireturn
        end local 2 // boolean result
        end local 1 // boolean logFailure
        end local 0 // java.io.File dir
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   12     0         dir  Ljava/io/File;
            0   12     1  logFailure  Z
            2    3     2      result  Z
            5    6     2      result  Z
            7   12     2      result  Z
    MethodParameters:
            Name  Flags
      dir         
      logFailure  

  public static boolean deleteDir(java.io.File);
    descriptor: (Ljava/io/File;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.io.File dir
         0: .line 338
            aload 0 /* dir */
            iconst_1
            invokestatic org.apache.catalina.startup.ExpandWar.deleteDir:(Ljava/io/File;Z)Z
            ireturn
        end local 0 // java.io.File dir
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0   dir  Ljava/io/File;
    MethodParameters:
      Name  Flags
      dir   

  public static boolean deleteDir(java.io.File, boolean);
    descriptor: (Ljava/io/File;Z)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=7, locals=8, args_size=2
        start local 0 // java.io.File dir
        start local 1 // boolean logFailure
         0: .line 353
            aload 0 /* dir */
            invokevirtual java.io.File.list:()[Ljava/lang/String;
            astore 2 /* files */
        start local 2 // java.lang.String[] files
         1: .line 354
            aload 2 /* files */
            ifnonnull 3
         2: .line 355
            iconst_0
            anewarray java.lang.String
            astore 2 /* files */
         3: .line 357
      StackMap locals: java.lang.String[]
      StackMap stack:
            aload 2 /* files */
            dup
            astore 6
            arraylength
            istore 5
            iconst_0
            istore 4
            goto 11
      StackMap locals: java.io.File int java.lang.String[] top int int java.lang.String[]
      StackMap stack:
         4: aload 6
            iload 4
            aaload
            astore 3 /* s */
        start local 3 // java.lang.String s
         5: .line 358
            new java.io.File
            dup
            aload 0 /* dir */
            aload 3 /* s */
            invokespecial java.io.File.<init>:(Ljava/io/File;Ljava/lang/String;)V
            astore 7 /* file */
        start local 7 // java.io.File file
         6: .line 359
            aload 7 /* file */
            invokevirtual java.io.File.isDirectory:()Z
            ifeq 9
         7: .line 360
            aload 7 /* file */
            iload 1 /* logFailure */
            invokestatic org.apache.catalina.startup.ExpandWar.deleteDir:(Ljava/io/File;Z)Z
            pop
         8: .line 361
            goto 10
         9: .line 362
      StackMap locals: java.io.File int java.lang.String[] java.lang.String int int java.lang.String[] java.io.File
      StackMap stack:
            aload 7 /* file */
            invokevirtual java.io.File.delete:()Z
            pop
        end local 7 // java.io.File file
        end local 3 // java.lang.String s
        10: .line 357
      StackMap locals: java.io.File int java.lang.String[] top int int java.lang.String[]
      StackMap stack:
            iinc 4 1
      StackMap locals:
      StackMap stack:
        11: iload 4
            iload 5
            if_icmplt 4
        12: .line 367
            aload 0 /* dir */
            invokevirtual java.io.File.exists:()Z
            ifeq 15
        13: .line 368
            aload 0 /* dir */
            invokevirtual java.io.File.delete:()Z
            istore 3 /* result */
        start local 3 // boolean result
        14: .line 369
            goto 16
        end local 3 // boolean result
        15: .line 370
      StackMap locals: java.io.File int java.lang.String[]
      StackMap stack:
            iconst_1
            istore 3 /* result */
        start local 3 // boolean result
        16: .line 373
      StackMap locals: int
      StackMap stack:
            iload 1 /* logFailure */
            ifeq 20
            iload 3 /* result */
            ifne 20
        17: .line 374
            getstatic org.apache.catalina.startup.ExpandWar.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.catalina.startup.ExpandWar.sm:Lorg/apache/tomcat/util/res/StringManager;
        18: .line 375
            ldc "expandWar.deleteFailed"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* dir */
            invokevirtual java.io.File.getAbsolutePath:()Ljava/lang/String;
            aastore
        19: .line 374
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.error:(Ljava/lang/Object;)V
        20: .line 378
      StackMap locals:
      StackMap stack:
            iload 3 /* result */
            ireturn
        end local 3 // boolean result
        end local 2 // java.lang.String[] files
        end local 1 // boolean logFailure
        end local 0 // java.io.File dir
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   21     0         dir  Ljava/io/File;
            0   21     1  logFailure  Z
            1   21     2       files  [Ljava/lang/String;
            5   10     3           s  Ljava/lang/String;
            6   10     7        file  Ljava/io/File;
           14   15     3      result  Z
           16   21     3      result  Z
    MethodParameters:
            Name  Flags
      dir         
      logFailure  

  private static void expand(java.io.InputStream, java.io.File);
    descriptor: (Ljava/io/InputStream;Ljava/io/File;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=7, args_size=2
        start local 0 // java.io.InputStream input
        start local 1 // java.io.File file
         0: .line 391
            aconst_null
            astore 2
            aconst_null
            astore 3
         1: .line 392
            new java.io.BufferedOutputStream
            dup
            new java.io.FileOutputStream
            dup
            aload 1 /* file */
            invokespecial java.io.FileOutputStream.<init>:(Ljava/io/File;)V
            invokespecial java.io.BufferedOutputStream.<init>:(Ljava/io/OutputStream;)V
         2: .line 391
            astore 4 /* output */
        start local 4 // java.io.BufferedOutputStream output
         3: .line 393
            sipush 2048
            newarray 8
            astore 5 /* buffer */
        start local 5 // byte[] buffer
         4: .line 395
      StackMap locals: java.io.InputStream java.io.File java.lang.Throwable java.lang.Throwable java.io.BufferedOutputStream byte[]
      StackMap stack:
            aload 0 /* input */
            aload 5 /* buffer */
            invokevirtual java.io.InputStream.read:([B)I
            istore 6 /* n */
        start local 6 // int n
         5: .line 396
            iload 6 /* n */
            ifgt 7
         6: .line 397
            goto 9
         7: .line 398
      StackMap locals: int
      StackMap stack:
            aload 4 /* output */
            aload 5 /* buffer */
            iconst_0
            iload 6 /* n */
            invokevirtual java.io.BufferedOutputStream.write:([BII)V
        end local 6 // int n
         8: .line 394
            goto 4
        end local 5 // byte[] buffer
         9: .line 400
      StackMap locals:
      StackMap stack:
            aload 4 /* output */
            ifnull 15
            aload 4 /* output */
            invokevirtual java.io.BufferedOutputStream.close:()V
            goto 15
      StackMap locals:
      StackMap stack: java.lang.Throwable
        10: astore 2
            aload 4 /* output */
            ifnull 11
            aload 4 /* output */
            invokevirtual java.io.BufferedOutputStream.close:()V
        end local 4 // java.io.BufferedOutputStream output
      StackMap locals:
      StackMap stack:
        11: aload 2
            athrow
      StackMap locals:
      StackMap stack: java.lang.Throwable
        12: astore 3
            aload 2
            ifnonnull 13
            aload 3
            astore 2
            goto 14
      StackMap locals:
      StackMap stack:
        13: aload 2
            aload 3
            if_acmpeq 14
            aload 2
            aload 3
            invokevirtual java.lang.Throwable.addSuppressed:(Ljava/lang/Throwable;)V
      StackMap locals:
      StackMap stack:
        14: aload 2
            athrow
        15: .line 401
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.io.File file
        end local 0 // java.io.InputStream input
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   16     0   input  Ljava/io/InputStream;
            0   16     1    file  Ljava/io/File;
            3   11     4  output  Ljava/io/BufferedOutputStream;
            4    9     5  buffer  [B
            5    8     6       n  I
      Exception table:
        from    to  target  type
           3     9      10  any
           1    12      12  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
       Name  Flags
      input  
      file   
}
SourceFile: "ExpandWar.java"