Token Overtime World Cup Zebro

Overview [ERC-721]

Max Total Supply:
0 OWC

Holders:
9

Profile Summary

 
Contract:
0xd66ee2d0f8810304402f6be0e57e7c0a261b54a30xD66eE2D0F8810304402F6bE0E57E7C0a261b54A3

Balance
0 OWC
0xf12c220b631125425f4c69823d6187fe3c8d0999
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OvertimeWorldCupZebro

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 15 : OvertimeWorldCupZebro.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts-4.4.1/utils/Counters.sol";
import "@openzeppelin/contracts-4.4.1/access/Ownable.sol";
import "@openzeppelin/contracts-4.4.1/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts-4.4.1/utils/math/SafeMath.sol";

import "../../interfaces/IStakingThales.sol";

contract OvertimeWorldCupZebro is ERC721URIStorage, Ownable {
    /* ========== LIBRARIES ========== */

    using Counters for Counters.Counter;
    using SafeMath for uint;

    /* ========== STATE VARIABLES ========== */

    Counters.Counter private _tokenIds;

    // NFT Global
    string public _name = "Overtime World Cup Zebro";
    string public _symbol = "OWC";
    bool public paused = false;

    // NFT props.
    mapping(uint => bool) public allowedCountryNumber;
    mapping(uint => string) public countryNameByNumber;
    mapping(uint => string) public countryUrl;
    mapping(address => bool) public whitelistedAddressesForMinting;

    // user props.
    mapping(address => uint) public usersFavoriteTeamId;
    mapping(address => string) public usersFavoriteTeamName;
    mapping(address => string) public usersFavoriteTeamUrl;
    mapping(uint => address[]) public listOfUsersByCountry;

    IStakingThales public staking;
    uint public minimumStake;

    /* ========== CONSTRUCTOR ========== */

    constructor(
        string[] memory _allowedCountries,
        string[] memory _countryURLs,
        address _staking,
        uint _minimumStake
    ) ERC721(_name, _symbol) {
        require(_countryURLs.length == _allowedCountries.length, "Provide same length in country array");
        // countries start from 1
        uint countryIndex = 1;
        // populate allowed countries
        for (uint i; i < _allowedCountries.length; i++) {
            allowedCountryNumber[countryIndex] = true;
            countryNameByNumber[countryIndex] = _allowedCountries[i];
            countryUrl[countryIndex] = _countryURLs[i];
            countryIndex++;
        }
        staking = IStakingThales(_staking);
        minimumStake = _minimumStake;
    }

    /* ========== OWC ========== */

    function mint(address _recipient, uint _country) external returns (uint newItemId) {
        require(!paused, "Cant mint while paused");
        require(_recipient == msg.sender, "Soulbound NFT can be only minted for his owner");
        require(allowedCountryNumber[_country], "Country not allowed");
        require(usersFavoriteTeamId[_recipient] == 0, "Recipient has picked the team already");
        require(isMinterEligibleToMint(_recipient), "User is not allowed to mint this NFT");

        _tokenIds.increment();

        newItemId = _tokenIds.current();

        _mint(_recipient, newItemId);

        _setTokenURI(newItemId, countryUrl[_country]);

        usersFavoriteTeamId[_recipient] = _country;
        usersFavoriteTeamName[_recipient] = countryNameByNumber[_country];
        usersFavoriteTeamUrl[_recipient] = countryUrl[_country];

        listOfUsersByCountry[_country].push(_recipient);

        emit Mint(_recipient, newItemId, _country, countryNameByNumber[_country], usersFavoriteTeamUrl[_recipient]);
    }

    function burn(uint _tokenId) external {
        require(ownerOf(_tokenId) == msg.sender, "Not owner");
        super._burn(_tokenId);
        emit Burn(_tokenId, msg.sender);
    }

    /* ========== VIEW ========== */

    function getFavoriteTeamForUser(address _user)
        external
        view
        returns (
            uint _id,
            string memory _name,
            string memory _url
        )
    {
        return (usersFavoriteTeamId[_user], usersFavoriteTeamName[_user], usersFavoriteTeamUrl[_user]);
    }

    function getListOfUsersPerTeam(uint _country) external view returns (address[] memory) {
        return listOfUsersByCountry[_country];
    }

    function isMinterEligibleToMint(address _minter) public view returns (bool) {
        return whitelistedAddressesForMinting[_minter] || staking.stakedBalanceOf(_minter) >= minimumStake;
    }

    /* ========== INTERNALS ========== */

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        require(from == address(0) || to == address(0), "Can not transfer NFT, only mint and burn");
    }

    /* ========== CONTRACT MANAGEMENT ========== */

    function setPause(bool _state) external onlyOwner {
        require(_state != paused, "Already in that state");
        paused = _state;
        emit Paused(_state);
    }

    function setAllowedCountryNumber(uint _country, bool _flag) external onlyOwner {
        require(allowedCountryNumber[_country] != _flag, "Already in that state");
        allowedCountryNumber[_country] = _flag;
        emit SetAllowedCountryNumber(_country, _flag);
    }

    function setCountryNameByNumber(uint _country, string memory _name) external onlyOwner {
        require(
            keccak256(abi.encodePacked(countryNameByNumber[_country])) != keccak256(abi.encodePacked(_name)),
            "Same as before"
        );
        countryNameByNumber[_country] = _name;
        emit SetCountryNameByNumber(_country, _name);
    }

    function setCountryURL(uint _country, string memory _url) external onlyOwner {
        require(keccak256(abi.encodePacked(countryUrl[_country])) != keccak256(abi.encodePacked(_url)), "Same as before");
        countryUrl[_country] = _url;
        emit SetCountryURLByNumber(_country, _url);
    }

    function setWhitelistedAddresses(address[] calldata _whitelistedAddresses, bool _flag) external onlyOwner {
        require(_whitelistedAddresses.length > 0, "Whitelisted addresses cannot be empty");
        for (uint256 index = 0; index < _whitelistedAddresses.length; index++) {
            // only if current flag is different, if same skip it
            if (whitelistedAddressesForMinting[_whitelistedAddresses[index]] != _flag) {
                whitelistedAddressesForMinting[_whitelistedAddresses[index]] = _flag;
                emit AddedIntoWhitelist(_whitelistedAddresses[index], _flag);
            }
        }
    }

    function setStakingAddress(address _staking) external onlyOwner {
        require(_staking != address(0), "Invalid address");
        staking = IStakingThales(_staking);
        emit NewStakingAddress(_staking);
    }

    function setMinimumStakeAmount(uint _minimumAmount) external onlyOwner {
        require(_minimumAmount > 0, "Can not be zero");
        minimumStake = _minimumAmount;
        emit NewMinimumStakeAmount(_minimumAmount);
    }

    /* ========== EVENTS ========== */

    event Paused(bool _state);
    event AddedIntoWhitelist(address _whitelistAddress, bool _flag);
    event Mint(address _recipient, uint _id, uint _country, string _countryName, string _url);
    event NewStakingAddress(address _staking);
    event SetAllowedCountryNumber(uint _country, bool _flag);
    event SetCountryNameByNumber(uint _country, string _name);
    event SetCountryURLByNumber(uint _country, string _url);
    event Burn(uint _tokenId, address _exHolder);
    event NewMinimumStakeAmount(uint _minimumAmount);
}

File 2 of 15 : Counters.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 3 of 15 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 15 : ERC721URIStorage.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/extensions/ERC721URIStorage.sol)

pragma solidity ^0.8.0;

import "../ERC721.sol";

/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev See {ERC721-_burn}. This override additionally checks to see if a
     * token-specific URI was set for the token, and if so, it deletes the token URI from
     * the storage mapping.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

File 5 of 15 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 6 of 15 : IStakingThales.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.16;

interface IStakingThales {
    function updateVolume(address account, uint amount) external;

    /* ========== VIEWS / VARIABLES ========== */
    function totalStakedAmount() external view returns (uint);

    function stakedBalanceOf(address account) external view returns (uint);

    function currentPeriodRewards() external view returns (uint);

    function currentPeriodFees() external view returns (uint);

    function getLastPeriodOfClaimedRewards(address account) external view returns (uint);

    function getRewardsAvailable(address account) external view returns (uint);

    function getRewardFeesAvailable(address account) external view returns (uint);

    function getAlreadyClaimedRewards(address account) external view returns (uint);

    function getContractRewardFunds() external view returns (uint);

    function getContractFeeFunds() external view returns (uint);
}

