ETH Price: $3,446.02 (-0.97%)
Gas: 3 Gwei

Token

GOLCOIN (GOLC)
 

Overview

Max Total Supply

57,012,206.720174306771439871 GOLC

Holders

2,634 (0.00%)

Market

Price

$0.02 @ 0.000006 ETH (+5.46%)

Onchain Market Cap

$1,180,463.97

Circulating Supply Market Cap

$24,768.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
605.2 GOLC

Value
$12.53 ( ~0.00363608161644237 Eth) [0.0011%]
0xb28386c78e1070803f18f8ebe0d26c4fa37df9f8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Golcoin is a secure and scalable multichain cryptocurrency, with numerous utilities enabling an innovative ecosystem.

Market

Volume (24H):$132,414.00
Market Capitalization:$24,768.00
Circulating Supply:1,187,223.00 GOLC
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GOLCOIN

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-19
*/

/**
 *Submitted for verification at BscScan.com on 2022-08-18
*/

/**
 *Submitted for verification at BscScan.com on 2022-08-18
// */
//                   TOKENOMICS 
// ERC Wallet	       percentage	        amount
// Agartha	            24.14%	         GOL17,500,000.00
// Mining	            15.52%	         GOL11,250,000.00
// NFT	                17.24%	         GOL12,500,000.00
// Gol Blockchain	    27.59%	         GOL20,000,000.00
// Rest	                15.52%	         GOL11,250,000.00
// total ERC wallet	    25.00%	         GOL72,500,000.00








// ///File: contracts/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
    
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// File: contracts/Context.sol

// 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: contracts/Errors.sol


pragma solidity ^0.8.0;

library Errors {
    string constant MINT_DISABLED = "Token: Minting is disabled";
    string constant BURN_DISABLED = "Token: Burning is disabled";
    string constant MINT_ALREADY_ENABLED = "Token: Minting is already enabled";
    string constant MINT_ALREADY_DISABLED = "Token: Minting is already disabled";
    string constant BURN_ALREADY_ENABLED = "Token: Burning is already enabled";
    string constant BURN_ALREADY_DISABLED = "Token: Burning is already disabled";
    string constant NON_ZERO_ADDRESS = "Token: Address can not be 0x0";
    string constant NOT_APPROVED = "Token: You are not approved to spend this amount of tokens";
    string constant TRANSFER_EXCEEDS_BALANCE = "Token: Transfer amount exceeds balance";
    string constant BURN_EXCEEDS_BALANCE = "Token: Burn amount exceeds balance";
    string constant INSUFFICIENT_ALLOWANCE = "Token: Insufficient allowance";
    string constant NOTHING_TO_WITHDRAW = "Token: The balance must be greater than 0";
    string constant ALLOWANCE_BELOW_ZERO = "Token: Decreased allowance below zero";
    string constant ABOVE_CAP = "Token: Amount is above the cap";

    string constant NOT_OWNER = "Ownable: Caller is not the owner";
    string constant OWNABLE_NON_ZERO_ADDRESS = "Ownable: Address can not be 0x0";

    string constant NOT_ORACLE_OR_HANDLER = "Oracle: Caller is not the oracle or handler";
    string constant ADDRESS_IS_HANDLER = "Oracle: Address is already a Bridge Handler";
    string constant ADDRESS_IS_NOT_HANDLER = "Oracle: Address is not a Bridge Handler";
    string constant TOKEN_NOT_ALLOWED_IN_BRIDGE = "Oracle: Your token is not allowed in JM Bridge";
    string constant SET_HANDLER_ORACLE_FIRST = "Oracle: Set the handler oracle address first";
    string constant ORACLE_NOT_SET = "Oracle: No oracle set";
    string constant IS_NOT_ORACLE = "Oracle: You are not the oracle";
    string constant NOT_ALLOWED_TO_EDIT_ORACLE = "Oracle: Not allowed to edit the Handler Oracle address";
    string constant NON_ZERO_ADDRESS_SENDER = "Oracle: Sender can not be 0x0";
}

