abstract contract ERC165 is IERC165 {
  using ERC165Storage for ERC165Storage.Layout;

  /**
   * @inheritdoc IERC165
   */
  function supportsInterface (bytes4 interfaceId) override public view returns (bool) {
    return ERC165Storage.layout().isSupportedInterface(interfaceId);
  }
}
/**
 * @title ERC165 implementation
 */
function supportsInterface (bytes4 interfaceId) override public view returns (bool) {
    return ERC165Storage.layout().isSupportedInterface(interfaceId);
  }
/**
 * @inheritdoc IERC165
 */