public virtual void lockRead()
 {
   Thread thread = Thread.currentThread();
   int index = this.getIndex(thread);
   ReaderWriterLock.ReaderWriterNode readerWriterNode;
   if (index == -1)
   {
     readerWriterNode = new ReaderWriterLock.ReaderWriterNode(thread, 0, (ReaderWriterLock.\u0031) null);
     this.waiters.add((object) readerWriterNode);
   }
   else
     readerWriterNode = (ReaderWriterLock.ReaderWriterNode) this.waiters.get(index);
   while (this.getIndex(thread) > this.firstWriter())
   {
     Exception exception1;
     try
     {
       Object.instancehelper_wait((object) this);
       continue;
     }
     catch (Exception ex)
     {
       int num = 0;
       M0 m0 = ByteCodeHelper.MapException<Exception>(ex, (ByteCodeHelper.MapFlags) num);
       if (m0 == null)
         throw;
       else
         exception1 = (Exception) m0;
     }
     Exception exception2 = exception1;
     System.get_err().println("ReaderWriterLock.lockRead(): exception.");
     System.get_err().print(Throwable.instancehelper_getMessage((Exception) exception2));
   }
   ++readerWriterNode.nAcquires;
 }
 public virtual void lockWrite()
 {
   Thread thread = Thread.currentThread();
   int index = this.getIndex(thread);
   ReaderWriterLock.ReaderWriterNode readerWriterNode;
   if (index == -1)
   {
     readerWriterNode = new ReaderWriterLock.ReaderWriterNode(thread, 1, (ReaderWriterLock.\u0031) null);
     this.waiters.add((object) readerWriterNode);
   }
   else
   {
     readerWriterNode = (ReaderWriterLock.ReaderWriterNode) this.waiters.get(index);
     if (readerWriterNode.state == 0)
     {
       string str = "Upgrade lock";
       Throwable.__\u003CsuppressFillInStackTrace\u003E();
       throw new IllegalArgumentException(str);
     }
     else
       readerWriterNode.state = 1;
   }
   while (this.getIndex(thread) != 0)
   {
     Exception exception1;
     try
     {
       Object.instancehelper_wait((object) this);
       continue;
     }
     catch (Exception ex)
     {
       int num = 0;
       M0 m0 = ByteCodeHelper.MapException<Exception>(ex, (ByteCodeHelper.MapFlags) num);
       if (m0 == null)
         throw;
       else
         exception1 = (Exception) m0;
     }
     Exception exception2 = exception1;
     System.get_err().println("ReaderWriterLock.lockWrite(): exception.");
     System.get_err().print(Throwable.instancehelper_getMessage((Exception) exception2));
   }
   ++readerWriterNode.nAcquires;
 }