ETH Price: $3,327.62 (-4.31%)

Token

Banana Task Force Ape Genesis Collection (BTFA)
 

Overview

Max Total Supply

0 BTFA

Holders

875

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
3 BTFA
0xf2228abc8077708d91787530bfa5d0b6e064e134
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Banana Task Force Ape Genesis is a collection of 8,000 NFTs (non-fungible tokens) with over a hundred unique trait.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BananaTaskForceApeGenesis

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-25
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.7;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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, bytes calldata data) external;
    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 setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

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);
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
}

abstract contract ERC721 is IERC721, IERC721Metadata {
    using Address for address;

    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) external view virtual override returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            interfaceId == type(IERC165).interfaceId;
    }

    function balanceOf(address owner) external view virtual override returns (uint256) {
        require(owner != address(0), "address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "invalid token ID");
        return owner;
    }

    function name() external view virtual override returns (string memory) {
        return _name;
    }

    function symbol() external view virtual override returns (string memory) {
        return _symbol;
    }

    function approve(address to, uint256 tokenId) external virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "approval to current owner");

        require(
            msg.sender == owner || isApprovedForAll(owner, msg.sender),
            "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) external 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
    ) external virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(msg.sender, tokenId), "caller is not token owner or approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external 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), "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), "transfer to non ERC721Receiver implementer");
    }

    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        return _owners[tokenId];
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _ownerOf(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 _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "mint to the zero address");
        require(!_exists(tokenId), "token already minted");
        require(!_exists(tokenId), "token already minted");

        unchecked {
            _balances[to] += 1;
        }

        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "transfer from incorrect owner");
        require(to != address(0), "transfer to the zero address");
        require(ERC721.ownerOf(tokenId) == from, "transfer from incorrect owner");
        delete _tokenApprovals[tokenId];

        unchecked {
            _balances[from] -= 1;
            _balances[to] += 1;
        }
        _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, "approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "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 {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
}

contract BananaTaskForceApeGenesis is ERC721 {

    address public owner;
    bool public enabled;
    address payable public wallet;
    uint256 public total;
    uint256 public remaining;
    bool public opened;

    string private _baseTokenURI;
    uint256 private nonce = 0;
    uint256 private blockSize;
    uint256[] private blockLog;

    SaleMode public saleMode;

    uint256 public reserved;
    uint256 public reserveLimit;

    enum SaleMode { FREELIST, WHITELIST, PUBLIC1, PUBLIC2 }
    struct Mode {
        uint256 price;
        uint256 limit;
        bool useWhitelist;
        mapping(address => uint256) purchases;
        mapping(address => bool) whitelist;
    }
    mapping(SaleMode => Mode) private modes;

    modifier onlyOwner() {
        require(msg.sender == owner, "can only be called by the contract owner");
        _;
    }

    modifier isEnabled() {
        require(enabled, "sale is currently disabled");
        _;
    }

    constructor() ERC721("Banana Task Force Ape Genesis Collection", "BTFA") {
        owner = msg.sender;
        _baseTokenURI = "https://bafybeicxrpwqlno3hrtli7qtjp6sh35arge4why5t73c75uib73tk2mnsi.ipfs.nftstorage.link/";

        wallet = payable(0x2411eD788bACdB0394570c8B3A393Af0AB9Cfb4F);
        saleMode = SaleMode.FREELIST;
        reserveLimit = 500;

        modes[SaleMode.FREELIST].price = 0;
        modes[SaleMode.FREELIST].limit = 2;
        modes[SaleMode.FREELIST].useWhitelist = true;

        modes[SaleMode.WHITELIST].price = 100000000000000000;
        modes[SaleMode.WHITELIST].limit = 10;
        modes[SaleMode.WHITELIST].useWhitelist = true;

        modes[SaleMode.PUBLIC1].price = 125000000000000000;
        modes[SaleMode.PUBLIC1].limit = 8;
        modes[SaleMode.PUBLIC1].useWhitelist = false;

        modes[SaleMode.PUBLIC2].price = 150000000000000000;
        modes[SaleMode.PUBLIC2].limit = 5;
        modes[SaleMode.PUBLIC2].useWhitelist = false;

        total = 8000;
        blockSize = 100;
        remaining = total;
        for (uint256 i = 0; i < total / blockSize; i++) {
            blockLog.push(blockSize);
        }
    }

    function tokenURI(uint256 tokenId) external override view returns (string memory) {
        require(_exists(tokenId));

        if (opened) {
            return string(abi.encodePacked(_baseTokenURI, uint2str(tokenId), ".json"));
        } else {
            return "https://bafybeidjtckjrh3yygyk5qcwx7t43uan7vibhgubg56wsgxenykfj5whwa.ipfs.nftstorage.link/closed.json";
        }
    }

    function status() public view returns (bool canBuy, uint256 boxCost, uint256 boxRemaining, uint256 hasPurchased, uint256 purchaseLimit) { 
        canBuy = enabled && canPurchase(msg.sender, 1);
        boxCost = modes[saleMode].price;
        boxRemaining = remaining;
        hasPurchased =  modes[saleMode].purchases[msg.sender];
        purchaseLimit =  modes[saleMode].limit;
    }

    function purchaseBlindbox(uint256 amount) public payable isEnabled {
        require (remaining >= amount, "Not enough blindboxes available");
        require(canPurchase(msg.sender, amount), "You cannot purchase at this time.");
        require (msg.value == modes[saleMode].price * amount, "Incorrect Eth value.");

        if (modes[saleMode].price > 0) {
            wallet.transfer(modes[saleMode].price * amount);
        }

        for (uint256 i = 0; i < amount; i++) {
            mint(msg.sender);
        }
        modes[saleMode].purchases[msg.sender] += amount;
    }

    function mint(address who) private {
        uint256 nftBlock = requestRandomWords();
        uint256 blockRoll = nftBlock % blockLog.length;
        while (blockLog[blockRoll] == 0) {
            blockRoll++;

            if (blockRoll >= blockLog.length) {
                blockRoll = 0;
            }
        }

        uint256 nftRoll = requestRandomWords();
        uint256 roll = nftRoll % blockSize + 1;
        while (_exists(blockRoll * blockSize + roll)) {
            roll++;

            if (roll > blockSize) {
                roll = 1;
            }
        }

        _mint(who, blockRoll * blockSize + roll);
        blockLog[blockRoll]--;
        remaining--;
    }

    // Admin

    function setOwner(address who) external onlyOwner {
        owner = who;
    } 

    function openBoxes() external onlyOwner {
        opened = true;
    } 

    function setPrice(SaleMode mode, uint256 price) external onlyOwner {
        modes[mode].price = price;
    }

    function setEnabled(bool on) external onlyOwner {
        enabled = on;
    }

    function setMode(SaleMode mode) external onlyOwner {
        saleMode = mode;
    }

    function setUseWhitelist(SaleMode mode, bool on) external onlyOwner {
        modes[mode].useWhitelist = on;
    }

    function setWhitelist(SaleMode mode, address who, bool whitelisted) external onlyOwner {
        modes[mode].whitelist[who] = whitelisted;
    }

    function setWhitelisted(SaleMode mode, address[] calldata who, bool whitelisted) external onlyOwner {
        for (uint256 i = 0; i < who.length; i++) {
            modes[mode].whitelist[who[i]] = whitelisted;
        }
    }

    function setBuyLimits(SaleMode mode, uint256 limit) external onlyOwner {
        modes[mode].limit = limit;
    }

    function reserveNfts(address who, uint256 amount) external onlyOwner {
        require(reserved + amount <= reserveLimit, "NFTS have already been reserved");

        for (uint256 i = 0; i < amount; i++) {
            mint(who);
        }

        reserved += amount;
    }

    // Private

    function canPurchase(address who, uint256 amount) private view returns (bool) {
        return modes[saleMode].purchases[who] + amount <= modes[saleMode].limit && 
            (modes[saleMode].useWhitelist == false || modes[saleMode].whitelist[who]);
    }

    function uint2str(uint _i) private pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len;
        while (_i != 0) {
            k = k-1;
            uint8 temp = (48 + uint8(_i - _i / 10 * 10));
            bytes1 b1 = bytes1(temp);
            bstr[k] = b1;
            _i /= 10;
        }
        return string(bstr);
    }

    function requestRandomWords() private returns (uint256) {
        nonce += 1;
        return uint(keccak256(abi.encodePacked(nonce, msg.sender, blockhash(block.number - 1))));
    }

}

Contract Security Audit

Contract ABI

