code: func gcasRead(in *iNode, ctrie *Ctrie) *mainNode {
  	m := (*mainNode)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&in.main))))
  	prev := (*mainNode)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&m.prev))))
  	if prev == nil {
  		return m
  	}
  	return gcasComplete(in, m, ctrie)
  }
docs: // gcasRead performs a GCAS-linearizable read of the I-node's main node.