{
    "Function": "uniswapV3MintCallback",
    "File": "contracts/SemiFungiblePositionManager.sol",
    "Parent Contracts": [
        "contracts/multicall/Multicall.sol",
        "contracts/tokens/ERC1155Minimal.sol"
    ],
    "High-Level Calls": [
        "SafeTransferLib",
        "SafeTransferLib",
        "CallbackLib"
    ],
    "Internal Calls": [
        "abi.decode()"
    ],
    "Library Calls": [
        "validateCallback",
        "safeTransferFrom",
        "safeTransferFrom"
    ],
    "Low-Level Calls": [],
    "Code": "function uniswapV3MintCallback(\n        uint256 amount0Owed,\n        uint256 amount1Owed,\n        bytes calldata data\n    ) external {\n        // Decode the mint callback data\n        CallbackLib.CallbackData memory decoded = abi.decode(data, (CallbackLib.CallbackData));\n        // Validate caller to ensure we got called from the AMM pool\n        CallbackLib.validateCallback(msg.sender, address(FACTORY), decoded.poolFeatures);\n        // Sends the amount0Owed and amount1Owed quantities provided\n        if (amount0Owed > 0)\n            SafeTransferLib.safeTransferFrom(\n                decoded.poolFeatures.token0,\n                decoded.payer,\n                msg.sender,\n                amount0Owed\n            );\n        if (amount1Owed > 0)\n            SafeTransferLib.safeTransferFrom(\n                decoded.poolFeatures.token1,\n                decoded.payer,\n                msg.sender,\n                amount1Owed\n            );\n    }"
}