ETH Price: $3,283.68 (-0.48%)

Token

Swipa The Fox (SWIPA)
 

Overview

Max Total Supply

6,005 SWIPA

Holders

2,977

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SWIPA
0x0ec135777d4664237b7572dda570961f775c8c01
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:
SwipaTheFox

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 17 of 17: SwipaTheFox.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import './ERC721EnumerableLite.sol';
import './Signed.sol';
import "./Strings.sol";

contract SwipaTheFox is ERC721EnumerableLite, Signed {
  using Strings for uint;

  uint public maxMint = 5;
  uint public maxSupply = 2255; //presale amount change to 10005 for mainsale
  uint public mintPrice = 0.07 ether;
  bool public isSaleActive = false;
  bool public withdrew_initial = false;
  string private _tokenURI_Prefix = '';

  address public devAddress1 = 0x2Dd146bcf2Dae32851fCeE09e5F3a4E886eFe076;
  address public devAddress2 = 0x3e81D9B5E4fD4C7C3f69bb4396A857d41D1A3471;
  address public NFTA_Address = 0x855A67D331a52C8701306B7bfa62EaBa68F25F44;
  address public CommunityAddress = 0x266Db4743755109a5926D6fDeD5ED6F6a284aB98;
  address public oAddress = 0x6662DF22aE83a8cCfc9c99C641aA54dE8E120407;
  address public pop1Address = 0x39fF53cEAA56f6761bB938500a1449Eee67d9399;
  address public pop2Address = 0x8e90fd7C6642B653965c8B65013711C53c847bd7;

  constructor()
    Delegated()
    ERC721B("Swipa The Fox", "SWIPA", 0){
  }

  fallback() external payable {}

  receive() external payable {}

  function tokenURI(uint tokenId) external view virtual override returns (string memory) {
    require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
    return string(abi.encodePacked(_tokenURI_Prefix, tokenId.toString() ));
  }

  function mint( uint quantity ) external payable {
    require( isSaleActive, "Swipa sale is not active" );
    require( quantity <= maxMint, "Swipa amount too big" );
    require( msg.value >= mintPrice * quantity, "Not enough ether sent" );

    uint supply = totalSupply();
    require( supply + quantity <= maxSupply, "Order exceeds supply" );

    for(uint i; i < quantity; ++i){
      _mint( msg.sender, supply++ );
    }
  }

  function burnTokens(address account, uint[] calldata tokenIds) external payable onlyDelegates {
    for(uint i; i < tokenIds.length; ++i ){
      require( _owners[ tokenIds[i] ] == account, "Could not verify owner" );
      _burn( tokenIds[i] );
    }
  }

  //Giveaway nfts, etc.
  function ownerMint(uint[] calldata quantity, address[] calldata recipient) external payable onlyDelegates {
    require(quantity.length == recipient.length, "The arrays must be equal" );

    uint totalQuantity;
    uint supply = totalSupply();
    for(uint i; i < quantity.length; ++i){
      totalQuantity += quantity[i];
    }
    require( supply + totalQuantity <= maxSupply, "Order exceeds supply" );
    delete totalQuantity;

    for(uint i; i < recipient.length; ++i){
      for(uint j; j < quantity[i]; ++j){
        _mint( recipient[i], supply++ );
      }
    }
  }

  function setSaleActive(bool isSaleActive_ ) external onlyDelegates{
    require( isSaleActive != isSaleActive_ , "Values are not valid" );
    isSaleActive = isSaleActive_;
  }


  function setBaseURI( string calldata baseURI ) external onlyDelegates {
    _tokenURI_Prefix = baseURI;
  }

  function setValues(uint _maxMint, uint _maxSupply, uint _price ) external onlyDelegates {
    require( maxMint != _maxMint || maxSupply != _maxSupply || mintPrice != _price, "Values are not valid" );
    require(_maxSupply >= totalSupply(), "New supply is less than previous supply" );

    maxMint = _maxMint;
    maxSupply = _maxSupply;
    mintPrice = _price;
  }

  function finalize() external onlyOwner {
    selfdestruct(payable(owner()));
  }

  function withdraw_initial() external onlyOwner {
        require(address(this).balance > 25.19 ether, "Not enough ether to withdraw");
        require(withdrew_initial == false, "Already withdrew initial");
        (bool initial1WithdrawStatus,) = NFTA_Address.call{value: 23.22 ether}("");
        (bool initial2WithdrawStatus,) = devAddress1.call{value: 0.98 ether}("");
        (bool initial3WithdrawStatus,) = devAddress2.call{value: 0.99 ether}("");

        withdrew_initial = true;
        require(initial1WithdrawStatus && initial2WithdrawStatus && initial3WithdrawStatus, "Failed withdrawing inital");
  }

  function emergencyWithdraw() external onlyOwner {
      (bool emergencyWithdrawStatus,) = devAddress1.call{value: address(this).balance}("");
      require(emergencyWithdrawStatus, "Failed Emergency Withdraw");
  }

  function emergencyWithdraw2() external onlyOwner {
      (bool emergencyWithdrawStatus2,) = devAddress2.call{value: address(this).balance}("");
      require(emergencyWithdrawStatus2, "Failed Emergency Withdraw");
  }

  function withdraw() external {
    require(address(this).balance > 0, "Not enough ether to withdraw");
    require(withdrew_initial == true, "Have not withdrew initial");
    uint256 walletBalance = address(this).balance;
        
    (bool withdraw_1,) = devAddress1.call{value: walletBalance * 425 / 10000}(""); //4.25 
    (bool withdraw_2,) = devAddress2.call{value: walletBalance * 425 / 10000}(""); //4.25
    (bool withdraw_3,) = NFTA_Address.call{value: walletBalance * 365 / 1000}(""); //36.5
    (bool withdraw_4,) = CommunityAddress.call{value: walletBalance * 10 / 100}(""); //10
    (bool withdraw_5,) = oAddress.call{value: walletBalance * 40 / 100}(""); //40
    (bool withdraw_6,) = pop1Address.call{value: walletBalance * 3 / 100}(""); //3
    (bool withdraw_7,) = pop2Address.call{value: walletBalance * 2 / 100}(""); //2

    require(withdraw_1 && withdraw_2 && withdraw_3 && withdraw_4 && withdraw_5 && withdraw_6 && withdraw_7, "Failed withdraw");
  }

  function _beforeTokenTransfer(address from, address to, uint tokenId) internal override {
    if( from != address(0) )
      --_balances[from];

    if( to != address(0) )
      ++_balances[to];
  }

  function _burn(uint tokenId) internal override {
    //failsafe
    address from = ownerOf(tokenId);
    _approve(owner(), tokenId);
    _beforeTokenTransfer( from, address(0), tokenId );

    ++_burned;
    _owners[tokenId] = address(0);
    emit Transfer(from, address(0), tokenId);
  }

  function _mint(address to, uint tokenId) internal override {
    _beforeTokenTransfer( address(0), to, tokenId );

    _owners.push(to);
    emit Transfer(address(0), to, tokenId);
  }

}

File 1 of 17: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 17: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 17: Delegated.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

/***********************
* @author: squeebo_nft *
************************/

import "./Ownable.sol";

contract Delegated is Ownable{
  mapping(address => bool) internal _delegates;

  constructor(){
    _delegates[owner()] = true;
  }

  modifier onlyDelegates {
    require(_delegates[msg.sender], "Invalid delegate" );
    _;
  }

  //onlyOwner
  function isDelegate( address addr ) external view onlyOwner returns ( bool ){
    return _delegates[addr];
  }

  function setDelegate( address addr, bool isDelegate_ ) external onlyOwner{
    _delegates[addr] = isDelegate_;
  }

  function transferOwnership(address newOwner) public virtual override onlyOwner {
    _delegates[newOwner] = true;
    super.transferOwnership( newOwner );
  }
}

File 4 of 17: ECDSA.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

File 5 of 17: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 6 of 17: ERC721B.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

/****************************************
 * @author: squeebo_nft                 *
 * @team:   GoldenX                     *
 ****************************************
 *   Blimpie-ERC721 provides low-gas    *
 *           mints + transfers          *
 ****************************************/

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

