contract PATH is StandardToken, SafePayloadChecker {
  uint256 public initialSupply = 250000000 * (10 ** uint256(decimals));
  string public constant name = "Path Network Token";
  string public constant symbol = "PATH";
  uint8 public constant decimals = 18;
  address owner;

  /**
   * @dev the time at which token holders can begin transferring tokens
   */
  uint256 public transferableStartTime;

  /**
   * @dev Constructor
   */
  constructor()
    public
  {
    transferableStartTime = now + 40 days;
    owner = msg.sender;
    balances[msg.sender] = initialSupply;
    totalSupply_ = initialSupply;
  }

  /**
   * @dev the token sale contract(s) and team can move tokens
   * @dev before the lockup expires
   */
  modifier onlyWhenTransferEnabled()
  {
    if (now <= transferableStartTime) {
      require(msg.sender == owner, "Sender not authorized.");
    }
    _;
  }

  /**
   * @dev require that this contract cannot affect itself
   */
  modifier validDestination(address _addr)
  {
    require(_addr != address(this));
    _;
  }

  /**
   * @dev override transfer token for a specified address to add validDestination
   * @param _to The address to transfer to.
   * @param _value The amount to be transferred.
   */
  function transfer(address _to, uint256 _value)
    onlyPayloadSize(32 + 32) // address (32) + uint256 (32)
    validDestination(_to)
    onlyWhenTransferEnabled
    public
    returns (bool)
  {
    return super.transfer(_to, _value);
  }

  /**
   * @dev override transferFrom token for a specified address to add validDestination
   * @param _from The address to transfer from.
   * @param _to The address to transfer to.
   * @param _value The amount to be transferred.
   */
  function transferFrom(address _from, address _to, uint256 _value)
    onlyPayloadSize(32 + 32 + 32) // address (32) + address (32) + uint256 (32)
    validDestination(_to)
    onlyWhenTransferEnabled
    public
    returns (bool)
  {
    return super.transferFrom(_from, _to, _value);
  }

  /**
   * @dev override approval functions to include safe payload checking
   */
  function approve(address _spender, uint256 _value)
    onlyPayloadSize(32 + 32) // address (32) + uint256 (32)
    public
    returns (bool)
  {
    return super.approve(_spender, _value);
  }

  function increaseApproval(address _spender, uint256 _addedValue)
    onlyPayloadSize(32 + 32) // address (32) + uint256 (32)
    public
    returns (bool)
  {
    return super.increaseApproval(_spender, _addedValue);
  }

  function decreaseApproval(address _spender, uint256 _subtractedValue)
    onlyPayloadSize(32 + 32) // address (32) + uint256 (32)
    public
    returns (bool)
  {
    return super.decreaseApproval(_spender, _subtractedValue);
  }
}
function approve(address _spender, uint256 _value)
  onlyPayloadSize(32 + 32) // address (32) + uint256 (32)
  public
  returns (bool)
{
  return super.approve(_spender, _value);
}

/**
 * @dev override approval functions to include safe payload checking
 */