File 7 of 15 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 8 of 15 : ERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @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.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` 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 tokenId
    ) 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.
     * - `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 tokenId
    ) internal virtual {}
}

File 9 of 15 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

File 10 of 15 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 11 of 15 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

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 12 of 15 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 13 of 15 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    /**
     * @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);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

File 14 of 15 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

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 15 of 15 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"string[]","name":"_allowedCountries","type":"string[]"},{"internalType":"string[]","name":"_countryURLs","type":"string[]"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"uint256","name":"_minimumStake","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_whitelistAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"_flag","type":"bool"}],"name":"AddedIntoWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"_exHolder","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_country","type":"uint256"},{"indexed":false,"internalType":"string","name":"_countryName","type":"string"},{"indexed":false,"internalType":"string","name":"_url","type":"string"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_minimumAmount","type":"uint256"}],"name":"NewMinimumStakeAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_staking","type":"address"}],"name":"NewStakingAddress","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":false,"internalType":"bool","name":"_state","type":"bool"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_country","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_flag","type":"bool"}],"name":"SetAllowedCountryNumber","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_country","type":"uint256"},{"indexed":false,"internalType":"string","name":"_name","type":"string"}],"name":"SetCountryNameByNumber","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_country","type":"uint256"},{"indexed":false,"internalType":"string","name":"_url","type":"string"}],"name":"SetCountryURLByNumber","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allowedCountryNumber","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"countryNameByNumber","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"countryUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"_user","type":"address"}],"name":"getFavoriteTeamForUser","outputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_url","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_country","type":"uint256"}],"name":"getListOfUsersPerTeam","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":"_minter","type":"address"}],"name":"isMinterEligibleToMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"listOfUsersByCountry","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_country","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"newItemId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_country","type":"uint256"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAllowedCountryNumber","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":"uint256","name":"_country","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"setCountryNameByNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_country","type":"uint256"},{"internalType":"string","name":"_url","type":"string"}],"name":"setCountryURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumAmount","type":"uint256"}],"name":"setMinimumStakeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelistedAddresses","type":"address[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setWhitelistedAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"contract IStakingThales","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersFavoriteTeamId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersFavoriteTeamName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"usersFavoriteTeamUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAddressesForMinting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60c0604052601860808190527f4f76657274696d6520576f726c6420437570205a6562726f000000000000000060a0908152620000409160099190620003f0565b50604080518082019091526003808252624f574360e81b60209092019182526200006d91600a91620003f0565b50600b805460ff191690553480156200008557600080fd5b506040516200344438038062003444833981016040819052620000a891620005d2565b60098054620000b79062000694565b80601f0160208091040260200160405190810160405280929190818152602001828054620000e59062000694565b8015620001365780601f106200010a5761010080835404028352916020019162000136565b820191906000526020600020905b8154815290600101906020018083116200011857829003601f168201915b5050505050600a80546200014a9062000694565b80601f0160208091040260200160405190810160405280929190818152602001828054620001789062000694565b8015620001c95780601f106200019d57610100808354040283529160200191620001c9565b820191906000526020600020905b815481529060010190602001808311620001ab57829003601f168201915b50508451620001e3935060009250602086019150620003f0565b508051620001f9906001906020840190620003f0565b50505062000216620002106200039a60201b60201c565b6200039e565b8351835114620002785760405162461bcd60e51b8152602060048201526024808201527f50726f766964652073616d65206c656e67746820696e20636f756e74727920616044820152637272617960e01b606482015260840160405180910390fd5b600160005b85518110156200036b576000828152600c60205260409020805460ff191660011790558551869082908110620002c357634e487b7160e01b600052603260045260246000fd5b6020026020010151600d60008481526020019081526020016000209080519060200190620002f3929190620003f0565b508481815181106200031557634e487b7160e01b600052603260045260246000fd5b6020026020010151600e6000848152602001908152602001600020908051906020019062000345929190620003f0565b50816200035281620006d1565b92505080806200036290620006d1565b9150506200027d565b5050601480546001600160a01b0319166001600160a01b039390931692909217909155601555506200070f9050565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620003fe9062000694565b90600052602060002090601f0160209004810192826200042257600085556200046d565b82601f106200043d57805160ff19168380011785556200046d565b828001600101855582156200046d579182015b828111156200046d57825182559160200191906001019062000450565b506200047b9291506200047f565b5090565b5b808211156200047b576000815560010162000480565b600082601f830112620004a7578081fd5b815160206001600160401b0380831115620004c657620004c6620006f9565b8260051b620004d783820162000661565b8481528381019087850183890186018a1015620004f2578788fd5b8793505b8684101562000534578051858111156200050e578889fd5b6200051e8b88838d010162000541565b84525060019390930192918501918501620004f6565b5098975050505050505050565b600082601f83011262000552578081fd5b81516001600160401b038111156200056e576200056e620006f9565b602062000584601f8301601f1916820162000661565b828152858284870101111562000598578384fd5b835b83811015620005b75785810183015182820184015282016200059a565b83811115620005c857848385840101525b5095945050505050565b60008060008060808587031215620005e8578384fd5b84516001600160401b0380821115620005ff578586fd5b6200060d8883890162000496565b9550602087015191508082111562000623578485fd5b50620006328782880162000496565b604087015190945090506001600160a01b038116811462000651578283fd5b6060959095015193969295505050565b604051601f8201601f191681016001600160401b03811182821017156200068c576200068c620006f9565b604052919050565b600181811c90821680620006a957607f821691505b60208210811415620006cb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620006f257634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b612d25806200071f6000396000f3fe608060405234801561001057600080fd5b50600436106102525760003560e01c80636a71114111610146578063bedb86fb116100c3578063ec5ffac211610087578063ec5ffac214610564578063f2fde38b1461056d578063f3c2ade414610580578063f4e0d9ac14610593578063f658da2b146105a6578063fc957c42146105c657600080fd5b8063bedb86fb146104e7578063bf288213146104fa578063c87b56dd1461050d578063d28d885214610520578063e985e9c51461052857600080fd5b8063a22cb4651161010a578063a22cb46514610473578063a84b6c7914610486578063b09f1266146104a9578063b320be4e146104b1578063b88d4fde146104d457600080fd5b80636a7111411461042c57806370a082311461043f578063715018a6146104525780638da5cb5b1461045a57806395d89b411461046b57600080fd5b80632f893de7116101d45780634af47b2d116101985780634af47b2d146103d35780634cf088d9146103e65780635c975abb146103f95780636352211e1461040657806367e384111461041957600080fd5b80632f893de714610357578063325dc9ae1461036a57806340c10f191461038c57806342842e0e146103ad57806342966c68146103c057600080fd5b80630d29fcd41161021b5780630d29fcd4146102f85780631115fef21461030b5780631246e7c21461031e57806323b872dd146103315780632d651de81461034457600080fd5b80621942d21461025757806301ffc9a71461028057806306fdde03146102a3578063081812fc146102b8578063095ea7b3146102e3575b600080fd5b61026a6102653660046127ca565b6105d9565b6040516102779190612a7a565b60405180910390f35b61029361028e366004612792565b610645565b6040519015158152602001610277565b6102ab610697565b6040516102779190612ac7565b6102cb6102c63660046127ca565b610729565b6040516001600160a01b039091168152602001610277565b6102f66102f13660046126d0565b610750565b005b6102f66103063660046127ca565b61086b565b6102ab6103193660046127ca565b6108f1565b6102ab61032c3660046125a7565b61098b565b6102f661033f3660046125f3565b6109a4565b6102f661035236600461281c565b6109d5565b6102f66103653660046126f9565b610ad2565b61037d6103783660046125a7565b610c93565b60405161027793929190612b93565b61039f61039a3660046126d0565b610dec565b604051908152602001610277565b6102f66103bb3660046125f3565b6111b0565b6102f66103ce3660046127ca565b6111cb565b6102936103e13660046125a7565b611255565b6014546102cb906001600160a01b031681565b600b546102939060ff1681565b6102cb6104143660046127ca565b6112ff565b6102f661042736600461281c565b61135f565b6102f661043a3660046127fa565b611450565b61039f61044d3660046125a7565b611507565b6102f661158d565b6007546001600160a01b03166102cb565b6102ab6115a1565b6102f66104813660046126a7565b6115b0565b6102936104943660046125a7565b600f6020526000908152604090205460ff1681565b6102ab6115bf565b6102936104bf3660046127ca565b600c6020526000908152604090205460ff1681565b6102f66104e236600461262e565b6115cc565b6102f66104f5366004612778565b6115fe565b6102ab6105083660046127ca565b611698565b6102ab61051b3660046127ca565b6116b1565b6102ab6117c2565b6102936105363660046125c1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61039f60155481565b6102f661057b3660046125a7565b6117cf565b6102cb61058e366004612874565b611848565b6102f66105a13660046125a7565b611880565b61039f6105b43660046125a7565b60106020526000908152604090205481565b6102ab6105d43660046125a7565b61191e565b60008181526013602090815260409182902080548351818402810184019094528084526060939283018282801561063957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161061b575b50505050509050919050565b60006001600160e01b031982166380ac58cd60e01b148061067657506001600160e01b03198216635b5e139f60e01b145b8061069157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106a690612c2d565b80601f01602080910402602001604051908101604052809291908181526020018280546106d290612c2d565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b600061073482611937565b506000908152600460205260409020546001600160a01b031690565b600061075b826112ff565b9050806001600160a01b0316836001600160a01b031614156107ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806107ea57506107ea8133610536565b61085c5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107c5565b6108668383611996565b505050565b610873611a04565b600081116108b55760405162461bcd60e51b815260206004820152600f60248201526e43616e206e6f74206265207a65726f60881b60448201526064016107c5565b60158190556040518181527fa48a3c244301177b580df8bf8b7610d45b6032437da5d1ce408aa725bbe9bc4b906020015b60405180910390a150565b600e602052600090815260409020805461090a90612c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461093690612c2d565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b505050505081565b6011602052600090815260409020805461090a90612c2d565b6109ae3382611a5e565b6109ca5760405162461bcd60e51b81526004016107c590612b2c565b610866838383611adc565b6109dd611a04565b806040516020016109ee9190612938565b60408051601f1981840301815282825280516020918201206000868152600d8352929092209192610a20929101612983565b604051602081830303815290604052805190602001201415610a755760405162461bcd60e51b815260206004820152600e60248201526d53616d65206173206265666f726560901b60448201526064016107c5565b6000828152600d602090815260409091208251610a94928401906123bb565b507f915c40f9edd0c33f545846369e260dff65b6ada32a73b43a24cf0dfb933aa5268282604051610ac6929190612b7a565b60405180910390a15050565b610ada611a04565b81610b355760405162461bcd60e51b815260206004820152602560248201527f57686974656c6973746564206164647265737365732063616e6e6f7420626520604482015264656d70747960d81b60648201526084016107c5565b60005b82811015610c8d57811515600f6000868685818110610b6757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b7c91906125a7565b6001600160a01b0316815260208101919091526040016000205460ff16151514610c7b5781600f6000868685818110610bc557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bda91906125a7565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f58d7a3ccc34541e162fcfc87b84be7b78c34d1e1e7f15de6e4dd67d0fe70aecd848483818110610c4357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c5891906125a7565b604080516001600160a01b03909216825284151560208301520160405180910390a15b80610c8581612c68565b915050610b38565b50505050565b6001600160a01b038116600090815260106020908152604080832054601183528184206012909352908320825460609384939290918290610cd390612c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff90612c2d565b8015610d4c5780601f10610d2157610100808354040283529160200191610d4c565b820191906000526020600020905b815481529060010190602001808311610d2f57829003601f168201915b50505050509150808054610d5f90612c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8b90612c2d565b8015610dd85780601f10610dad57610100808354040283529160200191610dd8565b820191906000526020600020905b815481529060010190602001808311610dbb57829003601f168201915b505050505090509250925092509193909250565b600b5460009060ff1615610e3b5760405162461bcd60e51b815260206004820152601660248201527510d85b9d081b5a5b9d081dda1a5b19481c185d5cd95960521b60448201526064016107c5565b6001600160a01b0383163314610eaa5760405162461bcd60e51b815260206004820152602e60248201527f536f756c626f756e64204e46542063616e206265206f6e6c79206d696e74656460448201526d103337b9103434b99037bbb732b960911b60648201526084016107c5565b6000828152600c602052604090205460ff16610efe5760405162461bcd60e51b815260206004820152601360248201527210dbdd5b9d1c9e481b9bdd08185b1b1bddd959606a1b60448201526064016107c5565b6001600160a01b03831660009081526010602052604090205415610f725760405162461bcd60e51b815260206004820152602560248201527f526563697069656e7420686173207069636b656420746865207465616d20616c604482015264726561647960d81b60648201526084016107c5565b610f7b83611255565b610fd35760405162461bcd60e51b8152602060048201526024808201527f55736572206973206e6f7420616c6c6f77656420746f206d696e7420746869736044820152630813919560e21b60648201526084016107c5565b610fe1600880546001019055565b50600854610fef8382611c83565b6000828152600e60205260409020805461109191839161100e90612c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612c2d565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050611dd1565b6001600160a01b0383166000818152601060209081526040808320869055858352600d82528083209383526011909152902081549091906110d190612c2d565b6110dc92919061243f565b506000828152600e602090815260408083206001600160a01b03871684526012909252909120815490919061111090612c2d565b61111b92919061243f565b50600082815260136020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038816908117909155858452600d835281842090845260129092529182902091517ffaf5fdfc371064c56fae97256c3d6eb52be6b84a5beacbe17b245a14008db60c926111a29287928692889291612a2f565b60405180910390a192915050565b610866838383604051806020016040528060008152506115cc565b336111d5826112ff565b6001600160a01b0316146112175760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b60448201526064016107c5565b61122081611e6b565b604080518281523360208201527ff6554c3a5d28e08c120b5a69c7edbaf52f935bd2596a60b8a18e282cd257cddb91016108e6565b6001600160a01b0381166000908152600f602052604081205460ff16806106915750601554601454604051631676539160e01b81526001600160a01b0385811660048301529091169063167653919060240160206040518083038186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f791906127e2565b101592915050565b6000818152600260205260408120546001600160a01b0316806106915760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107c5565b611367611a04565b806040516020016113789190612938565b60408051601f1981840301815282825280516020918201206000868152600e83529290922091926113aa929101612983565b6040516020818303038152906040528051906020012014156113ff5760405162461bcd60e51b815260206004820152600e60248201526d53616d65206173206265666f726560901b60448201526064016107c5565b6000828152600e60209081526040909120825161141e928401906123bb565b507fc25f7087add55afcf24c646472162983d655ee29d02c184f55d4066272d0789e8282604051610ac6929190612b7a565b611458611a04565b6000828152600c602052604090205460ff16151581151514156114b55760405162461bcd60e51b8152602060048201526015602482015274416c726561647920696e207468617420737461746560581b60448201526064016107c5565b6000828152600c6020908152604091829020805460ff19168415159081179091558251858152918201527fabaeae79d992e10194bdb798560380f18f46b6210b8bf539d4526fe217b09b1d9101610ac6565b60006001600160a01b0382166115715760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107c5565b506001600160a01b031660009081526003602052604090205490565b611595611a04565b61159f6000611eab565b565b6060600180546106a690612c2d565b6115bb338383611efd565b5050565b600a805461090a90612c2d565b6115d63383611a5e565b6115f25760405162461bcd60e51b81526004016107c590612b2c565b610c8d84848484611fcc565b611606611a04565b600b5460ff16151581151514156116575760405162461bcd60e51b8152602060048201526015602482015274416c726561647920696e207468617420737461746560581b60448201526064016107c5565b600b805460ff19168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020016108e6565b600d602052600090815260409020805461090a90612c2d565b60606116bc82611937565b600082815260066020526040812080546116d590612c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461170190612c2d565b801561174e5780601f106117235761010080835404028352916020019161174e565b820191906000526020600020905b81548152906001019060200180831161173157829003601f168201915b50505050509050600061176c60408051602081019091526000815290565b905080516000141561177f575092915050565b8151156117b1578082604051602001611799929190612954565b60405160208183030381529060405292505050919050565b6117ba84611fff565b949350505050565b6009805461090a90612c2d565b6117d7611a04565b6001600160a01b03811661183c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c5565b61184581611eab565b50565b6013602052816000526040600020818154811061186457600080fd5b6000918252602090912001546001600160a01b03169150829050565b611888611a04565b6001600160a01b0381166118d05760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107c5565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c7668385b6db01c6c200907b2cc927761b71eec03c083800c8c21f92e41ff59906020016108e6565b6012602052600090815260409020805461090a90612c2d565b6000818152600260205260409020546001600160a01b03166118455760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107c5565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906119cb826112ff565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6007546001600160a01b0316331461159f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c5565b600080611a6a836112ff565b9050806001600160a01b0316846001600160a01b03161480611ab157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806117ba5750836001600160a01b0316611aca84610729565b6001600160a01b031614949350505050565b826001600160a01b0316611aef826112ff565b6001600160a01b031614611b535760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107c5565b6001600160a01b038216611bb55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107c5565b611bc0838383612073565b611bcb600082611996565b6001600160a01b0383166000908152600360205260408120805460019290611bf4908490612bea565b90915550506001600160a01b0382166000908152600360205260408120805460019290611c22908490612bbe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216611cd95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107c5565b6000818152600260205260409020546001600160a01b031615611d3e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107c5565b611d4a60008383612073565b6001600160a01b0382166000908152600360205260408120805460019290611d73908490612bbe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152600260205260409020546001600160a01b0316611e4c5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016107c5565b60008281526006602090815260409091208251610866928401906123bb565b611e74816120ed565b60008181526006602052604090208054611e8d90612c2d565b159050611845576000818152600660205260408120611845916124ba565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611f5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107c5565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611fd7848484611adc565b611fe384848484612194565b610c8d5760405162461bcd60e51b81526004016107c590612ada565b606061200a82611937565b600061202160408051602081019091526000815290565b90506000815111612041576040518060200160405280600081525061206c565b8061204b846122a1565b60405160200161205c929190612954565b6040516020818303038152906040525b9392505050565b6001600160a01b038316158061209057506001600160a01b038216155b6108665760405162461bcd60e51b815260206004820152602860248201527f43616e206e6f74207472616e73666572204e46542c206f6e6c79206d696e742060448201526730b73210313ab93760c11b60648201526084016107c5565b60006120f8826112ff565b905061210681600084612073565b612111600083611996565b6001600160a01b038116600090815260036020526040812080546001929061213a908490612bea565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561229657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121d89033908990889088906004016129f2565b602060405180830381600087803b1580156121f257600080fd5b505af1925050508015612222575060408051601f3d908101601f1916820190925261221f918101906127ae565b60015b61227c573d808015612250576040519150601f19603f3d011682016040523d82523d6000602084013e612255565b606091505b5080516122745760405162461bcd60e51b81526004016107c590612ada565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117ba565b506001949350505050565b6060816122c55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122ef57806122d981612c68565b91506122e89050600a83612bd6565b91506122c9565b60008167ffffffffffffffff81111561231857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612342576020820181803683370190505b5090505b84156117ba57612357600183612bea565b9150612364600a86612c83565b61236f906030612bbe565b60f81b81838151811061239257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506123b4600a86612bd6565b9450612346565b8280546123c790612c2d565b90600052602060002090601f0160209004810192826123e9576000855561242f565b82601f1061240257805160ff191683800117855561242f565b8280016001018555821561242f579182015b8281111561242f578251825591602001919060010190612414565b5061243b9291506124f0565b5090565b82805461244b90612c2d565b90600052602060002090601f01602090048101928261246d576000855561242f565b82601f1061247e578054855561242f565b8280016001018555821561242f57600052602060002091601f016020900482015b8281111561242f57825482559160010191906001019061249f565b5080546124c690612c2d565b6000825580601f106124d6575050565b601f01602090049060005260206000209081019061184591905b5b8082111561243b57600081556001016124f1565b600067ffffffffffffffff8084111561252057612520612cc3565b604051601f8501601f19908116603f0116810190828211818310171561254857612548612cc3565b8160405280935085815286868601111561256157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461259257600080fd5b919050565b8035801515811461259257600080fd5b6000602082840312156125b8578081fd5b61206c8261257b565b600080604083850312156125d3578081fd5b6125dc8361257b565b91506125ea6020840161257b565b90509250929050565b600080600060608486031215612607578081fd5b6126108461257b565b925061261e6020850161257b565b9150604084013590509250925092565b60008060008060808587031215612643578081fd5b61264c8561257b565b935061265a6020860161257b565b925060408501359150606085013567ffffffffffffffff81111561267c578182fd5b8501601f8101871361268c578182fd5b61269b87823560208401612505565b91505092959194509250565b600080604083850312156126b9578182fd5b6126c28361257b565b91506125ea60208401612597565b600080604083850312156126e2578182fd5b6126eb8361257b565b946020939093013593505050565b60008060006040848603121561270d578283fd5b833567ffffffffffffffff80821115612724578485fd5b818601915086601f830112612737578485fd5b813581811115612745578586fd5b8760208260051b8501011115612759578586fd5b60209283019550935061276f9186019050612597565b90509250925092565b600060208284031215612789578081fd5b61206c82612597565b6000602082840312156127a3578081fd5b813561206c81612cd9565b6000602082840312156127bf578081fd5b815161206c81612cd9565b6000602082840312156127db578081fd5b5035919050565b6000602082840312156127f3578081fd5b5051919050565b6000806040838503121561280c578182fd5b823591506125ea60208401612597565b6000806040838503121561282e578182fd5b82359150602083013567ffffffffffffffff81111561284b578182fd5b8301601f8101851361285b578182fd5b61286a85823560208401612505565b9150509250929050565b60008060408385031215612886578182fd5b50508035926020909101359150565b600081518084526128ad816020860160208601612c01565b601f01601f19169290920160200192915050565b600081546128ce81612c2d565b8085526020600183811680156128eb57600181146128ff5761292d565b60ff1985168884015260408801955061292d565b866000528260002060005b858110156129255781548a820186015290830190840161290a565b890184019650505b505050505092915050565b6000825161294a818460208701612c01565b9190910192915050565b60008351612966818460208801612c01565b83519083019061297a818360208801612c01565b01949350505050565b600080835461299181612c2d565b600182811680156129a957600181146129ba576129e6565b60ff198416875282870194506129e6565b8786526020808720875b858110156129dd5781548a8201529084019082016129c4565b50505082870194505b50929695505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a2590830184612895565b9695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000612a5c60a08301856128c1565b8281036080840152612a6e81856128c1565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612abb5783516001600160a01b031683529284019291840191600101612a96565b50909695505050505050565b60208152600061206c6020830184612895565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b8281526040602082015260006117ba6040830184612895565b838152606060208201526000612bac6060830185612895565b8281036040840152612a258185612895565b60008219821115612bd157612bd1612c97565b500190565b600082612be557612be5612cad565b500490565b600082821015612bfc57612bfc612c97565b500390565b60005b83811015612c1c578181015183820152602001612c04565b83811115610c8d5750506000910152565b600181811c90821680612c4157607f821691505b60208210811415612c6257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c7c57612c7c612c97565b5060010190565b600082612c9257612c92612cad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461184557600080fdfea264697066735822122051a3af2882c5df3be795a37fad0a6e534e92782db30326320f5f4beb0c10f92164736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ca000000000000000000000000028d25990f7dec7c606551c28a7a82b9d116dcb670000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000740000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000008c000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000bc000000000000000000000000000000000000000000000000000000000000000055161746172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000745637561646f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000753656e6567616c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4e65746865726c616e64730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007456e676c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074952204972616e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d556e697465642053746174657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000557616c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009417267656e74696e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c536175646920417261626961000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d657869636f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006506f6c616e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064672616e6365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094175737472616c69610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000744656e6d61726b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754756e69736961000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005537061696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a436f73746120526963610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074765726d616e790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054a6170616e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000742656c6769756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643616e616461000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d6f726f63636f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000743726f617469610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064272617a696c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065365726269610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b537769747a65726c616e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000843616d65726f6f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008506f72747567616c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054768616e6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075572756775617900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b536f757468204b6f72656100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006800000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001080000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000128000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f71617461722e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f65637561646f722e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f73656e6567616c2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6e65746865726c616e64732e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f656e676c616e642e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004268747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6972616e2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004168747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f7573612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f77616c65732e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004768747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f617267656e74696e612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f73617564695f6172616269612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6d657869636f2e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f706f6c616e642e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6672616e63652e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004768747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6175737472616c69612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f64656e6d61726b2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f74756e697369612e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f737061696e2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004768747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f636f737461726963612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6765726d616e792e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6a6170616e2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f62656c6769756d2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63616e6164612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6d6f726f63636f2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63726f617469612e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6272617a696c2e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f7365726269612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f737769747a65726c616e642e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63616d65726f6f6e2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f706f72747567616c2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6768616e612e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f757275677561792e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f736f7574685f6b6f7265612e706e670000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102525760003560e01c80636a71114111610146578063bedb86fb116100c3578063ec5ffac211610087578063ec5ffac214610564578063f2fde38b1461056d578063f3c2ade414610580578063f4e0d9ac14610593578063f658da2b146105a6578063fc957c42146105c657600080fd5b8063bedb86fb146104e7578063bf288213146104fa578063c87b56dd1461050d578063d28d885214610520578063e985e9c51461052857600080fd5b8063a22cb4651161010a578063a22cb46514610473578063a84b6c7914610486578063b09f1266146104a9578063b320be4e146104b1578063b88d4fde146104d457600080fd5b80636a7111411461042c57806370a082311461043f578063715018a6146104525780638da5cb5b1461045a57806395d89b411461046b57600080fd5b80632f893de7116101d45780634af47b2d116101985780634af47b2d146103d35780634cf088d9146103e65780635c975abb146103f95780636352211e1461040657806367e384111461041957600080fd5b80632f893de714610357578063325dc9ae1461036a57806340c10f191461038c57806342842e0e146103ad57806342966c68146103c057600080fd5b80630d29fcd41161021b5780630d29fcd4146102f85780631115fef21461030b5780631246e7c21461031e57806323b872dd146103315780632d651de81461034457600080fd5b80621942d21461025757806301ffc9a71461028057806306fdde03146102a3578063081812fc146102b8578063095ea7b3146102e3575b600080fd5b61026a6102653660046127ca565b6105d9565b6040516102779190612a7a565b60405180910390f35b61029361028e366004612792565b610645565b6040519015158152602001610277565b6102ab610697565b6040516102779190612ac7565b6102cb6102c63660046127ca565b610729565b6040516001600160a01b039091168152602001610277565b6102f66102f13660046126d0565b610750565b005b6102f66103063660046127ca565b61086b565b6102ab6103193660046127ca565b6108f1565b6102ab61032c3660046125a7565b61098b565b6102f661033f3660046125f3565b6109a4565b6102f661035236600461281c565b6109d5565b6102f66103653660046126f9565b610ad2565b61037d6103783660046125a7565b610c93565b60405161027793929190612b93565b61039f61039a3660046126d0565b610dec565b604051908152602001610277565b6102f66103bb3660046125f3565b6111b0565b6102f66103ce3660046127ca565b6111cb565b6102936103e13660046125a7565b611255565b6014546102cb906001600160a01b031681565b600b546102939060ff1681565b6102cb6104143660046127ca565b6112ff565b6102f661042736600461281c565b61135f565b6102f661043a3660046127fa565b611450565b61039f61044d3660046125a7565b611507565b6102f661158d565b6007546001600160a01b03166102cb565b6102ab6115a1565b6102f66104813660046126a7565b6115b0565b6102936104943660046125a7565b600f6020526000908152604090205460ff1681565b6102ab6115bf565b6102936104bf3660046127ca565b600c6020526000908152604090205460ff1681565b6102f66104e236600461262e565b6115cc565b6102f66104f5366004612778565b6115fe565b6102ab6105083660046127ca565b611698565b6102ab61051b3660046127ca565b6116b1565b6102ab6117c2565b6102936105363660046125c1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61039f60155481565b6102f661057b3660046125a7565b6117cf565b6102cb61058e366004612874565b611848565b6102f66105a13660046125a7565b611880565b61039f6105b43660046125a7565b60106020526000908152604090205481565b6102ab6105d43660046125a7565b61191e565b60008181526013602090815260409182902080548351818402810184019094528084526060939283018282801561063957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161061b575b50505050509050919050565b60006001600160e01b031982166380ac58cd60e01b148061067657506001600160e01b03198216635b5e139f60e01b145b8061069157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546106a690612c2d565b80601f01602080910402602001604051908101604052809291908181526020018280546106d290612c2d565b801561071f5780601f106106f45761010080835404028352916020019161071f565b820191906000526020600020905b81548152906001019060200180831161070257829003601f168201915b5050505050905090565b600061073482611937565b506000908152600460205260409020546001600160a01b031690565b600061075b826112ff565b9050806001600160a01b0316836001600160a01b031614156107ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806107ea57506107ea8133610536565b61085c5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107c5565b6108668383611996565b505050565b610873611a04565b600081116108b55760405162461bcd60e51b815260206004820152600f60248201526e43616e206e6f74206265207a65726f60881b60448201526064016107c5565b60158190556040518181527fa48a3c244301177b580df8bf8b7610d45b6032437da5d1ce408aa725bbe9bc4b906020015b60405180910390a150565b600e602052600090815260409020805461090a90612c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461093690612c2d565b80156109835780601f1061095857610100808354040283529160200191610983565b820191906000526020600020905b81548152906001019060200180831161096657829003601f168201915b505050505081565b6011602052600090815260409020805461090a90612c2d565b6109ae3382611a5e565b6109ca5760405162461bcd60e51b81526004016107c590612b2c565b610866838383611adc565b6109dd611a04565b806040516020016109ee9190612938565b60408051601f1981840301815282825280516020918201206000868152600d8352929092209192610a20929101612983565b604051602081830303815290604052805190602001201415610a755760405162461bcd60e51b815260206004820152600e60248201526d53616d65206173206265666f726560901b60448201526064016107c5565b6000828152600d602090815260409091208251610a94928401906123bb565b507f915c40f9edd0c33f545846369e260dff65b6ada32a73b43a24cf0dfb933aa5268282604051610ac6929190612b7a565b60405180910390a15050565b610ada611a04565b81610b355760405162461bcd60e51b815260206004820152602560248201527f57686974656c6973746564206164647265737365732063616e6e6f7420626520604482015264656d70747960d81b60648201526084016107c5565b60005b82811015610c8d57811515600f6000868685818110610b6757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610b7c91906125a7565b6001600160a01b0316815260208101919091526040016000205460ff16151514610c7b5781600f6000868685818110610bc557634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bda91906125a7565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790557f58d7a3ccc34541e162fcfc87b84be7b78c34d1e1e7f15de6e4dd67d0fe70aecd848483818110610c4357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c5891906125a7565b604080516001600160a01b03909216825284151560208301520160405180910390a15b80610c8581612c68565b915050610b38565b50505050565b6001600160a01b038116600090815260106020908152604080832054601183528184206012909352908320825460609384939290918290610cd390612c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610cff90612c2d565b8015610d4c5780601f10610d2157610100808354040283529160200191610d4c565b820191906000526020600020905b815481529060010190602001808311610d2f57829003601f168201915b50505050509150808054610d5f90612c2d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8b90612c2d565b8015610dd85780601f10610dad57610100808354040283529160200191610dd8565b820191906000526020600020905b815481529060010190602001808311610dbb57829003601f168201915b505050505090509250925092509193909250565b600b5460009060ff1615610e3b5760405162461bcd60e51b815260206004820152601660248201527510d85b9d081b5a5b9d081dda1a5b19481c185d5cd95960521b60448201526064016107c5565b6001600160a01b0383163314610eaa5760405162461bcd60e51b815260206004820152602e60248201527f536f756c626f756e64204e46542063616e206265206f6e6c79206d696e74656460448201526d103337b9103434b99037bbb732b960911b60648201526084016107c5565b6000828152600c602052604090205460ff16610efe5760405162461bcd60e51b815260206004820152601360248201527210dbdd5b9d1c9e481b9bdd08185b1b1bddd959606a1b60448201526064016107c5565b6001600160a01b03831660009081526010602052604090205415610f725760405162461bcd60e51b815260206004820152602560248201527f526563697069656e7420686173207069636b656420746865207465616d20616c604482015264726561647960d81b60648201526084016107c5565b610f7b83611255565b610fd35760405162461bcd60e51b8152602060048201526024808201527f55736572206973206e6f7420616c6c6f77656420746f206d696e7420746869736044820152630813919560e21b60648201526084016107c5565b610fe1600880546001019055565b50600854610fef8382611c83565b6000828152600e60205260409020805461109191839161100e90612c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461103a90612c2d565b80156110875780601f1061105c57610100808354040283529160200191611087565b820191906000526020600020905b81548152906001019060200180831161106a57829003601f168201915b5050505050611dd1565b6001600160a01b0383166000818152601060209081526040808320869055858352600d82528083209383526011909152902081549091906110d190612c2d565b6110dc92919061243f565b506000828152600e602090815260408083206001600160a01b03871684526012909252909120815490919061111090612c2d565b61111b92919061243f565b50600082815260136020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038816908117909155858452600d835281842090845260129092529182902091517ffaf5fdfc371064c56fae97256c3d6eb52be6b84a5beacbe17b245a14008db60c926111a29287928692889291612a2f565b60405180910390a192915050565b610866838383604051806020016040528060008152506115cc565b336111d5826112ff565b6001600160a01b0316146112175760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b60448201526064016107c5565b61122081611e6b565b604080518281523360208201527ff6554c3a5d28e08c120b5a69c7edbaf52f935bd2596a60b8a18e282cd257cddb91016108e6565b6001600160a01b0381166000908152600f602052604081205460ff16806106915750601554601454604051631676539160e01b81526001600160a01b0385811660048301529091169063167653919060240160206040518083038186803b1580156112bf57600080fd5b505afa1580156112d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f791906127e2565b101592915050565b6000818152600260205260408120546001600160a01b0316806106915760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107c5565b611367611a04565b806040516020016113789190612938565b60408051601f1981840301815282825280516020918201206000868152600e83529290922091926113aa929101612983565b6040516020818303038152906040528051906020012014156113ff5760405162461bcd60e51b815260206004820152600e60248201526d53616d65206173206265666f726560901b60448201526064016107c5565b6000828152600e60209081526040909120825161141e928401906123bb565b507fc25f7087add55afcf24c646472162983d655ee29d02c184f55d4066272d0789e8282604051610ac6929190612b7a565b611458611a04565b6000828152600c602052604090205460ff16151581151514156114b55760405162461bcd60e51b8152602060048201526015602482015274416c726561647920696e207468617420737461746560581b60448201526064016107c5565b6000828152600c6020908152604091829020805460ff19168415159081179091558251858152918201527fabaeae79d992e10194bdb798560380f18f46b6210b8bf539d4526fe217b09b1d9101610ac6565b60006001600160a01b0382166115715760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107c5565b506001600160a01b031660009081526003602052604090205490565b611595611a04565b61159f6000611eab565b565b6060600180546106a690612c2d565b6115bb338383611efd565b5050565b600a805461090a90612c2d565b6115d63383611a5e565b6115f25760405162461bcd60e51b81526004016107c590612b2c565b610c8d84848484611fcc565b611606611a04565b600b5460ff16151581151514156116575760405162461bcd60e51b8152602060048201526015602482015274416c726561647920696e207468617420737461746560581b60448201526064016107c5565b600b805460ff19168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020016108e6565b600d602052600090815260409020805461090a90612c2d565b60606116bc82611937565b600082815260066020526040812080546116d590612c2d565b80601f016020809104026020016040519081016040528092919081815260200182805461170190612c2d565b801561174e5780601f106117235761010080835404028352916020019161174e565b820191906000526020600020905b81548152906001019060200180831161173157829003601f168201915b50505050509050600061176c60408051602081019091526000815290565b905080516000141561177f575092915050565b8151156117b1578082604051602001611799929190612954565b60405160208183030381529060405292505050919050565b6117ba84611fff565b949350505050565b6009805461090a90612c2d565b6117d7611a04565b6001600160a01b03811661183c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107c5565b61184581611eab565b50565b6013602052816000526040600020818154811061186457600080fd5b6000918252602090912001546001600160a01b03169150829050565b611888611a04565b6001600160a01b0381166118d05760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107c5565b601480546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c7668385b6db01c6c200907b2cc927761b71eec03c083800c8c21f92e41ff59906020016108e6565b6012602052600090815260409020805461090a90612c2d565b6000818152600260205260409020546001600160a01b03166118455760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107c5565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906119cb826112ff565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6007546001600160a01b0316331461159f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c5565b600080611a6a836112ff565b9050806001600160a01b0316846001600160a01b03161480611ab157506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806117ba5750836001600160a01b0316611aca84610729565b6001600160a01b031614949350505050565b826001600160a01b0316611aef826112ff565b6001600160a01b031614611b535760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107c5565b6001600160a01b038216611bb55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107c5565b611bc0838383612073565b611bcb600082611996565b6001600160a01b0383166000908152600360205260408120805460019290611bf4908490612bea565b90915550506001600160a01b0382166000908152600360205260408120805460019290611c22908490612bbe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b038216611cd95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107c5565b6000818152600260205260409020546001600160a01b031615611d3e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107c5565b611d4a60008383612073565b6001600160a01b0382166000908152600360205260408120805460019290611d73908490612bbe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152600260205260409020546001600160a01b0316611e4c5760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016107c5565b60008281526006602090815260409091208251610866928401906123bb565b611e74816120ed565b60008181526006602052604090208054611e8d90612c2d565b159050611845576000818152600660205260408120611845916124ba565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415611f5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107c5565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611fd7848484611adc565b611fe384848484612194565b610c8d5760405162461bcd60e51b81526004016107c590612ada565b606061200a82611937565b600061202160408051602081019091526000815290565b90506000815111612041576040518060200160405280600081525061206c565b8061204b846122a1565b60405160200161205c929190612954565b6040516020818303038152906040525b9392505050565b6001600160a01b038316158061209057506001600160a01b038216155b6108665760405162461bcd60e51b815260206004820152602860248201527f43616e206e6f74207472616e73666572204e46542c206f6e6c79206d696e742060448201526730b73210313ab93760c11b60648201526084016107c5565b60006120f8826112ff565b905061210681600084612073565b612111600083611996565b6001600160a01b038116600090815260036020526040812080546001929061213a908490612bea565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b1561229657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121d89033908990889088906004016129f2565b602060405180830381600087803b1580156121f257600080fd5b505af1925050508015612222575060408051601f3d908101601f1916820190925261221f918101906127ae565b60015b61227c573d808015612250576040519150601f19603f3d011682016040523d82523d6000602084013e612255565b606091505b5080516122745760405162461bcd60e51b81526004016107c590612ada565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117ba565b506001949350505050565b6060816122c55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156122ef57806122d981612c68565b91506122e89050600a83612bd6565b91506122c9565b60008167ffffffffffffffff81111561231857634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612342576020820181803683370190505b5090505b84156117ba57612357600183612bea565b9150612364600a86612c83565b61236f906030612bbe565b60f81b81838151811061239257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506123b4600a86612bd6565b9450612346565b8280546123c790612c2d565b90600052602060002090601f0160209004810192826123e9576000855561242f565b82601f1061240257805160ff191683800117855561242f565b8280016001018555821561242f579182015b8281111561242f578251825591602001919060010190612414565b5061243b9291506124f0565b5090565b82805461244b90612c2d565b90600052602060002090601f01602090048101928261246d576000855561242f565b82601f1061247e578054855561242f565b8280016001018555821561242f57600052602060002091601f016020900482015b8281111561242f57825482559160010191906001019061249f565b5080546124c690612c2d565b6000825580601f106124d6575050565b601f01602090049060005260206000209081019061184591905b5b8082111561243b57600081556001016124f1565b600067ffffffffffffffff8084111561252057612520612cc3565b604051601f8501601f19908116603f0116810190828211818310171561254857612548612cc3565b8160405280935085815286868601111561256157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461259257600080fd5b919050565b8035801515811461259257600080fd5b6000602082840312156125b8578081fd5b61206c8261257b565b600080604083850312156125d3578081fd5b6125dc8361257b565b91506125ea6020840161257b565b90509250929050565b600080600060608486031215612607578081fd5b6126108461257b565b925061261e6020850161257b565b9150604084013590509250925092565b60008060008060808587031215612643578081fd5b61264c8561257b565b935061265a6020860161257b565b925060408501359150606085013567ffffffffffffffff81111561267c578182fd5b8501601f8101871361268c578182fd5b61269b87823560208401612505565b91505092959194509250565b600080604083850312156126b9578182fd5b6126c28361257b565b91506125ea60208401612597565b600080604083850312156126e2578182fd5b6126eb8361257b565b946020939093013593505050565b60008060006040848603121561270d578283fd5b833567ffffffffffffffff80821115612724578485fd5b818601915086601f830112612737578485fd5b813581811115612745578586fd5b8760208260051b8501011115612759578586fd5b60209283019550935061276f9186019050612597565b90509250925092565b600060208284031215612789578081fd5b61206c82612597565b6000602082840312156127a3578081fd5b813561206c81612cd9565b6000602082840312156127bf578081fd5b815161206c81612cd9565b6000602082840312156127db578081fd5b5035919050565b6000602082840312156127f3578081fd5b5051919050565b6000806040838503121561280c578182fd5b823591506125ea60208401612597565b6000806040838503121561282e578182fd5b82359150602083013567ffffffffffffffff81111561284b578182fd5b8301601f8101851361285b578182fd5b61286a85823560208401612505565b9150509250929050565b60008060408385031215612886578182fd5b50508035926020909101359150565b600081518084526128ad816020860160208601612c01565b601f01601f19169290920160200192915050565b600081546128ce81612c2d565b8085526020600183811680156128eb57600181146128ff5761292d565b60ff1985168884015260408801955061292d565b866000528260002060005b858110156129255781548a820186015290830190840161290a565b890184019650505b505050505092915050565b6000825161294a818460208701612c01565b9190910192915050565b60008351612966818460208801612c01565b83519083019061297a818360208801612c01565b01949350505050565b600080835461299181612c2d565b600182811680156129a957600181146129ba576129e6565b60ff198416875282870194506129e6565b8786526020808720875b858110156129dd5781548a8201529084019082016129c4565b50505082870194505b50929695505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a2590830184612895565b9695505050505050565b60018060a01b038616815284602082015283604082015260a060608201526000612a5c60a08301856128c1565b8281036080840152612a6e81856128c1565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612abb5783516001600160a01b031683529284019291840191600101612a96565b50909695505050505050565b60208152600061206c6020830184612895565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b8281526040602082015260006117ba6040830184612895565b838152606060208201526000612bac6060830185612895565b8281036040840152612a258185612895565b60008219821115612bd157612bd1612c97565b500190565b600082612be557612be5612cad565b500490565b600082821015612bfc57612bfc612c97565b500390565b60005b83811015612c1c578181015183820152602001612c04565b83811115610c8d5750506000910152565b600181811c90821680612c4157607f821691505b60208210811415612c6257634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612c7c57612c7c612c97565b5060010190565b600082612c9257612c92612cad565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461184557600080fdfea264697066735822122051a3af2882c5df3be795a37fad0a6e534e92782db30326320f5f4beb0c10f92164736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000ca000000000000000000000000028d25990f7dec7c606551c28a7a82b9d116dcb670000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000004c000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000540000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000005c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000006c000000000000000000000000000000000000000000000000000000000000007000000000000000000000000000000000000000000000000000000000000000740000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000007c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000008c000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000000000000000000000000098000000000000000000000000000000000000000000000000000000000000009c00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a400000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000ac00000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000bc000000000000000000000000000000000000000000000000000000000000000055161746172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000745637561646f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000753656e6567616c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b4e65746865726c616e64730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007456e676c616e640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074952204972616e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d556e697465642053746174657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000557616c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009417267656e74696e610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c536175646920417261626961000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d657869636f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006506f6c616e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064672616e6365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094175737472616c69610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000744656e6d61726b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754756e69736961000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005537061696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a436f73746120526963610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074765726d616e790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054a6170616e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000742656c6769756d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000643616e616461000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074d6f726f63636f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000743726f617469610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064272617a696c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065365726269610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b537769747a65726c616e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000843616d65726f6f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008506f72747567616c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054768616e6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075572756775617900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b536f757468204b6f72656100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006800000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000078000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000880000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009800000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a800000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000b800000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000e800000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000f8000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001080000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000011800000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000128000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000001380000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f71617461722e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f65637561646f722e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f73656e6567616c2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6e65746865726c616e64732e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f656e676c616e642e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004268747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6972616e2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004168747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f7573612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f77616c65732e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004768747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f617267656e74696e612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f73617564695f6172616269612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6d657869636f2e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f706f6c616e642e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6672616e63652e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004768747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6175737472616c69612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f64656e6d61726b2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f74756e697369612e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f737061696e2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004768747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f636f737461726963612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6765726d616e792e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6a6170616e2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f62656c6769756d2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63616e6164612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6d6f726f63636f2e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63726f617469612e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6272617a696c2e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f7365726269612e706e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f737769747a65726c616e642e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63616d65726f6f6e2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004668747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f706f72747567616c2e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004368747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6768616e612e706e670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004568747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f757275677561792e706e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004968747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f736f7574685f6b6f7265612e706e670000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _allowedCountries (string[]): Qatar,Ecuador,Senegal,Netherlands,England,IR Iran,United States,Wales,Argentina,Saudi Arabia,Mexico,Poland,France,Australia,Denmark,Tunisia,Spain,Costa Rica,Germany,Japan,Belgium,Canada,Morocco,Croatia,Brazil,Serbia,Switzerland,Cameroon,Portugal,Ghana,Uruguay,South Korea
Arg [1] : _countryURLs (string[]): https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_qatar.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_ecuador.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_senegal.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_netherlands.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_england.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_iran.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_usa.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_wales.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_argentina.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_saudi_arabia.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_mexico.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_poland.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_france.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_australia.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_denmark.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_tunisia.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_spain.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_costarica.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_germany.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_japan.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_belgium.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_canada.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_morocco.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_croatia.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_brazil.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_serbia.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_switzerland.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_cameroon.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_portugal.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_ghana.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_uruguay.png,https://thales-protocol.s3.eu-north-1.amazonaws.com/zebro_south_korea.png
Arg [2] : _staking (address): 0x28D25990f7Dec7c606551c28A7A82B9D116dcb67
Arg [3] : _minimumStake (uint256): 10000000000000000000

-----Encoded View---------------
262 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000ca0
Arg [2] : 00000000000000000000000028d25990f7dec7c606551c28a7a82b9d116dcb67
Arg [3] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000440
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000480
Arg [8] : 00000000000000000000000000000000000000000000000000000000000004c0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000500
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000540
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000580
Arg [12] : 00000000000000000000000000000000000000000000000000000000000005c0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000600
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000640
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000680
Arg [16] : 00000000000000000000000000000000000000000000000000000000000006c0
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000700
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000740
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000780
Arg [20] : 00000000000000000000000000000000000000000000000000000000000007c0
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000800
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000840
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000880
Arg [24] : 00000000000000000000000000000000000000000000000000000000000008c0
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000900
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000940
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000980
Arg [28] : 00000000000000000000000000000000000000000000000000000000000009c0
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000a00
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000a40
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000a80
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000ac0
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000b00
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000b40
Arg [35] : 0000000000000000000000000000000000000000000000000000000000000b80
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000bc0
Arg [37] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [38] : 5161746172000000000000000000000000000000000000000000000000000000
Arg [39] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [40] : 45637561646f7200000000000000000000000000000000000000000000000000
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [42] : 53656e6567616c00000000000000000000000000000000000000000000000000
Arg [43] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [44] : 4e65746865726c616e6473000000000000000000000000000000000000000000
Arg [45] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [46] : 456e676c616e6400000000000000000000000000000000000000000000000000
Arg [47] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [48] : 4952204972616e00000000000000000000000000000000000000000000000000
Arg [49] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [50] : 556e697465642053746174657300000000000000000000000000000000000000
Arg [51] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [52] : 57616c6573000000000000000000000000000000000000000000000000000000
Arg [53] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [54] : 417267656e74696e610000000000000000000000000000000000000000000000
Arg [55] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [56] : 5361756469204172616269610000000000000000000000000000000000000000
Arg [57] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [58] : 4d657869636f0000000000000000000000000000000000000000000000000000
Arg [59] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [60] : 506f6c616e640000000000000000000000000000000000000000000000000000
Arg [61] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [62] : 4672616e63650000000000000000000000000000000000000000000000000000
Arg [63] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [64] : 4175737472616c69610000000000000000000000000000000000000000000000
Arg [65] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [66] : 44656e6d61726b00000000000000000000000000000000000000000000000000
Arg [67] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [68] : 54756e6973696100000000000000000000000000000000000000000000000000
Arg [69] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [70] : 537061696e000000000000000000000000000000000000000000000000000000
Arg [71] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [72] : 436f737461205269636100000000000000000000000000000000000000000000
Arg [73] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [74] : 4765726d616e7900000000000000000000000000000000000000000000000000
Arg [75] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [76] : 4a6170616e000000000000000000000000000000000000000000000000000000
Arg [77] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [78] : 42656c6769756d00000000000000000000000000000000000000000000000000
Arg [79] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [80] : 43616e6164610000000000000000000000000000000000000000000000000000
Arg [81] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [82] : 4d6f726f63636f00000000000000000000000000000000000000000000000000
Arg [83] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [84] : 43726f6174696100000000000000000000000000000000000000000000000000
Arg [85] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [86] : 4272617a696c0000000000000000000000000000000000000000000000000000
Arg [87] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [88] : 5365726269610000000000000000000000000000000000000000000000000000
Arg [89] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [90] : 537769747a65726c616e64000000000000000000000000000000000000000000
Arg [91] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [92] : 43616d65726f6f6e000000000000000000000000000000000000000000000000
Arg [93] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [94] : 506f72747567616c000000000000000000000000000000000000000000000000
Arg [95] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [96] : 4768616e61000000000000000000000000000000000000000000000000000000
Arg [97] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [98] : 5572756775617900000000000000000000000000000000000000000000000000
Arg [99] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [100] : 536f757468204b6f726561000000000000000000000000000000000000000000
Arg [101] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [102] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [103] : 0000000000000000000000000000000000000000000000000000000000000480
Arg [104] : 0000000000000000000000000000000000000000000000000000000000000500
Arg [105] : 0000000000000000000000000000000000000000000000000000000000000580
Arg [106] : 0000000000000000000000000000000000000000000000000000000000000600
Arg [107] : 0000000000000000000000000000000000000000000000000000000000000680
Arg [108] : 0000000000000000000000000000000000000000000000000000000000000700
Arg [109] : 0000000000000000000000000000000000000000000000000000000000000780
Arg [110] : 0000000000000000000000000000000000000000000000000000000000000800
Arg [111] : 0000000000000000000000000000000000000000000000000000000000000880
Arg [112] : 0000000000000000000000000000000000000000000000000000000000000900
Arg [113] : 0000000000000000000000000000000000000000000000000000000000000980
Arg [114] : 0000000000000000000000000000000000000000000000000000000000000a00
Arg [115] : 0000000000000000000000000000000000000000000000000000000000000a80
Arg [116] : 0000000000000000000000000000000000000000000000000000000000000b00
Arg [117] : 0000000000000000000000000000000000000000000000000000000000000b80
Arg [118] : 0000000000000000000000000000000000000000000000000000000000000c00
Arg [119] : 0000000000000000000000000000000000000000000000000000000000000c80
Arg [120] : 0000000000000000000000000000000000000000000000000000000000000d00
Arg [121] : 0000000000000000000000000000000000000000000000000000000000000d80
Arg [122] : 0000000000000000000000000000000000000000000000000000000000000e00
Arg [123] : 0000000000000000000000000000000000000000000000000000000000000e80
Arg [124] : 0000000000000000000000000000000000000000000000000000000000000f00
Arg [125] : 0000000000000000000000000000000000000000000000000000000000000f80
Arg [126] : 0000000000000000000000000000000000000000000000000000000000001000
Arg [127] : 0000000000000000000000000000000000000000000000000000000000001080
Arg [128] : 0000000000000000000000000000000000000000000000000000000000001100
Arg [129] : 0000000000000000000000000000000000000000000000000000000000001180
Arg [130] : 0000000000000000000000000000000000000000000000000000000000001200
Arg [131] : 0000000000000000000000000000000000000000000000000000000000001280
Arg [132] : 0000000000000000000000000000000000000000000000000000000000001300
Arg [133] : 0000000000000000000000000000000000000000000000000000000000001380
Arg [134] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [135] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [136] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f71617461722e
Arg [137] : 706e670000000000000000000000000000000000000000000000000000000000
Arg [138] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [139] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [140] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f65637561646f
Arg [141] : 722e706e67000000000000000000000000000000000000000000000000000000
Arg [142] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [143] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [144] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f73656e656761
Arg [145] : 6c2e706e67000000000000000000000000000000000000000000000000000000
Arg [146] : 0000000000000000000000000000000000000000000000000000000000000049
Arg [147] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [148] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6e6574686572
Arg [149] : 6c616e64732e706e670000000000000000000000000000000000000000000000
Arg [150] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [151] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [152] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f656e676c616e
Arg [153] : 642e706e67000000000000000000000000000000000000000000000000000000
Arg [154] : 0000000000000000000000000000000000000000000000000000000000000042
Arg [155] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [156] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6972616e2e70
Arg [157] : 6e67000000000000000000000000000000000000000000000000000000000000
Arg [158] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [159] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [160] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f7573612e706e
Arg [161] : 6700000000000000000000000000000000000000000000000000000000000000
Arg [162] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [163] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [164] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f77616c65732e
Arg [165] : 706e670000000000000000000000000000000000000000000000000000000000
Arg [166] : 0000000000000000000000000000000000000000000000000000000000000047
Arg [167] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [168] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f617267656e74
Arg [169] : 696e612e706e6700000000000000000000000000000000000000000000000000
Arg [170] : 000000000000000000000000000000000000000000000000000000000000004a
Arg [171] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [172] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f73617564695f
Arg [173] : 6172616269612e706e6700000000000000000000000000000000000000000000
Arg [174] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [175] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [176] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6d657869636f
Arg [177] : 2e706e6700000000000000000000000000000000000000000000000000000000
Arg [178] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [179] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [180] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f706f6c616e64
Arg [181] : 2e706e6700000000000000000000000000000000000000000000000000000000
Arg [182] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [183] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [184] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6672616e6365
Arg [185] : 2e706e6700000000000000000000000000000000000000000000000000000000
Arg [186] : 0000000000000000000000000000000000000000000000000000000000000047
Arg [187] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [188] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f617573747261
Arg [189] : 6c69612e706e6700000000000000000000000000000000000000000000000000
Arg [190] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [191] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [192] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f64656e6d6172
Arg [193] : 6b2e706e67000000000000000000000000000000000000000000000000000000
Arg [194] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [195] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [196] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f74756e697369
Arg [197] : 612e706e67000000000000000000000000000000000000000000000000000000
Arg [198] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [199] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [200] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f737061696e2e
Arg [201] : 706e670000000000000000000000000000000000000000000000000000000000
Arg [202] : 0000000000000000000000000000000000000000000000000000000000000047
Arg [203] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [204] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f636f73746172
Arg [205] : 6963612e706e6700000000000000000000000000000000000000000000000000
Arg [206] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [207] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [208] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6765726d616e
Arg [209] : 792e706e67000000000000000000000000000000000000000000000000000000
Arg [210] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [211] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [212] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6a6170616e2e
Arg [213] : 706e670000000000000000000000000000000000000000000000000000000000
Arg [214] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [215] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [216] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f62656c676975
Arg [217] : 6d2e706e67000000000000000000000000000000000000000000000000000000
Arg [218] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [219] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [220] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63616e616461
Arg [221] : 2e706e6700000000000000000000000000000000000000000000000000000000
Arg [222] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [223] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [224] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6d6f726f6363
Arg [225] : 6f2e706e67000000000000000000000000000000000000000000000000000000
Arg [226] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [227] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [228] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63726f617469
Arg [229] : 612e706e67000000000000000000000000000000000000000000000000000000
Arg [230] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [231] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [232] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6272617a696c
Arg [233] : 2e706e6700000000000000000000000000000000000000000000000000000000
Arg [234] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [235] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [236] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f736572626961
Arg [237] : 2e706e6700000000000000000000000000000000000000000000000000000000
Arg [238] : 0000000000000000000000000000000000000000000000000000000000000049
Arg [239] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [240] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f737769747a65
Arg [241] : 726c616e642e706e670000000000000000000000000000000000000000000000
Arg [242] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [243] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [244] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f63616d65726f
Arg [245] : 6f6e2e706e670000000000000000000000000000000000000000000000000000
Arg [246] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [247] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [248] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f706f72747567
Arg [249] : 616c2e706e670000000000000000000000000000000000000000000000000000
Arg [250] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [251] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [252] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f6768616e612e
Arg [253] : 706e670000000000000000000000000000000000000000000000000000000000
Arg [254] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [255] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [256] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f757275677561
Arg [257] : 792e706e67000000000000000000000000000000000000000000000000000000
Arg [258] : 0000000000000000000000000000000000000000000000000000000000000049
Arg [259] : 68747470733a2f2f7468616c65732d70726f746f636f6c2e73332e65752d6e6f
Arg [260] : 7274682d312e616d617a6f6e6177732e636f6d2f7a6562726f5f736f7574685f
Arg [261] : 6b6f7265612e706e670000000000000000000000000000000000000000000000


Loading