{
  "_format": "hh-sol-artifact-1",
  "contractName": "PendleLiquidityMiningBaseV2Multi",
  "sourceName": "contracts/core/abstractV2/PendleLiquidityMiningBaseV2Multi.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "governanceManager",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "pausingManager",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "whitelist",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "rewardTokens",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "stakeToken",
              "type": "address"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "tokenA",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "tokenB",
                  "type": "address"
                }
              ],
              "internalType": "struct PairTokens",
              "name": "yieldTokens",
              "type": "tuple"
            },
            {
              "internalType": "uint256",
              "name": "startTime",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "epochDuration",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "vestingEpochs",
              "type": "uint256"
            },
            {
              "internalType": "contract IWETH",
              "name": "weth",
              "type": "address"
            }
          ],
          "internalType": "struct PendleLiquidityMiningBaseV2Multi.ConstructorArgs",
          "name": "args",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sendTo",
          "type": "address"
        }
      ],
      "name": "EtherWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct PairUints[]",
          "name": "rewards",
          "type": "tuple[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "numberOfEpochs",
          "type": "uint256"
        }
      ],
      "name": "Funded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct PairUints",
          "name": "amount",
          "type": "tuple"
        }
      ],
      "name": "PendleRewardsSettled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "epochIds",
          "type": "uint256[]"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "indexed": false,
          "internalType": "struct PairUints[]",
          "name": "rewards",
          "type": "tuple[]"
        }
      ],
      "name": "RewardsToppedUp",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sendTo",
          "type": "address"
        }
      ],
      "name": "TokenWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MULTIPLIER",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balances",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "dueInterests",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "uintA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "uintB",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "epochDuration",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints[]",
          "name": "rewards",
          "type": "tuple[]"
        }
      ],
      "name": "fund",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentEpochId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governanceManager",
      "outputs": [
        {
          "internalType": "contract PendleGovernanceManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastEpochClaimed",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastNYield",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "uintA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "uintB",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastParamL",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "uintA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "uintB",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastTimeUserStakeUpdated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numberOfEpochs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paramL",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "uintA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "uintB",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pausingManager",
      "outputs": [
        {
          "internalType": "contract IPendlePausingManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "epochId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "readEpochData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalStakeUnits",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints",
          "name": "totalRewards",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "lastUpdated",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakeUnitsForUser",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints",
          "name": "availableRewardsForUser",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "readRewardTokens",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "internalType": "struct PairTokens",
          "name": "tokens",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "readYieldTokens",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "tokenA",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "tokenB",
              "type": "address"
            }
          ],
          "internalType": "struct PairTokens",
          "name": "tokens",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemDueInterests",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints",
          "name": "amountOut",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "redeemRewards",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints",
          "name": "rewards",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardTokens",
      "outputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardTokensHolder",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "setUpEmergencyMode",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forAddr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "epochIds",
          "type": "uint256[]"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints[]",
          "name": "rewards",
          "type": "tuple[]"
        }
      ],
      "name": "topUpRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "epochId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        }
      ],
      "name": "updateAndReadEpochData",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalStakeUnits",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints",
          "name": "totalRewards",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "lastUpdated",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakeUnitsForUser",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "uintA",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "uintB",
              "type": "uint256"
            }
          ],
          "internalType": "struct PairUints",
          "name": "availableRewardsForUser",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vestingEpochs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "weth",
      "outputs": [
        {
          "internalType": "contract IWETH",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "contract IPendleWhitelist",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "toAddr",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "sendTo",
          "type": "address"
        }
      ],
      "name": "withdrawEther",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "sendTo",
          "type": "address"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "yieldTokens",
      "outputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101a06040523480156200001257600080fd5b50604051620045b0380380620045b08339810160408190526200003591620003db565b80516001600160a01b03811662000082576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b60008054336001600160a01b031990911617905560601b6001600160601b0319166080526001805560c08101514210620000d95760405162461bcd60e51b8152600401620000d09062000505565b60405180910390fd5b600081610100015111620001015760405162461bcd60e51b8152600401620000d09062000531565b6200011b81606001516200027c60201b62001a561760201c565b620001358160a001516200027c60201b62001a561760201c565b610120810151606090811b6001600160601b031990811660e0908152602080850151841b831660c0908152604080870151861b851660a090815286880180518051600880546001600160a01b03199081166001600160a01b03938416179091559187015160098054841691831691909117905560808b015190991b909716610100908152918901518051600a80548a16918b16919091179055850151600b805490981698169790971790955590860151610140529185015161016052918401516101805280518082019091526001808252908201819052601081905560115590516200022a91620002cd811b62001aa317901c565b30604051620002399062000358565b62000246929190620004a6565b604051809103906000f08015801562000263573d6000803e3d6000fd5b5060601b6001600160601b0319166101205250620005cd565b80516001600160a01b031615620002ca5780602001516001600160a01b031681600001516001600160a01b03161415620002ca5760405162461bcd60e51b8152600401620000d09062000568565b50565b60408051600280825260608083018452926020830190803683370190505090508160000151816000815181106200030057fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508160200151816001815181106200033357fe5b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b6103ee80620041c283390190565b80516200037381620005b7565b919050565b6000604082840312156200038a578081fd5b604080519081016001600160401b0381118282101715620003a757fe5b80604052508091508251620003bc81620005b7565b81526020830151620003ce81620005b7565b6020919091015292915050565b60006101808284031215620003ee578081fd5b610140620003fc8162000593565b620004078462000366565b8152620004176020850162000366565b60208201526200042a6040850162000366565b60408201526200043e856060860162000378565b60608201526200045160a0850162000366565b6080820152620004658560c0860162000378565b60a08201526101008085015160c08301526101208086015160e0840152838601518284015262000499610160870162000366565b9083015250949350505050565b604080825283519082018190526000906020906060840190828701845b82811015620004ea5781516001600160a01b031684529284019290840190600101620004c3565b5050506001600160a01b039490941692019190915250919050565b602080825260129082015271494e56414c49445f53544152545f54494d4560701b604082015260600190565b60208082526016908201527f494e56414c49445f56455354494e475f45504f43485300000000000000000000604082015260600190565b6020808252601190820152704455504c4943415445445f544f4b454e5360781b604082015260600190565b6040518181016001600160401b0381118282101715620005af57fe5b604052919050565b6001600160a01b0381168114620002ca57600080fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c610140516101605161018051613af9620006c9600039806110485280611c9c52806121fe52806128e252508061094f52806123ba5280612e035280612e58525080610ba3528061238252806123df5280612e2952508061075e5280610d8c5280610fdb5280611440528061178452508061097352806118155280611f845280612d965280612dd152508061092b5250806104c45280610a215280610c4152806111b7528061141c52806115f5528061169f52806118d6525080610db452806110fc5250806115b95280611d995250613af96000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80638b0e9f3f11610125578063b3cccfe3116100ad578063c2b18aa01161007c578063c2b18aa014610401578063ce56c45414610409578063d2e6d1c31461041c578063dd254a6a14610424578063f3fef3a31461043757610211565b8063b3cccfe3146103d6578063b40310c9146103de578063be66c60f146103f1578063c1a4b33f146103f957610211565b806396b973c0116100f457806396b973c01461038d57806396eeffaa146103a05780639a51d2d1146103b3578063a29a839f146103bb578063adc9772e146103c357610211565b80638b0e9f3f146103625780638f373bf31461036a5780639262187b1461037257806393e59dc11461038557610211565b80633ccdbb28116101a8578063541a7ca611610177578063541a7ca6146103095780635ce58c89146103115780636304a6bc14610327578063738573f41461034757806378e979251461035a57610211565b80633ccdbb28146102d15780633fc8cef3146102e45780634ff0876a146102f957806351ed6a301461030157610211565b80631be03f0f116101e45780631be03f0f14610281578063248169fe1461029657806327e235e3146102ab5780632936ada7146102be57610211565b806304f917af14610216578063059f8b161461024357806316676632146102585780631736884114610279575b600080fd5b610229610224366004613609565b61044a565b60405161023a9594939291906139b8565b60405180910390f35b61024b6105e8565b60405161023a91906139af565b61026b61026636600461338a565b6105f5565b60405161023a9291906139ef565b61024b61060e565b61029461028f36600461344b565b610614565b005b61029e6107c6565b60405161023a919061397e565b61024b6102b936600461338a565b6107f5565b61024b6102cc36600461338a565b610807565b6102946102df366004613568565b610819565b6102ec610929565b60405161023a919061367c565b61024b61094d565b6102ec610971565b61026b610995565b61031961099e565b60405161023a9291906136a9565b61033a61033536600461338a565b6109b4565b60405161023a91906139a1565b61024b61035536600461338a565b610b8f565b61024b610ba1565b61024b610bc5565b61026b610bcb565b61033a61038036600461338a565b610bd4565b6102ec610db2565b61026b61039b36600461338a565b610dd6565b6102946103ae36600461348b565b610def565b61024b611046565b61024b61106a565b6102946103d1366004613420565b61107a565b61029e611361565b6102296103ec366004613609565b611390565b6102ec61141a565b6102ec61143e565b610319611462565b610294610417366004613609565b611478565b6102ec6115b7565b6102946104323660046133e8565b6115db565b610294610445366004613420565b611871565b600061045461330f565b60008061045f61330f565b600260015414156104a5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c1906104f990309060040161367c565b6040805180830381600087803b15801561051257600080fd5b505af1158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a919061353a565b50905080156105745760405162461bcd60e51b815260040161056b906138da565b60405180910390fd5b6000600254116105965760405162461bcd60e51b815260040161056b9061392f565b60006105a061106a565b116105bd5760405162461bcd60e51b815260040161056b906138b5565b6105c687611b2c565b6105d08888611390565b60018055939c929b5090995097509095509350505050565b68056bc75e2d6310000081565b600d602052600090815260409020805460019091015482565b60025481565b61061c611d95565b6001600160a01b0316336001600160a01b031614610673576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60025461067e61106a565b111561069c5760405162461bcd60e51b815260040161056b906137ab565b806106a561330f565b60005b82811015610723576106dc8585838181106106bf57fe5b9050604002018036038101906106d591906135a9565b8390611e21565b91508484828181106106ea57fe5b9050604002016004600083600254016001018152602001908152602001600020600101818161071991906139fd565b50506001016106a8565b506002546107319083611e56565b600255604080518082019091526008546001600160a01b03908116825260095416602082015261078390337f000000000000000000000000000000000000000000000000000000000000000084611eb9565b7f2a8c58d10abc188dedbf373509adf27a451db729e76176e6aba0dea783889e4184846002546040516107b8939291906136e0565b60405180910390a150505050565b6107ce613329565b50604080518082019091526008546001600160a01b03908116825260095416602082015290565b60056020526000908152604090205481565b60076020526000908152604090205481565b610821611d95565b6001600160a01b0316336001600160a01b031614610878576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b61088183611f40565b6108c6576040805162461bcd60e51b81526020600482015260116024820152701513d2d15397d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b6108da6001600160a01b0384168284611fea565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105460115482565b600a54600b546001600160a01b03918216911682565b6109bc61330f565b60026001541415610a02576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c190610a5690309060040161367c565b6040805180830381600087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa7919061353a565b5090508015610ac85760405162461bcd60e51b815260040161056b906138da565b600060025411610aea5760405162461bcd60e51b815260040161056b9061392f565b6000610af461106a565b11610b115760405162461bcd60e51b815260040161056b906138b5565b60408051808201909152600a546001600160a01b039081168252600b54166020820152610b3d90612041565b15610b4757610b85565b6001600160a01b038316610b6d5760405162461bcd60e51b815260040161056b906137d4565b610b768361206d565b9150610b82838361216d565b91505b5060018055919050565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b600e54600f5482565b610bdc61330f565b60026001541415610c22576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c190610c7690309060040161367c565b6040805180830381600087803b158015610c8f57600080fd5b505af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc7919061353a565b5090508015610ce85760405162461bcd60e51b815260040161056b906138da565b600060025411610d0a5760405162461bcd60e51b815260040161056b9061392f565b6000610d1461106a565b11610d315760405162461bcd60e51b815260040161056b906138b5565b6001600160a01b038316610d575760405162461bcd60e51b815260040161056b906137d4565b610d60836121de565b604080518082019091526008546001600160a01b039081168252600954166020820152909250610b85907f00000000000000000000000000000000000000000000000000000000000000008585611eb9565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c602052600090815260409020805460019091015482565b610df7611d95565b6001600160a01b0316336001600160a01b031614610e4e576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b828114610e6d5760405162461bcd60e51b815260040161056b9061375c565b6000610e7761106a565b600254909150610e8561330f565b60005b86811015610fb057878782818110610e9c57fe5b9050602002013584108015610ec3575082888883818110610eb957fe5b9050602002013511155b610edf5760405162461bcd60e51b815260040161056b90613905565b610eee8686838181106106bf57fe5b9150610f6a868683818110610eff57fe5b905060400201803603810190610f1591906135a9565b600460008b8b86818110610f2557fe5b90506020020135815260200190815260200160002060010160405180604001604052908160008201548152602001600182015481525050611e2190919063ffffffff16565b600460008a8a85818110610f7a57fe5b60209081029290920135835250818101929092526040016000208251600180830191909155929091015160029091015501610e88565b50604080518082019091526008546001600160a01b03908116825260095416602082015261100090337f000000000000000000000000000000000000000000000000000000000000000084611eb9565b7f0bb3e533df8edd2ab3c21173cdac3dffecef1b8ba101783a6e7b2220dc52e8d6878787876040516110359493929190613704565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110754261237e565b905090565b600260015414156110c0576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b600260015560006110d03361240f565b1580156110dc57503233145b905080806111815750604051636c9b2a3f60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d936547e9061113190339060040161367c565b60206040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611181919061351e565b61119d5760405162461bcd60e51b815260040161056b90613859565b604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c1906111ec90309060040161367c565b6040805180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d919061353a565b509050801561125e5760405162461bcd60e51b815260040161056b906138da565b6000600254116112805760405162461bcd60e51b815260040161056b9061392f565b600061128a61106a565b116112a75760405162461bcd60e51b815260040161056b906138b5565b6001600160a01b0384166112cd5760405162461bcd60e51b815260040161056b906137d4565b826112ea5760405162461bcd60e51b815260040161056b90613890565b6002546112f561106a565b11156113135760405162461bcd60e51b815260040161056b906137fa565b61131e843385612415565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d848460405161134f929190613690565b60405180910390a15050600180555050565b611369613329565b5060408051808201909152600a546001600160a01b039081168252600b5416602082015290565b600061139a61330f565b6000806113a561330f565b50505060009384525050600460208181526040808520805482518084018452600180840154825260028401548287015260038401546001600160a01b03909816808a52968401865284892054968952600590930185529683902083518085019094528054845290910154928201929092529094565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6008546009546001600160a01b03918216911682565b611480611d95565b6001600160a01b0316336001600160a01b0316146114d7576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611522576040519150601f19603f3d011682016040523d82523d6000602084013e611527565b606091505b505090508061156f576040805162461bcd60e51b815260206004820152600f60248201526e15d2551211149055d7d19052531151608a1b604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c19061162a90309060040161367c565b6040805180830381600087803b15801561164357600080fd5b505af1158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b919061353a565b9150508061169b5760405162461bcd60e51b815260040161056b90613784565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f87c24cd6040518163ffffffff1660e01b815260040160606040518083038186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e91906133a6565b5090915050336001600160a01b0382161461175b5760405162461bcd60e51b815260040161056b9061382a565b604080518082019091526008546001600160a01b0390811682526009541660208201526117db907f00000000000000000000000000000000000000000000000000000000000000009030906117b0908361247d565b604080518082019091526008546001600160a01b039081168252600954166020820152929190611eb9565b604080518082019091526008546001600160a01b03908116825260095416602082015261180890856125aa565b61183e6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685600019612604565b60408051808201909152600a546001600160a01b039081168252600b5416602082015261186b90856125aa565b50505050565b600260015414156118b7576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c19061190b90309060040161367c565b6040805180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c919061353a565b509050801561197d5760405162461bcd60e51b815260040161056b906138da565b60006002541161199f5760405162461bcd60e51b815260040161056b9061392f565b60006119a961106a565b116119c65760405162461bcd60e51b815260040161056b906138b5565b816119e35760405162461bcd60e51b815260040161056b90613890565b6001600160a01b038316611a095760405162461bcd60e51b815260040161056b906137d4565b611a1433848461270c565b7f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d53383604051611a45929190613690565b60405180910390a150506001805550565b80516001600160a01b031615611aa05780602001516001600160a01b031681600001516001600160a01b03161415611aa05760405162461bcd60e51b815260040161056b90613953565b50565b6040805160028082526060808301845292602083019080368337019050509050816000015181600081518110611ad557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050816020015181600181518110611b0757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b611b34612774565b6001600160a01b038116600090815260066020526040902054611b71576001600160a01b0381166000908152600660205260409020429055611aa0565b6000611b7b61106a565b90506000611b8b60025483612821565b6002546001600160a01b038516600090815260056020908152604080832054600690925282205460035494955092861193909291611bc88361237e565b9050805b868111611d6f57600081815260046020526040902054611bf55782611bf057611d6f565b611d67565b611c4b611c03868684612837565b6004600084815260200190815260200160002060040160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054611e5690919063ffffffff16565b60008281526004602081815260408084206001600160a01b038f16855290920190529020558681148015611c7d575085155b15611c8757611d6f565b6000611c938a8361288b565b9050600182015b7f000000000000000000000000000000000000000000000000000000000000000083018111611d645760008181526004602090815260408083206001600160a01b038f1684526005018252918290208251808401909352805483526001015490820152611d079083611e21565b6004600083815260200190815260200160002060050160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101559050508080600101915050611c9a565b50505b600101611bcc565b5050506001600160a01b0386166000908152600660205260409020429055505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015611df057600080fd5b505afa158015611e04573d6000803e3d6000fd5b505050506040513d6020811015611e1a57600080fd5b5051905090565b611e2961330f565b81518351611e3691611e56565b815260208083015190840151611e4b91611e56565b602082015292915050565b600082820183811015611eb0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b83516001600160a01b031615801590611ed25750805115155b15611ef45780518451611ef4916001600160a01b039091169085908590612916565b60208401516001600160a01b031615801590611f135750602081015115155b1561186b5761186b8383836020015187602001516001600160a01b0316612916909392919063ffffffff16565b604080518082019091526008546001600160a01b039081168252600954166020820152600090611f70908361292b565b158015611faf5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8015611eb3575060408051808201909152600a546001600160a01b039081168252600b54166020820152611fe3908361292b565b1592915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261203c908490612971565b505050565b80516000906001600160a01b0316158015611eb357505060208101516001600160a01b0316155b919050565b61207561330f565b60408051808201909152600a546001600160a01b039081168252600b541660208201526120a190612041565b156120ab57612068565b6120b482612a22565b604080518082018252600e548152600f546020808301919091526001600160a01b0385166000908152600c825283902083518085019094528054845260010154908301526121029190612bbd565b604080518082018252600080825260208083018281526001600160a01b0388168352600c8252918490209251835590516001909201919091558151808301909252600e548252600f549082015290915061215c9082612c02565b8051600e5560200151600f55919050565b61217561330f565b60408051808201909152600a546001600160a01b039081168252600b541660208201526121ad906121a6903061247d565b8390612bbd565b60408051808201909152600a546001600160a01b039081168252600b54166020820152909150611eb3908483612c2c565b6121e661330f565b6121ef82611b2c565b60006122266121fc61106a565b7f000000000000000000000000000000000000000000000000000000000000000060025401612821565b6001600160a01b0384166000908152600760205260409020549091505b8181116123225760008181526004602090815260408083206001600160a01b0388168452600501825291829020825180840190935280548352600101549082015261228d90612caf565b61231a5760008181526004602090815260408083206001600160a01b038816845260050182529182902082518084019093528054835260010154908201526122d6908490611e21565b60408051808201825260008082526020808301828152868352600482528483206001600160a01b038b16845260050190915292902090518155905160019091015592505b600101612243565b506001600160a01b03831660009081526007602052604090819020829055517f04e98a5a05a405118338cc7a2a3473388ea422bee4f982d332f92effbe2cbafc9061237090859085906136c3565b60405180910390a150919050565b60007f00000000000000000000000000000000000000000000000000000000000000008210156123b057506000612068565b611eb360016124097f0000000000000000000000000000000000000000000000000000000000000000612403867f0000000000000000000000000000000000000000000000000000000000000000612cc5565b90612d22565b90611e56565b3b151590565b61241e83611b2c565b61242783612a22565b6001600160a01b03831660009081526005602052604090205461244a9082611e56565b6001600160a01b0384166000908152600560205260409020556003546124709082611e56565b60035561203c8282612d89565b61248561330f565b82516001600160a01b0316156125175782516040516370a0823160e01b81526001600160a01b03909116906370a08231906124c490859060040161367c565b60206040518083038186803b1580156124dc57600080fd5b505afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906135f1565b81525b60208301516001600160a01b031615611eb35782602001516001600160a01b03166370a08231836040518263ffffffff1660e01b815260040161255a919061367c565b60206040518083038186803b15801561257257600080fd5b505afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b91906135f1565b81516001600160a01b0316156125d25781516125d2906001600160a01b031682600019612604565b60208201516001600160a01b031615612600576020820151612600906001600160a01b031682600019612604565b5050565b826001600160a01b031663095ea7b38360006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561265c57600080fd5b505af1158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b50506040805163095ea7b360e01b81526001600160a01b0384811660048301526024820184905291519185169163095ea7b3916044808201926020929091908290030181600087803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b505050506040513d602081101561270557600080fd5b5050505050565b61271583611b2c565b61271e83612a22565b6001600160a01b0383166000908152600560205260409020546127419082612cc5565b6001600160a01b0384166000908152600560205260409020556003546127679082612cc5565b60035561203c8282612dbe565b600061277e61106a565b9050600061278e82600254612821565b90505b80156126005760006127a282612df8565b600083815260046020526040902060030154909150808214156127c6575050612600565b6127eb6127d66003548386612837565b60008581526004602052604090205490611e56565b6000848152600460205260409020556128044283612821565b600084815260046020526040902060030155505060001901612791565b60008183106128305781611eb0565b5090919050565b6000428161284d8561284886612e4e565b612e88565b905060006128638361285e87612df8565b612821565b905060006128718284612e98565b905061287d8882612ea9565b9450505050505b9392505050565b61289361330f565b600082815260046020818152604080842080546001600160a01b0389168652818501845282862054958890529383528151808301909252600181015482526002015491810191909152611eb0927f000000000000000000000000000000000000000000000000000000000000000092612910929091839190612f02565b90612f27565b61186b6001600160a01b038516848484612f4c565b60006001600160a01b03821661294357506000611eb3565b82516001600160a01b0383811691161480611eb05750506020909101516001600160a01b0391821691161490565b60006129c6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612fa69092919063ffffffff16565b80519091501561203c578080602001905160208110156129e557600080fd5b505161203c5760405162461bcd60e51b815260040180806020018281038252602a815260200180613a9a602a913960400191505060405180910390fd5b60408051808201909152600a546001600160a01b039081168252600b54166020820152612a4e90612041565b15612a5857611aa0565b612a60612fbd565b6001600160a01b0381166000908152600d60209081526040918290208251808401909352805483526001015490820152612a9990612caf565b15612ac9576001600160a01b0381166000908152600d602052604090206010548155601154600190910155611aa0565b6001600160a01b038116600090815260056020908152604080832054600d835281842082518084018452815481526001909101548185015282518084019093526010548352601154938301939093529291612b249190612c02565b90506000612b3f68056bc75e2d631000006129108486612f02565b6001600160a01b0385166000908152600c60209081526040918290208251808401909352805483526001015490820152909150612b7c9082611e21565b6001600160a01b0385166000908152600c602090815260408083208451815593820151600194850155600d9091529020601054815560115491015550505050565b612bc561330f565b6040518060400160405280612be285600001518560000151612821565b8152602001612bf985602001518560200151612821565b90529392505050565b612c0a61330f565b81518351612c1791612cc5565b815260208083015190840151611e4b91612cc5565b82516001600160a01b031615801590612c455750805115155b15612c655780518351612c65916001600160a01b039091169084906130a5565b60208301516001600160a01b031615801590612c845750602081015115155b1561203c5761203c82826020015185602001516001600160a01b03166130a59092919063ffffffff16565b8051600090158015611eb3575050602001511590565b600082821115612d1c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211612d78576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612d8157fe5b049392505050565b6126006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016833084612916565b8015612600576126006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836130a5565b6000611eb3612e27837f0000000000000000000000000000000000000000000000000000000000000000612ea9565b7f000000000000000000000000000000000000000000000000000000000000000090611e56565b6000611eb3612e277f0000000000000000000000000000000000000000000000000000000000000000612e82856001612cc5565b90612ea9565b6000818310156128305781611eb0565b600081831015612d1c576000611eb0565b600082612eb857506000611eb3565b82820282848281612ec557fe5b0414611eb05760405162461bcd60e51b8152600401808060200182810382526021815260200180613a796021913960400191505060405180910390fd5b612f0a61330f565b8251612f169083612ea9565b81526020830151611e4b9083612ea9565b612f2f61330f565b8251612f3b9083612d22565b81526020830151611e4b9083612d22565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261186b908590612971565b6060612fb584846000856130b9565b949350505050565b60408051808201909152600a546001600160a01b039081168252600b54166020820152612fe990612041565b80612ff95750612ff7613214565b155b15613003576130a3565b61300b6130a3565b60408051808201909152600a546001600160a01b039081168252600b5416602082015260009061303b903061247d565b905060008061304983613219565b9150915061305561330f565b6003541561307a57600354613077906129108468056bc75e2d63100000612f02565b90505b6130848382611e21565b80516010556020908101516011558451600e559390930151600f555050505b565b61203c6001600160a01b0384168383611fea565b6060824710156130fa5760405162461bcd60e51b8152600401808060200182810382526026815260200180613a536026913960400191505060405180910390fd5b6131038561240f565b613154576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106131925780518252601f199092019160209182019101613173565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131f4576040519150601f19603f3d011682016040523d82523d6000602084013e6131f9565b606091505b509150915061320982828661326b565b979650505050505050565b600090565b61322161330f565b61322961330f565b60408051808201825260105481526011546020808301919091528251808401909352600e548352600f54908301529250613264908490612c02565b9050915091565b6060831561327a575081612884565b82511561328a5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132d45781810151838201526020016132bc565b50505050905090810190601f1680156133015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b60008083601f840112613351578182fd5b50813567ffffffffffffffff811115613368578182fd5b60208301915083602060408302850101111561338357600080fd5b9250929050565b60006020828403121561339b578081fd5b8135611eb081613a0f565b6000806000606084860312156133ba578182fd5b83516133c581613a0f565b60208501519093506133d681613a0f565b80925050604084015190509250925092565b600080604083850312156133fa578182fd5b823561340581613a0f565b9150602083013561341581613a24565b809150509250929050565b60008060408385031215613432578182fd5b823561343d81613a0f565b946020939093013593505050565b6000806020838503121561345d578182fd5b823567ffffffffffffffff811115613473578283fd5b61347f85828601613340565b90969095509350505050565b600080600080604085870312156134a0578081fd5b843567ffffffffffffffff808211156134b7578283fd5b818701915087601f8301126134ca578283fd5b8135818111156134d8578384fd5b88602080830285010111156134eb578384fd5b602092830196509450908601359080821115613505578283fd5b5061351287828801613340565b95989497509550505050565b60006020828403121561352f578081fd5b8151611eb081613a24565b6000806040838503121561354c578182fd5b825161355781613a24565b602084015190925061341581613a24565b60008060006060848603121561357c578283fd5b833561358781613a0f565b925060208401359150604084013561359e81613a0f565b809150509250925092565b6000604082840312156135ba578081fd5b6040516040810181811067ffffffffffffffff821117156135d757fe5b604052823581526020928301359281019290925250919050565b600060208284031215613602578081fd5b5051919050565b6000806040838503121561361b578182fd5b82359150602083013561341581613a0f565b60008284526020808501945082825b85811015613662578135875282820135838801526040968701969091019060010161363c565b509495945050505050565b80518252602090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038316815260608101612884602083018461366d565b6000604082526136f460408301858761362d565b9050826020830152949350505050565b6040808252810184905260006001600160fb1b03851115613723578081fd5b6020850280876060850137808301905060608101828152606084830301602085015261375081868861362d565b98975050505050505050565b6020808252600e908201526d494e56414c49445f41525241595360901b604082015260600190565b6020808252600d908201526c4e4f545f454d455247454e435960981b604082015260600190565b6020808252600f908201526e2620a9aa2fa2a827a1a42fa7ab22a960891b604082015260600190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526016908201527524a721a2a72a24ab22a9afa822a924a7a22fa7ab22a960511b604082015260600190565b6020808252601590820152742727aa2fa2a6a2a923a2a721acafa420a7222622a960591b604082015260600190565b60208082526018908201527f434f4e54524143545f4e4f545f57484954454c49535445440000000000000000604082015260600190565b6020808252600b908201526a16915493d7d05353d5539560aa1b604082015260600190565b6020808252600b908201526a1393d517d4d5105495115160aa1b604082015260600190565b60208082526011908201527013125457d35253925391d7d4105554d151607a1b604082015260600190565b60208082526010908201526f1253959053125117d15413d0d217d25160821b604082015260600190565b6020808252600a90820152691393d517d1955391115160b21b604082015260600190565b6020808252601190820152704455504c4943415445445f544f4b454e5360781b604082015260600190565b81516001600160a01b039081168252602092830151169181019190915260400190565b60408101611eb3828461366d565b90815260200190565b85815260e081016139cc602083018761366d565b8460608301528360808301526139e560a083018461366d565b9695505050505050565b918252602082015260400190565b81358155602082013560018201555050565b6001600160a01b0381168114611aa057600080fd5b8015158114611aa057600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e46de8f8c4ce2d3ddb3c7ad25be68ddf88a7a7aa59a54eb61c68711cc31532ab64736f6c63430007060033608060405234801561001057600080fd5b506040516103ee3803806103ee8339818101604052604081101561003357600080fd5b810190808051604051939291908464010000000082111561005357600080fd5b90830190602082018581111561006857600080fd5b825186602082028301116401000000008211171561008557600080fd5b82525081516020918201928201910280838360005b838110156100b257818101518382015260200161009a565b505050509190910160405250602001519150600090505b82518110156101445760006001600160a01b03168382815181106100e957fe5b60200260200101516001600160a01b031614156101055761013c565b61013c8260001985848151811061011857fe5b60200260200101516001600160a01b031661014c60201b61004d179092919060201c565b6001016100c9565b505050610254565b826001600160a01b031663095ea7b38360006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156101a457600080fd5b505af11580156101b8573d6000803e3d6000fd5b505050506040513d60208110156101ce57600080fd5b50506040805163095ea7b360e01b81526001600160a01b0384811660048301526024820184905291519185169163095ea7b3916044808201926020929091908290030181600087803b15801561022357600080fd5b505af1158015610237573d6000803e3d6000fd5b505050506040513d602081101561024d57600080fd5b5050505050565b61018b806102636000396000f3fe608060405236610048576040805162461bcd60e51b815260206004820152600f60248201526e11551217d393d517d0531313d5d151608a1b604482015290519081900360640190fd5b600080fd5b826001600160a01b031663095ea7b38360006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156100a557600080fd5b505af11580156100b9573d6000803e3d6000fd5b505050506040513d60208110156100cf57600080fd5b50506040805163095ea7b360e01b81526001600160a01b0384811660048301526024820184905291519185169163095ea7b3916044808201926020929091908290030181600087803b15801561012457600080fd5b505af1158015610138573d6000803e3d6000fd5b505050506040513d602081101561014e57600080fd5b505050505056fea26469706673582212204fe1e995be0003b05bee2a786f9bddc2863964487ea8072d0da11f09f14da26764736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102115760003560e01c80638b0e9f3f11610125578063b3cccfe3116100ad578063c2b18aa01161007c578063c2b18aa014610401578063ce56c45414610409578063d2e6d1c31461041c578063dd254a6a14610424578063f3fef3a31461043757610211565b8063b3cccfe3146103d6578063b40310c9146103de578063be66c60f146103f1578063c1a4b33f146103f957610211565b806396b973c0116100f457806396b973c01461038d57806396eeffaa146103a05780639a51d2d1146103b3578063a29a839f146103bb578063adc9772e146103c357610211565b80638b0e9f3f146103625780638f373bf31461036a5780639262187b1461037257806393e59dc11461038557610211565b80633ccdbb28116101a8578063541a7ca611610177578063541a7ca6146103095780635ce58c89146103115780636304a6bc14610327578063738573f41461034757806378e979251461035a57610211565b80633ccdbb28146102d15780633fc8cef3146102e45780634ff0876a146102f957806351ed6a301461030157610211565b80631be03f0f116101e45780631be03f0f14610281578063248169fe1461029657806327e235e3146102ab5780632936ada7146102be57610211565b806304f917af14610216578063059f8b161461024357806316676632146102585780631736884114610279575b600080fd5b610229610224366004613609565b61044a565b60405161023a9594939291906139b8565b60405180910390f35b61024b6105e8565b60405161023a91906139af565b61026b61026636600461338a565b6105f5565b60405161023a9291906139ef565b61024b61060e565b61029461028f36600461344b565b610614565b005b61029e6107c6565b60405161023a919061397e565b61024b6102b936600461338a565b6107f5565b61024b6102cc36600461338a565b610807565b6102946102df366004613568565b610819565b6102ec610929565b60405161023a919061367c565b61024b61094d565b6102ec610971565b61026b610995565b61031961099e565b60405161023a9291906136a9565b61033a61033536600461338a565b6109b4565b60405161023a91906139a1565b61024b61035536600461338a565b610b8f565b61024b610ba1565b61024b610bc5565b61026b610bcb565b61033a61038036600461338a565b610bd4565b6102ec610db2565b61026b61039b36600461338a565b610dd6565b6102946103ae36600461348b565b610def565b61024b611046565b61024b61106a565b6102946103d1366004613420565b61107a565b61029e611361565b6102296103ec366004613609565b611390565b6102ec61141a565b6102ec61143e565b610319611462565b610294610417366004613609565b611478565b6102ec6115b7565b6102946104323660046133e8565b6115db565b610294610445366004613420565b611871565b600061045461330f565b60008061045f61330f565b600260015414156104a5576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c1906104f990309060040161367c565b6040805180830381600087803b15801561051257600080fd5b505af1158015610526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054a919061353a565b50905080156105745760405162461bcd60e51b815260040161056b906138da565b60405180910390fd5b6000600254116105965760405162461bcd60e51b815260040161056b9061392f565b60006105a061106a565b116105bd5760405162461bcd60e51b815260040161056b906138b5565b6105c687611b2c565b6105d08888611390565b60018055939c929b5090995097509095509350505050565b68056bc75e2d6310000081565b600d602052600090815260409020805460019091015482565b60025481565b61061c611d95565b6001600160a01b0316336001600160a01b031614610673576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b60025461067e61106a565b111561069c5760405162461bcd60e51b815260040161056b906137ab565b806106a561330f565b60005b82811015610723576106dc8585838181106106bf57fe5b9050604002018036038101906106d591906135a9565b8390611e21565b91508484828181106106ea57fe5b9050604002016004600083600254016001018152602001908152602001600020600101818161071991906139fd565b50506001016106a8565b506002546107319083611e56565b600255604080518082019091526008546001600160a01b03908116825260095416602082015261078390337f000000000000000000000000000000000000000000000000000000000000000084611eb9565b7f2a8c58d10abc188dedbf373509adf27a451db729e76176e6aba0dea783889e4184846002546040516107b8939291906136e0565b60405180910390a150505050565b6107ce613329565b50604080518082019091526008546001600160a01b03908116825260095416602082015290565b60056020526000908152604090205481565b60076020526000908152604090205481565b610821611d95565b6001600160a01b0316336001600160a01b031614610878576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b61088183611f40565b6108c6576040805162461bcd60e51b81526020600482015260116024820152701513d2d15397d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b6108da6001600160a01b0384168284611fea565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60105460115482565b600a54600b546001600160a01b03918216911682565b6109bc61330f565b60026001541415610a02576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c190610a5690309060040161367c565b6040805180830381600087803b158015610a6f57600080fd5b505af1158015610a83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa7919061353a565b5090508015610ac85760405162461bcd60e51b815260040161056b906138da565b600060025411610aea5760405162461bcd60e51b815260040161056b9061392f565b6000610af461106a565b11610b115760405162461bcd60e51b815260040161056b906138b5565b60408051808201909152600a546001600160a01b039081168252600b54166020820152610b3d90612041565b15610b4757610b85565b6001600160a01b038316610b6d5760405162461bcd60e51b815260040161056b906137d4565b610b768361206d565b9150610b82838361216d565b91505b5060018055919050565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b600e54600f5482565b610bdc61330f565b60026001541415610c22576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c190610c7690309060040161367c565b6040805180830381600087803b158015610c8f57600080fd5b505af1158015610ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc7919061353a565b5090508015610ce85760405162461bcd60e51b815260040161056b906138da565b600060025411610d0a5760405162461bcd60e51b815260040161056b9061392f565b6000610d1461106a565b11610d315760405162461bcd60e51b815260040161056b906138b5565b6001600160a01b038316610d575760405162461bcd60e51b815260040161056b906137d4565b610d60836121de565b604080518082019091526008546001600160a01b039081168252600954166020820152909250610b85907f00000000000000000000000000000000000000000000000000000000000000008585611eb9565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c602052600090815260409020805460019091015482565b610df7611d95565b6001600160a01b0316336001600160a01b031614610e4e576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b828114610e6d5760405162461bcd60e51b815260040161056b9061375c565b6000610e7761106a565b600254909150610e8561330f565b60005b86811015610fb057878782818110610e9c57fe5b9050602002013584108015610ec3575082888883818110610eb957fe5b9050602002013511155b610edf5760405162461bcd60e51b815260040161056b90613905565b610eee8686838181106106bf57fe5b9150610f6a868683818110610eff57fe5b905060400201803603810190610f1591906135a9565b600460008b8b86818110610f2557fe5b90506020020135815260200190815260200160002060010160405180604001604052908160008201548152602001600182015481525050611e2190919063ffffffff16565b600460008a8a85818110610f7a57fe5b60209081029290920135835250818101929092526040016000208251600180830191909155929091015160029091015501610e88565b50604080518082019091526008546001600160a01b03908116825260095416602082015261100090337f000000000000000000000000000000000000000000000000000000000000000084611eb9565b7f0bb3e533df8edd2ab3c21173cdac3dffecef1b8ba101783a6e7b2220dc52e8d6878787876040516110359493929190613704565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110754261237e565b905090565b600260015414156110c0576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b600260015560006110d03361240f565b1580156110dc57503233145b905080806111815750604051636c9b2a3f60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d936547e9061113190339060040161367c565b60206040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611181919061351e565b61119d5760405162461bcd60e51b815260040161056b90613859565b604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c1906111ec90309060040161367c565b6040805180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d919061353a565b509050801561125e5760405162461bcd60e51b815260040161056b906138da565b6000600254116112805760405162461bcd60e51b815260040161056b9061392f565b600061128a61106a565b116112a75760405162461bcd60e51b815260040161056b906138b5565b6001600160a01b0384166112cd5760405162461bcd60e51b815260040161056b906137d4565b826112ea5760405162461bcd60e51b815260040161056b90613890565b6002546112f561106a565b11156113135760405162461bcd60e51b815260040161056b906137fa565b61131e843385612415565b7f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d848460405161134f929190613690565b60405180910390a15050600180555050565b611369613329565b5060408051808201909152600a546001600160a01b039081168252600b5416602082015290565b600061139a61330f565b6000806113a561330f565b50505060009384525050600460208181526040808520805482518084018452600180840154825260028401548287015260038401546001600160a01b03909816808a52968401865284892054968952600590930185529683902083518085019094528054845290910154928201929092529094565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6008546009546001600160a01b03918216911682565b611480611d95565b6001600160a01b0316336001600160a01b0316146114d7576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d8060008114611522576040519150601f19603f3d011682016040523d82523d6000602084013e611527565b606091505b505090508061156f576040805162461bcd60e51b815260206004820152600f60248201526e15d2551211149055d7d19052531151608a1b604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c19061162a90309060040161367c565b6040805180830381600087803b15801561164357600080fd5b505af1158015611657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167b919061353a565b9150508061169b5760405162461bcd60e51b815260040161056b90613784565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f87c24cd6040518163ffffffff1660e01b815260040160606040518083038186803b1580156116f657600080fd5b505afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e91906133a6565b5090915050336001600160a01b0382161461175b5760405162461bcd60e51b815260040161056b9061382a565b604080518082019091526008546001600160a01b0390811682526009541660208201526117db907f00000000000000000000000000000000000000000000000000000000000000009030906117b0908361247d565b604080518082019091526008546001600160a01b039081168252600954166020820152929190611eb9565b604080518082019091526008546001600160a01b03908116825260095416602082015261180890856125aa565b61183e6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685600019612604565b60408051808201909152600a546001600160a01b039081168252600b5416602082015261186b90856125aa565b50505050565b600260015414156118b7576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a33833981519152604482015290519081900360640190fd5b6002600155604051636f11e6c160e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636f11e6c19061190b90309060040161367c565b6040805180830381600087803b15801561192457600080fd5b505af1158015611938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195c919061353a565b509050801561197d5760405162461bcd60e51b815260040161056b906138da565b60006002541161199f5760405162461bcd60e51b815260040161056b9061392f565b60006119a961106a565b116119c65760405162461bcd60e51b815260040161056b906138b5565b816119e35760405162461bcd60e51b815260040161056b90613890565b6001600160a01b038316611a095760405162461bcd60e51b815260040161056b906137d4565b611a1433848461270c565b7f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d53383604051611a45929190613690565b60405180910390a150506001805550565b80516001600160a01b031615611aa05780602001516001600160a01b031681600001516001600160a01b03161415611aa05760405162461bcd60e51b815260040161056b90613953565b50565b6040805160028082526060808301845292602083019080368337019050509050816000015181600081518110611ad557fe5b60200260200101906001600160a01b031690816001600160a01b031681525050816020015181600181518110611b0757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b611b34612774565b6001600160a01b038116600090815260066020526040902054611b71576001600160a01b0381166000908152600660205260409020429055611aa0565b6000611b7b61106a565b90506000611b8b60025483612821565b6002546001600160a01b038516600090815260056020908152604080832054600690925282205460035494955092861193909291611bc88361237e565b9050805b868111611d6f57600081815260046020526040902054611bf55782611bf057611d6f565b611d67565b611c4b611c03868684612837565b6004600084815260200190815260200160002060040160008c6001600160a01b03166001600160a01b0316815260200190815260200160002054611e5690919063ffffffff16565b60008281526004602081815260408084206001600160a01b038f16855290920190529020558681148015611c7d575085155b15611c8757611d6f565b6000611c938a8361288b565b9050600182015b7f000000000000000000000000000000000000000000000000000000000000000083018111611d645760008181526004602090815260408083206001600160a01b038f1684526005018252918290208251808401909352805483526001015490820152611d079083611e21565b6004600083815260200190815260200160002060050160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000155602082015181600101559050508080600101915050611c9a565b50505b600101611bcc565b5050506001600160a01b0386166000908152600660205260409020429055505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015611df057600080fd5b505afa158015611e04573d6000803e3d6000fd5b505050506040513d6020811015611e1a57600080fd5b5051905090565b611e2961330f565b81518351611e3691611e56565b815260208083015190840151611e4b91611e56565b602082015292915050565b600082820183811015611eb0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b83516001600160a01b031615801590611ed25750805115155b15611ef45780518451611ef4916001600160a01b039091169085908590612916565b60208401516001600160a01b031615801590611f135750602081015115155b1561186b5761186b8383836020015187602001516001600160a01b0316612916909392919063ffffffff16565b604080518082019091526008546001600160a01b039081168252600954166020820152600090611f70908361292b565b158015611faf5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8015611eb3575060408051808201909152600a546001600160a01b039081168252600b54166020820152611fe3908361292b565b1592915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261203c908490612971565b505050565b80516000906001600160a01b0316158015611eb357505060208101516001600160a01b0316155b919050565b61207561330f565b60408051808201909152600a546001600160a01b039081168252600b541660208201526120a190612041565b156120ab57612068565b6120b482612a22565b604080518082018252600e548152600f546020808301919091526001600160a01b0385166000908152600c825283902083518085019094528054845260010154908301526121029190612bbd565b604080518082018252600080825260208083018281526001600160a01b0388168352600c8252918490209251835590516001909201919091558151808301909252600e548252600f549082015290915061215c9082612c02565b8051600e5560200151600f55919050565b61217561330f565b60408051808201909152600a546001600160a01b039081168252600b541660208201526121ad906121a6903061247d565b8390612bbd565b60408051808201909152600a546001600160a01b039081168252600b54166020820152909150611eb3908483612c2c565b6121e661330f565b6121ef82611b2c565b60006122266121fc61106a565b7f000000000000000000000000000000000000000000000000000000000000000060025401612821565b6001600160a01b0384166000908152600760205260409020549091505b8181116123225760008181526004602090815260408083206001600160a01b0388168452600501825291829020825180840190935280548352600101549082015261228d90612caf565b61231a5760008181526004602090815260408083206001600160a01b038816845260050182529182902082518084019093528054835260010154908201526122d6908490611e21565b60408051808201825260008082526020808301828152868352600482528483206001600160a01b038b16845260050190915292902090518155905160019091015592505b600101612243565b506001600160a01b03831660009081526007602052604090819020829055517f04e98a5a05a405118338cc7a2a3473388ea422bee4f982d332f92effbe2cbafc9061237090859085906136c3565b60405180910390a150919050565b60007f00000000000000000000000000000000000000000000000000000000000000008210156123b057506000612068565b611eb360016124097f0000000000000000000000000000000000000000000000000000000000000000612403867f0000000000000000000000000000000000000000000000000000000000000000612cc5565b90612d22565b90611e56565b3b151590565b61241e83611b2c565b61242783612a22565b6001600160a01b03831660009081526005602052604090205461244a9082611e56565b6001600160a01b0384166000908152600560205260409020556003546124709082611e56565b60035561203c8282612d89565b61248561330f565b82516001600160a01b0316156125175782516040516370a0823160e01b81526001600160a01b03909116906370a08231906124c490859060040161367c565b60206040518083038186803b1580156124dc57600080fd5b505afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251491906135f1565b81525b60208301516001600160a01b031615611eb35782602001516001600160a01b03166370a08231836040518263ffffffff1660e01b815260040161255a919061367c565b60206040518083038186803b15801561257257600080fd5b505afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b91906135f1565b81516001600160a01b0316156125d25781516125d2906001600160a01b031682600019612604565b60208201516001600160a01b031615612600576020820151612600906001600160a01b031682600019612604565b5050565b826001600160a01b031663095ea7b38360006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561265c57600080fd5b505af1158015612670573d6000803e3d6000fd5b505050506040513d602081101561268657600080fd5b50506040805163095ea7b360e01b81526001600160a01b0384811660048301526024820184905291519185169163095ea7b3916044808201926020929091908290030181600087803b1580156126db57600080fd5b505af11580156126ef573d6000803e3d6000fd5b505050506040513d602081101561270557600080fd5b5050505050565b61271583611b2c565b61271e83612a22565b6001600160a01b0383166000908152600560205260409020546127419082612cc5565b6001600160a01b0384166000908152600560205260409020556003546127679082612cc5565b60035561203c8282612dbe565b600061277e61106a565b9050600061278e82600254612821565b90505b80156126005760006127a282612df8565b600083815260046020526040902060030154909150808214156127c6575050612600565b6127eb6127d66003548386612837565b60008581526004602052604090205490611e56565b6000848152600460205260409020556128044283612821565b600084815260046020526040902060030155505060001901612791565b60008183106128305781611eb0565b5090919050565b6000428161284d8561284886612e4e565b612e88565b905060006128638361285e87612df8565b612821565b905060006128718284612e98565b905061287d8882612ea9565b9450505050505b9392505050565b61289361330f565b600082815260046020818152604080842080546001600160a01b0389168652818501845282862054958890529383528151808301909252600181015482526002015491810191909152611eb0927f000000000000000000000000000000000000000000000000000000000000000092612910929091839190612f02565b90612f27565b61186b6001600160a01b038516848484612f4c565b60006001600160a01b03821661294357506000611eb3565b82516001600160a01b0383811691161480611eb05750506020909101516001600160a01b0391821691161490565b60006129c6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612fa69092919063ffffffff16565b80519091501561203c578080602001905160208110156129e557600080fd5b505161203c5760405162461bcd60e51b815260040180806020018281038252602a815260200180613a9a602a913960400191505060405180910390fd5b60408051808201909152600a546001600160a01b039081168252600b54166020820152612a4e90612041565b15612a5857611aa0565b612a60612fbd565b6001600160a01b0381166000908152600d60209081526040918290208251808401909352805483526001015490820152612a9990612caf565b15612ac9576001600160a01b0381166000908152600d602052604090206010548155601154600190910155611aa0565b6001600160a01b038116600090815260056020908152604080832054600d835281842082518084018452815481526001909101548185015282518084019093526010548352601154938301939093529291612b249190612c02565b90506000612b3f68056bc75e2d631000006129108486612f02565b6001600160a01b0385166000908152600c60209081526040918290208251808401909352805483526001015490820152909150612b7c9082611e21565b6001600160a01b0385166000908152600c602090815260408083208451815593820151600194850155600d9091529020601054815560115491015550505050565b612bc561330f565b6040518060400160405280612be285600001518560000151612821565b8152602001612bf985602001518560200151612821565b90529392505050565b612c0a61330f565b81518351612c1791612cc5565b815260208083015190840151611e4b91612cc5565b82516001600160a01b031615801590612c455750805115155b15612c655780518351612c65916001600160a01b039091169084906130a5565b60208301516001600160a01b031615801590612c845750602081015115155b1561203c5761203c82826020015185602001516001600160a01b03166130a59092919063ffffffff16565b8051600090158015611eb3575050602001511590565b600082821115612d1c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808211612d78576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612d8157fe5b049392505050565b6126006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016833084612916565b8015612600576126006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836130a5565b6000611eb3612e27837f0000000000000000000000000000000000000000000000000000000000000000612ea9565b7f000000000000000000000000000000000000000000000000000000000000000090611e56565b6000611eb3612e277f0000000000000000000000000000000000000000000000000000000000000000612e82856001612cc5565b90612ea9565b6000818310156128305781611eb0565b600081831015612d1c576000611eb0565b600082612eb857506000611eb3565b82820282848281612ec557fe5b0414611eb05760405162461bcd60e51b8152600401808060200182810382526021815260200180613a796021913960400191505060405180910390fd5b612f0a61330f565b8251612f169083612ea9565b81526020830151611e4b9083612ea9565b612f2f61330f565b8251612f3b9083612d22565b81526020830151611e4b9083612d22565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261186b908590612971565b6060612fb584846000856130b9565b949350505050565b60408051808201909152600a546001600160a01b039081168252600b54166020820152612fe990612041565b80612ff95750612ff7613214565b155b15613003576130a3565b61300b6130a3565b60408051808201909152600a546001600160a01b039081168252600b5416602082015260009061303b903061247d565b905060008061304983613219565b9150915061305561330f565b6003541561307a57600354613077906129108468056bc75e2d63100000612f02565b90505b6130848382611e21565b80516010556020908101516011558451600e559390930151600f555050505b565b61203c6001600160a01b0384168383611fea565b6060824710156130fa5760405162461bcd60e51b8152600401808060200182810382526026815260200180613a536026913960400191505060405180910390fd5b6131038561240f565b613154576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106131925780518252601f199092019160209182019101613173565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131f4576040519150601f19603f3d011682016040523d82523d6000602084013e6131f9565b606091505b509150915061320982828661326b565b979650505050505050565b600090565b61322161330f565b61322961330f565b60408051808201825260105481526011546020808301919091528251808401909352600e548352600f54908301529250613264908490612c02565b9050915091565b6060831561327a575081612884565b82511561328a5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132d45781810151838201526020016132bc565b50505050905090810190601f1680156133015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b60008083601f840112613351578182fd5b50813567ffffffffffffffff811115613368578182fd5b60208301915083602060408302850101111561338357600080fd5b9250929050565b60006020828403121561339b578081fd5b8135611eb081613a0f565b6000806000606084860312156133ba578182fd5b83516133c581613a0f565b60208501519093506133d681613a0f565b80925050604084015190509250925092565b600080604083850312156133fa578182fd5b823561340581613a0f565b9150602083013561341581613a24565b809150509250929050565b60008060408385031215613432578182fd5b823561343d81613a0f565b946020939093013593505050565b6000806020838503121561345d578182fd5b823567ffffffffffffffff811115613473578283fd5b61347f85828601613340565b90969095509350505050565b600080600080604085870312156134a0578081fd5b843567ffffffffffffffff808211156134b7578283fd5b818701915087601f8301126134ca578283fd5b8135818111156134d8578384fd5b88602080830285010111156134eb578384fd5b602092830196509450908601359080821115613505578283fd5b5061351287828801613340565b95989497509550505050565b60006020828403121561352f578081fd5b8151611eb081613a24565b6000806040838503121561354c578182fd5b825161355781613a24565b602084015190925061341581613a24565b60008060006060848603121561357c578283fd5b833561358781613a0f565b925060208401359150604084013561359e81613a0f565b809150509250925092565b6000604082840312156135ba578081fd5b6040516040810181811067ffffffffffffffff821117156135d757fe5b604052823581526020928301359281019290925250919050565b600060208284031215613602578081fd5b5051919050565b6000806040838503121561361b578182fd5b82359150602083013561341581613a0f565b60008284526020808501945082825b85811015613662578135875282820135838801526040968701969091019060010161363c565b509495945050505050565b80518252602090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b038316815260608101612884602083018461366d565b6000604082526136f460408301858761362d565b9050826020830152949350505050565b6040808252810184905260006001600160fb1b03851115613723578081fd5b6020850280876060850137808301905060608101828152606084830301602085015261375081868861362d565b98975050505050505050565b6020808252600e908201526d494e56414c49445f41525241595360901b604082015260600190565b6020808252600d908201526c4e4f545f454d455247454e435960981b604082015260600190565b6020808252600f908201526e2620a9aa2fa2a827a1a42fa7ab22a960891b604082015260600190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526016908201527524a721a2a72a24ab22a9afa822a924a7a22fa7ab22a960511b604082015260600190565b6020808252601590820152742727aa2fa2a6a2a923a2a721acafa420a7222622a960591b604082015260600190565b60208082526018908201527f434f4e54524143545f4e4f545f57484954454c49535445440000000000000000604082015260600190565b6020808252600b908201526a16915493d7d05353d5539560aa1b604082015260600190565b6020808252600b908201526a1393d517d4d5105495115160aa1b604082015260600190565b60208082526011908201527013125457d35253925391d7d4105554d151607a1b604082015260600190565b60208082526010908201526f1253959053125117d15413d0d217d25160821b604082015260600190565b6020808252600a90820152691393d517d1955391115160b21b604082015260600190565b6020808252601190820152704455504c4943415445445f544f4b454e5360781b604082015260600190565b81516001600160a01b039081168252602092830151169181019190915260400190565b60408101611eb3828461366d565b90815260200190565b85815260e081016139cc602083018761366d565b8460608301528360808301526139e560a083018461366d565b9695505050505050565b918252602082015260400190565b81358155602082013560018201555050565b6001600160a01b0381168114611aa057600080fd5b8015158114611aa057600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220e46de8f8c4ce2d3ddb3c7ad25be68ddf88a7a7aa59a54eb61c68711cc31532ab64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
