code: func (a *AddrManager) AddressCache() []*wire.NetAddress {
  	allAddr := a.getAddresses()
  
  	numAddresses := len(allAddr) * getAddrPercent / 100
  	if numAddresses > getAddrMax {
  		numAddresses = getAddrMax
  	}
  
  	// Fisher-Yates shuffle the array. We only need to do the first
  	// `numAddresses' since we are throwing the rest.
  	for i := 0; i < numAddresses; i++ {
  		// pick a number between current index and the end
  		j := rand.Intn(len(allAddr)-i) + i
  		allAddr[i], allAddr[j] = allAddr[j], allAddr[i]
  	}
  
  	// slice off the limit we are willing to share.
  	return allAddr[0:numAddresses]
  }
docs: // AddressCache returns the current address cache.  It must be treated as
  // read-only (but since it is a copy now, this is not as dangerous).