{
  "address": "0xBd483b62612a859C5E66f8B7CFb6587fD7657B88",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_joe",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_wavax",
          "type": "address"
        },
        {
          "internalType": "contract IJoePair",
          "name": "_wavaxUsdte",
          "type": "address"
        },
        {
          "internalType": "contract IJoePair",
          "name": "_wavaxUsdce",
          "type": "address"
        },
        {
          "internalType": "contract IJoePair",
          "name": "_wavaxUsdc",
          "type": "address"
        },
        {
          "internalType": "contract IJoeFactory",
          "name": "_joeFactory",
          "type": "address"
        },
        {
          "internalType": "contract IMasterChef",
          "name": "_chefv2",
          "type": "address"
        },
        {
          "internalType": "contract IMasterChef",
          "name": "_chefv3",
          "type": "address"
        },
        {
          "internalType": "contract IBoostedMasterchef",
          "name": "_bmcj",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "bmcj",
      "outputs": [
        {
          "internalType": "contract IBoostedMasterchef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "chefv2",
      "outputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "chefv3",
      "outputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "whitelistedPidsV2",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPidsV3",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPidsBMCJ",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getAllFarmData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "avaxPriceUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePriceUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalAllocChefV2",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalAllocChefV3",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalAllocBMCJ",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePerSecChefV2",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePerSecChefV3",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePerSecBMCJ",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocPoint",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "lpAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0Address",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1Address",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "token0Symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "token1Symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupplyScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "chefAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "chefBalanceScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefTotalAlloc",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefJoePerSec",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FarmLensV2.FarmInfo[]",
              "name": "farmInfosV2",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocPoint",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "lpAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0Address",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1Address",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "token0Symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "token1Symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupplyScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "chefAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "chefBalanceScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefTotalAlloc",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefJoePerSec",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FarmLensV2.FarmInfo[]",
              "name": "farmInfosV3",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "allocPoint",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "lpAddress",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token0Address",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "token1Address",
                  "type": "address"
                },
                {
                  "internalType": "string",
                  "name": "token0Symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "token1Symbol",
                  "type": "string"
                },
                {
                  "internalType": "uint256",
                  "name": "reserveUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalSupplyScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "chefAddress",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "chefBalanceScaled",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefTotalAlloc",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "chefJoePerSec",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "baseApr",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "averageBoostedApr",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "veJoeShareBp",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "joePriceUsd",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userLp",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userPendingJoe",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userBoostedApr",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "userFactorShare",
                  "type": "uint256"
                }
              ],
              "internalType": "struct FarmLensV2.FarmInfoBMCJ[]",
              "name": "farmInfosBMCJ",
              "type": "tuple[]"
            }
          ],
          "internalType": "struct FarmLensV2.AllFarmData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAvaxPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IBoostedMasterchef",
          "name": "chef",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPids",
          "type": "uint256[]"
        }
      ],
      "name": "getBMCJFarmInfos",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "allocPoint",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "lpAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0Address",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1Address",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "token0Symbol",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "token1Symbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "reserveUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSupplyScaled",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "chefAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "chefBalanceScaled",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefTotalAlloc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefJoePerSec",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "baseApr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "averageBoostedApr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "veJoeShareBp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "joePriceUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userLp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userPendingJoe",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userBoostedApr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userFactorShare",
              "type": "uint256"
            }
          ],
          "internalType": "struct FarmLensV2.FarmInfoBMCJ[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getDerivedAvaxPriceOfToken",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IMasterChef",
          "name": "chef",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "whitelistedPids",
          "type": "uint256[]"
        }
      ],
      "name": "getMCFarmInfos",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "allocPoint",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "lpAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token0Address",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1Address",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "token0Symbol",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "token1Symbol",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "reserveUsd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalSupplyScaled",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "chefAddress",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "chefBalanceScaled",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefTotalAlloc",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "chefJoePerSec",
              "type": "uint256"
            }
          ],
          "internalType": "struct FarmLensV2.FarmInfo[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getTokenPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "joe",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "joeFactory",
      "outputs": [
        {
          "internalType": "contract IJoeFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavax",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavaxUsdc",
      "outputs": [
        {
          "internalType": "contract IJoePair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavaxUsdce",
      "outputs": [
        {
          "internalType": "contract IJoePair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wavaxUsdte",
      "outputs": [
        {
          "internalType": "contract IJoePair",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0x237710834fa0ad7b032c3dffb34a7e4e2cf38d48bc9964d311e7662814b3bfdb",
  "receipt": {
    "to": null,
    "from": "0x2bC66ec6fEF31e670cc9196c6922CEbd3D96aDad",
    "contractAddress": "0xBd483b62612a859C5E66f8B7CFb6587fD7657B88",
    "transactionIndex": 0,
    "gasUsed": "2738890",
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "blockHash": "0xc2dcc65d32f93aca76ee7421d13bbcb44d90c5f620d7c69fab1751b6c827252e",
    "transactionHash": "0x237710834fa0ad7b032c3dffb34a7e4e2cf38d48bc9964d311e7662814b3bfdb",
    "logs": [],
    "blockNumber": 10389086,
    "cumulativeGasUsed": "2738890",
    "status": 1,
    "byzantium": true
  },
  "args": [
    "0xce347E069B68C53A9ED5e7DA5952529cAF8ACCd4",
    "0xc778417E063141139Fce010982780140Aa0cD5Ab",
    "0x63Fce17ba68c82A322fDd5a4D03AedBEdBD730fD",
    "0x63Fce17ba68c82A322fDd5a4D03AedBEdBD730fD",
    "0x63Fce17ba68c82A322fDd5a4D03AedBEdBD730fD",
    "0x86f83be9770894d8e46301b12E88e14AdC6cdb5F",
    "0x1F51b7697A1919cF301845c93D4843FD620ad7Cc",
    "0xEedf119022F1Bb5F63676BbE855c82151B7198AF",
    "0x460d978831afd5Af99738E060C3ad8a76e592beA"
  ],
  "numDeployments": 2,
  "solcInputHash": "05be5b065453cde7967331fef060caff",
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_joe\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_wavax\",\"type\":\"address\"},{\"internalType\":\"contract IJoePair\",\"name\":\"_wavaxUsdte\",\"type\":\"address\"},{\"internalType\":\"contract IJoePair\",\"name\":\"_wavaxUsdce\",\"type\":\"address\"},{\"internalType\":\"contract IJoePair\",\"name\":\"_wavaxUsdc\",\"type\":\"address\"},{\"internalType\":\"contract IJoeFactory\",\"name\":\"_joeFactory\",\"type\":\"address\"},{\"internalType\":\"contract IMasterChef\",\"name\":\"_chefv2\",\"type\":\"address\"},{\"internalType\":\"contract IMasterChef\",\"name\":\"_chefv3\",\"type\":\"address\"},{\"internalType\":\"contract IBoostedMasterchef\",\"name\":\"_bmcj\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"bmcj\",\"outputs\":[{\"internalType\":\"contract IBoostedMasterchef\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chefv2\",\"outputs\":[{\"internalType\":\"contract IMasterChef\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"chefv3\",\"outputs\":[{\"internalType\":\"contract IMasterChef\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"whitelistedPidsV2\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"whitelistedPidsV3\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"whitelistedPidsBMCJ\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getAllFarmData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"avaxPriceUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"joePriceUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocChefV2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocChefV3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalAllocBMCJ\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"joePerSecChefV2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"joePerSecChefV3\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"joePerSecBMCJ\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0Address\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1Address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"token0Symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"token1Symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"reserveUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupplyScaled\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"chefAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chefBalanceScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefTotalAlloc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefJoePerSec\",\"type\":\"uint256\"}],\"internalType\":\"struct FarmLensV2.FarmInfo[]\",\"name\":\"farmInfosV2\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0Address\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1Address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"token0Symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"token1Symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"reserveUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupplyScaled\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"chefAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chefBalanceScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefTotalAlloc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefJoePerSec\",\"type\":\"uint256\"}],\"internalType\":\"struct FarmLensV2.FarmInfo[]\",\"name\":\"farmInfosV3\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0Address\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1Address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"token0Symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"token1Symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"reserveUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupplyScaled\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"chefAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chefBalanceScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefTotalAlloc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefJoePerSec\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseApr\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageBoostedApr\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"veJoeShareBp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"joePriceUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userLp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userPendingJoe\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBoostedApr\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userFactorShare\",\"type\":\"uint256\"}],\"internalType\":\"struct FarmLensV2.FarmInfoBMCJ[]\",\"name\":\"farmInfosBMCJ\",\"type\":\"tuple[]\"}],\"internalType\":\"struct FarmLensV2.AllFarmData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAvaxPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IBoostedMasterchef\",\"name\":\"chef\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"whitelistedPids\",\"type\":\"uint256[]\"}],\"name\":\"getBMCJFarmInfos\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0Address\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1Address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"token0Symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"token1Symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"reserveUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupplyScaled\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"chefAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chefBalanceScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefTotalAlloc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefJoePerSec\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"baseApr\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"averageBoostedApr\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"veJoeShareBp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"joePriceUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userLp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userPendingJoe\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBoostedApr\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userFactorShare\",\"type\":\"uint256\"}],\"internalType\":\"struct FarmLensV2.FarmInfoBMCJ[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getDerivedAvaxPriceOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMasterChef\",\"name\":\"chef\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"whitelistedPids\",\"type\":\"uint256[]\"}],\"name\":\"getMCFarmInfos\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"allocPoint\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"lpAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token0Address\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token1Address\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"token0Symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"token1Symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"reserveUsd\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupplyScaled\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"chefAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chefBalanceScaled\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefTotalAlloc\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chefJoePerSec\",\"type\":\"uint256\"}],\"internalType\":\"struct FarmLensV2.FarmInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"joe\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"joeFactory\",\"outputs\":[{\"internalType\":\"contract IJoeFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wavax\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wavaxUsdc\",\"outputs\":[{\"internalType\":\"contract IJoePair\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wavaxUsdce\",\"outputs\":[{\"internalType\":\"contract IJoePair\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wavaxUsdte\",\"outputs\":[{\"internalType\":\"contract IJoePair\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAllFarmData(uint256[],uint256[],uint256[],address)\":{\"params\":{\"user\":\"The address of the user, if address(0), returns global info\",\"whitelistedPidsBMCJ\":\"Array of all ids of pools that are whitelisted in BMCJ\",\"whitelistedPidsV2\":\"Array of all ids of pools that are whitelisted in chefV2\",\"whitelistedPidsV3\":\"Array of all ids of pools that are whitelisted in chefV3\"},\"returns\":{\"_0\":\"AllFarmData The information of all the whitelisted farms of MCV2, MCV3 and BMCJ\"}},\"getAvaxPrice()\":{\"returns\":{\"_0\":\"uint256 the avax price, scaled to 18 decimals\"}},\"getBMCJFarmInfos(address,address,uint256[])\":{\"params\":{\"chef\":\"The address of the MasterChef\",\"user\":\"The address of the user, if address(0), returns global info\",\"whitelistedPids\":\"Array of all ids of pools that are whitelisted and valid to have their farm data returned\"},\"returns\":{\"_0\":\"FarmInfoBMCJ The information of all the whitelisted farms of BMCJ\"}},\"getDerivedAvaxPriceOfToken(address)\":{\"params\":{\"token\":\"The address of the token\"},\"returns\":{\"_0\":\"uint256 the token derived price, scaled to 18 decimals\"}},\"getMCFarmInfos(address,uint256[])\":{\"params\":{\"chef\":\"The address of the MasterChef\",\"whitelistedPids\":\"Array of all ids of pools that are whitelisted and valid to have their farm data returned\"},\"returns\":{\"_0\":\"FarmInfo The information of all the whitelisted farms of MCV2 or MCV3\"}},\"getTokenPrice(address)\":{\"params\":{\"token\":\"The address of the token\"},\"returns\":{\"_0\":\"uint256 the Usd price of token, scaled to 18 decimals\"}}},\"stateVariables\":{\"SEC_PER_YEAR\":{\"details\":\"365 * 86400, hard coding it for gas optimisation\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAllFarmData(uint256[],uint256[],uint256[],address)\":{\"notice\":\"Get all data needed for useFarms hook.\"},\"getAvaxPrice()\":{\"notice\":\"Returns the price of avax in Usd\"},\"getBMCJFarmInfos(address,address,uint256[])\":{\"notice\":\"Returns the farm pairs data for BoostedMasterChefJoe\"},\"getDerivedAvaxPriceOfToken(address)\":{\"notice\":\"Returns the derived price of token, it needs to be paired with wavax\"},\"getMCFarmInfos(address,uint256[])\":{\"notice\":\"Returns the farm pairs data for MCV2 and MCV3\"},\"getTokenPrice(address)\":{\"notice\":\"Returns the Usd price of token, it needs to be paired with wavax\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/traderjoe/FarmLensV2.sol\":\"FarmLensV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{\"__CACHE_BREAKER__\":\"0x00000000d41867734bbee4c6863d9255b2b06ac1\"},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\ninterface IERC20 {\\n    function totalSupply() external view returns (uint256);\\n\\n    function balanceOf(address account) external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 amount) external returns (bool);\\n\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n\\n    // EIP 2612\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n}\\n\",\"keccak256\":\"0xa3fb82796e80f566a5c47f9a1f2ade7de7f390dfdc06bea5375112b9f9314f40\",\"license\":\"MIT\"},\"contracts/libraries/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\nimport \\\"../interfaces/IERC20.sol\\\";\\n\\nlibrary SafeERC20 {\\n    function safeSymbol(IERC20 token) internal view returns (string memory) {\\n        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41));\\n        return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\n    }\\n\\n    function safeName(IERC20 token) internal view returns (string memory) {\\n        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03));\\n        return success && data.length > 0 ? abi.decode(data, (string)) : \\\"???\\\";\\n    }\\n\\n    function safeDecimals(IERC20 token) internal view returns (uint8) {\\n        (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567));\\n        return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;\\n    }\\n\\n    function safeTransfer(\\n        IERC20 token,\\n        address to,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount));\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"SafeERC20: Transfer failed\\\");\\n    }\\n\\n    function safeTransferFrom(\\n        IERC20 token,\\n        address from,\\n        uint256 amount\\n    ) internal {\\n        (bool success, bytes memory data) = address(token).call(\\n            abi.encodeWithSelector(0x23b872dd, from, address(this), amount)\\n        );\\n        require(success && (data.length == 0 || abi.decode(data, (bool))), \\\"SafeERC20: TransferFrom failed\\\");\\n    }\\n}\\n\",\"keccak256\":\"0xdd77ee6d503b5396208d64e811ee89ca55389c62071003cc223f4ea0029c10ac\",\"license\":\"MIT\"},\"contracts/libraries/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\n\\n// a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math)\\nlibrary SafeMath {\\n    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a + b) >= b, \\\"SafeMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require((c = a - b) <= a, \\\"SafeMath: Underflow\\\");\\n    }\\n\\n    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b == 0 || (c = a * b) / b == a, \\\"SafeMath: Mul Overflow\\\");\\n    }\\n\\n    function div(uint256 a, uint256 b) internal pure returns (uint256 c) {\\n        require(b > 0, \\\"SafeMath: Div by Zero\\\");\\n        c = a / b;\\n    }\\n\\n    function to128(uint256 a) internal pure returns (uint128 c) {\\n        require(a <= uint128(-1), \\\"SafeMath: uint128 Overflow\\\");\\n        c = uint128(a);\\n    }\\n}\\n\\nlibrary SafeMath128 {\\n    function add(uint128 a, uint128 b) internal pure returns (uint128 c) {\\n        require((c = a + b) >= b, \\\"SafeMath: Add Overflow\\\");\\n    }\\n\\n    function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {\\n        require((c = a - b) <= a, \\\"SafeMath: Underflow\\\");\\n    }\\n}\\n\",\"keccak256\":\"0x8b8dcb649a07667a9a97c050a374a82389e7a19254abaebedf399c00619042a8\",\"license\":\"MIT\"},\"contracts/traderjoe/FarmLensV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.6.12;\\npragma experimental ABIEncoderV2;\\nimport \\\"../libraries/SafeMath.sol\\\";\\nimport \\\"../libraries/SafeERC20.sol\\\";\\n\\nimport \\\"./interfaces/IERC20.sol\\\";\\nimport \\\"./interfaces/IJoeERC20.sol\\\";\\nimport \\\"./interfaces/IJoePair.sol\\\";\\nimport \\\"./interfaces/IJoeFactory.sol\\\";\\n\\ninterface IMasterChef {\\n    struct PoolInfo {\\n        IJoeERC20 lpToken; // Address of LP token contract.\\n        uint256 allocPoint; // How many allocation points assigned to this pool. JOE to distribute per block.\\n        uint256 lastRewardTimestamp; // Last block number that JOE distribution occurs.\\n        uint256 accJoePerShare; // Accumulated JOE per share, times 1e12. See below.\\n    }\\n\\n    function poolLength() external view returns (uint256);\\n\\n    function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory);\\n\\n    function totalAllocPoint() external view returns (uint256);\\n\\n    function joePerSec() external view returns (uint256);\\n}\\n\\ninterface IBoostedMasterchef {\\n    struct UserInfo {\\n        uint256 amount;\\n        uint256 rewardDebt;\\n        uint256 factor;\\n    }\\n\\n    struct PoolInfo {\\n        IERC20 lpToken;\\n        uint96 allocPoint;\\n        uint256 accJoePerShare;\\n        uint256 accJoePerFactorPerShare;\\n        uint64 lastRewardTimestamp;\\n        address rewarder;\\n        uint32 veJoeShareBp;\\n        uint256 totalFactor;\\n        uint256 totalLpSupply;\\n    }\\n\\n    function userInfo(uint256 _pid, address user) external view returns (UserInfo memory);\\n\\n    function pendingTokens(uint256 _pid, address user)\\n        external\\n        view\\n        returns (\\n            uint256,\\n            address,\\n            string memory,\\n            uint256\\n        );\\n\\n    function poolLength() external view returns (uint256);\\n\\n    function poolInfo(uint256 pid) external view returns (PoolInfo memory);\\n\\n    function totalAllocPoint() external view returns (uint256);\\n\\n    function joePerSec() external view returns (uint256);\\n}\\n\\ncontract FarmLensV2 {\\n    using SafeMath for uint256;\\n    using SafeERC20 for IERC20;\\n\\n    struct FarmInfo {\\n        uint256 id;\\n        uint256 allocPoint;\\n        address lpAddress;\\n        address token0Address;\\n        address token1Address;\\n        string token0Symbol;\\n        string token1Symbol;\\n        uint256 reserveUsd;\\n        uint256 totalSupplyScaled;\\n        address chefAddress;\\n        uint256 chefBalanceScaled;\\n        uint256 chefTotalAlloc;\\n        uint256 chefJoePerSec;\\n    }\\n\\n    struct FarmInfoBMCJ {\\n        uint256 id;\\n        uint256 allocPoint;\\n        address lpAddress;\\n        address token0Address;\\n        address token1Address;\\n        string token0Symbol;\\n        string token1Symbol;\\n        uint256 reserveUsd;\\n        uint256 totalSupplyScaled;\\n        address chefAddress;\\n        uint256 chefBalanceScaled;\\n        uint256 chefTotalAlloc;\\n        uint256 chefJoePerSec;\\n        uint256 baseApr;\\n        uint256 averageBoostedApr;\\n        uint256 veJoeShareBp;\\n        uint256 joePriceUsd;\\n\\n        uint256 userLp;\\n        uint256 userPendingJoe;\\n        uint256 userBoostedApr;\\n        uint256 userFactorShare;\\n    }\\n\\n    struct AllFarmData {\\n        uint256 avaxPriceUsd;\\n        uint256 joePriceUsd;\\n        uint256 totalAllocChefV2;\\n        uint256 totalAllocChefV3;\\n        uint256 totalAllocBMCJ;\\n        uint256 joePerSecChefV2;\\n        uint256 joePerSecChefV3;\\n        uint256 joePerSecBMCJ;\\n        FarmInfo[] farmInfosV2;\\n        FarmInfo[] farmInfosV3;\\n        FarmInfoBMCJ[] farmInfosBMCJ;\\n    }\\n\\n    struct GlobalInfo {\\n        address chef;\\n        uint256 totalAlloc;\\n        uint256 joePerSec;\\n    }\\n\\n    /// @dev 365 * 86400, hard coding it for gas optimisation\\n    uint256 private constant SEC_PER_YEAR = 31536000;\\n    uint256 private constant BP_PRECISION = 10_000;\\n    uint256 private constant PRECISION = 1e18;\\n\\n    address public immutable joe; // 0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd;\\n    address public immutable wavax; // 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7;\\n    IJoePair public immutable wavaxUsdte; // 0xeD8CBD9F0cE3C6986b22002F03c6475CEb7a6256\\n    IJoePair public immutable wavaxUsdce; // 0xA389f9430876455C36478DeEa9769B7Ca4E3DDB1\\n    IJoePair public immutable wavaxUsdc; // 0xf4003f4efbe8691b60249e6afbd307abe7758adb\\n    IJoeFactory public immutable joeFactory; // 0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10\\n    IMasterChef public immutable chefv2; // 0xd6a4F121CA35509aF06A0Be99093d08462f53052\\n    IMasterChef public immutable chefv3; // 0x188bED1968b795d5c9022F6a0bb5931Ac4c18F00\\n    IBoostedMasterchef public immutable bmcj; // Not deployed yet\\n    bool private immutable isWavaxToken1InWavaxUsdte;\\n    bool private immutable isWavaxToken1InWavaxUsdce;\\n    bool private immutable isWavaxToken1InWavaxUsdc;\\n\\n    constructor(\\n        address _joe,\\n        address _wavax,\\n        IJoePair _wavaxUsdte,\\n        IJoePair _wavaxUsdce,\\n        IJoePair _wavaxUsdc,\\n        IJoeFactory _joeFactory,\\n        IMasterChef _chefv2,\\n        IMasterChef _chefv3,\\n        IBoostedMasterchef _bmcj\\n    ) public {\\n        joe = _joe;\\n        wavax = _wavax;\\n        wavaxUsdte = _wavaxUsdte;\\n        wavaxUsdce = _wavaxUsdce;\\n        wavaxUsdc = _wavaxUsdc;\\n        joeFactory = _joeFactory;\\n        chefv2 = _chefv2;\\n        chefv3 = _chefv3;\\n        bmcj = _bmcj;\\n\\n        isWavaxToken1InWavaxUsdte = _wavaxUsdte.token1() == _wavax;\\n        isWavaxToken1InWavaxUsdce = _wavaxUsdce.token1() == _wavax;\\n        isWavaxToken1InWavaxUsdc = _wavaxUsdc.token1() == _wavax;\\n    }\\n\\n    /// @notice Returns the price of avax in Usd\\n    /// @return uint256 the avax price, scaled to 18 decimals\\n    function getAvaxPrice() external view returns (uint256) {\\n        return _getAvaxPrice();\\n    }\\n\\n    /// @notice Returns the derived price of token, it needs to be paired with wavax\\n    /// @param token The address of the token\\n    /// @return uint256 the token derived price, scaled to 18 decimals\\n    function getDerivedAvaxPriceOfToken(address token) external view returns (uint256) {\\n        return _getDerivedAvaxPriceOfToken(token);\\n    }\\n\\n    /// @notice Returns the Usd price of token, it needs to be paired with wavax\\n    /// @param token The address of the token\\n    /// @return uint256 the Usd price of token, scaled to 18 decimals\\n    function getTokenPrice(address token) external view returns (uint256) {\\n        return _getDerivedAvaxPriceOfToken(token).mul(_getAvaxPrice()) / 1e18;\\n    }\\n\\n    /// @notice Returns the farm pairs data for MCV2 and MCV3\\n    /// @param chef The address of the MasterChef\\n    /// @param whitelistedPids Array of all ids of pools that are whitelisted and valid to have their farm data returned\\n    /// @return FarmInfo The information of all the whitelisted farms of MCV2 or MCV3\\n    function getMCFarmInfos(IMasterChef chef, uint256[] calldata whitelistedPids)\\n        external\\n        view\\n        returns (FarmInfo[] memory)\\n    {\\n        require(chef == chefv2 || chef == chefv3, \\\"FarmLensV2: only for MCV2 and MCV3\\\");\\n\\n        uint256 avaxPrice = _getAvaxPrice();\\n        return _getMCFarmInfos(chef, avaxPrice, whitelistedPids);\\n    }\\n\\n    /// @notice Returns the farm pairs data for BoostedMasterChefJoe\\n    /// @param chef The address of the MasterChef\\n    /// @param user The address of the user, if address(0), returns global info\\n    /// @param whitelistedPids Array of all ids of pools that are whitelisted and valid to have their farm data returned\\n    /// @return FarmInfoBMCJ The information of all the whitelisted farms of BMCJ\\n    function getBMCJFarmInfos(\\n        IBoostedMasterchef chef,\\n        address user,\\n        uint256[] calldata whitelistedPids\\n    ) external view returns (FarmInfoBMCJ[] memory) {\\n        require(chef == bmcj, \\\"FarmLensV2: Only for BMCJ\\\");\\n\\n        uint256 avaxPrice = _getAvaxPrice();\\n        uint256 joePrice = _getDerivedAvaxPriceOfToken(joe).mul(avaxPrice) / PRECISION;\\n        return _getBMCJFarmInfos(avaxPrice, joePrice, user, whitelistedPids);\\n    }\\n\\n    /// @notice Get all data needed for useFarms hook.\\n    /// @param whitelistedPidsV2 Array of all ids of pools that are whitelisted in chefV2\\n    /// @param whitelistedPidsV3 Array of all ids of pools that are whitelisted in chefV3\\n    /// @param whitelistedPidsBMCJ Array of all ids of pools that are whitelisted in BMCJ\\n    /// @param user The address of the user, if address(0), returns global info\\n    /// @return AllFarmData The information of all the whitelisted farms of MCV2, MCV3 and BMCJ\\n    function getAllFarmData(\\n        uint256[] calldata whitelistedPidsV2,\\n        uint256[] calldata whitelistedPidsV3,\\n        uint256[] calldata whitelistedPidsBMCJ,\\n        address user\\n    ) external view returns (AllFarmData memory) {\\n        AllFarmData memory allFarmData;\\n\\n        uint256 avaxPrice = _getAvaxPrice();\\n        uint256 joePrice = _getDerivedAvaxPriceOfToken(joe).mul(avaxPrice) / PRECISION;\\n\\n        allFarmData.avaxPriceUsd = avaxPrice;\\n        allFarmData.joePriceUsd = joePrice;\\n\\n        allFarmData.totalAllocChefV2 = chefv2.totalAllocPoint();\\n        allFarmData.joePerSecChefV2 = chefv2.joePerSec();\\n\\n        allFarmData.totalAllocChefV3 = chefv3.totalAllocPoint();\\n        allFarmData.joePerSecChefV3 = chefv3.joePerSec();\\n\\n        allFarmData.totalAllocBMCJ = bmcj.totalAllocPoint();\\n        allFarmData.joePerSecBMCJ = bmcj.joePerSec();\\n\\n        allFarmData.farmInfosV2 = _getMCFarmInfos(chefv2, avaxPrice, whitelistedPidsV2);\\n        allFarmData.farmInfosV3 = _getMCFarmInfos(chefv3, avaxPrice, whitelistedPidsV3);\\n        allFarmData.farmInfosBMCJ = _getBMCJFarmInfos(avaxPrice, joePrice, user, whitelistedPidsBMCJ);\\n\\n        return allFarmData;\\n    }\\n\\n    /// @notice Returns the price of avax in Usd internally\\n    /// @return uint256 the avax price, scaled to 18 decimals\\n    function _getAvaxPrice() private view returns (uint256) {\\n        return\\n            _getDerivedTokenPriceOfPair(wavaxUsdte, isWavaxToken1InWavaxUsdte)\\n                .add(_getDerivedTokenPriceOfPair(wavaxUsdce, isWavaxToken1InWavaxUsdce))\\n                .add(_getDerivedTokenPriceOfPair(wavaxUsdc, isWavaxToken1InWavaxUsdc)) / 3;\\n    }\\n\\n    /// @notice Returns the derived price of token in the other token\\n    /// @param pair The address of the pair\\n    /// @param derivedtoken0 If price should be derived from token0 if true, or token1 if false\\n    /// @return uint256 the derived price, scaled to 18 decimals\\n    function _getDerivedTokenPriceOfPair(IJoePair pair, bool derivedtoken0) private view returns (uint256) {\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        uint256 decimals0 = IERC20(pair.token0()).safeDecimals();\\n        uint256 decimals1 = IERC20(pair.token1()).safeDecimals();\\n\\n        if (derivedtoken0) {\\n            return _scaleTo(reserve0, decimals1.add(18).sub(decimals0)).div(reserve1);\\n        } else {\\n            return _scaleTo(reserve1, decimals0.add(18).sub(decimals1)).div(reserve0);\\n        }\\n    }\\n\\n    /// @notice Returns the derived price of token, it needs to be paired with wavax\\n    /// @param token The address of the token\\n    /// @return uint256 the token derived price, scaled to 18 decimals\\n    function _getDerivedAvaxPriceOfToken(address token) private view returns (uint256) {\\n        if (token == wavax) {\\n            return PRECISION;\\n        }\\n        IJoePair pair = IJoePair(joeFactory.getPair(token, wavax));\\n        if (address(pair) == address(0)) {\\n            return 0;\\n        }\\n        // instead of testing wavax == pair.token0(), we do the opposite to save gas\\n        return _getDerivedTokenPriceOfPair(pair, token == pair.token1());\\n    }\\n\\n    /// @notice Returns the amount scaled to decimals\\n    /// @param amount The amount\\n    /// @param decimals The decimals to scale `amount`\\n    /// @return uint256 The amount scaled to decimals\\n    function _scaleTo(uint256 amount, uint256 decimals) private pure returns (uint256) {\\n        if (decimals == 0) return amount;\\n        return amount.mul(10**decimals);\\n    }\\n\\n    /// @notice Returns the derived avax liquidity, at least one of the token needs to be paired with wavax\\n    /// @param pair The address of the pair\\n    /// @return uint256 the derived price of pair's liquidity, scaled to 18 decimals\\n    function _getDerivedAvaxLiquidityOfPair(IJoePair pair) private view returns (uint256) {\\n        address _wavax = wavax;\\n        (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();\\n        IERC20 token0 = IERC20(pair.token0());\\n        IERC20 token1 = IERC20(pair.token1());\\n        uint256 decimals0 = token0.safeDecimals();\\n        uint256 decimals1 = token1.safeDecimals();\\n\\n        reserve0 = _scaleTo(reserve0, uint256(18).sub(decimals0));\\n        reserve1 = _scaleTo(reserve1, uint256(18).sub(decimals1));\\n\\n        uint256 token0DerivedAvaxPrice;\\n        uint256 token1DerivedAvaxPrice;\\n        if (address(token0) == _wavax) {\\n            token0DerivedAvaxPrice = PRECISION;\\n            token1DerivedAvaxPrice = _getDerivedTokenPriceOfPair(pair, true);\\n        } else if (address(token1) == _wavax) {\\n            token0DerivedAvaxPrice = _getDerivedTokenPriceOfPair(pair, false);\\n            token1DerivedAvaxPrice = PRECISION;\\n        } else {\\n            token0DerivedAvaxPrice = _getDerivedAvaxPriceOfToken(address(token0));\\n            token1DerivedAvaxPrice = _getDerivedAvaxPriceOfToken(address(token1));\\n            // If one token isn't paired with wavax, then we hope that the second one is.\\n            // E.g, TOKEN/UsdC, token might not be paired with wavax, but UsdC is.\\n            // If both aren't paired with wavax, return 0\\n            if (token0DerivedAvaxPrice == 0) return reserve1.mul(token1DerivedAvaxPrice).mul(2) / PRECISION;\\n            if (token1DerivedAvaxPrice == 0) return reserve0.mul(token0DerivedAvaxPrice).mul(2) / PRECISION;\\n        }\\n        return reserve0.mul(token0DerivedAvaxPrice).add(reserve1.mul(token1DerivedAvaxPrice)) / PRECISION;\\n    }\\n\\n    /// @notice Private function to return the farm pairs data for a given MasterChef (V2 or V3)\\n    /// @param chef The address of the MasterChef\\n    /// @param avaxPrice The avax price as a parameter to save gas\\n    /// @param whitelistedPids Array of all ids of pools that are whitelisted and valid to have their farm data returned\\n    /// @return FarmInfo The information of all the whitelisted farms of MCV2 or MCV3\\n    function _getMCFarmInfos(\\n        IMasterChef chef,\\n        uint256 avaxPrice,\\n        uint256[] calldata whitelistedPids\\n    ) private view returns (FarmInfo[] memory) {\\n        uint256 whitelistLength = whitelistedPids.length;\\n        FarmInfo[] memory farmInfos = new FarmInfo[](whitelistLength);\\n\\n        uint256 chefTotalAlloc = chef.totalAllocPoint();\\n        uint256 chefJoePerSec = chef.joePerSec();\\n\\n        for (uint256 i; i < whitelistLength; i++) {\\n            uint256 pid = whitelistedPids[i];\\n            IMasterChef.PoolInfo memory pool = chef.poolInfo(pid);\\n\\n            farmInfos[i] = _getMCFarmInfo(\\n                chef,\\n                avaxPrice,\\n                pid,\\n                IJoePair(address(pool.lpToken)),\\n                pool.allocPoint,\\n                chefTotalAlloc,\\n                chefJoePerSec\\n            );\\n        }\\n\\n        return farmInfos;\\n    }\\n\\n    /// @notice Helper function to return the farm info of a given pool\\n    /// @param chef The address of the MasterChef\\n    /// @param avaxPrice The avax price as a parameter to save gas\\n    /// @param pid The pid of the pool\\n    /// @param lpToken The lpToken of the pool\\n    /// @param allocPoint The allocPoint of the pool\\n    /// @return FarmInfo The information of all the whitelisted farms of MCV2 or MCV3\\n    function _getMCFarmInfo(\\n        IMasterChef chef,\\n        uint256 avaxPrice,\\n        uint256 pid,\\n        IJoePair lpToken,\\n        uint256 allocPoint,\\n        uint256 totalAllocPoint,\\n        uint256 chefJoePerSec\\n    ) private view returns (FarmInfo memory) {\\n        uint256 decimals = lpToken.decimals();\\n        uint256 totalSupplyScaled = _scaleTo(lpToken.totalSupply(), 18 - decimals);\\n        uint256 chefBalanceScaled = _scaleTo(lpToken.balanceOf(address(chef)), 18 - decimals);\\n        uint256 reserveUsd = _getDerivedAvaxLiquidityOfPair(lpToken).mul(avaxPrice) / PRECISION;\\n        IERC20 token0 = IERC20(lpToken.token0());\\n        IERC20 token1 = IERC20(lpToken.token1());\\n\\n        return\\n            FarmInfo({\\n                id: pid,\\n                allocPoint: allocPoint,\\n                lpAddress: address(lpToken),\\n                token0Address: address(token0),\\n                token1Address: address(token1),\\n                token0Symbol: token0.safeSymbol(),\\n                token1Symbol: token1.safeSymbol(),\\n                reserveUsd: reserveUsd,\\n                totalSupplyScaled: totalSupplyScaled,\\n                chefBalanceScaled: chefBalanceScaled,\\n                chefAddress: address(chef),\\n                chefTotalAlloc: totalAllocPoint,\\n                chefJoePerSec: chefJoePerSec\\n            });\\n    }\\n\\n    /// @notice Private function to return the farm pairs data for boostedMasterChef\\n    /// @param avaxPrice The avax price as a parameter to save gas\\n    /// @param joePrice The joe price as a parameter to save gas\\n    /// @param user The address of the user, if address(0), returns global info\\n    /// @param whitelistedPids Array of all ids of pools that are whitelisted and valid to have their farm data returned\\n    /// @return FarmInfoBMCJ The information of all the whitelisted farms of BMCJ\\n    function _getBMCJFarmInfos(\\n        uint256 avaxPrice,\\n        uint256 joePrice,\\n        address user,\\n        uint256[] calldata whitelistedPids\\n    ) private view returns (FarmInfoBMCJ[] memory) {\\n        GlobalInfo memory globalInfo = GlobalInfo(address(bmcj), bmcj.totalAllocPoint(), bmcj.joePerSec());\\n\\n        uint256 whitelistLength = whitelistedPids.length;\\n        FarmInfoBMCJ[] memory farmInfos = new FarmInfoBMCJ[](whitelistLength);\\n\\n        for (uint256 i; i < whitelistLength; i++) {\\n            uint256 pid = whitelistedPids[i];\\n            IBoostedMasterchef.PoolInfo memory pool = IBoostedMasterchef(globalInfo.chef).poolInfo(pid);\\n            IBoostedMasterchef.UserInfo memory userInfo;\\n            userInfo = IBoostedMasterchef(globalInfo.chef).userInfo(pid, user);\\n\\n            farmInfos[i].id = pid;\\n            farmInfos[i].chefAddress = globalInfo.chef;\\n            farmInfos[i].chefTotalAlloc = globalInfo.totalAlloc;\\n            farmInfos[i].chefJoePerSec = globalInfo.joePerSec;\\n            farmInfos[i].joePriceUsd = joePrice;\\n            _getBMCJFarmInfo(\\n                avaxPrice,\\n                globalInfo.joePerSec.mul(joePrice) / PRECISION,\\n                user,\\n                farmInfos[i],\\n                pool,\\n                userInfo\\n            );\\n        }\\n\\n        return farmInfos;\\n    }\\n\\n    /// @notice Helper function to return the farm info of a given pool of BMCJ\\n    /// @param avaxPrice The avax price as a parameter to save gas\\n    /// @param UsdPerSec The Usd per sec emitted to BMCJ\\n    /// @param userAddress The address of the user\\n    /// @param farmInfo The farmInfo of that pool\\n    /// @param user The user information\\n    function _getBMCJFarmInfo(\\n        uint256 avaxPrice,\\n        uint256 UsdPerSec,\\n        address userAddress,\\n        FarmInfoBMCJ memory farmInfo,\\n        IBoostedMasterchef.PoolInfo memory pool,\\n        IBoostedMasterchef.UserInfo memory user\\n    ) private view {\\n        {\\n            IJoePair lpToken = IJoePair(address(pool.lpToken));\\n            IERC20 token0 = IERC20(lpToken.token0());\\n            IERC20 token1 = IERC20(lpToken.token1());\\n\\n            farmInfo.allocPoint = pool.allocPoint;\\n            farmInfo.lpAddress = address(lpToken);\\n            farmInfo.token0Address = address(token0);\\n            farmInfo.token1Address = address(token1);\\n            farmInfo.token0Symbol = token0.safeSymbol();\\n            farmInfo.token1Symbol = token1.safeSymbol();\\n            farmInfo.reserveUsd = _getDerivedAvaxLiquidityOfPair(lpToken).mul(avaxPrice) / PRECISION;\\n            // LP is in 18 decimals, so it's already scaled for JLP\\n            farmInfo.totalSupplyScaled = lpToken.totalSupply();\\n            farmInfo.chefBalanceScaled = pool.totalLpSupply;\\n            farmInfo.userLp = user.amount;\\n            farmInfo.veJoeShareBp = pool.veJoeShareBp;\\n            (farmInfo.userPendingJoe, , , ) = bmcj.pendingTokens(farmInfo.id, userAddress);\\n        }\\n\\n        if (\\n            pool.totalLpSupply != 0 &&\\n            farmInfo.totalSupplyScaled != 0 &&\\n            farmInfo.chefTotalAlloc != 0 &&\\n            farmInfo.reserveUsd != 0\\n        ) {\\n            uint256 poolUsdPerYear = UsdPerSec.mul(pool.allocPoint).mul(SEC_PER_YEAR) / farmInfo.chefTotalAlloc;\\n\\n            uint256 poolReserveUsd = farmInfo.reserveUsd.mul(farmInfo.chefBalanceScaled) / farmInfo.totalSupplyScaled;\\n\\n            if (poolReserveUsd == 0) return;\\n\\n            farmInfo.baseApr =\\n                poolUsdPerYear.mul(BP_PRECISION - pool.veJoeShareBp).mul(PRECISION) /\\n                poolReserveUsd /\\n                BP_PRECISION;\\n\\n            if (pool.totalFactor != 0) {\\n                farmInfo.averageBoostedApr =\\n                    poolUsdPerYear.mul(pool.veJoeShareBp).mul(PRECISION) /\\n                    poolReserveUsd /\\n                    BP_PRECISION;\\n\\n                if (user.amount != 0 && user.factor != 0) {\\n                    uint256 userLpUsd = user.amount.mul(farmInfo.reserveUsd) / pool.totalLpSupply;\\n\\n                    farmInfo.userBoostedApr =\\n                        poolUsdPerYear.mul(pool.veJoeShareBp).mul(user.factor).div(pool.totalFactor).mul(PRECISION) /\\n                        userLpUsd /\\n                        BP_PRECISION;\\n\\n                    farmInfo.userFactorShare = user.factor.mul(PRECISION) / pool.totalFactor;\\n                }\\n            }\\n        }\\n    }\\n}\\n\",\"keccak256\":\"0x93f525a9c2a0119a9aff852479f9f112f71f9ed66fb17424318768dadb32439a\",\"license\":\"MIT\"},\"contracts/traderjoe/interfaces/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity >=0.5.0;\\n\\ninterface IERC20Joe {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function name() external view returns (string memory);\\n\\n    function symbol() external view returns (string memory);\\n\\n    function decimals() external view returns (uint8);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function balanceOf(address owner) external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 value\\n    ) external returns (bool);\\n}\\n\",\"keccak256\":\"0xd5d59683ac059dc8c7a528d9243a0434d727bcddd4e477d4b26d50ae4f78ea05\",\"license\":\"GPL-3.0\"},\"contracts/traderjoe/interfaces/IJoeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity >=0.5.0;\\n\\ninterface IJoeERC20 {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function name() external pure returns (string memory);\\n\\n    function symbol() external pure returns (string memory);\\n\\n    function decimals() external pure returns (uint8);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function balanceOf(address owner) external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 value\\n    ) external returns (bool);\\n\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\\n\\n    function nonces(address owner) external view returns (uint256);\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n}\\n\",\"keccak256\":\"0x0f9b1de8137e61afcf2c09fde27dc657da98b7c19c1811fd205ffbe877490d36\",\"license\":\"GPL-3.0\"},\"contracts/traderjoe/interfaces/IJoeFactory.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity >=0.5.0;\\n\\ninterface IJoeFactory {\\n    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);\\n\\n    function feeTo() external view returns (address);\\n\\n    function feeToSetter() external view returns (address);\\n\\n    function migrator() external view returns (address);\\n\\n    function getPair(address tokenA, address tokenB) external view returns (address pair);\\n\\n    function allPairs(uint256) external view returns (address pair);\\n\\n    function allPairsLength() external view returns (uint256);\\n\\n    function createPair(address tokenA, address tokenB) external returns (address pair);\\n\\n    function setFeeTo(address) external;\\n\\n    function setFeeToSetter(address) external;\\n\\n    function setMigrator(address) external;\\n}\\n\",\"keccak256\":\"0x0e31007ead341ae106c1ca874629b527886427f7f47641d96e0d172720f2c3ca\",\"license\":\"GPL-3.0\"},\"contracts/traderjoe/interfaces/IJoePair.sol\":{\"content\":\"// SPDX-License-Identifier: GPL-3.0\\n\\npragma solidity >=0.5.0;\\n\\ninterface IJoePair {\\n    event Approval(address indexed owner, address indexed spender, uint256 value);\\n    event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n    function name() external pure returns (string memory);\\n\\n    function symbol() external pure returns (string memory);\\n\\n    function decimals() external pure returns (uint8);\\n\\n    function totalSupply() external view returns (uint256);\\n\\n    function balanceOf(address owner) external view returns (uint256);\\n\\n    function allowance(address owner, address spender) external view returns (uint256);\\n\\n    function approve(address spender, uint256 value) external returns (bool);\\n\\n    function transfer(address to, uint256 value) external returns (bool);\\n\\n    function transferFrom(\\n        address from,\\n        address to,\\n        uint256 value\\n    ) external returns (bool);\\n\\n    function DOMAIN_SEPARATOR() external view returns (bytes32);\\n\\n    function PERMIT_TYPEHASH() external pure returns (bytes32);\\n\\n    function nonces(address owner) external view returns (uint256);\\n\\n    function permit(\\n        address owner,\\n        address spender,\\n        uint256 value,\\n        uint256 deadline,\\n        uint8 v,\\n        bytes32 r,\\n        bytes32 s\\n    ) external;\\n\\n    event Mint(address indexed sender, uint256 amount0, uint256 amount1);\\n    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);\\n    event Swap(\\n        address indexed sender,\\n        uint256 amount0In,\\n        uint256 amount1In,\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address indexed to\\n    );\\n    event Sync(uint112 reserve0, uint112 reserve1);\\n\\n    function MINIMUM_LIQUIDITY() external pure returns (uint256);\\n\\n    function factory() external view returns (address);\\n\\n    function token0() external view returns (address);\\n\\n    function token1() external view returns (address);\\n\\n    function getReserves()\\n        external\\n        view\\n        returns (\\n            uint112 reserve0,\\n            uint112 reserve1,\\n            uint32 blockTimestampLast\\n        );\\n\\n    function price0CumulativeLast() external view returns (uint256);\\n\\n    function price1CumulativeLast() external view returns (uint256);\\n\\n    function kLast() external view returns (uint256);\\n\\n    function mint(address to) external returns (uint256 liquidity);\\n\\n    function burn(address to) external returns (uint256 amount0, uint256 amount1);\\n\\n    function swap(\\n        uint256 amount0Out,\\n        uint256 amount1Out,\\n        address to,\\n        bytes calldata data\\n    ) external;\\n\\n    function skim(address to) external;\\n\\n    function sync() external;\\n\\n    function initialize(address, address) external;\\n}\\n\",\"keccak256\":\"0xd4d926f79ca1de45dc3f8a7e8244d62a54522cb1a3f38d881979319363ee1387\",\"license\":\"GPL-3.0\"}},\"version\":1}",
  "bytecode": "0x6102006040523480156200001257600080fd5b50604051620034e0380380620034e0833981016040819052620000359162000285565b6001600160601b031960608a811b821660805289811b821660a05288811b821660c05287811b821660e05286811b82166101005285811b82166101205284811b82166101405283811b82166101605282901b16610180526040805163d21220a760e01b815290516001600160a01b038a811692908a169163d21220a791600480820192602092909190829003018186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010e91906200025f565b6001600160a01b03161415156101a081151560f81b81525050876001600160a01b0316866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016b57600080fd5b505afa15801562000180573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a691906200025f565b6001600160a01b03161415156101c081151560f81b81525050876001600160a01b0316856001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020357600080fd5b505afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e91906200025f565b6001600160a01b03161460f81b6101e0525062000374975050505050505050565b60006020828403121562000271578081fd5b81516200027e816200035b565b9392505050565b60008060008060008060008060006101208a8c031215620002a4578485fd5b8951620002b1816200035b565b60208b0151909950620002c4816200035b565b60408b0151909850620002d7816200035b565b60608b0151909750620002ea816200035b565b60808b0151909650620002fd816200035b565b60a08b015190955062000310816200035b565b60c08b015190945062000323816200035b565b60e08b015190935062000336816200035b565b6101008b01519092506200034a816200035b565b809150509295985092959850929598565b6001600160a01b03811681146200037157600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160f81c6101c05160f81c6101e05160f81c61304a62000496600039806109b8525080610a05525080610a4f5250806101f5528061053e52806105d852806108635280610ebf5280610eee5280610f8452806119f552508061023d528061040a52806104a452806106a352806107c15250806102e95280610370528061067152806106f452806107865250806107605280610aeb52508061073c528061099752508061091a52806109e45250806107185280610a2e5250806102195280610a8a5280610b1a5280611dcd52508061028f528061083d52806108d2525061304a6000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a38466e11610097578063cff5dd3311610066578063cff5dd33146101b0578063d02641a0146101b8578063eee5c276146101d8578063f97a496c146101eb576100f5565b80638a38466e146101605780639bbf1deb14610168578063b985a3a014610188578063ce7a198914610190576100f5565b806335541641116100d357806335541641146101285780634e57afe014610148578063685f02e71461015057806387dabe4614610158576100f5565b80630d1dcd9a146100fa578063117be4c2146101185780632c9e2b0514610120575b600080fd5b6101026101f3565b60405161010f9190612bc4565b60405180910390f35b610102610217565b61010261023b565b61013b610136366004612543565b61025f565b60405161010f9190612eb3565b6101026106f2565b610102610716565b61010261073a565b61010261075e565b61017b610176366004612650565b610782565b60405161010f9190612d6b565b61010261083b565b6101a361019e3660046125ed565b61085f565b60405161010f9190612bf2565b610102610918565b6101cb6101c636600461250b565b61093c565b60405161010f9190612f70565b6101cb6101e636600461250b565b61096b565b6101cb61097c565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61026761219a565b61026f61219a565b600061027961098b565b90506000670de0b6b3a76400006102b9836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b90610c41565b816102c057fe5b838552046020808501829052604080516317caf6f160e01b815290519293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926317caf6f192600480840193919291829003018186803b15801561032d57600080fd5b505afa158015610341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610365919061285d565b8360400181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156103c757600080fd5b505afa1580156103db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ff919061285d565b8360a00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561046157600080fd5b505afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610499919061285d565b8360600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610533919061285d565b8360c00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd919061285d565b8360800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b15801561062f57600080fd5b505afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610667919061285d565b60e08401526106987f0000000000000000000000000000000000000000000000000000000000000000838d8d610c78565b6101008401526106ca7f0000000000000000000000000000000000000000000000000000000000000000838b8b610c78565b6101208401526106dd8282878a8a610ea8565b61014084015250909998505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614806107f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b61081a5760405162461bcd60e51b815260040161081190612e12565b60405180910390fd5b600061082461098b565b905061083285828686610c78565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316146108b25760405162461bcd60e51b815260040161081190612dae565b60006108bc61098b565b90506000670de0b6b3a76400006108f6836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b816108fd57fe5b04905061090d8282888888610ea8565b979650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000670de0b6b3a764000061095b61095261098b565b6102b385610a86565b8161096257fe5b0490505b919050565b600061097682610a86565b92915050565b600061098661098b565b905090565b60006003610a796109dc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a73610a297f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a737f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b9061145a565b81610a8057fe5b04905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610ad15750670de0b6b3a7640000610966565b60405163e6a4390560e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590610b429086907f000000000000000000000000000000000000000000000000000000000000000090600401612bd8565b60206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b929190612527565b90506001600160a01b038116610bac576000915050610966565b610c3a81826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c219190612527565b6001600160a01b0316856001600160a01b0316146112b5565b9392505050565b6000811580610c5c57505080820282828281610c5957fe5b04145b6109765760405162461bcd60e51b815260040161081190612e83565b606081818167ffffffffffffffff81118015610c9357600080fd5b50604051908082528060200260200182016040528015610ccd57816020015b610cba6121f4565b815260200190600190039081610cb25790505b5090506000876001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0b57600080fd5b505afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d43919061285d565b90506000886001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db8919061285d565b905060005b84811015610e9a576000888883818110610dd357fe5b905060200201359050610de4612280565b604051631526fe2760e01b81526001600160a01b038d1690631526fe2790610e10908590600401612f70565b60806040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6091906126d6565b9050610e798c8c84846000015185602001518a8a61147d565b868481518110610e8557fe5b60209081029190910101525050600101610dbd565b509198975050505050505050565b6060610eb26122b1565b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d919061285d565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610fdb57600080fd5b505afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611013919061285d565b905290508260608167ffffffffffffffff8111801561103157600080fd5b5060405190808252806020026020018201604052801561106b57816020015b6110586122db565b8152602001906001900390816110505790505b50905060005b828110156112a857600087878381811061108757fe5b90506020020135905061109861239f565b8551604051631526fe2760e01b81526001600160a01b0390911690631526fe27906110c7908590600401612f70565b6101206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612728565b90506111226123eb565b86516040516393f1a40b60e01b81526001600160a01b03909116906393f1a40b906111539086908f90600401612f79565b60606040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a391906127cc565b9050828585815181106111b257fe5b602090810291909101015152865185518690869081106111ce57fe5b602002602001015161012001906001600160a01b031690816001600160a01b031681525050866020015185858151811061120457fe5b6020026020010151610160018181525050866040015185858151811061122657fe5b60200260200101516101800181815250508b85858151811061124457fe5b602002602001015161020001818152505061129d8d670de0b6b3a76400006112798f8b60400151610c4190919063ffffffff16565b8161128057fe5b048d88888151811061128e57fe5b602002602001015186866117c7565b505050600101611071565b5098975050505050505050565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156112f357600080fd5b505afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612809565b506001600160701b031691506001600160701b0316915060006113c6866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b89190612527565b6001600160a01b0316611c96565b60ff1690506000611409876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b60ff16905085156114475761143c83611436866114318661142b87601261145a565b90611d57565b611d7a565b90611d96565b945050505050610976565b61143c84611436856114318561142b8860125b818101818110156109765760405162461bcd60e51b815260040161081190612d7e565b6114856121f4565b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906128d5565b60ff169050600061157c876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611573919061285d565b83601203611d7a565b90506000611608886001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016115af9190612bc4565b60206040518083038186803b1580156115c757600080fd5b505afa1580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff919061285d565b84601203611d7a565b90506000670de0b6b3a76400006116228c6102b38c611dc8565b8161162957fe5b0490506000896001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561166757600080fd5b505afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f9190612527565b905060008a6001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156116dc57600080fd5b505afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117149190612527565b9050604051806101a001604052808d81526020018b81526020018c6001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b0316815260200161176d846001600160a01b03166120c7565b8152602001611784836001600160a01b03166120c7565b81526020018481526020018681526020018f6001600160a01b031681526020018581526020018a8152602001898152509650505050505050979650505050505050565b6000826000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561180b57600080fd5b505afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190612527565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561188057600080fd5b505afa158015611894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b89190612527565b6020808701516001600160601b0316908801526001600160a01b0380851660408901528381166060890181905290821660808901529091506118f9906120c7565b60a08701526119106001600160a01b0382166120c7565b60c0870152670de0b6b3a764000061192b8a6102b386611dc8565b8161193257fe5b048660e0018181525050826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197557600080fd5b505afa158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad919061285d565b61010080880191909152850151610140870152835161022087015260c085015163ffffffff166101e0870152855160405160016232bd9d60e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ffcd426391611a2b91908b90600401612f79565b60006040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7f9190810190612875565b50505061024087015250505061010082015115801590611aa3575061010083015115155b8015611ab3575061016083015115155b8015611ac2575060e083015115155b15611c8e576000836101600151611af76301e133806102b386602001516001600160601b03168a610c4190919063ffffffff16565b81611afe57fe5b0490506000846101000151611b258661014001518760e00151610c4190919063ffffffff16565b81611b2c57fe5b04905080611b3b575050611c8e565b61271081611b6c670de0b6b3a76400006102b38860c0015163ffffffff166127100387610c4190919063ffffffff16565b81611b7357fe5b0481611b7b57fe5b046101a086015260e084015115611c8b5761271081611bb9670de0b6b3a76400006102b38860c0015163ffffffff1687610c4190919063ffffffff16565b81611bc057fe5b0481611bc857fe5b046101c0860152825115801590611be25750604083015115155b15611c8b5761010084015160e0860151845160009291611c029190610c41565b81611c0957fe5b04905061271081611c49670de0b6b3a76400006102b38960e001516114368a604001516102b38d60c0015163ffffffff168c610c4190919063ffffffff16565b81611c5057fe5b0481611c5857fe5b0461026087015260e08501516040850151611c7b90670de0b6b3a7640000610c41565b81611c8257fe5b04610280870152505b50505b505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b03861691611cdd9190612ba8565b600060405180830381855afa9150503d8060008114611d18576040519150601f19603f3d011682016040523d82523d6000602084013e611d1d565b606091505b5091509150818015611d30575080516020145b611d3b576012611d4f565b80806020019051810190611d4f91906128d5565b949350505050565b808203828111156109765760405162461bcd60e51b815260040161081190612de5565b600081611d88575081610976565b610c3a83600a84900a610c41565b6000808211611db75760405162461bcd60e51b815260040161081190612e54565b818381611dc057fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000009050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e629190612809565b506001600160701b031691506001600160701b031691506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eec9190612527565b90506000866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190612527565b90506000611f77836001600160a01b0316611c96565b60ff1690506000611f90836001600160a01b0316611c96565b60ff169050611fa486611431601285611d57565b9550611fb585611431601284611d57565b9450600080886001600160a01b0316866001600160a01b03161415611ff157670de0b6b3a76400009150611fea8b60016112b5565b9050612090565b886001600160a01b0316856001600160a01b03161415612028576120168b60006112b5565b9150670de0b6b3a76400009050612090565b61203186610a86565b915061203c85610a86565b90508161207357670de0b6b3a764000061205b60026102b38a85610c41565b8161206257fe5b049950505050505050505050610966565b8061209057670de0b6b3a764000061205b60026102b38b86610c41565b670de0b6b3a76400006120b06120a68984610c41565b610a738b86610c41565b816120b757fe5b049b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161210e9190612ba8565b600060405180830381855afa9150503d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b5091509150818015612161575060008151115b61218657604051806040016040528060038152602001623f3f3f60e81b815250611d4f565b80806020019051810190611d4f91906126a3565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b604051806101a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b604051806102a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b805161097681612fe7565b60008083601f840112612428578182fd5b50813567ffffffffffffffff81111561243f578182fd5b602083019150836020808302850101111561245957600080fd5b9250929050565b600082601f830112612470578081fd5b815167ffffffffffffffff811115612486578182fd5b612499601f8201601f1916602001612f90565b91508082528360208285010111156124b057600080fd5b6124c1816020840160208601612fb7565b5092915050565b805163ffffffff8116811461097657600080fd5b805167ffffffffffffffff8116811461097657600080fd5b80516001600160601b038116811461097657600080fd5b60006020828403121561251c578081fd5b8135610c3a81612fe7565b600060208284031215612538578081fd5b8151610c3a81612fe7565b60008060008060008060006080888a03121561255d578283fd5b873567ffffffffffffffff80821115612574578485fd5b6125808b838c01612417565b909950975060208a0135915080821115612598578485fd5b6125a48b838c01612417565b909750955060408a01359150808211156125bc578485fd5b506125c98a828b01612417565b90945092505060608801356125dd81612fe7565b8091505092959891949750929550565b60008060008060608587031215612602578384fd5b843561260d81612fe7565b9350602085013561261d81612fe7565b9250604085013567ffffffffffffffff811115612638578283fd5b61264487828801612417565b95989497509550505050565b600080600060408486031215612664578283fd5b833561266f81612fe7565b9250602084013567ffffffffffffffff81111561268a578283fd5b61269686828701612417565b9497909650939450505050565b6000602082840312156126b4578081fd5b815167ffffffffffffffff8111156126ca578182fd5b611d4f84828501612460565b6000608082840312156126e7578081fd5b6126f16080612f90565b82516126fc81612fe7565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012080838503121561273b578182fd5b61274481612f90565b9050612750848461240c565b815261275f84602085016124f4565b6020820152604083015160408201526060830151606082015261278584608085016124dc565b60808201526127978460a0850161240c565b60a08201526127a98460c085016124c8565b60c082015260e08381015190820152610100928301519281019290925250919050565b6000606082840312156127dd578081fd5b6127e76060612f90565b8251815260208301516020820152604083015160408201528091505092915050565b60008060006060848603121561281d578081fd5b835161282881612fff565b602085015190935061283981612fff565b604085015190925063ffffffff81168114612852578182fd5b809150509250925092565b60006020828403121561286e578081fd5b5051919050565b6000806000806080858703121561288a578182fd5b84519350602085015161289c81612fe7565b604086015190935067ffffffffffffffff8111156128b8578283fd5b6128c487828801612460565b606096909601519497939650505050565b6000602082840312156128e6578081fd5b815160ff81168114610c3a578182fd5b6001600160a01b03169052565b6000815180845260208085018081965082840281019150828601855b85811015612a6557828403895281516102a081518652868201518787015260408083015161294f828901826128f6565b5050606080830151612963828901826128f6565b5050608080830151612977828901826128f6565b505060a080830151828289015261299083890182612b7c565b9250505060c080830151878303828901526129ab8382612b7c565b9250505060e0808301518188015250610100808301518188015250610120808301516129d9828901826128f6565b50506101408281015190870152610160808301519087015261018080830151908701526101a080830151908701526101c080830151908701526101e080830151908701526102008083015190870152610220808301519087015261024080830151908701526102608083015190870152610280918201519190950152978401979084019060010161291f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015612a6557828403895281516101a0815186528682015187870152604080830151612abe828901826128f6565b5050606080830151612ad2828901826128f6565b5050608080830151612ae6828901826128f6565b505060a0808301518282890152612aff83890182612b7c565b9250505060c08083015187830382890152612b1a8382612b7c565b9250505060e080830151818801525061010080830151818801525061012080830151612b48828901826128f6565b5050610140828101519087015261016080830151908701526101809182015191909501529784019790840190600101612a8e565b60008151808452612b94816020860160208601612fb7565b601f01601f19169290920160200192915050565b60008251612bba818460208701612fb7565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015612d5d57603f1989840301855281516102a081518552888201518986015287820151612c48898701826128f6565b50606080830151612c5b828801826128f6565b5050608080830151612c6f828801826128f6565b505060a0808301518282880152612c8883880182612b7c565b9250505060c08083015186830382880152612ca38382612b7c565b9250505060e080830151818701525061010080830151818701525061012080830151612cd1828801826128f6565b50506101408281015190860152610160808301519086015261018080830151908601526101a080830151908601526101c080830151908601526101e0808301519086015261020080830151908601526102208083015190860152610240808301519086015261026080830151908601526102809182015191909401529386019390860190600101612c16565b509098975050505050505050565b600060208252610c3a6020830184612a72565b602080825260169082015275536166654d6174683a20416464204f766572666c6f7760501b604082015260600190565b60208082526019908201527f4661726d4c656e7356323a204f6e6c7920666f7220424d434a00000000000000604082015260600190565b602080825260139082015272536166654d6174683a20556e646572666c6f7760681b604082015260600190565b60208082526022908201527f4661726d4c656e7356323a206f6e6c7920666f72204d43563220616e64204d43604082015261563360f01b606082015260800190565b602080825260159082015274536166654d6174683a20446976206279205a65726f60581b604082015260600190565b602080825260169082015275536166654d6174683a204d756c204f766572666c6f7760501b604082015260600190565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008181850152808501519150506101606101208181860152612f29610180860184612a72565b9250808601519050601f19610140818786030181880152612f4a8584612a72565b908801518782039092018488015293509050612f668382612903565b9695505050505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715612faf57600080fd5b604052919050565b60005b83811015612fd2578181015183820152602001612fba565b83811115612fe1576000848401525b50505050565b6001600160a01b0381168114612ffc57600080fd5b50565b6001600160701b0381168114612ffc57600080fdfea26469706673582212203983aa55900a9760eadb8c17e41a9090e6945d3e4e8842df70b5c141f517dd2c64736f6c634300060c0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638a38466e11610097578063cff5dd3311610066578063cff5dd33146101b0578063d02641a0146101b8578063eee5c276146101d8578063f97a496c146101eb576100f5565b80638a38466e146101605780639bbf1deb14610168578063b985a3a014610188578063ce7a198914610190576100f5565b806335541641116100d357806335541641146101285780634e57afe014610148578063685f02e71461015057806387dabe4614610158576100f5565b80630d1dcd9a146100fa578063117be4c2146101185780632c9e2b0514610120575b600080fd5b6101026101f3565b60405161010f9190612bc4565b60405180910390f35b610102610217565b61010261023b565b61013b610136366004612543565b61025f565b60405161010f9190612eb3565b6101026106f2565b610102610716565b61010261073a565b61010261075e565b61017b610176366004612650565b610782565b60405161010f9190612d6b565b61010261083b565b6101a361019e3660046125ed565b61085f565b60405161010f9190612bf2565b610102610918565b6101cb6101c636600461250b565b61093c565b60405161010f9190612f70565b6101cb6101e636600461250b565b61096b565b6101cb61097c565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61026761219a565b61026f61219a565b600061027961098b565b90506000670de0b6b3a76400006102b9836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b90610c41565b816102c057fe5b838552046020808501829052604080516317caf6f160e01b815290519293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926317caf6f192600480840193919291829003018186803b15801561032d57600080fd5b505afa158015610341573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610365919061285d565b8360400181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156103c757600080fd5b505afa1580156103db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ff919061285d565b8360a00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561046157600080fd5b505afa158015610475573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610499919061285d565b8360600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fb57600080fd5b505afa15801561050f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610533919061285d565b8360c00181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561059557600080fd5b505afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd919061285d565b8360800181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b15801561062f57600080fd5b505afa158015610643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610667919061285d565b60e08401526106987f0000000000000000000000000000000000000000000000000000000000000000838d8d610c78565b6101008401526106ca7f0000000000000000000000000000000000000000000000000000000000000000838b8b610c78565b6101208401526106dd8282878a8a610ea8565b61014084015250909998505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614806107f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316145b61081a5760405162461bcd60e51b815260040161081190612e12565b60405180910390fd5b600061082461098b565b905061083285828686610c78565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316146108b25760405162461bcd60e51b815260040161081190612dae565b60006108bc61098b565b90506000670de0b6b3a76400006108f6836102b37f0000000000000000000000000000000000000000000000000000000000000000610a86565b816108fd57fe5b04905061090d8282888888610ea8565b979650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000670de0b6b3a764000061095b61095261098b565b6102b385610a86565b8161096257fe5b0490505b919050565b600061097682610a86565b92915050565b600061098661098b565b905090565b60006003610a796109dc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a73610a297f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b610a737f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006112b5565b9061145a565b81610a8057fe5b04905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415610ad15750670de0b6b3a7640000610966565b60405163e6a4390560e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590610b429086907f000000000000000000000000000000000000000000000000000000000000000090600401612bd8565b60206040518083038186803b158015610b5a57600080fd5b505afa158015610b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b929190612527565b90506001600160a01b038116610bac576000915050610966565b610c3a81826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610be957600080fd5b505afa158015610bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c219190612527565b6001600160a01b0316856001600160a01b0316146112b5565b9392505050565b6000811580610c5c57505080820282828281610c5957fe5b04145b6109765760405162461bcd60e51b815260040161081190612e83565b606081818167ffffffffffffffff81118015610c9357600080fd5b50604051908082528060200260200182016040528015610ccd57816020015b610cba6121f4565b815260200190600190039081610cb25790505b5090506000876001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0b57600080fd5b505afa158015610d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d43919061285d565b90506000886001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8057600080fd5b505afa158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db8919061285d565b905060005b84811015610e9a576000888883818110610dd357fe5b905060200201359050610de4612280565b604051631526fe2760e01b81526001600160a01b038d1690631526fe2790610e10908590600401612f70565b60806040518083038186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6091906126d6565b9050610e798c8c84846000015185602001518a8a61147d565b868481518110610e8557fe5b60209081029190910101525050600101610dbd565b509198975050505050505050565b6060610eb26122b1565b60405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d919061285d565b81526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca418d236040518163ffffffff1660e01b815260040160206040518083038186803b158015610fdb57600080fd5b505afa158015610fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611013919061285d565b905290508260608167ffffffffffffffff8111801561103157600080fd5b5060405190808252806020026020018201604052801561106b57816020015b6110586122db565b8152602001906001900390816110505790505b50905060005b828110156112a857600087878381811061108757fe5b90506020020135905061109861239f565b8551604051631526fe2760e01b81526001600160a01b0390911690631526fe27906110c7908590600401612f70565b6101206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612728565b90506111226123eb565b86516040516393f1a40b60e01b81526001600160a01b03909116906393f1a40b906111539086908f90600401612f79565b60606040518083038186803b15801561116b57600080fd5b505afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a391906127cc565b9050828585815181106111b257fe5b602090810291909101015152865185518690869081106111ce57fe5b602002602001015161012001906001600160a01b031690816001600160a01b031681525050866020015185858151811061120457fe5b6020026020010151610160018181525050866040015185858151811061122657fe5b60200260200101516101800181815250508b85858151811061124457fe5b602002602001015161020001818152505061129d8d670de0b6b3a76400006112798f8b60400151610c4190919063ffffffff16565b8161128057fe5b048d88888151811061128e57fe5b602002602001015186866117c7565b505050600101611071565b5098975050505050505050565b6000806000846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156112f357600080fd5b505afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612809565b506001600160701b031691506001600160701b0316915060006113c6866001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b505afa158015611394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b89190612527565b6001600160a01b0316611c96565b60ff1690506000611409876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561138057600080fd5b60ff16905085156114475761143c83611436866114318661142b87601261145a565b90611d57565b611d7a565b90611d96565b945050505050610976565b61143c84611436856114318561142b8860125b818101818110156109765760405162461bcd60e51b815260040161081190612d7e565b6114856121f4565b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c057600080fd5b505afa1580156114d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f891906128d5565b60ff169050600061157c876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153b57600080fd5b505afa15801561154f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611573919061285d565b83601203611d7a565b90506000611608886001600160a01b03166370a082318d6040518263ffffffff1660e01b81526004016115af9190612bc4565b60206040518083038186803b1580156115c757600080fd5b505afa1580156115db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ff919061285d565b84601203611d7a565b90506000670de0b6b3a76400006116228c6102b38c611dc8565b8161162957fe5b0490506000896001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561166757600080fd5b505afa15801561167b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169f9190612527565b905060008a6001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156116dc57600080fd5b505afa1580156116f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117149190612527565b9050604051806101a001604052808d81526020018b81526020018c6001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b0316815260200161176d846001600160a01b03166120c7565b8152602001611784836001600160a01b03166120c7565b81526020018481526020018681526020018f6001600160a01b031681526020018581526020018a8152602001898152509650505050505050979650505050505050565b6000826000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561180b57600080fd5b505afa15801561181f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118439190612527565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561188057600080fd5b505afa158015611894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b89190612527565b6020808701516001600160601b0316908801526001600160a01b0380851660408901528381166060890181905290821660808901529091506118f9906120c7565b60a08701526119106001600160a01b0382166120c7565b60c0870152670de0b6b3a764000061192b8a6102b386611dc8565b8161193257fe5b048660e0018181525050826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561197557600080fd5b505afa158015611989573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ad919061285d565b61010080880191909152850151610140870152835161022087015260c085015163ffffffff166101e0870152855160405160016232bd9d60e01b031981526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ffcd426391611a2b91908b90600401612f79565b60006040518083038186803b158015611a4357600080fd5b505afa158015611a57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a7f9190810190612875565b50505061024087015250505061010082015115801590611aa3575061010083015115155b8015611ab3575061016083015115155b8015611ac2575060e083015115155b15611c8e576000836101600151611af76301e133806102b386602001516001600160601b03168a610c4190919063ffffffff16565b81611afe57fe5b0490506000846101000151611b258661014001518760e00151610c4190919063ffffffff16565b81611b2c57fe5b04905080611b3b575050611c8e565b61271081611b6c670de0b6b3a76400006102b38860c0015163ffffffff166127100387610c4190919063ffffffff16565b81611b7357fe5b0481611b7b57fe5b046101a086015260e084015115611c8b5761271081611bb9670de0b6b3a76400006102b38860c0015163ffffffff1687610c4190919063ffffffff16565b81611bc057fe5b0481611bc857fe5b046101c0860152825115801590611be25750604083015115155b15611c8b5761010084015160e0860151845160009291611c029190610c41565b81611c0957fe5b04905061271081611c49670de0b6b3a76400006102b38960e001516114368a604001516102b38d60c0015163ffffffff168c610c4190919063ffffffff16565b81611c5057fe5b0481611c5857fe5b0461026087015260e08501516040850151611c7b90670de0b6b3a7640000610c41565b81611c8257fe5b04610280870152505b50505b505050505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b03861691611cdd9190612ba8565b600060405180830381855afa9150503d8060008114611d18576040519150601f19603f3d011682016040523d82523d6000602084013e611d1d565b606091505b5091509150818015611d30575080516020145b611d3b576012611d4f565b80806020019051810190611d4f91906128d5565b949350505050565b808203828111156109765760405162461bcd60e51b815260040161081190612de5565b600081611d88575081610976565b610c3a83600a84900a610c41565b6000808211611db75760405162461bcd60e51b815260040161081190612e54565b818381611dc057fe5b049392505050565b6000807f00000000000000000000000000000000000000000000000000000000000000009050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611e2a57600080fd5b505afa158015611e3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e629190612809565b506001600160701b031691506001600160701b031691506000856001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eec9190612527565b90506000866001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190612527565b90506000611f77836001600160a01b0316611c96565b60ff1690506000611f90836001600160a01b0316611c96565b60ff169050611fa486611431601285611d57565b9550611fb585611431601284611d57565b9450600080886001600160a01b0316866001600160a01b03161415611ff157670de0b6b3a76400009150611fea8b60016112b5565b9050612090565b886001600160a01b0316856001600160a01b03161415612028576120168b60006112b5565b9150670de0b6b3a76400009050612090565b61203186610a86565b915061203c85610a86565b90508161207357670de0b6b3a764000061205b60026102b38a85610c41565b8161206257fe5b049950505050505050505050610966565b8061209057670de0b6b3a764000061205b60026102b38b86610c41565b670de0b6b3a76400006120b06120a68984610c41565b610a738b86610c41565b816120b757fe5b049b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161210e9190612ba8565b600060405180830381855afa9150503d8060008114612149576040519150601f19603f3d011682016040523d82523d6000602084013e61214e565b606091505b5091509150818015612161575060008151115b61218657604051806040016040528060038152602001623f3f3f60e81b815250611d4f565b80806020019051810190611d4f91906126a3565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b604051806101a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b604051806102a00160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b60405180606001604052806000815260200160008152602001600081525090565b805161097681612fe7565b60008083601f840112612428578182fd5b50813567ffffffffffffffff81111561243f578182fd5b602083019150836020808302850101111561245957600080fd5b9250929050565b600082601f830112612470578081fd5b815167ffffffffffffffff811115612486578182fd5b612499601f8201601f1916602001612f90565b91508082528360208285010111156124b057600080fd5b6124c1816020840160208601612fb7565b5092915050565b805163ffffffff8116811461097657600080fd5b805167ffffffffffffffff8116811461097657600080fd5b80516001600160601b038116811461097657600080fd5b60006020828403121561251c578081fd5b8135610c3a81612fe7565b600060208284031215612538578081fd5b8151610c3a81612fe7565b60008060008060008060006080888a03121561255d578283fd5b873567ffffffffffffffff80821115612574578485fd5b6125808b838c01612417565b909950975060208a0135915080821115612598578485fd5b6125a48b838c01612417565b909750955060408a01359150808211156125bc578485fd5b506125c98a828b01612417565b90945092505060608801356125dd81612fe7565b8091505092959891949750929550565b60008060008060608587031215612602578384fd5b843561260d81612fe7565b9350602085013561261d81612fe7565b9250604085013567ffffffffffffffff811115612638578283fd5b61264487828801612417565b95989497509550505050565b600080600060408486031215612664578283fd5b833561266f81612fe7565b9250602084013567ffffffffffffffff81111561268a578283fd5b61269686828701612417565b9497909650939450505050565b6000602082840312156126b4578081fd5b815167ffffffffffffffff8111156126ca578182fd5b611d4f84828501612460565b6000608082840312156126e7578081fd5b6126f16080612f90565b82516126fc81612fe7565b808252506020830151602082015260408301516040820152606083015160608201528091505092915050565b600061012080838503121561273b578182fd5b61274481612f90565b9050612750848461240c565b815261275f84602085016124f4565b6020820152604083015160408201526060830151606082015261278584608085016124dc565b60808201526127978460a0850161240c565b60a08201526127a98460c085016124c8565b60c082015260e08381015190820152610100928301519281019290925250919050565b6000606082840312156127dd578081fd5b6127e76060612f90565b8251815260208301516020820152604083015160408201528091505092915050565b60008060006060848603121561281d578081fd5b835161282881612fff565b602085015190935061283981612fff565b604085015190925063ffffffff81168114612852578182fd5b809150509250925092565b60006020828403121561286e578081fd5b5051919050565b6000806000806080858703121561288a578182fd5b84519350602085015161289c81612fe7565b604086015190935067ffffffffffffffff8111156128b8578283fd5b6128c487828801612460565b606096909601519497939650505050565b6000602082840312156128e6578081fd5b815160ff81168114610c3a578182fd5b6001600160a01b03169052565b6000815180845260208085018081965082840281019150828601855b85811015612a6557828403895281516102a081518652868201518787015260408083015161294f828901826128f6565b5050606080830151612963828901826128f6565b5050608080830151612977828901826128f6565b505060a080830151828289015261299083890182612b7c565b9250505060c080830151878303828901526129ab8382612b7c565b9250505060e0808301518188015250610100808301518188015250610120808301516129d9828901826128f6565b50506101408281015190870152610160808301519087015261018080830151908701526101a080830151908701526101c080830151908701526101e080830151908701526102008083015190870152610220808301519087015261024080830151908701526102608083015190870152610280918201519190950152978401979084019060010161291f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015612a6557828403895281516101a0815186528682015187870152604080830151612abe828901826128f6565b5050606080830151612ad2828901826128f6565b5050608080830151612ae6828901826128f6565b505060a0808301518282890152612aff83890182612b7c565b9250505060c08083015187830382890152612b1a8382612b7c565b9250505060e080830151818801525061010080830151818801525061012080830151612b48828901826128f6565b5050610140828101519087015261016080830151908701526101809182015191909501529784019790840190600101612a8e565b60008151808452612b94816020860160208601612fb7565b601f01601f19169290920160200192915050565b60008251612bba818460208701612fb7565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015612d5d57603f1989840301855281516102a081518552888201518986015287820151612c48898701826128f6565b50606080830151612c5b828801826128f6565b5050608080830151612c6f828801826128f6565b505060a0808301518282880152612c8883880182612b7c565b9250505060c08083015186830382880152612ca38382612b7c565b9250505060e080830151818701525061010080830151818701525061012080830151612cd1828801826128f6565b50506101408281015190860152610160808301519086015261018080830151908601526101a080830151908601526101c080830151908601526101e0808301519086015261020080830151908601526102208083015190860152610240808301519086015261026080830151908601526102809182015191909401529386019390860190600101612c16565b509098975050505050505050565b600060208252610c3a6020830184612a72565b602080825260169082015275536166654d6174683a20416464204f766572666c6f7760501b604082015260600190565b60208082526019908201527f4661726d4c656e7356323a204f6e6c7920666f7220424d434a00000000000000604082015260600190565b602080825260139082015272536166654d6174683a20556e646572666c6f7760681b604082015260600190565b60208082526022908201527f4661726d4c656e7356323a206f6e6c7920666f72204d43563220616e64204d43604082015261563360f01b606082015260800190565b602080825260159082015274536166654d6174683a20446976206279205a65726f60581b604082015260600190565b602080825260169082015275536166654d6174683a204d756c204f766572666c6f7760501b604082015260600190565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008181850152808501519150506101606101208181860152612f29610180860184612a72565b9250808601519050601f19610140818786030181880152612f4a8584612a72565b908801518782039092018488015293509050612f668382612903565b9695505050505050565b90815260200190565b9182526001600160a01b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715612faf57600080fd5b604052919050565b60005b83811015612fd2578181015183820152602001612fba565b83811115612fe1576000848401525b50505050565b6001600160a01b0381168114612ffc57600080fd5b50565b6001600160701b0381168114612ffc57600080fdfea26469706673582212203983aa55900a9760eadb8c17e41a9090e6945d3e4e8842df70b5c141f517dd2c64736f6c634300060c0033",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "getAllFarmData(uint256[],uint256[],uint256[],address)": {
        "params": {
          "user": "The address of the user, if address(0), returns global info",
          "whitelistedPidsBMCJ": "Array of all ids of pools that are whitelisted in BMCJ",
          "whitelistedPidsV2": "Array of all ids of pools that are whitelisted in chefV2",
          "whitelistedPidsV3": "Array of all ids of pools that are whitelisted in chefV3"
        },
        "returns": {
          "_0": "AllFarmData The information of all the whitelisted farms of MCV2, MCV3 and BMCJ"
        }
      },
      "getAvaxPrice()": {
        "returns": {
          "_0": "uint256 the avax price, scaled to 18 decimals"
        }
      },
      "getBMCJFarmInfos(address,address,uint256[])": {
        "params": {
          "chef": "The address of the MasterChef",
          "user": "The address of the user, if address(0), returns global info",
          "whitelistedPids": "Array of all ids of pools that are whitelisted and valid to have their farm data returned"
        },
        "returns": {
          "_0": "FarmInfoBMCJ The information of all the whitelisted farms of BMCJ"
        }
      },
      "getDerivedAvaxPriceOfToken(address)": {
        "params": {
          "token": "The address of the token"
        },
        "returns": {
          "_0": "uint256 the token derived price, scaled to 18 decimals"
        }
      },
      "getMCFarmInfos(address,uint256[])": {
        "params": {
          "chef": "The address of the MasterChef",
          "whitelistedPids": "Array of all ids of pools that are whitelisted and valid to have their farm data returned"
        },
        "returns": {
          "_0": "FarmInfo The information of all the whitelisted farms of MCV2 or MCV3"
        }
      },
      "getTokenPrice(address)": {
        "params": {
          "token": "The address of the token"
        },
        "returns": {
          "_0": "uint256 the Usd price of token, scaled to 18 decimals"
        }
      }
    },
    "stateVariables": {
      "SEC_PER_YEAR": {
        "details": "365 * 86400, hard coding it for gas optimisation"
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "getAllFarmData(uint256[],uint256[],uint256[],address)": {
        "notice": "Get all data needed for useFarms hook."
      },
      "getAvaxPrice()": {
        "notice": "Returns the price of avax in Usd"
      },
      "getBMCJFarmInfos(address,address,uint256[])": {
        "notice": "Returns the farm pairs data for BoostedMasterChefJoe"
      },
      "getDerivedAvaxPriceOfToken(address)": {
        "notice": "Returns the derived price of token, it needs to be paired with wavax"
      },
      "getMCFarmInfos(address,uint256[])": {
        "notice": "Returns the farm pairs data for MCV2 and MCV3"
      },
      "getTokenPrice(address)": {
        "notice": "Returns the Usd price of token, it needs to be paired with wavax"
      }
    },
    "version": 1
  },
  "storageLayout": {
    "storage": [],
    "types": null
  }
}