function validate( opts, options ) {
	var list;
	var out;
	var err;
	var i;
	var j;
	var o;
	if ( !isPlainObject( options ) ) {
		return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
	}
	for ( i = 0; i < ACTIONS.length; i++ ) {
		if ( hasOwnProp( options, ACTIONS[ i ] ) ) {
			list = options[ ACTIONS[ i ] ];
			if ( !isArray( list ) ) {
				return new TypeError( format( 'invalid option. Each action must be an array of objects. Value: `%s`.', list ) );
			}
			out = [];
			for ( j = 0; j < list.length; j++ ) {
				o = list[ j ];
				if ( !isPlainObject( o ) ) {
					return new TypeError( format( 'invalid option. Each action must be an array of objects. Value: `%s`.', list ) );
				}
				err = validateKey( o );
				if ( err ) {
					return err;
				}
				out.push({
					'name': o.name,
					'ctrl': o.ctrl || false,
					'shift': o.shift || false,
					'meta': o.meta || false
				});
			}
			opts[ ACTIONS[ i ] ] = out;
		}
	}
	return null;
}
Validates keybindings.

@private
@param {Object} opts - destination object
@param {Object} options - settings options
@returns {(Error|null)} error or null