// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/DataType.java
// public abstract class DataType {
// 	/** The bits as a string of "0" and "1": "000110001..." */
// 	protected String mBits;
// 	protected boolean mReverse = true;
// 	public int mBitlength;
// 	
// 	public DataType(int bitlength, boolean reverse) {
// 		mReverse = reverse;
// 		mBitlength = bitlength;
// 	}
// 	
// 	public void fromBits(String bits) {
// 		mBits = bits;
// 		if (mReverse) {
// 			//reverse the bits
// 			mBits = new StringBuilder(bits).reverse().toString();
// 		}
// 		interpret();
// 	}
// 	
// 	abstract void interpret();
// 	
// 	public static byte[] hexStringToByteArray(String s) {
// 	    int len = s.length();
// 	    byte[] data = new byte[len / 2];
// 	    for (int i = 0; i < len; i += 2) {
// 	        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
// 	                             + Character.digit(s.charAt(i+1), 16));
// 	    }
// 	    return data;
// 	}
// 	
// 	public static String getHexString(byte[] buf) {
// 		StringBuffer sb = new StringBuffer();
// 
// 		for (byte b : buf) {
// 			sb.append(String.format("%02x", b));
// 		}
// 
// 		return sb.toString();
// 	}
// 	
// 	public static String getBinaryString(byte[] input){
// 	    StringBuilder sb = new StringBuilder();
// 
// 	    for (byte c : input) {
// 	        for (int n =  128; n > 0; n >>= 1){
// 	            if ((c & n) == 0)
// 	                sb.append('0');
// 	            else sb.append('1');
// 	        }
// 	    }
// 
// 	    return sb.toString();
// 	}
// 	
// 	public static byte[] binaryStringToByteArray(String s) {
// 		byte[] ret = new byte[(s.length()+8-1) / 8];
// 
// 		BigInteger bigint = new BigInteger(s, 2);
// 		byte[] bigintbytes = bigint.toByteArray();
// 		
// 		if (bigintbytes.length > ret.length) {
// 			//get rid of preceding 0
// 			for (int i = 0; i < ret.length; i++) {
// 				ret[i] = bigintbytes[i+1];
// 			}
// 		}
// 		else {
// 			ret = bigintbytes;
// 		}
// 		return ret;
// 	}
// }
// 
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/RKFInteger.java
// public class RKFInteger extends DataType {
// 	public int mInt;
// 
// 	public RKFInteger(int bitlength, boolean reverse) {
// 		super(bitlength, reverse);
// 	}
// 
// 	@Override
// 	void interpret() {
// 		BigInteger a = new BigInteger(mBits, 2);
// 		mInt = a.intValue();
// 	}
// 	
// 	public String toString() {
// 		return "Int " + Integer.toString(mInt);
// 	}
// 
// }
// 
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/ByteString.java
// public class ByteString extends DataType {
// 	public String mString; 
// 	
// 	public ByteString(int bitlength, boolean reverse) {
// 		super(bitlength, reverse);
// 	}
// 	
// 	@Override
// 	void interpret() {
// 		String revbits = new StringBuffer(mBits).reverse().toString();
// 		byte[] revbitsarr = binaryStringToByteArray(revbits);
// 		
// 		byte[] bitsarr = new byte[revbitsarr.length];
// 		for (int i = 0; i < revbitsarr.length; i++) {
// 			bitsarr[revbitsarr.length - i - 1] = revbitsarr[i];
// 		}
// 		
// 		mString = getHexString(bitsarr);
// 	}
// 
// 	public String toString() {
// 		return mString;
// 	}
// }
// 
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/DateTime.java
// public class DateTime extends RKFInteger {
// 	public Date mDate;
// 	@SuppressWarnings("deprecation")
// 	public static Date epoch = new Date(100, 0, 1);
// 	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
// 	
// 	public DateTime(int bitlength, boolean reverse) {
// 		super(bitlength, reverse);
// 	}
// 
// 	@Override
// 	void interpret() {
// 		super.interpret();
// 		
// 		Calendar cal = Calendar.getInstance();
// 		cal.setTime(epoch);
// 		cal.add(Calendar.MINUTE, mInt);
// 		mDate = cal.getTime();
// 	}
// 	
// 	public String getDate() {
// 		return sdf.format(mDate);
// 	}
// 	
// 	public String toString() {
// 		return "Date " + getDate();
// 	}
// }


import info.rejsekort.reader.rkf.datatypes.DataType;
import info.rejsekort.reader.rkf.datatypes.RKFInteger;
import info.rejsekort.reader.rkf.datatypes.ByteString;
import info.rejsekort.reader.rkf.datatypes.DateTime;
package info.rejsekort.reader.rkf.blocks;


public class TCSTv4Block extends info.rejsekort.reader.rkf.TCSTBlock {

	public ByteString mIdentifier;
	public RKFInteger mVersionNumber;
	public ByteString mAID;
	public ByteString mPIX;
	public ByteString mStatus;
	public ByteString mXXX;

