```\n// AccountV1.sol\n\nfunction _deposit(\n        address[] memory assetAddresses,\n        uint256[] memory assetIds,\n        uint256[] memory assetAmounts,\n        address from\n    ) internal {\n        // If no Creditor is set, batchProcessDeposit only checks if the assets can be priced.\n        // If a Creditor is set, batchProcessDeposit will also update the exposures of assets and underlying assets for the Creditor.\n        uint256[] memory assetTypes =\n            IRegistry(registry).batchProcessDeposit(creditor, assetAddresses, assetIds, assetAmounts);\n\n        for (uint256 i; i < assetAddresses.length; ++i) {\n            // Skip if amount is 0 to prevent storing addresses that have 0 balance.\n            if (assetAmounts[i] == 0) continue;\n\n            if (assetTypes[i] == 0) {\n                if (assetIds[i] != 0) revert AccountErrors.InvalidERC20Id();\n                _depositERC20(from, assetAddresses[i], assetAmounts[i]);\n            } else if (assetTypes[i] == 1) {\n                if (assetAmounts[i] != 1) revert AccountErrors.InvalidERC721Amount();\n                _depositERC721(from, assetAddresses[i], assetIds[i]);\n            } else if (assetTypes[i] == 2) {\n                _depositERC1155(from, assetAddresses[i], assetIds[i], assetAmounts[i]);\n            } else {\n                revert AccountErrors.UnknownAssetType();\n            }\n        }\n\n        if (erc20Stored.length + erc721Stored.length + erc1155Stored.length > ASSET_LIMIT) {\n            revert AccountErrors.TooManyAssets();\n        }\n    }\n```\n