public synchronized String decode(byte[] buffer) {
		if (buffer == null) {
			return null;
		}

		StringBuffer stringbuffer = new StringBuffer((buffer.length * 100) / 60);
		f = buffer;
		g = 0;
		h = 0;
		e = false;
		Object aobj[] = b;

		do {
			if (e) {
				break;
			}

			aobj = (Object[]) aobj[a()];

			if (aobj[0] == null) {
				if (aobj[1] == a) {
					int i = 0;

					for (int j = 0; j < 16; j++) {
						i += a() << j;
					}

					stringbuffer.append((char) i);
				} else {
					stringbuffer.append((String) aobj[1]);
				}

				aobj = b;
			}
		} while (true);

		String s = stringbuffer.toString();
		d += s.length();
		c += buffer.length;

		return s;
	}