func: function transferHoldFrom(
          address _from, address _to, uint256 _value
      ) public onlyOwner returns (bool) {
          require(_to != address(0));
          require(getTotalHoldAmount(_from) >= _value);
          require(_value <= allowed[_from][tx.origin]);
  
          balances[_from] = balances[_from].sub(_value);
          balances[_to] = balances[_to].add(_value);
          allowed[_from][tx.origin] = allowed[_from][tx.origin].sub(_value);
          emit Transfer(_from, _to, _value);
  
          uint256 lockedSourceAmount = 0;
          uint lockedSourceAmountCount = 0;
  
          LockParams[] storage locks = holdAmounts[_from];
  
          for (uint i = 0; i < locks.length; i++) {
              if (lockCountingFromTime == 0 || lockCountingFromTime.add(locks[i].TIME) >= now) {
              	lockedSourceAmount = lockedSourceAmount.add(locks[i].AMOUNT);
                  lockedSourceAmountCount++;
              }
          }
  
          uint256 tosend = 0;
          uint256 acc = 0;
          uint j = 0;
  
          for (i = 0; i < locks.length; i++) {
              if (lockCountingFromTime == 0 || lockCountingFromTime.add(locks[i].TIME) >= now) {
              	if (j < lockedSourceAmountCount - 1) {
      	            tosend = locks[i].AMOUNT.mul(_value).div(lockedSourceAmount);
      	        } else {
          	        tosend = _value.sub(acc);
      	        }
      	        locks[i].AMOUNT = locks[i].AMOUNT.sub(tosend);
      	        acc = acc.add(tosend);
      	        _setHold(_to, tosend, locks[i].TIME);
      	        j++;
              }
          }
          return true;
      }