{
  "_format": "hh-sol-artifact-1",
  "contractName": "StakedTokenDataProvider",
  "sourceName": "contracts/misc/StakedTokenDataProvider.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stkPsys",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "ethUsdPriceFeed",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "psysUsdPriceFeed",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ETH_USD_PRICE_FEED",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PSYS_USD_PRICE_FEED",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STAKED_PSYS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAllStakedTokenData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "stkPSYSData",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "ethPrice",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getAllStakedTokenUserData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "stkPSYSData",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardsToClaim",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "cooldownTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "uint216",
              "name": "cooldownAmount",
              "type": "uint216"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenUserData",
          "name": "stkPSYSUserData",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardsToClaim",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "cooldownTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "uint216",
              "name": "cooldownAmount",
              "type": "uint216"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenUserData",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "ethPrice",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stakedAsset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        }
      ],
      "name": "getStakedAssetData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "stakedAssets",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "oracles",
          "type": "address[]"
        }
      ],
      "name": "getStakedAssetDataBatch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData[]",
          "name": "",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stakedAsset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getStakedUserData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardsToClaim",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "cooldownTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "uint216",
              "name": "cooldownAmount",
              "type": "uint216"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenUserData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "stakedAssets",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "oracles",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getStakedUserDataBatch",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData[]",
          "name": "",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardsToClaim",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "cooldownTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "uint216",
              "name": "cooldownAmount",
              "type": "uint216"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenUserData[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "getstkPSYSUserData",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalSupply",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenTotalRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeCooldownSeconds",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeUnstakeWindow",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardTokenPriceEth",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionPerSecond",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "distributionEnd",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakeApy",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentExchangeRate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxSlashablePercentage",
              "type": "uint256"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenData",
          "name": "stkPSYSData",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "stakedTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "underlyingTokenUserBalance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "stakedTokenRedeemableAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "rewardsToClaim",
              "type": "uint256"
            },
            {
              "internalType": "uint40",
              "name": "cooldownTimestamp",
              "type": "uint40"
            },
            {
              "internalType": "uint216",
              "name": "cooldownAmount",
              "type": "uint216"
            }
          ],
          "internalType": "struct IStakedTokenDataProvider.StakedTokenUserData",
          "name": "stkPSYSUserData",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60e060405234801561001057600080fd5b5060405161177238038061177283398101604081905261002f91610068565b6001600160a01b0392831660c0529082166080521660a0526100ab565b80516001600160a01b038116811461006357600080fd5b919050565b60008060006060848603121561007d57600080fd5b6100868461004c565b92506100946020850161004c565b91506100a26040850161004c565b90509250925092565b60805160a05160c05161164561012d600039600081816101b4015281816105560152818161064d015281816106990152818161077d01526107c901526000818160f301526109e201526000818161013201528181610291015281816105770152818161059f0152818161066e015281816106c2015261079e01526116456000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063cca44f0a11610066578063cca44f0a1461016b578063deb660901461018f578063e0fdf79f146101af578063e33db4e2146101d6578063ee4291ce146101f757600080fd5b8063026dc682146100a3578063304fbe0d146100cd578063a54ae44c146100ee578063b0f0abe91461012d578063b7d1a98d14610154575b600080fd5b6100b66100b136600461107c565b61020a565b6040516100c49291906111a7565b60405180910390f35b6100e06100db3660046111e1565b6103a7565b6040516100c49291906112b1565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c4565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b61015c61053f565b6040516100c493929190611316565b61017e610179366004611342565b610626565b6040516100c495949392919061135f565b6101a261019d3660046113a9565b61074d565b6040516100c491906113e2565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6101e96101e4366004611342565b610768565b6040516100c49291906113f1565b6101e961020536600461140e565b6107f5565b606060008483146102365760405162461bcd60e51b815260040161022d90611459565b60405180910390fd5b60008567ffffffffffffffff8111156102515761025161149a565b60405190808252806020026020018201604052801561028a57816020015b610277610f90565b81526020019060019003908161026f5790505b50905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031191906114b0565b905060005b8781101561039957610374898983818110610333576103336114c9565b90506020020160208101906103489190611342565b88888481811061035a5761035a6114c9565b905060200201602081019061036f9190611342565b610825565b838281518110610386576103866114c9565b6020908102919091010152600101610316565b509097909650945050505050565b6060808584146103c95760405162461bcd60e51b815260040161022d90611459565b60008667ffffffffffffffff8111156103e4576103e461149a565b60405190808252806020026020018201604052801561041d57816020015b61040a610f90565b8152602001906001900390816104025790505b50905060008767ffffffffffffffff81111561043b5761043b61149a565b60405190808252806020026020018201604052801561047457816020015b610461610fea565b8152602001906001900390816104595790505b50905060005b88811015610530576104be8a8a83818110610497576104976114c9565b90506020020160208101906104ac9190611342565b89898481811061035a5761035a6114c9565b8382815181106104d0576104d06114c9565b602002602001018190525061050b8a8a838181106104f0576104f06114c9565b90506020020160208101906105059190611342565b87610c6b565b82828151811061051d5761051d6114c9565b602090810291909101015260010161047a565b50909890975095505050505050565b610547610f90565b61054f610f90565b600061059b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610825565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061f91906114b0565b9050909192565b61062e610f90565b610636610fea565b61063e610f90565b610646610fea565b60006106927f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610825565b94506106be7f000000000000000000000000000000000000000000000000000000000000000087610c6b565b93507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074291906114b0565b905091939590929450565b610755610f90565b61075f8383610825565b90505b92915050565b610770610f90565b610778610fea565b6107c27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610825565b91506107ee7f000000000000000000000000000000000000000000000000000000000000000084610c6b565b9050915091565b6107fd610f90565b610805610fea565b61080f8585610825565b6108198685610c6b565b91509150935093915050565b61082d610f90565b6000839050806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089491906114b0565b80835260405163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906114b0565b826020018181525050806001600160a01b031663616e0bf96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096c91906114b0565b826040018181525050806001600160a01b031663359c4a966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906114b0565b8260600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906114b0565b8260a0018181525050806001600160a01b031663919cd40f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd91906114b0565b60e08301819052421015610b5b57604051631e23703160e31b81526001600160a01b0385811660048301526000919083169063f11b818890602401606060405180830381865afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4991906114fb565b50506001600160801b031660c0840152505b8160a00151826080018181525050806001600160a01b031663e6aa216c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190611551565b6001600160d81b031682610120018181525050806001600160a01b031663f34d96da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4091906114b0565b61014083015260c08201518251610120840151610c5e929190610f28565b6101008301525092915050565b610c73610fea565b6040516370a0823160e01b81526001600160a01b0383811660048301528491908216906370a0823190602401602060405180830381865afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce091906114b0565b826000018181525050806001600160a01b031663312f6b836040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b919061156c565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906114b0565b6020830152815160405163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa158015610e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2891906114b0565b604083810191909152516346df7f7160e11b81526001600160a01b038481166004830152821690638dbefee290602401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906114b0565b606083015260405163091030c360e01b81526001600160a01b03848116600483015282169063091030c3906024016040805180830381865afa158015610ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f079190611589565b6001600160d81b031660a084015264ffffffffff1660808301525092915050565b600082600003610f3a57506000610f89565b6000610f4a6301e13380866115c8565b90506000670de0b6b3a7640000610f6185846115c8565b610f6b91906115ed565b905084610f7a612710836115c8565b610f8491906115ed565b925050505b9392505050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600064ffffffffff16815260200160006001600160d81b031681525090565b60008083601f84011261104257600080fd5b50813567ffffffffffffffff81111561105a57600080fd5b6020830191508360208260051b850101111561107557600080fd5b9250929050565b6000806000806040858703121561109257600080fd5b843567ffffffffffffffff8111156110a957600080fd5b6110b587828801611030565b909550935050602085013567ffffffffffffffff8111156110d557600080fd5b6110e187828801611030565b95989497509550505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301525050565b600081518084526020840193506020830160005b8281101561119d576111868683516110ed565b610160959095019460209190910190600101611173565b5093949350505050565b6040815260006111ba604083018561115f565b90508260208301529392505050565b6001600160a01b03811681146111de57600080fd5b50565b6000806000806000606086880312156111f957600080fd5b853567ffffffffffffffff81111561121057600080fd5b61121c88828901611030565b909650945050602086013567ffffffffffffffff81111561123c57600080fd5b61124888828901611030565b909450925050604086013561125c816111c9565b809150509295509295909350565b8051825260208082015190830152604080820151908301526060808201519083015260808082015164ffffffffff169083015260a0908101516001600160d81b0316910152565b6040815260006112c4604083018561115f565b828103602084015280845180835260208301915060208601925060005b8181101561130a576112f483855161126a565b6020939093019260c092909201916001016112e1565b50909695505050505050565b6102e0810161132582866110ed565b6113336101608301856110ed565b826102c0830152949350505050565b60006020828403121561135457600080fd5b8135610f89816111c9565b610460810161136e82886110ed565b61137c61016083018761126a565b61138a6102208301866110ed565b61139861038083018561126a565b826104408301529695505050505050565b600080604083850312156113bc57600080fd5b82356113c7816111c9565b915060208301356113d7816111c9565b809150509250929050565b610160810161076282846110ed565b610220810161140082856110ed565b610f8961016083018461126a565b60008060006060848603121561142357600080fd5b833561142e816111c9565b9250602084013561143e816111c9565b9150604084013561144e816111c9565b809150509250925092565b60208082526021908201527f417272617973206d757374206265206f66207468652073616d65206c656e67746040820152600d60fb1b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156114c257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80516001600160801b03811681146114f657600080fd5b919050565b60008060006060848603121561151057600080fd5b611519846114df565b9250611527602085016114df565b6040949094015192959394509192915050565b80516001600160d81b03811681146114f657600080fd5b60006020828403121561156357600080fd5b61075f8261153a565b60006020828403121561157e57600080fd5b8151610f89816111c9565b6000806040838503121561159c57600080fd5b825164ffffffffff811681146115b157600080fd5b91506115bf6020840161153a565b90509250929050565b808202811582820484141761076257634e487b7160e01b600052601160045260246000fd5b60008261160a57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220bbebb1a91858ef7d908c90ed6bb1ac1d480885988ff4112ce8725d68cd43781864736f6c634300081b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063cca44f0a11610066578063cca44f0a1461016b578063deb660901461018f578063e0fdf79f146101af578063e33db4e2146101d6578063ee4291ce146101f757600080fd5b8063026dc682146100a3578063304fbe0d146100cd578063a54ae44c146100ee578063b0f0abe91461012d578063b7d1a98d14610154575b600080fd5b6100b66100b136600461107c565b61020a565b6040516100c49291906111a7565b60405180910390f35b6100e06100db3660046111e1565b6103a7565b6040516100c49291906112b1565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c4565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b61015c61053f565b6040516100c493929190611316565b61017e610179366004611342565b610626565b6040516100c495949392919061135f565b6101a261019d3660046113a9565b61074d565b6040516100c491906113e2565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6101e96101e4366004611342565b610768565b6040516100c49291906113f1565b6101e961020536600461140e565b6107f5565b606060008483146102365760405162461bcd60e51b815260040161022d90611459565b60405180910390fd5b60008567ffffffffffffffff8111156102515761025161149a565b60405190808252806020026020018201604052801561028a57816020015b610277610f90565b81526020019060019003908161026f5790505b50905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031191906114b0565b905060005b8781101561039957610374898983818110610333576103336114c9565b90506020020160208101906103489190611342565b88888481811061035a5761035a6114c9565b905060200201602081019061036f9190611342565b610825565b838281518110610386576103866114c9565b6020908102919091010152600101610316565b509097909650945050505050565b6060808584146103c95760405162461bcd60e51b815260040161022d90611459565b60008667ffffffffffffffff8111156103e4576103e461149a565b60405190808252806020026020018201604052801561041d57816020015b61040a610f90565b8152602001906001900390816104025790505b50905060008767ffffffffffffffff81111561043b5761043b61149a565b60405190808252806020026020018201604052801561047457816020015b610461610fea565b8152602001906001900390816104595790505b50905060005b88811015610530576104be8a8a83818110610497576104976114c9565b90506020020160208101906104ac9190611342565b89898481811061035a5761035a6114c9565b8382815181106104d0576104d06114c9565b602002602001018190525061050b8a8a838181106104f0576104f06114c9565b90506020020160208101906105059190611342565b87610c6b565b82828151811061051d5761051d6114c9565b602090810291909101015260010161047a565b50909890975095505050505050565b610547610f90565b61054f610f90565b600061059b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610825565b92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061f91906114b0565b9050909192565b61062e610f90565b610636610fea565b61063e610f90565b610646610fea565b60006106927f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610825565b94506106be7f000000000000000000000000000000000000000000000000000000000000000087610c6b565b93507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561071e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074291906114b0565b905091939590929450565b610755610f90565b61075f8383610825565b90505b92915050565b610770610f90565b610778610fea565b6107c27f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610825565b91506107ee7f000000000000000000000000000000000000000000000000000000000000000084610c6b565b9050915091565b6107fd610f90565b610805610fea565b61080f8585610825565b6108198685610c6b565b91509150935093915050565b61082d610f90565b6000839050806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089491906114b0565b80835260405163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090191906114b0565b826020018181525050806001600160a01b031663616e0bf96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610948573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096c91906114b0565b826040018181525050806001600160a01b031663359c4a966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d791906114b0565b8260600181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6291906114b0565b8260a0018181525050806001600160a01b031663919cd40f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd91906114b0565b60e08301819052421015610b5b57604051631e23703160e31b81526001600160a01b0385811660048301526000919083169063f11b818890602401606060405180830381865afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4991906114fb565b50506001600160801b031660c0840152505b8160a00151826080018181525050806001600160a01b031663e6aa216c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb9190611551565b6001600160d81b031682610120018181525050806001600160a01b031663f34d96da6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4091906114b0565b61014083015260c08201518251610120840151610c5e929190610f28565b6101008301525092915050565b610c73610fea565b6040516370a0823160e01b81526001600160a01b0383811660048301528491908216906370a0823190602401602060405180830381865afa158015610cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce091906114b0565b826000018181525050806001600160a01b031663312f6b836040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4b919061156c565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa158015610d93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906114b0565b6020830152815160405163266d6a8360e11b815260048101919091526001600160a01b03821690634cdad50690602401602060405180830381865afa158015610e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2891906114b0565b604083810191909152516346df7f7160e11b81526001600160a01b038481166004830152821690638dbefee290602401602060405180830381865afa158015610e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9991906114b0565b606083015260405163091030c360e01b81526001600160a01b03848116600483015282169063091030c3906024016040805180830381865afa158015610ee3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f079190611589565b6001600160d81b031660a084015264ffffffffff1660808301525092915050565b600082600003610f3a57506000610f89565b6000610f4a6301e13380866115c8565b90506000670de0b6b3a7640000610f6185846115c8565b610f6b91906115ed565b905084610f7a612710836115c8565b610f8491906115ed565b925050505b9392505050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600064ffffffffff16815260200160006001600160d81b031681525090565b60008083601f84011261104257600080fd5b50813567ffffffffffffffff81111561105a57600080fd5b6020830191508360208260051b850101111561107557600080fd5b9250929050565b6000806000806040858703121561109257600080fd5b843567ffffffffffffffff8111156110a957600080fd5b6110b587828801611030565b909550935050602085013567ffffffffffffffff8111156110d557600080fd5b6110e187828801611030565b95989497509550505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008101516101008301526101208101516101208301526101408101516101408301525050565b600081518084526020840193506020830160005b8281101561119d576111868683516110ed565b610160959095019460209190910190600101611173565b5093949350505050565b6040815260006111ba604083018561115f565b90508260208301529392505050565b6001600160a01b03811681146111de57600080fd5b50565b6000806000806000606086880312156111f957600080fd5b853567ffffffffffffffff81111561121057600080fd5b61121c88828901611030565b909650945050602086013567ffffffffffffffff81111561123c57600080fd5b61124888828901611030565b909450925050604086013561125c816111c9565b809150509295509295909350565b8051825260208082015190830152604080820151908301526060808201519083015260808082015164ffffffffff169083015260a0908101516001600160d81b0316910152565b6040815260006112c4604083018561115f565b828103602084015280845180835260208301915060208601925060005b8181101561130a576112f483855161126a565b6020939093019260c092909201916001016112e1565b50909695505050505050565b6102e0810161132582866110ed565b6113336101608301856110ed565b826102c0830152949350505050565b60006020828403121561135457600080fd5b8135610f89816111c9565b610460810161136e82886110ed565b61137c61016083018761126a565b61138a6102208301866110ed565b61139861038083018561126a565b826104408301529695505050505050565b600080604083850312156113bc57600080fd5b82356113c7816111c9565b915060208301356113d7816111c9565b809150509250929050565b610160810161076282846110ed565b610220810161140082856110ed565b610f8961016083018461126a565b60008060006060848603121561142357600080fd5b833561142e816111c9565b9250602084013561143e816111c9565b9150604084013561144e816111c9565b809150509250925092565b60208082526021908201527f417272617973206d757374206265206f66207468652073616d65206c656e67746040820152600d60fb1b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156114c257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b80516001600160801b03811681146114f657600080fd5b919050565b60008060006060848603121561151057600080fd5b611519846114df565b9250611527602085016114df565b6040949094015192959394509192915050565b80516001600160d81b03811681146114f657600080fd5b60006020828403121561156357600080fd5b61075f8261153a565b60006020828403121561157e57600080fd5b8151610f89816111c9565b6000806040838503121561159c57600080fd5b825164ffffffffff811681146115b157600080fd5b91506115bf6020840161153a565b90509250929050565b808202811582820484141761076257634e487b7160e01b600052601160045260246000fd5b60008261160a57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220bbebb1a91858ef7d908c90ed6bb1ac1d480885988ff4112ce8725d68cd43781864736f6c634300081b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
