An example of the v 1.4.1 Gnosis Safe contract is deployed here: https://etherscan.io/address/0x41675C099F32341bf84BFc5382aF534df5C7461a#code
You can see that the setup function in Safe.sol does not have a return value. A code for the full function is copied below:
function setup(
address[] calldata _owners,
uint256 _threshold,
address to,
bytes calldata data,
address fallbackHandler,
address paymentToken,
uint256 payment,
address payable paymentReceiver
) external {
// setupOwners checks if the Threshold is already set, therefore preventing that this method is called twice
setupOwners(_owners, _threshold);
if (fallbackHandler != address(0)) internalSetFallbackHandler(fallbackHandler);
// As setupOwners can only be called if the contract has not been initialized we don't need a check for setupModules
setupModules(to, data);
if (payment > 0) {
// To avoid running into issues with EIP-170 we reuse the handlePayment function (to avoid adjusting code of that has been verified we do not adjust the method itself)
// baseGas = 0, gasPrice = 1 and gas = payment => amount = (payment + 0) * 1 = payment
handlePayment(payment, 0, 1, paymentToken, paymentReceiver);
}
emit SafeSetup(msg.sender, _owners, _threshold, to, fallbackHandler);
}
Some other code in the repo for Safe-Global/protocol-kit here implies that the setup function returns some transaction result data. A snippet of that code is here:
const txResponse = await this.contract.setup(
owners,
threshold,
to,
data,
fallbackHandler,
paymentToken,
payment,
paymentReceiver,
options
)
I'm having trouble understanding where anything is returned though?