function release(uint256 iPlan) public {
    require(iPlan >= 0 && iPlan < _numPlans);
    require(_plans[iPlan].currentyStage < _plans[iPlan].stages);
    uint256 duration = block.timestamp.sub(_plans[iPlan].start);
    uint256 nextStage = duration.div(_plans[iPlan].durationPerStage);
    nextStage = nextStage.add(1);   
    if(nextStage > _plans[iPlan].stages) {
      nextStage = _plans[iPlan].stages;    
    }
    uint256 unreleased = _releasableAmount(iPlan, nextStage);
    require(unreleased > 0);
    _plans[iPlan].currentyStage = nextStage;
    _plans[iPlan].released = _plans[iPlan].released.add(unreleased);
    _token.transfer(_plans[iPlan].beneficiary, unreleased);
  }