public final class com.sun.media.sound.MidiUtils$TempoCache
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.sun.media.sound.MidiUtils$TempoCache
  super_class: java.lang.Object
{
  long[] ticks;
    descriptor: [J
    flags: (0x0000) 

  int[] tempos;
    descriptor: [I
    flags: (0x0000) 

  int snapshotIndex;
    descriptor: I
    flags: (0x0000) 

  int snapshotMicro;
    descriptor: I
    flags: (0x0000) 

  int currTempo;
    descriptor: I
    flags: (0x0000) 

  private boolean firstTempoIsFake;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.sun.media.sound.MidiUtils$TempoCache this
         0: .line 325
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 317
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.snapshotIndex:I
         2: .line 319
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.snapshotMicro:I
         3: .line 323
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.firstTempoIsFake:Z
         4: .line 327
            aload 0 /* this */
            iconst_1
            newarray 11
            putfield com.sun.media.sound.MidiUtils$TempoCache.ticks:[J
         5: .line 328
            aload 0 /* this */
            iconst_1
            newarray 10
            putfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
         6: .line 329
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
            iconst_0
            ldc 500000
            iastore
         7: .line 330
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.snapshotIndex:I
         8: .line 331
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.snapshotMicro:I
         9: .line 332
            return
        end local 0 // com.sun.media.sound.MidiUtils$TempoCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lcom/sun/media/sound/MidiUtils$TempoCache;

  public void <init>(javax.sound.midi.Sequence);
    descriptor: (Ljavax/sound/midi/Sequence;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // com.sun.media.sound.MidiUtils$TempoCache this
        start local 1 // javax.sound.midi.Sequence seq
         0: .line 335
            aload 0 /* this */
            invokespecial com.sun.media.sound.MidiUtils$TempoCache.<init>:()V
         1: .line 336
            aload 0 /* this */
            aload 1 /* seq */
            invokevirtual com.sun.media.sound.MidiUtils$TempoCache.refresh:(Ljavax/sound/midi/Sequence;)V
         2: .line 337
            return
        end local 1 // javax.sound.midi.Sequence seq
        end local 0 // com.sun.media.sound.MidiUtils$TempoCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/sun/media/sound/MidiUtils$TempoCache;
            0    3     1   seq  Ljavax/sound/midi/Sequence;
    MethodParameters:
      Name  Flags
      seq   

  public synchronized void refresh(javax.sound.midi.Sequence);
    descriptor: (Ljavax/sound/midi/Sequence;)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=9, args_size=2
        start local 0 // com.sun.media.sound.MidiUtils$TempoCache this
        start local 1 // javax.sound.midi.Sequence seq
         0: .line 340
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* list */
        start local 2 // java.util.ArrayList list
         1: .line 341
            aload 1 /* seq */
            invokevirtual javax.sound.midi.Sequence.getTracks:()[Ljavax/sound/midi/Track;
            astore 3 /* tracks */
        start local 3 // javax.sound.midi.Track[] tracks
         2: .line 342
            aload 3 /* tracks */
            arraylength
            ifle 13
         3: .line 344
            aload 3 /* tracks */
            iconst_0
            aaload
            astore 4 /* track */
        start local 4 // javax.sound.midi.Track track
         4: .line 345
            aload 4 /* track */
            invokevirtual javax.sound.midi.Track.size:()I
            istore 5 /* c */
        start local 5 // int c
         5: .line 346
            iconst_0
            istore 6 /* i */
        start local 6 // int i
         6: goto 12
         7: .line 347
      StackMap locals: com.sun.media.sound.MidiUtils$TempoCache javax.sound.midi.Sequence java.util.ArrayList javax.sound.midi.Track[] javax.sound.midi.Track int int
      StackMap stack:
            aload 4 /* track */
            iload 6 /* i */
            invokevirtual javax.sound.midi.Track.get:(I)Ljavax/sound/midi/MidiEvent;
            astore 7 /* ev */
        start local 7 // javax.sound.midi.MidiEvent ev
         8: .line 348
            aload 7 /* ev */
            invokevirtual javax.sound.midi.MidiEvent.getMessage:()Ljavax/sound/midi/MidiMessage;
            astore 8 /* msg */
        start local 8 // javax.sound.midi.MidiMessage msg
         9: .line 349
            aload 8 /* msg */
            invokestatic com.sun.media.sound.MidiUtils.isMetaTempo:(Ljavax/sound/midi/MidiMessage;)Z
            ifeq 11
        10: .line 351
            aload 2 /* list */
            aload 7 /* ev */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        end local 8 // javax.sound.midi.MidiMessage msg
        end local 7 // javax.sound.midi.MidiEvent ev
        11: .line 346
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ 1
      StackMap locals:
      StackMap stack:
        12: iload 6 /* i */
            iload 5 /* c */
            if_icmplt 7
        end local 6 // int i
        end local 5 // int c
        end local 4 // javax.sound.midi.Track track
        13: .line 355
      StackMap locals:
      StackMap stack:
            aload 2 /* list */
            invokevirtual java.util.ArrayList.size:()I
            iconst_1
            iadd
            istore 4 /* size */
        start local 4 // int size
        14: .line 356
            aload 0 /* this */
            iconst_1
            putfield com.sun.media.sound.MidiUtils$TempoCache.firstTempoIsFake:Z
        15: .line 357
            iload 4 /* size */
            iconst_1
            if_icmple 19
        16: .line 358
            aload 2 /* list */
            iconst_0
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast javax.sound.midi.MidiEvent
            invokevirtual javax.sound.midi.MidiEvent.getTick:()J
            lconst_0
            lcmp
            ifne 19
        17: .line 360
            iinc 4 /* size */ -1
        18: .line 361
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.firstTempoIsFake:Z
        19: .line 363
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            iload 4 /* size */
            newarray 11
            putfield com.sun.media.sound.MidiUtils$TempoCache.ticks:[J
        20: .line 364
            aload 0 /* this */
            iload 4 /* size */
            newarray 10
            putfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
        21: .line 365
            iconst_0
            istore 5 /* e */
        start local 5 // int e
        22: .line 366
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.firstTempoIsFake:Z
            ifeq 26
        23: .line 368
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.ticks:[J
            iconst_0
            lconst_0
            lastore
        24: .line 369
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
            iconst_0
            ldc 500000
            iastore
        25: .line 370
            iinc 5 /* e */ 1
        26: .line 372
      StackMap locals: int
      StackMap stack:
            iconst_0
            istore 6 /* i */
        start local 6 // int i
        27: goto 32
        28: .line 373
      StackMap locals: int
      StackMap stack:
            aload 2 /* list */
            iload 6 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast javax.sound.midi.MidiEvent
            astore 7 /* evt */
        start local 7 // javax.sound.midi.MidiEvent evt
        29: .line 374
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.ticks:[J
            iload 5 /* e */
            aload 7 /* evt */
            invokevirtual javax.sound.midi.MidiEvent.getTick:()J
            lastore
        30: .line 375
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
            iload 5 /* e */
            aload 7 /* evt */
            invokevirtual javax.sound.midi.MidiEvent.getMessage:()Ljavax/sound/midi/MidiMessage;
            invokestatic com.sun.media.sound.MidiUtils.getTempoMPQ:(Ljavax/sound/midi/MidiMessage;)I
            iastore
        end local 7 // javax.sound.midi.MidiEvent evt
        31: .line 372
            iinc 6 /* i */ 1
            iinc 5 /* e */ 1
      StackMap locals:
      StackMap stack:
        32: iload 6 /* i */
            aload 2 /* list */
            invokevirtual java.util.ArrayList.size:()I
            if_icmplt 28
        end local 6 // int i
        33: .line 377
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.snapshotIndex:I
        34: .line 378
            aload 0 /* this */
            iconst_0
            putfield com.sun.media.sound.MidiUtils$TempoCache.snapshotMicro:I
        35: .line 379
            return
        end local 5 // int e
        end local 4 // int size
        end local 3 // javax.sound.midi.Track[] tracks
        end local 2 // java.util.ArrayList list
        end local 1 // javax.sound.midi.Sequence seq
        end local 0 // com.sun.media.sound.MidiUtils$TempoCache this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   36     0    this  Lcom/sun/media/sound/MidiUtils$TempoCache;
            0   36     1     seq  Ljavax/sound/midi/Sequence;
            1   36     2    list  Ljava/util/ArrayList<Ljavax/sound/midi/MidiEvent;>;
            2   36     3  tracks  [Ljavax/sound/midi/Track;
            4   13     4   track  Ljavax/sound/midi/Track;
            5   13     5       c  I
            6   13     6       i  I
            8   11     7      ev  Ljavax/sound/midi/MidiEvent;
            9   11     8     msg  Ljavax/sound/midi/MidiMessage;
           14   36     4    size  I
           22   36     5       e  I
           27   33     6       i  I
           29   31     7     evt  Ljavax/sound/midi/MidiEvent;
    MethodParameters:
      Name  Flags
      seq   

  public int getCurrTempoMPQ();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.media.sound.MidiUtils$TempoCache this
         0: .line 382
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.currTempo:I
            ireturn
        end local 0 // com.sun.media.sound.MidiUtils$TempoCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/media/sound/MidiUtils$TempoCache;

  float getTempoMPQAt(long);
    descriptor: (J)F
    flags: (0x0000) 
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.sun.media.sound.MidiUtils$TempoCache this
        start local 1 // long tick
         0: .line 386
            aload 0 /* this */
            lload 1 /* tick */
            ldc -1.0
            invokevirtual com.sun.media.sound.MidiUtils$TempoCache.getTempoMPQAt:(JF)F
            freturn
        end local 1 // long tick
        end local 0 // com.sun.media.sound.MidiUtils$TempoCache this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/media/sound/MidiUtils$TempoCache;
            0    1     1  tick  J
    MethodParameters:
      Name  Flags
      tick  

  synchronized float getTempoMPQAt(long, float);
    descriptor: (JF)F
    flags: (0x0020) ACC_SYNCHRONIZED
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // com.sun.media.sound.MidiUtils$TempoCache this
        start local 1 // long tick
        start local 3 // float startTempoMPQ
         0: .line 390
            iconst_0
            istore 4 /* i */
        start local 4 // int i
         1: goto 8
         2: .line 391
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.ticks:[J
            iload 4 /* i */
            laload
            lload 1 /* tick */
            lcmp
            ifle 7
         3: .line 392
            iload 4 /* i */
            ifle 4
            iinc 4 /* i */ -1
         4: .line 393
      StackMap locals:
      StackMap stack:
            fload 3 /* startTempoMPQ */
            fconst_0
            fcmpl
            ifle 6
            iload 4 /* i */
            ifne 6
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.firstTempoIsFake:Z
            ifeq 6
         5: .line 394
            fload 3 /* startTempoMPQ */
            freturn
         6: .line 396
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
            iload 4 /* i */
            iaload
            i2f
            freturn
         7: .line 390
      StackMap locals:
      StackMap stack:
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
         8: iload 4 /* i */
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.ticks:[J
            arraylength
            if_icmplt 2
        end local 4 // int i
         9: .line 399
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
            aload 0 /* this */
            getfield com.sun.media.sound.MidiUtils$TempoCache.tempos:[I
            arraylength
            iconst_1
            isub
            iaload
            i2f
            freturn
        end local 3 // float startTempoMPQ
        end local 1 // long tick
        end local 0 // com.sun.media.sound.MidiUtils$TempoCache this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   10     0           this  Lcom/sun/media/sound/MidiUtils$TempoCache;
            0   10     1           tick  J
            0   10     3  startTempoMPQ  F
            1    9     4              i  I
    MethodParameters:
               Name  Flags
      tick           
      startTempoMPQ  
}
SourceFile: "MidiUtils.java"
NestHost: com.sun.media.sound.MidiUtils
InnerClasses:
  public final TempoCache = com.sun.media.sound.MidiUtils$TempoCache of com.sun.media.sound.MidiUtils