code: func (tableNode *routingTableNode) Split() {
  	prefixLen := tableNode.KBucket().prefix.Size
  
  	if prefixLen == maxPrefixLength {
  		return
  	}
  
  	for i := 0; i < 2; i++ {
  		tableNode.SetChild(i, newRoutingTableNode(newBitmapFrom(
  			tableNode.KBucket().prefix, prefixLen+1)))
  	}
  
  	tableNode.Lock()
  	tableNode.children[1].bucket.prefix.Set(prefixLen)
  	tableNode.Unlock()
  
  	for e := range tableNode.KBucket().nodes.Iter() {
  		nd := e.Value.(*node)
  		tableNode.Child(nd.id.Bit(prefixLen)).KBucket().nodes.PushBack(nd)
  	}
  
  	for e := range tableNode.KBucket().candidates.Iter() {
  		nd := e.Value.(*node)
  		tableNode.Child(nd.id.Bit(prefixLen)).KBucket().candidates.PushBack(nd)
  	}
  
  	for i := 0; i < 2; i++ {
  		tableNode.Child(i).KBucket().UpdateTimestamp()
  	}
  }
docs: // Split splits current routingTableNode and sets it's two children.