public class org.apache.tomcat.util.net.TLSClientHelloExtractor
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.tomcat.util.net.TLSClientHelloExtractor
  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

  private static final org.apache.tomcat.util.res.StringManager sm;
    descriptor: Lorg/apache/tomcat/util/res/StringManager;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult result;
    descriptor: Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.List<org.apache.tomcat.util.net.openssl.ciphers.Cipher> clientRequestedCiphers;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Lorg/apache/tomcat/util/net/openssl/ciphers/Cipher;>;

  private final java.lang.String sniValue;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.List<java.lang.String> clientRequestedApplicationProtocols;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/String;>;

  private static final int TLS_RECORD_HEADER_LEN;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  private static final int TLS_EXTENSION_SERVER_NAME;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int TLS_EXTENSION_ALPN;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 16

  public static byte[] USE_TLS_RESPONSE;
    descriptor: [B
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 38
            ldc Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;
            invokestatic org.apache.juli.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/juli/logging/Log;
            putstatic org.apache.tomcat.util.net.TLSClientHelloExtractor.log:Lorg/apache/juli/logging/Log;
         1: .line 39
            ldc Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;
            invokestatic org.apache.tomcat.util.res.StringManager.getManager:(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager;
            putstatic org.apache.tomcat.util.net.TLSClientHelloExtractor.sm:Lorg/apache/tomcat/util/res/StringManager;
         2: .line 51
            ldc "HTTP/1.1 400 \r\nContent-Type: text/plain;charset=UTF-8\r\nConnection: close\r\n\r\nBad Request\r\nThis combination of host and port requires TLS.\r\n"
         3: .line 56
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
         4: .line 51
            putstatic org.apache.tomcat.util.net.TLSClientHelloExtractor.USE_TLS_RESPONSE:[B
         5: .line 56
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=12, args_size=2
        start local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
        start local 1 // java.nio.ByteBuffer netInBuffer
         0: .line 68
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 71
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.position:()I
            istore 2 /* pos */
        start local 2 // int pos
         2: .line 72
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.limit:()I
            istore 3 /* limit */
        start local 3 // int limit
         3: .line 73
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.NOT_PRESENT:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            astore 4 /* result */
        start local 4 // org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult result
         4: .line 74
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 5 /* clientRequestedCiphers */
        start local 5 // java.util.List clientRequestedCiphers
         5: .line 75
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 6 /* clientRequestedApplicationProtocols */
        start local 6 // java.util.List clientRequestedApplicationProtocols
         6: .line 76
            aconst_null
            astore 7 /* sniValue */
        start local 7 // java.lang.String sniValue
         7: .line 79
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.flip:()Ljava/nio/Buffer;
            pop
         8: .line 83
            aload 1 /* netInBuffer */
            iconst_5
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isAvailable:(Ljava/nio/ByteBuffer;I)Z
            ifne 17
         9: .line 84
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.handleIncompleteRead:(Ljava/nio/ByteBuffer;)Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            astore 4 /* result */
        10: .line 162
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        11: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        12: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        13: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        14: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        15: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        16: .line 85
            return
        17: .line 88
      StackMap locals: org.apache.tomcat.util.net.TLSClientHelloExtractor java.nio.ByteBuffer int int org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult java.util.List java.util.List java.lang.String
      StackMap stack:
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isTLSHandshake:(Ljava/nio/ByteBuffer;)Z
            ifne 27
        18: .line 90
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isHttp:(Ljava/nio/ByteBuffer;)Z
            ifeq 20
        19: .line 91
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.NON_SECURE:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            astore 4 /* result */
        20: .line 162
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        21: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        22: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        23: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        24: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        25: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        26: .line 93
            return
        27: .line 96
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isAllRecordAvailable:(Ljava/nio/ByteBuffer;)Z
            ifne 36
        28: .line 97
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.handleIncompleteRead:(Ljava/nio/ByteBuffer;)Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            astore 4 /* result */
        29: .line 162
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        30: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        31: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        32: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        33: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        34: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        35: .line 98
            return
        36: .line 101
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isClientHello:(Ljava/nio/ByteBuffer;)Z
            ifne 44
        37: .line 162
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        38: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        39: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        40: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        41: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        42: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        43: .line 102
            return
        44: .line 105
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isAllClientHelloAvailable:(Ljava/nio/ByteBuffer;)Z
            ifne 53
        45: .line 108
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor.log:Lorg/apache/juli/logging/Log;
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "sniExtractor.clientHelloTooBig"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;)V
        46: .line 162
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        47: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        48: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        49: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        50: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        51: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        52: .line 109
            return
        53: .line 113
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            iconst_2
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
        54: .line 115
            aload 1 /* netInBuffer */
            bipush 32
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
        55: .line 117
            aload 1 /* netInBuffer */
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.get:()B
            sipush 255
            iand
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
        56: .line 121
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            iconst_2
            idiv
            istore 8 /* cipherCount */
        start local 8 // int cipherCount
        57: .line 122
            iconst_0
            istore 9 /* i */
        start local 9 // int i
        58: goto 62
        59: .line 123
      StackMap locals: int int
      StackMap stack:
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            istore 10 /* cipherId */
        start local 10 // int cipherId
        60: .line 124
            aload 5 /* clientRequestedCiphers */
            iload 10 /* cipherId */
            invokestatic org.apache.tomcat.util.net.openssl.ciphers.Cipher.valueOf:(I)Lorg/apache/tomcat/util/net/openssl/ciphers/Cipher;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 10 // int cipherId
        61: .line 122
            iinc 9 /* i */ 1
      StackMap locals:
      StackMap stack:
        62: iload 9 /* i */
            iload 8 /* cipherCount */
            if_icmplt 59
        end local 9 // int i
        63: .line 128
            aload 1 /* netInBuffer */
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.get:()B
            sipush 255
            iand
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
        64: .line 130
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 72
        65: .line 162
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        66: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        67: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        68: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        69: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        70: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        71: .line 132
            return
        72: .line 136
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            iconst_2
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
        73: .line 139
            goto 82
        74: .line 142
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            istore 9 /* extensionType */
        start local 9 // char extensionType
        75: .line 144
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            istore 10 /* extensionDataSize */
        start local 10 // char extensionDataSize
        76: .line 145
            iload 9 /* extensionType */
            lookupswitch { // 2
                    0: 77
                   16: 79
              default: 81
          }
        77: .line 147
      StackMap locals: int int
      StackMap stack:
            aload 1 /* netInBuffer */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.readSniExtension:(Ljava/nio/ByteBuffer;)Ljava/lang/String;
            astore 7 /* sniValue */
        78: .line 148
            goto 82
        79: .line 151
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            aload 6 /* clientRequestedApplicationProtocols */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.readAlpnExtension:(Ljava/nio/ByteBuffer;Ljava/util/List;)V
        80: .line 152
            goto 82
        81: .line 154
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            iload 10 /* extensionDataSize */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
        end local 10 // char extensionDataSize
        end local 9 // char extensionType
        82: .line 139
      StackMap locals:
      StackMap stack:
            aload 1 /* netInBuffer */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifeq 84
        83: .line 140
            aload 7 /* sniValue */
            ifnull 74
            aload 6 /* clientRequestedApplicationProtocols */
            invokeinterface java.util.List.size:()I
            ifeq 74
        84: .line 158
      StackMap locals:
      StackMap stack:
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.COMPLETE:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            astore 4 /* result */
        end local 8 // int cipherCount
        85: .line 159
            goto 96
      StackMap locals: org.apache.tomcat.util.net.TLSClientHelloExtractor java.nio.ByteBuffer int int org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult java.util.List java.util.List java.lang.String
      StackMap stack: java.lang.RuntimeException
        86: astore 8 /* e */
        start local 8 // java.lang.RuntimeException e
        87: .line 160
            new java.io.IOException
            dup
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor.sm:Lorg/apache/tomcat/util/res/StringManager;
            ldc "sniExtractor.clientHelloInvalid"
            invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            aload 8 /* e */
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 8 // java.lang.RuntimeException e
        88: .line 161
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 11
        89: .line 162
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        90: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        91: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        92: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
        93: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
        94: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        95: .line 169
            aload 11
            athrow
        96: .line 162
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 4 /* result */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
        97: .line 163
            aload 0 /* this */
            aload 5 /* clientRequestedCiphers */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
        98: .line 164
            aload 0 /* this */
            aload 6 /* clientRequestedApplicationProtocols */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
        99: .line 165
            aload 0 /* this */
            aload 7 /* sniValue */
            putfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
       100: .line 167
            aload 1 /* netInBuffer */
            iload 3 /* limit */
            invokevirtual java.nio.ByteBuffer.limit:(I)Ljava/nio/Buffer;
            pop
       101: .line 168
            aload 1 /* netInBuffer */
            iload 2 /* pos */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
       102: .line 170
            return
        end local 7 // java.lang.String sniValue
        end local 6 // java.util.List clientRequestedApplicationProtocols
        end local 5 // java.util.List clientRequestedCiphers
        end local 4 // org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult result
        end local 3 // int limit
        end local 2 // int pos
        end local 1 // java.nio.ByteBuffer netInBuffer
        end local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
      LocalVariableTable:
        Start  End  Slot                                 Name  Signature
            0  103     0                                 this  Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;
            0  103     1                          netInBuffer  Ljava/nio/ByteBuffer;
            2  103     2                                  pos  I
            3  103     3                                limit  I
            4  103     4                               result  Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            5  103     5               clientRequestedCiphers  Ljava/util/List<Lorg/apache/tomcat/util/net/openssl/ciphers/Cipher;>;
            6  103     6  clientRequestedApplicationProtocols  Ljava/util/List<Ljava/lang/String;>;
            7  103     7                             sniValue  Ljava/lang/String;
           57   85     8                          cipherCount  I
           58   63     9                                    i  I
           60   61    10                             cipherId  I
           75   82     9                        extensionType  C
           76   82    10                    extensionDataSize  C
           87   88     8                                    e  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
           7    10      86  Class java.nio.BufferUnderflowException
          17    20      86  Class java.nio.BufferUnderflowException
          27    29      86  Class java.nio.BufferUnderflowException
          36    37      86  Class java.nio.BufferUnderflowException
          44    46      86  Class java.nio.BufferUnderflowException
          53    65      86  Class java.nio.BufferUnderflowException
          72    85      86  Class java.nio.BufferUnderflowException
           7    10      86  Class java.lang.IllegalArgumentException
          17    20      86  Class java.lang.IllegalArgumentException
          27    29      86  Class java.lang.IllegalArgumentException
          36    37      86  Class java.lang.IllegalArgumentException
          44    46      86  Class java.lang.IllegalArgumentException
          53    65      86  Class java.lang.IllegalArgumentException
          72    85      86  Class java.lang.IllegalArgumentException
           7    10      88  any
          17    20      88  any
          27    29      88  any
          36    37      88  any
          44    46      88  any
          53    65      88  any
          72    88      88  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
             Name  Flags
      netInBuffer  

  public org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult getResult();
    descriptor: ()Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
         0: .line 174
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            areturn
        end local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;

  public java.lang.String getSNIValue();
    descriptor: ()Ljava/lang/String;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
         0: .line 179
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.COMPLETE:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            if_acmpne 2
         1: .line 180
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.sniValue:Ljava/lang/String;
            areturn
         2: .line 182
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            invokespecial java.lang.IllegalStateException.<init>:()V
            athrow
        end local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;

  public java.util.List<org.apache.tomcat.util.net.openssl.ciphers.Cipher> getClientRequestedCiphers();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
         0: .line 188
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.COMPLETE:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            if_acmpeq 1
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.NOT_PRESENT:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            if_acmpne 2
         1: .line 189
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedCiphers:Ljava/util/List;
            areturn
         2: .line 191
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            invokespecial java.lang.IllegalStateException.<init>:()V
            athrow
        end local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;
    Signature: ()Ljava/util/List<Lorg/apache/tomcat/util/net/openssl/ciphers/Cipher;>;

  public java.util.List<java.lang.String> getClientRequestedApplicationProtocols();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
         0: .line 197
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.COMPLETE:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            if_acmpeq 1
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.result:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.NOT_PRESENT:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            if_acmpne 2
         1: .line 198
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.tomcat.util.net.TLSClientHelloExtractor.clientRequestedApplicationProtocols:Ljava/util/List;
            areturn
         2: .line 200
      StackMap locals:
      StackMap stack:
            new java.lang.IllegalStateException
            dup
            invokespecial java.lang.IllegalStateException.<init>:()V
            athrow
        end local 0 // org.apache.tomcat.util.net.TLSClientHelloExtractor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/tomcat/util/net/TLSClientHelloExtractor;
    Signature: ()Ljava/util/List<Ljava/lang/String;>;

  private static org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult handleIncompleteRead(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 206
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.limit:()I
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.capacity:()I
            if_icmpne 2
         1: .line 208
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.UNDERFLOW:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            areturn
         2: .line 211
      StackMap locals:
      StackMap stack:
            getstatic org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult.NEED_READ:Lorg/apache/tomcat/util/net/TLSClientHelloExtractor$ExtractorResult;
            areturn
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0    bb  Ljava/nio/ByteBuffer;
    MethodParameters:
      Name  Flags
      bb    

  private static boolean isAvailable(java.nio.ByteBuffer, int);
    descriptor: (Ljava/nio/ByteBuffer;I)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.nio.ByteBuffer bb
        start local 1 // int size
         0: .line 217
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.remaining:()I
            iload 1 /* size */
            if_icmpge 3
         1: .line 218
            aload 0 /* bb */
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.limit:()I
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
         2: .line 219
            iconst_0
            ireturn
         3: .line 221
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // int size
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0    bb  Ljava/nio/ByteBuffer;
            0    4     1  size  I
    MethodParameters:
      Name  Flags
      bb    
      size  

  private static boolean isTLSHandshake(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 227
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            bipush 22
            if_icmpeq 2
         1: .line 228
            iconst_0
            ireturn
         2: .line 231
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* b2 */
        start local 1 // byte b2
         3: .line 232
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 2 /* b3 */
        start local 2 // byte b3
         4: .line 233
            iload 1 /* b2 */
            iconst_3
            if_icmplt 5
            iload 1 /* b2 */
            iconst_3
            if_icmpne 6
            iload 2 /* b3 */
            ifne 6
         5: .line 234
      StackMap locals: int int
      StackMap stack:
            iconst_0
            ireturn
         6: .line 236
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 2 // byte b3
        end local 1 // byte b2
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0    bb  Ljava/nio/ByteBuffer;
            3    7     1    b2  B
            4    7     2    b3  B
    MethodParameters:
      Name  Flags
      bb    

  private static boolean isHttp(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 245
            iconst_0
            istore 1 /* chr */
        start local 1 // byte chr
         1: .line 246
            aload 0 /* bb */
            iconst_0
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
         2: .line 250
      StackMap locals: int
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 4
         3: .line 251
            iconst_0
            ireturn
         4: .line 253
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* chr */
         5: .line 254
            iload 1 /* chr */
            bipush 13
            if_icmpeq 2
            iload 1 /* chr */
            bipush 10
            if_icmpeq 2
         6: .line 258
      StackMap locals:
      StackMap stack:
            iload 1 /* chr */
            invokestatic org.apache.tomcat.util.http.parser.HttpParser.isToken:(I)Z
            ifeq 7
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 8
         7: .line 259
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         8: .line 261
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* chr */
         9: .line 262
            iload 1 /* chr */
            bipush 32
            if_icmpeq 14
            iload 1 /* chr */
            bipush 9
            if_icmpne 6
        10: .line 265
            goto 14
        11: .line 266
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 13
        12: .line 267
            iconst_0
            ireturn
        13: .line 269
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* chr */
        14: .line 265
      StackMap locals:
      StackMap stack:
            iload 1 /* chr */
            bipush 32
            if_icmpeq 11
            iload 1 /* chr */
            bipush 9
            if_icmpeq 11
        15: .line 273
            goto 19
        16: .line 274
      StackMap locals:
      StackMap stack:
            iload 1 /* chr */
            invokestatic org.apache.tomcat.util.http.parser.HttpParser.isNotRequestTarget:(I)Z
            ifne 17
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 18
        17: .line 275
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        18: .line 277
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* chr */
        19: .line 273
      StackMap locals:
      StackMap stack:
            iload 1 /* chr */
            bipush 32
            if_icmpeq 24
            iload 1 /* chr */
            bipush 9
            if_icmpne 16
        20: .line 281
            goto 24
        21: .line 282
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 23
        22: .line 283
            iconst_0
            ireturn
        23: .line 285
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* chr */
        24: .line 281
      StackMap locals:
      StackMap stack:
            iload 1 /* chr */
            bipush 32
            if_icmpeq 21
            iload 1 /* chr */
            bipush 9
            if_icmpeq 21
        25: .line 290
      StackMap locals:
      StackMap stack:
            iload 1 /* chr */
            invokestatic org.apache.tomcat.util.http.parser.HttpParser.isHttpProtocol:(I)Z
            ifeq 26
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.hasRemaining:()Z
            ifne 27
        26: .line 291
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        27: .line 293
      StackMap locals:
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            istore 1 /* chr */
        28: .line 295
            iload 1 /* chr */
            bipush 13
            if_icmpeq 29
            iload 1 /* chr */
            bipush 10
            if_icmpne 25
        29: .line 297
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 1 // byte chr
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   30     0    bb  Ljava/nio/ByteBuffer;
            1   30     1   chr  B
    MethodParameters:
      Name  Flags
      bb    

  private static boolean isAllRecordAvailable(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 304
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            istore 1 /* size */
        start local 1 // int size
         1: .line 305
            aload 0 /* bb */
            iload 1 /* size */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isAvailable:(Ljava/nio/ByteBuffer;I)Z
            ireturn
        end local 1 // int size
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0    bb  Ljava/nio/ByteBuffer;
            1    2     1  size  I
    MethodParameters:
      Name  Flags
      bb    

  private static boolean isClientHello(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 311
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            iconst_1
            if_icmpne 2
         1: .line 312
            iconst_1
            ireturn
         2: .line 314
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0    bb  Ljava/nio/ByteBuffer;
    MethodParameters:
      Name  Flags
      bb    

  private static boolean isAllClientHelloAvailable(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 321
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            sipush 255
            iand
            bipush 16
            ishl
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            sipush 255
            iand
            bipush 8
            ishl
            iadd
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            sipush 255
            iand
            iadd
            istore 1 /* size */
        start local 1 // int size
         1: .line 322
            aload 0 /* bb */
            iload 1 /* size */
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.isAvailable:(Ljava/nio/ByteBuffer;I)Z
            ireturn
        end local 1 // int size
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0    bb  Ljava/nio/ByteBuffer;
            1    2     1  size  I
    MethodParameters:
      Name  Flags
      bb    

  private static void skipBytes(java.nio.ByteBuffer, int);
    descriptor: (Ljava/nio/ByteBuffer;I)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // java.nio.ByteBuffer bb
        start local 1 // int size
         0: .line 327
            aload 0 /* bb */
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.position:()I
            iload 1 /* size */
            iadd
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
         1: .line 328
            return
        end local 1 // int size
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0    bb  Ljava/nio/ByteBuffer;
            0    2     1  size  I
    MethodParameters:
      Name  Flags
      bb    
      size  

  private static java.lang.String readSniExtension(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)Ljava/lang/String;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=3, args_size=1
        start local 0 // java.nio.ByteBuffer bb
         0: .line 334
            aload 0 /* bb */
            iconst_3
            invokestatic org.apache.tomcat.util.net.TLSClientHelloExtractor.skipBytes:(Ljava/nio/ByteBuffer;I)V
         1: .line 336
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            istore 1 /* serverNameSize */
        start local 1 // char serverNameSize
         2: .line 337
            iload 1 /* serverNameSize */
            newarray 8
            astore 2 /* serverNameBytes */
        start local 2 // byte[] serverNameBytes
         3: .line 338
            aload 0 /* bb */
            aload 2 /* serverNameBytes */
            invokevirtual java.nio.ByteBuffer.get:([B)Ljava/nio/ByteBuffer;
            pop
         4: .line 339
            new java.lang.String
            dup
            aload 2 /* serverNameBytes */
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            invokespecial java.lang.String.<init>:([BLjava/nio/charset/Charset;)V
            areturn
        end local 2 // byte[] serverNameBytes
        end local 1 // char serverNameSize
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0    5     0               bb  Ljava/nio/ByteBuffer;
            2    5     1   serverNameSize  C
            3    5     2  serverNameBytes  [B
    MethodParameters:
      Name  Flags
      bb    

  private static void readAlpnExtension(java.nio.ByteBuffer, java.util.List<java.lang.String>);
    descriptor: (Ljava/nio/ByteBuffer;Ljava/util/List;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // java.nio.ByteBuffer bb
        start local 1 // java.util.List protocolNames
         0: .line 345
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.getChar:()C
            istore 2 /* toRead */
        start local 2 // char toRead
         1: .line 346
            sipush 255
            newarray 8
            astore 3 /* inputBuffer */
        start local 3 // byte[] inputBuffer
         2: .line 347
            goto 8
         3: .line 350
      StackMap locals: int byte[]
      StackMap stack:
            aload 0 /* bb */
            invokevirtual java.nio.ByteBuffer.get:()B
            sipush 255
            iand
            istore 4 /* len */
        start local 4 // int len
         4: .line 351
            aload 0 /* bb */
            aload 3 /* inputBuffer */
            iconst_0
            iload 4 /* len */
            invokevirtual java.nio.ByteBuffer.get:([BII)Ljava/nio/ByteBuffer;
            pop
         5: .line 352
            aload 1 /* protocolNames */
            new java.lang.String
            dup
            aload 3 /* inputBuffer */
            iconst_0
            iload 4 /* len */
            getstatic java.nio.charset.StandardCharsets.UTF_8:Ljava/nio/charset/Charset;
            invokespecial java.lang.String.<init>:([BIILjava/nio/charset/Charset;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         6: .line 353
            iload 2 /* toRead */
            iconst_1
            isub
            i2c
            istore 2 /* toRead */
         7: .line 354
            iload 2 /* toRead */
            iload 4 /* len */
            isub
            i2c
            istore 2 /* toRead */
        end local 4 // int len
         8: .line 347
      StackMap locals:
      StackMap stack:
            iload 2 /* toRead */
            ifgt 3
         9: .line 356
            return
        end local 3 // byte[] inputBuffer
        end local 2 // char toRead
        end local 1 // java.util.List protocolNames
        end local 0 // java.nio.ByteBuffer bb
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   10     0             bb  Ljava/nio/ByteBuffer;
            0   10     1  protocolNames  Ljava/util/List<Ljava/lang/String;>;
            1   10     2         toRead  C
            2   10     3    inputBuffer  [B
            4    8     4            len  I
    Signature: (Ljava/nio/ByteBuffer;Ljava/util/List<Ljava/lang/String;>;)V
    MethodParameters:
               Name  Flags
      bb             
      protocolNames  
}
SourceFile: "TLSClientHelloExtractor.java"
NestMembers:
  org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult
InnerClasses:
  public final ExtractorResult = org.apache.tomcat.util.net.TLSClientHelloExtractor$ExtractorResult of org.apache.tomcat.util.net.TLSClientHelloExtractor