Loss of the liquidity pool is not equally distributed
All stakeholders in the liquidity pool should be able to withdraw the same amount as they staked plus a share of fees that the converter earned during their staking period.\\n```\\n        IPoolTokensContainer(anchor).burn(\\_poolToken, msg.sender, \\_amount);\\n\\n        // calculate how much liquidity to remove\\n        // if the entire supply is liquidated, the entire staked amount should be sent, otherwise\\n        // the price is based on the ratio between the pool token supply and the staked balance\\n        uint256 reserveAmount = 0;\\n        if (\\_amount == initialPoolSupply)\\n            reserveAmount = balance;\\n        else\\n            reserveAmount = \\_amount.mul(balance).div(initialPoolSupply);\\n\\n        // sync the reserve balance / staked balance\\n        reserves[reserveToken].balance = reserves[reserveToken].balance.sub(reserveAmount);\\n        uint256 newStakedBalance = stakedBalances[reserveToken].sub(reserveAmount);\\n        stakedBalances[reserveToken] = newStakedBalance;\\n```\\n\\nThe problem is that sometimes there might not be enough funds in reserve (for example, due to this issue https://github.com/ConsenSys/bancor-audit-2020-06/issues/4). So the first ones who withdraw their stakes receive all the tokens they own. But the last stakeholders might not be able to get their funds back because the pool is empty already.\\nSo under some circumstances, there is a chance that users can lose all of their staked funds.\\nThis issue also has the opposite side: if the liquidity pool makes an extra profit, the stakers do not owe this profit and cannot withdraw it.
Resolution\\nThe issue was addressed by adding a new fee mechanism called ‘adjusted fees'. This mechanism aims to decrease the deficit of the reserves over time. If there is a deficit of reserves, it is usually present on the secondary token side, because there is a strong incentive to bring the primary token to the balanced state. Roughly speaking, the idea is that if the secondary token has a deficit in reserves, there are additional fees for trading that token. These fees are not distributed across the liquidity providers like the regular fees. Instead, they are just populating the reserve, decreasing the existing deficit.\\nLoss is still not distributed across the liquidity providers, and there is a possibility that there are not enough funds for everyone to withdraw them. In the case of a run on reserves, LPs will be able to withdraw funds on a first-come-first-serve basis.\\nDistribute losses evenly across the liquidity providers.
```\\n        IPoolTokensContainer(anchor).burn(\\_poolToken, msg.sender, \\_amount);\\n\\n        // calculate how much liquidity to remove\\n        // if the entire supply is liquidated, the entire staked amount should be sent, otherwise\\n        // the price is based on the ratio between the pool token supply and the staked balance\\n        uint256 reserveAmount = 0;\\n        if (\\_amount == initialPoolSupply)\\n            reserveAmount = balance;\\n        else\\n            reserveAmount = \\_amount.mul(balance).div(initialPoolSupply);\\n\\n        // sync the reserve balance / staked balance\\n        reserves[reserveToken].balance = reserves[reserveToken].balance.sub(reserveAmount);\\n        uint256 newStakedBalance = stakedBalances[reserveToken].sub(reserveAmount);\\n        stakedBalances[reserveToken] = newStakedBalance;\\n```\\n