abstract contract DiamondCuttable is IDiamondCuttable, OwnableInternal {
  using DiamondBaseStorage for DiamondBaseStorage.Layout;

  /**
   * @notice update functions callable on Diamond proxy
   * @param facetCuts array of structured Diamond facet update data
   * @param target optional recipient of initialization delegatecall
   * @param data optional initialization call data
   */
  function diamondCut (
    FacetCut[] calldata facetCuts,
    address target,
    bytes calldata data
  ) external override onlyOwner {
    DiamondBaseStorage.layout().diamondCut(facetCuts, target, data);
  }
}
/**
 * @title EIP-2535 "Diamond" proxy update contract
 */
function diamondCut (
  FacetCut[] calldata facetCuts,
  address target,
  bytes calldata data
) external override onlyOwner {
  DiamondBaseStorage.layout().diamondCut(facetCuts, target, data);
}

/**
 * @notice update functions callable on Diamond proxy
 * @param facetCuts array of structured Diamond facet update data
 * @param target optional recipient of initialization delegatecall
 * @param data optional initialization call data
 */