    function safeTransferFrom(address tokenContract, address from, address to, uint value) internal returns (bool success)
    {
        (bool call_success, bytes memory return_data) = tokenContract.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        success = false;
        if (call_success) {
            if (return_data.length == 0) {
                success = true;
            } else if (return_data.length == 32) {
                assembly { success := mload(add(return_data, 0x20)) }
            }
        }
    }