+ tagName
+ qname
	public NodeSet findElementsByTagName(DocumentSet docs, String tagName) {		final long start = System.currentTimeMillis();		final NodeSet result = new ArraySet(10000);		DocumentImpl doc;		int docId;		int len;		short collectionId;		long gid;		VariableByteInputStream is;		ElementValue ref;		byte[] data;		InputStream dis;		short sym;		Collection collection;		final Lock lock = elementsDb.getLock();		for (Iterator i = docs.getCollectionIterator(); i.hasNext();) {			collection = (Collection) i.next();			collectionId = collection.getId();			sym = NativeBroker.getSymbols().getSymbol(tagName);			ref = new ElementValue(collectionId, sym);			try {				lock.acquire(Lock.READ_LOCK);				dis = elementsDb.getAsStream(ref);			} catch (LockException e) {				LOG.warn("failed to acquire lock", e);				dis = null;			} finally {				lock.release();			}			if (dis == null)				continue;			is = new VariableByteInputStream(dis);			try {				while (is.available() > 0) {					docId = is.readInt();					len = is.readInt();					if ((doc = docs.getDoc(docId)) == null) {						is.skip(len * 4);						continue;					}					gid = 0;					for (int k = 0; k < len; k++) {						gid = gid + is.readLong();						result.add(							new NodeProxy(doc, gid, Node.ELEMENT_NODE, StorageAddress.read(is)));					}				}			} catch (EOFException e) {			} catch (IOException e) {				LOG.warn("unexpected io error", e);			}		}		LOG.debug(			"found "				+ tagName				+ ": "				+ result.getLength()				+ " in "				+ (System.currentTimeMillis() - start)				+ "ms.");		return result;	}