int matchbalance(int soff, int poff) {
			final int plen = p.length();
			if (poff == plen || poff + 1 == plen) {
				error("unbalanced pattern");
			}
			final int slen = s.length();
			if (soff >= slen)
				return -1;
			final int b = p.luaByte(poff);
			if (s.luaByte(soff) != b)
				return -1;
			final int e = p.luaByte(poff + 1);
			int cont = 1;
			while (++soff < slen) {
				if (s.luaByte(soff) == e) {
					if (--cont == 0)
						return soff + 1;
				} else if (s.luaByte(soff) == b)
					cont++;
			}
			return -1;
		}