Timeout lowlevel client after five minutes rather than waiting forever

Also don't just ignore errors, throw a RuntimeException already!
Take advantage of repeated subproblems in order to speed up permissions checking with dynamic programming