abstract contract ERC721B is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;

    string private _name;
    string private _symbol;

    uint internal _burned;
    uint internal _offset;
    address[] internal _owners;

    mapping(uint => address) internal _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    constructor(string memory name_, string memory symbol_, uint offset) {
        _name = name_;
        _symbol = symbol_;
        _offset = offset;
        for(uint i; i < _offset; ++i ){
            _owners.push(address(0));
        }
    }

    //public
    function balanceOf(address owner) public view virtual override returns (uint) {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        for( uint i; i < _owners.length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        return count;
    }

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

    function ownerOf(uint tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function totalSupply() public view virtual returns (uint) {
        return _owners.length - (_offset + _burned);
    }


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

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

        _approve(to, tokenId);
    }

    function getApproved(uint tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
        return _tokenApprovals[tokenId];
    }

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

    function setApprovalForAll(address operator, bool approved) external virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function transferFrom(
        address from,
        address to,
        uint tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint tokenId
    ) external virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }


    //internal
    function _approve(address to, uint tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721B.ownerOf(tokenId), to, tokenId);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint tokenId
    ) internal virtual {}

    function _burn(uint tokenId) internal virtual {
        address owner = ERC721B.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);
        _owners[tokenId] = address(0);

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

    function _checkOnERC721Received(
        address from,
        address to,
        uint tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _exists(uint tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length && _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721B.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mint(address to, uint tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);
        _owners.push(to);

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

    function _next() internal view virtual returns( uint ){
        return _owners.length;
    }

    function _safeMint(address to, uint tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(
        address to,
        uint tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _safeTransfer(
        address from,
        address to,
        uint tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }
}

File 7 of 17: ERC721EnumerableLite.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

/****************************************
 * @author: squeebo_nft                 *
 ****************************************
 *   Blimpie-ERC721 provides low-gas    *
 *           mints + transfers          *
 ****************************************/

import "./ERC721B.sol";
import "./IERC721Batch.sol";
import "./IERC721Enumerable.sol";

abstract contract ERC721EnumerableLite is ERC721B, IERC721Batch, IERC721Enumerable {
    mapping(address => uint) internal _balances;

    function isOwnerOf( address account, uint[] calldata tokenIds ) external view virtual override returns( bool ){
        for(uint i; i < tokenIds.length; ++i ){
            if( _owners[ tokenIds[i] ] != account )
                return false;
        }

        return true;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721B) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    function tokenOfOwnerByIndex(address owner, uint index) public view override returns (uint tokenId) {
        uint count;
        for( uint i; i < _owners.length; ++i ){
            if( owner == _owners[i] ){
                if( count == index )
                    return i;
                else
                    ++count;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }

    function tokenByIndex(uint index) external view virtual override returns (uint) {
        require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
        return index;
    }

    function totalSupply() public view virtual override( ERC721B, IERC721Enumerable ) returns (uint) {
        return _owners.length - (_offset + _burned);
    }

    function transferBatch( address from, address to, uint[] calldata tokenIds, bytes calldata data ) external override{
        for(uint i; i < tokenIds.length; ++i ){
            safeTransferFrom( from, to, tokenIds[i], data );
        }
    }

    function walletOfOwner( address account ) external view virtual override returns( uint[] memory ){
        uint quantity = balanceOf( account );
        uint[] memory wallet = new uint[]( quantity );
        for( uint i; i < quantity; ++i ){
            wallet[i] = tokenOfOwnerByIndex( account, i );
        }
        return wallet;
    }
}

File 8 of 17: IERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 9 of 17: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

File 10 of 17: IERC721Batch.sol
// SPDX-License-Identifier: BSD-3-Clause

pragma solidity ^0.8.0;

interface IERC721Batch {
  function isOwnerOf( address account, uint[] calldata tokenIds ) external view returns( bool );
  function transferBatch( address from, address to, uint[] calldata tokenIds, bytes calldata data ) external;
  function walletOfOwner( address account ) external view returns( uint[] memory );
}

File 11 of 17: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 12 of 17: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 13 of 17: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 14 of 17: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 15 of 17: Signed.sol
// SPDX-License-Identifier: BSD-3

pragma solidity ^0.8.0;

import './Delegated.sol';
import "./Strings.sol";
import "./ECDSA.sol";

contract Signed is Delegated{
  using Strings for uint256;
  using ECDSA for bytes32;

  string private _secret;
  address private _signer;

  function setSecret( string calldata secret ) external onlyOwner{
    _secret = secret;
  }

  function setSigner( address signer ) external onlyOwner{
    _signer = signer;
  }


  function createHash( string memory data ) internal view returns ( bytes32 ){
    return keccak256( abi.encodePacked( address(this), msg.sender, data, _secret ) );
  }

  function getSigner( bytes32 hash, bytes memory signature ) internal pure returns( address ){
    return hash.toEthSignedMessageHash().recover( signature );
  }

  function isAuthorizedSigner( address extracted ) internal view virtual returns( bool ){
    return extracted == _signer;
  }

  function verifySignature( string memory data, bytes calldata signature ) internal view {
    address extracted = getSigner( createHash( data ), signature );
    require( isAuthorizedSigner( extracted ), "Signature verification failed" );
  }


}

File 16 of 17: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"CommunityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTA_Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"burnTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"devAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isDelegate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"isOwnerOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","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":"oAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"ownerMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pop1Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pop2Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isDelegate_","type":"bool"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isSaleActive_","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"secret","type":"string"}],"name":"setSecret","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMint","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw_initial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrew_initial","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6005600c556108cf600d5566f8b0a10e470000600e55600f805461ffff1916905560a06040819052600060808190526200003c91601091620002bc565b50601180546001600160a01b0319908116732dd146bcf2dae32851fcee09e5f3a4e886efe07617909155601280548216733e81d9b5e4fd4c7c3f69bb4396a857d41d1a347117905560138054821673855a67d331a52c8701306b7bfa62eaba68f25f4417905560148054821673266db4743755109a5926d6fded5ed6f6a284ab98179055601580548216736662df22ae83a8ccfc9c99c641aa54de8e1204071790556016805482167339ff53ceaa56f6761bb938500a1449eee67d939917905560178054909116738e90fd7c6642b653965c8b65013711c53c847bd71790553480156200012857600080fd5b50604080518082018252600d81526c0a6eed2e0c240a8d0ca408cdef609b1b602080830191825283518085019094526005845264535749504160d81b9084015281519192916000916200017e91839190620002bc565b50815162000194906001906020850190620002bc565b50600381905560005b600354811015620001fb57600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169055620001f3816200039f565b90506200019d565b5050505062000219620002136200025760201b60201c565b6200025b565b60016009600062000229620002ad565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620003c7565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b031690565b828054620002ca9062000362565b90600052602060002090601f016020900481019282620002ee576000855562000339565b82601f106200030957805160ff191683800117855562000339565b8280016001018555821562000339579182015b82811115620003395782518255916020019190600101906200031c565b50620003479291506200034b565b5090565b5b808211156200034757600081556001016200034c565b6002810460018216806200037757607f821691505b602082108114156200039957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620003c057634e487b7160e01b81526011600452602481fd5b5060010190565b6135c780620003d76000396000f3fe6080604052600436106102b25760003560e01c80636bf24dcd116101755780639e759865116100dc578063c87b56dd11610095578063db2e21bc1161006f578063db2e21bc146107a2578063e985e9c5146107b7578063ed576adf146107d7578063f2fde38b146107ec576102b9565b8063c87b56dd14610758578063d1de084b14610778578063d5abeb011461078d576102b9565b80639e759865146106bd578063a0712d68146106d0578063a22cb465146106e3578063b534a5c414610703578063b88d4fde14610723578063b8a7c78a14610743576102b9565b80637501f7411161012e5780637501f741146106295780637ed6c9261461063e578063841718a61461065e5780638da5cb5b1461067e5780638e52628b1461069357806395d89b41146106a8576102b9565b80636bf24dcd146105975780636c19e783146105ac5780636e9849dd146105cc57806370a08231146105df578063715018a6146105ff578063738f88a514610614576102b9565b80633fe8f0a7116102195780634f6ccce7116101d25780634f6ccce7146104f857806355f804b314610518578063564566a81461053857806363511db61461054d5780636352211e146105625780636817c76c14610582576102b9565b80633fe8f0a71461044157806342842e0e14610456578063438b6300146104765780634a994eef146104a35780634bb278f3146104c35780634d44660c146104d8576102b9565b8063138b40fa1161026b578063138b40fa146103a057806318160ddd146103b557806323b872dd146103d75780632f745c59146103f75780633ccfd60b146104175780633ec2826e1461042c576102b9565b806301ffc9a7146102bb57806306fdde03146102f15780630777962714610313578063081812fc14610333578063095ea7b314610360578063111be31614610380576102b9565b366102b957005b005b3480156102c757600080fd5b506102db6102d6366004612a21565b61080c565b6040516102e89190612c62565b60405180910390f35b3480156102fd57600080fd5b50610306610839565b6040516102e89190612c6d565b34801561031f57600080fd5b506102db61032e36600461271a565b6108cb565b34801561033f57600080fd5b5061035361034e366004612a99565b610934565b6040516102e89190612bcd565b34801561036c57600080fd5b506102b961037b366004612975565b610977565b34801561038c57600080fd5b506102b961039b366004612ab1565b610a0f565b3480156103ac57600080fd5b506102db610aaf565b3480156103c157600080fd5b506103ca610abd565b6040516102e89190613415565b3480156103e357600080fd5b506102b96103f23660046127f4565b610ae1565b34801561040357600080fd5b506103ca610412366004612975565b610b19565b34801561042357600080fd5b506102b9610bb5565b34801561043857600080fd5b506102b9610fb5565b34801561044d57600080fd5b506102b96111cd565b34801561046257600080fd5b506102b96104713660046127f4565b611290565b34801561048257600080fd5b5061049661049136600461271a565b6112ab565b6040516102e89190612c1e565b3480156104af57600080fd5b506102b96104be36600461294c565b611367565b3480156104cf57600080fd5b506102b96113d1565b3480156104e457600080fd5b506102db6104f33660046128fb565b611423565b34801561050457600080fd5b506103ca610513366004612a99565b6114c1565b34801561052457600080fd5b506102b9610533366004612a59565b6114ed565b34801561054457600080fd5b506102db611528565b34801561055957600080fd5b50610353611531565b34801561056e57600080fd5b5061035361057d366004612a99565b611540565b34801561058e57600080fd5b506103ca611598565b3480156105a357600080fd5b5061035361159e565b3480156105b857600080fd5b506102b96105c736600461271a565b6115ad565b6102b96105da36600461299e565b61160e565b3480156105eb57600080fd5b506103ca6105fa36600461271a565b611797565b34801561060b57600080fd5b506102b9611830565b34801561062057600080fd5b5061035361187b565b34801561063557600080fd5b506103ca61188a565b34801561064a57600080fd5b506102b9610659366004612a59565b611890565b34801561066a57600080fd5b506102b9610679366004612a07565b6118db565b34801561068a57600080fd5b50610353611946565b34801561069f57600080fd5b50610353611955565b3480156106b457600080fd5b50610306611964565b6102b96106cb3660046128fb565b611973565b6102b96106de366004612a99565b611a75565b3480156106ef57600080fd5b506102b96106fe36600461294c565b611b4e565b34801561070f57600080fd5b506102b961071e366004612766565b611c1c565b34801561072f57600080fd5b506102b961073e36600461282f565b611c9f565b34801561074f57600080fd5b50610353611cd8565b34801561076457600080fd5b50610306610773366004612a99565b611ce7565b34801561078457600080fd5b50610353611d40565b34801561079957600080fd5b506103ca611d4f565b3480156107ae57600080fd5b506102b9611d55565b3480156107c357600080fd5b506102db6107d2366004612734565b611db2565b3480156107e357600080fd5b50610353611de0565b3480156107f857600080fd5b506102b961080736600461271a565b611def565b60006001600160e01b0319821663780e9d6360e01b1480610831575061083182611e5a565b90505b919050565b606060008054610848906134cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610874906134cf565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b60006108d5611e9a565b6001600160a01b03166108e6611946565b6001600160a01b0316146109155760405162461bcd60e51b815260040161090c9061316d565b60405180910390fd5b506001600160a01b031660009081526009602052604090205460ff1690565b600061093f82611e9e565b61095b5760405162461bcd60e51b815260040161090c90613121565b506000908152600560205260409020546001600160a01b031690565b600061098282611540565b9050806001600160a01b0316836001600160a01b031614156109b65760405162461bcd60e51b815260040161090c90613308565b806001600160a01b03166109c8611e9a565b6001600160a01b031614806109e457506109e4816107d2611e9a565b610a005760405162461bcd60e51b815260040161090c90612fcc565b610a0a8383611ef6565b505050565b3360009081526009602052604090205460ff16610a3e5760405162461bcd60e51b815260040161090c90612c80565b82600c54141580610a51575081600d5414155b80610a5e575080600e5414155b610a7a5760405162461bcd60e51b815260040161090c90612dc4565b610a82610abd565b821015610aa15760405162461bcd60e51b815260040161090c90612e57565b600c92909255600d55600e55565b600f54610100900460ff1681565b6000600254600354610acf919061342a565b600454610adc9190613475565b905090565b610af2610aec611e9a565b82611f64565b610b0e5760405162461bcd60e51b815260040161090c90613349565b610a0a838383611fe9565b60008060005b600454811015610b965760048181548110610b4a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610b865783821415610b7a579150610baf9050565b610b838261350a565b91505b610b8f8161350a565b9050610b1f565b5060405162461bcd60e51b815260040161090c90612caa565b92915050565b60004711610bd55760405162461bcd60e51b815260040161090c906132d1565b600f5460ff610100909104161515600114610c025760405162461bcd60e51b815260040161090c90612f49565b60115447906000906001600160a01b0316612710610c22846101a9613456565b610c2c9190613442565b604051610c3890612bca565b60006040518083038185875af1925050503d8060008114610c75576040519150601f19603f3d011682016040523d82523d6000602084013e610c7a565b606091505b50506012549091506000906001600160a01b0316612710610c9d856101a9613456565b610ca79190613442565b604051610cb390612bca565b60006040518083038185875af1925050503d8060008114610cf0576040519150601f19603f3d011682016040523d82523d6000602084013e610cf5565b606091505b50506013549091506000906001600160a01b03166103e8610d188661016d613456565b610d229190613442565b604051610d2e90612bca565b60006040518083038185875af1925050503d8060008114610d6b576040519150601f19603f3d011682016040523d82523d6000602084013e610d70565b606091505b50506014549091506000906001600160a01b03166064610d9187600a613456565b610d9b9190613442565b604051610da790612bca565b60006040518083038185875af1925050503d8060008114610de4576040519150601f19603f3d011682016040523d82523d6000602084013e610de9565b606091505b50506015549091506000906001600160a01b03166064610e0a886028613456565b610e149190613442565b604051610e2090612bca565b60006040518083038185875af1925050503d8060008114610e5d576040519150601f19603f3d011682016040523d82523d6000602084013e610e62565b606091505b50506016549091506000906001600160a01b03166064610e83896003613456565b610e8d9190613442565b604051610e9990612bca565b60006040518083038185875af1925050503d8060008114610ed6576040519150601f19603f3d011682016040523d82523d6000602084013e610edb565b606091505b50506017549091506000906001600160a01b03166064610efc8a6002613456565b610f069190613442565b604051610f1290612bca565b60006040518083038185875af1925050503d8060008114610f4f576040519150601f19603f3d011682016040523d82523d6000602084013e610f54565b606091505b50509050868015610f625750855b8015610f6b5750845b8015610f745750835b8015610f7d5750825b8015610f865750815b8015610f8f5750805b610fab5760405162461bcd60e51b815260040161090c906132a8565b5050505050505050565b610fbd611e9a565b6001600160a01b0316610fce611946565b6001600160a01b031614610ff45760405162461bcd60e51b815260040161090c9061316d565b68015d94db89a4170000471161101c5760405162461bcd60e51b815260040161090c906132d1565b600f54610100900460ff16156110445760405162461bcd60e51b815260040161090c906131a2565b6013546040516000916001600160a01b0316906801423e02f9a49200009061106b90612bca565b60006040518083038185875af1925050503d80600081146110a8576040519150601f19603f3d011682016040523d82523d6000602084013e6110ad565b606091505b50506011546040519192506000916001600160a01b0390911690670d99a8cec7e20000906110da90612bca565b60006040518083038185875af1925050503d8060008114611117576040519150601f19603f3d011682016040523d82523d6000602084013e61111c565b606091505b50506012546040519192506000916001600160a01b0390911690670dbd2fc137a300009061114990612bca565b60006040518083038185875af1925050503d8060008114611186576040519150601f19603f3d011682016040523d82523d6000602084013e61118b565b606091505b5050600f805461ff00191661010017905590508280156111a85750815b80156111b15750805b610a0a5760405162461bcd60e51b815260040161090c906130ea565b6111d5611e9a565b6001600160a01b03166111e6611946565b6001600160a01b03161461120c5760405162461bcd60e51b815260040161090c9061316d565b6012546040516000916001600160a01b031690479061122a90612bca565b60006040518083038185875af1925050503d8060008114611267576040519150601f19603f3d011682016040523d82523d6000602084013e61126c565b606091505b505090508061128d5760405162461bcd60e51b815260040161090c90612d47565b50565b610a0a83838360405180602001604052806000815250611c9f565b606060006112b883611797565b905060008167ffffffffffffffff8111156112e357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561130c578160200160208202803683370190505b50905060005b8281101561135f576113248582610b19565b82828151811061134457634e487b7160e01b600052603260045260246000fd5b60209081029190910101526113588161350a565b9050611312565b509392505050565b61136f611e9a565b6001600160a01b0316611380611946565b6001600160a01b0316146113a65760405162461bcd60e51b815260040161090c9061316d565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6113d9611e9a565b6001600160a01b03166113ea611946565b6001600160a01b0316146114105760405162461bcd60e51b815260040161090c9061316d565b611418611946565b6001600160a01b0316ff5b6000805b828110156114b457846001600160a01b0316600485858481811061145b57634e487b7160e01b600052603260045260246000fd5b905060200201358154811061148057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146114a45760009150506114ba565b6114ad8161350a565b9050611427565b50600190505b9392505050565b60006114cb610abd565b82106114e95760405162461bcd60e51b815260040161090c9061339a565b5090565b3360009081526009602052604090205460ff1661151c5760405162461bcd60e51b815260040161090c90612c80565b610a0a601083836125da565b600f5460ff1681565b6011546001600160a01b031681565b6000806004838154811061156457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050806108315760405162461bcd60e51b815260040161090c90613073565b600e5481565b6015546001600160a01b031681565b6115b5611e9a565b6001600160a01b03166115c6611946565b6001600160a01b0316146115ec5760405162461bcd60e51b815260040161090c9061316d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526009602052604090205460ff1661163d5760405162461bcd60e51b815260040161090c90612c80565b82811461165c5760405162461bcd60e51b815260040161090c90613271565b600080611667610abd565b905060005b858110156116b85786868281811061169457634e487b7160e01b600052603260045260246000fd5b90506020020135836116a6919061342a565b92506116b18161350a565b905061166c565b50600d546116c6838361342a565b11156116e45760405162461bcd60e51b815260040161090c906130bc565b6000915060005b8381101561178e5760005b87878381811061171657634e487b7160e01b600052603260045260246000fd5b9050602002013581101561177d5761176d86868481811061174757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061175c919061271a565b846117668161350a565b95506120da565b6117768161350a565b90506116f6565b506117878161350a565b90506116eb565b50505050505050565b60006001600160a01b0382166117bf5760405162461bcd60e51b815260040161090c90613029565b6000805b60045481101561182957600481815481106117ee57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0385811691161415611819576118168261350a565b91505b6118228161350a565b90506117c3565b5092915050565b611838611e9a565b6001600160a01b0316611849611946565b6001600160a01b03161461186f5760405162461bcd60e51b815260040161090c9061316d565b6118796000612162565b565b6012546001600160a01b031681565b600c5481565b611898611e9a565b6001600160a01b03166118a9611946565b6001600160a01b0316146118cf5760405162461bcd60e51b815260040161090c9061316d565b610a0a600a83836125da565b3360009081526009602052604090205460ff1661190a5760405162461bcd60e51b815260040161090c90612c80565b600f5460ff16151581151514156119335760405162461bcd60e51b815260040161090c90612dc4565b600f805460ff1916911515919091179055565b6008546001600160a01b031690565b6016546001600160a01b031681565b606060018054610848906134cf565b3360009081526009602052604090205460ff166119a25760405162461bcd60e51b815260040161090c90612c80565b60005b81811015611a6f57836001600160a01b031660048484848181106119d957634e487b7160e01b600052603260045260246000fd5b90506020020135815481106119fe57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614611a305760405162461bcd60e51b815260040161090c90612e9e565b611a5f838383818110611a5357634e487b7160e01b600052603260045260246000fd5b905060200201356121b4565b611a688161350a565b90506119a5565b50505050565b600f5460ff16611a975760405162461bcd60e51b815260040161090c90612e20565b600c54811115611ab95760405162461bcd60e51b815260040161090c90612df2565b80600e54611ac79190613456565b341015611ae65760405162461bcd60e51b815260040161090c906133e6565b6000611af0610abd565b600d54909150611b00838361342a565b1115611b1e5760405162461bcd60e51b815260040161090c906130bc565b60005b82811015610a0a57611b3e3383611b378161350a565b94506120da565b611b478161350a565b9050611b21565b611b56611e9a565b6001600160a01b0316826001600160a01b03161415611b875760405162461bcd60e51b815260040161090c90612f12565b8060066000611b94611e9a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611bd8611e9a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c109190612c62565b60405180910390a35050565b60005b8381101561178e57611c8f8787878785818110611c4c57634e487b7160e01b600052603260045260246000fd5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c9f92505050565b611c988161350a565b9050611c1f565b611cb0611caa611e9a565b83611f64565b611ccc5760405162461bcd60e51b815260040161090c90613349565b611a6f8484848461226c565b6014546001600160a01b031681565b6060611cf282611e9e565b611d0e5760405162461bcd60e51b815260040161090c90613222565b6010611d198361229f565b604051602001611d2a929190612b24565b6040516020818303038152906040529050919050565b6013546001600160a01b031681565b600d5481565b611d5d611e9a565b6001600160a01b0316611d6e611946565b6001600160a01b031614611d945760405162461bcd60e51b815260040161090c9061316d565b6011546040516000916001600160a01b031690479061122a90612bca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6017546001600160a01b031681565b611df7611e9a565b6001600160a01b0316611e08611946565b6001600160a01b031614611e2e5760405162461bcd60e51b815260040161090c9061316d565b6001600160a01b0381166000908152600960205260409020805460ff1916600117905561128d816123ba565b60006001600160e01b031982166380ac58cd60e01b1480611e8b57506001600160e01b03198216635b5e139f60e01b145b80610831575061083182612428565b3390565b60045460009082108015610831575060006001600160a01b031660048381548110611ed957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f2b82611540565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f6f82611e9e565b611f8b5760405162461bcd60e51b815260040161090c90612f80565b6000611f9683611540565b9050806001600160a01b0316846001600160a01b03161480611fd15750836001600160a01b0316611fc684610934565b6001600160a01b0316145b80611fe15750611fe18185611db2565b949350505050565b826001600160a01b0316611ffc82611540565b6001600160a01b0316146120225760405162461bcd60e51b815260040161090c906131d9565b6001600160a01b0382166120485760405162461bcd60e51b815260040161090c90612ece565b612053838383612441565b61205e600082611ef6565b816004828154811061208057634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6120e660008383612441565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006121bf82611540565b90506121d26121cc611946565b83611ef6565b6121de81600084612441565b6002600081546121ed9061350a565b9190508190555060006004838154811061221757634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b612277848484611fe9565b612283848484846124b9565b611a6f5760405162461bcd60e51b815260040161090c90612cf5565b6060816122c457506040805180820190915260018152600360fc1b6020820152610834565b8160005b81156122ee57806122d88161350a565b91506122e79050600a83613442565b91506122c8565b60008167ffffffffffffffff81111561231757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612341576020820181803683370190505b5090505b8415611fe157612356600183613475565b9150612363600a86613525565b61236e90603061342a565b60f81b81838151811061239157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506123b3600a86613442565b9450612345565b6123c2611e9a565b6001600160a01b03166123d3611946565b6001600160a01b0316146123f95760405162461bcd60e51b815260040161090c9061316d565b6001600160a01b03811661241f5760405162461bcd60e51b815260040161090c90612d7e565b61128d81612162565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b0383161561247b576001600160a01b03831660009081526007602052604081208054909190612476906134b8565b909155505b6001600160a01b03821615610a0a576001600160a01b038216600090815260076020526040812080549091906124b09061350a565b90915550505050565b60006124cd846001600160a01b03166125d4565b156125c957836001600160a01b031663150b7a026124e9611e9a565b8786866040518563ffffffff1660e01b815260040161250b9493929190612be1565b602060405180830381600087803b15801561252557600080fd5b505af1925050508015612555575060408051601f3d908101601f1916820190925261255291810190612a3d565b60015b6125af573d808015612583576040519150601f19603f3d011682016040523d82523d6000602084013e612588565b606091505b5080516125a75760405162461bcd60e51b815260040161090c90612cf5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611fe1565b506001949350505050565b3b151590565b8280546125e6906134cf565b90600052602060002090601f016020900481019282612608576000855561264e565b82601f106126215782800160ff1982351617855561264e565b8280016001018555821561264e579182015b8281111561264e578235825591602001919060010190612633565b506114e99291505b808211156114e95760008155600101612656565b80356001600160a01b038116811461083457600080fd5b60008083601f840112612692578081fd5b50813567ffffffffffffffff8111156126a9578182fd5b60208301915083602080830285010111156126c357600080fd5b9250929050565b8035801515811461083457600080fd5b60008083601f8401126126eb578182fd5b50813567ffffffffffffffff811115612702578182fd5b6020830191508360208285010111156126c357600080fd5b60006020828403121561272b578081fd5b6114ba8261266a565b60008060408385031215612746578081fd5b61274f8361266a565b915061275d6020840161266a565b90509250929050565b6000806000806000806080878903121561277e578182fd5b6127878761266a565b95506127956020880161266a565b9450604087013567ffffffffffffffff808211156127b1578384fd5b6127bd8a838b01612681565b909650945060608901359150808211156127d5578384fd5b506127e289828a016126da565b979a9699509497509295939492505050565b600080600060608486031215612808578283fd5b6128118461266a565b925061281f6020850161266a565b9150604084013590509250925092565b60008060008060808587031215612844578384fd5b61284d8561266a565b9350602061285c81870161266a565b935060408601359250606086013567ffffffffffffffff8082111561287f578384fd5b818801915088601f830112612892578384fd5b8135818111156128a4576128a4613565565b604051601f8201601f19168101850183811182821017156128c7576128c7613565565b60405281815283820185018b10156128dd578586fd5b81858501868301379081019093019390935250939692955090935050565b60008060006040848603121561290f578283fd5b6129188461266a565b9250602084013567ffffffffffffffff811115612933578283fd5b61293f86828701612681565b9497909650939450505050565b6000806040838503121561295e578182fd5b6129678361266a565b915061275d602084016126ca565b60008060408385031215612987578182fd5b6129908361266a565b946020939093013593505050565b600080600080604085870312156129b3578384fd5b843567ffffffffffffffff808211156129ca578586fd5b6129d688838901612681565b909650945060208701359150808211156129ee578384fd5b506129fb87828801612681565b95989497509550505050565b600060208284031215612a18578081fd5b6114ba826126ca565b600060208284031215612a32578081fd5b81356114ba8161357b565b600060208284031215612a4e578081fd5b81516114ba8161357b565b60008060208385031215612a6b578182fd5b823567ffffffffffffffff811115612a81578283fd5b612a8d858286016126da565b90969095509350505050565b600060208284031215612aaa578081fd5b5035919050565b600080600060608486031215612ac5578081fd5b505081359360208301359350604090920135919050565b60008151808452612af481602086016020860161348c565b601f01601f19169290920160200192915050565b60008151612b1a81856020860161348c565b9290920192915050565b8254600090819060028104600180831680612b4057607f831692505b6020808410821415612b6057634e487b7160e01b87526022600452602487fd5b818015612b745760018114612b8557612bb1565b60ff19861689528489019650612bb1565b612b8e8b61341e565b885b86811015612ba95781548b820152908501908301612b90565b505084890196505b505050505050612bc18185612b08565b95945050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c1490830184612adc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612c5657835183529284019291840191600101612c3a565b50909695505050505050565b901515815260200190565b6000602082526114ba6020830184612adc565b60208082526010908201526f496e76616c69642064656c656761746560801b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526019908201527f4661696c656420456d657267656e637920576974686472617700000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526014908201527315985b1d595cc8185c99481b9bdd081d985b1a5960621b604082015260600190565b602080825260149082015273537769706120616d6f756e7420746f6f2062696760601b604082015260600190565b60208082526018908201527f53776970612073616c65206973206e6f74206163746976650000000000000000604082015260600190565b60208082526027908201527f4e657720737570706c79206973206c657373207468616e2070726576696f757360408201526620737570706c7960c81b606082015260800190565b60208082526016908201527521b7bab632103737ba103b32b934b33c9037bbb732b960511b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526019908201527f48617665206e6f7420776974686472657720696e697469616c00000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601490820152734f72646572206578636565647320737570706c7960601b604082015260600190565b60208082526019908201527f4661696c6564207769746864726177696e6720696e6974616c00000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526018908201527f416c726561647920776974686472657720696e697469616c0000000000000000604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526018908201527f54686520617272617973206d75737420626520657175616c0000000000000000604082015260600190565b6020808252600f908201526e4661696c656420776974686472617760881b604082015260600190565b6020808252601c908201527f4e6f7420656e6f75676820657468657220746f20776974686472617700000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b602080825260159082015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b604082015260600190565b90815260200190565b60009081526020902090565b6000821982111561343d5761343d613539565b500190565b6000826134515761345161354f565b500490565b600081600019048311821515161561347057613470613539565b500290565b60008282101561348757613487613539565b500390565b60005b838110156134a757818101518382015260200161348f565b83811115611a6f5750506000910152565b6000816134c7576134c7613539565b506000190190565b6002810460018216806134e357607f821691505b6020821081141561350457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561351e5761351e613539565b5060010190565b6000826135345761353461354f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461128d57600080fdfea2646970667358221220db31c4e887df088d0ed994a0cb281c93445c9f2562edbd9c76d9ae1a21528e7664736f6c63430008000033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80636bf24dcd116101755780639e759865116100dc578063c87b56dd11610095578063db2e21bc1161006f578063db2e21bc146107a2578063e985e9c5146107b7578063ed576adf146107d7578063f2fde38b146107ec576102b9565b8063c87b56dd14610758578063d1de084b14610778578063d5abeb011461078d576102b9565b80639e759865146106bd578063a0712d68146106d0578063a22cb465146106e3578063b534a5c414610703578063b88d4fde14610723578063b8a7c78a14610743576102b9565b80637501f7411161012e5780637501f741146106295780637ed6c9261461063e578063841718a61461065e5780638da5cb5b1461067e5780638e52628b1461069357806395d89b41146106a8576102b9565b80636bf24dcd146105975780636c19e783146105ac5780636e9849dd146105cc57806370a08231146105df578063715018a6146105ff578063738f88a514610614576102b9565b80633fe8f0a7116102195780634f6ccce7116101d25780634f6ccce7146104f857806355f804b314610518578063564566a81461053857806363511db61461054d5780636352211e146105625780636817c76c14610582576102b9565b80633fe8f0a71461044157806342842e0e14610456578063438b6300146104765780634a994eef146104a35780634bb278f3146104c35780634d44660c146104d8576102b9565b8063138b40fa1161026b578063138b40fa146103a057806318160ddd146103b557806323b872dd146103d75780632f745c59146103f75780633ccfd60b146104175780633ec2826e1461042c576102b9565b806301ffc9a7146102bb57806306fdde03146102f15780630777962714610313578063081812fc14610333578063095ea7b314610360578063111be31614610380576102b9565b366102b957005b005b3480156102c757600080fd5b506102db6102d6366004612a21565b61080c565b6040516102e89190612c62565b60405180910390f35b3480156102fd57600080fd5b50610306610839565b6040516102e89190612c6d565b34801561031f57600080fd5b506102db61032e36600461271a565b6108cb565b34801561033f57600080fd5b5061035361034e366004612a99565b610934565b6040516102e89190612bcd565b34801561036c57600080fd5b506102b961037b366004612975565b610977565b34801561038c57600080fd5b506102b961039b366004612ab1565b610a0f565b3480156103ac57600080fd5b506102db610aaf565b3480156103c157600080fd5b506103ca610abd565b6040516102e89190613415565b3480156103e357600080fd5b506102b96103f23660046127f4565b610ae1565b34801561040357600080fd5b506103ca610412366004612975565b610b19565b34801561042357600080fd5b506102b9610bb5565b34801561043857600080fd5b506102b9610fb5565b34801561044d57600080fd5b506102b96111cd565b34801561046257600080fd5b506102b96104713660046127f4565b611290565b34801561048257600080fd5b5061049661049136600461271a565b6112ab565b6040516102e89190612c1e565b3480156104af57600080fd5b506102b96104be36600461294c565b611367565b3480156104cf57600080fd5b506102b96113d1565b3480156104e457600080fd5b506102db6104f33660046128fb565b611423565b34801561050457600080fd5b506103ca610513366004612a99565b6114c1565b34801561052457600080fd5b506102b9610533366004612a59565b6114ed565b34801561054457600080fd5b506102db611528565b34801561055957600080fd5b50610353611531565b34801561056e57600080fd5b5061035361057d366004612a99565b611540565b34801561058e57600080fd5b506103ca611598565b3480156105a357600080fd5b5061035361159e565b3480156105b857600080fd5b506102b96105c736600461271a565b6115ad565b6102b96105da36600461299e565b61160e565b3480156105eb57600080fd5b506103ca6105fa36600461271a565b611797565b34801561060b57600080fd5b506102b9611830565b34801561062057600080fd5b5061035361187b565b34801561063557600080fd5b506103ca61188a565b34801561064a57600080fd5b506102b9610659366004612a59565b611890565b34801561066a57600080fd5b506102b9610679366004612a07565b6118db565b34801561068a57600080fd5b50610353611946565b34801561069f57600080fd5b50610353611955565b3480156106b457600080fd5b50610306611964565b6102b96106cb3660046128fb565b611973565b6102b96106de366004612a99565b611a75565b3480156106ef57600080fd5b506102b96106fe36600461294c565b611b4e565b34801561070f57600080fd5b506102b961071e366004612766565b611c1c565b34801561072f57600080fd5b506102b961073e36600461282f565b611c9f565b34801561074f57600080fd5b50610353611cd8565b34801561076457600080fd5b50610306610773366004612a99565b611ce7565b34801561078457600080fd5b50610353611d40565b34801561079957600080fd5b506103ca611d4f565b3480156107ae57600080fd5b506102b9611d55565b3480156107c357600080fd5b506102db6107d2366004612734565b611db2565b3480156107e357600080fd5b50610353611de0565b3480156107f857600080fd5b506102b961080736600461271a565b611def565b60006001600160e01b0319821663780e9d6360e01b1480610831575061083182611e5a565b90505b919050565b606060008054610848906134cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610874906134cf565b80156108c15780601f10610896576101008083540402835291602001916108c1565b820191906000526020600020905b8154815290600101906020018083116108a457829003601f168201915b5050505050905090565b60006108d5611e9a565b6001600160a01b03166108e6611946565b6001600160a01b0316146109155760405162461bcd60e51b815260040161090c9061316d565b60405180910390fd5b506001600160a01b031660009081526009602052604090205460ff1690565b600061093f82611e9e565b61095b5760405162461bcd60e51b815260040161090c90613121565b506000908152600560205260409020546001600160a01b031690565b600061098282611540565b9050806001600160a01b0316836001600160a01b031614156109b65760405162461bcd60e51b815260040161090c90613308565b806001600160a01b03166109c8611e9a565b6001600160a01b031614806109e457506109e4816107d2611e9a565b610a005760405162461bcd60e51b815260040161090c90612fcc565b610a0a8383611ef6565b505050565b3360009081526009602052604090205460ff16610a3e5760405162461bcd60e51b815260040161090c90612c80565b82600c54141580610a51575081600d5414155b80610a5e575080600e5414155b610a7a5760405162461bcd60e51b815260040161090c90612dc4565b610a82610abd565b821015610aa15760405162461bcd60e51b815260040161090c90612e57565b600c92909255600d55600e55565b600f54610100900460ff1681565b6000600254600354610acf919061342a565b600454610adc9190613475565b905090565b610af2610aec611e9a565b82611f64565b610b0e5760405162461bcd60e51b815260040161090c90613349565b610a0a838383611fe9565b60008060005b600454811015610b965760048181548110610b4a57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0386811691161415610b865783821415610b7a579150610baf9050565b610b838261350a565b91505b610b8f8161350a565b9050610b1f565b5060405162461bcd60e51b815260040161090c90612caa565b92915050565b60004711610bd55760405162461bcd60e51b815260040161090c906132d1565b600f5460ff610100909104161515600114610c025760405162461bcd60e51b815260040161090c90612f49565b60115447906000906001600160a01b0316612710610c22846101a9613456565b610c2c9190613442565b604051610c3890612bca565b60006040518083038185875af1925050503d8060008114610c75576040519150601f19603f3d011682016040523d82523d6000602084013e610c7a565b606091505b50506012549091506000906001600160a01b0316612710610c9d856101a9613456565b610ca79190613442565b604051610cb390612bca565b60006040518083038185875af1925050503d8060008114610cf0576040519150601f19603f3d011682016040523d82523d6000602084013e610cf5565b606091505b50506013549091506000906001600160a01b03166103e8610d188661016d613456565b610d229190613442565b604051610d2e90612bca565b60006040518083038185875af1925050503d8060008114610d6b576040519150601f19603f3d011682016040523d82523d6000602084013e610d70565b606091505b50506014549091506000906001600160a01b03166064610d9187600a613456565b610d9b9190613442565b604051610da790612bca565b60006040518083038185875af1925050503d8060008114610de4576040519150601f19603f3d011682016040523d82523d6000602084013e610de9565b606091505b50506015549091506000906001600160a01b03166064610e0a886028613456565b610e149190613442565b604051610e2090612bca565b60006040518083038185875af1925050503d8060008114610e5d576040519150601f19603f3d011682016040523d82523d6000602084013e610e62565b606091505b50506016549091506000906001600160a01b03166064610e83896003613456565b610e8d9190613442565b604051610e9990612bca565b60006040518083038185875af1925050503d8060008114610ed6576040519150601f19603f3d011682016040523d82523d6000602084013e610edb565b606091505b50506017549091506000906001600160a01b03166064610efc8a6002613456565b610f069190613442565b604051610f1290612bca565b60006040518083038185875af1925050503d8060008114610f4f576040519150601f19603f3d011682016040523d82523d6000602084013e610f54565b606091505b50509050868015610f625750855b8015610f6b5750845b8015610f745750835b8015610f7d5750825b8015610f865750815b8015610f8f5750805b610fab5760405162461bcd60e51b815260040161090c906132a8565b5050505050505050565b610fbd611e9a565b6001600160a01b0316610fce611946565b6001600160a01b031614610ff45760405162461bcd60e51b815260040161090c9061316d565b68015d94db89a4170000471161101c5760405162461bcd60e51b815260040161090c906132d1565b600f54610100900460ff16156110445760405162461bcd60e51b815260040161090c906131a2565b6013546040516000916001600160a01b0316906801423e02f9a49200009061106b90612bca565b60006040518083038185875af1925050503d80600081146110a8576040519150601f19603f3d011682016040523d82523d6000602084013e6110ad565b606091505b50506011546040519192506000916001600160a01b0390911690670d99a8cec7e20000906110da90612bca565b60006040518083038185875af1925050503d8060008114611117576040519150601f19603f3d011682016040523d82523d6000602084013e61111c565b606091505b50506012546040519192506000916001600160a01b0390911690670dbd2fc137a300009061114990612bca565b60006040518083038185875af1925050503d8060008114611186576040519150601f19603f3d011682016040523d82523d6000602084013e61118b565b606091505b5050600f805461ff00191661010017905590508280156111a85750815b80156111b15750805b610a0a5760405162461bcd60e51b815260040161090c906130ea565b6111d5611e9a565b6001600160a01b03166111e6611946565b6001600160a01b03161461120c5760405162461bcd60e51b815260040161090c9061316d565b6012546040516000916001600160a01b031690479061122a90612bca565b60006040518083038185875af1925050503d8060008114611267576040519150601f19603f3d011682016040523d82523d6000602084013e61126c565b606091505b505090508061128d5760405162461bcd60e51b815260040161090c90612d47565b50565b610a0a83838360405180602001604052806000815250611c9f565b606060006112b883611797565b905060008167ffffffffffffffff8111156112e357634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561130c578160200160208202803683370190505b50905060005b8281101561135f576113248582610b19565b82828151811061134457634e487b7160e01b600052603260045260246000fd5b60209081029190910101526113588161350a565b9050611312565b509392505050565b61136f611e9a565b6001600160a01b0316611380611946565b6001600160a01b0316146113a65760405162461bcd60e51b815260040161090c9061316d565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6113d9611e9a565b6001600160a01b03166113ea611946565b6001600160a01b0316146114105760405162461bcd60e51b815260040161090c9061316d565b611418611946565b6001600160a01b0316ff5b6000805b828110156114b457846001600160a01b0316600485858481811061145b57634e487b7160e01b600052603260045260246000fd5b905060200201358154811061148057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146114a45760009150506114ba565b6114ad8161350a565b9050611427565b50600190505b9392505050565b60006114cb610abd565b82106114e95760405162461bcd60e51b815260040161090c9061339a565b5090565b3360009081526009602052604090205460ff1661151c5760405162461bcd60e51b815260040161090c90612c80565b610a0a601083836125da565b600f5460ff1681565b6011546001600160a01b031681565b6000806004838154811061156457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03169050806108315760405162461bcd60e51b815260040161090c90613073565b600e5481565b6015546001600160a01b031681565b6115b5611e9a565b6001600160a01b03166115c6611946565b6001600160a01b0316146115ec5760405162461bcd60e51b815260040161090c9061316d565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526009602052604090205460ff1661163d5760405162461bcd60e51b815260040161090c90612c80565b82811461165c5760405162461bcd60e51b815260040161090c90613271565b600080611667610abd565b905060005b858110156116b85786868281811061169457634e487b7160e01b600052603260045260246000fd5b90506020020135836116a6919061342a565b92506116b18161350a565b905061166c565b50600d546116c6838361342a565b11156116e45760405162461bcd60e51b815260040161090c906130bc565b6000915060005b8381101561178e5760005b87878381811061171657634e487b7160e01b600052603260045260246000fd5b9050602002013581101561177d5761176d86868481811061174757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061175c919061271a565b846117668161350a565b95506120da565b6117768161350a565b90506116f6565b506117878161350a565b90506116eb565b50505050505050565b60006001600160a01b0382166117bf5760405162461bcd60e51b815260040161090c90613029565b6000805b60045481101561182957600481815481106117ee57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0385811691161415611819576118168261350a565b91505b6118228161350a565b90506117c3565b5092915050565b611838611e9a565b6001600160a01b0316611849611946565b6001600160a01b03161461186f5760405162461bcd60e51b815260040161090c9061316d565b6118796000612162565b565b6012546001600160a01b031681565b600c5481565b611898611e9a565b6001600160a01b03166118a9611946565b6001600160a01b0316146118cf5760405162461bcd60e51b815260040161090c9061316d565b610a0a600a83836125da565b3360009081526009602052604090205460ff1661190a5760405162461bcd60e51b815260040161090c90612c80565b600f5460ff16151581151514156119335760405162461bcd60e51b815260040161090c90612dc4565b600f805460ff1916911515919091179055565b6008546001600160a01b031690565b6016546001600160a01b031681565b606060018054610848906134cf565b3360009081526009602052604090205460ff166119a25760405162461bcd60e51b815260040161090c90612c80565b60005b81811015611a6f57836001600160a01b031660048484848181106119d957634e487b7160e01b600052603260045260246000fd5b90506020020135815481106119fe57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614611a305760405162461bcd60e51b815260040161090c90612e9e565b611a5f838383818110611a5357634e487b7160e01b600052603260045260246000fd5b905060200201356121b4565b611a688161350a565b90506119a5565b50505050565b600f5460ff16611a975760405162461bcd60e51b815260040161090c90612e20565b600c54811115611ab95760405162461bcd60e51b815260040161090c90612df2565b80600e54611ac79190613456565b341015611ae65760405162461bcd60e51b815260040161090c906133e6565b6000611af0610abd565b600d54909150611b00838361342a565b1115611b1e5760405162461bcd60e51b815260040161090c906130bc565b60005b82811015610a0a57611b3e3383611b378161350a565b94506120da565b611b478161350a565b9050611b21565b611b56611e9a565b6001600160a01b0316826001600160a01b03161415611b875760405162461bcd60e51b815260040161090c90612f12565b8060066000611b94611e9a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611bd8611e9a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c109190612c62565b60405180910390a35050565b60005b8381101561178e57611c8f8787878785818110611c4c57634e487b7160e01b600052603260045260246000fd5b9050602002013586868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c9f92505050565b611c988161350a565b9050611c1f565b611cb0611caa611e9a565b83611f64565b611ccc5760405162461bcd60e51b815260040161090c90613349565b611a6f8484848461226c565b6014546001600160a01b031681565b6060611cf282611e9e565b611d0e5760405162461bcd60e51b815260040161090c90613222565b6010611d198361229f565b604051602001611d2a929190612b24565b6040516020818303038152906040529050919050565b6013546001600160a01b031681565b600d5481565b611d5d611e9a565b6001600160a01b0316611d6e611946565b6001600160a01b031614611d945760405162461bcd60e51b815260040161090c9061316d565b6011546040516000916001600160a01b031690479061122a90612bca565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6017546001600160a01b031681565b611df7611e9a565b6001600160a01b0316611e08611946565b6001600160a01b031614611e2e5760405162461bcd60e51b815260040161090c9061316d565b6001600160a01b0381166000908152600960205260409020805460ff1916600117905561128d816123ba565b60006001600160e01b031982166380ac58cd60e01b1480611e8b57506001600160e01b03198216635b5e139f60e01b145b80610831575061083182612428565b3390565b60045460009082108015610831575060006001600160a01b031660048381548110611ed957634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141592915050565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f2b82611540565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611f6f82611e9e565b611f8b5760405162461bcd60e51b815260040161090c90612f80565b6000611f9683611540565b9050806001600160a01b0316846001600160a01b03161480611fd15750836001600160a01b0316611fc684610934565b6001600160a01b0316145b80611fe15750611fe18185611db2565b949350505050565b826001600160a01b0316611ffc82611540565b6001600160a01b0316146120225760405162461bcd60e51b815260040161090c906131d9565b6001600160a01b0382166120485760405162461bcd60e51b815260040161090c90612ece565b612053838383612441565b61205e600082611ef6565b816004828154811061208057634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b6120e660008383612441565b6004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006121bf82611540565b90506121d26121cc611946565b83611ef6565b6121de81600084612441565b6002600081546121ed9061350a565b9190508190555060006004838154811061221757634e487b7160e01b600052603260045260246000fd5b6000918252602082200180546001600160a01b0319166001600160a01b0393841617905560405184928416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b612277848484611fe9565b612283848484846124b9565b611a6f5760405162461bcd60e51b815260040161090c90612cf5565b6060816122c457506040805180820190915260018152600360fc1b6020820152610834565b8160005b81156122ee57806122d88161350a565b91506122e79050600a83613442565b91506122c8565b60008167ffffffffffffffff81111561231757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612341576020820181803683370190505b5090505b8415611fe157612356600183613475565b9150612363600a86613525565b61236e90603061342a565b60f81b81838151811061239157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506123b3600a86613442565b9450612345565b6123c2611e9a565b6001600160a01b03166123d3611946565b6001600160a01b0316146123f95760405162461bcd60e51b815260040161090c9061316d565b6001600160a01b03811661241f5760405162461bcd60e51b815260040161090c90612d7e565b61128d81612162565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b0383161561247b576001600160a01b03831660009081526007602052604081208054909190612476906134b8565b909155505b6001600160a01b03821615610a0a576001600160a01b038216600090815260076020526040812080549091906124b09061350a565b90915550505050565b60006124cd846001600160a01b03166125d4565b156125c957836001600160a01b031663150b7a026124e9611e9a565b8786866040518563ffffffff1660e01b815260040161250b9493929190612be1565b602060405180830381600087803b15801561252557600080fd5b505af1925050508015612555575060408051601f3d908101601f1916820190925261255291810190612a3d565b60015b6125af573d808015612583576040519150601f19603f3d011682016040523d82523d6000602084013e612588565b606091505b5080516125a75760405162461bcd60e51b815260040161090c90612cf5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611fe1565b506001949350505050565b3b151590565b8280546125e6906134cf565b90600052602060002090601f016020900481019282612608576000855561264e565b82601f106126215782800160ff1982351617855561264e565b8280016001018555821561264e579182015b8281111561264e578235825591602001919060010190612633565b506114e99291505b808211156114e95760008155600101612656565b80356001600160a01b038116811461083457600080fd5b60008083601f840112612692578081fd5b50813567ffffffffffffffff8111156126a9578182fd5b60208301915083602080830285010111156126c357600080fd5b9250929050565b8035801515811461083457600080fd5b60008083601f8401126126eb578182fd5b50813567ffffffffffffffff811115612702578182fd5b6020830191508360208285010111156126c357600080fd5b60006020828403121561272b578081fd5b6114ba8261266a565b60008060408385031215612746578081fd5b61274f8361266a565b915061275d6020840161266a565b90509250929050565b6000806000806000806080878903121561277e578182fd5b6127878761266a565b95506127956020880161266a565b9450604087013567ffffffffffffffff808211156127b1578384fd5b6127bd8a838b01612681565b909650945060608901359150808211156127d5578384fd5b506127e289828a016126da565b979a9699509497509295939492505050565b600080600060608486031215612808578283fd5b6128118461266a565b925061281f6020850161266a565b9150604084013590509250925092565b60008060008060808587031215612844578384fd5b61284d8561266a565b9350602061285c81870161266a565b935060408601359250606086013567ffffffffffffffff8082111561287f578384fd5b818801915088601f830112612892578384fd5b8135818111156128a4576128a4613565565b604051601f8201601f19168101850183811182821017156128c7576128c7613565565b60405281815283820185018b10156128dd578586fd5b81858501868301379081019093019390935250939692955090935050565b60008060006040848603121561290f578283fd5b6129188461266a565b9250602084013567ffffffffffffffff811115612933578283fd5b61293f86828701612681565b9497909650939450505050565b6000806040838503121561295e578182fd5b6129678361266a565b915061275d602084016126ca565b60008060408385031215612987578182fd5b6129908361266a565b946020939093013593505050565b600080600080604085870312156129b3578384fd5b843567ffffffffffffffff808211156129ca578586fd5b6129d688838901612681565b909650945060208701359150808211156129ee578384fd5b506129fb87828801612681565b95989497509550505050565b600060208284031215612a18578081fd5b6114ba826126ca565b600060208284031215612a32578081fd5b81356114ba8161357b565b600060208284031215612a4e578081fd5b81516114ba8161357b565b60008060208385031215612a6b578182fd5b823567ffffffffffffffff811115612a81578283fd5b612a8d858286016126da565b90969095509350505050565b600060208284031215612aaa578081fd5b5035919050565b600080600060608486031215612ac5578081fd5b505081359360208301359350604090920135919050565b60008151808452612af481602086016020860161348c565b601f01601f19169290920160200192915050565b60008151612b1a81856020860161348c565b9290920192915050565b8254600090819060028104600180831680612b4057607f831692505b6020808410821415612b6057634e487b7160e01b87526022600452602487fd5b818015612b745760018114612b8557612bb1565b60ff19861689528489019650612bb1565b612b8e8b61341e565b885b86811015612ba95781548b820152908501908301612b90565b505084890196505b505050505050612bc18185612b08565b95945050505050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612c1490830184612adc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612c5657835183529284019291840191600101612c3a565b50909695505050505050565b901515815260200190565b6000602082526114ba6020830184612adc565b60208082526010908201526f496e76616c69642064656c656761746560801b604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526019908201527f4661696c656420456d657267656e637920576974686472617700000000000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526014908201527315985b1d595cc8185c99481b9bdd081d985b1a5960621b604082015260600190565b602080825260149082015273537769706120616d6f756e7420746f6f2062696760601b604082015260600190565b60208082526018908201527f53776970612073616c65206973206e6f74206163746976650000000000000000604082015260600190565b60208082526027908201527f4e657720737570706c79206973206c657373207468616e2070726576696f757360408201526620737570706c7960c81b606082015260800190565b60208082526016908201527521b7bab632103737ba103b32b934b33c9037bbb732b960511b604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526019908201527f48617665206e6f7420776974686472657720696e697469616c00000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252601490820152734f72646572206578636565647320737570706c7960601b604082015260600190565b60208082526019908201527f4661696c6564207769746864726177696e6720696e6974616c00000000000000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526018908201527f416c726561647920776974686472657720696e697469616c0000000000000000604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526018908201527f54686520617272617973206d75737420626520657175616c0000000000000000604082015260600190565b6020808252600f908201526e4661696c656420776974686472617760881b604082015260600190565b6020808252601c908201527f4e6f7420656e6f75676820657468657220746f20776974686472617700000000604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b602080825260159082015274139bdd08195b9bdd59da08195d1a195c881cd95b9d605a1b604082015260600190565b90815260200190565b60009081526020902090565b6000821982111561343d5761343d613539565b500190565b6000826134515761345161354f565b500490565b600081600019048311821515161561347057613470613539565b500290565b60008282101561348757613487613539565b500390565b60005b838110156134a757818101518382015260200161348f565b83811115611a6f5750506000910152565b6000816134c7576134c7613539565b506000190190565b6002810460018216806134e357607f821691505b6020821081141561350457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561351e5761351e613539565b5060010190565b6000826135345761353461354f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461128d57600080fdfea2646970667358221220db31c4e887df088d0ed994a0cb281c93445c9f2562edbd9c76d9ae1a21528e7664736f6c63430008000033

Deployed Bytecode Sourcemap

143:6031:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;833:223:6;;;;;;;;;;-1:-1:-1;833:223:6;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1499:100:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;416:110:2:-;;;;;;;;;;-1:-1:-1;416:110:2;;;;;:::i;:::-;;:::i;2791:213:5:-;;;;;;;;;;-1:-1:-1;2791:213:5;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2384:401::-;;;;;;;;;;-1:-1:-1;2384:401:5;;;;;:::i;:::-;;:::i;3005:366:16:-;;;;;;;;;;-1:-1:-1;3005:366:16;;;;;:::i;:::-;;:::i;406:36::-;;;;;;;;;;;;;:::i;1690:157:6:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3475:326:5:-;;;;;;;;;;-1:-1:-1;3475:326:5;;;;;:::i;:::-;;:::i;1062:419:6:-;;;;;;;;;;-1:-1:-1;1062:419:6;;;;;:::i;:::-;;:::i;4516:973:16:-;;;;;;;;;;;;;:::i;3459:614::-;;;;;;;;;;;;;:::i;4295:217::-;;;;;;;;;;;;;:::i;3807:178:5:-;;;;;;;;;;-1:-1:-1;3807:178:5;;;;;:::i;:::-;;:::i;2100:339:6:-;;;;;;;;;;-1:-1:-1;2100:339:6;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;530:114:2:-;;;;;;;;;;-1:-1:-1;530:114:2;;;;;:::i;:::-;;:::i;3375:80:16:-;;;;;;;;;;;;;:::i;548:279:6:-;;;;;;;;;;-1:-1:-1;548:279:6;;;;;:::i;:::-;;:::i;1487:197::-;;;;;;;;;;-1:-1:-1;1487:197:6;;;;;:::i;:::-;;:::i;2894:107:16:-;;;;;;;;;;-1:-1:-1;2894:107:16;;;;;:::i;:::-;;:::i;370:32::-;;;;;;;;;;;;;:::i;487:71::-;;;;;;;;;;;;;:::i;1605:232:5:-;;;;;;;;;;-1:-1:-1;1605:232:5;;;;;:::i;:::-;;:::i;332:34:16:-;;;;;;;;;;;;;:::i;793:68::-;;;;;;;;;;;;;:::i;370:82:14:-;;;;;;;;;;-1:-1:-1;370:82:14;;;;;:::i;:::-;;:::i;2133:576:16:-;;;;;;:::i;:::-;;:::i;1166:327:5:-;;;;;;;;;;-1:-1:-1;1166:327:5;;;;;:::i;:::-;;:::i;1598:92:13:-;;;;;;;;;;;;;:::i;562:71:16:-;;;;;;;;;;;;;:::i;227:23::-;;;;;;;;;;;;;:::i;276:90:14:-;;;;;;;;;;-1:-1:-1;276:90:14;;;;;:::i;:::-;;:::i;2713:176:16:-;;;;;;;;;;-1:-1:-1;2713:176:16;;;;;:::i;:::-;;:::i;966:85:13:-;;;;;;;;;;;;;:::i;865:71:16:-;;;;;;;;;;;;;:::i;2149:104:5:-;;;;;;;;;;;;;:::i;1850:255:16:-;;;;;;:::i;:::-;;:::i;1416:430::-;;;;;;:::i;:::-;;:::i;3178:291:5:-;;;;;;;;;;-1:-1:-1;3178:291:5;;;;;:::i;:::-;;:::i;1853:241:6:-;;;;;;;;;;-1:-1:-1;1853:241:6;;;;;:::i;:::-;;:::i;3991:317:5:-;;;;;;;;;;-1:-1:-1;3991:317:5;;;;;:::i;:::-;;:::i;713:76:16:-;;;;;;;;;;;;;:::i;1162:250::-;;;;;;;;;;-1:-1:-1;1162:250:16;;;;;:::i;:::-;;:::i;637:72::-;;;;;;;;;;;;;:::i;254:28::-;;;;;;;;;;;;;:::i;4077:214::-;;;;;;;;;;;;;:::i;3010:162:5:-;;;;;;;;;;-1:-1:-1;3010:162:5;;;;;:::i;:::-;;:::i;940:71:16:-;;;;;;;;;;;;;:::i;648:158:2:-;;;;;;;;;;-1:-1:-1;648:158:2;;;;;:::i;:::-;;:::i;833:223:6:-;936:4;-1:-1:-1;;;;;;959:50:6;;-1:-1:-1;;;959:50:6;;:90;;;1013:36;1037:11;1013:23;:36::i;:::-;952:97;;833:223;;;;:::o;1499:100:5:-;1555:13;1587:5;1580:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1499:100;:::o;416:110:2:-;486:4;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;505:16:2::1;;::::0;;;:10:::1;:16;::::0;;;;;::::1;;::::0;416:110::o;2791:213:5:-;2864:7;2891:16;2899:7;2891;:16::i;:::-;2883:73;;;;-1:-1:-1;;;2883:73:5;;;;;;;:::i;:::-;-1:-1:-1;2973:24:5;;;;:15;:24;;;;;;-1:-1:-1;;;;;2973:24:5;;2791:213::o;2384:401::-;2463:13;2479:24;2495:7;2479:15;:24::i;:::-;2463:40;;2527:5;-1:-1:-1;;;;;2521:11:5;:2;-1:-1:-1;;;;;2521:11:5;;;2513:57;;;;-1:-1:-1;;;2513:57:5;;;;;;;:::i;:::-;2618:5;-1:-1:-1;;;;;2602:21:5;:12;:10;:12::i;:::-;-1:-1:-1;;;;;2602:21:5;;:62;;;;2627:37;2644:5;2651:12;:10;:12::i;2627:37::-;2581:165;;;;-1:-1:-1;;;2581:165:5;;;;;;;:::i;:::-;2757:21;2766:2;2770:7;2757:8;:21::i;:::-;2384:401;;;:::o;3005:366:16:-;353:10:2;342:22;;;;:10;:22;;;;;;;;334:52;;;;-1:-1:-1;;;334:52:2;;;;;;;:::i;:::-;3119:8:16::1;3108:7;;:19;;:46;;;;3144:10;3131:9;;:23;;3108:46;:69;;;;3171:6;3158:9;;:19;;3108:69;3099:104;;;;-1:-1:-1::0;;;3099:104:16::1;;;;;;;:::i;:::-;3231:13;:11;:13::i;:::-;3217:10;:27;;3209:80;;;;-1:-1:-1::0;;;3209:80:16::1;;;;;;;:::i;:::-;3296:7;:18:::0;;;;3320:9:::1;:22:::0;3348:9:::1;:18:::0;3005:366::o;406:36::-;;;;;;;;;:::o;1690:157:6:-;1781:4;1832:7;;1822;;:17;;;;:::i;:::-;1804:7;:14;:36;;;;:::i;:::-;1797:43;;1690:157;:::o;3475:326:5:-;3661:41;3680:12;:10;:12::i;:::-;3694:7;3661:18;:41::i;:::-;3653:103;;;;-1:-1:-1;;;3653:103:5;;;;;;;:::i;:::-;3766:28;3776:4;3782:2;3786:7;3766:9;:28::i;1062:419:6:-;1148:12;1172:10;1197:6;1192:219;1209:7;:14;1205:18;;1192:219;;;1257:7;1265:1;1257:10;;;;;;-1:-1:-1;;;1257:10:6;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1248:19:6;;;1257:10;;1248:19;1244:157;;;1300:5;1291;:14;1287:99;;;1335:1;-1:-1:-1;1328:8:6;;-1:-1:-1;1328:8:6;1287:99;1379:7;;;:::i;:::-;;;1287:99;1225:3;;;:::i;:::-;;;1192:219;;;;1421:53;;-1:-1:-1;;;1421:53:6;;;;;;;:::i;1062:419::-;;;;;:::o;4516:973:16:-;4583:1;4559:21;:25;4551:66;;;;-1:-1:-1;;;4551:66:16;;;;;;;:::i;:::-;4631:16;;;;;;;;:24;;:16;:24;4623:62;;;;-1:-1:-1;;;4623:62:16;;;;;;;:::i;:::-;4772:11;;4715:21;;4691;;-1:-1:-1;;;;;4772:11:16;4818:5;4796:19;4715:21;4812:3;4796:19;:::i;:::-;:27;;;;:::i;:::-;4772:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4864:11:16;;4751:77;;-1:-1:-1;4844:15:16;;-1:-1:-1;;;;;4864:11:16;4910:5;4888:19;:13;4904:3;4888:19;:::i;:::-;:27;;;;:::i;:::-;4864:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4954:12:16;;4843:77;;-1:-1:-1;4934:15:16;;-1:-1:-1;;;;;4954:12:16;5001:4;4979:19;:13;4995:3;4979:19;:::i;:::-;:26;;;;:::i;:::-;4954:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5044:16:16;;4933:77;;-1:-1:-1;5024:15:16;;-1:-1:-1;;;;;5044:16:16;5094:3;5073:18;:13;5089:2;5073:18;:::i;:::-;:24;;;;:::i;:::-;5044:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5134:8:16;;5023:79;;-1:-1:-1;5114:15:16;;-1:-1:-1;;;;;5134:8:16;5176:3;5155:18;:13;5171:2;5155:18;:::i;:::-;:24;;;;:::i;:::-;5134:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5216:11:16;;5113:71;;-1:-1:-1;5196:15:16;;-1:-1:-1;;;;;5216:11:16;5260:3;5240:17;:13;5256:1;5240:17;:::i;:::-;:23;;;;:::i;:::-;5216:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5299:11:16;;5195:73;;-1:-1:-1;5279:15:16;;-1:-1:-1;;;;;5299:11:16;5343:3;5323:17;:13;5339:1;5323:17;:::i;:::-;:23;;;;:::i;:::-;5299:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5278:73;;;5370:10;:24;;;;;5384:10;5370:24;:38;;;;;5398:10;5370:38;:52;;;;;5412:10;5370:52;:66;;;;;5426:10;5370:66;:80;;;;;5440:10;5370:80;:94;;;;;5454:10;5370:94;5362:122;;;;-1:-1:-1;;;5362:122:16;;;;;;;:::i;:::-;4516:973;;;;;;;;:::o;3459:614::-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;3548:11:16::1;3524:21;:35;3516:76;;;;-1:-1:-1::0;;;3516:76:16::1;;;;;;;:::i;:::-;3610:16;::::0;::::1;::::0;::::1;;;:25;3602:62;;;;-1:-1:-1::0;;;3602:62:16::1;;;;;;;:::i;:::-;3707:12;::::0;:41:::1;::::0;3675:27:::1;::::0;-1:-1:-1;;;;;3707:12:16::1;::::0;3732:11:::1;::::0;3707:41:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;3791:11:16::1;::::0;:39:::1;::::0;3674:74;;-1:-1:-1;3759:27:16::1;::::0;-1:-1:-1;;;;;3791:11:16;;::::1;::::0;3815:10:::1;::::0;3791:39:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;3873:11:16::1;::::0;:39:::1;::::0;3758:72;;-1:-1:-1;3841:27:16::1;::::0;-1:-1:-1;;;;;3873:11:16;;::::1;::::0;3897:10:::1;::::0;3873:39:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;3923:16:16::1;:23:::0;;-1:-1:-1;;3923:23:16::1;;;::::0;;3840:72;-1:-1:-1;3964:22:16;:48;::::1;;;;3990:22;3964:48;:74;;;;;4016:22;3964:74;3956:112;;;;-1:-1:-1::0;;;3956:112:16::1;;;;;;;:::i;4295:217::-:0;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;4387:11:16::1;::::0;:50:::1;::::0;4353:29:::1;::::0;-1:-1:-1;;;;;4387:11:16::1;::::0;4411:21:::1;::::0;4387:50:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4352:85;;;4453:24;4445:62;;;;-1:-1:-1::0;;;4445:62:16::1;;;;;;;:::i;:::-;1248:1:13;4295:217:16:o:0;3807:178:5:-;3939:39;3956:4;3962:2;3966:7;3939:39;;;;;;;;;;;;:16;:39::i;2100:339:6:-;2182:13;2207;2223:20;2234:7;2223:9;:20::i;:::-;2207:36;;2253:20;2288:8;2276:22;;;;;;-1:-1:-1;;;2276:22:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2276:22:6;;2253:45;;2313:6;2308:102;2325:8;2321:1;:12;2308:102;;;2366:33;2387:7;2396:1;2366:19;:33::i;:::-;2354:6;2361:1;2354:9;;;;;;-1:-1:-1;;;2354:9:6;;;;;;;;;;;;;;;;;;:45;2335:3;;;:::i;:::-;;;2308:102;;;-1:-1:-1;2426:6:6;2100:339;-1:-1:-1;;;2100:339:6:o;530:114:2:-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;-1:-1:-1;;;;;609:16:2;;;::::1;;::::0;;;:10:::1;:16;::::0;;;;:30;;-1:-1:-1;;609:30:2::1;::::0;::::1;;::::0;;;::::1;::::0;;530:114::o;3375:80:16:-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;3441:7:16::1;:5;:7::i;:::-;-1:-1:-1::0;;;;;3420:30:16::1;;548:279:6::0;652:4;672:6;668:131;680:19;;;668:131;;;750:7;-1:-1:-1;;;;;724:33:6;:7;733:8;;742:1;733:11;;;;;-1:-1:-1;;;733:11:6;;;;;;;;;;;;;;;724:22;;;;;;-1:-1:-1;;;724:22:6;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;724:22:6;:33;720:68;;783:5;776:12;;;;;720:68;701:3;;;:::i;:::-;;;668:131;;;;816:4;809:11;;548:279;;;;;;:::o;1487:197::-;1561:4;1593:13;:11;:13::i;:::-;1585:5;:21;1577:78;;;;-1:-1:-1;;;1577:78:6;;;;;;;:::i;:::-;-1:-1:-1;1672:5:6;1487:197::o;2894:107:16:-;353:10:2;342:22;;;;:10;:22;;;;;;;;334:52;;;;-1:-1:-1;;;334:52:2;;;;;;;:::i;:::-;2970:26:16::1;:16;2989:7:::0;;2970:26:::1;:::i;370:32::-:0;;;;;;:::o;487:71::-;;;-1:-1:-1;;;;;487:71:16;;:::o;1605:232:5:-;1674:7;1693:13;1709:7;1717;1709:16;;;;;;-1:-1:-1;;;1709:16:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1709:16:5;;-1:-1:-1;1743:19:5;1735:73;;;;-1:-1:-1;;;1735:73:5;;;;;;;:::i;332:34:16:-;;;;:::o;793:68::-;;;-1:-1:-1;;;;;793:68:16;;:::o;370:82:14:-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;431:7:14::1;:16:::0;;-1:-1:-1;;;;;;431:16:14::1;-1:-1:-1::0;;;;;431:16:14;;;::::1;::::0;;;::::1;::::0;;370:82::o;2133:576:16:-;353:10:2;342:22;;;;:10;:22;;;;;;;;334:52;;;;-1:-1:-1;;;334:52:2;;;;;;;:::i;:::-;2253:35:16;;::::1;2245:73;;;;-1:-1:-1::0;;;2245:73:16::1;;;;;;;:::i;:::-;2325:18;2349:11:::0;2363:13:::1;:11;:13::i;:::-;2349:27;;2386:6;2382:80;2394:19:::0;;::::1;2382:80;;;2444:8;;2453:1;2444:11;;;;;-1:-1:-1::0;;;2444:11:16::1;;;;;;;;;;;;;;;2427:28;;;;;:::i;:::-;::::0;-1:-1:-1;2415:3:16::1;::::0;::::1;:::i;:::-;;;2382:80;;;-1:-1:-1::0;2502:9:16::1;::::0;2476:22:::1;2485:13:::0;2476:6;:22:::1;:::i;:::-;:35;;2467:70;;;;-1:-1:-1::0;;;2467:70:16::1;;;;;;;:::i;:::-;2543:20;;;2574:6;2570:135;2582:20:::0;;::::1;2570:135;;;2620:6;2616:83;2632:8;;2641:1;2632:11;;;;;-1:-1:-1::0;;;2632:11:16::1;;;;;;;;;;;;;;;2628:1;:15;2616:83;;;2659:31;2666:9;;2676:1;2666:12;;;;;-1:-1:-1::0;;;2666:12:16::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2680:8:::0;::::1;::::0;::::1;:::i;:::-;;;2659:5;:31::i;:::-;2645:3;::::0;::::1;:::i;:::-;;;2616:83;;;-1:-1:-1::0;2604:3:16::1;::::0;::::1;:::i;:::-;;;2570:135;;;;392:1:2;;2133:576:16::0;;;;:::o;1166:327:5:-;1238:4;-1:-1:-1;;;;;1262:19:5;;1254:74;;;;-1:-1:-1;;;1254:74:5;;;;;;;:::i;:::-;1339:10;1364:6;1359:106;1376:7;:14;1372:18;;1359:106;;;1422:7;1430:1;1422:10;;;;;;-1:-1:-1;;;1422:10:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1413:19:5;;;1422:10;;1413:19;1409:45;;;1447:7;;;:::i;:::-;;;1409:45;1392:3;;;:::i;:::-;;;1359:106;;;-1:-1:-1;1481:5:5;1166:327;-1:-1:-1;;1166:327:5:o;1598:92:13:-;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;562:71:16:-;;;-1:-1:-1;;;;;562:71:16;;:::o;227:23::-;;;;:::o;276:90:14:-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;345:16:14::1;:7;355:6:::0;;345:16:::1;:::i;2713:176:16:-:0;353:10:2;342:22;;;;:10;:22;;;;;;;;334:52;;;;-1:-1:-1;;;334:52:2;;;;;;;:::i;:::-;2794:12:16::1;::::0;::::1;;:29;;::::0;::::1;;;;2785:65;;;;-1:-1:-1::0;;;2785:65:16::1;;;;;;;:::i;:::-;2856:12;:28:::0;;-1:-1:-1;;2856:28:16::1;::::0;::::1;;::::0;;;::::1;::::0;;2713:176::o;966:85:13:-;1038:6;;-1:-1:-1;;;;;1038:6:13;966:85;:::o;865:71:16:-;;;-1:-1:-1;;;;;865:71:16;;:::o;2149:104:5:-;2207:13;2239:7;2232:14;;;;;:::i;1850:255:16:-;353:10:2;342:22;;;;:10;:22;;;;;;;;334:52;;;;-1:-1:-1;;;334:52:2;;;;;;;:::i;:::-;1954:6:16::1;1950:151;1962:19:::0;;::::1;1950:151;;;2031:7;-1:-1:-1::0;;;;;2005:33:16::1;:7;2014:8;;2023:1;2014:11;;;;;-1:-1:-1::0;;;2014:11:16::1;;;;;;;;;;;;;;;2005:22;;;;;;-1:-1:-1::0;;;2005:22:16::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;2005:22:16::1;:33;1996:70;;;;-1:-1:-1::0;;;1996:70:16::1;;;;;;;:::i;:::-;2074:20;2081:8;;2090:1;2081:11;;;;;-1:-1:-1::0;;;2081:11:16::1;;;;;;;;;;;;;;;2074:5;:20::i;:::-;1983:3;::::0;::::1;:::i;:::-;;;1950:151;;;;1850:255:::0;;;:::o;1416:430::-;1479:12;;;;1470:51;;;;-1:-1:-1;;;1470:51:16;;;;;;;:::i;:::-;1548:7;;1536:8;:19;;1527:54;;;;-1:-1:-1;;;1527:54:16;;;;;;;:::i;:::-;1621:8;1609:9;;:20;;;;:::i;:::-;1596:9;:33;;1587:69;;;;-1:-1:-1;;;1587:69:16;;;;;;;:::i;:::-;1663:11;1677:13;:11;:13::i;:::-;1726:9;;1663:27;;-1:-1:-1;1705:17:16;1714:8;1663:27;1705:17;:::i;:::-;:30;;1696:65;;;;-1:-1:-1;;;1696:65:16;;;;;;;:::i;:::-;1772:6;1768:74;1784:8;1780:1;:12;1768:74;;;1806:29;1813:10;1825:8;;;;:::i;:::-;;;1806:5;:29::i;:::-;1794:3;;;:::i;:::-;;;1768:74;;3178:291:5;3294:12;:10;:12::i;:::-;-1:-1:-1;;;;;3282:24:5;:8;-1:-1:-1;;;;;3282:24:5;;;3274:62;;;;-1:-1:-1;;;3274:62:5;;;;;;;:::i;:::-;3391:8;3346:18;:32;3365:12;:10;:12::i;:::-;-1:-1:-1;;;;;3346:32:5;;;;;;;;;;;;;;;;;-1:-1:-1;3346:32:5;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;3346:53:5;;;;;;;;;;;3429:12;:10;:12::i;:::-;-1:-1:-1;;;;;3414:48:5;;3453:8;3414:48;;;;;;:::i;:::-;;;;;;;;3178:291;;:::o;1853:241:6:-;1982:6;1978:110;1990:19;;;1978:110;;;2030:47;2048:4;2054:2;2058:8;;2067:1;2058:11;;;;;-1:-1:-1;;;2058:11:6;;;;;;;;;;;;;;;2071:4;;2030:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2030:16:6;;-1:-1:-1;;;2030:47:6:i;:::-;2011:3;;;:::i;:::-;;;1978:110;;3991:317:5;4157:41;4176:12;:10;:12::i;:::-;4190:7;4157:18;:41::i;:::-;4149:103;;;;-1:-1:-1;;;4149:103:5;;;;;;;:::i;:::-;4262:39;4276:4;4282:2;4286:7;4295:5;4262:13;:39::i;713:76:16:-;;;-1:-1:-1;;;;;713:76:16;;:::o;1162:250::-;1234:13;1263:16;1271:7;1263;:16::i;:::-;1255:76;;;;-1:-1:-1;;;1255:76:16;;;;;;;:::i;:::-;1368:16;1386:18;:7;:16;:18::i;:::-;1351:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1337:70;;1162:250;;;:::o;637:72::-;;;-1:-1:-1;;;;;637:72:16;;:::o;254:28::-;;;;:::o;4077:214::-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;4167:11:16::1;::::0;:50:::1;::::0;4134:28:::1;::::0;-1:-1:-1;;;;;4167:11:16::1;::::0;4191:21:::1;::::0;4167:50:::1;::::0;::::1;:::i;3010:162:5:-:0;-1:-1:-1;;;;;3130:25:5;;;3107:4;3130:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;3010:162::o;940:71:16:-;;;-1:-1:-1;;;;;940:71:16;;:::o;648:158:2:-;1189:12:13;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;-1:-1:-1;;;;;733:20:2;::::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;733:27:2::1;756:4;733:27;::::0;;766:35:::1;744:8:::0;766:23:::1;:35::i;1843:300:5:-:0;1945:4;-1:-1:-1;;;;;;1980:40:5;;-1:-1:-1;;;1980:40:5;;:104;;-1:-1:-1;;;;;;;2036:48:5;;-1:-1:-1;;;2036:48:5;1980:104;:156;;;;2100:36;2124:11;2100:23;:36::i;587:96:1:-;666:10;587:96;:::o;5737:150:5:-;5832:7;:14;5799:4;;5822:24;;:58;;;;;5878:1;-1:-1:-1;;;;;5850:30:5;:7;5858;5850:16;;;;;;-1:-1:-1;;;5850:16:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5850:16:5;:30;;;5737:150;-1:-1:-1;;5737:150:5:o;4330:169::-;4401:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;4401:29:5;-1:-1:-1;;;;;4401:29:5;;;;;;;;:24;;4454;4401;4454:15;:24::i;:::-;-1:-1:-1;;;;;4445:47:5;;;;;;;;;;;4330:169;;:::o;5893:342::-;5983:4;6007:16;6015:7;6007;:16::i;:::-;5999:73;;;;-1:-1:-1;;;5999:73:5;;;;;;;:::i;:::-;6082:13;6098:24;6114:7;6098:15;:24::i;:::-;6082:40;;6151:5;-1:-1:-1;;;;;6140:16:5;:7;-1:-1:-1;;;;;6140:16:5;;:51;;;;6184:7;-1:-1:-1;;;;;6160:31:5;:20;6172:7;6160:11;:20::i;:::-;-1:-1:-1;;;;;6160:31:5;;6140:51;:87;;;;6195:32;6212:5;6219:7;6195:16;:32::i;:::-;6132:96;5893:342;-1:-1:-1;;;;5893:342:5:o;7415:499::-;7567:4;-1:-1:-1;;;;;7539:32:5;:24;7555:7;7539:15;:24::i;:::-;-1:-1:-1;;;;;7539:32:5;;7531:86;;;;-1:-1:-1;;;7531:86:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;7635:16:5;;7627:65;;;;-1:-1:-1;;;7627:65:5;;;;;;;:::i;:::-;7703:39;7724:4;7730:2;7734:7;7703:20;:39::i;:::-;7804:29;7821:1;7825:7;7804:8;:29::i;:::-;7862:2;7843:7;7851;7843:16;;;;;;-1:-1:-1;;;7843:16:5;;;;;;;;;;;;;;;;;:21;;-1:-1:-1;;;;;;7843:21:5;-1:-1:-1;;;;;7843:21:5;;;;;;7880:27;;7899:7;;7880:27;;;;;;;;;;7843:16;7880:27;7415:499;;;:::o;5987:184:16:-;6052:47;6082:1;6086:2;6090:7;6052:20;:47::i;:::-;6106:7;:16;;;;;;;-1:-1:-1;6106:16:16;;;;;;;-1:-1:-1;;;;;;6106:16:16;-1:-1:-1;;;;;6106:16:16;;;;;;;;6133:33;;6158:7;;-1:-1:-1;6133:33:16;;-1:-1:-1;;6133:33:16;5987:184;;:::o;2034:169:13:-;2108:6;;;-1:-1:-1;;;;;2124:17:13;;;-1:-1:-1;;;;;;2124:17:13;;;;;;;2156:40;;2108:6;;;2124:17;2108:6;;2156:40;;2089:16;;2156:40;2034:169;;:::o;5695:288:16:-;5763:12;5778:16;5786:7;5778;:16::i;:::-;5763:31;;5800:26;5809:7;:5;:7::i;:::-;5818;5800:8;:26::i;:::-;5832:49;5854:4;5868:1;5872:7;5832:20;:49::i;:::-;5890:7;;5888:9;;;;;:::i;:::-;;;;;;;;5930:1;5903:7;5911;5903:16;;;;;;-1:-1:-1;;;5903:16:16;;;;;;;;;;;;;;;;;:29;;-1:-1:-1;;;;;;5903:29:16;-1:-1:-1;;;;;5903:29:16;;;;;;5943:35;;5970:7;;5943:35;;;;;5903:16;;5943:35;5695:288;;:::o;7105:304:5:-;7253:28;7263:4;7269:2;7273:7;7253:9;:28::i;:::-;7299:48;7322:4;7328:2;7332:7;7341:5;7299:22;:48::i;:::-;7291:111;;;;-1:-1:-1;;;7291:111:5;;;;;;;:::i;275:703:15:-;331:13;548:10;544:51;;-1:-1:-1;574:10:15;;;;;;;;;;;;-1:-1:-1;;;574:10:15;;;;;;544:51;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:15;;-1:-1:-1;720:2:15;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;-1:-1:-1;;;764:17:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:15;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:15;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;-1:-1:-1;;;849:14:15;;;;;;;;;;;;:56;-1:-1:-1;;;;;849:56:15;;;;;;;;-1:-1:-1;919:11:15;928:2;919:11;;:::i;:::-;;;791:150;;1839:189:13;1189:12;:10;:12::i;:::-;-1:-1:-1;;;;;1178:23:13;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1178:23:13;;1170:68;;;;-1:-1:-1;;;1170:68:13;;;;;;;:::i;:::-;-1:-1:-1;;;;;1927:22:13;::::1;1919:73;;;;-1:-1:-1::0;;;1919:73:13::1;;;;;;;:::i;:::-;2002:19;2012:8;2002:9;:19::i;763:155:4:-:0;-1:-1:-1;;;;;;871:40:4;;-1:-1:-1;;;871:40:4;763:155;;;:::o;5493:198:16:-;-1:-1:-1;;;;;5591:18:16;;;5587:48;;-1:-1:-1;;;;;5620:15:16;;;;;;:9;:15;;;;;5618:17;;5620:15;;;5618:17;;;:::i;:::-;;;;-1:-1:-1;5587:48:16;-1:-1:-1;;;;;5646:16:16;;;5642:44;;-1:-1:-1;;;;;5673:13:16;;;;;;:9;:13;;;;;5671:15;;5673:13;;;5671:15;;;:::i;:::-;;;;-1:-1:-1;5493:198:16;;;:::o;4956:775:5:-;5103:4;5123:15;:2;-1:-1:-1;;;;;5123:13:5;;:15::i;:::-;5119:606;;;5174:2;-1:-1:-1;;;;;5158:36:5;;5195:12;:10;:12::i;:::-;5209:4;5215:7;5224:5;5158:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5158:72:5;;;;;;;;-1:-1:-1;;5158:72:5;;;;;;;;;;;;:::i;:::-;;;5154:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5397:13:5;;5393:266;;5439:60;;-1:-1:-1;;;5439:60:5;;;;;;;:::i;5393:266::-;5611:6;5605:13;5596:6;5592:2;5588:15;5581:38;5154:519;-1:-1:-1;;;;;;5280:51:5;-1:-1:-1;;;5280:51:5;;-1:-1:-1;5273:58:5;;5119:606;-1:-1:-1;5710:4:5;4956:775;;;;;;:::o;718:377:0:-;1034:20;1080:8;;;718:377::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:175:17;84:20;;-1:-1:-1;;;;;133:31:17;;123:42;;113:2;;179:1;176;169:12;194:400;;;327:3;320:4;312:6;308:17;304:27;294:2;;350:6;342;335:22;294:2;-1:-1:-1;378:20:17;;421:18;410:30;;407:2;;;460:8;450;443:26;407:2;504:4;496:6;492:17;480:29;;567:3;560:4;552;544:6;540:17;532:6;528:30;524:41;521:50;518:2;;;584:1;581;574:12;518:2;284:310;;;;;:::o;599:162::-;666:20;;722:13;;715:21;705:32;;695:2;;751:1;748;741:12;766:377;;;883:3;876:4;868:6;864:17;860:27;850:2;;908:8;898;891:26;850:2;-1:-1:-1;938:20:17;;981:18;970:30;;967:2;;;1020:8;1010;1003:26;967:2;1064:4;1056:6;1052:17;1040:29;;1116:3;1109:4;1100:6;1092;1088:19;1084:30;1081:39;1078:2;;;1133:1;1130;1123:12;1148:198;;1260:2;1248:9;1239:7;1235:23;1231:32;1228:2;;;1281:6;1273;1266:22;1228:2;1309:31;1330:9;1309:31;:::i;1351:274::-;;;1480:2;1468:9;1459:7;1455:23;1451:32;1448:2;;;1501:6;1493;1486:22;1448:2;1529:31;1550:9;1529:31;:::i;:::-;1519:41;;1579:40;1615:2;1604:9;1600:18;1579:40;:::i;:::-;1569:50;;1438:187;;;;;:::o;1630:936::-;;;;;;;1847:3;1835:9;1826:7;1822:23;1818:33;1815:2;;;1869:6;1861;1854:22;1815:2;1897:31;1918:9;1897:31;:::i;:::-;1887:41;;1947:40;1983:2;1972:9;1968:18;1947:40;:::i;:::-;1937:50;;2038:2;2027:9;2023:18;2010:32;2061:18;2102:2;2094:6;2091:14;2088:2;;;2123:6;2115;2108:22;2088:2;2167:76;2235:7;2226:6;2215:9;2211:22;2167:76;:::i;:::-;2262:8;;-1:-1:-1;2141:102:17;-1:-1:-1;2350:2:17;2335:18;;2322:32;;-1:-1:-1;2366:16:17;;;2363:2;;;2400:6;2392;2385:22;2363:2;;2444:62;2498:7;2487:8;2476:9;2472:24;2444:62;:::i;:::-;1805:761;;;;-1:-1:-1;1805:761:17;;-1:-1:-1;1805:761:17;;2525:8;;1805:761;-1:-1:-1;;;1805:761:17:o;2571:342::-;;;;2717:2;2705:9;2696:7;2692:23;2688:32;2685:2;;;2738:6;2730;2723:22;2685:2;2766:31;2787:9;2766:31;:::i;:::-;2756:41;;2816:40;2852:2;2841:9;2837:18;2816:40;:::i;:::-;2806:50;;2903:2;2892:9;2888:18;2875:32;2865:42;;2675:238;;;;;:::o;2918:1178::-;;;;;3090:3;3078:9;3069:7;3065:23;3061:33;3058:2;;;3112:6;3104;3097:22;3058:2;3140:31;3161:9;3140:31;:::i;:::-;3130:41;;3190:2;3211:40;3247:2;3236:9;3232:18;3211:40;:::i;:::-;3201:50;;3298:2;3287:9;3283:18;3270:32;3260:42;;3353:2;3342:9;3338:18;3325:32;3376:18;3417:2;3409:6;3406:14;3403:2;;;3438:6;3430;3423:22;3403:2;3481:6;3470:9;3466:22;3456:32;;3526:7;3519:4;3515:2;3511:13;3507:27;3497:2;;3553:6;3545;3538:22;3497:2;3594;3581:16;3616:2;3612;3609:10;3606:2;;;3622:18;;:::i;:::-;3671:2;3665:9;3740:2;3721:13;;-1:-1:-1;;3717:27:17;3705:40;;3701:49;;3765:18;;;3785:22;;;3762:46;3759:2;;;3811:18;;:::i;:::-;3847:2;3840:22;3871:18;;;3908:11;;;3904:20;;3901:33;-1:-1:-1;3898:2:17;;;3952:6;3944;3937:22;3898:2;4013;4008;4004;4000:11;3995:2;3987:6;3983:15;3970:46;4036:15;;;4032:24;;;4025:40;;;;-1:-1:-1;3048:1048:17;;;;-1:-1:-1;3048:1048:17;;-1:-1:-1;;3048:1048:17:o;4101:539::-;;;;4265:2;4253:9;4244:7;4240:23;4236:32;4233:2;;;4286:6;4278;4271:22;4233:2;4314:31;4335:9;4314:31;:::i;:::-;4304:41;;4396:2;4385:9;4381:18;4368:32;4423:18;4415:6;4412:30;4409:2;;;4460:6;4452;4445:22;4409:2;4504:76;4572:7;4563:6;4552:9;4548:22;4504:76;:::i;:::-;4223:417;;4599:8;;-1:-1:-1;4478:102:17;;-1:-1:-1;;;;4223:417:17:o;4645:268::-;;;4771:2;4759:9;4750:7;4746:23;4742:32;4739:2;;;4792:6;4784;4777:22;4739:2;4820:31;4841:9;4820:31;:::i;:::-;4810:41;;4870:37;4903:2;4892:9;4888:18;4870:37;:::i;4918:266::-;;;5047:2;5035:9;5026:7;5022:23;5018:32;5015:2;;;5068:6;5060;5053:22;5015:2;5096:31;5117:9;5096:31;:::i;:::-;5086:41;5174:2;5159:18;;;;5146:32;;-1:-1:-1;;;5005:179:17:o;5189:815::-;;;;;5388:2;5376:9;5367:7;5363:23;5359:32;5356:2;;;5409:6;5401;5394:22;5356:2;5454:9;5441:23;5483:18;5524:2;5516:6;5513:14;5510:2;;;5545:6;5537;5530:22;5510:2;5589:76;5657:7;5648:6;5637:9;5633:22;5589:76;:::i;:::-;5684:8;;-1:-1:-1;5563:102:17;-1:-1:-1;5772:2:17;5757:18;;5744:32;;-1:-1:-1;5788:16:17;;;5785:2;;;5822:6;5814;5807:22;5785:2;;5866:78;5936:7;5925:8;5914:9;5910:24;5866:78;:::i;:::-;5346:658;;;;-1:-1:-1;5963:8:17;-1:-1:-1;;;;5346:658:17:o;6009:192::-;;6118:2;6106:9;6097:7;6093:23;6089:32;6086:2;;;6139:6;6131;6124:22;6086:2;6167:28;6185:9;6167:28;:::i;6206:257::-;;6317:2;6305:9;6296:7;6292:23;6288:32;6285:2;;;6338:6;6330;6323:22;6285:2;6382:9;6369:23;6401:32;6427:5;6401:32;:::i;6468:261::-;;6590:2;6578:9;6569:7;6565:23;6561:32;6558:2;;;6611:6;6603;6596:22;6558:2;6648:9;6642:16;6667:32;6693:5;6667:32;:::i;6734:432::-;;;6866:2;6854:9;6845:7;6841:23;6837:32;6834:2;;;6887:6;6879;6872:22;6834:2;6932:9;6919:23;6965:18;6957:6;6954:30;6951:2;;;7002:6;6994;6987:22;6951:2;7046:60;7098:7;7089:6;7078:9;7074:22;7046:60;:::i;:::-;7125:8;;7020:86;;-1:-1:-1;6824:342:17;-1:-1:-1;;;;6824:342:17:o;7171:190::-;;7283:2;7271:9;7262:7;7258:23;7254:32;7251:2;;;7304:6;7296;7289:22;7251:2;-1:-1:-1;7332:23:17;;7241:120;-1:-1:-1;7241:120:17:o;7366:326::-;;;;7512:2;7500:9;7491:7;7487:23;7483:32;7480:2;;;7533:6;7525;7518:22;7480:2;-1:-1:-1;;7561:23:17;;;7631:2;7616:18;;7603:32;;-1:-1:-1;7682:2:17;7667:18;;;7654:32;;7470:222;-1:-1:-1;7470:222:17:o;7697:259::-;;7778:5;7772:12;7805:6;7800:3;7793:19;7821:63;7877:6;7870:4;7865:3;7861:14;7854:4;7847:5;7843:16;7821:63;:::i;:::-;7938:2;7917:15;-1:-1:-1;;7913:29:17;7904:39;;;;7945:4;7900:50;;7748:208;-1:-1:-1;;7748:208:17:o;7961:187::-;;8043:5;8037:12;8058:52;8103:6;8098:3;8091:4;8084:5;8080:16;8058:52;:::i;:::-;8126:16;;;;;8013:135;-1:-1:-1;;8013:135:17:o;8153:1181::-;8387:13;;8153:1181;;;;8460:1;8445:17;;8481:1;8517:18;;;;8544:2;;8598:4;8590:6;8586:17;8576:27;;8544:2;8624;8672;8664:6;8661:14;8641:18;8638:38;8635:2;;;-1:-1:-1;;;8699:33:17;;8755:4;8752:1;8745:15;8785:4;8706:3;8773:17;8635:2;8816:18;8843:104;;;;8961:1;8956:324;;;;8809:471;;8843:104;-1:-1:-1;;8876:24:17;;8864:37;;8921:16;;;;-1:-1:-1;8843:104:17;;8956:324;8992:39;9024:6;8992:39;:::i;:::-;9053:3;9069:165;9083:6;9080:1;9077:13;9069:165;;;9161:14;;9148:11;;;9141:35;9204:16;;;;9098:10;;9069:165;;;9073:3;;9263:6;9258:3;9254:16;9247:23;;8809:471;;;;;;;9296:32;9324:3;9316:6;9296:32;:::i;:::-;9289:39;8337:997;-1:-1:-1;;;;;8337:997:17:o;9339:205::-;9539:3;9530:14::o;9549:203::-;-1:-1:-1;;;;;9713:32:17;;;;9695:51;;9683:2;9668:18;;9650:102::o;9757:490::-;-1:-1:-1;;;;;10026:15:17;;;10008:34;;10078:15;;10073:2;10058:18;;10051:43;10125:2;10110:18;;10103:34;;;10173:3;10168:2;10153:18;;10146:31;;;9757:490;;10194:47;;10221:19;;10213:6;10194:47;:::i;:::-;10186:55;9960:287;-1:-1:-1;;;;;;9960:287:17:o;10252:635::-;10423:2;10475:21;;;10545:13;;10448:18;;;10567:22;;;10252:635;;10423:2;10646:15;;;;10620:2;10605:18;;;10252:635;10692:169;10706:6;10703:1;10700:13;10692:169;;;10767:13;;10755:26;;10836:15;;;;10801:12;;;;10728:1;10721:9;10692:169;;;-1:-1:-1;10878:3:17;;10403:484;-1:-1:-1;;;;;;10403:484:17:o;10892:187::-;11057:14;;11050:22;11032:41;;11020:2;11005:18;;10987:92::o;11084:221::-;;11233:2;11222:9;11215:21;11253:46;11295:2;11284:9;11280:18;11272:6;11253:46;:::i;11310:340::-;11512:2;11494:21;;;11551:2;11531:18;;;11524:30;-1:-1:-1;;;11585:2:17;11570:18;;11563:46;11641:2;11626:18;;11484:166::o;11655:407::-;11857:2;11839:21;;;11896:2;11876:18;;;11869:30;11935:34;11930:2;11915:18;;11908:62;-1:-1:-1;;;12001:2:17;11986:18;;11979:41;12052:3;12037:19;;11829:233::o;12067:414::-;12269:2;12251:21;;;12308:2;12288:18;;;12281:30;12347:34;12342:2;12327:18;;12320:62;-1:-1:-1;;;12413:2:17;12398:18;;12391:48;12471:3;12456:19;;12241:240::o;12486:349::-;12688:2;12670:21;;;12727:2;12707:18;;;12700:30;12766:27;12761:2;12746:18;;12739:55;12826:2;12811:18;;12660:175::o;12840:402::-;13042:2;13024:21;;;13081:2;13061:18;;;13054:30;13120:34;13115:2;13100:18;;13093:62;-1:-1:-1;;;13186:2:17;13171:18;;13164:36;13232:3;13217:19;;13014:228::o;13247:344::-;13449:2;13431:21;;;13488:2;13468:18;;;13461:30;-1:-1:-1;;;13522:2:17;13507:18;;13500:50;13582:2;13567:18;;13421:170::o;13596:344::-;13798:2;13780:21;;;13837:2;13817:18;;;13810:30;-1:-1:-1;;;13871:2:17;13856:18;;13849:50;13931:2;13916:18;;13770:170::o;13945:348::-;14147:2;14129:21;;;14186:2;14166:18;;;14159:30;14225:26;14220:2;14205:18;;14198:54;14284:2;14269:18;;14119:174::o;14298:403::-;14500:2;14482:21;;;14539:2;14519:18;;;14512:30;14578:34;14573:2;14558:18;;14551:62;-1:-1:-1;;;14644:2:17;14629:18;;14622:37;14691:3;14676:19;;14472:229::o;14706:346::-;14908:2;14890:21;;;14947:2;14927:18;;;14920:30;-1:-1:-1;;;14981:2:17;14966:18;;14959:52;15043:2;15028:18;;14880:172::o;15057:400::-;15259:2;15241:21;;;15298:2;15278:18;;;15271:30;15337:34;15332:2;15317:18;;15310:62;-1:-1:-1;;;15403:2:17;15388:18;;15381:34;15447:3;15432:19;;15231:226::o;15462:349::-;15664:2;15646:21;;;15703:2;15683:18;;;15676:30;15742:27;15737:2;15722:18;;15715:55;15802:2;15787:18;;15636:175::o;15816:349::-;16018:2;16000:21;;;16057:2;16037:18;;;16030:30;16096:27;16091:2;16076:18;;16069:55;16156:2;16141:18;;15990:175::o;16170:408::-;16372:2;16354:21;;;16411:2;16391:18;;;16384:30;16450:34;16445:2;16430:18;;16423:62;-1:-1:-1;;;16516:2:17;16501:18;;16494:42;16568:3;16553:19;;16344:234::o;16583:420::-;16785:2;16767:21;;;16824:2;16804:18;;;16797:30;16863:34;16858:2;16843:18;;16836:62;16934:26;16929:2;16914:18;;16907:54;16993:3;16978:19;;16757:246::o;17008:406::-;17210:2;17192:21;;;17249:2;17229:18;;;17222:30;17288:34;17283:2;17268:18;;17261:62;-1:-1:-1;;;17354:2:17;17339:18;;17332:40;17404:3;17389:19;;17182:232::o;17419:405::-;17621:2;17603:21;;;17660:2;17640:18;;;17633:30;17699:34;17694:2;17679:18;;17672:62;-1:-1:-1;;;17765:2:17;17750:18;;17743:39;17814:3;17799:19;;17593:231::o;17829:344::-;18031:2;18013:21;;;18070:2;18050:18;;;18043:30;-1:-1:-1;;;18104:2:17;18089:18;;18082:50;18164:2;18149:18;;18003:170::o;18178:349::-;18380:2;18362:21;;;18419:2;18399:18;;;18392:30;18458:27;18453:2;18438:18;;18431:55;18518:2;18503:18;;18352:175::o;18532:408::-;18734:2;18716:21;;;18773:2;18753:18;;;18746:30;18812:34;18807:2;18792:18;;18785:62;-1:-1:-1;;;18878:2:17;18863:18;;18856:42;18930:3;18915:19;;18706:234::o;18945:356::-;19147:2;19129:21;;;19166:18;;;19159:30;19225:34;19220:2;19205:18;;19198:62;19292:2;19277:18;;19119:182::o;19306:348::-;19508:2;19490:21;;;19547:2;19527:18;;;19520:30;19586:26;19581:2;19566:18;;19559:54;19645:2;19630:18;;19480:174::o;19659:405::-;19861:2;19843:21;;;19900:2;19880:18;;;19873:30;19939:34;19934:2;19919:18;;19912:62;-1:-1:-1;;;20005:2:17;19990:18;;19983:39;20054:3;20039:19;;19833:231::o;20069:411::-;20271:2;20253:21;;;20310:2;20290:18;;;20283:30;20349:34;20344:2;20329:18;;20322:62;-1:-1:-1;;;20415:2:17;20400:18;;20393:45;20470:3;20455:19;;20243:237::o;20485:348::-;20687:2;20669:21;;;20726:2;20706:18;;;20699:30;20765:26;20760:2;20745:18;;20738:54;20824:2;20809:18;;20659:174::o;20838:339::-;21040:2;21022:21;;;21079:2;21059:18;;;21052:30;-1:-1:-1;;;21113:2:17;21098:18;;21091:45;21168:2;21153:18;;21012:165::o;21182:352::-;21384:2;21366:21;;;21423:2;21403:18;;;21396:30;21462;21457:2;21442:18;;21435:58;21525:2;21510:18;;21356:178::o;21539:397::-;21741:2;21723:21;;;21780:2;21760:18;;;21753:30;21819:34;21814:2;21799:18;;21792:62;-1:-1:-1;;;21885:2:17;21870:18;;21863:31;21926:3;21911:19;;21713:223::o;21941:413::-;22143:2;22125:21;;;22182:2;22162:18;;;22155:30;22221:34;22216:2;22201:18;;22194:62;-1:-1:-1;;;22287:2:17;22272:18;;22265:47;22344:3;22329:19;;22115:239::o;22359:408::-;22561:2;22543:21;;;22600:2;22580:18;;;22573:30;22639:34;22634:2;22619:18;;22612:62;-1:-1:-1;;;22705:2:17;22690:18;;22683:42;22757:3;22742:19;;22533:234::o;22772:345::-;22974:2;22956:21;;;23013:2;22993:18;;;22986:30;-1:-1:-1;;;23047:2:17;23032:18;;23025:51;23108:2;23093:18;;22946:171::o;23122:177::-;23268:25;;;23256:2;23241:18;;23223:76::o;23304:129::-;;23372:17;;;23422:4;23406:21;;;23362:71::o;23438:128::-;;23509:1;23505:6;23502:1;23499:13;23496:2;;;23515:18;;:::i;:::-;-1:-1:-1;23551:9:17;;23486:80::o;23571:120::-;;23637:1;23627:2;;23642:18;;:::i;:::-;-1:-1:-1;23676:9:17;;23617:74::o;23696:168::-;;23802:1;23798;23794:6;23790:14;23787:1;23784:21;23779:1;23772:9;23765:17;23761:45;23758:2;;;23809:18;;:::i;:::-;-1:-1:-1;23849:9:17;;23748:116::o;23869:125::-;;23937:1;23934;23931:8;23928:2;;;23942:18;;:::i;:::-;-1:-1:-1;23979:9:17;;23918:76::o;23999:258::-;24071:1;24081:113;24095:6;24092:1;24089:13;24081:113;;;24171:11;;;24165:18;24152:11;;;24145:39;24117:2;24110:10;24081:113;;;24212:6;24209:1;24206:13;24203:2;;;-1:-1:-1;;24247:1:17;24229:16;;24222:27;24052:205::o;24262:136::-;;24329:5;24319:2;;24338:18;;:::i;:::-;-1:-1:-1;;;24374:18:17;;24309:89::o;24403:380::-;24488:1;24478:12;;24535:1;24525:12;;;24546:2;;24600:4;24592:6;24588:17;24578:27;;24546:2;24653;24645:6;24642:14;24622:18;24619:38;24616:2;;;24699:10;24694:3;24690:20;24687:1;24680:31;24734:4;24731:1;24724:15;24762:4;24759:1;24752:15;24616:2;;24458:325;;;:::o;24788:135::-;;-1:-1:-1;;24848:17:17;;24845:2;;;24868:18;;:::i;:::-;-1:-1:-1;24915:1:17;24904:13;;24835:88::o;24928:112::-;;24986:1;24976:2;;24991:18;;:::i;:::-;-1:-1:-1;25025:9:17;;24966:74::o;25045:127::-;25106:10;25101:3;25097:20;25094:1;25087:31;25137:4;25134:1;25127:15;25161:4;25158:1;25151:15;25177:127;25238:10;25233:3;25229:20;25226:1;25219:31;25269:4;25266:1;25259:15;25293:4;25290:1;25283:15;25309:127;25370:10;25365:3;25361:20;25358:1;25351:31;25401:4;25398:1;25391:15;25425:4;25422:1;25415:15;25441:133;-1:-1:-1;;;;;;25517:32:17;;25507:43;;25497:2;;25564:1;25561;25554:12

Swarm Source

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