[{"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":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"},{"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":[],"name":"enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openBoxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"opened","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"amount","type":"uint256"}],"name":"purchaseBlindbox","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"remaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserveLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reserveNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":[],"name":"saleMode","outputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"mode","type":"uint8"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setBuyLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"on","type":"bool"}],"name":"setEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"mode","type":"uint8"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"mode","type":"uint8"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"mode","type":"uint8"},{"internalType":"bool","name":"on","type":"bool"}],"name":"setUseWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"mode","type":"uint8"},{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum BananaTaskForceApeGenesis.SaleMode","name":"mode","type":"uint8"},{"internalType":"address[]","name":"who","type":"address[]"},{"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"setWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"bool","name":"canBuy","type":"bool"},{"internalType":"uint256","name":"boxCost","type":"uint256"},{"internalType":"uint256","name":"boxRemaining","type":"uint256"},{"internalType":"uint256","name":"hasPurchased","type":"uint256"},{"internalType":"uint256","name":"purchaseLimit","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total","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":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526000600c553480156200001657600080fd5b5060405180606001604052806028815260200162002b9a60289139604051806040016040528060048152602001634254464160e01b81525081600090805190602001906200006692919062000362565b5080516200007c90600190602084019062000362565b5050600680546001600160a01b03191633179055506040805160808101909152605980825262002b4160208301398051620000c091600b9160209091019062000362565b50600780546001600160a01b031916732411ed788bacdb0394570c8b3a393af0ab9cfb4f179055600f805460ff199081169091556101f4601155601260205260007f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b81905560027f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7c557f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7d80548316600190811790915567016345785d8a00007f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a355600a7f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a4557f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a58054841690911790556701bc16d674ec80007f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b25560087f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b38190557f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b480548416905560038252670214e8348c4f00007f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976a5560057f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976b557f0f36ad39aee03e7108cc48f54934702a5f0d4066f10344cebf8198978d86976c8054909316909255611f40918290556064600d556009919091555b600d5460085462000308919062000408565b8110156200035b57600d54600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd015580620003528162000468565b915050620002f6565b5062000492565b82805462000370906200042b565b90600052602060002090601f016020900481019282620003945760008555620003df565b82601f10620003af57805160ff1916838001178555620003df565b82800160010185558215620003df579182015b82811115620003df578251825591602001919060010190620003c2565b50620003ed929150620003f1565b5090565b5b80821115620003ed5760008155600101620003f2565b6000826200042657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200044057607f821691505b602082108114156200046257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200048b57634e487b7160e01b600052601160045260246000fd5b5060010190565b61269f80620004a26000396000f3fe6080604052600436106101f85760003560e01c80634538170a1161010d57806377b5683a116100a0578063b88d4fde1161006f578063b88d4fde146105bc578063c87b56dd146105dc578063dc970a58146105fc578063e985e9c51461061c578063fe60d12c1461063c57600080fd5b806377b5683a146105525780638da5cb5b1461056757806395d89b4114610587578063a22cb4651461059c57600080fd5b80636352211e116100dc5780636352211e146104d25780636535fd3d146104f25780636a00670b1461051257806370a082311461053257600080fd5b80634538170a14610462578063521eb2731461048257806355234ec0146104a25780635f88eade146104b857600080fd5b806321175b4a116101905780632ddbd13a1161015f5780632ddbd13a146103d9578063313e731a146103ef578063328d8f721461040f57806333f0d24b1461042f57806342842e0e1461044257600080fd5b806321175b4a1461035457806321e7345e14610374578063238dafe01461039857806323b872dd146103b957600080fd5b8063095ea7b3116101cc578063095ea7b3146102ae5780630deed6a6146102ce57806313af4035146102f5578063200d2ed21461031557600080fd5b8062c93fa8146101fd57806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276575b600080fd5b34801561020957600080fd5b5061021d61021836600461211a565b610652565b005b34801561022b57600080fd5b5061023f61023a3660046120c5565b6106fd565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b5061026961074f565b60405161024b91906123ad565b34801561028257600080fd5b5061029661029136600461222c565b6107e1565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b5061021d6102c9366004612080565b610808565b3480156102da57600080fd5b50600f546102e89060ff1681565b60405161024b9190612385565b34801561030157600080fd5b5061021d610310366004611ef0565b61090c565b34801561032157600080fd5b5061032a610958565b6040805195151586526020860194909452928401919091526060830152608082015260a00161024b565b34801561036057600080fd5b5061021d61036f3660046120ff565b610a68565b34801561038057600080fd5b5061038a60115481565b60405190815260200161024b565b3480156103a457600080fd5b5060065461023f90600160a01b900460ff1681565b3480156103c557600080fd5b5061021d6103d4366004611f3e565b610ab9565b3480156103e557600080fd5b5061038a60085481565b3480156103fb57600080fd5b5061021d61040a366004612210565b610aea565b34801561041b57600080fd5b5061021d61042a3660046120aa565b610b54565b61021d61043d36600461222c565b610b9c565b34801561044e57600080fd5b5061021d61045d366004611f3e565b610eab565b34801561046e57600080fd5b5061021d61047d366004612080565b610ec6565b34801561048e57600080fd5b50600754610296906001600160a01b031681565b3480156104ae57600080fd5b5061038a60095481565b3480156104c457600080fd5b50600a5461023f9060ff1681565b3480156104de57600080fd5b506102966104ed36600461222c565b610f91565b3480156104fe57600080fd5b5061021d61050d3660046121f4565b610fe9565b34801561051e57600080fd5b5061021d61052d366004612210565b611061565b34801561053e57600080fd5b5061038a61054d366004611ef0565b6110c8565b34801561055e57600080fd5b5061021d611146565b34801561057357600080fd5b50600654610296906001600160a01b031681565b34801561059357600080fd5b5061026961117f565b3480156105a857600080fd5b5061021d6105b7366004612056565b61118e565b3480156105c857600080fd5b5061021d6105d7366004611f7a565b61119d565b3480156105e857600080fd5b506102696105f736600461222c565b6111d5565b34801561060857600080fd5b5061021d61061736600461215d565b61125a565b34801561062857600080fd5b5061023f610637366004611f0b565b611332565b34801561064857600080fd5b5061038a60105481565b6006546001600160a01b031633146106855760405162461bcd60e51b815260040161067c906123c0565b60405180910390fd5b806012600085600381111561069c5761069c6125ad565b60038111156106ad576106ad6125ad565b81526020019081526020016000206004016000846001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006001600160e01b031982166380ac58cd60e01b148061072e57506001600160e01b03198216635b5e139f60e01b145b8061074957506001600160e01b031982166301ffc9a760e01b145b92915050565b60606000805461075e90612517565b80601f016020809104026020016040519081016040528092919081815260200182805461078a90612517565b80156107d75780601f106107ac576101008083540402835291602001916107d7565b820191906000526020600020905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b60006107ec82611360565b506000908152600460205260409020546001600160a01b031690565b600061081382610f91565b9050806001600160a01b0316836001600160a01b031614156108775760405162461bcd60e51b815260206004820152601960248201527f617070726f76616c20746f2063757272656e74206f776e657200000000000000604482015260640161067c565b336001600160a01b038216148061089357506108938133611332565b6108fd5760405162461bcd60e51b815260206004820152603560248201527f617070726f76652063616c6c6572206973206e6f7420746f6b656e206f776e656044820152741c881bdc88185c1c1c9bdd995908199bdc88185b1b605a1b606482015260840161067c565b61090783836113ba565b505050565b6006546001600160a01b031633146109365760405162461bcd60e51b815260040161067c906123c0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000806000600660149054906101000a900460ff1680156109825750610982336001611428565b600f5490955060129060009060ff1660038111156109a2576109a26125ad565b60038111156109b3576109b36125ad565b81526020810191909152604001600090812054600954600f5491965094506012919060ff1660038111156109e9576109e96125ad565b60038111156109fa576109fa6125ad565b815260208082019290925260409081016000908120338252600390810190935290812054600f5490945060129260ff90911690811115610a3c57610a3c6125ad565b6003811115610a4d57610a4d6125ad565b81526020019081526020016000206001015490509091929394565b6006546001600160a01b03163314610a925760405162461bcd60e51b815260040161067c906123c0565b600f805482919060ff19166001836003811115610ab157610ab16125ad565b021790555050565b610ac33382611598565b610adf5760405162461bcd60e51b815260040161067c90612408565b6109078383836115f7565b6006546001600160a01b03163314610b145760405162461bcd60e51b815260040161067c906123c0565b8060126000846003811115610b2b57610b2b6125ad565b6003811115610b3c57610b3c6125ad565b81526020810191909152604001600020600101555050565b6006546001600160a01b03163314610b7e5760405162461bcd60e51b815260040161067c906123c0565b60068054911515600160a01b0260ff60a01b19909216919091179055565b600654600160a01b900460ff16610bf55760405162461bcd60e51b815260206004820152601a60248201527f73616c652069732063757272656e746c792064697361626c6564000000000000604482015260640161067c565b806009541015610c475760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f75676820626c696e64626f78657320617661696c61626c6500604482015260640161067c565b610c513382611428565b610ca75760405162461bcd60e51b815260206004820152602160248201527f596f752063616e6e6f7420707572636861736520617420746869732074696d656044820152601760f91b606482015260840161067c565b600f54819060129060009060ff166003811115610cc657610cc66125ad565b6003811115610cd757610cd76125ad565b815260200190815260200160002060000154610cf3919061249e565b3414610d385760405162461bcd60e51b815260206004820152601460248201527324b731b7b93932b1ba1022ba34103b30b63ab29760611b604482015260640161067c565b600f54600090601290829060ff166003811115610d5757610d576125ad565b6003811115610d6857610d686125ad565b8152602001908152602001600020600001541115610e0957600754600f546001600160a01b03909116906108fc90839060129060009060ff166003811115610db257610db26125ad565b6003811115610dc357610dc36125ad565b815260200190815260200160002060000154610ddf919061249e565b6040518115909202916000818181858888f19350505050158015610e07573d6000803e3d6000fd5b505b60005b81811015610e2f57610e1d336117af565b80610e2781612552565b915050610e0c565b50600f54819060129060009060ff166003811115610e4f57610e4f6125ad565b6003811115610e6057610e606125ad565b81526020019081526020016000206003016000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254610ea3919061244d565b909155505050565b6109078383836040518060200160405280600081525061119d565b6006546001600160a01b03163314610ef05760405162461bcd60e51b815260040161067c906123c0565b60115481601054610f01919061244d565b1115610f4f5760405162461bcd60e51b815260206004820152601f60248201527f4e465453206861766520616c7265616479206265656e20726573657276656400604482015260640161067c565b60005b81811015610f7557610f63836117af565b80610f6d81612552565b915050610f52565b508060106000828254610f88919061244d565b90915550505050565b6000818152600260205260408120546001600160a01b0316806107495760405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d1bdad95b88125160821b604482015260640161067c565b6006546001600160a01b031633146110135760405162461bcd60e51b815260040161067c906123c0565b806012600084600381111561102a5761102a6125ad565b600381111561103b5761103b6125ad565b81526020810191909152604001600020600201805460ff19169115159190911790555050565b6006546001600160a01b0316331461108b5760405162461bcd60e51b815260040161067c906123c0565b80601260008460038111156110a2576110a26125ad565b60038111156110b3576110b36125ad565b81526020810191909152604001600020555050565b60006001600160a01b03821661112a5760405162461bcd60e51b815260206004820152602160248201527f61646472657373207a65726f206973206e6f7420612076616c6964206f776e656044820152603960f91b606482015260840161067c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146111705760405162461bcd60e51b815260040161067c906123c0565b600a805460ff19166001179055565b60606001805461075e90612517565b61119933838361190a565b5050565b6111a73383611598565b6111c35760405162461bcd60e51b815260040161067c90612408565b6111cf848484846119cd565b50505050565b6000818152600260205260409020546060906001600160a01b03166111f957600080fd5b600a5460ff161561123657600b61120f83611a43565b60405160200161122092919061228d565b6040516020818303038152906040529050919050565b6040518060a00160405280606481526020016126066064913992915050565b919050565b6006546001600160a01b031633146112845760405162461bcd60e51b815260040161067c906123c0565b60005b8281101561132b5781601260008760038111156112a6576112a66125ad565b60038111156112b7576112b76125ad565b815260200190815260200160002060040160008686858181106112dc576112dc6125c3565b90506020020160208101906112f19190611ef0565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061132381612552565b915050611287565b5050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000818152600260205260409020546001600160a01b03166113b75760405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d1bdad95b88125160821b604482015260640161067c565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113ef82610f91565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600f54600090601290829060ff166003811115611447576114476125ad565b6003811115611458576114586125ad565b8152602001908152602001600020600101548260126000600f60009054906101000a900460ff166003811115611490576114906125ad565b60038111156114a1576114a16125ad565b81526020019081526020016000206003016000866001600160a01b03166001600160a01b03168152602001908152602001600020546114e0919061244d565b111580156115915750600f5460129060009060ff166003811115611506576115066125ad565b6003811115611517576115176125ad565b815260208101919091526040016000206002015460ff1615806115915750600f5460129060009060ff166003811115611552576115526125ad565b6003811115611563576115636125ad565b8152602080820192909252604090810160009081206001600160a01b038716825260040190925290205460ff165b9392505050565b6000806115a483610f91565b9050806001600160a01b0316846001600160a01b031614806115cb57506115cb8185611332565b806115ef5750836001600160a01b03166115e4846107e1565b6001600160a01b0316145b949350505050565b826001600160a01b031661160a82610f91565b6001600160a01b0316146116605760405162461bcd60e51b815260206004820152601d60248201527f7472616e736665722066726f6d20696e636f7272656374206f776e6572000000604482015260640161067c565b6001600160a01b0382166116b65760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161067c565b826001600160a01b03166116c982610f91565b6001600160a01b03161461171f5760405162461bcd60e51b815260206004820152601d60248201527f7472616e736665722066726f6d20696e636f7272656374206f776e6572000000604482015260640161067c565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006117b9611b6c565b600e549091506000906117cc908361256d565b90505b600e81815481106117e2576117e26125c3565b90600052602060002001546000141561181657806117ff81612552565b600e5490925082109050611811575060005b6117cf565b6000611820611b6c565b90506000600d5482611832919061256d565b61183d90600161244d565b90505b61187981600d5485611852919061249e565b61185c919061244d565b6000908152600260205260409020546001600160a01b0316151590565b1561189e578061188881612552565b915050600d54811115611899575060015b611840565b6118c08582600d54866118b1919061249e565b6118bb919061244d565b611be9565b600e83815481106118d3576118d36125c3565b600091825260208220018054916118e983612500565b9091555050600980549060006118fe83612500565b91905055505050505050565b816001600160a01b0316836001600160a01b031614156119605760405162461bcd60e51b815260206004820152601160248201527030b8383937bb32903a379031b0b63632b960791b604482015260640161067c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119d88484846115f7565b6119e484848484611d62565b6111cf5760405162461bcd60e51b815260206004820152602a60248201527f7472616e7366657220746f206e6f6e204552433732315265636569766572206960448201526936b83632b6b2b73a32b960b11b606482015260840161067c565b606081611a675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a915780611a7b81612552565b9150611a8a9050600a8361248a565b9150611a6b565b60008167ffffffffffffffff811115611aac57611aac6125d9565b6040519080825280601f01601f191660200182016040528015611ad6576020820181803683370190505b509050815b8515611b6357611aec6001826124bd565b90506000611afb600a8861248a565b611b0690600a61249e565b611b1090886124bd565b611b1b906030612465565b905060008160f81b905080848481518110611b3857611b386125c3565b60200101906001600160f81b031916908160001a905350611b5a600a8961248a565b97505050611adb565b50949350505050565b60006001600c6000828254611b81919061244d565b9091555050600c5433611b956001436124bd565b40604051602001611bcb9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c905090565b6001600160a01b038216611c3f5760405162461bcd60e51b815260206004820152601860248201527f6d696e7420746f20746865207a65726f20616464726573730000000000000000604482015260640161067c565b6000818152600260205260409020546001600160a01b031615611c9b5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e481b5a5b9d195960621b604482015260640161067c565b6000818152600260205260409020546001600160a01b031615611cf75760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e481b5a5b9d195960621b604482015260640161067c565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611eaf57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611da6903390899088908890600401612348565b602060405180830381600087803b158015611dc057600080fd5b505af1925050508015611df0575060408051601f3d908101601f19168201909252611ded918101906120e2565b60015b611e95573d808015611e1e576040519150601f19603f3d011682016040523d82523d6000602084013e611e23565b606091505b508051611e8d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161067c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115ef565b506001949350505050565b80356001600160a01b038116811461125557600080fd5b8035801515811461125557600080fd5b80356004811061125557600080fd5b600060208284031215611f0257600080fd5b61159182611eba565b60008060408385031215611f1e57600080fd5b611f2783611eba565b9150611f3560208401611eba565b90509250929050565b600080600060608486031215611f5357600080fd5b611f5c84611eba565b9250611f6a60208501611eba565b9150604084013590509250925092565b60008060008060808587031215611f9057600080fd5b611f9985611eba565b9350611fa760208601611eba565b925060408501359150606085013567ffffffffffffffff80821115611fcb57600080fd5b818701915087601f830112611fdf57600080fd5b813581811115611ff157611ff16125d9565b604051601f8201601f19908116603f01168101908382118183101715612019576120196125d9565b816040528281528a602084870101111561203257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561206957600080fd5b61207283611eba565b9150611f3560208401611ed1565b6000806040838503121561209357600080fd5b61209c83611eba565b946020939093013593505050565b6000602082840312156120bc57600080fd5b61159182611ed1565b6000602082840312156120d757600080fd5b8135611591816125ef565b6000602082840312156120f457600080fd5b8151611591816125ef565b60006020828403121561211157600080fd5b61159182611ee1565b60008060006060848603121561212f57600080fd5b61213884611ee1565b925061214660208501611eba565b915061215460408501611ed1565b90509250925092565b6000806000806060858703121561217357600080fd5b61217c85611ee1565b9350602085013567ffffffffffffffff8082111561219957600080fd5b818701915087601f8301126121ad57600080fd5b8135818111156121bc57600080fd5b8860208260051b85010111156121d157600080fd5b6020830195508094505050506121e960408601611ed1565b905092959194509250565b6000806040838503121561220757600080fd5b61207283611ee1565b6000806040838503121561222357600080fd5b61209c83611ee1565b60006020828403121561223e57600080fd5b5035919050565b6000815180845261225d8160208601602086016124d4565b601f01601f19169290920160200192915050565b600081516122838185602086016124d4565b9290920192915050565b600080845481600182811c9150808316806122a957607f831692505b60208084108214156122c957634e487b7160e01b86526022600452602486fd5b8180156122dd57600181146122ee5761231b565b60ff1986168952848901965061231b565b60008b81526020902060005b868110156123135781548b8201529085019083016122fa565b505084890196505b50505050505061233f61232e8286612271565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237b90830184612245565b9695505050505050565b60208101600483106123a757634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260006115916020830184612245565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b60208082526025908201527f63616c6c6572206973206e6f7420746f6b656e206f776e6572206f72206170706040820152641c9bdd995960da1b606082015260800190565b6000821982111561246057612460612581565b500190565b600060ff821660ff84168060ff0382111561248257612482612581565b019392505050565b60008261249957612499612597565b500490565b60008160001904831182151516156124b8576124b8612581565b500290565b6000828210156124cf576124cf612581565b500390565b60005b838110156124ef5781810151838201526020016124d7565b838111156111cf5750506000910152565b60008161250f5761250f612581565b506000190190565b600181811c9082168061252b57607f821691505b6020821081141561254c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561256657612566612581565b5060010190565b60008261257c5761257c612597565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113b757600080fdfe68747470733a2f2f62616679626569646a74636b6a726833797967796b35716377783774343375616e377669626867756267353677736778656e796b666a35776877612e697066732e6e667473746f726167652e6c696e6b2f636c6f7365642e6a736f6ea2646970667358221220bba39214d46838eecf5e393cac02552fc2eaaa8173561850c9234bf23837551464736f6c6343000807003368747470733a2f2f626166796265696378727077716c6e6f336872746c693771746a7036736833356172676534776879357437336337357569623733746b326d6e73692e697066732e6e667473746f726167652e6c696e6b2f42616e616e61205461736b20466f726365204170652047656e6573697320436f6c6c656374696f6e

Deployed Bytecode

0x6080604052600436106101f85760003560e01c80634538170a1161010d57806377b5683a116100a0578063b88d4fde1161006f578063b88d4fde146105bc578063c87b56dd146105dc578063dc970a58146105fc578063e985e9c51461061c578063fe60d12c1461063c57600080fd5b806377b5683a146105525780638da5cb5b1461056757806395d89b4114610587578063a22cb4651461059c57600080fd5b80636352211e116100dc5780636352211e146104d25780636535fd3d146104f25780636a00670b1461051257806370a082311461053257600080fd5b80634538170a14610462578063521eb2731461048257806355234ec0146104a25780635f88eade146104b857600080fd5b806321175b4a116101905780632ddbd13a1161015f5780632ddbd13a146103d9578063313e731a146103ef578063328d8f721461040f57806333f0d24b1461042f57806342842e0e1461044257600080fd5b806321175b4a1461035457806321e7345e14610374578063238dafe01461039857806323b872dd146103b957600080fd5b8063095ea7b3116101cc578063095ea7b3146102ae5780630deed6a6146102ce57806313af4035146102f5578063200d2ed21461031557600080fd5b8062c93fa8146101fd57806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276575b600080fd5b34801561020957600080fd5b5061021d61021836600461211a565b610652565b005b34801561022b57600080fd5b5061023f61023a3660046120c5565b6106fd565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b5061026961074f565b60405161024b91906123ad565b34801561028257600080fd5b5061029661029136600461222c565b6107e1565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b5061021d6102c9366004612080565b610808565b3480156102da57600080fd5b50600f546102e89060ff1681565b60405161024b9190612385565b34801561030157600080fd5b5061021d610310366004611ef0565b61090c565b34801561032157600080fd5b5061032a610958565b6040805195151586526020860194909452928401919091526060830152608082015260a00161024b565b34801561036057600080fd5b5061021d61036f3660046120ff565b610a68565b34801561038057600080fd5b5061038a60115481565b60405190815260200161024b565b3480156103a457600080fd5b5060065461023f90600160a01b900460ff1681565b3480156103c557600080fd5b5061021d6103d4366004611f3e565b610ab9565b3480156103e557600080fd5b5061038a60085481565b3480156103fb57600080fd5b5061021d61040a366004612210565b610aea565b34801561041b57600080fd5b5061021d61042a3660046120aa565b610b54565b61021d61043d36600461222c565b610b9c565b34801561044e57600080fd5b5061021d61045d366004611f3e565b610eab565b34801561046e57600080fd5b5061021d61047d366004612080565b610ec6565b34801561048e57600080fd5b50600754610296906001600160a01b031681565b3480156104ae57600080fd5b5061038a60095481565b3480156104c457600080fd5b50600a5461023f9060ff1681565b3480156104de57600080fd5b506102966104ed36600461222c565b610f91565b3480156104fe57600080fd5b5061021d61050d3660046121f4565b610fe9565b34801561051e57600080fd5b5061021d61052d366004612210565b611061565b34801561053e57600080fd5b5061038a61054d366004611ef0565b6110c8565b34801561055e57600080fd5b5061021d611146565b34801561057357600080fd5b50600654610296906001600160a01b031681565b34801561059357600080fd5b5061026961117f565b3480156105a857600080fd5b5061021d6105b7366004612056565b61118e565b3480156105c857600080fd5b5061021d6105d7366004611f7a565b61119d565b3480156105e857600080fd5b506102696105f736600461222c565b6111d5565b34801561060857600080fd5b5061021d61061736600461215d565b61125a565b34801561062857600080fd5b5061023f610637366004611f0b565b611332565b34801561064857600080fd5b5061038a60105481565b6006546001600160a01b031633146106855760405162461bcd60e51b815260040161067c906123c0565b60405180910390fd5b806012600085600381111561069c5761069c6125ad565b60038111156106ad576106ad6125ad565b81526020019081526020016000206004016000846001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006001600160e01b031982166380ac58cd60e01b148061072e57506001600160e01b03198216635b5e139f60e01b145b8061074957506001600160e01b031982166301ffc9a760e01b145b92915050565b60606000805461075e90612517565b80601f016020809104026020016040519081016040528092919081815260200182805461078a90612517565b80156107d75780601f106107ac576101008083540402835291602001916107d7565b820191906000526020600020905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b60006107ec82611360565b506000908152600460205260409020546001600160a01b031690565b600061081382610f91565b9050806001600160a01b0316836001600160a01b031614156108775760405162461bcd60e51b815260206004820152601960248201527f617070726f76616c20746f2063757272656e74206f776e657200000000000000604482015260640161067c565b336001600160a01b038216148061089357506108938133611332565b6108fd5760405162461bcd60e51b815260206004820152603560248201527f617070726f76652063616c6c6572206973206e6f7420746f6b656e206f776e656044820152741c881bdc88185c1c1c9bdd995908199bdc88185b1b605a1b606482015260840161067c565b61090783836113ba565b505050565b6006546001600160a01b031633146109365760405162461bcd60e51b815260040161067c906123c0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000806000600660149054906101000a900460ff1680156109825750610982336001611428565b600f5490955060129060009060ff1660038111156109a2576109a26125ad565b60038111156109b3576109b36125ad565b81526020810191909152604001600090812054600954600f5491965094506012919060ff1660038111156109e9576109e96125ad565b60038111156109fa576109fa6125ad565b815260208082019290925260409081016000908120338252600390810190935290812054600f5490945060129260ff90911690811115610a3c57610a3c6125ad565b6003811115610a4d57610a4d6125ad565b81526020019081526020016000206001015490509091929394565b6006546001600160a01b03163314610a925760405162461bcd60e51b815260040161067c906123c0565b600f805482919060ff19166001836003811115610ab157610ab16125ad565b021790555050565b610ac33382611598565b610adf5760405162461bcd60e51b815260040161067c90612408565b6109078383836115f7565b6006546001600160a01b03163314610b145760405162461bcd60e51b815260040161067c906123c0565b8060126000846003811115610b2b57610b2b6125ad565b6003811115610b3c57610b3c6125ad565b81526020810191909152604001600020600101555050565b6006546001600160a01b03163314610b7e5760405162461bcd60e51b815260040161067c906123c0565b60068054911515600160a01b0260ff60a01b19909216919091179055565b600654600160a01b900460ff16610bf55760405162461bcd60e51b815260206004820152601a60248201527f73616c652069732063757272656e746c792064697361626c6564000000000000604482015260640161067c565b806009541015610c475760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f75676820626c696e64626f78657320617661696c61626c6500604482015260640161067c565b610c513382611428565b610ca75760405162461bcd60e51b815260206004820152602160248201527f596f752063616e6e6f7420707572636861736520617420746869732074696d656044820152601760f91b606482015260840161067c565b600f54819060129060009060ff166003811115610cc657610cc66125ad565b6003811115610cd757610cd76125ad565b815260200190815260200160002060000154610cf3919061249e565b3414610d385760405162461bcd60e51b815260206004820152601460248201527324b731b7b93932b1ba1022ba34103b30b63ab29760611b604482015260640161067c565b600f54600090601290829060ff166003811115610d5757610d576125ad565b6003811115610d6857610d686125ad565b8152602001908152602001600020600001541115610e0957600754600f546001600160a01b03909116906108fc90839060129060009060ff166003811115610db257610db26125ad565b6003811115610dc357610dc36125ad565b815260200190815260200160002060000154610ddf919061249e565b6040518115909202916000818181858888f19350505050158015610e07573d6000803e3d6000fd5b505b60005b81811015610e2f57610e1d336117af565b80610e2781612552565b915050610e0c565b50600f54819060129060009060ff166003811115610e4f57610e4f6125ad565b6003811115610e6057610e606125ad565b81526020019081526020016000206003016000336001600160a01b03166001600160a01b031681526020019081526020016000206000828254610ea3919061244d565b909155505050565b6109078383836040518060200160405280600081525061119d565b6006546001600160a01b03163314610ef05760405162461bcd60e51b815260040161067c906123c0565b60115481601054610f01919061244d565b1115610f4f5760405162461bcd60e51b815260206004820152601f60248201527f4e465453206861766520616c7265616479206265656e20726573657276656400604482015260640161067c565b60005b81811015610f7557610f63836117af565b80610f6d81612552565b915050610f52565b508060106000828254610f88919061244d565b90915550505050565b6000818152600260205260408120546001600160a01b0316806107495760405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d1bdad95b88125160821b604482015260640161067c565b6006546001600160a01b031633146110135760405162461bcd60e51b815260040161067c906123c0565b806012600084600381111561102a5761102a6125ad565b600381111561103b5761103b6125ad565b81526020810191909152604001600020600201805460ff19169115159190911790555050565b6006546001600160a01b0316331461108b5760405162461bcd60e51b815260040161067c906123c0565b80601260008460038111156110a2576110a26125ad565b60038111156110b3576110b36125ad565b81526020810191909152604001600020555050565b60006001600160a01b03821661112a5760405162461bcd60e51b815260206004820152602160248201527f61646472657373207a65726f206973206e6f7420612076616c6964206f776e656044820152603960f91b606482015260840161067c565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146111705760405162461bcd60e51b815260040161067c906123c0565b600a805460ff19166001179055565b60606001805461075e90612517565b61119933838361190a565b5050565b6111a73383611598565b6111c35760405162461bcd60e51b815260040161067c90612408565b6111cf848484846119cd565b50505050565b6000818152600260205260409020546060906001600160a01b03166111f957600080fd5b600a5460ff161561123657600b61120f83611a43565b60405160200161122092919061228d565b6040516020818303038152906040529050919050565b6040518060a00160405280606481526020016126066064913992915050565b919050565b6006546001600160a01b031633146112845760405162461bcd60e51b815260040161067c906123c0565b60005b8281101561132b5781601260008760038111156112a6576112a66125ad565b60038111156112b7576112b76125ad565b815260200190815260200160002060040160008686858181106112dc576112dc6125c3565b90506020020160208101906112f19190611ef0565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061132381612552565b915050611287565b5050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000818152600260205260409020546001600160a01b03166113b75760405162461bcd60e51b815260206004820152601060248201526f1a5b9d985b1a59081d1bdad95b88125160821b604482015260640161067c565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113ef82610f91565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600f54600090601290829060ff166003811115611447576114476125ad565b6003811115611458576114586125ad565b8152602001908152602001600020600101548260126000600f60009054906101000a900460ff166003811115611490576114906125ad565b60038111156114a1576114a16125ad565b81526020019081526020016000206003016000866001600160a01b03166001600160a01b03168152602001908152602001600020546114e0919061244d565b111580156115915750600f5460129060009060ff166003811115611506576115066125ad565b6003811115611517576115176125ad565b815260208101919091526040016000206002015460ff1615806115915750600f5460129060009060ff166003811115611552576115526125ad565b6003811115611563576115636125ad565b8152602080820192909252604090810160009081206001600160a01b038716825260040190925290205460ff165b9392505050565b6000806115a483610f91565b9050806001600160a01b0316846001600160a01b031614806115cb57506115cb8185611332565b806115ef5750836001600160a01b03166115e4846107e1565b6001600160a01b0316145b949350505050565b826001600160a01b031661160a82610f91565b6001600160a01b0316146116605760405162461bcd60e51b815260206004820152601d60248201527f7472616e736665722066726f6d20696e636f7272656374206f776e6572000000604482015260640161067c565b6001600160a01b0382166116b65760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604482015260640161067c565b826001600160a01b03166116c982610f91565b6001600160a01b03161461171f5760405162461bcd60e51b815260206004820152601d60248201527f7472616e736665722066726f6d20696e636f7272656374206f776e6572000000604482015260640161067c565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006117b9611b6c565b600e549091506000906117cc908361256d565b90505b600e81815481106117e2576117e26125c3565b90600052602060002001546000141561181657806117ff81612552565b600e5490925082109050611811575060005b6117cf565b6000611820611b6c565b90506000600d5482611832919061256d565b61183d90600161244d565b90505b61187981600d5485611852919061249e565b61185c919061244d565b6000908152600260205260409020546001600160a01b0316151590565b1561189e578061188881612552565b915050600d54811115611899575060015b611840565b6118c08582600d54866118b1919061249e565b6118bb919061244d565b611be9565b600e83815481106118d3576118d36125c3565b600091825260208220018054916118e983612500565b9091555050600980549060006118fe83612500565b91905055505050505050565b816001600160a01b0316836001600160a01b031614156119605760405162461bcd60e51b815260206004820152601160248201527030b8383937bb32903a379031b0b63632b960791b604482015260640161067c565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6119d88484846115f7565b6119e484848484611d62565b6111cf5760405162461bcd60e51b815260206004820152602a60248201527f7472616e7366657220746f206e6f6e204552433732315265636569766572206960448201526936b83632b6b2b73a32b960b11b606482015260840161067c565b606081611a675750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a915780611a7b81612552565b9150611a8a9050600a8361248a565b9150611a6b565b60008167ffffffffffffffff811115611aac57611aac6125d9565b6040519080825280601f01601f191660200182016040528015611ad6576020820181803683370190505b509050815b8515611b6357611aec6001826124bd565b90506000611afb600a8861248a565b611b0690600a61249e565b611b1090886124bd565b611b1b906030612465565b905060008160f81b905080848481518110611b3857611b386125c3565b60200101906001600160f81b031916908160001a905350611b5a600a8961248a565b97505050611adb565b50949350505050565b60006001600c6000828254611b81919061244d565b9091555050600c5433611b956001436124bd565b40604051602001611bcb9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c905090565b6001600160a01b038216611c3f5760405162461bcd60e51b815260206004820152601860248201527f6d696e7420746f20746865207a65726f20616464726573730000000000000000604482015260640161067c565b6000818152600260205260409020546001600160a01b031615611c9b5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e481b5a5b9d195960621b604482015260640161067c565b6000818152600260205260409020546001600160a01b031615611cf75760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e481b5a5b9d195960621b604482015260640161067c565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b15611eaf57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611da6903390899088908890600401612348565b602060405180830381600087803b158015611dc057600080fd5b505af1925050508015611df0575060408051601f3d908101601f19168201909252611ded918101906120e2565b60015b611e95573d808015611e1e576040519150601f19603f3d011682016040523d82523d6000602084013e611e23565b606091505b508051611e8d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840161067c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115ef565b506001949350505050565b80356001600160a01b038116811461125557600080fd5b8035801515811461125557600080fd5b80356004811061125557600080fd5b600060208284031215611f0257600080fd5b61159182611eba565b60008060408385031215611f1e57600080fd5b611f2783611eba565b9150611f3560208401611eba565b90509250929050565b600080600060608486031215611f5357600080fd5b611f5c84611eba565b9250611f6a60208501611eba565b9150604084013590509250925092565b60008060008060808587031215611f9057600080fd5b611f9985611eba565b9350611fa760208601611eba565b925060408501359150606085013567ffffffffffffffff80821115611fcb57600080fd5b818701915087601f830112611fdf57600080fd5b813581811115611ff157611ff16125d9565b604051601f8201601f19908116603f01168101908382118183101715612019576120196125d9565b816040528281528a602084870101111561203257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561206957600080fd5b61207283611eba565b9150611f3560208401611ed1565b6000806040838503121561209357600080fd5b61209c83611eba565b946020939093013593505050565b6000602082840312156120bc57600080fd5b61159182611ed1565b6000602082840312156120d757600080fd5b8135611591816125ef565b6000602082840312156120f457600080fd5b8151611591816125ef565b60006020828403121561211157600080fd5b61159182611ee1565b60008060006060848603121561212f57600080fd5b61213884611ee1565b925061214660208501611eba565b915061215460408501611ed1565b90509250925092565b6000806000806060858703121561217357600080fd5b61217c85611ee1565b9350602085013567ffffffffffffffff8082111561219957600080fd5b818701915087601f8301126121ad57600080fd5b8135818111156121bc57600080fd5b8860208260051b85010111156121d157600080fd5b6020830195508094505050506121e960408601611ed1565b905092959194509250565b6000806040838503121561220757600080fd5b61207283611ee1565b6000806040838503121561222357600080fd5b61209c83611ee1565b60006020828403121561223e57600080fd5b5035919050565b6000815180845261225d8160208601602086016124d4565b601f01601f19169290920160200192915050565b600081516122838185602086016124d4565b9290920192915050565b600080845481600182811c9150808316806122a957607f831692505b60208084108214156122c957634e487b7160e01b86526022600452602486fd5b8180156122dd57600181146122ee5761231b565b60ff1986168952848901965061231b565b60008b81526020902060005b868110156123135781548b8201529085019083016122fa565b505084890196505b50505050505061233f61232e8286612271565b64173539b7b760d91b815260050190565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061237b90830184612245565b9695505050505050565b60208101600483106123a757634e487b7160e01b600052602160045260246000fd5b91905290565b6020815260006115916020830184612245565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b60208082526025908201527f63616c6c6572206973206e6f7420746f6b656e206f776e6572206f72206170706040820152641c9bdd995960da1b606082015260800190565b6000821982111561246057612460612581565b500190565b600060ff821660ff84168060ff0382111561248257612482612581565b019392505050565b60008261249957612499612597565b500490565b60008160001904831182151516156124b8576124b8612581565b500290565b6000828210156124cf576124cf612581565b500390565b60005b838110156124ef5781810151838201526020016124d7565b838111156111cf5750506000910152565b60008161250f5761250f612581565b506000190190565b600181811c9082168061252b57607f821691505b6020821081141561254c57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561256657612566612581565b5060010190565b60008261257c5761257c612597565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113b757600080fdfe68747470733a2f2f62616679626569646a74636b6a726833797967796b35716377783774343375616e377669626867756267353677736778656e796b666a35776877612e697066732e6e667473746f726167652e6c696e6b2f636c6f7365642e6a736f6ea2646970667358221220bba39214d46838eecf5e393cac02552fc2eaaa8173561850c9234bf23837551464736f6c63430008070033

Deployed Bytecode Sourcemap

9024:6789:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13956:146;;;;;;;;;;-1:-1:-1;13956:146:0;;;;;:::i;:::-;;:::i;:::-;;2959:294;;;;;;;;;;-1:-1:-1;2959:294:0;;;;;:::i;:::-;;:::i;:::-;;;9059:14:1;;9052:22;9034:41;;9022:2;9007:18;2959:294:0;;;;;;;;3693:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4323:171::-;;;;;;;;;;-1:-1:-1;4323:171:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8133:32:1;;;8115:51;;8103:2;8088:18;4323:171:0;7969:203:1;3917:398:0;;;;;;;;;;-1:-1:-1;3917:398:0;;;;;:::i;:::-;;:::i;9386:24::-;;;;;;;;;;-1:-1:-1;9386:24:0;;;;;;;;;;;;;;;:::i;13363:80::-;;;;;;;;;;-1:-1:-1;13363:80:0;;;;;:::i;:::-;;:::i;11632:392::-;;;;;;;;;;;;;:::i;:::-;;;;9364:14:1;;9357:22;9339:41;;9411:2;9396:18;;9389:34;;;;9439:18;;;9432:34;;;;9497:2;9482:18;;9475:34;9540:3;9525:19;;9518:35;9326:3;9311:19;11632:392:0;9086:473:1;13739:85:0;;;;;;;;;;-1:-1:-1;13739:85:0;;;;;:::i;:::-;;:::i;9449:27::-;;;;;;;;;;;;;;;;;;;17036:25:1;;;17024:2;17009:18;9449:27:0;16890:177:1;9105:19:0;;;;;;;;;;-1:-1:-1;9105:19:0;;;;-1:-1:-1;;;9105:19:0;;;;;;4837:327;;;;;;;;;;-1:-1:-1;4837:327:0;;;;;:::i;:::-;;:::i;9167:20::-;;;;;;;;;;;;;;;;14347:115;;;;;;;;;;-1:-1:-1;14347:115:0;;;;;:::i;:::-;;:::i;13652:79::-;;;;;;;;;;-1:-1:-1;13652:79:0;;;;;:::i;:::-;;:::i;12032:593::-;;;;;;:::i;:::-;;:::i;5172:187::-;;;;;;;;;;-1:-1:-1;5172:187:0;;;;;:::i;:::-;;:::i;14470:281::-;;;;;;;;;;-1:-1:-1;14470:281:0;;;;;:::i;:::-;;:::i;9131:29::-;;;;;;;;;;-1:-1:-1;9131:29:0;;;;-1:-1:-1;;;;;9131:29:0;;;9194:24;;;;;;;;;;;;;;;;9225:18;;;;;;;;;;-1:-1:-1;9225:18:0;;;;;;;;3470:215;;;;;;;;;;-1:-1:-1;3470:215:0;;;;;:::i;:::-;;:::i;13832:116::-;;;;;;;;;;-1:-1:-1;13832:116:0;;;;;:::i;:::-;;:::i;13533:111::-;;;;;;;;;;-1:-1:-1;13533:111:0;;;;;:::i;:::-;;:::i;3261:201::-;;;;;;;;;;-1:-1:-1;3261:201:0;;;;;:::i;:::-;;:::i;13452:72::-;;;;;;;;;;;;;:::i;9078:20::-;;;;;;;;;;-1:-1:-1;9078:20:0;;;;-1:-1:-1;;;;;9078:20:0;;;3803:106;;;;;;;;;;;;;:::i;4502:155::-;;;;;;;;;;-1:-1:-1;4502:155:0;;;;;:::i;:::-;;:::i;5367:312::-;;;;;;;;;;-1:-1:-1;5367:312:0;;;;;:::i;:::-;;:::i;11231:393::-;;;;;;;;;;-1:-1:-1;11231:393:0;;;;;:::i;:::-;;:::i;14110:229::-;;;;;;;;;;-1:-1:-1;14110:229:0;;;;;:::i;:::-;;:::i;4665:164::-;;;;;;;;;;-1:-1:-1;4665:164:0;;;;;:::i;:::-;;:::i;9419:23::-;;;;;;;;;;;;;;;;13956:146;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;;;;;;;;;14083:11:::1;14054:5;:11;14060:4;14054:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;:26;14076:3;-1:-1:-1::0;;;;;14054:26:0::1;-1:-1:-1::0;;;;;14054:26:0::1;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;13956:146:::0;;;:::o;2959:294::-;3046:4;-1:-1:-1;;;;;;3083:40:0;;-1:-1:-1;;;3083:40:0;;:105;;-1:-1:-1;;;;;;;3140:48:0;;-1:-1:-1;;;3140:48:0;3083:105;:162;;;-1:-1:-1;;;;;;;3205:40:0;;-1:-1:-1;;;3205:40:0;3083:162;3063:182;2959:294;-1:-1:-1;;2959:294:0:o;3693:102::-;3749:13;3782:5;3775:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3693:102;:::o;4323:171::-;4399:7;4419:23;4434:7;4419:14;:23::i;:::-;-1:-1:-1;4462:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;4462:24:0;;4323:171::o;3917:398::-;4000:13;4016:23;4031:7;4016:14;:23::i;:::-;4000:39;;4064:5;-1:-1:-1;;;;;4058:11:0;:2;-1:-1:-1;;;;;4058:11:0;;;4050:49;;;;-1:-1:-1;;;4050:49:0;;12233:2:1;4050:49:0;;;12215:21:1;12272:2;12252:18;;;12245:30;12311:27;12291:18;;;12284:55;12356:18;;4050:49:0;12031:349:1;4050:49:0;4134:10;-1:-1:-1;;;;;4134:19:0;;;;:58;;;4157:35;4174:5;4181:10;4157:16;:35::i;:::-;4112:161;;;;-1:-1:-1;;;4112:161:0;;12587:2:1;4112:161:0;;;12569:21:1;12626:2;12606:18;;;12599:30;12665:34;12645:18;;;12638:62;-1:-1:-1;;;12716:18:1;;;12709:51;12777:19;;4112:161:0;12385:417:1;4112:161:0;4286:21;4295:2;4299:7;4286:8;:21::i;:::-;3989:326;3917:398;;:::o;13363:80::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;13424:5:::1;:11:::0;;-1:-1:-1;;;;;;13424:11:0::1;-1:-1:-1::0;;;;;13424:11:0;;;::::1;::::0;;;::::1;::::0;;13363:80::o;11632:392::-;11671:11;11684:15;11701:20;11723;11745:21;11789:7;;;;;;;;;;;:37;;;;;11800:26;11812:10;11824:1;11800:11;:26::i;:::-;11853:8;;11780:46;;-1:-1:-1;11847:5:0;;:15;;11853:8;;11847:15;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;11847:15:0;;;:21;11894:9;;11936:8;;11847:21;;-1:-1:-1;11894:9:0;-1:-1:-1;11930:5:0;;-1:-1:-1;11936:8:0;;11930:15;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;11930:15:0;;;11956:10;11930:37;;:25;;;;:37;;;;;;;12001:8;;11930:37;;-1:-1:-1;11995:5:0;;12001:8;;;;;11995:15;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;11978:38;;11632:392;;;;;:::o;13739:85::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;13801:8:::1;:15:::0;;13812:4;;13801:8;-1:-1:-1;;13801:15:0::1;::::0;13812:4;13801:15:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;13739:85:::0;:::o;4837:327::-;5034:39;5053:10;5065:7;5034:18;:39::i;:::-;5026:89;;;;-1:-1:-1;;;5026:89:0;;;;;;;:::i;:::-;5128:28;5138:4;5144:2;5148:7;5128:9;:28::i;14347:115::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;14449:5:::1;14429;:11;14435:4;14429:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14429:11:0;:17:::1;;:25:::0;-1:-1:-1;;14347:115:0:o;13652:79::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;13711:7:::1;:12:::0;;;::::1;;-1:-1:-1::0;;;13711:12:0::1;-1:-1:-1::0;;;;13711:12:0;;::::1;::::0;;;::::1;::::0;;13652:79::o;12032:593::-;9961:7;;-1:-1:-1;;;9961:7:0;;;;9953:46;;;;-1:-1:-1;;;9953:46:0;;13829:2:1;9953:46:0;;;13811:21:1;13868:2;13848:18;;;13841:30;13907:28;13887:18;;;13880:56;13953:18;;9953:46:0;13627:350:1;9953:46:0;12132:6:::1;12119:9;;:19;;12110:64;;;::::0;-1:-1:-1;;;12110:64:0;;10335:2:1;12110:64:0::1;::::0;::::1;10317:21:1::0;10374:2;10354:18;;;10347:30;10413:33;10393:18;;;10386:61;10464:18;;12110:64:0::1;10133:355:1::0;12110:64:0::1;12193:31;12205:10;12217:6;12193:11;:31::i;:::-;12185:77;;;::::0;-1:-1:-1;;;12185:77:0;;14948:2:1;12185:77:0::1;::::0;::::1;14930:21:1::0;14987:2;14967:18;;;14960:30;15026:34;15006:18;;;14999:62;-1:-1:-1;;;15077:18:1;;;15070:31;15118:19;;12185:77:0::1;14746:397:1::0;12185:77:0::1;12301:8;::::0;12319:6;;12295:5:::1;::::0;:15:::1;::::0;12301:8:::1;;12295:15;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:30;;;;:::i;:::-;12282:9;:43;12273:77;;;::::0;-1:-1:-1;;;12273:77:0;;16390:2:1;12273:77:0::1;::::0;::::1;16372:21:1::0;16429:2;16409:18;;;16402:30;-1:-1:-1;;;16448:18:1;;;16441:50;16508:18;;12273:77:0::1;16188:344:1::0;12273:77:0::1;12373:8;::::0;12391:1:::1;::::0;12367:5:::1;::::0;12391:1;;12373:8:::1;;12367:15;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:25;12363:105;;;12409:6;::::0;12431:8:::1;::::0;-1:-1:-1;;;;;12409:6:0;;::::1;::::0;:47:::1;::::0;12449:6;;12425:5:::1;::::0;12409:6:::1;::::0;12431:8:::1;;12425:15;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;:30;;;;:::i;:::-;12409:47;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;12363:105;12485:9;12480:80;12504:6;12500:1;:10;12480:80;;;12532:16;12537:10;12532:4;:16::i;:::-;12512:3:::0;::::1;::::0;::::1;:::i;:::-;;;;12480:80;;;-1:-1:-1::0;12576:8:0::1;::::0;12611:6;;12570:5:::1;::::0;:15:::1;::::0;12576:8:::1;;12570:15;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;:37;12596:10;-1:-1:-1::0;;;;;12570:37:0::1;-1:-1:-1::0;;;;;12570:37:0::1;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;12032:593:0:o;5172:187::-;5312:39;5329:4;5335:2;5339:7;5312:39;;;;;;;;;;;;:16;:39::i;14470:281::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;14579:12:::1;;14569:6;14558:8;;:17;;;;:::i;:::-;:33;;14550:77;;;::::0;-1:-1:-1;;;14550:77:0;;10695:2:1;14550:77:0::1;::::0;::::1;10677:21:1::0;10734:2;10714:18;;;10707:30;10773:33;10753:18;;;10746:61;10824:18;;14550:77:0::1;10493:355:1::0;14550:77:0::1;14645:9;14640:73;14664:6;14660:1;:10;14640:73;;;14692:9;14697:3;14692:4;:9::i;:::-;14672:3:::0;::::1;::::0;::::1;:::i;:::-;;;;14640:73;;;;14737:6;14725:8;;:18;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;14470:281:0:o;3470:215::-;3542:7;6093:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6093:16:0;;3606:48;;;;-1:-1:-1;;;3606:48:0;;15350:2:1;3606:48:0;;;15332:21:1;15389:2;15369:18;;;15362:30;-1:-1:-1;;;15408:18:1;;;15401:46;15464:18;;3606:48:0;15148:340:1;13832:116:0;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;13938:2:::1;13911:5;:11;13917:4;13911:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13911:11:0;:24:::1;;:29:::0;;-1:-1:-1;;13911:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;13832:116:0:o;13533:111::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;13631:5:::1;13611;:11;13617:4;13611:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13611:11:0;:25;-1:-1:-1;;13533:111:0:o;3261:201::-;3335:7;-1:-1:-1;;;;;3363:19:0;;3355:65;;;;-1:-1:-1;;;3355:65:0;;11831:2:1;3355:65:0;;;11813:21:1;11870:2;11850:18;;;11843:30;11909:34;11889:18;;;11882:62;-1:-1:-1;;;11960:18:1;;;11953:31;12001:19;;3355:65:0;11629:397:1;3355:65:0;-1:-1:-1;;;;;;3438:16:0;;;;;:9;:16;;;;;;;3261:201::o;13452:72::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;13503:6:::1;:13:::0;;-1:-1:-1;;13503:13:0::1;13512:4;13503:13;::::0;;13452:72::o;3803:106::-;3861:13;3894:7;3887:14;;;;;:::i;4502:155::-;4599:50;4618:10;4630:8;4640;4599:18;:50::i;:::-;4502:155;;:::o;5367:312::-;5541:39;5560:10;5572:7;5541:18;:39::i;:::-;5533:89;;;;-1:-1:-1;;;5533:89:0;;;;;;;:::i;:::-;5633:38;5647:4;5653:2;5657:7;5666:4;5633:13;:38::i;:::-;5367:312;;;;:::o;11231:393::-;6190:4;6093:16;;;:7;:16;;;;;;11298:13;;-1:-1:-1;;;;;6093:16:0;11324:25;;;;;;11366:6;;;;11362:255;;;11420:13;11435:17;11444:7;11435:8;:17::i;:::-;11403:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11389:74;;11231:393;;;:::o;11362:255::-;11496:109;;;;;;;;;;;;;;;;;;11231:393;-1:-1:-1;;11231:393:0:o;11362:255::-;11231:393;;;:::o;14110:229::-;9843:5;;-1:-1:-1;;;;;9843:5:0;9829:10;:19;9821:72;;;;-1:-1:-1;;;9821:72:0;;;;;;;:::i;:::-;14226:9:::1;14221:111;14241:14:::0;;::::1;14221:111;;;14309:11;14277:5;:11;14283:4;14277:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;:29;14299:3;;14303:1;14299:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14277:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14277:29:0;:43;;-1:-1:-1;;14277:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14257:3;::::1;::::0;::::1;:::i;:::-;;;;14221:111;;;;14110:229:::0;;;;:::o;4665:164::-;-1:-1:-1;;;;;4786:25:0;;;4762:4;4786:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4665:164::o;8031:127::-;6190:4;6093:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6093:16:0;8105:45;;;;-1:-1:-1;;;8105:45:0;;15350:2:1;8105:45:0;;;15332:21:1;15389:2;15369:18;;;15362:30;-1:-1:-1;;;15408:18:1;;;15401:46;15464:18;;8105:45:0;15148:340:1;8105:45:0;8031:127;:::o;7534:174::-;7609:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;7609:29:0;-1:-1:-1;;;;;7609:29:0;;;;;;;;:24;;7663:23;7609:24;7663:14;:23::i;:::-;-1:-1:-1;;;;;7654:46:0;;;;;;;;;;;7534:174;;:::o;14777:259::-;14922:8;;14849:4;;14916:5;;14849:4;;14922:8;;14916:15;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:21;;;14906:6;14873:5;:15;14879:8;;;;;;;;;;;14873:15;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;:30;14899:3;-1:-1:-1;;;;;14873:30:0;-1:-1:-1;;;;;14873:30:0;;;;;;;;;;;;;:39;;;;:::i;:::-;:64;;:155;;;;-1:-1:-1;14962:8:0;;14956:5;;:15;;14962:8;;14956:15;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;14956:15:0;:28;;;;;:37;;:71;;-1:-1:-1;15003:8:0;;14997:5;;:15;;15003:8;;14997:15;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;14997:15:0;;;-1:-1:-1;;;;;14997:30:0;;;;:25;;:30;;;;;;;;14956:71;14866:162;14777:259;-1:-1:-1;;;14777:259:0:o;6261:264::-;6354:4;6371:13;6387:23;6402:7;6387:14;:23::i;:::-;6371:39;;6440:5;-1:-1:-1;;;;;6429:16:0;:7;-1:-1:-1;;;;;6429:16:0;;:52;;;;6449:32;6466:5;6473:7;6449:16;:32::i;:::-;6429:87;;;;6509:7;-1:-1:-1;;;;;6485:31:0;:20;6497:7;6485:11;:20::i;:::-;-1:-1:-1;;;;;6485:31:0;;6429:87;6421:96;6261:264;-1:-1:-1;;;;6261:264:0:o;6948:578::-;7107:4;-1:-1:-1;;;;;7080:31:0;:23;7095:7;7080:14;:23::i;:::-;-1:-1:-1;;;;;7080:31:0;;7072:73;;;;-1:-1:-1;;;7072:73:0;;14184:2:1;7072:73:0;;;14166:21:1;14223:2;14203:18;;;14196:30;14262:31;14242:18;;;14235:59;14311:18;;7072:73:0;13982:353:1;7072:73:0;-1:-1:-1;;;;;7164:16:0;;7156:57;;;;-1:-1:-1;;;7156:57:0;;11474:2:1;7156:57:0;;;11456:21:1;11513:2;11493:18;;;11486:30;11552;11532:18;;;11525:58;11600:18;;7156:57:0;11272:352:1;7156:57:0;7259:4;-1:-1:-1;;;;;7232:31:0;:23;7247:7;7232:14;:23::i;:::-;-1:-1:-1;;;;;7232:31:0;;7224:73;;;;-1:-1:-1;;;7224:73:0;;14184:2:1;7224:73:0;;;14166:21:1;14223:2;14203:18;;;14196:30;14262:31;14242:18;;;14235:59;14311:18;;7224:73:0;13982:353:1;7224:73:0;7315:24;;;;:15;:24;;;;;;;;7308:31;;-1:-1:-1;;;;;;7308:31:0;;;;;;-1:-1:-1;;;;;7377:15:0;;;;;;:9;:15;;;;;:20;;-1:-1:-1;;7377:20:0;;;7412:13;;;;;;;;;:18;;7308:31;7412:18;;;7452:16;;;:7;:16;;;;;;:21;;;;;;;;;;7491:27;;7331:7;;7491:27;;;6948:578;;;:::o;12633:706::-;12679:16;12698:20;:18;:20::i;:::-;12760:8;:15;12679:39;;-1:-1:-1;12729:17:0;;12749:26;;12679:39;12749:26;:::i;:::-;12729:46;;12786:169;12793:8;12802:9;12793:19;;;;;;;;:::i;:::-;;;;;;;;;12816:1;12793:24;12786:169;;;12834:11;;;;:::i;:::-;12879:8;:15;12834:11;;-1:-1:-1;12866:28:0;;;-1:-1:-1;12862:82:0;;-1:-1:-1;12927:1:0;12862:82;12786:169;;;12967:15;12985:20;:18;:20::i;:::-;12967:38;;13016:12;13041:9;;13031:7;:19;;;;:::i;:::-;:23;;13053:1;13031:23;:::i;:::-;13016:38;;13065:160;13072:37;13104:4;13092:9;;13080;:21;;;;:::i;:::-;:28;;;;:::i;:::-;6190:4;6093:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6093:16:0;6214:31;;;6125:128;13072:37;13065:160;;;13126:6;;;;:::i;:::-;;;;13160:9;;13153:4;:16;13149:65;;;-1:-1:-1;13197:1:0;13149:65;13065:160;;;13237:40;13243:3;13272:4;13260:9;;13248;:21;;;;:::i;:::-;:28;;;;:::i;:::-;13237:5;:40::i;:::-;13288:8;13297:9;13288:19;;;;;;;;:::i;:::-;;;;;;;;;:21;;;;;;:::i;:::-;;;;-1:-1:-1;;13320:9:0;:11;;;:9;:11;;;:::i;:::-;;;;;;12668:671;;;;12633:706;:::o;7716:307::-;7871:8;-1:-1:-1;;;;;7862:17:0;:5;-1:-1:-1;;;;;7862:17:0;;;7854:47;;;;-1:-1:-1;;;7854:47:0;;16044:2:1;7854:47:0;;;16026:21:1;16083:2;16063:18;;;16056:30;-1:-1:-1;;;16102:18:1;;;16095:47;16159:18;;7854:47:0;15842:341:1;7854:47:0;-1:-1:-1;;;;;7912:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;7912:46:0;;;;;;;;;;7974:41;;9034::1;;;7974::0;;9007:18:1;7974:41:0;;;;;;;7716:307;;;:::o;5687:305::-;5843:28;5853:4;5859:2;5863:7;5843:9;:28::i;:::-;5890:47;5913:4;5919:2;5923:7;5932:4;5890:22;:47::i;:::-;5882:102;;;;-1:-1:-1;;;5882:102:0;;13418:2:1;5882:102:0;;;13400:21:1;13457:2;13437:18;;;13430:30;13496:34;13476:18;;;13469:62;-1:-1:-1;;;13547:18:1;;;13540:40;13597:19;;5882:102:0;13216:406:1;15044:572:0;15093:27;15137:7;15133:50;;-1:-1:-1;;15161:10:0;;;;;;;;;;;;-1:-1:-1;;;15161:10:0;;;;;15044:572::o;15133:50::-;15202:2;15193:6;15234:69;15241:6;;15234:69;;15264:5;;;;:::i;:::-;;-1:-1:-1;15284:7:0;;-1:-1:-1;15289:2:0;15284:7;;:::i;:::-;;;15234:69;;;15313:17;15343:3;15333:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15333:14:0;-1:-1:-1;15313:34:0;-1:-1:-1;15367:3:0;15381:198;15388:7;;15381:198;;15416:3;15418:1;15416;:3;:::i;:::-;15412:7;-1:-1:-1;15434:10:0;15464:7;15469:2;15464;:7;:::i;:::-;:12;;15474:2;15464:12;:::i;:::-;15459:17;;:2;:17;:::i;:::-;15448:29;;:2;:29;:::i;:::-;15434:44;;15493:9;15512:4;15505:12;;15493:24;;15542:2;15532:4;15537:1;15532:7;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;15532:12:0;;;;;;;;-1:-1:-1;15559:8:0;15565:2;15559:8;;:::i;:::-;;;15397:182;;15381:198;;;-1:-1:-1;15603:4:0;15044:572;-1:-1:-1;;;;15044:572:0:o;15624:184::-;15671:7;15700:1;15691:5;;:10;;;;;;;:::i;:::-;;;;-1:-1:-1;;15751:5:0;;15758:10;15780:16;15795:1;15780:12;:16;:::i;:::-;15770:27;15734:64;;;;;;;;;7790:19:1;;;7847:2;7843:15;;;;-1:-1:-1;;7839:53:1;7834:2;7825:12;;7818:75;7918:2;7909:12;;7902:28;7955:2;7946:12;;7605:359;15734:64:0;;;;;;;;;;;;;15724:75;;;;;;15719:81;;15712:88;;15624:184;:::o;6533:407::-;-1:-1:-1;;;;;6613:16:0;;6605:53;;;;-1:-1:-1;;;6605:53:0;;16739:2:1;6605:53:0;;;16721:21:1;16778:2;16758:18;;;16751:30;16817:26;16797:18;;;16790:54;16861:18;;6605:53:0;16537:348:1;6605:53:0;6190:4;6093:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6093:16:0;6214:31;6669:50;;;;-1:-1:-1;;;6669:50:0;;15695:2:1;6669:50:0;;;15677:21:1;15734:2;15714:18;;;15707:30;-1:-1:-1;;;15753:18:1;;;15746:50;15813:18;;6669:50:0;15493:344:1;6669:50:0;6190:4;6093:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6093:16:0;6214:31;6730:50;;;;-1:-1:-1;;;6730:50:0;;15695:2:1;6730:50:0;;;15677:21:1;15734:2;15714:18;;;15707:30;-1:-1:-1;;;15753:18:1;;;15746:50;15813:18;;6730:50:0;15493:344:1;6730:50:0;-1:-1:-1;;;;;6818:13:0;;;;;;:9;:13;;;;;;;;:18;;6835:1;6818:18;;;6860:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;6860:21:0;;;;;6899:33;6868:7;;6818:13;;6899:33;;6818:13;;6899:33;6533:407;;:::o;8166:851::-;8320:4;-1:-1:-1;;;;;8341:13:0;;2405:19;:23;8337:673;;8377:69;;-1:-1:-1;;;8377:69:0;;-1:-1:-1;;;;;8377:36:0;;;;;:69;;8414:10;;8426:4;;8432:7;;8441:4;;8377:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8377:69:0;;;;;;;;-1:-1:-1;;8377:69:0;;;;;;;;;;;;:::i;:::-;;;8373:582;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8616:13:0;;8612:328;;8659:60;;-1:-1:-1;;;8659:60:0;;11055:2:1;8659:60:0;;;11037:21:1;11094:2;11074:18;;;11067:30;11133:34;11113:18;;;11106:62;-1:-1:-1;;;11184:18:1;;;11177:48;11242:19;;8659:60:0;10853:414:1;8612:328:0;8890:6;8884:13;8875:6;8871:2;8867:15;8860:38;8373:582;-1:-1:-1;;;;;;8497:51:0;-1:-1:-1;;;8497:51:0;;-1:-1:-1;8490:58:0;;8337:673;-1:-1:-1;8994:4:0;8166:851;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;192:160;257:20;;313:13;;306:21;296:32;;286:60;;342:1;339;332:12;357:149;431:20;;480:1;470:12;;460:40;;496:1;493;486:12;511:186;570:6;623:2;611:9;602:7;598:23;594:32;591:52;;;639:1;636;629:12;591:52;662:29;681:9;662:29;:::i;702:260::-;770:6;778;831:2;819:9;810:7;806:23;802:32;799:52;;;847:1;844;837:12;799:52;870:29;889:9;870:29;:::i;:::-;860:39;;918:38;952:2;941:9;937:18;918:38;:::i;:::-;908:48;;702:260;;;;;:::o;967:328::-;1044:6;1052;1060;1113:2;1101:9;1092:7;1088:23;1084:32;1081:52;;;1129:1;1126;1119:12;1081:52;1152:29;1171:9;1152:29;:::i;:::-;1142:39;;1200:38;1234:2;1223:9;1219:18;1200:38;:::i;:::-;1190:48;;1285:2;1274:9;1270:18;1257:32;1247:42;;967:328;;;;;:::o;1300:1138::-;1395:6;1403;1411;1419;1472:3;1460:9;1451:7;1447:23;1443:33;1440:53;;;1489:1;1486;1479:12;1440:53;1512:29;1531:9;1512:29;:::i;:::-;1502:39;;1560:38;1594:2;1583:9;1579:18;1560:38;:::i;:::-;1550:48;;1645:2;1634:9;1630:18;1617:32;1607:42;;1700:2;1689:9;1685:18;1672:32;1723:18;1764:2;1756:6;1753:14;1750:34;;;1780:1;1777;1770:12;1750:34;1818:6;1807:9;1803:22;1793:32;;1863:7;1856:4;1852:2;1848:13;1844:27;1834:55;;1885:1;1882;1875:12;1834:55;1921:2;1908:16;1943:2;1939;1936:10;1933:36;;;1949:18;;:::i;:::-;2024:2;2018:9;1992:2;2078:13;;-1:-1:-1;;2074:22:1;;;2098:2;2070:31;2066:40;2054:53;;;2122:18;;;2142:22;;;2119:46;2116:72;;;2168:18;;:::i;:::-;2208:10;2204:2;2197:22;2243:2;2235:6;2228:18;2283:7;2278:2;2273;2269;2265:11;2261:20;2258:33;2255:53;;;2304:1;2301;2294:12;2255:53;2360:2;2355;2351;2347:11;2342:2;2334:6;2330:15;2317:46;2405:1;2400:2;2395;2387:6;2383:15;2379:24;2372:35;2426:6;2416:16;;;;;;;1300:1138;;;;;;;:::o;2443:254::-;2508:6;2516;2569:2;2557:9;2548:7;2544:23;2540:32;2537:52;;;2585:1;2582;2575:12;2537:52;2608:29;2627:9;2608:29;:::i;:::-;2598:39;;2656:35;2687:2;2676:9;2672:18;2656:35;:::i;2702:254::-;2770:6;2778;2831:2;2819:9;2810:7;2806:23;2802:32;2799:52;;;2847:1;2844;2837:12;2799:52;2870:29;2889:9;2870:29;:::i;:::-;2860:39;2946:2;2931:18;;;;2918:32;;-1:-1:-1;;;2702:254:1:o;2961:180::-;3017:6;3070:2;3058:9;3049:7;3045:23;3041:32;3038:52;;;3086:1;3083;3076:12;3038:52;3109:26;3125:9;3109:26;:::i;3146:245::-;3204:6;3257:2;3245:9;3236:7;3232:23;3228:32;3225:52;;;3273:1;3270;3263:12;3225:52;3312:9;3299:23;3331:30;3355:5;3331:30;:::i;3396:249::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:52;;;3534:1;3531;3524:12;3486:52;3566:9;3560:16;3585:30;3609:5;3585:30;:::i;3650:204::-;3721:6;3774:2;3762:9;3753:7;3749:23;3745:32;3742:52;;;3790:1;3787;3780:12;3742:52;3813:35;3838:9;3813:35;:::i;3859:346::-;3945:6;3953;3961;4014:2;4002:9;3993:7;3989:23;3985:32;3982:52;;;4030:1;4027;4020:12;3982:52;4053:35;4078:9;4053:35;:::i;:::-;4043:45;;4107:38;4141:2;4130:9;4126:18;4107:38;:::i;:::-;4097:48;;4164:35;4195:2;4184:9;4180:18;4164:35;:::i;:::-;4154:45;;3859:346;;;;;:::o;4210:775::-;4323:6;4331;4339;4347;4400:2;4388:9;4379:7;4375:23;4371:32;4368:52;;;4416:1;4413;4406:12;4368:52;4439:35;4464:9;4439:35;:::i;:::-;4429:45;;4525:2;4514:9;4510:18;4497:32;4548:18;4589:2;4581:6;4578:14;4575:34;;;4605:1;4602;4595:12;4575:34;4643:6;4632:9;4628:22;4618:32;;4688:7;4681:4;4677:2;4673:13;4669:27;4659:55;;4710:1;4707;4700:12;4659:55;4750:2;4737:16;4776:2;4768:6;4765:14;4762:34;;;4792:1;4789;4782:12;4762:34;4845:7;4840:2;4830:6;4827:1;4823:14;4819:2;4815:23;4811:32;4808:45;4805:65;;;4866:1;4863;4856:12;4805:65;4897:2;4893;4889:11;4879:21;;4919:6;4909:16;;;;;4944:35;4975:2;4964:9;4960:18;4944:35;:::i;:::-;4934:45;;4210:775;;;;;;;:::o;4990:272::-;5067:6;5075;5128:2;5116:9;5107:7;5103:23;5099:32;5096:52;;;5144:1;5141;5134:12;5096:52;5167:35;5192:9;5167:35;:::i;5267:272::-;5347:6;5355;5408:2;5396:9;5387:7;5383:23;5379:32;5376:52;;;5424:1;5421;5414:12;5376:52;5447:35;5472:9;5447:35;:::i;5544:180::-;5603:6;5656:2;5644:9;5635:7;5631:23;5627:32;5624:52;;;5672:1;5669;5662:12;5624:52;-1:-1:-1;5695:23:1;;5544:180;-1:-1:-1;5544:180:1:o;5729:257::-;5770:3;5808:5;5802:12;5835:6;5830:3;5823:19;5851:63;5907:6;5900:4;5895:3;5891:14;5884:4;5877:5;5873:16;5851:63;:::i;:::-;5968:2;5947:15;-1:-1:-1;;5943:29:1;5934:39;;;;5975:4;5930:50;;5729:257;-1:-1:-1;;5729:257:1:o;5991:185::-;6033:3;6071:5;6065:12;6086:52;6131:6;6126:3;6119:4;6112:5;6108:16;6086:52;:::i;:::-;6154:16;;;;;5991:185;-1:-1:-1;;5991:185:1:o;6299:1301::-;6576:3;6605:1;6638:6;6632:13;6668:3;6690:1;6718:9;6714:2;6710:18;6700:28;;6778:2;6767:9;6763:18;6800;6790:61;;6844:4;6836:6;6832:17;6822:27;;6790:61;6870:2;6918;6910:6;6907:14;6887:18;6884:38;6881:165;;;-1:-1:-1;;;6945:33:1;;7001:4;6998:1;6991:15;7031:4;6952:3;7019:17;6881:165;7062:18;7089:104;;;;7207:1;7202:320;;;;7055:467;;7089:104;-1:-1:-1;;7122:24:1;;7110:37;;7167:16;;;;-1:-1:-1;7089:104:1;;7202:320;17145:1;17138:14;;;17182:4;17169:18;;7297:1;7311:165;7325:6;7322:1;7319:13;7311:165;;;7403:14;;7390:11;;;7383:35;7446:16;;;;7340:10;;7311:165;;;7315:3;;7505:6;7500:3;7496:16;7489:23;;7055:467;;;;;;;7538:56;7563:30;7589:3;7581:6;7563:30;:::i;:::-;-1:-1:-1;;;6241:20:1;;6286:1;6277:11;;6181:113;7538:56;7531:63;6299:1301;-1:-1:-1;;;;;6299:1301:1:o;8401:488::-;-1:-1:-1;;;;;8670:15:1;;;8652:34;;8722:15;;8717:2;8702:18;;8695:43;8769:2;8754:18;;8747:34;;;8817:3;8812:2;8797:18;;8790:31;;;8595:4;;8838:45;;8863:19;;8855:6;8838:45;:::i;:::-;8830:53;8401:488;-1:-1:-1;;;;;;8401:488:1:o;9564:340::-;9708:2;9693:18;;9741:1;9730:13;;9720:144;;9786:10;9781:3;9777:20;9774:1;9767:31;9821:4;9818:1;9811:15;9849:4;9846:1;9839:15;9720:144;9873:25;;;9564:340;:::o;9909:219::-;10058:2;10047:9;10040:21;10021:4;10078:44;10118:2;10107:9;10103:18;10095:6;10078:44;:::i;12807:404::-;13009:2;12991:21;;;13048:2;13028:18;;;13021:30;13087:34;13082:2;13067:18;;13060:62;-1:-1:-1;;;13153:2:1;13138:18;;13131:38;13201:3;13186:19;;12807:404::o;14340:401::-;14542:2;14524:21;;;14581:2;14561:18;;;14554:30;14620:34;14615:2;14600:18;;14593:62;-1:-1:-1;;;14686:2:1;14671:18;;14664:35;14731:3;14716:19;;14340:401::o;17198:128::-;17238:3;17269:1;17265:6;17262:1;17259:13;17256:39;;;17275:18;;:::i;:::-;-1:-1:-1;17311:9:1;;17198:128::o;17331:204::-;17369:3;17405:4;17402:1;17398:12;17437:4;17434:1;17430:12;17472:3;17466:4;17462:14;17457:3;17454:23;17451:49;;;17480:18;;:::i;:::-;17516:13;;17331:204;-1:-1:-1;;;17331:204:1:o;17540:120::-;17580:1;17606;17596:35;;17611:18;;:::i;:::-;-1:-1:-1;17645:9:1;;17540:120::o;17665:168::-;17705:7;17771:1;17767;17763:6;17759:14;17756:1;17753:21;17748:1;17741:9;17734:17;17730:45;17727:71;;;17778:18;;:::i;:::-;-1:-1:-1;17818:9:1;;17665:168::o;17838:125::-;17878:4;17906:1;17903;17900:8;17897:34;;;17911:18;;:::i;:::-;-1:-1:-1;17948:9:1;;17838:125::o;17968:258::-;18040:1;18050:113;18064:6;18061:1;18058:13;18050:113;;;18140:11;;;18134:18;18121:11;;;18114:39;18086:2;18079:10;18050:113;;;18181:6;18178:1;18175:13;18172:48;;;-1:-1:-1;;18216:1:1;18198:16;;18191:27;17968:258::o;18231:136::-;18270:3;18298:5;18288:39;;18307:18;;:::i;:::-;-1:-1:-1;;;18343:18:1;;18231:136::o;18372:380::-;18451:1;18447:12;;;;18494;;;18515:61;;18569:4;18561:6;18557:17;18547:27;;18515:61;18622:2;18614:6;18611:14;18591:18;18588:38;18585:161;;;18668:10;18663:3;18659:20;18656:1;18649:31;18703:4;18700:1;18693:15;18731:4;18728:1;18721:15;18585:161;;18372:380;;;:::o;18757:135::-;18796:3;-1:-1:-1;;18817:17:1;;18814:43;;;18837:18;;:::i;:::-;-1:-1:-1;18884:1:1;18873:13;;18757:135::o;18897:112::-;18929:1;18955;18945:35;;18960:18;;:::i;:::-;-1:-1:-1;18994:9:1;;18897:112::o;19014:127::-;19075:10;19070:3;19066:20;19063:1;19056:31;19106:4;19103:1;19096:15;19130:4;19127:1;19120:15;19146:127;19207:10;19202:3;19198:20;19195:1;19188:31;19238:4;19235:1;19228:15;19262:4;19259:1;19252:15;19278:127;19339:10;19334:3;19330:20;19327:1;19320:31;19370:4;19367:1;19360:15;19394:4;19391:1;19384:15;19410:127;19471:10;19466:3;19462:20;19459:1;19452:31;19502:4;19499:1;19492:15;19526:4;19523:1;19516:15;19542:127;19603:10;19598:3;19594:20;19591:1;19584:31;19634:4;19631:1;19624:15;19658:4;19655:1;19648:15;19674:131;-1:-1:-1;;;;;;19748:32:1;;19738:43;;19728:71;;19795:1;19792;19785:12

Swarm Source

ipfs://bba39214d46838eecf5e393cac02552fc2eaaa8173561850c9234bf238375514
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.