Under the hood

     I had to create a few supporting libraries to make this stuff work