out.write(first);
out.write(third);
    private int decodeLine(byte[] data, int off, int length, OutputStream out) throws IOException {        int count = data[off++];        // obtain and validate the count        if (count < ' ') {            throw new IOException("Invalid UUEncode line length");        }        count = (count - ' ') & 0x3F;        // get the rounded count of characters that should have been used to encode this.  The + 1 is for the        // terminating lineend character.        int requiredLength = (((count * 8) + 6) / 6) + 1;        if (length < requiredLength) {            throw new IOException("UUEncoded data and length do not match");        }        int bytesWritten = 0;        // now decode the bytes.        while (bytesWritten < count) {            // even one byte of data requires two bytes to encode, so we should have that.            byte a = (byte)((data[off++] - ' ') & 0x3F);            byte b = (byte)((data[off++] - ' ') & 0x3F);            byte c = 0;            byte d = 0;            // do the first byte            byte first = (byte)(((a << 2) & 0xFC) | ((b >>> 4) & 3));            out.write(first);            bytesWritten++;            // still have more bytes to decode? do the second byte of the second.  That requires            // a third byte from the data.            if (bytesWritten < count) {                c = (byte)((data[off++] - ' ') & 0x3F);                byte second = (byte)(((b << 4) & 0xF0) | ((c >>> 2) & 0x0F));                out.write(first);                bytesWritten++;                // need the third one?                if (bytesWritten < count) {                    d = (byte)((data[off++] - ' ') & 0x3F);                    byte third = (byte)(((c << 6) & 0xC0) | (d & 0x3F));                    out.write(first);                    bytesWritten++;                }            }        }        return bytesWritten;    }