code: function composeMinimalDivisibleAssetPaymentJoint(params){
  		
  	if (!ValidationUtils.isNonemptyArray(params.available_paying_addresses))
  		throw Error('no available_paying_addresses');
  	if (!ValidationUtils.isNonemptyArray(params.available_fee_paying_addresses))
  		throw Error('no available_fee_paying_addresses');
  	composer.readSortedFundedAddresses(params.asset, params.available_paying_addresses, params.amount, function(arrFundedPayingAddresses){
  		if (arrFundedPayingAddresses.length === 0)
  			return params.callbacks.ifNotEnoughFunds("all paying addresses are unfunded in asset, make sure all your funds are confirmed");
  		composer.readSortedFundedAddresses(null, params.available_fee_paying_addresses, TYPICAL_FEE, function(arrFundedFeePayingAddresses){
  			if (arrFundedPayingAddresses.length === 0)
  				return params.callbacks.ifNotEnoughFunds("all paying addresses are unfunded in asset, make sure all your funds are confirmed");
  			var minimal_params = _.clone(params);
  			delete minimal_params.available_paying_addresses;
  			delete minimal_params.available_fee_paying_addresses;
  			minimal_params.minimal = true;
  			minimal_params.paying_addresses = arrFundedPayingAddresses;
  			minimal_params.fee_paying_addresses = arrFundedFeePayingAddresses;
  			composeDivisibleAssetPaymentJoint(minimal_params);
  		});
  	});
  }
docs: {asset: asset, available_paying_addresses: arrAvailablePayingAddresses, available_fee_paying_addresses: arrAvailableFeePayingAddresses, change_address: change_address, to_address: to_address, amount: amount, signer: signer, callbacks: callbacks}