ETH Price: $3,461.09 (+1.56%)
Gas: 7 Gwei

Token

Axon (AXON)
 

Overview

Max Total Supply

20,374.6 AXON

Holders

419

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
magiceth.eth
Balance
94 AXON

Value
$0.00
0x32b21910f7bde24ee9dd345e17b679f433773fd4
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:
AxonsToken

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-06
*/

// File: contracts/AnonymiceLibrary.sol


pragma solidity ^0.8.0;

library AnonymiceLibrary {
    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";

        // load the table into memory
        string memory table = TABLE;

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

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(input, 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function parseInt(string memory _a)
        internal
        pure
        returns (uint8 _parsedInt)
    {
        bytes memory bresult = bytes(_a);
        uint8 mint = 0;
        for (uint8 i = 0; i < bresult.length; i++) {
            if (
                (uint8(uint8(bresult[i])) >= 48) &&
                (uint8(uint8(bresult[i])) <= 57)
            ) {
                mint *= 10;
                mint += uint8(bresult[i]) - 48;
            }
        }
        return mint;
    }

    function substring(
        string memory str,
        uint256 startIndex,
        uint256 endIndex
    ) internal pure returns (string memory) {
        bytes memory strBytes = bytes(str);
        bytes memory result = new bytes(endIndex - startIndex);
        for (uint256 i = startIndex; i < endIndex; i++) {
            result[i - startIndex] = strBytes[i];
        }
        return string(result);
    }

    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;
    }
}
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.0 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol



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: @openzeppelin/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC20/IERC20.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol



pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol



pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: contracts/interfaces/IAxonsToken.sol



/// @title Interface for AxonsToken

pragma solidity ^0.8.6;


interface IAxonsToken is IERC20 {
    event Claimed(address account, uint256 amount);
    
    function generateReward(address recipient, uint256 amount) external;
    function isGenesisAddress(address addressToCheck) external view returns(bool);
    function burn(uint256 amount) external;
}
// File: contracts/AxonsToken.sol



pragma solidity ^0.8.0;







