// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import "@openzeppelin/contracts/utils/Context.sol"; import "./OwnableStorage.sol"; import "./IERC173Events.sol"; abstract contract OwnableInternal is IERC173Events, Context { using OwnableStorage for OwnableStorage.Layout; modifier onlyOwner() { require(_msgSender() == _owner(), "Ownable: sender must be owner"); _; } function _owner() internal view virtual returns (address) { return OwnableStorage.layout().owner; } function _transferOwnership(address account) internal virtual { OwnableStorage.layout().setOwner(account); emit OwnershipTransferred(_msgSender(), account); } }