// File: contracts/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), Errors.NOT_OWNER);
        _;
    }

    /**
     * @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), Errors.OWNABLE_NON_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: contracts/BridgeOracle.sol


pragma solidity ^0.8.0;

interface HandlerOracle {
    function approveHandlerChange() external returns (bool);
    function approveManualMint() external returns (bool);
    function isTokenContract(address tokenContract) external view returns (bool);
    function isAllowedToChangeOracle(address tokenContract) external view returns (bool);
}

abstract contract BridgeOracle is Ownable {
    HandlerOracle internal _handlerOracle;
    address private _bridgeHandler;

    event BridgeHandlerSet(address indexed added);

    /**
     * @dev Returns true if the address is a bridge handler.
     */
    function isBridgeHandler(address account) public view returns (bool) {
        return _bridgeHandler == account;
    }
    
    /**
     * @dev Throws if called by any account other than the oracle or a bridge handler.
     */
    modifier onlyOracleAndBridge() {
        require(_msgSender() != address(0), Errors.NON_ZERO_ADDRESS_SENDER);
        require(isBridgeHandler(_msgSender()) || address(_handlerOracle) == _msgSender(), Errors.NOT_ORACLE_OR_HANDLER);
        _;
    }
    
    modifier onlyHandlerOracle() {
        require(_msgSender() != address(0), Errors.ORACLE_NOT_SET);
        require(_msgSender() == address(_handlerOracle), Errors.IS_NOT_ORACLE);
        _;
    }

    function approveOracleToSetHandler() public onlyOwner returns (bool) {
        require(address(_handlerOracle) != address(0), Errors.SET_HANDLER_ORACLE_FIRST);
        require(_handlerOracle.isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        return _handlerOracle.approveHandlerChange();
    }
    
    function approveOracleToManualMint() public onlyOwner returns (bool) {
        require(address(_handlerOracle) != address(0), Errors.SET_HANDLER_ORACLE_FIRST);
        require(_handlerOracle.isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        return _handlerOracle.approveManualMint();
    }

    /**
     * @dev Add handler address (`account`) that can mint and burn.
     * Can only be called by the 'Handler Oracle Contract' after it was approved.
     */
    function setBridgeHandler(address account) public onlyHandlerOracle {
        require(account != address(0), Errors.OWNABLE_NON_ZERO_ADDRESS);
        require(!isBridgeHandler(account), Errors.ADDRESS_IS_HANDLER);

        emit BridgeHandlerSet(account);
        _bridgeHandler = account;
    }

    function setHandlerOracle(address newHandlerOracle) public onlyOwner {
        require(HandlerOracle(newHandlerOracle).isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        if ( address(_handlerOracle) == address(0) ) {
            _handlerOracle = HandlerOracle(newHandlerOracle);
        } else {
            require(_handlerOracle.isAllowedToChangeOracle(address(this)) == true, Errors.NOT_ALLOWED_TO_EDIT_ORACLE);

            _handlerOracle = HandlerOracle(newHandlerOracle);
        }
    }
}

// File: contracts/GOLCOIN.sol

// @Title GOLCOIN Bridged Token
// @Author Team GOLCOIN

pragma solidity ^0.8.0;


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

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

    uint256 private constant _max = 290000000 * 10**18;
    uint256 private _totalSupply;
    uint256 private _totalBurned;

    bool public isMintingEnabled = false;
    bool public isBurningEnabled = true;
    
    string private _name = "GOLCOIN";
    string private _symbol = "GOLC";
    uint8 private _decimals = 18;

    constructor() {
        uint256 initialAmount = 72500000 * 10**18;
        _totalSupply = initialAmount;
        _balances[_msgSender()] = initialAmount;
    }

    modifier mintingEnabled() {
        require(isMintingEnabled, Errors.MINT_DISABLED);
        _;
    }
    
    modifier burningEnabled() {
        require(isBurningEnabled, Errors.BURN_DISABLED);
        _;
    }
    
    modifier nonZeroAddress(address _account) {
        require(_account != address(0), Errors.NON_ZERO_ADDRESS);
        _;
    }
    
    modifier belowCap(uint256 amount) {
        require(amount <= (_max - _totalSupply - _totalBurned), Errors.ABOVE_CAP);
        _;
    }

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

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

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

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

    function totalBurned() public view returns (uint256) {
        return _totalBurned;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }
    
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public override returns (bool) {
        address spender = _msgSender();
        require(amount <= _allowances[from][spender], Errors.NOT_APPROVED);
        
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }
    
    function enableMinting() public onlyHandlerOracle returns (string memory retMsg) {
        require(!isMintingEnabled, Errors.MINT_ALREADY_ENABLED);
        
        isMintingEnabled = true;
        emit MintingEnabled();
        retMsg = "Enabled Minting";
    }

    function disableMinting() public onlyHandlerOracle returns (string memory retMsg) {
        require(isMintingEnabled, Errors.MINT_ALREADY_DISABLED);
        
        isMintingEnabled = false;
        emit MintingDisabled();
        retMsg = "Disabled Minting";
    }
    
    function enableBurning() public onlyHandlerOracle returns (string memory retMsg) {
        require(!isBurningEnabled, Errors.BURN_ALREADY_ENABLED);
        
        isBurningEnabled = true;
        emit BurningEnabled();
        retMsg = "Enabled Burning";
    }

    function disableBurning() public onlyHandlerOracle returns (string memory retMsg) {
        require(isBurningEnabled, Errors.BURN_ALREADY_DISABLED);
        
        isBurningEnabled = false;
        emit BurningDisabled();
        retMsg = "Disabled Burning";
    }
    
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal nonZeroAddress(from) nonZeroAddress(to) {
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, Errors.TRANSFER_EXCEEDS_BALANCE);
        unchecked { _balances[from] = fromBalance - amount; }
        _balances[to] += amount;

        emit Transfer(from, to, amount);
    }
    
    /**
     * @dev Creates `amount` new tokens for `to`.
     *
     * See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must be the bridge or owner.
     */
    function mint(address to, uint256 amount) public onlyOracleAndBridge {
        _mint(to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - minting and burning must be enabled.
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal mintingEnabled nonZeroAddress(account) belowCap(amount) {
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        address mintBy = _msgSender();
        if ( isBridgeHandler(mintBy) ) {
            emit BridgeMint(mintBy, account, amount);
        } else {
            emit ManualMint(mintBy, account, amount);
        }
    }
    
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal burningEnabled nonZeroAddress(account) {
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, Errors.BURN_EXCEEDS_BALANCE);
        unchecked { _balances[account] = accountBalance - amount; }
        _totalSupply -= amount;

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

        address burnBy = _msgSender();
        if ( isBridgeHandler(burnBy) || burnBy == address(_handlerOracle) ) {
            emit BridgeBurn(account, burnBy, amount);
        } else {
            unchecked { _totalBurned += amount; }
            emit NormalBurn(account, burnBy, amount);
        }
    }
    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This private function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) private nonZeroAddress(owner) nonZeroAddress(spender) {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, Errors.INSUFFICIENT_ALLOWANCE);
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

    
    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public {
        require(amount <= _allowances[account][_msgSender()], Errors.NOT_APPROVED);
        
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
    
    function withdrawBASE(address payable recipient) external onlyOwner nonZeroAddress(recipient) {
        require(address(this).balance > 0, Errors.NOTHING_TO_WITHDRAW);

        recipient.transfer(address(this).balance);
    }

    function withdrawERC20token(address _token, address payable recipient) external onlyOwner nonZeroAddress(recipient) returns (bool) {
        uint256 bal = IERC20(_token).balanceOf(address(this));
        require(bal > 0, Errors.NOTHING_TO_WITHDRAW);

        return IERC20(_token).transfer(recipient, bal);
    }


    
    event BridgeMint(address indexed by, address indexed to, uint256 value);
    event ManualMint(address indexed by, address indexed to, uint256 value);
    event BridgeBurn(address indexed from, address indexed by, uint256 value);
    event NormalBurn(address indexed from, address indexed to, uint256 value);
    event MintingEnabled();
    event MintingDisabled();
    event BurningEnabled();
    event BurningDisabled();
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BridgeBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"added","type":"address"}],"name":"BridgeHandlerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BridgeMint","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ManualMint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"MintingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NormalBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveOracleToManualMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveOracleToSetHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBurning","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMinting","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBurning","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMinting","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBridgeHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurningEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"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":"address","name":"account","type":"address"}],"name":"setBridgeHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newHandlerOracle","type":"address"}],"name":"setHandlerOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawBASE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawERC20token","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526000600760006101000a81548160ff0219169083151502179055506001600760016101000a81548160ff0219169083151502179055506040518060400160405280600781526020017f474f4c434f494e0000000000000000000000000000000000000000000000000081525060089081620000809190620004c9565b506040518060400160405280600481526020017f474f4c430000000000000000000000000000000000000000000000000000000081525060099081620000c79190620004c9565b506012600a60006101000a81548160ff021916908360ff160217905550348015620000f157600080fd5b5062000112620001066200018360201b60201c565b6200018b60201b60201c565b60006a3bf878e011094c1880000090508060058190555080600360006200013e6200018360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050620005b0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d157607f821691505b602082108103620002e757620002e662000289565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000312565b6200035d868362000312565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003aa620003a46200039e8462000375565b6200037f565b62000375565b9050919050565b6000819050919050565b620003c68362000389565b620003de620003d582620003b1565b8484546200031f565b825550505050565b600090565b620003f5620003e6565b62000402818484620003bb565b505050565b5b818110156200042a576200041e600082620003eb565b60018101905062000408565b5050565b601f82111562000479576200044381620002ed565b6200044e8462000302565b810160208510156200045e578190505b620004766200046d8562000302565b83018262000407565b50505b505050565b600082821c905092915050565b60006200049e600019846008026200047e565b1980831691505092915050565b6000620004b983836200048b565b9150826002028217905092915050565b620004d4826200024f565b67ffffffffffffffff811115620004f057620004ef6200025a565b5b620004fc8254620002b8565b620005098282856200042e565b600060209050601f8311600181146200054157600084156200052c578287015190505b620005388582620004ab565b865550620005a8565b601f1984166200055186620002ed565b60005b828110156200057b5784890151825560018201915060208501945060208101905062000554565b868310156200059b578489015162000597601f8916826200048b565b8355505b6001600288020188555050505b505050505050565b61419e80620005c06000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637e5cd5c111610104578063a9059cbb116100a2578063e797ec1b11610071578063e797ec1b1461056f578063e7e117861461058d578063edf07bb5146105bd578063f2fde38b146105db576101da565b8063a9059cbb146104d5578063b19f2fc414610505578063d89135cd14610521578063dd62ed3e1461053f576101da565b80638da5cb5b116100de5780638da5cb5b1461044b57806395d89b411461046957806398603cca14610487578063a457c2d7146104a5576101da565b80637e5cd5c1146103df578063859e0d3a146103fd57806388ee3b061461041b576101da565b8063395093511161017c57806370a082311161014b57806370a08231146103595780637581a8e61461038957806375eb259b146103a757806379cc6790146103c3576101da565b806339509351146102d357806340c10f191461030357806342966c681461031f57806355c7ba141461033b576101da565b806318160ddd116101b857806318160ddd1461024957806320c354bd1461026757806323b872dd14610285578063313ce567146102b5576101da565b806306fdde03146101df57806307aa037a146101fd578063095ea7b314610219575b600080fd5b6101e76105f7565b6040516101f491906139be565b60405180910390f35b61021760048036038101906102129190613a43565b610689565b005b610233600480360381019061022e9190613aa6565b6109f9565b6040516102409190613b01565b60405180910390f35b610251610a1c565b60405161025e9190613b2b565b60405180910390f35b61026f610a26565b60405161027c9190613b01565b60405180910390f35b61029f600480360381019061029a9190613b46565b610a39565b6040516102ac9190613b01565b60405180910390f35b6102bd610b43565b6040516102ca9190613bb5565b60405180910390f35b6102ed60048036038101906102e89190613aa6565b610b5a565b6040516102fa9190613b01565b60405180910390f35b61031d60048036038101906103189190613aa6565b610c04565b005b61033960048036038101906103349190613bd0565b610d8c565b005b610343610da0565b6040516103509190613b01565b60405180910390f35b610373600480360381019061036e9190613a43565b610db3565b6040516103809190613b2b565b60405180910390f35b610391610dfc565b60405161039e91906139be565b60405180910390f35b6103c160048036038101906103bc9190613a43565b61106c565b005b6103dd60048036038101906103d89190613aa6565b611381565b005b6103e7611483565b6040516103f491906139be565b60405180910390f35b6104056116f2565b6040516104129190613b01565b60405180910390f35b61043560048036038101906104309190613a43565b6119ed565b6040516104429190613b01565b60405180910390f35b610453611a47565b6040516104609190613c0c565b60405180910390f35b610471611a70565b60405161047e91906139be565b60405180910390f35b61048f611b02565b60405161049c91906139be565b60405180910390f35b6104bf60048036038101906104ba9190613aa6565b611d71565b6040516104cc9190613b01565b60405180910390f35b6104ef60048036038101906104ea9190613aa6565b611e77565b6040516104fc9190613b01565b60405180910390f35b61051f600480360381019061051a9190613c65565b611e9a565b005b6105296120a3565b6040516105369190613b2b565b60405180910390f35b61055960048036038101906105549190613c92565b6120ad565b6040516105669190613b2b565b60405180910390f35b610577612134565b60405161058491906139be565b60405180910390f35b6105a760048036038101906105a29190613cd2565b6123a4565b6040516105b49190613b01565b60405180910390f35b6105c561266a565b6040516105d29190613b01565b60405180910390f35b6105f560048036038101906105f09190613a43565b612965565b005b60606008805461060690613d41565b80601f016020809104026020016040519081016040528092919081815260200182805461063290613d41565b801561067f5780601f106106545761010080835404028352916020019161067f565b820191906000526020600020905b81548152906001019060200180831161066257829003601f168201915b5050505050905090565b610691612acf565b73ffffffffffffffffffffffffffffffffffffffff166106af611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e65728152509061073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073491906139be565b60405180910390fd5b50600115158173ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b815260040161077b9190613c0c565b602060405180830381865afa158015610798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bc9190613d9e565b1515146040518060600160405280602e8152602001613f93602e913990610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081091906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036108b65780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109f6565b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b235199306040518263ffffffff1660e01b81526004016109159190613c0c565b602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190613d9e565b1515146040518060600160405280603681526020016140c660369139906109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa91906139be565b60405180910390fd5b5080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600080610a04612acf565b9050610a11818585612ad7565b600191505092915050565b6000600554905090565b600760019054906101000a900460ff1681565b600080610a44612acf565b9050600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548311156040518060600160405280603a8152602001613f2d603a913990610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1791906139be565b60405180910390fd5b50610b2c858285612d18565b610b37858585612ddd565b60019150509392505050565b6000600a60009054906101000a900460ff16905090565b600080610b65612acf565b9050610bf9818585600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf49190613dfa565b612ad7565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff16610c24612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f4f7261636c653a2053656e6465722063616e206e6f742062652030783000000081525090610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa91906139be565b60405180910390fd5b50610cc4610cbf612acf565b6119ed565b80610d235750610cd2612acf565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6040518060600160405280602b8152602001614059602b913990610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7491906139be565b60405180910390fd5b50610d8882826130dd565b5050565b610d9d610d97612acf565b82613477565b50565b600760009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600073ffffffffffffffffffffffffffffffffffffffff16610e1e612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea491906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610eef612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7491906139be565b60405180910390fd5b50600760019054906101000a900460ff16156040518060600160405280602181526020016140846021913990610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe091906139be565b60405180910390fd5b506001600760016101000a81548160ff0219169083151502179055507f65521a0db60169023ef4718a72c0d13775b298d16968758a685e034d2ca1c87560405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204275726e696e670000000000000000000000000000000000815250905090565b600073ffffffffffffffffffffffffffffffffffffffff1661108c612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c652073657400000000000000000000008152509061111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111291906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661115d612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e291906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b91906139be565b60405180910390fd5b5061129e816119ed565b156040518060600160405280602b8152602001613fe6602b9139906112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f091906139be565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff167f29cf5705e8ef0d06742df5af365503ef11d8886f3122b65edca07d64cf3d2f0a60405160405180910390a280600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113ca612acf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156040518060600160405280603a8152602001613f2d603a913990611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145991906139be565b60405180910390fd5b506114758261146f612acf565b83612d18565b61147f8282613477565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff166114a5612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611576612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb91906139be565b60405180910390fd5b50600760009054906101000a900460ff16604051806060016040528060228152602001614147602291399061166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166691906139be565b60405180910390fd5b506000600760006101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a16040518060400160405280601081526020017f44697361626c6564204d696e74696e6700000000000000000000000000000000815250905090565b60006116fc612acf565b73ffffffffffffffffffffffffffffffffffffffff1661171a611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572815250906117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f91906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001613f67602c913990611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d91906139be565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b81526004016118b69190613c0c565b602060405180830381865afa1580156118d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f79190613d9e565b1515146040518060600160405280602e8152602001613f93602e913990611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a97854f56040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e89190613d9e565b905090565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611a7f90613d41565b80601f0160208091040260200160405190810160405280929190818152602001828054611aab90613d41565b8015611af85780601f10611acd57610100808354040283529160200191611af8565b820191906000526020600020905b815481529060010190602001808311611adb57829003601f168201915b5050505050905090565b6060600073ffffffffffffffffffffffffffffffffffffffff16611b24612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bf5612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a91906139be565b60405180910390fd5b50600760019054906101000a900460ff166040518060600160405280602281526020016140376022913990611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce591906139be565b60405180910390fd5b506000600760016101000a81548160ff0219169083151502179055507f9bdcd7b2de47aadf92905c62d9ed9e7d1f02a42a8187d0549f686c76148c7c3560405160405180910390a16040518060400160405280601081526020017f44697361626c6564204275726e696e6700000000000000000000000000000000815250905090565b600080611d7c612acf565b90506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015604051806060016040528060258152602001613fc16025913990611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5491906139be565b60405180910390fd5b50611e6b8286868403612ad7565b60019250505092915050565b600080611e82612acf565b9050611e8f818585612ddd565b600191505092915050565b611ea2612acf565b73ffffffffffffffffffffffffffffffffffffffff16611ec0611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4591906139be565b60405180910390fd5b5080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef91906139be565b60405180910390fd5b506000471160405180606001604052806029815260200161411e6029913990612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e91906139be565b60405180910390fd5b508173ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561209e573d6000803e3d6000fd5b505050565b6000600654905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600073ffffffffffffffffffffffffffffffffffffffff16612156612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c65207365740000000000000000000000815250906121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612227612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac91906139be565b60405180910390fd5b50600760009054906101000a900460ff16156040518060600160405280602181526020016140a56021913990612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231891906139be565b60405180910390fd5b506001600760006101000a81548160ff0219169083151502179055507f38cb976174a5c48b8f7b2f07f69b47c271ba7f019948915dc12efb770c2a542c60405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204d696e74696e670000000000000000000000000000000000815250905090565b60006123ae612acf565b73ffffffffffffffffffffffffffffffffffffffff166123cc611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e65728152509061245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245191906139be565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb91906139be565b60405180910390fd5b5060008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125409190613c0c565b602060405180830381865afa15801561255d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125819190613e43565b90506000811160405180606001604052806029815260200161411e60299139906125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d891906139be565b60405180910390fd5b508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b815260040161261d929190613ecf565b6020604051808303816000875af115801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190613d9e565b9250505092915050565b6000612674612acf565b73ffffffffffffffffffffffffffffffffffffffff16612692611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271791906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001613f67602c9139906127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c591906139be565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b815260040161282e9190613c0c565b602060405180830381865afa15801561284b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286f9190613d9e565b1515146040518060600160405280602e8152602001613f93602e9139906128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c391906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375a1bb776040518163ffffffff1660e01b81526004016020604051808303816000875af115801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190613d9e565b905090565b61296d612acf565b73ffffffffffffffffffffffffffffffffffffffff1661298b611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1091906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab991906139be565b60405180910390fd5b50612acc8161386a565b50565b600033905090565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7791906139be565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2191906139be565b60405180910390fd5b5082600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612d099190613b2b565b60405180910390a35050505050565b6000612d2484846120ad565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612dd757818110156040518060400160405280601d81526020017f546f6b656e3a20496e73756666696369656e7420616c6c6f77616e636500000081525090612dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbf91906139be565b60405180910390fd5b50612dd68484848403612ad7565b5b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d91906139be565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2791906139be565b60405180910390fd5b506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156040518060600160405280602681526020016140116026913990612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca91906139be565b60405180910390fd5b50838103600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130699190613dfa565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516130cd9190613b2b565b60405180910390a3505050505050565b600760009054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204d696e74696e672069732064697361626c656400000000000081525090613164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315b91906139be565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f74206265203078300000008152509061320e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320591906139be565b60405180910390fd5b50816006546005546aefe1e3804425306200000061322c9190613ef8565b6132369190613ef8565b8111156040518060400160405280601e81526020017f546f6b656e3a20416d6f756e742069732061626f766520746865206361700000815250906132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a791906139be565b60405180910390fd5b5082600560008282546132c39190613dfa565b9250508190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133199190613dfa565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161337e9190613b2b565b60405180910390a36000613390612acf565b905061339b816119ed565b1561340a578473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc3b8ae385c02b938fbbbd694d1da0761f755ee2c942f26bbfc6723c986d31b9b866040516133fd9190613b2b565b60405180910390a3613470565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6de547f9e15aa8eb4e186426345d83ce982c2e4a1f811761da74ff56a2a23731866040516134679190613b2b565b60405180910390a35b5050505050565b600760019054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204275726e696e672069732064697361626c6564000000000000815250906134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f591906139be565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906135a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359f91906139be565b60405180910390fd5b506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156040518060600160405280602281526020016140fc602291399061364b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364291906139be565b60405180910390fd5b50828103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600560008282546136a49190613ef8565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137099190613b2b565b60405180910390a3600061371b612acf565b9050613726816119ed565b8061377e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156137ed578073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fabf8a0bc0c6341b64dfa026a551cda9d3beb0e0525758303026bacbc11ad1d8c866040516137e09190613b2b565b60405180910390a3613863565b836006600082825401925050819055508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe89157ccd232bcbcdb51b17ee427bcd37c60c0d26c4d97408b1309a9333c636e8660405161385a9190613b2b565b60405180910390a35b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396857808201518184015260208101905061394d565b60008484015250505050565b6000601f19601f8301169050919050565b60006139908261392e565b61399a8185613939565b93506139aa81856020860161394a565b6139b381613974565b840191505092915050565b600060208201905081810360008301526139d88184613985565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a10826139e5565b9050919050565b613a2081613a05565b8114613a2b57600080fd5b50565b600081359050613a3d81613a17565b92915050565b600060208284031215613a5957613a586139e0565b5b6000613a6784828501613a2e565b91505092915050565b6000819050919050565b613a8381613a70565b8114613a8e57600080fd5b50565b600081359050613aa081613a7a565b92915050565b60008060408385031215613abd57613abc6139e0565b5b6000613acb85828601613a2e565b9250506020613adc85828601613a91565b9150509250929050565b60008115159050919050565b613afb81613ae6565b82525050565b6000602082019050613b166000830184613af2565b92915050565b613b2581613a70565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b600080600060608486031215613b5f57613b5e6139e0565b5b6000613b6d86828701613a2e565b9350506020613b7e86828701613a2e565b9250506040613b8f86828701613a91565b9150509250925092565b600060ff82169050919050565b613baf81613b99565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600060208284031215613be657613be56139e0565b5b6000613bf484828501613a91565b91505092915050565b613c0681613a05565b82525050565b6000602082019050613c216000830184613bfd565b92915050565b6000613c32826139e5565b9050919050565b613c4281613c27565b8114613c4d57600080fd5b50565b600081359050613c5f81613c39565b92915050565b600060208284031215613c7b57613c7a6139e0565b5b6000613c8984828501613c50565b91505092915050565b60008060408385031215613ca957613ca86139e0565b5b6000613cb785828601613a2e565b9250506020613cc885828601613a2e565b9150509250929050565b60008060408385031215613ce957613ce86139e0565b5b6000613cf785828601613a2e565b9250506020613d0885828601613c50565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5957607f821691505b602082108103613d6c57613d6b613d12565b5b50919050565b613d7b81613ae6565b8114613d8657600080fd5b50565b600081519050613d9881613d72565b92915050565b600060208284031215613db457613db36139e0565b5b6000613dc284828501613d89565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e0582613a70565b9150613e1083613a70565b9250828201905080821115613e2857613e27613dcb565b5b92915050565b600081519050613e3d81613a7a565b92915050565b600060208284031215613e5957613e586139e0565b5b6000613e6784828501613e2e565b91505092915050565b6000819050919050565b6000613e95613e90613e8b846139e5565b613e70565b6139e5565b9050919050565b6000613ea782613e7a565b9050919050565b6000613eb982613e9c565b9050919050565b613ec981613eae565b82525050565b6000604082019050613ee46000830185613ec0565b613ef16020830184613b1c565b9392505050565b6000613f0382613a70565b9150613f0e83613a70565b9250828203905081811115613f2657613f25613dcb565b5b9291505056fe546f6b656e3a20596f7520617265206e6f7420617070726f76656420746f207370656e64207468697320616d6f756e74206f6620746f6b656e734f7261636c653a20536574207468652068616e646c6572206f7261636c6520616464726573732066697273744f7261636c653a20596f757220746f6b656e206973206e6f7420616c6c6f77656420696e204a4d20427269646765546f6b656e3a2044656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f7261636c653a204164647265737320697320616c72656164792061204272696467652048616e646c6572546f6b656e3a205472616e7366657220616d6f756e7420657863656564732062616c616e6365546f6b656e3a204275726e696e6720697320616c72656164792064697361626c65644f7261636c653a2043616c6c6572206973206e6f7420746865206f7261636c65206f722068616e646c6572546f6b656e3a204275726e696e6720697320616c726561647920656e61626c6564546f6b656e3a204d696e74696e6720697320616c726561647920656e61626c65644f7261636c653a204e6f7420616c6c6f77656420746f2065646974207468652048616e646c6572204f7261636c652061646472657373546f6b656e3a204275726e20616d6f756e7420657863656564732062616c616e6365546f6b656e3a205468652062616c616e6365206d7573742062652067726561746572207468616e2030546f6b656e3a204d696e74696e6720697320616c72656164792064697361626c6564a2646970667358221220202030905529ca65af30a9e71914841b4b02959ce5c2982ff92a874327a369e464736f6c63430008100033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80637e5cd5c111610104578063a9059cbb116100a2578063e797ec1b11610071578063e797ec1b1461056f578063e7e117861461058d578063edf07bb5146105bd578063f2fde38b146105db576101da565b8063a9059cbb146104d5578063b19f2fc414610505578063d89135cd14610521578063dd62ed3e1461053f576101da565b80638da5cb5b116100de5780638da5cb5b1461044b57806395d89b411461046957806398603cca14610487578063a457c2d7146104a5576101da565b80637e5cd5c1146103df578063859e0d3a146103fd57806388ee3b061461041b576101da565b8063395093511161017c57806370a082311161014b57806370a08231146103595780637581a8e61461038957806375eb259b146103a757806379cc6790146103c3576101da565b806339509351146102d357806340c10f191461030357806342966c681461031f57806355c7ba141461033b576101da565b806318160ddd116101b857806318160ddd1461024957806320c354bd1461026757806323b872dd14610285578063313ce567146102b5576101da565b806306fdde03146101df57806307aa037a146101fd578063095ea7b314610219575b600080fd5b6101e76105f7565b6040516101f491906139be565b60405180910390f35b61021760048036038101906102129190613a43565b610689565b005b610233600480360381019061022e9190613aa6565b6109f9565b6040516102409190613b01565b60405180910390f35b610251610a1c565b60405161025e9190613b2b565b60405180910390f35b61026f610a26565b60405161027c9190613b01565b60405180910390f35b61029f600480360381019061029a9190613b46565b610a39565b6040516102ac9190613b01565b60405180910390f35b6102bd610b43565b6040516102ca9190613bb5565b60405180910390f35b6102ed60048036038101906102e89190613aa6565b610b5a565b6040516102fa9190613b01565b60405180910390f35b61031d60048036038101906103189190613aa6565b610c04565b005b61033960048036038101906103349190613bd0565b610d8c565b005b610343610da0565b6040516103509190613b01565b60405180910390f35b610373600480360381019061036e9190613a43565b610db3565b6040516103809190613b2b565b60405180910390f35b610391610dfc565b60405161039e91906139be565b60405180910390f35b6103c160048036038101906103bc9190613a43565b61106c565b005b6103dd60048036038101906103d89190613aa6565b611381565b005b6103e7611483565b6040516103f491906139be565b60405180910390f35b6104056116f2565b6040516104129190613b01565b60405180910390f35b61043560048036038101906104309190613a43565b6119ed565b6040516104429190613b01565b60405180910390f35b610453611a47565b6040516104609190613c0c565b60405180910390f35b610471611a70565b60405161047e91906139be565b60405180910390f35b61048f611b02565b60405161049c91906139be565b60405180910390f35b6104bf60048036038101906104ba9190613aa6565b611d71565b6040516104cc9190613b01565b60405180910390f35b6104ef60048036038101906104ea9190613aa6565b611e77565b6040516104fc9190613b01565b60405180910390f35b61051f600480360381019061051a9190613c65565b611e9a565b005b6105296120a3565b6040516105369190613b2b565b60405180910390f35b61055960048036038101906105549190613c92565b6120ad565b6040516105669190613b2b565b60405180910390f35b610577612134565b60405161058491906139be565b60405180910390f35b6105a760048036038101906105a29190613cd2565b6123a4565b6040516105b49190613b01565b60405180910390f35b6105c561266a565b6040516105d29190613b01565b60405180910390f35b6105f560048036038101906105f09190613a43565b612965565b005b60606008805461060690613d41565b80601f016020809104026020016040519081016040528092919081815260200182805461063290613d41565b801561067f5780601f106106545761010080835404028352916020019161067f565b820191906000526020600020905b81548152906001019060200180831161066257829003601f168201915b5050505050905090565b610691612acf565b73ffffffffffffffffffffffffffffffffffffffff166106af611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e65728152509061073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073491906139be565b60405180910390fd5b50600115158173ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b815260040161077b9190613c0c565b602060405180830381865afa158015610798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bc9190613d9e565b1515146040518060600160405280602e8152602001613f93602e913990610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081091906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036108b65780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109f6565b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b235199306040518263ffffffff1660e01b81526004016109159190613c0c565b602060405180830381865afa158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190613d9e565b1515146040518060600160405280603681526020016140c660369139906109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa91906139be565b60405180910390fd5b5080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600080610a04612acf565b9050610a11818585612ad7565b600191505092915050565b6000600554905090565b600760019054906101000a900460ff1681565b600080610a44612acf565b9050600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548311156040518060600160405280603a8152602001613f2d603a913990610b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1791906139be565b60405180910390fd5b50610b2c858285612d18565b610b37858585612ddd565b60019150509392505050565b6000600a60009054906101000a900460ff16905090565b600080610b65612acf565b9050610bf9818585600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bf49190613dfa565b612ad7565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff16610c24612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f4f7261636c653a2053656e6465722063616e206e6f742062652030783000000081525090610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa91906139be565b60405180910390fd5b50610cc4610cbf612acf565b6119ed565b80610d235750610cd2612acf565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6040518060600160405280602b8152602001614059602b913990610d7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7491906139be565b60405180910390fd5b50610d8882826130dd565b5050565b610d9d610d97612acf565b82613477565b50565b600760009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600073ffffffffffffffffffffffffffffffffffffffff16610e1e612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea491906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610eef612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7491906139be565b60405180910390fd5b50600760019054906101000a900460ff16156040518060600160405280602181526020016140846021913990610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe091906139be565b60405180910390fd5b506001600760016101000a81548160ff0219169083151502179055507f65521a0db60169023ef4718a72c0d13775b298d16968758a685e034d2ca1c87560405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204275726e696e670000000000000000000000000000000000815250905090565b600073ffffffffffffffffffffffffffffffffffffffff1661108c612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c652073657400000000000000000000008152509061111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111291906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661115d612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e291906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b91906139be565b60405180910390fd5b5061129e816119ed565b156040518060600160405280602b8152602001613fe6602b9139906112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f091906139be565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff167f29cf5705e8ef0d06742df5af365503ef11d8886f3122b65edca07d64cf3d2f0a60405160405180910390a280600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113ca612acf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156040518060600160405280603a8152602001613f2d603a913990611462576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145991906139be565b60405180910390fd5b506114758261146f612acf565b83612d18565b61147f8282613477565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff166114a5612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611576612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb91906139be565b60405180910390fd5b50600760009054906101000a900460ff16604051806060016040528060228152602001614147602291399061166f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166691906139be565b60405180910390fd5b506000600760006101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a16040518060400160405280601081526020017f44697361626c6564204d696e74696e6700000000000000000000000000000000815250905090565b60006116fc612acf565b73ffffffffffffffffffffffffffffffffffffffff1661171a611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572815250906117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f91906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001613f67602c913990611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d91906139be565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b81526004016118b69190613c0c565b602060405180830381865afa1580156118d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f79190613d9e565b1515146040518060600160405280602e8152602001613f93602e913990611954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194b91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a97854f56040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e89190613d9e565b905090565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054611a7f90613d41565b80601f0160208091040260200160405190810160405280929190818152602001828054611aab90613d41565b8015611af85780601f10611acd57610100808354040283529160200191611af8565b820191906000526020600020905b815481529060010190602001808311611adb57829003601f168201915b5050505050905090565b6060600073ffffffffffffffffffffffffffffffffffffffff16611b24612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bf5612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a91906139be565b60405180910390fd5b50600760019054906101000a900460ff166040518060600160405280602281526020016140376022913990611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce591906139be565b60405180910390fd5b506000600760016101000a81548160ff0219169083151502179055507f9bdcd7b2de47aadf92905c62d9ed9e7d1f02a42a8187d0549f686c76148c7c3560405160405180910390a16040518060400160405280601081526020017f44697361626c6564204275726e696e6700000000000000000000000000000000815250905090565b600080611d7c612acf565b90506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015604051806060016040528060258152602001613fc16025913990611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5491906139be565b60405180910390fd5b50611e6b8286868403612ad7565b60019250505092915050565b600080611e82612acf565b9050611e8f818585612ddd565b600191505092915050565b611ea2612acf565b73ffffffffffffffffffffffffffffffffffffffff16611ec0611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090611f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4591906139be565b60405180910390fd5b5080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef91906139be565b60405180910390fd5b506000471160405180606001604052806029815260200161411e6029913990612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e91906139be565b60405180910390fd5b508173ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561209e573d6000803e3d6000fd5b505050565b6000600654905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600073ffffffffffffffffffffffffffffffffffffffff16612156612acf565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c65207365740000000000000000000000815250906121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc91906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612227612acf565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ac91906139be565b60405180910390fd5b50600760009054906101000a900460ff16156040518060600160405280602181526020016140a56021913990612321576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231891906139be565b60405180910390fd5b506001600760006101000a81548160ff0219169083151502179055507f38cb976174a5c48b8f7b2f07f69b47c271ba7f019948915dc12efb770c2a542c60405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204d696e74696e670000000000000000000000000000000000815250905090565b60006123ae612acf565b73ffffffffffffffffffffffffffffffffffffffff166123cc611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e65728152509061245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245191906139be565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb91906139be565b60405180910390fd5b5060008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125409190613c0c565b602060405180830381865afa15801561255d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125819190613e43565b90506000811160405180606001604052806029815260200161411e60299139906125e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d891906139be565b60405180910390fd5b508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b815260040161261d929190613ecf565b6020604051808303816000875af115801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190613d9e565b9250505092915050565b6000612674612acf565b73ffffffffffffffffffffffffffffffffffffffff16612692611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271791906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001613f67602c9139906127ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c591906139be565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b815260040161282e9190613c0c565b602060405180830381865afa15801561284b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286f9190613d9e565b1515146040518060600160405280602e8152602001613f93602e9139906128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c391906139be565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375a1bb776040518163ffffffff1660e01b81526004016020604051808303816000875af115801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190613d9e565b905090565b61296d612acf565b73ffffffffffffffffffffffffffffffffffffffff1661298b611a47565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1091906139be565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab991906139be565b60405180910390fd5b50612acc8161386a565b50565b600033905090565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7791906139be565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2191906139be565b60405180910390fd5b5082600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612d099190613b2b565b60405180910390a35050505050565b6000612d2484846120ad565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612dd757818110156040518060400160405280601d81526020017f546f6b656e3a20496e73756666696369656e7420616c6c6f77616e636500000081525090612dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbf91906139be565b60405180910390fd5b50612dd68484848403612ad7565b5b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d91906139be565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2791906139be565b60405180910390fd5b506000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156040518060600160405280602681526020016140116026913990612fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fca91906139be565b60405180910390fd5b50838103600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130699190613dfa565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516130cd9190613b2b565b60405180910390a3505050505050565b600760009054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204d696e74696e672069732064697361626c656400000000000081525090613164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315b91906139be565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f74206265203078300000008152509061320e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320591906139be565b60405180910390fd5b50816006546005546aefe1e3804425306200000061322c9190613ef8565b6132369190613ef8565b8111156040518060400160405280601e81526020017f546f6b656e3a20416d6f756e742069732061626f766520746865206361700000815250906132b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a791906139be565b60405180910390fd5b5082600560008282546132c39190613dfa565b9250508190555082600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133199190613dfa565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161337e9190613b2b565b60405180910390a36000613390612acf565b905061339b816119ed565b1561340a578473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc3b8ae385c02b938fbbbd694d1da0761f755ee2c942f26bbfc6723c986d31b9b866040516133fd9190613b2b565b60405180910390a3613470565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6de547f9e15aa8eb4e186426345d83ce982c2e4a1f811761da74ff56a2a23731866040516134679190613b2b565b60405180910390a35b5050505050565b600760019054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204275726e696e672069732064697361626c6564000000000000815250906134fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f591906139be565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906135a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359f91906139be565b60405180910390fd5b506000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156040518060600160405280602281526020016140fc602291399061364b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364291906139be565b60405180910390fd5b50828103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600560008282546136a49190613ef8565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516137099190613b2b565b60405180910390a3600061371b612acf565b9050613726816119ed565b8061377e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156137ed578073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fabf8a0bc0c6341b64dfa026a551cda9d3beb0e0525758303026bacbc11ad1d8c866040516137e09190613b2b565b60405180910390a3613863565b836006600082825401925050819055508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe89157ccd232bcbcdb51b17ee427bcd37c60c0d26c4d97408b1309a9333c636e8660405161385a9190613b2b565b60405180910390a35b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396857808201518184015260208101905061394d565b60008484015250505050565b6000601f19601f8301169050919050565b60006139908261392e565b61399a8185613939565b93506139aa81856020860161394a565b6139b381613974565b840191505092915050565b600060208201905081810360008301526139d88184613985565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a10826139e5565b9050919050565b613a2081613a05565b8114613a2b57600080fd5b50565b600081359050613a3d81613a17565b92915050565b600060208284031215613a5957613a586139e0565b5b6000613a6784828501613a2e565b91505092915050565b6000819050919050565b613a8381613a70565b8114613a8e57600080fd5b50565b600081359050613aa081613a7a565b92915050565b60008060408385031215613abd57613abc6139e0565b5b6000613acb85828601613a2e565b9250506020613adc85828601613a91565b9150509250929050565b60008115159050919050565b613afb81613ae6565b82525050565b6000602082019050613b166000830184613af2565b92915050565b613b2581613a70565b82525050565b6000602082019050613b406000830184613b1c565b92915050565b600080600060608486031215613b5f57613b5e6139e0565b5b6000613b6d86828701613a2e565b9350506020613b7e86828701613a2e565b9250506040613b8f86828701613a91565b9150509250925092565b600060ff82169050919050565b613baf81613b99565b82525050565b6000602082019050613bca6000830184613ba6565b92915050565b600060208284031215613be657613be56139e0565b5b6000613bf484828501613a91565b91505092915050565b613c0681613a05565b82525050565b6000602082019050613c216000830184613bfd565b92915050565b6000613c32826139e5565b9050919050565b613c4281613c27565b8114613c4d57600080fd5b50565b600081359050613c5f81613c39565b92915050565b600060208284031215613c7b57613c7a6139e0565b5b6000613c8984828501613c50565b91505092915050565b60008060408385031215613ca957613ca86139e0565b5b6000613cb785828601613a2e565b9250506020613cc885828601613a2e565b9150509250929050565b60008060408385031215613ce957613ce86139e0565b5b6000613cf785828601613a2e565b9250506020613d0885828601613c50565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5957607f821691505b602082108103613d6c57613d6b613d12565b5b50919050565b613d7b81613ae6565b8114613d8657600080fd5b50565b600081519050613d9881613d72565b92915050565b600060208284031215613db457613db36139e0565b5b6000613dc284828501613d89565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e0582613a70565b9150613e1083613a70565b9250828201905080821115613e2857613e27613dcb565b5b92915050565b600081519050613e3d81613a7a565b92915050565b600060208284031215613e5957613e586139e0565b5b6000613e6784828501613e2e565b91505092915050565b6000819050919050565b6000613e95613e90613e8b846139e5565b613e70565b6139e5565b9050919050565b6000613ea782613e7a565b9050919050565b6000613eb982613e9c565b9050919050565b613ec981613eae565b82525050565b6000604082019050613ee46000830185613ec0565b613ef16020830184613b1c565b9392505050565b6000613f0382613a70565b9150613f0e83613a70565b9250828203905081811115613f2657613f25613dcb565b5b9291505056fe546f6b656e3a20596f7520617265206e6f7420617070726f76656420746f207370656e64207468697320616d6f756e74206f6620746f6b656e734f7261636c653a20536574207468652068616e646c6572206f7261636c6520616464726573732066697273744f7261636c653a20596f757220746f6b656e206973206e6f7420616c6c6f77656420696e204a4d20427269646765546f6b656e3a2044656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f7261636c653a204164647265737320697320616c72656164792061204272696467652048616e646c6572546f6b656e3a205472616e7366657220616d6f756e7420657863656564732062616c616e6365546f6b656e3a204275726e696e6720697320616c72656164792064697361626c65644f7261636c653a2043616c6c6572206973206e6f7420746865206f7261636c65206f722068616e646c6572546f6b656e3a204275726e696e6720697320616c726561647920656e61626c6564546f6b656e3a204d696e74696e6720697320616c726561647920656e61626c65644f7261636c653a204e6f7420616c6c6f77656420746f2065646974207468652048616e646c6572204f7261636c652061646472657373546f6b656e3a204275726e20616d6f756e7420657863656564732062616c616e6365546f6b656e3a205468652062616c616e6365206d7573742062652067726561746572207468616e2030546f6b656e3a204d696e74696e6720697320616c72656164792064697361626c6564a2646970667358221220202030905529ca65af30a9e71914841b4b02959ce5c2982ff92a874327a369e464736f6c63430008100033

