public static <T> T[] intern(T[] arr) {
	synchronized(ArrayIdentity.class) {
	    if(cleanint++ > 100) {
		clean();
		cleanint = 0;
	    }
	}
	Entry<T> e = new Entry<T>(arr);
	synchronized(ArrayIdentity.class) {
	    Entry<T> e2 = getcanon(e);
	    T[] ret;
	    if(e2 == null) {
		set.put(e, e);
		ret = arr;
	    } else {
		ret = e2.arr.get();
		if(ret == null) {
		    set.remove(e2);
		    set.put(e, e);
		    ret = arr;
		}
	    }
	    return(ret);
	}
    }