{
  "_format": "hh-sol-artifact-1",
  "contractName": "PendleLiquidityRewardsReaderMulti",
  "sourceName": "contracts/misc/LiquidityRewardsReader/PendleLiquidityRewardsReaderMulti.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmAddr",
          "type": "address"
        }
      ],
      "name": "getVars",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "startTime",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "epochDuration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "currentEpoch",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "timeLeftInEpoch",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "vestingEpochs",
              "type": "uint256"
            }
          ],
          "internalType": "struct PendleLiquidityRewardsReaderBase.Vars",
          "name": "vars",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "readAvailableRewardsForUserV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        }
      ],
      "name": "readEpochDataV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "readEpochDataV2",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalStakeUnits",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "epochRewards",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "userStakeUnits",
          "type": "uint256"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "availableRewardsForUser",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmAddr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateAccruingV1",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "userStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userStake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStake",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenA",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenB",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct PairTokens",
                  "name": "tokens",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "uintA",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "uintB",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct PairUints",
                  "name": "uints",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PairTokenUints",
              "name": "userTentativeReward",
              "type": "tuple"
            }
          ],
          "internalType": "struct PendleLiquidityRewardsReaderBase.ResultsRedeemAndCalAccuring",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmV2Addr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateAccruingV2",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "userStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "userStake",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStakeUnits",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalStake",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "tokenA",
                      "type": "address"
                    },
                    {
                      "internalType": "address",
                      "name": "tokenB",
                      "type": "address"
                    }
                  ],
                  "internalType": "struct PairTokens",
                  "name": "tokens",
                  "type": "tuple"
                },
                {
                  "components": [
                    {
                      "internalType": "uint256",
                      "name": "uintA",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "uintB",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct PairUints",
                  "name": "uints",
                  "type": "tuple"
                }
              ],
              "internalType": "struct PairTokenUints",
              "name": "userTentativeReward",
              "type": "tuple"
            }
          ],
          "internalType": "struct PendleLiquidityRewardsReaderBase.ResultsRedeemAndCalAccuring",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmAddr",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "expiries",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateVestedV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "rewards",
          "type": "tuple"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints[]",
          "name": "vestedRewards",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lmV2Addr",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemAndCalculateVestedV2",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "rewards",
          "type": "tuple"
        },
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints[]",
          "name": "vestedRewards",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "currentEpoch",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemRewardsV1",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lm",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemRewardsV2",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "tokens",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "uintA",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "uintB",
                  "type": "uint256"
                }
              ],
              "internalType": "struct PairUints",
              "name": "uints",
              "type": "tuple"
            }
          ],
          "internalType": "struct PairTokenUints",
          "name": "res",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611825806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80635848e63e116100665780635848e63e14610144578063a008b1db14610157578063a0db255614610177578063c59cffc71461018a578063eeed49331461019d5761009e565b806304d86fe7146100a35780630671d45d146100ce5780630779031a146100ee5780631cb882fd146101015780631fc1935f14610121575b600080fd5b6100b66100b1366004611384565b6101b0565b6040516100c593929190611653565b60405180910390f35b6100e16100dc366004611419565b6102c8565b6040516100c59190611645565b6100b66100fc36600461134c565b6103ca565b61011461010f36600461134c565b6104a3565b6040516100c591906116ba565b61013461012f366004611444565b61061b565b6040516100c59493929190611777565b610114610152366004611444565b6107bc565b61016a610165366004611330565b610b51565b6040516100c591906116fe565b6100e1610185366004611444565b610d00565b6100e161019836600461134c565b610e03565b6100e16101ab366004611444565b610f05565b6101b8611234565b60606000806101c688610b51565b90508060400151915060005b8681101561021e5760006101f98a8a8a858181106101ec57fe5b9050602002013589610f05565b90508161020857809550610215565b6102128682610fda565b95505b506001016101d2565b50600181608001510367ffffffffffffffff8111801561023d57600080fd5b5060405190808252806020026020018201604052801561027757816020015b610264611234565b81526020019060019003908161025c5790505b509250600182015b816080015183018110156102bc57610298898288610d00565b84600185840303815181106102a957fe5b602090810291909101015260010161027f565b50509450945094915050565b6102d0611234565b826001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b15801561030857600080fd5b505afa15801561031c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103409190611485565b815260405163fb859d2b60e01b81526001600160a01b0384169063fb859d2b9061036e908590600401611738565b60606040518083038186803b15801561038657600080fd5b505afa15801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611504565b60208301525092915050565b6103d2611234565b60606000806103e086610b51565b9050806040015191506103f38686610e03565b9350600181608001510367ffffffffffffffff8111801561041357600080fd5b5060405190808252806020026020018201604052801561044d57816020015b61043a611234565b8152602001906001900390816104325790505b509250600182015b8160800151830181101561049a5761046e87828861061b565b8751909350879250600019878603019150811061048757fe5b6020908102919091010152600101610455565b50509250925092565b6104ab611259565b826104b68184610e03565b5060006104c285610b51565b90506104cc611234565b6104db8683604001518761061b565b50865260408087019290925290516327e235e360e01b81529091506001600160a01b038416906327e235e39061051590889060040161160a565b60206040518083038186803b15801561052d57600080fd5b505afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056591906114ec565b846020018181525050826001600160a01b0316638b0e9f3f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a757600080fd5b505afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df91906114ec565b60608086018290528301516040860151865161060c9392909202019061060690849061102d565b90611048565b60808501525091949350505050565b6000610625611234565b600061062f611234565b60405163b40310c960e01b81526001600160a01b0388169063b40310c99061065d9089908990600401611741565b60e06040518083038186803b15801561067557600080fd5b505afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad9190611530565b909150866020018560200182905282965083905283975050505050866001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b15801561070057600080fd5b505afa158015610714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107389190611485565b835260408051631240b4ff60e11b815281516001600160a01b038a169263248169fe9260048082019391829003018186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611485565b815292969195509350909150565b6107c4611259565b8360006107d082610b51565b90506107dd868686610f05565b5060006107ee8783604001516102c8565b60408084015190516348c51f2d60e11b81529192506001600160a01b0385169163918a3e5a91610822918a906004016117a8565b604080518083038186803b15801561083957600080fd5b505afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611581565b50604080860191909152828101519051639bd3cc7b60e01b81526001600160a01b03851691639bd3cc7b916108ad919089908b90600401611758565b60206040518083038186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fd91906114ec565b845260405163bab9e5a760e01b81526001600160a01b0384169063bab9e5a79061092d9089908990600401611741565b60206040518083038186803b15801561094557600080fd5b505afa158015610959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097d91906114ec565b6020850152604051632bf77f6960e01b81526001600160a01b03841690632bf77f69906109ae908990600401611738565b60806040518083038186803b1580156109c657600080fd5b505afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906115a4565b5050506060850152604080516331b6418360e01b815281516000926001600160a01b038716926331b641839260048083019392829003018186803b158015610a4557600080fd5b505afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190611581565b5090506000610b12633b9aca00610606876001600160a01b03166320616536868d6040518363ffffffff1660e01b8152600401610abb9291906117a8565b60206040518083038186803b158015610ad357600080fd5b505afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b91906114ec565b869061102d565b9050610b3f866060015185606001510287604001510161060688600001518461102d90919063ffffffff16565b60808701525093979650505050505050565b610b59611288565b6000829050806001600160a01b03166378e979256040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9757600080fd5b505afa158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf91906114ec565b826000018181525050806001600160a01b0316634ff0876a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4991906114ec565b602083018190528251420381610c5b57fe5b04600101604083015260208201518251420381610c7457fe5b06826020015103826060018181525050806001600160a01b0316639a51d2d16040518163ffffffff1660e01b815260040160206040518083038186803b158015610cbd57600080fd5b505afa158015610cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf591906114ec565b608083015250919050565b610d08611234565b836001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b158015610d4057600080fd5b505afa158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d789190611485565b815260405163e7baa65760e01b81526001600160a01b0385169063e7baa65790610da89086908690600401611741565b604080518083038186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df791906114d1565b60208201529392505050565b610e0b611234565b826001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b9190611485565b8152604051639262187b60e01b81526001600160a01b03841690639262187b90610ea990859060040161160a565b6040805180830381600087803b158015610ec257600080fd5b505af1158015610ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efa91906114d1565b602082015292915050565b610f0d611234565b836001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190611485565b81526040516363191e1360e11b81526001600160a01b0385169063c6323c2690610fad9086908690600401611741565b6040805180830381600087803b158015610fc657600080fd5b505af1158015610dd3573d6000803e3d6000fd5b610fe2611234565b82518251610ff09190611063565b6110155760405162461bcd60e51b815260040161100c9061161e565b60405180910390fd5b8251815260208084015190830151610efa91906110a6565b611035611234565b825181526020830151610efa90836110d0565b611050611234565b825181526020830151610efa90836110f5565b805182516000916001600160a01b03918216911614801561109d575081602001516001600160a01b031683602001516001600160a01b0316145b90505b92915050565b6110ae6112b7565b815183516110bb9161111a565b815260208083015190840151610efa9161111a565b6110d86112b7565b82516110e49083611174565b81526020830151610efa9083611174565b6110fd6112b7565b825161110990836111cd565b81526020830151610efa90836111cd565b60008282018381101561109d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611183575060006110a0565b8282028284828161119057fe5b041461109d5760405162461bcd60e51b81526004018080602001828103825260218152602001806117cf6021913960400191505060405180910390fd5b6000808211611223576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161122c57fe5b049392505050565b60405180604001604052806112476112d1565b81526020016112546112b7565b905290565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001611254611234565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b6000604082840312156112f9578081fd5b6040516040810181811067ffffffffffffffff8211171561131657fe5b604052825181526020928301519281019290925250919050565b600060208284031215611341578081fd5b813561109d816117b6565b6000806040838503121561135e578081fd5b8235611369816117b6565b91506020830135611379816117b6565b809150509250929050565b60008060008060608587031215611399578182fd5b84356113a4816117b6565b9350602085013567ffffffffffffffff808211156113c0578384fd5b818701915087601f8301126113d3578384fd5b8135818111156113e1578485fd5b88602080830285010111156113f4578485fd5b602083019550809450505050604085013561140e816117b6565b939692955090935050565b6000806040838503121561142b578182fd5b8235611436816117b6565b946020939093013593505050565b600080600060608486031215611458578283fd5b8335611463816117b6565b925060208401359150604084013561147a816117b6565b809150509250925092565b600060408284031215611496578081fd5b6040516040810181811067ffffffffffffffff821117156114b357fe5b60405282516114c1816117b6565b81526020830151610df7816117b6565b6000604082840312156114e2578081fd5b61109d83836112e8565b6000602082840312156114fd578081fd5b5051919050565b60008060608385031215611516578182fd5b8251915061152784602085016112e8565b90509250929050565b600080600080600060e08688031215611547578081fd5b8551945061155887602088016112e8565b935060608601519250608086015191506115758760a088016112e8565b90509295509295909350565b60008060408385031215611593578182fd5b505080516020909101519092909150565b600080600080608085870312156115b9578384fd5b845193506020850151925060408501519150606085015161140e816117b6565b805180516001600160a01b039081168452602091820151168184015290810151805160408401520151606090910152565b6001600160a01b0391909116815260200190565b6020808252600d908201526c0a08292a4be9a92a69a82a8869609b1b604082015260600190565b608081016110a082846115d9565b600060c0820161166383876115d9565b608060c08185015281865180845260e08601915060209350838801855b828110156116a3576116938483516115d9565b9284019290850190600101611680565b5050508093505050508260a0830152949350505050565b6000610100820190508251825260208301516020830152604083015160408301526060830151606083015260808301516116f760808401826115d9565b5092915050565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b848152610140810161178c60208301866115d9565b8360a083015261179f60c08301846115d9565b95945050505050565b918252602082015260400190565b6001600160a01b03811681146117cb57600080fd5b5056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122002032687649aeeef3b96ace87ae7483ddacca46515c33a72551df70fa4f960ce64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80635848e63e116100665780635848e63e14610144578063a008b1db14610157578063a0db255614610177578063c59cffc71461018a578063eeed49331461019d5761009e565b806304d86fe7146100a35780630671d45d146100ce5780630779031a146100ee5780631cb882fd146101015780631fc1935f14610121575b600080fd5b6100b66100b1366004611384565b6101b0565b6040516100c593929190611653565b60405180910390f35b6100e16100dc366004611419565b6102c8565b6040516100c59190611645565b6100b66100fc36600461134c565b6103ca565b61011461010f36600461134c565b6104a3565b6040516100c591906116ba565b61013461012f366004611444565b61061b565b6040516100c59493929190611777565b610114610152366004611444565b6107bc565b61016a610165366004611330565b610b51565b6040516100c591906116fe565b6100e1610185366004611444565b610d00565b6100e161019836600461134c565b610e03565b6100e16101ab366004611444565b610f05565b6101b8611234565b60606000806101c688610b51565b90508060400151915060005b8681101561021e5760006101f98a8a8a858181106101ec57fe5b9050602002013589610f05565b90508161020857809550610215565b6102128682610fda565b95505b506001016101d2565b50600181608001510367ffffffffffffffff8111801561023d57600080fd5b5060405190808252806020026020018201604052801561027757816020015b610264611234565b81526020019060019003908161025c5790505b509250600182015b816080015183018110156102bc57610298898288610d00565b84600185840303815181106102a957fe5b602090810291909101015260010161027f565b50509450945094915050565b6102d0611234565b826001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b15801561030857600080fd5b505afa15801561031c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103409190611485565b815260405163fb859d2b60e01b81526001600160a01b0384169063fb859d2b9061036e908590600401611738565b60606040518083038186803b15801561038657600080fd5b505afa15801561039a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103be9190611504565b60208301525092915050565b6103d2611234565b60606000806103e086610b51565b9050806040015191506103f38686610e03565b9350600181608001510367ffffffffffffffff8111801561041357600080fd5b5060405190808252806020026020018201604052801561044d57816020015b61043a611234565b8152602001906001900390816104325790505b509250600182015b8160800151830181101561049a5761046e87828861061b565b8751909350879250600019878603019150811061048757fe5b6020908102919091010152600101610455565b50509250925092565b6104ab611259565b826104b68184610e03565b5060006104c285610b51565b90506104cc611234565b6104db8683604001518761061b565b50865260408087019290925290516327e235e360e01b81529091506001600160a01b038416906327e235e39061051590889060040161160a565b60206040518083038186803b15801561052d57600080fd5b505afa158015610541573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056591906114ec565b846020018181525050826001600160a01b0316638b0e9f3f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105a757600080fd5b505afa1580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df91906114ec565b60608086018290528301516040860151865161060c9392909202019061060690849061102d565b90611048565b60808501525091949350505050565b6000610625611234565b600061062f611234565b60405163b40310c960e01b81526001600160a01b0388169063b40310c99061065d9089908990600401611741565b60e06040518083038186803b15801561067557600080fd5b505afa158015610689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ad9190611530565b909150866020018560200182905282965083905283975050505050866001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b15801561070057600080fd5b505afa158015610714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107389190611485565b835260408051631240b4ff60e11b815281516001600160a01b038a169263248169fe9260048082019391829003018186803b15801561077657600080fd5b505afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae9190611485565b815292969195509350909150565b6107c4611259565b8360006107d082610b51565b90506107dd868686610f05565b5060006107ee8783604001516102c8565b60408084015190516348c51f2d60e11b81529192506001600160a01b0385169163918a3e5a91610822918a906004016117a8565b604080518083038186803b15801561083957600080fd5b505afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108719190611581565b50604080860191909152828101519051639bd3cc7b60e01b81526001600160a01b03851691639bd3cc7b916108ad919089908b90600401611758565b60206040518083038186803b1580156108c557600080fd5b505afa1580156108d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fd91906114ec565b845260405163bab9e5a760e01b81526001600160a01b0384169063bab9e5a79061092d9089908990600401611741565b60206040518083038186803b15801561094557600080fd5b505afa158015610959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097d91906114ec565b6020850152604051632bf77f6960e01b81526001600160a01b03841690632bf77f69906109ae908990600401611738565b60806040518083038186803b1580156109c657600080fd5b505afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906115a4565b5050506060850152604080516331b6418360e01b815281516000926001600160a01b038716926331b641839260048083019392829003018186803b158015610a4557600080fd5b505afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190611581565b5090506000610b12633b9aca00610606876001600160a01b03166320616536868d6040518363ffffffff1660e01b8152600401610abb9291906117a8565b60206040518083038186803b158015610ad357600080fd5b505afa158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b91906114ec565b869061102d565b9050610b3f866060015185606001510287604001510161060688600001518461102d90919063ffffffff16565b60808701525093979650505050505050565b610b59611288565b6000829050806001600160a01b03166378e979256040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9757600080fd5b505afa158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf91906114ec565b826000018181525050806001600160a01b0316634ff0876a6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4991906114ec565b602083018190528251420381610c5b57fe5b04600101604083015260208201518251420381610c7457fe5b06826020015103826060018181525050806001600160a01b0316639a51d2d16040518163ffffffff1660e01b815260040160206040518083038186803b158015610cbd57600080fd5b505afa158015610cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf591906114ec565b608083015250919050565b610d08611234565b836001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b158015610d4057600080fd5b505afa158015610d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d789190611485565b815260405163e7baa65760e01b81526001600160a01b0385169063e7baa65790610da89086908690600401611741565b604080518083038186803b158015610dbf57600080fd5b505afa158015610dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df791906114d1565b60208201529392505050565b610e0b611234565b826001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b158015610e4357600080fd5b505afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b9190611485565b8152604051639262187b60e01b81526001600160a01b03841690639262187b90610ea990859060040161160a565b6040805180830381600087803b158015610ec257600080fd5b505af1158015610ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efa91906114d1565b602082015292915050565b610f0d611234565b836001600160a01b031663248169fe6040518163ffffffff1660e01b8152600401604080518083038186803b158015610f4557600080fd5b505afa158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190611485565b81526040516363191e1360e11b81526001600160a01b0385169063c6323c2690610fad9086908690600401611741565b6040805180830381600087803b158015610fc657600080fd5b505af1158015610dd3573d6000803e3d6000fd5b610fe2611234565b82518251610ff09190611063565b6110155760405162461bcd60e51b815260040161100c9061161e565b60405180910390fd5b8251815260208084015190830151610efa91906110a6565b611035611234565b825181526020830151610efa90836110d0565b611050611234565b825181526020830151610efa90836110f5565b805182516000916001600160a01b03918216911614801561109d575081602001516001600160a01b031683602001516001600160a01b0316145b90505b92915050565b6110ae6112b7565b815183516110bb9161111a565b815260208083015190840151610efa9161111a565b6110d86112b7565b82516110e49083611174565b81526020830151610efa9083611174565b6110fd6112b7565b825161110990836111cd565b81526020830151610efa90836111cd565b60008282018381101561109d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611183575060006110a0565b8282028284828161119057fe5b041461109d5760405162461bcd60e51b81526004018080602001828103825260218152602001806117cf6021913960400191505060405180910390fd5b6000808211611223576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161122c57fe5b049392505050565b60405180604001604052806112476112d1565b81526020016112546112b7565b905290565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001611254611234565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b6000604082840312156112f9578081fd5b6040516040810181811067ffffffffffffffff8211171561131657fe5b604052825181526020928301519281019290925250919050565b600060208284031215611341578081fd5b813561109d816117b6565b6000806040838503121561135e578081fd5b8235611369816117b6565b91506020830135611379816117b6565b809150509250929050565b60008060008060608587031215611399578182fd5b84356113a4816117b6565b9350602085013567ffffffffffffffff808211156113c0578384fd5b818701915087601f8301126113d3578384fd5b8135818111156113e1578485fd5b88602080830285010111156113f4578485fd5b602083019550809450505050604085013561140e816117b6565b939692955090935050565b6000806040838503121561142b578182fd5b8235611436816117b6565b946020939093013593505050565b600080600060608486031215611458578283fd5b8335611463816117b6565b925060208401359150604084013561147a816117b6565b809150509250925092565b600060408284031215611496578081fd5b6040516040810181811067ffffffffffffffff821117156114b357fe5b60405282516114c1816117b6565b81526020830151610df7816117b6565b6000604082840312156114e2578081fd5b61109d83836112e8565b6000602082840312156114fd578081fd5b5051919050565b60008060608385031215611516578182fd5b8251915061152784602085016112e8565b90509250929050565b600080600080600060e08688031215611547578081fd5b8551945061155887602088016112e8565b935060608601519250608086015191506115758760a088016112e8565b90509295509295909350565b60008060408385031215611593578182fd5b505080516020909101519092909150565b600080600080608085870312156115b9578384fd5b845193506020850151925060408501519150606085015161140e816117b6565b805180516001600160a01b039081168452602091820151168184015290810151805160408401520151606090910152565b6001600160a01b0391909116815260200190565b6020808252600d908201526c0a08292a4be9a92a69a82a8869609b1b604082015260600190565b608081016110a082846115d9565b600060c0820161166383876115d9565b608060c08185015281865180845260e08601915060209350838801855b828110156116a3576116938483516115d9565b9284019290850190600101611680565b5050508093505050508260a0830152949350505050565b6000610100820190508251825260208301516020830152604083015160408301526060830151606083015260808301516116f760808401826115d9565b5092915050565b600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b90815260200190565b9182526001600160a01b0316602082015260400190565b9283526001600160a01b03919091166020830152604082015260600190565b848152610140810161178c60208301866115d9565b8360a083015261179f60c08301846115d9565b95945050505050565b918252602082015260400190565b6001600160a01b03811681146117cb57600080fd5b5056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122002032687649aeeef3b96ace87ae7483ddacca46515c33a72551df70fa4f960ce64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
