// returns (timer owner, timer, estimated firing time) or null static T3 nextFiringTimerInVM_withOwner() { long time = now(); Lowest> best = new Lowest; for (Class c : allMainClassesAndJavaX()) { for (O timer : unnull(_registeredTimersOf(c))) pcall { long t = timer_nextFireTime(timer); if (t != 0) best.put(pair(owner, timer), t); } ret best.has() ? t3(best->a, best->b, toLong(best.bestScore())) : null; }