In the ./src/com/utimaco/mdl/qsr2mux directory are a series of 
Java classes that are "executable".

Each class has a set of instance variables that must be populated,
and then the instance can be exec'd.  As an example, consider a class
with an integer, a short and a byte buffer:

class FooCl {
    int anInt;
    short aShort;
    byte [] foobuff;

    ...
}

There will be setters:
    void anInt(int s) { this.anInt = s; }

and getters
    int anInt() { return this.anInt; }

    FooCl fnorb = new FooCl();
    fnorb.anInt(5);
    fnorb.aShort(22);
    fnorb.foobuff("some byte array".getBytes());

(there is also a constructor that gives you parameters, this is the equivalent
call using such:

    FooCl fnorb2 = new FooCl(5, 22, "some bytes".getBytes());

After populating the instance, you pass it a cxi instance, the target module
and the target subfunction:

    boolean ret = fnorb.exec(cxi, 0xa6, 25);

If the call fails, it will throw an exception.  If it passes, the class
also has a class variable "byte [] resp;" that will contain the raw byte
buffer that was returned from the HSM.

If the resp value contains a serialized class of the same construction, you
can pass the return byte buffer to the constructor of the other class:

   try {
       BarCl barky = new BarCl(fnorb.resp);
   } catch (SerializationError se) {
       ...
   }

The instance variables for the BarCl class will be populated with the de-
serialized values from the responce byte buffer.

To save time, you can also

   try {
       BarCl barky = new BarCl(fnorb.resp);
       boolean ret = fnorb.exec(cxi, 0xa6, 25, barky);
       System.out.println(barky.toString());
   } catch (SerializationError se) {
       ...
   }




   
