@Override
	public void perform(byte[] bytes) { 
		if ((bytes != null) && (bytes.length != 0)){
			BitSet bits = BitSet.valueOf(bytes);
			bitsNumber = bytes.length*8;
			if (header){
				bits = processHeader(bits);
			}
			gotBits += bitsNumber;  
			
			for (int i = 0; i < bitsNumber; i++){
				codePart.set(partBits, bits.get(i));
				if ( gotSymbols < symbolCount ){ 
					partBits++;
					if ((tree.containsKey(codePart))){
						if (tree.get(codePart).length == partBits){
							processData(tree.get(codePart).code);
							showProgress();
							codePart.clear();
							partBits = 0;
						}
					}
				}
				else{
					partBits++;
				}
			}
		}
		else{ 
			processLast(codePart, partBits);
			processData(null);
		}
	}