interface IStaking {

    function initialize(
        address olyTokenAddress_,
        address sOLY_,
        address dai_
    ) external;

    //function stakeOLY(uint amountToStake_) external {
    function stakeOLYWithPermit (
        uint256 amountToStake_,
        uint256 deadline_,
        uint8 v_,
        bytes32 r_,
        bytes32 s_
    ) external;

    //function unstakeOLY( uint amountToWithdraw_) external {
    function unstakeOLYWithPermit (
        uint256 amountToWithdraw_,
        uint256 deadline_,
        uint8 v_,
        bytes32 r_,
        bytes32 s_
    ) external;

    function stakeOLY( uint amountToStake_ ) external returns ( bool );

    function unstakeOLY( uint amountToWithdraw_ ) external returns ( bool );

    function distributeOLYProfits() external;
}
function stakeOLYWithPermit (
    uint256 amountToStake_,
    uint256 deadline_,
    uint8 v_,
    bytes32 r_,
    bytes32 s_
) external;

//function stakeOLY(uint amountToStake_) external {