contract AxonsToken is IAxonsToken, ERC20, Ownable {

    bytes32 public immutable merkleRoot;

    // AH contract
    address public auctionHouse;

    // Voting contract
    address public voting;

    // Whether the voting contract can be updated
    bool public isVotingLocked;

    // Whether the auctionHouse can be updated
    bool public isAuctionHouseLocked;

	// Whether genesis mints can still occur
    bool public isGenesisMintLocked;

    mapping(address => bool) internal genesisAddress;

    /**
     * @notice Require that the AH has not been locked.
     */
    modifier whenAuctionHouseNotLocked() {
        require(!isAuctionHouseLocked, "Auction House is locked");
        _;
    }

	/**
     * @notice Require that the Genesis Mint has not been locked.
     */
    modifier whenGenesisMintNotLocked() {
        require(!isGenesisMintLocked, "Genesis mint is locked");
        _;
    }

    /**
     * @notice Require that the voting has not been locked.
     */
    modifier whenVotingNotLocked() {
        require(!isVotingLocked, "Voting is locked");
        _;
    }
    
    constructor(address _auctionHouse, address _voting, bytes32 _merkleRoot) ERC20("Axon", "AXON")
    {
        auctionHouse = _auctionHouse;
        voting = _voting;
        merkleRoot = _merkleRoot;
    }

    function claim(
        address account,
        uint256 amount,
        bytes32[] calldata merkleProof
    ) public {
        require(!AnonymiceLibrary.isContract(msg.sender));

        // Verify the merkle proof.
        bytes32 node = keccak256(abi.encodePacked(account, amount));

        require(
            MerkleProof.verify(merkleProof, merkleRoot, node),
            "MerkleDistributor: Invalid proof."
        );

        require(genesisAddress[account] == false, 'Can only claim once');
        _genesisMintAmount(account, amount * 10**uint(decimals()));

        emit Claimed(account, amount);
    }

    function _genesisMintAmount(address to, uint256 amount) internal {
        genesisAddress[to] = true;
        _mint(to, amount);
    }

    function isGenesisAddress(address addressToCheck) public view override returns(bool) {
        return genesisAddress[addressToCheck];
    }

    /**
     * @notice Generate voting reward
     */
    function generateReward(address recipient, uint256 amount) public override {
        require(msg.sender == voting, "Only voting contract can generate rewards");
        _mint(payable(recipient), amount * 10**uint(decimals()));
    }

    /**
     * @notice Burn token
     */
    function burn(uint256 amount) public override {
        _burn(msg.sender, amount);
    }

    /**
     * @notice Set the voting contract.
     * @dev Only callable by the owner when not locked.
     */
    function setVoting(address _voting) public onlyOwner whenVotingNotLocked {
        voting = _voting;
    }

    /**
     * @notice Lock the voting contract.
     * @dev This cannot be reversed and is only callable by the owner when not locked.
     */
    function lockVoting() public onlyOwner whenVotingNotLocked {
        isVotingLocked = true;
    }

    /**
     * @notice Set the auction house.
     * @dev Only callable by the owner when not locked.
     */
    function setAuctionHouse(address _auctionHouse) public onlyOwner whenAuctionHouseNotLocked {
        auctionHouse = _auctionHouse;
    }

    /**
     * @notice Lock the auction house.
     * @dev This cannot be reversed and is only callable by the owner when not locked.
     */
    function lockAuctionHouse() public onlyOwner whenAuctionHouseNotLocked {
        isAuctionHouseLocked = true;
    }

    function transfer(address recipient, uint256 amount) public override(IERC20,ERC20) returns (bool) {
        require(recipient == auctionHouse || msg.sender == auctionHouse, "This token cannot be traded");

        _transfer(msg.sender, recipient, amount);
        return true;
    }
    
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override(IERC20,ERC20) returns (bool) {
        require(sender == msg.sender || msg.sender == auctionHouse, "Can't send tokens on someone elses behalf");
        require(recipient == auctionHouse || sender == auctionHouse, "This token cannot be traded");

        // override approval for auction house to save gas
        if (recipient == auctionHouse) {
            _transfer(sender, auctionHouse, amount);
            return true;
        }
        // override approval for auction house to save gas
        if (sender == auctionHouse) {
            _transfer(auctionHouse, recipient, amount);
            return true;
        }

        return super.transferFrom(sender, recipient, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_auctionHouse","type":"address"},{"internalType":"address","name":"_voting","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","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":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"auctionHouse","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"generateReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAuctionHouseLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addressToCheck","type":"address"}],"name":"isGenesisAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isGenesisMintLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVotingLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockAuctionHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockVoting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_auctionHouse","type":"address"}],"name":"setAuctionHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voting","type":"address"}],"name":"setVoting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voting","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a06040523480156200001157600080fd5b5060405162001afa38038062001afa83398101604081905262000034916200020b565b6040518060400160405280600481526020016320bc37b760e11b8152506040518060400160405280600481526020016320ac27a760e11b81525081600390805190602001906200008692919062000148565b5080516200009c90600490602084019062000148565b505050620000b9620000b3620000f260201b60201c565b620000f6565b600680546001600160a01b039485166001600160a01b031991821617909155600780549390941692169190911790915560805262000289565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000156906200024c565b90600052602060002090601f0160209004810192826200017a5760008555620001c5565b82601f106200019557805160ff1916838001178555620001c5565b82800160010185558215620001c5579182015b82811115620001c5578251825591602001919060010190620001a8565b50620001d3929150620001d7565b5090565b5b80821115620001d35760008155600101620001d8565b80516001600160a01b03811681146200020657600080fd5b919050565b6000806000606084860312156200022157600080fd5b6200022c84620001ee565b92506200023c60208501620001ee565b9150604084015190509250925092565b600181811c908216806200026157607f821691505b602082108114156200028357634e487b7160e01b600052602260045260246000fd5b50919050565b60805161184e620002ac6000396000818161023e01526107b8015261184e6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063cf26a06111610097578063ed9152c811610071578063ed9152c8146103fb578063f2fde38b1461040e578063fa344ee114610421578063fce1ccca1461043457600080fd5b8063cf26a0611461039b578063dd62ed3e146103af578063e76d8952146103e857600080fd5b806395d89b41116100d357806395d89b411461035a578063a457c2d714610362578063a9059cbb14610375578063c4d079511461038857600080fd5b806370a0823114610304578063715018a61461032d5780638da5cb5b1461033557600080fd5b8063324884a91161016657806342966c681161014057806342966c68146102c157806347f5f424146102d457806349db95c8146102e85780636b32111d146102fc57600080fd5b8063324884a91461026f578063395093511461029b5780633d13f874146102ae57600080fd5b806318160ddd116101a257806318160ddd1461021457806323b872dd146102265780632eb4a7ab14610239578063313ce5671461026057600080fd5b806302004cad146101c957806306fdde03146101d3578063095ea7b3146101f1575b600080fd5b6101d1610447565b005b6101db6104e3565b6040516101e8919061145b565b60405180910390f35b6102046101ff3660046114cc565b610575565b60405190151581526020016101e8565b6002545b6040519081526020016101e8565b6102046102343660046114f6565b61058c565b6102187f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016101e8565b61020461027d366004611532565b6001600160a01b031660009081526008602052604090205460ff1690565b6102046102a93660046114cc565b6106fa565b6101d16102bc36600461154d565b610736565b6101d16102cf3660046115d7565b610900565b60075461020490600160a81b900460ff1681565b60075461020490600160a01b900460ff1681565b6101d161090d565b610218610312366004611532565b6001600160a01b031660009081526020819052604090205490565b6101d1610999565b6005546001600160a01b03165b6040516001600160a01b0390911681526020016101e8565b6101db6109cf565b6102046103703660046114cc565b6109de565b6102046103833660046114cc565b610a77565b6101d1610396366004611532565b610af7565b60075461020490600160b01b900460ff1681565b6102186103bd3660046115f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101d16103f6366004611532565b610b90565b600654610342906001600160a01b031681565b6101d161041c366004611532565b610c30565b6101d161042f3660046114cc565b610cc8565b600754610342906001600160a01b031681565b6005546001600160a01b0316331461047a5760405162461bcd60e51b815260040161047190611623565b60405180910390fd5b600754600160a81b900460ff16156104ce5760405162461bcd60e51b8152602060048201526017602482015276105d58dd1a5bdb88121bdd5cd9481a5cc81b1bd8dad959604a1b6044820152606401610471565b6007805460ff60a81b1916600160a81b179055565b6060600380546104f290611658565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90611658565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b6000610582338484610d57565b5060015b92915050565b60006001600160a01b0384163314806105af57506006546001600160a01b031633145b61060d5760405162461bcd60e51b815260206004820152602960248201527f43616e27742073656e6420746f6b656e73206f6e20736f6d656f6e6520656c7360448201526832b9903132b430b63360b91b6064820152608401610471565b6006546001600160a01b038481169116148061063657506006546001600160a01b038581169116145b6106825760405162461bcd60e51b815260206004820152601b60248201527f5468697320746f6b656e2063616e6e6f742062652074726164656400000000006044820152606401610471565b6006546001600160a01b03848116911614156106b8576006546106b09085906001600160a01b031684610e7c565b5060016106f3565b6006546001600160a01b03858116911614156106e5576006546106b0906001600160a01b03168484610e7c565b6106f084848461104b565b90505b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105829185906107319086906116a9565b610d57565b333b1561074257600080fd5b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526000906054016040516020818303038152906040528051906020012090506107e38383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506110f59050565b6108395760405162461bcd60e51b815260206004820152602160248201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666044820152601760f91b6064820152608401610471565b6001600160a01b03851660009081526008602052604090205460ff16156108985760405162461bcd60e51b815260206004820152601360248201527243616e206f6e6c7920636c61696d206f6e636560681b6044820152606401610471565b6108b7856108a86012600a6117a5565b6108b290876117b1565b61110b565b604080516001600160a01b0387168152602081018690527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a910160405180910390a15050505050565b61090a3382611138565b50565b6005546001600160a01b031633146109375760405162461bcd60e51b815260040161047190611623565b600754600160a01b900460ff16156109845760405162461bcd60e51b815260206004820152601060248201526f159bdd1a5b99c81a5cc81b1bd8dad95960821b6044820152606401610471565b6007805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146109c35760405162461bcd60e51b815260040161047190611623565b6109cd600061127e565b565b6060600480546104f290611658565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610a605760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610471565b610a6d3385858403610d57565b5060019392505050565b6006546000906001600160a01b0384811691161480610aa057506006546001600160a01b031633145b610aec5760405162461bcd60e51b815260206004820152601b60248201527f5468697320746f6b656e2063616e6e6f742062652074726164656400000000006044820152606401610471565b610582338484610e7c565b6005546001600160a01b03163314610b215760405162461bcd60e51b815260040161047190611623565b600754600160a01b900460ff1615610b6e5760405162461bcd60e51b815260206004820152601060248201526f159bdd1a5b99c81a5cc81b1bd8dad95960821b6044820152606401610471565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610bba5760405162461bcd60e51b815260040161047190611623565b600754600160a81b900460ff1615610c0e5760405162461bcd60e51b8152602060048201526017602482015276105d58dd1a5bdb88121bdd5cd9481a5cc81b1bd8dad959604a1b6044820152606401610471565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c5a5760405162461bcd60e51b815260040161047190611623565b6001600160a01b038116610cbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610471565b61090a8161127e565b6007546001600160a01b03163314610d345760405162461bcd60e51b815260206004820152602960248201527f4f6e6c7920766f74696e6720636f6e74726163742063616e2067656e6572617460448201526865207265776172647360b81b6064820152608401610471565b610d5382610d446012600a6117a5565b610d4e90846117b1565b6112d0565b5050565b6001600160a01b038316610db95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610471565b6001600160a01b038216610e1a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610471565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610ee05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610471565b6001600160a01b038216610f425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610471565b6001600160a01b03831660009081526020819052604090205481811015610fba5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610471565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610ff19084906116a9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161103d91815260200190565b60405180910390a350505050565b6000611058848484610e7c565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110dd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610471565b6110ea8533858403610d57565b506001949350505050565b60008261110285846113af565b14949350505050565b6001600160a01b0382166000908152600860205260409020805460ff19166001179055610d5382826112d0565b6001600160a01b0382166111985760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610471565b6001600160a01b0382166000908152602081905260409020548181101561120c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610471565b6001600160a01b038316600090815260208190526040812083830390556002805484929061123b9084906117d0565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e6f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166113265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610471565b806002600082825461133891906116a9565b90915550506001600160a01b038216600090815260208190526040812080548392906113659084906116a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600081815b84518110156114535760008582815181106113d1576113d16117e7565b60200260200101519050808311611413576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611440565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061144b816117fd565b9150506113b4565b509392505050565b600060208083528351808285015260005b818110156114885785810183015185820160400152820161146c565b8181111561149a576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146114c757600080fd5b919050565b600080604083850312156114df57600080fd5b6114e8836114b0565b946020939093013593505050565b60008060006060848603121561150b57600080fd5b611514846114b0565b9250611522602085016114b0565b9150604084013590509250925092565b60006020828403121561154457600080fd5b6106f3826114b0565b6000806000806060858703121561156357600080fd5b61156c856114b0565b935060208501359250604085013567ffffffffffffffff8082111561159057600080fd5b818701915087601f8301126115a457600080fd5b8135818111156115b357600080fd5b8860208260051b85010111156115c857600080fd5b95989497505060200194505050565b6000602082840312156115e957600080fd5b5035919050565b6000806040838503121561160357600080fd5b61160c836114b0565b915061161a602084016114b0565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061166c57607f821691505b6020821081141561168d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156116bc576116bc611693565b500190565b600181815b808511156116fc5781600019048211156116e2576116e2611693565b808516156116ef57918102915b93841c93908002906116c6565b509250929050565b60008261171357506001610586565b8161172057506000610586565b816001811461173657600281146117405761175c565b6001915050610586565b60ff84111561175157611751611693565b50506001821b610586565b5060208310610133831016604e8410600b841016171561177f575081810a610586565b61178983836116c1565b806000190482111561179d5761179d611693565b029392505050565b60006106f38383611704565b60008160001904831182151516156117cb576117cb611693565b500290565b6000828210156117e2576117e2611693565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561181157611811611693565b506001019056fea2646970667358221220f66b5ab8a0fa46d9c72a188f54605db75d26b884bd55c13f9b16eeee9a5ab55064736f6c634300080a003300000000000000000000000011815c8f0a24245d898211f82e15482459400b1b000000000000000000000000f7875f0ff958270b7bd5fa7cfdb8f42c0cf5b11ab8305cb09ccd6ed3fe05d978b83f33df29c6cffa1e29c341b44668c66c7b89db

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063cf26a06111610097578063ed9152c811610071578063ed9152c8146103fb578063f2fde38b1461040e578063fa344ee114610421578063fce1ccca1461043457600080fd5b8063cf26a0611461039b578063dd62ed3e146103af578063e76d8952146103e857600080fd5b806395d89b41116100d357806395d89b411461035a578063a457c2d714610362578063a9059cbb14610375578063c4d079511461038857600080fd5b806370a0823114610304578063715018a61461032d5780638da5cb5b1461033557600080fd5b8063324884a91161016657806342966c681161014057806342966c68146102c157806347f5f424146102d457806349db95c8146102e85780636b32111d146102fc57600080fd5b8063324884a91461026f578063395093511461029b5780633d13f874146102ae57600080fd5b806318160ddd116101a257806318160ddd1461021457806323b872dd146102265780632eb4a7ab14610239578063313ce5671461026057600080fd5b806302004cad146101c957806306fdde03146101d3578063095ea7b3146101f1575b600080fd5b6101d1610447565b005b6101db6104e3565b6040516101e8919061145b565b60405180910390f35b6102046101ff3660046114cc565b610575565b60405190151581526020016101e8565b6002545b6040519081526020016101e8565b6102046102343660046114f6565b61058c565b6102187fb8305cb09ccd6ed3fe05d978b83f33df29c6cffa1e29c341b44668c66c7b89db81565b604051601281526020016101e8565b61020461027d366004611532565b6001600160a01b031660009081526008602052604090205460ff1690565b6102046102a93660046114cc565b6106fa565b6101d16102bc36600461154d565b610736565b6101d16102cf3660046115d7565b610900565b60075461020490600160a81b900460ff1681565b60075461020490600160a01b900460ff1681565b6101d161090d565b610218610312366004611532565b6001600160a01b031660009081526020819052604090205490565b6101d1610999565b6005546001600160a01b03165b6040516001600160a01b0390911681526020016101e8565b6101db6109cf565b6102046103703660046114cc565b6109de565b6102046103833660046114cc565b610a77565b6101d1610396366004611532565b610af7565b60075461020490600160b01b900460ff1681565b6102186103bd3660046115f0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101d16103f6366004611532565b610b90565b600654610342906001600160a01b031681565b6101d161041c366004611532565b610c30565b6101d161042f3660046114cc565b610cc8565b600754610342906001600160a01b031681565b6005546001600160a01b0316331461047a5760405162461bcd60e51b815260040161047190611623565b60405180910390fd5b600754600160a81b900460ff16156104ce5760405162461bcd60e51b8152602060048201526017602482015276105d58dd1a5bdb88121bdd5cd9481a5cc81b1bd8dad959604a1b6044820152606401610471565b6007805460ff60a81b1916600160a81b179055565b6060600380546104f290611658565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90611658565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050905090565b6000610582338484610d57565b5060015b92915050565b60006001600160a01b0384163314806105af57506006546001600160a01b031633145b61060d5760405162461bcd60e51b815260206004820152602960248201527f43616e27742073656e6420746f6b656e73206f6e20736f6d656f6e6520656c7360448201526832b9903132b430b63360b91b6064820152608401610471565b6006546001600160a01b038481169116148061063657506006546001600160a01b038581169116145b6106825760405162461bcd60e51b815260206004820152601b60248201527f5468697320746f6b656e2063616e6e6f742062652074726164656400000000006044820152606401610471565b6006546001600160a01b03848116911614156106b8576006546106b09085906001600160a01b031684610e7c565b5060016106f3565b6006546001600160a01b03858116911614156106e5576006546106b0906001600160a01b03168484610e7c565b6106f084848461104b565b90505b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105829185906107319086906116a9565b610d57565b333b1561074257600080fd5b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526000906054016040516020818303038152906040528051906020012090506107e38383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507fb8305cb09ccd6ed3fe05d978b83f33df29c6cffa1e29c341b44668c66c7b89db92508591506110f59050565b6108395760405162461bcd60e51b815260206004820152602160248201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666044820152601760f91b6064820152608401610471565b6001600160a01b03851660009081526008602052604090205460ff16156108985760405162461bcd60e51b815260206004820152601360248201527243616e206f6e6c7920636c61696d206f6e636560681b6044820152606401610471565b6108b7856108a86012600a6117a5565b6108b290876117b1565b61110b565b604080516001600160a01b0387168152602081018690527fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a910160405180910390a15050505050565b61090a3382611138565b50565b6005546001600160a01b031633146109375760405162461bcd60e51b815260040161047190611623565b600754600160a01b900460ff16156109845760405162461bcd60e51b815260206004820152601060248201526f159bdd1a5b99c81a5cc81b1bd8dad95960821b6044820152606401610471565b6007805460ff60a01b1916600160a01b179055565b6005546001600160a01b031633146109c35760405162461bcd60e51b815260040161047190611623565b6109cd600061127e565b565b6060600480546104f290611658565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610a605760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610471565b610a6d3385858403610d57565b5060019392505050565b6006546000906001600160a01b0384811691161480610aa057506006546001600160a01b031633145b610aec5760405162461bcd60e51b815260206004820152601b60248201527f5468697320746f6b656e2063616e6e6f742062652074726164656400000000006044820152606401610471565b610582338484610e7c565b6005546001600160a01b03163314610b215760405162461bcd60e51b815260040161047190611623565b600754600160a01b900460ff1615610b6e5760405162461bcd60e51b815260206004820152601060248201526f159bdd1a5b99c81a5cc81b1bd8dad95960821b6044820152606401610471565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610bba5760405162461bcd60e51b815260040161047190611623565b600754600160a81b900460ff1615610c0e5760405162461bcd60e51b8152602060048201526017602482015276105d58dd1a5bdb88121bdd5cd9481a5cc81b1bd8dad959604a1b6044820152606401610471565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c5a5760405162461bcd60e51b815260040161047190611623565b6001600160a01b038116610cbf5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610471565b61090a8161127e565b6007546001600160a01b03163314610d345760405162461bcd60e51b815260206004820152602960248201527f4f6e6c7920766f74696e6720636f6e74726163742063616e2067656e6572617460448201526865207265776172647360b81b6064820152608401610471565b610d5382610d446012600a6117a5565b610d4e90846117b1565b6112d0565b5050565b6001600160a01b038316610db95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610471565b6001600160a01b038216610e1a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610471565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610ee05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610471565b6001600160a01b038216610f425760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610471565b6001600160a01b03831660009081526020819052604090205481811015610fba5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610471565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610ff19084906116a9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161103d91815260200190565b60405180910390a350505050565b6000611058848484610e7c565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156110dd5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610471565b6110ea8533858403610d57565b506001949350505050565b60008261110285846113af565b14949350505050565b6001600160a01b0382166000908152600860205260409020805460ff19166001179055610d5382826112d0565b6001600160a01b0382166111985760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610471565b6001600160a01b0382166000908152602081905260409020548181101561120c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610471565b6001600160a01b038316600090815260208190526040812083830390556002805484929061123b9084906117d0565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610e6f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166113265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610471565b806002600082825461133891906116a9565b90915550506001600160a01b038216600090815260208190526040812080548392906113659084906116a9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600081815b84518110156114535760008582815181106113d1576113d16117e7565b60200260200101519050808311611413576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250611440565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061144b816117fd565b9150506113b4565b509392505050565b600060208083528351808285015260005b818110156114885785810183015185820160400152820161146c565b8181111561149a576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146114c757600080fd5b919050565b600080604083850312156114df57600080fd5b6114e8836114b0565b946020939093013593505050565b60008060006060848603121561150b57600080fd5b611514846114b0565b9250611522602085016114b0565b9150604084013590509250925092565b60006020828403121561154457600080fd5b6106f3826114b0565b6000806000806060858703121561156357600080fd5b61156c856114b0565b935060208501359250604085013567ffffffffffffffff8082111561159057600080fd5b818701915087601f8301126115a457600080fd5b8135818111156115b357600080fd5b8860208260051b85010111156115c857600080fd5b95989497505060200194505050565b6000602082840312156115e957600080fd5b5035919050565b6000806040838503121561160357600080fd5b61160c836114b0565b915061161a602084016114b0565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061166c57607f821691505b6020821081141561168d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156116bc576116bc611693565b500190565b600181815b808511156116fc5781600019048211156116e2576116e2611693565b808516156116ef57918102915b93841c93908002906116c6565b509250929050565b60008261171357506001610586565b8161172057506000610586565b816001811461173657600281146117405761175c565b6001915050610586565b60ff84111561175157611751611693565b50506001821b610586565b5060208310610133831016604e8410600b841016171561177f575081810a610586565b61178983836116c1565b806000190482111561179d5761179d611693565b029392505050565b60006106f38383611704565b60008160001904831182151516156117cb576117cb611693565b500290565b6000828210156117e2576117e2611693565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561181157611811611693565b506001019056fea2646970667358221220f66b5ab8a0fa46d9c72a188f54605db75d26b884bd55c13f9b16eeee9a5ab55064736f6c634300080a0033

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

