BEP-721
Source Code
Overview
Max Total Supply
465ALN
Holders
465
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ALNLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
ARK_LEGACY
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2022-12-25
*/
/*
* . . .
* .
* .;;.. .':::::::::::::;,.. .'::;.. . .':::;'. .
* 'xKXk;. . .oXXXXXXXXXXXXXXKOl'. .oXXKc. .l0XX0o.
* .dXXXXk, . .;dddddddddddddkKXXk, .oXXKc. .:kXXKx,. .
* . .oKXXXXXx' . . .oKXXo. .oXXKc..'dKXXOc. . .
* .. .lKXXkxKXXx. . .lKXXo. .oXXKd;lOXXKo'. .
* .cKXXk'.oKXKd. .cloollllllolox0XXO;. .oXXXXXXXXKl. .
* . .c0XXk, .dXXKo. . .lXXXXXXXXXXXXXXX0d,.. .oXXXOxkKXKk:.
* .:0XXO;. 'xXXKl. .oXXKxcccccco0XXKc. . .oXXKc..cOXXKd,.
* ;OXX0:. ,kXX0c. .oXXKc .:0XXO, .oXXKc. .'o0XX0l.
* ,kXX0c. ,OXX0:. .oXXKc. .. .c0XXk, .oXXKc. . .;xKXKk;.
* .cxxxc. .;xxko. .:kkx;. .:xxxl. .:xxx;. . .cxxxd;. .
* ...... ...... ...... . ...... ..... .......
* . . ..
* ARK LEGACY 2.0
*
* SPDX-License-Identifier: None
*/
pragma solidity 0.8.16;
library Address {
function isContract(address account) internal view returns (bool) {bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
contract ERC165 is IERC165 {
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () {_registerInterface(_INTERFACE_ID_ERC165);}
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {return _supportedInterfaces[interfaceId];}
function _registerInterface(bytes4 interfaceId) internal virtual {require(interfaceId != 0xffffffff, "ERC165: invalid interface id");_supportedInterfaces[interfaceId] = true;}
}
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function transferFrom(address from, address to, uint256 tokenId) external;
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function setApprovalForAll(address operator, bool _approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}
interface IBEP20 {
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount ) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
}
interface IERC721Enumerable is IERC721 {
function totalSupply() external view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
function tokenByIndex(uint256 index) external view returns (uint256);
}
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
interface IERC721Receiver {
function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) return "0";
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
}
contract ERC721 is ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
string private _name;
string private _symbol;
mapping(uint256 => address) private _owners;
mapping(address => uint256) private _balances;
mapping(uint256 => address) private _tokenApprovals;
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId);
}
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: address zero is not a valid owner");
return _balances[owner];
}
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: invalid token ID");
return owner;
}
function name() public view virtual override returns (string memory) {return _name;}
function symbol() public view virtual override returns (string memory) {return _symbol;}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
function _baseURI() internal view virtual returns (string memory) {return "";}
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
msg.sender == owner || isApprovedForAll(owner, msg.sender),
"ERC721: approve caller is not token owner or approved for all"
);
_approve(to, tokenId);
}
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address operator, bool approved) public virtual override {_setApprovalForAll(msg.sender, operator, approved);}
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {return _operatorApprovals[owner][operator];}
function transferFrom(address from, address to, uint256 tokenId) public virtual override {
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: caller is not token owner or approved");
_transfer(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {safeTransferFrom(from, to, tokenId, "");}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: caller is not token owner or approved");
_safeTransfer(from, to, tokenId, data);
}
function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
}
function _exists(uint256 tokenId) internal view virtual returns (bool) {return _owners[tokenId] != address(0);}
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
}
function _safeMint(address to, uint256 tokenId) internal virtual {_safeMint(to, tokenId, "");}
function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {
_mint(to, tokenId);
require(_checkOnERC721Received(address(0), to, tokenId, data),"ERC721: transfer to non ERC721Receiver implementer");
}
function _mint(address to, uint256 tokenId) internal virtual {
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to]++;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
delete _tokenApprovals[tokenId];
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
function _transfer(address from, address to, uint256 tokenId) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
_beforeTokenTransfer(from, to, tokenId);
delete _tokenApprovals[tokenId];
_balances[from]--;
_balances[to]++;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) revert("ERC721: transfer to non ERC721Receiver implementer");
else assembly {revert(add(32, reason), mload(reason))}
}
} else return true;
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
mapping(uint256 => uint256) private _ownedTokensIndex;
uint256[] private _allTokens;
mapping(uint256 => uint256) private _allTokensIndex;
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
function totalSupply() public view virtual override returns (uint256) {return _allTokens.length;}
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) _addTokenToAllTokensEnumeration(tokenId);
else if (from != to) _removeTokenFromOwnerEnumeration(from, tokenId);
if (to == address(0)) _removeTokenFromAllTokensEnumeration(tokenId);
else if (to != from) _addTokenToOwnerEnumeration(to, tokenId);
}
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId;
_ownedTokensIndex[lastTokenId] = tokenIndex;
}
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId;
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
interface IVAULT {
function accountReachedMaxPayout(address investor) external view returns (bool);
function addSparkPlayer(address investor) external;
}
interface ILEGACYOLD {
function ownerOf(uint256 id) external view returns (address);
function levelOfNft(uint256 id) external view returns (uint256);
function excluded(uint256 id) external view returns (uint256);
function claimedRewards(uint256 id) external view returns (uint256);
function totalRewardsPerShare() external view returns (uint256);
function rewardsPool() external view returns (uint256);
}
contract ARK_LEGACY is ERC721, ERC721Enumerable {
using Strings for uint256;
string private baseURI;
string private _fileExtension;
address private constant CEO = 0xdf0048DF98A749ED36553788B4b449eA7a7BAA88;
IVAULT public vault;
mapping(address => bool) public isArk;
uint256 private _totalSupply;
IBEP20 public constant BUSD = IBEP20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
ILEGACYOLD public constant OLD = ILEGACYOLD(0x2222829575a47F84AA9eD9f3f09Efb36E21D2222);
uint256 public totalContributions;
uint256 private constant MULTIPLIER = 10**18;
mapping (uint256 => uint256) public levelOfNft;
mapping (uint256 => uint256) public nftPriceOfLevel;
mapping (uint256 => uint256) public maxNftsOfLevel;
mapping (uint256 => uint256) public nftsLeftOfLevel;
mapping (uint256 => uint256) public totalSupplyOfLevel;
mapping (uint256 => uint256) public cwrOfLevel;
mapping (uint256 => uint256) public votesOfLevel;
mapping (uint256 => uint256) public levelsOfLevel;
mapping (uint256 => uint256) public sharesOfLevel;
mapping (uint256 => uint256) public pricePaidForId;
mapping (uint256 => bool) public locked;
uint256 public totalShares;
uint256 public totalRewardsPerShare;
uint256 public lastDistribution;
uint256 public dailyRewardPercent = 2;
uint256 public rewardsPool;
uint256 public rewardsPercent = 20;
uint256 private veryBigNumber = 10 ** 36;
uint256 public maxCwrWithoutNft = 1500;
uint256 public openingHour = 0;
mapping (uint256 => uint256) public claimedRewards;
mapping (uint256 => uint256) public shares;
mapping (uint256 => uint256) public excluded;
struct Vote{
uint256 yes;
uint256 no;
string topic;
uint256 endTime;
}
Vote[] public votes;
mapping(uint256 => mapping(uint256 => bool)) public voteCast;
mapping(uint256 => mapping(uint256 => bool)) public decisionOnVote;
event VoteNowIfYouCare(Vote newVote);
event MigrationFinished(uint256 oldBalance, uint256 rewardsPool, uint256 unclaimedRewards);
event RewardsAdded(uint256 rewardsToBeAdded);
event RewardsDistributed(uint256 rewardsToBeAdded, uint256 rewardsPerShareToday);
event RewardsClaimed(address investor, uint256 claimableNow);
event VaultSet(address vaultAddress);
event ArkWalletSet(address arkWallet, bool status);
modifier onlyCEO() {
require(msg.sender == CEO, "Only the CEO can do that");
_;
}
modifier onlyArk() {
require(isArk[msg.sender], "Only ARK can do that");
_;
}
event NftMinted(address indexed user, uint256 indexed tokenId, uint256 level, uint256 price);
event NftLevelledUp(address indexed user, uint256 indexed tokenId, uint256 oldLevel , uint256 newLevel, uint256 priceOfLevelUp);
constructor() ERC721("ARK Legacy 2.0", "ALN") {
nftPriceOfLevel[1] = 1000 ether;
nftPriceOfLevel[2] = 4000 ether;
nftPriceOfLevel[3] = 10000 ether;
maxNftsOfLevel[1] = 3000;
maxNftsOfLevel[2] = 500;
maxNftsOfLevel[3] = 100;
nftsLeftOfLevel[1] = 3000;
nftsLeftOfLevel[2] = 500;
nftsLeftOfLevel[3] = 100;
cwrOfLevel[1] = 2500;
cwrOfLevel[2] = 6000;
cwrOfLevel[3] = 13000;
votesOfLevel[1] = 1;
votesOfLevel[2] = 4;
votesOfLevel[3] = 10;
levelsOfLevel[1] = 3;
levelsOfLevel[2] = 9;
levelsOfLevel[3] = 15;
sharesOfLevel[1] = 1;
sharesOfLevel[2] = 4;
sharesOfLevel[3] = 10;
isArk[CEO] = true;
vault = IVAULT(0x66665CA5cb0f83E9cB813E89Ca64bD6cDd4C6666);
IBEP20(BUSD).approve(address(vault), type(uint256).max);
isArk[address(vault)] = true;
isArk[0x55553531D05394750d60EFab7E93D73a356F5555] = true;
}
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable){super._beforeTokenTransfer(from, to, tokenId);}
function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool){return super.supportsInterface(interfaceId);}
function tokenURI(uint256 tokenId) public view override returns (string memory) {return string(abi.encodePacked(baseURI, tokenId.toString(), _fileExtension));}
function setBaseUri(string memory uri) external onlyCEO {baseURI = uri;}
function setFileExtension(string memory ext) external onlyCEO {_fileExtension = ext;}
function _transfer(address from,address to, uint256 tokenId) internal override {
require(!locked[tokenId], "NFT is locked");
_claim(from);
require(balanceOf(to) == 0, "Max NFT per wallet exceeded");
super._transfer(from,to,tokenId);
}
function _mintToken(address _to, uint256 _tokenId) internal returns (uint256) {
_mint(_to, _tokenId);
return _tokenId;
}
function mint(uint256 level) external {
require(balanceOf(msg.sender) == 0, "Max NFT per wallet exceeded");
require(openingHour <= block.timestamp, "Sale not open yet");
require(nftsLeftOfLevel[level] > 0, "This level is sold out, sorry.");
uint256 price = nftPriceOfLevel[level];
require(BUSD.transferFrom(msg.sender, address(this), price),"BUSD transfer failed");
totalContributions += price;
uint256 idOfMintedNFT = _mintToken(msg.sender, _totalSupply);
pricePaidForId[idOfMintedNFT] = price;
levelOfNft[idOfMintedNFT] = level;
_totalSupply++;
totalSupplyOfLevel[level]++;
nftsLeftOfLevel[level]--;
uint256 rewardsShare = price * rewardsPercent / 100;
rewardsPool += rewardsShare;
totalShares += sharesOfLevel[level];
shares[idOfMintedNFT] = sharesOfLevel[level];
excluded[idOfMintedNFT] = totalRewardsPerShare;
require(BUSD.transfer(CEO, price - rewardsShare),"BUSD transfer failed");
emit NftMinted(msg.sender, idOfMintedNFT, level, price);
}
function mintToWallet(address to, uint256 level) public onlyCEO {
require(balanceOf(to) == 0, "Max NFT per wallet exceeded");
require(nftsLeftOfLevel[level] > 0, "This level is sold out, sorry.");
uint256 price = nftPriceOfLevel[level];
uint256 idOfMintedNFT = _mintToken(to, _totalSupply);
pricePaidForId[idOfMintedNFT] = price;
levelOfNft[idOfMintedNFT] = level;
_totalSupply++;
totalSupplyOfLevel[level]++;
nftsLeftOfLevel[level]--;
totalShares += sharesOfLevel[level];
shares[idOfMintedNFT] = sharesOfLevel[level];
excluded[idOfMintedNFT] = totalRewardsPerShare;
emit NftMinted(to, idOfMintedNFT, level, price);
}
function mintToWalletPaid(address to, uint256 level) external onlyCEO {
require(balanceOf(to) == 0, "Max NFT per wallet exceeded");
require(nftsLeftOfLevel[level] > 0, "This level is sold out, sorry.");
uint256 price = nftPriceOfLevel[level];
require(BUSD.transferFrom(msg.sender, address(this), price),"BUSD transfer failed");
totalContributions += price;
uint256 idOfMintedNFT = _mintToken(to, _totalSupply);
pricePaidForId[idOfMintedNFT] = price;
levelOfNft[idOfMintedNFT] = level;
_totalSupply++;
totalSupplyOfLevel[level]++;
nftsLeftOfLevel[level]--;
uint256 rewardsShare = price * rewardsPercent / 100;
rewardsPool += rewardsShare;
totalShares += sharesOfLevel[level];
shares[idOfMintedNFT] = sharesOfLevel[level];
excluded[idOfMintedNFT] = totalRewardsPerShare;
require(BUSD.transfer(CEO, price - rewardsShare),"BUSD transfer failed");
emit NftMinted(to, idOfMintedNFT, level, price);
}
function getPriceForLevelUp(uint256 id) public view returns(uint256) {
uint256 currentLevel = levelOfNft[id];
uint256 nextLevel = currentLevel + 1;
uint256 priceForLevelUp = nftPriceOfLevel[nextLevel] - pricePaidForId[id];
return priceForLevelUp;
}
function levelUp(uint256 id) external {
require(ownerOf(id) == msg.sender, "Can't upgrade an NFT that is not owned by you");
uint256 currentLevel = levelOfNft[id];
uint256 nextLevel = currentLevel + 1;
uint256 priceForLevelUp = nftPriceOfLevel[nextLevel] - pricePaidForId[id];
require(nftsLeftOfLevel[nextLevel] > 0, "This level is sold out, sorry.");
_claim(msg.sender);
require(BUSD.transferFrom(msg.sender, address(this), priceForLevelUp),"BUSD transfer failed");
totalContributions += priceForLevelUp;
pricePaidForId[id] += priceForLevelUp;
levelOfNft[id] = nextLevel;
totalSupplyOfLevel[nextLevel]++;
totalSupplyOfLevel[currentLevel]--;
nftsLeftOfLevel[nextLevel]--;
nftsLeftOfLevel[currentLevel]++;
uint256 rewardsShare = priceForLevelUp * rewardsPercent / 100;
rewardsPool += rewardsShare;
totalShares -= sharesOfLevel[currentLevel];
totalShares += sharesOfLevel[nextLevel];
shares[id] = sharesOfLevel[nextLevel];
require(BUSD.transfer(CEO, priceForLevelUp - rewardsShare),"BUSD transfer failed");
emit NftLevelledUp(msg.sender, id, currentLevel, nextLevel, priceForLevelUp);
}
function lockNft() external {
uint256 id = tokenOfOwnerByIndex(msg.sender, 0);
require(!locked[id], "NFT already locked");
vault.addSparkPlayer(msg.sender);
locked[id] = true;
}
function unlockNft() external {
uint256 id = tokenOfOwnerByIndex(msg.sender, 0);
require(locked[id], "NFT already unlocked");
require(vault.accountReachedMaxPayout(ownerOf(id)), "Can't unlock an NFT before reaching maxPayout");
locked[id] = false;
}
function adminUnlockNft(uint256 id) external onlyCEO{
locked[id] = false;
}
function setRewardPercentagePerDay(uint256 percent) external onlyCEO {
dailyRewardPercent = percent;
}
function setRewardPercentagePerMint(uint256 percent) external onlyCEO {
rewardsPercent = percent;
}
function resetDistributionTimer() external onlyCEO {
lastDistribution = block.timestamp - 24 hours;
}
function createNewVote(string memory whatToVoteOn, uint256 cutOffTime) external onlyCEO {
Vote memory newVote;
newVote.topic = whatToVoteOn;
newVote.endTime = cutOffTime;
votes.push(newVote);
emit VoteNowIfYouCare(newVote);
}
function vote(uint256 index, bool yourVote) external {
require(votes[index].endTime >= block.timestamp, "Vote is closed");
if(balanceOf(msg.sender) == 0) return;
uint256 id = tokenOfOwnerByIndex(msg.sender, 0);
uint256 level = levelOfNft[id];
uint256 votesOfThisNft = votesOfLevel[level];
if(votesOfThisNft == 0) return;
if(voteCast[id][index]) {
if(decisionOnVote[id][index]) votes[index].yes -= votesOfThisNft;
if(!decisionOnVote[id][index]) votes[index].no -= votesOfThisNft;
}
if(yourVote) votes[index].yes += votesOfThisNft;
if(!yourVote) votes[index].no += votesOfThisNft;
decisionOnVote[id][index] = yourVote;
voteCast[id][index] = true;
}
function createNewLevel(uint256 level, uint256 price, uint256 maxSupply, uint256 cwr, uint256 _votes, uint256 levels, uint256 share) external onlyCEO {
require(nftPriceOfLevel[level] == 0, "Level already exists");
nftPriceOfLevel[level] = price * 1 ether;
maxNftsOfLevel[level] = maxSupply;
nftsLeftOfLevel[level] = maxSupply;
cwrOfLevel[level] = cwr;
votesOfLevel[level] = _votes;
levelsOfLevel[level] = levels;
sharesOfLevel[level] = share;
}
function modifyLevel(uint256 level, uint256 price, uint256 maxSupply, uint256 cwr, uint256 _votes, uint256 levels) external onlyCEO {
if(maxSupply > maxNftsOfLevel[level]) {
uint256 additionalNfts = maxSupply - maxNftsOfLevel[level];
nftsLeftOfLevel[level] += additionalNfts;
}
if(maxSupply < maxNftsOfLevel[level]) {
uint256 lessNfts = maxNftsOfLevel[level] - maxSupply;
nftsLeftOfLevel[level] -= lessNfts;
}
nftPriceOfLevel[level] = price * 1 ether;
maxNftsOfLevel[level] = maxSupply;
cwrOfLevel[level] = cwr;
votesOfLevel[level] = _votes;
levelsOfLevel[level] = levels;
}
function getCwr(address investor) external view returns(uint256) {
if(balanceOf(investor) == 0) return maxCwrWithoutNft;
uint256 id = tokenOfOwnerByIndex(investor, 0);
uint256 level = levelOfNft[id];
uint256 cwr = locked[id] ? cwrOfLevel[level] : maxCwrWithoutNft;
return cwr;
}
function getLevels(address investor) external view returns(uint256) {
if(balanceOf(investor) == 0) return 0;
uint256 id = tokenOfOwnerByIndex(investor, 0);
uint256 level = levelOfNft[id];
uint256 levels = locked[id] ? levelsOfLevel[level] : 0;
return levels;
}
function increaseLimitOfNFTs(uint256 level, uint256 howMany) external onlyCEO {
maxNftsOfLevel[level] += howMany;
nftsLeftOfLevel[level] += howMany;
}
function setArkWallet(address arkWallet, bool status) external onlyCEO {
isArk[arkWallet] = status;
emit ArkWalletSet(arkWallet, status);
}
function setVaultAddress(address vaultAddress) external onlyCEO {
vault = IVAULT(vaultAddress);
IBEP20(BUSD).approve(address(vault), type(uint256).max);
emit VaultSet(vaultAddress);
}
// Integrated marketplace
uint256[] public nftsForSale;
mapping (uint256 => bool) public idForSale;
mapping (uint256 => uint256) public priceOfId;
mapping(uint256 => uint256) private nftForSaleIndexes;
event NftOffered(address seller, uint256 id, uint256 price);
event NftSold(address seller, address buyer, uint256 id, uint256 price);
function buy(uint256 id) external {
address seller = ownerOf(id);
uint256 price = priceOfId[id];
require(idForSale[id], "Can only buy listed NFTs");
require(BUSD.transferFrom(msg.sender, seller, price),"BUSD transfer failed");
idForSale[id] = false;
removeNftForSale(id);
_transfer(seller, msg.sender, id);
emit NftSold(seller, msg.sender, id, price);
}
function sell(uint256 id, uint256 price) external {
require(ownerOf(id) == msg.sender, "Can't transfer a token that is not owned by you");
require(!locked[id], "NFT is locked");
idForSale[id] = true;
priceOfId[id] = price;
addNftForSale(id);
emit NftOffered(msg.sender, id, price);
}
function getAllIdsForSale() public view returns(uint256[] memory) {
return nftsForSale;
}
function addNftForSale(uint256 _nftForSale) internal {
nftForSaleIndexes[_nftForSale] = nftsForSale.length;
nftsForSale.push(_nftForSale);
}
function removeNftForSale(uint256 _nftForSale) internal {
nftsForSale[nftForSaleIndexes[_nftForSale]] = nftsForSale[nftsForSale.length - 1];
nftForSaleIndexes[nftsForSale[nftsForSale.length - 1]] = nftForSaleIndexes[_nftForSale];
nftsForSale.pop();
}
///////////////// NFT Rewards Pool
function addToRewards(uint256 busdAmount) external {
require(BUSD.transferFrom(msg.sender, address(this), busdAmount),"BUSD transfer failed");
rewardsPool += busdAmount;
emit RewardsAdded(busdAmount);
}
function distributeRewards() external onlyArk {
if(lastDistribution + 23.9 hours > block.timestamp) return;
lastDistribution = block.timestamp;
uint256 rewardsToBeAdded = rewardsPool * dailyRewardPercent / 100;
uint256 rewardsPerShareToday = rewardsToBeAdded * veryBigNumber / totalShares;
totalRewardsPerShare += rewardsPerShareToday;
rewardsPool -= rewardsToBeAdded;
emit RewardsDistributed(rewardsToBeAdded, rewardsPerShareToday);
}
function distributeRewardsManuallyCEO() external onlyCEO {
uint256 rewardsToBeAdded = rewardsPool * dailyRewardPercent / 100;
uint256 rewardsPerShareToday = rewardsToBeAdded * veryBigNumber / totalShares;
totalRewardsPerShare += rewardsPerShareToday;
rewardsPool -= rewardsToBeAdded;
emit RewardsDistributed(rewardsToBeAdded, rewardsPerShareToday);
}
function claimRewards() external {
_claim(msg.sender);
}
function claimRewardsFor(address investor) external onlyArk {
_claim(investor);
}
function _claim(address investor) internal {
if(balanceOf(investor) == 0) return;
uint256 id = tokenOfOwnerByIndex(investor, 0);
uint256 claimedAlready = excluded[id];
if(claimedAlready >= totalRewardsPerShare * shares[id]) return;
uint256 claimableNow = shares[id] * (totalRewardsPerShare - claimedAlready) / veryBigNumber;
claimedRewards[id] += claimableNow;
excluded[id] = totalRewardsPerShare;
require(BUSD.transfer(investor, claimableNow),"BUSD transfer failed");
emit RewardsClaimed(investor, claimableNow);
}
function getClaimableRewards(address investor) public view returns(uint256) {
if(balanceOf(investor) == 0) return 0;
uint256 id = tokenOfOwnerByIndex(investor, 0);
uint256 claimedAlready = excluded[id];
if(claimedAlready >= totalRewardsPerShare * shares[id]) return 0;
uint256 claimableNow = shares[id] * (totalRewardsPerShare - claimedAlready) / veryBigNumber;
return claimableNow;
}
function getLifetimeRewards(address investor) public view returns(uint256) {
if(balanceOf(investor) == 0) return 0;
uint256 id = tokenOfOwnerByIndex(investor, 0);
uint256 claimedAlready = excluded[id];
if(claimedAlready >= totalRewardsPerShare * shares[id]) return 0;
uint256 claimableNow = shares[id] * (totalRewardsPerShare - claimedAlready) / veryBigNumber;
return claimableNow + claimedRewards[id];
}
function getShares(address investor) public view returns(uint256) {
if(balanceOf(investor) == 0) return 0;
uint256 id = tokenOfOwnerByIndex(investor, 0);
return shares[id];
}
function rescueAnyToken(address tokenToRescue) external onlyCEO {
require(IBEP20(tokenToRescue).transfer(msg.sender, IBEP20(tokenToRescue).balanceOf(address(this))),"Failed");
}
function airdropEveryone() external onlyCEO {
uint256 minted = IERC721Enumerable(address(OLD)).totalSupply();
address owner;
uint256 level;
uint256 sharesOfId;
uint256 exludedRewards;
uint256 unclaimedRewards;
uint256 oldTotalRewardsPerShare = OLD.totalRewardsPerShare();
for(uint256 i = 0; i < minted; i++){
owner = OLD.ownerOf(i);
level = OLD.levelOfNft(i);
sharesOfId = sharesOfLevel[level];
exludedRewards = OLD.excluded(i);
mintToWallet(owner,level);
locked[i] = true;
excluded[i] = exludedRewards;
unclaimedRewards += sharesOfId * (oldTotalRewardsPerShare - exludedRewards) / veryBigNumber;
claimedRewards[i] = OLD.claimedRewards(i);
}
totalRewardsPerShare = oldTotalRewardsPerShare;
uint256 busdAmount = OLD.rewardsPool() + unclaimedRewards;
require(BUSD.transferFrom(msg.sender, address(this), busdAmount),"BUSD transfer failed");
rewardsPool += OLD.rewardsPool();
emit MigrationFinished(BUSD.balanceOf(address(OLD)), rewardsPool, unclaimedRewards);
}
}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":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"arkWallet","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ArkWalletSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsPool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unclaimedRewards","type":"uint256"}],"name":"MigrationFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceOfLevelUp","type":"uint256"}],"name":"NftLevelledUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"NftMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"NftOffered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"NftSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardsToBeAdded","type":"uint256"}],"name":"RewardsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimableNow","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardsToBeAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsPerShareToday","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"vaultAddress","type":"address"}],"name":"VaultSet","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"yes","type":"uint256"},{"internalType":"uint256","name":"no","type":"uint256"},{"internalType":"string","name":"topic","type":"string"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"indexed":false,"internalType":"struct ARK_LEGACY.Vote","name":"newVote","type":"tuple"}],"name":"VoteNowIfYouCare","type":"event"},{"inputs":[],"name":"BUSD","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OLD","outputs":[{"internalType":"contract ILEGACYOLD","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"busdAmount","type":"uint256"}],"name":"addToRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"adminUnlockNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"claimRewardsFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"cwr","type":"uint256"},{"internalType":"uint256","name":"_votes","type":"uint256"},{"internalType":"uint256","name":"levels","type":"uint256"},{"internalType":"uint256","name":"share","type":"uint256"}],"name":"createNewLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"whatToVoteOn","type":"string"},{"internalType":"uint256","name":"cutOffTime","type":"uint256"}],"name":"createNewVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cwrOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dailyRewardPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decisionOnVote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeRewardsManuallyCEO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excluded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllIdsForSale","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"getClaimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"getCwr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"getLevels","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"getLifetimeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getPriceForLevelUp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"investor","type":"address"}],"name":"getShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idForSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"howMany","type":"uint256"}],"name":"increaseLimitOfNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isArk","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levelOfNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"levelUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levelsOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxCwrWithoutNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxNftsOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"mintToWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"mintToWalletPaid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"cwr","type":"uint256"},{"internalType":"uint256","name":"_votes","type":"uint256"},{"internalType":"uint256","name":"levels","type":"uint256"}],"name":"modifyLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftPriceOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftsForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftsLeftOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openingHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"priceOfId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pricePaidForId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenToRescue","type":"address"}],"name":"rescueAnyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetDistributionTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"arkWallet","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setArkWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ext","type":"string"}],"name":"setFileExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setRewardPercentagePerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setRewardPercentagePerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vaultAddress","type":"address"}],"name":"setVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sharesOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupplyOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVAULT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"yourVote","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"voteCast","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"votes","outputs":[{"internalType":"uint256","name":"yes","type":"uint256"},{"internalType":"uint256","name":"no","type":"uint256"},{"internalType":"string","name":"topic","type":"string"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"votesOfLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526002601f5560146021556ec097ce7bc90715b34b9f10000000006022556105dc60235560006024553480156200003957600080fd5b50604080518082018252600e81526d041524b204c656761637920322e360941b6020808301919091528251808401909352600383526220a62760e91b90830152906200008c6301ffc9a760e01b62000527565b60016200009a838262000650565b506002620000a9828262000650565b5050683635c9adc5dea000007f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3555068d8d726b7177a8000007f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b25569021e19e0c9bab24000007f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976a55610bb87f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8190556101f47f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed192381905560647f0d2a6872ef858a7f8ead18dc4f3f2e8d35c853d47e2816cbb9cdd49202554e0c8190557fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c929092557fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a557f63d87a887046e0430be80fdeb014107d7198c879cbf2cddf39a6df195c86cb38556109c47f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf49556117707fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab2885648556132c87ff06d282f967055cb1eee17e04aa005b9682a620f4bbcfaee55ba78607a3d87ae5560017ff36d6bc9642eb6fb6ee9998b09ce990566df752ab06e11f8de7ab633bbd57b8f81905560047fc52df653038b2ad477d8d97f1ddd63cfd138847b628ad8a7b89c109c3f8782ca819055600a7fd8b2bced50346359af71f91110b86cdf684b6ab1c6ca64a7583c044d5c24de5c81905560037ff3794665d3af9b6fb6f858b70185898134f96768ef31c325d52e04f0ac195a4d5560097f2bacf7cca723d030d12aee795132f2c5f2d14ad131f16f3f27eeba3e79d18b8c55600f7f7a6340a7048c03c55288da75abed74d2ce9194201bafb03be53c0a7cca591495557ffc941c3961fb6541da34150022cddf959da0fb2353866a6bfbd249c2da0929148390557f6f678ad17c55bce407239525f4bf7f1fe99197d3eb69bfdd9a0db84a9a11b5818290557f3e323a6e0522b016fa22111dfed945f89456f9f44f69eac00209d92607a5b9405573df0048df98a749ed36553788b4b449ea7a7baa88600052600e6020527f592a53d1e5e8a4576ca24b318429e0a263f04eca630a2bdcf2855be045b8219e805460ff1916909217909155600d80546001600160a01b0319167366665ca5cb0f83e9cb813e89ca64bd6cdd4c666690811790915560405163095ea7b360e01b815291820152600019602482015273e9e7cea3dedca5984780bafc599bd69add087d569063095ea7b3906044016020604051808303816000875af115801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b691906200071c565b50600d546001600160a01b03166000908152600e602052604081208054600160ff1991821681179092557355553531d05394750d60efab7e93d73a356f55559092527f3c79d95cc28c9e8861eaae2bec7a424e40df1c93fe88a30b1c928cd1f033af7a805490921617905562000747565b6001600160e01b03198082169003620005865760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005d657607f821691505b602082108103620005f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200064b57600081815260208120601f850160051c81016020861015620006265750805b601f850160051c820191505b81811015620006475782815560010162000632565b5050505b505050565b81516001600160401b038111156200066c576200066c620005ab565b62000684816200067d8454620005c1565b84620005fd565b602080601f831160018114620006bc5760008415620006a35750858301515b600019600386901b1c1916600185901b17855562000647565b600085815260208120601f198616915b82811015620006ed57888601518255948401946001909101908401620006cc565b50858210156200070c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200072f57600080fd5b815180151581146200074057600080fd5b9392505050565b61502c80620007576000396000f3fe608060405234801561001057600080fd5b50600436106104ac5760003560e01c80636db4934e1161026d578063a513b73911610151578063d96a094a116100ce578063f431a6e111610092578063f431a6e114610b35578063f48b6a3814610b48578063f87cafb014610b5b578063fba3039c14610b6e578063fbfa77cf14610b81578063fcb6c26314610b9457600080fd5b8063d96a094a14610abc578063dc9fd65f14610acf578063e985e9c514610aef578063f04da65b14610b02578063f39b96d814610b1557600080fd5b8063bee2ddc211610115578063bee2ddc214610a5a578063bf8e9b6e14610a7a578063c87b56dd14610a83578063c9d27afe14610a96578063d79875eb14610aa957600080fd5b8063a513b739146109ff578063a717639c14610a08578063ab24f43a14610a11578063b45a3c0e14610a24578063b88d4fde14610a4757600080fd5b80638bfc83a8116101ea5780639e244960116101ae5780639e244960146109705780639f66ec7214610990578063a0712d6814610998578063a0b2f004146109ab578063a0bcfc7f146109d9578063a22cb465146109ec57600080fd5b80638bfc83a8146108fc57806395d89b411461092a5780639b75050a146109325780639c36c750146109455780639c5bfeae1461096857600080fd5b80637b496dd4116102315780637b496dd41461089b5780637d3f0e7d146108ae5780637fdfab87146108c1578063853edfae146108e157806385535cc5146108e957600080fd5b80636db4934e146108385780636dc52b7c146108585780636f4a2cd0146108785780636ffbb8871461088057806370a082311461088857600080fd5b8063372500ab11610394578063484f4ea91161031157806352468388116102d5578063524683881461078257806354a25893146107a257806357a858fc146107c25780635df81330146107e25780636352211e146108055780636a11dfc61461081857600080fd5b8063484f4ea9146107075780634bd3290b1461071c5780634c5acda61461072f5780634c69ef121461074f5780634f6ccce71461076f57600080fd5b80633d5fe853116103585780633d5fe853146106a25780634243a994146106b55780634283ae0c146106c857806342842e0e146106eb57806344d8c5ba146106fe57600080fd5b8063372500ab1461066d57806337c089231461067557806337d327a11461067e578063386a701a146106915780633a98ef391461069957600080fd5b806312da80961161042d57806323b872dd116103f157806323b872dd146105f157806327e8e875146106045780632c9cdbbf1461061f5780632f745c5914610632578063308e401e14610645578063324467ba1461065857600080fd5b806312da80961461059a57806318160ddd146105ad5780631ac6d19d146105b55780631f480929146105c857806320281a98146105d157600080fd5b80630749a042116104745780630749a04214610523578063081812fc14610536578063095ea7b3146105615780630ce90ec2146105745780630e8c89c51461058757600080fd5b806301ffc9a7146104b1578063027e9e96146104d95780630359fea9146104ee5780630636241b1461050557806306fdde031461050e575b600080fd5b6104c46104bf3660046145ac565b610ba7565b60405190151581526020015b60405180910390f35b6104ec6104e73660046145f3565b610bb8565b005b6104f760205481565b6040519081526020016104d0565b6104f760215481565b610516610c52565b6040516104d0919061467c565b6104f761053136600461468f565b610ce4565b6105496105443660046146ac565b610d51565b6040516001600160a01b0390911681526020016104d0565b6104ec61056f3660046146c5565b610d78565b6104ec6105823660046146ac565b610e8d565b6104ec6105953660046146ac565b611281565b6104ec6105a83660046146ac565b6112b3565b6009546104f7565b6104ec6105c336600461468f565b6112f8565b6104f760245481565b6104f76105df3660046146ac565b60256020526000908152604090205481565b6104ec6105ff3660046146f1565b61135a565b610549732222829575a47f84aa9ed9f3f09efb36e21d222281565b6104ec61062d36600461468f565b61138b565b6104f76106403660046146c5565b6114ce565b6104f761065336600461468f565b611564565b6106606115fe565b6040516104d09190614732565b6104ec611655565b6104f760105481565b6104f761068c3660046146ac565b611660565b6104ec611681565b6104f7601c5481565b6104ec6106b0366004614776565b6116c0565b6104ec6106c33660046146ac565b6117a9565b6104c46106d63660046146ac565b602c6020526000908152604090205460ff1681565b6104ec6106f93660046146f1565b6117db565b6104f760235481565b610549600080516020614fb783398151915281565b6104ec61072a36600461486e565b6117f6565b6104f761073d3660046146ac565b60146020526000908152604090205481565b6104f761075d3660046146ac565b60156020526000908152604090205481565b6104f761077d3660046146ac565b61193c565b6104f76107903660046146ac565b602d6020526000908152604090205481565b6104f76107b03660046146ac565b60126020526000908152604090205481565b6104f76107d03660046146ac565b60266020526000908152604090205481565b6107f56107f03660046146ac565b6119cf565b6040516104d094939291906148b3565b6105496108133660046146ac565b611a97565b6104f76108263660046146ac565b60186020526000908152604090205481565b6104f76108463660046146ac565b60136020526000908152604090205481565b6104f76108663660046146ac565b60166020526000908152604090205481565b6104ec611af7565b6104ec611c0f565b6104f761089636600461468f565b611c50565b6104ec6108a93660046146ac565b611cd6565b6104f76108bc36600461468f565b611db8565b6104f76108cf3660046146ac565b60196020526000908152604090205481565b6104ec611e6e565b6104ec6108f736600461468f565b611fb7565b6104c461090a3660046148e3565b602960209081526000928352604080842090915290825290205460ff1681565b6105166120b5565b6104f76109403660046146ac565b6120c4565b6104c461095336600461468f565b600e6020526000908152604090205460ff1681565b6104ec61210b565b6104f761097e3660046146ac565b60176020526000908152604090205481565b6104ec6121e7565b6104ec6109a63660046146ac565b6127fd565b6104c46109b93660046148e3565b602a60209081526000928352604080842090915290825290205460ff1681565b6104ec6109e7366004614905565b612b52565b6104ec6109fa3660046145f3565b612b8f565b6104f7601f5481565b6104f7601e5481565b6104ec610a1f3660046146c5565b612b9a565b6104c4610a323660046146ac565b601b6020526000908152604090205460ff1681565b6104ec610a5536600461493a565b612ed5565b6104f7610a683660046146ac565b60276020526000908152604090205481565b6104f7601d5481565b610516610a913660046146ac565b612f0d565b6104ec610aa43660046149ba565b612f44565b6104ec610ab73660046148e3565b61319b565b6104ec610aca3660046146ac565b61330e565b6104f7610add3660046146ac565b601a6020526000908152604090205481565b6104c4610afd3660046149df565b613492565b6104f7610b1036600461468f565b6134c0565b6104f7610b233660046146ac565b60116020526000908152604090205481565b6104f7610b4336600461468f565b6134fd565b6104ec610b56366004614a0d565b613567565b6104ec610b69366004614905565b6136a2565b6104ec610b7c3660046148e3565b6136db565b600d54610549906001600160a01b031681565b6104ec610ba23660046146c5565b613752565b6000610bb2826138f5565b92915050565b33600080516020614fd783398151915214610bee5760405162461bcd60e51b8152600401610be590614a50565b60405180910390fd5b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527ffdd0af5ddd6e15c3303b396526dac86fc4a4170dc3c49f6b2f8be7eaef6ab71e91015b60405180910390a15050565b606060018054610c6190614a87565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d90614a87565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b6000610cef82611c50565b600003610cfe57505060235490565b6000610d0b8360006114ce565b600081815260116020908152604080832054601b9092528220549293509160ff16610d3857602354610d48565b6000828152601660205260409020545b95945050505050565b6000610d5c8261391a565b506000908152600560205260409020546001600160a01b031690565b6000610d8382611a97565b9050806001600160a01b0316836001600160a01b031603610df05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610be5565b336001600160a01b0382161480610e0c5750610e0c8133613492565b610e7e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610be5565b610e888383613979565b505050565b33610e9782611a97565b6001600160a01b031614610f035760405162461bcd60e51b815260206004820152602d60248201527f43616e2774207570677261646520616e204e46542074686174206973206e6f7460448201526c206f776e656420627920796f7560981b6064820152608401610be5565b60008181526011602052604081205490610f1e826001614ad1565b6000848152601a602090815260408083205484845260129092528220549293509091610f4a9190614ae4565b600083815260146020526040902054909150610f785760405162461bcd60e51b8152600401610be590614af7565b610f81336139e7565b6040516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd90610fb690339030908690600401614b2e565b6020604051808303816000875af1158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614b52565b6110155760405162461bcd60e51b8152600401610be590614b6f565b80601060008282546110279190614ad1565b90915550506000848152601a60205260408120805483929061104a908490614ad1565b909155505060008481526011602090815260408083208590558483526015909152812080549161107983614b9d565b9091555050600083815260156020526040812080549161109883614bb6565b909155505060008281526014602052604081208054916110b783614bb6565b909155505060008381526014602052604081208054916110d683614b9d565b919050555060006064602154836110ed9190614bcd565b6110f79190614c02565b9050806020600082825461110b9190614ad1565b9091555050600084815260196020526040812054601c805491929091611132908490614ae4565b9091555050600083815260196020526040812054601c805491929091611159908490614ad1565b9091555050600083815260196020908152604080832054888452602690925290912055600080516020614fb783398151915263a9059cbb600080516020614fd78339815191526111a98486614ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190614b52565b6112345760405162461bcd60e51b8152600401610be590614b6f565b6040805185815260208101859052908101839052859033907f2133146543dced9199aee6318aecb1ac87443d6d4c39f2b35c998586c09b8229906060015b60405180910390a35050505050565b33600080516020614fd7833981519152146112ae5760405162461bcd60e51b8152600401610be590614a50565b601f55565b33600080516020614fd7833981519152146112e05760405162461bcd60e51b8152600401610be590614a50565b6000908152601b60205260409020805460ff19169055565b336000908152600e602052604090205460ff1661134e5760405162461bcd60e51b815260206004820152601460248201527313db9b1e48105492c818d85b88191bc81d1a185d60621b6044820152606401610be5565b611357816139e7565b50565b6113643382613b97565b6113805760405162461bcd60e51b8152600401610be590614c16565b610e88838383613bf6565b33600080516020614fd7833981519152146113b85760405162461bcd60e51b8152600401610be590614a50565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142a9190614c63565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190614b52565b6113575760405162461bcd60e51b815260206004820152600660248201526511985a5b195960d21b6044820152606401610be5565b60006114d983611c50565b821061153b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610be5565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b600061156f82611c50565b60000361157e57506000919050565b600061158b8360006114ce565b600081815260276020908152604080832054602690925290912054601d5492935090916115b89190614bcd565b81106115c8575060009392505050565b600060225482601d546115db9190614ae4565b6000858152602660205260409020546115f49190614bcd565b610d489190614c02565b6060602b805480602002602001604051908101604052809291908181526020018280548015610cda57602002820191906000526020600020905b815481526020019060010190808311611638575050505050905090565b61165e336139e7565b565b602b818154811061167057600080fd5b600091825260209091200154905081565b33600080516020614fd7833981519152146116ae5760405162461bcd60e51b8152600401610be590614a50565b6116bb6201518042614ae4565b601e55565b33600080516020614fd7833981519152146116ed5760405162461bcd60e51b8152600401610be590614a50565b600087815260126020526040902054156117405760405162461bcd60e51b81526020600482015260146024820152734c6576656c20616c72656164792065786973747360601b6044820152606401610be5565b61175286670de0b6b3a7640000614bcd565b6000978852601260209081526040808a209290925560138152818920879055601481528189209690965560168652808820949094556017855283872092909255601884528286205560199092529092209190915550565b33600080516020614fd7833981519152146117d65760405162461bcd60e51b8152600401610be590614a50565b602155565b610e8883838360405180602001604052806000815250612ed5565b33600080516020614fd7833981519152146118235760405162461bcd60e51b8152600401610be590614a50565b61184e6040518060800160405280600081526020016000815260200160608152602001600081525090565b604081018381526060820183905260288054600181018255600091909152825160049091027fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5810191825560208401517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab6820155915183927fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab701906118f39082614cca565b506060820151816003015550507fb9310b5af61f4881865b305b62489bca63f7f8d47bbd7715c6004bb8971543c28160405161192f9190614d8a565b60405180910390a1505050565b600061194760095490565b82106119aa5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610be5565b600982815481106119bd576119bd614dd0565b90600052602060002001549050919050565b602881815481106119df57600080fd5b9060005260206000209060040201600091509050806000015490806001015490806002018054611a0e90614a87565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3a90614a87565b8015611a875780601f10611a5c57610100808354040283529160200191611a87565b820191906000526020600020905b815481529060010190602001808311611a6a57829003601f168201915b5050505050908060030154905084565b6000818152600360205260408120546001600160a01b031680610bb25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610be5565b336000908152600e602052604090205460ff16611b4d5760405162461bcd60e51b815260206004820152601460248201527313db9b1e48105492c818d85b88191bc81d1a185d60621b6044820152606401610be5565b42601e5462015018611b5f9190614ad1565b1161165e5742601e55601f54602054600091606491611b7e9190614bcd565b611b889190614c02565b90506000601c5460225483611b9d9190614bcd565b611ba79190614c02565b905080601d6000828254611bbb9190614ad1565b925050819055508160206000828254611bd49190614ae4565b909155505060408051838152602081018390527f29e98ba00d07f171959c4ddcd2f3020debc7c52cf537a034d7e664340d098c6c9101610c46565b33600080516020614fd783398151915214611c3c5760405162461bcd60e51b8152600401610be590614a50565b60006064601f54602054611b7e9190614bcd565b60006001600160a01b038216611cba5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610be5565b506001600160a01b031660009081526004602052604090205490565b6040516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd90611d0b90339030908690600401614b2e565b6020604051808303816000875af1158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e9190614b52565b611d6a5760405162461bcd60e51b8152600401610be590614b6f565b8060206000828254611d7c9190614ad1565b90915550506040518181527ff8fad42e780bfa5459be3fe691e8ba1aec70342250112139c5771c3fd155f312906020015b60405180910390a150565b6000611dc382611c50565b600003611dd257506000919050565b6000611ddf8360006114ce565b600081815260276020908152604080832054602690925290912054601d549293509091611e0c9190614bcd565b8110611e1c575060009392505050565b600060225482601d54611e2f9190614ae4565b600085815260266020526040902054611e489190614bcd565b611e529190614c02565b600084815260256020526040902054909150610d489082614ad1565b6000611e7b3360006114ce565b6000818152601b602052604090205490915060ff16611ed35760405162461bcd60e51b815260206004820152601460248201527313919508185b1c9958591e481d5b9b1bd8dad95960621b6044820152606401610be5565b600d546001600160a01b031663e1dbf312611eed83611a97565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f559190614b52565b6112e05760405162461bcd60e51b815260206004820152602d60248201527f43616e277420756e6c6f636b20616e204e4654206265666f726520726561636860448201526c1a5b99c81b585e14185e5bdd5d609a1b6064820152608401610be5565b33600080516020614fd783398151915214611fe45760405162461bcd60e51b8152600401610be590614a50565b600d80546001600160a01b0319166001600160a01b03831690811790915560405163095ea7b360e01b815260048101919091526000196024820152600080516020614fb78339815191529063095ea7b3906044016020604051808303816000875af1158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b9190614b52565b506040516001600160a01b03821681527fe7ae49f883c825b05681b3e00e8be6fdea9ed2a8a45e4c6ecb9390fc44cce61590602001611dad565b606060028054610c6190614a87565b600081815260116020526040812054816120df826001614ad1565b6000858152601a602090815260408083205484845260129092528220549293509091610d489190614ae4565b60006121183360006114ce565b6000818152601b602052604090205490915060ff161561216f5760405162461bcd60e51b815260206004820152601260248201527113919508185b1c9958591e481b1bd8dad95960721b6044820152606401610be5565b600d54604051631b86b93f60e01b81523360048201526001600160a01b0390911690631b86b93f90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b505050600091825250601b60205260409020805460ff19166001179055565b33600080516020614fd7833981519152146122145760405162461bcd60e51b8152600401610be590614a50565b6000732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c9190614c63565b9050600080600080600080732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b031663bf8e9b6e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230d9190614c63565b905060005b87811015612583576040516331a9108f60e11b815260048101829052732222829575a47f84aa9ed9f3f09efb36e21d222290636352211e90602401602060405180830381865afa15801561236a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238e9190614de6565b604051631e7372db60e31b815260048101839052909750732222829575a47f84aa9ed9f3f09efb36e21d22229063f39b96d890602401602060405180830381865afa1580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124059190614c63565b60008181526019602052604090819020549051635f716ee160e11b8152600481018490529197509550732222829575a47f84aa9ed9f3f09efb36e21d22229063bee2ddc290602401602060405180830381865afa15801561246a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248e9190614c63565b935061249a8787613752565b6000818152601b60209081526040808320805460ff19166001179055602790915290208490556022546124cd8584614ae4565b6124d79087614bcd565b6124e19190614c02565b6124eb9084614ad1565b604051630405035360e31b815260048101839052909350732222829575a47f84aa9ed9f3f09efb36e21d2222906320281a9890602401602060405180830381865afa15801561253e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125629190614c63565b6000828152602560205260409020558061257b81614b9d565b915050612312565b5080601d81905550600082732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b0316630359fea96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126049190614c63565b61260e9190614ad1565b6040516323b872dd60e01b8152909150600080516020614fb7833981519152906323b872dd9061264690339030908690600401614b2e565b6020604051808303816000875af1158015612665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126899190614b52565b6126a55760405162461bcd60e51b8152600401610be590614b6f565b732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b0316630359fea96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271b9190614c63565b6020600082825461272c9190614ad1565b90915550506040516370a0823160e01b8152732222829575a47f84aa9ed9f3f09efb36e21d222260048201527fa3981af8c35b1132f9c13a992dd94c91076b08836ec150152fcf3480c74e02f590600080516020614fb7833981519152906370a0823190602401602060405180830381865afa1580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d49190614c63565b602080546040805193845291830152810185905260600160405180910390a15050505050505050565b61280633611c50565b156128235760405162461bcd60e51b8152600401610be590614e03565b4260245411156128695760405162461bcd60e51b815260206004820152601160248201527014d85b19481b9bdd081bdc195b881e595d607a1b6044820152606401610be5565b6000818152601460205260409020546128945760405162461bcd60e51b8152600401610be590614af7565b600081815260126020526040908190205490516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd906128d990339030908690600401614b2e565b6020604051808303816000875af11580156128f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291c9190614b52565b6129385760405162461bcd60e51b8152600401610be590614b6f565b806010600082825461294a9190614ad1565b92505081905550600061295f33600f54613c7f565b6000818152601a6020908152604080832086905560119091528120859055600f80549293509061298e83614b9d565b909155505060008381526015602052604081208054916129ad83614b9d565b909155505060008381526014602052604081208054916129cc83614bb6565b919050555060006064602154846129e39190614bcd565b6129ed9190614c02565b90508060206000828254612a019190614ad1565b9091555050600084815260196020526040812054601c805491929091612a28908490614ad1565b90915550506000848152601960209081526040808320548584526026835281842055601d54602790925290912055600080516020614fb783398151915263a9059cbb600080516020614fd7833981519152612a838487614ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190614b52565b612b0e5760405162461bcd60e51b8152600401610be590614b6f565b6040805185815260208101859052839133917f4a5bb7d4caef8b636449e63eb0d87475ecd51d1a51411b5a41b19630c13c729791015b60405180910390a350505050565b33600080516020614fd783398151915214612b7f5760405162461bcd60e51b8152600401610be590614a50565b600b612b8b8282614cca565b5050565b612b8b338383613c91565b33600080516020614fd783398151915214612bc75760405162461bcd60e51b8152600401610be590614a50565b612bd082611c50565b15612bed5760405162461bcd60e51b8152600401610be590614e03565b600081815260146020526040902054612c185760405162461bcd60e51b8152600401610be590614af7565b600081815260126020526040908190205490516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd90612c5d90339030908690600401614b2e565b6020604051808303816000875af1158015612c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca09190614b52565b612cbc5760405162461bcd60e51b8152600401610be590614b6f565b8060106000828254612cce9190614ad1565b925050819055506000612ce384600f54613c7f565b6000818152601a6020908152604080832086905560119091528120859055600f805492935090612d1283614b9d565b90915550506000838152601560205260408120805491612d3183614b9d565b90915550506000838152601460205260408120805491612d5083614bb6565b91905055506000606460215484612d679190614bcd565b612d719190614c02565b90508060206000828254612d859190614ad1565b9091555050600084815260196020526040812054601c805491929091612dac908490614ad1565b90915550506000848152601960209081526040808320548584526026835281842055601d54602790925290912055600080516020614fb783398151915263a9059cbb600080516020614fd7833981519152612e078487614ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e769190614b52565b612e925760405162461bcd60e51b8152600401610be590614b6f565b604080518581526020810185905283916001600160a01b038816917f4a5bb7d4caef8b636449e63eb0d87475ecd51d1a51411b5a41b19630c13c72979101611272565b612edf3383613b97565b612efb5760405162461bcd60e51b8152600401610be590614c16565b612f0784848484613d5f565b50505050565b6060600b612f1a83613d92565b600c604051602001612f2e93929190614ead565b6040516020818303038152906040529050919050565b4260288381548110612f5857612f58614dd0565b9060005260206000209060040201600301541015612fa95760405162461bcd60e51b815260206004820152600e60248201526d159bdd19481a5cc818db1bdcd95960921b6044820152606401610be5565b612fb233611c50565b600003612fbd575050565b6000612fca3360006114ce565b60008181526011602090815260408083205480845260179092528220549293509190819003612ffa575050505050565b600083815260296020908152604080832088845290915290205460ff16156130d3576000838152602a6020908152604080832088845290915290205460ff161561307857806028868154811061305257613052614dd0565b906000526020600020906004020160000160008282546130729190614ae4565b90915550505b6000838152602a6020908152604080832088845290915290205460ff166130d35780602886815481106130ad576130ad614dd0565b906000526020600020906004020160010160008282546130cd9190614ae4565b90915550505b83156131135780602886815481106130ed576130ed614dd0565b9060005260206000209060040201600001600082825461310d9190614ad1565b90915550505b8361315257806028868154811061312c5761312c614dd0565b9060005260206000209060040201600101600082825461314c9190614ad1565b90915550505b50506000818152602a602090815260408083208684528252808320805495151560ff19968716179055928252602981528282209482529390935290912080549091166001179055565b336131a583611a97565b6001600160a01b0316146132135760405162461bcd60e51b815260206004820152602f60248201527f43616e2774207472616e73666572206120746f6b656e2074686174206973206e60448201526e6f74206f776e656420627920796f7560881b6064820152608401610be5565b6000828152601b602052604090205460ff16156132625760405162461bcd60e51b815260206004820152600d60248201526c139195081a5cc81b1bd8dad959609a1b6044820152606401610be5565b6000828152602c60209081526040808320805460ff19166001179055602d90915290208190556132d082602b80546000838152602e60205260408120829055600182018355919091527f11c44e4875b74d31ff9fd779bf2566af7bd15b87fc985d01f5094b89e3669e4f0155565b60408051338152602081018490529081018290527f2118a121df78ff60e96f21d3c629b2ce95ce0cb2542e3e7af05035dd4b7f983b90606001610c46565b600061331982611a97565b6000838152602d6020908152604080832054602c909252909120549192509060ff166133875760405162461bcd60e51b815260206004820152601860248201527f43616e206f6e6c7920627579206c6973746564204e46547300000000000000006044820152606401610be5565b6040516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd906133bc90339086908690600401614b2e565b6020604051808303816000875af11580156133db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ff9190614b52565b61341b5760405162461bcd60e51b8152600401610be590614b6f565b6000838152602c60205260409020805460ff1916905561343a83613e93565b613445823385613bf6565b604080516001600160a01b0384168152336020820152908101849052606081018290527f6de5f61b24e998dfaddeff37d69f266a8355555154081b554c36b2799f0618c89060800161192f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b60006134cb82611c50565b6000036134da57506000919050565b60006134e78360006114ce565b6000908152602660205260409020549392505050565b600061350882611c50565b60000361351757506000919050565b60006135248360006114ce565b600081815260116020908152604080832054601b9092528220549293509160ff16613550576000610d48565b506000908152601860205260409020549392505050565b33600080516020614fd7833981519152146135945760405162461bcd60e51b8152600401610be590614a50565b6000868152601360205260409020548411156135ef576000868152601360205260408120546135c39086614ae4565b9050806014600089815260200190815260200160002060008282546135e89190614ad1565b9091555050505b60008681526013602052604090205484101561364b5760008681526013602052604081205461361f908690614ae4565b9050806014600089815260200190815260200160002060008282546136449190614ae4565b9091555050505b61365d85670de0b6b3a7640000614bcd565b60009687526012602090815260408089209290925560138152818820959095556016855280872093909355601784528286209190915560189092529092209190915550565b33600080516020614fd7833981519152146136cf5760405162461bcd60e51b8152600401610be590614a50565b600c612b8b8282614cca565b33600080516020614fd7833981519152146137085760405162461bcd60e51b8152600401610be590614a50565b60008281526013602052604081208054839290613726908490614ad1565b909155505060008281526014602052604081208054839290613749908490614ad1565b90915550505050565b33600080516020614fd78339815191521461377f5760405162461bcd60e51b8152600401610be590614a50565b61378882611c50565b156137a55760405162461bcd60e51b8152600401610be590614e03565b6000818152601460205260409020546137d05760405162461bcd60e51b8152600401610be590614af7565b600081815260126020526040812054600f549091906137f0908590613c7f565b6000818152601a6020908152604080832086905560119091528120859055600f80549293509061381f83614b9d565b9091555050600083815260156020526040812080549161383e83614b9d565b9091555050600083815260146020526040812080549161385d83614bb6565b9091555050600083815260196020526040812054601c805491929091613884908490614ad1565b90915550506000838152601960209081526040808320548484526026835281842055601d54602783529281902092909255815185815290810184905282916001600160a01b038716917f4a5bb7d4caef8b636449e63eb0d87475ecd51d1a51411b5a41b19630c13c72979101612b44565b60006001600160e01b0319821663780e9d6360e01b1480610bb25750610bb282613f75565b6000818152600360205260409020546001600160a01b03166113575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610be5565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906139ae82611a97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6139f081611c50565b6000036139fa5750565b6000613a078260006114ce565b600081815260276020908152604080832054602690925290912054601d549293509091613a349190614bcd565b8110613a3f57505050565b600060225482601d54613a529190614ae4565b600085815260266020526040902054613a6b9190614bcd565b613a759190614c02565b905080602560008581526020019081526020016000206000828254613a9a9190614ad1565b9091555050601d5460008481526027602052604090819020919091555163a9059cbb60e01b81526001600160a01b038516600482015260248101829052600080516020614fb78339815191529063a9059cbb906044016020604051808303816000875af1158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b339190614b52565b613b4f5760405162461bcd60e51b8152600401610be590614b6f565b604080516001600160a01b0386168152602081018390527ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe910160405180910390a150505050565b600080613ba383611a97565b9050806001600160a01b0316846001600160a01b03161480613bca5750613bca8185613492565b80613bee5750836001600160a01b0316613be384610d51565b6001600160a01b0316145b949350505050565b6000818152601b602052604090205460ff1615613c455760405162461bcd60e51b815260206004820152600d60248201526c139195081a5cc81b1bd8dad959609a1b6044820152606401610be5565b613c4e836139e7565b613c5782611c50565b15613c745760405162461bcd60e51b8152600401610be590614e03565b610e88838383613fce565b6000613c8b8383614118565b50919050565b816001600160a01b0316836001600160a01b031603613cf25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610be5565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613d6a848484613bf6565b613d768484848461420b565b612f075760405162461bcd60e51b8152600401610be590614ee0565b606081600003613db95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613de35780613dcd81614b9d565b9150613ddc9050600a83614c02565b9150613dbd565b60008167ffffffffffffffff811115613dfe57613dfe6147c2565b6040519080825280601f01601f191660200182016040528015613e28576020820181803683370190505b5090505b8415613bee57613e3d600183614ae4565b9150613e4a600a86614f32565b613e55906030614ad1565b60f81b818381518110613e6a57613e6a614dd0565b60200101906001600160f81b031916908160001a905350613e8c600a86614c02565b9450613e2c565b602b8054613ea390600190614ae4565b81548110613eb357613eb3614dd0565b9060005260206000200154602b602e60008481526020019081526020016000205481548110613ee457613ee4614dd0565b9060005260206000200181905550602e600082815260200190815260200160002054602e6000602b6001602b80549050613f1e9190614ae4565b81548110613f2e57613f2e614dd0565b9060005260206000200154815260200190815260200160002081905550602b805480613f5c57613f5c614f46565b6001900381819060005260206000200160009055905550565b60006001600160e01b031982166380ac58cd60e01b1480613fa657506001600160e01b03198216635b5e139f60e01b145b80610bb257506001600160e01b0319821660009081526020819052604090205460ff16610bb2565b826001600160a01b0316613fe182611a97565b6001600160a01b0316146140455760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610be5565b614050838383614313565b600081815260056020908152604080832080546001600160a01b03191690556001600160a01b03861683526004909152812080549161408e83614bb6565b90915550506001600160a01b03821660009081526004602052604081208054916140b783614b9d565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000818152600360205260409020546001600160a01b03161561417d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610be5565b61418960008383614313565b6001600160a01b03821660009081526004602052604081208054916141ad83614b9d565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061421f846001600160a01b031661431e565b1561430857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614256903390899088908890600401614f5c565b6020604051808303816000875af1925050508015614291575060408051601f3d908101601f1916820190925261428e91810190614f99565b60015b6142ee573d8080156142bf576040519150601f19603f3d011682016040523d82523d6000602084013e6142c4565b606091505b5080516000036142e65760405162461bcd60e51b8152600401610be590614ee0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613bee565b506001949350505050565b610e88838383614357565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613bee575050151592915050565b6001600160a01b0383166143b2576143ad81600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6143d5565b816001600160a01b0316836001600160a01b0316146143d5576143d5838261440f565b6001600160a01b0382166143ec57610e88816144ac565b826001600160a01b0316826001600160a01b031614610e8857610e888282614552565b6000600161441c84611c50565b6144269190614ae4565b600083815260086020526040902054909150808214614479576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906144be90600190614ae4565b6000838152600a6020526040812054600980549394509092849081106144e6576144e6614dd0565b90600052602060002001549050806009838154811061450757614507614dd0565b6000918252602080832090910192909255858152600a9091526040812055600980548061453657614536614f46565b6001900381819060005260206000200160009055905550505050565b600061455d83611c50565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160e01b03198116811461135757600080fd5b6000602082840312156145be57600080fd5b81356145c981614596565b9392505050565b6001600160a01b038116811461135757600080fd5b801515811461135757600080fd5b6000806040838503121561460657600080fd5b8235614611816145d0565b91506020830135614621816145e5565b809150509250929050565b60005b8381101561464757818101518382015260200161462f565b50506000910152565b6000815180845261466881602086016020860161462c565b601f01601f19169290920160200192915050565b6020815260006145c96020830184614650565b6000602082840312156146a157600080fd5b81356145c9816145d0565b6000602082840312156146be57600080fd5b5035919050565b600080604083850312156146d857600080fd5b82356146e3816145d0565b946020939093013593505050565b60008060006060848603121561470657600080fd5b8335614711816145d0565b92506020840135614721816145d0565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561476a5783518352928401929184019160010161474e565b50909695505050505050565b600080600080600080600060e0888a03121561479157600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156147f3576147f36147c2565b604051601f8501601f19908116603f0116810190828211818310171561481b5761481b6147c2565b8160405280935085815286868601111561483457600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261485f57600080fd5b6145c9838335602085016147d8565b6000806040838503121561488157600080fd5b823567ffffffffffffffff81111561489857600080fd5b6148a48582860161484e565b95602094909401359450505050565b8481528360208201526080604082015260006148d26080830185614650565b905082606083015295945050505050565b600080604083850312156148f657600080fd5b50508035926020909101359150565b60006020828403121561491757600080fd5b813567ffffffffffffffff81111561492e57600080fd5b613bee8482850161484e565b6000806000806080858703121561495057600080fd5b843561495b816145d0565b9350602085013561496b816145d0565b925060408501359150606085013567ffffffffffffffff81111561498e57600080fd5b8501601f8101871361499f57600080fd5b6149ae878235602084016147d8565b91505092959194509250565b600080604083850312156149cd57600080fd5b823591506020830135614621816145e5565b600080604083850312156149f257600080fd5b82356149fd816145d0565b91506020830135614621816145d0565b60008060008060008060c08789031215614a2657600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60208082526018908201527f4f6e6c79207468652043454f2063616e20646f20746861740000000000000000604082015260600190565b600181811c90821680614a9b57607f821691505b602082108103613c8b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610bb257610bb2614abb565b81810381811115610bb257610bb2614abb565b6020808252601e908201527f54686973206c6576656c20697320736f6c64206f75742c20736f7272792e0000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215614b6457600080fd5b81516145c9816145e5565b602080825260149082015273109554d1081d1c985b9cd9995c8819985a5b195960621b604082015260600190565b600060018201614baf57614baf614abb565b5060010190565b600081614bc557614bc5614abb565b506000190190565b6000816000190483118215151615614be757614be7614abb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082614c1157614c11614bec565b500490565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215614c7557600080fd5b5051919050565b601f821115610e8857600081815260208120601f850160051c81016020861015614ca35750805b601f850160051c820191505b81811015614cc257828155600101614caf565b505050505050565b815167ffffffffffffffff811115614ce457614ce46147c2565b614cf881614cf28454614a87565b84614c7c565b602080601f831160018114614d2d5760008415614d155750858301515b600019600386901b1c1916600185901b178555614cc2565b600085815260208120601f198616915b82811015614d5c57888601518255948401946001909101908401614d3d565b5085821015614d7a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815281516020820152602082015160408201526000604083015160806060840152614dba60a0840182614650565b9050606084015160808401528091505092915050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614df857600080fd5b81516145c9816145d0565b6020808252601b908201527f4d6178204e4654207065722077616c6c65742065786365656465640000000000604082015260600190565b60008154614e4781614a87565b60018281168015614e5f5760018114614e7457614ea3565b60ff1984168752821515830287019450614ea3565b8560005260208060002060005b85811015614e9a5781548a820152908401908201614e81565b50505082870194505b5050505092915050565b6000614eb98286614e3a565b8451614ec981836020890161462c565b614ed581830186614e3a565b979650505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082614f4157614f41614bec565b500690565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614f8f90830184614650565b9695505050505050565b600060208284031215614fab57600080fd5b81516145c98161459656fe000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000df0048df98a749ed36553788b4b449ea7a7baa88a2646970667358221220a503b0424be049662e69cac63588adef424fb00e3fe0fc8f28e6bc4baf1a1ae264736f6c63430008100033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104ac5760003560e01c80636db4934e1161026d578063a513b73911610151578063d96a094a116100ce578063f431a6e111610092578063f431a6e114610b35578063f48b6a3814610b48578063f87cafb014610b5b578063fba3039c14610b6e578063fbfa77cf14610b81578063fcb6c26314610b9457600080fd5b8063d96a094a14610abc578063dc9fd65f14610acf578063e985e9c514610aef578063f04da65b14610b02578063f39b96d814610b1557600080fd5b8063bee2ddc211610115578063bee2ddc214610a5a578063bf8e9b6e14610a7a578063c87b56dd14610a83578063c9d27afe14610a96578063d79875eb14610aa957600080fd5b8063a513b739146109ff578063a717639c14610a08578063ab24f43a14610a11578063b45a3c0e14610a24578063b88d4fde14610a4757600080fd5b80638bfc83a8116101ea5780639e244960116101ae5780639e244960146109705780639f66ec7214610990578063a0712d6814610998578063a0b2f004146109ab578063a0bcfc7f146109d9578063a22cb465146109ec57600080fd5b80638bfc83a8146108fc57806395d89b411461092a5780639b75050a146109325780639c36c750146109455780639c5bfeae1461096857600080fd5b80637b496dd4116102315780637b496dd41461089b5780637d3f0e7d146108ae5780637fdfab87146108c1578063853edfae146108e157806385535cc5146108e957600080fd5b80636db4934e146108385780636dc52b7c146108585780636f4a2cd0146108785780636ffbb8871461088057806370a082311461088857600080fd5b8063372500ab11610394578063484f4ea91161031157806352468388116102d5578063524683881461078257806354a25893146107a257806357a858fc146107c25780635df81330146107e25780636352211e146108055780636a11dfc61461081857600080fd5b8063484f4ea9146107075780634bd3290b1461071c5780634c5acda61461072f5780634c69ef121461074f5780634f6ccce71461076f57600080fd5b80633d5fe853116103585780633d5fe853146106a25780634243a994146106b55780634283ae0c146106c857806342842e0e146106eb57806344d8c5ba146106fe57600080fd5b8063372500ab1461066d57806337c089231461067557806337d327a11461067e578063386a701a146106915780633a98ef391461069957600080fd5b806312da80961161042d57806323b872dd116103f157806323b872dd146105f157806327e8e875146106045780632c9cdbbf1461061f5780632f745c5914610632578063308e401e14610645578063324467ba1461065857600080fd5b806312da80961461059a57806318160ddd146105ad5780631ac6d19d146105b55780631f480929146105c857806320281a98146105d157600080fd5b80630749a042116104745780630749a04214610523578063081812fc14610536578063095ea7b3146105615780630ce90ec2146105745780630e8c89c51461058757600080fd5b806301ffc9a7146104b1578063027e9e96146104d95780630359fea9146104ee5780630636241b1461050557806306fdde031461050e575b600080fd5b6104c46104bf3660046145ac565b610ba7565b60405190151581526020015b60405180910390f35b6104ec6104e73660046145f3565b610bb8565b005b6104f760205481565b6040519081526020016104d0565b6104f760215481565b610516610c52565b6040516104d0919061467c565b6104f761053136600461468f565b610ce4565b6105496105443660046146ac565b610d51565b6040516001600160a01b0390911681526020016104d0565b6104ec61056f3660046146c5565b610d78565b6104ec6105823660046146ac565b610e8d565b6104ec6105953660046146ac565b611281565b6104ec6105a83660046146ac565b6112b3565b6009546104f7565b6104ec6105c336600461468f565b6112f8565b6104f760245481565b6104f76105df3660046146ac565b60256020526000908152604090205481565b6104ec6105ff3660046146f1565b61135a565b610549732222829575a47f84aa9ed9f3f09efb36e21d222281565b6104ec61062d36600461468f565b61138b565b6104f76106403660046146c5565b6114ce565b6104f761065336600461468f565b611564565b6106606115fe565b6040516104d09190614732565b6104ec611655565b6104f760105481565b6104f761068c3660046146ac565b611660565b6104ec611681565b6104f7601c5481565b6104ec6106b0366004614776565b6116c0565b6104ec6106c33660046146ac565b6117a9565b6104c46106d63660046146ac565b602c6020526000908152604090205460ff1681565b6104ec6106f93660046146f1565b6117db565b6104f760235481565b610549600080516020614fb783398151915281565b6104ec61072a36600461486e565b6117f6565b6104f761073d3660046146ac565b60146020526000908152604090205481565b6104f761075d3660046146ac565b60156020526000908152604090205481565b6104f761077d3660046146ac565b61193c565b6104f76107903660046146ac565b602d6020526000908152604090205481565b6104f76107b03660046146ac565b60126020526000908152604090205481565b6104f76107d03660046146ac565b60266020526000908152604090205481565b6107f56107f03660046146ac565b6119cf565b6040516104d094939291906148b3565b6105496108133660046146ac565b611a97565b6104f76108263660046146ac565b60186020526000908152604090205481565b6104f76108463660046146ac565b60136020526000908152604090205481565b6104f76108663660046146ac565b60166020526000908152604090205481565b6104ec611af7565b6104ec611c0f565b6104f761089636600461468f565b611c50565b6104ec6108a93660046146ac565b611cd6565b6104f76108bc36600461468f565b611db8565b6104f76108cf3660046146ac565b60196020526000908152604090205481565b6104ec611e6e565b6104ec6108f736600461468f565b611fb7565b6104c461090a3660046148e3565b602960209081526000928352604080842090915290825290205460ff1681565b6105166120b5565b6104f76109403660046146ac565b6120c4565b6104c461095336600461468f565b600e6020526000908152604090205460ff1681565b6104ec61210b565b6104f761097e3660046146ac565b60176020526000908152604090205481565b6104ec6121e7565b6104ec6109a63660046146ac565b6127fd565b6104c46109b93660046148e3565b602a60209081526000928352604080842090915290825290205460ff1681565b6104ec6109e7366004614905565b612b52565b6104ec6109fa3660046145f3565b612b8f565b6104f7601f5481565b6104f7601e5481565b6104ec610a1f3660046146c5565b612b9a565b6104c4610a323660046146ac565b601b6020526000908152604090205460ff1681565b6104ec610a5536600461493a565b612ed5565b6104f7610a683660046146ac565b60276020526000908152604090205481565b6104f7601d5481565b610516610a913660046146ac565b612f0d565b6104ec610aa43660046149ba565b612f44565b6104ec610ab73660046148e3565b61319b565b6104ec610aca3660046146ac565b61330e565b6104f7610add3660046146ac565b601a6020526000908152604090205481565b6104c4610afd3660046149df565b613492565b6104f7610b1036600461468f565b6134c0565b6104f7610b233660046146ac565b60116020526000908152604090205481565b6104f7610b4336600461468f565b6134fd565b6104ec610b56366004614a0d565b613567565b6104ec610b69366004614905565b6136a2565b6104ec610b7c3660046148e3565b6136db565b600d54610549906001600160a01b031681565b6104ec610ba23660046146c5565b613752565b6000610bb2826138f5565b92915050565b33600080516020614fd783398151915214610bee5760405162461bcd60e51b8152600401610be590614a50565b60405180910390fd5b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527ffdd0af5ddd6e15c3303b396526dac86fc4a4170dc3c49f6b2f8be7eaef6ab71e91015b60405180910390a15050565b606060018054610c6190614a87565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d90614a87565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b6000610cef82611c50565b600003610cfe57505060235490565b6000610d0b8360006114ce565b600081815260116020908152604080832054601b9092528220549293509160ff16610d3857602354610d48565b6000828152601660205260409020545b95945050505050565b6000610d5c8261391a565b506000908152600560205260409020546001600160a01b031690565b6000610d8382611a97565b9050806001600160a01b0316836001600160a01b031603610df05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610be5565b336001600160a01b0382161480610e0c5750610e0c8133613492565b610e7e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610be5565b610e888383613979565b505050565b33610e9782611a97565b6001600160a01b031614610f035760405162461bcd60e51b815260206004820152602d60248201527f43616e2774207570677261646520616e204e46542074686174206973206e6f7460448201526c206f776e656420627920796f7560981b6064820152608401610be5565b60008181526011602052604081205490610f1e826001614ad1565b6000848152601a602090815260408083205484845260129092528220549293509091610f4a9190614ae4565b600083815260146020526040902054909150610f785760405162461bcd60e51b8152600401610be590614af7565b610f81336139e7565b6040516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd90610fb690339030908690600401614b2e565b6020604051808303816000875af1158015610fd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff99190614b52565b6110155760405162461bcd60e51b8152600401610be590614b6f565b80601060008282546110279190614ad1565b90915550506000848152601a60205260408120805483929061104a908490614ad1565b909155505060008481526011602090815260408083208590558483526015909152812080549161107983614b9d565b9091555050600083815260156020526040812080549161109883614bb6565b909155505060008281526014602052604081208054916110b783614bb6565b909155505060008381526014602052604081208054916110d683614b9d565b919050555060006064602154836110ed9190614bcd565b6110f79190614c02565b9050806020600082825461110b9190614ad1565b9091555050600084815260196020526040812054601c805491929091611132908490614ae4565b9091555050600083815260196020526040812054601c805491929091611159908490614ad1565b9091555050600083815260196020908152604080832054888452602690925290912055600080516020614fb783398151915263a9059cbb600080516020614fd78339815191526111a98486614ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190614b52565b6112345760405162461bcd60e51b8152600401610be590614b6f565b6040805185815260208101859052908101839052859033907f2133146543dced9199aee6318aecb1ac87443d6d4c39f2b35c998586c09b8229906060015b60405180910390a35050505050565b33600080516020614fd7833981519152146112ae5760405162461bcd60e51b8152600401610be590614a50565b601f55565b33600080516020614fd7833981519152146112e05760405162461bcd60e51b8152600401610be590614a50565b6000908152601b60205260409020805460ff19169055565b336000908152600e602052604090205460ff1661134e5760405162461bcd60e51b815260206004820152601460248201527313db9b1e48105492c818d85b88191bc81d1a185d60621b6044820152606401610be5565b611357816139e7565b50565b6113643382613b97565b6113805760405162461bcd60e51b8152600401610be590614c16565b610e88838383613bf6565b33600080516020614fd7833981519152146113b85760405162461bcd60e51b8152600401610be590614a50565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa158015611406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142a9190614c63565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611475573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114999190614b52565b6113575760405162461bcd60e51b815260206004820152600660248201526511985a5b195960d21b6044820152606401610be5565b60006114d983611c50565b821061153b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610be5565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b600061156f82611c50565b60000361157e57506000919050565b600061158b8360006114ce565b600081815260276020908152604080832054602690925290912054601d5492935090916115b89190614bcd565b81106115c8575060009392505050565b600060225482601d546115db9190614ae4565b6000858152602660205260409020546115f49190614bcd565b610d489190614c02565b6060602b805480602002602001604051908101604052809291908181526020018280548015610cda57602002820191906000526020600020905b815481526020019060010190808311611638575050505050905090565b61165e336139e7565b565b602b818154811061167057600080fd5b600091825260209091200154905081565b33600080516020614fd7833981519152146116ae5760405162461bcd60e51b8152600401610be590614a50565b6116bb6201518042614ae4565b601e55565b33600080516020614fd7833981519152146116ed5760405162461bcd60e51b8152600401610be590614a50565b600087815260126020526040902054156117405760405162461bcd60e51b81526020600482015260146024820152734c6576656c20616c72656164792065786973747360601b6044820152606401610be5565b61175286670de0b6b3a7640000614bcd565b6000978852601260209081526040808a209290925560138152818920879055601481528189209690965560168652808820949094556017855283872092909255601884528286205560199092529092209190915550565b33600080516020614fd7833981519152146117d65760405162461bcd60e51b8152600401610be590614a50565b602155565b610e8883838360405180602001604052806000815250612ed5565b33600080516020614fd7833981519152146118235760405162461bcd60e51b8152600401610be590614a50565b61184e6040518060800160405280600081526020016000815260200160608152602001600081525090565b604081018381526060820183905260288054600181018255600091909152825160049091027fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab5810191825560208401517fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab6820155915183927fe16da923a2d88192e5070f37b4571d58682c0d66212ec634d495f33de3f77ab701906118f39082614cca565b506060820151816003015550507fb9310b5af61f4881865b305b62489bca63f7f8d47bbd7715c6004bb8971543c28160405161192f9190614d8a565b60405180910390a1505050565b600061194760095490565b82106119aa5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610be5565b600982815481106119bd576119bd614dd0565b90600052602060002001549050919050565b602881815481106119df57600080fd5b9060005260206000209060040201600091509050806000015490806001015490806002018054611a0e90614a87565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3a90614a87565b8015611a875780601f10611a5c57610100808354040283529160200191611a87565b820191906000526020600020905b815481529060010190602001808311611a6a57829003601f168201915b5050505050908060030154905084565b6000818152600360205260408120546001600160a01b031680610bb25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610be5565b336000908152600e602052604090205460ff16611b4d5760405162461bcd60e51b815260206004820152601460248201527313db9b1e48105492c818d85b88191bc81d1a185d60621b6044820152606401610be5565b42601e5462015018611b5f9190614ad1565b1161165e5742601e55601f54602054600091606491611b7e9190614bcd565b611b889190614c02565b90506000601c5460225483611b9d9190614bcd565b611ba79190614c02565b905080601d6000828254611bbb9190614ad1565b925050819055508160206000828254611bd49190614ae4565b909155505060408051838152602081018390527f29e98ba00d07f171959c4ddcd2f3020debc7c52cf537a034d7e664340d098c6c9101610c46565b33600080516020614fd783398151915214611c3c5760405162461bcd60e51b8152600401610be590614a50565b60006064601f54602054611b7e9190614bcd565b60006001600160a01b038216611cba5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610be5565b506001600160a01b031660009081526004602052604090205490565b6040516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd90611d0b90339030908690600401614b2e565b6020604051808303816000875af1158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e9190614b52565b611d6a5760405162461bcd60e51b8152600401610be590614b6f565b8060206000828254611d7c9190614ad1565b90915550506040518181527ff8fad42e780bfa5459be3fe691e8ba1aec70342250112139c5771c3fd155f312906020015b60405180910390a150565b6000611dc382611c50565b600003611dd257506000919050565b6000611ddf8360006114ce565b600081815260276020908152604080832054602690925290912054601d549293509091611e0c9190614bcd565b8110611e1c575060009392505050565b600060225482601d54611e2f9190614ae4565b600085815260266020526040902054611e489190614bcd565b611e529190614c02565b600084815260256020526040902054909150610d489082614ad1565b6000611e7b3360006114ce565b6000818152601b602052604090205490915060ff16611ed35760405162461bcd60e51b815260206004820152601460248201527313919508185b1c9958591e481d5b9b1bd8dad95960621b6044820152606401610be5565b600d546001600160a01b031663e1dbf312611eed83611a97565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611f31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f559190614b52565b6112e05760405162461bcd60e51b815260206004820152602d60248201527f43616e277420756e6c6f636b20616e204e4654206265666f726520726561636860448201526c1a5b99c81b585e14185e5bdd5d609a1b6064820152608401610be5565b33600080516020614fd783398151915214611fe45760405162461bcd60e51b8152600401610be590614a50565b600d80546001600160a01b0319166001600160a01b03831690811790915560405163095ea7b360e01b815260048101919091526000196024820152600080516020614fb78339815191529063095ea7b3906044016020604051808303816000875af1158015612057573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207b9190614b52565b506040516001600160a01b03821681527fe7ae49f883c825b05681b3e00e8be6fdea9ed2a8a45e4c6ecb9390fc44cce61590602001611dad565b606060028054610c6190614a87565b600081815260116020526040812054816120df826001614ad1565b6000858152601a602090815260408083205484845260129092528220549293509091610d489190614ae4565b60006121183360006114ce565b6000818152601b602052604090205490915060ff161561216f5760405162461bcd60e51b815260206004820152601260248201527113919508185b1c9958591e481b1bd8dad95960721b6044820152606401610be5565b600d54604051631b86b93f60e01b81523360048201526001600160a01b0390911690631b86b93f90602401600060405180830381600087803b1580156121b457600080fd5b505af11580156121c8573d6000803e3d6000fd5b505050600091825250601b60205260409020805460ff19166001179055565b33600080516020614fd7833981519152146122145760405162461bcd60e51b8152600401610be590614a50565b6000732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228c9190614c63565b9050600080600080600080732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b031663bf8e9b6e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230d9190614c63565b905060005b87811015612583576040516331a9108f60e11b815260048101829052732222829575a47f84aa9ed9f3f09efb36e21d222290636352211e90602401602060405180830381865afa15801561236a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238e9190614de6565b604051631e7372db60e31b815260048101839052909750732222829575a47f84aa9ed9f3f09efb36e21d22229063f39b96d890602401602060405180830381865afa1580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124059190614c63565b60008181526019602052604090819020549051635f716ee160e11b8152600481018490529197509550732222829575a47f84aa9ed9f3f09efb36e21d22229063bee2ddc290602401602060405180830381865afa15801561246a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248e9190614c63565b935061249a8787613752565b6000818152601b60209081526040808320805460ff19166001179055602790915290208490556022546124cd8584614ae4565b6124d79087614bcd565b6124e19190614c02565b6124eb9084614ad1565b604051630405035360e31b815260048101839052909350732222829575a47f84aa9ed9f3f09efb36e21d2222906320281a9890602401602060405180830381865afa15801561253e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125629190614c63565b6000828152602560205260409020558061257b81614b9d565b915050612312565b5080601d81905550600082732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b0316630359fea96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126049190614c63565b61260e9190614ad1565b6040516323b872dd60e01b8152909150600080516020614fb7833981519152906323b872dd9061264690339030908690600401614b2e565b6020604051808303816000875af1158015612665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126899190614b52565b6126a55760405162461bcd60e51b8152600401610be590614b6f565b732222829575a47f84aa9ed9f3f09efb36e21d22226001600160a01b0316630359fea96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271b9190614c63565b6020600082825461272c9190614ad1565b90915550506040516370a0823160e01b8152732222829575a47f84aa9ed9f3f09efb36e21d222260048201527fa3981af8c35b1132f9c13a992dd94c91076b08836ec150152fcf3480c74e02f590600080516020614fb7833981519152906370a0823190602401602060405180830381865afa1580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d49190614c63565b602080546040805193845291830152810185905260600160405180910390a15050505050505050565b61280633611c50565b156128235760405162461bcd60e51b8152600401610be590614e03565b4260245411156128695760405162461bcd60e51b815260206004820152601160248201527014d85b19481b9bdd081bdc195b881e595d607a1b6044820152606401610be5565b6000818152601460205260409020546128945760405162461bcd60e51b8152600401610be590614af7565b600081815260126020526040908190205490516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd906128d990339030908690600401614b2e565b6020604051808303816000875af11580156128f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291c9190614b52565b6129385760405162461bcd60e51b8152600401610be590614b6f565b806010600082825461294a9190614ad1565b92505081905550600061295f33600f54613c7f565b6000818152601a6020908152604080832086905560119091528120859055600f80549293509061298e83614b9d565b909155505060008381526015602052604081208054916129ad83614b9d565b909155505060008381526014602052604081208054916129cc83614bb6565b919050555060006064602154846129e39190614bcd565b6129ed9190614c02565b90508060206000828254612a019190614ad1565b9091555050600084815260196020526040812054601c805491929091612a28908490614ad1565b90915550506000848152601960209081526040808320548584526026835281842055601d54602790925290912055600080516020614fb783398151915263a9059cbb600080516020614fd7833981519152612a838487614ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612ace573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af29190614b52565b612b0e5760405162461bcd60e51b8152600401610be590614b6f565b6040805185815260208101859052839133917f4a5bb7d4caef8b636449e63eb0d87475ecd51d1a51411b5a41b19630c13c729791015b60405180910390a350505050565b33600080516020614fd783398151915214612b7f5760405162461bcd60e51b8152600401610be590614a50565b600b612b8b8282614cca565b5050565b612b8b338383613c91565b33600080516020614fd783398151915214612bc75760405162461bcd60e51b8152600401610be590614a50565b612bd082611c50565b15612bed5760405162461bcd60e51b8152600401610be590614e03565b600081815260146020526040902054612c185760405162461bcd60e51b8152600401610be590614af7565b600081815260126020526040908190205490516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd90612c5d90339030908690600401614b2e565b6020604051808303816000875af1158015612c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca09190614b52565b612cbc5760405162461bcd60e51b8152600401610be590614b6f565b8060106000828254612cce9190614ad1565b925050819055506000612ce384600f54613c7f565b6000818152601a6020908152604080832086905560119091528120859055600f805492935090612d1283614b9d565b90915550506000838152601560205260408120805491612d3183614b9d565b90915550506000838152601460205260408120805491612d5083614bb6565b91905055506000606460215484612d679190614bcd565b612d719190614c02565b90508060206000828254612d859190614ad1565b9091555050600084815260196020526040812054601c805491929091612dac908490614ad1565b90915550506000848152601960209081526040808320548584526026835281842055601d54602790925290912055600080516020614fb783398151915263a9059cbb600080516020614fd7833981519152612e078487614ae4565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015612e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e769190614b52565b612e925760405162461bcd60e51b8152600401610be590614b6f565b604080518581526020810185905283916001600160a01b038816917f4a5bb7d4caef8b636449e63eb0d87475ecd51d1a51411b5a41b19630c13c72979101611272565b612edf3383613b97565b612efb5760405162461bcd60e51b8152600401610be590614c16565b612f0784848484613d5f565b50505050565b6060600b612f1a83613d92565b600c604051602001612f2e93929190614ead565b6040516020818303038152906040529050919050565b4260288381548110612f5857612f58614dd0565b9060005260206000209060040201600301541015612fa95760405162461bcd60e51b815260206004820152600e60248201526d159bdd19481a5cc818db1bdcd95960921b6044820152606401610be5565b612fb233611c50565b600003612fbd575050565b6000612fca3360006114ce565b60008181526011602090815260408083205480845260179092528220549293509190819003612ffa575050505050565b600083815260296020908152604080832088845290915290205460ff16156130d3576000838152602a6020908152604080832088845290915290205460ff161561307857806028868154811061305257613052614dd0565b906000526020600020906004020160000160008282546130729190614ae4565b90915550505b6000838152602a6020908152604080832088845290915290205460ff166130d35780602886815481106130ad576130ad614dd0565b906000526020600020906004020160010160008282546130cd9190614ae4565b90915550505b83156131135780602886815481106130ed576130ed614dd0565b9060005260206000209060040201600001600082825461310d9190614ad1565b90915550505b8361315257806028868154811061312c5761312c614dd0565b9060005260206000209060040201600101600082825461314c9190614ad1565b90915550505b50506000818152602a602090815260408083208684528252808320805495151560ff19968716179055928252602981528282209482529390935290912080549091166001179055565b336131a583611a97565b6001600160a01b0316146132135760405162461bcd60e51b815260206004820152602f60248201527f43616e2774207472616e73666572206120746f6b656e2074686174206973206e60448201526e6f74206f776e656420627920796f7560881b6064820152608401610be5565b6000828152601b602052604090205460ff16156132625760405162461bcd60e51b815260206004820152600d60248201526c139195081a5cc81b1bd8dad959609a1b6044820152606401610be5565b6000828152602c60209081526040808320805460ff19166001179055602d90915290208190556132d082602b80546000838152602e60205260408120829055600182018355919091527f11c44e4875b74d31ff9fd779bf2566af7bd15b87fc985d01f5094b89e3669e4f0155565b60408051338152602081018490529081018290527f2118a121df78ff60e96f21d3c629b2ce95ce0cb2542e3e7af05035dd4b7f983b90606001610c46565b600061331982611a97565b6000838152602d6020908152604080832054602c909252909120549192509060ff166133875760405162461bcd60e51b815260206004820152601860248201527f43616e206f6e6c7920627579206c6973746564204e46547300000000000000006044820152606401610be5565b6040516323b872dd60e01b8152600080516020614fb7833981519152906323b872dd906133bc90339086908690600401614b2e565b6020604051808303816000875af11580156133db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ff9190614b52565b61341b5760405162461bcd60e51b8152600401610be590614b6f565b6000838152602c60205260409020805460ff1916905561343a83613e93565b613445823385613bf6565b604080516001600160a01b0384168152336020820152908101849052606081018290527f6de5f61b24e998dfaddeff37d69f266a8355555154081b554c36b2799f0618c89060800161192f565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b60006134cb82611c50565b6000036134da57506000919050565b60006134e78360006114ce565b6000908152602660205260409020549392505050565b600061350882611c50565b60000361351757506000919050565b60006135248360006114ce565b600081815260116020908152604080832054601b9092528220549293509160ff16613550576000610d48565b506000908152601860205260409020549392505050565b33600080516020614fd7833981519152146135945760405162461bcd60e51b8152600401610be590614a50565b6000868152601360205260409020548411156135ef576000868152601360205260408120546135c39086614ae4565b9050806014600089815260200190815260200160002060008282546135e89190614ad1565b9091555050505b60008681526013602052604090205484101561364b5760008681526013602052604081205461361f908690614ae4565b9050806014600089815260200190815260200160002060008282546136449190614ae4565b9091555050505b61365d85670de0b6b3a7640000614bcd565b60009687526012602090815260408089209290925560138152818820959095556016855280872093909355601784528286209190915560189092529092209190915550565b33600080516020614fd7833981519152146136cf5760405162461bcd60e51b8152600401610be590614a50565b600c612b8b8282614cca565b33600080516020614fd7833981519152146137085760405162461bcd60e51b8152600401610be590614a50565b60008281526013602052604081208054839290613726908490614ad1565b909155505060008281526014602052604081208054839290613749908490614ad1565b90915550505050565b33600080516020614fd78339815191521461377f5760405162461bcd60e51b8152600401610be590614a50565b61378882611c50565b156137a55760405162461bcd60e51b8152600401610be590614e03565b6000818152601460205260409020546137d05760405162461bcd60e51b8152600401610be590614af7565b600081815260126020526040812054600f549091906137f0908590613c7f565b6000818152601a6020908152604080832086905560119091528120859055600f80549293509061381f83614b9d565b9091555050600083815260156020526040812080549161383e83614b9d565b9091555050600083815260146020526040812080549161385d83614bb6565b9091555050600083815260196020526040812054601c805491929091613884908490614ad1565b90915550506000838152601960209081526040808320548484526026835281842055601d54602783529281902092909255815185815290810184905282916001600160a01b038716917f4a5bb7d4caef8b636449e63eb0d87475ecd51d1a51411b5a41b19630c13c72979101612b44565b60006001600160e01b0319821663780e9d6360e01b1480610bb25750610bb282613f75565b6000818152600360205260409020546001600160a01b03166113575760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610be5565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906139ae82611a97565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6139f081611c50565b6000036139fa5750565b6000613a078260006114ce565b600081815260276020908152604080832054602690925290912054601d549293509091613a349190614bcd565b8110613a3f57505050565b600060225482601d54613a529190614ae4565b600085815260266020526040902054613a6b9190614bcd565b613a759190614c02565b905080602560008581526020019081526020016000206000828254613a9a9190614ad1565b9091555050601d5460008481526027602052604090819020919091555163a9059cbb60e01b81526001600160a01b038516600482015260248101829052600080516020614fb78339815191529063a9059cbb906044016020604051808303816000875af1158015613b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b339190614b52565b613b4f5760405162461bcd60e51b8152600401610be590614b6f565b604080516001600160a01b0386168152602081018390527ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe910160405180910390a150505050565b600080613ba383611a97565b9050806001600160a01b0316846001600160a01b03161480613bca5750613bca8185613492565b80613bee5750836001600160a01b0316613be384610d51565b6001600160a01b0316145b949350505050565b6000818152601b602052604090205460ff1615613c455760405162461bcd60e51b815260206004820152600d60248201526c139195081a5cc81b1bd8dad959609a1b6044820152606401610be5565b613c4e836139e7565b613c5782611c50565b15613c745760405162461bcd60e51b8152600401610be590614e03565b610e88838383613fce565b6000613c8b8383614118565b50919050565b816001600160a01b0316836001600160a01b031603613cf25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610be5565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613d6a848484613bf6565b613d768484848461420b565b612f075760405162461bcd60e51b8152600401610be590614ee0565b606081600003613db95750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613de35780613dcd81614b9d565b9150613ddc9050600a83614c02565b9150613dbd565b60008167ffffffffffffffff811115613dfe57613dfe6147c2565b6040519080825280601f01601f191660200182016040528015613e28576020820181803683370190505b5090505b8415613bee57613e3d600183614ae4565b9150613e4a600a86614f32565b613e55906030614ad1565b60f81b818381518110613e6a57613e6a614dd0565b60200101906001600160f81b031916908160001a905350613e8c600a86614c02565b9450613e2c565b602b8054613ea390600190614ae4565b81548110613eb357613eb3614dd0565b9060005260206000200154602b602e60008481526020019081526020016000205481548110613ee457613ee4614dd0565b9060005260206000200181905550602e600082815260200190815260200160002054602e6000602b6001602b80549050613f1e9190614ae4565b81548110613f2e57613f2e614dd0565b9060005260206000200154815260200190815260200160002081905550602b805480613f5c57613f5c614f46565b6001900381819060005260206000200160009055905550565b60006001600160e01b031982166380ac58cd60e01b1480613fa657506001600160e01b03198216635b5e139f60e01b145b80610bb257506001600160e01b0319821660009081526020819052604090205460ff16610bb2565b826001600160a01b0316613fe182611a97565b6001600160a01b0316146140455760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610be5565b614050838383614313565b600081815260056020908152604080832080546001600160a01b03191690556001600160a01b03861683526004909152812080549161408e83614bb6565b90915550506001600160a01b03821660009081526004602052604081208054916140b783614b9d565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000818152600360205260409020546001600160a01b03161561417d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610be5565b61418960008383614313565b6001600160a01b03821660009081526004602052604081208054916141ad83614b9d565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061421f846001600160a01b031661431e565b1561430857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614256903390899088908890600401614f5c565b6020604051808303816000875af1925050508015614291575060408051601f3d908101601f1916820190925261428e91810190614f99565b60015b6142ee573d8080156142bf576040519150601f19603f3d011682016040523d82523d6000602084013e6142c4565b606091505b5080516000036142e65760405162461bcd60e51b8152600401610be590614ee0565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613bee565b506001949350505050565b610e88838383614357565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613bee575050151592915050565b6001600160a01b0383166143b2576143ad81600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6143d5565b816001600160a01b0316836001600160a01b0316146143d5576143d5838261440f565b6001600160a01b0382166143ec57610e88816144ac565b826001600160a01b0316826001600160a01b031614610e8857610e888282614552565b6000600161441c84611c50565b6144269190614ae4565b600083815260086020526040902054909150808214614479576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906144be90600190614ae4565b6000838152600a6020526040812054600980549394509092849081106144e6576144e6614dd0565b90600052602060002001549050806009838154811061450757614507614dd0565b6000918252602080832090910192909255858152600a9091526040812055600980548061453657614536614f46565b6001900381819060005260206000200160009055905550505050565b600061455d83611c50565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6001600160e01b03198116811461135757600080fd5b6000602082840312156145be57600080fd5b81356145c981614596565b9392505050565b6001600160a01b038116811461135757600080fd5b801515811461135757600080fd5b6000806040838503121561460657600080fd5b8235614611816145d0565b91506020830135614621816145e5565b809150509250929050565b60005b8381101561464757818101518382015260200161462f565b50506000910152565b6000815180845261466881602086016020860161462c565b601f01601f19169290920160200192915050565b6020815260006145c96020830184614650565b6000602082840312156146a157600080fd5b81356145c9816145d0565b6000602082840312156146be57600080fd5b5035919050565b600080604083850312156146d857600080fd5b82356146e3816145d0565b946020939093013593505050565b60008060006060848603121561470657600080fd5b8335614711816145d0565b92506020840135614721816145d0565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b8181101561476a5783518352928401929184019160010161474e565b50909695505050505050565b600080600080600080600060e0888a03121561479157600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156147f3576147f36147c2565b604051601f8501601f19908116603f0116810190828211818310171561481b5761481b6147c2565b8160405280935085815286868601111561483457600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261485f57600080fd5b6145c9838335602085016147d8565b6000806040838503121561488157600080fd5b823567ffffffffffffffff81111561489857600080fd5b6148a48582860161484e565b95602094909401359450505050565b8481528360208201526080604082015260006148d26080830185614650565b905082606083015295945050505050565b600080604083850312156148f657600080fd5b50508035926020909101359150565b60006020828403121561491757600080fd5b813567ffffffffffffffff81111561492e57600080fd5b613bee8482850161484e565b6000806000806080858703121561495057600080fd5b843561495b816145d0565b9350602085013561496b816145d0565b925060408501359150606085013567ffffffffffffffff81111561498e57600080fd5b8501601f8101871361499f57600080fd5b6149ae878235602084016147d8565b91505092959194509250565b600080604083850312156149cd57600080fd5b823591506020830135614621816145e5565b600080604083850312156149f257600080fd5b82356149fd816145d0565b91506020830135614621816145d0565b60008060008060008060c08789031215614a2657600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60208082526018908201527f4f6e6c79207468652043454f2063616e20646f20746861740000000000000000604082015260600190565b600181811c90821680614a9b57607f821691505b602082108103613c8b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610bb257610bb2614abb565b81810381811115610bb257610bb2614abb565b6020808252601e908201527f54686973206c6576656c20697320736f6c64206f75742c20736f7272792e0000604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215614b6457600080fd5b81516145c9816145e5565b602080825260149082015273109554d1081d1c985b9cd9995c8819985a5b195960621b604082015260600190565b600060018201614baf57614baf614abb565b5060010190565b600081614bc557614bc5614abb565b506000190190565b6000816000190483118215151615614be757614be7614abb565b500290565b634e487b7160e01b600052601260045260246000fd5b600082614c1157614c11614bec565b500490565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215614c7557600080fd5b5051919050565b601f821115610e8857600081815260208120601f850160051c81016020861015614ca35750805b601f850160051c820191505b81811015614cc257828155600101614caf565b505050505050565b815167ffffffffffffffff811115614ce457614ce46147c2565b614cf881614cf28454614a87565b84614c7c565b602080601f831160018114614d2d5760008415614d155750858301515b600019600386901b1c1916600185901b178555614cc2565b600085815260208120601f198616915b82811015614d5c57888601518255948401946001909101908401614d3d565b5085821015614d7a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815281516020820152602082015160408201526000604083015160806060840152614dba60a0840182614650565b9050606084015160808401528091505092915050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614df857600080fd5b81516145c9816145d0565b6020808252601b908201527f4d6178204e4654207065722077616c6c65742065786365656465640000000000604082015260600190565b60008154614e4781614a87565b60018281168015614e5f5760018114614e7457614ea3565b60ff1984168752821515830287019450614ea3565b8560005260208060002060005b85811015614e9a5781548a820152908401908201614e81565b50505082870194505b5050505092915050565b6000614eb98286614e3a565b8451614ec981836020890161462c565b614ed581830186614e3a565b979650505050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082614f4157614f41614bec565b500690565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614f8f90830184614650565b9695505050505050565b600060208284031215614fab57600080fd5b81516145c98161459656fe000000000000000000000000e9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000df0048df98a749ed36553788b4b449ea7a7baa88a2646970667358221220a503b0424be049662e69cac63588adef424fb00e3fe0fc8f28e6bc4baf1a1ae264736f6c63430008100033
Deployed Bytecode Sourcemap
15474:20510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19645:154;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;19645:154:0;;;;;;;;29273:162;;;;;;:::i;:::-;;:::i;:::-;;16865:26;;;;;;;;;1384:25:1;;;1372:2;1357:18;16865:26:0;1238:177:1;16898:34:0;;;;;;6415:84;;;:::i;:::-;;;;;;;:::i;28430:328::-;;;;;;:::i;:::-;;:::i;7386:169::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2777:32:1;;;2759:51;;2747:2;2732:18;7386:169:0;2613:203:1;6968:412:0;;;;;;:::i;:::-;;:::i;23813:1278::-;;;;;;:::i;:::-;;:::i;25720:116::-;;;;;;:::i;:::-;;:::i;25623:89::-;;;;;;:::i;:::-;;:::i;12714:97::-;12792:10;:17;12714:97;;32691:95;;;;;;:::i;:::-;;:::i;17033:30::-;;;;;;17072:50;;;;;;:::i;:::-;;;;;;;;;;;;;;7858:244;;;;;;:::i;:::-;;:::i;15912:87::-;;15956:42;15912:87;;34575:191;;;;;;:::i;:::-;;:::i;12450:256::-;;;;;;:::i;:::-;;:::i;33411:451::-;;;;;;:::i;:::-;;:::i;30832:103::-;;;:::i;:::-;;;;;;;:::i;32613:70::-;;;:::i;16006:33::-;;;;;;29697:28;;;;;;:::i;:::-;;:::i;25965:115::-;;;:::i;16708:26::-;;;;;;27175:521;;;;;;:::i;:::-;;:::i;25844:113::-;;;;;;:::i;:::-;;:::i;29732:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8108:135;;;;;;:::i;:::-;;:::i;16988:38::-;;;;;;15825:80;;-1:-1:-1;;;;;;;;;;;15825:80:0;;26088:275;;;;;;:::i;:::-;;:::i;16267:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16325:54;;;;;;:::i;:::-;;;;;;;;;;;;;;12819:233;;;;;;:::i;:::-;;:::i;29781:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16152:51;;;;;;:::i;:::-;;;;;;;;;;;;;;17126:42;;;;;;:::i;:::-;;;;;;;;;;;;;;17347:19;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;6185:222::-;;;;;;:::i;:::-;;:::i;16494:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16210:50;;;;;;:::i;:::-;;;;;;;;;;;;;;16386:46;;;;;;:::i;:::-;;;;;;;;;;;;;;31686:503;;;:::i;32201:400::-;;;:::i;5970:207::-;;;;;;:::i;:::-;;:::i;31444:234::-;;;;;;:::i;:::-;;:::i;33870:471::-;;;;;;:::i;:::-;;:::i;16550:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;25325:290;;;:::i;29443:215::-;;;;;;:::i;:::-;;:::i;17375:60::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;6505:88;;;:::i;23516:289::-;;;;;;:::i;:::-;;:::i;15738:37::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25099:218;;;:::i;16439:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;34774:1207;;;:::i;20570:1123::-;;;;;;:::i;:::-;;:::i;17442:66::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19970:72;;;;;;:::i;:::-;;:::i;7561:137::-;;;;;;:::i;:::-;;:::i;16821:37::-;;;;;;16783:31;;;;;;22448:1060;;;;;;:::i;:::-;;:::i;16663:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8249:277;;;;;;:::i;:::-;;:::i;17175:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16741:35;;;;;;19805:159;;;;;;:::i;:::-;;:::i;26371:796::-;;;;;;:::i;:::-;;:::i;30478:342::-;;;;;;:::i;:::-;;:::i;30040:430::-;;;;;;:::i;:::-;;:::i;16606:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;7704:148;;;;;;:::i;:::-;;:::i;34349:214::-;;;;;;:::i;:::-;;:::i;16099:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;28766:318;;;;;;:::i;:::-;;:::i;27705:716::-;;;;;;:::i;:::-;;:::i;20045:85::-;;;;;;:::i;:::-;;:::i;29092:173::-;;;;;;:::i;:::-;;:::i;15706:19::-;;;;;-1:-1:-1;;;;;15706:19:0;;;21701:739;;;;;;:::i;:::-;;:::i;19645:154::-;19748:4;19761:36;19785:11;19761:23;:36::i;:::-;19754:43;19645:154;-1:-1:-1;;19645:154:0:o;29273:162::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;29355:16:0;::::1;;::::0;;;:5:::1;:16;::::0;;;;;;;;:25;;-1:-1:-1;;29355:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29396:31;;10475:51:1;;;10542:18;;;10535:50;29396:31:0::1;::::0;10448:18:1;29396:31:0::1;;;;;;;;29273:162:::0;;:::o;6415:84::-;6469:13;6492:5;6485:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6415:84;:::o;28430:328::-;28486:7;28509:19;28519:8;28509:9;:19::i;:::-;28532:1;28509:24;28506:52;;-1:-1:-1;;28542:16:0;;;28430:328::o;28506:52::-;28569:10;28582:32;28602:8;28612:1;28582:19;:32::i;:::-;28625:13;28641:14;;;:10;:14;;;;;;;;;28680:6;:10;;;;;;28569:45;;-1:-1:-1;28641:14:0;28680:10;;:49;;28713:16;;28680:49;;;28693:17;;;;:10;:17;;;;;;28680:49;28666:63;28430:328;-1:-1:-1;;;;;28430:328:0:o;7386:169::-;7462:7;7482:23;7497:7;7482:14;:23::i;:::-;-1:-1:-1;7523:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;7523:24:0;;7386:169::o;6968:412::-;7049:13;7065:23;7080:7;7065:14;:23::i;:::-;7049:39;;7113:5;-1:-1:-1;;;;;7107:11:0;:2;-1:-1:-1;;;;;7107:11:0;;7099:57;;;;-1:-1:-1;;;7099:57:0;;11183:2:1;7099:57:0;;;11165:21:1;11222:2;11202:18;;;11195:30;11261:34;11241:18;;;11234:62;-1:-1:-1;;;11312:18:1;;;11305:31;11353:19;;7099:57:0;10981:397:1;7099:57:0;7191:10;-1:-1:-1;;;;;7191:19:0;;;;:58;;;7214:35;7231:5;7238:10;7214:16;:35::i;:::-;7169:169;;;;-1:-1:-1;;;7169:169:0;;11585:2:1;7169:169:0;;;11567:21:1;11624:2;11604:18;;;11597:30;11663:34;11643:18;;;11636:62;11734:31;11714:18;;;11707:59;11783:19;;7169:169:0;11383:425:1;7169:169:0;7351:21;7360:2;7364:7;7351:8;:21::i;:::-;7038:342;6968:412;;:::o;23813:1278::-;23885:10;23870:11;23878:2;23870:7;:11::i;:::-;-1:-1:-1;;;;;23870:25:0;;23862:83;;;;-1:-1:-1;;;23862:83:0;;12015:2:1;23862:83:0;;;11997:21:1;12054:2;12034:18;;;12027:30;12093:34;12073:18;;;12066:62;-1:-1:-1;;;12144:18:1;;;12137:43;12197:19;;23862:83:0;11813:409:1;23862:83:0;23956:20;23979:14;;;:10;:14;;;;;;;24024:16;23979:14;24039:1;24024:16;:::i;:::-;24051:23;24106:18;;;:14;:18;;;;;;;;;24077:26;;;:15;:26;;;;;;24004:36;;-1:-1:-1;24051:23:0;;24077:47;;24106:18;24077:47;:::i;:::-;24172:1;24143:26;;;:15;:26;;;;;;24051:73;;-1:-1:-1;24135:73:0;;;;-1:-1:-1;;;24135:73:0;;;;;;;:::i;:::-;24219:18;24226:10;24219:6;:18::i;:::-;24256:61;;-1:-1:-1;;;24256:61:0;;-1:-1:-1;;;;;;;;;;;15862:42:0;24256:17;;:61;;24274:10;;24294:4;;24301:15;;24256:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24248:93;;;;-1:-1:-1;;;24248:93:0;;;;;;;:::i;:::-;24374:15;24352:18;;:37;;;;;;;:::i;:::-;;;;-1:-1:-1;;24400:18:0;;;;:14;:18;;;;;:37;;24422:15;;24400:18;:37;;24422:15;;24400:37;:::i;:::-;;;;-1:-1:-1;;24448:14:0;;;;:10;:14;;;;;;;;:26;;;24485:29;;;:18;:29;;;;;:31;;;;;;:::i;:::-;;;;-1:-1:-1;;24527:32:0;;;;:18;:32;;;;;:34;;;;;;:::i;:::-;;;;-1:-1:-1;;24572:26:0;;;;:15;:26;;;;;:28;;;;;;:::i;:::-;;;;-1:-1:-1;;24611:29:0;;;;:15;:29;;;;;:31;;;;;;:::i;:::-;;;;;;24653:20;24711:3;24694:14;;24676:15;:32;;;;:::i;:::-;:38;;;;:::i;:::-;24653:61;;24740:12;24725:11;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;24778:27:0;;;;:13;:27;;;;;;24763:11;:42;;24778:27;;24763:11;;:42;;24778:27;;24763:42;:::i;:::-;;;;-1:-1:-1;;24831:24:0;;;;:13;:24;;;;;;24816:11;:39;;24831:24;;24816:11;;:39;;24831:24;;24816:39;:::i;:::-;;;;-1:-1:-1;;24879:24:0;;;;:13;:24;;;;;;;;;24866:10;;;:6;:10;;;;;;:37;-1:-1:-1;;;;;;;;;;;24922:13:0;-1:-1:-1;;;;;;;;;;;24941:30:0;24959:12;24941:15;:30;:::i;:::-;24922:50;;-1:-1:-1;;;;;;24922:50:0;;;;;;;-1:-1:-1;;;;;14863:32:1;;;24922:50:0;;;14845:51:1;14912:18;;;14905:34;14818:18;;24922:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24914:82;;;;-1:-1:-1;;;24914:82:0;;;;;;;:::i;:::-;25012:71;;;15152:25:1;;;15208:2;15193:18;;15186:34;;;15236:18;;;15229:34;;;25038:2:0;;25026:10;;25012:71;;15140:2:1;15125:18;25012:71:0;;;;;;;;23851:1240;;;;23813:1278;:::o;25720:116::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;25800:18:::1;:28:::0;25720:116::o;25623:89::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;25699:5:::1;25686:10:::0;;;:6:::1;:10;::::0;;;;:18;;-1:-1:-1;;25686:18:0::1;::::0;;25623:89::o;32691:95::-;18128:10;18122:17;;;;:5;:17;;;;;;;;18114:50;;;;-1:-1:-1;;;18114:50:0;;15476:2:1;18114:50:0;;;15458:21:1;15515:2;15495:18;;;15488:30;-1:-1:-1;;;15534:18:1;;;15527:50;15594:18;;18114:50:0;15274:344:1;18114:50:0;32762:16:::1;32769:8;32762:6;:16::i;:::-;32691:95:::0;:::o;7858:244::-;7966:39;7985:10;7997:7;7966:18;:39::i;:::-;7958:97;;;;-1:-1:-1;;;7958:97:0;;;;;;;:::i;:::-;8066:28;8076:4;8082:2;8086:7;8066:9;:28::i;34575:191::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;34701:46:::1;::::0;-1:-1:-1;;;34701:46:0;;34741:4:::1;34701:46;::::0;::::1;2759:51:1::0;-1:-1:-1;;;;;34658:30:0;::::1;::::0;::::1;::::0;34689:10:::1;::::0;34658:30;;34701:31:::1;::::0;2732:18:1;;34701:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34658:90;::::0;-1:-1:-1;;;;;;34658:90:0::1;::::0;;;;;;-1:-1:-1;;;;;14863:32:1;;;34658:90:0::1;::::0;::::1;14845:51:1::0;14912:18;;;14905:34;14818:18;;34658:90:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34650:108;;;::::0;-1:-1:-1;;;34650:108:0;;16428:2:1;34650:108:0::1;::::0;::::1;16410:21:1::0;16467:1;16447:18;;;16440:29;-1:-1:-1;;;16485:18:1;;;16478:36;16531:18;;34650:108:0::1;16226:329:1::0;12450:256:0;12547:7;12583:23;12600:5;12583:16;:23::i;:::-;12575:5;:31;12567:87;;;;-1:-1:-1;;;12567:87:0;;16762:2:1;12567:87:0;;;16744:21:1;16801:2;16781:18;;;16774:30;16840:34;16820:18;;;16813:62;-1:-1:-1;;;16891:18:1;;;16884:41;16942:19;;12567:87:0;16560:407:1;12567:87:0;-1:-1:-1;;;;;;12672:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;12450:256::o;33411:451::-;33478:7;33501:19;33511:8;33501:9;:19::i;:::-;33524:1;33501:24;33498:37;;-1:-1:-1;33534:1:0;;33411:451;-1:-1:-1;33411:451:0:o;33498:37::-;33554:10;33567:32;33587:8;33597:1;33567:19;:32::i;:::-;33610:22;33635:12;;;:8;:12;;;;;;;;;33702:6;:10;;;;;;;33679:20;;33554:45;;-1:-1:-1;33635:12:0;;33679:33;;33702:10;33679:33;:::i;:::-;33661:14;:51;33658:64;;-1:-1:-1;33721:1:0;;33411:451;-1:-1:-1;;;33411:451:0:o;33658:64::-;33733:20;33811:13;;33793:14;33770:20;;:37;;;;:::i;:::-;33756:10;;;;:6;:10;;;;;;:52;;;;:::i;:::-;:68;;;;:::i;30832:103::-;30880:16;30916:11;30909:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30832:103;:::o;32613:70::-;32657:18;32664:10;32657:6;:18::i;:::-;32613:70::o;29697:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29697:28:0;:::o;25965:115::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;26046:26:::1;26064:8;26046:15;:26;:::i;:::-;26027:16;:45:::0;25965:115::o;27175:521::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;27344:22:::1;::::0;;;:15:::1;:22;::::0;;;;;:27;27336:60:::1;;;::::0;-1:-1:-1;;;27336:60:0;;17174:2:1;27336:60:0::1;::::0;::::1;17156:21:1::0;17213:2;17193:18;;;17186:30;-1:-1:-1;;;17232:18:1;;;17225:50;17292:18;;27336:60:0::1;16972:344:1::0;27336:60:0::1;27432:15;:5:::0;27440:7:::1;27432:15;:::i;:::-;27407:22;::::0;;;:15:::1;:22;::::0;;;;;;;:40;;;;27458:14:::1;:21:::0;;;;;:33;;;27502:15:::1;:22:::0;;;;;:34;;;;27547:10:::1;:17:::0;;;;;:23;;;;27581:12:::1;:19:::0;;;;;:28;;;;27620:13:::1;:20:::0;;;;;:29;27660:13:::1;:20:::0;;;;;;:28;;;;-1:-1:-1;27175:521:0:o;25844:113::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;25925:14:::1;:24:::0;25844:113::o;8108:135::-;8202:39;8219:4;8225:2;8229:7;8202:39;;;;;;;;;;;;:16;:39::i;26088:275::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;26187:19:::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26187:19:0::1;26217:13;::::0;::::1;:28:::0;;;26256:15:::1;::::0;::::1;:28:::0;;;26295:5:::1;:19:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26295:19:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;26217:7;;26295:19;;;::::1;::::0;;::::1;:::i;:::-;;;;;;;;;;;;26330:25;26347:7;26330:25;;;;;;:::i;:::-;;;;;;;;26176:187;26088:275:::0;;:::o;12819:233::-;12894:7;12930:30;12792:10;:17;;12714:97;12930:30;12922:5;:38;12914:95;;;;-1:-1:-1;;;12914:95:0;;20274:2:1;12914:95:0;;;20256:21:1;20313:2;20293:18;;;20286:30;20352:34;20332:18;;;20325:62;-1:-1:-1;;;20403:18:1;;;20396:42;20455:19;;12914:95:0;20072:408:1;12914:95:0;13027:10;13038:5;13027:17;;;;;;;;:::i;:::-;;;;;;;;;13020:24;;12819:233;;;:::o;17347:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6185:222::-;6257:7;6293:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6293:16:0;;6320:56;;;;-1:-1:-1;;;6320:56:0;;20819:2:1;6320:56:0;;;20801:21:1;20858:2;20838:18;;;20831:30;-1:-1:-1;;;20877:18:1;;;20870:54;20941:18;;6320:56:0;20617:348:1;31686:503:0;18128:10;18122:17;;;;:5;:17;;;;;;;;18114:50;;;;-1:-1:-1;;;18114:50:0;;15476:2:1;18114:50:0;;;15458:21:1;15515:2;15495:18;;;15488:30;-1:-1:-1;;;15534:18:1;;;15527:50;15594:18;;18114:50:0;15274:344:1;18114:50:0;31778:15:::1;31746:16;;31765:10;31746:29;;;;:::i;:::-;:47;31795:7;31743:59;31831:15;31812:16;:34:::0;31898:18:::1;::::0;31884:11:::1;::::0;31857:24:::1;::::0;31919:3:::1;::::0;31884:32:::1;::::0;31898:18;31884:32:::1;:::i;:::-;:38;;;;:::i;:::-;31857:65;;31933:28;31999:11;;31983:13;;31964:16;:32;;;;:::i;:::-;:46;;;;:::i;:::-;31933:77;;32045:20;32021;;:44;;;;;;;:::i;:::-;;;;;;;;32091:16;32076:11;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;32123:58:0::1;::::0;;21144:25:1;;;21200:2;21185:18;;21178:34;;;32123:58:0::1;::::0;21117:18:1;32123:58:0::1;20970:248:1::0;32201:400:0;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;32269:24:::1;32331:3;32310:18;;32296:11;;:32;;;;:::i;5970:207::-:0;6042:7;-1:-1:-1;;;;;6070:19:0;;6062:73;;;;-1:-1:-1;;;6062:73:0;;21425:2:1;6062:73:0;;;21407:21:1;21464:2;21444:18;;;21437:30;21503:34;21483:18;;;21476:62;-1:-1:-1;;;21554:18:1;;;21547:39;21603:19;;6062:73:0;21223:405:1;6062:73:0;-1:-1:-1;;;;;;6153:16:0;;;;;:9;:16;;;;;;;5970:207::o;31444:234::-;31514:56;;-1:-1:-1;;;31514:56:0;;-1:-1:-1;;;;;;;;;;;15862:42:0;31514:17;;:56;;31532:10;;31552:4;;31559:10;;31514:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31506:88;;;;-1:-1:-1;;;31506:88:0;;;;;;;:::i;:::-;31620:10;31605:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;31646:24:0;;1384:25:1;;;31646:24:0;;1372:2:1;1357:18;31646:24:0;;;;;;;;31444:234;:::o;33870:471::-;33936:7;33959:19;33969:8;33959:9;:19::i;:::-;33982:1;33959:24;33956:37;;-1:-1:-1;33992:1:0;;33870:471;-1:-1:-1;33870:471:0:o;33956:37::-;34012:10;34025:32;34045:8;34055:1;34025:19;:32::i;:::-;34068:22;34093:12;;;:8;:12;;;;;;;;;34160:6;:10;;;;;;;34137:20;;34012:45;;-1:-1:-1;34093:12:0;;34137:33;;34160:10;34137:33;:::i;:::-;34119:14;:51;34116:64;;-1:-1:-1;34179:1:0;;33870:471;-1:-1:-1;;;33870:471:0:o;34116:64::-;34191:20;34269:13;;34251:14;34228:20;;:37;;;;:::i;:::-;34214:10;;;;:6;:10;;;;;;:52;;;;:::i;:::-;:68;;;;:::i;:::-;34315:18;;;;:14;:18;;;;;;34191:91;;-1:-1:-1;34300:33:0;;34191:91;34300:33;:::i;25325:290::-;25366:10;25379:34;25399:10;25411:1;25379:19;:34::i;:::-;25432:10;;;;:6;:10;;;;;;25366:47;;-1:-1:-1;25432:10:0;;25424:43;;;;-1:-1:-1;;;25424:43:0;;21835:2:1;25424:43:0;;;21817:21:1;21874:2;21854:18;;;21847:30;-1:-1:-1;;;21893:18:1;;;21886:50;21953:18;;25424:43:0;21633:344:1;25424:43:0;25486:5;;-1:-1:-1;;;;;25486:5:0;:29;25516:11;25524:2;25516:7;:11::i;:::-;25486:42;;-1:-1:-1;;;;;;25486:42:0;;;;;;;-1:-1:-1;;;;;2777:32:1;;;25486:42:0;;;2759:51:1;2732:18;;25486:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25478:100;;;;-1:-1:-1;;;25478:100:0;;22184:2:1;25478:100:0;;;22166:21:1;22223:2;22203:18;;;22196:30;22262:34;22242:18;;;22235:62;-1:-1:-1;;;22313:18:1;;;22306:43;22366:19;;25478:100:0;21982:409:1;29443:215:0;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;29518:5:::1;:28:::0;;-1:-1:-1;;;;;;29518:28:0::1;-1:-1:-1::0;;;;;29518:28:0;::::1;::::0;;::::1;::::0;;;29557:55:::1;::::0;-1:-1:-1;;;29557:55:0;;::::1;::::0;::::1;14845:51:1::0;;;;-1:-1:-1;;14912:18:1;;;14905:34;-1:-1:-1;;;;;;;;;;;15862:42:0;29557:20:::1;::::0;14818:18:1;;29557:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29628:22:0::1;::::0;-1:-1:-1;;;;;2777:32:1;;2759:51;;29628:22:0::1;::::0;2747:2:1;2732:18;29628:22:0::1;2613:203:1::0;6505:88:0;6561:13;6584:7;6577:14;;;;;:::i;23516:289::-;23576:7;23619:14;;;:10;:14;;;;;;23576:7;23664:16;23619:14;23679:1;23664:16;:::i;:::-;23691:23;23746:18;;;:14;:18;;;;;;;;;23717:26;;;:15;:26;;;;;;23644:36;;-1:-1:-1;23691:23:0;;23717:47;;23746:18;23717:47;:::i;25099:218::-;25138:10;25151:34;25171:10;25183:1;25151:19;:34::i;:::-;25205:10;;;;:6;:10;;;;;;25138:47;;-1:-1:-1;25205:10:0;;25204:11;25196:42;;;;-1:-1:-1;;;25196:42:0;;22598:2:1;25196:42:0;;;22580:21:1;22637:2;22617:18;;;22610:30;-1:-1:-1;;;22656:18:1;;;22649:48;22714:18;;25196:42:0;22396:342:1;25196:42:0;25249:5;;:32;;-1:-1:-1;;;25249:32:0;;25270:10;25249:32;;;2759:51:1;-1:-1:-1;;;;;25249:5:0;;;;:20;;2732:18:1;;25249:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25292:10:0;;;;-1:-1:-1;25292:6:0;:10;;;;;:17;;-1:-1:-1;;25292:17:0;25305:4;25292:17;;;25099:218::o;34774:1207::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;34829:14:::1;15956:42;-1:-1:-1::0;;;;;34846:43:0::1;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34829:62;;34902:13;34926::::0;34950:18:::1;34979:22:::0;35012:24:::1;35047:31:::0;15956:42:::1;-1:-1:-1::0;;;;;35081:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35047:60;;35122:9;35118:495;35141:6;35137:1;:10;35118:495;;;35176:14;::::0;-1:-1:-1;;;35176:14:0;;::::1;::::0;::::1;1384:25:1::0;;;15956:42:0::1;::::0;35176:11:::1;::::0;1357:18:1;;35176:14:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35213:17;::::0;-1:-1:-1;;;35213:17:0;;::::1;::::0;::::1;1384:25:1::0;;;35168:22:0;;-1:-1:-1;15956:42:0::1;::::0;35213:14:::1;::::0;1357:18:1;;35213:17:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35258:20;::::0;;;:13:::1;:20;::::0;;;;;;;35310:15;;-1:-1:-1;;;35310:15:0;;::::1;::::0;::::1;1384:25:1::0;;;35258:20:0;;-1:-1:-1;35258:20:0;-1:-1:-1;15956:42:0::1;::::0;35310:12:::1;::::0;1357:18:1;;35310:15:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35293:32;;35340:25;35353:5;35359;35340:12;:25::i;:::-;35380:9;::::0;;;:6:::1;:9;::::0;;;;;;;:16;;-1:-1:-1;;35380:16:0::1;35392:4;35380:16;::::0;;35411:8:::1;:11:::0;;;;;:28;;;35532:13:::1;::::0;35488:40:::1;35425:14:::0;35488:23;:40:::1;:::i;:::-;35474:55;::::0;:10;:55:::1;:::i;:::-;:71;;;;:::i;:::-;35454:91;::::0;;::::1;:::i;:::-;35580:21;::::0;-1:-1:-1;;;35580:21:0;;::::1;::::0;::::1;1384:25:1::0;;;35454:91:0;;-1:-1:-1;15956:42:0::1;::::0;35580:18:::1;::::0;1357::1;;35580:21:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35560:17;::::0;;;:14:::1;:17;::::0;;;;:41;35575:1;35149:3:::1;35575:1:::0;35149:3:::1;:::i;:::-;;;;35118:495;;;;35646:23;35623:20;:46;;;;35680:18;35721:16;15956:42;-1:-1:-1::0;;;;;35701:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;;;:::i;:::-;35756:56;::::0;-1:-1:-1;;;35756:56:0;;35680:57;;-1:-1:-1;;;;;;;;;;;;15862:42:0;35756:17:::1;::::0;:56:::1;::::0;35774:10:::1;::::0;35794:4:::1;::::0;35680:57;;35756:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35748:88;;;;-1:-1:-1::0;;;35748:88:0::1;;;;;;;:::i;:::-;15956:42;-1:-1:-1::0;;;;;35862:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35847:11;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;35913:28:0::1;::::0;-1:-1:-1;;;35913:28:0;;15956:42:::1;35913:28;::::0;::::1;2759:51:1::0;35895:78:0::1;::::0;-1:-1:-1;;;;;;;;;;;15862:42:0;35913:14:::1;::::0;2732:18:1;;35913:28:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35943:11;::::0;;35895:78:::1;::::0;;15152:25:1;;;15193:18;;;15186:34;15236:18;;15229:34;;;15140:2;15125:18;35895:78:0::1;;;;;;;34818:1163;;;;;;;;34774:1207::o:0;20570:1123::-;20627:21;20637:10;20627:9;:21::i;:::-;:26;20619:66;;;;-1:-1:-1;;;20619:66:0;;;;;;;:::i;:::-;20719:15;20704:11;;:30;;20696:60;;;;-1:-1:-1;;;20696:60:0;;23557:2:1;20696:60:0;;;23539:21:1;23596:2;23576:18;;;23569:30;-1:-1:-1;;;23615:18:1;;;23608:47;23672:18;;20696:60:0;23355:341:1;20696:60:0;20800:1;20775:22;;;:15;:22;;;;;;20767:69;;;;-1:-1:-1;;;20767:69:0;;;;;;;:::i;:::-;20847:13;20863:22;;;:15;:22;;;;;;;;20904:51;;-1:-1:-1;;;20904:51:0;;-1:-1:-1;;;;;;;;;;;15862:42:0;20904:17;;:51;;20922:10;;20942:4;;20863:22;;20904:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20896:83;;;;-1:-1:-1;;;20896:83:0;;;;;;;:::i;:::-;21012:5;20990:18;;:27;;;;;;;:::i;:::-;;;;;;;;21028:21;21052:36;21063:10;21075:12;;21052:10;:36::i;:::-;21099:29;;;;:14;:29;;;;;;;;:37;;;21147:10;:25;;;;;:33;;;21191:12;:14;;21028:60;;-1:-1:-1;21191:12:0;:14;;;:::i;:::-;;;;-1:-1:-1;;21216:25:0;;;;:18;:25;;;;;:27;;;;;;:::i;:::-;;;;-1:-1:-1;;21254:22:0;;;;:15;:22;;;;;:24;;;;;;:::i;:::-;;;;;;21289:20;21337:3;21320:14;;21312:5;:22;;;;:::i;:::-;:28;;;;:::i;:::-;21289:51;;21366:12;21351:11;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;21404:20:0;;;;:13;:20;;;;;;21389:11;:35;;21404:20;;21389:11;;:35;;21404:20;;21389:35;:::i;:::-;;;;-1:-1:-1;;21459:20:0;;;;:13;:20;;;;;;;;;21435:21;;;:6;:21;;;;;:44;21516:20;;21490:8;:23;;;;;;:46;-1:-1:-1;;;;;;;;;;;21555:13:0;-1:-1:-1;;;;;;;;;;;21574:20:0;21582:12;21574:5;:20;:::i;:::-;21555:40;;-1:-1:-1;;;;;;21555:40:0;;;;;;;-1:-1:-1;;;;;14863:32:1;;;21555:40:0;;;14845:51:1;14912:18;;;14905:34;14818:18;;21555:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21547:72;;;;-1:-1:-1;;;21547:72:0;;;;;;;:::i;:::-;21635:50;;;21144:25:1;;;21200:2;21185:18;;21178:34;;;21657:13:0;;21645:10;;21635:50;;21117:18:1;21635:50:0;;;;;;;;20608:1085;;;20570:1123;:::o;19970:72::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;20027:7:::1;:13;20037:3:::0;20027:7;:13:::1;:::i;:::-;;19970:72:::0;:::o;7561:137::-;7646:50;7665:10;7677:8;7687;7646:18;:50::i;22448:1060::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;22537:13:::1;22547:2;22537:9;:13::i;:::-;:18:::0;22529:58:::1;;;;-1:-1:-1::0;;;22529:58:0::1;;;;;;;:::i;:::-;22631:1;22606:22:::0;;;:15:::1;:22;::::0;;;;;22598:69:::1;;;;-1:-1:-1::0;;;22598:69:0::1;;;;;;;:::i;:::-;22678:13;22694:22:::0;;;:15:::1;:22;::::0;;;;;;;22735:51;;-1:-1:-1;;;22735:51:0;;-1:-1:-1;;;;;;;;;;;15862:42:0;22735:17:::1;::::0;:51:::1;::::0;22753:10:::1;::::0;22773:4:::1;::::0;22694:22;;22735:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22727:83;;;;-1:-1:-1::0;;;22727:83:0::1;;;;;;;:::i;:::-;22843:5;22821:18;;:27;;;;;;;:::i;:::-;;;;;;;;22859:21;22883:28;22894:2;22898:12;;22883:10;:28::i;:::-;22922:29;::::0;;;:14:::1;:29;::::0;;;;;;;:37;;;22970:10:::1;:25:::0;;;;;:33;;;23014:12:::1;:14:::0;;22859:52;;-1:-1:-1;23014:12:0;:14:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;23039:25:0::1;::::0;;;:18:::1;:25;::::0;;;;:27;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;23077:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:24;;;::::1;::::0;::::1;:::i;:::-;;;;;;23112:20;23160:3;23143:14;;23135:5;:22;;;;:::i;:::-;:28;;;;:::i;:::-;23112:51;;23189:12;23174:11;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23227:20:0::1;::::0;;;:13:::1;:20;::::0;;;;;23212:11:::1;:35:::0;;23227:20;;23212:11;;:35:::1;::::0;23227:20;;23212:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;23282:20:0::1;::::0;;;:13:::1;:20;::::0;;;;;;;;23258:21;;;:6:::1;:21:::0;;;;;:44;23339:20:::1;::::0;23313:8:::1;:23:::0;;;;;;:46;-1:-1:-1;;;;;;;;;;;23378:13:0::1;-1:-1:-1::0;;;;;;;;;;;23397:20:0::1;23405:12:::0;23397:5;:20:::1;:::i;:::-;23378:40;::::0;-1:-1:-1;;;;;;23378:40:0::1;::::0;;;;;;-1:-1:-1;;;;;14863:32:1;;;23378:40:0::1;::::0;::::1;14845:51:1::0;14912:18;;;14905:34;14818:18;;23378:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23370:72;;;;-1:-1:-1::0;;;23370:72:0::1;;;;;;;:::i;:::-;23458:42;::::0;;21144:25:1;;;21200:2;21185:18;;21178:34;;;23472:13:0;;-1:-1:-1;;;;;23458:42:0;::::1;::::0;::::1;::::0;21117:18:1;23458:42:0::1;20970:248:1::0;8249:277:0;8380:39;8399:10;8411:7;8380:18;:39::i;:::-;8372:97;;;;-1:-1:-1;;;8372:97:0;;;;;;;:::i;:::-;8480:38;8494:4;8500:2;8504:7;8513:4;8480:13;:38::i;:::-;8249:277;;;;:::o;19805:159::-;19870:13;19917:7;19926:18;:7;:16;:18::i;:::-;19946:14;19900:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19886:76;;19805:159;;;:::o;26371:796::-;26467:15;26443:5;26449;26443:12;;;;;;;;:::i;:::-;;;;;;;;;;;:20;;;:39;;26435:66;;;;-1:-1:-1;;;26435:66:0;;25104:2:1;26435:66:0;;;25086:21:1;25143:2;25123:18;;;25116:30;-1:-1:-1;;;25162:18:1;;;25155:44;25216:18;;26435:66:0;24902:338:1;26435:66:0;26515:21;26525:10;26515:9;:21::i;:::-;26540:1;26515:26;26512:38;;26371:796;;:::o;26512:38::-;26568:10;26581:34;26601:10;26613:1;26581:19;:34::i;:::-;26626:13;26642:14;;;:10;:14;;;;;;;;;26692:19;;;:12;:19;;;;;;26568:47;;-1:-1:-1;26642:14:0;26692:19;26725;;;26722:31;;26746:7;;;26371:796;;:::o;26722:31::-;26766:12;;;;:8;:12;;;;;;;;:19;;;;;;;;;;;26763:197;;;26805:18;;;;:14;:18;;;;;;;;:25;;;;;;;;;;;26802:64;;;26852:14;26832:5;26838;26832:12;;;;;;;;:::i;:::-;;;;;;;;;;;:16;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;26802:64:0;26885:18;;;;:14;:18;;;;;;;;:25;;;;;;;;;;;26881:64;;26931:14;26912:5;26918;26912:12;;;;;;;;:::i;:::-;;;;;;;;;;;:15;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;26881:64:0;26973:8;26970:47;;;27003:14;26983:5;26989;26983:12;;;;;;;;:::i;:::-;;;;;;;;;;;:16;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;26970:47:0;27032:8;27028:47;;27061:14;27042:5;27048;27042:12;;;;;;;;:::i;:::-;;;;;;;;;;;:15;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;27028:47:0;-1:-1:-1;;27086:18:0;;;;:14;:18;;;;;;;;:25;;;;;;;;:36;;;;;-1:-1:-1;;27086:36:0;;;;;;27133:12;;;:8;:12;;;;;:19;;;;;;;;;;:26;;;;;27086:36;27133:26;;;26371:796::o;30478:342::-;30562:10;30547:11;30555:2;30547:7;:11::i;:::-;-1:-1:-1;;;;;30547:25:0;;30539:85;;;;-1:-1:-1;;;30539:85:0;;25447:2:1;30539:85:0;;;25429:21:1;25486:2;25466:18;;;25459:30;25525:34;25505:18;;;25498:62;-1:-1:-1;;;25576:18:1;;;25569:45;25631:19;;30539:85:0;25245:411:1;30539:85:0;30644:10;;;;:6;:10;;;;;;;;30643:11;30635:37;;;;-1:-1:-1;;;30635:37:0;;25863:2:1;30635:37:0;;;25845:21:1;25902:2;25882:18;;;25875:30;-1:-1:-1;;;25921:18:1;;;25914:43;25974:18;;30635:37:0;25661:337:1;30635:37:0;30683:13;;;;:9;:13;;;;;;;;:20;;-1:-1:-1;;30683:20:0;30699:4;30683:20;;;30714:9;:13;;;;;:21;;;30746:17;30693:2;31044:11;:18;;31011:30;;;;:17;:30;;;;;:51;;;31073:29;;;;;;;;;;;;30947:163;30746:17;30779:33;;;30790:10;26205:51:1;;26287:2;26272:18;;26265:34;;;26315:18;;;26308:34;;;30779:33:0;;26193:2:1;26178:18;30779:33:0;26003:345:1;30040:430:0;30085:14;30102:11;30110:2;30102:7;:11::i;:::-;30124:13;30140;;;:9;:13;;;;;;;;;30172:9;:13;;;;;;;30085:28;;-1:-1:-1;30140:13:0;30172;;30164:50;;;;-1:-1:-1;;;30164:50:0;;26555:2:1;30164:50:0;;;26537:21:1;26594:2;26574:18;;;26567:30;26633:26;26613:18;;;26606:54;26677:18;;30164:50:0;26353:348:1;30164:50:0;30233:44;;-1:-1:-1;;;30233:44:0;;-1:-1:-1;;;;;;;;;;;15862:42:0;30233:17;;:44;;30251:10;;30263:6;;30271:5;;30233:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30225:76;;;;-1:-1:-1;;;30225:76:0;;;;;;;:::i;:::-;30328:5;30312:13;;;:9;:13;;;;;:21;;-1:-1:-1;;30312:21:0;;;30344:20;30322:2;30344:16;:20::i;:::-;30375:33;30385:6;30393:10;30405:2;30375:9;:33::i;:::-;30424:38;;;-1:-1:-1;;;;;26993:15:1;;26975:34;;30440:10:0;27040:2:1;27025:18;;27018:43;27077:18;;;27070:34;;;27135:2;27120:18;;27113:34;;;30424:38:0;;26924:3:1;26909:19;30424:38:0;26706:447:1;7704:148:0;-1:-1:-1;;;;;7815:25:0;;;7801:4;7815:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;7704:148::o;34349:214::-;34406:7;34429:19;34439:8;34429:9;:19::i;:::-;34452:1;34429:24;34426:37;;-1:-1:-1;34462:1:0;;34349:214;-1:-1:-1;34349:214:0:o;34426:37::-;34482:10;34495:32;34515:8;34525:1;34495:19;:32::i;:::-;34545:10;;;;:6;:10;;;;;;;34349:214;-1:-1:-1;;;34349:214:0:o;28766:318::-;28825:7;28848:19;28858:8;28848:9;:19::i;:::-;28871:1;28848:24;28845:37;;-1:-1:-1;28881:1:0;;28766:318;-1:-1:-1;28766:318:0:o;28845:37::-;28901:10;28914:32;28934:8;28944:1;28914:19;:32::i;:::-;28957:13;28973:14;;;:10;:14;;;;;;;;;29015:6;:10;;;;;;28901:45;;-1:-1:-1;28973:14:0;29015:10;;:37;;29051:1;29015:37;;;-1:-1:-1;29028:20:0;;;;:13;:20;;;;;;;28998:54;-1:-1:-1;;;28766:318:0:o;27705:716::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;27863:21:::1;::::0;;;:14:::1;:21;::::0;;;;;27851:33;::::1;27848:178;;;27901:22;27938:21:::0;;;:14:::1;:21;::::0;;;;;27926:33:::1;::::0;:9;:33:::1;:::i;:::-;27901:58;;28000:14;27974:15;:22;27990:5;27974:22;;;;;;;;;;;;:40;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;27848:178:0::1;28053:21;::::0;;;:14:::1;:21;::::0;;;;;28041:33;::::1;28038:166;;;28091:16;28110:21:::0;;;:14:::1;:21;::::0;;;;;:33:::1;::::0;28134:9;;28110:33:::1;:::i;:::-;28091:52;;28184:8;28158:15;:22;28174:5;28158:22;;;;;;;;;;;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;28038:166:0::1;28241:15;:5:::0;28249:7:::1;28241:15;:::i;:::-;28216:22;::::0;;;:15:::1;:22;::::0;;;;;;;:40;;;;28267:14:::1;:21:::0;;;;;:33;;;;28311:10:::1;:17:::0;;;;;:23;;;;28345:12:::1;:19:::0;;;;;:28;;;;28384:13:::1;:20:::0;;;;;;:29;;;;-1:-1:-1;27705:716:0:o;20045:85::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;20108:14:::1;:20;20125:3:::0;20108:14;:20:::1;:::i;29092:173::-:0;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;29181:21:::1;::::0;;;:14:::1;:21;::::0;;;;:32;;29206:7;;29181:21;:32:::1;::::0;29206:7;;29181:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;29224:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:33;;29250:7;;29224:22;:33:::1;::::0;29250:7;;29224:33:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;29092:173:0:o;21701:739::-;18006:10;-1:-1:-1;;;;;;;;;;;18006:17:0;17998:54;;;;-1:-1:-1;;;17998:54:0;;;;;;;:::i;:::-;21784:13:::1;21794:2;21784:9;:13::i;:::-;:18:::0;21776:58:::1;;;;-1:-1:-1::0;;;21776:58:0::1;;;;;;;:::i;:::-;21878:1;21853:22:::0;;;:15:::1;:22;::::0;;;;;21845:69:::1;;;;-1:-1:-1::0;;;21845:69:0::1;;;;;;;:::i;:::-;21925:13;21941:22:::0;;;:15:::1;:22;::::0;;;;;22013:12:::1;::::0;21941:22;;21925:13;21998:28:::1;::::0;22009:2;;21998:10:::1;:28::i;:::-;22037:29;::::0;;;:14:::1;:29;::::0;;;;;;;:37;;;22085:10:::1;:25:::0;;;;;:33;;;22129:12:::1;:14:::0;;21974:52;;-1:-1:-1;22129:12:0;:14:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;22154:25:0::1;::::0;;;:18:::1;:25;::::0;;;;:27;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;22192:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:24;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;22242:20:0::1;::::0;;;:13:::1;:20;::::0;;;;;22227:11:::1;:35:::0;;22242:20;;22227:11;;:35:::1;::::0;22242:20;;22227:35:::1;:::i;:::-;::::0;;;-1:-1:-1;;22297:20:0::1;::::0;;;:13:::1;:20;::::0;;;;;;;;22273:21;;;:6:::1;:21:::0;;;;;:44;22354:20:::1;::::0;22328:8:::1;:23:::0;;;;;;:46;;;;22390:42;;21144:25:1;;;21185:18;;;21178:34;;;22273:21:0;;-1:-1:-1;;;;;22390:42:0;::::1;::::0;::::1;::::0;21117:18:1;22390:42:0::1;20970:248:1::0;12218:224:0;12320:4;-1:-1:-1;;;;;;12344:50:0;;-1:-1:-1;;;12344:50:0;;:90;;;12398:36;12422:11;12398:23;:36::i;11060:135::-;8873:4;8887:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8887:16:0;11134:53;;;;-1:-1:-1;;;11134:53:0;;20819:2:1;11134:53:0;;;20801:21:1;20858:2;20838:18;;;20831:30;-1:-1:-1;;;20877:18:1;;;20870:54;20941:18;;11134:53:0;20617:348:1;10593:174:0;10668:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;10668:29:0;-1:-1:-1;;;;;10668:29:0;;;;;;;;:24;;10722:23;10668:24;10722:14;:23::i;:::-;-1:-1:-1;;;;;10713:46:0;;;;;;;;;;;10593:174;;:::o;32794:609::-;32851:19;32861:8;32851:9;:19::i;:::-;32874:1;32851:24;32848:36;;32794:609;:::o;32848:36::-;32902:10;32915:32;32935:8;32945:1;32915:19;:32::i;:::-;32958:22;32983:12;;;:8;:12;;;;;;;;;33050:6;:10;;;;;;;33027:20;;32902:45;;-1:-1:-1;32983:12:0;;33027:33;;33050:10;33027:33;:::i;:::-;33009:14;:51;33006:63;;33062:7;;32794:609;:::o;33006:63::-;33079:20;33157:13;;33139:14;33116:20;;:37;;;;:::i;:::-;33102:10;;;;:6;:10;;;;;;:52;;;;:::i;:::-;:68;;;;:::i;:::-;33079:91;;33203:12;33181:14;:18;33196:2;33181:18;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;33241:20:0;;33226:12;;;;:8;:12;;;;;;;:35;;;;33280:37;-1:-1:-1;;;33280:37:0;;-1:-1:-1;;;;;14863:32:1;;33280:37:0;;;14845:51:1;14912:18;;;14905:34;;;-1:-1:-1;;;;;;;;;;;15862:42:0;33280:13;;14818:18:1;;33280:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33272:69;;;;-1:-1:-1;;;33272:69:0;;;;;;;:::i;:::-;33357:38;;;-1:-1:-1;;;;;14863:32:1;;14845:51;;14927:2;14912:18;;14905:34;;;33357:38:0;;14818:18:1;33357:38:0;;;;;;;32837:566;;;32794:609;:::o;8925:264::-;9018:4;9035:13;9051:23;9066:7;9051:14;:23::i;:::-;9035:39;;9104:5;-1:-1:-1;;;;;9093:16:0;:7;-1:-1:-1;;;;;9093:16:0;;:52;;;;9113:32;9130:5;9137:7;9113:16;:32::i;:::-;9093:87;;;;9173:7;-1:-1:-1;;;;;9149:31:0;:20;9161:7;9149:11;:20::i;:::-;-1:-1:-1;;;;;9149:31:0;;9093:87;9085:96;8925:264;-1:-1:-1;;;;8925:264:0:o;20136:275::-;20235:15;;;;:6;:15;;;;;;;;20234:16;20226:42;;;;-1:-1:-1;;;20226:42:0;;25863:2:1;20226:42:0;;;25845:21:1;25902:2;25882:18;;;25875:30;-1:-1:-1;;;25921:18:1;;;25914:43;25974:18;;20226:42:0;25661:337:1;20226:42:0;20279:12;20286:4;20279:6;:12::i;:::-;20310:13;20320:2;20310:9;:13::i;:::-;:18;20302:58;;;;-1:-1:-1;;;20302:58:0;;;;;;;:::i;:::-;20371:32;20387:4;20392:2;20395:7;20371:15;:32::i;20419:143::-;20488:7;20508:20;20514:3;20519:8;20508:5;:20::i;:::-;-1:-1:-1;20546:8:0;20419:143;-1:-1:-1;20419:143:0:o;10773:281::-;10894:8;-1:-1:-1;;;;;10885:17:0;:5;-1:-1:-1;;;;;10885:17:0;;10877:55;;;;-1:-1:-1;;;10877:55:0;;27360:2:1;10877:55:0;;;27342:21:1;27399:2;27379:18;;;27372:30;27438:27;27418:18;;;27411:55;27483:18;;10877:55:0;27158:349:1;10877:55:0;-1:-1:-1;;;;;10943:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;10943:46:0;;;;;;;;;;11005:41;;540::1;;;11005::0;;513:18:1;11005:41:0;;;;;;;10773:281;;;:::o;8532:270::-;8645:28;8655:4;8661:2;8665:7;8645:9;:28::i;:::-;8692:47;8715:4;8721:2;8725:7;8734:4;8692:22;:47::i;:::-;8684:110;;;;-1:-1:-1;;;8684:110:0;;;;;;;:::i;4639:507::-;4695:13;4725:5;4734:1;4725:10;4721:27;;-1:-1:-1;;4738:10:0;;;;;;;;;;;;-1:-1:-1;;;4738:10:0;;;;;4639:507::o;4721:27::-;4774:5;4759:12;4815:78;4822:9;;4815:78;;4848:8;;;;:::i;:::-;;-1:-1:-1;4871:10:0;;-1:-1:-1;4879:2:0;4871:10;;:::i;:::-;;;4815:78;;;4903:19;4935:6;4925:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4925:17:0;;4903:39;;4953:154;4960:10;;4953:154;;4987:11;4997:1;4987:11;;:::i;:::-;;-1:-1:-1;5056:10:0;5064:2;5056:5;:10;:::i;:::-;5043:24;;:2;:24;:::i;:::-;5030:39;;5013:6;5020;5013:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5013:56:0;;;;;;;;-1:-1:-1;5084:11:0;5093:2;5084:11;;:::i;:::-;;;4953:154;;31118:282;31231:11;31243:18;;:22;;31264:1;;31243:22;:::i;:::-;31231:35;;;;;;;;:::i;:::-;;;;;;;;;31185:11;31197:17;:30;31215:11;31197:30;;;;;;;;;;;;31185:43;;;;;;;;:::i;:::-;;;;;;;;:81;;;;31334:17;:30;31352:11;31334:30;;;;;;;;;;;;31277:17;:54;31295:11;31328:1;31307:11;:18;;;;:22;;;;:::i;:::-;31295:35;;;;;;;;:::i;:::-;;;;;;;;;31277:54;;;;;;;;;;;:87;;;;31375:11;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;31118:282;:::o;5696:266::-;5798:4;-1:-1:-1;;;;;;5822:40:0;;-1:-1:-1;;;5822:40:0;;:92;;-1:-1:-1;;;;;;;5866:48:0;;-1:-1:-1;;;5866:48:0;5822:92;:132;;;-1:-1:-1;;;;;;;2212:33:0;;2198:4;2212:33;;;;;;;;;;;;;5918:36;2113:134;10187:400;10312:4;-1:-1:-1;;;;;10285:31:0;:23;10300:7;10285:14;:23::i;:::-;-1:-1:-1;;;;;10285:31:0;;10277:81;;;;-1:-1:-1;;;10277:81:0;;28382:2:1;10277:81:0;;;28364:21:1;28421:2;28401:18;;;28394:30;28460:34;28440:18;;;28433:62;-1:-1:-1;;;28511:18:1;;;28504:35;28556:19;;10277:81:0;28180:401:1;10277:81:0;10369:39;10390:4;10396:2;10400:7;10369:20;:39::i;:::-;10426:24;;;;:15;:24;;;;;;;;10419:31;;-1:-1:-1;;;;;;10419:31:0;;;-1:-1:-1;;;;;10461:15:0;;;;:9;:15;;;;;:17;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;10489:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;10515:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10515:21:0;-1:-1:-1;;;;;10515:21:0;;;;;;;;;10552:27;;10515:16;;10552:27;;;;;;;10187:400;;;:::o;9548:301::-;8873:4;8887:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8887:16:0;:30;9620:58;;;;-1:-1:-1;;;9620:58:0;;28788:2:1;9620:58:0;;;28770:21:1;28827:2;28807:18;;;28800:30;28866;28846:18;;;28839:58;28914:18;;9620:58:0;28586:352:1;9620:58:0;9689:45;9718:1;9722:2;9726:7;9689:20;:45::i;:::-;-1:-1:-1;;;;;9745:13:0;;;;;;:9;:13;;;;;:15;;;;;;:::i;:::-;;;;-1:-1:-1;;9771:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9771:21:0;-1:-1:-1;;;;;9771:21:0;;;;;;;;9808:33;;9771:16;;;9808:33;;9771:16;;9808:33;9548:301;;:::o;11201:611::-;11312:4;11333:15;:2;-1:-1:-1;;;;;11333:13:0;;:15::i;:::-;11329:475;;;11369:69;;-1:-1:-1;;;11369:69:0;;-1:-1:-1;;;;;11369:36:0;;;;;:69;;11406:10;;11418:4;;11424:7;;11433:4;;11369:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11369:69:0;;;;;;;;-1:-1:-1;;11369:69:0;;;;;;;;;;;;:::i;:::-;;;11365:411;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11608:6;:13;11625:1;11608:18;11604:157;;11628:60;;-1:-1:-1;;;11628:60:0;;;;;;;:::i;11604:157::-;11752:6;11746:13;11737:6;11733:2;11729:15;11722:38;11365:411;-1:-1:-1;;;;;;11489:51:0;-1:-1:-1;;;11489:51:0;;-1:-1:-1;11482:58:0;;11329:475;-1:-1:-1;11800:4:0;11201:611;;;;;;:::o;19475:164::-;19592:45;19619:4;19625:2;19629:7;19592:26;:45::i;1470:307::-;1530:4;1686:20;;1586:66;1726:23;;;;;;:42;;-1:-1:-1;;1753:15:0;;;1718:51;-1:-1:-1;;1470:307:0:o;13060:467::-;-1:-1:-1;;;;;13230:18:0;;13226:143;;13250:40;13282:7;13868:10;:17;;13841:24;;;;:15;:24;;;;;:44;;;13896:24;;;;;;;;;;;;13764:164;13250:40;13226:143;;;13318:2;-1:-1:-1;;;;;13310:10:0;:4;-1:-1:-1;;;;;13310:10:0;;13306:63;;13322:47;13355:4;13361:7;13322:32;:47::i;:::-;-1:-1:-1;;;;;13384:16:0;;13380:139;;13402:45;13439:7;13402:36;:45::i;13380:139::-;13473:4;-1:-1:-1;;;;;13467:10:0;:2;-1:-1:-1;;;;;13467:10:0;;13463:56;;13479:40;13507:2;13511:7;13479:27;:40::i;13936:549::-;14028:22;14078:1;14053:22;14070:4;14053:16;:22::i;:::-;:26;;;;:::i;:::-;14090:18;14111:26;;;:17;:26;;;;;;14028:51;;-1:-1:-1;14152:28:0;;;14148:234;;-1:-1:-1;;;;;14219:18:0;;14197:19;14219:18;;;:12;:18;;;;;;;;:34;;;;;;;;;14268:30;;;;;;:44;;;14327:30;;:17;:30;;;;;:43;;;14148:234;-1:-1:-1;14399:26:0;;;;:17;:26;;;;;;;;14392:33;;;-1:-1:-1;;;;;14443:18:0;;;;;:12;:18;;;;;:34;;;;;;;14436:41;13936:549::o;14493:367::-;14600:10;:17;14575:22;;14600:21;;14620:1;;14600:21;:::i;:::-;14632:18;14653:24;;;:15;:24;;;;;;14710:10;:26;;14575:46;;-1:-1:-1;14653:24:0;;14575:46;;14710:26;;;;;;:::i;:::-;;;;;;;;;14688:48;;14772:11;14747:10;14758;14747:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;14801:24;;;:15;:24;;;;;;14794:31;14836:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14564:296;;;14493:367;:::o;13535:221::-;13620:14;13637:20;13654:2;13637:16;:20::i;:::-;-1:-1:-1;;;;;13668:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;13713:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;13535:221:0:o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;:::-;384:5;150:245;-1:-1:-1;;;150:245:1:o;592:131::-;-1:-1:-1;;;;;667:31:1;;657:42;;647:70;;713:1;710;703:12;728:118;814:5;807:13;800:21;793:5;790:32;780:60;;836:1;833;826:12;851:382;916:6;924;977:2;965:9;956:7;952:23;948:32;945:52;;;993:1;990;983:12;945:52;1032:9;1019:23;1051:31;1076:5;1051:31;:::i;:::-;1101:5;-1:-1:-1;1158:2:1;1143:18;;1130:32;1171:30;1130:32;1171:30;:::i;:::-;1220:7;1210:17;;;851:382;;;;;:::o;1420:250::-;1505:1;1515:113;1529:6;1526:1;1523:13;1515:113;;;1605:11;;;1599:18;1586:11;;;1579:39;1551:2;1544:10;1515:113;;;-1:-1:-1;;1662:1:1;1644:16;;1637:27;1420:250::o;1675:271::-;1717:3;1755:5;1749:12;1782:6;1777:3;1770:19;1798:76;1867:6;1860:4;1855:3;1851:14;1844:4;1837:5;1833:16;1798:76;:::i;:::-;1928:2;1907:15;-1:-1:-1;;1903:29:1;1894:39;;;;1935:4;1890:50;;1675:271;-1:-1:-1;;1675:271:1:o;1951:220::-;2100:2;2089:9;2082:21;2063:4;2120:45;2161:2;2150:9;2146:18;2138:6;2120:45;:::i;2176:247::-;2235:6;2288:2;2276:9;2267:7;2263:23;2259:32;2256:52;;;2304:1;2301;2294:12;2256:52;2343:9;2330:23;2362:31;2387:5;2362:31;:::i;2428:180::-;2487:6;2540:2;2528:9;2519:7;2515:23;2511:32;2508:52;;;2556:1;2553;2546:12;2508:52;-1:-1:-1;2579:23:1;;2428:180;-1:-1:-1;2428:180:1:o;2821:315::-;2889:6;2897;2950:2;2938:9;2929:7;2925:23;2921:32;2918:52;;;2966:1;2963;2956:12;2918:52;3005:9;2992:23;3024:31;3049:5;3024:31;:::i;:::-;3074:5;3126:2;3111:18;;;;3098:32;;-1:-1:-1;;;2821:315:1:o;3141:456::-;3218:6;3226;3234;3287:2;3275:9;3266:7;3262:23;3258:32;3255:52;;;3303:1;3300;3293:12;3255:52;3342:9;3329:23;3361:31;3386:5;3361:31;:::i;:::-;3411:5;-1:-1:-1;3468:2:1;3453:18;;3440:32;3481:33;3440:32;3481:33;:::i;:::-;3141:456;;3533:7;;-1:-1:-1;;;3587:2:1;3572:18;;;;3559:32;;3141:456::o;3829:632::-;4000:2;4052:21;;;4122:13;;4025:18;;;4144:22;;;3971:4;;4000:2;4223:15;;;;4197:2;4182:18;;;3971:4;4266:169;4280:6;4277:1;4274:13;4266:169;;;4341:13;;4329:26;;4410:15;;;;4375:12;;;;4302:1;4295:9;4266:169;;;-1:-1:-1;4452:3:1;;3829:632;-1:-1:-1;;;;;;3829:632:1:o;4466:592::-;4579:6;4587;4595;4603;4611;4619;4627;4680:3;4668:9;4659:7;4655:23;4651:33;4648:53;;;4697:1;4694;4687:12;4648:53;-1:-1:-1;;4720:23:1;;;4790:2;4775:18;;4762:32;;-1:-1:-1;4841:2:1;4826:18;;4813:32;;4892:2;4877:18;;4864:32;;-1:-1:-1;4943:3:1;4928:19;;4915:33;;-1:-1:-1;4995:3:1;4980:19;;4967:33;;-1:-1:-1;5047:3:1;5032:19;5019:33;;-1:-1:-1;4466:592:1;-1:-1:-1;4466:592:1:o;5285:127::-;5346:10;5341:3;5337:20;5334:1;5327:31;5377:4;5374:1;5367:15;5401:4;5398:1;5391:15;5417:632;5482:5;5512:18;5553:2;5545:6;5542:14;5539:40;;;5559:18;;:::i;:::-;5634:2;5628:9;5602:2;5688:15;;-1:-1:-1;;5684:24:1;;;5710:2;5680:33;5676:42;5664:55;;;5734:18;;;5754:22;;;5731:46;5728:72;;;5780:18;;:::i;:::-;5820:10;5816:2;5809:22;5849:6;5840:15;;5879:6;5871;5864:22;5919:3;5910:6;5905:3;5901:16;5898:25;5895:45;;;5936:1;5933;5926:12;5895:45;5986:6;5981:3;5974:4;5966:6;5962:17;5949:44;6041:1;6034:4;6025:6;6017;6013:19;6009:30;6002:41;;;;5417:632;;;;;:::o;6054:222::-;6097:5;6150:3;6143:4;6135:6;6131:17;6127:27;6117:55;;6168:1;6165;6158:12;6117:55;6190:80;6266:3;6257:6;6244:20;6237:4;6229:6;6225:17;6190:80;:::i;6281:390::-;6359:6;6367;6420:2;6408:9;6399:7;6395:23;6391:32;6388:52;;;6436:1;6433;6426:12;6388:52;6476:9;6463:23;6509:18;6501:6;6498:30;6495:50;;;6541:1;6538;6531:12;6495:50;6564;6606:7;6597:6;6586:9;6582:22;6564:50;:::i;:::-;6554:60;6661:2;6646:18;;;;6633:32;;-1:-1:-1;;;;6281:390:1:o;6676:435::-;6909:6;6898:9;6891:25;6952:6;6947:2;6936:9;6932:18;6925:34;6995:3;6990:2;6979:9;6975:18;6968:31;6872:4;7016:46;7057:3;7046:9;7042:19;7034:6;7016:46;:::i;:::-;7008:54;;7098:6;7093:2;7082:9;7078:18;7071:34;6676:435;;;;;;;:::o;7116:248::-;7184:6;7192;7245:2;7233:9;7224:7;7220:23;7216:32;7213:52;;;7261:1;7258;7251:12;7213:52;-1:-1:-1;;7284:23:1;;;7354:2;7339:18;;;7326:32;;-1:-1:-1;7116:248:1:o;7369:322::-;7438:6;7491:2;7479:9;7470:7;7466:23;7462:32;7459:52;;;7507:1;7504;7497:12;7459:52;7547:9;7534:23;7580:18;7572:6;7569:30;7566:50;;;7612:1;7609;7602:12;7566:50;7635;7677:7;7668:6;7657:9;7653:22;7635:50;:::i;7696:795::-;7791:6;7799;7807;7815;7868:3;7856:9;7847:7;7843:23;7839:33;7836:53;;;7885:1;7882;7875:12;7836:53;7924:9;7911:23;7943:31;7968:5;7943:31;:::i;:::-;7993:5;-1:-1:-1;8050:2:1;8035:18;;8022:32;8063:33;8022:32;8063:33;:::i;:::-;8115:7;-1:-1:-1;8169:2:1;8154:18;;8141:32;;-1:-1:-1;8224:2:1;8209:18;;8196:32;8251:18;8240:30;;8237:50;;;8283:1;8280;8273:12;8237:50;8306:22;;8359:4;8351:13;;8347:27;-1:-1:-1;8337:55:1;;8388:1;8385;8378:12;8337:55;8411:74;8477:7;8472:2;8459:16;8454:2;8450;8446:11;8411:74;:::i;:::-;8401:84;;;7696:795;;;;;;;:::o;8496:309::-;8561:6;8569;8622:2;8610:9;8601:7;8597:23;8593:32;8590:52;;;8638:1;8635;8628:12;8590:52;8674:9;8661:23;8651:33;;8734:2;8723:9;8719:18;8706:32;8747:28;8769:5;8747:28;:::i;8810:388::-;8878:6;8886;8939:2;8927:9;8918:7;8914:23;8910:32;8907:52;;;8955:1;8952;8945:12;8907:52;8994:9;8981:23;9013:31;9038:5;9013:31;:::i;:::-;9063:5;-1:-1:-1;9120:2:1;9105:18;;9092:32;9133:33;9092:32;9133:33;:::i;9203:523::-;9307:6;9315;9323;9331;9339;9347;9400:3;9388:9;9379:7;9375:23;9371:33;9368:53;;;9417:1;9414;9407:12;9368:53;-1:-1:-1;;9440:23:1;;;9510:2;9495:18;;9482:32;;-1:-1:-1;9561:2:1;9546:18;;9533:32;;9612:2;9597:18;;9584:32;;-1:-1:-1;9663:3:1;9648:19;;9635:33;;-1:-1:-1;9715:3:1;9700:19;9687:33;;-1:-1:-1;9203:523:1;-1:-1:-1;9203:523:1:o;9954:348::-;10156:2;10138:21;;;10195:2;10175:18;;;10168:30;10234:26;10229:2;10214:18;;10207:54;10293:2;10278:18;;9954:348::o;10596:380::-;10675:1;10671:12;;;;10718;;;10739:61;;10793:4;10785:6;10781:17;10771:27;;10739:61;10846:2;10838:6;10835:14;10815:18;10812:38;10809:161;;10892:10;10887:3;10883:20;10880:1;10873:31;10927:4;10924:1;10917:15;10955:4;10952:1;10945:15;12227:127;12288:10;12283:3;12279:20;12276:1;12269:31;12319:4;12316:1;12309:15;12343:4;12340:1;12333:15;12359:125;12424:9;;;12445:10;;;12442:36;;;12458:18;;:::i;12489:128::-;12556:9;;;12577:11;;;12574:37;;;12591:18;;:::i;12622:354::-;12824:2;12806:21;;;12863:2;12843:18;;;12836:30;12902:32;12897:2;12882:18;;12875:60;12967:2;12952:18;;12622:354::o;12981:375::-;-1:-1:-1;;;;;13239:15:1;;;13221:34;;13291:15;;;;13286:2;13271:18;;13264:43;13338:2;13323:18;;13316:34;;;;13171:2;13156:18;;12981:375::o;13361:245::-;13428:6;13481:2;13469:9;13460:7;13456:23;13452:32;13449:52;;;13497:1;13494;13487:12;13449:52;13529:9;13523:16;13548:28;13570:5;13548:28;:::i;13611:344::-;13813:2;13795:21;;;13852:2;13832:18;;;13825:30;-1:-1:-1;;;13886:2:1;13871:18;;13864:50;13946:2;13931:18;;13611:344::o;13960:135::-;13999:3;14020:17;;;14017:43;;14040:18;;:::i;:::-;-1:-1:-1;14087:1:1;14076:13;;13960:135::o;14100:136::-;14139:3;14167:5;14157:39;;14176:18;;:::i;:::-;-1:-1:-1;;;14212:18:1;;14100:136::o;14241:168::-;14281:7;14347:1;14343;14339:6;14335:14;14332:1;14329:21;14324:1;14317:9;14310:17;14306:45;14303:71;;;14354:18;;:::i;:::-;-1:-1:-1;14394:9:1;;14241:168::o;14414:127::-;14475:10;14470:3;14466:20;14463:1;14456:31;14506:4;14503:1;14496:15;14530:4;14527:1;14520:15;14546:120;14586:1;14612;14602:35;;14617:18;;:::i;:::-;-1:-1:-1;14651:9:1;;14546:120::o;15623:409::-;15825:2;15807:21;;;15864:2;15844:18;;;15837:30;15903:34;15898:2;15883:18;;15876:62;-1:-1:-1;;;15969:2:1;15954:18;;15947:43;16022:3;16007:19;;15623:409::o;16037:184::-;16107:6;16160:2;16148:9;16139:7;16135:23;16131:32;16128:52;;;16176:1;16173;16166:12;16128:52;-1:-1:-1;16199:16:1;;16037:184;-1:-1:-1;16037:184:1:o;17447:545::-;17549:2;17544:3;17541:11;17538:448;;;17585:1;17610:5;17606:2;17599:17;17655:4;17651:2;17641:19;17725:2;17713:10;17709:19;17706:1;17702:27;17696:4;17692:38;17761:4;17749:10;17746:20;17743:47;;;-1:-1:-1;17784:4:1;17743:47;17839:2;17834:3;17830:12;17827:1;17823:20;17817:4;17813:31;17803:41;;17894:82;17912:2;17905:5;17902:13;17894:82;;;17957:17;;;17938:1;17927:13;17894:82;;;17898:3;;;17447:545;;;:::o;18168:1352::-;18294:3;18288:10;18321:18;18313:6;18310:30;18307:56;;;18343:18;;:::i;:::-;18372:97;18462:6;18422:38;18454:4;18448:11;18422:38;:::i;:::-;18416:4;18372:97;:::i;:::-;18524:4;;18588:2;18577:14;;18605:1;18600:663;;;;19307:1;19324:6;19321:89;;;-1:-1:-1;19376:19:1;;;19370:26;19321:89;-1:-1:-1;;18125:1:1;18121:11;;;18117:24;18113:29;18103:40;18149:1;18145:11;;;18100:57;19423:81;;18570:944;;18600:663;17394:1;17387:14;;;17431:4;17418:18;;-1:-1:-1;;18636:20:1;;;18754:236;18768:7;18765:1;18762:14;18754:236;;;18857:19;;;18851:26;18836:42;;18949:27;;;;18917:1;18905:14;;;;18784:19;;18754:236;;;18758:3;19018:6;19009:7;19006:19;19003:201;;;19079:19;;;19073:26;-1:-1:-1;;19162:1:1;19158:14;;;19174:3;19154:24;19150:37;19146:42;19131:58;19116:74;;19003:201;-1:-1:-1;;;;;19250:1:1;19234:14;;;19230:22;19217:36;;-1:-1:-1;18168:1352:1:o;19525:542::-;19698:2;19687:9;19680:21;19743:6;19737:13;19732:2;19721:9;19717:18;19710:41;19805:2;19797:6;19793:15;19787:22;19782:2;19771:9;19767:18;19760:50;19661:4;19857:2;19849:6;19845:15;19839:22;19897:4;19892:2;19881:9;19877:18;19870:32;19925:52;19972:3;19961:9;19957:19;19943:12;19925:52;:::i;:::-;19911:66;;20033:2;20025:6;20021:15;20015:22;20008:4;19997:9;19993:20;19986:52;20055:6;20047:14;;;19525:542;;;;:::o;20485:127::-;20546:10;20541:3;20537:20;20534:1;20527:31;20577:4;20574:1;20567:15;20601:4;20598:1;20591:15;22743:251;22813:6;22866:2;22854:9;22845:7;22841:23;22837:32;22834:52;;;22882:1;22879;22872:12;22834:52;22914:9;22908:16;22933:31;22958:5;22933:31;:::i;22999:351::-;23201:2;23183:21;;;23240:2;23220:18;;;23213:30;23279:29;23274:2;23259:18;;23252:57;23341:2;23326:18;;22999:351::o;23701:722::-;23751:3;23792:5;23786:12;23821:36;23847:9;23821:36;:::i;:::-;23876:1;23893:18;;;23920:133;;;;24067:1;24062:355;;;;23886:531;;23920:133;-1:-1:-1;;23953:24:1;;23941:37;;24026:14;;24019:22;24007:35;;23998:45;;;-1:-1:-1;23920:133:1;;24062:355;24093:5;24090:1;24083:16;24122:4;24167:2;24164:1;24154:16;24192:1;24206:165;24220:6;24217:1;24214:13;24206:165;;;24298:14;;24285:11;;;24278:35;24341:16;;;;24235:10;;24206:165;;;24210:3;;;24400:6;24395:3;24391:16;24384:23;;23886:531;;;;;23701:722;;;;:::o;24428:469::-;24649:3;24677:38;24711:3;24703:6;24677:38;:::i;:::-;24744:6;24738:13;24760:65;24818:6;24814:2;24807:4;24799:6;24795:17;24760:65;:::i;:::-;24841:50;24883:6;24879:2;24875:15;24867:6;24841:50;:::i;:::-;24834:57;24428:469;-1:-1:-1;;;;;;;24428:469:1:o;27512:414::-;27714:2;27696:21;;;27753:2;27733:18;;;27726:30;27792:34;27787:2;27772:18;;27765:62;-1:-1:-1;;;27858:2:1;27843:18;;27836:48;27916:3;27901:19;;27512:414::o;27931:112::-;27963:1;27989;27979:35;;27994:18;;:::i;:::-;-1:-1:-1;28028:9:1;;27931:112::o;28048:127::-;28109:10;28104:3;28100:20;28097:1;28090:31;28140:4;28137:1;28130:15;28164:4;28161:1;28154:15;28943:489;-1:-1:-1;;;;;29212:15:1;;;29194:34;;29264:15;;29259:2;29244:18;;29237:43;29311:2;29296:18;;29289:34;;;29359:3;29354:2;29339:18;;29332:31;;;29137:4;;29380:46;;29406:19;;29398:6;29380:46;:::i;:::-;29372:54;28943:489;-1:-1:-1;;;;;;28943:489:1:o;29437:249::-;29506:6;29559:2;29547:9;29538:7;29534:23;29530:32;29527:52;;;29575:1;29572;29565:12;29527:52;29607:9;29601:16;29626:30;29650:5;29626:30;:::i
Swarm Source
ipfs://a503b0424be049662e69cac63588adef424fb00e3fe0fc8f28e6bc4baf1a1ae2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.