```\nFile: PoolMath.sol\n    int256 internal constant N_COINS = 3;\n..SNIP..\n    function swapExactBaseLpTokenForUnderlying(PoolState memory pool, uint256 exactBaseLptIn)\n        internal\n..SNIP..\n            // Note: Here we are multiplying by N_COINS because the swap formula is defined in terms of the amount of PT being swapped.\n            // BaseLpt is equivalent to 3 times the amount of PT due to the initial deposit of 1:1:1:1=pt1:pt2:pt3:Lp share in Curve pool.\n            exactBaseLptIn.neg() * N_COINS\n..SNIP..\n    function swapUnderlyingForExactBaseLpToken(PoolState memory pool, uint256 exactBaseLptOut)\n..SNIP..\n        (int256 _netUnderlyingToAccount18, int256 _netUnderlyingFee18, int256 _netUnderlyingToProtocol18) = executeSwap(\n            pool,\n            // Note: sign is defined from the perspective of the swapper.\n            // positive because the swapper is buying pt\n            exactBaseLptOut.toInt256() * N_COINS\n```\n