static IVar persistentSecretText(fS persistenceName) { ret new IVar() { File f = secretProgramFile(urlencode(persistenceName)); public synchronized void set(S a) { saveTextFile(f, a); } public synchronized S get() { ret loadTextFile(f); } public synchronized bool has() { ret fileExists(f); } public synchronized void clear() { set(null); } }; }