Source Code
Latest 25 from a total of 472 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Stake Many | 21684374 | 297 days ago | IN | 0 ETH | 0.0010965 | ||||
| Unstake Many | 21636349 | 304 days ago | IN | 0 ETH | 0.00057878 | ||||
| Stake Many | 21003363 | 392 days ago | IN | 0 ETH | 0.00277215 | ||||
| Unstake Many | 21003333 | 392 days ago | IN | 0 ETH | 0.00194419 | ||||
| Stake Many | 20638581 | 443 days ago | IN | 0 ETH | 0.00017757 | ||||
| Unstake Many | 20544027 | 456 days ago | IN | 0 ETH | 0.00021196 | ||||
| Stake Many | 20464051 | 468 days ago | IN | 0 ETH | 0.00398498 | ||||
| Unstake Many | 20440616 | 471 days ago | IN | 0 ETH | 0.00042059 | ||||
| Unstake Many | 20272097 | 494 days ago | IN | 0 ETH | 0.0004769 | ||||
| Stake Many | 20251703 | 497 days ago | IN | 0 ETH | 0.00072192 | ||||
| Unstake Many | 20251693 | 497 days ago | IN | 0 ETH | 0.00048267 | ||||
| Stake Many | 20105421 | 518 days ago | IN | 0 ETH | 0.00274709 | ||||
| Unstake Many | 20105407 | 518 days ago | IN | 0 ETH | 0.00163207 | ||||
| Stake Many | 19852619 | 553 days ago | IN | 0 ETH | 0.00177575 | ||||
| Unstake Many | 19717770 | 572 days ago | IN | 0 ETH | 0.0057015 | ||||
| Unstake Many | 19657714 | 580 days ago | IN | 0 ETH | 0.00032331 | ||||
| Stake Many | 19585800 | 590 days ago | IN | 0 ETH | 0.00154397 | ||||
| Stake Many | 19585641 | 590 days ago | IN | 0 ETH | 0.0029126 | ||||
| Stake Many | 19581228 | 591 days ago | IN | 0 ETH | 0.00880764 | ||||
| Unstake Many | 19581192 | 591 days ago | IN | 0 ETH | 0.00537215 | ||||
| Unstake Many | 19508187 | 601 days ago | IN | 0 ETH | 0.00190918 | ||||
| Stake Many | 19245375 | 638 days ago | IN | 0 ETH | 0.00295959 | ||||
| Unstake Many | 19057943 | 664 days ago | IN | 0 ETH | 0.00193818 | ||||
| Stake Many | 19051981 | 665 days ago | IN | 0 ETH | 0.0005758 | ||||
| Stake Many | 19010270 | 671 days ago | IN | 0 ETH | 0.00295959 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StakePBLCNFT
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Multiple files format)
pragma solidity 0.8.17;
// SPDX-License-Identifier: Unlicense
import "./Ownable.sol";
import "./SafeMath.sol";
import "./IERC1155.sol";
import "./IERC20.sol";
import "./IUniswapV2Router.sol";
import "./ERC1155Holder.sol";
import "./ReentrancyGuard.sol";
contract StakePBLCNFT is Ownable, ERC1155Holder, ReentrancyGuard{
using SafeMath for uint256;
/**
* NFT contract address
*/
IERC1155 public stakingNft;
/**
*State (ERC20) token address
*/
IERC20 public rewardingToken;
/**
* state token divisible upto rewardingTokenDecimals
*/
uint256 public rewardingTokenDecimals;
/**
* usdc token divisible upto usdcDecimal
*/
uint256 public usdcMultiplier = 1_000_000;
/**
* stable coin to calculate price in USD
*/
IERC20 public usdc;
/** uniswap v2 router to calculate the token's reward on run-time
* usd balance equalent token
*/
IUniswapV2Router02 public uniswapRouter;
/**
* wallet from where contract will transfer State reward
*/
address private rewardingTokenWallet;
/* per day reward and multiple of 100
* 16.18 x 100
*/
uint256 public rewardAPY = 1618;
/**
* struct to hold the info of staked NFTs
*/
struct nftInfo {
uint256 tokenId;
address staker;
uint256 stakeTime;
uint256 category;
uint256 amount;
uint256 reward;
}
/**
* if staking is allowed, state to flip staking
*/
bool public stakeAllowed = true;
/**
* if UnStake is allowed state to flip staking
*/
bool public unstakeAllowed = true;
mapping (address => mapping (uint256 => nftInfo)) public staked;
/**
* category like broze, silver, gold, platinum asigned a number
*/
mapping (uint256 => uint256) public category;
/**
* events fire after every stake and unstake
*/
event Stake(address staker, uint256 indexed tokenId, uint256 category, uint256 amount, uint256 stakeTime);
event Unstake(address unstaker , uint256 tokenId, uint256 reward);
event Withdraw(address indexed withdrawer);
event WithdrawToken(address indexed withdrawer, uint256 amount);
/**
* modifier to check if the NFTs are approved to stake
*/
modifier isApproved() {
require(stakingNft.isApprovedForAll(_msgSender(),address(this)), "NFTs Not Approved");
_;
}
constructor() {
// mainnet
stakingNft = IERC1155(0xfBaE39320AA6E4Aee6829489aeD6eb2CC32a6459);
rewardingToken = IERC20(0x00C2999c8B2AdF4ABC835cc63209533973718eB1);
rewardingTokenDecimals = rewardingToken.decimals();
rewardingTokenWallet = 0x61d966e1a54Ff9C6B4cd083B5Ec968B366850f65;
uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
category[35765170590814674817329738340066840990845959557561780372227731964376303796239]=1;
category[35765170590814674817329738340066840990845959557561780372227731964376303796229]=10;
category[35765170590814674817329738340066840990845959557561780372227731964376303796230]=50;
category[35765170590814674817329738340066840990845959557561780372227731964376303796231]=100;
category[35765170590814674817329738340066840990845959557561780372227731964376303796232]=500;
category[35765170590814674817329738340066840990845959557561780372227731964376303796233]=1_000;
category[35765170590814674817329738340066840990845959557561780372227731964376303796234]=10_000;
category[35765170590814674817329738340066840990845959557561780372227731964376303796235]=50_000;
category[35765170590814674817329738340066840990845959557561780372227731964376303796236]=100_000;
category[35765170590814674817329738340066840990845959557561780372227731964376303796225]=1_000_000;
}
/**
* Function to show the rewarding token's wallet
*/
function rewardingWalletGet() public view returns (address){
return rewardingTokenWallet;
}
/**
* Function to change the APY, must be multiplied by 100
* it takes one integer value
* only owner can call this function
*/
function rewardPerDaySet(uint256 value) public onlyOwner{
/**
* mutiply value with 100.
*/
rewardAPY = value;
}
/**
* setter function for rewarding token address, it takes one token address
* only owner can call this function
*/
function changeRewardingToken(address newToken) public onlyOwner {
rewardingToken = IERC20(newToken);
}
/**
* setter for rewarding token's wallet address, it takes one wallet address
* only owner can call this function
*/
function changeRewardingTokenWallet(address newWallet) public onlyOwner {
rewardingTokenWallet = newWallet;
}
/**
* internal Stake NFT function, it takes one NFT Id and its amount
*/
function _stake(uint256 tokenId , uint256 amount) internal isApproved() {
require(stakeAllowed , "staking is stopped");
require(stakingNft.balanceOf(_msgSender(), tokenId) >= amount, "Must Own Nft");
uint256 time = block.timestamp;
nftInfo storage info = staked[_msgSender()][tokenId];
uint reward = getPreviousReward(_msgSender(), tokenId);
stakingNft.safeTransferFrom(_msgSender() , address(this) , tokenId, amount, '');
info.tokenId = tokenId;
info.amount = info.amount.add(amount);
info.staker = _msgSender();
info.stakeTime = time;
info.category = category[tokenId];
info.reward = info.reward.add(reward);
emit Stake(_msgSender() , tokenId, category[tokenId], info.amount, time);
}
/**
* internal unstake NFTs , it takes NFT Id and amount
*/
function _unstakeByAmount(uint256 tokenId, uint256 amount) public nonReentrant{
require(unstakeAllowed , "unstaking not allowed right now");
require(stakingNft.balanceOf(address(this), tokenId) > 0, "Contract Must Own Nft");
nftInfo storage info = staked[_msgSender()][tokenId];
require(info.tokenId == tokenId, "Not Staked");
require(info.staker == _msgSender(), "Not Your staked Token");
uint256 stakedtime = block.timestamp.sub(info.stakeTime);
stakedtime = stakedtime / 1 days;
// uint256 reward = rewardAPY.mul(category[tokenId]).mul(stakedtime).mul(usdcMultiplier).div(10000).div(365);
uint256 reward = getPreviousReward(_msgSender(),tokenId);
reward = reward.add(info.reward);
address[] memory path;
path = new address[](2);
path[0] = address(usdc);
path[1] = address(rewardingToken);
uint256[] memory price = priceOfToken(reward, path);
if(price[1] > 0 && price[1] <= pendingRewards() ){
rewardingToken.transferFrom(rewardingTokenWallet , _msgSender() , price[1]);
}
else{
require(false, "Pending Rewards Not Allocated");
}
stakingNft.safeTransferFrom(address(this), _msgSender(), tokenId, info.amount, '');
info.reward = 0;
info.amount = info.amount.sub(amount);
info.stakeTime = block.timestamp;
emit Unstake(_msgSender() , tokenId, price[1]);
}
/**
* internal unstake NFTs , it takes NFT Id
*/
function _unstake(uint256 tokenId) internal {
require(unstakeAllowed , "unstaking not allowed right now");
require(stakingNft.balanceOf(address(this), tokenId) > 0, "Contract Must Own Nft");
nftInfo storage info = staked[_msgSender()][tokenId];
require(info.tokenId == tokenId, "Not Staked");
require(info.staker == _msgSender(), "Not Your staked Token");
uint256 stakedtime = block.timestamp.sub(info.stakeTime);
stakedtime = stakedtime / 1 days;
// uint256 reward = rewardAPY.mul(category[tokenId]).mul(stakedtime).mul(usdcMultiplier).div(10000).div(365);
uint256 reward = getPreviousReward(_msgSender(),tokenId);
reward = reward.add(info.reward);
address[] memory path;
path = new address[](2);
path[0] = address(usdc);
path[1] = address(rewardingToken);
uint256[] memory price = priceOfToken(reward, path);
if(price[1] > 0 && price[1] <= pendingRewards() ){
rewardingToken.transferFrom(rewardingTokenWallet , _msgSender() , price[1]);
}
else{
require(false, "Pending Rewards Not Allocated");
}
stakingNft.safeTransferFrom(address(this), _msgSender(), tokenId, info.amount, '');
info.tokenId = 0;
info.staker = address(0);
info.stakeTime = 0;
info.category = 0;
info.reward = 0;
info.amount = 0;
emit Unstake(_msgSender() , tokenId, price[1]);
}
/**
* get the price of token, input amount of USDC and addresses of udsc and state token, it will return
* usdc amount equal state tokens
*/
function priceOfToken(uint256 amount, address[] memory path) public view returns (uint[] memory amounts){
amounts = uniswapRouter.getAmountsOut(amount, path);
return amounts;
}
/**
* function to check the current reward of a NFT. it takes one nft id and the account address of staker
* and return number of state token reward for that staked NFT
*/
function getPreviousReward(address staker, uint256 tokenId) public view returns (uint256){
nftInfo memory info = staked[staker][tokenId];
uint256 stakedtime = block.timestamp.sub(info.stakeTime);
stakedtime = stakedtime / 1 days;
// reward calculation with amount of NFTs
uint256 reward = rewardAPY.mul(category[info.tokenId]).mul(stakedtime).mul(info.amount).mul(usdcMultiplier).div(10000).div(365);
return reward;
}
/**
* function to check the current reward of a NFT. it takes one nft id and the account address of staker
* and return number of state token reward for that staked NFT
*/
function checkReward(address staker, uint256 tokenId) public view returns (uint256){
nftInfo memory info = staked[staker][tokenId];
uint256 stakedtime = block.timestamp.sub(info.stakeTime);
stakedtime = stakedtime / 1 days;
// reward calculation with amount of NFTs
uint256 reward = rewardAPY.mul(category[info.tokenId]).mul(stakedtime).mul(info.amount).mul(usdcMultiplier).div(10000).div(365);
reward = reward.add(reward);
address[] memory path;
path = new address[](2);
path[0] = address(usdc);
path[1] = address(rewardingToken);
uint256[] memory price = priceOfToken(reward, path);
return price[1];
}
/**
* public method to stake single NFTs, it takes one nft id and amount of that nft as input
*/
function stake(uint256 tokenId, uint256 amount) public nonReentrant{
_stake(tokenId, amount);
}
/**
* public method to Unstake single NFTs, it takes nft id as input
*/
function unstake(uint256 tokenId) public nonReentrant{
_unstake(tokenId);
}
/**
* public method to stake more than one NFTs, it takes one array of NFT ids and one array for their amounts.
* it will call internal stake fucntion
*/
function stakeMany(uint256[] memory tokenIds , uint256[] memory amount) public nonReentrant{
for(uint256 i = 0; i< tokenIds.length;i++){
_stake(tokenIds[i] , amount[i]);
}
}
/**
* public method to Unstake all NFTs, it takes one array nft ids
*/
function unstakeMany(uint256[] memory tokenIds) public {
for(uint256 i = 0; i< tokenIds.length;i++){
_unstake(tokenIds[i]);
}
}
/**
* public method to Unstake all NFTs, it takes one array nft ids and array with amounts
*/
function unstakeManyByAmount(uint256[] memory tokenIds, uint256[] memory amount) public {
for(uint256 i = 0; i< tokenIds.length;i++){
_unstakeByAmount(tokenIds[i], amount[i]);
}
}
/**
* public function to check how many tokens are set as a reward, tokens allocated for reward.
*/
function pendingRewards() public view returns (uint256){
return rewardingToken.allowance(rewardingTokenWallet , address(this));
}
/**
* public method flip stake state, it takes one true/false boolean value.
* only owner can call this function
*/
function setStakeAllowed(bool state) public onlyOwner {
stakeAllowed = state;
}
/**
* public method flip Unstake state, it takes one true/false boolean value.
* only owner can call this function
*/
function setUnStakeAllowed(bool state) public onlyOwner {
unstakeAllowed = state;
}
/**
* NFT contract address setter, it takes one NFT contract address
* only owner can call this function
*/
function setNFTadress(IERC1155 nft) public onlyOwner {
stakingNft = nft;
}
/**
* NFT price setter, it takes one NFT contract address and one price
* only owner can call this function
*/
function setCategory(uint256 tokenId, uint256 price) public onlyOwner {
category[tokenId] = price;
}
/**
* withdraw tokens stuck in the smart contract, pass address of receiver and token address
* only owner can call this function
*/
function withdrawAnyToken(address _recipient, address _IERC20address, uint256 _amount) public onlyOwner returns(bool) {
IERC20(_IERC20address).transfer(_recipient, _amount); //use of the BEP20 traditional transfer
return true;
}
/**
* transfer coin stuck in the smart contract, it takes one account address.
* only owner can call this function
*/
function transferXS(address payable rec) public onlyOwner {
rec.transfer(address(this).balance);
}
/**
* withdraw NFTs stuck in the smart contract, it takes one address and one nft id
* only owner can call this function
*/
function withdrawUselessNft(address _recipient, uint256 tokenId, uint256 amount) public onlyOwner returns(bool) {
stakingNft.safeTransferFrom(address(this), _recipient, tokenId, amount, '');
return true;
}
receive() external payable{
}
}pragma solidity 0.8.17;
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}pragma solidity 0.8.17;
// SPDX-License-Identifier: MIT
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol)
pragma solidity 0.8.17;
import "./ERC1155Receiver.sol";
/**
* Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
*
* IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
* stuck.
*
* @dev _Available since v3.1._
*/
contract ERC1155Holder is ERC1155Receiver {
function onERC1155Received(
address,
address,
uint256,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155Received.selector;
}
function onERC1155BatchReceived(
address,
address,
uint256[] memory,
uint256[] memory,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155BatchReceived.selector;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol)
pragma solidity 0.8.17;
import "./IERC1155Receiver.sol";
import "./ERC165.sol";
/**
* @dev _Available since v3.1._
*/
abstract contract ERC1155Receiver is ERC165, IERC1155Receiver {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
}
}pragma solidity 0.8.17;
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)
pragma solidity 0.8.17;
import "./IERC165.sol";
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(
address indexed operator,
address indexed from,
address indexed to,
uint256[] ids,
uint256[] values
);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
external
view
returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes calldata data
) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)
pragma solidity 0.8.17;
import "./IERC1155.sol";
/**
* @dev Interface of the optional ERC1155MetadataExtension interface, as defined
* in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
*
* _Available since v3.1._
*/
interface IERC1155MetadataURI is IERC1155 {
/**
* @dev Returns the URI for token type `id`.
*
* If the `\{id\}` substring is present in the URI, it must be replaced by
* clients with the actual token type ID.
*/
function uri(uint256 id) external view returns (string memory);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
pragma solidity 0.8.17;
import "./IERC165.sol";
/**
* @dev _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
* @dev Handles the receipt of a single ERC1155 token type. This function is
* called at the end of a `safeTransferFrom` after the balance has been updated.
*
* NOTE: To accept the transfer, this must return
* `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
* (i.e. 0xf23a6e61, or its own function selector).
*
* @param operator The address which initiated the transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param id The ID of the token being transferred
* @param value The amount of tokens being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
/**
* @dev Handles the receipt of a multiple ERC1155 token types. This function
* is called at the end of a `safeBatchTransferFrom` after the balances have
* been updated.
*
* NOTE: To accept the transfer(s), this must return
* `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
* (i.e. 0xbc197c81, or its own function selector).
*
* @param operator The address which initiated the batch transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param ids An array containing ids of each token being transferred (order and length must match values array)
* @param values An array containing amounts of each token being transferred (order and length must match ids array)
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity 0.8.17;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity 0.8.17;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Returns the token decimals.
*/
function decimals() external view returns (uint8);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}pragma solidity 0.8.17;
// SPDX-License-Identifier: Unlicense
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}pragma solidity 0.8.17;
// SPDX-License-Identifier: Unlicense
import "./Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity 0.8.17;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}pragma solidity 0.8.17;
// SPDX-License-Identifier: Unlicense
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"category","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeTime","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"unstaker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"withdrawer","type":"address"}],"name":"Withdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawToken","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_unstakeByAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"category","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"changeRewardingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeRewardingTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPreviousReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"priceOfToken","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"rewardPerDaySet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardingTokenDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardingWalletGet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC1155","name":"nft","type":"address"}],"name":"setNFTadress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setStakeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setUnStakeAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"stakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"staked","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"category","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingNft","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"rec","type":"address"}],"name":"transferXS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"unstakeManyByAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_IERC20address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAnyToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawUselessNft","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052620f42406005556106526009556001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055503480156200005457600080fd5b5062000075620000696200050960201b60201c565b6200051160201b60201c565b6001808190555073fbae39320aa6e4aee6829489aed6eb2cc32a6459600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555072c2999c8b2adf4abc835cc63209533973718eb1600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000193573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b9919062000618565b60ff166004819055507361d966e1a54ff9c6b4cd083b5ec968b366850f65600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c00000000000000000000000f815260200190815260200160002081905550600a600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c0000000000000000000000058152602001908152602001600020819055506032600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c0000000000000000000000068152602001908152602001600020819055506064600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c0000000000000000000000078152602001908152602001600020819055506101f4600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c0000000000000000000000088152602001908152602001600020819055506103e8600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c000000000000000000000009815260200190815260200160002081905550612710600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c00000000000000000000000a81526020019081526020016000208190555061c350600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c00000000000000000000000b815260200190815260200160002081905550620186a0600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c00000000000000000000000c815260200190815260200160002081905550620f4240600c60007f4f125e835bbc9bbb77607c66de6d0d32339b936c0000000000000000000000018152602001908152602001600020819055506200064a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600060ff82169050919050565b620005f281620005da565b8114620005fe57600080fd5b50565b6000815190506200061281620005e7565b92915050565b600060208284031215620006315762000630620005d5565b5b6000620006418482850162000601565b91505092915050565b614a0c806200065a6000396000f3fe6080604052600436106102295760003560e01c80638a04ef8e11610123578063bc197c81116100ab578063ed5fa6911161006f578063ed5fa69114610837578063eded3fda14610862578063ee018b6d1461088d578063f23a6e61146108b8578063f2fde38b146108f557610230565b8063bc197c8114610740578063cad753b91461077d578063dd0a73fd146107a6578063e6535f8f146107cf578063e88e4ab0146107fa57610230565b80638f169816116100f25780638f169816146106425780638fe40eb014610684578063a0da6d74146106af578063a79d927d146106ec578063b7fd17841461071557610230565b80638a04ef8e146105865780638da5cb5b146105c35780638e415190146105ee5780638eee79f91461061757610230565b80633f770dd6116101b15780636982d815116101755780636982d815146104c7578063715018a6146104f2578063735de9f7146105095780637b0472f0146105345780637e87bf791461055d57610230565b80633f770dd6146103e65780634e5517f51461040f57806358905552146104385780635e1d68041461046157806361f5836d1461049e57610230565b80630f8a267b116101f85780630f8a267b14610301578063253eca1f1461032c5780632bf8b03f146103695780632e17de78146103925780633e413bee146103bb57610230565b806301ffc9a7146102355780630464230a146102725780630d50c189146102af5780630d752d55146102d857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061322c565b61091e565b6040516102699190613274565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613323565b610998565b6040516102a69190613372565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d191906134e6565b610b4c565b005b3480156102e457600080fd5b506102ff60048036038101906102fa919061352f565b610b92565b005b34801561030d57600080fd5b50610316610c52565b60405161032391906135bb565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e91906135d6565b610c78565b6040516103609190613372565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b919061362f565b610c90565b005b34801561039e57600080fd5b506103b960048036038101906103b491906135d6565b610d29565b005b3480156103c757600080fd5b506103d0610d45565b6040516103dd91906135bb565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061369a565b610d6b565b005b34801561041b57600080fd5b50610436600480360381019061043191906136c7565b610e2b565b005b34801561044457600080fd5b5061045f600480360381019061045a91906135d6565b610e8d565b005b34801561046d57600080fd5b506104886004803603810190610483919061373f565b610f13565b6040516104959190613274565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c091906137d0565b61101b565b005b3480156104d357600080fd5b506104dc6110e1565b6040516104e9919061381e565b60405180910390f35b3480156104fe57600080fd5b50610507611107565b005b34801561051557600080fd5b5061051e61118f565b60405161052b919061385a565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190613875565b6111b5565b005b34801561056957600080fd5b50610584600480360381019061057f919061352f565b6111d3565b005b34801561059257600080fd5b506105ad60048036038101906105a891906138b5565b611293565b6040516105ba9190613274565b60405180910390f35b3480156105cf57600080fd5b506105d86113af565b6040516105e59190613917565b60405180910390f35b3480156105fa57600080fd5b50610615600480360381019061061091906136c7565b6113d8565b005b34801561062357600080fd5b5061062c61144a565b6040516106399190613274565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613323565b61145d565b60405161067b96959493929190613932565b60405180910390f35b34801561069057600080fd5b506106996114c6565b6040516106a69190613917565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190613323565b6114f0565b6040516106e39190613372565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e919061362f565b611814565b005b34801561072157600080fd5b5061072a6118ad565b6040516107379190613372565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613a48565b6118b3565b6040516107749190613b26565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f9190613875565b6118c8565b005b3480156107b257600080fd5b506107cd60048036038101906107c89190613875565b611960565b005b3480156107db57600080fd5b506107e4612026565b6040516107f19190613372565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190613c04565b61202c565b60405161082e9190613d1e565b60405180910390f35b34801561084357600080fd5b5061084c6120d9565b6040516108599190613372565b60405180910390f35b34801561086e57600080fd5b506108776120df565b6040516108849190613372565b60405180910390f35b34801561089957600080fd5b506108a26121a6565b6040516108af9190613274565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613d40565b6121b9565b6040516108ec9190613b26565b60405180910390f35b34801561090157600080fd5b5061091c6004803603810190610917919061352f565b6121ce565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109915750610990826122c5565b5b9050919050565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090506000610a9982604001514261232f90919063ffffffff16565b90506201518081610aaa9190613e35565b90506000610b3e61016d610b30612710610b22600554610b148960800151610b068a610af8600c60008f6000015181526020019081526020016000205460095461237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b6123f390919063ffffffff16565b6123f390919063ffffffff16565b905080935050505092915050565b60005b8151811015610b8e57610b7b828281518110610b6e57610b6d613e66565b5b602002602001015161243d565b8080610b8690613e95565b915050610b4f565b5050565b610b9a612b36565b73ffffffffffffffffffffffffffffffffffffffff16610bb86113af565b73ffffffffffffffffffffffffffffffffffffffff1614610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0590613f3a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915090505481565b610c98612b36565b73ffffffffffffffffffffffffffffffffffffffff16610cb66113af565b73ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613f3a565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b610d31612b3e565b610d3a8161243d565b610d42612b8d565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d73612b36565b73ffffffffffffffffffffffffffffffffffffffff16610d916113af565b73ffffffffffffffffffffffffffffffffffffffff1614610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613f3a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005b8251811015610e8857610e75838281518110610e4d57610e4c613e66565b5b6020026020010151838381518110610e6857610e67613e66565b5b6020026020010151611960565b8080610e8090613e95565b915050610e2e565b505050565b610e95612b36565b73ffffffffffffffffffffffffffffffffffffffff16610eb36113af565b73ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090613f3a565b60405180910390fd5b8060098190555050565b6000610f1d612b36565b73ffffffffffffffffffffffffffffffffffffffff16610f3b6113af565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890613f3a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401610fcc929190613f5a565b6020604051808303816000875af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190613f98565b50600190509392505050565b611023612b36565b73ffffffffffffffffffffffffffffffffffffffff166110416113af565b73ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613f3a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110dd573d6000803e3d6000fd5b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61110f612b36565b73ffffffffffffffffffffffffffffffffffffffff1661112d6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90613f3a565b60405180910390fd5b61118d6000612b96565b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111bd612b3e565b6111c78282612c5a565b6111cf612b8d565b5050565b6111db612b36565b73ffffffffffffffffffffffffffffffffffffffff166111f96113af565b73ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690613f3a565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061129d612b36565b73ffffffffffffffffffffffffffffffffffffffff166112bb6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613f3a565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a308686866040518563ffffffff1660e01b81526004016113729493929190613ffc565b600060405180830381600087803b15801561138c57600080fd5b505af11580156113a0573d6000803e3d6000fd5b50505050600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113e0612b3e565b60005b825181101561143d5761142a83828151811061140257611401613e66565b5b602002602001015183838151811061141d5761141c613e66565b5b6020026020010151612c5a565b808061143590613e95565b9150506113e3565b50611446612b8d565b5050565b600a60009054906101000a900460ff1681565b600b602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481525050905060006115f182604001514261232f90919063ffffffff16565b905062015180816116029190613e35565b9050600061169661016d61168861271061167a60055461166c896080015161165e8a611650600c60008f6000015181526020019081526020016000205460095461237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b6123f390919063ffffffff16565b6123f390919063ffffffff16565b90506116ab818261309b90919063ffffffff16565b90506060600267ffffffffffffffff8111156116ca576116c96133a3565b5b6040519080825280602002602001820160405280156116f85781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061173257611731613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106117a3576117a2613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006117e9838361202c565b9050806001815181106117ff576117fe613e66565b5b60200260200101519550505050505092915050565b61181c612b36565b73ffffffffffffffffffffffffffffffffffffffff1661183a6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790613f3a565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60095481565b600063bc197c8160e01b905095945050505050565b6118d0612b36565b73ffffffffffffffffffffffffffffffffffffffff166118ee6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90613f3a565b60405180910390fd5b80600c6000848152602001908152602001600020819055505050565b611968612b3e565b600a60019054906101000a900460ff166119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae906140a0565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30856040518363ffffffff1660e01b8152600401611a15929190613f5a565b602060405180830381865afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5691906140d5565b11611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d9061414e565b60405180910390fd5b6000600b6000611aa4612b36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020905082816000015414611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906141ba565b60405180910390fd5b611b3f612b36565b73ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790614226565b60405180910390fd5b6000611be982600201544261232f90919063ffffffff16565b90506201518081611bfa9190613e35565b90506000611c0f611c09612b36565b86610998565b9050611c2883600501548261309b90919063ffffffff16565b90506060600267ffffffffffffffff811115611c4757611c466133a3565b5b604051908082528060200260200182016040528015611c755781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110611caf57611cae613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611d2057611d1f613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000611d66838361202c565b9050600081600181518110611d7e57611d7d613e66565b5b6020026020010151118015611db55750611d966120df565b81600181518110611daa57611da9613e66565b5b602002602001015111155b15611ea657600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e23612b36565b84600181518110611e3757611e36613e66565b5b60200260200101516040518463ffffffff1660e01b8152600401611e5d93929190614246565b6020604051808303816000875af1158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190613f98565b50611ee8565b6000611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede906142c9565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30611f2f612b36565b8a89600401546040518563ffffffff1660e01b8152600401611f549493929190613ffc565b600060405180830381600087803b158015611f6e57600080fd5b505af1158015611f82573d6000803e3d6000fd5b5050505060008560050181905550611fa786866004015461232f90919063ffffffff16565b85600401819055504285600201819055507ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb280611fe1612b36565b8883600181518110611ff657611ff5613e66565b5b602002602001015160405161200d939291906142e9565b60405180910390a15050505050612022612b8d565b5050565b60045481565b6060600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84846040518363ffffffff1660e01b815260040161208b9291906143de565b600060405180830381865afa1580156120a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120d191906144a5565b905092915050565b60055481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016121609291906144ee565b602060405180830381865afa15801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a191906140d5565b905090565b600a60019054906101000a900460ff1681565b600063f23a6e6160e01b905095945050505050565b6121d6612b36565b73ffffffffffffffffffffffffffffffffffffffff166121f46113af565b73ffffffffffffffffffffffffffffffffffffffff161461224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613f3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090614589565b60405180910390fd5b6122c281612b96565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061237183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130f9565b905092915050565b600080830361238b57600090506123ed565b6000828461239991906145a9565b90508284826123a89190613e35565b146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df9061465d565b60405180910390fd5b809150505b92915050565b600061243583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061315d565b905092915050565b600a60019054906101000a900460ff1661248c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612483906140a0565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016124ea929190613f5a565b602060405180830381865afa158015612507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252b91906140d5565b1161256b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125629061414e565b60405180910390fd5b6000600b6000612579612b36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002090508181600001541461260c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612603906141ba565b60405180910390fd5b612614612b36565b73ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90614226565b60405180910390fd5b60006126be82600201544261232f90919063ffffffff16565b905062015180816126cf9190613e35565b905060006126e46126de612b36565b85610998565b90506126fd83600501548261309b90919063ffffffff16565b90506060600267ffffffffffffffff81111561271c5761271b6133a3565b5b60405190808252806020026020018201604052801561274a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061278457612783613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106127f5576127f4613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061283b838361202c565b905060008160018151811061285357612852613e66565b5b602002602001015111801561288a575061286b6120df565b8160018151811061287f5761287e613e66565b5b602002602001015111155b1561297b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128f8612b36565b8460018151811061290c5761290b613e66565b5b60200260200101516040518463ffffffff1660e01b815260040161293293929190614246565b6020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129759190613f98565b506129bd565b60006129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b3906142c9565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30612a04612b36565b8989600401546040518563ffffffff1660e01b8152600401612a299493929190613ffc565b600060405180830381600087803b158015612a4357600080fd5b505af1158015612a57573d6000803e3d6000fd5b505050506000856000018190555060008560010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600085600201819055506000856003018190555060008560050181905550600085600401819055507ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb280612afa612b36565b8783600181518110612b0f57612b0e613e66565b5b6020026020010151604051612b26939291906142e9565b60405180910390a1505050505050565b600033905090565b600260015403612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a906146c9565b60405180910390fd5b6002600181905550565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c5612ca0612b36565b306040518363ffffffff1660e01b8152600401612cbe9291906144ee565b602060405180830381865afa158015612cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cff9190613f98565b612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3590614735565b60405180910390fd5b600a60009054906101000a900460ff16612d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d84906147a1565b60405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e612dd3612b36565b856040518363ffffffff1660e01b8152600401612df1929190613f5a565b602060405180830381865afa158015612e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3291906140d5565b1015612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a9061480d565b60405180910390fd5b60004290506000600b6000612e86612b36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002090506000612ee6612ee0612b36565b86610998565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a612f2e612b36565b3088886040518563ffffffff1660e01b8152600401612f509493929190613ffc565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050848260000181905550612fa284836004015461309b90919063ffffffff16565b8260040181905550612fb2612b36565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828260020181905550600c600086815260200190815260200160002054826003018190555061303081836005015461309b90919063ffffffff16565b8260050181905550847f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde282613062612b36565b600c60008981526020019081526020016000205485600401548760405161308c949392919061482d565b60405180910390a25050505050565b60008082846130aa9190614872565b9050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e6906148f2565b60405180910390fd5b8091505092915050565b6000838311158290613141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131389190614980565b60405180910390fd5b506000838561315091906149a2565b9050809150509392505050565b600080831182906131a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319b9190614980565b60405180910390fd5b50600083856131b39190613e35565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613209816131d4565b811461321457600080fd5b50565b60008135905061322681613200565b92915050565b600060208284031215613242576132416131ca565b5b600061325084828501613217565b91505092915050565b60008115159050919050565b61326e81613259565b82525050565b60006020820190506132896000830184613265565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132ba8261328f565b9050919050565b6132ca816132af565b81146132d557600080fd5b50565b6000813590506132e7816132c1565b92915050565b6000819050919050565b613300816132ed565b811461330b57600080fd5b50565b60008135905061331d816132f7565b92915050565b6000806040838503121561333a576133396131ca565b5b6000613348858286016132d8565b92505060206133598582860161330e565b9150509250929050565b61336c816132ed565b82525050565b60006020820190506133876000830184613363565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133db82613392565b810181811067ffffffffffffffff821117156133fa576133f96133a3565b5b80604052505050565b600061340d6131c0565b905061341982826133d2565b919050565b600067ffffffffffffffff821115613439576134386133a3565b5b602082029050602081019050919050565b600080fd5b600061346261345d8461341e565b613403565b905080838252602082019050602084028301858111156134855761348461344a565b5b835b818110156134ae578061349a888261330e565b845260208401935050602081019050613487565b5050509392505050565b600082601f8301126134cd576134cc61338d565b5b81356134dd84826020860161344f565b91505092915050565b6000602082840312156134fc576134fb6131ca565b5b600082013567ffffffffffffffff81111561351a576135196131cf565b5b613526848285016134b8565b91505092915050565b600060208284031215613545576135446131ca565b5b6000613553848285016132d8565b91505092915050565b6000819050919050565b600061358161357c6135778461328f565b61355c565b61328f565b9050919050565b600061359382613566565b9050919050565b60006135a582613588565b9050919050565b6135b58161359a565b82525050565b60006020820190506135d060008301846135ac565b92915050565b6000602082840312156135ec576135eb6131ca565b5b60006135fa8482850161330e565b91505092915050565b61360c81613259565b811461361757600080fd5b50565b60008135905061362981613603565b92915050565b600060208284031215613645576136446131ca565b5b60006136538482850161361a565b91505092915050565b6000613667826132af565b9050919050565b6136778161365c565b811461368257600080fd5b50565b6000813590506136948161366e565b92915050565b6000602082840312156136b0576136af6131ca565b5b60006136be84828501613685565b91505092915050565b600080604083850312156136de576136dd6131ca565b5b600083013567ffffffffffffffff8111156136fc576136fb6131cf565b5b613708858286016134b8565b925050602083013567ffffffffffffffff811115613729576137286131cf565b5b613735858286016134b8565b9150509250929050565b600080600060608486031215613758576137576131ca565b5b6000613766868287016132d8565b9350506020613777868287016132d8565b92505060406137888682870161330e565b9150509250925092565b600061379d8261328f565b9050919050565b6137ad81613792565b81146137b857600080fd5b50565b6000813590506137ca816137a4565b92915050565b6000602082840312156137e6576137e56131ca565b5b60006137f4848285016137bb565b91505092915050565b600061380882613588565b9050919050565b613818816137fd565b82525050565b6000602082019050613833600083018461380f565b92915050565b600061384482613588565b9050919050565b61385481613839565b82525050565b600060208201905061386f600083018461384b565b92915050565b6000806040838503121561388c5761388b6131ca565b5b600061389a8582860161330e565b92505060206138ab8582860161330e565b9150509250929050565b6000806000606084860312156138ce576138cd6131ca565b5b60006138dc868287016132d8565b93505060206138ed8682870161330e565b92505060406138fe8682870161330e565b9150509250925092565b613911816132af565b82525050565b600060208201905061392c6000830184613908565b92915050565b600060c0820190506139476000830189613363565b6139546020830188613908565b6139616040830187613363565b61396e6060830186613363565b61397b6080830185613363565b61398860a0830184613363565b979650505050505050565b600080fd5b600067ffffffffffffffff8211156139b3576139b26133a3565b5b6139bc82613392565b9050602081019050919050565b82818337600083830152505050565b60006139eb6139e684613998565b613403565b905082815260208101848484011115613a0757613a06613993565b5b613a128482856139c9565b509392505050565b600082601f830112613a2f57613a2e61338d565b5b8135613a3f8482602086016139d8565b91505092915050565b600080600080600060a08688031215613a6457613a636131ca565b5b6000613a72888289016132d8565b9550506020613a83888289016132d8565b945050604086013567ffffffffffffffff811115613aa457613aa36131cf565b5b613ab0888289016134b8565b935050606086013567ffffffffffffffff811115613ad157613ad06131cf565b5b613add888289016134b8565b925050608086013567ffffffffffffffff811115613afe57613afd6131cf565b5b613b0a88828901613a1a565b9150509295509295909350565b613b20816131d4565b82525050565b6000602082019050613b3b6000830184613b17565b92915050565b600067ffffffffffffffff821115613b5c57613b5b6133a3565b5b602082029050602081019050919050565b6000613b80613b7b84613b41565b613403565b90508083825260208201905060208402830185811115613ba357613ba261344a565b5b835b81811015613bcc5780613bb888826132d8565b845260208401935050602081019050613ba5565b5050509392505050565b600082601f830112613beb57613bea61338d565b5b8135613bfb848260208601613b6d565b91505092915050565b60008060408385031215613c1b57613c1a6131ca565b5b6000613c298582860161330e565b925050602083013567ffffffffffffffff811115613c4a57613c496131cf565b5b613c5685828601613bd6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c95816132ed565b82525050565b6000613ca78383613c8c565b60208301905092915050565b6000602082019050919050565b6000613ccb82613c60565b613cd58185613c6b565b9350613ce083613c7c565b8060005b83811015613d11578151613cf88882613c9b565b9750613d0383613cb3565b925050600181019050613ce4565b5085935050505092915050565b60006020820190508181036000830152613d388184613cc0565b905092915050565b600080600080600060a08688031215613d5c57613d5b6131ca565b5b6000613d6a888289016132d8565b9550506020613d7b888289016132d8565b9450506040613d8c8882890161330e565b9350506060613d9d8882890161330e565b925050608086013567ffffffffffffffff811115613dbe57613dbd6131cf565b5b613dca88828901613a1a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e40826132ed565b9150613e4b836132ed565b925082613e5b57613e5a613dd7565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ea0826132ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ed257613ed1613e06565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f24602083613edd565b9150613f2f82613eee565b602082019050919050565b60006020820190508181036000830152613f5381613f17565b9050919050565b6000604082019050613f6f6000830185613908565b613f7c6020830184613363565b9392505050565b600081519050613f9281613603565b92915050565b600060208284031215613fae57613fad6131ca565b5b6000613fbc84828501613f83565b91505092915050565b600082825260208201905092915050565b50565b6000613fe6600083613fc5565b9150613ff182613fd6565b600082019050919050565b600060a0820190506140116000830187613908565b61401e6020830186613908565b61402b6040830185613363565b6140386060830184613363565b818103608083015261404981613fd9565b905095945050505050565b7f756e7374616b696e67206e6f7420616c6c6f776564207269676874206e6f7700600082015250565b600061408a601f83613edd565b915061409582614054565b602082019050919050565b600060208201905081810360008301526140b98161407d565b9050919050565b6000815190506140cf816132f7565b92915050565b6000602082840312156140eb576140ea6131ca565b5b60006140f9848285016140c0565b91505092915050565b7f436f6e7472616374204d757374204f776e204e66740000000000000000000000600082015250565b6000614138601583613edd565b915061414382614102565b602082019050919050565b600060208201905081810360008301526141678161412b565b9050919050565b7f4e6f74205374616b656400000000000000000000000000000000000000000000600082015250565b60006141a4600a83613edd565b91506141af8261416e565b602082019050919050565b600060208201905081810360008301526141d381614197565b9050919050565b7f4e6f7420596f7572207374616b656420546f6b656e0000000000000000000000600082015250565b6000614210601583613edd565b915061421b826141da565b602082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b600060608201905061425b6000830186613908565b6142686020830185613908565b6142756040830184613363565b949350505050565b7f50656e64696e672052657761726473204e6f7420416c6c6f6361746564000000600082015250565b60006142b3601d83613edd565b91506142be8261427d565b602082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b60006060820190506142fe6000830186613908565b61430b6020830185613363565b6143186040830184613363565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614355816132af565b82525050565b6000614367838361434c565b60208301905092915050565b6000602082019050919050565b600061438b82614320565b614395818561432b565b93506143a08361433c565b8060005b838110156143d15781516143b8888261435b565b97506143c383614373565b9250506001810190506143a4565b5085935050505092915050565b60006040820190506143f36000830185613363565b81810360208301526144058184614380565b90509392505050565b600061442161441c8461341e565b613403565b905080838252602082019050602084028301858111156144445761444361344a565b5b835b8181101561446d578061445988826140c0565b845260208401935050602081019050614446565b5050509392505050565b600082601f83011261448c5761448b61338d565b5b815161449c84826020860161440e565b91505092915050565b6000602082840312156144bb576144ba6131ca565b5b600082015167ffffffffffffffff8111156144d9576144d86131cf565b5b6144e584828501614477565b91505092915050565b60006040820190506145036000830185613908565b6145106020830184613908565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614573602683613edd565b915061457e82614517565b604082019050919050565b600060208201905081810360008301526145a281614566565b9050919050565b60006145b4826132ed565b91506145bf836132ed565b92508282026145cd816132ed565b915082820484148315176145e4576145e3613e06565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614647602183613edd565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006146b3601f83613edd565b91506146be8261467d565b602082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f4e465473204e6f7420417070726f766564000000000000000000000000000000600082015250565b600061471f601183613edd565b915061472a826146e9565b602082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f7374616b696e672069732073746f707065640000000000000000000000000000600082015250565b600061478b601283613edd565b915061479682614755565b602082019050919050565b600060208201905081810360008301526147ba8161477e565b9050919050565b7f4d757374204f776e204e66740000000000000000000000000000000000000000600082015250565b60006147f7600c83613edd565b9150614802826147c1565b602082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b60006080820190506148426000830187613908565b61484f6020830186613363565b61485c6040830185613363565b6148696060830184613363565b95945050505050565b600061487d826132ed565b9150614888836132ed565b92508282019050808211156148a05761489f613e06565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dc601b83613edd565b91506148e7826148a6565b602082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b600081519050919050565b60005b8381101561493b578082015181840152602081019050614920565b60008484015250505050565b600061495282614912565b61495c8185613edd565b935061496c81856020860161491d565b61497581613392565b840191505092915050565b6000602082019050818103600083015261499a8184614947565b905092915050565b60006149ad826132ed565b91506149b8836132ed565b92508282039050818111156149d0576149cf613e06565b5b9291505056fea2646970667358221220b77e8ccdd472c86eb4d35ccd69c6bc8c14a62bba2cef19dfba81bca3b9467fae64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102295760003560e01c80638a04ef8e11610123578063bc197c81116100ab578063ed5fa6911161006f578063ed5fa69114610837578063eded3fda14610862578063ee018b6d1461088d578063f23a6e61146108b8578063f2fde38b146108f557610230565b8063bc197c8114610740578063cad753b91461077d578063dd0a73fd146107a6578063e6535f8f146107cf578063e88e4ab0146107fa57610230565b80638f169816116100f25780638f169816146106425780638fe40eb014610684578063a0da6d74146106af578063a79d927d146106ec578063b7fd17841461071557610230565b80638a04ef8e146105865780638da5cb5b146105c35780638e415190146105ee5780638eee79f91461061757610230565b80633f770dd6116101b15780636982d815116101755780636982d815146104c7578063715018a6146104f2578063735de9f7146105095780637b0472f0146105345780637e87bf791461055d57610230565b80633f770dd6146103e65780634e5517f51461040f57806358905552146104385780635e1d68041461046157806361f5836d1461049e57610230565b80630f8a267b116101f85780630f8a267b14610301578063253eca1f1461032c5780632bf8b03f146103695780632e17de78146103925780633e413bee146103bb57610230565b806301ffc9a7146102355780630464230a146102725780630d50c189146102af5780630d752d55146102d857610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061322c565b61091e565b6040516102699190613274565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613323565b610998565b6040516102a69190613372565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d191906134e6565b610b4c565b005b3480156102e457600080fd5b506102ff60048036038101906102fa919061352f565b610b92565b005b34801561030d57600080fd5b50610316610c52565b60405161032391906135bb565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e91906135d6565b610c78565b6040516103609190613372565b60405180910390f35b34801561037557600080fd5b50610390600480360381019061038b919061362f565b610c90565b005b34801561039e57600080fd5b506103b960048036038101906103b491906135d6565b610d29565b005b3480156103c757600080fd5b506103d0610d45565b6040516103dd91906135bb565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061369a565b610d6b565b005b34801561041b57600080fd5b50610436600480360381019061043191906136c7565b610e2b565b005b34801561044457600080fd5b5061045f600480360381019061045a91906135d6565b610e8d565b005b34801561046d57600080fd5b506104886004803603810190610483919061373f565b610f13565b6040516104959190613274565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c091906137d0565b61101b565b005b3480156104d357600080fd5b506104dc6110e1565b6040516104e9919061381e565b60405180910390f35b3480156104fe57600080fd5b50610507611107565b005b34801561051557600080fd5b5061051e61118f565b60405161052b919061385a565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190613875565b6111b5565b005b34801561056957600080fd5b50610584600480360381019061057f919061352f565b6111d3565b005b34801561059257600080fd5b506105ad60048036038101906105a891906138b5565b611293565b6040516105ba9190613274565b60405180910390f35b3480156105cf57600080fd5b506105d86113af565b6040516105e59190613917565b60405180910390f35b3480156105fa57600080fd5b50610615600480360381019061061091906136c7565b6113d8565b005b34801561062357600080fd5b5061062c61144a565b6040516106399190613274565b60405180910390f35b34801561064e57600080fd5b5061066960048036038101906106649190613323565b61145d565b60405161067b96959493929190613932565b60405180910390f35b34801561069057600080fd5b506106996114c6565b6040516106a69190613917565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190613323565b6114f0565b6040516106e39190613372565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e919061362f565b611814565b005b34801561072157600080fd5b5061072a6118ad565b6040516107379190613372565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613a48565b6118b3565b6040516107749190613b26565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f9190613875565b6118c8565b005b3480156107b257600080fd5b506107cd60048036038101906107c89190613875565b611960565b005b3480156107db57600080fd5b506107e4612026565b6040516107f19190613372565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190613c04565b61202c565b60405161082e9190613d1e565b60405180910390f35b34801561084357600080fd5b5061084c6120d9565b6040516108599190613372565b60405180910390f35b34801561086e57600080fd5b506108776120df565b6040516108849190613372565b60405180910390f35b34801561089957600080fd5b506108a26121a6565b6040516108af9190613274565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190613d40565b6121b9565b6040516108ec9190613b26565b60405180910390f35b34801561090157600080fd5b5061091c6004803603810190610917919061352f565b6121ce565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109915750610990826122c5565b5b9050919050565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090506000610a9982604001514261232f90919063ffffffff16565b90506201518081610aaa9190613e35565b90506000610b3e61016d610b30612710610b22600554610b148960800151610b068a610af8600c60008f6000015181526020019081526020016000205460095461237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b6123f390919063ffffffff16565b6123f390919063ffffffff16565b905080935050505092915050565b60005b8151811015610b8e57610b7b828281518110610b6e57610b6d613e66565b5b602002602001015161243d565b8080610b8690613e95565b915050610b4f565b5050565b610b9a612b36565b73ffffffffffffffffffffffffffffffffffffffff16610bb86113af565b73ffffffffffffffffffffffffffffffffffffffff1614610c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0590613f3a565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915090505481565b610c98612b36565b73ffffffffffffffffffffffffffffffffffffffff16610cb66113af565b73ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390613f3a565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b610d31612b3e565b610d3a8161243d565b610d42612b8d565b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d73612b36565b73ffffffffffffffffffffffffffffffffffffffff16610d916113af565b73ffffffffffffffffffffffffffffffffffffffff1614610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90613f3a565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60005b8251811015610e8857610e75838281518110610e4d57610e4c613e66565b5b6020026020010151838381518110610e6857610e67613e66565b5b6020026020010151611960565b8080610e8090613e95565b915050610e2e565b505050565b610e95612b36565b73ffffffffffffffffffffffffffffffffffffffff16610eb36113af565b73ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090613f3a565b60405180910390fd5b8060098190555050565b6000610f1d612b36565b73ffffffffffffffffffffffffffffffffffffffff16610f3b6113af565b73ffffffffffffffffffffffffffffffffffffffff1614610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8890613f3a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401610fcc929190613f5a565b6020604051808303816000875af1158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190613f98565b50600190509392505050565b611023612b36565b73ffffffffffffffffffffffffffffffffffffffff166110416113af565b73ffffffffffffffffffffffffffffffffffffffff1614611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613f3a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110dd573d6000803e3d6000fd5b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61110f612b36565b73ffffffffffffffffffffffffffffffffffffffff1661112d6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90613f3a565b60405180910390fd5b61118d6000612b96565b565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111bd612b3e565b6111c78282612c5a565b6111cf612b8d565b5050565b6111db612b36565b73ffffffffffffffffffffffffffffffffffffffff166111f96113af565b73ffffffffffffffffffffffffffffffffffffffff161461124f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124690613f3a565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061129d612b36565b73ffffffffffffffffffffffffffffffffffffffff166112bb6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613f3a565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a308686866040518563ffffffff1660e01b81526004016113729493929190613ffc565b600060405180830381600087803b15801561138c57600080fd5b505af11580156113a0573d6000803e3d6000fd5b50505050600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113e0612b3e565b60005b825181101561143d5761142a83828151811061140257611401613e66565b5b602002602001015183838151811061141d5761141c613e66565b5b6020026020010151612c5a565b808061143590613e95565b9150506113e3565b50611446612b8d565b5050565b600a60009054906101000a900460ff1681565b600b602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154905086565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206040518060c0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481525050905060006115f182604001514261232f90919063ffffffff16565b905062015180816116029190613e35565b9050600061169661016d61168861271061167a60055461166c896080015161165e8a611650600c60008f6000015181526020019081526020016000205460095461237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b61237990919063ffffffff16565b6123f390919063ffffffff16565b6123f390919063ffffffff16565b90506116ab818261309b90919063ffffffff16565b90506060600267ffffffffffffffff8111156116ca576116c96133a3565b5b6040519080825280602002602001820160405280156116f85781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061173257611731613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106117a3576117a2613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006117e9838361202c565b9050806001815181106117ff576117fe613e66565b5b60200260200101519550505050505092915050565b61181c612b36565b73ffffffffffffffffffffffffffffffffffffffff1661183a6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790613f3a565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60095481565b600063bc197c8160e01b905095945050505050565b6118d0612b36565b73ffffffffffffffffffffffffffffffffffffffff166118ee6113af565b73ffffffffffffffffffffffffffffffffffffffff1614611944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193b90613f3a565b60405180910390fd5b80600c6000848152602001908152602001600020819055505050565b611968612b3e565b600a60019054906101000a900460ff166119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae906140a0565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30856040518363ffffffff1660e01b8152600401611a15929190613f5a565b602060405180830381865afa158015611a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5691906140d5565b11611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d9061414e565b60405180910390fd5b6000600b6000611aa4612b36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020905082816000015414611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e906141ba565b60405180910390fd5b611b3f612b36565b73ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790614226565b60405180910390fd5b6000611be982600201544261232f90919063ffffffff16565b90506201518081611bfa9190613e35565b90506000611c0f611c09612b36565b86610998565b9050611c2883600501548261309b90919063ffffffff16565b90506060600267ffffffffffffffff811115611c4757611c466133a3565b5b604051908082528060200260200182016040528015611c755781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110611caf57611cae613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611d2057611d1f613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000611d66838361202c565b9050600081600181518110611d7e57611d7d613e66565b5b6020026020010151118015611db55750611d966120df565b81600181518110611daa57611da9613e66565b5b602002602001015111155b15611ea657600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e23612b36565b84600181518110611e3757611e36613e66565b5b60200260200101516040518463ffffffff1660e01b8152600401611e5d93929190614246565b6020604051808303816000875af1158015611e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea09190613f98565b50611ee8565b6000611ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ede906142c9565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30611f2f612b36565b8a89600401546040518563ffffffff1660e01b8152600401611f549493929190613ffc565b600060405180830381600087803b158015611f6e57600080fd5b505af1158015611f82573d6000803e3d6000fd5b5050505060008560050181905550611fa786866004015461232f90919063ffffffff16565b85600401819055504285600201819055507ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb280611fe1612b36565b8883600181518110611ff657611ff5613e66565b5b602002602001015160405161200d939291906142e9565b60405180910390a15050505050612022612b8d565b5050565b60045481565b6060600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84846040518363ffffffff1660e01b815260040161208b9291906143de565b600060405180830381865afa1580156120a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906120d191906144a5565b905092915050565b60055481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016121609291906144ee565b602060405180830381865afa15801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a191906140d5565b905090565b600a60019054906101000a900460ff1681565b600063f23a6e6160e01b905095945050505050565b6121d6612b36565b73ffffffffffffffffffffffffffffffffffffffff166121f46113af565b73ffffffffffffffffffffffffffffffffffffffff161461224a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224190613f3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090614589565b60405180910390fd5b6122c281612b96565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061237183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130f9565b905092915050565b600080830361238b57600090506123ed565b6000828461239991906145a9565b90508284826123a89190613e35565b146123e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123df9061465d565b60405180910390fd5b809150505b92915050565b600061243583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061315d565b905092915050565b600a60019054906101000a900460ff1661248c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612483906140a0565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e30846040518363ffffffff1660e01b81526004016124ea929190613f5a565b602060405180830381865afa158015612507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252b91906140d5565b1161256b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125629061414e565b60405180910390fd5b6000600b6000612579612b36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002090508181600001541461260c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612603906141ba565b60405180910390fd5b612614612b36565b73ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90614226565b60405180910390fd5b60006126be82600201544261232f90919063ffffffff16565b905062015180816126cf9190613e35565b905060006126e46126de612b36565b85610998565b90506126fd83600501548261309b90919063ffffffff16565b90506060600267ffffffffffffffff81111561271c5761271b6133a3565b5b60405190808252806020026020018201604052801561274a5781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061278457612783613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106127f5576127f4613e66565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600061283b838361202c565b905060008160018151811061285357612852613e66565b5b602002602001015111801561288a575061286b6120df565b8160018151811061287f5761287e613e66565b5b602002602001015111155b1561297b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128f8612b36565b8460018151811061290c5761290b613e66565b5b60200260200101516040518463ffffffff1660e01b815260040161293293929190614246565b6020604051808303816000875af1158015612951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129759190613f98565b506129bd565b60006129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b3906142c9565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30612a04612b36565b8989600401546040518563ffffffff1660e01b8152600401612a299493929190613ffc565b600060405180830381600087803b158015612a4357600080fd5b505af1158015612a57573d6000803e3d6000fd5b505050506000856000018190555060008560010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600085600201819055506000856003018190555060008560050181905550600085600401819055507ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb280612afa612b36565b8783600181518110612b0f57612b0e613e66565b5b6020026020010151604051612b26939291906142e9565b60405180910390a1505050505050565b600033905090565b600260015403612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a906146c9565b60405180910390fd5b6002600181905550565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c5612ca0612b36565b306040518363ffffffff1660e01b8152600401612cbe9291906144ee565b602060405180830381865afa158015612cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cff9190613f98565b612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3590614735565b60405180910390fd5b600a60009054906101000a900460ff16612d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d84906147a1565b60405180910390fd5b80600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e612dd3612b36565b856040518363ffffffff1660e01b8152600401612df1929190613f5a565b602060405180830381865afa158015612e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3291906140d5565b1015612e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6a9061480d565b60405180910390fd5b60004290506000600b6000612e86612b36565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002090506000612ee6612ee0612b36565b86610998565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a612f2e612b36565b3088886040518563ffffffff1660e01b8152600401612f509493929190613ffc565b600060405180830381600087803b158015612f6a57600080fd5b505af1158015612f7e573d6000803e3d6000fd5b50505050848260000181905550612fa284836004015461309b90919063ffffffff16565b8260040181905550612fb2612b36565b8260010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828260020181905550600c600086815260200190815260200160002054826003018190555061303081836005015461309b90919063ffffffff16565b8260050181905550847f2720efa4b2dd4f3f8a347da3cbd290a522e9432da9072c5b8e6300496fdde282613062612b36565b600c60008981526020019081526020016000205485600401548760405161308c949392919061482d565b60405180910390a25050505050565b60008082846130aa9190614872565b9050838110156130ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e6906148f2565b60405180910390fd5b8091505092915050565b6000838311158290613141576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131389190614980565b60405180910390fd5b506000838561315091906149a2565b9050809150509392505050565b600080831182906131a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319b9190614980565b60405180910390fd5b50600083856131b39190613e35565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613209816131d4565b811461321457600080fd5b50565b60008135905061322681613200565b92915050565b600060208284031215613242576132416131ca565b5b600061325084828501613217565b91505092915050565b60008115159050919050565b61326e81613259565b82525050565b60006020820190506132896000830184613265565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132ba8261328f565b9050919050565b6132ca816132af565b81146132d557600080fd5b50565b6000813590506132e7816132c1565b92915050565b6000819050919050565b613300816132ed565b811461330b57600080fd5b50565b60008135905061331d816132f7565b92915050565b6000806040838503121561333a576133396131ca565b5b6000613348858286016132d8565b92505060206133598582860161330e565b9150509250929050565b61336c816132ed565b82525050565b60006020820190506133876000830184613363565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133db82613392565b810181811067ffffffffffffffff821117156133fa576133f96133a3565b5b80604052505050565b600061340d6131c0565b905061341982826133d2565b919050565b600067ffffffffffffffff821115613439576134386133a3565b5b602082029050602081019050919050565b600080fd5b600061346261345d8461341e565b613403565b905080838252602082019050602084028301858111156134855761348461344a565b5b835b818110156134ae578061349a888261330e565b845260208401935050602081019050613487565b5050509392505050565b600082601f8301126134cd576134cc61338d565b5b81356134dd84826020860161344f565b91505092915050565b6000602082840312156134fc576134fb6131ca565b5b600082013567ffffffffffffffff81111561351a576135196131cf565b5b613526848285016134b8565b91505092915050565b600060208284031215613545576135446131ca565b5b6000613553848285016132d8565b91505092915050565b6000819050919050565b600061358161357c6135778461328f565b61355c565b61328f565b9050919050565b600061359382613566565b9050919050565b60006135a582613588565b9050919050565b6135b58161359a565b82525050565b60006020820190506135d060008301846135ac565b92915050565b6000602082840312156135ec576135eb6131ca565b5b60006135fa8482850161330e565b91505092915050565b61360c81613259565b811461361757600080fd5b50565b60008135905061362981613603565b92915050565b600060208284031215613645576136446131ca565b5b60006136538482850161361a565b91505092915050565b6000613667826132af565b9050919050565b6136778161365c565b811461368257600080fd5b50565b6000813590506136948161366e565b92915050565b6000602082840312156136b0576136af6131ca565b5b60006136be84828501613685565b91505092915050565b600080604083850312156136de576136dd6131ca565b5b600083013567ffffffffffffffff8111156136fc576136fb6131cf565b5b613708858286016134b8565b925050602083013567ffffffffffffffff811115613729576137286131cf565b5b613735858286016134b8565b9150509250929050565b600080600060608486031215613758576137576131ca565b5b6000613766868287016132d8565b9350506020613777868287016132d8565b92505060406137888682870161330e565b9150509250925092565b600061379d8261328f565b9050919050565b6137ad81613792565b81146137b857600080fd5b50565b6000813590506137ca816137a4565b92915050565b6000602082840312156137e6576137e56131ca565b5b60006137f4848285016137bb565b91505092915050565b600061380882613588565b9050919050565b613818816137fd565b82525050565b6000602082019050613833600083018461380f565b92915050565b600061384482613588565b9050919050565b61385481613839565b82525050565b600060208201905061386f600083018461384b565b92915050565b6000806040838503121561388c5761388b6131ca565b5b600061389a8582860161330e565b92505060206138ab8582860161330e565b9150509250929050565b6000806000606084860312156138ce576138cd6131ca565b5b60006138dc868287016132d8565b93505060206138ed8682870161330e565b92505060406138fe8682870161330e565b9150509250925092565b613911816132af565b82525050565b600060208201905061392c6000830184613908565b92915050565b600060c0820190506139476000830189613363565b6139546020830188613908565b6139616040830187613363565b61396e6060830186613363565b61397b6080830185613363565b61398860a0830184613363565b979650505050505050565b600080fd5b600067ffffffffffffffff8211156139b3576139b26133a3565b5b6139bc82613392565b9050602081019050919050565b82818337600083830152505050565b60006139eb6139e684613998565b613403565b905082815260208101848484011115613a0757613a06613993565b5b613a128482856139c9565b509392505050565b600082601f830112613a2f57613a2e61338d565b5b8135613a3f8482602086016139d8565b91505092915050565b600080600080600060a08688031215613a6457613a636131ca565b5b6000613a72888289016132d8565b9550506020613a83888289016132d8565b945050604086013567ffffffffffffffff811115613aa457613aa36131cf565b5b613ab0888289016134b8565b935050606086013567ffffffffffffffff811115613ad157613ad06131cf565b5b613add888289016134b8565b925050608086013567ffffffffffffffff811115613afe57613afd6131cf565b5b613b0a88828901613a1a565b9150509295509295909350565b613b20816131d4565b82525050565b6000602082019050613b3b6000830184613b17565b92915050565b600067ffffffffffffffff821115613b5c57613b5b6133a3565b5b602082029050602081019050919050565b6000613b80613b7b84613b41565b613403565b90508083825260208201905060208402830185811115613ba357613ba261344a565b5b835b81811015613bcc5780613bb888826132d8565b845260208401935050602081019050613ba5565b5050509392505050565b600082601f830112613beb57613bea61338d565b5b8135613bfb848260208601613b6d565b91505092915050565b60008060408385031215613c1b57613c1a6131ca565b5b6000613c298582860161330e565b925050602083013567ffffffffffffffff811115613c4a57613c496131cf565b5b613c5685828601613bd6565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c95816132ed565b82525050565b6000613ca78383613c8c565b60208301905092915050565b6000602082019050919050565b6000613ccb82613c60565b613cd58185613c6b565b9350613ce083613c7c565b8060005b83811015613d11578151613cf88882613c9b565b9750613d0383613cb3565b925050600181019050613ce4565b5085935050505092915050565b60006020820190508181036000830152613d388184613cc0565b905092915050565b600080600080600060a08688031215613d5c57613d5b6131ca565b5b6000613d6a888289016132d8565b9550506020613d7b888289016132d8565b9450506040613d8c8882890161330e565b9350506060613d9d8882890161330e565b925050608086013567ffffffffffffffff811115613dbe57613dbd6131cf565b5b613dca88828901613a1a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e40826132ed565b9150613e4b836132ed565b925082613e5b57613e5a613dd7565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613ea0826132ed565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ed257613ed1613e06565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f24602083613edd565b9150613f2f82613eee565b602082019050919050565b60006020820190508181036000830152613f5381613f17565b9050919050565b6000604082019050613f6f6000830185613908565b613f7c6020830184613363565b9392505050565b600081519050613f9281613603565b92915050565b600060208284031215613fae57613fad6131ca565b5b6000613fbc84828501613f83565b91505092915050565b600082825260208201905092915050565b50565b6000613fe6600083613fc5565b9150613ff182613fd6565b600082019050919050565b600060a0820190506140116000830187613908565b61401e6020830186613908565b61402b6040830185613363565b6140386060830184613363565b818103608083015261404981613fd9565b905095945050505050565b7f756e7374616b696e67206e6f7420616c6c6f776564207269676874206e6f7700600082015250565b600061408a601f83613edd565b915061409582614054565b602082019050919050565b600060208201905081810360008301526140b98161407d565b9050919050565b6000815190506140cf816132f7565b92915050565b6000602082840312156140eb576140ea6131ca565b5b60006140f9848285016140c0565b91505092915050565b7f436f6e7472616374204d757374204f776e204e66740000000000000000000000600082015250565b6000614138601583613edd565b915061414382614102565b602082019050919050565b600060208201905081810360008301526141678161412b565b9050919050565b7f4e6f74205374616b656400000000000000000000000000000000000000000000600082015250565b60006141a4600a83613edd565b91506141af8261416e565b602082019050919050565b600060208201905081810360008301526141d381614197565b9050919050565b7f4e6f7420596f7572207374616b656420546f6b656e0000000000000000000000600082015250565b6000614210601583613edd565b915061421b826141da565b602082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b600060608201905061425b6000830186613908565b6142686020830185613908565b6142756040830184613363565b949350505050565b7f50656e64696e672052657761726473204e6f7420416c6c6f6361746564000000600082015250565b60006142b3601d83613edd565b91506142be8261427d565b602082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b60006060820190506142fe6000830186613908565b61430b6020830185613363565b6143186040830184613363565b949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614355816132af565b82525050565b6000614367838361434c565b60208301905092915050565b6000602082019050919050565b600061438b82614320565b614395818561432b565b93506143a08361433c565b8060005b838110156143d15781516143b8888261435b565b97506143c383614373565b9250506001810190506143a4565b5085935050505092915050565b60006040820190506143f36000830185613363565b81810360208301526144058184614380565b90509392505050565b600061442161441c8461341e565b613403565b905080838252602082019050602084028301858111156144445761444361344a565b5b835b8181101561446d578061445988826140c0565b845260208401935050602081019050614446565b5050509392505050565b600082601f83011261448c5761448b61338d565b5b815161449c84826020860161440e565b91505092915050565b6000602082840312156144bb576144ba6131ca565b5b600082015167ffffffffffffffff8111156144d9576144d86131cf565b5b6144e584828501614477565b91505092915050565b60006040820190506145036000830185613908565b6145106020830184613908565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614573602683613edd565b915061457e82614517565b604082019050919050565b600060208201905081810360008301526145a281614566565b9050919050565b60006145b4826132ed565b91506145bf836132ed565b92508282026145cd816132ed565b915082820484148315176145e4576145e3613e06565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614647602183613edd565b9150614652826145eb565b604082019050919050565b600060208201905081810360008301526146768161463a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006146b3601f83613edd565b91506146be8261467d565b602082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f4e465473204e6f7420417070726f766564000000000000000000000000000000600082015250565b600061471f601183613edd565b915061472a826146e9565b602082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f7374616b696e672069732073746f707065640000000000000000000000000000600082015250565b600061478b601283613edd565b915061479682614755565b602082019050919050565b600060208201905081810360008301526147ba8161477e565b9050919050565b7f4d757374204f776e204e66740000000000000000000000000000000000000000600082015250565b60006147f7600c83613edd565b9150614802826147c1565b602082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b60006080820190506148426000830187613908565b61484f6020830186613363565b61485c6040830185613363565b6148696060830184613363565b95945050505050565b600061487d826132ed565b9150614888836132ed565b92508282019050808211156148a05761489f613e06565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006148dc601b83613edd565b91506148e7826148a6565b602082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b600081519050919050565b60005b8381101561493b578082015181840152602081019050614920565b60008484015250505050565b600061495282614912565b61495c8185613edd565b935061496c81856020860161491d565b61497581613392565b840191505092915050565b6000602082019050818103600083015261499a8184614947565b905092915050565b60006149ad826132ed565b91506149b8836132ed565b92508282039050818111156149d0576149cf613e06565b5b9291505056fea2646970667358221220b77e8ccdd472c86eb4d35ccd69c6bc8c14a62bba2cef19dfba81bca3b9467fae64736f6c63430008110033
Deployed Bytecode Sourcemap
256:14284:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;374:223:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9538:460:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11767:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4672:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;505:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1915:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12645:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11207:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;846:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13115:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12035:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4390:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13618:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14014:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;416:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1117:101:11;;;;;;;;;;;;;:::i;:::-;;992:39:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11008:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4931:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14278:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;485:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11476:197:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1601:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1754:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;4127:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10200:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12882:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1240:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;752:255:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13340:112:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6009:1440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;620:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9140:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;731:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12362:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1712:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;517:227:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1367:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;374:223:3;476:4;515:34;500:49;;;:11;:49;;;;:89;;;;553:36;577:11;553:23;:36::i;:::-;500:89;493:96;;374:223;;;:::o;9538:460:14:-;9619:7;9635:19;9657:6;:14;9664:6;9657:14;;;;;;;;;;;;;;;:23;9672:7;9657:23;;;;;;;;;;;9635:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9689:18;9710:35;9730:4;:14;;;9710:15;:19;;:35;;;;:::i;:::-;9689:56;;9779:6;9766:10;:19;;;;:::i;:::-;9753:32;;9842:14;9859:110;9965:3;9859:101;9954:5;9859:90;9934:14;;9859:70;9917:4;:11;;;9859:53;9901:10;9859:37;9873:8;:22;9882:4;:12;;;9873:22;;;;;;;;;;;;9859:9;;:13;;:37;;;;:::i;:::-;:41;;:53;;;;:::i;:::-;:57;;:70;;;;:::i;:::-;:74;;:90;;;;:::i;:::-;:94;;:101;;;;:::i;:::-;:105;;:110;;;;:::i;:::-;9842:127;;9985:6;9978:13;;;;;9538:460;;;;:::o;11767:151::-;11834:9;11830:82;11852:8;:15;11849:1;:18;11830:82;;;11882:21;11891:8;11900:1;11891:11;;;;;;;;:::i;:::-;;;;;;;;11882:8;:21::i;:::-;11868:3;;;;;:::i;:::-;;;;11830:82;;;;11767:151;:::o;4672:113::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4769:8:14::1;4745:14;;:33;;;;;;;;;;;;;;;;;;4672:113:::0;:::o;505:28::-;;;;;;;;;;;;;:::o;1915:44::-;;;;;;;;;;;;;;;;;:::o;12645:91::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12724:5:14::1;12709:12;;:20;;;;;;;;;;;;;;;;;;12645:91:::0;:::o;11207:86::-;2246:21:12;:19;:21::i;:::-;11268:17:14::1;11277:7;11268:8;:17::i;:::-;2288:20:12::0;:18;:20::i;:::-;11207:86:14;:::o;846:18::-;;;;;;;;;;;;;:::o;13115:86::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13191:3:14::1;13178:10;;:16;;;;;;;;;;;;;;;;;;13115:86:::0;:::o;12035:203::-;12135:9;12131:101;12153:8;:15;12150:1;:18;12131:101;;;12183:40;12200:8;12209:1;12200:11;;;;;;;;:::i;:::-;;;;;;;;12213:6;12220:1;12213:9;;;;;;;;:::i;:::-;;;;;;;;12183:16;:40::i;:::-;12169:3;;;;;:::i;:::-;;;;12131:101;;;;12035:203;;:::o;4390:136::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4514:5:14::1;4502:9;:17;;;;4390:136:::0;:::o;13618:248::-;13730:4;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13753:14:14::1;13746:31;;;13778:10;13790:7;13746:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13855:4;13848:11;;13618:248:::0;;;;;:::o;14014:110::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14082:3:14::1;:12;;:35;14095:21;14082:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14014:110:::0;:::o;416:26::-;;;;;;;;;;;;;:::o;1117:101:11:-;708:12;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1181:30:::1;1208:1;1181:18;:30::i;:::-;1117:101::o:0;992:39:14:-;;;;;;;;;;;;;:::o;11008:105::-;2246:21:12;:19;:21::i;:::-;11083:23:14::1;11090:7;11099:6;11083;:23::i;:::-;2288:20:12::0;:18;:20::i;:::-;11008:105:14;;:::o;4931:119::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5034:9:14::1;5011:20;;:32;;;;;;;;;;;;;;;;;;4931:119:::0;:::o;14278:221::-;14384:4;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14398:10:14::1;;;;;;;;;;;:27;;;14434:4;14441:10;14453:7;14462:6;14398:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14488:4;14481:11;;14278:221:::0;;;;;:::o;485:85:11:-;531:7;557:6;;;;;;;;;;;550:13;;485:85;:::o;11476:197:14:-;2246:21:12;:19;:21::i;:::-;11579:9:14::1;11575:92;11597:8;:15;11594:1;:18;11575:92;;;11627:31;11634:8;11643:1;11634:11;;;;;;;;:::i;:::-;;;;;;;;11648:6;11655:1;11648:9;;;;;;;;:::i;:::-;;;;;;;;11627:6;:31::i;:::-;11613:3;;;;;:::i;:::-;;;;11575:92;;;;2288:20:12::0;:18;:20::i;:::-;11476:197:14;;:::o;1601:31::-;;;;;;;;;;;;;:::o;1754:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4127:101::-;4178:7;4201:20;;;;;;;;;;;4194:27;;4127:101;:::o;10200:689::-;10275:7;10291:19;10313:6;:14;10320:6;10313:14;;;;;;;;;;;;;;;:23;10328:7;10313:23;;;;;;;;;;;10291:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10345:18;10366:35;10386:4;:14;;;10366:15;:19;;:35;;;;:::i;:::-;10345:56;;10435:6;10422:10;:19;;;;:::i;:::-;10409:32;;10498:14;10515:110;10621:3;10515:101;10610:5;10515:90;10590:14;;10515:70;10573:4;:11;;;10515:53;10557:10;10515:37;10529:8;:22;10538:4;:12;;;10529:22;;;;;;;;;;;;10515:9;;:13;;:37;;;;:::i;:::-;:41;;:53;;;;:::i;:::-;:57;;:70;;;;:::i;:::-;:74;;:90;;;;:::i;:::-;:94;;:101;;;;:::i;:::-;:105;;:110;;;;:::i;:::-;10498:127;;10642:18;10653:6;10642;:10;;:18;;;;:::i;:::-;10633:27;;10669:21;10721:1;10707:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10700:23;;10751:4;;;;;;;;;;;10733;10738:1;10733:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;10784:14;;;;;;;;;;;10766:4;10771:1;10766:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;10808:22;10833:26;10846:6;10854:4;10833:12;:26::i;:::-;10808:51;;10874:5;10880:1;10874:8;;;;;;;;:::i;:::-;;;;;;;;10867:15;;;;;;;10200:689;;;;:::o;12882:95::-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12965:5:14::1;12948:14;;:22;;;;;;;;;;;;;;;;;;12882:95:::0;:::o;1240:31::-;;;;:::o;752:255:2:-;937:6;963:36;;;956:43;;752:255;;;;;;;:::o;13340:112:14:-;708:12:11;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13440:5:14::1;13420:8;:17;13429:7;13420:17;;;;;;;;;;;:25;;;;13340:112:::0;;:::o;6009:1440::-;2246:21:12;:19;:21::i;:::-;6103:14:14::1;;;;;;;;;;;6095:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;6217:1;6170:10;;;;;;;;;;;:20;;;6199:4;6206:7;6170:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;6162:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;6252:20;6275:6;:20;6282:12;:10;:12::i;:::-;6275:20;;;;;;;;;;;;;;;:29;6296:7;6275:29;;;;;;;;;;;6252:52;;6343:7;6327:4;:12;;;:23;6319:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6396:12;:10;:12::i;:::-;6381:27;;:4;:11;;;;;;;;;;;;:27;;;6373:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6443:18;6464:35;6484:4;:14;;;6464:15;:19;;:35;;;;:::i;:::-;6443:56;;6533:6;6520:10;:19;;;;:::i;:::-;6507:32;;6664:14;6681:39;6699:12;:10;:12::i;:::-;6712:7;6681:17;:39::i;:::-;6664:56;;6737:23;6748:4;:11;;;6737:6;:10;;:23;;;;:::i;:::-;6728:32;;6769:21;6821:1;6807:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6800:23;;6851:4;;;;;;;;;;;6833;6838:1;6833:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;6884:14;;;;;;;;;;;6866:4;6871:1;6866:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;::::0;::::1;6908:22;6933:26;6946:6;6954:4;6933:12;:26::i;:::-;6908:51;;6982:1;6971:5;6977:1;6971:8;;;;;;;;:::i;:::-;;;;;;;;:12;:44;;;;;6999:16;:14;:16::i;:::-;6987:5;6993:1;6987:8;;;;;;;;:::i;:::-;;;;;;;;:28;;6971:44;6968:220;;;7027:14;;;;;;;;;;;:27;;;7055:20;;;;;;;;;;;7078:12;:10;:12::i;:::-;7093:5;7099:1;7093:8;;;;;;;;:::i;:::-;;;;;;;;7027:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6968:220;;;7140:5;7132:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;6968:220;7196:10;;;;;;;;;;;:27;;;7232:4;7239:12;:10;:12::i;:::-;7253:7;7262:4;:11;;;7196:82;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7300:1;7286:4;:11;;:15;;;;7323:23;7339:6;7323:4;:11;;;:15;;:23;;;;:::i;:::-;7309:4;:11;;:37;;;;7371:15;7354:4;:14;;:32;;;;7400:42;7408:12;:10;:12::i;:::-;7423:7;7433:5;7439:1;7433:8;;;;;;;;:::i;:::-;;;;;;;;7400:42;;;;;;;;:::i;:::-;;;;;;;;6087:1362;;;;;2288:20:12::0;:18;:20::i;:::-;6009:1440:14;;:::o;620:37::-;;;;:::o;9140:197::-;9222:21;9265:13;;;;;;;;;;;:27;;;9293:6;9301:4;9265:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9254:52;;9140:197;;;;:::o;731:41::-;;;;:::o;12362:139::-;12409:7;12432:14;;;;;;;;;;;:24;;;12457:20;;;;;;;;;;;12488:4;12432:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12425:69;;12362:139;:::o;1712:33::-;;;;;;;;;;;;;:::o;517:227:2:-;679:6;705:31;;;698:38;;517:227;;;;;;;:::o;1367:198:11:-;708:12;:10;:12::i;:::-;697:23;;:7;:5;:7::i;:::-;:23;;;689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1475:1:::1;1455:22;;:8;:22;;::::0;1447:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1530:28;1549:8;1530:18;:28::i;:::-;1367:198:::0;:::o;829:155:4:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;694:128:13:-;752:7;774:43;778:1;781;774:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;767:50;;694:128;;;;:::o;1479:419::-;1537:7;1767:1;1762;:6;1758:35;;1785:1;1778:8;;;;1758:35;1799:9;1815:1;1811;:5;;;;:::i;:::-;1799:17;;1839:1;1834;1830;:5;;;;:::i;:::-;:10;1822:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1892:1;1885:8;;;1479:419;;;;;:::o;2329:124::-;2387:7;2409:39;2413:1;2416;2409:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2402:46;;2329:124;;;;:::o;7520:1450:14:-;7580:14;;;;;;;;;;;7572:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;7694:1;7647:10;;;;;;;;;;;:20;;;7676:4;7683:7;7647:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;7639:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7729:20;7752:6;:20;7759:12;:10;:12::i;:::-;7752:20;;;;;;;;;;;;;;;:29;7773:7;7752:29;;;;;;;;;;;7729:52;;7820:7;7804:4;:12;;;:23;7796:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7873:12;:10;:12::i;:::-;7858:27;;:4;:11;;;;;;;;;;;;:27;;;7850:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;7920:18;7941:35;7961:4;:14;;;7941:15;:19;;:35;;;;:::i;:::-;7920:56;;8010:6;7997:10;:19;;;;:::i;:::-;7984:32;;8141:14;8158:39;8176:12;:10;:12::i;:::-;8189:7;8158:17;:39::i;:::-;8141:56;;8214:23;8225:4;:11;;;8214:6;:10;;:23;;;;:::i;:::-;8205:32;;8245:21;8297:1;8283:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8276:23;;8327:4;;;;;;;;;;;8309;8314:1;8309:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;8360:14;;;;;;;;;;;8342:4;8347:1;8342:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;8384:22;8409:26;8422:6;8430:4;8409:12;:26::i;:::-;8384:51;;8458:1;8447:5;8453:1;8447:8;;;;;;;;:::i;:::-;;;;;;;;:12;:44;;;;;8475:16;:14;:16::i;:::-;8463:5;8469:1;8463:8;;;;;;;;:::i;:::-;;;;;;;;:28;;8447:44;8444:220;;;8503:14;;;;;;;;;;;:27;;;8531:20;;;;;;;;;;;8554:12;:10;:12::i;:::-;8569:5;8575:1;8569:8;;;;;;;;:::i;:::-;;;;;;;;8503:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8444:220;;;8616:5;8608:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8444:220;8672:10;;;;;;;;;;;:27;;;8708:4;8715:12;:10;:12::i;:::-;8729:7;8738:4;:11;;;8672:82;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8778:1;8763:4;:12;;:16;;;;8809:1;8787:4;:11;;;:24;;;;;;;;;;;;;;;;;;8836:1;8819:4;:14;;:18;;;;8861:1;8845:4;:13;;:17;;;;8884:1;8870:4;:11;;:15;;;;8907:1;8893:4;:11;;:15;;;;8921:42;8929:12;:10;:12::i;:::-;8944:7;8954:5;8960:1;8954:8;;;;;;;;:::i;:::-;;;;;;;;8921:42;;;;;;;;:::i;:::-;;;;;;;;7564:1406;;;;;7520:1450;:::o;585:96:1:-;638:7;664:10;657:17;;585:96;:::o;2321:287:12:-;1744:1;2453:7;;:19;2445:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2583:7;:18;;;;2321:287::o;2614:209::-;1701:1;2794:7;:22;;;;2614:209::o;1719:187:11:-;1792:16;1811:6;;;;;;;;;;;1792:25;;1836:8;1827:6;;:17;;;;;;;;;;;;;;;;;;1890:8;1859:40;;1880:8;1859:40;;;;;;;;;;;;1782:124;1719:187;:::o;5147:779:14:-;2464:10;;;;;;;;;;;:27;;;2492:12;:10;:12::i;:::-;2513:4;2464:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5235:12:::1;;;;;;;;;;;5227:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;5334:6;5287:10;;;;;;;;;;;:20;;;5308:12;:10;:12::i;:::-;5322:7;5287:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;5279:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;5366:12;5381:15;5366:30;;5411:20;5434:6;:20;5441:12;:10;:12::i;:::-;5434:20;;;;;;;;;;;;;;;:29;5455:7;5434:29;;;;;;;;;;;5411:52;;5471:11;5485:40;5503:12;:10;:12::i;:::-;5517:7;5485:17;:40::i;:::-;5471:54;;5534:10;;;;;;;;;;;:27;;;5562:12;:10;:12::i;:::-;5585:4;5593:7;5602:6;5534:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5637:7;5622:4;:12;;:22;;;;5666:23;5682:6;5666:4;:11;;;:15;;:23;;;;:::i;:::-;5652:4;:11;;:37;;;;5711:12;:10;:12::i;:::-;5697:4;:11;;;:26;;;;;;;;;;;;;;;;;;5748:4;5731;:14;;:21;;;;5776:8;:17;5785:7;5776:17;;;;;;;;;;;;5760:4;:13;;:33;;;;5815:23;5831:6;5815:4;:11;;;:15;;:23;;;;:::i;:::-;5801:4;:11;;:37;;;;5873:7;5852:67;5858:12;:10;:12::i;:::-;5882:8;:17;5891:7;5882:17;;;;;;;;;;;;5901:4;:11;;;5914:4;5852:67;;;;;;;;;:::i;:::-;;;;;;;;5219:707;;;5147:779:::0;;:::o;288:162:13:-;346:7;361:9;377:1;373;:5;;;;:::i;:::-;361:17;;397:1;392;:6;;384:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;444:1;437:8;;;288:162;;;;:::o;1086:173::-;1172:7;1200:1;1195;:6;;1203:12;1187:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1222:9;1238:1;1234;:5;;;;:::i;:::-;1222:17;;1253:1;1246:8;;;1086:173;;;;;:::o;2904:316::-;2990:7;3079:1;3075;:5;3082:12;3067:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3101:9;3117:1;3113;:5;;;;:::i;:::-;3101:17;;3214:1;3207:8;;;2904:316;;;;;:::o;7:75:15:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:77::-;2062:7;2091:5;2080:16;;2025:77;;;:::o;2108:122::-;2181:24;2199:5;2181:24;:::i;:::-;2174:5;2171:35;2161:63;;2220:1;2217;2210:12;2161:63;2108:122;:::o;2236:139::-;2282:5;2320:6;2307:20;2298:29;;2336:33;2363:5;2336:33;:::i;:::-;2236:139;;;;:::o;2381:474::-;2449:6;2457;2506:2;2494:9;2485:7;2481:23;2477:32;2474:119;;;2512:79;;:::i;:::-;2474:119;2632:1;2657:53;2702:7;2693:6;2682:9;2678:22;2657:53;:::i;:::-;2647:63;;2603:117;2759:2;2785:53;2830:7;2821:6;2810:9;2806:22;2785:53;:::i;:::-;2775:63;;2730:118;2381:474;;;;;:::o;2861:118::-;2948:24;2966:5;2948:24;:::i;:::-;2943:3;2936:37;2861:118;;:::o;2985:222::-;3078:4;3116:2;3105:9;3101:18;3093:26;;3129:71;3197:1;3186:9;3182:17;3173:6;3129:71;:::i;:::-;2985:222;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:102;3377:6;3428:2;3424:7;3419:2;3412:5;3408:14;3404:28;3394:38;;3336:102;;;:::o;3444:180::-;3492:77;3489:1;3482:88;3589:4;3586:1;3579:15;3613:4;3610:1;3603:15;3630:281;3713:27;3735:4;3713:27;:::i;:::-;3705:6;3701:40;3843:6;3831:10;3828:22;3807:18;3795:10;3792:34;3789:62;3786:88;;;3854:18;;:::i;:::-;3786:88;3894:10;3890:2;3883:22;3673:238;3630:281;;:::o;3917:129::-;3951:6;3978:20;;:::i;:::-;3968:30;;4007:33;4035:4;4027:6;4007:33;:::i;:::-;3917:129;;;:::o;4052:311::-;4129:4;4219:18;4211:6;4208:30;4205:56;;;4241:18;;:::i;:::-;4205:56;4291:4;4283:6;4279:17;4271:25;;4351:4;4345;4341:15;4333:23;;4052:311;;;:::o;4369:117::-;4478:1;4475;4468:12;4509:710;4605:5;4630:81;4646:64;4703:6;4646:64;:::i;:::-;4630:81;:::i;:::-;4621:90;;4731:5;4760:6;4753:5;4746:21;4794:4;4787:5;4783:16;4776:23;;4847:4;4839:6;4835:17;4827:6;4823:30;4876:3;4868:6;4865:15;4862:122;;;4895:79;;:::i;:::-;4862:122;5010:6;4993:220;5027:6;5022:3;5019:15;4993:220;;;5102:3;5131:37;5164:3;5152:10;5131:37;:::i;:::-;5126:3;5119:50;5198:4;5193:3;5189:14;5182:21;;5069:144;5053:4;5048:3;5044:14;5037:21;;4993:220;;;4997:21;4611:608;;4509:710;;;;;:::o;5242:370::-;5313:5;5362:3;5355:4;5347:6;5343:17;5339:27;5329:122;;5370:79;;:::i;:::-;5329:122;5487:6;5474:20;5512:94;5602:3;5594:6;5587:4;5579:6;5575:17;5512:94;:::i;:::-;5503:103;;5319:293;5242:370;;;;:::o;5618:539::-;5702:6;5751:2;5739:9;5730:7;5726:23;5722:32;5719:119;;;5757:79;;:::i;:::-;5719:119;5905:1;5894:9;5890:17;5877:31;5935:18;5927:6;5924:30;5921:117;;;5957:79;;:::i;:::-;5921:117;6062:78;6132:7;6123:6;6112:9;6108:22;6062:78;:::i;:::-;6052:88;;5848:302;5618:539;;;;:::o;6163:329::-;6222:6;6271:2;6259:9;6250:7;6246:23;6242:32;6239:119;;;6277:79;;:::i;:::-;6239:119;6397:1;6422:53;6467:7;6458:6;6447:9;6443:22;6422:53;:::i;:::-;6412:63;;6368:117;6163:329;;;;:::o;6498:60::-;6526:3;6547:5;6540:12;;6498:60;;;:::o;6564:142::-;6614:9;6647:53;6665:34;6674:24;6692:5;6674:24;:::i;:::-;6665:34;:::i;:::-;6647:53;:::i;:::-;6634:66;;6564:142;;;:::o;6712:126::-;6762:9;6795:37;6826:5;6795:37;:::i;:::-;6782:50;;6712:126;;;:::o;6844:140::-;6908:9;6941:37;6972:5;6941:37;:::i;:::-;6928:50;;6844:140;;;:::o;6990:159::-;7091:51;7136:5;7091:51;:::i;:::-;7086:3;7079:64;6990:159;;:::o;7155:250::-;7262:4;7300:2;7289:9;7285:18;7277:26;;7313:85;7395:1;7384:9;7380:17;7371:6;7313:85;:::i;:::-;7155:250;;;;:::o;7411:329::-;7470:6;7519:2;7507:9;7498:7;7494:23;7490:32;7487:119;;;7525:79;;:::i;:::-;7487:119;7645:1;7670:53;7715:7;7706:6;7695:9;7691:22;7670:53;:::i;:::-;7660:63;;7616:117;7411:329;;;;:::o;7746:116::-;7816:21;7831:5;7816:21;:::i;:::-;7809:5;7806:32;7796:60;;7852:1;7849;7842:12;7796:60;7746:116;:::o;7868:133::-;7911:5;7949:6;7936:20;7927:29;;7965:30;7989:5;7965:30;:::i;:::-;7868:133;;;;:::o;8007:323::-;8063:6;8112:2;8100:9;8091:7;8087:23;8083:32;8080:119;;;8118:79;;:::i;:::-;8080:119;8238:1;8263:50;8305:7;8296:6;8285:9;8281:22;8263:50;:::i;:::-;8253:60;;8209:114;8007:323;;;;:::o;8336:112::-;8389:7;8418:24;8436:5;8418:24;:::i;:::-;8407:35;;8336:112;;;:::o;8454:154::-;8543:40;8577:5;8543:40;:::i;:::-;8536:5;8533:51;8523:79;;8598:1;8595;8588:12;8523:79;8454:154;:::o;8614:171::-;8676:5;8714:6;8701:20;8692:29;;8730:49;8773:5;8730:49;:::i;:::-;8614:171;;;;:::o;8791:361::-;8866:6;8915:2;8903:9;8894:7;8890:23;8886:32;8883:119;;;8921:79;;:::i;:::-;8883:119;9041:1;9066:69;9127:7;9118:6;9107:9;9103:22;9066:69;:::i;:::-;9056:79;;9012:133;8791:361;;;;:::o;9158:894::-;9276:6;9284;9333:2;9321:9;9312:7;9308:23;9304:32;9301:119;;;9339:79;;:::i;:::-;9301:119;9487:1;9476:9;9472:17;9459:31;9517:18;9509:6;9506:30;9503:117;;;9539:79;;:::i;:::-;9503:117;9644:78;9714:7;9705:6;9694:9;9690:22;9644:78;:::i;:::-;9634:88;;9430:302;9799:2;9788:9;9784:18;9771:32;9830:18;9822:6;9819:30;9816:117;;;9852:79;;:::i;:::-;9816:117;9957:78;10027:7;10018:6;10007:9;10003:22;9957:78;:::i;:::-;9947:88;;9742:303;9158:894;;;;;:::o;10058:619::-;10135:6;10143;10151;10200:2;10188:9;10179:7;10175:23;10171:32;10168:119;;;10206:79;;:::i;:::-;10168:119;10326:1;10351:53;10396:7;10387:6;10376:9;10372:22;10351:53;:::i;:::-;10341:63;;10297:117;10453:2;10479:53;10524:7;10515:6;10504:9;10500:22;10479:53;:::i;:::-;10469:63;;10424:118;10581:2;10607:53;10652:7;10643:6;10632:9;10628:22;10607:53;:::i;:::-;10597:63;;10552:118;10058:619;;;;;:::o;10683:104::-;10728:7;10757:24;10775:5;10757:24;:::i;:::-;10746:35;;10683:104;;;:::o;10793:138::-;10874:32;10900:5;10874:32;:::i;:::-;10867:5;10864:43;10854:71;;10921:1;10918;10911:12;10854:71;10793:138;:::o;10937:155::-;10991:5;11029:6;11016:20;11007:29;;11045:41;11080:5;11045:41;:::i;:::-;10937:155;;;;:::o;11098:345::-;11165:6;11214:2;11202:9;11193:7;11189:23;11185:32;11182:119;;;11220:79;;:::i;:::-;11182:119;11340:1;11365:61;11418:7;11409:6;11398:9;11394:22;11365:61;:::i;:::-;11355:71;;11311:125;11098:345;;;;:::o;11449:142::-;11515:9;11548:37;11579:5;11548:37;:::i;:::-;11535:50;;11449:142;;;:::o;11597:163::-;11700:53;11747:5;11700:53;:::i;:::-;11695:3;11688:66;11597:163;;:::o;11766:254::-;11875:4;11913:2;11902:9;11898:18;11890:26;;11926:87;12010:1;11999:9;11995:17;11986:6;11926:87;:::i;:::-;11766:254;;;;:::o;12026:153::-;12103:9;12136:37;12167:5;12136:37;:::i;:::-;12123:50;;12026:153;;;:::o;12185:185::-;12299:64;12357:5;12299:64;:::i;:::-;12294:3;12287:77;12185:185;;:::o;12376:276::-;12496:4;12534:2;12523:9;12519:18;12511:26;;12547:98;12642:1;12631:9;12627:17;12618:6;12547:98;:::i;:::-;12376:276;;;;:::o;12658:474::-;12726:6;12734;12783:2;12771:9;12762:7;12758:23;12754:32;12751:119;;;12789:79;;:::i;:::-;12751:119;12909:1;12934:53;12979:7;12970:6;12959:9;12955:22;12934:53;:::i;:::-;12924:63;;12880:117;13036:2;13062:53;13107:7;13098:6;13087:9;13083:22;13062:53;:::i;:::-;13052:63;;13007:118;12658:474;;;;;:::o;13138:619::-;13215:6;13223;13231;13280:2;13268:9;13259:7;13255:23;13251:32;13248:119;;;13286:79;;:::i;:::-;13248:119;13406:1;13431:53;13476:7;13467:6;13456:9;13452:22;13431:53;:::i;:::-;13421:63;;13377:117;13533:2;13559:53;13604:7;13595:6;13584:9;13580:22;13559:53;:::i;:::-;13549:63;;13504:118;13661:2;13687:53;13732:7;13723:6;13712:9;13708:22;13687:53;:::i;:::-;13677:63;;13632:118;13138:619;;;;;:::o;13763:118::-;13850:24;13868:5;13850:24;:::i;:::-;13845:3;13838:37;13763:118;;:::o;13887:222::-;13980:4;14018:2;14007:9;14003:18;13995:26;;14031:71;14099:1;14088:9;14084:17;14075:6;14031:71;:::i;:::-;13887:222;;;;:::o;14115:775::-;14348:4;14386:3;14375:9;14371:19;14363:27;;14400:71;14468:1;14457:9;14453:17;14444:6;14400:71;:::i;:::-;14481:72;14549:2;14538:9;14534:18;14525:6;14481:72;:::i;:::-;14563;14631:2;14620:9;14616:18;14607:6;14563:72;:::i;:::-;14645;14713:2;14702:9;14698:18;14689:6;14645:72;:::i;:::-;14727:73;14795:3;14784:9;14780:19;14771:6;14727:73;:::i;:::-;14810;14878:3;14867:9;14863:19;14854:6;14810:73;:::i;:::-;14115:775;;;;;;;;;:::o;14896:117::-;15005:1;15002;14995:12;15019:307;15080:4;15170:18;15162:6;15159:30;15156:56;;;15192:18;;:::i;:::-;15156:56;15230:29;15252:6;15230:29;:::i;:::-;15222:37;;15314:4;15308;15304:15;15296:23;;15019:307;;;:::o;15332:146::-;15429:6;15424:3;15419;15406:30;15470:1;15461:6;15456:3;15452:16;15445:27;15332:146;;;:::o;15484:423::-;15561:5;15586:65;15602:48;15643:6;15602:48;:::i;:::-;15586:65;:::i;:::-;15577:74;;15674:6;15667:5;15660:21;15712:4;15705:5;15701:16;15750:3;15741:6;15736:3;15732:16;15729:25;15726:112;;;15757:79;;:::i;:::-;15726:112;15847:54;15894:6;15889:3;15884;15847:54;:::i;:::-;15567:340;15484:423;;;;;:::o;15926:338::-;15981:5;16030:3;16023:4;16015:6;16011:17;16007:27;15997:122;;16038:79;;:::i;:::-;15997:122;16155:6;16142:20;16180:78;16254:3;16246:6;16239:4;16231:6;16227:17;16180:78;:::i;:::-;16171:87;;15987:277;15926:338;;;;:::o;16270:1509::-;16424:6;16432;16440;16448;16456;16505:3;16493:9;16484:7;16480:23;16476:33;16473:120;;;16512:79;;:::i;:::-;16473:120;16632:1;16657:53;16702:7;16693:6;16682:9;16678:22;16657:53;:::i;:::-;16647:63;;16603:117;16759:2;16785:53;16830:7;16821:6;16810:9;16806:22;16785:53;:::i;:::-;16775:63;;16730:118;16915:2;16904:9;16900:18;16887:32;16946:18;16938:6;16935:30;16932:117;;;16968:79;;:::i;:::-;16932:117;17073:78;17143:7;17134:6;17123:9;17119:22;17073:78;:::i;:::-;17063:88;;16858:303;17228:2;17217:9;17213:18;17200:32;17259:18;17251:6;17248:30;17245:117;;;17281:79;;:::i;:::-;17245:117;17386:78;17456:7;17447:6;17436:9;17432:22;17386:78;:::i;:::-;17376:88;;17171:303;17541:3;17530:9;17526:19;17513:33;17573:18;17565:6;17562:30;17559:117;;;17595:79;;:::i;:::-;17559:117;17700:62;17754:7;17745:6;17734:9;17730:22;17700:62;:::i;:::-;17690:72;;17484:288;16270:1509;;;;;;;;:::o;17785:115::-;17870:23;17887:5;17870:23;:::i;:::-;17865:3;17858:36;17785:115;;:::o;17906:218::-;17997:4;18035:2;18024:9;18020:18;18012:26;;18048:69;18114:1;18103:9;18099:17;18090:6;18048:69;:::i;:::-;17906:218;;;;:::o;18130:311::-;18207:4;18297:18;18289:6;18286:30;18283:56;;;18319:18;;:::i;:::-;18283:56;18369:4;18361:6;18357:17;18349:25;;18429:4;18423;18419:15;18411:23;;18130:311;;;:::o;18464:710::-;18560:5;18585:81;18601:64;18658:6;18601:64;:::i;:::-;18585:81;:::i;:::-;18576:90;;18686:5;18715:6;18708:5;18701:21;18749:4;18742:5;18738:16;18731:23;;18802:4;18794:6;18790:17;18782:6;18778:30;18831:3;18823:6;18820:15;18817:122;;;18850:79;;:::i;:::-;18817:122;18965:6;18948:220;18982:6;18977:3;18974:15;18948:220;;;19057:3;19086:37;19119:3;19107:10;19086:37;:::i;:::-;19081:3;19074:50;19153:4;19148:3;19144:14;19137:21;;19024:144;19008:4;19003:3;18999:14;18992:21;;18948:220;;;18952:21;18566:608;;18464:710;;;;;:::o;19197:370::-;19268:5;19317:3;19310:4;19302:6;19298:17;19294:27;19284:122;;19325:79;;:::i;:::-;19284:122;19442:6;19429:20;19467:94;19557:3;19549:6;19542:4;19534:6;19530:17;19467:94;:::i;:::-;19458:103;;19274:293;19197:370;;;;:::o;19573:684::-;19666:6;19674;19723:2;19711:9;19702:7;19698:23;19694:32;19691:119;;;19729:79;;:::i;:::-;19691:119;19849:1;19874:53;19919:7;19910:6;19899:9;19895:22;19874:53;:::i;:::-;19864:63;;19820:117;20004:2;19993:9;19989:18;19976:32;20035:18;20027:6;20024:30;20021:117;;;20057:79;;:::i;:::-;20021:117;20162:78;20232:7;20223:6;20212:9;20208:22;20162:78;:::i;:::-;20152:88;;19947:303;19573:684;;;;;:::o;20263:114::-;20330:6;20364:5;20358:12;20348:22;;20263:114;;;:::o;20383:184::-;20482:11;20516:6;20511:3;20504:19;20556:4;20551:3;20547:14;20532:29;;20383:184;;;;:::o;20573:132::-;20640:4;20663:3;20655:11;;20693:4;20688:3;20684:14;20676:22;;20573:132;;;:::o;20711:108::-;20788:24;20806:5;20788:24;:::i;:::-;20783:3;20776:37;20711:108;;:::o;20825:179::-;20894:10;20915:46;20957:3;20949:6;20915:46;:::i;:::-;20993:4;20988:3;20984:14;20970:28;;20825:179;;;;:::o;21010:113::-;21080:4;21112;21107:3;21103:14;21095:22;;21010:113;;;:::o;21159:732::-;21278:3;21307:54;21355:5;21307:54;:::i;:::-;21377:86;21456:6;21451:3;21377:86;:::i;:::-;21370:93;;21487:56;21537:5;21487:56;:::i;:::-;21566:7;21597:1;21582:284;21607:6;21604:1;21601:13;21582:284;;;21683:6;21677:13;21710:63;21769:3;21754:13;21710:63;:::i;:::-;21703:70;;21796:60;21849:6;21796:60;:::i;:::-;21786:70;;21642:224;21629:1;21626;21622:9;21617:14;;21582:284;;;21586:14;21882:3;21875:10;;21283:608;;;21159:732;;;;:::o;21897:373::-;22040:4;22078:2;22067:9;22063:18;22055:26;;22127:9;22121:4;22117:20;22113:1;22102:9;22098:17;22091:47;22155:108;22258:4;22249:6;22155:108;:::i;:::-;22147:116;;21897:373;;;;:::o;22276:1089::-;22380:6;22388;22396;22404;22412;22461:3;22449:9;22440:7;22436:23;22432:33;22429:120;;;22468:79;;:::i;:::-;22429:120;22588:1;22613:53;22658:7;22649:6;22638:9;22634:22;22613:53;:::i;:::-;22603:63;;22559:117;22715:2;22741:53;22786:7;22777:6;22766:9;22762:22;22741:53;:::i;:::-;22731:63;;22686:118;22843:2;22869:53;22914:7;22905:6;22894:9;22890:22;22869:53;:::i;:::-;22859:63;;22814:118;22971:2;22997:53;23042:7;23033:6;23022:9;23018:22;22997:53;:::i;:::-;22987:63;;22942:118;23127:3;23116:9;23112:19;23099:33;23159:18;23151:6;23148:30;23145:117;;;23181:79;;:::i;:::-;23145:117;23286:62;23340:7;23331:6;23320:9;23316:22;23286:62;:::i;:::-;23276:72;;23070:288;22276:1089;;;;;;;;:::o;23371:180::-;23419:77;23416:1;23409:88;23516:4;23513:1;23506:15;23540:4;23537:1;23530:15;23557:180;23605:77;23602:1;23595:88;23702:4;23699:1;23692:15;23726:4;23723:1;23716:15;23743:185;23783:1;23800:20;23818:1;23800:20;:::i;:::-;23795:25;;23834:20;23852:1;23834:20;:::i;:::-;23829:25;;23873:1;23863:35;;23878:18;;:::i;:::-;23863:35;23920:1;23917;23913:9;23908:14;;23743:185;;;;:::o;23934:180::-;23982:77;23979:1;23972:88;24079:4;24076:1;24069:15;24103:4;24100:1;24093:15;24120:233;24159:3;24182:24;24200:5;24182:24;:::i;:::-;24173:33;;24228:66;24221:5;24218:77;24215:103;;24298:18;;:::i;:::-;24215:103;24345:1;24338:5;24334:13;24327:20;;24120:233;;;:::o;24359:169::-;24443:11;24477:6;24472:3;24465:19;24517:4;24512:3;24508:14;24493:29;;24359:169;;;;:::o;24534:182::-;24674:34;24670:1;24662:6;24658:14;24651:58;24534:182;:::o;24722:366::-;24864:3;24885:67;24949:2;24944:3;24885:67;:::i;:::-;24878:74;;24961:93;25050:3;24961:93;:::i;:::-;25079:2;25074:3;25070:12;25063:19;;24722:366;;;:::o;25094:419::-;25260:4;25298:2;25287:9;25283:18;25275:26;;25347:9;25341:4;25337:20;25333:1;25322:9;25318:17;25311:47;25375:131;25501:4;25375:131;:::i;:::-;25367:139;;25094:419;;;:::o;25519:332::-;25640:4;25678:2;25667:9;25663:18;25655:26;;25691:71;25759:1;25748:9;25744:17;25735:6;25691:71;:::i;:::-;25772:72;25840:2;25829:9;25825:18;25816:6;25772:72;:::i;:::-;25519:332;;;;;:::o;25857:137::-;25911:5;25942:6;25936:13;25927:22;;25958:30;25982:5;25958:30;:::i;:::-;25857:137;;;;:::o;26000:345::-;26067:6;26116:2;26104:9;26095:7;26091:23;26087:32;26084:119;;;26122:79;;:::i;:::-;26084:119;26242:1;26267:61;26320:7;26311:6;26300:9;26296:22;26267:61;:::i;:::-;26257:71;;26213:125;26000:345;;;;:::o;26351:168::-;26434:11;26468:6;26463:3;26456:19;26508:4;26503:3;26499:14;26484:29;;26351:168;;;;:::o;26525:114::-;;:::o;26645:362::-;26786:3;26807:65;26870:1;26865:3;26807:65;:::i;:::-;26800:72;;26881:93;26970:3;26881:93;:::i;:::-;26999:1;26994:3;26990:11;26983:18;;26645:362;;;:::o;27013:859::-;27290:4;27328:3;27317:9;27313:19;27305:27;;27342:71;27410:1;27399:9;27395:17;27386:6;27342:71;:::i;:::-;27423:72;27491:2;27480:9;27476:18;27467:6;27423:72;:::i;:::-;27505;27573:2;27562:9;27558:18;27549:6;27505:72;:::i;:::-;27587;27655:2;27644:9;27640:18;27631:6;27587:72;:::i;:::-;27707:9;27701:4;27697:20;27691:3;27680:9;27676:19;27669:49;27735:130;27860:4;27735:130;:::i;:::-;27727:138;;27013:859;;;;;;;:::o;27878:181::-;28018:33;28014:1;28006:6;28002:14;27995:57;27878:181;:::o;28065:366::-;28207:3;28228:67;28292:2;28287:3;28228:67;:::i;:::-;28221:74;;28304:93;28393:3;28304:93;:::i;:::-;28422:2;28417:3;28413:12;28406:19;;28065:366;;;:::o;28437:419::-;28603:4;28641:2;28630:9;28626:18;28618:26;;28690:9;28684:4;28680:20;28676:1;28665:9;28661:17;28654:47;28718:131;28844:4;28718:131;:::i;:::-;28710:139;;28437:419;;;:::o;28862:143::-;28919:5;28950:6;28944:13;28935:22;;28966:33;28993:5;28966:33;:::i;:::-;28862:143;;;;:::o;29011:351::-;29081:6;29130:2;29118:9;29109:7;29105:23;29101:32;29098:119;;;29136:79;;:::i;:::-;29098:119;29256:1;29281:64;29337:7;29328:6;29317:9;29313:22;29281:64;:::i;:::-;29271:74;;29227:128;29011:351;;;;:::o;29368:171::-;29508:23;29504:1;29496:6;29492:14;29485:47;29368:171;:::o;29545:366::-;29687:3;29708:67;29772:2;29767:3;29708:67;:::i;:::-;29701:74;;29784:93;29873:3;29784:93;:::i;:::-;29902:2;29897:3;29893:12;29886:19;;29545:366;;;:::o;29917:419::-;30083:4;30121:2;30110:9;30106:18;30098:26;;30170:9;30164:4;30160:20;30156:1;30145:9;30141:17;30134:47;30198:131;30324:4;30198:131;:::i;:::-;30190:139;;29917:419;;;:::o;30342:160::-;30482:12;30478:1;30470:6;30466:14;30459:36;30342:160;:::o;30508:366::-;30650:3;30671:67;30735:2;30730:3;30671:67;:::i;:::-;30664:74;;30747:93;30836:3;30747:93;:::i;:::-;30865:2;30860:3;30856:12;30849:19;;30508:366;;;:::o;30880:419::-;31046:4;31084:2;31073:9;31069:18;31061:26;;31133:9;31127:4;31123:20;31119:1;31108:9;31104:17;31097:47;31161:131;31287:4;31161:131;:::i;:::-;31153:139;;30880:419;;;:::o;31305:171::-;31445:23;31441:1;31433:6;31429:14;31422:47;31305:171;:::o;31482:366::-;31624:3;31645:67;31709:2;31704:3;31645:67;:::i;:::-;31638:74;;31721:93;31810:3;31721:93;:::i;:::-;31839:2;31834:3;31830:12;31823:19;;31482:366;;;:::o;31854:419::-;32020:4;32058:2;32047:9;32043:18;32035:26;;32107:9;32101:4;32097:20;32093:1;32082:9;32078:17;32071:47;32135:131;32261:4;32135:131;:::i;:::-;32127:139;;31854:419;;;:::o;32279:442::-;32428:4;32466:2;32455:9;32451:18;32443:26;;32479:71;32547:1;32536:9;32532:17;32523:6;32479:71;:::i;:::-;32560:72;32628:2;32617:9;32613:18;32604:6;32560:72;:::i;:::-;32642;32710:2;32699:9;32695:18;32686:6;32642:72;:::i;:::-;32279:442;;;;;;:::o;32727:179::-;32867:31;32863:1;32855:6;32851:14;32844:55;32727:179;:::o;32912:366::-;33054:3;33075:67;33139:2;33134:3;33075:67;:::i;:::-;33068:74;;33151:93;33240:3;33151:93;:::i;:::-;33269:2;33264:3;33260:12;33253:19;;32912:366;;;:::o;33284:419::-;33450:4;33488:2;33477:9;33473:18;33465:26;;33537:9;33531:4;33527:20;33523:1;33512:9;33508:17;33501:47;33565:131;33691:4;33565:131;:::i;:::-;33557:139;;33284:419;;;:::o;33709:442::-;33858:4;33896:2;33885:9;33881:18;33873:26;;33909:71;33977:1;33966:9;33962:17;33953:6;33909:71;:::i;:::-;33990:72;34058:2;34047:9;34043:18;34034:6;33990:72;:::i;:::-;34072;34140:2;34129:9;34125:18;34116:6;34072:72;:::i;:::-;33709:442;;;;;;:::o;34157:114::-;34224:6;34258:5;34252:12;34242:22;;34157:114;;;:::o;34277:184::-;34376:11;34410:6;34405:3;34398:19;34450:4;34445:3;34441:14;34426:29;;34277:184;;;;:::o;34467:132::-;34534:4;34557:3;34549:11;;34587:4;34582:3;34578:14;34570:22;;34467:132;;;:::o;34605:108::-;34682:24;34700:5;34682:24;:::i;:::-;34677:3;34670:37;34605:108;;:::o;34719:179::-;34788:10;34809:46;34851:3;34843:6;34809:46;:::i;:::-;34887:4;34882:3;34878:14;34864:28;;34719:179;;;;:::o;34904:113::-;34974:4;35006;35001:3;34997:14;34989:22;;34904:113;;;:::o;35053:732::-;35172:3;35201:54;35249:5;35201:54;:::i;:::-;35271:86;35350:6;35345:3;35271:86;:::i;:::-;35264:93;;35381:56;35431:5;35381:56;:::i;:::-;35460:7;35491:1;35476:284;35501:6;35498:1;35495:13;35476:284;;;35577:6;35571:13;35604:63;35663:3;35648:13;35604:63;:::i;:::-;35597:70;;35690:60;35743:6;35690:60;:::i;:::-;35680:70;;35536:224;35523:1;35520;35516:9;35511:14;;35476:284;;;35480:14;35776:3;35769:10;;35177:608;;;35053:732;;;;:::o;35791:483::-;35962:4;36000:2;35989:9;35985:18;35977:26;;36013:71;36081:1;36070:9;36066:17;36057:6;36013:71;:::i;:::-;36131:9;36125:4;36121:20;36116:2;36105:9;36101:18;36094:48;36159:108;36262:4;36253:6;36159:108;:::i;:::-;36151:116;;35791:483;;;;;:::o;36297:732::-;36404:5;36429:81;36445:64;36502:6;36445:64;:::i;:::-;36429:81;:::i;:::-;36420:90;;36530:5;36559:6;36552:5;36545:21;36593:4;36586:5;36582:16;36575:23;;36646:4;36638:6;36634:17;36626:6;36622:30;36675:3;36667:6;36664:15;36661:122;;;36694:79;;:::i;:::-;36661:122;36809:6;36792:231;36826:6;36821:3;36818:15;36792:231;;;36901:3;36930:48;36974:3;36962:10;36930:48;:::i;:::-;36925:3;36918:61;37008:4;37003:3;36999:14;36992:21;;36868:155;36852:4;36847:3;36843:14;36836:21;;36792:231;;;36796:21;36410:619;;36297:732;;;;;:::o;37052:385::-;37134:5;37183:3;37176:4;37168:6;37164:17;37160:27;37150:122;;37191:79;;:::i;:::-;37150:122;37301:6;37295:13;37326:105;37427:3;37419:6;37412:4;37404:6;37400:17;37326:105;:::i;:::-;37317:114;;37140:297;37052:385;;;;:::o;37443:554::-;37538:6;37587:2;37575:9;37566:7;37562:23;37558:32;37555:119;;;37593:79;;:::i;:::-;37555:119;37734:1;37723:9;37719:17;37713:24;37764:18;37756:6;37753:30;37750:117;;;37786:79;;:::i;:::-;37750:117;37891:89;37972:7;37963:6;37952:9;37948:22;37891:89;:::i;:::-;37881:99;;37684:306;37443:554;;;;:::o;38003:332::-;38124:4;38162:2;38151:9;38147:18;38139:26;;38175:71;38243:1;38232:9;38228:17;38219:6;38175:71;:::i;:::-;38256:72;38324:2;38313:9;38309:18;38300:6;38256:72;:::i;:::-;38003:332;;;;;:::o;38341:225::-;38481:34;38477:1;38469:6;38465:14;38458:58;38550:8;38545:2;38537:6;38533:15;38526:33;38341:225;:::o;38572:366::-;38714:3;38735:67;38799:2;38794:3;38735:67;:::i;:::-;38728:74;;38811:93;38900:3;38811:93;:::i;:::-;38929:2;38924:3;38920:12;38913:19;;38572:366;;;:::o;38944:419::-;39110:4;39148:2;39137:9;39133:18;39125:26;;39197:9;39191:4;39187:20;39183:1;39172:9;39168:17;39161:47;39225:131;39351:4;39225:131;:::i;:::-;39217:139;;38944:419;;;:::o;39369:410::-;39409:7;39432:20;39450:1;39432:20;:::i;:::-;39427:25;;39466:20;39484:1;39466:20;:::i;:::-;39461:25;;39521:1;39518;39514:9;39543:30;39561:11;39543:30;:::i;:::-;39532:41;;39722:1;39713:7;39709:15;39706:1;39703:22;39683:1;39676:9;39656:83;39633:139;;39752:18;;:::i;:::-;39633:139;39417:362;39369:410;;;;:::o;39785:220::-;39925:34;39921:1;39913:6;39909:14;39902:58;39994:3;39989:2;39981:6;39977:15;39970:28;39785:220;:::o;40011:366::-;40153:3;40174:67;40238:2;40233:3;40174:67;:::i;:::-;40167:74;;40250:93;40339:3;40250:93;:::i;:::-;40368:2;40363:3;40359:12;40352:19;;40011:366;;;:::o;40383:419::-;40549:4;40587:2;40576:9;40572:18;40564:26;;40636:9;40630:4;40626:20;40622:1;40611:9;40607:17;40600:47;40664:131;40790:4;40664:131;:::i;:::-;40656:139;;40383:419;;;:::o;40808:181::-;40948:33;40944:1;40936:6;40932:14;40925:57;40808:181;:::o;40995:366::-;41137:3;41158:67;41222:2;41217:3;41158:67;:::i;:::-;41151:74;;41234:93;41323:3;41234:93;:::i;:::-;41352:2;41347:3;41343:12;41336:19;;40995:366;;;:::o;41367:419::-;41533:4;41571:2;41560:9;41556:18;41548:26;;41620:9;41614:4;41610:20;41606:1;41595:9;41591:17;41584:47;41648:131;41774:4;41648:131;:::i;:::-;41640:139;;41367:419;;;:::o;41792:167::-;41932:19;41928:1;41920:6;41916:14;41909:43;41792:167;:::o;41965:366::-;42107:3;42128:67;42192:2;42187:3;42128:67;:::i;:::-;42121:74;;42204:93;42293:3;42204:93;:::i;:::-;42322:2;42317:3;42313:12;42306:19;;41965:366;;;:::o;42337:419::-;42503:4;42541:2;42530:9;42526:18;42518:26;;42590:9;42584:4;42580:20;42576:1;42565:9;42561:17;42554:47;42618:131;42744:4;42618:131;:::i;:::-;42610:139;;42337:419;;;:::o;42762:168::-;42902:20;42898:1;42890:6;42886:14;42879:44;42762:168;:::o;42936:366::-;43078:3;43099:67;43163:2;43158:3;43099:67;:::i;:::-;43092:74;;43175:93;43264:3;43175:93;:::i;:::-;43293:2;43288:3;43284:12;43277:19;;42936:366;;;:::o;43308:419::-;43474:4;43512:2;43501:9;43497:18;43489:26;;43561:9;43555:4;43551:20;43547:1;43536:9;43532:17;43525:47;43589:131;43715:4;43589:131;:::i;:::-;43581:139;;43308:419;;;:::o;43733:162::-;43873:14;43869:1;43861:6;43857:14;43850:38;43733:162;:::o;43901:366::-;44043:3;44064:67;44128:2;44123:3;44064:67;:::i;:::-;44057:74;;44140:93;44229:3;44140:93;:::i;:::-;44258:2;44253:3;44249:12;44242:19;;43901:366;;;:::o;44273:419::-;44439:4;44477:2;44466:9;44462:18;44454:26;;44526:9;44520:4;44516:20;44512:1;44501:9;44497:17;44490:47;44554:131;44680:4;44554:131;:::i;:::-;44546:139;;44273:419;;;:::o;44698:553::-;44875:4;44913:3;44902:9;44898:19;44890:27;;44927:71;44995:1;44984:9;44980:17;44971:6;44927:71;:::i;:::-;45008:72;45076:2;45065:9;45061:18;45052:6;45008:72;:::i;:::-;45090;45158:2;45147:9;45143:18;45134:6;45090:72;:::i;:::-;45172;45240:2;45229:9;45225:18;45216:6;45172:72;:::i;:::-;44698:553;;;;;;;:::o;45257:191::-;45297:3;45316:20;45334:1;45316:20;:::i;:::-;45311:25;;45350:20;45368:1;45350:20;:::i;:::-;45345:25;;45393:1;45390;45386:9;45379:16;;45414:3;45411:1;45408:10;45405:36;;;45421:18;;:::i;:::-;45405:36;45257:191;;;;:::o;45454:177::-;45594:29;45590:1;45582:6;45578:14;45571:53;45454:177;:::o;45637:366::-;45779:3;45800:67;45864:2;45859:3;45800:67;:::i;:::-;45793:74;;45876:93;45965:3;45876:93;:::i;:::-;45994:2;45989:3;45985:12;45978:19;;45637:366;;;:::o;46009:419::-;46175:4;46213:2;46202:9;46198:18;46190:26;;46262:9;46256:4;46252:20;46248:1;46237:9;46233:17;46226:47;46290:131;46416:4;46290:131;:::i;:::-;46282:139;;46009:419;;;:::o;46434:99::-;46486:6;46520:5;46514:12;46504:22;;46434:99;;;:::o;46539:246::-;46620:1;46630:113;46644:6;46641:1;46638:13;46630:113;;;46729:1;46724:3;46720:11;46714:18;46710:1;46705:3;46701:11;46694:39;46666:2;46663:1;46659:10;46654:15;;46630:113;;;46777:1;46768:6;46763:3;46759:16;46752:27;46601:184;46539:246;;;:::o;46791:377::-;46879:3;46907:39;46940:5;46907:39;:::i;:::-;46962:71;47026:6;47021:3;46962:71;:::i;:::-;46955:78;;47042:65;47100:6;47095:3;47088:4;47081:5;47077:16;47042:65;:::i;:::-;47132:29;47154:6;47132:29;:::i;:::-;47127:3;47123:39;47116:46;;46883:285;46791:377;;;;:::o;47174:313::-;47287:4;47325:2;47314:9;47310:18;47302:26;;47374:9;47368:4;47364:20;47360:1;47349:9;47345:17;47338:47;47402:78;47475:4;47466:6;47402:78;:::i;:::-;47394:86;;47174:313;;;;:::o;47493:194::-;47533:4;47553:20;47571:1;47553:20;:::i;:::-;47548:25;;47587:20;47605:1;47587:20;:::i;:::-;47582:25;;47631:1;47628;47624:9;47616:17;;47655:1;47649:4;47646:11;47643:37;;;47660:18;;:::i;:::-;47643:37;47493:194;;;;:::o
Swarm Source
ipfs://b77e8ccdd472c86eb4d35ccd69c6bc8c14a62bba2cef19dfba81bca3b9467fae
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.