I’m curious why both ERC1967Proxy (UUPS proxy) and UUPSUpgradeable.sol (implementation side lib) contracts have the same dependency - ERC1967Upgrade.sol
My best guess is that the ERC1967Upgrade.sol logic is needed only at proxy creation time and the reason to use the same lib is to make sure that storage slots are not not mixed up. Is it so? Is there another motivation?