ETH Price: $3,385.35 (+5.24%)

Contract

0xfEfF733A6ec650E9e7928FE5782178938CFb29Dd
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...156313332022-09-28 10:46:47844 days ago1664362007IN
0xfEfF733A...38CFb29Dd
0 ETH0.0010669210
Transfer From144924362022-03-31 6:53:101026 days ago1648709590IN
0xfEfF733A...38CFb29Dd
0 ETH0.0039105337.66428929
Set Approval For...133471012021-10-03 15:41:301204 days ago1633275690IN
0xfEfF733A...38CFb29Dd
0 ETH0.0014965856.89803279
Set Approval For...133471002021-10-03 15:41:141204 days ago1633275674IN
0xfEfF733A...38CFb29Dd
0 ETH0.0024750453.56889271
Bid133122042021-09-28 4:39:391210 days ago1632803979IN
0xfEfF733A...38CFb29Dd
0.1001 ETH0.02266089101.67218228
Bid131455932021-09-02 9:58:571235 days ago1630576737IN
0xfEfF733A...38CFb29Dd
0.0501 ETH0.0144413882.56704729
Creat Art131193122021-08-29 8:27:591240 days ago1630225679IN
0xfEfF733A...38CFb29Dd
0 ETH0.0128839241.6295304
Bid129334362021-07-31 12:57:341268 days ago1627736254IN
0xfEfF733A...38CFb29Dd
0.1501 ETH0.0007415122
Bid129334282021-07-31 12:56:051268 days ago1627736165IN
0xfEfF733A...38CFb29Dd
0.1501 ETH0.00385422
Bid129249342021-07-30 4:39:191270 days ago1627619959IN
0xfEfF733A...38CFb29Dd
0.1001 ETH0.0051916127
Bid129230402021-07-29 21:18:131270 days ago1627593493IN
0xfEfF733A...38CFb29Dd
0.0501 ETH0.0008763326
Bid129230362021-07-29 21:17:161270 days ago1627593436IN
0xfEfF733A...38CFb29Dd
0.0501 ETH0.0044617326
Creat Art129139892021-07-28 10:48:051271 days ago1627469285IN
0xfEfF733A...38CFb29Dd
0 ETH0.0083562327
Bid127234302021-06-28 15:56:121301 days ago1624895772IN
0xfEfF733A...38CFb29Dd
0.0501 ETH0.0047064337
Creat Art127227432021-06-28 13:17:551301 days ago1624886275IN
0xfEfF733A...38CFb29Dd
0 ETH0.0061312620
Change Art Data127224812021-06-28 12:15:341301 days ago1624882534IN
0xfEfF733A...38CFb29Dd
0 ETH0.000147316.001
Set Default Bid ...127222802021-06-28 11:34:451301 days ago1624880085IN
0xfEfF733A...38CFb29Dd
0 ETH0.0003384612.1
Creat Art127171902021-06-27 16:42:071302 days ago1624812127IN
0xfEfF733A...38CFb29Dd
0 ETH0.004110813.2825
Creat Art125347192021-05-30 8:47:571331 days ago1622364477IN
0xfEfF733A...38CFb29Dd
0 ETH0.0064378221.00000145
Creat Art125343952021-05-30 7:35:531331 days ago1622360153IN
0xfEfF733A...38CFb29Dd
0 ETH0.0055509217.3
Bid125291202021-05-29 11:58:481331 days ago1622289528IN
0xfEfF733A...38CFb29Dd
0.55 ETH0.0012424227.32232999
Bid125291192021-05-29 11:58:371331 days ago1622289517IN
0xfEfF733A...38CFb29Dd
1.9 ETH0.003693421.06700936
Bid125291192021-05-29 11:58:371331 days ago1622289517IN
0xfEfF733A...38CFb29Dd
1.9 ETH0.003693421.06700963
Bid125291122021-05-29 11:57:001331 days ago1622289420IN
0xfEfF733A...38CFb29Dd
0.55 ETH0.0012424327.32252999
Bid125291102021-05-29 11:56:171331 days ago1622289377IN
0xfEfF733A...38CFb29Dd
0.55 ETH0.0012424527.32293
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
133122042021-09-28 4:39:391210 days ago1632803979
0xfEfF733A...38CFb29Dd
0.065 ETH
133122042021-09-28 4:39:391210 days ago1632803979
0xfEfF733A...38CFb29Dd
0.001 ETH
133122042021-09-28 4:39:391210 days ago1632803979
0xfEfF733A...38CFb29Dd
0.009 ETH
133122042021-09-28 4:39:391210 days ago1632803979
0xfEfF733A...38CFb29Dd
0.025 ETH
133122042021-09-28 4:39:391210 days ago1632803979
0xfEfF733A...38CFb29Dd
0.0001 ETH
131455932021-09-02 9:58:571235 days ago1630576737
0xfEfF733A...38CFb29Dd
0.05 ETH
131455932021-09-02 9:58:571235 days ago1630576737
0xfEfF733A...38CFb29Dd
0.0001 ETH
129334282021-07-31 12:56:051268 days ago1627736165
0xfEfF733A...38CFb29Dd
0.115 ETH
129334282021-07-31 12:56:051268 days ago1627736165
0xfEfF733A...38CFb29Dd
0.001 ETH
129334282021-07-31 12:56:051268 days ago1627736165
0xfEfF733A...38CFb29Dd
0.009 ETH
129334282021-07-31 12:56:051268 days ago1627736165
0xfEfF733A...38CFb29Dd
0.025 ETH
129334282021-07-31 12:56:051268 days ago1627736165
0xfEfF733A...38CFb29Dd
0.0001 ETH
129249342021-07-30 4:39:191270 days ago1627619959
0xfEfF733A...38CFb29Dd
0.065 ETH
129249342021-07-30 4:39:191270 days ago1627619959
0xfEfF733A...38CFb29Dd
0.001 ETH
129249342021-07-30 4:39:191270 days ago1627619959
0xfEfF733A...38CFb29Dd
0.009 ETH
129249342021-07-30 4:39:191270 days ago1627619959
0xfEfF733A...38CFb29Dd
0.025 ETH
129249342021-07-30 4:39:191270 days ago1627619959
0xfEfF733A...38CFb29Dd
0.0001 ETH
129230362021-07-29 21:17:161270 days ago1627593436
0xfEfF733A...38CFb29Dd
0.05 ETH
129230362021-07-29 21:17:161270 days ago1627593436
0xfEfF733A...38CFb29Dd
0.0001 ETH
127234302021-06-28 15:56:121301 days ago1624895772
0xfEfF733A...38CFb29Dd
0.05 ETH
127234302021-06-28 15:56:121301 days ago1624895772
0xfEfF733A...38CFb29Dd
0.0001 ETH
125291192021-05-29 11:58:371331 days ago1622289517
0xfEfF733A...38CFb29Dd
0.62315 ETH
125291192021-05-29 11:58:371331 days ago1622289517
0xfEfF733A...38CFb29Dd
0.00121 ETH
125291192021-05-29 11:58:371331 days ago1622289517
0xfEfF733A...38CFb29Dd
0.01089 ETH
125291192021-05-29 11:58:371331 days ago1622289517
0xfEfF733A...38CFb29Dd
0.03025 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x68E09411...C849F5BfD
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Artist

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-23
*/

// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.5.16;

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

pragma solidity ^0.5.16;

contract 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) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);
    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

pragma solidity ^0.5.16;

contract IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

pragma solidity ^0.5.16;

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;
        return c;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

pragma solidity ^0.5.16;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

pragma solidity ^0.5.16;

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

pragma solidity ^0.5.16;

contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
    mapping (uint256 => address) private _tokenOwner;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => uint256) private _ownedTokensCount;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    constructor () public {
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));
        _transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

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

    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }

}

pragma solidity ^0.5.16;

contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) public view returns (uint256);
}

pragma solidity ^0.5.16;

contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {

    mapping(address => uint256[]) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;
    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    constructor () public {
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner));
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply());
        return _allTokens[index];
    }

    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);
        _removeTokenFromOwnerEnumeration(from, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
    }

    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
        _addTokenToAllTokensEnumeration(tokenId);
    }

    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        _ownedTokens[from].length--;
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}

pragma solidity ^0.5.16;

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


pragma solidity ^0.5.16;

contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {

    string private _name;
    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

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

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

}

pragma solidity ^0.5.16;

contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
    }
}
pragma solidity ^0.5.16;

contract IRadicalNFT is IERC165 {
    function round(uint256 _tokenid) external view returns (uint256 _round);
    function price(uint256 _round) public returns (uint256 _price);
    function getBidStartTime(uint256 tokenid)external view returns(uint64);
    function bid(address inviterAddress, uint256 tokenid) external payable;
}
contract RadicalNFT is ERC165,IRadicalNFT {

    bytes4 private constant _INTERFACE_ID_RADICALNFT = 0x9203c74e;
 //       bytes4(keccak256('round(uint256)')) ^
 //       bytes4(keccak256('price(uint256)')) ^
 //       bytes4(keccak256('getBidStartTime(uint256)')) ^
 //       bytes4(keccak256('bid(address,uint256)'));

    constructor () public {
        _registerInterface(_INTERFACE_ID_RADICALNFT);
    }
}

contract Ownable {
  address public owner;

    constructor() public {
    owner = msg.sender;
  }


  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  function transferOwnership(address newOwner) onlyOwner public {
    if (newOwner != address(0)) {
      owner = newOwner;
    }
  }

}

contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor ()public {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
contract ArtistBase is Ownable,ERC721Full,RadicalNFT,ReentrancyGuard {
    
    using SafeMath for uint256;
    
    bool public paused = false;
    address public cfoAddress;
    address public cooAddress;
    
    address public bonusPoolAddress;
    address public devPoolAddress;  
    uint256[] private priceList;



    /// @dev The main art struct. 
    struct Art {
        uint256 id;
        uint64 bidStartTime;
        uint64 round;
        //bid issue privileges
        bool bid;
        string ipfs;
    }


    uint256 public lastBidTime=0;
    Art[]  arts;

    //current id 
    uint256 curid;
    
    uint256 public bidInterval;
    uint256 public defaultBidTokenId;
    
    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress 
        );
        _;
    }
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenPaused {
        require(paused);
        _;
    }


    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCLevel whenPaused {
        paused = false;
    }

    function creatArt(
        bool bidflag,
        string calldata ipfsaddr,
        uint64 startTime

    )
        external
        whenNotPaused
        returns (uint256)
    {
         require(msg.sender == owner, "ERR_NOT_OWNER");


        if(lastBidTime==0){
            bidflag=false;
        }else if((now-lastBidTime)<bidInterval){
            bidflag=false;
        }else{
            if(bidflag){
                lastBidTime=now;
            }
        }

        Art memory _art = Art({
            id: curid,
            bidStartTime: startTime,
            round: 0,
            bid: bidflag,
            ipfs: ipfsaddr

        });
        curid = arts.push(_art) ;

        require(curid == uint256(uint32(curid)));

        _mint(owner, curid-1);

        return curid;
    }
    
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId));
        return arts[tokenId].ipfs;
    }

    function checkArtBidable(uint256 tokenId) external view returns (bool) {
        require(_exists(tokenId));
        return arts[tokenId].bid;
    }

    function openBidTokenAuthority() 
        external
        onlyCLevel
        {
            lastBidTime=now - bidInterval;
        }

    function closeBidTokenAuthority() 
        external
        onlyCLevel
        {
            lastBidTime=0;
        }

    function setBidInterval(uint256 interval) 
        external
        onlyCLevel
        {
            bidInterval=interval;
        }
        

    function changeArtData(uint256 tokenid,string calldata ipfs) 
        external
        onlyCLevel
        {
            require(tokenid<curid, "ERR_ARTID_TOOBIG");
            arts[tokenid].ipfs=ipfs;
        }
    function editArtData(uint256 tokenid,string calldata ipfs) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_ARTID_TOOBIG");
            require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
            arts[tokenid].ipfs=ipfs;
        }

    function checkBidable() view
        external
        returns (bool){
        
            if(lastBidTime==0){
                return false;
            }else if((now-lastBidTime)<bidInterval){
                return false;
            }else{
                return true;
            }
        
        }
    function getLatestTokenID() view
        external
        returns (uint256){
            return curid;
        }
        
    function setBidStartTime(uint256 tokenid,uint64 startTime) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
            require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
            arts[tokenid].bidStartTime=startTime;
        }
    function getBidStartTime(uint256 tokenid) view
        external
        returns(uint64)
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
            return arts[tokenid].bidStartTime;
        }
    function setDefaultBidId(uint256 tokenid) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");

            defaultBidTokenId=tokenid;
        }
        
    function round(uint256 tokenid) view 
        external
        returns (uint256){
            return arts[tokenid].round;
        }

    event LOG_AUCTION(
        uint256  artid,
        uint256  lastPrice,
        uint256  curPrice,
        uint256  bid,
        address  lastOwner,
        address  buyer,
        address  inviterAddress
    );
    //bid token address
    IERC20 public bidtoken;
    function () external
    whenNotPaused
     payable {
        _bid(devPoolAddress,defaultBidTokenId);
         
    }
   
      function bid(address inviterAddress, uint256 artid) payable
    whenNotPaused
     public {
        _bid(inviterAddress,artid); 
     }
     
     function price(uint256 _round) public
     returns (uint256)
     {
         if(_round>priceList.length){
             uint256 lastValue=priceList[priceList.length-1];
             for(uint256 i=priceList.length;i<_round;i++){
                 lastValue=lastValue.mul(11).div(10);
                 priceList.push(lastValue);
             }
             return lastValue;
         }
         return priceList[_round-1];
     }     
     
     function initRoundPrice() internal
     returns (uint256)
     {
         uint256 lastValue=0;
         for(uint256 i=1;i<12;i++){
            if(i<11){
                lastValue=i.mul(0.05 ether);
            }else{
                lastValue=lastValue.mul(11).div(10);
            }
            priceList.push(lastValue);
         }
     }
    
    function _bid(address inviterAddress, uint256 artid) nonReentrant internal
     {
         require(artid<curid, "ERR_ARTID_TOOBIG");  
         address lastOwner=ownerOf(artid);
         require(lastOwner!=msg.sender, "ERR_CAN_NOT_PURCHASE_OWN_ART");       
         require(arts[artid].bidStartTime<now,"ERR_BID_NOT_START_YET");
         uint256 r=arts[artid].round;
         
         if(r==0){
             uint256 payprice=0.05 ether;
             require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
              msg.sender.send(msg.value.sub(payprice));
              address(uint160(owner)).send(payprice);
              uint256 x=0;
              if(arts[artid].bid){
                  x=50 ether;
                  if(bidtoken.balanceOf(cfoAddress)>=x){
                      bidtoken.transferFrom(cfoAddress,msg.sender,x);                  
                  }else{
                      x=0;
                  }
             }
             arts[artid].round++;
            _transferFrom(lastOwner, msg.sender, artid);

            emit LOG_AUCTION(artid, payprice,payprice,x,lastOwner,msg.sender,inviterAddress );
            return;
         }
        uint256 curprice=price(r);
        uint256 payprice=price(r+1);
        require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
        
         //refund extra money
         msg.sender.send(msg.value-payprice);
         
         uint256 smoney=payprice-curprice;
         
         //we don't check any send process,only 2300 gas provided
         address(uint160(owner)).send(smoney.mul(5).div(10));

         address(uint160(bonusPoolAddress)).send(smoney.mul(18).div(100));
        
         address(uint160(inviterAddress)).send(smoney.mul(2).div(100));
        
         address(uint160(lastOwner)).send(smoney.mul(30).div(100).add(curprice));

         uint256 x=0;
         if(arts[artid].bid){
             //r is last round
            x=r<10?50 ether:((r+1).mul(5 ether));
            if(bidtoken.balanceOf(cfoAddress)>=x){
                bidtoken.transferFrom(cfoAddress,msg.sender,x);
            }else{
                x=0;
            }
         }

         arts[artid].round++;
    
          _transferFrom(lastOwner, msg.sender, artid);

        emit LOG_AUCTION(artid, curprice,payprice,x,lastOwner,msg.sender,inviterAddress );

    }

}

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}
contract Artist is ArtistBase{

    constructor(string memory _name,string memory _symbol,address artistaddr,
    address auditor,address _bid,address _bonusPool,address _devPool) ERC721Full(_name, _symbol) public {
        bonusPoolAddress=_bonusPool;
        devPoolAddress=_devPool;
        bidtoken=IERC20(_bid);
        curid=0;
        owner=artistaddr;
        cfoAddress=msg.sender;
        cooAddress=auditor;
        bidInterval=30 days;
        defaultBidTokenId=0;
        initRoundPrice();
    }
    function setCOO(address _newCOO) external onlyCLevel {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }
    function rescueETH(address _address) external onlyCLevel {
        address(uint160(_address)).transfer(address(this).balance);
  }
 
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"artistaddr","type":"address"},{"internalType":"address","name":"auditor","type":"address"},{"internalType":"address","name":"_bid","type":"address"},{"internalType":"address","name":"_bonusPool","type":"address"},{"internalType":"address","name":"_devPool","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"artid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"curPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bid","type":"uint256"},{"indexed":false,"internalType":"address","name":"lastOwner","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"inviterAddress","type":"address"}],"name":"LOG_AUCTION","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"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"inviterAddress","type":"address"},{"internalType":"uint256","name":"artid","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"bidInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bidtoken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonusPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"ipfs","type":"string"}],"name":"changeArtData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkArtBidable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"checkBidable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeBidTokenAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"bidflag","type":"bool"},{"internalType":"string","name":"ipfsaddr","type":"string"},{"internalType":"uint64","name":"startTime","type":"uint64"}],"name":"creatArt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"defaultBidTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"ipfs","type":"string"}],"name":"editArtData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"getBidStartTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLatestTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastBidTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"openBidTokenAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_round","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"rescueETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBidInterval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"uint64","name":"startTime","type":"uint64"}],"name":"setBidStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"setDefaultBidId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063642ab4b11161014f578063a8d48680116100c1578063cf59e7051161007a578063cf59e70514611190578063d9a4cda7146111bb578063da95f1d41461121e578063e985e9c51461124d578063f0588e7c146112d6578063f2fde38b146112ed5761027d565b8063a8d4868014610ef6578063b046229d14610f31578063b047fb5014610f5c578063b0b7d30c14610fb3578063b88d4fde14610fca578063c87b56dd146110dc5761027d565b806384efd6751161011357806384efd67514610ca05780638a9bfa0314610cf75780638da5cb5b14610d8757806395d89b4114610dde578063a22cb46514610e6e578063a622fc7314610ecb5761027d565b8063642ab4b114610b4f5780636604a6a314610b7a57806370a0823114610bd157806381c0f3da14610c365780638456cb5914610c895761027d565b806326a49e37116101f357806346834cca116101ac57806346834cca146109135780634f6ccce7146109cd57806359d667a514610a1c5780635a4d8e5414610a6a5780635c975abb14610aa55780636352211e14610ad45761027d565b806326a49e37146107235780632ba73c15146107725780632f745c59146107c357806334d5f37b146108325780633f4ba83a1461088157806342842e0e146108985761027d565b8063095ea7b311610245578063095ea7b3146104ec5780630d64ca031461054757806318160ddd14610596578063189db8c6146105c157806323b872dd1461061857806325c5edf4146106935761027d565b806301ffc9a7146102c757806304824e70146103395780630519ce791461038a57806306fdde03146103e1578063081812fc14610471575b600d60009054906101000a900460ff161561029757600080fd5b6102c5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660165461133e565b005b3480156102d357600080fd5b5061031f600480360360208110156102ea57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506121a6565b604051808215151515815260200191505060405180910390f35b34801561034557600080fd5b506103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220e565b005b34801561039657600080fd5b5061039f6122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ed57600080fd5b506103f66122d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043657808201518184015260208101905061041b565b50505050905090810190601f1680156104635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b810190808035906020019092919050505061237a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123c9565b005b34801561055357600080fd5b506105946004803603604081101561056a57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061250a565b005b3480156105a257600080fd5b506105ab6126d4565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d66126e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062457600080fd5b506106916004803603606081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612707565b005b34801561069f57600080fd5b50610721600480360360408110156106b657600080fd5b8101908080359060200190929190803590602001906401000000008111156106dd57600080fd5b8201836020820111156106ef57600080fd5b8035906020019184600183028401116401000000008311171561071157600080fd5b909192939192939050505061272a565b005b34801561072f57600080fd5b5061075c6004803603602081101561074657600080fd5b81019080803590602001909291905050506128de565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b506107c16004803603602081101561079557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b005b3480156107cf57600080fd5b5061081c600480360360408110156107e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a8b565b6040518082815260200191505060405180910390f35b34801561083e57600080fd5b5061086b6004803603602081101561085557600080fd5b8101908080359060200190929190505050612afe565b6040518082815260200191505060405180910390f35b34801561088d57600080fd5b50610896612b44565b005b3480156108a457600080fd5b50610911600480360360608110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bd4565b005b34801561091f57600080fd5b506109b76004803603606081101561093657600080fd5b810190808035151590602001909291908035906020019064010000000081111561095f57600080fd5b82018360208201111561097157600080fd5b8035906020019184600183028401116401000000008311171561099357600080fd5b9091929391929390803567ffffffffffffffff169060200190929190505050612bf4565b6040518082815260200191505060405180910390f35b3480156109d957600080fd5b50610a06600480360360208110156109f057600080fd5b8101908080359060200190929190505050612eca565b6040518082815260200191505060405180910390f35b610a6860048036036040811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612efe565b005b348015610a7657600080fd5b50610aa360048036036020811015610a8d57600080fd5b8101908080359060200190929190505050612f26565b005b348015610ab157600080fd5b50610aba612f8a565b604051808215151515815260200191505060405180910390f35b348015610ae057600080fd5b50610b0d60048036036020811015610af757600080fd5b8101908080359060200190929190505050612f9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64613019565b6040518082815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f61301f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdd57600080fd5b50610c2060048036036020811015610bf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613045565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c6f60048036036020811015610c5957600080fd5b81019080803590602001909291905050506130c7565b604051808215151515815260200191505060405180910390f35b348015610c9557600080fd5b50610c9e61310e565b005b348015610cac57600080fd5b50610cb561319f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0357600080fd5b50610d8560048036036040811015610d1a57600080fd5b810190808035906020019092919080359060200190640100000000811115610d4157600080fd5b820183602082011115610d5357600080fd5b80359060200191846001830284011164010000000083111715610d7557600080fd5b90919293919293905050506131c5565b005b348015610d9357600080fd5b50610d9c6132c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dea57600080fd5b50610df36132ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e33578082015181840152602081019050610e18565b50505050905090810190601f168015610e605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7a57600080fd5b50610ec960048036036040811015610e9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613390565b005b348015610ed757600080fd5b50610ee06134ca565b6040518082815260200191505060405180910390f35b348015610f0257600080fd5b50610f2f60048036036020811015610f1957600080fd5b81019080803590602001909291905050506134d0565b005b348015610f3d57600080fd5b50610f466135aa565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b50610f716135b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc86135da565b005b348015610fd657600080fd5b506110da60048036036080811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561105457600080fd5b82018360208201111561106657600080fd5b8035906020019184600183028401116401000000008311171561108857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613641565b005b3480156110e857600080fd5b50611115600480360360208110156110ff57600080fd5b8101908080359060200190929190505050613667565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561115557808201518184015260208101905061113a565b50505050905090810190601f1680156111825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561119c57600080fd5b506111a5613739565b6040518082815260200191505060405180910390f35b3480156111c757600080fd5b506111f4600480360360208110156111de57600080fd5b810190808035906020019092919050505061373f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b506112336137f2565b604051808215151515815260200191505060405180910390f35b34801561125957600080fd5b506112bc6004803603604081101561127057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613826565b604051808215151515815260200191505060405180910390f35b3480156112e257600080fd5b506112eb6138ba565b005b3480156112f957600080fd5b5061133c6004803603602081101561131057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061391e565b005b6002600c5414156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600c819055506014548110611436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b600061144182612f9d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552525f43414e5f4e4f545f50555243484153455f4f574e5f4152540000000081525060200191505060405180910390fd5b42601383815481106114f357fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1610611596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552525f4249445f4e4f545f53544152545f594554000000000000000000000081525060200191505060405180910390fd5b6000601383815481106115a557fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000811415611aed57600066b1a2bc2ec50000905080341015611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61168f83346139ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505060008090506013858154811061171357fe5b906000526020600020906003020160010160109054906101000a900460ff161561198b576802b5e3af16b1880000905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561180557600080fd5b505afa158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b81019080805190602001909291905050501061198557601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d602081101561196e57600080fd5b81019080805190602001909291905050505061198a565b600090505b5b6013858154811061199857fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506119f9843387613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf664428583848488338c604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505061219a565b6000611af8826128de565b90506000611b08600184016128de565b905080341015611b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f1935050505050600082820390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c21600a611c13600586613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c9f6064611c91601286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508673ffffffffffffffffffffffffffffffffffffffff166108fc611cfb6064611ced600286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508473ffffffffffffffffffffffffffffffffffffffff166108fc611d6985611d5b6064611d4d601e88613a3390919063ffffffff16565b613a6d90919063ffffffff16565b613a9390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600080905060138781548110611d9657fe5b906000526020600020906003020160010160109054906101000a900460ff161561203a57600a8510611de557611de0674563918244f4000060018701613a3390919063ffffffff16565b611df0565b6802b5e3af16b18800005b905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d6020811015611ede57600080fd5b81019080805190602001909291905050501061203457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ff357600080fd5b505af1158015612007573d6000803e3d6000fd5b505050506040513d602081101561201d57600080fd5b810190808051906020019092919050505050612039565b600090505b5b6013878154811061204757fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506120a8863389613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf66442878585848a338e604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505050505b6001600c819055505050565b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461226857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156122ae573d6000803e3d6000fd5b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b600061238582613ab2565b61238e57600080fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006123d482612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061244f575061244e8133613826565b5b61245857600080fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461256357600080fd5b60145482106125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b42601383815481106125e857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161161268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b806013838154811061269957fe5b906000526020600020906003020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127113382613b24565b61271a57600080fd5b612725838383613a0f565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461278357600080fd5b60145483106127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b426013848154811061280857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16116128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106128ba57fe5b906000526020600020906003020160020191906128d892919061453b565b50505050565b600060118054905082111561299057600060116001601180549050038154811061290457fe5b90600052602060002001549050600060118054905090505b838110156129865761294b600a61293d600b85613a3390919063ffffffff16565b613a6d90919063ffffffff16565b91506011829080600181540180825580915050906001820390600052602060002001600090919290919091505550808060010191505061291c565b50809150506129ae565b601160018303815481106129a057fe5b906000526020600020015490505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a0d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a4757600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a9683613045565b8210612aa157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612aeb57fe5b9060005260206000200154905092915050565b600060138281548110612b0d57fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b9e57600080fd5b600d60009054906101000a900460ff16612bb757600080fd5b6000600d60006101000a81548160ff021916908315150217905550565b612bef83838360405180602001604052806000815250613641565b505050565b6000600d60009054906101000a900460ff1615612c1057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552525f4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b60006012541415612ce65760009450612d0d565b60155460125442031015612cfd5760009450612d0c565b8415612d0b57426012819055505b5b5b612d156145bb565b6040518060a0016040528060145481526020018467ffffffffffffffff168152602001600067ffffffffffffffff168152602001871515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050601381908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548160ff0219169083151502179055506080820151816002019080519060200190612e6d929190614600565b50505060148190555060145463ffffffff1660145414612e8c57600080fd5b612ebc6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160145403613bb9565b601454915050949350505050565b6000612ed46126d4565b8210612edf57600080fd5b60088281548110612eec57fe5b90600052602060002001549050919050565b600d60009054906101000a900460ff1615612f1857600080fd5b612f22828261133e565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f8057600080fd5b8060158190555050565b600d60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561301057600080fd5b80915050919050565b60125481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561308057600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006130d282613ab2565b6130db57600080fd5b601382815481106130e857fe5b906000526020600020906003020160010160109054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461316857600080fd5b600d60009054906101000a900460ff161561318257600080fd5b6001600d60006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461321f57600080fd5b6014548310613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106132a557fe5b906000526020600020906003020160020191906132c392919061453b565b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133865780601f1061335b57610100808354040283529160200191613386565b820191906000526020600020905b81548152906001019060200180831161336957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c957600080fd5b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461352957600080fd5b60145481106135a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b8060168190555050565b6000601454905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6015544203601281905550565b61364c848484612707565b61365884848484613bda565b61366157600080fd5b50505050565b606061367282613ab2565b61367b57600080fd5b6013828154811061368857fe5b90600052602060002090600302016002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561372d5780601f106137025761010080835404028352916020019161372d565b820191906000526020600020905b81548152906001019060200180831161371057829003601f168201915b50505050509050919050565b60155481565b600060145482106137b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b601382815481106137c557fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff169050919050565b60008060125414156138075760009050613823565b6015546012544203101561381e5760009050613823565b600190505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461391457600080fd5b6000601281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461397757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139ec57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000828211156139fe57600080fd5b600082840390508091505092915050565b613a1a838383613dc3565b613a248382614024565b613a2e82826141c2565b505050565b600080831415613a465760009050613a67565b6000828402905082848281613a5757fe5b0414613a6257600080fd5b809150505b92915050565b6000808211613a7b57600080fd5b6000828481613a8657fe5b0490508091505092915050565b600080828401905083811015613aa857600080fd5b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600080613b3083612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613b9f57508373ffffffffffffffffffffffffffffffffffffffff16613b878461237a565b73ffffffffffffffffffffffffffffffffffffffff16145b80613bb05750613baf8185613826565b5b91505092915050565b613bc38282614289565b613bcd82826141c2565b613bd68161441e565b5050565b6000613bfb8473ffffffffffffffffffffffffffffffffffffffff1661446a565b613c085760019050613dbb565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ce3578082015181840152602081019050613cc8565b50505050905090810190601f168015613d105780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d3257600080fd5b505af1158015613d46573d6000803e3d6000fd5b505050506040513d6020811015613d5c57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16613de382612f9d565b73ffffffffffffffffffffffffffffffffffffffff1614613e0357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e3d57600080fd5b613e468161447d565b613e996001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ef90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2f6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061407c6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506139ef90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114614169576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106140e957fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061414157fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036141bb9190614680565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142c357600080fd5b6142cc81613ab2565b156142d657600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146145385760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061457c57803560ff19168380011785556145aa565b828001600101855582156145aa579182015b828111156145a957823582559160200191906001019061458e565b5b5090506145b791906146ac565b5090565b6040518060a0016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061464157805160ff191683800117855561466f565b8280016001018555821561466f579182015b8281111561466e578251825591602001919060010190614653565b5b50905061467c91906146ac565b5090565b8154818355818111156146a7578183600052602060002091820191016146a691906146ac565b5b505050565b6146ce91905b808211156146ca5760008160009055506001016146b2565b5090565b9056fea265627a7a7231582012f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a64736f6c63430005100032

Deployed Bytecode Sourcemap

23324:807:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;19395:38;19400:14;;;;;;;;;;;19415:17;;19395:4;:38::i;:::-;23324:807;2806:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2806:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2806:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23993:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23993:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23993:132:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14497:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14497:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11002:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11002:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11002:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4381:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4381:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4381:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4074:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4074:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4074:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:302;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18159:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18159:302:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8148:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8148:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19301:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19301:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4923:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4923:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4923:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17410:287;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17410:287:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17410:287:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17410:287:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17410:287:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17410:287:0;;;;;;;;;;;;:::i;:::-;;19618:437;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19618:437:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19618:437:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23852:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23852:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23852:135:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7955:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7955:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7955:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18909:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18909:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18909:135:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15510:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15510:81:0;;;:::i;:::-;;5113:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5113:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5113:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15599:828;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15599:828:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15599:828:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;15599:828:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15599:828:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15599:828:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8252:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8252:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8252:151:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19465:139;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19465:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17033:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17033:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17033:137:0;;;;;;;;;;;;;;;;;:::i;:::-;;14464:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14464:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3885:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3885:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3885:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14895:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14895:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14567:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14567:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3724:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3724:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3724:153:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16600:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16600:150:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16600:150:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15419:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15419:83:0;;;:::i;:::-;;14605:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14605:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17188:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17188:216:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17188:216:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17188:216:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17188:216:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17188:216:0;;;;;;;;;;;;:::i;:::-;;12209:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12209:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11095:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11095:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11095:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4543:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4543:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4543:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15028:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15028:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18691:202;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18691:202:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18691:202:0;;;;;;;;;;;;;;;;;:::i;:::-;;18027:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18027:116:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14529:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14529:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16758:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16758:137:0;;;:::i;:::-;;5255:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5255:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;5255:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5255:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5255:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5255:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5255:214:0;;;;;;;;;;;;;;;:::i;:::-;;16439:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16439:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16439:153:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16439:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14995:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14995:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18467:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18467:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18467:218:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17705:316;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17705:316:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4768:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4768:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4768:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16903:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16903:122:0;;;:::i;:::-;;12374:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12374:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12374:135:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;20438:2382;13393:1;13996:7;;:19;;13988:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13393:1;14129:7;:18;;;;20545:5;;20539;:11;20531:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20585:17;20603:14;20611:5;20603:7;:14::i;:::-;20585:32;;20648:10;20637:21;;:9;:21;;;;20629:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20743:3;20718:4;20723:5;20718:11;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:28;;;20710:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20783:9;20793:4;20798:5;20793:11;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;20783:27;;;;20839:1;20836;:4;20833:789;;;20857:16;20874:10;20857:27;;20919:8;20908:9;:19;;20900:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20969:10;:15;;:40;20985:23;20999:8;20985:9;:13;;:23;;;;:::i;:::-;20969:40;;;;;;;;;;;;;;;;;;;;;;;;21042:5;;;;;;;;;;;21026:28;;:38;21055:8;21026:38;;;;;;;;;;;;;;;;;;;;;;;;21081:9;21091:1;21081:11;;21112:4;21117:5;21112:11;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;21109:289;;;21151:8;21149:10;;21215:1;21183:8;;;;;;;;;;;:18;;;21202:10;;;;;;;;;;;21183:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21183:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21183:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21183:30:0;;;;;;;;;;;;;;;;:33;21180:202;;21242:8;;;;;;;;;;;:21;;;21264:10;;;;;;;;;;;21275;21286:1;21242:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21242:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21242:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21242:46:0;;;;;;;;;;;;;;;;;21180:202;;;21359:1;21357:3;;21180:202;21109:289;21413:4;21418:5;21413:11;;;;;;;;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21447:43;21461:9;21472:10;21484:5;21447:13;:43::i;:::-;21512:76;21524:5;21531:8;21540;21549:1;21551:9;21561:10;21572:14;21512:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21603:7;;;;;;20833:789;21632:16;21649:8;21655:1;21649:5;:8::i;:::-;21632:25;;21668:16;21685:10;21693:1;21691;:3;21685:5;:10::i;:::-;21668:27;;21725:8;21714:9;:19;;21706:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21811:10;:15;;:35;21837:8;21827:9;:18;21811:35;;;;;;;;;;;;;;;;;;;;;;;;21869:14;21893:8;21884;:17;21869:32;;22007:5;;;;;;;;;;;21991:28;;:51;22020:21;22038:2;22020:13;22031:1;22020:6;:10;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;21991:51;;;;;;;;;;;;;;;;;;;;;;;;22072:16;;;;;;;;;;;22056:39;;:64;22096:23;22115:3;22096:14;22107:2;22096:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;22056:64;;;;;;;;;;;;;;;;;;;;;;;;22158:14;22142:37;;:61;22180:22;22198:3;22180:13;22191:1;22180:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;22142:61;;;;;;;;;;;;;;;;;;;;;;;;22241:9;22225:32;;:71;22258:37;22286:8;22258:23;22277:3;22258:14;22269:2;22258:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;:27;;:37;;;;:::i;:::-;22225:71;;;;;;;;;;;;;;;;;;;;;;;;22310:9;22320:1;22310:11;;22336:4;22341:5;22336:11;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;22333:289;;;22403:2;22401:1;:4;:34;;22416:18;22426:7;22419:1;22417;:3;22416:9;;:18;;;;:::i;:::-;22401:34;;;22406:8;22401:34;22399:36;;22485:1;22453:8;;;;;;;;;;;:18;;;22472:10;;;;;;;;;;;22453:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22453:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22453:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22453:30:0;;;;;;;;;;;;;;;;:33;22450:160;;22506:8;;;;;;;;;;;:21;;;22528:10;;;;;;;;;;;22539;22550:1;22506:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22506:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22506:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22506:46:0;;;;;;;;;;;;;;;;;22450:160;;;22593:1;22591:3;;22450:160;22333:289;22635:4;22640:5;22635:11;;;;;;;;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22673:43;22687:9;22698:10;22710:5;22673:13;:43::i;:::-;22734:76;22746:5;22753:8;22762;22771:1;22773:9;22783:10;22794:14;22734:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14160:1;;;;;;;13349;14308:7;:22;;;;20438:2382;;:::o;2806:135::-;2876:4;2900:20;:33;2921:11;2900:33;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:40;;2806:135;;;:::o;23993:132::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;24077:8;24061:35;;:58;24097:21;24061:58;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24061:58:0;23993:132;:::o;14497:25::-;;;;;;;;;;;;;:::o;11002:85::-;11041:13;11074:5;11067:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11002:85;:::o;4381:154::-;4440:7;4468:16;4476:7;4468;:16::i;:::-;4460:25;;;;;;4503:15;:24;4519:7;4503:24;;;;;;;;;;;;;;;;;;;;;4496:31;;4381:154;;;:::o;4074:299::-;4138:13;4154:16;4162:7;4154;:16::i;:::-;4138:32;;4195:5;4189:11;;:2;:11;;;;4181:20;;;;;;4234:5;4220:19;;:10;:19;;;:58;;;;4243:35;4260:5;4267:10;4243:16;:35::i;:::-;4220:58;4212:67;;;;;;4319:2;4292:15;:24;4308:7;4292:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;4357:7;4353:2;4337:28;;4346:5;4337:28;;;;;;;;;;;;4074:299;;;:::o;18159:302::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;18296:5;;18288:7;:13;18280:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18374:3;18347:4;18352:7;18347:13;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:30;;;18339:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18440:9;18413:4;18418:7;18413:13;;;;;;;;;;;;;;;;;;:26;;;:36;;;;;;;;;;;;;;;;;;18159:302;;:::o;8148:96::-;8192:7;8219:10;:17;;;;8212:24;;8148:96;:::o;19301:22::-;;;;;;;;;;;;;:::o;4923:182::-;5014:39;5033:10;5045:7;5014:18;:39::i;:::-;5006:48;;;;;;5065:32;5079:4;5085:2;5089:7;5065:13;:32::i;:::-;4923:182;;;:::o;17410:287::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;17547:5;;17539:7;:13;17531:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17623:3;17596:4;17601:7;17596:13;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:30;;;17588:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17681:4;;17662;17667:7;17662:13;;;;;;;;;;;;;;;;;;:18;;:23;;;;;;;:::i;:::-;;17410:287;;;:::o;19618:437::-;19671:7;19708:9;:16;;;;19701:6;:23;19698:311;;;19741:17;19759:9;19786:1;19769:9;:16;;;;:18;19759:29;;;;;;;;;;;;;;;;19741:47;;19808:9;19818;:16;;;;19808:26;;19804:161;19837:6;19835:1;:8;19804:161;;;19878:25;19900:2;19878:17;19892:2;19878:9;:13;;:17;;;;:::i;:::-;:21;;:25;;;;:::i;:::-;19868:35;;19923:9;19938;19923:25;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19923:25:0;;;;;;;;;;;;;;;;;;;;;;19844:3;;;;;;;19804:161;;;;19987:9;19980:16;;;;;19698:311;20027:9;20044:1;20037:6;:8;20027:19;;;;;;;;;;;;;;;;20020:26;;19618:437;;;;:::o;23852:135::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;23943:1;23924:21;;:7;:21;;;;23916:30;;;;;;23972:7;23959:10;;:20;;;;;;;;;;;;;;;;;;23852:135;:::o;7955:185::-;8035:7;8071:16;8081:5;8071:9;:16::i;:::-;8063:5;:24;8055:33;;;;;;8106:12;:19;8119:5;8106:19;;;;;;;;;;;;;;;8126:5;8106:26;;;;;;;;;;;;;;;;8099:33;;7955:185;;;;:::o;18909:135::-;18983:7;19013:4;19018:7;19013:13;;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;19006:26;;;;18909:135;;;:::o;15510:81::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;15382:6;;;;;;;;;;;15374:15;;;;;;15578:5;15569:6;;:14;;;;;;;;;;;;;;;;;;15510:81::o;5113:134::-;5200:39;5217:4;5223:2;5227:7;5200:39;;;;;;;;;;;;:16;:39::i;:::-;5113:134;;;:::o;15599:828::-;15770:7;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;15818:5;;;;;;;;;;;15804:19;;:10;:19;;;15796:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15872:1;15859:11;;:14;15856:227;;;15897:5;15889:13;;15856:227;;;15940:11;;15927;;15923:3;:15;15922:29;15919:164;;;15975:5;15967:13;;15919:164;;;16014:7;16011:61;;;16053:3;16041:11;:15;;;;16011:61;15919:164;15856:227;16095:15;;:::i;:::-;16113:159;;;;;;;;16136:5;;16113:159;;;;16170:9;16113:159;;;;;;16201:1;16113:159;;;;;;16222:7;16113:159;;;;;;16250:8;;16113:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16113:159:0;;;;;;;;;16095:177;;16291:4;16301;16291:15;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;16291:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16283:5;:23;;;;16352:5;;16337:22;;16328:5;;:31;16320:40;;;;;;16373:21;16379:5;;;;;;;;;;;16392:1;16386:5;;:7;16373:5;:21::i;:::-;16414:5;;16407:12;;;15599:828;;;;;;:::o;8252:151::-;8310:7;8346:13;:11;:13::i;:::-;8338:5;:21;8330:30;;;;;;8378:10;8389:5;8378:17;;;;;;;;;;;;;;;;8371:24;;8252:151;;;:::o;19465:139::-;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;19568:26;19573:14;19588:5;19568:4;:26::i;:::-;19465:139;;:::o;17033:137::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;17150:8;17138:11;:20;;;;17033:137;:::o;14464:26::-;;;;;;;;;;;;;:::o;3885:181::-;3940:7;3960:13;3976:11;:20;3988:7;3976:20;;;;;;;;;;;;;;;;;;;;;3960:36;;4032:1;4015:19;;:5;:19;;;;4007:28;;;;;;4053:5;4046:12;;;3885:181;;;:::o;14895:28::-;;;;:::o;14567:31::-;;;;;;;;;;;;;:::o;3724:153::-;3779:7;3824:1;3807:19;;:5;:19;;;;3799:28;;;;;;3845:17;:24;3863:5;3845:24;;;;;;;;;;;;;;;;3838:31;;3724:153;;;:::o;16600:150::-;16665:4;16690:16;16698:7;16690;:16::i;:::-;16682:25;;;;;;16725:4;16730:7;16725:13;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;16718:24;;16600:150;;;:::o;15419:83::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;15490:4;15481:6;;:13;;;;;;;;;;;;;;;;;;15419:83::o;14605:29::-;;;;;;;;;;;;;:::o;17188:216::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;17328:5;;17320:7;:13;17312:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17388:4;;17369;17374:7;17369:13;;;;;;;;;;;;;;;;;;:18;;:23;;;;;;;:::i;:::-;;17188:216;;;:::o;12209:20::-;;;;;;;;;;;;;:::o;11095:89::-;11136:13;11169:7;11162:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11095:89;:::o;4543:217::-;4629:10;4623:16;;:2;:16;;;;4615:25;;;;;;4688:8;4651:18;:30;4670:10;4651:30;;;;;;;;;;;;;;;:34;4682:2;4651:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;4739:2;4712:40;;4727:10;4712:40;;;4743:8;4712:40;;;;;;;;;;;;;;;;;;;;;;4543:217;;:::o;15028:32::-;;;;:::o;18691:202::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;18811:5;;18803:7;:13;18795:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18874:7;18856:17;:25;;;;18691:202;:::o;18027:116::-;18096:7;18126:5;;18119:12;;18027:116;:::o;14529:25::-;;;;;;;;;;;;;:::o;16758:137::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;16872:11;;16866:3;:17;16854:11;:29;;;;16758:137::o;5255:214::-;5362:31;5375:4;5381:2;5385:7;5362:12;:31::i;:::-;5412:48;5435:4;5441:2;5445:7;5454:5;5412:22;:48::i;:::-;5404:57;;;;;;5255:214;;;;:::o;16439:153::-;16497:13;16531:16;16539:7;16531;:16::i;:::-;16523:25;;;;;;16566:4;16571:7;16566:13;;;;;;;;;;;;;;;;;;:18;;16559:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16439:153;;;:::o;14995:26::-;;;;:::o;18467:218::-;18549:6;18597:5;;18589:7;:13;18581:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18647:4;18652:7;18647:13;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;18640:33;;18467:218;;;:::o;17705:316::-;17770:4;17816:1;17803:11;;:14;17800:200;;;17844:5;17837:12;;;;17800:200;17891:11;;17878;;17874:3;:15;17873:29;17870:130;;;17929:5;17922:12;;;;17870:130;17980:4;17973:11;;17705:316;;:::o;4768:147::-;4848:4;4872:18;:25;4891:5;4872:25;;;;;;;;;;;;;;;:35;4898:8;4872:35;;;;;;;;;;;;;;;;;;;;;;;;;4865:42;;4768:147;;;;:::o;16903:122::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;17012:1;17000:11;:13;;;;16903:122::o;12374:135::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;12467:1;12447:22;;:8;:22;;;12443:61;;12488:8;12480:5;;:16;;;;;;;;;;;;;;;;;;12443:61;12374:135;:::o;1853:148::-;1911:7;1944:1;1939;:6;;1931:15;;;;;;1957:9;1973:1;1969;:5;1957:17;;1992:1;1985:8;;;1853:148;;;;:::o;8411:241::-;8497:38;8517:4;8523:2;8527:7;8497:19;:38::i;:::-;8546:47;8579:4;8585:7;8546:32;:47::i;:::-;8604:40;8632:2;8636:7;8604:27;:40::i;:::-;8411:241;;;:::o;1481:209::-;1539:7;1568:1;1563;:6;1559:47;;;1593:1;1586:8;;;;1559:47;1616:9;1632:1;1628;:5;1616:17;;1661:1;1656;1652;:5;;;;;;:10;1644:19;;;;;;1681:1;1674:8;;;1481:209;;;;;:::o;1698:147::-;1756:7;1788:1;1784;:5;1776:14;;;;;;1801:9;1817:1;1813;:5;;;;;;1801:17;;1836:1;1829:8;;;1698:147;;;;:::o;2009:148::-;2067:7;2087:9;2103:1;2099;:5;2087:17;;2128:1;2123;:6;;2115:15;;;;;;2148:1;2141:8;;;2009:148;;;;:::o;5477:155::-;5534:4;5551:13;5567:11;:20;5579:7;5567:20;;;;;;;;;;;;;;;;;;;;;5551:36;;5622:1;5605:19;;:5;:19;;;;5598:26;;;5477:155;;;:::o;5640:249::-;5725:4;5742:13;5758:16;5766:7;5758;:16::i;:::-;5742:32;;5804:5;5793:16;;:7;:16;;;:51;;;;5837:7;5813:31;;:20;5825:7;5813:11;:20::i;:::-;:31;;;5793:51;:87;;;;5848:32;5865:5;5872:7;5848:16;:32::i;:::-;5793:87;5785:96;;;5640:249;;;;:::o;8660:198::-;8724:24;8736:2;8740:7;8724:11;:24::i;:::-;8759:40;8787:2;8791:7;8759:27;:40::i;:::-;8810;8842:7;8810:31;:40::i;:::-;8660:198;;:::o;6611:356::-;6733:4;6760:15;:2;:13;;;:15::i;:::-;6755:60;;6799:4;6792:11;;;;6755:60;6827:13;6859:2;6843:36;;;6880:10;6892:4;6898:7;6907:5;6843:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6843:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6843:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6843:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6843:70:0;;;;;;;;;;;;;;;;6827:86;;3297:10;6942:16;;6932:26;;;:6;:26;;;;6924:35;;;6611:356;;;;;;;:::o;6191:412::-;6305:4;6285:24;;:16;6293:7;6285;:16::i;:::-;:24;;;6277:33;;;;;;6343:1;6329:16;;:2;:16;;;;6321:25;;;;;;6359:23;6374:7;6359:14;:23::i;:::-;6421:30;6449:1;6421:17;:23;6439:4;6421:23;;;;;;;;;;;;;;;;:27;;:30;;;;:::i;:::-;6395:17;:23;6413:4;6395:23;;;;;;;;;;;;;;;:56;;;;6486:28;6512:1;6486:17;:21;6504:2;6486:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;6462:17;:21;6480:2;6462:21;;;;;;;;;;;;;;;:52;;;;6548:2;6525:11;:20;6537:7;6525:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;6587:7;6583:2;6568:27;;6577:4;6568:27;;;;;;;;;;;;6191:412;;;:::o;9366:501::-;9458:22;9483:32;9513:1;9483:12;:18;9496:4;9483:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;9458:57;;9526:18;9547:17;:26;9565:7;9547:26;;;;;;;;;;;;9526:47;;9604:14;9590:10;:28;9586:234;;9635:19;9657:12;:18;9670:4;9657:18;;;;;;;;;;;;;;;9676:14;9657:34;;;;;;;;;;;;;;;;9635:56;;9739:11;9706:12;:18;9719:4;9706:18;;;;;;;;;;;;;;;9725:10;9706:30;;;;;;;;;;;;;;;:44;;;;9798:10;9765:17;:30;9783:11;9765:30;;;;;;;;;;;:43;;;;9586:234;;9832:12;:18;9845:4;9832:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;9366:501;;;;:::o;9000:186::-;9114:12;:16;9127:2;9114:16;;;;;;;;;;;;;;;:23;;;;9085:17;:26;9103:7;9085:26;;;;;;;;;;;:52;;;;9148:12;:16;9161:2;9148:16;;;;;;;;;;;;;;;9170:7;9148:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;9148:30:0;;;;;;;;;;;;;;;;;;;;;;9000:186;;:::o;5897:286::-;5983:1;5969:16;;:2;:16;;;;5961:25;;;;;;6006:16;6014:7;6006;:16::i;:::-;6005:17;5997:26;;;;;;6059:2;6036:11;:20;6048:7;6036:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;6096:28;6122:1;6096:17;:21;6114:2;6096:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;6072:17;:21;6090:2;6072:21;;;;;;;;;;;;;;;:52;;;;6167:7;6163:2;6142:33;;6159:1;6142:33;;;;;;;;;;;;5897:286;;:::o;9194:164::-;9298:10;:17;;;;9271:15;:24;9287:7;9271:24;;;;;;;;;;;:44;;;;9326:10;9342:7;9326:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;9326:24:0;;;;;;;;;;;;;;;;;;;;;;9194:164;:::o;2347:174::-;2407:4;2424:12;2478:7;2466:20;2458:28;;2512:1;2505:4;:8;2498:15;;;2347:174;;;:::o;6975:175::-;7075:1;7039:38;;:15;:24;7055:7;7039:24;;;;;;;;;;;;;;;;;;;;;:38;;;7035:108;;7129:1;7094:15;:24;7110:7;7094:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;7035:108;6975:175;:::o;23324:807::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://12f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.