class com.sun.glass.ui.monocle.Udev implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: com.sun.glass.ui.monocle.Udev
  super_class: java.lang.Object
{
  private static com.sun.glass.ui.monocle.Udev instance;
    descriptor: Lcom/sun/glass/ui/monocle/Udev;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private long fd;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private java.nio.ByteBuffer buffer;
    descriptor: Ljava/nio/ByteBuffer;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.Thread thread;
    descriptor: Ljava/lang/Thread;
    flags: (0x0002) ACC_PRIVATE

  private com.sun.glass.ui.monocle.UdevListener[] listeners;
    descriptor: [Lcom/sun/glass/ui/monocle/UdevListener;
    flags: (0x0002) ACC_PRIVATE

  static synchronized com.sun.glass.ui.monocle.Udev getInstance();
    descriptor: ()Lcom/sun/glass/ui/monocle/Udev;
    flags: (0x0028) ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=0
         0: .line 49
            getstatic com.sun.glass.ui.monocle.Udev.instance:Lcom/sun/glass/ui/monocle/Udev;
            ifnonnull 6
         1: .line 51
            new com.sun.glass.ui.monocle.Udev
            dup
            invokespecial com.sun.glass.ui.monocle.Udev.<init>:()V
            putstatic com.sun.glass.ui.monocle.Udev.instance:Lcom/sun/glass/ui/monocle/Udev;
         2: .line 52
            goto 6
      StackMap locals:
      StackMap stack: java.io.IOException
         3: astore 0 /* e */
        start local 0 // java.io.IOException e
         4: .line 53
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            ldc "Udev: failed to open connection"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         5: .line 54
            aload 0 /* e */
            invokevirtual java.io.IOException.printStackTrace:()V
        end local 0 // java.io.IOException e
         6: .line 57
      StackMap locals:
      StackMap stack:
            getstatic com.sun.glass.ui.monocle.Udev.instance:Lcom/sun/glass/ui/monocle/Udev;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            4    6     0     e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     2       3  Class java.io.IOException

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // com.sun.glass.ui.monocle.Udev this
         0: .line 63
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 65
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual com.sun.glass.ui.monocle.Udev._open:()J
            putfield com.sun.glass.ui.monocle.Udev.fd:J
         2: .line 66
            aload 0 /* this */
            sipush 4096
            invokestatic java.nio.ByteBuffer.allocateDirect:(I)Ljava/nio/ByteBuffer;
            putfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
         3: .line 67
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokestatic java.nio.ByteOrder.nativeOrder:()Ljava/nio/ByteOrder;
            invokevirtual java.nio.ByteBuffer.order:(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;
            pop
         4: .line 68
            aload 0 /* this */
            new java.lang.Thread
            dup
            aload 0 /* this */
            ldc "udev monitor"
            invokespecial java.lang.Thread.<init>:(Ljava/lang/Runnable;Ljava/lang/String;)V
            putfield com.sun.glass.ui.monocle.Udev.thread:Ljava/lang/Thread;
         5: .line 69
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.thread:Ljava/lang/Thread;
            iconst_1
            invokevirtual java.lang.Thread.setDaemon:(Z)V
         6: .line 70
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.thread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.start:()V
         7: .line 71
            return
        end local 0 // com.sun.glass.ui.monocle.Udev this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lcom/sun/glass/ui/monocle/Udev;
    Exceptions:
      throws java.io.IOException

  synchronized void addListener(com.sun.glass.ui.monocle.UdevListener);
    descriptor: (Lcom/sun/glass/ui/monocle/UdevListener;)V
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // com.sun.glass.ui.monocle.Udev this
        start local 1 // com.sun.glass.ui.monocle.UdevListener listener
         0: .line 74
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
            ifnonnull 3
         1: .line 75
            aload 0 /* this */
            iconst_1
            anewarray com.sun.glass.ui.monocle.UdevListener
            dup
            iconst_0
            aload 1 /* listener */
            aastore
            putfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
         2: .line 76
            goto 5
         3: .line 77
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
            arraylength
            iconst_1
            iadd
            invokestatic java.util.Arrays.copyOf:([Ljava/lang/Object;I)[Ljava/lang/Object;
            checkcast com.sun.glass.ui.monocle.UdevListener[]
            putfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
         4: .line 78
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.listeners:[Lcom/sun/glass/ui/monocle/UdevListener;
            arraylength
            iconst_1
            isub
            aload 1 /* listener */
            aastore
         5: .line 80
      StackMap locals:
      StackMap stack:
            return
        end local 1 // com.sun.glass.ui.monocle.UdevListener listener
        end local 0 // com.sun.glass.ui.monocle.Udev this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lcom/sun/glass/ui/monocle/Udev;
            0    6     1  listener  Lcom/sun/glass/ui/monocle/UdevListener;
    MethodParameters:
          Name  Flags
      listener  

  private native long _open();
    descriptor: ()J
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    Exceptions:
      throws java.io.IOException

  private native int _readEvent(long, java.nio.ByteBuffer);
    descriptor: (JLjava/nio/ByteBuffer;)I
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      fd      
      buffer  

  private native void _close(long);
    descriptor: (J)V
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
      Name  Flags
      fd    

  private native int _getPropertiesOffset(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)I
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
        Name  Flags
      buffer  

  private native int _getPropertiesLength(java.nio.ByteBuffer);
    descriptor: (Ljava/nio/ByteBuffer;)I
    flags: (0x0102) ACC_PRIVATE, ACC_NATIVE
    MethodParameters:
        Name  Flags
      buffer  

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=1
        start local 0 // com.sun.glass.ui.monocle.Udev this
         0: .line 93
            invokestatic com.sun.glass.ui.monocle.NativePlatformFactory.getNativePlatform:()Lcom/sun/glass/ui/monocle/NativePlatform;
            invokevirtual com.sun.glass.ui.monocle.NativePlatform.getRunnableProcessor:()Lcom/sun/glass/ui/monocle/RunnableProcessor;
         1: .line 92
            astore 1 /* runnableProcessor */
        start local 1 // com.sun.glass.ui.monocle.RunnableProcessor runnableProcessor
         2: .line 95
      StackMap locals: com.sun.glass.ui.monocle.RunnableProcessor
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.sun.glass.ui.monocle.Udev.readEvent:()Ljava/util/Map;
            astore 2 /* event */
        start local 2 // java.util.Map event
         3: .line 96
            aload 1 /* runnableProcessor */
            new com.sun.glass.ui.monocle.Udev$1
            dup
            aload 0 /* this */
            aload 2 /* event */
            invokespecial com.sun.glass.ui.monocle.Udev$1.<init>:(Lcom/sun/glass/ui/monocle/Udev;Ljava/util/Map;)V
            invokevirtual com.sun.glass.ui.monocle.RunnableProcessor.invokeLater:(Ljava/lang/Runnable;)V
        end local 2 // java.util.Map event
         4: .line 94
            goto 2
        end local 1 // com.sun.glass.ui.monocle.RunnableProcessor runnableProcessor
         5: .line 126
      StackMap locals: com.sun.glass.ui.monocle.Udev
      StackMap stack: java.io.IOException
            astore 1 /* e */
        start local 1 // java.io.IOException e
         6: .line 127
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.thread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.isInterrupted:()Z
            ifne 10
         7: .line 128
            getstatic java.lang.System.err:Ljava/io/PrintStream;
            ldc "Exception in udev thread:"
            invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
         8: .line 129
            aload 1 /* e */
            invokevirtual java.io.IOException.printStackTrace:()V
         9: .line 130
            aload 0 /* this */
            invokevirtual com.sun.glass.ui.monocle.Udev.close:()V
        end local 1 // java.io.IOException e
        10: .line 133
      StackMap locals:
      StackMap stack:
            return
        end local 0 // com.sun.glass.ui.monocle.Udev this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   11     0               this  Lcom/sun/glass/ui/monocle/Udev;
            2    5     1  runnableProcessor  Lcom/sun/glass/ui/monocle/RunnableProcessor;
            3    4     2              event  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
            6   10     1                  e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     5       5  Class java.io.IOException

  private java.util.Map<java.lang.String, java.lang.String> readEvent();
    descriptor: ()Ljava/util/Map;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=12, args_size=1
        start local 0 // com.sun.glass.ui.monocle.Udev this
         0: .line 137
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 1 /* map */
        start local 1 // java.util.Map map
         1: .line 139
            aload 0 /* this */
            dup
            astore 3
            monitorenter
         2: .line 140
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            astore 2 /* b */
        start local 2 // java.nio.ByteBuffer b
         3: .line 141
            aload 2 /* b */
            ifnonnull 6
         4: .line 142
            aload 1 /* map */
            aload 3
            monitorexit
         5: areturn
         6: .line 139
      StackMap locals: java.util.Map java.nio.ByteBuffer com.sun.glass.ui.monocle.Udev
      StackMap stack:
            aload 3
            monitorexit
         7: goto 10
        end local 2 // java.nio.ByteBuffer b
      StackMap locals: com.sun.glass.ui.monocle.Udev java.util.Map top com.sun.glass.ui.monocle.Udev
      StackMap stack: java.lang.Throwable
         8: aload 3
            monitorexit
         9: athrow
        start local 2 // java.nio.ByteBuffer b
        10: .line 145
      StackMap locals: com.sun.glass.ui.monocle.Udev java.util.Map java.nio.ByteBuffer
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.fd:J
            aload 2 /* b */
            invokevirtual com.sun.glass.ui.monocle.Udev._readEvent:(JLjava/nio/ByteBuffer;)I
            istore 3 /* length */
        start local 3 // int length
        11: .line 146
            aload 0 /* this */
            dup
            astore 4
            monitorenter
        12: .line 147
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            ifnonnull 15
        13: .line 148
            aload 1 /* map */
            aload 4
            monitorexit
        14: areturn
        15: .line 150
      StackMap locals: int com.sun.glass.ui.monocle.Udev
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual com.sun.glass.ui.monocle.Udev._getPropertiesOffset:(Ljava/nio/ByteBuffer;)I
            istore 5 /* propertiesOffset */
        start local 5 // int propertiesOffset
        16: .line 151
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual com.sun.glass.ui.monocle.Udev._getPropertiesLength:(Ljava/nio/ByteBuffer;)I
            istore 6 /* propertiesLength */
        start local 6 // int propertiesLength
        17: .line 152
            iload 5 /* propertiesOffset */
            iload 6 /* propertiesLength */
            iadd
            istore 7 /* propertiesEnd */
        start local 7 // int propertiesEnd
        18: .line 153
            iload 3 /* length */
            iload 7 /* propertiesEnd */
            if_icmpge 20
        19: .line 154
            new java.io.IOException
            dup
            ldc "Mismatched property segment length"
            invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
            athrow
        20: .line 156
      StackMap locals: int int int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            iload 5 /* propertiesOffset */
            invokevirtual java.nio.ByteBuffer.position:(I)Ljava/nio/Buffer;
            pop
        21: .line 161
            new java.lang.StringBuffer
            dup
            invokespecial java.lang.StringBuffer.<init>:()V
            astore 8 /* key */
        start local 8 // java.lang.StringBuffer key
        22: .line 162
            new java.lang.StringBuffer
            dup
            invokespecial java.lang.StringBuffer.<init>:()V
            astore 9 /* value */
        start local 9 // java.lang.StringBuffer value
        23: .line 163
            goto 43
        24: .line 164
      StackMap locals: java.lang.StringBuffer java.lang.StringBuffer
      StackMap stack:
            aload 8 /* key */
            iconst_0
            invokevirtual java.lang.StringBuffer.setLength:(I)V
        25: .line 165
            aload 9 /* value */
            iconst_0
            invokevirtual java.lang.StringBuffer.setLength:(I)V
        26: .line 166
            iconst_0
            istore 10 /* readKey */
        start local 10 // boolean readKey
        27: .line 167
            goto 35
        28: .line 168
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.get:()B
            i2c
            istore 11 /* ch */
        start local 11 // char ch
        29: .line 169
            iload 11 /* ch */
            lookupswitch { // 2
                    0: 30
                   61: 32
              default: 34
          }
        30: .line 171
      StackMap locals: int
      StackMap stack:
            aload 1 /* map */
            aload 8 /* key */
            invokevirtual java.lang.StringBuffer.toString:()Ljava/lang/String;
            ldc ""
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        31: .line 172
            goto 43
        32: .line 174
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 10 /* readKey */
        33: .line 175
            goto 35
        34: .line 177
      StackMap locals:
      StackMap stack:
            aload 8 /* key */
            iload 11 /* ch */
            invokevirtual java.lang.StringBuffer.append:(C)Ljava/lang/StringBuffer;
            pop
        end local 11 // char ch
        35: .line 167
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.position:()I
            iload 3 /* length */
            if_icmpge 42
            iload 10 /* readKey */
            ifeq 28
        36: .line 180
            goto 42
        37: .line 181
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.get:()B
            i2c
            istore 11 /* ch */
        start local 11 // char ch
        38: .line 182
            iload 11 /* ch */
            tableswitch { // 0 - 0
                    0: 39
              default: 41
          }
        39: .line 184
      StackMap locals: int
      StackMap stack:
            aload 1 /* map */
            aload 8 /* key */
            invokevirtual java.lang.StringBuffer.toString:()Ljava/lang/String;
            aload 9 /* value */
            invokevirtual java.lang.StringBuffer.toString:()Ljava/lang/String;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        40: .line 185
            goto 43
        41: .line 187
      StackMap locals:
      StackMap stack:
            aload 9 /* value */
            iload 11 /* ch */
            invokevirtual java.lang.StringBuffer.append:(C)Ljava/lang/StringBuffer;
            pop
        end local 11 // char ch
        42: .line 180
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.position:()I
            iload 7 /* propertiesEnd */
            if_icmplt 37
        end local 10 // boolean readKey
        43: .line 163
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.position:()I
            iload 7 /* propertiesEnd */
            if_icmplt 24
        44: .line 191
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
            invokevirtual java.nio.ByteBuffer.clear:()Ljava/nio/Buffer;
            pop
        end local 9 // java.lang.StringBuffer value
        end local 8 // java.lang.StringBuffer key
        end local 7 // int propertiesEnd
        end local 6 // int propertiesLength
        end local 5 // int propertiesOffset
        45: .line 146
            aload 4
            monitorexit
        46: goto 49
      StackMap locals: com.sun.glass.ui.monocle.Udev java.util.Map java.nio.ByteBuffer int com.sun.glass.ui.monocle.Udev
      StackMap stack: java.lang.Throwable
        47: aload 4
            monitorexit
        48: athrow
        49: .line 193
      StackMap locals:
      StackMap stack:
            aload 1 /* map */
            areturn
        end local 3 // int length
        end local 2 // java.nio.ByteBuffer b
        end local 1 // java.util.Map map
        end local 0 // com.sun.glass.ui.monocle.Udev this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   50     0              this  Lcom/sun/glass/ui/monocle/Udev;
            1   50     1               map  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
            3    8     2                 b  Ljava/nio/ByteBuffer;
           10   50     2                 b  Ljava/nio/ByteBuffer;
           11   50     3            length  I
           16   45     5  propertiesOffset  I
           17   45     6  propertiesLength  I
           18   45     7     propertiesEnd  I
           22   45     8               key  Ljava/lang/StringBuffer;
           23   45     9             value  Ljava/lang/StringBuffer;
           27   43    10           readKey  Z
           29   35    11                ch  C
           38   42    11                ch  C
      Exception table:
        from    to  target  type
           2     5       8  any
           6     7       8  any
           8     9       8  any
          12    14      47  any
          15    46      47  any
          47    48      47  any
    Exceptions:
      throws java.io.IOException
    Signature: ()Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;

  synchronized void close();
    descriptor: ()V
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.glass.ui.monocle.Udev this
         0: .line 198
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.thread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
         1: .line 199
            aload 0 /* this */
            aload 0 /* this */
            getfield com.sun.glass.ui.monocle.Udev.fd:J
            invokevirtual com.sun.glass.ui.monocle.Udev._close:(J)V
         2: .line 200
            aload 0 /* this */
            lconst_0
            putfield com.sun.glass.ui.monocle.Udev.fd:J
         3: .line 201
            aload 0 /* this */
            aconst_null
            putfield com.sun.glass.ui.monocle.Udev.buffer:Ljava/nio/ByteBuffer;
         4: .line 202
            aload 0 /* this */
            aconst_null
            putfield com.sun.glass.ui.monocle.Udev.thread:Ljava/lang/Thread;
         5: .line 203
            return
        end local 0 // com.sun.glass.ui.monocle.Udev this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lcom/sun/glass/ui/monocle/Udev;
}
SourceFile: "Udev.java"
NestMembers:
  com.sun.glass.ui.monocle.Udev$1
InnerClasses:
  com.sun.glass.ui.monocle.Udev$1