```\\nfunction removeMultiple(uint256 LPamount, address[] calldata tokens)\\n  external\\n  override\\n  returns (bool success)\\n{\\n  // Perform basic validation (no lock check here on purpose)\\n  require(tokens.length == 16, "DFP: Bad tokens array length");\\n\\n  // Calculate fraction of total liquidity to be returned\\n  uint256 fraction = (LPamount << 128) / totalSupply();\\n\\n  // Send the ETH first (use transfer to prevent reentrancy)\\n  uint256 dexBalance = address(this).balance;\\n  address payable sender = payable(msg.sender);\\n  sender.transfer(fraction * dexBalance >> 128);\\n\\n  // Send the ERC20 tokens\\n  address previous;\\n  for (uint256 i = 1; i < 16; i++) {\\n    address token = tokens[i];\\n    require(token > previous, "DFP: Require ordered list");\\n    require(\\n      listedTokens[token].state > State.Delisting,\\n      "DFP: Token not listed"\\n    );\\n    dexBalance = IERC20(token).balanceOf(address(this));\\n    IERC20(token).safeTransfer(msg.sender, fraction * dexBalance >> 128);\\n    previous = token;\\n  }\\n\\n  // Burn the LPs\\n  _burn(msg.sender, LPamount);\\n  emit MultiLiquidityRemoved(msg.sender, LPamount, totalSupply());\\n\\n  // That's all folks\\n  return true;\\n}\\n```\\n