	public TCSTv4Block(byte[] bits) {
		super("TCSTv4", bits);

		mIdentifier = new ByteString(8, false);
		mVersionNumber = new RKFInteger(6, true);
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/DataType.java
// public abstract class DataType {
// 	/** The bits as a string of "0" and "1": "000110001..." */
// 	protected String mBits;
// 	protected boolean mReverse = true;
// 	public int mBitlength;
// 	
// 	public DataType(int bitlength, boolean reverse) {
// 		mReverse = reverse;
// 		mBitlength = bitlength;
// 	}
// 	
// 	public void fromBits(String bits) {
// 		mBits = bits;
// 		if (mReverse) {
// 			//reverse the bits
// 			mBits = new StringBuilder(bits).reverse().toString();
// 		}
// 		interpret();
// 	}
// 	
// 	abstract void interpret();
// 	
// 	public static byte[] hexStringToByteArray(String s) {
// 	    int len = s.length();
// 	    byte[] data = new byte[len / 2];
// 	    for (int i = 0; i < len; i += 2) {
// 	        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
// 	                             + Character.digit(s.charAt(i+1), 16));
// 	    }
// 	    return data;
// 	}
// 	
// 	public static String getHexString(byte[] buf) {
// 		StringBuffer sb = new StringBuffer();
// 
// 		for (byte b : buf) {
// 			sb.append(String.format("%02x", b));
// 		}
// 
// 		return sb.toString();
// 	}
// 	
// 	public static String getBinaryString(byte[] input){
// 	    StringBuilder sb = new StringBuilder();
// 
// 	    for (byte c : input) {
// 	        for (int n =  128; n > 0; n >>= 1){
// 	            if ((c & n) == 0)
// 	                sb.append('0');
// 	            else sb.append('1');
// 	        }
// 	    }
// 
// 	    return sb.toString();
// 	}
// 	
// 	public static byte[] binaryStringToByteArray(String s) {
// 		byte[] ret = new byte[(s.length()+8-1) / 8];
// 
// 		BigInteger bigint = new BigInteger(s, 2);
// 		byte[] bigintbytes = bigint.toByteArray();
// 		
// 		if (bigintbytes.length > ret.length) {
// 			//get rid of preceding 0
// 			for (int i = 0; i < ret.length; i++) {
// 				ret[i] = bigintbytes[i+1];
// 			}
// 		}
// 		else {
// 			ret = bigintbytes;
// 		}
// 		return ret;
// 	}
// }
// 
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/RKFInteger.java
// public class RKFInteger extends DataType {
// 	public int mInt;
// 
// 	public RKFInteger(int bitlength, boolean reverse) {
// 		super(bitlength, reverse);
// 	}
// 
// 	@Override
// 	void interpret() {
// 		BigInteger a = new BigInteger(mBits, 2);
// 		mInt = a.intValue();
// 	}
// 	
// 	public String toString() {
// 		return "Int " + Integer.toString(mInt);
// 	}
// 
// }
// 
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/ByteString.java
// public class ByteString extends DataType {
// 	public String mString; 
// 	
// 	public ByteString(int bitlength, boolean reverse) {
// 		super(bitlength, reverse);
// 	}
// 	
// 	@Override
// 	void interpret() {
// 		String revbits = new StringBuffer(mBits).reverse().toString();
// 		byte[] revbitsarr = binaryStringToByteArray(revbits);
// 		
// 		byte[] bitsarr = new byte[revbitsarr.length];
// 		for (int i = 0; i < revbitsarr.length; i++) {
// 			bitsarr[revbitsarr.length - i - 1] = revbitsarr[i];
// 		}
// 		
// 		mString = getHexString(bitsarr);
// 	}
// 
// 	public String toString() {
// 		return mString;
// 	}
// }
// 
// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/datatypes/DateTime.java
// public class DateTime extends RKFInteger {
// 	public Date mDate;
// 	@SuppressWarnings("deprecation")
// 	public static Date epoch = new Date(100, 0, 1);
// 	public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
// 	
// 	public DateTime(int bitlength, boolean reverse) {
// 		super(bitlength, reverse);
// 	}
// 
// 	@Override
// 	void interpret() {
// 		super.interpret();
// 		
// 		Calendar cal = Calendar.getInstance();
// 		cal.setTime(epoch);
// 		cal.add(Calendar.MINUTE, mInt);
// 		mDate = cal.getTime();
// 	}
// 	
// 	public String getDate() {
// 		return sdf.format(mDate);
// 	}
// 	
// 	public String toString() {
// 		return "Date " + getDate();
// 	}
// }


// Path: code/android/RejsekortReader/src/info/rejsekort/reader/rkf/blocks/TCSTv4Block.java
import info.rejsekort.reader.rkf.datatypes.DataType;
import info.rejsekort.reader.rkf.datatypes.RKFInteger;
import info.rejsekort.reader.rkf.datatypes.ByteString;
import info.rejsekort.reader.rkf.datatypes.DateTime;

package info.rejsekort.reader.rkf.blocks;


public class TCSTv4Block extends info.rejsekort.reader.rkf.TCSTBlock {

	public ByteString mIdentifier;
	public RKFInteger mVersionNumber;
	public ByteString mAID;
	public ByteString mPIX;
	public ByteString mStatus;
	public ByteString mXXX;

	public TCSTv4Block(byte[] bits) {
		super("TCSTv4", bits);

		mIdentifier = new ByteString(8, false);
		mVersionNumber = new RKFInteger(6, true);
		mAID = new ByteString(12, true);