interface IModule {

    /**
     * @notice This function returns the signature of configure function
     */
    function getInitFunction() external pure returns (bytes4);

    /**
     * @notice Return the permission flags that are associated with a module
     */
    function getPermissions() external view returns(bytes32[]);

    /**
     * @notice Used to withdraw the fee by the factory owner
     */
    function takeFee(uint256 _amount) external returns(bool);

}
/**
 * @title Interface that every module contract should implement
 */
function takeFee(uint256 _amount) external returns(bool);

/**
 * @notice Used to withdraw the fee by the factory owner
 */