Deployed Bytecode Sourcemap

13272:13628:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14536:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11406:538;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16941:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15639:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13622:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17714:340;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15482:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18463:232;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21804:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25228:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13579:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15901:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20188:268;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11098:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25636:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19904:272;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10590:330;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9537:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7889:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14747:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20464:272;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19198:418;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16230:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25899:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15747:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16478:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19628:268;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26136:317;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10245:333;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8326:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14536:92;14582:13;14615:5;14608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14536:92;:::o;11406:538::-;8120:12;:10;:12::i;:::-;8109:23;;:7;:5;:7::i;:::-;:23;;;8134:16;;;;;;;;;;;;;;;;;8101:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11560:4:::1;11494:70;;11508:16;11494:47;;;11550:4;11494:62;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;;11566:34;;;;;;;;;;;;;;;;;11486:115;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11654:1;11619:37;;11627:14;;;;;;;;;;;11619:37;;::::0;11614:323:::1;;11705:16;11674:14;;:48;;;;;;;;;;;;;;;;;;11614:323;;;11820:4;11763:61;;:14;;;;;;;;;;;:38;;;11810:4;11763:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;11826:33;;;;;;;;;;;;;;;;;11755:105;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11908:16;11877:14;;:48;;;;;;;;;;;;;;;;;;11614:323;11406:538:::0;:::o;16941:193::-;17016:4;17033:13;17049:12;:10;:12::i;:::-;17033:28;;17072:32;17081:5;17088:7;17097:6;17072:8;:32::i;:::-;17122:4;17115:11;;;16941:193;;;;:::o;15639:100::-;15692:7;15719:12;;15712:19;;15639:100;:::o;13622:35::-;;;;;;;;;;;;;:::o;17714:340::-;17803:4;17820:15;17838:12;:10;:12::i;:::-;17820:30;;17879:11;:17;17891:4;17879:17;;;;;;;;;;;;;;;:26;17897:7;17879:26;;;;;;;;;;;;;;;;17869:6;:36;;17907:19;;;;;;;;;;;;;;;;;17861:66;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17948:38;17964:4;17970:7;17979:6;17948:15;:38::i;:::-;17997:27;18007:4;18013:2;18017:6;17997:9;:27::i;:::-;18042:4;18035:11;;;17714:340;;;;;:::o;15482:92::-;15532:5;15557:9;;;;;;;;;;;15550:16;;15482:92;:::o;18463:232::-;18543:4;18560:13;18576:12;:10;:12::i;:::-;18560:28;;18599:66;18608:5;18615:7;18654:10;18624:11;:18;18636:5;18624:18;;;;;;;;;;;;;;;:27;18643:7;18624:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;18599:8;:66::i;:::-;18683:4;18676:11;;;18463:232;;;;:::o;21804:105::-;9849:1;9825:26;;:12;:10;:12::i;:::-;:26;;;;9853:30;;;;;;;;;;;;;;;;;9817:67;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9903:29;9919:12;:10;:12::i;:::-;9903:15;:29::i;:::-;:72;;;;9963:12;:10;:12::i;:::-;9936:39;;9944:14;;;;;;;;;;;9936:39;;;9903:72;9977:28;;;;;;;;;;;;;;;;;9895:111;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21884:17:::1;21890:2;21894:6;21884:5;:17::i;:::-;21804:105:::0;;:::o;25228:83::-;25276:27;25282:12;:10;:12::i;:::-;25296:6;25276:5;:27::i;:::-;25228:83;:::o;13579:36::-;;;;;;;;;;;;;:::o;15901:119::-;15967:7;15994:9;:18;16004:7;15994:18;;;;;;;;;;;;;;;;15987:25;;15901:119;;;:::o;20188:268::-;20247:20;10110:1;10086:26;;:12;:10;:12::i;:::-;:26;;;;10114:21;;;;;;;;;;;;;;;;;10078:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10179:14;;;;;;;;;;;10155:39;;:12;:10;:12::i;:::-;:39;;;10196:20;;;;;;;;;;;;;;;;;10147:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20289:16:::1;;;;;;;;;;;20288:17;20307:27;;;;;;;;;;;;;;;;;20280:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20375:4;20356:16;;:23;;;;;;;;;;;;;;;;;;20395:16;;;;;;;;;;20422:26;;;;;;;;;;;;;;;;::::0;::::1;;20188:268:::0;:::o;11098:300::-;10110:1;10086:26;;:12;:10;:12::i;:::-;:26;;;;10114:21;;;;;;;;;;;;;;;;;10078:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10179:14;;;;;;;;;;;10155:39;;:12;:10;:12::i;:::-;:39;;;10196:20;;;;;;;;;;;;;;;;;10147:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11204:1:::1;11185:21;;:7;:21;;;;11208:31;;;;;;;;;;;;;;;;::::0;11177:63:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11260:24;11276:7;11260:15;:24::i;:::-;11259:25;11286;;;;;;;;;;;;;;;;;11251:61;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11347:7;11330:25;;;;;;;;;;;;11383:7;11366:14;;:24;;;;;;;;;;;;;;;;;;11098:300:::0;:::o;25636:251::-;25723:11;:20;25735:7;25723:20;;;;;;;;;;;;;;;:34;25744:12;:10;:12::i;:::-;25723:34;;;;;;;;;;;;;;;;25713:6;:44;;25759:19;;;;;;;;;;;;;;;;;25705:74;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25800:46;25816:7;25825:12;:10;:12::i;:::-;25839:6;25800:15;:46::i;:::-;25857:22;25863:7;25872:6;25857:5;:22::i;:::-;25636:251;;:::o;19904:272::-;19964:20;10110:1;10086:26;;:12;:10;:12::i;:::-;:26;;;;10114:21;;;;;;;;;;;;;;;;;10078:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10179:14;;;;;;;;;;;10155:39;;:12;:10;:12::i;:::-;:39;;;10196:20;;;;;;;;;;;;;;;;;10147:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20005:16:::1;;;;;;;;;;;20023:28;;;;;;;;;;;;;;;;;19997:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20092:5;20073:16;;:24;;;;;;;;;;;;;;;;;;20113:17;;;;;;;;;;20141:27;;;;;;;;;;;;;;;;::::0;::::1;;19904:272:::0;:::o;10590:330::-;10653:4;8120:12;:10;:12::i;:::-;8109:23;;:7;:5;:7::i;:::-;:23;;;8134:16;;;;;;;;;;;;;;;;;8101:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10713:1:::1;10678:37;;10686:14;;;;;;;;;;;10678:37;;;;10717:31;;;;;;;;;;;;;;;;;10670:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10817:4;10768:53;;:14;;;;;;;;;;;:30;;;10807:4;10768:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;10823:34;;;;;;;;;;;;;;;;;10760:98;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10878:14;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10871:41;;10590:330:::0;:::o;9537:120::-;9600:4;9642:7;9624:25;;:14;;;;;;;;;;;:25;;;9617:32;;9537:120;;;:::o;7889:87::-;7935:7;7962:6;;;;;;;;;;;7955:13;;7889:87;:::o;14747:96::-;14795:13;14828:7;14821:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14747:96;:::o;20464:272::-;20524:20;10110:1;10086:26;;:12;:10;:12::i;:::-;:26;;;;10114:21;;;;;;;;;;;;;;;;;10078:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10179:14;;;;;;;;;;;10155:39;;:12;:10;:12::i;:::-;:39;;;10196:20;;;;;;;;;;;;;;;;;10147:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20565:16:::1;;;;;;;;;;;20583:28;;;;;;;;;;;;;;;;;20557:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20652:5;20633:16;;:24;;;;;;;;;;;;;;;;;;20673:17;;;;;;;;;;20701:27;;;;;;;;;;;;;;;;::::0;::::1;;20464:272:::0;:::o;19198:418::-;19283:4;19300:13;19316:12;:10;:12::i;:::-;19300:28;;19339:24;19366:11;:18;19378:5;19366:18;;;;;;;;;;;;;;;:27;19385:7;19366:27;;;;;;;;;;;;;;;;19339:54;;19432:15;19412:16;:35;;19449:27;;;;;;;;;;;;;;;;;19404:73;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19513:60;19522:5;19529:7;19557:15;19538:16;:34;19513:8;:60::i;:::-;19604:4;19597:11;;;;19198:418;;;;:::o;16230:185::-;16301:4;16318:13;16334:12;:10;:12::i;:::-;16318:28;;16357;16367:5;16374:2;16378:6;16357:9;:28::i;:::-;16403:4;16396:11;;;16230:185;;;;:::o;25899:229::-;8120:12;:10;:12::i;:::-;8109:23;;:7;:5;:7::i;:::-;:23;;;8134:16;;;;;;;;;;;;;;;;;8101:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25982:9:::1;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;::::0;14240:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26036:1:::2;26012:21;:25;26039:26;;;;;;;;;;;;;;;;;26004:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26079:9;:18;;:41;26098:21;26079:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;8162:1:::1;25899:229:::0;:::o;15747:91::-;15791:7;15818:12;;15811:19;;15747:91;:::o;16478:143::-;16559:7;16586:11;:18;16598:5;16586:18;;;;;;;;;;;;;;;:27;16605:7;16586:27;;;;;;;;;;;;;;;;16579:34;;16478:143;;;;:::o;19628:268::-;19687:20;10110:1;10086:26;;:12;:10;:12::i;:::-;:26;;;;10114:21;;;;;;;;;;;;;;;;;10078:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10179:14;;;;;;;;;;;10155:39;;:12;:10;:12::i;:::-;:39;;;10196:20;;;;;;;;;;;;;;;;;10147:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19729:16:::1;;;;;;;;;;;19728:17;19747:27;;;;;;;;;;;;;;;;;19720:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19815:4;19796:16;;:23;;;;;;;;;;;;;;;;;;19835:16;;;;;;;;;;19862:26;;;;;;;;;;;;;;;;::::0;::::1;;19628:268:::0;:::o;26136:317::-;26261:4;8120:12;:10;:12::i;:::-;8109:23;;:7;:5;:7::i;:::-;:23;;;8134:16;;;;;;;;;;;;;;;;;8101:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26241:9:::1;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;::::0;14240:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26278:11:::2;26299:6;26292:24;;;26325:4;26292:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26278:53;;26356:1;26350:3;:7;26359:26;;;;;;;;;;;;;;;;;26342:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26413:6;26406:23;;;26430:9;26441:3;26406:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26399:46;;;8162:1:::1;26136:317:::0;;;;:::o;10245:333::-;10308:4;8120:12;:10;:12::i;:::-;8109:23;;:7;:5;:7::i;:::-;:23;;;8134:16;;;;;;;;;;;;;;;;;8101:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10368:1:::1;10333:37;;10341:14;;;;;;;;;;;10333:37;;;;10372:31;;;;;;;;;;;;;;;;;10325:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10472:4;10423:53;;:14;;;;;;;;;;;:30;;;10462:4;10423:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;10478:34;;;;;;;;;;;;;;;;;10415:98;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10533:14;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10526:44;;10245:333:::0;:::o;8326:192::-;8120:12;:10;:12::i;:::-;8109:23;;:7;:5;:7::i;:::-;:23;;;8134:16;;;;;;;;;;;;;;;;;8101:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8435:1:::1;8415:22;;:8;:22;;;;8439:31;;;;;;;;;;;;;;;;::::0;8407:64:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8482:28;8501:8;8482:18;:28::i;:::-;8326:192:::0;:::o;4478:98::-;4531:7;4558:10;4551:17;;4478:98;:::o;24189:223::-;24278:5;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;;14240:56;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24300:7:::1;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;::::0;14240:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24350:6:::2;24320:11;:18;24332:5;24320:18;;;;;;;;;;;;;;;:27;24339:7;24320:27;;;;;;;;;;;;;;;:36;;;;24388:7;24372:32;;24381:5;24372:32;;;24397:6;24372:32;;;;;;:::i;:::-;;;;;;;;14307:1:::1;24189:223:::0;;;;:::o;24699:409::-;24792:24;24819:25;24829:5;24836:7;24819:9;:25::i;:::-;24792:52;;24879:17;24859:16;:37;24855:246;;24941:6;24921:16;:26;;24949:29;;;;;;;;;;;;;;;;;24913:66;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;25023:51;25032:5;25039:7;25067:6;25048:16;:25;25023:8;:51::i;:::-;24855:246;24781:327;24699:409;;;:::o;21219:381::-;21304:4;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;;14240:56;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21325:2:::1;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;::::0;14240:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21340:19:::2;21362:9;:15;21372:4;21362:15;;;;;;;;;;;;;;;;21340:37;;21411:6;21396:11;:21;;21419:31;;;;;;;;;;;;;;;;;21388:63;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21506:6;21492:11;:20;21474:9;:15;21484:4;21474:15;;;;;;;;;;;;;;;:38;;;;21542:6;21525:9;:13;21535:2;21525:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21581:2;21566:26;;21575:4;21566:26;;;21585:6;21566:26;;;;;;:::i;:::-;;;;;;;;21329:271;14307:1:::1;21219:381:::0;;;;:::o;22243:469::-;14000:16;;;;;;;;;;;14018:20;;;;;;;;;;;;;;;;;13992:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22330:7:::1;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;::::0;14240:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22348:6:::2;14414:12;;14399;;13482:18;14392:19;;;;:::i;:::-;:34;;;;:::i;:::-;14381:6;:46;;14429:16;;;;;;;;;;;;;;;;::::0;14373:73:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22383:6:::3;22367:12;;:22;;;;;;;:::i;:::-;;;;;;;;22422:6;22400:9;:18;22410:7;22400:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;22465:7;22444:37;;22461:1;22444:37;;;22474:6;22444:37;;;;;;:::i;:::-;;;;;;;;22494:14;22511:12;:10;:12::i;:::-;22494:29;;22539:23;22555:6;22539:15;:23::i;:::-;22534:171;;;22604:7;22585:35;;22596:6;22585:35;;;22613:6;22585:35;;;;;;:::i;:::-;;;;;;;;22534:171;;;22677:7;22658:35;;22669:6;22658:35;;;22686:6;22658:35;;;;;;:::i;:::-;;;;;;;;22534:171;22356:356;14307:1:::2;14050::::1;22243:469:::0;;:::o;23049:699::-;14116:16;;;;;;;;;;;14134:20;;;;;;;;;;;;;;;;;14108:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23136:7:::1;14268:1;14248:22;;:8;:22;;;;14272:23;;;;;;;;;;;;;;;;::::0;14240:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23156:22:::2;23181:9;:18;23191:7;23181:18;;;;;;;;;;;;;;;;23156:43;;23236:6;23218:14;:24;;23244:27;;;;;;;;;;;;;;;;;23210:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23333:6;23316:14;:23;23295:9;:18;23305:7;23295:18;;;;;;;;;;;;;;;:44;;;;23368:6;23352:12;;:22;;;;;;;:::i;:::-;;;;;;;;23418:1;23392:37;;23401:7;23392:37;;;23422:6;23392:37;;;;;;:::i;:::-;;;;;;;;23442:14;23459:12;:10;:12::i;:::-;23442:29;;23487:23;23503:6;23487:15;:23::i;:::-;:60;;;;23532:14;;;;;;;;;;;23514:33;;:6;:33;;;23487:60;23482:259;;;23590:6;23570:35;;23581:7;23570:35;;;23598:6;23570:35;;;;;;:::i;:::-;;;;;;;;23482:259;;;23666:6;23650:12;;:22;;;;;;;;;;;23714:6;23694:35;;23705:7;23694:35;;;23722:6;23694:35;;;;;;:::i;:::-;;;;;;;;23482:259;23145:603;;14166:1:::1;23049:699:::0;;:::o;8678:191::-;8752:16;8771:6;;;;;;;;;;;8752:25;;8797:8;8788:6;;:17;;;;;;;;;;;;;;;;;;8852:8;8821:40;;8842:8;8821:40;;;;;;;;;;;;8741:128;8678:191;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:329::-;2242:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:119;;;2297:79;;:::i;:::-;2259:119;2417:1;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2388:117;2183:329;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:104::-;5920:7;5949:24;5967:5;5949:24;:::i;:::-;5938:35;;5875:104;;;:::o;5985:138::-;6066:32;6092:5;6066:32;:::i;:::-;6059:5;6056:43;6046:71;;6113:1;6110;6103:12;6046:71;5985:138;:::o;6129:155::-;6183:5;6221:6;6208:20;6199:29;;6237:41;6272:5;6237:41;:::i;:::-;6129:155;;;;:::o;6290:345::-;6357:6;6406:2;6394:9;6385:7;6381:23;6377:32;6374:119;;;6412:79;;:::i;:::-;6374:119;6532:1;6557:61;6610:7;6601:6;6590:9;6586:22;6557:61;:::i;:::-;6547:71;;6503:125;6290:345;;;;:::o;6641:474::-;6709:6;6717;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;7019:2;7045:53;7090:7;7081:6;7070:9;7066:22;7045:53;:::i;:::-;7035:63;;6990:118;6641:474;;;;;:::o;7121:490::-;7197:6;7205;7254:2;7242:9;7233:7;7229:23;7225:32;7222:119;;;7260:79;;:::i;:::-;7222:119;7380:1;7405:53;7450:7;7441:6;7430:9;7426:22;7405:53;:::i;:::-;7395:63;;7351:117;7507:2;7533:61;7586:7;7577:6;7566:9;7562:22;7533:61;:::i;:::-;7523:71;;7478:126;7121:490;;;;;:::o;7617:180::-;7665:77;7662:1;7655:88;7762:4;7759:1;7752:15;7786:4;7783:1;7776:15;7803:320;7847:6;7884:1;7878:4;7874:12;7864:22;;7931:1;7925:4;7921:12;7952:18;7942:81;;8008:4;8000:6;7996:17;7986:27;;7942:81;8070:2;8062:6;8059:14;8039:18;8036:38;8033:84;;8089:18;;:::i;:::-;8033:84;7854:269;7803:320;;;:::o;8129:116::-;8199:21;8214:5;8199:21;:::i;:::-;8192:5;8189:32;8179:60;;8235:1;8232;8225:12;8179:60;8129:116;:::o;8251:137::-;8305:5;8336:6;8330:13;8321:22;;8352:30;8376:5;8352:30;:::i;:::-;8251:137;;;;:::o;8394:345::-;8461:6;8510:2;8498:9;8489:7;8485:23;8481:32;8478:119;;;8516:79;;:::i;:::-;8478:119;8636:1;8661:61;8714:7;8705:6;8694:9;8690:22;8661:61;:::i;:::-;8651:71;;8607:125;8394:345;;;;:::o;8745:180::-;8793:77;8790:1;8783:88;8890:4;8887:1;8880:15;8914:4;8911:1;8904:15;8931:191;8971:3;8990:20;9008:1;8990:20;:::i;:::-;8985:25;;9024:20;9042:1;9024:20;:::i;:::-;9019:25;;9067:1;9064;9060:9;9053:16;;9088:3;9085:1;9082:10;9079:36;;;9095:18;;:::i;:::-;9079:36;8931:191;;;;:::o;9128:143::-;9185:5;9216:6;9210:13;9201:22;;9232:33;9259:5;9232:33;:::i;:::-;9128:143;;;;:::o;9277:351::-;9347:6;9396:2;9384:9;9375:7;9371:23;9367:32;9364:119;;;9402:79;;:::i;:::-;9364:119;9522:1;9547:64;9603:7;9594:6;9583:9;9579:22;9547:64;:::i;:::-;9537:74;;9493:128;9277:351;;;;:::o;9634:60::-;9662:3;9683:5;9676:12;;9634:60;;;:::o;9700:142::-;9750:9;9783:53;9801:34;9810:24;9828:5;9810:24;:::i;:::-;9801:34;:::i;:::-;9783:53;:::i;:::-;9770:66;;9700:142;;;:::o;9848:126::-;9898:9;9931:37;9962:5;9931:37;:::i;:::-;9918:50;;9848:126;;;:::o;9980:134::-;10038:9;10071:37;10102:5;10071:37;:::i;:::-;10058:50;;9980:134;;;:::o;10120:147::-;10215:45;10254:5;10215:45;:::i;:::-;10210:3;10203:58;10120:147;;:::o;10273:348::-;10402:4;10440:2;10429:9;10425:18;10417:26;;10453:79;10529:1;10518:9;10514:17;10505:6;10453:79;:::i;:::-;10542:72;10610:2;10599:9;10595:18;10586:6;10542:72;:::i;:::-;10273:348;;;;;:::o;10627:194::-;10667:4;10687:20;10705:1;10687:20;:::i;:::-;10682:25;;10721:20;10739:1;10721:20;:::i;:::-;10716:25;;10765:1;10762;10758:9;10750:17;;10789:1;10783:4;10780:11;10777:37;;;10794:18;;:::i;:::-;10777:37;10627:194;;;;:::o

Swarm Source

ipfs://202030905529ca65af30a9e71914841b4b02959ce5c2982ff92a874327a369e4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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