code: func PullLastConfigBlock(puller ChainPuller) (*common.Block, error) {
  	endpoint, latestHeight, err := latestHeightAndEndpoint(puller)
  	if err != nil {
  		return nil, err
  	}
  	if endpoint == "" {
  		return nil, ErrRetryCountExhausted
  	}
  	lastBlock := puller.PullBlock(latestHeight - 1)
  	if lastBlock == nil {
  		return nil, ErrRetryCountExhausted
  	}
  	lastConfNumber, err := lastConfigFromBlock(lastBlock)
  	if err != nil {
  		return nil, err
  	}
  	// The last config block is smaller than the latest height,
  	// and a block iterator on the server side is a sequenced one.
  	// So we need to reset the puller if we wish to pull an earlier block.
  	puller.Close()
  	lastConfigBlock := puller.PullBlock(lastConfNumber)
  	if lastConfigBlock == nil {
  		return nil, ErrRetryCountExhausted
  	}
  	return lastConfigBlock, nil
  }
docs: // PullLastConfigBlock pulls the last configuration block, or returns an error on failure.