// Path: src/main/java/au/edu/jcu/v4l4j/exceptions/ControlException.java
// public class ControlException extends V4L4JException{
// 
// 	private static final long serialVersionUID = -8310718978974706151L;
// 
// 	public ControlException(String message) {
// 		super(message);
// 	}
// 
// 	public ControlException(String message, Throwable throwable) {
// 		super(message, throwable);
// 	}
// 
// 	public ControlException(Throwable throwable) {
// 		super(throwable);
// 	}
// 
// }
// 
// Path: src/main/java/au/edu/jcu/v4l4j/exceptions/StateException.java
// public class StateException extends RuntimeException {
// 
// 	private static final long serialVersionUID = 1351714754008657462L;
// 
// 	public StateException(String message) {
// 		super(message);
// 	}
// 
// 	public StateException(String message, Throwable throwable) {
// 		super(message, throwable);
// 	}
// 
// 	public StateException(Throwable throwable) {
// 		super(throwable);
// 	}
// }
// 
// Path: src/main/java/au/edu/jcu/v4l4j/exceptions/UnsupportedMethod.java
// public class UnsupportedMethod extends RuntimeException {
// 	private static final long serialVersionUID = -8801339441741012577L;
// 
// 	public UnsupportedMethod(String message) {
// 		super(message);
// 	}
// 
// 	public UnsupportedMethod(String message, Throwable throwable) {
// 		super(message, throwable);
// 	}
// 
// 	public UnsupportedMethod(Throwable throwable) {
// 		super(throwable);
// 	}
// }


import au.edu.jcu.v4l4j.exceptions.StateException;
import au.edu.jcu.v4l4j.exceptions.UnsupportedMethod;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import au.edu.jcu.v4l4j.exceptions.ControlException;
		 * when read can still have their value decrease()d
		 */
		state.get();
		try { old = doGetValue(v4l4jObject,id);} catch (ControlException e) {}
		try {old = doSetValue(v4l4jObject,id, validateValue(old-step));}
		catch (ControlException ce){
			state.put();
			throw ce;
		}
		state.put();
		return old;
	}

	/**
	 * This method retrieves the maximum value this control will accept.
	 * If this control is a string control, this method returns the maximum string
	 * size that can be set on this control.
	 * 
	 * @return the maximum value, or the largest string size
	 * @throws StateException if this control has been released and must not be used anymore.
	 * @throws UnsupportedMethod if this control is of type {@link V4L4JConstants#CTRL_TYPE_LONG}
	 */
	public int getMaxValue() {
		if(type==V4L4JConstants.CTRL_TYPE_LONG)
			throw new UnsupportedMethod("This control is a long control and does not support calls to getMaxValue()");
		
		synchronized(state){
			if(state.isNotReleased())
				return max;
			else
// Path: src/main/java/au/edu/jcu/v4l4j/exceptions/ControlException.java
// public class ControlException extends V4L4JException{
// 
// 	private static final long serialVersionUID = -8310718978974706151L;
// 
// 	public ControlException(String message) {
// 		super(message);
// 	}
// 
// 	public ControlException(String message, Throwable throwable) {
// 		super(message, throwable);
// 	}
// 
// 	public ControlException(Throwable throwable) {
// 		super(throwable);
// 	}
// 
// }
// 
// Path: src/main/java/au/edu/jcu/v4l4j/exceptions/StateException.java
// public class StateException extends RuntimeException {
// 
// 	private static final long serialVersionUID = 1351714754008657462L;
// 
// 	public StateException(String message) {
// 		super(message);
// 	}
// 
// 	public StateException(String message, Throwable throwable) {
// 		super(message, throwable);
// 	}
// 
// 	public StateException(Throwable throwable) {
// 		super(throwable);
// 	}
// }
// 
// Path: src/main/java/au/edu/jcu/v4l4j/exceptions/UnsupportedMethod.java
// public class UnsupportedMethod extends RuntimeException {
// 	private static final long serialVersionUID = -8801339441741012577L;
// 
// 	public UnsupportedMethod(String message) {
// 		super(message);
// 	}
// 
// 	public UnsupportedMethod(String message, Throwable throwable) {
// 		super(message, throwable);
// 	}
// 
// 	public UnsupportedMethod(Throwable throwable) {
// 		super(throwable);
// 	}
// }


// Path: src/main/java/au/edu/jcu/v4l4j/Control.java
import au.edu.jcu.v4l4j.exceptions.StateException;
import au.edu.jcu.v4l4j.exceptions.UnsupportedMethod;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import au.edu.jcu.v4l4j.exceptions.ControlException;

		 * when read can still have their value decrease()d
		 */
		state.get();
		try { old = doGetValue(v4l4jObject,id);} catch (ControlException e) {}
		try {old = doSetValue(v4l4jObject,id, validateValue(old-step));}
		catch (ControlException ce){
			state.put();
			throw ce;
		}
		state.put();
		return old;
	}

	/**
	 * This method retrieves the maximum value this control will accept.
	 * If this control is a string control, this method returns the maximum string
	 * size that can be set on this control.
	 * 
	 * @return the maximum value, or the largest string size
	 * @throws StateException if this control has been released and must not be used anymore.
	 * @throws UnsupportedMethod if this control is of type {@link V4L4JConstants#CTRL_TYPE_LONG}
	 */
	public int getMaxValue() {
		if(type==V4L4JConstants.CTRL_TYPE_LONG)
			throw new UnsupportedMethod("This control is a long control and does not support calls to getMaxValue()");
		
		synchronized(state){
			if(state.isNotReleased())
				return max;
			else
				throw new StateException("This control has been released and must not be used");