ETH Price: $3,406.07 (+1.08%)

Token

Gold Saucer Chip (GSCHIP)
 

Overview

Max Total Supply

4,545 GSCHIP

Holders

4,545

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
joaooo.eth
0x3e397E679fB1aDb0AC1FACf4679cc222A9dEa1a3
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
GoldSaucerAuction

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// Gold Saucer Auction by 0xInuarashi
// Project: Gangster All Star

///////////////////////////////////////////////////////
/////                   Ownable                   /////
///////////////////////////////////////////////////////

abstract contract Ownable {
    address public owner;
    constructor() { owner = msg.sender; }
    modifier onlyOwner { require(owner == msg.sender, "Not Owner!"); _; }
    function transferOwnership(address new_) external onlyOwner { owner = new_; }
}

///////////////////////////////////////////////////////
/////             Payable Governance              /////
///////////////////////////////////////////////////////

abstract contract PayableGovernance is Ownable {
    // Special Access
    address public payableGovernanceSetter;
    constructor() payable { payableGovernanceSetter = msg.sender; }
    modifier onlyPayableGovernanceSetter {
        require(msg.sender == payableGovernanceSetter, 
            "PayableGovernance: Caller is not Setter!"); _; }
    function reouncePayableGovernancePermissions() public onlyPayableGovernanceSetter {
        payableGovernanceSetter = address(0x0); }

    // Receivable Fallback
    event Received(address from, uint amount);
    receive() external payable { emit Received(msg.sender, msg.value); }

    // Required Variables
    address payable[] internal _payableGovernanceAddresses;
    uint256[] internal _payableGovernanceShares;    
    mapping(address => bool) public addressToEmergencyUnlocked;

    // Withdraw Functionality
    function _withdraw(address payable address_, uint256 amount_) internal {
        (bool success, ) = payable(address_).call{value: amount_}("");
        require(success, "Transfer failed");
    }

    // Governance Functions
    function setPayableGovernanceShareholders(address payable[] memory addresses_,
    uint256[] memory shares_) public onlyPayableGovernanceSetter {
        require(_payableGovernanceAddresses.length == 0 
            && _payableGovernanceShares.length == 0, 
            "Payable Governance already set! To set again, reset first!");
        require(addresses_.length == shares_.length, 
            "Address and Shares length mismatch!");

        uint256 _totalShares;
        
        for (uint256 i = 0; i < addresses_.length; i++) {
            _totalShares += shares_[i];
            _payableGovernanceAddresses.push(addresses_[i]);
            _payableGovernanceShares.push(shares_[i]);
        }
        require(_totalShares == 1000, "Total Shares is not 1000!");
    }
    function resetPayableGovernanceShareholders() public onlyPayableGovernanceSetter {
        while (_payableGovernanceAddresses.length != 0) {
            _payableGovernanceAddresses.pop(); }
        while (_payableGovernanceShares.length != 0) {
            _payableGovernanceShares.pop(); }
    }

    // Governance View Functions
    function balance() public view returns (uint256) {
        return address(this).balance;
    }
    function payableGovernanceAddresses() public view 
    returns (address payable[] memory) {
        return _payableGovernanceAddresses;
    }
    function payableGovernanceShares() public view returns (uint256[] memory) {
        return _payableGovernanceShares;
    }

    // Withdraw Functions
    function withdrawEther() public onlyOwner {
        // require that there has been payable governance set.
        require(_payableGovernanceAddresses.length > 0 
            && _payableGovernanceShares.length > 0, 
            "Payable governance not set yet!");
         // this should never happen
        require(_payableGovernanceAddresses.length 
            == _payableGovernanceShares.length, 
            "Payable governance length mismatch!");
        
        // now, we check that the governance shares equal to 1000.
        uint256 _totalPayableShares;
        for (uint256 i = 0; i < _payableGovernanceShares.length; i++) {
            _totalPayableShares += _payableGovernanceShares[i]; }
        require(_totalPayableShares == 1000, "Payable Governance Shares is not 1000!");
        
        // // now, we start the withdrawal process if all conditionals pass
        // store current balance in local memory
        uint256 _totalETH = address(this).balance; 

        // withdraw loop for payable governance
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            uint256 _ethToWithdraw = ((_totalETH * _payableGovernanceShares[i]) / 1000);
            _withdraw(_payableGovernanceAddresses[i], _ethToWithdraw);
        }
    }

    function viewWithdrawAmounts() public view onlyOwner returns (uint256[] memory) {
        // require that there has been payable governance set.
        require(_payableGovernanceAddresses.length > 0 
            && _payableGovernanceShares.length > 0, 
            "Payable governance not set yet!");
         // this should never happen
        require(_payableGovernanceAddresses.length 
            == _payableGovernanceShares.length, 
            "Payable governance length mismatch!");
        
        // now, we check that the governance shares equal to 1000.
        uint256 _totalPayableShares;
        for (uint256 i = 0; i < _payableGovernanceShares.length; i++) {
            _totalPayableShares += _payableGovernanceShares[i]; }
        require(_totalPayableShares == 1000, "Payable Governance Shares is not 1000!");
        
        // // now, we start the array creation process if all conditionals pass
        // store current balance in local memory and instantiate array for input
        uint256 _totalETH = address(this).balance; 
        uint256[] memory _withdrawals = new uint256[] 
            (_payableGovernanceAddresses.length + 2);

        // array creation loop for payable governance values 
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            _withdrawals[i] = ( (_totalETH * _payableGovernanceShares[i]) / 1000 );
        }
        
        // push two last array spots as total eth and added eths of withdrawals
        _withdrawals[_payableGovernanceAddresses.length] = _totalETH;
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            _withdrawals[_payableGovernanceAddresses.length + 1] += _withdrawals[i]; }

        // return the final array data
        return _withdrawals;
    }

    // Shareholder Governance
    modifier onlyShareholder {
        bool _isShareholder;
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            if (msg.sender == _payableGovernanceAddresses[i]) {
                _isShareholder = true;
            }
        }
        require(_isShareholder, "You are not a shareholder!");
        _;
    }
    function unlockEmergencyFunctionsAsShareholder() public onlyShareholder {
        addressToEmergencyUnlocked[msg.sender] = true;
    }

    // Emergency Functions
    modifier onlyEmergency {
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            require(addressToEmergencyUnlocked[_payableGovernanceAddresses[i]],
                "Emergency Functions are not unlocked!");
        }
        _;
    }
    function emergencyWithdrawEther() public onlyOwner onlyEmergency {
        _withdraw(payable(msg.sender), address(this).balance);
    }

    // Proxy Padding
    bytes32[50] private proxyPadding;
}

///////////////////////////////////////////////////////
/////                Bucket Auction               /////
///////////////////////////////////////////////////////

interface iGasEvo {
    function mintAsController(address to_, uint256 amount_) external;
}

contract BucketAuction is Ownable {

    /** @dev Note: There is no ETH Withdrawal function here! Add it yourself! */ 

    /** @dev implementation: here is a basic withdrawal using Ownable
    
    function ownerWithdraw() external onlyOwner {
        _sendETH(payable(msg.sender), address(this).balance);
    }
    */

    // Interface and Constructor
    iGasEvo public GasEvo;
    constructor(address gasEvo_) { GasEvo = iGasEvo(gasEvo_); }
    function O_setGasEvo(address gasEvo_) external onlyOwner { 
        GasEvo = iGasEvo(gasEvo_); }

    // Events
    event Bid(address bidder, uint256 bidAmount, uint256 bidderTotal,
        uint256 bucketTotal);
    event FinalPriceSet(address setter, uint256 finalPrice);

    // Testing Events
    event RefundProcessed(address indexed bidder, uint256 refundAmount);
    event MintProcessed(address indexed bidder, uint256 mintAmount);
    
    // Fixed Configurations
    uint256 public immutable minCommit = 0.1 ether;

    // Global Variables
    uint256 public finalPrice;

    // Structs
    struct BidData {
        uint232 commitment;
        uint16 totalMinted;
        bool refundClaimed;
    }

    // Mappings
    mapping(address => BidData) public userToBidData;

    // Bool Triggers
    bool public biddingActive;

    // Administrative Functions
    function O_setBiddingActive(bool bool_) external onlyOwner { biddingActive = bool_; }
    function O_setFinalPrice(uint256 finalPrice_) external onlyOwner {
        require(!biddingActive, "Bidding is active!");
        finalPrice = finalPrice_;
        emit FinalPriceSet(msg.sender, finalPrice_);
    }
    // Administrative Process of Commits
    function O_processCommits(address[] calldata bidders_) external onlyOwner {
        _processCommits(bidders_);
    }

    // Internal Calculators
    function _calMintsFromCommitment(uint256 commitment_, uint256 finalPrice_)
    internal pure returns (uint256) {
        return commitment_ / finalPrice_;
    }
    function _calRemainderFromCommitment(uint256 commitment_, uint256 finalPrice_)
    internal pure returns (uint256) {
        return commitment_ % finalPrice_;
    }

    // Internal Processing 
    function _sendETH(address to_, uint256 amount_) internal {
        (bool success, ) = to_.call{value: amount_}("");
        require(success, "Transfer failed");
    }

    /** @dev edgeCases:
     *  Case 1: Refunds fail, breaking the processing
     *  Solution 1: OwnerMint NFTs + Manual Refund after all processing has finished
     *  
     *  Case 2: Mints fail, breaking the processing
     *  Solution 2: OwnerMint NFTs + Manual Refund after all processing has finished
     * 
     *  Case 3: Reentrancy on _internalProcessRefund
     *  Solution 3: CEI of setting refundClaimed will break the reentrancy attack
     *
     *  Case 4: Reentrancy on _internalProcessMint
     *  Solution 4: CEI of setting totalMinted will break the reentrancy attack
     *              but even better, just use a normal _mint instead of _safeMint
    */
    function _internalProcessRefund(address bidder_, uint256 refundAmount_) internal {
        userToBidData[bidder_].refundClaimed = true;
        if (refundAmount_ != 0) { _sendETH(bidder_, refundAmount_); }
        emit RefundProcessed(bidder_, refundAmount_);
    }
    function _internalProcessMint(address bidder_, uint256 mintAmount_) internal {
        uint16 _mintAmount = uint16(mintAmount_);
        userToBidData[bidder_].totalMinted += _mintAmount;
        /** @dev implementation:
         *  minting code goes here
        */
        GasEvo.mintAsController(bidder_, mintAmount_);

        emit MintProcessed(bidder_, mintAmount_);
    }
    function _internalProcessCommit(address bidder_, uint256 finalPrice_) internal {
        BidData memory _BidData = userToBidData[bidder_];
        uint256 _commitment = uint256(_BidData.commitment);
        uint256 _eligibleRefunds = _calRemainderFromCommitment(_commitment, finalPrice_);
        uint256 _eligibleMints = _calMintsFromCommitment(_commitment, finalPrice_);

        if (!_BidData.refundClaimed) {
            _internalProcessRefund(bidder_, _eligibleRefunds);
        }

        if (_eligibleMints > _BidData.totalMinted) {
            uint256 _remainingMints = _eligibleMints - _BidData.totalMinted;
            _internalProcessMint(bidder_, _remainingMints);
        }
    }
    function _processCommits(address[] calldata bidders_) internal {
        uint256 _finalPrice = finalPrice;
        require(_finalPrice != 0, "Final Price not set!");
        for (uint256 i; i < bidders_.length;) {
            _internalProcessCommit(bidders_[i], _finalPrice);
            unchecked { ++i; }
        }
    }

    // Public Bidding Function
    function bid() public virtual payable {
        // Require bidding to be active
        require(biddingActive, "Bidding is not active!");
        // Require EOA only
        require(msg.sender == tx.origin, "No Smart Contracts!");
        // Modulus for Cleaner Bids
        require(msg.value % 1000000000000000 == 0, 
            "Please bid with a minimum decimal of 0.001 ETH!");
        require(msg.value > 0, 
            "Please bid with msg.value!");
        
        // Load the current commitment value from mapping to memory
        uint256 _currentCommitment = userToBidData[msg.sender].commitment;
        
        // Calculate thew new commitment based on the bid
        uint256 _newCommitment = _currentCommitment + msg.value;

        // Make sure the new commitment is higher than the minimum commitment
        require(_newCommitment >= minCommit, "Commitment below minimum!");

        // Store the new commitment value
        userToBidData[msg.sender].commitment = uint232(_newCommitment);

        // Emit Event for Data Parsing and Analysis
        emit Bid(msg.sender, msg.value, _newCommitment, address(this).balance);
    }

    // Public View Functions
    function getEligibleMints(address bidder_) public view returns (uint256) {
        require(finalPrice != 0, "Final Price not set!");

        uint256 _eligibleMints = _calMintsFromCommitment(
            userToBidData[bidder_].commitment, finalPrice);
        uint256 _alreadyMinted = userToBidData[bidder_].totalMinted;

        return (_eligibleMints - _alreadyMinted);
    }
    function getRefundAmount(address bidder_) public view returns (uint256) {
        require(finalPrice != 0, "Final Price not set!");

        uint256 _remainder = _calRemainderFromCommitment(
            userToBidData[bidder_].commitment, finalPrice);
        
        return !userToBidData[bidder_].refundClaimed ? _remainder : 0;
    }
    function queryCommitments(address[] calldata bidders_) external 
    view returns (BidData[] memory) {
        uint256 l = bidders_.length;
        BidData[] memory _BidDatas = new BidData[] (l);
        for (uint256 i; i < l;) {
            _BidDatas[i] = userToBidData[bidders_[i]];
            unchecked { ++i; }
        }
        return _BidDatas;
    }

    // Proxy Padding
    bytes32[50] private proxyPadding;
}

///////////////////////////////////////////////////////
/////                 ERC1155-Like                /////
///////////////////////////////////////////////////////

interface ERC1155TokenReceiver {
    function onERC1155Received(address operator_, address from_, uint256 id_,
        uint256 amount_, bytes calldata data_) external returns (bytes4);
    function onERC1155BatchReceived(address operator_, address from_,
        uint256[] calldata ids_, uint256[] calldata amounts_, bytes calldata data_)
        external returns (bytes4);
}

abstract contract GoldSaucerChip is Ownable {
    
    // Events
    event TransferSingle(address indexed operator_, address indexed from_, 
    address indexed to_, uint256 id_, uint256 amount_);
    event TransferBatch(address indexed operator_, address indexed from_, 
    address indexed to_, uint256[] ids_, uint256[] amounts_);
    event ApprovalForAll(address indexed owner_, address indexed operator_, 
    bool approved_);
    event URI(string value_, uint256 indexed id_);

    // Mappings

    // mapping(address => mapping(uint256 => uint256)) public balanceOf;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    // Base Info
    string public name; 
    string public symbol; 

    // Setting Name and Symbol (Missing in ERC1155 Generally)
    constructor(string memory name_, string memory symbol_) {
        name = name_; 
        symbol = symbol_; 
    }

    function balanceOf(address owner_, uint256 id_) public view virtual returns (uint256) {
        /** @dev implementation:
         *  we override this into the parent contract
         */
        // // We only return a phantom balance using ID 1
        // if (id_ != 1) return 0;
        // return userToBidData[owner_].commitment > 0 ? 1 : 0;
    }

    function balanceOfBatch(address[] memory addresses_, uint256[] memory ids_) 
    public virtual view returns (uint256[] memory) {
        require(addresses_.length == ids_.length,
            "ERC1155: accounts and ids length mismatch!");
        uint256[] memory _balances = new uint256[](addresses_.length);
        for (uint256 i = 0; i < addresses_.length; i++) {
            _balances[i] = balanceOf(addresses_[i], ids_[i]);
        }
        return _balances;
    }
    
    // URI Display Type Setting (Default to ERC721 Style)
        // 1 - ERC1155 Style
        // 2 - ERC721 Style
        // 3 - Mapping Style
    uint256 public URIType = 2; 
    function _setURIType(uint256 uriType_) internal virtual {
        URIType = uriType_;
    }
    function O_setURIType(uint256 uriType_) external onlyOwner {
        _setURIType(uriType_);
    }

    // ERC1155 URI
    string public _uri;
    function _setURI(string memory uri_) internal virtual { _uri = uri_; }
    function O_setURI(string calldata uri_) external onlyOwner { _setURI(uri_); }
    
    // ERC721 URI (Override)
    string internal baseTokenURI; 
    string internal baseTokenURI_EXT;

    function _setBaseTokenURI(string memory uri_) internal virtual { 
        baseTokenURI = uri_; }
    function _setBaseTokenURI_EXT(string memory ext_) internal virtual {
        baseTokenURI_EXT = ext_; }
    function O_setBaseTokenURI(string calldata uri_) external onlyOwner {
        _setBaseTokenURI(uri_); }
    function O_setBaseTokenURI_EXT(string calldata ext_) external onlyOwner {
        _setBaseTokenURI_EXT(ext_); }
    function _toString(uint256 value_) internal pure returns (string memory) {
        if (value_ == 0) { return "0"; }
        uint256 _iterate = value_; uint256 _digits;
        while (_iterate != 0) { _digits++; _iterate /= 10; } // get digits in value_
        bytes memory _buffer = new bytes(_digits);
        while (value_ != 0) { _digits--; _buffer[_digits] = bytes1(uint8(
            48 + uint256(value_ % 10 ))); value_ /= 10; } // create bytes of value_
        return string(_buffer); // return string converted bytes of value_
    }

    // Mapping Style URI (Override)
    mapping(uint256 => string) public tokenIdToURI;
    
    function _setURIOfToken(uint256 id_, string memory uri_) internal virtual {
        tokenIdToURI[id_] = uri_; }
    function O_setURIOfToken(uint256 id_, string calldata uri_) external onlyOwner {
        _setURIOfToken(id_, uri_); }


    // URI (0xInuarashi Version)
    function uri(uint256 id_) public virtual view returns (string memory) {
        // ERC1155
        if (URIType == 1) return _uri;
        // ERC721
        else if (URIType == 2) return 
            string(abi.encodePacked(baseTokenURI, _toString(id_), baseTokenURI_EXT));
        // Mapping 
        else if (URIType == 3) return tokenIdToURI[id_];
        else return "";
    }
    function tokenURI(uint256 id_) public virtual view returns (string memory) {
        return uri(id_);
    }

    // Internal Logics
    function _isSameLength(uint256 a, uint256 b) internal pure returns (bool) {
        return a == b;
    }
    function _isApprovedOrOwner(address from_) internal view returns (bool) {
        return msg.sender == from_ 
            || isApprovedForAll[from_][msg.sender];
    }
    function _ERC1155Supported(address from_, address to_, uint256 id_,
    uint256 amount_, bytes memory data_) internal {
        require(to_.code.length == 0 ? to_ != address(0) :
            ERC1155TokenReceiver(to_).onERC1155Received(
                msg.sender, from_, id_, amount_, data_) ==
            ERC1155TokenReceiver.onERC1155Received.selector,
                "_ERC1155Supported(): Unsupported Recipient!"
        );
    }
    function _ERC1155BatchSupported(address from_, address to_, uint256[] memory ids_,
    uint256[] memory amounts_, bytes memory data_) internal {
        require(to_.code.length == 0 ? to_ != address(0) :
            ERC1155TokenReceiver(to_).onERC1155BatchReceived(
                msg.sender, from_, ids_, amounts_, data_) ==
            ERC1155TokenReceiver.onERC1155BatchReceived.selector,
                "_ERC1155BatchSupported(): Unsupported Recipient!"
        );
    }

    // ERC1155 Logics
    function setApprovalForAll(address operator_, bool approved_) public virtual {
        // isApprovedForAll[msg.sender][operator_] = approved_;
        // emit ApprovalForAll(msg.sender, operator_, approved_);

        require(!approved_, "SBT: Soulbound");
        require(operator_ == address(0), "SBT: Soulbound");
    }

    function safeTransferFrom(address from_, address to_, uint256 id_, 
    uint256 amount_, bytes memory data_) public virtual {
        // require(_isApprovedOrOwner(from_));
        
        // balanceOf[from_][id_] -= amount_;
        // balanceOf[to_][id_] += amount_;

        // emit TransferSingle(msg.sender, from_, to_, id_, amount_);

        // _ERC1155Supported(from_, to_, id_, amount_, data_);

        require(amount_ == 0, "SBT: Soulbound");
        require(from_ == address(0), "SBT: Soulbound");
        require(to_ == address(0), "SBT: Soulbound");
        require(id_ == 0, "SBT: Soulbound");
        require(data_.length == 0, "SBT: Soulbound");
    }
    function safeBatchTransferFrom(address from_, address to_, uint256[] memory ids_,
    uint256[] memory amounts_, bytes memory data_) public virtual {
        // require(_isSameLength(ids_.length, amounts_.length));
        // require(_isApprovedOrOwner(from_));

        // for (uint256 i = 0; i < ids_.length; i++) {
        //     balanceOf[from_][ids_[i]] -= amounts_[i];
        //     balanceOf[to_][ids_[i]] += amounts_[i];
        // }

        // emit TransferBatch(msg.sender, from_, to_, ids_, amounts_);

        // _ERC1155BatchSupported(from_, to_, ids_, amounts_, data_);

        require(amounts_.length == 0, "SBT: Soulbound");
        require(from_ == address(0), "SBT: Soulbound");
        require(to_ == address(0), "SBT: Soulbound");
        require(ids_.length == 0, "SBT: Soulbound");
        require(data_.length == 0, "SBT: Soulbound");
    }

    // Phantom Mint
    function _phantomMintGoldSaucerChip(address to_) internal {
        emit TransferSingle(msg.sender, address(0), to_, 1, 1);
        
        // we dont need to make this callback as we're just emitting an event
        // _ERC1155Supported(address(0), to_, 1, 1, ""); 
    }

    // ERC165 Logic
    function supportsInterface(bytes4 interfaceId_) public pure virtual returns (bool) {
        return 
        interfaceId_ == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
        interfaceId_ == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
        interfaceId_ == 0x0e89341c;   // ERC165 Interface ID for ERC1155MetadataURI
    }

    // Proxy Padding
    bytes32[50] private proxyPadding;
}

