public class com.googlecode.lanterna.screen.VirtualScreen extends com.googlecode.lanterna.screen.AbstractScreen
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.googlecode.lanterna.screen.VirtualScreen
  super_class: com.googlecode.lanterna.screen.AbstractScreen
{
  private final com.googlecode.lanterna.screen.Screen realScreen;
    descriptor: Lcom/googlecode/lanterna/screen/Screen;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final com.googlecode.lanterna.screen.VirtualScreen$FrameRenderer frameRenderer;
    descriptor: Lcom/googlecode/lanterna/screen/VirtualScreen$FrameRenderer;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private com.googlecode.lanterna.TerminalSize minimumSize;
    descriptor: Lcom/googlecode/lanterna/TerminalSize;
    flags: (0x0002) ACC_PRIVATE

  private com.googlecode.lanterna.TerminalPosition viewportTopLeft;
    descriptor: Lcom/googlecode/lanterna/TerminalPosition;
    flags: (0x0002) ACC_PRIVATE

  private com.googlecode.lanterna.TerminalSize viewportSize;
    descriptor: Lcom/googlecode/lanterna/TerminalSize;
    flags: (0x0002) ACC_PRIVATE

  public void <init>(com.googlecode.lanterna.screen.Screen);
    descriptor: (Lcom/googlecode/lanterna/screen/Screen;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.screen.Screen screen
         0: .line 54
            aload 0 /* this */
            aload 1 /* screen */
            invokeinterface com.googlecode.lanterna.screen.Screen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            invokespecial com.googlecode.lanterna.screen.AbstractScreen.<init>:(Lcom/googlecode/lanterna/TerminalSize;)V
         1: .line 55
            aload 0 /* this */
            new com.googlecode.lanterna.screen.VirtualScreen$DefaultFrameRenderer
            dup
            invokespecial com.googlecode.lanterna.screen.VirtualScreen$DefaultFrameRenderer.<init>:()V
            putfield com.googlecode.lanterna.screen.VirtualScreen.frameRenderer:Lcom/googlecode/lanterna/screen/VirtualScreen$FrameRenderer;
         2: .line 56
            aload 0 /* this */
            aload 1 /* screen */
            putfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
         3: .line 57
            aload 0 /* this */
            aload 1 /* screen */
            invokeinterface com.googlecode.lanterna.screen.Screen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            putfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
         4: .line 58
            aload 0 /* this */
            getstatic com.googlecode.lanterna.TerminalPosition.TOP_LEFT_CORNER:Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         5: .line 59
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
         6: .line 60
            return
        end local 1 // com.googlecode.lanterna.screen.Screen screen
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    7     0    this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0    7     1  screen  Lcom/googlecode/lanterna/screen/Screen;
    MethodParameters:
        Name  Flags
      screen  

  public void setMinimumSize(com.googlecode.lanterna.TerminalSize);
    descriptor: (Lcom/googlecode/lanterna/TerminalSize;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.TerminalSize minimumSize
         0: .line 68
            aload 0 /* this */
            aload 1 /* minimumSize */
            putfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
         1: .line 69
            aload 1 /* minimumSize */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.max:(Lcom/googlecode/lanterna/TerminalSize;)Lcom/googlecode/lanterna/TerminalSize;
            astore 2 /* virtualSize */
        start local 2 // com.googlecode.lanterna.TerminalSize virtualSize
         2: .line 70
            aload 1 /* minimumSize */
            aload 2 /* virtualSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.equals:(Ljava/lang/Object;)Z
            ifne 5
         3: .line 71
            aload 0 /* this */
            aload 2 /* virtualSize */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.addResizeRequest:(Lcom/googlecode/lanterna/TerminalSize;)V
         4: .line 72
            aload 0 /* this */
            invokespecial com.googlecode.lanterna.screen.AbstractScreen.doResizeIfNecessary:()Lcom/googlecode/lanterna/TerminalSize;
            pop
         5: .line 74
      StackMap locals: com.googlecode.lanterna.TerminalSize
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.calculateViewport:(Lcom/googlecode/lanterna/TerminalSize;)Lcom/googlecode/lanterna/TerminalSize;
            pop
         6: .line 75
            return
        end local 2 // com.googlecode.lanterna.TerminalSize virtualSize
        end local 1 // com.googlecode.lanterna.TerminalSize minimumSize
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    7     0         this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0    7     1  minimumSize  Lcom/googlecode/lanterna/TerminalSize;
            2    7     2  virtualSize  Lcom/googlecode/lanterna/TerminalSize;
    MethodParameters:
             Name  Flags
      minimumSize  

  public com.googlecode.lanterna.TerminalSize getMinimumSize();
    descriptor: ()Lcom/googlecode/lanterna/TerminalSize;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 83
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
            areturn
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/screen/VirtualScreen;

  public com.googlecode.lanterna.TerminalSize getViewportSize();
    descriptor: ()Lcom/googlecode/lanterna/TerminalSize;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 91
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            areturn
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/screen/VirtualScreen;

  public void setViewportTopLeft(com.googlecode.lanterna.TerminalPosition);
    descriptor: (Lcom/googlecode/lanterna/TerminalPosition;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.TerminalPosition position
         0: .line 95
            aload 0 /* this */
            aload 1 /* position */
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         1: .line 96
            goto 3
         2: .line 97
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_m1
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeColumn:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         3: .line 96
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            ifle 6
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            iadd
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            if_icmpgt 2
         4: .line 99
            goto 6
         5: .line 100
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_m1
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeRow:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         6: .line 99
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            ifle 7
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            iadd
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            if_icmpgt 5
         7: .line 102
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.googlecode.lanterna.TerminalPosition position
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    8     0      this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0    8     1  position  Lcom/googlecode/lanterna/TerminalPosition;
    MethodParameters:
          Name  Flags
      position  

  public void startScreen();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 106
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.startScreen:()V
         1: .line 107
            return
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/googlecode/lanterna/screen/VirtualScreen;
    Exceptions:
      throws java.io.IOException

  public void stopScreen();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 111
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.stopScreen:()V
         1: .line 112
            return
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/googlecode/lanterna/screen/VirtualScreen;
    Exceptions:
      throws java.io.IOException

  public com.googlecode.lanterna.TextCharacter getFrontCharacter(com.googlecode.lanterna.TerminalPosition);
    descriptor: (Lcom/googlecode/lanterna/TerminalPosition;)Lcom/googlecode/lanterna/TextCharacter;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.TerminalPosition position
         0: .line 116
            aconst_null
            areturn
        end local 1 // com.googlecode.lanterna.TerminalPosition position
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0    1     1  position  Lcom/googlecode/lanterna/TerminalPosition;
    MethodParameters:
          Name  Flags
      position  

  public void setCursorPosition(com.googlecode.lanterna.TerminalPosition);
    descriptor: (Lcom/googlecode/lanterna/TerminalPosition;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.TerminalPosition position
         0: .line 121
            aload 0 /* this */
            aload 1 /* position */
            invokespecial com.googlecode.lanterna.screen.AbstractScreen.setCursorPosition:(Lcom/googlecode/lanterna/TerminalPosition;)V
         1: .line 122
            aload 1 /* position */
            ifnonnull 4
         2: .line 123
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            aconst_null
            invokeinterface com.googlecode.lanterna.screen.Screen.setCursorPosition:(Lcom/googlecode/lanterna/TerminalPosition;)V
         3: .line 124
            return
         4: .line 126
      StackMap locals:
      StackMap stack:
            aload 1 /* position */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            ineg
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeColumn:(I)Lcom/googlecode/lanterna/TerminalPosition;
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            ineg
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeRow:(I)Lcom/googlecode/lanterna/TerminalPosition;
            astore 1 /* position */
         5: .line 127
            aload 1 /* position */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            iflt 9
            aload 1 /* position */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            if_icmpge 9
         6: .line 128
            aload 1 /* position */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            iflt 9
            aload 1 /* position */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            if_icmpge 9
         7: .line 129
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            aload 1 /* position */
            invokeinterface com.googlecode.lanterna.screen.Screen.setCursorPosition:(Lcom/googlecode/lanterna/TerminalPosition;)V
         8: .line 130
            goto 10
         9: .line 132
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            aconst_null
            invokeinterface com.googlecode.lanterna.screen.Screen.setCursorPosition:(Lcom/googlecode/lanterna/TerminalPosition;)V
        10: .line 134
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.googlecode.lanterna.TerminalPosition position
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0   11     1  position  Lcom/googlecode/lanterna/TerminalPosition;
    MethodParameters:
          Name  Flags
      position  

  public synchronized com.googlecode.lanterna.TerminalSize doResizeIfNecessary();
    descriptor: ()Lcom/googlecode/lanterna/TerminalSize;
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 138
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.doResizeIfNecessary:()Lcom/googlecode/lanterna/TerminalSize;
            astore 1 /* underlyingSize */
        start local 1 // com.googlecode.lanterna.TerminalSize underlyingSize
         1: .line 139
            aload 1 /* underlyingSize */
            ifnonnull 3
         2: .line 140
            aconst_null
            areturn
         3: .line 143
      StackMap locals: com.googlecode.lanterna.TerminalSize
      StackMap stack:
            aload 0 /* this */
            aload 1 /* underlyingSize */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.calculateViewport:(Lcom/googlecode/lanterna/TerminalSize;)Lcom/googlecode/lanterna/TerminalSize;
            astore 2 /* newVirtualSize */
        start local 2 // com.googlecode.lanterna.TerminalSize newVirtualSize
         4: .line 144
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            aload 2 /* newVirtualSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.equals:(Ljava/lang/Object;)Z
            ifne 7
         5: .line 145
            aload 0 /* this */
            aload 2 /* newVirtualSize */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.addResizeRequest:(Lcom/googlecode/lanterna/TerminalSize;)V
         6: .line 146
            aload 0 /* this */
            invokespecial com.googlecode.lanterna.screen.AbstractScreen.doResizeIfNecessary:()Lcom/googlecode/lanterna/TerminalSize;
            areturn
         7: .line 148
      StackMap locals: com.googlecode.lanterna.TerminalSize
      StackMap stack:
            aload 2 /* newVirtualSize */
            areturn
        end local 2 // com.googlecode.lanterna.TerminalSize newVirtualSize
        end local 1 // com.googlecode.lanterna.TerminalSize underlyingSize
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    8     0            this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            1    8     1  underlyingSize  Lcom/googlecode/lanterna/TerminalSize;
            4    8     2  newVirtualSize  Lcom/googlecode/lanterna/TerminalSize;

  private com.googlecode.lanterna.TerminalSize calculateViewport(com.googlecode.lanterna.TerminalSize);
    descriptor: (Lcom/googlecode/lanterna/TerminalSize;)Lcom/googlecode/lanterna/TerminalSize;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=4, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.TerminalSize realTerminalSize
         0: .line 152
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.minimumSize:Lcom/googlecode/lanterna/TerminalSize;
            aload 1 /* realTerminalSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.max:(Lcom/googlecode/lanterna/TerminalSize;)Lcom/googlecode/lanterna/TerminalSize;
            astore 2 /* newVirtualSize */
        start local 2 // com.googlecode.lanterna.TerminalSize newVirtualSize
         1: .line 153
            aload 2 /* newVirtualSize */
            aload 1 /* realTerminalSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.equals:(Ljava/lang/Object;)Z
            ifeq 5
         2: .line 154
            aload 0 /* this */
            aload 1 /* realTerminalSize */
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
         3: .line 155
            aload 0 /* this */
            getstatic com.googlecode.lanterna.TerminalPosition.TOP_LEFT_CORNER:Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         4: .line 156
            goto 11
         5: .line 158
      StackMap locals: com.googlecode.lanterna.TerminalSize
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.frameRenderer:Lcom/googlecode/lanterna/screen/VirtualScreen$FrameRenderer;
            aload 1 /* realTerminalSize */
            aload 2 /* newVirtualSize */
            invokeinterface com.googlecode.lanterna.screen.VirtualScreen$FrameRenderer.getViewportSize:(Lcom/googlecode/lanterna/TerminalSize;Lcom/googlecode/lanterna/TerminalSize;)Lcom/googlecode/lanterna/TerminalSize;
            astore 3 /* newViewportSize */
        start local 3 // com.googlecode.lanterna.TerminalSize newViewportSize
         6: .line 159
            aload 3 /* newViewportSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            if_icmple 8
         7: .line 160
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_0
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            aload 3 /* newViewportSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            isub
            isub
            invokestatic java.lang.Math.max:(II)I
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRow:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         8: .line 162
      StackMap locals: com.googlecode.lanterna.TerminalSize
      StackMap stack:
            aload 3 /* newViewportSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            if_icmple 10
         9: .line 163
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_0
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            aload 3 /* newViewportSize */
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            isub
            isub
            invokestatic java.lang.Math.max:(II)I
            invokevirtual com.googlecode.lanterna.TerminalPosition.withColumn:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
        10: .line 165
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* newViewportSize */
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
        end local 3 // com.googlecode.lanterna.TerminalSize newViewportSize
        11: .line 167
      StackMap locals:
      StackMap stack:
            aload 2 /* newVirtualSize */
            areturn
        end local 2 // com.googlecode.lanterna.TerminalSize newVirtualSize
        end local 1 // com.googlecode.lanterna.TerminalSize realTerminalSize
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   12     0              this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0   12     1  realTerminalSize  Lcom/googlecode/lanterna/TerminalSize;
            1   12     2    newVirtualSize  Lcom/googlecode/lanterna/TerminalSize;
            6   11     3   newViewportSize  Lcom/googlecode/lanterna/TerminalSize;
    MethodParameters:
                  Name  Flags
      realTerminalSize  

  public void refresh(com.googlecode.lanterna.screen.Screen$RefreshType);
    descriptor: (Lcom/googlecode/lanterna/screen/Screen$RefreshType;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=5, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.screen.Screen$RefreshType refreshType
         0: .line 172
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getCursorPosition:()Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.setCursorPosition:(Lcom/googlecode/lanterna/TerminalPosition;)V
         1: .line 173
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.equals:(Ljava/lang/Object;)Z
            ifne 8
         2: .line 174
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.frameRenderer:Lcom/googlecode/lanterna/screen/VirtualScreen$FrameRenderer;
         3: .line 175
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.newTextGraphics:()Lcom/googlecode/lanterna/graphics/TextGraphics;
         4: .line 176
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
         5: .line 177
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
         6: .line 178
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         7: .line 174
            invokeinterface com.googlecode.lanterna.screen.VirtualScreen$FrameRenderer.drawFrame:(Lcom/googlecode/lanterna/graphics/TextGraphics;Lcom/googlecode/lanterna/TerminalSize;Lcom/googlecode/lanterna/TerminalSize;Lcom/googlecode/lanterna/TerminalPosition;)V
         8: .line 182
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.frameRenderer:Lcom/googlecode/lanterna/screen/VirtualScreen$FrameRenderer;
            invokeinterface com.googlecode.lanterna.screen.VirtualScreen$FrameRenderer.getViewportOffset:()Lcom/googlecode/lanterna/TerminalPosition;
            astore 2 /* viewportOffset */
        start local 2 // com.googlecode.lanterna.TerminalPosition viewportOffset
         9: .line 183
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            instanceof com.googlecode.lanterna.screen.AbstractScreen
            ifeq 21
        10: .line 184
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            checkcast com.googlecode.lanterna.screen.AbstractScreen
            astore 3 /* asAbstractScreen */
        start local 3 // com.googlecode.lanterna.screen.AbstractScreen asAbstractScreen
        11: .line 185
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getBackBuffer:()Lcom/googlecode/lanterna/screen/ScreenBuffer;
        12: .line 186
            aload 3 /* asAbstractScreen */
            invokevirtual com.googlecode.lanterna.screen.AbstractScreen.getBackBuffer:()Lcom/googlecode/lanterna/screen/ScreenBuffer;
        13: .line 187
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
        14: .line 188
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
        15: .line 189
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
        16: .line 190
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
        17: .line 191
            aload 2 /* viewportOffset */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
        18: .line 192
            aload 2 /* viewportOffset */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
        19: .line 185
            invokevirtual com.googlecode.lanterna.screen.ScreenBuffer.copyTo:(Lcom/googlecode/lanterna/graphics/TextImage;IIIIII)V
        end local 3 // com.googlecode.lanterna.screen.AbstractScreen asAbstractScreen
        20: .line 193
            goto 37
        21: .line 195
      StackMap locals: com.googlecode.lanterna.TerminalPosition
      StackMap stack:
            iconst_0
            istore 3 /* y */
        start local 3 // int y
        22: goto 36
        23: .line 196
      StackMap locals: int
      StackMap stack:
            iconst_0
            istore 4 /* x */
        start local 4 // int x
        24: goto 34
        25: .line 197
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
        26: .line 198
            iload 4 /* x */
            aload 2 /* viewportOffset */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            iadd
        27: .line 199
            iload 3 /* y */
            aload 2 /* viewportOffset */
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            iadd
        28: .line 200
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getBackBuffer:()Lcom/googlecode/lanterna/screen/ScreenBuffer;
        29: .line 201
            iload 4 /* x */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            iadd
        30: .line 202
            iload 3 /* y */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            iadd
        31: .line 200
            invokevirtual com.googlecode.lanterna.screen.ScreenBuffer.getCharacterAt:(II)Lcom/googlecode/lanterna/TextCharacter;
        32: .line 197
            invokeinterface com.googlecode.lanterna.screen.Screen.setCharacter:(IILcom/googlecode/lanterna/TextCharacter;)V
        33: .line 196
            iinc 4 /* x */ 1
      StackMap locals:
      StackMap stack:
        34: iload 4 /* x */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            if_icmplt 25
        end local 4 // int x
        35: .line 195
            iinc 3 /* y */ 1
      StackMap locals:
      StackMap stack:
        36: iload 3 /* y */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            if_icmplt 23
        end local 3 // int y
        37: .line 206
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            aload 1 /* refreshType */
            invokeinterface com.googlecode.lanterna.screen.Screen.refresh:(Lcom/googlecode/lanterna/screen/Screen$RefreshType;)V
        38: .line 207
            return
        end local 2 // com.googlecode.lanterna.TerminalPosition viewportOffset
        end local 1 // com.googlecode.lanterna.screen.Screen$RefreshType refreshType
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   39     0              this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0   39     1       refreshType  Lcom/googlecode/lanterna/screen/Screen$RefreshType;
            9   39     2    viewportOffset  Lcom/googlecode/lanterna/TerminalPosition;
           11   20     3  asAbstractScreen  Lcom/googlecode/lanterna/screen/AbstractScreen;
           22   37     3                 y  I
           24   35     4                 x  I
    Exceptions:
      throws java.io.IOException
    MethodParameters:
             Name  Flags
      refreshType  

  public com.googlecode.lanterna.input.KeyStroke pollInput();
    descriptor: ()Lcom/googlecode/lanterna/input/KeyStroke;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 211
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.pollInput:()Lcom/googlecode/lanterna/input/KeyStroke;
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.filter:(Lcom/googlecode/lanterna/input/KeyStroke;)Lcom/googlecode/lanterna/input/KeyStroke;
            areturn
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/screen/VirtualScreen;
    Exceptions:
      throws java.io.IOException

  public com.googlecode.lanterna.input.KeyStroke readInput();
    descriptor: ()Lcom/googlecode/lanterna/input/KeyStroke;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
         0: .line 216
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            invokeinterface com.googlecode.lanterna.screen.Screen.readInput:()Lcom/googlecode/lanterna/input/KeyStroke;
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.filter:(Lcom/googlecode/lanterna/input/KeyStroke;)Lcom/googlecode/lanterna/input/KeyStroke;
            areturn
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/googlecode/lanterna/screen/VirtualScreen;
    Exceptions:
      throws java.io.IOException

  private com.googlecode.lanterna.input.KeyStroke filter(com.googlecode.lanterna.input.KeyStroke);
    descriptor: (Lcom/googlecode/lanterna/input/KeyStroke;)Lcom/googlecode/lanterna/input/KeyStroke;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // com.googlecode.lanterna.input.KeyStroke keyStroke
         0: .line 220
            aload 1 /* keyStroke */
            ifnonnull 2
         1: .line 221
            aconst_null
            areturn
         2: .line 223
      StackMap locals:
      StackMap stack:
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.isAltDown:()Z
            ifeq 7
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.getKeyType:()Lcom/googlecode/lanterna/input/KeyType;
            getstatic com.googlecode.lanterna.input.KeyType.ArrowLeft:Lcom/googlecode/lanterna/input/KeyType;
            if_acmpne 7
         3: .line 224
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            ifle 24
         4: .line 225
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_m1
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeColumn:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
         5: .line 226
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.refresh:()V
         6: .line 227
            aconst_null
            areturn
         7: .line 230
      StackMap locals:
      StackMap stack:
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.isAltDown:()Z
            ifeq 12
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.getKeyType:()Lcom/googlecode/lanterna/input/KeyType;
            getstatic com.googlecode.lanterna.input.KeyType.ArrowRight:Lcom/googlecode/lanterna/input/KeyType;
            if_acmpne 12
         8: .line 231
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getColumn:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            iadd
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getColumns:()I
            if_icmpge 24
         9: .line 232
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_1
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeColumn:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
        10: .line 233
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.refresh:()V
        11: .line 234
            aconst_null
            areturn
        12: .line 237
      StackMap locals:
      StackMap stack:
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.isAltDown:()Z
            ifeq 18
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.getKeyType:()Lcom/googlecode/lanterna/input/KeyType;
            getstatic com.googlecode.lanterna.input.KeyType.ArrowUp:Lcom/googlecode/lanterna/input/KeyType;
            if_acmpne 18
        13: .line 238
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            ifle 24
        14: .line 239
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_m1
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeRow:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
        15: .line 240
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            iconst_0
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            iconst_1
            isub
            iconst_m1
            invokeinterface com.googlecode.lanterna.screen.Screen.scrollLines:(III)V
        16: .line 241
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.refresh:()V
        17: .line 242
            aconst_null
            areturn
        18: .line 245
      StackMap locals:
      StackMap stack:
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.isAltDown:()Z
            ifeq 24
            aload 1 /* keyStroke */
            invokevirtual com.googlecode.lanterna.input.KeyStroke.getKeyType:()Lcom/googlecode/lanterna/input/KeyType;
            getstatic com.googlecode.lanterna.input.KeyType.ArrowDown:Lcom/googlecode/lanterna/input/KeyType;
            if_acmpne 24
        19: .line 246
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            iadd
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.getTerminalSize:()Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            if_icmpge 24
        20: .line 247
            aload 0 /* this */
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            iconst_1
            invokevirtual com.googlecode.lanterna.TerminalPosition.withRelativeRow:(I)Lcom/googlecode/lanterna/TerminalPosition;
            putfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
        21: .line 248
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            iconst_0
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            iconst_1
            isub
            iconst_1
            invokeinterface com.googlecode.lanterna.screen.Screen.scrollLines:(III)V
        22: .line 249
            aload 0 /* this */
            invokevirtual com.googlecode.lanterna.screen.VirtualScreen.refresh:()V
        23: .line 250
            aconst_null
            areturn
        24: .line 253
      StackMap locals:
      StackMap stack:
            aload 1 /* keyStroke */
            areturn
        end local 1 // com.googlecode.lanterna.input.KeyStroke keyStroke
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   25     0       this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0   25     1  keyStroke  Lcom/googlecode/lanterna/input/KeyStroke;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
           Name  Flags
      keyStroke  

  public void scrollLines(int, int, int);
    descriptor: (III)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=6, args_size=4
        start local 0 // com.googlecode.lanterna.screen.VirtualScreen this
        start local 1 // int firstLine
        start local 2 // int lastLine
        start local 3 // int distance
         0: .line 259
            aload 0 /* this */
            iload 1 /* firstLine */
            iload 2 /* lastLine */
            iload 3 /* distance */
            invokespecial com.googlecode.lanterna.screen.AbstractScreen.scrollLines:(III)V
         1: .line 261
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportTopLeft:Lcom/googlecode/lanterna/TerminalPosition;
            invokevirtual com.googlecode.lanterna.TerminalPosition.getRow:()I
            istore 4 /* vpFirst */
        start local 4 // int vpFirst
         2: .line 262
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.viewportSize:Lcom/googlecode/lanterna/TerminalSize;
            invokevirtual com.googlecode.lanterna.TerminalSize.getRows:()I
            istore 5 /* vpRows */
        start local 5 // int vpRows
         3: .line 264
            iconst_0
            iload 1 /* firstLine */
            iload 4 /* vpFirst */
            isub
            invokestatic java.lang.Math.max:(II)I
            istore 1 /* firstLine */
         4: .line 265
            iload 5 /* vpRows */
            iconst_1
            isub
            iload 2 /* lastLine */
            iload 4 /* vpFirst */
            isub
            invokestatic java.lang.Math.min:(II)I
            istore 2 /* lastLine */
         5: .line 267
            iload 1 /* firstLine */
            iload 2 /* lastLine */
            if_icmpgt 7
         6: .line 268
            aload 0 /* this */
            getfield com.googlecode.lanterna.screen.VirtualScreen.realScreen:Lcom/googlecode/lanterna/screen/Screen;
            iload 1 /* firstLine */
            iload 2 /* lastLine */
            iload 3 /* distance */
            invokeinterface com.googlecode.lanterna.screen.Screen.scrollLines:(III)V
         7: .line 270
      StackMap locals: int int
      StackMap stack:
            return
        end local 5 // int vpRows
        end local 4 // int vpFirst
        end local 3 // int distance
        end local 2 // int lastLine
        end local 1 // int firstLine
        end local 0 // com.googlecode.lanterna.screen.VirtualScreen this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    8     0       this  Lcom/googlecode/lanterna/screen/VirtualScreen;
            0    8     1  firstLine  I
            0    8     2   lastLine  I
            0    8     3   distance  I
            2    8     4    vpFirst  I
            3    8     5     vpRows  I
    MethodParameters:
           Name  Flags
      firstLine  
      lastLine   
      distance   
}
SourceFile: "VirtualScreen.java"
NestMembers:
  com.googlecode.lanterna.screen.VirtualScreen$DefaultFrameRenderer  com.googlecode.lanterna.screen.VirtualScreen$FrameRenderer
InnerClasses:
  public final RefreshType = com.googlecode.lanterna.screen.Screen$RefreshType of com.googlecode.lanterna.screen.Screen
  private DefaultFrameRenderer = com.googlecode.lanterna.screen.VirtualScreen$DefaultFrameRenderer of com.googlecode.lanterna.screen.VirtualScreen
  public abstract FrameRenderer = com.googlecode.lanterna.screen.VirtualScreen$FrameRenderer of com.googlecode.lanterna.screen.VirtualScreen