Current implementation of `ERC20WithPermit` uses the term `spender` to refer to the source account from which tokens are transferred from, while both the EIP (see https://eips.ethereum.org/EIPS/eip-20) and major implementations (like e.g. OpenZeppelin, https://github.com/OpenZeppelin/openzeppelin-contracts/blob/a55b7d13722e7ce850b626da2313f3e66ca1d101/contracts/token/ERC20/ERC20.sol#L163) use the same term to refer to an account that's been authorized to _spend_ tokens on behalf of another. This can lead to confusion (it almost happened to me recently preparing a DAO proposal), and has an ABI-compatible fix.