If pool already exists, it will only mint a position in pool
The address from which we're pulling token0 and token1 must approve proxy
If amount0Desired or amount1Desired is uint.max this will pull whole balance of _from
mints new NFT that represents a position with selected parameters
Input:
/// @param token0 The contract address of token0 of the pool
/// @param token1 The contract address of token1 of the pool
/// @param fee The fee amount of the v3 pool for the specified token pair
/// @param tickLower The lower end of the tick range for the position
/// @param tickUpper The higher end of the tick range for the position
/// @param amount0Desired The desired amount of token0 that should be supplied
/// @param amount1Desired The desired amount of token1 that should be supplied
/// @param amount0Min The minimum amount of token0 that should be supplied,
/// @param amount1Min The minimum amount of token1 that should be supplied,
/// @param recipient address which will receive the NFT
/// @param deadline The time by which the transaction must be included to effect the change
/// @param from account to take amounts from
/// @param sqrtPriceX96 The initial square root price of the pool as a Q64.96 value
struct Params {
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
address from;
uint160 sqrtPriceX96;
}