} else if (sub instanceof SNode) {
final SNode<K, V> sn = (SNode<K, V>) sub;
if (sn.hc == hc && ct.equal(sn.k, k) && (v == null || v.equals(sn.v))) {
final MainNode<K, V> ncn = cn.removedAt(pos, flag, gen).toContracted(lev);
if (GCAS(cn, ncn, ct)) {
<BUG>res = Option.makeOption(sn.v);
</BUG>
} else {
res = null;
}

} else if (sub instanceof SNode) {
final SNode<K, V> sn = (SNode<K, V>) sub;
if (sn.hc == hc && ct.equal(sn.k, k) && (v == null || v.equals(sn.v))) {
final MainNode<K, V> ncn = cn.removedAt(pos, flag, gen).toContracted(lev);
if (GCAS(cn, ncn, ct)) {
res = Optional.of(sn.v);
} else {
res = null;
}
