Source code removed by request. Contact me directly for access via . Apparently, I was inadvertently giving Carnegie Mellon students homework solutions. Oops!