00000000000000000000000011815c8f0a24245d898211f82e15482459400b1b000000000000000000000000f7875f0ff958270b7bd5fa7cfdb8f42c0cf5b11ab8305cb09ccd6ed3fe05d978b83f33df29c6cffa1e29c341b44668c66c7b89db

-----Decoded View---------------
Arg [0] : _auctionHouse (address): 0x11815C8F0A24245D898211F82e15482459400b1B
Arg [1] : _voting (address): 0xf7875F0Ff958270B7BD5fA7CFdb8F42C0CF5B11A
Arg [2] : _merkleRoot (bytes32): 0xb8305cb09ccd6ed3fe05d978b83f33df29c6cffa1e29c341b44668c66c7b89db

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000011815c8f0a24245d898211f82e15482459400b1b
Arg [1] : 000000000000000000000000f7875f0ff958270b7bd5fa7cfdb8f42c0cf5b11a
Arg [2] : b8305cb09ccd6ed3fe05d978b83f33df29c6cffa1e29c341b44668c66c7b89db


Deployed Bytecode Sourcemap

25767:4889:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29399:117;;;:::i;:::-;;15305:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17472:169;;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;17472:169:0;1053:187:1;16425:108:0;16513:12;;16425:108;;;1391:25:1;;;1379:2;1364:18;16425:108:0;1245:177:1;29823:830:0;;;;;;:::i;:::-;;:::i;25827:35::-;;;;;16267:93;;;16350:2;2084:36:1;;2072:2;2057:18;16267:93:0;1942:184:1;27914:141:0;;;;;;:::i;:::-;-1:-1:-1;;;;;28017:30:0;27993:4;28017:30;;;:14;:30;;;;;;;;;27914:141;19024:215;;;;;;:::i;:::-;;:::i;27130:631::-;;;;;;:::i;:::-;;:::i;28408:90::-;;;;;;:::i;:::-;;:::i;26115:32::-;;;;;-1:-1:-1;;;26115:32:0;;;;;;26032:26;;;;;-1:-1:-1;;;26032:26:0;;;;;;28886:99;;;:::i;16596:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;16697:18:0;16670:7;16697:18;;;;;;;;;;;;16596:127;9109:94;;;:::i;8458:87::-;8531:6;;-1:-1:-1;;;;;8531:6:0;8458:87;;;-1:-1:-1;;;;;3433:32:1;;;3415:51;;3403:2;3388:18;8458:87:0;3269:203:1;15524:104:0;;;:::i;19742:413::-;;;;;;:::i;:::-;;:::i;29524:287::-;;;;;;:::i;:::-;;:::i;28622:108::-;;;;;;:::i;:::-;;:::i;26199:31::-;;;;;-1:-1:-1;;;26199:31:0;;;;;;17174:151;;;;;;:::i;:::-;-1:-1:-1;;;;;17290:18:0;;;17263:7;17290:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17174:151;29107:138;;;;;;:::i;:::-;;:::i;25891:27::-;;;;;-1:-1:-1;;;;;25891:27:0;;;9358:192;;;;;;:::i;:::-;;:::i;28120:235::-;;;;;;:::i;:::-;;:::i;25951:21::-;;;;;-1:-1:-1;;;;;25951:21:0;;;29399:117;8531:6;;-1:-1:-1;;;;;8531:6:0;7326:10;8678:23;8670:68;;;;-1:-1:-1;;;8670:68:0;;;;;;;:::i;:::-;;;;;;;;;26428:20:::1;::::0;-1:-1:-1;;;26428:20:0;::::1;;;26427:21;26419:57;;;::::0;-1:-1:-1;;;26419:57:0;;4305:2:1;26419:57:0::1;::::0;::::1;4287:21:1::0;4344:2;4324:18;;;4317:30;-1:-1:-1;;;4363:18:1;;;4356:53;4426:18;;26419:57:0::1;4103:347:1::0;26419:57:0::1;29481:20:::2;:27:::0;;-1:-1:-1;;;;29481:27:0::2;-1:-1:-1::0;;;29481:27:0::2;::::0;;29399:117::o;15305:100::-;15359:13;15392:5;15385:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15305:100;:::o;17472:169::-;17555:4;17572:39;7326:10;17595:7;17604:6;17572:8;:39::i;:::-;-1:-1:-1;17629:4:0;17472:169;;;;;:::o;29823:830::-;29969:4;-1:-1:-1;;;;;29994:20:0;;30004:10;29994:20;;:50;;-1:-1:-1;30032:12:0;;-1:-1:-1;;;;;30032:12:0;30018:10;:26;29994:50;29986:104;;;;-1:-1:-1;;;29986:104:0;;5042:2:1;29986:104:0;;;5024:21:1;5081:2;5061:18;;;5054:30;5120:34;5100:18;;;5093:62;-1:-1:-1;;;5171:18:1;;;5164:39;5220:19;;29986:104:0;4840:405:1;29986:104:0;30122:12;;-1:-1:-1;;;;;30109:25:0;;;30122:12;;30109:25;;:51;;-1:-1:-1;30148:12:0;;-1:-1:-1;;;;;30138:22:0;;;30148:12;;30138:22;30109:51;30101:91;;;;-1:-1:-1;;;30101:91:0;;5452:2:1;30101:91:0;;;5434:21:1;5491:2;5471:18;;;5464:30;5530:29;5510:18;;;5503:57;5577:18;;30101:91:0;5250:351:1;30101:91:0;30282:12;;-1:-1:-1;;;;;30269:25:0;;;30282:12;;30269:25;30265:123;;;30329:12;;30311:39;;30321:6;;-1:-1:-1;;;;;30329:12:0;30343:6;30311:9;:39::i;:::-;-1:-1:-1;30372:4:0;30365:11;;30265:123;30472:12;;-1:-1:-1;;;;;30462:22:0;;;30472:12;;30462:22;30458:123;;;30511:12;;30501:42;;-1:-1:-1;;;;;30511:12:0;30525:9;30536:6;30501:9;:42::i;30458:123::-;30600:45;30619:6;30627:9;30638:6;30600:18;:45::i;:::-;30593:52;;29823:830;;;;;;:::o;19024:215::-;7326:10;19112:4;19161:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19161:34:0;;;;;;;;;;19112:4;;19129:80;;19152:7;;19161:47;;19198:10;;19161:47;:::i;:::-;19129:8;:80::i;27130:631::-;27299:10;4384:20;4432:8;27262:49;;;;;;27386:33;;-1:-1:-1;;6048:2:1;6044:15;;;6040:53;27386:33:0;;;6028:66:1;6110:12;;;6103:28;;;27361:12:0;;6147::1;;27386:33:0;;;;;;;;;;;;27376:44;;;;;;27361:59;;27455:49;27474:11;;27455:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27487:10:0;;-1:-1:-1;27499:4:0;;-1:-1:-1;27455:18:0;;-1:-1:-1;27455:49:0:i;:::-;27433:132;;;;-1:-1:-1;;;27433:132:0;;6372:2:1;27433:132:0;;;6354:21:1;6411:2;6391:18;;;6384:30;6450:34;6430:18;;;6423:62;-1:-1:-1;;;6501:18:1;;;6494:31;6542:19;;27433:132:0;6170:397:1;27433:132:0;-1:-1:-1;;;;;27586:23:0;;;;;;:14;:23;;;;;;;;:32;27578:64;;;;-1:-1:-1;;;27578:64:0;;6774:2:1;27578:64:0;;;6756:21:1;6813:2;6793:18;;;6786:30;-1:-1:-1;;;6832:18:1;;;6825:49;6891:18;;27578:64:0;6572:343:1;27578:64:0;27653:58;27672:7;27690:20;16350:2;27690;:20;:::i;:::-;27681:29;;:6;:29;:::i;:::-;27653:18;:58::i;:::-;27729:24;;;-1:-1:-1;;;;;8659:32:1;;8641:51;;8723:2;8708:18;;8701:34;;;27729:24:0;;8614:18:1;27729:24:0;;;;;;;27251:510;27130:631;;;;:::o;28408:90::-;28465:25;28471:10;28483:6;28465:5;:25::i;:::-;28408:90;:::o;28886:99::-;8531:6;;-1:-1:-1;;;;;8531:6:0;7326:10;8678:23;8670:68;;;;-1:-1:-1;;;8670:68:0;;;;;;;:::i;:::-;26846:14:::1;::::0;-1:-1:-1;;;26846:14:0;::::1;;;26845:15;26837:44;;;::::0;-1:-1:-1;;;26837:44:0;;8948:2:1;26837:44:0::1;::::0;::::1;8930:21:1::0;8987:2;8967:18;;;8960:30;-1:-1:-1;;;9006:18:1;;;8999:46;9062:18;;26837:44:0::1;8746:340:1::0;26837:44:0::1;28956:14:::2;:21:::0;;-1:-1:-1;;;;28956:21:0::2;-1:-1:-1::0;;;28956:21:0::2;::::0;;28886:99::o;9109:94::-;8531:6;;-1:-1:-1;;;;;8531:6:0;7326:10;8678:23;8670:68;;;;-1:-1:-1;;;8670:68:0;;;;;;;:::i;:::-;9174:21:::1;9192:1;9174:9;:21::i;:::-;9109:94::o:0;15524:104::-;15580:13;15613:7;15606:14;;;;;:::i;19742:413::-;7326:10;19835:4;19879:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19879:34:0;;;;;;;;;;19932:35;;;;19924:85;;;;-1:-1:-1;;;19924:85:0;;9293:2:1;19924:85:0;;;9275:21:1;9332:2;9312:18;;;9305:30;9371:34;9351:18;;;9344:62;-1:-1:-1;;;9422:18:1;;;9415:35;9467:19;;19924:85:0;9091:401:1;19924:85:0;20045:67;7326:10;20068:7;20096:15;20077:16;:34;20045:8;:67::i;:::-;-1:-1:-1;20143:4:0;;19742:413;-1:-1:-1;;;19742:413:0:o;29524:287::-;29654:12;;29616:4;;-1:-1:-1;;;;;29641:25:0;;;29654:12;;29641:25;;:55;;-1:-1:-1;29684:12:0;;-1:-1:-1;;;;;29684:12:0;29670:10;:26;29641:55;29633:95;;;;-1:-1:-1;;;29633:95:0;;5452:2:1;29633:95:0;;;5434:21:1;5491:2;5471:18;;;5464:30;5530:29;5510:18;;;5503:57;5577:18;;29633:95:0;5250:351:1;29633:95:0;29741:40;29751:10;29763:9;29774:6;29741:9;:40::i;28622:108::-;8531:6;;-1:-1:-1;;;;;8531:6:0;7326:10;8678:23;8670:68;;;;-1:-1:-1;;;8670:68:0;;;;;;;:::i;:::-;26846:14:::1;::::0;-1:-1:-1;;;26846:14:0;::::1;;;26845:15;26837:44;;;::::0;-1:-1:-1;;;26837:44:0;;8948:2:1;26837:44:0::1;::::0;::::1;8930:21:1::0;8987:2;8967:18;;;8960:30;-1:-1:-1;;;9006:18:1;;;8999:46;9062:18;;26837:44:0::1;8746:340:1::0;26837:44:0::1;28706:6:::2;:16:::0;;-1:-1:-1;;;;;;28706:16:0::2;-1:-1:-1::0;;;;;28706:16:0;;;::::2;::::0;;;::::2;::::0;;28622:108::o;29107:138::-;8531:6;;-1:-1:-1;;;;;8531:6:0;7326:10;8678:23;8670:68;;;;-1:-1:-1;;;8670:68:0;;;;;;;:::i;:::-;26428:20:::1;::::0;-1:-1:-1;;;26428:20:0;::::1;;;26427:21;26419:57;;;::::0;-1:-1:-1;;;26419:57:0;;4305:2:1;26419:57:0::1;::::0;::::1;4287:21:1::0;4344:2;4324:18;;;4317:30;-1:-1:-1;;;4363:18:1;;;4356:53;4426:18;;26419:57:0::1;4103:347:1::0;26419:57:0::1;29209:12:::2;:28:::0;;-1:-1:-1;;;;;;29209:28:0::2;-1:-1:-1::0;;;;;29209:28:0;;;::::2;::::0;;;::::2;::::0;;29107:138::o;9358:192::-;8531:6;;-1:-1:-1;;;;;8531:6:0;7326:10;8678:23;8670:68;;;;-1:-1:-1;;;8670:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9447:22:0;::::1;9439:73;;;::::0;-1:-1:-1;;;9439:73:0;;9699:2:1;9439:73:0::1;::::0;::::1;9681:21:1::0;9738:2;9718:18;;;9711:30;9777:34;9757:18;;;9750:62;-1:-1:-1;;;9828:18:1;;;9821:36;9874:19;;9439:73:0::1;9497:402:1::0;9439:73:0::1;9523:19;9533:8;9523:9;:19::i;28120:235::-:0;28228:6;;-1:-1:-1;;;;;28228:6:0;28214:10;:20;28206:74;;;;-1:-1:-1;;;28206:74:0;;10106:2:1;28206:74:0;;;10088:21:1;10145:2;10125:18;;;10118:30;10184:34;10164:18;;;10157:62;-1:-1:-1;;;10235:18:1;;;10228:39;10284:19;;28206:74:0;9904:405:1;28206:74:0;28291:56;28305:9;28326:20;16350:2;28326;:20;:::i;:::-;28317:29;;:6;:29;:::i;:::-;28291:5;:56::i;:::-;28120:235;;:::o;23426:380::-;-1:-1:-1;;;;;23562:19:0;;23554:68;;;;-1:-1:-1;;;23554:68:0;;10516:2:1;23554:68:0;;;10498:21:1;10555:2;10535:18;;;10528:30;10594:34;10574:18;;;10567:62;-1:-1:-1;;;10645:18:1;;;10638:34;10689:19;;23554:68:0;10314:400:1;23554:68:0;-1:-1:-1;;;;;23641:21:0;;23633:68;;;;-1:-1:-1;;;23633:68:0;;10921:2:1;23633:68:0;;;10903:21:1;10960:2;10940:18;;;10933:30;10999:34;10979:18;;;10972:62;-1:-1:-1;;;11050:18:1;;;11043:32;11092:19;;23633:68:0;10719:398:1;23633:68:0;-1:-1:-1;;;;;23714:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23766:32;;1391:25:1;;;23766:32:0;;1364:18:1;23766:32:0;;;;;;;;23426:380;;;:::o;20645:733::-;-1:-1:-1;;;;;20785:20:0;;20777:70;;;;-1:-1:-1;;;20777:70:0;;11324:2:1;20777:70:0;;;11306:21:1;11363:2;11343:18;;;11336:30;11402:34;11382:18;;;11375:62;-1:-1:-1;;;11453:18:1;;;11446:35;11498:19;;20777:70:0;11122:401:1;20777:70:0;-1:-1:-1;;;;;20866:23:0;;20858:71;;;;-1:-1:-1;;;20858:71:0;;11730:2:1;20858:71:0;;;11712:21:1;11769:2;11749:18;;;11742:30;11808:34;11788:18;;;11781:62;-1:-1:-1;;;11859:18:1;;;11852:33;11902:19;;20858:71:0;11528:399:1;20858:71:0;-1:-1:-1;;;;;21026:17:0;;21002:21;21026:17;;;;;;;;;;;21062:23;;;;21054:74;;;;-1:-1:-1;;;21054:74:0;;12134:2:1;21054:74:0;;;12116:21:1;12173:2;12153:18;;;12146:30;12212:34;12192:18;;;12185:62;-1:-1:-1;;;12263:18:1;;;12256:36;12309:19;;21054:74:0;11932:402:1;21054:74:0;-1:-1:-1;;;;;21164:17:0;;;:9;:17;;;;;;;;;;;21184:22;;;21164:42;;21228:20;;;;;;;;:30;;21200:6;;21164:9;21228:30;;21200:6;;21228:30;:::i;:::-;;;;;;;;21293:9;-1:-1:-1;;;;;21276:35:0;21285:6;-1:-1:-1;;;;;21276:35:0;;21304:6;21276:35;;;;1391:25:1;;1379:2;1364:18;;1245:177;21276:35:0;;;;;;;;20766:612;20645:733;;;:::o;18123:492::-;18263:4;18280:36;18290:6;18298:9;18309:6;18280:9;:36::i;:::-;-1:-1:-1;;;;;18356:19:0;;18329:24;18356:19;;;:11;:19;;;;;;;;7326:10;18356:33;;;;;;;;18408:26;;;;18400:79;;;;-1:-1:-1;;;18400:79:0;;12541:2:1;18400:79:0;;;12523:21:1;12580:2;12560:18;;;12553:30;12619:34;12599:18;;;12592:62;-1:-1:-1;;;12670:18:1;;;12663:38;12718:19;;18400:79:0;12339:404:1;18400:79:0;18515:57;18524:6;7326:10;18565:6;18546:16;:25;18515:8;:57::i;:::-;-1:-1:-1;18603:4:0;;18123:492;-1:-1:-1;;;;18123:492:0:o;5361:190::-;5486:4;5539;5510:25;5523:5;5530:4;5510:12;:25::i;:::-;:33;;5361:190;-1:-1:-1;;;;5361:190:0:o;27769:137::-;-1:-1:-1;;;;;27845:18:0;;;;;;:14;:18;;;;;:25;;-1:-1:-1;;27845:25:0;27866:4;27845:25;;;27881:17;27860:2;27891:6;27881:5;:17::i;22397:591::-;-1:-1:-1;;;;;22481:21:0;;22473:67;;;;-1:-1:-1;;;22473:67:0;;12950:2:1;22473:67:0;;;12932:21:1;12989:2;12969:18;;;12962:30;13028:34;13008:18;;;13001:62;-1:-1:-1;;;13079:18:1;;;13072:31;13120:19;;22473:67:0;12748:397:1;22473:67:0;-1:-1:-1;;;;;22640:18:0;;22615:22;22640:18;;;;;;;;;;;22677:24;;;;22669:71;;;;-1:-1:-1;;;22669:71:0;;13352:2:1;22669:71:0;;;13334:21:1;13391:2;13371:18;;;13364:30;13430:34;13410:18;;;13403:62;-1:-1:-1;;;13481:18:1;;;13474:32;13523:19;;22669:71:0;13150:398:1;22669:71:0;-1:-1:-1;;;;;22776:18:0;;:9;:18;;;;;;;;;;22797:23;;;22776:44;;22842:12;:22;;22814:6;;22776:9;22842:22;;22814:6;;22842:22;:::i;:::-;;;;-1:-1:-1;;22882:37:0;;1391:25:1;;;22908:1:0;;-1:-1:-1;;;;;22882:37:0;;;;;1379:2:1;1364:18;22882:37:0;1245:177:1;9558:173:0;9633:6;;;-1:-1:-1;;;;;9650:17:0;;;-1:-1:-1;;;;;;9650:17:0;;;;;;;9683:40;;9633:6;;;9650:17;9633:6;;9683:40;;9614:16;;9683:40;9603:128;9558:173;:::o;21665:399::-;-1:-1:-1;;;;;21749:21:0;;21741:65;;;;-1:-1:-1;;;21741:65:0;;13885:2:1;21741:65:0;;;13867:21:1;13924:2;13904:18;;;13897:30;13963:33;13943:18;;;13936:61;14014:18;;21741:65:0;13683:355:1;21741:65:0;21897:6;21881:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;21914:18:0;;:9;:18;;;;;;;;;;:28;;21936:6;;21914:9;:28;;21936:6;;21914:28;:::i;:::-;;;;-1:-1:-1;;21958:37:0;;1391:25:1;;;-1:-1:-1;;;;;21958:37:0;;;21975:1;;21958:37;;1379:2:1;1364:18;21958:37:0;;;;;;;28120:235;;:::o;5913:701::-;5996:7;6039:4;5996:7;6054:523;6078:5;:12;6074:1;:16;6054:523;;;6112:20;6135:5;6141:1;6135:8;;;;;;;;:::i;:::-;;;;;;;6112:31;;6178:12;6162;:28;6158:408;;6315:44;;;;;;14332:19:1;;;14367:12;;;14360:28;;;14404:12;;6315:44:0;;;;;;;;;;;;6305:55;;;;;;6290:70;;6158:408;;;6505:44;;;;;;14332:19:1;;;14367:12;;;14360:28;;;14404:12;;6505:44:0;;;;;;;;;;;;6495:55;;;;;;6480:70;;6158:408;-1:-1:-1;6092:3:0;;;;:::i;:::-;;;;6054:523;;;-1:-1:-1;6594:12:0;5913:701;-1:-1:-1;;;5913:701:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;713:70;616:173;;;:::o;794:254::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1427:328::-;1504:6;1512;1520;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;1612:29;1631:9;1612:29;:::i;:::-;1602:39;;1660:38;1694:2;1683:9;1679:18;1660:38;:::i;:::-;1650:48;;1745:2;1734:9;1730:18;1717:32;1707:42;;1427:328;;;;;:::o;2131:186::-;2190:6;2243:2;2231:9;2222:7;2218:23;2214:32;2211:52;;;2259:1;2256;2249:12;2211:52;2282:29;2301:9;2282:29;:::i;2322:757::-;2426:6;2434;2442;2450;2503:2;2491:9;2482:7;2478:23;2474:32;2471:52;;;2519:1;2516;2509:12;2471:52;2542:29;2561:9;2542:29;:::i;:::-;2532:39;;2618:2;2607:9;2603:18;2590:32;2580:42;;2673:2;2662:9;2658:18;2645:32;2696:18;2737:2;2729:6;2726:14;2723:34;;;2753:1;2750;2743:12;2723:34;2791:6;2780:9;2776:22;2766:32;;2836:7;2829:4;2825:2;2821:13;2817:27;2807:55;;2858:1;2855;2848:12;2807:55;2898:2;2885:16;2924:2;2916:6;2913:14;2910:34;;;2940:1;2937;2930:12;2910:34;2993:7;2988:2;2978:6;2975:1;2971:14;2967:2;2963:23;2959:32;2956:45;2953:65;;;3014:1;3011;3004:12;2953:65;2322:757;;;;-1:-1:-1;;3045:2:1;3037:11;;-1:-1:-1;;;2322:757:1:o;3084:180::-;3143:6;3196:2;3184:9;3175:7;3171:23;3167:32;3164:52;;;3212:1;3209;3202:12;3164:52;-1:-1:-1;3235:23:1;;3084:180;-1:-1:-1;3084:180:1:o;3477:260::-;3545:6;3553;3606:2;3594:9;3585:7;3581:23;3577:32;3574:52;;;3622:1;3619;3612:12;3574:52;3645:29;3664:9;3645:29;:::i;:::-;3635:39;;3693:38;3727:2;3716:9;3712:18;3693:38;:::i;:::-;3683:48;;3477:260;;;;;:::o;3742:356::-;3944:2;3926:21;;;3963:18;;;3956:30;4022:34;4017:2;4002:18;;3995:62;4089:2;4074:18;;3742:356::o;4455:380::-;4534:1;4530:12;;;;4577;;;4598:61;;4652:4;4644:6;4640:17;4630:27;;4598:61;4705:2;4697:6;4694:14;4674:18;4671:38;4668:161;;;4751:10;4746:3;4742:20;4739:1;4732:31;4786:4;4783:1;4776:15;4814:4;4811:1;4804:15;4668:161;;4455:380;;;:::o;5606:127::-;5667:10;5662:3;5658:20;5655:1;5648:31;5698:4;5695:1;5688:15;5722:4;5719:1;5712:15;5738:128;5778:3;5809:1;5805:6;5802:1;5799:13;5796:39;;;5815:18;;:::i;:::-;-1:-1:-1;5851:9:1;;5738:128::o;6920:422::-;7009:1;7052:5;7009:1;7066:270;7087:7;7077:8;7074:21;7066:270;;;7146:4;7142:1;7138:6;7134:17;7128:4;7125:27;7122:53;;;7155:18;;:::i;:::-;7205:7;7195:8;7191:22;7188:55;;;7225:16;;;;7188:55;7304:22;;;;7264:15;;;;7066:270;;;7070:3;6920:422;;;;;:::o;7347:806::-;7396:5;7426:8;7416:80;;-1:-1:-1;7467:1:1;7481:5;;7416:80;7515:4;7505:76;;-1:-1:-1;7552:1:1;7566:5;;7505:76;7597:4;7615:1;7610:59;;;;7683:1;7678:130;;;;7590:218;;7610:59;7640:1;7631:10;;7654:5;;;7678:130;7715:3;7705:8;7702:17;7699:43;;;7722:18;;:::i;:::-;-1:-1:-1;;7778:1:1;7764:16;;7793:5;;7590:218;;7892:2;7882:8;7879:16;7873:3;7867:4;7864:13;7860:36;7854:2;7844:8;7841:16;7836:2;7830:4;7827:12;7823:35;7820:77;7817:159;;;-1:-1:-1;7929:19:1;;;7961:5;;7817:159;8008:34;8033:8;8027:4;8008:34;:::i;:::-;8078:6;8074:1;8070:6;8066:19;8057:7;8054:32;8051:58;;;8089:18;;:::i;:::-;8127:20;;7347:806;-1:-1:-1;;;7347:806:1:o;8158:131::-;8218:5;8247:36;8274:8;8268:4;8247:36;:::i;8294:168::-;8334:7;8400:1;8396;8392:6;8388:14;8385:1;8382:21;8377:1;8370:9;8363:17;8359:45;8356:71;;;8407:18;;:::i;:::-;-1:-1:-1;8447:9:1;;8294:168::o;13553:125::-;13593:4;13621:1;13618;13615:8;13612:34;;;13626:18;;:::i;:::-;-1:-1:-1;13663:9:1;;13553:125::o;14043:127::-;14104:10;14099:3;14095:20;14092:1;14085:31;14135:4;14132:1;14125:15;14159:4;14156:1;14149:15;14427:135;14466:3;-1:-1:-1;;14487:17:1;;14484:43;;;14507:18;;:::i;:::-;-1:-1:-1;14554:1:1;14543:13;;14427:135::o

Swarm Source

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