ETH Price: $3,941.89 (+7.41%)

Token

Mounts (for Adventurers) (MOUNT)
 

Overview

Max Total Supply

501 MOUNT

Holders

56

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
jellyman.eth
Balance
1 MOUNT
0x483F6818dEBa23E859F6D5f8AE3e01a02E9d5034
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Mounts

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 8000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-13
*/

/**
 *Submitted for verification at Etherscan.io on 2022-03-12
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
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
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _setOwner(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
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);
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);

        _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 _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
   mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    } 
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { 
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId]; 
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        } 
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    } 
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { 
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId]; 
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index 
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


contract Mounts is ERC721Enumerable, ReentrancyGuard, Ownable {
    // using SafeMath for uint256;
    using Strings for uint256;

    uint256 private TOTALSUPPLY = 8000;
    uint256 private reserved = 100;
    uint256 public price = 0.05 ether;
    uint256 public maxPerTxn = 20;
    uint256 public maxPerAdd = 100;
    uint256 public status = 0; // 0 - pause , 1 - whitelist , 2- public
    mapping(uint256 => uint256) public tokenTime;
    mapping(address => bool) public whitelist;

    string[] private Type = [
         "Donkey", "Donkey", "Donkey", "Donkey", "Donkey", "Mule", "Mule", "Mule", "Mule", "Mule", "Pony", "Pony", "Pony", "Pony", "Pony", "Camel", "Camel", "Camel", "Camel", "Camel", "Horse", "Horse", "Horse", "Horse", "Horse", "CaveBear", "CaveBear", "CaveBear", "CaveBear", "Direwolf", "Direwolf", "Direwolf", "Direwolf", "Chimera", "Chimera", "Chimera", "Pegasus", "Pegasus", "Pegasus", "Phoenix", "Phoenix", "Phoenix", "Gryphon", "Gryphon", "Gryphon", "Wyvern", "Wyvern", "Wyvern", "Dragon", "Dragon", "Flying Rug"
    ];
    
    string[] private Prefix = [
        "Warforged", "Ironbound", "Winterborn", "Stonehide", "Darkforge", "Royal", "Lightsworn", "Vicious", "Cataclysmic", "Merciless", "Bloodthirsty", "Corrupted", "Smoldering", "Wrathful", "Gilded", "Ghastly", "Regal", "Enchanted", "Primal", "Malevolent", "Prestigious", "Dire", "Tempest", "Magnificent", "Majestic", "Miraculous", "Righteous", "Exquisite", "Mythical", "Spellbinding", "Loyal", "Battleforged", "Elusive", "Shadowfall", "Dawnbringer", "Dusklight", "Stormrage", "Ironforge", "Fearless", "Bold", "Courageous", "Heroic"
    ];
    
    string[] private Suffix = [
        "of the Wind", "of Flamethrowing", "of Fire", "of the Night", "of Sorcery", "of Stealth", "of Protection", "of Enlightenment", "of the Fox", "of Brilliance", "of Storms", "of Rage", "of Perfection", "of Awe", "of Wonder", "of Courage", "of Majesty", "of Endurance", "of Resilience", "of Fortitude", "of Vitality", "of the Nether", "of Anger", "of Reflection", "of the Twins", "of Power", "of Detection", "of Skill", "of Vitriol", "of Giants", "of Fury", "of Titans", "of Brilliance"

    ];
    
    string[] private Color = [
        "Tan", "Tan", "Tan", "Tan", "Brown", "Brown", "Brown", "Brown", "Grey", "Grey", "Grey", "Grey", "Ivory", "Ivory", "Ivory", "Obsidian", "Obsidian", "Obsidian", "Green", "Green", "Green", "Crimson", "Crimson", "Crimson", "Golden", "Golden", "Silver", "Silver", "Iridescent"
    ];
    
    string[] private Gender = [
        "Male", "Female"
    ]; 

    function random(string memory input, uint256 tokenId, uint256 start, uint256 end) public view  returns (uint256) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return (uint256(keccak256(abi.encodePacked(input, tokenId.toString(), tokenTime[tokenId]))) + start)%end;
    }
    
    function getType(uint256 tokenId) public view returns (string memory) {
        return Type[random("Type", tokenId, 0, 51)];
    }

    function getPrefix(uint256 tokenId) public view returns (string memory) {
        return Prefix[random("Prefix", tokenId, 0, 42)];
    }

    function getSuffix(uint256 tokenId) public view returns (string memory) {
        return Suffix[random("Suffix", tokenId, 0, 33)];
    }

    function getGender(uint256 tokenId) public view returns (string memory) {
        return Gender[random("Gender", tokenId, 0, 2)];
    }

    function getColor(uint256 tokenId) public view returns (string memory) {
        return Color[random("Color", tokenId, 0, 29)];
    }

    function getSpeed(uint256 tokenId) public view returns(uint256){
        return random("Speed", tokenId, 0, 100)+1;
    }
    function getStrength(uint256 tokenId) public view returns(uint256){
        return random("Strength", tokenId, 0, 100)+1;
    }
    function getStamina(uint256 tokenId) public view returns(uint256){
        return random("Stamina", tokenId, 0, 100)+1;
    }
    function getEndurance(uint256 tokenId) public view returns(uint256){
        return random("Endurance", tokenId, 0, 100)+1;
    }
    function getName(uint256 tokenId) public view returns (string memory) {
        uint256 r = random("Name", tokenId, 0, 100);
        
        if( r < 50 ) return getType(tokenId);

        else if( r < 80 ) return string( abi.encodePacked(
            getPrefix(tokenId),
            " ",
            getType(tokenId)
            )
        );

        else if( r < 95 )return string( abi.encodePacked(
            getType(tokenId),
            " ",
            getSuffix(tokenId)
            )
        );

        else if( r <= 100 ) return string( abi.encodePacked(
            getPrefix(tokenId),
            " ",
            getType(tokenId),
            " ",
            getSuffix(tokenId)
            )
        );
        return "";   
    }

    function getColorId(uint256 r) public pure returns(string memory){
        if( r < 50 ) return "#fff";
        else if( r < 80 ) return "#00a2e8";
        else if( r < 95 ) return "#a3498d";
        else if( r <= 100 ) return "#ffc90a";
        return "";
    }

    function tokenURI(uint256 tokenId) override public view returns (string memory){

        string[25] memory parts;

        parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 430 350"><style>.base { fill: white; font-family: arial; font-weight: 100; font-size: 24px; } .name {fill:';
        
        parts[1] = getColorId(random("Name", tokenId, 0, 100));

        parts[2] = '}.speed{fill :';
        
        parts[3] = getColorId(getSpeed(tokenId));

        parts[4] = '}.stamina{fill :';

        parts[5] = getColorId(getStamina(tokenId));

        parts[6] = '}.strength{fill :';

        parts[7] = getColorId(getStrength(tokenId));

        parts[8] = '}.endurance{fill :';

        parts[9] = getColorId(getEndurance(tokenId));

        parts[10] ='</style><rect width="100%" height="100%" fill="black" /><text x="10" y="50" class="base name">';

        parts[11] = getName(tokenId);

        parts[12] = '</text><text x="10" y="80" class="base">';

        parts[13] = getColor(tokenId);

        parts[14] = '</text><text x="10" y="110" class="base">';

        parts[15] = getGender(tokenId);

        parts[16] = '</text><text x="10" y="140" class="base speed">Speed ';

        parts[17] = getSpeed(tokenId).toString();

        parts[18] = '</text><text x="10" y="170" class="base stamina">Stamina ';

        parts[19] = getStamina(tokenId).toString();

        parts[20] = '</text><text x="10" y="200" class="base strength">Strength ';

        parts[21] = getStrength(tokenId).toString();

        parts[22] = '</text><text x="10" y="230" class="base endurance">Endurance ';

        parts[23] = getEndurance(tokenId).toString();

        parts[24] = '</text></svg>';

        string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]));
        output = string(abi.encodePacked(output, parts[9], parts[10], parts[11], parts[12], parts[13], parts[14], parts[15], parts[16]));
        output = string(abi.encodePacked(output, parts[17], parts[18], parts[19], parts[20], parts[21], parts[22], parts[23], parts[24]));

        string memory traits = string(abi.encodePacked('{"trait_type": "Generation","value": "0"},{"trait_type": "Color","value": "',parts[13],'"},{"trait_type": "Gender","value": "',parts[15],'"},{"trait_type": "Speed","value": "',parts[17],'"},{"trait_type": "Stamina","value": "',parts[19],'"},{"trait_type": "Strength","value": "',parts[21],'"},{"trait_type": "Endurance","value": "',parts[23],'"}'));
        
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "', parts[11], '","description": "8000 randomized on chain Mounts (for Adventurers). Mounts are intended to be used by adventurers to get around the world in which they are exploring. Each mount has a basic set of stats and properties that can be used and interpreted as desired.","image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '", "traits": [', traits,'] }'))));
        
        output = string(abi.encodePacked('data:application/json;base64,', json));

        return output;
    }
    function mint(uint256 q) public nonReentrant payable {
        require(status == 2, "Public Sale not active");
        require(totalSupply() + q <= (TOTALSUPPLY - reserved), "Token ID invalid");
        require(price*q == msg.value, "Incorrect Ether value");
        require(q <= maxPerTxn, "Cannot mint this many at once");
        for(uint i=0; i<q; i++){
            _safeMint(_msgSender(), totalSupply()+1);
            tokenTime[totalSupply()] = block.timestamp;
        }
    }
    function presaleMint(uint256 q) public nonReentrant payable {
        require(status == 1, "Whitelist not active");
        require(totalSupply()+q <= (TOTALSUPPLY - reserved), "Token ID invalid");
        require(whitelist[msg.sender] , "Not whitelisted");
        require(price*q == msg.value, "Incorrect Ether value");
        require(q <= maxPerTxn, "Cannot mint this many at once");
        require(maxPerAdd >= balanceOf(msg.sender)+q, "Cannot mint this many");
        for(uint i=0; i<q; i++){
            _safeMint(_msgSender(), totalSupply()+1);
            tokenTime[totalSupply()] = block.timestamp;
        }
    }
    function contractURI() public pure returns (string memory) {
        string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Mounts (for Adventurers)", "description": "8000 generative on-chain Mounts for Adventurers in the Lootverse", "seller_fee_basis_points": 500, "fee_recipient": "0x6aF606db62Ab74824d93D439982e5AaF1764bb33"}'))));
        json = string(abi.encodePacked('data:application/json;base64,', json));
        return json;
    }

    constructor() ERC721("Mounts (for Adventurers)", "MOUNT") Ownable() {
        whitelist[0xaE862a93a593B8F27b93c7bd526AE3E29A0A3215] = true;
        whitelist[0x483F6818dEBa23E859F6D5f8AE3e01a02E9d5034] = true;
        whitelist[0x79637a6C4A5fC2A3bf3f34c7E7C03b6978BD668E] = true;
        whitelist[0x4b355e7C632cd3Eb3bAdC3115C29C78E5Aeff51e] = true;
        whitelist[0x5989Cc6bbAc8f8E3afc4143bFE57ba68Ef20F84F] = true;
        whitelist[0xED8146335F6dD2faF638E2d347E47f68B7E50871] = true;
        whitelist[0xAAE69439855DDEbD5b7e7D69Ad0bB0752EA63B77] = true;
        whitelist[0xD314749C5E91e5Ee11d0E5f5cb88ddbBD755F0DD] = true;
        whitelist[0xA4Be1cB01866934DdB5e06d0Cb9ad5999FC94Ff1] = true;
        whitelist[0xB68b71ada1f134e141ACC9E0f9615ecEf8BbC415] = true;
        whitelist[0x7454b7F5EE24758d7E16ba759A48cd7d60FD5049] = true;
        whitelist[0x39260c77A8f8a88a982CD7230FA292c9A421719c] = true;
        whitelist[0x4b087Ca2A7dbd887F3B339D4AE204Ce6A3425051] = true;
        whitelist[0x00321a3BC067860E482E74DC2cfbC78C2bFb2a82] = true;
        whitelist[0xAD7c0D17B856FD6A3eA7863ac73421972C8A06b3] = true;
        whitelist[0x7Ab76540faa3f7B508A9E3E82FeA2078FeB0e917] = true;
        whitelist[0x117F4Cd7c1767a109D09D47B1fA8bEd62830eF3b] = true;
        whitelist[0xDCb0155C351Ad107F696F35248989B39925842a6] = true;
        whitelist[0xE531B0B74e03FB7caaC2dF3d55dB2AE7AB997Fb5] = true;
        whitelist[0x9d65A3912caABA6d51206E6E9c2c65340E7AB903] = true;
        whitelist[0xC95FFa22DE9f75483b8055cc8B1225ef27f18329] = true;
        whitelist[0xc295807E2C5548c85944b395918e3F8AAe8E516F] = true;
        whitelist[0x9dC06b69F5F967242Ca270f54c32884CE76017B7] = true;
        whitelist[0x651A3af7E84c79ffC20D9Fa1C345d0fdD0cead97] = true;
        whitelist[0x74f90DbB59E9b8c4dfA0601CD303cb11E9fA4a78] = true;
        whitelist[0xAae8C50d76c76fb8947C9A203103d28b55862977] = true;
        whitelist[0x3916f2B06Be93a3D21782B95596483FCa8a42dfD] = true;
        whitelist[0x9BC353B144355136d06568844FFb977e261FD3BC] = true;
        whitelist[0x0068e91105B0D2c52de69c6eFB6329B66B1cDac5] = true;
        whitelist[0x6CdD7327A426aEB2E1259D2432efa5c1dEC2DC4c] = true;
        whitelist[0x0008d343091EF8BD3EFA730F6aAE5A26a285C7a2] = true;
        whitelist[0x6b4c150c921dDB7f939f09CA1EAddc6563e95119] = true;
        whitelist[0x3C26eD9bD9289b4bAe19414a720a2479dcfb3F15] = true;
        whitelist[0x587811FC49D14f9B625e4C068Bb94717EA8e1436] = true;
        whitelist[0x8eaF3c4a8105e3865c203D07764Fa9bAdB0C5c08] = true;
        whitelist[0x901F4BA839381b8080917C616796f4fE3e1b84D3] = true;
        whitelist[0x9e6E058c06C7CEEb6090e8438fC722F7D34188A3] = true;
        whitelist[0xf6C2a88314e3E62fceA48eBf3B48516a9C67f974] = true;
        whitelist[0x15DdA663170548Ae93E915dA1C61f318a2931CEB] = true;
        whitelist[0x4Db09754376C6ab4fF33A85b06439df81a1bB432] = true;
        whitelist[0xa8e878C77B4ddd628408fCC7E1D34a3C47a0d10e] = true;
        whitelist[0x2e3902DcEd9eCE56e206c7BD58a4Bcba594E305C] = true;
        whitelist[0xEC77C7CeDebEf0a56EaB58330870BB49c542b6eB] = true;
        whitelist[0xB0760087eF4BEc5a48aA11B2757A4dC6db5c7b03] = true;
        whitelist[0x5b1E7840E97dae8B716317965534fADB490580A1] = true;
        whitelist[0xc5760E32c7Bd3235FeCdc2544dba381E2dda715a] = true;
        whitelist[0x1308a9227D34fD1376EBfdfa38B624ef8302b766] = true;
        whitelist[0x00321a3BC067860E482E74DC2cfbC78C2bFb2a82] = true;
        whitelist[0x57CB3f6dd936bFa2ef9a81BC3Eb2Ece08DF9A805] = true;
        whitelist[0xb9c320f499ea34e4958cB034E7A82375cCf1A048] = true;
        whitelist[0x9254F7f72BC6294AD6569d1aB78139121DB880F6] = true;
        whitelist[0x0721D3CC2d3A93cf88Ef7ac7fcE8ACb5F1F1eb32] = true;
        whitelist[0x8fa84759562491B2b92fA649971a236054f5C413] = true;
        whitelist[0x46353Bce84417a6DF0549e55A7106Cf2C4B38e7E] = true;
    }
    function giveaway(address a, uint q) public onlyOwner{
        for(uint i=0; i<q; i++){
            _safeMint(a, totalSupply()+1);
        }
        reserved -= q;
    }
    function configure(uint s, uint p, uint maxTxn, uint maxAdd) public onlyOwner{
        status = s;
        price = p;
        maxPerTxn = maxTxn;
        maxPerAdd = maxAdd;
    }

    function isWhitelisted(address a) public view returns(bool){
        return whitelist[a];
    }
    function addWhitelistUser(address a) public onlyOwner{
        whitelist[a] = true;
    }
    function withdraw() public onlyOwner {
        uint balance = address(this).balance;

        uint split = (balance / 1000)*25;

        payable(0x77E5C0704d9681765d9C7204D66e5110c6556DDd).transfer(split);
        payable(msg.sender).transfer(balance-split);
    }
    
}
library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"a","type":"address"}],"name":"addWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"},{"internalType":"uint256","name":"p","type":"uint256"},{"internalType":"uint256","name":"maxTxn","type":"uint256"},{"internalType":"uint256","name":"maxAdd","type":"uint256"}],"name":"configure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getColor","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"r","type":"uint256"}],"name":"getColorId","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getEndurance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGender","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSpeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStamina","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getStrength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getType","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAdd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"q","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"random","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

611f40600c556064600d81905566b1a2bc2ec50000600e556014600f819055601091909155600060115560066106e081815265446f6e6b657960d01b610700819052608091825261072083815261074082905260a05261076083815261078082905260c0526107a08381526107c082905260e0526107e083815261080091909152610100526004610820818152634d756c6560e01b61084081905261012091909152610860828152610880829052610140526108a08281526108c0829052610160526108e082815261090082905261018052610920828152610940919091526101a05261096081815263506f6e7960e01b6109808190526101c0919091526109a08281526109c08290526101e0526109e0828152610a0082905261020052610a20828152610a4082905261022052610a60918252610a8052610240526005610aa08181526410d85b595b60da1b610ac081905261026091909152610ae0828152610b0082905261028052610b20828152610b408290526102a052610b60828152610b808290526102c052610ba0828152610bc0919091526102e052610be081815264486f72736560d81b610c0081905261030091909152610c20828152610c4082905261032052610c60828152610c8082905261034052610ca0828152610cc082905261036052610ce0918252610d0052610380526008610d208181526721b0bb32a132b0b960c11b610d408190526103a091909152610d60828152610d808290526103c052610da0828152610dc08290526103e052610de0828152610e009190915261040052610e20818152672234b932bbb7b63360c11b610e4081905261042091909152610e60828152610e8082905261044052610ea0828152610ec082905261046052610ee0918252610f0052610480526007610f20818152664368696d65726160c81b610f408190526104a091909152610f60828152610f808290526104c052610fa0828152610fc0919091526104e052610fe0818152665065676173757360c81b611000819052610500919091526110208281526110408290526105205261106082815261108091909152610540526110a0818152660a0d0decadcd2f60cb1b6110c0819052610560919091526110e082815261110082905261058052611120828152611140919091526105a0526111608181526623b93cb83437b760c91b6111808190526105c0919091526111a08281526111c08290526105e0526111e09182526112005261060052611220828152652bbcbb32b93760d11b61124081905261062091909152611260838152611280829052610640526112a08381526112c091909152610660526112e082815265223930b3b7b760d11b61130081905261068091909152611320928352611340526106a0919091526113a0604052600a61136090815269466c79696e672052756760b01b611380526106c0526200042c9190603362001c9c565b506040805161058081018252600961054082018181526815d85c999bdc99d95960ba1b61056084015282528251808401845281815268125c9bdb989bdd5b9960ba1b6020828101919091528084019190915283518085018552600a808252692bb4b73a32b93137b93760b11b8284015284860191909152845180860186528381526853746f6e656869646560b81b81840152606085015284518086018652838152684461726b666f72676560b81b81840152608085015284518086018652600580825264149bde585b60da1b8285015260a086019190915285518087018752828152692634b3b43a39bbb7b93760b11b8185015260c086015285518087018752600780825266566963696f757360c81b8286015260e087019190915286518088018852600b8082526a43617461636c79736d696360a81b8287015261010088019190915287518089018952868152684d657263696c65737360b81b8187015261012088015287518089018952600c8082526b426c6f6f647468697273747960a01b828801526101408901919091528851808a018a528781526810dbdc9c9d5c1d195960ba1b818801526101608901528851808a018a5285815269536d6f6c646572696e6760b01b818801526101808901528851808a018a5260088082526715dc985d1a199d5b60c21b828901526101a08a01919091528951808b018b5260068082526511da5b19195960d21b828a01526101c08b01919091528a51808c018c528581526647686173746c7960c81b818a01526101e08b01528a51808c018c5286815264149959d85b60da1b818a01526102008b01528a51808c018c5289815268115b98da185b9d195960ba1b818a01526102208b01528a51808c018c5281815265141c9a5b585b60d21b818a01526102408b01528a51808c018c528781526913585b195d9bdb195b9d60b21b818a01526102608b01528a51808c018c528481526a50726573746967696f757360a81b818a01526102808b01528a51808c018c526004808252634469726560e01b828b01526102a08c01919091528b51808d018d528681526615195b5c195cdd60ca1b818b01526102c08c01528b51808d018d528581526a135859db9a599a58d95b9d60aa1b818b01526102e08c01528b51808d018d52838152674d616a657374696360c01b818b01526103008c01528b51808d018d52888152694d69726163756c6f757360b01b818b01526103208c01528b51808d018d528a8152685269676874656f757360b81b818b01526103408c01528b51808d018d528a81526845787175697369746560b81b818b01526103608c01528b51808d018d5283815267135e5d1a1a58d85b60c21b818b01526103808c01528b51808d018d528481526b5370656c6c62696e64696e6760a01b818b01526103a08c01528b51808d018d5296875264131bde585b60da1b878a01526103c08b01969096528a51808c018c529283526b10985d1d1b19599bdc99d95960a21b838901526103e08a01929092528951808b018b5293845266456c757369766560c81b848801526104008901939093528851808a018a528581526914da18591bddd9985b1b60b21b818801526104208901528851808a018a529182526a2230bbb7313934b733b2b960a91b828701526104408801919091528751808901895286815268111d5cdadb1a59da1d60ba1b81870152610460880152875180890189528681526853746f726d7261676560b81b81870152610480880152875180890189529586526849726f6e666f72676560b81b868601526104a08701959095528651808801885290815267466561726c65737360c01b818501526104c08601528551808701875290815263109bdb1960e21b818401526104e08501528451808601865290815269436f75726167656f757360b01b818301526105008401528351808501909452908352654865726f696360d01b90830152610520810191909152620009d790601590602a62001d00565b506040805161046081018252600b61042082018181526a1bd9881d1a194815da5b9960aa1b61044084015282528251808401845260108082526f6f6620466c616d657468726f77696e6760801b60208381019190915280850192909252845180860186526007808252666f66204669726560c81b828501528587019190915285518087018752600c8082526b1bd9881d1a1948139a59da1d60a21b82860152606087019190915286518088018852600a808252696f6620536f726365727960b01b82870152608088019190915287518089018952818152690decc40a6e8cac2d8e8d60b31b8187015260a088015287518089018952600d8082526c37b310283937ba32b1ba34b7b760991b8288015260c08901919091528851808a018a529485526f1bd988115b9b1a59da1d195b9b595b9d60821b8587015260e088019490945287518089018952818152690decc40e8d0ca408cdef60b31b81870152610100880152875180890189528481526c6f66204272696c6c69616e636560981b8187018190526101208901919091528851808a018a526009808252686f662053746f726d7360b81b828901526101408a01919091528951808b018b52858152666f66205261676560c81b818901526101608a01528951808b018b528681526c37b3102832b93332b1ba34b7b760991b818901526101808a01528951808b018b5260068152656f662041776560d01b818901526101a08a01528951808b018b528181526837b3102bb7b73232b960b91b818901526101c08a01528951808b018b52838152696f6620436f757261676560b01b818901526101e08a01528951808b018b52838152696f66204d616a6573747960b01b818901526102008a01528951808b018b528481526b6f6620456e647572616e636560a01b818901526102208a01528951808b018b528681526c6f6620526573696c69656e636560981b818901526102408a01528951808b018b528481526b6f6620466f7274697475646560a01b818901526102608a01528951808b018b529788526a6f6620566974616c69747960a81b888801526102808901979097528851808a018a528581526c37b3103a3432902732ba3432b960991b818801526102a08901528851808a018a5260088082526737b31020b733b2b960c11b828901526102c08a01919091528951808b018b528681526c37b3102932b33632b1ba34b7b760991b818901526102e08a01528951808b018b528481526b6f6620746865205477696e7360a01b818901526103008a01528951808b018b528181526737b3102837bbb2b960c11b818901526103208a01528951808b018b529384526b37b3102232ba32b1ba34b7b760a11b848801526103408901939093528851808a018a52928352671bd98814dada5b1b60c21b8387015261036088019290925287518089018952908152691bd988159a5d1c9a5bdb60b21b8186015261038087015286518088018852858152686f66204769616e747360b81b818601526103a087015286518088018852918252666f66204675727960c81b828501526103c086019190915285518087018752938452686f6620546974616e7360b81b848401526103e08501939093528451808601909552845283015261040081019190915262000e9190601690602162001d52565b50604051806103a00160405280604051806040016040528060038152602001622a30b760e91b8152508152602001604051806040016040528060038152602001622a30b760e91b8152508152602001604051806040016040528060038152602001622a30b760e91b8152508152602001604051806040016040528060038152602001622a30b760e91b815250815260200160405180604001604052806005815260200164213937bbb760d91b815250815260200160405180604001604052806005815260200164213937bbb760d91b815250815260200160405180604001604052806005815260200164213937bbb760d91b815250815260200160405180604001604052806005815260200164213937bbb760d91b8152508152602001604051806040016040528060048152602001634772657960e01b8152508152602001604051806040016040528060048152602001634772657960e01b8152508152602001604051806040016040528060048152602001634772657960e01b8152508152602001604051806040016040528060048152602001634772657960e01b81525081526020016040518060400160405280600581526020016449766f727960d81b81525081526020016040518060400160405280600581526020016449766f727960d81b81525081526020016040518060400160405280600581526020016449766f727960d81b81525081526020016040518060400160405280600881526020016727b139b4b234b0b760c11b81525081526020016040518060400160405280600881526020016727b139b4b234b0b760c11b81525081526020016040518060400160405280600881526020016727b139b4b234b0b760c11b81525081526020016040518060400160405280600581526020016423b932b2b760d91b81525081526020016040518060400160405280600581526020016423b932b2b760d91b81525081526020016040518060400160405280600581526020016423b932b2b760d91b81525081526020016040518060400160405280600781526020016621b934b6b9b7b760c91b81525081526020016040518060400160405280600781526020016621b934b6b9b7b760c91b81525081526020016040518060400160405280600781526020016621b934b6b9b7b760c91b81525081526020016040518060400160405280600681526020016523b7b63232b760d11b81525081526020016040518060400160405280600681526020016523b7b63232b760d11b81525081526020016040518060400160405280600681526020016529b4b63b32b960d11b81525081526020016040518060400160405280600681526020016529b4b63b32b960d11b81525081526020016040518060400160405280600a815260200169125c9a59195cd8d95b9d60b21b815250815250601790601d620012b192919062001da4565b50604080516080810182526004818301908152634d616c6560e01b606083015281528151808301909252600682526546656d616c6560d01b6020838101919091528101919091526200130890601890600262001df6565b503480156200131657600080fd5b50604080518082018252601881527f4d6f756e74732028666f7220416476656e7475726572732900000000000000006020808301918252835180850190945260058452641353d5539560da1b908401528151919291620013799160009162001e48565b5080516200138f90600190602084019062001e48565b50506001600a5550620013a23362001c4a565b60136020527f6d8d3844359ed24d88894841e0b8dd43162440eff6b40a71bad80abe7b2e36e28054600160ff1991821681179092557f47f659f2d6f244ae5fcca076cbacb206fa8c2f2b482f28da6ee4d1a5047fb8d980548216831790557ffcd05991c99190b8653d45487652564938bd0112ad74f07d8cac66d6e494f81980548216831790557f2bdad8e51b916fc301fe519a0bdc958429f18696cb85a9201ec991422aab7b2580548216831790557f6c566cbdf48f9af66d7e0e593f3f7729a9cc7ebce43b5eee15ed2c045bfb02f680548216831790557f9727ac04aa5f980f31feee5b53cd74363e712a93054e58ed5a73e6a17ffe5d6f80548216831790557f14f450cb426e66981901075cd88434457b54e26c17d8348a69da5f2b990e4b0f80548216831790557fdc87722c51a9c6b5766e10cba83e49f38c54978d7e6d2f9996e925798423201880548216831790557f0afde06ce4d6c4767e75853466edf67057f19f7daeb16614139055f4b360388b80548216831790557fd2d783dd52a689f9c3687de1bc9b86287ac2517a9f4b0a4c55afc09c82f7805e80548216831790557fe0dd50f4f100820efcbdfc8942e5d81d891a6b1a726d725366b14884da1737b380548216831790557fc691f5afb16a2ea1a3c8803642f8aed6e7f1d9b2504b2d63d7dd2f4ffd88e69e80548216831790557fe4adfd6c5fd729c432bb215275005fd0e28f5d848139ba3b5c791bc3a8fdcb7e80548216831790557fd364e14a41ac39463117a3fb66bf570026b06ccb02e85b26f0b90398205a3fc680548216831790557f0c97846bae104644272e3ef56ada0d422a93f5a2369b58f121f92a9c5719487980548216831790557fbb446286e31709d66833730c39b8ee403444894cf5b79f69e56b701aef8eb39180548216831790557f5d4521f26eb9112ec4277533b3b3d3f0d630f4701d084f9d7c43d1b13bb2322b80548216831790557fc57f4199f90b26d3126091c9930629648e53244c9e11c926ba39c3f85eea858480548216831790557f60f9fc6c4c11703ecc38b89ec08ac739b24b42d03c8ed94fe5aaa8a90aba9ffe80548216831790557f30d55ee0c93a1a6527abdc3d27a001351d9ac1182bf95b18a880a5ba20a7eef380548216831790557f48651253463827814006ffe6ffaf01ca65d516a2dd78e27050385cc06018692880548216831790557fa8e64baa6c6abcacc5d8d804d4c3c89d6807d71bf7915aef3a0d0f5a2ab34f9c80548216831790557f44dd889efea2fe13924d5406849e242beb48b691eed37bba2fcadbd45633e38980548216831790557f4121ce43700f13e0d402459e5b2a005d92ed9b4fc9b32086198cc30445ef6ea680548216831790557fdc608aeada53ec0e2b24b9a2497ebc237cd4419cab82a666c436a539d41a885d80548216831790557f4ed8e89558f8b9883435cd2b16f8e574be2cf6bc1f094d49a6a8c2d2a1f9d1ac80548216831790557f8d8ae282c1715eae7a9a6b01d1844b4f4fcf4020c5ead3269f9d13ed8b90aa2180548216831790557fcc194b4d4019c3dccbf1bfb0b720ef76c4adb88292c6a432899c2cd6bfc9fcb780548216831790557f88e8597753a13c4b9209c461c2a3bbd52759f138e5ebaecf66c0d31f65bbdfad80548216831790557f5768c44b3c9611e982e0b88d6e7e358a79ffa1010ae603ca52f5f3b42dfdde2d80548216831790557f92c4a7e1c8cd1b31078ba6ffb015e917d446b35db3bc64304aadada83aafaea080548216831790557fa541ca8e3646689cec2d78ad9b1e517f1e51a9e0dfec32cef58acde9da0b8dc280548216831790557fb757e657470652aadd9b282496e70a370ef39a147551ab9c7eb64ad7420abc8d80548216831790557f4101494434aee28f1e625c271dc2bde13d6a55167437ce24b73cdd491713b1df80548216831790557f9a31c1aa327299777475a0a81ed672e706fb22721b8bc7eaff011735d1f263f380548216831790557faa524c4bbbfb24b3a11e0e2d0889dda29c7f111eccc81ff861176af1364346d480548216831790557fab49e3e7fc500020d265431e24b7f62b0174831842febca09c55766a6b8cdb6a80548216831790557fe5fae187aea3a52ead4a76e9547c877d5250cd6b14e82fdeb34fb544f207613280548216831790557fa3122b153831a823003ab16576c5275abece74da9b998e133631ab519903e47f80548216831790557f9bb7c732915b112105cef9abb096265519103a2afe467641c087da01da6fc96d80548216831790557ee559f640c545cf449d5bb0b50bb31ac53510149bc97398fa6b119f89b8f02880548216831790557f530d8eb8433806be80531bf566557574168fc108947350f25ae3fbbb4211feca80548216831790557f47ba652d927abc1e9fafa23456fe0a48513cec5d678477aa8503473441a6879180548216831790557fde35d071affe67d83486ae25500ced1821afbde27d8643fc053c3cfeb002285880548216831790557fb888c7eddbdccf632d9de30330a3a3f23c4ba61544d9f652c17865803d1e5f6e80548216831790557f65f31f7bf33285ba7b55cfe35123d48b603876551a6f75e09d05ab72b311364180548216831790557fd7f8cf0a13f472c812dd63b8119b3f827a34237dc0f28101e1b486adbe83836c80548216831790557fad1362461326e208c7825434d2e15360410fbdf3b6fd7d210e05792b8797f06780548216831790557fdfe8b82b18233d59360b5b95e2110df86f2a5ce990f8dc6d6793de53262f586c80548216831790557fd131847b65016777eb44a3d7714989195d12873931b3e26cf5b5eb8d26ac1ac780548216831790557f0ca424398a84be26b0e9e988d8c8677a429b49d493029b577c7e5d7e915d35fc80548216831790557fd6e40b9206da7185386c30ffdcd1dab8e7bc44d794785b30d60714efad9f311680548216831790557346353bce84417a6df0549e55a7106cf2c4b38e7e6000527f7dda02d60b3d5335d2a9ece4fc4366a478a2807b7e95f937c523a0c394eba5318054909116909117905562001f8a565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805482825590600052602060002090810192821562001cee579160200282015b8281111562001cee578251805162001cdd91849160209091019062001e48565b509160200191906001019062001cbd565b5062001cfc92915062001ed3565b5090565b82805482825590600052602060002090810192821562001cee579160200282015b8281111562001cee578251805162001d4191849160209091019062001e48565b509160200191906001019062001d21565b82805482825590600052602060002090810192821562001cee579160200282015b8281111562001cee578251805162001d9391849160209091019062001e48565b509160200191906001019062001d73565b82805482825590600052602060002090810192821562001cee579160200282015b8281111562001cee578251805162001de591849160209091019062001e48565b509160200191906001019062001dc5565b82805482825590600052602060002090810192821562001cee579160200282015b8281111562001cee578251805162001e3791849160209091019062001e48565b509160200191906001019062001e17565b82805462001e569062001f4d565b90600052602060002090601f01602090048101928262001e7a576000855562001ec5565b82601f1062001e9557805160ff191683800117855562001ec5565b8280016001018555821562001ec5579182015b8281111562001ec557825182559160200191906001019062001ea8565b5062001cfc92915062001ef4565b8082111562001cfc57600062001eea828262001f0b565b5060010162001ed3565b5b8082111562001cfc576000815560010162001ef5565b50805462001f199062001f4d565b6000825580601f1062001f2a575050565b601f01602090049060005260206000209081019062001f4a919062001ef4565b50565b600181811c9082168062001f6257607f821691505b6020821081141562001f8457634e487b7160e01b600052602260045260246000fd5b50919050565b6143418062001f9a6000396000f3fe6080604052600436106102f25760003560e01c806370a082311161018f578063a22cb465116100e1578063e06d2eb51161008a578063e8a3d48511610064578063e8a3d48514610838578063e985e9c51461084d578063f2fde38b1461089657600080fd5b8063e06d2eb5146107d8578063e53fbda6146107f8578063e62256301461081857600080fd5b8063c87b56dd116100bb578063c87b56dd14610785578063c9b298f1146107a5578063cf674308146107b857600080fd5b8063a22cb46514610718578063a87a730e14610738578063b88d4fde1461076557600080fd5b80638da5cb5b116101435780639b19251a1161011d5780639b19251a146106bf578063a035b1fe146106ef578063a0712d681461070557600080fd5b80638da5cb5b1461066c5780639414b9021461068a57806395d89b41146106aa57600080fd5b806373d900251161017457806373d900251461060c57806380057b9a1461062c57806384083c891461064c57600080fd5b806370a08231146105d7578063715018a6146105f757600080fd5b80632f745c591161024857806342842e0e116101fc5780636352211e116101d65780636352211e146105775780636a3ef380146105975780636b8ff574146105b757600080fd5b806342842e0e146105175780634b93f753146105375780634f6ccce71461055757600080fd5b80633cb519941161022d5780633cb51994146104cc5780633ccfd60b146104e25780634036ab78146104f757600080fd5b80632f745c59146104735780633af32abf1461049357600080fd5b8063095ea7b3116102aa57806323b872dd1161028457806323b872dd1461041d578063258e5d901461043d5780632884d3411461045d57600080fd5b8063095ea7b3146103c857806318160ddd146103e8578063200d2ed21461040757600080fd5b8063050225ea116102db578063050225ea1461034e57806306fdde031461036e578063081812fc1461039057600080fd5b806301ffc9a7146102f7578063022fc2251461032c575b600080fd5b34801561030357600080fd5b506103176103123660046135cd565b6108b6565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b5061034c610347366004613688565b610912565b005b34801561035a57600080fd5b5061034c6103693660046135a3565b610985565b34801561037a57600080fd5b50610383610a35565b6040516103239190613dfa565b34801561039c57600080fd5b506103b06103ab36600461366f565b610ac7565b6040516001600160a01b039091168152602001610323565b3480156103d457600080fd5b5061034c6103e33660046135a3565b610b6d565b3480156103f457600080fd5b506008545b604051908152602001610323565b34801561041357600080fd5b506103f960115481565b34801561042957600080fd5b5061034c6104383660046134af565b610c9f565b34801561044957600080fd5b506103f961045836600461366f565b610d26565b34801561046957600080fd5b506103f960105481565b34801561047f57600080fd5b506103f961048e3660046135a3565b610d76565b34801561049f57600080fd5b506103176104ae366004613461565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156104d857600080fd5b506103f9600f5481565b3480156104ee57600080fd5b5061034c610e1e565b34801561050357600080fd5b5061038361051236600461366f565b610f0d565b34801561052357600080fd5b5061034c6105323660046134af565b610ffe565b34801561054357600080fd5b506103f961055236600461366f565b611019565b34801561056357600080fd5b506103f961057236600461366f565b61105e565b34801561058357600080fd5b506103b061059236600461366f565b611102565b3480156105a357600080fd5b506103836105b236600461366f565b61118d565b3480156105c357600080fd5b506103836105d236600461366f565b6111d4565b3480156105e357600080fd5b506103f96105f2366004613461565b6112df565b34801561060357600080fd5b5061034c611379565b34801561061857600080fd5b5061038361062736600461366f565b6113df565b34801561063857600080fd5b5061038361064736600461366f565b6114fc565b34801561065857600080fd5b5061034c610667366004613461565b611543565b34801561067857600080fd5b50600b546001600160a01b03166103b0565b34801561069657600080fd5b506103836106a536600461366f565b6115df565b3480156106b657600080fd5b50610383611626565b3480156106cb57600080fd5b506103176106da366004613461565b60136020526000908152604090205460ff1681565b3480156106fb57600080fd5b506103f9600e5481565b61034c61071336600461366f565b611635565b34801561072457600080fd5b5061034c610733366004613567565b611851565b34801561074457600080fd5b506103f961075336600461366f565b60126020526000908152604090205481565b34801561077157600080fd5b5061034c6107803660046134eb565b611934565b34801561079157600080fd5b506103836107a036600461366f565b6119c2565b61034c6107b336600461366f565b611e90565b3480156107c457600080fd5b506103f96107d3366004613607565b612163565b3480156107e457600080fd5b506103836107f336600461366f565b612253565b34801561080457600080fd5b506103f961081336600461366f565b61229a565b34801561082457600080fd5b506103f961083336600461366f565b6122df565b34801561084457600080fd5b50610383612324565b34801561085957600080fd5b5061031761086836600461347c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108a257600080fd5b5061034c6108b1366004613461565b61246b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061090c575061090c8261254d565b92915050565b600b546001600160a01b031633146109715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601193909355600e91909155600f55601055565b600b546001600160a01b031633146109df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b60005b81811015610a1957610a07836109f760085490565b610a02906001613e0d565b612630565b80610a1181613f0d565b9150506109e2565b5080600d6000828254610a2c9190613e76565b90915550505050565b606060008054610a4490613eb9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7090613eb9565b8015610abd5780601f10610a9257610100808354040283529160200191610abd565b820191906000526020600020905b815481529060010190602001808311610aa057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610968565b506000908152600460205260409020546001600160a01b031690565b6000610b7882611102565b9050806001600160a01b0316836001600160a01b03161415610c025760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610968565b336001600160a01b0382161480610c1e5750610c1e8133610868565b610c905760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610968565b610c9a838361264e565b505050565b610ca933826126d4565b610d1b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610968565b610c9a8383836127d8565b6000610d6b6040518060400160405280600981526020017f456e647572616e636500000000000000000000000000000000000000000000008152508360006064612163565b61090c906001613e0d565b6000610d81836112df565b8210610df55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610968565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03163314610e785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b476000610e876103e883613e25565b610e92906019613e39565b6040519091507377e5c0704d9681765d9c7204d66e5110c6556ddd9082156108fc029083906000818181858888f19350505050158015610ed6573d6000803e3d6000fd5b50336108fc610ee58385613e76565b6040518115909202916000818181858888f19350505050158015610c9a573d6000803e3d6000fd5b60606014610f546040518060400160405280600481526020017f54797065000000000000000000000000000000000000000000000000000000008152508460006033612163565b81548110610f6457610f64613fe7565b906000526020600020018054610f7990613eb9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa590613eb9565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b50505050509050919050565b610c9a83838360405180602001604052806000815250611934565b6000610d6b6040518060400160405280600581526020017f53706565640000000000000000000000000000000000000000000000000000008152508360006064612163565b600061106960085490565b82106110dd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610968565b600882815481106110f0576110f0613fe7565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061090c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610968565b60606016610f546040518060400160405280600681526020017f53756666697800000000000000000000000000000000000000000000000000008152508460006021612163565b6060600061121b6040518060400160405280600481526020017f4e616d65000000000000000000000000000000000000000000000000000000008152508460006064612163565b905060328110156112365761122f83610f0d565b9392505050565b605081101561127957611248836115df565b61125184610f0d565b6040516020016112629291906137f9565b604051602081830303815290604052915050919050565b605f8110156112945761128b83610f0d565b6112518461118d565b606481116112c9576112a5836115df565b6112ae84610f0d565b6112b78561118d565b60405160200161126293929190613851565b5050604080516020810190915260008152919050565b60006001600160a01b03821661135d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610968565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146113d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6113dd60006129c8565b565b6060603282101561142357505060408051808201909152600481527f2366666600000000000000000000000000000000000000000000000000000000602082015290565b605082101561146557505060408051808201909152600781527f2330306132653800000000000000000000000000000000000000000000000000602082015290565b605f8210156114a757505060408051808201909152600781527f2361333439386400000000000000000000000000000000000000000000000000602082015290565b606482116114e857505060408051808201909152600781527f2366666339306100000000000000000000000000000000000000000000000000602082015290565b505060408051602081019091526000815290565b60606017610f546040518060400160405280600581526020017f436f6c6f72000000000000000000000000000000000000000000000000000000815250846000601d612163565b600b546001600160a01b0316331461159d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6001600160a01b0316600090815260136020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60606015610f546040518060400160405280600681526020017f5072656669780000000000000000000000000000000000000000000000000000815250846000602a612163565b606060018054610a4490613eb9565b6002600a5414156116885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610968565b6002600a819055601154146116df5760405162461bcd60e51b815260206004820152601660248201527f5075626c69632053616c65206e6f7420616374697665000000000000000000006044820152606401610968565b600d54600c546116ef9190613e76565b816116f960085490565b6117039190613e0d565b11156117515760405162461bcd60e51b815260206004820152601060248201527f546f6b656e20494420696e76616c6964000000000000000000000000000000006044820152606401610968565b3481600e546117609190613e39565b146117ad5760405162461bcd60e51b815260206004820152601560248201527f496e636f72726563742045746865722076616c756500000000000000000000006044820152606401610968565b600f548111156117ff5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e742074686973206d616e79206174206f6e63650000006044820152606401610968565b60005b8181101561184857611817335b6008546109f7565b426012600061182560085490565b81526020810191909152604001600020558061184081613f0d565b915050611802565b50506001600a55565b6001600160a01b0382163314156118aa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610968565b3360008181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61193e33836126d4565b6119b05760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610968565b6119bc84848484612a32565b50505050565b60606119cc6133a7565b60405180610100016040528060c3815260200161420e60c39139815260408051808201909152600481527f4e616d65000000000000000000000000000000000000000000000000000000006020820152611a2e90610627908560006064612163565b602082810191909152604080518082018252600e81527f7d2e73706565647b66696c6c203a00000000000000000000000000000000000092810192909252820152611a7b61062784611019565b606082015260408051808201909152601081527f7d2e7374616d696e617b66696c6c203a0000000000000000000000000000000060208201526080820152611ac5610627846122df565b60a082015260408051808201909152601181527f7d2e737472656e6774687b66696c6c203a000000000000000000000000000000602082015260c0820152611b0f6106278461229a565b60e082015260408051808201909152601281527f7d2e656e647572616e63657b66696c6c203a00000000000000000000000000006020820152610100820152611b5a61062784610d26565b6101208201526040805160808101909152605e8082526140d16020830139610140820152611b87836111d4565b610160820152604080516060810190915260288082526140a96020830139610180820152611bb4836114fc565b6101a08201526040805160608101909152602980825261416860208301396101c0820152611be183612253565b6101e0820152604080516060810190915260358082526140746020830139610200820152611c16611c1184611019565b612abb565b6102208201526040805160608101909152603980825261412f6020830139610240820152611c46611c11846122df565b6102608201526040805160608101909152603b8082526142d16020830139610280820152611c76611c118461229a565b6102a08201526040805160608101909152603d8082526141d160208301396102c0820152611ca6611c1184610d26565b6102e0820152604080518082018252600d81527f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000602080830191909152610300840191909152825181840151838501516060860151608087015160a088015160c089015160e08a01516101008b0151995160009a611d269a909101613702565b60408051808303601f19018152908290526101208401516101408501516101608601516101808701516101a08801516101c08901516101e08a01516102008b0151979950611d79988a9890602001613702565b60408051808303601f19018152908290526102208401516102408501516102608601516102808701516102a08801516102c08901516102e08a01516103008b0151979950611dcc988a9890602001613702565b60408051808303601f19018152908290526101a08401516101e08501516102208601516102608701516102a08801516102e0890151959750600096611e149690602001613afa565b60408051601f1981840301815291905290506000611e6384600b6020020151611e3c85612bed565b84604051602001611e4f939291906138c7565b604051602081830303815290604052612bed565b905080604051602001611e769190613d83565b60408051601f198184030181529190529695505050505050565b6002600a541415611ee35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610968565b6002600a55601154600114611f3a5760405162461bcd60e51b815260206004820152601460248201527f57686974656c697374206e6f74206163746976650000000000000000000000006044820152606401610968565b600d54600c54611f4a9190613e76565b81611f5460085490565b611f5e9190613e0d565b1115611fac5760405162461bcd60e51b815260206004820152601060248201527f546f6b656e20494420696e76616c6964000000000000000000000000000000006044820152606401610968565b3360009081526013602052604090205460ff1661200b5760405162461bcd60e51b815260206004820152600f60248201527f4e6f742077686974656c697374656400000000000000000000000000000000006044820152606401610968565b3481600e5461201a9190613e39565b146120675760405162461bcd60e51b815260206004820152601560248201527f496e636f72726563742045746865722076616c756500000000000000000000006044820152606401610968565b600f548111156120b95760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e742074686973206d616e79206174206f6e63650000006044820152606401610968565b806120c3336112df565b6120cd9190613e0d565b601054101561211e5760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f74206d696e742074686973206d616e7900000000000000000000006044820152606401610968565b60005b81811015611848576121323361180f565b426012600061214060085490565b81526020810191909152604001600020558061215b81613f0d565b915050612121565b6000838152600260205260408120546001600160a01b03166121ed5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610968565b8183866121f987612abb565b60008881526012602090815260409182902054915161221b94939291016137c4565b6040516020818303038152906040528051906020012060001c61223e9190613e0d565b6122489190613f46565b90505b949350505050565b60606018610f546040518060400160405280600681526020017f47656e64657200000000000000000000000000000000000000000000000000008152508460006002612163565b6000610d6b6040518060400160405280600881526020017f537472656e6774680000000000000000000000000000000000000000000000008152508360006064612163565b6000610d6b6040518060400160405280600781526020017f5374616d696e61000000000000000000000000000000000000000000000000008152508360006064612163565b60606000612442604051602001611e4f907f7b226e616d65223a20224d6f756e74732028666f7220416476656e747572657281527f7329222c20226465736372697074696f6e223a2022383030302067656e65726160208201527f74697665206f6e2d636861696e204d6f756e747320666f7220416476656e747560408201527f7265727320696e20746865204c6f6f747665727365222c202273656c6c65725f60608201527f6665655f62617369735f706f696e7473223a203530302c20226665655f72656360808201527f697069656e74223a20223078366146363036646236324162373438323464393360a08201527f4434333939383265354161463137363462623333227d0000000000000000000060c082015260d60190565b9050806040516020016124559190613d83565b60408051601f1981840301815291905292915050565b600b546001600160a01b031633146124c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6001600160a01b0381166125415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610968565b61254a816129c8565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806125e057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061090c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461090c565b61264a828260405180602001604052806000815250612dc6565b5050565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061269b82611102565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661275e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610968565b600061276983611102565b9050806001600160a01b0316846001600160a01b031614806127a45750836001600160a01b031661279984610ac7565b6001600160a01b0316145b8061224b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff1661224b565b826001600160a01b03166127eb82611102565b6001600160a01b0316146128675760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610968565b6001600160a01b0382166128e25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610968565b6128ed838383612e4f565b6128f860008261264e565b6001600160a01b0383166000908152600360205260408120805460019290612921908490613e76565b90915550506001600160a01b038216600090815260036020526040812080546001929061294f908490613e0d565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612a3d8484846127d8565b612a4984848484612f07565b6119bc5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610968565b606081612afb57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612b255780612b0f81613f0d565b9150612b1e9050600a83613e25565b9150612aff565b60008167ffffffffffffffff811115612b4057612b40614016565b6040519080825280601f01601f191660200182016040528015612b6a576020820181803683370190505b5090505b841561224b57612b7f600183613e76565b9150612b8c600a86613f46565b612b97906030613e0d565b60f81b818381518110612bac57612bac613fe7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612be6600a86613e25565b9450612b6e565b805160609080612c0d575050604080516020810190915260008152919050565b60006003612c1c836002613e0d565b612c269190613e25565b612c31906004613e39565b90506000612c40826020613e0d565b67ffffffffffffffff811115612c5857612c58614016565b6040519080825280601f01601f191660200182016040528015612c82576020820181803683370190505b5090506000604051806060016040528060408152602001614191604091399050600181016020830160005b86811015612d0e576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101612cad565b506003860660018114612d285760028114612d7257612db8565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe830152612db8565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b505050918152949350505050565b612dd083836130b1565b612ddd6000848484612f07565b610c9a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610968565b6001600160a01b038316612eaa57612ea581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612ecd565b816001600160a01b0316836001600160a01b031614612ecd57612ecd8382613217565b6001600160a01b038216612ee457610c9a816132b4565b826001600160a01b0316826001600160a01b031614610c9a57610c9a8282613363565b60006001600160a01b0384163b156130a9576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612f64903390899088908890600401613dc8565b602060405180830381600087803b158015612f7e57600080fd5b505af1925050508015612fae575060408051601f3d908101601f19168201909252612fab918101906135ea565b60015b61305e573d808015612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b5080516130565760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610968565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061224b565b50600161224b565b6001600160a01b0382166131075760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610968565b6000818152600260205260409020546001600160a01b03161561316c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610968565b61317860008383612e4f565b6001600160a01b03821660009081526003602052604081208054600192906131a1908490613e0d565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001613224846112df565b61322e9190613e76565b600083815260076020526040902054909150808214613281576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906132c690600190613e76565b600083815260096020526040812054600880549394509092849081106132ee576132ee613fe7565b90600052602060002001549050806008838154811061330f5761330f613fe7565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061334757613347613fb8565b6001900381819060005260206000200160009055905550505050565b600061336e836112df565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6040518061032001604052806019905b60608152602001906001900390816133b75790505090565b600067ffffffffffffffff808411156133ea576133ea614016565b604051601f8501601f19908116603f0116810190828211818310171561341257613412614016565b8160405280935085815286868601111561342b57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461345c57600080fd5b919050565b60006020828403121561347357600080fd5b61122f82613445565b6000806040838503121561348f57600080fd5b61349883613445565b91506134a660208401613445565b90509250929050565b6000806000606084860312156134c457600080fd5b6134cd84613445565b92506134db60208501613445565b9150604084013590509250925092565b6000806000806080858703121561350157600080fd5b61350a85613445565b935061351860208601613445565b925060408501359150606085013567ffffffffffffffff81111561353b57600080fd5b8501601f8101871361354c57600080fd5b61355b878235602084016133cf565b91505092959194509250565b6000806040838503121561357a57600080fd5b61358383613445565b91506020830135801515811461359857600080fd5b809150509250929050565b600080604083850312156135b657600080fd5b6135bf83613445565b946020939093013593505050565b6000602082840312156135df57600080fd5b813561122f81614045565b6000602082840312156135fc57600080fd5b815161122f81614045565b6000806000806080858703121561361d57600080fd5b843567ffffffffffffffff81111561363457600080fd5b8501601f8101871361364557600080fd5b613654878235602084016133cf565b97602087013597506040870135966060013595509350505050565b60006020828403121561368157600080fd5b5035919050565b6000806000806080858703121561369e57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526136d2816020860160208601613e8d565b601f01601f19169290920160200192915050565b600081516136f8818560208601613e8d565b9290920192915050565b60008a51613714818460208f01613e8d565b8a5190830190613728818360208f01613e8d565b8a5161373a8183850160208f01613e8d565b8a51929091010190613750818360208d01613e8d565b88516137628183850160208d01613e8d565b8851929091010190613778818360208b01613e8d565b865161378a8183850160208b01613e8d565b86519290910101906137a0818360208901613e8d565b84516137b28183850160208901613e8d565b9101019b9a5050505050505050505050565b600084516137d6818460208901613e8d565b8451908301906137ea818360208901613e8d565b01928352505060200192915050565b6000835161380b818460208801613e8d565b7f20000000000000000000000000000000000000000000000000000000000000009083019081528351613845816001840160208801613e8d565b01600101949350505050565b60008451613863818460208901613e8d565b80830190507f2000000000000000000000000000000000000000000000000000000000000000808252855161389f816001850160208a01613e8d565b600192019182015283516138ba816002840160208801613e8d565b0160020195945050505050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600084516138ff81600a850160208901613e8d565b7f222c226465736372697074696f6e223a2022383030302072616e646f6d697a65600a918401918201527f64206f6e20636861696e204d6f756e74732028666f7220416476656e74757265602a8201527f7273292e204d6f756e74732061726520696e74656e64656420746f2062652075604a8201527f73656420627920616476656e74757265727320746f206765742061726f756e64606a8201527f2074686520776f726c6420696e20776869636820746865792061726520657870608a8201527f6c6f72696e672e2045616368206d6f756e74206861732061206261736963207360aa8201527f6574206f6620737461747320616e642070726f7065727469657320746861742060ca8201527f63616e206265207573656420616e6420696e746572707265746564206173206460ea8201527f6573697265642e222c22696d616765223a2022646174613a696d6167652f737661010a8201527f672b786d6c3b6261736536342c0000000000000000000000000000000000000061012a820152613af0613ac7613ac1613a986101378501896136e6565b7f222c2022747261697473223a205b0000000000000000000000000000000000008152600e0190565b866136e6565b7f5d207d0000000000000000000000000000000000000000000000000000000000815260030190565b9695505050505050565b7f7b2274726169745f74797065223a202247656e65726174696f6e222c2276616c81527f7565223a202230227d2c7b2274726169745f74797065223a2022436f6c6f722260208201527f2c2276616c7565223a2022000000000000000000000000000000000000000000604082015260008751613b7e81604b850160208c01613e8d565b7f227d2c7b2274726169745f74797065223a202247656e646572222c2276616c75604b918401918201527f65223a2022000000000000000000000000000000000000000000000000000000606b8201528751613be1816070840160208c01613e8d565b7f227d2c7b2274726169745f74797065223a20225370656564222c2276616c7565607092909101918201527f223a2022000000000000000000000000000000000000000000000000000000006090820152613d76613d4d613ac1613cfe613cf8613ca9613ca3613c54609489018f6136e6565b7f227d2c7b2274726169745f74797065223a20225374616d696e61222c2276616c81527f7565223a20220000000000000000000000000000000000000000000000000000602082015260260190565b8c6136e6565b7f227d2c7b2274726169745f74797065223a2022537472656e677468222c22766181527f6c7565223a202200000000000000000000000000000000000000000000000000602082015260270190565b896136e6565b7f227d2c7b2274726169745f74797065223a2022456e647572616e6365222c227681527f616c7565223a2022000000000000000000000000000000000000000000000000602082015260280190565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251613dbb81601d850160208701613e8d565b91909101601d0192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613af060808301846136ba565b60208152600061122f60208301846136ba565b60008219821115613e2057613e20613f5a565b500190565b600082613e3457613e34613f89565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e7157613e71613f5a565b500290565b600082821015613e8857613e88613f5a565b500390565b60005b83811015613ea8578181015183820152602001613e90565b838111156119bc5750506000910152565b600181811c90821680613ecd57607f821691505b60208210811415613f07577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f3f57613f3f613f5a565b5060010190565b600082613f5557613f55613f89565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461254a57600080fdfe3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365207370656564223e5370656564203c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2235302220636c6173733d2262617365206e616d65223e3c2f746578743e3c7465787420783d2231302220793d223137302220636c6173733d2262617365207374616d696e61223e5374616d696e61203c2f746578743e3c7465787420783d2231302220793d223131302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d223233302220636c6173733d226261736520656e647572616e6365223e456e647572616e6365203c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302034333020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a20617269616c3b20666f6e742d7765696768743a203130303b20666f6e742d73697a653a20323470783b207d202e6e616d65207b66696c6c3a3c2f746578743e3c7465787420783d2231302220793d223230302220636c6173733d226261736520737472656e677468223e537472656e67746820a264697066735822122043b1a237c4a6c931b35692caa2f04940ad0e3f307711679440290087de3c132164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102f25760003560e01c806370a082311161018f578063a22cb465116100e1578063e06d2eb51161008a578063e8a3d48511610064578063e8a3d48514610838578063e985e9c51461084d578063f2fde38b1461089657600080fd5b8063e06d2eb5146107d8578063e53fbda6146107f8578063e62256301461081857600080fd5b8063c87b56dd116100bb578063c87b56dd14610785578063c9b298f1146107a5578063cf674308146107b857600080fd5b8063a22cb46514610718578063a87a730e14610738578063b88d4fde1461076557600080fd5b80638da5cb5b116101435780639b19251a1161011d5780639b19251a146106bf578063a035b1fe146106ef578063a0712d681461070557600080fd5b80638da5cb5b1461066c5780639414b9021461068a57806395d89b41146106aa57600080fd5b806373d900251161017457806373d900251461060c57806380057b9a1461062c57806384083c891461064c57600080fd5b806370a08231146105d7578063715018a6146105f757600080fd5b80632f745c591161024857806342842e0e116101fc5780636352211e116101d65780636352211e146105775780636a3ef380146105975780636b8ff574146105b757600080fd5b806342842e0e146105175780634b93f753146105375780634f6ccce71461055757600080fd5b80633cb519941161022d5780633cb51994146104cc5780633ccfd60b146104e25780634036ab78146104f757600080fd5b80632f745c59146104735780633af32abf1461049357600080fd5b8063095ea7b3116102aa57806323b872dd1161028457806323b872dd1461041d578063258e5d901461043d5780632884d3411461045d57600080fd5b8063095ea7b3146103c857806318160ddd146103e8578063200d2ed21461040757600080fd5b8063050225ea116102db578063050225ea1461034e57806306fdde031461036e578063081812fc1461039057600080fd5b806301ffc9a7146102f7578063022fc2251461032c575b600080fd5b34801561030357600080fd5b506103176103123660046135cd565b6108b6565b60405190151581526020015b60405180910390f35b34801561033857600080fd5b5061034c610347366004613688565b610912565b005b34801561035a57600080fd5b5061034c6103693660046135a3565b610985565b34801561037a57600080fd5b50610383610a35565b6040516103239190613dfa565b34801561039c57600080fd5b506103b06103ab36600461366f565b610ac7565b6040516001600160a01b039091168152602001610323565b3480156103d457600080fd5b5061034c6103e33660046135a3565b610b6d565b3480156103f457600080fd5b506008545b604051908152602001610323565b34801561041357600080fd5b506103f960115481565b34801561042957600080fd5b5061034c6104383660046134af565b610c9f565b34801561044957600080fd5b506103f961045836600461366f565b610d26565b34801561046957600080fd5b506103f960105481565b34801561047f57600080fd5b506103f961048e3660046135a3565b610d76565b34801561049f57600080fd5b506103176104ae366004613461565b6001600160a01b031660009081526013602052604090205460ff1690565b3480156104d857600080fd5b506103f9600f5481565b3480156104ee57600080fd5b5061034c610e1e565b34801561050357600080fd5b5061038361051236600461366f565b610f0d565b34801561052357600080fd5b5061034c6105323660046134af565b610ffe565b34801561054357600080fd5b506103f961055236600461366f565b611019565b34801561056357600080fd5b506103f961057236600461366f565b61105e565b34801561058357600080fd5b506103b061059236600461366f565b611102565b3480156105a357600080fd5b506103836105b236600461366f565b61118d565b3480156105c357600080fd5b506103836105d236600461366f565b6111d4565b3480156105e357600080fd5b506103f96105f2366004613461565b6112df565b34801561060357600080fd5b5061034c611379565b34801561061857600080fd5b5061038361062736600461366f565b6113df565b34801561063857600080fd5b5061038361064736600461366f565b6114fc565b34801561065857600080fd5b5061034c610667366004613461565b611543565b34801561067857600080fd5b50600b546001600160a01b03166103b0565b34801561069657600080fd5b506103836106a536600461366f565b6115df565b3480156106b657600080fd5b50610383611626565b3480156106cb57600080fd5b506103176106da366004613461565b60136020526000908152604090205460ff1681565b3480156106fb57600080fd5b506103f9600e5481565b61034c61071336600461366f565b611635565b34801561072457600080fd5b5061034c610733366004613567565b611851565b34801561074457600080fd5b506103f961075336600461366f565b60126020526000908152604090205481565b34801561077157600080fd5b5061034c6107803660046134eb565b611934565b34801561079157600080fd5b506103836107a036600461366f565b6119c2565b61034c6107b336600461366f565b611e90565b3480156107c457600080fd5b506103f96107d3366004613607565b612163565b3480156107e457600080fd5b506103836107f336600461366f565b612253565b34801561080457600080fd5b506103f961081336600461366f565b61229a565b34801561082457600080fd5b506103f961083336600461366f565b6122df565b34801561084457600080fd5b50610383612324565b34801561085957600080fd5b5061031761086836600461347c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108a257600080fd5b5061034c6108b1366004613461565b61246b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061090c575061090c8261254d565b92915050565b600b546001600160a01b031633146109715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601193909355600e91909155600f55601055565b600b546001600160a01b031633146109df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b60005b81811015610a1957610a07836109f760085490565b610a02906001613e0d565b612630565b80610a1181613f0d565b9150506109e2565b5080600d6000828254610a2c9190613e76565b90915550505050565b606060008054610a4490613eb9565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7090613eb9565b8015610abd5780601f10610a9257610100808354040283529160200191610abd565b820191906000526020600020905b815481529060010190602001808311610aa057829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610b515760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610968565b506000908152600460205260409020546001600160a01b031690565b6000610b7882611102565b9050806001600160a01b0316836001600160a01b03161415610c025760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610968565b336001600160a01b0382161480610c1e5750610c1e8133610868565b610c905760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610968565b610c9a838361264e565b505050565b610ca933826126d4565b610d1b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610968565b610c9a8383836127d8565b6000610d6b6040518060400160405280600981526020017f456e647572616e636500000000000000000000000000000000000000000000008152508360006064612163565b61090c906001613e0d565b6000610d81836112df565b8210610df55760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610968565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b03163314610e785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b476000610e876103e883613e25565b610e92906019613e39565b6040519091507377e5c0704d9681765d9c7204d66e5110c6556ddd9082156108fc029083906000818181858888f19350505050158015610ed6573d6000803e3d6000fd5b50336108fc610ee58385613e76565b6040518115909202916000818181858888f19350505050158015610c9a573d6000803e3d6000fd5b60606014610f546040518060400160405280600481526020017f54797065000000000000000000000000000000000000000000000000000000008152508460006033612163565b81548110610f6457610f64613fe7565b906000526020600020018054610f7990613eb9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa590613eb9565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b50505050509050919050565b610c9a83838360405180602001604052806000815250611934565b6000610d6b6040518060400160405280600581526020017f53706565640000000000000000000000000000000000000000000000000000008152508360006064612163565b600061106960085490565b82106110dd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610968565b600882815481106110f0576110f0613fe7565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b03168061090c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610968565b60606016610f546040518060400160405280600681526020017f53756666697800000000000000000000000000000000000000000000000000008152508460006021612163565b6060600061121b6040518060400160405280600481526020017f4e616d65000000000000000000000000000000000000000000000000000000008152508460006064612163565b905060328110156112365761122f83610f0d565b9392505050565b605081101561127957611248836115df565b61125184610f0d565b6040516020016112629291906137f9565b604051602081830303815290604052915050919050565b605f8110156112945761128b83610f0d565b6112518461118d565b606481116112c9576112a5836115df565b6112ae84610f0d565b6112b78561118d565b60405160200161126293929190613851565b5050604080516020810190915260008152919050565b60006001600160a01b03821661135d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610968565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146113d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6113dd60006129c8565b565b6060603282101561142357505060408051808201909152600481527f2366666600000000000000000000000000000000000000000000000000000000602082015290565b605082101561146557505060408051808201909152600781527f2330306132653800000000000000000000000000000000000000000000000000602082015290565b605f8210156114a757505060408051808201909152600781527f2361333439386400000000000000000000000000000000000000000000000000602082015290565b606482116114e857505060408051808201909152600781527f2366666339306100000000000000000000000000000000000000000000000000602082015290565b505060408051602081019091526000815290565b60606017610f546040518060400160405280600581526020017f436f6c6f72000000000000000000000000000000000000000000000000000000815250846000601d612163565b600b546001600160a01b0316331461159d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6001600160a01b0316600090815260136020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60606015610f546040518060400160405280600681526020017f5072656669780000000000000000000000000000000000000000000000000000815250846000602a612163565b606060018054610a4490613eb9565b6002600a5414156116885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610968565b6002600a819055601154146116df5760405162461bcd60e51b815260206004820152601660248201527f5075626c69632053616c65206e6f7420616374697665000000000000000000006044820152606401610968565b600d54600c546116ef9190613e76565b816116f960085490565b6117039190613e0d565b11156117515760405162461bcd60e51b815260206004820152601060248201527f546f6b656e20494420696e76616c6964000000000000000000000000000000006044820152606401610968565b3481600e546117609190613e39565b146117ad5760405162461bcd60e51b815260206004820152601560248201527f496e636f72726563742045746865722076616c756500000000000000000000006044820152606401610968565b600f548111156117ff5760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e742074686973206d616e79206174206f6e63650000006044820152606401610968565b60005b8181101561184857611817335b6008546109f7565b426012600061182560085490565b81526020810191909152604001600020558061184081613f0d565b915050611802565b50506001600a55565b6001600160a01b0382163314156118aa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610968565b3360008181526005602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61193e33836126d4565b6119b05760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610968565b6119bc84848484612a32565b50505050565b60606119cc6133a7565b60405180610100016040528060c3815260200161420e60c39139815260408051808201909152600481527f4e616d65000000000000000000000000000000000000000000000000000000006020820152611a2e90610627908560006064612163565b602082810191909152604080518082018252600e81527f7d2e73706565647b66696c6c203a00000000000000000000000000000000000092810192909252820152611a7b61062784611019565b606082015260408051808201909152601081527f7d2e7374616d696e617b66696c6c203a0000000000000000000000000000000060208201526080820152611ac5610627846122df565b60a082015260408051808201909152601181527f7d2e737472656e6774687b66696c6c203a000000000000000000000000000000602082015260c0820152611b0f6106278461229a565b60e082015260408051808201909152601281527f7d2e656e647572616e63657b66696c6c203a00000000000000000000000000006020820152610100820152611b5a61062784610d26565b6101208201526040805160808101909152605e8082526140d16020830139610140820152611b87836111d4565b610160820152604080516060810190915260288082526140a96020830139610180820152611bb4836114fc565b6101a08201526040805160608101909152602980825261416860208301396101c0820152611be183612253565b6101e0820152604080516060810190915260358082526140746020830139610200820152611c16611c1184611019565b612abb565b6102208201526040805160608101909152603980825261412f6020830139610240820152611c46611c11846122df565b6102608201526040805160608101909152603b8082526142d16020830139610280820152611c76611c118461229a565b6102a08201526040805160608101909152603d8082526141d160208301396102c0820152611ca6611c1184610d26565b6102e0820152604080518082018252600d81527f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000602080830191909152610300840191909152825181840151838501516060860151608087015160a088015160c089015160e08a01516101008b0151995160009a611d269a909101613702565b60408051808303601f19018152908290526101208401516101408501516101608601516101808701516101a08801516101c08901516101e08a01516102008b0151979950611d79988a9890602001613702565b60408051808303601f19018152908290526102208401516102408501516102608601516102808701516102a08801516102c08901516102e08a01516103008b0151979950611dcc988a9890602001613702565b60408051808303601f19018152908290526101a08401516101e08501516102208601516102608701516102a08801516102e0890151959750600096611e149690602001613afa565b60408051601f1981840301815291905290506000611e6384600b6020020151611e3c85612bed565b84604051602001611e4f939291906138c7565b604051602081830303815290604052612bed565b905080604051602001611e769190613d83565b60408051601f198184030181529190529695505050505050565b6002600a541415611ee35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610968565b6002600a55601154600114611f3a5760405162461bcd60e51b815260206004820152601460248201527f57686974656c697374206e6f74206163746976650000000000000000000000006044820152606401610968565b600d54600c54611f4a9190613e76565b81611f5460085490565b611f5e9190613e0d565b1115611fac5760405162461bcd60e51b815260206004820152601060248201527f546f6b656e20494420696e76616c6964000000000000000000000000000000006044820152606401610968565b3360009081526013602052604090205460ff1661200b5760405162461bcd60e51b815260206004820152600f60248201527f4e6f742077686974656c697374656400000000000000000000000000000000006044820152606401610968565b3481600e5461201a9190613e39565b146120675760405162461bcd60e51b815260206004820152601560248201527f496e636f72726563742045746865722076616c756500000000000000000000006044820152606401610968565b600f548111156120b95760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f74206d696e742074686973206d616e79206174206f6e63650000006044820152606401610968565b806120c3336112df565b6120cd9190613e0d565b601054101561211e5760405162461bcd60e51b815260206004820152601560248201527f43616e6e6f74206d696e742074686973206d616e7900000000000000000000006044820152606401610968565b60005b81811015611848576121323361180f565b426012600061214060085490565b81526020810191909152604001600020558061215b81613f0d565b915050612121565b6000838152600260205260408120546001600160a01b03166121ed5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610968565b8183866121f987612abb565b60008881526012602090815260409182902054915161221b94939291016137c4565b6040516020818303038152906040528051906020012060001c61223e9190613e0d565b6122489190613f46565b90505b949350505050565b60606018610f546040518060400160405280600681526020017f47656e64657200000000000000000000000000000000000000000000000000008152508460006002612163565b6000610d6b6040518060400160405280600881526020017f537472656e6774680000000000000000000000000000000000000000000000008152508360006064612163565b6000610d6b6040518060400160405280600781526020017f5374616d696e61000000000000000000000000000000000000000000000000008152508360006064612163565b60606000612442604051602001611e4f907f7b226e616d65223a20224d6f756e74732028666f7220416476656e747572657281527f7329222c20226465736372697074696f6e223a2022383030302067656e65726160208201527f74697665206f6e2d636861696e204d6f756e747320666f7220416476656e747560408201527f7265727320696e20746865204c6f6f747665727365222c202273656c6c65725f60608201527f6665655f62617369735f706f696e7473223a203530302c20226665655f72656360808201527f697069656e74223a20223078366146363036646236324162373438323464393360a08201527f4434333939383265354161463137363462623333227d0000000000000000000060c082015260d60190565b9050806040516020016124559190613d83565b60408051601f1981840301815291905292915050565b600b546001600160a01b031633146124c55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610968565b6001600160a01b0381166125415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610968565b61254a816129c8565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806125e057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061090c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461090c565b61264a828260405180602001604052806000815250612dc6565b5050565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061269b82611102565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661275e5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610968565b600061276983611102565b9050806001600160a01b0316846001600160a01b031614806127a45750836001600160a01b031661279984610ac7565b6001600160a01b0316145b8061224b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff1661224b565b826001600160a01b03166127eb82611102565b6001600160a01b0316146128675760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610968565b6001600160a01b0382166128e25760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610968565b6128ed838383612e4f565b6128f860008261264e565b6001600160a01b0383166000908152600360205260408120805460019290612921908490613e76565b90915550506001600160a01b038216600090815260036020526040812080546001929061294f908490613e0d565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612a3d8484846127d8565b612a4984848484612f07565b6119bc5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610968565b606081612afb57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612b255780612b0f81613f0d565b9150612b1e9050600a83613e25565b9150612aff565b60008167ffffffffffffffff811115612b4057612b40614016565b6040519080825280601f01601f191660200182016040528015612b6a576020820181803683370190505b5090505b841561224b57612b7f600183613e76565b9150612b8c600a86613f46565b612b97906030613e0d565b60f81b818381518110612bac57612bac613fe7565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612be6600a86613e25565b9450612b6e565b805160609080612c0d575050604080516020810190915260008152919050565b60006003612c1c836002613e0d565b612c269190613e25565b612c31906004613e39565b90506000612c40826020613e0d565b67ffffffffffffffff811115612c5857612c58614016565b6040519080825280601f01601f191660200182016040528015612c82576020820181803683370190505b5090506000604051806060016040528060408152602001614191604091399050600181016020830160005b86811015612d0e576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101612cad565b506003860660018114612d285760028114612d7257612db8565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe830152612db8565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b505050918152949350505050565b612dd083836130b1565b612ddd6000848484612f07565b610c9a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610968565b6001600160a01b038316612eaa57612ea581600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612ecd565b816001600160a01b0316836001600160a01b031614612ecd57612ecd8382613217565b6001600160a01b038216612ee457610c9a816132b4565b826001600160a01b0316826001600160a01b031614610c9a57610c9a8282613363565b60006001600160a01b0384163b156130a9576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290612f64903390899088908890600401613dc8565b602060405180830381600087803b158015612f7e57600080fd5b505af1925050508015612fae575060408051601f3d908101601f19168201909252612fab918101906135ea565b60015b61305e573d808015612fdc576040519150601f19603f3d011682016040523d82523d6000602084013e612fe1565b606091505b5080516130565760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610968565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061224b565b50600161224b565b6001600160a01b0382166131075760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610968565b6000818152600260205260409020546001600160a01b03161561316c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610968565b61317860008383612e4f565b6001600160a01b03821660009081526003602052604081208054600192906131a1908490613e0d565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001613224846112df565b61322e9190613e76565b600083815260076020526040902054909150808214613281576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906132c690600190613e76565b600083815260096020526040812054600880549394509092849081106132ee576132ee613fe7565b90600052602060002001549050806008838154811061330f5761330f613fe7565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061334757613347613fb8565b6001900381819060005260206000200160009055905550505050565b600061336e836112df565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6040518061032001604052806019905b60608152602001906001900390816133b75790505090565b600067ffffffffffffffff808411156133ea576133ea614016565b604051601f8501601f19908116603f0116810190828211818310171561341257613412614016565b8160405280935085815286868601111561342b57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461345c57600080fd5b919050565b60006020828403121561347357600080fd5b61122f82613445565b6000806040838503121561348f57600080fd5b61349883613445565b91506134a660208401613445565b90509250929050565b6000806000606084860312156134c457600080fd5b6134cd84613445565b92506134db60208501613445565b9150604084013590509250925092565b6000806000806080858703121561350157600080fd5b61350a85613445565b935061351860208601613445565b925060408501359150606085013567ffffffffffffffff81111561353b57600080fd5b8501601f8101871361354c57600080fd5b61355b878235602084016133cf565b91505092959194509250565b6000806040838503121561357a57600080fd5b61358383613445565b91506020830135801515811461359857600080fd5b809150509250929050565b600080604083850312156135b657600080fd5b6135bf83613445565b946020939093013593505050565b6000602082840312156135df57600080fd5b813561122f81614045565b6000602082840312156135fc57600080fd5b815161122f81614045565b6000806000806080858703121561361d57600080fd5b843567ffffffffffffffff81111561363457600080fd5b8501601f8101871361364557600080fd5b613654878235602084016133cf565b97602087013597506040870135966060013595509350505050565b60006020828403121561368157600080fd5b5035919050565b6000806000806080858703121561369e57600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526136d2816020860160208601613e8d565b601f01601f19169290920160200192915050565b600081516136f8818560208601613e8d565b9290920192915050565b60008a51613714818460208f01613e8d565b8a5190830190613728818360208f01613e8d565b8a5161373a8183850160208f01613e8d565b8a51929091010190613750818360208d01613e8d565b88516137628183850160208d01613e8d565b8851929091010190613778818360208b01613e8d565b865161378a8183850160208b01613e8d565b86519290910101906137a0818360208901613e8d565b84516137b28183850160208901613e8d565b9101019b9a5050505050505050505050565b600084516137d6818460208901613e8d565b8451908301906137ea818360208901613e8d565b01928352505060200192915050565b6000835161380b818460208801613e8d565b7f20000000000000000000000000000000000000000000000000000000000000009083019081528351613845816001840160208801613e8d565b01600101949350505050565b60008451613863818460208901613e8d565b80830190507f2000000000000000000000000000000000000000000000000000000000000000808252855161389f816001850160208a01613e8d565b600192019182015283516138ba816002840160208801613e8d565b0160020195945050505050565b7f7b226e616d65223a2022000000000000000000000000000000000000000000008152600084516138ff81600a850160208901613e8d565b7f222c226465736372697074696f6e223a2022383030302072616e646f6d697a65600a918401918201527f64206f6e20636861696e204d6f756e74732028666f7220416476656e74757265602a8201527f7273292e204d6f756e74732061726520696e74656e64656420746f2062652075604a8201527f73656420627920616476656e74757265727320746f206765742061726f756e64606a8201527f2074686520776f726c6420696e20776869636820746865792061726520657870608a8201527f6c6f72696e672e2045616368206d6f756e74206861732061206261736963207360aa8201527f6574206f6620737461747320616e642070726f7065727469657320746861742060ca8201527f63616e206265207573656420616e6420696e746572707265746564206173206460ea8201527f6573697265642e222c22696d616765223a2022646174613a696d6167652f737661010a8201527f672b786d6c3b6261736536342c0000000000000000000000000000000000000061012a820152613af0613ac7613ac1613a986101378501896136e6565b7f222c2022747261697473223a205b0000000000000000000000000000000000008152600e0190565b866136e6565b7f5d207d0000000000000000000000000000000000000000000000000000000000815260030190565b9695505050505050565b7f7b2274726169745f74797065223a202247656e65726174696f6e222c2276616c81527f7565223a202230227d2c7b2274726169745f74797065223a2022436f6c6f722260208201527f2c2276616c7565223a2022000000000000000000000000000000000000000000604082015260008751613b7e81604b850160208c01613e8d565b7f227d2c7b2274726169745f74797065223a202247656e646572222c2276616c75604b918401918201527f65223a2022000000000000000000000000000000000000000000000000000000606b8201528751613be1816070840160208c01613e8d565b7f227d2c7b2274726169745f74797065223a20225370656564222c2276616c7565607092909101918201527f223a2022000000000000000000000000000000000000000000000000000000006090820152613d76613d4d613ac1613cfe613cf8613ca9613ca3613c54609489018f6136e6565b7f227d2c7b2274726169745f74797065223a20225374616d696e61222c2276616c81527f7565223a20220000000000000000000000000000000000000000000000000000602082015260260190565b8c6136e6565b7f227d2c7b2274726169745f74797065223a2022537472656e677468222c22766181527f6c7565223a202200000000000000000000000000000000000000000000000000602082015260270190565b896136e6565b7f227d2c7b2274726169745f74797065223a2022456e647572616e6365222c227681527f616c7565223a2022000000000000000000000000000000000000000000000000602082015260280190565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815260008251613dbb81601d850160208701613e8d565b91909101601d0192915050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613af060808301846136ba565b60208152600061122f60208301846136ba565b60008219821115613e2057613e20613f5a565b500190565b600082613e3457613e34613f89565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e7157613e71613f5a565b500290565b600082821015613e8857613e88613f5a565b500390565b60005b83811015613ea8578181015183820152602001613e90565b838111156119bc5750506000910152565b600181811c90821680613ecd57607f821691505b60208210811415613f07577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f3f57613f3f613f5a565b5060010190565b600082613f5557613f55613f89565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461254a57600080fdfe3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365207370656564223e5370656564203c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2235302220636c6173733d2262617365206e616d65223e3c2f746578743e3c7465787420783d2231302220793d223137302220636c6173733d2262617365207374616d696e61223e5374616d696e61203c2f746578743e3c7465787420783d2231302220793d223131302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f746578743e3c7465787420783d2231302220793d223233302220636c6173733d226261736520656e647572616e6365223e456e647572616e6365203c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302034333020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a20617269616c3b20666f6e742d7765696768743a203130303b20666f6e742d73697a653a20323470783b207d202e6e616d65207b66696c6c3a3c2f746578743e3c7465787420783d2231302220793d223230302220636c6173733d226261736520737472656e677468223e537472656e67746820a264697066735822122043b1a237c4a6c931b35692caa2f04940ad0e3f307711679440290087de3c132164736f6c63430008070033

Deployed Bytecode Sourcemap

19724:14859:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16701:224;;;;;;;;;;-1:-1:-1;16701:224:0;;;;;:::i;:::-;;:::i;:::-;;;16769:14:1;;16762:22;16744:41;;16732:2;16717:18;16701:224:0;;;;;;;;33911:184;;;;;;;;;;-1:-1:-1;33911:184:0;;;;;:::i;:::-;;:::i;:::-;;33731:174;;;;;;;;;;-1:-1:-1;33731:174:0;;;;;:::i;:::-;;:::i;9904:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10977:221::-;;;;;;;;;;-1:-1:-1;10977:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;16021:55:1;;;16003:74;;15991:2;15976:18;10977:221:0;15857:226:1;10560:411:0;;;;;;;;;;-1:-1:-1;10560:411:0;;;;;:::i;:::-;;:::i;17193:113::-;;;;;;;;;;-1:-1:-1;17281:10:0;:17;17193:113;;;27180:25:1;;;27168:2;27153:18;17193:113:0;27034:177:1;20054:25:0;;;;;;;;;;;;;;;;11675:286;;;;;;;;;;-1:-1:-1;11675:286:0;;;;;:::i;:::-;;:::i;23766:131::-;;;;;;;;;;-1:-1:-1;23766:131:0;;;;;:::i;:::-;;:::i;20017:30::-;;;;;;;;;;;;;;;;16931:256;;;;;;;;;;-1:-1:-1;16931:256:0;;;;;:::i;:::-;;:::i;34103:97::-;;;;;;;;;;-1:-1:-1;34103:97:0;;;;;:::i;:::-;-1:-1:-1;;;;;34180:12:0;34157:4;34180:12;;;:9;:12;;;;;;;;;34103:97;19981:29;;;;;;;;;;;;;;;;34303:271;;;;;;;;;;;;;:::i;22649:132::-;;;;;;;;;;-1:-1:-1;22649:132:0;;;;;:::i;:::-;;:::i;11967:185::-;;;;;;;;;;-1:-1:-1;11967:185:0;;;;;:::i;:::-;;:::i;23369:123::-;;;;;;;;;;-1:-1:-1;23369:123:0;;;;;:::i;:::-;;:::i;17312:233::-;;;;;;;;;;-1:-1:-1;17312:233:0;;;;;:::i;:::-;;:::i;9659:239::-;;;;;;;;;;-1:-1:-1;9659:239:0;;;;;:::i;:::-;;:::i;22935:138::-;;;;;;;;;;-1:-1:-1;22935:138:0;;;;;:::i;:::-;;:::i;23903:774::-;;;;;;;;;;-1:-1:-1;23903:774:0;;;;;:::i;:::-;;:::i;9445:208::-;;;;;;;;;;-1:-1:-1;9445:208:0;;;;;:::i;:::-;;:::i;3517:94::-;;;;;;;;;;;;;:::i;24685:267::-;;;;;;;;;;-1:-1:-1;24685:267:0;;;;;:::i;:::-;;:::i;23226:135::-;;;;;;;;;;-1:-1:-1;23226:135:0;;;;;:::i;:::-;;:::i;34206:91::-;;;;;;;;;;-1:-1:-1;34206:91:0;;;;;:::i;:::-;;:::i;3298:87::-;;;;;;;;;;-1:-1:-1;3371:6:0;;-1:-1:-1;;;;;3371:6:0;3298:87;;22789:138;;;;;;;;;;-1:-1:-1;22789:138:0;;;;;:::i;:::-;;:::i;10010:104::-;;;;;;;;;;;;;:::i;20178:41::-;;;;;;;;;;-1:-1:-1;20178:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19941:33;;;;;;;;;;;;;;;;28200:492;;;;;;:::i;:::-;;:::i;11204:295::-;;;;;;;;;;-1:-1:-1;11204:295:0;;;;;:::i;:::-;;:::i;20127:44::-;;;;;;;;;;-1:-1:-1;20127:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;12158:328;;;;;;;;;;-1:-1:-1;12158:328:0;;;;;:::i;:::-;;:::i;24960:3234::-;;;;;;;;;;-1:-1:-1;24960:3234:0;;;;;:::i;:::-;;:::i;28698:637::-;;;;;;:::i;:::-;;:::i;22314:323::-;;;;;;;;;;-1:-1:-1;22314:323:0;;;;;:::i;:::-;;:::i;23081:137::-;;;;;;;;;;-1:-1:-1;23081:137:0;;;;;:::i;:::-;;:::i;23498:129::-;;;;;;;;;;-1:-1:-1;23498:129:0;;;;;:::i;:::-;;:::i;23633:127::-;;;;;;;;;;-1:-1:-1;23633:127:0;;;;;:::i;:::-;;:::i;29341:466::-;;;;;;;;;;;;;:::i;11505:164::-;;;;;;;;;;-1:-1:-1;11505:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;11626:25:0;;;11602:4;11626:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;11505:164;3617:192;;;;;;;;;;-1:-1:-1;3617:192:0;;;;;:::i;:::-;;:::i;16701:224::-;16803:4;16827:50;;;16842:35;16827:50;;:90;;;16881:36;16905:11;16881:23;:36::i;:::-;16820:97;16701:224;-1:-1:-1;;16701:224:0:o;33911:184::-;3371:6;;-1:-1:-1;;;;;3371:6:0;2939:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;23411:2:1;3423:68:0;;;23393:21:1;;;23430:18;;;23423:30;23489:34;23469:18;;;23462:62;23541:18;;3423:68:0;;;;;;;;;33999:6:::1;:10:::0;;;;34020:5:::1;:9:::0;;;;34040::::1;:18:::0;34069:9:::1;:18:::0;33911:184::o;33731:174::-;3371:6;;-1:-1:-1;;;;;3371:6:0;2939:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;23411:2:1;3423:68:0;;;23393:21:1;;;23430:18;;;23423:30;23489:34;23469:18;;;23462:62;23541:18;;3423:68:0;23209:356:1;3423:68:0;33799:6:::1;33795:79;33811:1;33809;:3;33795:79;;;33833:29;33843:1;33846:13;17281:10:::0;:17;;17193:113;33846:13:::1;:15;::::0;33860:1:::1;33846:15;:::i;:::-;33833:9;:29::i;:::-;33814:3:::0;::::1;::::0;::::1;:::i;:::-;;;;33795:79;;;;33896:1;33884:8;;:13;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;33731:174:0:o;9904:100::-;9958:13;9991:5;9984:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9904:100;:::o;10977:221::-;11053:7;12902:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12902:16:0;11073:73;;;;-1:-1:-1;;;11073:73:0;;22998:2:1;11073:73:0;;;22980:21:1;23037:2;23017:18;;;23010:30;23076:34;23056:18;;;23049:62;23147:14;23127:18;;;23120:42;23179:19;;11073:73:0;22796:408:1;11073:73:0;-1:-1:-1;11166:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11166:24:0;;10977:221::o;10560:411::-;10641:13;10657:23;10672:7;10657:14;:23::i;:::-;10641:39;;10705:5;-1:-1:-1;;;;;10699:11:0;:2;-1:-1:-1;;;;;10699:11:0;;;10691:57;;;;-1:-1:-1;;;10691:57:0;;25293:2:1;10691:57:0;;;25275:21:1;25332:2;25312:18;;;25305:30;25371:34;25351:18;;;25344:62;25442:3;25422:18;;;25415:31;25463:19;;10691:57:0;25091:397:1;10691:57:0;2939:10;-1:-1:-1;;;;;10783:21:0;;;;:62;;-1:-1:-1;10808:37:0;10825:5;2939:10;11505:164;:::i;10808:37::-;10761:168;;;;-1:-1:-1;;;10761:168:0;;20698:2:1;10761:168:0;;;20680:21:1;20737:2;20717:18;;;20710:30;20776:34;20756:18;;;20749:62;20847:26;20827:18;;;20820:54;20891:19;;10761:168:0;20496:420:1;10761:168:0;10942:21;10951:2;10955:7;10942:8;:21::i;:::-;10630:341;10560:411;;:::o;11675:286::-;11817:41;2939:10;11850:7;11817:18;:41::i;:::-;11809:103;;;;-1:-1:-1;;;11809:103:0;;25695:2:1;11809:103:0;;;25677:21:1;25734:2;25714:18;;;25707:30;25773:34;25753:18;;;25746:62;25844:19;25824:18;;;25817:47;25881:19;;11809:103:0;25493:413:1;11809:103:0;11925:28;11935:4;11941:2;11945:7;11925:9;:28::i;23766:131::-;23825:7;23851:36;;;;;;;;;;;;;;;;;;23871:7;23880:1;23883:3;23851:6;:36::i;:::-;:38;;23888:1;23851:38;:::i;16931:256::-;17028:7;17064:23;17081:5;17064:16;:23::i;:::-;17056:5;:31;17048:87;;;;-1:-1:-1;;;17048:87:0;;17222:2:1;17048:87:0;;;17204:21:1;17261:2;17241:18;;;17234:30;17300:34;17280:18;;;17273:62;17371:13;17351:18;;;17344:41;17402:19;;17048:87:0;17020:407:1;17048:87:0;-1:-1:-1;;;;;;17153:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;16931:256::o;34303:271::-;3371:6;;-1:-1:-1;;;;;3371:6:0;2939:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;23411:2:1;3423:68:0;;;23393:21:1;;;23430:18;;;23423:30;23489:34;23469:18;;;23462:62;23541:18;;3423:68:0;23209:356:1;3423:68:0;34366:21:::1;34351:12;34414:14;34424:4;34366:21:::0;34414:14:::1;:::i;:::-;34413:19;::::0;34430:2:::1;34413:19;:::i;:::-;34445:67;::::0;34400:32;;-1:-1:-1;34453:42:0::1;::::0;34445:67;::::1;;;::::0;34400:32;;34445:67:::1;::::0;;;34400:32;34453:42;34445:67;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;34531:10:0::1;34523:43;34552:13;34560:5:::0;34552:7;:13:::1;:::i;:::-;34523:43;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;22649:132:::0;22704:13;22737:4;22742:30;;;;;;;;;;;;;;;;;;22757:7;22766:1;22769:2;22742:6;:30::i;:::-;22737:36;;;;;;;;:::i;:::-;;;;;;;;22730:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22649:132;;;:::o;11967:185::-;12105:39;12122:4;12128:2;12132:7;12105:39;;;;;;;;;;;;:16;:39::i;23369:123::-;23424:7;23450:32;;;;;;;;;;;;;;;;;;23466:7;23475:1;23478:3;23450:6;:32::i;17312:233::-;17387:7;17423:30;17281:10;:17;;17193:113;17423:30;17415:5;:38;17407:95;;;;-1:-1:-1;;;17407:95:0;;26113:2:1;17407:95:0;;;26095:21:1;26152:2;26132:18;;;26125:30;26191:34;26171:18;;;26164:62;26262:14;26242:18;;;26235:42;26294:19;;17407:95:0;25911:408:1;17407:95:0;17520:10;17531:5;17520:17;;;;;;;;:::i;:::-;;;;;;;;;17513:24;;17312:233;;;:::o;9659:239::-;9731:7;9767:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9767:16:0;9802:19;9794:73;;;;-1:-1:-1;;;9794:73:0;;21878:2:1;9794:73:0;;;21860:21:1;21917:2;21897:18;;;21890:30;21956:34;21936:18;;;21929:62;22027:11;22007:18;;;22000:39;22056:19;;9794:73:0;21676:405:1;22935:138:0;22992:13;23025:6;23032:32;;;;;;;;;;;;;;;;;;23049:7;23058:1;23061:2;23032:6;:32::i;23903:774::-;23958:13;23984:9;23996:31;;;;;;;;;;;;;;;;;;24011:7;24020:1;24023:3;23996:6;:31::i;:::-;23984:43;;24056:2;24052:1;:6;24048:598;;;24068:16;24076:7;24068;:16::i;:::-;24061:23;23903:774;-1:-1:-1;;;23903:774:0:o;24048:598::-;24110:2;24106:1;:6;24102:544;;;24161:18;24171:7;24161:9;:18::i;:::-;24212:16;24220:7;24212;:16::i;:::-;24130:113;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24115:139;;;23903:774;;;:::o;24102:544::-;24280:2;24276:1;:6;24272:374;;;24330:16;24338:7;24330;:16::i;:::-;24379:18;24389:7;24379:9;:18::i;24272:374::-;24450:3;24445:1;:8;24441:205;;24502:18;24512:7;24502:9;:18::i;:::-;24553:16;24561:7;24553;:16::i;:::-;24602:18;24612:7;24602:9;:18::i;:::-;24471:164;;;;;;;;;;:::i;24441:205::-;-1:-1:-1;;24657:9:0;;;;;;;;;-1:-1:-1;24657:9:0;;;23903:774;-1:-1:-1;23903:774:0:o;9445:208::-;9517:7;-1:-1:-1;;;;;9545:19:0;;9537:74;;;;-1:-1:-1;;;9537:74:0;;21467:2:1;9537:74:0;;;21449:21:1;21506:2;21486:18;;;21479:30;21545:34;21525:18;;;21518:62;21616:12;21596:18;;;21589:40;21646:19;;9537:74:0;21265:406:1;9537:74:0;-1:-1:-1;;;;;;9629:16:0;;;;;:9;:16;;;;;;;9445:208::o;3517:94::-;3371:6;;-1:-1:-1;;;;;3371:6:0;2939:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;23411:2:1;3423:68:0;;;23393:21:1;;;23430:18;;;23423:30;23489:34;23469:18;;;23462:62;23541:18;;3423:68:0;23209:356:1;3423:68:0;3582:21:::1;3600:1;3582:9;:21::i;:::-;3517:94::o:0;24685:267::-;24736:13;24769:2;24765:1;:6;24761:163;;;-1:-1:-1;;24774:13:0;;;;;;;;;;;;;;;;;;24685:267::o;24761:163::-;24811:2;24807:1;:6;24803:121;;;-1:-1:-1;;24816:16:0;;;;;;;;;;;;;;;;;;24685:267::o;24803:121::-;24856:2;24852:1;:6;24848:76;;;-1:-1:-1;;24861:16:0;;;;;;;;;;;;;;;;;;24685:267::o;24848:76::-;24902:3;24897:1;:8;24893:31;;-1:-1:-1;;24908:16:0;;;;;;;;;;;;;;;;;;24685:267::o;24893:31::-;-1:-1:-1;;24935:9:0;;;;;;;;;-1:-1:-1;24935:9:0;;;24685:267::o;23226:135::-;23282:13;23315:5;23321:31;;;;;;;;;;;;;;;;;;23337:7;23346:1;23349:2;23321:6;:31::i;34206:91::-;3371:6;;-1:-1:-1;;;;;3371:6:0;2939:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;23411:2:1;3423:68:0;;;23393:21:1;;;23430:18;;;23423:30;23489:34;23469:18;;;23462:62;23541:18;;3423:68:0;23209:356:1;3423:68:0;-1:-1:-1;;;;;34270:12:0::1;;::::0;;;:9:::1;:12;::::0;;;;:19;;;::::1;34285:4;34270:19;::::0;;34206:91::o;22789:138::-;22846:13;22879:6;22886:32;;;;;;;;;;;;;;;;;;22903:7;22912:1;22915:2;22886:6;:32::i;10010:104::-;10066:13;10099:7;10092:14;;;;;:::i;28200:492::-;4120:1;4266:7;;:19;;4258:63;;;;-1:-1:-1;;;4258:63:0;;26526:2:1;4258:63:0;;;26508:21:1;26565:2;26545:18;;;26538:30;26604:33;26584:18;;;26577:61;26655:18;;4258:63:0;26324:355:1;4258:63:0;4120:1;4332:7;:18;;;28272:6:::1;::::0;:11:::1;28264:46;;;::::0;-1:-1:-1;;;28264:46:0;;20347:2:1;28264:46:0::1;::::0;::::1;20329:21:1::0;20386:2;20366:18;;;20359:30;20425:24;20405:18;;;20398:52;20467:18;;28264:46:0::1;20145:346:1::0;28264:46:0::1;28365:8;;28351:11;;:22;;;;:::i;:::-;28345:1;28329:13;17281:10:::0;:17;;17193:113;28329:13:::1;:17;;;;:::i;:::-;:45;;28321:74;;;::::0;-1:-1:-1;;;28321:74:0;;23772:2:1;28321:74:0::1;::::0;::::1;23754:21:1::0;23811:2;23791:18;;;23784:30;23850:18;23830;;;23823:46;23886:18;;28321:74:0::1;23570:340:1::0;28321:74:0::1;28425:9;28420:1;28414:5;;:7;;;;:::i;:::-;:20;28406:54;;;::::0;-1:-1:-1;;;28406:54:0;;26886:2:1;28406:54:0::1;::::0;::::1;26868:21:1::0;26925:2;26905:18;;;26898:30;26964:23;26944:18;;;26937:51;27005:18;;28406:54:0::1;26684:345:1::0;28406:54:0::1;28484:9;;28479:1;:14;;28471:56;;;::::0;-1:-1:-1;;;28471:56:0;;18817:2:1;28471:56:0::1;::::0;::::1;18799:21:1::0;18856:2;18836:18;;;18829:30;18895:31;18875:18;;;18868:59;18944:18;;28471:56:0::1;18615:353:1::0;28471:56:0::1;28542:6;28538:147;28554:1;28552;:3;28538:147;;;28576:40;2939:10:::0;28586:12:::1;17281:10:::0;:17;28600:13:::1;17193:113:::0;28576:40:::1;28658:15;28631:9;:24;28641:13;17281:10:::0;:17;;17193:113;28641:13:::1;28631:24:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;28631:24:0;:42;28557:3;::::1;::::0;::::1;:::i;:::-;;;;28538:147;;;-1:-1:-1::0;;4076:1:0;4375:7;:22;28200:492::o;11204:295::-;-1:-1:-1;;;;;11307:24:0;;2939:10;11307:24;;11299:62;;;;-1:-1:-1;;;11299:62:0;;19580:2:1;11299:62:0;;;19562:21:1;19619:2;19599:18;;;19592:30;19658:27;19638:18;;;19631:55;19703:18;;11299:62:0;19378:349:1;11299:62:0;2939:10;11374:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;11374:42:0;;;;;;;;;;;;:53;;;;;;;;;;;;;11443:48;;16744:41:1;;;11374:42:0;;2939:10;11443:48;;16717:18:1;11443:48:0;;;;;;;11204:295;;:::o;12158:328::-;12333:41;2939:10;12366:7;12333:18;:41::i;:::-;12325:103;;;;-1:-1:-1;;;12325:103:0;;25695:2:1;12325:103:0;;;25677:21:1;25734:2;25714:18;;;25707:30;25773:34;25753:18;;;25746:62;25844:19;25824:18;;;25817:47;25881:19;;12325:103:0;25493:413:1;12325:103:0;12439:39;12453:4;12459:2;12463:7;12472:5;12439:13;:39::i;:::-;12158:328;;;;:::o;24960:3234::-;25025:13;25052:23;;:::i;:::-;25088:208;;;;;;;;;;;;;;;;;;;25339:31;;;;;;;;;;;;;25088:8;25339:31;;;25328:43;;25339:31;;25354:7;25094:1;25366:3;25339:6;:31::i;25328:43::-;25317:8;;;;:54;;;;25384:27;;;;;;;;;;;;;;;;;;;:8;;:27;25443:29;25454:17;25463:7;25454:8;:17::i;25443:29::-;25432:8;;;:40;25485:29;;;;;;;;;;;;;-1:-1:-1;25485:29:0;;;:8;;;:29;25538:31;25549:19;25560:7;25549:10;:19::i;25538:31::-;25527:8;;;:42;25582:30;;;;;;;;;;;;;25527:8;25582:30;;;:8;;;:30;25636:32;25647:20;25659:7;25647:11;:20::i;25636:32::-;25625:8;;;:43;25681:31;;;;;;;;;;;;;25625:8;25681:31;;;:8;;;:31;25736:33;25747:21;25760:7;25747:12;:21::i;25736:33::-;25725:8;;;:44;25782:107;;;;;;;;;;;;;;25725:8;25782:107;;;:9;;;:107;25914:16;25922:7;25914;:16::i;:::-;25902:9;;;:28;25943:54;;;;;;;;;;;;;;25902:9;25943:54;;;:9;;;:54;26022:17;26031:7;26022:8;:17::i;:::-;26010:9;;;:29;26052:55;;;;;;;;;;;;;;26010:9;26052:55;;;:9;;;:55;26132:18;26142:7;26132:9;:18::i;:::-;26120:9;;;:30;26163:67;;;;;;;;;;;;;;26120:9;26163:67;;;:9;;;:67;26255:28;:17;26264:7;26255:8;:17::i;:::-;:26;:28::i;:::-;26243:9;;;:40;26296:71;;;;;;;;;;;;;;26243:9;26296:71;;;:9;;;:71;26392:30;:19;26403:7;26392:10;:19::i;:30::-;26380:9;;;:42;26435:73;;;;;;;;;;;;;;26380:9;26435:73;;;:9;;;:73;26533:31;:20;26545:7;26533:11;:20::i;:31::-;26521:9;;;:43;26577:75;;;;;;;;;;;;;;26521:9;26577:75;;;:9;;;:75;26677:32;:21;26690:7;26677:12;:21::i;:32::-;26665:9;;;:44;26722:27;;;;;;;;;;;;26665:9;26722:27;;;;;;;:9;;;:27;;;;26809:8;;26819;;;;26829;;;;26839;;;;26849;;;;26859;;;;26869;;;;26879;;;;26889;;;;26792:106;;-1:-1:-1;;26792:106:0;;26889:8;;26792:106;;:::i;:::-;;;;;;;-1:-1:-1;;26792:106:0;;;;;;;26951:8;;;;26961:9;;;;26972;;;;26983;;;;26994;;;;27005;;;;27016;;;;27027;;;;26792:106;;-1:-1:-1;26926:111:0;;26792:106;;27027:9;26951:8;26926:111;;:::i;:::-;;;;;;;-1:-1:-1;;26926:111:0;;;;;;;27090:9;;;;27101;;;;27112;;;;27123;;;;27134;;;;27145;;;;27156;;;;27167;;;;26926:111;;-1:-1:-1;27065:112:0;;26926:111;;27167:9;27090;27065:112;;:::i;:::-;;;;;;;-1:-1:-1;;27065:112:0;;;;;;;27316:9;;;;27366;;;;27415;;;;27466;;;;27518;;;;27571;;;;27065:112;;-1:-1:-1;27191:20:0;;27221:365;;27571:9;27316;27221:365;;:::i;:::-;;;;-1:-1:-1;;27221:365:0;;;;;;;;;;-1:-1:-1;27608:18:0;27629:438;27687:5;27693:2;27687:9;;;;28003:28;28023:6;28003:13;:28::i;:::-;28051:6;27656:408;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27629:13;:438::i;:::-;27608:459;;28154:4;28104:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28104:55:0;;;;;;;;;;24960:3234;-1:-1:-1;;;;;;24960:3234:0:o;28698:637::-;4120:1;4266:7;;:19;;4258:63;;;;-1:-1:-1;;;4258:63:0;;26526:2:1;4258:63:0;;;26508:21:1;26565:2;26545:18;;;26538:30;26604:33;26584:18;;;26577:61;26655:18;;4258:63:0;26324:355:1;4258:63:0;4120:1;4332:7;:18;28777:6:::1;::::0;28787:1:::1;28777:11;28769:44;;;::::0;-1:-1:-1;;;28769:44:0;;22288:2:1;28769:44:0::1;::::0;::::1;22270:21:1::0;22327:2;22307:18;;;22300:30;22366:22;22346:18;;;22339:50;22406:18;;28769:44:0::1;22086:344:1::0;28769:44:0::1;28866:8;;28852:11;;:22;;;;:::i;:::-;28846:1;28832:13;17281:10:::0;:17;;17193:113;28832:13:::1;:15;;;;:::i;:::-;:43;;28824:72;;;::::0;-1:-1:-1;;;28824:72:0;;23772:2:1;28824:72:0::1;::::0;::::1;23754:21:1::0;23811:2;23791:18;;;23784:30;23850:18;23830;;;23823:46;23886:18;;28824:72:0::1;23570:340:1::0;28824:72:0::1;28925:10;28915:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;28907:50;;;::::0;-1:-1:-1;;;28907:50:0;;21123:2:1;28907:50:0::1;::::0;::::1;21105:21:1::0;21162:2;21142:18;;;21135:30;21201:17;21181:18;;;21174:45;21236:18;;28907:50:0::1;20921:339:1::0;28907:50:0::1;28987:9;28982:1;28976:5;;:7;;;;:::i;:::-;:20;28968:54;;;::::0;-1:-1:-1;;;28968:54:0;;26886:2:1;28968:54:0::1;::::0;::::1;26868:21:1::0;26925:2;26905:18;;;26898:30;26964:23;26944:18;;;26937:51;27005:18;;28968:54:0::1;26684:345:1::0;28968:54:0::1;29046:9;;29041:1;:14;;29033:56;;;::::0;-1:-1:-1;;;29033:56:0;;18817:2:1;29033:56:0::1;::::0;::::1;18799:21:1::0;18856:2;18836:18;;;18829:30;18895:31;18875:18;;;18868:59;18944:18;;29033:56:0::1;18615:353:1::0;29033:56:0::1;29143:1;29121:21;29131:10;29121:9;:21::i;:::-;:23;;;;:::i;:::-;29108:9;;:36;;29100:70;;;::::0;-1:-1:-1;;;29100:70:0;;24943:2:1;29100:70:0::1;::::0;::::1;24925:21:1::0;24982:2;24962:18;;;24955:30;25021:23;25001:18;;;24994:51;25062:18;;29100:70:0::1;24741:345:1::0;29100:70:0::1;29185:6;29181:147;29197:1;29195;:3;29181:147;;;29219:40;2939:10:::0;29229:12:::1;2859:98:::0;29219:40:::1;29301:15;29274:9;:24;29284:13;17281:10:::0;:17;;17193:113;29284:13:::1;29274:24:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29274:24:0;:42;29200:3;::::1;::::0;::::1;:::i;:::-;;;;29181:147;;22314:323:::0;22418:7;12902:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12902:16:0;22438:76;;;;-1:-1:-1;;;22438:76:0;;24527:2:1;22438:76:0;;;24509:21:1;24566:2;24546:18;;;24539:30;24605:34;24585:18;;;24578:62;24676:17;24656:18;;;24649:45;24711:19;;22438:76:0;24325:411:1;22438:76:0;22626:3;22619:5;22568;22575:18;:7;:16;:18::i;:::-;22595;;;;:9;:18;;;;;;;;;;22551:63;;;;;;22595:18;22551:63;;:::i;:::-;;;;;;;;;;;;;22541:74;;;;;;22533:83;;:91;;;;:::i;:::-;22532:97;;;;:::i;:::-;22525:104;;22314:323;;;;;;;:::o;23081:137::-;23138:13;23171:6;23178:31;;;;;;;;;;;;;;;;;;23195:7;23204:1;23207;23178:6;:31::i;23498:129::-;23556:7;23582:35;;;;;;;;;;;;;;;;;;23601:7;23610:1;23613:3;23582:6;:35::i;23633:127::-;23690:7;23716:34;;;;;;;;;;;;;;;;;;23734:7;23743:1;23746:3;23716:6;:34::i;29341:466::-;29385:13;29411:18;29432:264;29459:234;;;;;;10715:66:1;10703:79;;10812:66;10807:2;10798:12;;10791:88;10909:34;10904:2;10895:12;;10888:56;10974:66;10969:2;10960:12;;10953:88;11072:66;11066:3;11057:13;;11050:89;11170:66;11164:3;11155:13;;11148:89;11268:66;11262:3;11253:13;;11246:89;11360:3;11351:13;;10501:869;29432:264:0;29411:285;;29771:4;29721:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29721:55:0;;;;;;;;;;29341:466;-1:-1:-1;;29341:466:0:o;3617:192::-;3371:6;;-1:-1:-1;;;;;3371:6:0;2939:10;3431:23;3423:68;;;;-1:-1:-1;;;3423:68:0;;23411:2:1;3423:68:0;;;23393:21:1;;;23430:18;;;23423:30;23489:34;23469:18;;;23462:62;23541:18;;3423:68:0;23209:356:1;3423:68:0;-1:-1:-1;;;;;3706:22:0;::::1;3698:73;;;::::0;-1:-1:-1;;;3698:73:0;;18053:2:1;3698:73:0::1;::::0;::::1;18035:21:1::0;18092:2;18072:18;;;18065:30;18131:34;18111:18;;;18104:62;18202:8;18182:18;;;18175:36;18228:19;;3698:73:0::1;17851:402:1::0;3698:73:0::1;3782:19;3792:8;3782:9;:19::i;:::-;3617:192:::0;:::o;9134:305::-;9236:4;9273:40;;;9288:25;9273:40;;:105;;-1:-1:-1;9330:48:0;;;9345:33;9330:48;9273:105;:158;;;-1:-1:-1;8548:25:0;8533:40;;;;9395:36;8424:157;13300:110;13376:26;13386:2;13390:7;13376:26;;;;;;;;;;;;:9;:26::i;:::-;13300:110;;:::o;14997:174::-;15072:24;;;;:15;:24;;;;;:29;;;;-1:-1:-1;;;;;15072:29:0;;;;;;;;:24;;15126:23;15072:24;15126:14;:23::i;:::-;-1:-1:-1;;;;;15117:46:0;;;;;;;;;;;14997:174;;:::o;12946:348::-;13039:4;12902:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12902:16:0;13056:73;;;;-1:-1:-1;;;13056:73:0;;19934:2:1;13056:73:0;;;19916:21:1;19973:2;19953:18;;;19946:30;20012:34;19992:18;;;19985:62;20083:14;20063:18;;;20056:42;20115:19;;13056:73:0;19732:408:1;13056:73:0;13140:13;13156:23;13171:7;13156:14;:23::i;:::-;13140:39;;13209:5;-1:-1:-1;;;;;13198:16:0;:7;-1:-1:-1;;;;;13198:16:0;;:51;;;;13242:7;-1:-1:-1;;;;;13218:31:0;:20;13230:7;13218:11;:20::i;:::-;-1:-1:-1;;;;;13218:31:0;;13198:51;:87;;;-1:-1:-1;;;;;;11626:25:0;;;11602:4;11626:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13253:32;11505:164;14467:524;14626:4;-1:-1:-1;;;;;14599:31:0;:23;14614:7;14599:14;:23::i;:::-;-1:-1:-1;;;;;14599:31:0;;14591:85;;;;-1:-1:-1;;;14591:85:0;;24117:2:1;14591:85:0;;;24099:21:1;24156:2;24136:18;;;24129:30;24195:34;24175:18;;;24168:62;24266:11;24246:18;;;24239:39;24295:19;;14591:85:0;23915:405:1;14591:85:0;-1:-1:-1;;;;;14695:16:0;;14687:65;;;;-1:-1:-1;;;14687:65:0;;19175:2:1;14687:65:0;;;19157:21:1;19214:2;19194:18;;;19187:30;19253:34;19233:18;;;19226:62;19324:6;19304:18;;;19297:34;19348:19;;14687:65:0;18973:400:1;14687:65:0;14765:39;14786:4;14792:2;14796:7;14765:20;:39::i;:::-;14815:29;14832:1;14836:7;14815:8;:29::i;:::-;-1:-1:-1;;;;;14857:15:0;;;;;;:9;:15;;;;;:20;;14876:1;;14857:15;:20;;14876:1;;14857:20;:::i;:::-;;;;-1:-1:-1;;;;;;;14888:13:0;;;;;;:9;:13;;;;;:18;;14905:1;;14888:13;:18;;14905:1;;14888:18;:::i;:::-;;;;-1:-1:-1;;14917:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;14917:21:0;;;;;;;;;14956:27;;14917:16;;14956:27;;;;;;;14467:524;;;:::o;3817:173::-;3892:6;;;-1:-1:-1;;;;;3909:17:0;;;;;;;;;;;3942:40;;3892:6;;;3909:17;3892:6;;3942:40;;3873:16;;3942:40;3862:128;3817:173;:::o;12492:315::-;12649:28;12659:4;12665:2;12669:7;12649:9;:28::i;:::-;12696:48;12719:4;12725:2;12729:7;12738:5;12696:22;:48::i;:::-;12688:111;;;;-1:-1:-1;;;12688:111:0;;17634:2:1;12688:111:0;;;17616:21:1;17673:2;17653:18;;;17646:30;17712:34;17692:18;;;17685:62;17783:20;17763:18;;;17756:48;17821:19;;12688:111:0;17432:414:1;1486:532:0;1542:13;1572:10;1568:53;;-1:-1:-1;;1599:10:0;;;;;;;;;;;;;;;;;;1486:532::o;1568:53::-;1646:5;1631:12;1687:78;1694:9;;1687:78;;1720:8;;;;:::i;:::-;;-1:-1:-1;1743:10:0;;-1:-1:-1;1751:2:0;1743:10;;:::i;:::-;;;1687:78;;;1775:19;1807:6;1797:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1797:17:0;;1775:39;;1825:154;1832:10;;1825:154;;1859:11;1869:1;1859:11;;:::i;:::-;;-1:-1:-1;1928:10:0;1936:2;1928:5;:10;:::i;:::-;1915:24;;:2;:24;:::i;:::-;1902:39;;1885:6;1892;1885:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;1956:11:0;1965:2;1956:11;;:::i;:::-;;;1825:154;;34779:1607;34877:11;;34837:13;;34903:8;34899:23;;-1:-1:-1;;34913:9:0;;;;;;;;;-1:-1:-1;34913:9:0;;;34779:1607;-1:-1:-1;34779:1607:0:o;34899:23::-;34974:18;35012:1;35001:7;:3;35007:1;35001:7;:::i;:::-;35000:13;;;;:::i;:::-;34995:19;;:1;:19;:::i;:::-;34974:40;-1:-1:-1;35072:19:0;35104:15;34974:40;35117:2;35104:15;:::i;:::-;35094:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35094:26:0;;35072:48;;35133:18;35154:5;;;;;;;;;;;;;;;;;35133:26;;35223:1;35216:5;35212:13;35268:2;35260:6;35256:15;35319:1;35287:777;35342:3;35339:1;35336:10;35287:777;;;35397:1;35440:12;;;;;35434:19;35535:4;35523:2;35519:14;;;;;35501:40;;35495:47;35644:2;35640:14;;;35636:25;;35622:40;;35616:47;35773:1;35769:13;;;35765:24;;35751:39;;35745:46;35893:16;;;;35879:31;;35873:38;35571:1;35567:11;;;35665:4;35612:58;;;35603:68;35696:11;;35741:57;;;35732:67;;;;35824:11;;35869:49;;35860:59;35948:3;35944:13;35977:22;;36047:1;36032:17;;;;35390:9;35287:777;;;35291:44;36096:1;36091:3;36087:11;36117:1;36112:84;;;;36215:1;36210:82;;;;36080:212;;36112:84;36164:16;36145:17;;;36138:43;36112:84;;36210:82;36262:14;36243:17;;;36236:41;36080:212;-1:-1:-1;;;36308:26:0;;;36315:6;34779:1607;-1:-1:-1;;;;34779:1607:0:o;13416:321::-;13546:18;13552:2;13556:7;13546:5;:18::i;:::-;13597:54;13628:1;13632:2;13636:7;13645:5;13597:22;:54::i;:::-;13575:154;;;;-1:-1:-1;;;13575:154:0;;17634:2:1;13575:154:0;;;17616:21:1;17673:2;17653:18;;;17646:30;17712:34;17692:18;;;17685:62;17783:20;17763:18;;;17756:48;17821:19;;13575:154:0;17432:414:1;17551:589:0;-1:-1:-1;;;;;17757:18:0;;17753:187;;17792:40;17824:7;18479:10;:17;;18452:24;;;;:15;:24;;;;;:44;;;18507:24;;;;;;;;;;;;18375:164;17792:40;17753:187;;;17862:2;-1:-1:-1;;;;;17854:10:0;:4;-1:-1:-1;;;;;17854:10:0;;17850:90;;17881:47;17914:4;17920:7;17881:32;:47::i;:::-;-1:-1:-1;;;;;17954:16:0;;17950:183;;17987:45;18024:7;17987:36;:45::i;17950:183::-;18060:4;-1:-1:-1;;;;;18054:10:0;:2;-1:-1:-1;;;;;18054:10:0;;18050:83;;18081:40;18109:2;18113:7;18081:27;:40::i;15177:803::-;15332:4;-1:-1:-1;;;;;15353:13:0;;5012:20;5060:8;15349:624;;15389:72;;;;;-1:-1:-1;;;;;15389:36:0;;;;;:72;;2939:10;;15440:4;;15446:7;;15455:5;;15389:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15389:72:0;;;;;;;;-1:-1:-1;;15389:72:0;;;;;;;;;;;;:::i;:::-;;;15385:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15635:13:0;;15631:272;;15678:60;;-1:-1:-1;;;15678:60:0;;17634:2:1;15678:60:0;;;17616:21:1;17673:2;17653:18;;;17646:30;17712:34;17692:18;;;17685:62;17783:20;17763:18;;;17756:48;17821:19;;15678:60:0;17432:414:1;15631:272:0;15853:6;15847:13;15838:6;15834:2;15830:15;15823:38;15385:533;15512:55;;15522:45;15512:55;;-1:-1:-1;15505:62:0;;15349:624;-1:-1:-1;15957:4:0;15950:11;;13743:382;-1:-1:-1;;;;;13823:16:0;;13815:61;;;;-1:-1:-1;;;13815:61:0;;22637:2:1;13815:61:0;;;22619:21:1;;;22656:18;;;22649:30;22715:34;22695:18;;;22688:62;22767:18;;13815:61:0;22435:356:1;13815:61:0;12878:4;12902:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12902:16:0;:30;13887:58;;;;-1:-1:-1;;;13887:58:0;;18460:2:1;13887:58:0;;;18442:21:1;18499:2;18479:18;;;18472:30;18538;18518:18;;;18511:58;18586:18;;13887:58:0;18258:352:1;13887:58:0;13958:45;13987:1;13991:2;13995:7;13958:20;:45::i;:::-;-1:-1:-1;;;;;14016:13:0;;;;;;:9;:13;;;;;:18;;14033:1;;14016:13;:18;;14033:1;;14016:18;:::i;:::-;;;;-1:-1:-1;;14045:16:0;;;;:7;:16;;;;;;:21;;;;-1:-1:-1;;;;;14045:21:0;;;;;;;;14084:33;;14045:16;;;14084:33;;14045:16;;14084:33;13743:382;;:::o;18546:646::-;18639:22;18689:1;18664:22;18681:4;18664:16;:22::i;:::-;:26;;;;:::i;:::-;18701:18;18722:26;;;:17;:26;;;;;;18639:51;;-1:-1:-1;18764:28:0;;;18760:328;;-1:-1:-1;;;;;18831:18:0;;18809:19;18831:18;;;:12;:18;;;;;;;;:34;;;;;;;;;18882:30;;;;;;:44;;;18999:30;;:17;:30;;;;;:43;;;18760:328;-1:-1:-1;19106:26:0;;;;:17;:26;;;;;;;;19099:33;;;-1:-1:-1;;;;;19150:18:0;;;;;:12;:18;;;;;:34;;;;;;;19143:41;18546:646::o;19199:516::-;19307:10;:17;19282:22;;19307:21;;19327:1;;19307:21;:::i;:::-;19339:18;19360:24;;;:15;:24;;;;;;19418:10;:26;;19282:46;;-1:-1:-1;19360:24:0;;19282:46;;19418:26;;;;;;:::i;:::-;;;;;;;;;19396:48;;19482:11;19457:10;19468;19457:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;19562:28;;;:15;:28;;;;;;;:41;;;19656:24;;;;;19649:31;19691:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19270:445;;;19199:516;:::o;18148:221::-;18233:14;18250:20;18267:2;18250:16;:20::i;:::-;-1:-1:-1;;;;;18281:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;18326:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;18148:221:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:690:1:-;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;-1:-1:-1;;339:24:1;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:72;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:45;;;591:1;588;581:12;550:45;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;14:690;;;;;:::o;709:196::-;777:20;;-1:-1:-1;;;;;826:54:1;;816:65;;806:93;;895:1;892;885:12;806:93;709:196;;;:::o;910:186::-;969:6;1022:2;1010:9;1001:7;997:23;993:32;990:52;;;1038:1;1035;1028:12;990:52;1061:29;1080:9;1061:29;:::i;1101:260::-;1169:6;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1269:29;1288:9;1269:29;:::i;:::-;1259:39;;1317:38;1351:2;1340:9;1336:18;1317:38;:::i;:::-;1307:48;;1101:260;;;;;:::o;1366:328::-;1443:6;1451;1459;1512:2;1500:9;1491:7;1487:23;1483:32;1480:52;;;1528:1;1525;1518:12;1480:52;1551:29;1570:9;1551:29;:::i;:::-;1541:39;;1599:38;1633:2;1622:9;1618:18;1599:38;:::i;:::-;1589:48;;1684:2;1673:9;1669:18;1656:32;1646:42;;1366:328;;;;;:::o;1699:666::-;1794:6;1802;1810;1818;1871:3;1859:9;1850:7;1846:23;1842:33;1839:53;;;1888:1;1885;1878:12;1839:53;1911:29;1930:9;1911:29;:::i;:::-;1901:39;;1959:38;1993:2;1982:9;1978:18;1959:38;:::i;:::-;1949:48;;2044:2;2033:9;2029:18;2016:32;2006:42;;2099:2;2088:9;2084:18;2071:32;2126:18;2118:6;2115:30;2112:50;;;2158:1;2155;2148:12;2112:50;2181:22;;2234:4;2226:13;;2222:27;-1:-1:-1;2212:55:1;;2263:1;2260;2253:12;2212:55;2286:73;2351:7;2346:2;2333:16;2328:2;2324;2320:11;2286:73;:::i;:::-;2276:83;;;1699:666;;;;;;;:::o;2370:347::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2535:29;2554:9;2535:29;:::i;:::-;2525:39;;2614:2;2603:9;2599:18;2586:32;2661:5;2654:13;2647:21;2640:5;2637:32;2627:60;;2683:1;2680;2673:12;2627:60;2706:5;2696:15;;;2370:347;;;;;:::o;2722:254::-;2790:6;2798;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;2890:29;2909:9;2890:29;:::i;:::-;2880:39;2966:2;2951:18;;;;2938:32;;-1:-1:-1;;;2722:254:1:o;2981:245::-;3039:6;3092:2;3080:9;3071:7;3067:23;3063:32;3060:52;;;3108:1;3105;3098:12;3060:52;3147:9;3134:23;3166:30;3190:5;3166:30;:::i;3231:249::-;3300:6;3353:2;3341:9;3332:7;3328:23;3324:32;3321:52;;;3369:1;3366;3359:12;3321:52;3401:9;3395:16;3420:30;3444:5;3420:30;:::i;3485:659::-;3581:6;3589;3597;3605;3658:3;3646:9;3637:7;3633:23;3629:33;3626:53;;;3675:1;3672;3665:12;3626:53;3715:9;3702:23;3748:18;3740:6;3737:30;3734:50;;;3780:1;3777;3770:12;3734:50;3803:22;;3856:4;3848:13;;3844:27;-1:-1:-1;3834:55:1;;3885:1;3882;3875:12;3834:55;3908:75;3975:7;3970:2;3957:16;3950:4;3946:2;3942:13;3908:75;:::i;:::-;3898:85;4030:4;4015:20;;4002:34;;-1:-1:-1;4083:2:1;4068:18;;4055:32;;4134:2;4119:18;4106:32;;-1:-1:-1;3485:659:1;-1:-1:-1;;;;3485:659:1:o;4149:180::-;4208:6;4261:2;4249:9;4240:7;4236:23;4232:32;4229:52;;;4277:1;4274;4267:12;4229:52;-1:-1:-1;4300:23:1;;4149:180;-1:-1:-1;4149:180:1:o;4334:385::-;4420:6;4428;4436;4444;4497:3;4485:9;4476:7;4472:23;4468:33;4465:53;;;4514:1;4511;4504:12;4465:53;-1:-1:-1;;4537:23:1;;;4607:2;4592:18;;4579:32;;-1:-1:-1;4658:2:1;4643:18;;4630:32;;4709:2;4694:18;4681:32;;-1:-1:-1;4334:385:1;-1:-1:-1;4334:385:1:o;4724:316::-;4765:3;4803:5;4797:12;4830:6;4825:3;4818:19;4846:63;4902:6;4895:4;4890:3;4886:14;4879:4;4872:5;4868:16;4846:63;:::i;:::-;4954:2;4942:15;-1:-1:-1;;4938:88:1;4929:98;;;;5029:4;4925:109;;4724:316;-1:-1:-1;;4724:316:1:o;5045:185::-;5087:3;5125:5;5119:12;5140:52;5185:6;5180:3;5173:4;5166:5;5162:16;5140:52;:::i;:::-;5208:16;;;;;5045:185;-1:-1:-1;;5045:185:1:o;6561:1780::-;7076:3;7114:6;7108:13;7130:53;7176:6;7171:3;7164:4;7156:6;7152:17;7130:53;:::i;:::-;7246:13;;7205:16;;;;7268:57;7246:13;7205:16;7302:4;7290:17;;7268:57;:::i;:::-;7356:6;7350:13;7372:72;7435:8;7424;7417:5;7413:20;7406:4;7398:6;7394:17;7372:72;:::i;:::-;7526:13;;7470:20;;;;7466:35;;7548:57;7526:13;7466:35;7582:4;7570:17;;7548:57;:::i;:::-;7636:6;7630:13;7652:72;7715:8;7704;7697:5;7693:20;7686:4;7678:6;7674:17;7652:72;:::i;:::-;7806:13;;7750:20;;;;7746:35;;7828:57;7806:13;7746:35;7862:4;7850:17;;7828:57;:::i;:::-;7916:6;7910:13;7932:72;7995:8;7984;7977:5;7973:20;7966:4;7958:6;7954:17;7932:72;:::i;:::-;8086:13;;8030:20;;;;8026:35;;8108:57;8086:13;8026:35;8142:4;8130:17;;8108:57;:::i;:::-;8196:6;8190:13;8212:72;8275:8;8264;8257:5;8253:20;8246:4;8238:6;8234:17;8212:72;:::i;:::-;8304:20;;8300:35;;6561:1780;-1:-1:-1;;;;;;;;;;;6561:1780:1:o;8346:566::-;8553:3;8591:6;8585:13;8607:53;8653:6;8648:3;8641:4;8633:6;8629:17;8607:53;:::i;:::-;8723:13;;8682:16;;;;8745:57;8723:13;8682:16;8779:4;8767:17;;8745:57;:::i;:::-;8824:20;8853:21;;;-1:-1:-1;;8901:4:1;8890:16;;8346:566;-1:-1:-1;;8346:566:1:o;8917:614::-;9197:3;9235:6;9229:13;9251:53;9297:6;9292:3;9285:4;9277:6;9273:17;9251:53;:::i;:::-;9365:3;9326:16;;;9351:18;;;9394:13;;9416:65;9394:13;9468:1;9457:13;;9450:4;9438:17;;9416:65;:::i;:::-;9501:20;9523:1;9497:28;;8917:614;-1:-1:-1;;;;8917:614:1:o;9536:960::-;9965:3;10003:6;9997:13;10019:53;10065:6;10060:3;10053:4;10045:6;10041:17;10019:53;:::i;:::-;10103:6;10098:3;10094:16;10081:29;;10129:3;10155:2;10148:5;10141:17;10189:6;10183:13;10205:65;10261:8;10257:1;10250:5;10246:13;10239:4;10231:6;10227:17;10205:65;:::i;:::-;10333:1;10289:20;;10325:10;;;10318:22;10365:13;;10387:62;10365:13;10436:1;10428:10;;10421:4;10409:17;;10387:62;:::i;:::-;10469:17;10488:1;10465:25;;9536:960;-1:-1:-1;;;;;9536:960:1:o;11375:1712::-;12036:66;12031:3;12024:79;12006:3;12132:6;12126:13;12148:62;12203:6;12198:2;12193:3;12189:12;12182:4;12174:6;12170:17;12148:62;:::i;:::-;12274:66;12269:2;12229:16;;;12261:11;;;12254:87;12370:34;12365:2;12357:11;;12350:55;12434:34;12429:2;12421:11;;12414:55;12499:34;12493:3;12485:12;;12478:56;12564:34;12558:3;12550:12;;12543:56;12629:34;12623:3;12615:12;;12608:56;12694:34;12688:3;12680:12;;12673:56;12759:34;12753:3;12745:12;;12738:56;12824:66;12818:3;12810:12;;12803:88;12921:15;12915:3;12907:12;;12900:37;12953:128;12983:97;13009:70;13039:39;13073:3;13065:12;;13057:6;13039:39;:::i;:::-;5312:66;5300:79;;5404:2;5395:12;;5235:178;13009:70;13001:6;12983:97;:::i;:::-;5775:5;5763:18;;5806:1;5797:11;;5698:116;12953:128;12946:135;11375:1712;-1:-1:-1;;;;;;11375:1712:1:o;13092:2307::-;14200:66;14195:3;14188:79;14297:66;14292:2;14287:3;14283:12;14276:88;14394:66;14389:2;14384:3;14380:12;14373:88;14170:3;14490:6;14484:13;14506:60;14559:6;14554:2;14549:3;14545:12;14540:2;14532:6;14528:15;14506:60;:::i;:::-;14630:66;14625:2;14585:16;;;14617:11;;;14610:87;14727:66;14721:3;14713:12;;14706:88;14819:13;;14841:62;14819:13;14888:3;14880:12;;14875:2;14863:15;;14841:62;:::i;:::-;14969:66;14963:3;14922:17;;;;14955:12;;;14948:88;15066:66;15060:3;15052:12;;15045:88;15149:244;15179:213;15205:186;15235:155;15261:128;15291:97;15317:70;15347:39;15381:3;15373:12;;15365:6;15347:39;:::i;:::-;6358:66;6346:79;;6455:66;6450:2;6441:12;;6434:88;6547:2;6538:12;;6281:275;15317:70;15309:6;15291:97;:::i;:::-;5896:66;5884:79;;5993:66;5988:2;5979:12;;5972:88;6085:2;6076:12;;5819:275;15261:128;15253:6;15235:155;:::i;:::-;5495:66;5483:79;;5592:66;5587:2;5578:12;;5571:88;5684:2;5675:12;;5418:275;15179:213;6176:66;6164:79;;6268:1;6259:11;;6099:177;15149:244;15142:251;13092:2307;-1:-1:-1;;;;;;;;;13092:2307:1:o;15404:448::-;15666:31;15661:3;15654:44;15636:3;15727:6;15721:13;15743:62;15798:6;15793:2;15788:3;15784:12;15777:4;15769:6;15765:17;15743:62;:::i;:::-;15825:16;;;;15843:2;15821:25;;15404:448;-1:-1:-1;;15404:448:1:o;16088:511::-;16282:4;-1:-1:-1;;;;;16392:2:1;16384:6;16380:15;16369:9;16362:34;16444:2;16436:6;16432:15;16427:2;16416:9;16412:18;16405:43;;16484:6;16479:2;16468:9;16464:18;16457:34;16527:3;16522:2;16511:9;16507:18;16500:31;16548:45;16588:3;16577:9;16573:19;16565:6;16548:45;:::i;16796:219::-;16945:2;16934:9;16927:21;16908:4;16965:44;17005:2;16994:9;16990:18;16982:6;16965:44;:::i;27216:128::-;27256:3;27287:1;27283:6;27280:1;27277:13;27274:39;;;27293:18;;:::i;:::-;-1:-1:-1;27329:9:1;;27216:128::o;27349:120::-;27389:1;27415;27405:35;;27420:18;;:::i;:::-;-1:-1:-1;27454:9:1;;27349:120::o;27474:228::-;27514:7;27640:1;27572:66;27568:74;27565:1;27562:81;27557:1;27550:9;27543:17;27539:105;27536:131;;;27647:18;;:::i;:::-;-1:-1:-1;27687:9:1;;27474:228::o;27707:125::-;27747:4;27775:1;27772;27769:8;27766:34;;;27780:18;;:::i;:::-;-1:-1:-1;27817:9:1;;27707:125::o;27837:258::-;27909:1;27919:113;27933:6;27930:1;27927:13;27919:113;;;28009:11;;;28003:18;27990:11;;;27983:39;27955:2;27948:10;27919:113;;;28050:6;28047:1;28044:13;28041:48;;;-1:-1:-1;;28085:1:1;28067:16;;28060:27;27837:258::o;28100:437::-;28179:1;28175:12;;;;28222;;;28243:61;;28297:4;28289:6;28285:17;28275:27;;28243:61;28350:2;28342:6;28339:14;28319:18;28316:38;28313:218;;;28387:77;28384:1;28377:88;28488:4;28485:1;28478:15;28516:4;28513:1;28506:15;28313:218;;28100:437;;;:::o;28542:195::-;28581:3;28612:66;28605:5;28602:77;28599:103;;;28682:18;;:::i;:::-;-1:-1:-1;28729:1:1;28718:13;;28542:195::o;28742:112::-;28774:1;28800;28790:35;;28805:18;;:::i;:::-;-1:-1:-1;28839:9:1;;28742:112::o;28859:184::-;28911:77;28908:1;28901:88;29008:4;29005:1;28998:15;29032:4;29029:1;29022:15;29048:184;29100:77;29097:1;29090:88;29197:4;29194:1;29187:15;29221:4;29218:1;29211:15;29237:184;29289:77;29286:1;29279:88;29386:4;29383:1;29376:15;29410:4;29407:1;29400:15;29426:184;29478:77;29475:1;29468:88;29575:4;29572:1;29565:15;29599:4;29596:1;29589:15;29615:184;29667:77;29664:1;29657:88;29764:4;29761:1;29754:15;29788:4;29785:1;29778:15;29804:177;29889:66;29882:5;29878:78;29871:5;29868:89;29858:117;;29971:1;29968;29961:12

Swarm Source

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