///////////////////////////////////////////////////////
/////             MerkleAllowlistAmount           /////
///////////////////////////////////////////////////////

abstract contract MerkleAllowlistAmount {
    bytes32 internal _merkleRoot;
    function _setMerkleRoot(bytes32 merkleRoot_) internal virtual {
        _merkleRoot = merkleRoot_;
    }
    function isAllowlisted(address address_, bytes32[] memory proof_,
    uint256 amount_) public view returns (bool) {
        bytes32 _leaf = keccak256(abi.encodePacked(address_, amount_));
        for (uint256 i = 0; i < proof_.length; i++) {
            _leaf = _leaf < proof_[i] ? 
            keccak256(abi.encodePacked(_leaf, proof_[i])) : 
            keccak256(abi.encodePacked(proof_[i], _leaf));
        }
        return _leaf == _merkleRoot;
    }
}

contract GoldSaucerAuction is Ownable, PayableGovernance,
BucketAuction, GoldSaucerChip, MerkleAllowlistAmount {

    // Constructor to set the name, symbol, and gasEvo address
    constructor(address gasEvo_) 
    GoldSaucerChip("Gold Saucer Chip", "GSCHIP") 
    BucketAuction(gasEvo_)
    {}
    
    // Overrides of Functions (ERC1155 / GoldSaucerChip)
    function balanceOf(address owner_, uint256 id_) public view override returns (uint256) {
        // We only return a phantom balance using ID 1
        if (id_ != 1) return 0;
        return  userToBidData[owner_].commitment > 0 ? 1 :
                addressToAllowlistMinted[owner_] > 0 ? 1 : 0;
    }

    // Overrides of Functions (BucketAuction)
    function bid() public override payable {
        BucketAuction.bid();
    }

    // Allowlist 
    event GangMint(address indexed minter, uint256 mintAmount, 
        uint256 newTotalMintAmount, uint256 proofMintAmount);
    
    uint256 public totalAllowlistsMinted;
    uint256 public allowlistMintPrice;
    bool public allowlistMintEnabled;
    
    mapping(address => uint256) public addressToAllowlistMinted;

    function O_setMerkleRoot(bytes32 merkleRoot_) external onlyOwner {
        _setMerkleRoot(merkleRoot_); }
    function O_setAllowListMintEnabled(bool bool_) external onlyOwner {
        allowlistMintEnabled = bool_; }
    function O_setAllowlistMintPrice(uint256 price_) external onlyOwner {
        allowlistMintPrice = price_; }

    function gangMint(uint256 mintAmount_, bytes32[] calldata proof_, 
    uint256 proofMintAmount_) external payable {
        // AllowlistMint must be enabled
        require(allowlistMintEnabled, "Gang Mint not enabled yet!");
        // Allowlist price must be over 0
        require(allowlistMintPrice != 0, "Allowlist price not set!");
        // No smart contracts
        require(msg.sender == tx.origin, "No Smart Contracts!");
        // Merkleproof Checking
        require(isAllowlisted(msg.sender, proof_, proofMintAmount_),
            "You are not allowlisted for this amount!");
        
        // Eligible Amount Checking
        uint256 _alreadyMinted = addressToAllowlistMinted[msg.sender];
        uint256 _requestedMint = mintAmount_;
        uint256 _newTotalMint = _alreadyMinted + _requestedMint;
        require(proofMintAmount_ >= _newTotalMint, "Not enough mints remaining!");

        // Pricing Calculation and Checking
        uint256 _bidRemainders = getRefundAmount(msg.sender);
        uint256 _totalMintCost = allowlistMintPrice * _requestedMint;

        if (_bidRemainders > _totalMintCost) {
            userToBidData[msg.sender].commitment -= uint232(_totalMintCost);
        }

        else {
            require(_totalMintCost == (_bidRemainders + msg.value),
                "Invalid value sent!");

            if (_bidRemainders != 0) {
                userToBidData[msg.sender].refundClaimed = true;
            }
        }

        // Add requestedMint to addressToAllowlistMinted tracker
        addressToAllowlistMinted[msg.sender] += _requestedMint;

        // Emit the Mint event
        emit GangMint(msg.sender, _requestedMint, _newTotalMint, proofMintAmount_);
    }

    // Initialize Chips
    function initializeGoldSaucerChips(address[] calldata addresses_) 
    external onlyOwner {
        uint256 l = addresses_.length;
        for (uint256 i; i < l;) {
            _phantomMintGoldSaucerChip(addresses_[i]);
            unchecked{++i;}
        }    
    }

    // Front-End Function
    function getMintPriceForUser(address minter_, uint256 mintAmount_) public view 
    returns (uint256) {
        uint256 _refundAmount = getRefundAmount(minter_);
        uint256 _totalPrice = allowlistMintPrice * mintAmount_;
        return (_refundAmount >= _totalPrice) ? 
        0 :
        (_totalPrice - _refundAmount);
    }

    // Proxy Padding
    // bytes32[50] private proxyPadding;

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"gasEvo_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":false,"internalType":"bool","name":"approved_","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"bidAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bidderTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bucketTotal","type":"uint256"}],"name":"Bid","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"uint256","name":"finalPrice","type":"uint256"}],"name":"FinalPriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTotalMintAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proofMintAmount","type":"uint256"}],"name":"GangMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"MintProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"refundAmount","type":"uint256"}],"name":"RefundProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":true,"internalType":"address","name":"from_","type":"address"},{"indexed":true,"internalType":"address","name":"to_","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":true,"internalType":"address","name":"from_","type":"address"},{"indexed":true,"internalType":"address","name":"to_","type":"address"},{"indexed":false,"internalType":"uint256","name":"id_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value_","type":"string"},{"indexed":true,"internalType":"uint256","name":"id_","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"GasEvo","outputs":[{"internalType":"contract iGasEvo","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bidders_","type":"address[]"}],"name":"O_processCommits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"O_setAllowListMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"O_setAllowlistMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"O_setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ext_","type":"string"}],"name":"O_setBaseTokenURI_EXT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"O_setBiddingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"finalPrice_","type":"uint256"}],"name":"O_setFinalPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"gasEvo_","type":"address"}],"name":"O_setGasEvo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"O_setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"O_setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"name":"O_setURIOfToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"uriType_","type":"uint256"}],"name":"O_setURIType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"URIType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToAllowlistMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToEmergencyUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"biddingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"uint256","name":"proofMintAmount_","type":"uint256"}],"name":"gangMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"bidder_","type":"address"}],"name":"getEligibleMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"},{"internalType":"uint256","name":"mintAmount_","type":"uint256"}],"name":"getMintPriceForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bidder_","type":"address"}],"name":"getRefundAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses_","type":"address[]"}],"name":"initializeGoldSaucerChips","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minCommit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableGovernanceAddresses","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableGovernanceSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableGovernanceShares","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bidders_","type":"address[]"}],"name":"queryCommitments","outputs":[{"components":[{"internalType":"uint232","name":"commitment","type":"uint232"},{"internalType":"uint16","name":"totalMinted","type":"uint16"},{"internalType":"bool","name":"refundClaimed","type":"bool"}],"internalType":"struct BucketAuction.BidData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reouncePayableGovernancePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetPayableGovernanceShareholders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"shares_","type":"uint256[]"}],"name":"setPayableGovernanceShareholders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllowlistsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockEmergencyFunctionsAsShareholder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userToBidData","outputs":[{"internalType":"uint232","name":"commitment","type":"uint232"},{"internalType":"uint16","name":"totalMinted","type":"uint16"},{"internalType":"bool","name":"refundClaimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewWithdrawAmounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405267016345785d8a000060805260026070553480156200002257600080fd5b5060405162003c4238038062003c42833981016040819052620000459162000197565b604080518082018252601081526f0476f6c642053617563657220436869760841b60208083019182528351808501909452600684526504753434849560d41b9084015260008054336001600160a01b03199182168117909255600180548216909217909155603780549091166001600160a01b0386161790558151919291620000d191606e91620000f1565b508051620000e790606f906020840190620000f1565b5050505062000206565b828054620000ff90620001c9565b90600052602060002090601f0160209004810192826200012357600085556200016e565b82601f106200013e57805160ff19168380011785556200016e565b828001600101855582156200016e579182015b828111156200016e57825182559160200191906001019062000151565b506200017c92915062000180565b5090565b5b808211156200017c576000815560010162000181565b600060208284031215620001aa57600080fd5b81516001600160a01b0381168114620001c257600080fd5b9392505050565b600181811c90821680620001de57607f821691505b602082108114156200020057634e487b7160e01b600052602260045260246000fd5b50919050565b608051613a1962000229600039600081816105aa01526128980152613a196000f3fe6080604052600436106103785760003560e01c806369e138ca116101d1578063b69ef8a811610102578063ed2ecb31116100a0578063f242432a1161006f578063f242432a14610a9c578063f2fde38b14610abc578063f49ed4e714610adc578063fd75b74314610af257600080fd5b8063ed2ecb3114610a1c578063ef92871914610a3c578063efaf07ac14610a5c578063f05c0cf114610a7c57600080fd5b8063d9d2b4cd116100dc578063d9d2b4cd14610995578063dc92f8f0146109aa578063e47fa66e146109bf578063e985e9c5146109e157600080fd5b8063b69ef8a814610942578063b841772514610955578063c87b56dd1461097557600080fd5b80638da5cb5b1161016f578063a22cb46511610149578063a22cb465146108d7578063a6b513ee146108f7578063a91f88351461090d578063ab03bc831461092257600080fd5b80638da5cb5b146108825780638ead734b146108a257806395d89b41146108c257600080fd5b806379de186a116101ab57806379de186a1461081d57806382b493b814610837578063890ee16e1461084d5780638b2998f81461086d57600080fd5b806369e138ca146107bb5780636e9d287b146107e85780637362377b1461080857600080fd5b80632bcbf7cd116102ab5780634e1273f41161024957806357cdfd351161022357806357cdfd351461073b5780635d306f341461075b578063615112aa1461077b57806366dbea831461079b57600080fd5b80634e1273f414610681578063524c7ff8146106ae578063573e7810146106c357600080fd5b80633207ee4c116102855780633207ee4c1461060c5780633a6859df1461062c5780634684d99a146106595780634959f0f51461066c57600080fd5b80632bcbf7cd146105985780632c8c43e5146105cc5780632eb2c2d6146105ec57600080fd5b806314031ffd116103185780631998aeef116102f25780631998aeef1461052a578063227820601461053257806323af31261461055257806327ded4ad1461058257600080fd5b806314031ffd146104b8578063165d8590146104f057806317d946f21461051057600080fd5b80630221e785116103545780630221e7851461044157806306fdde031461046e5780630dccc9ad146104835780630e89341c1461049857600080fd5b806292bb9e146103bc578062fdd58e146103de57806301ffc9a71461041157600080fd5b366103b757604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156103c857600080fd5b506103dc6103d73660046131a5565b610b12565b005b3480156103ea57600080fd5b506103fe6103f9366004613179565b610b53565b6040519081526020015b60405180910390f35b34801561041d57600080fd5b5061043161042c36600461337c565b610bc5565b6040519015158152602001610408565b34801561044d57600080fd5b5061046161045c366004613363565b610c13565b6040516104089190613632565b34801561047a57600080fd5b50610461610cad565b34801561048f57600080fd5b50610461610cba565b3480156104a457600080fd5b506104616104b3366004613363565b610cc7565b3480156104c457600080fd5b506001546104d8906001600160a01b031681565b6040516001600160a01b039091168152602001610408565b3480156104fc57600080fd5b506103dc61050b366004613363565b610de3565b34801561051c57600080fd5b50603a546104319060ff1681565b6103dc610e19565b34801561053e57600080fd5b506103dc61054d366004613363565b610e23565b34801561055e57600080fd5b5061043161056d366004612f25565b60046020526000908152604090205460ff1681565b34801561058e57600080fd5b506103fe60a85481565b3480156105a457600080fd5b506103fe7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d857600080fd5b506103dc6105e73660046133a6565b610e52565b3480156105f857600080fd5b506103dc610607366004612f7b565b610ebb565b34801561061857600080fd5b506103dc61062736600461342d565b610f6d565b34801561063857600080fd5b5061064c6106473660046131a5565b610fdc565b6040516104089190613592565b6103dc6106673660046133db565b611102565b34801561067857600080fd5b506103dc611454565b34801561068d57600080fd5b506106a161069c3660046131e6565b6114f2565b60405161040891906135fa565b3480156106ba57600080fd5b506106a161161e565b3480156106cf57600080fd5b506107116106de366004612f25565b6039602052600090815260409020546001600160e81b03811690600160e81b810461ffff1690600160f81b900460ff1683565b604080516001600160e81b03909416845261ffff9092166020840152151590820152606001610408565b34801561074757600080fd5b506103dc610756366004613348565b61189f565b34801561076757600080fd5b506103fe610776366004612f25565b6118dc565b34801561078757600080fd5b506103fe610796366004613179565b61196b565b3480156107a757600080fd5b506037546104d8906001600160a01b031681565b3480156107c757600080fd5b506103fe6107d6366004612f25565b60ab6020526000908152604090205481565b3480156107f457600080fd5b506103dc6108033660046132ae565b6119ae565b34801561081457600080fd5b506103dc611bd4565b34801561082957600080fd5b5060aa546104319060ff1681565b34801561084357600080fd5b506103fe60705481565b34801561085957600080fd5b506103dc610868366004613363565b611d78565b34801561087957600080fd5b506106a1611e2b565b34801561088e57600080fd5b506000546104d8906001600160a01b031681565b3480156108ae57600080fd5b506103dc6108bd366004612f25565b611e83565b3480156108ce57600080fd5b50610461611ecf565b3480156108e357600080fd5b506103dc6108f2366004613144565b611edc565b34801561090357600080fd5b506103fe60385481565b34801561091957600080fd5b506103dc611f21565b34801561092e57600080fd5b506103fe61093d366004612f25565b611f5d565b34801561094e57600080fd5b50476103fe565b34801561096157600080fd5b506103dc6109703660046131a5565b611fea565b34801561098157600080fd5b50610461610990366004613363565b61205d565b3480156109a157600080fd5b506103dc612068565b3480156109b657600080fd5b506103dc612127565b3480156109cb57600080fd5b506109d4612214565b6040516104089190613545565b3480156109ed57600080fd5b506104316109fc366004612f42565b606d60209081526000928352604080842090915290825290205460ff1681565b348015610a2857600080fd5b506103dc610a37366004613363565b612275565b348015610a4857600080fd5b506103dc610a573660046133a6565b6122a8565b348015610a6857600080fd5b506103dc610a77366004613348565b612311565b348015610a8857600080fd5b50610431610a97366004613090565b61234e565b348015610aa857600080fd5b506103dc610ab7366004613028565b61247a565b348015610ac857600080fd5b506103dc610ad7366004612f25565b612504565b348015610ae857600080fd5b506103fe60a95481565b348015610afe57600080fd5b506103dc610b0d3660046133a6565b612550565b6000546001600160a01b03163314610b455760405162461bcd60e51b8152600401610b3c906136f0565b60405180910390fd5b610b4f82826125b9565b5050565b600081600114610b6557506000610bbf565b6001600160a01b0383166000908152603960205260409020546001600160e81b0316610bb6576001600160a01b038316600090815260ab6020526040902054610baf576000610bb9565b6001610bb9565b60015b60ff1690505b92915050565b60006301ffc9a760e01b6001600160e01b031983161480610bf65750636cdb3d1360e11b6001600160e01b03198316145b80610bbf5750506001600160e01b0319166303a24d0760e21b1490565b60746020526000908152604090208054610c2c906138f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c58906138f6565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b505050505081565b606e8054610c2c906138f6565b60718054610c2c906138f6565b606060705460011415610d665760718054610ce1906138f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0d906138f6565b8015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b820191906000526020600020905b815481529060010190602001808311610d3d57829003601f168201915b50505050509050919050565b60705460021415610da6576072610d7c8361261c565b6073604051602001610d9093929190613512565b6040516020818303038152906040529050919050565b60705460031415610dca5760008281526074602052604090208054610ce1906138f6565b505060408051602081019091526000815290565b919050565b6000546001600160a01b03163314610e0d5760405162461bcd60e51b8152600401610b3c906136f0565b610e168160a755565b50565b610e2161271a565b565b6000546001600160a01b03163314610e4d5760405162461bcd60e51b8152600401610b3c906136f0565b60a955565b6000546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610b3c906136f0565b610b4f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061297892505050565b815115610eda5760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b03851615610f015760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b03841615610f285760405162461bcd60e51b8152600401610b3c90613742565b825115610f475760405162461bcd60e51b8152600401610b3c90613742565b805115610f665760405162461bcd60e51b8152600401610b3c90613742565b5050505050565b6000546001600160a01b03163314610f975760405162461bcd60e51b8152600401610b3c906136f0565b610fd78383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061298b92505050565b505050565b6060816000816001600160401b03811115610ff957610ff96139b8565b60405190808252806020026020018201604052801561104457816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816110175790505b50905060005b828110156110f95760396000878784818110611068576110686139a2565b905060200201602081019061107d9190612f25565b6001600160a01b031681526020808201929092526040908101600020815160608101835290546001600160e81b0381168252600160e81b810461ffff1693820193909352600160f81b90920460ff1615159082015282518390839081106110e6576110e66139a2565b602090810291909101015260010161104a565b50949350505050565b60aa5460ff166111545760405162461bcd60e51b815260206004820152601a60248201527f47616e67204d696e74206e6f7420656e61626c656420796574210000000000006044820152606401610b3c565b60a9546111a35760405162461bcd60e51b815260206004820152601860248201527f416c6c6f776c697374207072696365206e6f74207365742100000000000000006044820152606401610b3c565b3332146111e85760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610b3c565b6112273384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525086925061234e915050565b6112845760405162461bcd60e51b815260206004820152602860248201527f596f7520617265206e6f7420616c6c6f776c697374656420666f72207468697360448201526720616d6f756e742160c01b6064820152608401610b3c565b33600090815260ab60205260408120549085906112a18284613829565b9050808410156112f35760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f756768206d696e74732072656d61696e696e672100000000006044820152606401610b3c565b60006112fe336118dc565b905060008360a9546113109190613855565b90508082111561136b5733600090815260396020526040812080548392906113429084906001600160e81b0316613874565b92506101000a8154816001600160e81b0302191690836001600160e81b031602179055506113e2565b6113753483613829565b81146113b95760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610b3c565b81156113e25733600090815260396020526040902080546001600160f81b0316600160f81b1790555b33600090815260ab602052604081208054869290611401908490613829565b9091555050604080518581526020810185905290810187905233907f0b19bd03e773d8e9f99006165dd834b29690f8afb02b97bfb861881992e4ed5f9060600160405180910390a2505050505050505050565b6001546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610b3c90613665565b600254156114be5760028054806114975761149761398c565b600082815260209020810160001990810180546001600160a01b031916905501905561147e565b60035415610e215760038054806114d7576114d761398c565b600190038181906000526020600020016000905590556114be565b606081518351146115585760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015269206d69736d617463682160b01b6064820152608401610b3c565b600083516001600160401b03811115611573576115736139b8565b60405190808252806020026020018201604052801561159c578160200160208202803683370190505b50905060005b8451811015611616576115e78582815181106115c0576115c06139a2565b60200260200101518583815181106115da576115da6139a2565b6020026020010151610b53565b8282815181106115f9576115f96139a2565b60209081029190910101528061160e81613931565b9150506115a2565b509392505050565b6000546060906001600160a01b0316331461164b5760405162461bcd60e51b8152600401610b3c906136f0565b6002541580159061165d575060035415155b6116a95760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610b3c565b600354600254146116cc5760405162461bcd60e51b8152600401610b3c906136ad565b6000805b60035481101561171757600381815481106116ed576116ed6139a2565b9060005260206000200154826117039190613829565b91508061170f81613931565b9150506116d0565b50806103e8146117395760405162461bcd60e51b8152600401610b3c9061376a565b60028054479160009161174b91613829565b6001600160401b03811115611762576117626139b8565b60405190808252806020026020018201604052801561178b578160200160208202803683370190505b50905060005b600254811015611800576103e8600382815481106117b1576117b16139a2565b9060005260206000200154846117c79190613855565b6117d19190613841565b8282815181106117e3576117e36139a2565b6020908102919091010152806117f881613931565b915050611791565b506002548151839183918110611818576118186139a2565b60200260200101818152505060005b60025481101561189757818181518110611843576118436139a2565b602002602001015182600280549050600161185e9190613829565b8151811061186e5761186e6139a2565b602002602001018181516118829190613829565b9052508061188f81613931565b915050611827565b509250505090565b6000546001600160a01b031633146118c95760405162461bcd60e51b8152600401610b3c906136f0565b60aa805460ff1916911515919091179055565b6000603854600014156119015760405162461bcd60e51b8152600401610b3c90613714565b6001600160a01b038216600090815260396020526040812054603854611930916001600160e81b0316906129aa565b6001600160a01b038416600090815260396020526040902054909150600160f81b900460ff1615611962576000611964565b805b9392505050565b600080611977846118dc565b905060008360a9546119899190613855565b9050808210156119a25761199d828261389c565b6119a5565b60005b95945050505050565b6001546001600160a01b031633146119d85760405162461bcd60e51b8152600401610b3c90613665565b6002541580156119e85750600354155b611a5a5760405162461bcd60e51b815260206004820152603a60248201527f50617961626c6520476f7665726e616e636520616c726561647920736574212060448201527f546f2073657420616761696e2c207265736574206669727374210000000000006064820152608401610b3c565b8051825114611ab75760405162461bcd60e51b815260206004820152602360248201527f4164647265737320616e6420536861726573206c656e677468206d69736d617460448201526263682160e81b6064820152608401610b3c565b6000805b8351811015611b8257828181518110611ad657611ad66139a2565b602002602001015182611ae99190613829565b91506002848281518110611aff57611aff6139a2565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251600390849083908110611b5157611b516139a2565b6020908102919091018101518254600181018455600093845291909220015580611b7a81613931565b915050611abb565b50806103e814610fd75760405162461bcd60e51b815260206004820152601960248201527f546f74616c20536861726573206973206e6f74203130303021000000000000006044820152606401610b3c565b6000546001600160a01b03163314611bfe5760405162461bcd60e51b8152600401610b3c906136f0565b60025415801590611c10575060035415155b611c5c5760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610b3c565b60035460025414611c7f5760405162461bcd60e51b8152600401610b3c906136ad565b6000805b600354811015611cca5760038181548110611ca057611ca06139a2565b906000526020600020015482611cb69190613829565b915080611cc281613931565b915050611c83565b50806103e814611cec5760405162461bcd60e51b8152600401610b3c9061376a565b4760005b600254811015610fd75760006103e860038381548110611d1257611d126139a2565b906000526020600020015484611d289190613855565b611d329190613841565b9050611d6560028381548110611d4a57611d4a6139a2565b6000918252602090912001546001600160a01b0316826129b6565b5080611d7081613931565b915050611cf0565b6000546001600160a01b03163314611da25760405162461bcd60e51b8152600401610b3c906136f0565b603a5460ff1615611dea5760405162461bcd60e51b815260206004820152601260248201527142696464696e67206973206163746976652160701b6044820152606401610b3c565b603881905560408051338152602081018390527fc4e351e665d495d2bb813ba452c27e791a4127ce7e3fdd4a0bfc01ce83881576910160405180910390a150565b60606003805480602002602001604051908101604052809291908181526020018280548015611e7957602002820191906000526020600020905b815481526020019060010190808311611e65575b5050505050905090565b6000546001600160a01b03163314611ead5760405162461bcd60e51b8152600401610b3c906136f0565b603780546001600160a01b0319166001600160a01b0392909216919091179055565b606f8054610c2c906138f6565b8015611efa5760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b03821615610b4f5760405162461bcd60e51b8152600401610b3c90613742565b6001546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610b3c90613665565b600180546001600160a01b0319169055565b600060385460001415611f825760405162461bcd60e51b8152600401610b3c90613714565b6001600160a01b038216600090815260396020526040812054603854611fb1916001600160e81b031690612a4b565b6001600160a01b038416600090815260396020526040902054909150600160e81b900461ffff16611fe2818361389c565b949350505050565b6000546001600160a01b031633146120145760405162461bcd60e51b8152600401610b3c906136f0565b8060005b818110156120575761204f848483818110612035576120356139a2565b905060200201602081019061204a9190612f25565b612a57565b600101612018565b50505050565b6060610bbf82610cc7565b6000805b6002548110156120bc5760028181548110612089576120896139a2565b6000918252602090912001546001600160a01b03163314156120aa57600191505b806120b481613931565b91505061206c565b508061210a5760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742061207368617265686f6c646572210000000000006044820152606401610b3c565b50336000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146121515760405162461bcd60e51b8152600401610b3c906136f0565b60005b600254811015612209576004600060028381548110612175576121756139a2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166121f75760405162461bcd60e51b815260206004820152602560248201527f456d657267656e63792046756e6374696f6e7320617265206e6f7420756e6c6f604482015264636b65642160d81b6064820152608401610b3c565b8061220181613931565b915050612154565b50610e2133476129b6565b60606002805480602002602001604051908101604052809291908181526020018280548015611e7957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161224e575050505050905090565b6000546001600160a01b0316331461229f5760405162461bcd60e51b8152600401610b3c906136f0565b610e1681607055565b6000546001600160a01b031633146122d25760405162461bcd60e51b8152600401610b3c906136f0565b610b4f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612aa392505050565b6000546001600160a01b0316331461233b5760405162461bcd60e51b8152600401610b3c906136f0565b603a805460ff1916911515919091179055565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101829052600090819060540160405160208183030381529060405280519060200120905060005b845181101561246d578481815181106123af576123af6139a2565b6020026020010151821061240d578481815181106123cf576123cf6139a2565b6020026020010151826040516020016123f2929190918252602082015260400190565b60405160208183030381529060405280519060200120612459565b81858281518110612420576124206139a2565b6020026020010151604051602001612442929190918252602082015260400190565b604051602081830303815290604052805190602001205b91508061246581613931565b915050612394565b5060a75414949350505050565b81156124985760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b038516156124bf5760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b038416156124e65760405162461bcd60e51b8152600401610b3c90613742565b8215610f475760405162461bcd60e51b8152600401610b3c90613742565b6000546001600160a01b0316331461252e5760405162461bcd60e51b8152600401610b3c906136f0565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461257a5760405162461bcd60e51b8152600401610b3c906136f0565b610b4f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ab692505050565b603854806125d95760405162461bcd60e51b8152600401610b3c90613714565b60005b82811015612057576126148484838181106125f9576125f96139a2565b905060200201602081019061260e9190612f25565b83612ac9565b6001016125dc565b6060816126405750506040805180820190915260018152600360fc1b602082015290565b8160005b811561266a578061265481613931565b91506126639050600a83613841565b9150612644565b6000816001600160401b03811115612684576126846139b8565b6040519080825280601f01601f1916602001820160405280156126ae576020820181803683370190505b5090505b8415611fe257816126c2816138df565b92506126d19050600a8661394c565b6126dc906030613829565b60f81b8183815181106126f1576126f16139a2565b60200101906001600160f81b031916908160001a905350612713600a86613841565b94506126b2565b603a5460ff166127655760405162461bcd60e51b815260206004820152601660248201527542696464696e67206973206e6f74206163746976652160501b6044820152606401610b3c565b3332146127aa5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610b3c565b6127bb66038d7ea4c680003461394c565b156128205760405162461bcd60e51b815260206004820152602f60248201527f506c656173652062696420776974682061206d696e696d756d20646563696d6160448201526e6c206f6620302e303031204554482160881b6064820152608401610b3c565b600034116128705760405162461bcd60e51b815260206004820152601a60248201527f506c65617365206269642077697468206d73672e76616c7565210000000000006044820152606401610b3c565b336000908152603960205260408120546001600160e81b0316906128943483613829565b90507f00000000000000000000000000000000000000000000000000000000000000008110156129065760405162461bcd60e51b815260206004820152601960248201527f436f6d6d69746d656e742062656c6f77206d696e696d756d21000000000000006044820152606401610b3c565b3360008181526039602090815260409182902080546001600160e81b0319166001600160e81b0386161790558151928352349083015281018290524760608201527f4dcc013473324698bfbe263facec4ea4b1bc43624236542deabec62c2122b3059060800160405180910390a15050565b8051610b4f906073906020840190612d0f565b60008281526074602090815260409091208251610fd792840190612d0f565b6000611964828461394c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612a03576040519150601f19603f3d011682016040523d82523d6000602084013e612a08565b606091505b5050905080610fd75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610b3c565b60006119648284613841565b60408051600180825260208201526001600160a01b0383169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450565b8051610b4f906071906020840190612d0f565b8051610b4f906072906020840190612d0f565b6001600160a01b0382166000908152603960209081526040808320815160608101835290546001600160e81b038116808352600160e81b820461ffff1694830194909452600160f81b900460ff1615159181019190915291612b2b82856129aa565b90506000612b398386612a4b565b90508360400151612b4e57612b4e8683612b8a565b836020015161ffff16811115612b82576000846020015161ffff1682612b74919061389c565b9050612b808782612c0c565b505b505050505050565b6001600160a01b038216600090815260396020526040902080546001600160f81b0316600160f81b1790558015612bc557612bc582826129b6565b816001600160a01b03167f3367befd2b2f39615cd79917c2153263c4af1d3945ec003e5d5bfc13a8d8583382604051612c0091815260200190565b60405180910390a25050565b6001600160a01b0382166000908152603960205260409020805482918291601d90612c43908490600160e81b900461ffff16613803565b825461ffff9182166101009390930a928302919092021990911617905550603754604051630a9edcc560e11b81526001600160a01b038581166004830152602482018590529091169063153db98a90604401600060405180830381600087803b158015612caf57600080fd5b505af1158015612cc3573d6000803e3d6000fd5b50505050826001600160a01b03167fbbd7e4ffedd993111bd1076f8021636e6f4ae7434532a639172744cd349857d483604051612d0291815260200190565b60405180910390a2505050565b828054612d1b906138f6565b90600052602060002090601f016020900481019282612d3d5760008555612d83565b82601f10612d5657805160ff1916838001178555612d83565b82800160010185558215612d83579182015b82811115612d83578251825591602001919060010190612d68565b50612d8f929150612d93565b5090565b5b80821115612d8f5760008155600101612d94565b60008083601f840112612dba57600080fd5b5081356001600160401b03811115612dd157600080fd5b6020830191508360208260051b8501011115612dec57600080fd5b9250929050565b600082601f830112612e0457600080fd5b81356020612e19612e14836137e0565b6137b0565b80838252828201915082860187848660051b8901011115612e3957600080fd5b60005b85811015612e5857813584529284019290840190600101612e3c565b5090979650505050505050565b80358015158114610dde57600080fd5b600082601f830112612e8657600080fd5b81356001600160401b03811115612e9f57612e9f6139b8565b612eb2601f8201601f19166020016137b0565b818152846020838601011115612ec757600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612ef657600080fd5b5081356001600160401b03811115612f0d57600080fd5b602083019150836020828501011115612dec57600080fd5b600060208284031215612f3757600080fd5b8135611964816139ce565b60008060408385031215612f5557600080fd5b8235612f60816139ce565b91506020830135612f70816139ce565b809150509250929050565b600080600080600060a08688031215612f9357600080fd5b8535612f9e816139ce565b94506020860135612fae816139ce565b935060408601356001600160401b0380821115612fca57600080fd5b612fd689838a01612df3565b94506060880135915080821115612fec57600080fd5b612ff889838a01612df3565b9350608088013591508082111561300e57600080fd5b5061301b88828901612e75565b9150509295509295909350565b600080600080600060a0868803121561304057600080fd5b853561304b816139ce565b9450602086013561305b816139ce565b9350604086013592506060860135915060808601356001600160401b0381111561308457600080fd5b61301b88828901612e75565b6000806000606084860312156130a557600080fd5b83356130b0816139ce565b92506020848101356001600160401b038111156130cc57600080fd5b8501601f810187136130dd57600080fd5b80356130eb612e14826137e0565b8082825284820191508484018a868560051b870101111561310b57600080fd5b600094505b8385101561312e578035835260019490940193918501918501613110565b5096999698505050506040949094013593505050565b6000806040838503121561315757600080fd5b8235613162816139ce565b915061317060208401612e65565b90509250929050565b6000806040838503121561318c57600080fd5b8235613197816139ce565b946020939093013593505050565b600080602083850312156131b857600080fd5b82356001600160401b038111156131ce57600080fd5b6131da85828601612da8565b90969095509350505050565b600080604083850312156131f957600080fd5b82356001600160401b038082111561321057600080fd5b818501915085601f83011261322457600080fd5b81356020613234612e14836137e0565b8083825282820191508286018a848660051b890101111561325457600080fd5b600096505b8487101561328057803561326c816139ce565b835260019690960195918301918301613259565b509650508601359250508082111561329757600080fd5b506132a485828601612df3565b9150509250929050565b600080604083850312156132c157600080fd5b82356001600160401b03808211156132d857600080fd5b818501915085601f8301126132ec57600080fd5b813560206132fc612e14836137e0565b8083825282820191508286018a848660051b890101111561331c57600080fd5b600096505b84871015613280578035613334816139ce565b835260019690960195918301918301613321565b60006020828403121561335a57600080fd5b61196482612e65565b60006020828403121561337557600080fd5b5035919050565b60006020828403121561338e57600080fd5b81356001600160e01b03198116811461196457600080fd5b600080602083850312156133b957600080fd5b82356001600160401b038111156133cf57600080fd5b6131da85828601612ee4565b600080600080606085870312156133f157600080fd5b8435935060208501356001600160401b0381111561340e57600080fd5b61341a87828801612da8565b9598909750949560400135949350505050565b60008060006040848603121561344257600080fd5b8335925060208401356001600160401b0381111561345f57600080fd5b61346b86828701612ee4565b9497909650939450505050565b8054600090600181811c908083168061349257607f831692505b60208084108214156134b457634e487b7160e01b600052602260045260246000fd5b8180156134c857600181146134d957613506565b60ff19861689528489019650613506565b60008881526020902060005b868110156134fe5781548b8201529085019083016134e5565b505084890196505b50505050505092915050565b600061351e8286613478565b845161352e8183602089016138b3565b61353a81830186613478565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135865783516001600160a01b031683529284019291840191600101613561565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b828110156135ed57815180516001600160e81b031685528681015161ffff1687860152850151151585850152606090930192908501906001016135af565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358657835183529284019291840191600101613616565b60208152600082518060208401526136518160408501602087016138b3565b601f01601f19169190910160400192915050565b60208082526028908201527f50617961626c65476f7665726e616e63653a2043616c6c6572206973206e6f74604082015267205365747465722160c01b606082015260800190565b60208082526023908201527f50617961626c6520676f7665726e616e6365206c656e677468206d69736d617460408201526263682160e81b606082015260800190565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b60208082526014908201527346696e616c205072696365206e6f74207365742160601b604082015260600190565b6020808252600e908201526d14d0950e8814dbdd5b189bdd5b9960921b604082015260600190565b60208082526026908201527f50617961626c6520476f7665726e616e636520536861726573206973206e6f7460408201526520313030302160d01b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156137d8576137d86139b8565b604052919050565b60006001600160401b038211156137f9576137f96139b8565b5060051b60200190565b600061ffff80831681851680830382111561382057613820613960565b01949350505050565b6000821982111561383c5761383c613960565b500190565b60008261385057613850613976565b500490565b600081600019048311821515161561386f5761386f613960565b500290565b60006001600160e81b038381169083168181101561389457613894613960565b039392505050565b6000828210156138ae576138ae613960565b500390565b60005b838110156138ce5781810151838201526020016138b6565b838111156120575750506000910152565b6000816138ee576138ee613960565b506000190190565b600181811c9082168061390a57607f821691505b6020821081141561392b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561394557613945613960565b5060010190565b60008261395b5761395b613976565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e1657600080fdfea2646970667358221220df0968c97ec7395b79e1f84986356aedfa10f9f32c7dfa28f4876db5c37150d264736f6c63430008070033000000000000000000000000052a5cc32aa8b219ddbeaf63fd80aa67948d1918

Deployed Bytecode

0x6080604052600436106103785760003560e01c806369e138ca116101d1578063b69ef8a811610102578063ed2ecb31116100a0578063f242432a1161006f578063f242432a14610a9c578063f2fde38b14610abc578063f49ed4e714610adc578063fd75b74314610af257600080fd5b8063ed2ecb3114610a1c578063ef92871914610a3c578063efaf07ac14610a5c578063f05c0cf114610a7c57600080fd5b8063d9d2b4cd116100dc578063d9d2b4cd14610995578063dc92f8f0146109aa578063e47fa66e146109bf578063e985e9c5146109e157600080fd5b8063b69ef8a814610942578063b841772514610955578063c87b56dd1461097557600080fd5b80638da5cb5b1161016f578063a22cb46511610149578063a22cb465146108d7578063a6b513ee146108f7578063a91f88351461090d578063ab03bc831461092257600080fd5b80638da5cb5b146108825780638ead734b146108a257806395d89b41146108c257600080fd5b806379de186a116101ab57806379de186a1461081d57806382b493b814610837578063890ee16e1461084d5780638b2998f81461086d57600080fd5b806369e138ca146107bb5780636e9d287b146107e85780637362377b1461080857600080fd5b80632bcbf7cd116102ab5780634e1273f41161024957806357cdfd351161022357806357cdfd351461073b5780635d306f341461075b578063615112aa1461077b57806366dbea831461079b57600080fd5b80634e1273f414610681578063524c7ff8146106ae578063573e7810146106c357600080fd5b80633207ee4c116102855780633207ee4c1461060c5780633a6859df1461062c5780634684d99a146106595780634959f0f51461066c57600080fd5b80632bcbf7cd146105985780632c8c43e5146105cc5780632eb2c2d6146105ec57600080fd5b806314031ffd116103185780631998aeef116102f25780631998aeef1461052a578063227820601461053257806323af31261461055257806327ded4ad1461058257600080fd5b806314031ffd146104b8578063165d8590146104f057806317d946f21461051057600080fd5b80630221e785116103545780630221e7851461044157806306fdde031461046e5780630dccc9ad146104835780630e89341c1461049857600080fd5b806292bb9e146103bc578062fdd58e146103de57806301ffc9a71461041157600080fd5b366103b757604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156103c857600080fd5b506103dc6103d73660046131a5565b610b12565b005b3480156103ea57600080fd5b506103fe6103f9366004613179565b610b53565b6040519081526020015b60405180910390f35b34801561041d57600080fd5b5061043161042c36600461337c565b610bc5565b6040519015158152602001610408565b34801561044d57600080fd5b5061046161045c366004613363565b610c13565b6040516104089190613632565b34801561047a57600080fd5b50610461610cad565b34801561048f57600080fd5b50610461610cba565b3480156104a457600080fd5b506104616104b3366004613363565b610cc7565b3480156104c457600080fd5b506001546104d8906001600160a01b031681565b6040516001600160a01b039091168152602001610408565b3480156104fc57600080fd5b506103dc61050b366004613363565b610de3565b34801561051c57600080fd5b50603a546104319060ff1681565b6103dc610e19565b34801561053e57600080fd5b506103dc61054d366004613363565b610e23565b34801561055e57600080fd5b5061043161056d366004612f25565b60046020526000908152604090205460ff1681565b34801561058e57600080fd5b506103fe60a85481565b3480156105a457600080fd5b506103fe7f000000000000000000000000000000000000000000000000016345785d8a000081565b3480156105d857600080fd5b506103dc6105e73660046133a6565b610e52565b3480156105f857600080fd5b506103dc610607366004612f7b565b610ebb565b34801561061857600080fd5b506103dc61062736600461342d565b610f6d565b34801561063857600080fd5b5061064c6106473660046131a5565b610fdc565b6040516104089190613592565b6103dc6106673660046133db565b611102565b34801561067857600080fd5b506103dc611454565b34801561068d57600080fd5b506106a161069c3660046131e6565b6114f2565b60405161040891906135fa565b3480156106ba57600080fd5b506106a161161e565b3480156106cf57600080fd5b506107116106de366004612f25565b6039602052600090815260409020546001600160e81b03811690600160e81b810461ffff1690600160f81b900460ff1683565b604080516001600160e81b03909416845261ffff9092166020840152151590820152606001610408565b34801561074757600080fd5b506103dc610756366004613348565b61189f565b34801561076757600080fd5b506103fe610776366004612f25565b6118dc565b34801561078757600080fd5b506103fe610796366004613179565b61196b565b3480156107a757600080fd5b506037546104d8906001600160a01b031681565b3480156107c757600080fd5b506103fe6107d6366004612f25565b60ab6020526000908152604090205481565b3480156107f457600080fd5b506103dc6108033660046132ae565b6119ae565b34801561081457600080fd5b506103dc611bd4565b34801561082957600080fd5b5060aa546104319060ff1681565b34801561084357600080fd5b506103fe60705481565b34801561085957600080fd5b506103dc610868366004613363565b611d78565b34801561087957600080fd5b506106a1611e2b565b34801561088e57600080fd5b506000546104d8906001600160a01b031681565b3480156108ae57600080fd5b506103dc6108bd366004612f25565b611e83565b3480156108ce57600080fd5b50610461611ecf565b3480156108e357600080fd5b506103dc6108f2366004613144565b611edc565b34801561090357600080fd5b506103fe60385481565b34801561091957600080fd5b506103dc611f21565b34801561092e57600080fd5b506103fe61093d366004612f25565b611f5d565b34801561094e57600080fd5b50476103fe565b34801561096157600080fd5b506103dc6109703660046131a5565b611fea565b34801561098157600080fd5b50610461610990366004613363565b61205d565b3480156109a157600080fd5b506103dc612068565b3480156109b657600080fd5b506103dc612127565b3480156109cb57600080fd5b506109d4612214565b6040516104089190613545565b3480156109ed57600080fd5b506104316109fc366004612f42565b606d60209081526000928352604080842090915290825290205460ff1681565b348015610a2857600080fd5b506103dc610a37366004613363565b612275565b348015610a4857600080fd5b506103dc610a573660046133a6565b6122a8565b348015610a6857600080fd5b506103dc610a77366004613348565b612311565b348015610a8857600080fd5b50610431610a97366004613090565b61234e565b348015610aa857600080fd5b506103dc610ab7366004613028565b61247a565b348015610ac857600080fd5b506103dc610ad7366004612f25565b612504565b348015610ae857600080fd5b506103fe60a95481565b348015610afe57600080fd5b506103dc610b0d3660046133a6565b612550565b6000546001600160a01b03163314610b455760405162461bcd60e51b8152600401610b3c906136f0565b60405180910390fd5b610b4f82826125b9565b5050565b600081600114610b6557506000610bbf565b6001600160a01b0383166000908152603960205260409020546001600160e81b0316610bb6576001600160a01b038316600090815260ab6020526040902054610baf576000610bb9565b6001610bb9565b60015b60ff1690505b92915050565b60006301ffc9a760e01b6001600160e01b031983161480610bf65750636cdb3d1360e11b6001600160e01b03198316145b80610bbf5750506001600160e01b0319166303a24d0760e21b1490565b60746020526000908152604090208054610c2c906138f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c58906138f6565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b505050505081565b606e8054610c2c906138f6565b60718054610c2c906138f6565b606060705460011415610d665760718054610ce1906138f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0d906138f6565b8015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b820191906000526020600020905b815481529060010190602001808311610d3d57829003601f168201915b50505050509050919050565b60705460021415610da6576072610d7c8361261c565b6073604051602001610d9093929190613512565b6040516020818303038152906040529050919050565b60705460031415610dca5760008281526074602052604090208054610ce1906138f6565b505060408051602081019091526000815290565b919050565b6000546001600160a01b03163314610e0d5760405162461bcd60e51b8152600401610b3c906136f0565b610e168160a755565b50565b610e2161271a565b565b6000546001600160a01b03163314610e4d5760405162461bcd60e51b8152600401610b3c906136f0565b60a955565b6000546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610b3c906136f0565b610b4f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061297892505050565b815115610eda5760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b03851615610f015760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b03841615610f285760405162461bcd60e51b8152600401610b3c90613742565b825115610f475760405162461bcd60e51b8152600401610b3c90613742565b805115610f665760405162461bcd60e51b8152600401610b3c90613742565b5050505050565b6000546001600160a01b03163314610f975760405162461bcd60e51b8152600401610b3c906136f0565b610fd78383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061298b92505050565b505050565b6060816000816001600160401b03811115610ff957610ff96139b8565b60405190808252806020026020018201604052801561104457816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816110175790505b50905060005b828110156110f95760396000878784818110611068576110686139a2565b905060200201602081019061107d9190612f25565b6001600160a01b031681526020808201929092526040908101600020815160608101835290546001600160e81b0381168252600160e81b810461ffff1693820193909352600160f81b90920460ff1615159082015282518390839081106110e6576110e66139a2565b602090810291909101015260010161104a565b50949350505050565b60aa5460ff166111545760405162461bcd60e51b815260206004820152601a60248201527f47616e67204d696e74206e6f7420656e61626c656420796574210000000000006044820152606401610b3c565b60a9546111a35760405162461bcd60e51b815260206004820152601860248201527f416c6c6f776c697374207072696365206e6f74207365742100000000000000006044820152606401610b3c565b3332146111e85760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610b3c565b6112273384848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525086925061234e915050565b6112845760405162461bcd60e51b815260206004820152602860248201527f596f7520617265206e6f7420616c6c6f776c697374656420666f72207468697360448201526720616d6f756e742160c01b6064820152608401610b3c565b33600090815260ab60205260408120549085906112a18284613829565b9050808410156112f35760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f756768206d696e74732072656d61696e696e672100000000006044820152606401610b3c565b60006112fe336118dc565b905060008360a9546113109190613855565b90508082111561136b5733600090815260396020526040812080548392906113429084906001600160e81b0316613874565b92506101000a8154816001600160e81b0302191690836001600160e81b031602179055506113e2565b6113753483613829565b81146113b95760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610b3c565b81156113e25733600090815260396020526040902080546001600160f81b0316600160f81b1790555b33600090815260ab602052604081208054869290611401908490613829565b9091555050604080518581526020810185905290810187905233907f0b19bd03e773d8e9f99006165dd834b29690f8afb02b97bfb861881992e4ed5f9060600160405180910390a2505050505050505050565b6001546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610b3c90613665565b600254156114be5760028054806114975761149761398c565b600082815260209020810160001990810180546001600160a01b031916905501905561147e565b60035415610e215760038054806114d7576114d761398c565b600190038181906000526020600020016000905590556114be565b606081518351146115585760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015269206d69736d617463682160b01b6064820152608401610b3c565b600083516001600160401b03811115611573576115736139b8565b60405190808252806020026020018201604052801561159c578160200160208202803683370190505b50905060005b8451811015611616576115e78582815181106115c0576115c06139a2565b60200260200101518583815181106115da576115da6139a2565b6020026020010151610b53565b8282815181106115f9576115f96139a2565b60209081029190910101528061160e81613931565b9150506115a2565b509392505050565b6000546060906001600160a01b0316331461164b5760405162461bcd60e51b8152600401610b3c906136f0565b6002541580159061165d575060035415155b6116a95760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610b3c565b600354600254146116cc5760405162461bcd60e51b8152600401610b3c906136ad565b6000805b60035481101561171757600381815481106116ed576116ed6139a2565b9060005260206000200154826117039190613829565b91508061170f81613931565b9150506116d0565b50806103e8146117395760405162461bcd60e51b8152600401610b3c9061376a565b60028054479160009161174b91613829565b6001600160401b03811115611762576117626139b8565b60405190808252806020026020018201604052801561178b578160200160208202803683370190505b50905060005b600254811015611800576103e8600382815481106117b1576117b16139a2565b9060005260206000200154846117c79190613855565b6117d19190613841565b8282815181106117e3576117e36139a2565b6020908102919091010152806117f881613931565b915050611791565b506002548151839183918110611818576118186139a2565b60200260200101818152505060005b60025481101561189757818181518110611843576118436139a2565b602002602001015182600280549050600161185e9190613829565b8151811061186e5761186e6139a2565b602002602001018181516118829190613829565b9052508061188f81613931565b915050611827565b509250505090565b6000546001600160a01b031633146118c95760405162461bcd60e51b8152600401610b3c906136f0565b60aa805460ff1916911515919091179055565b6000603854600014156119015760405162461bcd60e51b8152600401610b3c90613714565b6001600160a01b038216600090815260396020526040812054603854611930916001600160e81b0316906129aa565b6001600160a01b038416600090815260396020526040902054909150600160f81b900460ff1615611962576000611964565b805b9392505050565b600080611977846118dc565b905060008360a9546119899190613855565b9050808210156119a25761199d828261389c565b6119a5565b60005b95945050505050565b6001546001600160a01b031633146119d85760405162461bcd60e51b8152600401610b3c90613665565b6002541580156119e85750600354155b611a5a5760405162461bcd60e51b815260206004820152603a60248201527f50617961626c6520476f7665726e616e636520616c726561647920736574212060448201527f546f2073657420616761696e2c207265736574206669727374210000000000006064820152608401610b3c565b8051825114611ab75760405162461bcd60e51b815260206004820152602360248201527f4164647265737320616e6420536861726573206c656e677468206d69736d617460448201526263682160e81b6064820152608401610b3c565b6000805b8351811015611b8257828181518110611ad657611ad66139a2565b602002602001015182611ae99190613829565b91506002848281518110611aff57611aff6139a2565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251600390849083908110611b5157611b516139a2565b6020908102919091018101518254600181018455600093845291909220015580611b7a81613931565b915050611abb565b50806103e814610fd75760405162461bcd60e51b815260206004820152601960248201527f546f74616c20536861726573206973206e6f74203130303021000000000000006044820152606401610b3c565b6000546001600160a01b03163314611bfe5760405162461bcd60e51b8152600401610b3c906136f0565b60025415801590611c10575060035415155b611c5c5760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610b3c565b60035460025414611c7f5760405162461bcd60e51b8152600401610b3c906136ad565b6000805b600354811015611cca5760038181548110611ca057611ca06139a2565b906000526020600020015482611cb69190613829565b915080611cc281613931565b915050611c83565b50806103e814611cec5760405162461bcd60e51b8152600401610b3c9061376a565b4760005b600254811015610fd75760006103e860038381548110611d1257611d126139a2565b906000526020600020015484611d289190613855565b611d329190613841565b9050611d6560028381548110611d4a57611d4a6139a2565b6000918252602090912001546001600160a01b0316826129b6565b5080611d7081613931565b915050611cf0565b6000546001600160a01b03163314611da25760405162461bcd60e51b8152600401610b3c906136f0565b603a5460ff1615611dea5760405162461bcd60e51b815260206004820152601260248201527142696464696e67206973206163746976652160701b6044820152606401610b3c565b603881905560408051338152602081018390527fc4e351e665d495d2bb813ba452c27e791a4127ce7e3fdd4a0bfc01ce83881576910160405180910390a150565b60606003805480602002602001604051908101604052809291908181526020018280548015611e7957602002820191906000526020600020905b815481526020019060010190808311611e65575b5050505050905090565b6000546001600160a01b03163314611ead5760405162461bcd60e51b8152600401610b3c906136f0565b603780546001600160a01b0319166001600160a01b0392909216919091179055565b606f8054610c2c906138f6565b8015611efa5760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b03821615610b4f5760405162461bcd60e51b8152600401610b3c90613742565b6001546001600160a01b03163314611f4b5760405162461bcd60e51b8152600401610b3c90613665565b600180546001600160a01b0319169055565b600060385460001415611f825760405162461bcd60e51b8152600401610b3c90613714565b6001600160a01b038216600090815260396020526040812054603854611fb1916001600160e81b031690612a4b565b6001600160a01b038416600090815260396020526040902054909150600160e81b900461ffff16611fe2818361389c565b949350505050565b6000546001600160a01b031633146120145760405162461bcd60e51b8152600401610b3c906136f0565b8060005b818110156120575761204f848483818110612035576120356139a2565b905060200201602081019061204a9190612f25565b612a57565b600101612018565b50505050565b6060610bbf82610cc7565b6000805b6002548110156120bc5760028181548110612089576120896139a2565b6000918252602090912001546001600160a01b03163314156120aa57600191505b806120b481613931565b91505061206c565b508061210a5760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742061207368617265686f6c646572210000000000006044820152606401610b3c565b50336000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146121515760405162461bcd60e51b8152600401610b3c906136f0565b60005b600254811015612209576004600060028381548110612175576121756139a2565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166121f75760405162461bcd60e51b815260206004820152602560248201527f456d657267656e63792046756e6374696f6e7320617265206e6f7420756e6c6f604482015264636b65642160d81b6064820152608401610b3c565b8061220181613931565b915050612154565b50610e2133476129b6565b60606002805480602002602001604051908101604052809291908181526020018280548015611e7957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161224e575050505050905090565b6000546001600160a01b0316331461229f5760405162461bcd60e51b8152600401610b3c906136f0565b610e1681607055565b6000546001600160a01b031633146122d25760405162461bcd60e51b8152600401610b3c906136f0565b610b4f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612aa392505050565b6000546001600160a01b0316331461233b5760405162461bcd60e51b8152600401610b3c906136f0565b603a805460ff1916911515919091179055565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101829052600090819060540160405160208183030381529060405280519060200120905060005b845181101561246d578481815181106123af576123af6139a2565b6020026020010151821061240d578481815181106123cf576123cf6139a2565b6020026020010151826040516020016123f2929190918252602082015260400190565b60405160208183030381529060405280519060200120612459565b81858281518110612420576124206139a2565b6020026020010151604051602001612442929190918252602082015260400190565b604051602081830303815290604052805190602001205b91508061246581613931565b915050612394565b5060a75414949350505050565b81156124985760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b038516156124bf5760405162461bcd60e51b8152600401610b3c90613742565b6001600160a01b038416156124e65760405162461bcd60e51b8152600401610b3c90613742565b8215610f475760405162461bcd60e51b8152600401610b3c90613742565b6000546001600160a01b0316331461252e5760405162461bcd60e51b8152600401610b3c906136f0565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461257a5760405162461bcd60e51b8152600401610b3c906136f0565b610b4f82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612ab692505050565b603854806125d95760405162461bcd60e51b8152600401610b3c90613714565b60005b82811015612057576126148484838181106125f9576125f96139a2565b905060200201602081019061260e9190612f25565b83612ac9565b6001016125dc565b6060816126405750506040805180820190915260018152600360fc1b602082015290565b8160005b811561266a578061265481613931565b91506126639050600a83613841565b9150612644565b6000816001600160401b03811115612684576126846139b8565b6040519080825280601f01601f1916602001820160405280156126ae576020820181803683370190505b5090505b8415611fe257816126c2816138df565b92506126d19050600a8661394c565b6126dc906030613829565b60f81b8183815181106126f1576126f16139a2565b60200101906001600160f81b031916908160001a905350612713600a86613841565b94506126b2565b603a5460ff166127655760405162461bcd60e51b815260206004820152601660248201527542696464696e67206973206e6f74206163746976652160501b6044820152606401610b3c565b3332146127aa5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610b3c565b6127bb66038d7ea4c680003461394c565b156128205760405162461bcd60e51b815260206004820152602f60248201527f506c656173652062696420776974682061206d696e696d756d20646563696d6160448201526e6c206f6620302e303031204554482160881b6064820152608401610b3c565b600034116128705760405162461bcd60e51b815260206004820152601a60248201527f506c65617365206269642077697468206d73672e76616c7565210000000000006044820152606401610b3c565b336000908152603960205260408120546001600160e81b0316906128943483613829565b90507f000000000000000000000000000000000000000000000000016345785d8a00008110156129065760405162461bcd60e51b815260206004820152601960248201527f436f6d6d69746d656e742062656c6f77206d696e696d756d21000000000000006044820152606401610b3c565b3360008181526039602090815260409182902080546001600160e81b0319166001600160e81b0386161790558151928352349083015281018290524760608201527f4dcc013473324698bfbe263facec4ea4b1bc43624236542deabec62c2122b3059060800160405180910390a15050565b8051610b4f906073906020840190612d0f565b60008281526074602090815260409091208251610fd792840190612d0f565b6000611964828461394c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612a03576040519150601f19603f3d011682016040523d82523d6000602084013e612a08565b606091505b5050905080610fd75760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610b3c565b60006119648284613841565b60408051600180825260208201526001600160a01b0383169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a450565b8051610b4f906071906020840190612d0f565b8051610b4f906072906020840190612d0f565b6001600160a01b0382166000908152603960209081526040808320815160608101835290546001600160e81b038116808352600160e81b820461ffff1694830194909452600160f81b900460ff1615159181019190915291612b2b82856129aa565b90506000612b398386612a4b565b90508360400151612b4e57612b4e8683612b8a565b836020015161ffff16811115612b82576000846020015161ffff1682612b74919061389c565b9050612b808782612c0c565b505b505050505050565b6001600160a01b038216600090815260396020526040902080546001600160f81b0316600160f81b1790558015612bc557612bc582826129b6565b816001600160a01b03167f3367befd2b2f39615cd79917c2153263c4af1d3945ec003e5d5bfc13a8d8583382604051612c0091815260200190565b60405180910390a25050565b6001600160a01b0382166000908152603960205260409020805482918291601d90612c43908490600160e81b900461ffff16613803565b825461ffff9182166101009390930a928302919092021990911617905550603754604051630a9edcc560e11b81526001600160a01b038581166004830152602482018590529091169063153db98a90604401600060405180830381600087803b158015612caf57600080fd5b505af1158015612cc3573d6000803e3d6000fd5b50505050826001600160a01b03167fbbd7e4ffedd993111bd1076f8021636e6f4ae7434532a639172744cd349857d483604051612d0291815260200190565b60405180910390a2505050565b828054612d1b906138f6565b90600052602060002090601f016020900481019282612d3d5760008555612d83565b82601f10612d5657805160ff1916838001178555612d83565b82800160010185558215612d83579182015b82811115612d83578251825591602001919060010190612d68565b50612d8f929150612d93565b5090565b5b80821115612d8f5760008155600101612d94565b60008083601f840112612dba57600080fd5b5081356001600160401b03811115612dd157600080fd5b6020830191508360208260051b8501011115612dec57600080fd5b9250929050565b600082601f830112612e0457600080fd5b81356020612e19612e14836137e0565b6137b0565b80838252828201915082860187848660051b8901011115612e3957600080fd5b60005b85811015612e5857813584529284019290840190600101612e3c565b5090979650505050505050565b80358015158114610dde57600080fd5b600082601f830112612e8657600080fd5b81356001600160401b03811115612e9f57612e9f6139b8565b612eb2601f8201601f19166020016137b0565b818152846020838601011115612ec757600080fd5b816020850160208301376000918101602001919091529392505050565b60008083601f840112612ef657600080fd5b5081356001600160401b03811115612f0d57600080fd5b602083019150836020828501011115612dec57600080fd5b600060208284031215612f3757600080fd5b8135611964816139ce565b60008060408385031215612f5557600080fd5b8235612f60816139ce565b91506020830135612f70816139ce565b809150509250929050565b600080600080600060a08688031215612f9357600080fd5b8535612f9e816139ce565b94506020860135612fae816139ce565b935060408601356001600160401b0380821115612fca57600080fd5b612fd689838a01612df3565b94506060880135915080821115612fec57600080fd5b612ff889838a01612df3565b9350608088013591508082111561300e57600080fd5b5061301b88828901612e75565b9150509295509295909350565b600080600080600060a0868803121561304057600080fd5b853561304b816139ce565b9450602086013561305b816139ce565b9350604086013592506060860135915060808601356001600160401b0381111561308457600080fd5b61301b88828901612e75565b6000806000606084860312156130a557600080fd5b83356130b0816139ce565b92506020848101356001600160401b038111156130cc57600080fd5b8501601f810187136130dd57600080fd5b80356130eb612e14826137e0565b8082825284820191508484018a868560051b870101111561310b57600080fd5b600094505b8385101561312e578035835260019490940193918501918501613110565b5096999698505050506040949094013593505050565b6000806040838503121561315757600080fd5b8235613162816139ce565b915061317060208401612e65565b90509250929050565b6000806040838503121561318c57600080fd5b8235613197816139ce565b946020939093013593505050565b600080602083850312156131b857600080fd5b82356001600160401b038111156131ce57600080fd5b6131da85828601612da8565b90969095509350505050565b600080604083850312156131f957600080fd5b82356001600160401b038082111561321057600080fd5b818501915085601f83011261322457600080fd5b81356020613234612e14836137e0565b8083825282820191508286018a848660051b890101111561325457600080fd5b600096505b8487101561328057803561326c816139ce565b835260019690960195918301918301613259565b509650508601359250508082111561329757600080fd5b506132a485828601612df3565b9150509250929050565b600080604083850312156132c157600080fd5b82356001600160401b03808211156132d857600080fd5b818501915085601f8301126132ec57600080fd5b813560206132fc612e14836137e0565b8083825282820191508286018a848660051b890101111561331c57600080fd5b600096505b84871015613280578035613334816139ce565b835260019690960195918301918301613321565b60006020828403121561335a57600080fd5b61196482612e65565b60006020828403121561337557600080fd5b5035919050565b60006020828403121561338e57600080fd5b81356001600160e01b03198116811461196457600080fd5b600080602083850312156133b957600080fd5b82356001600160401b038111156133cf57600080fd5b6131da85828601612ee4565b600080600080606085870312156133f157600080fd5b8435935060208501356001600160401b0381111561340e57600080fd5b61341a87828801612da8565b9598909750949560400135949350505050565b60008060006040848603121561344257600080fd5b8335925060208401356001600160401b0381111561345f57600080fd5b61346b86828701612ee4565b9497909650939450505050565b8054600090600181811c908083168061349257607f831692505b60208084108214156134b457634e487b7160e01b600052602260045260246000fd5b8180156134c857600181146134d957613506565b60ff19861689528489019650613506565b60008881526020902060005b868110156134fe5781548b8201529085019083016134e5565b505084890196505b50505050505092915050565b600061351e8286613478565b845161352e8183602089016138b3565b61353a81830186613478565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156135865783516001600160a01b031683529284019291840191600101613561565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b828110156135ed57815180516001600160e81b031685528681015161ffff1687860152850151151585850152606090930192908501906001016135af565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358657835183529284019291840191600101613616565b60208152600082518060208401526136518160408501602087016138b3565b601f01601f19169190910160400192915050565b60208082526028908201527f50617961626c65476f7665726e616e63653a2043616c6c6572206973206e6f74604082015267205365747465722160c01b606082015260800190565b60208082526023908201527f50617961626c6520676f7665726e616e6365206c656e677468206d69736d617460408201526263682160e81b606082015260800190565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b60208082526014908201527346696e616c205072696365206e6f74207365742160601b604082015260600190565b6020808252600e908201526d14d0950e8814dbdd5b189bdd5b9960921b604082015260600190565b60208082526026908201527f50617961626c6520476f7665726e616e636520536861726573206973206e6f7460408201526520313030302160d01b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156137d8576137d86139b8565b604052919050565b60006001600160401b038211156137f9576137f96139b8565b5060051b60200190565b600061ffff80831681851680830382111561382057613820613960565b01949350505050565b6000821982111561383c5761383c613960565b500190565b60008261385057613850613976565b500490565b600081600019048311821515161561386f5761386f613960565b500290565b60006001600160e81b038381169083168181101561389457613894613960565b039392505050565b6000828210156138ae576138ae613960565b500390565b60005b838110156138ce5781810151838201526020016138b6565b838111156120575750506000910152565b6000816138ee576138ee613960565b506000190190565b600181811c9082168061390a57607f821691505b6020821081141561392b57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561394557613945613960565b5060010190565b60008261395b5761395b613976565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e1657600080fdfea2646970667358221220df0968c97ec7395b79e1f84986356aedfa10f9f32c7dfa28f4876db5c37150d264736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000052a5cc32aa8b219ddbeaf63fd80aa67948d1918

-----Decoded View---------------
Arg [0] : gasEvo_ (address): 0x052A5cc32aa8b219dDBEaF63fd80aa67948D1918

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000052a5cc32aa8b219ddbeaf63fd80aa67948d1918


Deployed Bytecode Sourcemap

24825:4017:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1347:31;;;1356:10;14145:51:1;;1368:9:0;14227:2:1;14212:18;;14205:34;1347:31:0;;14118:18:1;1347:31:0;;;;;;;24825:4017;;;;;9583:118;;;;;;;;;;-1:-1:-1;9583:118:0;;;;;:::i;:::-;;:::i;:::-;;25196:307;;;;;;;;;;-1:-1:-1;25196:307:0;;;;;:::i;:::-;;:::i;:::-;;;27782:25:1;;;27770:2;27755:18;25196:307:0;;;;;;;;23577:340;;;;;;;;;;-1:-1:-1;23577:340:0;;;;;:::i;:::-;;:::i;:::-;;;17054:14:1;;17047:22;17029:41;;17017:2;17002:18;23577:340:0;16889:187:1;19203:46:0;;;;;;;;;;-1:-1:-1;19203:46:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16363:18::-;;;;;;;;;;;;;:::i;17870:::-;;;;;;;;;;;;;:::i;19542:388::-;;;;;;;;;;-1:-1:-1;19542:388:0;;;;;:::i;:::-;;:::i;817:38::-;;;;;;;;;;-1:-1:-1;817:38:0;;;;-1:-1:-1;;;;;817:38:0;;;;;;-1:-1:-1;;;;;13927:32:1;;;13909:51;;13897:2;13882:18;817:38:0;13763:203:1;25992:106:0;;;;;;;;;;-1:-1:-1;25992:106:0;;;;;:::i;:::-;;:::i;9159:25::-;;;;;;;;;;-1:-1:-1;9159:25:0;;;;;;;;25558:77;;;:::i;26218:109::-;;;;;;;;;;-1:-1:-1;26218:109:0;;;;;:::i;:::-;;:::i;1531:58::-;;;;;;;;;;-1:-1:-1;1531:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25796:36;;;;;;;;;;;;;;;;8815:46;;;;;;;;;;;;;;;18490:112;;;;;;;;;;-1:-1:-1;18490:112:0;;;;;:::i;:::-;;:::i;22355:885::-;;;;;;;;;;-1:-1:-1;22355:885:0;;;;;:::i;:::-;;:::i;19380:118::-;;;;;;;;;;-1:-1:-1;19380:118:0;;;;;:::i;:::-;;:::i;14682:366::-;;;;;;;;;;-1:-1:-1;14682:366:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26335:1756::-;;;;;;:::i;:::-;;:::i;2660:301::-;;;;;;;;;;;;;:::i;16970:480::-;;;;;;;;;;-1:-1:-1;16970:480:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4725:1823::-;;;;;;;;;;;;;:::i;9080:48::-;;;;;;;;;;-1:-1:-1;9080:48:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;9080:48:0;;;-1:-1:-1;;;9080:48:0;;;;;-1:-1:-1;;;9080:48:0;;;;;;;;;;-1:-1:-1;;;;;27477:32:1;;;27459:51;;27558:6;27546:19;;;27541:2;27526:18;;27519:47;27609:14;27602:22;27582:18;;;27575:50;27447:2;27432:18;9080:48:0;27265:366:1;26104:108:0;;;;;;;;;;-1:-1:-1;26104:108:0;;;;;:::i;:::-;;:::i;14333:343::-;;;;;;;;;;-1:-1:-1;14333:343:0;;;;;:::i;:::-;;:::i;28433:338::-;;;;;;;;;;-1:-1:-1;28433:338:0;;;;;:::i;:::-;;:::i;8234:21::-;;;;;;;;;;-1:-1:-1;8234:21:0;;;;-1:-1:-1;;;;;8234:21:0;;;25924:59;;;;;;;;;;-1:-1:-1;25924:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;1863:791;;;;;;;;;;-1:-1:-1;1863:791:0;;;;;:::i;:::-;;:::i;3414:1303::-;;;;;;;;;;;;;:::i;25879:32::-;;;;;;;;;;-1:-1:-1;25879:32:0;;;;;;;;17610:26;;;;;;;;;;;;;;;;9317:218;;;;;;;;;;-1:-1:-1;9317:218:0;;;;;:::i;:::-;;:::i;3255:124::-;;;;;;;;;;;;;:::i;338:20::-;;;;;;;;;;-1:-1:-1;338:20:0;;;;-1:-1:-1;;;;;338:20:0;;;8327:97;;;;;;;;;;-1:-1:-1;8327:97:0;;;;;:::i;:::-;;:::i;16389:20::-;;;;;;;;;;;;;:::i;21328:328::-;;;;;;;;;;-1:-1:-1;21328:328:0;;;;;:::i;:::-;;:::i;8895:25::-;;;;;;;;;;;;;;;;1095:134;;;;;;;;;;;;;:::i;13942:385::-;;;;;;;;;;-1:-1:-1;13942:385:0;;;;;:::i;:::-;;:::i;3003:96::-;;;;;;;;;;-1:-1:-1;3070:21:0;3003:96;;28124:274;;;;;;;;;;-1:-1:-1;28124:274:0;;;;;:::i;:::-;;:::i;19936:109::-;;;;;;;;;;-1:-1:-1;19936:109:0;;;;;:::i;:::-;;:::i;6939:136::-;;;;;;;;;;;;;:::i;7387:137::-;;;;;;;;;;;;;:::i;3105:144::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16268:68::-;;;;;;;;;;-1:-1:-1;16268:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;17743:99;;;;;;;;;;-1:-1:-1;17743:99:0;;;;;:::i;:::-;;:::i;17971:77::-;;;;;;;;;;-1:-1:-1;17971:77:0;;;;;:::i;:::-;;:::i;9226:85::-;;;;;;;;;;-1:-1:-1;9226:85:0;;;;;:::i;:::-;;:::i;24354:464::-;;;;;;;;;;-1:-1:-1;24354:464:0;;;;;:::i;:::-;;:::i;21664:685::-;;;;;;;;;;-1:-1:-1;21664:685:0;;;;;:::i;:::-;;:::i;483:77::-;;;;;;;;;;-1:-1:-1;483:77:0;;;;;:::i;:::-;;:::i;25839:33::-;;;;;;;;;;;;;;;;18380:104;;;;;;;;;;-1:-1:-1;18380:104:0;;;;;:::i;:::-;;:::i;9583:118::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;;;;;;;;;9668:25:::1;9684:8;;9668:15;:25::i;:::-;9583:118:::0;;:::o;25196:307::-;25274:7;25354:3;25361:1;25354:8;25350:22;;-1:-1:-1;25371:1:0;25364:8;;25350:22;-1:-1:-1;;;;;25391:21:0;;25426:1;25391:21;;;:13;:21;;;;;:32;-1:-1:-1;;;;;25391:32:0;:104;;-1:-1:-1;;;;;25451:32:0;;25486:1;25451:32;;;:24;:32;;;;;;:44;;25494:1;25391:104;;25451:44;25490:1;25391:104;;;25430:1;25391:104;25383:112;;;;25196:307;;;;;:::o;23577:340::-;23654:4;-1:-1:-1;;;;;;;;;23688:26:0;;;;:99;;-1:-1:-1;;;;;;;;;;23761:26:0;;;23688:99;:173;;;-1:-1:-1;;;;;;;;23835:26:0;-1:-1:-1;;;23835:26:0;;23577:340::o;19203:46::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16363:18::-;;;;;;;:::i;17870:::-;;;;;;;:::i;19542:388::-;19597:13;19647:7;;19658:1;19647:12;19643:279;;;19668:4;19661:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19542:388;;;:::o;19643:279::-;19711:7;;19722:1;19711:12;19707:215;;;19770:12;19784:14;19794:3;19784:9;:14::i;:::-;19800:16;19753:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19725:93;;19542:388;;;:::o;19707:215::-;19859:7;;19870:1;19859:12;19855:67;;;19880:17;;;;:12;:17;;;;;19873:24;;;;;:::i;19855:67::-;-1:-1:-1;;19913:9:0;;;;;;;;;-1:-1:-1;19913:9:0;;;19542:388::o;19855:67::-;19542:388;;;:::o;25992:106::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;26068:27:::1;26083:11;24315::::0;:25;24242:106;26068:27:::1;25992:106:::0;:::o;25558:77::-;25608:19;:17;:19::i;:::-;25558:77::o;26218:109::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;26297:18:::1;:27:::0;26218:109::o;18490:112::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;18573:26:::1;18594:4;;18573:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;18573:20:0::1;::::0;-1:-1:-1;;;18573:26:0:i:1;22355:885::-:0;22972:15;;:20;22964:47;;;;-1:-1:-1;;;22964:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23030:19:0;;;23022:46;;;;-1:-1:-1;;;23022:46:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23087:17:0;;;23079:44;;;;-1:-1:-1;;;23079:44:0;;;;;;;:::i;:::-;23142:11;;:16;23134:43;;;;-1:-1:-1;;;23134:43:0;;;;;;;:::i;:::-;23196:12;;:17;23188:44;;;;-1:-1:-1;;;23188:44:0;;;;;;;:::i;:::-;22355:885;;;;;:::o;19380:118::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;19470:25:::1;19485:3;19490:4;;19470:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;19470:14:0::1;::::0;-1:-1:-1;;;19470:25:0:i:1;:::-;19380:118:::0;;;:::o;14682:366::-;14766:16;14807:8;14795:9;14807:8;-1:-1:-1;;;;;14862:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;14862:17:0;;-1:-1:-1;;14862:17:0;;;;;;;;;;;;14833:46;;14895:9;14890:124;14910:1;14906;:5;14890:124;;;14944:13;:26;14958:8;;14967:1;14958:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14944:26:0;;;;;;;;;;;;;;;-1:-1:-1;14944:26:0;14929:41;;;;;;;;;-1:-1:-1;;;;;14929:41:0;;;;-1:-1:-1;;;14929:41:0;;;;;;;;;;;-1:-1:-1;;;14929:41:0;;;;;;;;;;;:12;;;;14939:1;;14929:12;;;;;;:::i;:::-;;;;;;;;;;:41;14997:3;;14890:124;;;-1:-1:-1;15031:9:0;14682:366;-1:-1:-1;;;;14682:366:0:o;26335:1756::-;26511:20;;;;26503:59;;;;-1:-1:-1;;;26503:59:0;;19315:2:1;26503:59:0;;;19297:21:1;19354:2;19334:18;;;19327:30;19393:28;19373:18;;;19366:56;19439:18;;26503:59:0;19113:350:1;26503:59:0;26624:18;;26616:60;;;;-1:-1:-1;;;26616:60:0;;27114:2:1;26616:60:0;;;27096:21:1;27153:2;27133:18;;;27126:30;27192:26;27172:18;;;27165:54;27236:18;;26616:60:0;26912:348:1;26616:60:0;26726:10;26740:9;26726:23;26718:55;;;;-1:-1:-1;;;26718:55:0;;24174:2:1;26718:55:0;;;24156:21:1;24213:2;24193:18;;;24186:30;-1:-1:-1;;;24232:18:1;;;24225:49;24291:18;;26718:55:0;23972:343:1;26718:55:0;26825:51;26839:10;26851:6;;26825:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26859:16:0;;-1:-1:-1;26825:13:0;;-1:-1:-1;;26825:51:0:i;:::-;26817:117;;;;-1:-1:-1;;;26817:117:0;;22660:2:1;26817:117:0;;;22642:21:1;22699:2;22679:18;;;22672:30;22738:34;22718:18;;;22711:62;-1:-1:-1;;;22789:18:1;;;22782:38;22837:19;;26817:117:0;22458:404:1;26817:117:0;27042:10;26992:22;27017:36;;;:24;:36;;;;;;;27089:11;;27135:31;27089:11;27017:36;27135:31;:::i;:::-;27111:55;;27205:13;27185:16;:33;;27177:73;;;;-1:-1:-1;;;27177:73:0;;23818:2:1;27177:73:0;;;23800:21:1;23857:2;23837:18;;;23830:30;23896:29;23876:18;;;23869:57;23943:18;;27177:73:0;23616:351:1;27177:73:0;27308:22;27333:27;27349:10;27333:15;:27::i;:::-;27308:52;;27371:22;27417:14;27396:18;;:35;;;;:::i;:::-;27371:60;;27465:14;27448;:31;27444:388;;;27510:10;27496:25;;;;:13;:25;;;;;:63;;27544:14;;27496:25;:63;;27544:14;;-1:-1:-1;;;;;27496:63:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;27496:63:0;;;;;-1:-1:-1;;;;;27496:63:0;;;;;;27444:388;;;27630:26;27647:9;27630:14;:26;:::i;:::-;27611:14;:46;27603:95;;;;-1:-1:-1;;;27603:95:0;;21541:2:1;27603:95:0;;;21523:21:1;21580:2;21560:18;;;21553:30;-1:-1:-1;;;21599:18:1;;;21592:49;21658:18;;27603:95:0;21339:343:1;27603:95:0;27719:19;;27715:106;;27773:10;27759:25;;;;:13;:25;;;;;:46;;-1:-1:-1;;;;;27759:46:0;-1:-1:-1;;;27759:46:0;;;27715:106;27935:10;27910:36;;;;:24;:36;;;;;:54;;27950:14;;27910:36;:54;;27950:14;;27910:54;:::i;:::-;;;;-1:-1:-1;;28014:69:0;;;28020:25:1;;;28076:2;28061:18;;28054:34;;;28104:18;;;28097:34;;;28023:10:0;;28014:69;;28008:2:1;27993:18;28014:69:0;;;;;;;26450:1641;;;;;26335:1756;;;;:::o;2660:301::-;1001:23;;-1:-1:-1;;;;;1001:23:0;987:10;:37;979:104;;;;-1:-1:-1;;;979:104:0;;;;;;;:::i;:::-;2759:27:::1;:34:::0;:39;2752:99:::1;;2815:27;:33;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;2815:33:0;;;;;-1:-1:-1;;;;;;2815:33:0::1;::::0;;;;;2752:99:::1;;;2868:24;:31:::0;:36;2861:93:::1;;2921:24;:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2861:93;;16970:480:::0;17081:16;17139:4;:11;17118:10;:17;:32;17110:100;;;;-1:-1:-1;;;17110:100:0;;24522:2:1;17110:100:0;;;24504:21:1;24561:2;24541:18;;;24534:30;24600:34;24580:18;;;24573:62;-1:-1:-1;;;24651:18:1;;;24644:40;24701:19;;17110:100:0;24320:406:1;17110:100:0;17221:26;17264:10;:17;-1:-1:-1;;;;;17250:32:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17250:32:0;;17221:61;;17298:9;17293:123;17317:10;:17;17313:1;:21;17293:123;;;17371:33;17381:10;17392:1;17381:13;;;;;;;;:::i;:::-;;;;;;;17396:4;17401:1;17396:7;;;;;;;;:::i;:::-;;;;;;;17371:9;:33::i;:::-;17356:9;17366:1;17356:12;;;;;;;;:::i;:::-;;;;;;;;;;:48;17336:3;;;;:::i;:::-;;;;17293:123;;;-1:-1:-1;17433:9:0;16970:480;-1:-1:-1;;;16970:480:0:o;4725:1823::-;437:5;;4787:16;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;4888:27:::1;:34:::0;:38;;;;:91:::1;;-1:-1:-1::0;4944:24:0::1;:31:::0;:35;;4888:91:::1;4880:149;;;::::0;-1:-1:-1;;;4880:149:0;;24933:2:1;4880:149:0::1;::::0;::::1;24915:21:1::0;24972:2;24952:18;;;24945:30;25011:33;24991:18;;;24984:61;25062:18;;4880:149:0::1;24731:355:1::0;4880:149:0::1;5138:24;:31:::0;5086:27:::1;:34:::0;:83:::1;5078:145;;;;-1:-1:-1::0;;;5078:145:0::1;;;;;;;:::i;:::-;5312:27;::::0;5350:130:::1;5374:24;:31:::0;5370:35;::::1;5350:130;;;5450:24;5475:1;5450:27;;;;;;;;:::i;:::-;;;;;;;;;5427:50;;;;;:::i;:::-;::::0;-1:-1:-1;5407:3:0;::::1;::::0;::::1;:::i;:::-;;;;5350:130;;;;5498:19;5521:4;5498:27;5490:78;;;;-1:-1:-1::0;;;5490:78:0::1;;;;;;;:::i;:::-;5866:27;:34:::0;;5772:21:::1;::::0;5752:17:::1;::::0;5866:38:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;5837:68:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;5837:68:0::1;;5805:100;;5986:9;5981:162;6005:27;:34:::0;6001:38;::::1;5981:162;;;6125:4;6094:24;6119:1;6094:27;;;;;;;;:::i;:::-;;;;;;;;;6082:9;:39;;;;:::i;:::-;6081:48;;;;:::i;:::-;6061:12;6074:1;6061:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:70;6041:3;::::1;::::0;::::1;:::i;:::-;;;;5981:162;;;-1:-1:-1::0;6257:27:0::1;:34:::0;6244:48;;6295:9;;6244:12;;:48;::::1;;;;;:::i;:::-;;;;;;:60;;;::::0;::::1;6320:9;6315:154;6339:27;:34:::0;6335:38;::::1;6315:154;;;6451:12;6464:1;6451:15;;;;;;;;:::i;:::-;;;;;;;6395:12;6408:27;:34;;;;6445:1;6408:38;;;;:::i;:::-;6395:52;;;;;;;;:::i;:::-;;;;;;:71;;;;;;;:::i;:::-;::::0;;-1:-1:-1;6375:3:0;::::1;::::0;::::1;:::i;:::-;;;;6315:154;;;-1:-1:-1::0;6528:12:0;-1:-1:-1;;;4725:1823:0;:::o;26104:108::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;26181:20:::1;:28:::0;;-1:-1:-1;;26181:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26104:108::o;14333:343::-;14396:7;14424:10;;14438:1;14424:15;;14416:48;;;;-1:-1:-1;;;14416:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14540:22:0;;14477:18;14540:22;;;:13;:22;;;;;:33;14575:10;;14498:88;;-1:-1:-1;;;;;14540:33:0;;14498:27;:88::i;:::-;-1:-1:-1;;;;;14615:22:0;;;;;;:13;:22;;;;;:36;14477:109;;-1:-1:-1;;;;14615:36:0;;;;14614:37;:54;;14667:1;14614:54;;;14654:10;14614:54;14607:61;14333:343;-1:-1:-1;;;14333:343:0:o;28433:338::-;28527:7;28547:21;28571:24;28587:7;28571:15;:24::i;:::-;28547:48;;28606:19;28649:11;28628:18;;:32;;;;:::i;:::-;28606:54;;28696:11;28679:13;:28;;28678:85;;28735:27;28749:13;28735:11;:27;:::i;:::-;28678:85;;;28721:1;28678:85;28671:92;28433:338;-1:-1:-1;;;;;28433:338:0:o;1863:791::-;1001:23;;-1:-1:-1;;;;;1001:23:0;987:10;:37;979:104;;;;-1:-1:-1;;;979:104:0;;;;;;;:::i;:::-;2027:27:::1;:34:::0;:39;:93;::::1;;;-1:-1:-1::0;2084:24:0::1;:31:::0;:36;2027:93:::1;2019:178;;;::::0;-1:-1:-1;;;2019:178:0;;20418:2:1;2019:178:0::1;::::0;::::1;20400:21:1::0;20457:2;20437:18;;;20430:30;20496:34;20476:18;;;20469:62;20567:28;20547:18;;;20540:56;20613:19;;2019:178:0::1;20216:422:1::0;2019:178:0::1;2237:7;:14;2216:10;:17;:35;2208:97;;;::::0;-1:-1:-1;;;2208:97:0;;20014:2:1;2208:97:0::1;::::0;::::1;19996:21:1::0;20053:2;20033:18;;;20026:30;20092:34;20072:18;;;20065:62;-1:-1:-1;;;20143:18:1;;;20136:33;20186:19;;2208:97:0::1;19812:399:1::0;2208:97:0::1;2318:20;::::0;2359:219:::1;2383:10;:17;2379:1;:21;2359:219;;;2438:7;2446:1;2438:10;;;;;;;;:::i;:::-;;;;;;;2422:26;;;;;:::i;:::-;;;2463:27;2496:10;2507:1;2496:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;2463:47;;::::1;::::0;::::1;::::0;;-1:-1:-1;2463:47:0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;2463:47:0::1;-1:-1:-1::0;;;;;2463:47:0;;::::1;::::0;;;::::1;::::0;;2555:10;;2525:24:::1;::::0;2555:10;;2563:1;;2555:10;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;2525:41;;::::1;::::0;::::1;::::0;;-1:-1:-1;2525:41:0;;;;;;;::::1;::::0;2402:3;::::1;::::0;::::1;:::i;:::-;;;;2359:219;;;;2596:12;2612:4;2596:20;2588:58;;;::::0;-1:-1:-1;;;2588:58:0;;26760:2:1;2588:58:0::1;::::0;::::1;26742:21:1::0;26799:2;26779:18;;;26772:30;26838:27;26818:18;;;26811:55;26883:18;;2588:58:0::1;26558:349:1::0;3414:1303:0;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;3539:27:::1;:34:::0;:38;;;;:91:::1;;-1:-1:-1::0;3595:24:0::1;:31:::0;:35;;3539:91:::1;3531:149;;;::::0;-1:-1:-1;;;3531:149:0;;24933:2:1;3531:149:0::1;::::0;::::1;24915:21:1::0;24972:2;24952:18;;;24945:30;25011:33;24991:18;;;24984:61;25062:18;;3531:149:0::1;24731:355:1::0;3531:149:0::1;3789:24;:31:::0;3737:27:::1;:34:::0;:83:::1;3729:145;;;;-1:-1:-1::0;;;3729:145:0::1;;;;;;;:::i;:::-;3963:27;::::0;4001:130:::1;4025:24;:31:::0;4021:35;::::1;4001:130;;;4101:24;4126:1;4101:27;;;;;;;;:::i;:::-;;;;;;;;;4078:50;;;;;:::i;:::-;::::0;-1:-1:-1;4058:3:0;::::1;::::0;::::1;:::i;:::-;;;;4001:130;;;;4149:19;4172:4;4149:27;4141:78;;;;-1:-1:-1::0;;;4141:78:0::1;;;;;;;:::i;:::-;4387:21;4367:17;4471:239;4495:27;:34:::0;4491:38;::::1;4471:239;;;4551:22;4621:4;4590:24;4615:1;4590:27;;;;;;;;:::i;:::-;;;;;;;;;4578:9;:39;;;;:::i;:::-;4577:48;;;;:::i;:::-;4551:75;;4641:57;4651:27;4679:1;4651:30;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;4651:30:0::1;4683:14:::0;4641:9:::1;:57::i;:::-;-1:-1:-1::0;4531:3:0;::::1;::::0;::::1;:::i;:::-;;;;4471:239;;9317:218:::0;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;9402:13:::1;::::0;::::1;;9401:14;9393:45;;;::::0;-1:-1:-1;;;9393:45:0;;21194:2:1;9393:45:0::1;::::0;::::1;21176:21:1::0;21233:2;21213:18;;;21206:30;-1:-1:-1;;;21252:18:1;;;21245:48;21310:18;;9393:45:0::1;20992:342:1::0;9393:45:0::1;9449:10;:24:::0;;;9489:38:::1;::::0;;9503:10:::1;14145:51:1::0;;14227:2;14212:18;;14205:34;;;9489:38:0::1;::::0;14118:18:1;9489:38:0::1;;;;;;;9317:218:::0;:::o;3255:124::-;3311:16;3347:24;3340:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3255:124;:::o;8327:97::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;8396:6:::1;:25:::0;;-1:-1:-1;;;;;;8396:25:0::1;-1:-1:-1::0;;;;;8396:25:0;;;::::1;::::0;;;::::1;::::0;;8327:97::o;16389:20::-;;;;;;;:::i;21328:328::-;21559:9;21558:10;21550:37;;;;-1:-1:-1;;;21550:37:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21606:23:0;;;21598:50;;;;-1:-1:-1;;;21598:50:0;;;;;;;:::i;1095:134::-;1001:23;;-1:-1:-1;;;;;1001:23:0;987:10;:37;979:104;;;;-1:-1:-1;;;979:104:0;;;;;;;:::i;:::-;1188:23:::1;:38:::0;;-1:-1:-1;;;;;;1188:38:0::1;::::0;;1095:134::o;13942:385::-;14006:7;14034:10;;14048:1;14034:15;;14026:48;;;;-1:-1:-1;;;14026:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14150:22:0;;14087;14150;;;:13;:22;;;;;:33;14185:10;;14112:84;;-1:-1:-1;;;;;14150:33:0;;14112:23;:84::i;:::-;-1:-1:-1;;;;;14232:22:0;;14207;14232;;;:13;:22;;;;;:34;14087:109;;-1:-1:-1;;;;14232:34:0;;;;14287:31;14232:34;14087:109;14287:31;:::i;:::-;14279:40;13942:385;-1:-1:-1;;;;13942:385:0:o;28124:274::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;28238:10;28226:9:::1;28266:121;28286:1;28282;:5;28266:121;;;28305:41;28332:10;;28343:1;28332:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28305:26;:41::i;:::-;28371:3;;28266:121;;;;28215:183;28124:274:::0;;:::o;19936:109::-;19996:13;20029:8;20033:3;20029;:8::i;6939:136::-;6623:19;;6653:197;6677:27;:34;6673:38;;6653:197;;;6751:27;6779:1;6751:30;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6751:30:0;6737:10;:44;6733:106;;;6819:4;6802:21;;6733:106;6713:3;;;;:::i;:::-;;;;6653:197;;;;6868:14;6860:53;;;;-1:-1:-1;;;6860:53:0;;21889:2:1;6860:53:0;;;21871:21:1;21928:2;21908:18;;;21901:30;21967:28;21947:18;;;21940:56;22013:18;;6860:53:0;21687:350:1;6860:53:0;-1:-1:-1;7049:10:0::1;7022:38;::::0;;;:26:::1;:38;::::0;;;;:45;;-1:-1:-1;;7022:45:0::1;7063:4;7022:45;::::0;;6939:136::o;7387:137::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;7150:9:::1;7145:217;7169:27;:34:::0;7165:38;::::1;7145:217;;;7233:26;:58;7260:27;7288:1;7260:30;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;7260:30:0::1;7233:58:::0;;;::::1;::::0;;;;;;;;;::::1;;7225:125;;;::::0;-1:-1:-1;;;7225:125:0;;23069:2:1;7225:125:0::1;::::0;::::1;23051:21:1::0;23108:2;23088:18;;;23081:30;23147:34;23127:18;;;23120:62;-1:-1:-1;;;23198:18:1;;;23191:35;23243:19;;7225:125:0::1;22867:401:1::0;7225:125:0::1;7205:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7145:217;;;;7463:53:::2;7481:10;7494:21;7463:9;:53::i;3105:144::-:0;3170:24;3214:27;3207:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3207:34:0;;;;;;;;;;;;;;;;;;;;;;3105:144;:::o;17743:99::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;17813:21:::1;17825:8;17711:7:::0;:18;17644:93;17971:77;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;18032:13:::1;18040:4;;18032:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;18032:7:0::1;::::0;-1:-1:-1;;;18032:13:0:i:1;9226:85::-:0;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;9287:13:::1;:21:::0;;-1:-1:-1;;9287:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;9226:85::o;24354:464::-;24506:35;;-1:-1:-1;;12718:2:1;12714:15;;;12710:53;24506:35:0;;;12698:66:1;12780:12;;;12773:28;;;24463:4:0;;;;12817:12:1;;24506:35:0;;;;;;;;;;;;24496:46;;;;;;24480:62;;24558:9;24553:220;24577:6;:13;24573:1;:17;24553:220;;;24628:6;24635:1;24628:9;;;;;;;;:::i;:::-;;;;;;;24620:5;:17;:141;;24743:6;24750:1;24743:9;;;;;;;;:::i;:::-;;;;;;;24754:5;24726:34;;;;;;;;12997:19:1;;;13041:2;13032:12;;13025:28;13078:2;13069:12;;12840:247;24726:34:0;;;;;;;;;;;;;24716:45;;;;;;24620:141;;;24681:5;24688:6;24695:1;24688:9;;;;;;;;:::i;:::-;;;;;;;24664:34;;;;;;;;12997:19:1;;;13041:2;13032:12;;13025:28;13078:2;13069:12;;12840:247;24664:34:0;;;;;;;;;;;;;24654:45;;;;;;24620:141;24612:149;-1:-1:-1;24592:3:0;;;;:::i;:::-;;;;24553:220;;;-1:-1:-1;24799:11:0;;24790:20;;24354:464;-1:-1:-1;;;;24354:464:0:o;21664:685::-;22097:12;;22089:39;;;;-1:-1:-1;;;22089:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22147:19:0;;;22139:46;;;;-1:-1:-1;;;22139:46:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22204:17:0;;;22196:44;;;;-1:-1:-1;;;22196:44:0;;;;;;;:::i;:::-;22259:8;;22251:35;;;;-1:-1:-1;;;22251:35:0;;;;;;;:::i;483:77::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;545:5:::1;:12:::0;;-1:-1:-1;;;;;;545:12:0::1;-1:-1:-1::0;;;;;545:12:0;;;::::1;::::0;;;::::1;::::0;;483:77::o;18380:104::-;437:5;;-1:-1:-1;;;;;437:5:0;446:10;437:19;429:42;;;;-1:-1:-1;;;429:42:0;;;;;;;:::i;:::-;18459:22:::1;18476:4;;18459:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;18459:16:0::1;::::0;-1:-1:-1;;;18459:22:0:i:1;12361:329::-:0;12457:10;;12486:16;12478:49;;;;-1:-1:-1;;;12478:49:0;;;;;;;:::i;:::-;12543:9;12538:145;12554:19;;;12538:145;;;12591:48;12614:8;;12623:1;12614:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;12627;12591:22;:48::i;:::-;12666:3;;12538:145;;18608:550;18666:13;18696:11;18692:32;;-1:-1:-1;;18711:10:0;;;;;;;;;;;;-1:-1:-1;;;18711:10:0;;;;;18608:550::o;18692:32::-;18753:6;18734:16;18787:52;18794:13;;18787:52;;18811:9;;;;:::i;:::-;;-1:-1:-1;18822:14:0;;-1:-1:-1;18834:2:0;18822:14;;:::i;:::-;;;18787:52;;;18873:20;18906:7;-1:-1:-1;;;;;18896:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18896:18:0;;18873:41;;18925:124;18932:11;;18925:124;;18947:9;;;;:::i;:::-;;-1:-1:-1;19017:11:0;;-1:-1:-1;19026:2:0;19017:6;:11;:::i;:::-;19004:26;;:2;:26;:::i;:::-;18977:55;;18958:7;18966;18958:16;;;;;;;;:::i;:::-;;;;:74;-1:-1:-1;;;;;18958:74:0;;;;;;;;-1:-1:-1;19034:12:0;19044:2;19034:12;;:::i;:::-;;;18925:124;;12730:1174;12828:13;;;;12820:48;;;;-1:-1:-1;;;12820:48:0;;25647:2:1;12820:48:0;;;25629:21:1;25686:2;25666:18;;;25659:30;-1:-1:-1;;;25705:18:1;;;25698:52;25767:18;;12820:48:0;25445:346:1;12820:48:0;12916:10;12930:9;12916:23;12908:55;;;;-1:-1:-1;;;12908:55:0;;24174:2:1;12908:55:0;;;24156:21:1;24213:2;24193:18;;;24186:30;-1:-1:-1;;;24232:18:1;;;24225:49;24291:18;;12908:55:0;23972:343:1;12908:55:0;13019:28;13031:16;13019:9;:28;:::i;:::-;:33;13011:107;;;;-1:-1:-1;;;13011:107:0;;22244:2:1;13011:107:0;;;22226:21:1;22283:2;22263:18;;;22256:30;22322:34;22302:18;;;22295:62;-1:-1:-1;;;22373:18:1;;;22366:45;22428:19;;13011:107:0;22042:411:1;13011:107:0;13149:1;13137:9;:13;13129:66;;;;-1:-1:-1;;;13129:66:0;;26405:2:1;13129:66:0;;;26387:21:1;26444:2;26424:18;;;26417:30;26483:28;26463:18;;;26456:56;26529:18;;13129:66:0;26203:350:1;13129:66:0;13328:10;13285:26;13314:25;;;:13;:25;;;;;:36;-1:-1:-1;;;;;13314:36:0;;13455:30;13476:9;13314:36;13455:30;:::i;:::-;13430:55;;13603:9;13585:14;:27;;13577:65;;;;-1:-1:-1;;;13577:65:0;;25293:2:1;13577:65:0;;;25275:21:1;25332:2;25312:18;;;25305:30;25371:27;25351:18;;;25344:55;25416:18;;13577:65:0;25091:349:1;13577:65:0;13712:10;13698:25;;;;:13;:25;;;;;;;;;:62;;-1:-1:-1;;;;;;13698:62:0;-1:-1:-1;;;;;13698:62:0;;;;;13831:65;;14481:51:1;;;13847:9:0;14548:18:1;;;14541:34;14591:18;;14584:34;;;13874:21:0;14649:2:1;14634:18;;14627:34;13831:65:0;;14468:3:1;14453:19;13831:65:0;;;;;;;12768:1136;;12730:1174::o;18270:104::-;18348:23;;;;:16;;:23;;;;;:::i;19262:112::-;19347:17;;;;:12;:17;;;;;;;;:24;;;;;;;;:::i;9907:167::-;10014:7;10041:25;10055:11;10041;:25;:::i;1629:197::-;1712:12;1738:8;-1:-1:-1;;;;;1730:22:0;1760:7;1730:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1711:61;;;1791:7;1783:35;;;;-1:-1:-1;;;1783:35:0;;19670:2:1;1783:35:0;;;19652:21:1;19709:2;19689:18;;;19682:30;-1:-1:-1;;;19728:18:1;;;19721:45;19783:18;;1783:35:0;19468:339:1;9738:163:0;9841:7;9868:25;9882:11;9868;:25;:::i;23269:279::-;23343:49;;;23387:1;17494:25:1;;;17550:2;17535:18;;17528:34;-1:-1:-1;;;;;23343:49:0;;;23378:1;;23358:10;;23343:49;;17467:18:1;23343:49:0;;;;;;;23269:279;:::o;17895:70::-;17951:11;;;;:4;;:11;;;;;:::i;18167:97::-;18242:19;;;;:12;;:19;;;;;:::i;11649:706::-;-1:-1:-1;;;;;11765:22:0;;11739:23;11765:22;;;:13;:22;;;;;;;;11739:48;;;;;;;;;-1:-1:-1;;;;;11739:48:0;;;;;-1:-1:-1;;;11739:48:0;;;;;;;;;;;-1:-1:-1;;;11739:48:0;;;;;;;;;;;;;;11886:53;11739:48;11927:11;11886:27;:53::i;:::-;11859:80;;11950:22;11975:49;11999:11;12012;11975:23;:49::i;:::-;11950:74;;12042:8;:22;;;12037:105;;12081:49;12104:7;12113:16;12081:22;:49::i;:::-;12175:8;:20;;;12158:37;;:14;:37;12154:194;;;12212:23;12255:8;:20;;;12238:37;;:14;:37;;;;:::i;:::-;12212:63;;12290:46;12311:7;12320:15;12290:20;:46::i;:::-;12197:151;12154:194;11728:627;;;;11649:706;;:::o;10981:269::-;-1:-1:-1;;;;;11073:22:0;;;;;;:13;:22;;;;;:43;;-1:-1:-1;;;;;11073:43:0;-1:-1:-1;;;11073:43:0;;;11131:18;;11127:61;;11153:32;11162:7;11171:13;11153:8;:32::i;:::-;11219:7;-1:-1:-1;;;;;11203:39:0;;11228:13;11203:39;;;;27782:25:1;;27770:2;27755:18;;27636:177;11203:39:0;;;;;;;;10981:269;;:::o;11256:387::-;-1:-1:-1;;;;;11395:22:0;;11344:18;11395:22;;;:13;:22;;;;;:49;;11372:11;;;;11395:34;;:49;;11372:11;;-1:-1:-1;;;11395:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11537:6:0;;:45;;-1:-1:-1;;;11537:45:0;;-1:-1:-1;;;;;14163:32:1;;;11537:45:0;;;14145:51:1;14212:18;;;14205:34;;;11537:6:0;;;;:23;;14118:18:1;;11537:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11614:7;-1:-1:-1;;;;;11600:35:0;;11623:11;11600:35;;;;27782:25:1;;27770:2;27755:18;;27636:177;11600:35:0;;;;;;;;11333:310;11256:387;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:367:1;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;-1:-1:-1;;;;;214:30:1;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:673::-;440:5;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;547:6;534:20;573:4;597:60;613:43;653:2;613:43;:::i;:::-;597:60;:::i;:::-;679:3;703:2;698:3;691:15;731:2;726:3;722:12;715:19;;766:2;758:6;754:15;818:3;813:2;807;804:1;800:10;792:6;788:23;784:32;781:41;778:61;;;835:1;832;825:12;778:61;857:1;867:163;881:2;878:1;875:9;867:163;;;938:17;;926:30;;976:12;;;;1008;;;;899:1;892:9;867:163;;;-1:-1:-1;1048:5:1;;386:673;-1:-1:-1;;;;;;;386:673:1:o;1064:160::-;1129:20;;1185:13;;1178:21;1168:32;;1158:60;;1214:1;1211;1204:12;1229:530;1271:5;1324:3;1317:4;1309:6;1305:17;1301:27;1291:55;;1342:1;1339;1332:12;1291:55;1378:6;1365:20;-1:-1:-1;;;;;1400:2:1;1397:26;1394:52;;;1426:18;;:::i;:::-;1470:55;1513:2;1494:13;;-1:-1:-1;;1490:27:1;1519:4;1486:38;1470:55;:::i;:::-;1550:2;1541:7;1534:19;1596:3;1589:4;1584:2;1576:6;1572:15;1568:26;1565:35;1562:55;;;1613:1;1610;1603:12;1562:55;1678:2;1671:4;1663:6;1659:17;1652:4;1643:7;1639:18;1626:55;1726:1;1701:16;;;1719:4;1697:27;1690:38;;;;1705:7;1229:530;-1:-1:-1;;;1229:530:1:o;1764:348::-;1816:8;1826:6;1880:3;1873:4;1865:6;1861:17;1857:27;1847:55;;1898:1;1895;1888:12;1847:55;-1:-1:-1;1921:20:1;;-1:-1:-1;;;;;1953:30:1;;1950:50;;;1996:1;1993;1986:12;1950:50;2033:4;2025:6;2021:17;2009:29;;2085:3;2078:4;2069:6;2061;2057:19;2053:30;2050:39;2047:59;;;2102:1;2099;2092:12;2117:247;2176:6;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;2284:9;2271:23;2303:31;2328:5;2303:31;:::i;2369:388::-;2437:6;2445;2498:2;2486:9;2477:7;2473:23;2469:32;2466:52;;;2514:1;2511;2504:12;2466:52;2553:9;2540:23;2572:31;2597:5;2572:31;:::i;:::-;2622:5;-1:-1:-1;2679:2:1;2664:18;;2651:32;2692:33;2651:32;2692:33;:::i;:::-;2744:7;2734:17;;;2369:388;;;;;:::o;2762:1071::-;2916:6;2924;2932;2940;2948;3001:3;2989:9;2980:7;2976:23;2972:33;2969:53;;;3018:1;3015;3008:12;2969:53;3057:9;3044:23;3076:31;3101:5;3076:31;:::i;:::-;3126:5;-1:-1:-1;3183:2:1;3168:18;;3155:32;3196:33;3155:32;3196:33;:::i;:::-;3248:7;-1:-1:-1;3306:2:1;3291:18;;3278:32;-1:-1:-1;;;;;3359:14:1;;;3356:34;;;3386:1;3383;3376:12;3356:34;3409:61;3462:7;3453:6;3442:9;3438:22;3409:61;:::i;:::-;3399:71;;3523:2;3512:9;3508:18;3495:32;3479:48;;3552:2;3542:8;3539:16;3536:36;;;3568:1;3565;3558:12;3536:36;3591:63;3646:7;3635:8;3624:9;3620:24;3591:63;:::i;:::-;3581:73;;3707:3;3696:9;3692:19;3679:33;3663:49;;3737:2;3727:8;3724:16;3721:36;;;3753:1;3750;3743:12;3721:36;;3776:51;3819:7;3808:8;3797:9;3793:24;3776:51;:::i;:::-;3766:61;;;2762:1071;;;;;;;;:::o;3838:734::-;3942:6;3950;3958;3966;3974;4027:3;4015:9;4006:7;4002:23;3998:33;3995:53;;;4044:1;4041;4034:12;3995:53;4083:9;4070:23;4102:31;4127:5;4102:31;:::i;:::-;4152:5;-1:-1:-1;4209:2:1;4194:18;;4181:32;4222:33;4181:32;4222:33;:::i;:::-;4274:7;-1:-1:-1;4328:2:1;4313:18;;4300:32;;-1:-1:-1;4379:2:1;4364:18;;4351:32;;-1:-1:-1;4434:3:1;4419:19;;4406:33;-1:-1:-1;;;;;4451:30:1;;4448:50;;;4494:1;4491;4484:12;4448:50;4517:49;4558:7;4549:6;4538:9;4534:22;4517:49;:::i;4577:1105::-;4679:6;4687;4695;4748:2;4736:9;4727:7;4723:23;4719:32;4716:52;;;4764:1;4761;4754:12;4716:52;4803:9;4790:23;4822:31;4847:5;4822:31;:::i;:::-;4872:5;-1:-1:-1;4896:2:1;4934:18;;;4921:32;-1:-1:-1;;;;;4965:30:1;;4962:50;;;5008:1;5005;4998:12;4962:50;5031:22;;5084:4;5076:13;;5072:27;-1:-1:-1;5062:55:1;;5113:1;5110;5103:12;5062:55;5149:2;5136:16;5172:60;5188:43;5228:2;5188:43;:::i;5172:60::-;5254:3;5278:2;5273:3;5266:15;5306:2;5301:3;5297:12;5290:19;;5337:2;5333;5329:11;5385:7;5380:2;5374;5371:1;5367:10;5363:2;5359:19;5355:28;5352:41;5349:61;;;5406:1;5403;5396:12;5349:61;5428:1;5419:10;;5438:163;5452:2;5449:1;5446:9;5438:163;;;5509:17;;5497:30;;5470:1;5463:9;;;;;5547:12;;;;5579;;5438:163;;;-1:-1:-1;4577:1105:1;;5620:5;;-1:-1:-1;;;;5672:2:1;5657:18;;;;5644:32;;-1:-1:-1;;;4577:1105:1:o;5687:315::-;5752:6;5760;5813:2;5801:9;5792:7;5788:23;5784:32;5781:52;;;5829:1;5826;5819:12;5781:52;5868:9;5855:23;5887:31;5912:5;5887:31;:::i;:::-;5937:5;-1:-1:-1;5961:35:1;5992:2;5977:18;;5961:35;:::i;:::-;5951:45;;5687:315;;;;;:::o;6007:::-;6075:6;6083;6136:2;6124:9;6115:7;6111:23;6107:32;6104:52;;;6152:1;6149;6142:12;6104:52;6191:9;6178:23;6210:31;6235:5;6210:31;:::i;:::-;6260:5;6312:2;6297:18;;;;6284:32;;-1:-1:-1;;;6007:315:1:o;6327:437::-;6413:6;6421;6474:2;6462:9;6453:7;6449:23;6445:32;6442:52;;;6490:1;6487;6480:12;6442:52;6530:9;6517:23;-1:-1:-1;;;;;6555:6:1;6552:30;6549:50;;;6595:1;6592;6585:12;6549:50;6634:70;6696:7;6687:6;6676:9;6672:22;6634:70;:::i;:::-;6723:8;;6608:96;;-1:-1:-1;6327:437:1;-1:-1:-1;;;;6327:437:1:o;6769:1226::-;6887:6;6895;6948:2;6936:9;6927:7;6923:23;6919:32;6916:52;;;6964:1;6961;6954:12;6916:52;7004:9;6991:23;-1:-1:-1;;;;;7074:2:1;7066:6;7063:14;7060:34;;;7090:1;7087;7080:12;7060:34;7128:6;7117:9;7113:22;7103:32;;7173:7;7166:4;7162:2;7158:13;7154:27;7144:55;;7195:1;7192;7185:12;7144:55;7231:2;7218:16;7253:4;7277:60;7293:43;7333:2;7293:43;:::i;7277:60::-;7359:3;7383:2;7378:3;7371:15;7411:2;7406:3;7402:12;7395:19;;7442:2;7438;7434:11;7490:7;7485:2;7479;7476:1;7472:10;7468:2;7464:19;7460:28;7457:41;7454:61;;;7511:1;7508;7501:12;7454:61;7533:1;7524:10;;7543:238;7557:2;7554:1;7551:9;7543:238;;;7628:3;7615:17;7645:31;7670:5;7645:31;:::i;:::-;7689:18;;7575:1;7568:9;;;;;7727:12;;;;7759;;7543:238;;;-1:-1:-1;7800:5:1;-1:-1:-1;;7843:18:1;;7830:32;;-1:-1:-1;;7874:16:1;;;7871:36;;;7903:1;7900;7893:12;7871:36;;7926:63;7981:7;7970:8;7959:9;7955:24;7926:63;:::i;:::-;7916:73;;;6769:1226;;;;;:::o;8000:1234::-;8126:6;8134;8187:2;8175:9;8166:7;8162:23;8158:32;8155:52;;;8203:1;8200;8193:12;8155:52;8243:9;8230:23;-1:-1:-1;;;;;8313:2:1;8305:6;8302:14;8299:34;;;8329:1;8326;8319:12;8299:34;8367:6;8356:9;8352:22;8342:32;;8412:7;8405:4;8401:2;8397:13;8393:27;8383:55;;8434:1;8431;8424:12;8383:55;8470:2;8457:16;8492:4;8516:60;8532:43;8572:2;8532:43;:::i;8516:60::-;8598:3;8622:2;8617:3;8610:15;8650:2;8645:3;8641:12;8634:19;;8681:2;8677;8673:11;8729:7;8724:2;8718;8715:1;8711:10;8707:2;8703:19;8699:28;8696:41;8693:61;;;8750:1;8747;8740:12;8693:61;8772:1;8763:10;;8782:238;8796:2;8793:1;8790:9;8782:238;;;8867:3;8854:17;8884:31;8909:5;8884:31;:::i;:::-;8928:18;;8814:1;8807:9;;;;;8966:12;;;;8998;;8782:238;;9239:180;9295:6;9348:2;9336:9;9327:7;9323:23;9319:32;9316:52;;;9364:1;9361;9354:12;9316:52;9387:26;9403:9;9387:26;:::i;9424:180::-;9483:6;9536:2;9524:9;9515:7;9511:23;9507:32;9504:52;;;9552:1;9549;9542:12;9504:52;-1:-1:-1;9575:23:1;;9424:180;-1:-1:-1;9424:180:1:o;9609:286::-;9667:6;9720:2;9708:9;9699:7;9695:23;9691:32;9688:52;;;9736:1;9733;9726:12;9688:52;9762:23;;-1:-1:-1;;;;;;9814:32:1;;9804:43;;9794:71;;9861:1;9858;9851:12;9900:411;9971:6;9979;10032:2;10020:9;10011:7;10007:23;10003:32;10000:52;;;10048:1;10045;10038:12;10000:52;10088:9;10075:23;-1:-1:-1;;;;;10113:6:1;10110:30;10107:50;;;10153:1;10150;10143:12;10107:50;10192:59;10243:7;10234:6;10223:9;10219:22;10192:59;:::i;10501:573::-;10605:6;10613;10621;10629;10682:2;10670:9;10661:7;10657:23;10653:32;10650:52;;;10698:1;10695;10688:12;10650:52;10734:9;10721:23;10711:33;;10795:2;10784:9;10780:18;10767:32;-1:-1:-1;;;;;10814:6:1;10811:30;10808:50;;;10854:1;10851;10844:12;10808:50;10893:70;10955:7;10946:6;10935:9;10931:22;10893:70;:::i;:::-;10501:573;;10982:8;;-1:-1:-1;10867:96:1;;11064:2;11049:18;11036:32;;10501:573;-1:-1:-1;;;;10501:573:1:o;11079:479::-;11159:6;11167;11175;11228:2;11216:9;11207:7;11203:23;11199:32;11196:52;;;11244:1;11241;11234:12;11196:52;11280:9;11267:23;11257:33;;11341:2;11330:9;11326:18;11313:32;-1:-1:-1;;;;;11360:6:1;11357:30;11354:50;;;11400:1;11397;11390:12;11354:50;11439:59;11490:7;11481:6;11470:9;11466:22;11439:59;:::i;:::-;11079:479;;11517:8;;-1:-1:-1;11413:85:1;;-1:-1:-1;;;;11079:479:1:o;11563:973::-;11648:12;;11613:3;;11703:1;11723:18;;;;11776;;;;11803:61;;11857:4;11849:6;11845:17;11835:27;;11803:61;11883:2;11931;11923:6;11920:14;11900:18;11897:38;11894:161;;;11977:10;11972:3;11968:20;11965:1;11958:31;12012:4;12009:1;12002:15;12040:4;12037:1;12030:15;11894:161;12071:18;12098:104;;;;12216:1;12211:319;;;;12064:466;;12098:104;-1:-1:-1;;12131:24:1;;12119:37;;12176:16;;;;-1:-1:-1;12098:104:1;;12211:319;28683:1;28676:14;;;28720:4;28707:18;;12305:1;12319:165;12333:6;12330:1;12327:13;12319:165;;;12411:14;;12398:11;;;12391:35;12454:16;;;;12348:10;;12319:165;;;12323:3;;12513:6;12508:3;12504:16;12497:23;;12064:466;;;;;;;11563:973;;;;:::o;13092:456::-;13313:3;13341:38;13375:3;13367:6;13341:38;:::i;:::-;13408:6;13402:13;13424:52;13469:6;13465:2;13458:4;13450:6;13446:17;13424:52;:::i;:::-;13492:50;13534:6;13530:2;13526:15;13518:6;13492:50;:::i;:::-;13485:57;13092:456;-1:-1:-1;;;;;;;13092:456:1:o;14672:674::-;14859:2;14911:21;;;14981:13;;14884:18;;;15003:22;;;14830:4;;14859:2;15082:15;;;;15056:2;15041:18;;;14830:4;15125:195;15139:6;15136:1;15133:13;15125:195;;;15204:13;;-1:-1:-1;;;;;15200:39:1;15188:52;;15295:15;;;;15260:12;;;;15236:1;15154:9;15125:195;;;-1:-1:-1;15337:3:1;;14672:674;-1:-1:-1;;;;;;14672:674:1:o;15351:896::-;15570:2;15622:21;;;15692:13;;15595:18;;;15714:22;;;15541:4;;15570:2;15755;;15773:18;;;;15814:15;;;15541:4;15857:364;15871:6;15868:1;15865:13;15857:364;;;15930:13;;15972:9;;-1:-1:-1;;;;;15968:35:1;15956:48;;16048:11;;;16042:18;16062:6;16038:31;16024:12;;;16017:53;16124:11;;16118:18;16111:26;16104:34;16090:12;;;16083:56;16168:4;16159:14;;;;16196:15;;;;16000:1;15886:9;15857:364;;;-1:-1:-1;16238:3:1;;15351:896;-1:-1:-1;;;;;;;15351:896:1:o;16252:632::-;16423:2;16475:21;;;16545:13;;16448:18;;;16567:22;;;16394:4;;16423:2;16646:15;;;;16620:2;16605:18;;;16394:4;16689:169;16703:6;16700:1;16697:13;16689:169;;;16764:13;;16752:26;;16833:15;;;;16798:12;;;;16725:1;16718:9;16689:169;;17573:383;17722:2;17711:9;17704:21;17685:4;17754:6;17748:13;17797:6;17792:2;17781:9;17777:18;17770:34;17813:66;17872:6;17867:2;17856:9;17852:18;17847:2;17839:6;17835:15;17813:66;:::i;:::-;17940:2;17919:15;-1:-1:-1;;17915:29:1;17900:45;;;;17947:2;17896:54;;17573:383;-1:-1:-1;;17573:383:1:o;17961:404::-;18163:2;18145:21;;;18202:2;18182:18;;;18175:30;18241:34;18236:2;18221:18;;18214:62;-1:-1:-1;;;18307:2:1;18292:18;;18285:38;18355:3;18340:19;;17961:404::o;18370:399::-;18572:2;18554:21;;;18611:2;18591:18;;;18584:30;18650:34;18645:2;18630:18;;18623:62;-1:-1:-1;;;18716:2:1;18701:18;;18694:33;18759:3;18744:19;;18370:399::o;18774:334::-;18976:2;18958:21;;;19015:2;18995:18;;;18988:30;-1:-1:-1;;;19049:2:1;19034:18;;19027:40;19099:2;19084:18;;18774:334::o;20643:344::-;20845:2;20827:21;;;20884:2;20864:18;;;20857:30;-1:-1:-1;;;20918:2:1;20903:18;;20896:50;20978:2;20963:18;;20643:344::o;23273:338::-;23475:2;23457:21;;;23514:2;23494:18;;;23487:30;-1:-1:-1;;;23548:2:1;23533:18;;23526:44;23602:2;23587:18;;23273:338::o;25796:402::-;25998:2;25980:21;;;26037:2;26017:18;;;26010:30;26076:34;26071:2;26056:18;;26049:62;-1:-1:-1;;;26142:2:1;26127:18;;26120:36;26188:3;26173:19;;25796:402::o;28142:275::-;28213:2;28207:9;28278:2;28259:13;;-1:-1:-1;;28255:27:1;28243:40;;-1:-1:-1;;;;;28298:34:1;;28334:22;;;28295:62;28292:88;;;28360:18;;:::i;:::-;28396:2;28389:22;28142:275;;-1:-1:-1;28142:275:1:o;28422:183::-;28482:4;-1:-1:-1;;;;;28507:6:1;28504:30;28501:56;;;28537:18;;:::i;:::-;-1:-1:-1;28582:1:1;28578:14;28594:4;28574:25;;28422:183::o;28736:224::-;28775:3;28803:6;28836:2;28833:1;28829:10;28866:2;28863:1;28859:10;28897:3;28893:2;28889:12;28884:3;28881:21;28878:47;;;28905:18;;:::i;:::-;28941:13;;28736:224;-1:-1:-1;;;;28736:224:1:o;28965:128::-;29005:3;29036:1;29032:6;29029:1;29026:13;29023:39;;;29042:18;;:::i;:::-;-1:-1:-1;29078:9:1;;28965:128::o;29098:120::-;29138:1;29164;29154:35;;29169:18;;:::i;:::-;-1:-1:-1;29203:9:1;;29098:120::o;29223:168::-;29263:7;29329:1;29325;29321:6;29317:14;29314:1;29311:21;29306:1;29299:9;29292:17;29288:45;29285:71;;;29336:18;;:::i;:::-;-1:-1:-1;29376:9:1;;29223:168::o;29396:231::-;29436:4;-1:-1:-1;;;;;29534:10:1;;;;29504;;29556:12;;;29553:38;;;29571:18;;:::i;:::-;29608:13;;29396:231;-1:-1:-1;;;29396:231:1:o;29632:125::-;29672:4;29700:1;29697;29694:8;29691:34;;;29705:18;;:::i;:::-;-1:-1:-1;29742:9:1;;29632:125::o;29762:258::-;29834:1;29844:113;29858:6;29855:1;29852:13;29844:113;;;29934:11;;;29928:18;29915:11;;;29908:39;29880:2;29873:10;29844:113;;;29975:6;29972:1;29969:13;29966:48;;;-1:-1:-1;;30010:1:1;29992:16;;29985:27;29762:258::o;30025:136::-;30064:3;30092:5;30082:39;;30101:18;;:::i;:::-;-1:-1:-1;;;30137:18:1;;30025:136::o;30166:380::-;30245:1;30241:12;;;;30288;;;30309:61;;30363:4;30355:6;30351:17;30341:27;;30309:61;30416:2;30408:6;30405:14;30385:18;30382:38;30379:161;;;30462:10;30457:3;30453:20;30450:1;30443:31;30497:4;30494:1;30487:15;30525:4;30522:1;30515:15;30379:161;;30166:380;;;:::o;30551:135::-;30590:3;-1:-1:-1;;30611:17:1;;30608:43;;;30631:18;;:::i;:::-;-1:-1:-1;30678:1:1;30667:13;;30551:135::o;30691:112::-;30723:1;30749;30739:35;;30754:18;;:::i;:::-;-1:-1:-1;30788:9:1;;30691:112::o;30808:127::-;30869:10;30864:3;30860:20;30857:1;30850:31;30900:4;30897:1;30890:15;30924:4;30921:1;30914:15;30940:127;31001:10;30996:3;30992:20;30989:1;30982:31;31032:4;31029:1;31022:15;31056:4;31053:1;31046:15;31072:127;31133:10;31128:3;31124:20;31121:1;31114:31;31164:4;31161:1;31154:15;31188:4;31185:1;31178:15;31204:127;31265:10;31260:3;31256:20;31253:1;31246:31;31296:4;31293:1;31286:15;31320:4;31317:1;31310:15;31336:127;31397:10;31392:3;31388:20;31385:1;31378:31;31428:4;31425:1;31418:15;31452:4;31449:1;31442:15;31468:131;-1:-1:-1;;;;;31543:31:1;;31533:42;;31523:70;;31589:1;31586;31579:12

Swarm Source

ipfs://df0968c97ec7395b79e1f84986356aedfa10f9f32c7dfa28f4876db5c37150d2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.