docs: public static byte[] decode(final String base32) {
  		int i, index, lookup, offset, digit;
  		byte[] bytes = new byte[base32.length() * 5 / 8];
  
  		for (i = 0, index = 0, offset = 0; i < base32.length(); i++) {
  			lookup = base32.charAt(i) - '0';
  
  			/* Skip chars outside the lookup table */
  			if (lookup < 0 || lookup >= base32Lookup.length) {
  				continue;
  			}
  
  			digit = base32Lookup[lookup];
  
  			/* If this digit is not in the table, ignore it */
  			if (digit == 0xFF) {
  				continue;
  			}
  
  			if (index <= 3) {
  				index = (index + 5) % 8;
  				if (index == 0) {
  					bytes[offset] |= digit;
  					offset++;
  					if (offset >= bytes.length) {
  						break;
  					}
  				} else {
  					bytes[offset] |= digit << (8 - index);
  				}
  			} else {
  				index = (index + 5) % 8;
  				bytes[offset] |= (digit >>> index);
  				offset++;
  
  				if (offset >= bytes.length) {
  					break;
  				}
  				bytes[offset] |= digit << (8 - index);
  			}
  		}
  		return bytes;
  	}