ETH Price: $2,420.08 (+1.45%)

Token

CNHC Token (CNHC)
 

Overview

Max Total Supply

5,000,000 CNHC

Holders

22 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
283.219083 CNHC

Value
$0.00
0xed73197d38886cedaf3d1898d2b5d4070b3be2bc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CNHC (CNH Coin) is a stablecoin pegged to the CNH at a ratio of 1:1 and is bound to become the gateway from traditional finance to the blockchain world.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CNHCToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 11: CNHCToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

import "./Pausable.sol";
import "./BlackList.sol";
import "./Votable.sol";
import "./UpgradedStandardToken.sol";
import "./ERC20WithFeeAndRouter.sol";

contract CNHCToken is ERC20WithFeeAndRouter, BlackList, Votable, Pausable {

    address public upgradedAddress;

    bool public deprecated;

    constructor(uint256 _initialSupply, uint8 _decimals) public ERC20WithFeeAndRouter("CNHC Token","CNHC") {
        _setupDecimals(_decimals);
        _mint(_msgSender(), _initialSupply);
    }

    event DestroyedBlackFunds(address indexed blackListedUser, uint256 balance);

    event Deprecate(address newAddress);

    // functions users can call
    // make compatible if deprecated
    function balanceOf(address account) public override view returns (uint256) {
        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).balanceOf(account);
        } else {
            return super.balanceOf(account);
        }
    }

    function totalSupply() public override view returns (uint256) {
        if (deprecated) {
            return IERC20(upgradedAddress).totalSupply();
        } else {
            return super.totalSupply();
        }
    }

    function allowance(address owner, address spender) public override view returns (uint256 remaining) {
        if (deprecated) {
            return IERC20(upgradedAddress).allowance(owner, spender);
        } else {
            return super.allowance(owner, spender);
        }
    }

    // Allow checks of balance at time of deprecation
    function oldBalanceOf(address account) public view returns (uint256) {
        require(deprecated, "CNHCToken: contract NOT deprecated");
        return super.balanceOf(account);
    }

    // normal functions
    function transfer(address recipient, uint256 amount) public override isNotBlackUser(_msgSender()) returns (bool) {
        require(!isBlackListUser(recipient), "BlackList: recipient address is in blacklist");

        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferByLegacy(_msgSender(), recipient, amount);
        } else {
            return super.transfer(recipient, amount);
        }
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override isNotBlackUser(_msgSender()) returns (bool) {
        require(!isBlackListUser(sender), "BlackList: sender address is in blacklist");
        require(!isBlackListUser(recipient), "BlackList: recipient address is in blacklist");

        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).transferFromByLegacy(_msgSender(), sender, recipient, amount);
        } else {
            return super.transferFrom(sender, recipient, amount);
        }
    }

    function approve(address spender, uint256 amount) public override isNotBlackUser(_msgSender()) returns (bool) {
        require(!isBlackListUser(spender), "BlackList: spender address is in blacklist");

        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).approveByLegacy(_msgSender(), spender, amount);
        } else {
            return super.approve(spender, amount);
        }
    }

    function increaseAllowance(address spender, uint256 addedValue) public override isNotBlackUser(_msgSender()) returns (bool) {
        require(!isBlackListUser(spender), "BlackList: spender address is in blacklist");

        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).increaseApprovalByLegacy(_msgSender(), spender, addedValue);
        } else {
            return super.increaseAllowance(spender, addedValue);
        }
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public override isNotBlackUser(_msgSender()) returns (bool) {
        require(!isBlackListUser(spender), "BlackList: spender address is in blacklist");

        if (deprecated) {
            return UpgradedStandardToken(upgradedAddress).decreaseApprovalByLegacy(_msgSender(), spender, subtractedValue);
        } else {
            return super.decreaseAllowance(spender, subtractedValue);
        }
    }

    function burn(uint256 amount) public {
        require(!deprecated, "CNHCToken: contract was deprecated");
        super._burn(_msgSender(), amount);
    }

    // functions only owner can call
    // open proposals
    function openMintProposal(address _account, uint256 _amount) external onlyOwner{
        _openProposal(abi.encodeWithSignature("mint(address,uint256)", _account, _amount));
    }

    function openDestroyBlackFundsProposal(address _user) external onlyOwner{
        _openProposal(abi.encodeWithSignature("destroyBlackFunds(address)", _user));
    }

    // onlySelf: mint & burn
    function mint(address _account, uint256 _amount) public onlySelf {
        require(!deprecated, "CNHCToken: contract was deprecated");
        super._mint(_account, _amount);
    }

    function destroyBlackFunds(address _user) public onlySelf {
        require(!deprecated, "CNHCToken: contract was deprecated");
        require(isBlackListUser(_user), "CNHCToken: only fund in blacklist address can be destroy");
        uint256 dirtyFunds = balanceOf(_user);
        super._burn(_user, dirtyFunds);
        emit DestroyedBlackFunds(_user, dirtyFunds);
    }

    // pause
    function pause() public onlyOwner {
        require(!deprecated, "CNHCToken: contract was deprecated");
        super._pause();
    }

    function unpause() public onlyOwner {
        require(!deprecated, "CNHCToken: contract was deprecated");
        super._unpause();
    }

    // deprecate
    function deprecate(address _upgradedAddress) public onlyOwner {
        require(!deprecated, "CNHCToken: contract was deprecated");
        require(_upgradedAddress != address(0));
        deprecated = true;
        upgradedAddress = _upgradedAddress;
        emit Deprecate(_upgradedAddress);
    }

    // hook before _transfer()/_mint()/_burn()
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        require(!paused(), "Pausable: token transfer while paused");
    }

    function transferByBatch(address[] memory _recipients, uint256[] memory _amounts) public isNotBlackUser(_msgSender()) {
        if (deprecated) {
            for(uint256 i=0; i<_recipients.length; i++){
                if(!isBlackListUser(_recipients[i])){
                    return UpgradedStandardToken(upgradedAddress).transferByBatchEachByLegacy(_recipients[i], _amounts[i]);
                }
            }
        } else {
            for(uint256 i=0; i<_recipients.length; i++){
                if(!isBlackListUser(_recipients[i])){
                    return super.transferByBatchEach(_recipients[i], _amounts[i]);
                }
            }
        }
    }

    function transferFromByBatch(address[] memory _senders, address[] memory _recipients, uint256[] memory _amounts) public isNotBlackUser(_msgSender()){
        if (deprecated) {
            for(uint256 i=0; i<_senders.length; i++){
                if(!isBlackListUser(_senders[i]) && !isBlackListUser(_recipients[i])){
                    UpgradedStandardToken(upgradedAddress).transferFromByBatchEachByLegacy(_msgSender(), _senders[i], _recipients[i], _amounts[i]);
                }
            }
        } else {
            for(uint256 i=0; i<_senders.length; i++){
                if(!isBlackListUser(_senders[i]) && !isBlackListUser(_recipients[i])){
                    super.transferFromByBatchEach(_senders[i], _recipients[i], _amounts[i]);
                }
            }
        }
    }

    function transferFromByRouter(address[] memory _from,address[] memory _to,uint256[] memory _value,bytes32[] memory _r,bytes32[] memory _s,uint8[] memory _v) public onlyRouter{
        if (deprecated) {
            for(uint256 i=0; i<_from.length; i++){
                if(!isBlackListUser(_from[i]) && !isBlackListUser(_to[i])){
                    UpgradedStandardToken(upgradedAddress).transferFromByRouterEachByLegacy(_msgSender(), _from[i], _to[i], _value[i],_r[i],_s[i],_v[i]);
                }
            }
        } else {
            for(uint256 i=0; i<_from.length; i++){
                if(!isBlackListUser(_from[i]) && !isBlackListUser(_to[i])){
                    super.transferFromByRouterEach(_from[i], _to[i], _value[i],_r[i],_s[i],_v[i]);
                }
            }
        }
    }


}

File 1 of 11: BlackList.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

import "./Ownable.sol";

contract BlackList is Ownable{

    mapping (address => bool) public blackList;

    event AddedBlackList(address _user);

    event RemovedBlackList(address _user);

    constructor() internal{}
    
    function addBlackList(address _user) external onlyOwner {
        blackList[_user] = true;
        emit AddedBlackList(_user);
    }

    function removeBlackList(address _user) external onlyOwner {
        blackList[_user] = false;
        emit RemovedBlackList(_user);
    }

    function isBlackListUser(address _user) public view returns (bool){
        return blackList[_user];
    }

    modifier isNotBlackUser(address _user) {
        require(!isBlackListUser(_user), "BlackList: this address is in blacklist");
        _;
    }

}

File 3 of 11: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with 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 payable) {
        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 4 of 11: ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

import "./Context.sol";
import "./IERC20.sol";
import "./SafeMath.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 Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @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) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless {_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 returns (uint8) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public virtual view 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");

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

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

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    /**
     * @dev 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 {
        _decimals = decimals_;
    }

    /**
     * @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 from, address to, uint256 amount) internal virtual { }
}

File 5 of 11: ERC20WithFeeAndRouter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

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

contract ERC20WithFeeAndRouter is ERC20, Ownable {

  uint256 public basisPointsRate = 0;
  uint256 public maximumFee = 0;
  uint256 public routerFee = 18000000;
  string public prefix = "\x19Ethereum Signed Message:\n32";
  address public receivingFeeAddress;
  mapping (address => bool) private _routers;

  constructor (string memory name, string memory symbol) public ERC20(name, symbol) {}

  function addRouter(address _router) public onlyOwner {
      _routers[_router] = true;
  }

  function removeRouter(address _router) public onlyOwner {
      _routers[_router] = false;
  }

  function updateReceivingFeeAddress(address _receivingFeeAddress) public onlyOwner{
    receivingFeeAddress = _receivingFeeAddress;
  }

  function isRouter(address _router) public view returns (bool) {
      return _routers[_router];
  }

  function _isByRouter() internal view returns (bool) {
      return _routers[msg.sender];
  }

  function _calcFee(uint256 _value) internal view returns (uint256) {
    uint256 fee = (_value.mul(basisPointsRate)).div(10000);
    if (fee > maximumFee) {
        fee = maximumFee;
    }
    return fee;
  }

  function transfer(address _to, uint256 _value) public override virtual returns (bool) {
    uint256 fee = _calcFee(_value);
    uint256 sendAmount = _value.sub(fee);
    super.transfer(_to, sendAmount);
    if (fee > 0) {
      super.transfer(receivingFeeAddress, fee);
    }
    return true;
  }

  function transferFrom(address _from, address _to, uint256 _value) public override virtual returns (bool) {
    require(_to != address(0), "ERC20WithFee: transfer to the zero address");
    require(_value <= balanceOf(_from), "ERC20WithFee: transfer amount exceeds balance");
    require(_value <= allowance(_from, msg.sender), "ERC20WithFee: allowance amount exceeds allowed");
    uint256 fee = _calcFee(_value);
    uint256 sendAmount = _value.sub(fee);
    _transfer(_from, _to, sendAmount);
    if (fee > 0) {
      _transfer(_from, receivingFeeAddress, fee);
    }
    _approve(_from, msg.sender, allowance(_from, msg.sender).sub(_value, "ERC20WithFee: transfer amount exceeds allowance"));
    return true;

  }

  function setFeeParams(uint256 newBasisPoints, uint256 newMaxFee) public onlyOwner {
    basisPointsRate = newBasisPoints;
    maximumFee = newMaxFee.mul(uint256(10)**decimals());
  }

  function setRouterFee(uint256 newRouterFee) public onlyOwner {
    routerFee = newRouterFee.mul(uint256(10)**decimals());
  }

  function transferByBatchEach(address _to, uint256 _value) public{
    uint256 fee = _calcFee(_value);
    uint256 sendAmount = _value.sub(fee);
    super.transfer(_to, sendAmount);
    if (fee > 0) {
      super.transfer(receivingFeeAddress, fee);
    }
  }

  function transferFromByBatchEach(address _from, address _to, uint256 _value) public{
    if(_to != address(0) && _value <= balanceOf(_from) && _value <= allowance(_from, msg.sender)){
      uint256 fee = _calcFee(_value);
      uint256 sendAmount = _value.sub(fee);
      _transfer(_from, _to, sendAmount);
      if (fee > 0) {
        _transfer(_from, receivingFeeAddress, fee);
      }
      _approve(_from, msg.sender, allowance(_from, msg.sender).sub(_value, "ERC20WithFee: transfer amount exceeds allowance"));
    }
  }

  // 验证并发送转账交易
  function transferFromByRouterEach(address _from,address _to,uint256 _value,bytes32 _r,bytes32 _s,uint8 _v) public onlyRouter{
    if(getVerifySignatureResult(_from,_to,_value, _r, _s, _v) == _from){
      _transferFromByRouter(_from,_to,_value);
    }
  }

  function _transferFromByRouter(address _from,address _to,uint256 _value) private{
    if(_to != address(0) && _value <= balanceOf(_from)){
      uint256 fee = _calcFee(_value);
      uint256 sendAmount = _value.sub(fee);
      sendAmount = sendAmount.sub(routerFee);
      _transfer(_from, _to, sendAmount);
      if (fee > 0) {
        _transfer(_from, receivingFeeAddress, fee);
      }
      if(routerFee > 0){
        _transfer(_from,tx.origin,routerFee);
      }
    }
  }

  // 查看交易签名对应的地址
  function getVerifySignatureResult(address _from,address _to,uint256 _value,bytes32 _r,bytes32 _s,uint8 _v) public view returns(address){
    return ecrecover(getSha3Result(_from,_to,_value), _v, _r, _s);
  }

  // 获取sha3加密结果
  function getSha3Result(address _from,address _to,uint256 _value) public view returns(bytes32){
    return keccak256(abi.encodePacked(prefix,keccak256(abi.encodePacked(_from,_to,_value,address(this)))));
  }

  modifier onlyRouter(){
    require(_routers[msg.sender], 'ERC20WithFeeAndRouter: caller is not the router');
    _;
  }
}

File 6 of 11: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.6.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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;
    }
}

File 8 of 11: Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "./Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

pragma solidity ^0.6.0;

/**
 * @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, 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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * 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);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 10 of 11: UpgradedStandardToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

import "./ERC20WithFeeAndRouter.sol";

abstract contract UpgradedStandardToken is ERC20WithFeeAndRouter {
    uint256 public _totalSupply;
    function transferByLegacy(address from, address to, uint256 value) public virtual returns (bool);
    function transferFromByLegacy(address sender, address from, address spender, uint256 value) public virtual returns (bool);
    function approveByLegacy(address from, address spender, uint256 value) public virtual returns (bool);
    function increaseApprovalByLegacy(address from, address spender, uint256 addedValue) public virtual returns (bool);
    function decreaseApprovalByLegacy(address from, address spender, uint256 subtractedValue) public virtual returns (bool);
    function transferByBatchEachByLegacy(address _to, uint256 _value) public virtual;
    function transferFromByBatchEachByLegacy(address sender, address _from, address _to, uint256 _value) public virtual;
    function transferFromByRouterEachByLegacy(address sender, address _from,address _to,uint256 _value,bytes32 _r,bytes32 _s,uint8 _v) public virtual;
}

File 11 of 11: Votable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;

import "./Ownable.sol";

contract Votable is Ownable{

    // voter->bool
    mapping(address => bool) public voters;

    // voters count
    uint16 public votersCount = 0;

    // pid->proposal
    mapping(uint16 => Proposal) public proposals;

    // next pid, start with 10000
    uint16 public nextPid = 10000;

    constructor() internal{
        // init owner as a voter
        voters[owner()] = true;
        votersCount++;
        emit AddVoter(owner());
    }

    // struct of proposal
    struct Proposal {
        uint16 pid;
        uint16 count;
        bool done;
        bytes payload;
        // voter->bool
        mapping(address => bool) votes;
    }

    // events
    event OpenProposal(uint16 pid);

    event CloseProposal(uint16 pid);

    event DoneProposal(uint16 pid);

    event VoteProposal(uint16 pid, address voter);

    event AddVoter(address voter);

    event RemoveVoter(address voter);

    // modifiers
    modifier proposalExistAndNotDone(uint16 _pid){
        require(proposals[_pid].pid == _pid, "Votable: proposal not exists");
        require(!proposals[_pid].done, "Votable: proposal is done");
        _;
    }

    modifier onlyVoters(){
        require(voters[_msgSender()], "Votable: only voter can call");
        _;
    }

    modifier onlySelf(){
        require(_msgSender() == address(this), "Votable: only self can call");
        _;
    }

    // for inheriting
    function _openProposal(bytes memory payload) internal{
        uint16 pid = nextPid++;
        proposals[pid] = Proposal(pid,0,false,payload);
        emit OpenProposal(pid);
    }

    // vote
    function voteProposal(uint16 _pid) public onlyVoters proposalExistAndNotDone(_pid){
        Proposal storage proposal = proposals[_pid];
        require(!proposal.votes[_msgSender()], "Votable: duplicate voting is not allowed");

        proposal.votes[_msgSender()] = true;
        proposal.count++;
        emit VoteProposal(_pid, _msgSender());

        // judge
        _judge(proposal);
    }

    function _judge(Proposal storage _proposal) private{
        if(_proposal.count > votersCount/2){
            (bool success, ) = address(this).call(_proposal.payload);
            require(success, "Votable: call payload failed");
            _proposal.done = true;
            emit DoneProposal(_proposal.pid);
        }
    }

    // hasVoted
    function hasVoted(uint16 _pid) public view returns(bool){
        Proposal storage proposal = proposals[_pid];
        require(proposal.pid == _pid, "Votable: proposal not exists");
        return proposal.votes[_msgSender()];
    }

    // translate proposal
    // function translateProposal(uint16 _pid) external view returns(bytes32, address, uint256){
    //     Proposal memory proposal = proposals[_pid];
    //     require(proposal.pid == _pid, "Votable: proposal not exists");
    //     return abi.decode(abi.encodePacked(bytes28(0), proposal.payload),(bytes32,address,uint256));
    // }

    // onlySelf: match to proposals
    function addVoter(address _voter) external onlySelf{
        require(!voters[_voter], "Votable: this address is already a voter");
        voters[_voter] = true;
        votersCount++;
        emit AddVoter(_voter);
    }

    function removeVoter(address _voter) external onlySelf{
        require(voters[_voter], "Votable: this address is not a voter");
        require(_voter != owner(), "Votable: owner can not be removed");
        voters[_voter] = false;
        votersCount--;
        emit RemoveVoter(_voter);
    }

    // onlyOwner
    // open proposals
    function openAddVoterProposal(address _voter) external onlyOwner{
        _openProposal(abi.encodeWithSignature("addVoter(address)",_voter));
    }

    function openRemoveVoterProposal(address _voter) external onlyOwner{
        _openProposal(abi.encodeWithSignature("removeVoter(address)",_voter));
    }

    // close proposal
    function closeProposal(uint16 _pid) external proposalExistAndNotDone(_pid) onlyOwner{
        proposals[_pid].done = true;
        emit CloseProposal(_pid);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"AddVoter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"pid","type":"uint16"}],"name":"CloseProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"blackListedUser","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"pid","type":"uint16"}],"name":"DoneProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"pid","type":"uint16"}],"name":"OpenProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"RemoveVoter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"RemovedBlackList","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"pid","type":"uint16"},{"indexed":false,"internalType":"address","name":"voter","type":"address"}],"name":"VoteProposal","type":"event"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"addRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"addVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","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":[],"name":"basisPointsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_pid","type":"uint16"}],"name":"closeProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deprecated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"destroyBlackFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"getSha3Result","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"}],"name":"getVerifySignatureResult","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_pid","type":"uint16"}],"name":"hasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isBlackListUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"isRouter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPid","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"oldBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"openAddVoterProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"openDestroyBlackFundsProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"openMintProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"openRemoveVoterProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"proposals","outputs":[{"internalType":"uint16","name":"pid","type":"uint16"},{"internalType":"uint16","name":"count","type":"uint16"},{"internalType":"bool","name":"done","type":"bool"},{"internalType":"bytes","name":"payload","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receivingFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"removeRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"removeVoter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBasisPoints","type":"uint256"},{"internalType":"uint256","name":"newMaxFee","type":"uint256"}],"name":"setFeeParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRouterFee","type":"uint256"}],"name":"setRouterFee","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":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"transferByBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferByBatchEach","outputs":[],"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":"_senders","type":"address[]"},{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"transferFromByBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromByBatchEach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_from","type":"address[]"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"},{"internalType":"bytes32[]","name":"_r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_s","type":"bytes32[]"},{"internalType":"uint8[]","name":"_v","type":"uint8[]"}],"name":"transferFromByRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"},{"internalType":"uint8","name":"_v","type":"uint8"}],"name":"transferFromByRouterEach","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receivingFeeAddress","type":"address"}],"name":"updateReceivingFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_pid","type":"uint16"}],"name":"voteProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votersCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"}]

60006006819055600755630112a88060085560c0604052601c60808190527f19457468657265756d205369676e6564204d6573736167653a0a33320000000060a090815262000052916009919062000483565b50600e805461ffff19908116909155601080549091166127101790553480156200007b57600080fd5b50604051620054503803806200545083398181016040526040811015620000a157600080fd5b508051602091820151604080518082018252600a81526921a72421902a37b5b2b760b11b81860190815282518084019093526004835263434e484360e01b9583019590955280519394929390928391839162000101916003919062000483565b5080516200011790600490602084019062000483565b50506005805460ff19166012179055506200013162000270565b600580546001600160a01b039290921661010002610100600160a81b03199092169190911790556200016262000270565b6001600160a01b031660006001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060019050600d6000620001b562000274565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600e805461ffff19811661ffff9182166001019091161790557f0ad2eca75347acd5160276fe4b5dad46987e4ff4af9e574195e3e9bc15d7e0ff6200022162000274565b604080516001600160a01b039092168252519081900360200190a16010805462ff000019169055620002538162000288565b620002686200026162000270565b836200029e565b50506200051f565b3390565b60055461010090046001600160a01b031690565b6005805460ff191660ff92909216919091179055565b6001600160a01b038216620002fa576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200030860008383620003ad565b62000324816002546200041260201b62003bf01790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200035791839062003bf062000412821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b620003c58383836200040d60201b62001c9b1760201c565b620003cf62000474565b156200040d5760405162461bcd60e51b81526004018080602001828103825260258152602001806200542b6025913960400191505060405180910390fd5b505050565b6000828201838110156200046d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60105462010000900460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004c657805160ff1916838001178555620004f6565b82800160010185558215620004f6579182015b82811115620004f6578251825591602001919060010190620004d9565b506200050492915062000508565b5090565b5b8082111562000504576000815560010162000509565b614efc806200052f6000396000f3fe608060405234801561001057600080fd5b50600436106103a35760003560e01c80638456cb59116101e9578063c497efa31161010f578063e4061dd8116100ad578063f3bdc2281161007c578063f3bdc22814611193578063f3d7d282146111b9578063f4ab9adf146111df578063fb27ec0914611205576103a3565b8063e4061dd814610fd4578063e4997dc514611020578063f244579f14611046578063f2fde38b1461116d576103a3565b8063dd644f72116100e9578063dd644f7214610f68578063dd975f2914610f70578063de38646f14610f8d578063de513e3d14610fb3576103a3565b8063c497efa314610e61578063d1dc5a8814610f19578063dd62ed3e14610f3a576103a3565b8063a3ec138d11610187578063ae2deb6111610156578063ae2deb6114610933578063ae531e7d14610ade578063b7a3446c14610b04578063b846476014610b2a576103a3565b8063a3ec138d14610869578063a457c2d71461088f578063a9059cbb146108bb578063a9f42f41146108e7576103a3565b806395d89b41116101c357806395d89b411461082e57806398c07938146108365780639d2ec1881461083e5780639f17235e14610861576103a3565b80638456cb59146107f857806386c1ff68146108005780638da5cb5b14610826576103a3565b8063313ce567116102ce5780634838d1651161026c5780636ca525201161023b5780636ca525201461079c57806370a08231146107c2578063715018a6146107e857806375dadb32146107f0576103a3565b80634838d165146107275780635c975abb1461074d57806368097127146107555780636ae0b15414610776576103a3565b80633f4ba83a116102a85780633f4ba83a146106b757806340c10f19146106bf57806342966c68146106eb57806344d664af14610708576103a3565b8063313ce567146106655780633539071414610683578063395093511461068b576103a3565b806315bc97b91161034657806324ca984e1161031557806324ca984e146105bf57806326976e3f146105e55780632b9acf69146106095780632eda8a9a1461063f576103a3565b806315bc97b91461050d578063167eba3c1461053957806318160ddd1461058157806323b872dd14610589576103a3565b8063095ea7b311610382578063095ea7b3146104795780630e136b19146104b95780630ecb93c0146104c157806311be0c6d146104e7576103a3565b8062c19330146103a857806306fdde03146103d65780630753c30c14610453575b600080fd5b6103d4600480360360408110156103be57600080fd5b506001600160a01b03813516906020013561120d565b005b6103de6112d7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610418578181015183820152602001610400565b50505050905090810190601f1680156104455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103d46004803603602081101561046957600080fd5b50356001600160a01b031661136e565b6104a56004803603604081101561048f57600080fd5b506001600160a01b0381351690602001356114c6565b604080519115158252519081900360200190f35b6104a561162b565b6103d4600480360360208110156104d757600080fd5b50356001600160a01b031661163b565b6103d4600480360360208110156104fd57600080fd5b50356001600160a01b03166116f3565b6103d46004803603604081101561052357600080fd5b506001600160a01b0381351690602001356117b8565b61056f6004803603606081101561054f57600080fd5b506001600160a01b03813581169160208101359091169060400135611802565b60408051918252519081900360200190f35b61056f6118ec565b6104a56004803603606081101561059f57600080fd5b506001600160a01b03813581169160208101359091169060400135611991565b6103d4600480360360208110156105d557600080fd5b50356001600160a01b0316611b4e565b6105ed611bcf565b604080516001600160a01b039092168252519081900360200190f35b6103d46004803603606081101561061f57600080fd5b506001600160a01b03813581169160208101359091169060400135611be5565b6103d46004803603602081101561065557600080fd5b50356001600160a01b0316611ca0565b61066d611d62565b6040805160ff9092168252519081900360200190f35b61056f611d6b565b6104a5600480360360408110156106a157600080fd5b506001600160a01b038135169060200135611d71565b6103d4611e41565b6103d4600480360360408110156106d557600080fd5b506001600160a01b038135169060200135611ef1565b6103d46004803603602081101561070157600080fd5b5035611fa8565b610710612002565b6040805161ffff9092168252519081900360200190f35b6104a56004803603602081101561073d57600080fd5b50356001600160a01b031661200c565b6104a5612021565b6104a56004803603602081101561076b57600080fd5b503561ffff16612030565b6103d46004803603602081101561078c57600080fd5b50356001600160a01b03166120d2565b6104a5600480360360208110156107b257600080fd5b50356001600160a01b0316612150565b61056f600480360360208110156107d857600080fd5b50356001600160a01b031661216e565b6103d4612228565b6103de6122e2565b6103d4612370565b6103d46004803603602081101561081657600080fd5b50356001600160a01b031661241e565b6105ed6125a3565b6103de6125b7565b610710612618565b6103d46004803603604081101561085457600080fd5b5080359060200135612622565b6105ed6126a3565b6104a56004803603602081101561087f57600080fd5b50356001600160a01b03166126b2565b6104a5600480360360408110156108a557600080fd5b506001600160a01b0381351690602001356126c7565b6104a5600480360360408110156108d157600080fd5b506001600160a01b038135169060200135612797565b6103d4600480360360c08110156108fd57600080fd5b5080356001600160a01b039081169160208101359091169060408101359060608101359060808101359060a0013560ff16612867565b6103d46004803603606081101561094957600080fd5b81019060208101813564010000000081111561096457600080fd5b82018360208201111561097657600080fd5b8035906020019184602083028401116401000000008311171561099857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109e857600080fd5b8201836020820111156109fa57600080fd5b80359060200191846020830284011164010000000083111715610a1c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610a6c57600080fd5b820183602082011115610a7e57600080fd5b80359060200191846020830284011164010000000083111715610aa057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506128ef945050505050565b6103d460048036036020811015610af457600080fd5b50356001600160a01b0316612b02565b61056f60048036036020811015610b1a57600080fd5b50356001600160a01b0316612b99565b6103d4600480360360c0811015610b4057600080fd5b810190602081018135640100000000811115610b5b57600080fd5b820183602082011115610b6d57600080fd5b80359060200191846020830284011164010000000083111715610b8f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610bdf57600080fd5b820183602082011115610bf157600080fd5b80359060200191846020830284011164010000000083111715610c1357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610c6357600080fd5b820183602082011115610c7557600080fd5b80359060200191846020830284011164010000000083111715610c9757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610ce757600080fd5b820183602082011115610cf957600080fd5b80359060200191846020830284011164010000000083111715610d1b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610d6b57600080fd5b820183602082011115610d7d57600080fd5b80359060200191846020830284011164010000000083111715610d9f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610def57600080fd5b820183602082011115610e0157600080fd5b80359060200191846020830284011164010000000083111715610e2357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612bf3945050505050565b610e8260048036036020811015610e7757600080fd5b503561ffff16612e93565b604051808561ffff1681526020018461ffff168152602001831515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610edb578181015183820152602001610ec3565b50505050905090810190601f168015610f085780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6103d460048036036020811015610f2f57600080fd5b503561ffff16612f55565b61056f60048036036040811015610f5057600080fd5b506001600160a01b03813581169160200135166131d6565b61056f6132a5565b6103d460048036036020811015610f8657600080fd5b50356132ab565b6103d460048036036020811015610fa357600080fd5b50356001600160a01b0316613319565b6103d460048036036020811015610fc957600080fd5b503561ffff166133db565b6105ed600480360360c0811015610fea57600080fd5b5080356001600160a01b039081169160208101359091169060408101359060608101359060808101359060a0013560ff16613572565b6103d46004803603602081101561103657600080fd5b50356001600160a01b03166135ee565b6103d46004803603604081101561105c57600080fd5b81019060208101813564010000000081111561107757600080fd5b82018360208201111561108957600080fd5b803590602001918460208302840111640100000000831117156110ab57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156110fb57600080fd5b82018360208201111561110d57600080fd5b8035906020019184602083028401116401000000008311171561112f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506136a3945050505050565b6103d46004803603602081101561118357600080fd5b50356001600160a01b0316613836565b6103d4600480360360208110156111a957600080fd5b50356001600160a01b031661394c565b6104a5600480360360208110156111cf57600080fd5b50356001600160a01b0316613a97565b6103d4600480360360208110156111f557600080fd5b50356001600160a01b0316613ab5565b61056f613bea565b611215613c4a565b60055461010090046001600160a01b0390811691161461126a576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167f40c10f19000000000000000000000000000000000000000000000000000000001790526112d390613c4e565b5050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113635780601f1061133857610100808354040283529160200191611363565b820191906000526020600020905b81548152906001019060200180831161134657829003601f168201915b505050505090505b90565b611376613c4a565b60055461010090046001600160a01b039081169116146113cb576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b601054600160b81b900460ff16156114145760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b6001600160a01b03811661142757600080fd5b60108054600160b81b7fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909116177fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000006001600160a01b0384169081029190911790915560408051918252517fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e916020908290030190a150565b60006114d0613c4a565b6114d981612150565b156115155760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b61151e84612150565b1561155a5760405162461bcd60e51b815260040180806020018281038252602a815260200180614aa8602a913960400191505060405180910390fd5b601054600160b81b900460ff161561161757601054630100000090046001600160a01b031663aee92d3361158c613c4a565b86866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156115e457600080fd5b505af11580156115f8573d6000803e3d6000fd5b505050506040513d602081101561160e57600080fd5b50519150611624565b6116218484613d34565b91505b5092915050565b601054600160b81b900460ff1681565b611643613c4a565b60055461010090046001600160a01b03908116911614611698576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19166001179055815192835290517f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc9281900390910190a150565b6116fb613c4a565b60055461010090046001600160a01b03908116911614611750576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167ff3bdc228000000000000000000000000000000000000000000000000000000001790526117b590613c4e565b50565b60006117c382613d51565b905060006117d18383613d8b565b90506117dd8482613dcd565b5081156117fc57600a546117fa906001600160a01b031683613dcd565b505b50505050565b600060098484843060405160200180856001600160a01b031660601b8152601401846001600160a01b031660601b8152601401838152602001826001600160a01b031660601b81526014019450505050506040516020818303038152906040528051906020012060405160200180838054600181600116156101000203166002900480156118c75780601f106118a55761010080835404028352918201916118c7565b820191906000526020600020905b8154815290600101906020018083116118b3575b5050918252506040805180830381526020928301909152805191012095945050505050565b601054600090600160b81b900460ff161561198257601060039054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d602081101561197957600080fd5b5051905061136b565b61198a613de1565b905061136b565b600061199b613c4a565b6119a481612150565b156119e05760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b6119e985612150565b15611a255760405162461bcd60e51b8152600401808060200182810382526029815260200180614bbf6029913960400191505060405180910390fd5b611a2e84612150565b15611a6a5760405162461bcd60e51b815260040180806020018281038252602c815260200180614b01602c913960400191505060405180910390fd5b601054600160b81b900460ff1615611b3857601054630100000090046001600160a01b0316638b477adb611a9c613c4a565b8787876040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b03168152602001828152602001945050505050602060405180830381600087803b158015611b0557600080fd5b505af1158015611b19573d6000803e3d6000fd5b505050506040513d6020811015611b2f57600080fd5b50519150611b46565b611b43858585613de7565b91505b509392505050565b611b56613c4a565b60055461010090046001600160a01b03908116911614611bab576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b601054630100000090046001600160a01b031681565b6001600160a01b03821615801590611c055750611c018361216e565b8111155b8015611c1a5750611c1683336131d6565b8111155b15611c9b576000611c2a82613d51565b90506000611c388383613d8b565b9050611c45858583613f39565b8115611c6357600a54611c639086906001600160a01b031684613f39565b6117fa8533611c96866040518060600160405280602f8152602001614ad2602f9139611c8f8b336131d6565b9190614094565b61412b565b505050565b611ca8613c4a565b60055461010090046001600160a01b03908116911614611cfd576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167f86c1ff68000000000000000000000000000000000000000000000000000000001790526117b590613c4e565b60055460ff1690565b60075481565b6000611d7b613c4a565b611d8481612150565b15611dc05760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b611dc984612150565b15611e055760405162461bcd60e51b815260040180806020018281038252602a815260200180614aa8602a913960400191505060405180910390fd5b601054600160b81b900460ff1615611e3757601054630100000090046001600160a01b031663a953815761158c613c4a565b6116218484614217565b611e49613c4a565b60055461010090046001600160a01b03908116911614611e9e576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b601054600160b81b900460ff1615611ee75760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b611eef614265565b565b30611efa613c4a565b6001600160a01b031614611f55576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b601054600160b81b900460ff1615611f9e5760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b6112d38282614314565b601054600160b81b900460ff1615611ff15760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b6117b5611ffc613c4a565b82614404565b60105461ffff1681565b600c6020526000908152604090205460ff1681565b60105462010000900460ff1690565b61ffff8082166000818152600f6020526040812080549193909291161461209e576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2070726f706f73616c206e6f742065786973747300000000604482015290519081900360640190fd5b8060020160006120ac613c4a565b6001600160a01b0316815260208101919091526040016000205460ff169150505b919050565b6120da613c4a565b60055461010090046001600160a01b0390811691161461212f576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6001600160a01b03166000908152600c602052604090205460ff1690565b601054600090600160b81b900460ff161561221857601060039054906101000a90046001600160a01b03166001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156121e557600080fd5b505afa1580156121f9573d6000803e3d6000fd5b505050506040513d602081101561220f57600080fd5b505190506120cd565b61222182614500565b90506120cd565b612230613c4a565b60055461010090046001600160a01b03908116911614612285576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6009805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156123685780601f1061233d57610100808354040283529160200191612368565b820191906000526020600020905b81548152906001019060200180831161234b57829003601f168201915b505050505081565b612378613c4a565b60055461010090046001600160a01b039081169116146123cd576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b601054600160b81b900460ff16156124165760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b611eef61451b565b30612427613c4a565b6001600160a01b031614612482576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600d602052604090205460ff166124d95760405162461bcd60e51b8152600401808060200182810382526024815260200180614e3b6024913960400191505060405180910390fd5b6124e16125a3565b6001600160a01b0316816001600160a01b031614156125315760405162461bcd60e51b8152600401808060200182810382526021815260200180614e5f6021913960400191505060405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff19169055600e805461ffff19811661ffff91821660001901909116179055815192835290517f1c959242c0718835c6a0d1fdc1c02056059ed6025bd0bfb268523cf23825ac4f9281900390910190a150565b60055461010090046001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113635780601f1061133857610100808354040283529160200191611363565b600e5461ffff1681565b61262a613c4a565b60055461010090046001600160a01b0390811691161461267f576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b600682905561269c61268f611d62565b829060ff16600a0a6145b3565b6007555050565b600a546001600160a01b031681565b600d6020526000908152604090205460ff1681565b60006126d1613c4a565b6126da81612150565b156127165760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b61271f84612150565b1561275b5760405162461bcd60e51b815260040180806020018281038252602a815260200180614aa8602a913960400191505060405180910390fd5b601054600160b81b900460ff161561278d57601054630100000090046001600160a01b0316636001279f61158c613c4a565b611621848461460c565b60006127a1613c4a565b6127aa81612150565b156127e65760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b6127ef84612150565b1561282b5760405162461bcd60e51b815260040180806020018281038252602c815260200180614b01602c913960400191505060405180910390fd5b601054600160b81b900460ff161561285d57601054630100000090046001600160a01b0316636e18980a61158c613c4a565b6116218484614674565b336000908152600b602052604090205460ff166128b55760405162461bcd60e51b815260040180806020018281038252602f815260200180614d74602f913960400191505060405180910390fd5b856001600160a01b03166128cd878787878787613572565b6001600160a01b031614156128e7576128e78686866146c4565b505050505050565b6128f7613c4a565b61290081612150565b1561293c5760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b601054600160b81b900460ff1615612a7d5760005b8451811015612a775761297685828151811061296957fe5b6020026020010151612150565b15801561298f575061298d84828151811061296957fe5b155b15612a6f57601054630100000090046001600160a01b031663059237a36129b4613c4a565b8784815181106129c057fe5b60200260200101518785815181106129d457fe5b60200260200101518786815181106129e857fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b03168152602001828152602001945050505050600060405180830381600087803b158015612a5657600080fd5b505af1158015612a6a573d6000803e3d6000fd5b505050505b600101612951565b506117fc565b60005b84518110156117fa57612a9885828151811061296957fe5b158015612ab15750612aaf84828151811061296957fe5b155b15612afa57612afa858281518110612ac557fe5b6020026020010151858381518110612ad957fe5b6020026020010151858481518110612aed57fe5b6020026020010151611be5565b600101612a80565b612b0a613c4a565b60055461010090046001600160a01b03908116911614612b5f576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b601054600090600160b81b900460ff16612be45760405162461bcd60e51b8152600401808060200182810382526022815260200180614e806022913960400191505060405180910390fd5b612bed82614500565b92915050565b336000908152600b602052604090205460ff16612c415760405162461bcd60e51b815260040180806020018281038252602f815260200180614d74602f913960400191505060405180910390fd5b601054600160b81b900460ff1615612dc95760005b8651811015612dc357612c6e87828151811061296957fe5b158015612c875750612c8586828151811061296957fe5b155b15612dbb57601054630100000090046001600160a01b031663041deaa8612cac613c4a565b898481518110612cb857fe5b6020026020010151898581518110612ccc57fe5b6020026020010151898681518110612ce057fe5b6020026020010151898781518110612cf457fe5b6020026020010151898881518110612d0857fe5b6020026020010151898981518110612d1c57fe5b60200260200101516040518863ffffffff1660e01b815260040180886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381526020018260ff168152602001975050505050505050600060405180830381600087803b158015612da257600080fd5b505af1158015612db6573d6000803e3d6000fd5b505050505b600101612c56565b506128e7565b60005b8651811015612e8a57612de487828151811061296957fe5b158015612dfd5750612dfb86828151811061296957fe5b155b15612e8257612e82878281518110612e1157fe5b6020026020010151878381518110612e2557fe5b6020026020010151878481518110612e3957fe5b6020026020010151878581518110612e4d57fe5b6020026020010151878681518110612e6157fe5b6020026020010151878781518110612e7557fe5b6020026020010151612867565b600101612dcc565b50505050505050565b600f602090815260009182526040918290208054600180830180548651600261010094831615949094026000190190911692909204601f810186900486028301860190965285825261ffff808416966201000085049091169564010000000090940460ff169493830182828015612f4b5780601f10612f2057610100808354040283529160200191612f4b565b820191906000526020600020905b815481529060010190602001808311612f2e57829003601f168201915b5050505050905084565b600d6000612f61613c4a565b6001600160a01b0316815260208101919091526040016000205460ff16612fcf576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a206f6e6c7920766f7465722063616e2063616c6c00000000604482015290519081900360640190fd5b61ffff8082166000818152600f602052604090205483921614613039576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2070726f706f73616c206e6f742065786973747300000000604482015290519081900360640190fd5b61ffff81166000908152600f6020526040902054640100000000900460ff16156130aa576040805162461bcd60e51b815260206004820152601960248201527f566f7461626c653a2070726f706f73616c20697320646f6e6500000000000000604482015290519081900360640190fd5b61ffff82166000908152600f602052604081209060028201906130cb613c4a565b6001600160a01b0316815260208101919091526040016000205460ff16156131245760405162461bcd60e51b8152600401808060200182810382526028815260200180614b976028913960400191505060405180910390fd5b6001816002016000613134613c4a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055805463ffff0000198116620100009182900461ffff908116600101169091021781557f7313139463b6c2096b7200e02a3c6452f21ba9b1fc1a7893f8fea395f96fb1f5836131a8613c4a565b6040805161ffff90931683526001600160a01b0390911660208301528051918290030190a1611c9b81614759565b601054600090600160b81b900460ff161561329457601054604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301528581166024830152915163010000009093049091169163dd62ed3e91604480820192602092909190829003018186803b15801561326157600080fd5b505afa158015613275573d6000803e3d6000fd5b505050506040513d602081101561328b57600080fd5b50519050612bed565b61329e83836148d0565b9392505050565b60065481565b6132b3613c4a565b60055461010090046001600160a01b03908116911614613308576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b61331361268f611d62565b60085550565b613321613c4a565b60055461010090046001600160a01b03908116911614613376576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167ff4ab9adf000000000000000000000000000000000000000000000000000000001790526117b590613c4e565b61ffff8082166000818152600f602052604090205483921614613445576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2070726f706f73616c206e6f742065786973747300000000604482015290519081900360640190fd5b61ffff81166000908152600f6020526040902054640100000000900460ff16156134b6576040805162461bcd60e51b815260206004820152601960248201527f566f7461626c653a2070726f706f73616c20697320646f6e6500000000000000604482015290519081900360640190fd5b6134be613c4a565b60055461010090046001600160a01b03908116911614613513576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b61ffff82166000818152600f6020908152604091829020805464ff000000001916640100000000179055815192835290517f90e42b47bbe58e6e72598349aa50e83f3c8afe5dba12be98e47fac63c50d3b9f9281900390910190a15050565b60006001613581888888611802565b83868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156135d8573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6135f6613c4a565b60055461010090046001600160a01b0390811691161461364b576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19169055815192835290517fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c9281900390910190a150565b6136ab613c4a565b6136b481612150565b156136f05760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b601054600160b81b900460ff16156137df5760005b83518110156137d95761371d84828151811061296957fe5b6137d157601060039054906101000a90046001600160a01b03166001600160a01b0316631e8a29a385838151811061375157fe5b602002602001015185848151811061376557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156137b357600080fd5b505af11580156137c7573d6000803e3d6000fd5b5050505050611c9b565b600101613705565b50611c9b565b60005b83518110156117fc576137fa84828151811061296957fe5b61382e576137d984828151811061380d57fe5b602002602001015184838151811061382157fe5b60200260200101516117b8565b6001016137e2565b61383e613c4a565b60055461010090046001600160a01b03908116911614613893576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b0381166138d85760405162461bcd60e51b8152600401808060200182810382526026815260200180614b4f6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b30613955613c4a565b6001600160a01b0316146139b0576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b601054600160b81b900460ff16156139f95760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b613a0281612150565b613a3d5760405162461bcd60e51b8152600401808060200182810382526038815260200180614c0e6038913960400191505060405180910390fd5b6000613a488261216e565b9050613a548282614404565b6040805182815290516001600160a01b038416917f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c6919081900360200190a25050565b6001600160a01b03166000908152600b602052604090205460ff1690565b30613abe613c4a565b6001600160a01b031614613b19576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600d602052604090205460ff1615613b715760405162461bcd60e51b8152600401808060200182810382526028815260200180614c6d6028913960400191505060405180910390fd5b6001600160a01b0381166000818152600d60209081526040918290208054600160ff199091168117909155600e805461ffff19811661ffff91821690930116919091179055815192835290517f0ad2eca75347acd5160276fe4b5dad46987e4ff4af9e574195e3e9bc15d7e0ff9281900390910190a150565b60085481565b60008282018381101561329e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6010805461ffff8082166001818101831661ffff19948516179094556040805160808101825282815260006020808301828152838501838152606085018b8152878552600f845295909320845181549251945115156401000000000264ff0000000019958a16620100000263ffff00001992909a1693909a16929092179190911696909617919091169590951784559051805192959194613cf593928501929101906149f1565b50506040805161ffff8416815290517f51997f8715e3c335ae20eab683f42aa156edf3848416b9187dd726408a25d94392509081900360200190a15050565b6000613d48613d41613c4a565b848461412b565b50600192915050565b600080613d75612710613d6f600654866145b390919063ffffffff16565b906148fb565b9050600754811115612bed575060075492915050565b600061329e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614094565b6000613d48613dda613c4a565b8484613f39565b60025490565b60006001600160a01b038316613e2e5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d29602a913960400191505060405180910390fd5b613e378461216e565b821115613e755760405162461bcd60e51b815260040180806020018281038252602d815260200180614dea602d913960400191505060405180910390fd5b613e7f84336131d6565b821115613ebd5760405162461bcd60e51b815260040180806020018281038252602e815260200180614cfb602e913960400191505060405180910390fd5b6000613ec883613d51565b90506000613ed68483613d8b565b9050613ee3868683613f39565b8115613f0157600a54613f019087906001600160a01b031684613f39565b613f2d8633611c96876040518060600160405280602f8152602001614ad2602f9139611c8f8c336131d6565b50600195945050505050565b6001600160a01b038316613f7e5760405162461bcd60e51b8152600401808060200182810382526025815260200180614dc56025913960400191505060405180910390fd5b6001600160a01b038216613fc35760405162461bcd60e51b8152600401808060200182810382526023815260200180614a856023913960400191505060405180910390fd5b613fce83838361493d565b61400b81604051806060016040528060268152602001614be8602691396001600160a01b0386166000908152602081905260409020549190614094565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461403a9082613bf0565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156141235760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140e85781810151838201526020016140d0565b50505050905090810190601f1680156141155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166141705760405162461bcd60e51b8152600401808060200182810382526024815260200180614e176024913960400191505060405180910390fd5b6001600160a01b0382166141b55760405162461bcd60e51b8152600401808060200182810382526022815260200180614b756022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000613d48614224613c4a565b84611c968560016000614235613c4a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613bf0565b60105462010000900460ff166142c2576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b6010805462ff0000191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6142f7613c4a565b604080516001600160a01b039092168252519081900360200190a1565b6001600160a01b03821661436f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61437b6000838361493d565b6002546143889082613bf0565b6002556001600160a01b0382166000908152602081905260409020546143ae9082613bf0565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166144495760405162461bcd60e51b8152600401808060200182810382526021815260200180614d536021913960400191505060405180910390fd5b6144558260008361493d565b61449281604051806060016040528060228152602001614b2d602291396001600160a01b0385166000908152602081905260409020549190614094565b6001600160a01b0383166000908152602081905260409020556002546144b89082613d8b565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b031660009081526020819052604090205490565b60105462010000900460ff1615614579576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6010805462ff00001916620100001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142f7613c4a565b6000826145c257506000612bed565b828202828482816145cf57fe5b041461329e5760405162461bcd60e51b8152600401808060200182810382526021815260200180614c956021913960400191505060405180910390fd5b6000613d48614619613c4a565b84611c9685604051806060016040528060258152602001614ea26025913960016000614643613c4a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614094565b60008061468083613d51565b9050600061468e8483613d8b565b905061469a8582613dcd565b5081156146b957600a546146b7906001600160a01b031683613dcd565b505b506001949350505050565b6001600160a01b038216158015906146e457506146e08361216e565b8111155b15611c9b5760006146f482613d51565b905060006147028383613d8b565b905061471960085482613d8b90919063ffffffff16565b9050614726858583613f39565b811561474457600a546147449086906001600160a01b031684613f39565b600854156117fa576117fa8532600854613f39565b600e548154600261ffff9283160482166201000090910490911611156117b5576000306001600160a01b03168260010160405180828054600181600116156101000203166002900480156147e45780601f106147c25761010080835404028352918201916147e4565b820191906000526020600020905b8154815290600101906020018083116147d0575b50509150506000604051808303816000865af19150503d8060008114614826576040519150601f19603f3d011682016040523d82523d6000602084013e61482b565b606091505b5050905080614881576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2063616c6c207061796c6f6164206661696c656400000000604482015290519081900360640190fd5b815464ff000000001916640100000000178083556040805161ffff9092168252517f33fd8f5edaebafa8acc373f0bef6ca907a131bb5fdcc4d129b0512991f6335149181900360200190a15050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061329e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061498c565b614948838383611c9b565b614950612021565b15611c9b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614cb66025913960400191505060405180910390fd5b600081836149db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156140e85781810151838201526020016140d0565b5060008385816149e757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614a3257805160ff1916838001178555614a5f565b82800160010185558215614a5f579182015b82811115614a5f578251825591602001919060010190614a44565b50614a6b929150614a6f565b5090565b5b80821115614a6b5760008155600101614a7056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373426c61636b4c6973743a207370656e646572206164647265737320697320696e20626c61636b6c6973744552433230576974684665653a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365426c61636b4c6973743a20726563697069656e74206164647265737320697320696e20626c61636b6c69737445524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373566f7461626c653a206475706c696361746520766f74696e67206973206e6f7420616c6c6f776564426c61636b4c6973743a2073656e646572206164647265737320697320696e20626c61636b6c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365434e4843546f6b656e3a206f6e6c792066756e6420696e20626c61636b6c69737420616464726573732063616e2062652064657374726f79426c61636b4c6973743a2074686973206164647265737320697320696e20626c61636b6c697374566f7461626c653a2074686973206164647265737320697320616c7265616479206120766f746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775061757361626c653a20746f6b656e207472616e73666572207768696c65207061757365644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433230576974684665653a20616c6c6f77616e636520616d6f756e74206578636565647320616c6c6f7765644552433230576974684665653a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f2061646472657373455243323057697468466565416e64526f757465723a2063616c6c6572206973206e6f742074686520726f75746572434e4843546f6b656e3a20636f6e747261637420776173206465707265636174656445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734552433230576974684665653a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373566f7461626c653a20746869732061646472657373206973206e6f74206120766f746572566f7461626c653a206f776e65722063616e206e6f742062652072656d6f766564434e4843546f6b656e3a20636f6e7472616374204e4f54206465707265636174656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122052793573cadc954e0e688d7134d6aabe155429cdad1e64832a076c75d9a34c2464736f6c634300060c00335061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000006

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103a35760003560e01c80638456cb59116101e9578063c497efa31161010f578063e4061dd8116100ad578063f3bdc2281161007c578063f3bdc22814611193578063f3d7d282146111b9578063f4ab9adf146111df578063fb27ec0914611205576103a3565b8063e4061dd814610fd4578063e4997dc514611020578063f244579f14611046578063f2fde38b1461116d576103a3565b8063dd644f72116100e9578063dd644f7214610f68578063dd975f2914610f70578063de38646f14610f8d578063de513e3d14610fb3576103a3565b8063c497efa314610e61578063d1dc5a8814610f19578063dd62ed3e14610f3a576103a3565b8063a3ec138d11610187578063ae2deb6111610156578063ae2deb6114610933578063ae531e7d14610ade578063b7a3446c14610b04578063b846476014610b2a576103a3565b8063a3ec138d14610869578063a457c2d71461088f578063a9059cbb146108bb578063a9f42f41146108e7576103a3565b806395d89b41116101c357806395d89b411461082e57806398c07938146108365780639d2ec1881461083e5780639f17235e14610861576103a3565b80638456cb59146107f857806386c1ff68146108005780638da5cb5b14610826576103a3565b8063313ce567116102ce5780634838d1651161026c5780636ca525201161023b5780636ca525201461079c57806370a08231146107c2578063715018a6146107e857806375dadb32146107f0576103a3565b80634838d165146107275780635c975abb1461074d57806368097127146107555780636ae0b15414610776576103a3565b80633f4ba83a116102a85780633f4ba83a146106b757806340c10f19146106bf57806342966c68146106eb57806344d664af14610708576103a3565b8063313ce567146106655780633539071414610683578063395093511461068b576103a3565b806315bc97b91161034657806324ca984e1161031557806324ca984e146105bf57806326976e3f146105e55780632b9acf69146106095780632eda8a9a1461063f576103a3565b806315bc97b91461050d578063167eba3c1461053957806318160ddd1461058157806323b872dd14610589576103a3565b8063095ea7b311610382578063095ea7b3146104795780630e136b19146104b95780630ecb93c0146104c157806311be0c6d146104e7576103a3565b8062c19330146103a857806306fdde03146103d65780630753c30c14610453575b600080fd5b6103d4600480360360408110156103be57600080fd5b506001600160a01b03813516906020013561120d565b005b6103de6112d7565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610418578181015183820152602001610400565b50505050905090810190601f1680156104455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103d46004803603602081101561046957600080fd5b50356001600160a01b031661136e565b6104a56004803603604081101561048f57600080fd5b506001600160a01b0381351690602001356114c6565b604080519115158252519081900360200190f35b6104a561162b565b6103d4600480360360208110156104d757600080fd5b50356001600160a01b031661163b565b6103d4600480360360208110156104fd57600080fd5b50356001600160a01b03166116f3565b6103d46004803603604081101561052357600080fd5b506001600160a01b0381351690602001356117b8565b61056f6004803603606081101561054f57600080fd5b506001600160a01b03813581169160208101359091169060400135611802565b60408051918252519081900360200190f35b61056f6118ec565b6104a56004803603606081101561059f57600080fd5b506001600160a01b03813581169160208101359091169060400135611991565b6103d4600480360360208110156105d557600080fd5b50356001600160a01b0316611b4e565b6105ed611bcf565b604080516001600160a01b039092168252519081900360200190f35b6103d46004803603606081101561061f57600080fd5b506001600160a01b03813581169160208101359091169060400135611be5565b6103d46004803603602081101561065557600080fd5b50356001600160a01b0316611ca0565b61066d611d62565b6040805160ff9092168252519081900360200190f35b61056f611d6b565b6104a5600480360360408110156106a157600080fd5b506001600160a01b038135169060200135611d71565b6103d4611e41565b6103d4600480360360408110156106d557600080fd5b506001600160a01b038135169060200135611ef1565b6103d46004803603602081101561070157600080fd5b5035611fa8565b610710612002565b6040805161ffff9092168252519081900360200190f35b6104a56004803603602081101561073d57600080fd5b50356001600160a01b031661200c565b6104a5612021565b6104a56004803603602081101561076b57600080fd5b503561ffff16612030565b6103d46004803603602081101561078c57600080fd5b50356001600160a01b03166120d2565b6104a5600480360360208110156107b257600080fd5b50356001600160a01b0316612150565b61056f600480360360208110156107d857600080fd5b50356001600160a01b031661216e565b6103d4612228565b6103de6122e2565b6103d4612370565b6103d46004803603602081101561081657600080fd5b50356001600160a01b031661241e565b6105ed6125a3565b6103de6125b7565b610710612618565b6103d46004803603604081101561085457600080fd5b5080359060200135612622565b6105ed6126a3565b6104a56004803603602081101561087f57600080fd5b50356001600160a01b03166126b2565b6104a5600480360360408110156108a557600080fd5b506001600160a01b0381351690602001356126c7565b6104a5600480360360408110156108d157600080fd5b506001600160a01b038135169060200135612797565b6103d4600480360360c08110156108fd57600080fd5b5080356001600160a01b039081169160208101359091169060408101359060608101359060808101359060a0013560ff16612867565b6103d46004803603606081101561094957600080fd5b81019060208101813564010000000081111561096457600080fd5b82018360208201111561097657600080fd5b8035906020019184602083028401116401000000008311171561099857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109e857600080fd5b8201836020820111156109fa57600080fd5b80359060200191846020830284011164010000000083111715610a1c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610a6c57600080fd5b820183602082011115610a7e57600080fd5b80359060200191846020830284011164010000000083111715610aa057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506128ef945050505050565b6103d460048036036020811015610af457600080fd5b50356001600160a01b0316612b02565b61056f60048036036020811015610b1a57600080fd5b50356001600160a01b0316612b99565b6103d4600480360360c0811015610b4057600080fd5b810190602081018135640100000000811115610b5b57600080fd5b820183602082011115610b6d57600080fd5b80359060200191846020830284011164010000000083111715610b8f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610bdf57600080fd5b820183602082011115610bf157600080fd5b80359060200191846020830284011164010000000083111715610c1357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610c6357600080fd5b820183602082011115610c7557600080fd5b80359060200191846020830284011164010000000083111715610c9757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610ce757600080fd5b820183602082011115610cf957600080fd5b80359060200191846020830284011164010000000083111715610d1b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610d6b57600080fd5b820183602082011115610d7d57600080fd5b80359060200191846020830284011164010000000083111715610d9f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610def57600080fd5b820183602082011115610e0157600080fd5b80359060200191846020830284011164010000000083111715610e2357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612bf3945050505050565b610e8260048036036020811015610e7757600080fd5b503561ffff16612e93565b604051808561ffff1681526020018461ffff168152602001831515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610edb578181015183820152602001610ec3565b50505050905090810190601f168015610f085780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b6103d460048036036020811015610f2f57600080fd5b503561ffff16612f55565b61056f60048036036040811015610f5057600080fd5b506001600160a01b03813581169160200135166131d6565b61056f6132a5565b6103d460048036036020811015610f8657600080fd5b50356132ab565b6103d460048036036020811015610fa357600080fd5b50356001600160a01b0316613319565b6103d460048036036020811015610fc957600080fd5b503561ffff166133db565b6105ed600480360360c0811015610fea57600080fd5b5080356001600160a01b039081169160208101359091169060408101359060608101359060808101359060a0013560ff16613572565b6103d46004803603602081101561103657600080fd5b50356001600160a01b03166135ee565b6103d46004803603604081101561105c57600080fd5b81019060208101813564010000000081111561107757600080fd5b82018360208201111561108957600080fd5b803590602001918460208302840111640100000000831117156110ab57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156110fb57600080fd5b82018360208201111561110d57600080fd5b8035906020019184602083028401116401000000008311171561112f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506136a3945050505050565b6103d46004803603602081101561118357600080fd5b50356001600160a01b0316613836565b6103d4600480360360208110156111a957600080fd5b50356001600160a01b031661394c565b6104a5600480360360208110156111cf57600080fd5b50356001600160a01b0316613a97565b6103d4600480360360208110156111f557600080fd5b50356001600160a01b0316613ab5565b61056f613bea565b611215613c4a565b60055461010090046001600160a01b0390811691161461126a576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167f40c10f19000000000000000000000000000000000000000000000000000000001790526112d390613c4e565b5050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113635780601f1061133857610100808354040283529160200191611363565b820191906000526020600020905b81548152906001019060200180831161134657829003601f168201915b505050505090505b90565b611376613c4a565b60055461010090046001600160a01b039081169116146113cb576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b601054600160b81b900460ff16156114145760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b6001600160a01b03811661142757600080fd5b60108054600160b81b7fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff909116177fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000006001600160a01b0384169081029190911790915560408051918252517fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e916020908290030190a150565b60006114d0613c4a565b6114d981612150565b156115155760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b61151e84612150565b1561155a5760405162461bcd60e51b815260040180806020018281038252602a815260200180614aa8602a913960400191505060405180910390fd5b601054600160b81b900460ff161561161757601054630100000090046001600160a01b031663aee92d3361158c613c4a565b86866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156115e457600080fd5b505af11580156115f8573d6000803e3d6000fd5b505050506040513d602081101561160e57600080fd5b50519150611624565b6116218484613d34565b91505b5092915050565b601054600160b81b900460ff1681565b611643613c4a565b60055461010090046001600160a01b03908116911614611698576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19166001179055815192835290517f42e160154868087d6bfdc0ca23d96a1c1cfa32f1b72ba9ba27b69b98a0d819dc9281900390910190a150565b6116fb613c4a565b60055461010090046001600160a01b03908116911614611750576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167ff3bdc228000000000000000000000000000000000000000000000000000000001790526117b590613c4e565b50565b60006117c382613d51565b905060006117d18383613d8b565b90506117dd8482613dcd565b5081156117fc57600a546117fa906001600160a01b031683613dcd565b505b50505050565b600060098484843060405160200180856001600160a01b031660601b8152601401846001600160a01b031660601b8152601401838152602001826001600160a01b031660601b81526014019450505050506040516020818303038152906040528051906020012060405160200180838054600181600116156101000203166002900480156118c75780601f106118a55761010080835404028352918201916118c7565b820191906000526020600020905b8154815290600101906020018083116118b3575b5050918252506040805180830381526020928301909152805191012095945050505050565b601054600090600160b81b900460ff161561198257601060039054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d602081101561197957600080fd5b5051905061136b565b61198a613de1565b905061136b565b600061199b613c4a565b6119a481612150565b156119e05760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b6119e985612150565b15611a255760405162461bcd60e51b8152600401808060200182810382526029815260200180614bbf6029913960400191505060405180910390fd5b611a2e84612150565b15611a6a5760405162461bcd60e51b815260040180806020018281038252602c815260200180614b01602c913960400191505060405180910390fd5b601054600160b81b900460ff1615611b3857601054630100000090046001600160a01b0316638b477adb611a9c613c4a565b8787876040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b03168152602001828152602001945050505050602060405180830381600087803b158015611b0557600080fd5b505af1158015611b19573d6000803e3d6000fd5b505050506040513d6020811015611b2f57600080fd5b50519150611b46565b611b43858585613de7565b91505b509392505050565b611b56613c4a565b60055461010090046001600160a01b03908116911614611bab576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b601054630100000090046001600160a01b031681565b6001600160a01b03821615801590611c055750611c018361216e565b8111155b8015611c1a5750611c1683336131d6565b8111155b15611c9b576000611c2a82613d51565b90506000611c388383613d8b565b9050611c45858583613f39565b8115611c6357600a54611c639086906001600160a01b031684613f39565b6117fa8533611c96866040518060600160405280602f8152602001614ad2602f9139611c8f8b336131d6565b9190614094565b61412b565b505050565b611ca8613c4a565b60055461010090046001600160a01b03908116911614611cfd576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167f86c1ff68000000000000000000000000000000000000000000000000000000001790526117b590613c4e565b60055460ff1690565b60075481565b6000611d7b613c4a565b611d8481612150565b15611dc05760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b611dc984612150565b15611e055760405162461bcd60e51b815260040180806020018281038252602a815260200180614aa8602a913960400191505060405180910390fd5b601054600160b81b900460ff1615611e3757601054630100000090046001600160a01b031663a953815761158c613c4a565b6116218484614217565b611e49613c4a565b60055461010090046001600160a01b03908116911614611e9e576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b601054600160b81b900460ff1615611ee75760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b611eef614265565b565b30611efa613c4a565b6001600160a01b031614611f55576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b601054600160b81b900460ff1615611f9e5760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b6112d38282614314565b601054600160b81b900460ff1615611ff15760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b6117b5611ffc613c4a565b82614404565b60105461ffff1681565b600c6020526000908152604090205460ff1681565b60105462010000900460ff1690565b61ffff8082166000818152600f6020526040812080549193909291161461209e576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2070726f706f73616c206e6f742065786973747300000000604482015290519081900360640190fd5b8060020160006120ac613c4a565b6001600160a01b0316815260208101919091526040016000205460ff169150505b919050565b6120da613c4a565b60055461010090046001600160a01b0390811691161461212f576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6001600160a01b03166000908152600c602052604090205460ff1690565b601054600090600160b81b900460ff161561221857601060039054906101000a90046001600160a01b03166001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156121e557600080fd5b505afa1580156121f9573d6000803e3d6000fd5b505050506040513d602081101561220f57600080fd5b505190506120cd565b61222182614500565b90506120cd565b612230613c4a565b60055461010090046001600160a01b03908116911614612285576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6009805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156123685780601f1061233d57610100808354040283529160200191612368565b820191906000526020600020905b81548152906001019060200180831161234b57829003601f168201915b505050505081565b612378613c4a565b60055461010090046001600160a01b039081169116146123cd576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b601054600160b81b900460ff16156124165760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b611eef61451b565b30612427613c4a565b6001600160a01b031614612482576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600d602052604090205460ff166124d95760405162461bcd60e51b8152600401808060200182810382526024815260200180614e3b6024913960400191505060405180910390fd5b6124e16125a3565b6001600160a01b0316816001600160a01b031614156125315760405162461bcd60e51b8152600401808060200182810382526021815260200180614e5f6021913960400191505060405180910390fd5b6001600160a01b0381166000818152600d6020908152604091829020805460ff19169055600e805461ffff19811661ffff91821660001901909116179055815192835290517f1c959242c0718835c6a0d1fdc1c02056059ed6025bd0bfb268523cf23825ac4f9281900390910190a150565b60055461010090046001600160a01b031690565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156113635780601f1061133857610100808354040283529160200191611363565b600e5461ffff1681565b61262a613c4a565b60055461010090046001600160a01b0390811691161461267f576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b600682905561269c61268f611d62565b829060ff16600a0a6145b3565b6007555050565b600a546001600160a01b031681565b600d6020526000908152604090205460ff1681565b60006126d1613c4a565b6126da81612150565b156127165760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b61271f84612150565b1561275b5760405162461bcd60e51b815260040180806020018281038252602a815260200180614aa8602a913960400191505060405180910390fd5b601054600160b81b900460ff161561278d57601054630100000090046001600160a01b0316636001279f61158c613c4a565b611621848461460c565b60006127a1613c4a565b6127aa81612150565b156127e65760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b6127ef84612150565b1561282b5760405162461bcd60e51b815260040180806020018281038252602c815260200180614b01602c913960400191505060405180910390fd5b601054600160b81b900460ff161561285d57601054630100000090046001600160a01b0316636e18980a61158c613c4a565b6116218484614674565b336000908152600b602052604090205460ff166128b55760405162461bcd60e51b815260040180806020018281038252602f815260200180614d74602f913960400191505060405180910390fd5b856001600160a01b03166128cd878787878787613572565b6001600160a01b031614156128e7576128e78686866146c4565b505050505050565b6128f7613c4a565b61290081612150565b1561293c5760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b601054600160b81b900460ff1615612a7d5760005b8451811015612a775761297685828151811061296957fe5b6020026020010151612150565b15801561298f575061298d84828151811061296957fe5b155b15612a6f57601054630100000090046001600160a01b031663059237a36129b4613c4a565b8784815181106129c057fe5b60200260200101518785815181106129d457fe5b60200260200101518786815181106129e857fe5b60200260200101516040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b03168152602001836001600160a01b03168152602001828152602001945050505050600060405180830381600087803b158015612a5657600080fd5b505af1158015612a6a573d6000803e3d6000fd5b505050505b600101612951565b506117fc565b60005b84518110156117fa57612a9885828151811061296957fe5b158015612ab15750612aaf84828151811061296957fe5b155b15612afa57612afa858281518110612ac557fe5b6020026020010151858381518110612ad957fe5b6020026020010151858481518110612aed57fe5b6020026020010151611be5565b600101612a80565b612b0a613c4a565b60055461010090046001600160a01b03908116911614612b5f576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b601054600090600160b81b900460ff16612be45760405162461bcd60e51b8152600401808060200182810382526022815260200180614e806022913960400191505060405180910390fd5b612bed82614500565b92915050565b336000908152600b602052604090205460ff16612c415760405162461bcd60e51b815260040180806020018281038252602f815260200180614d74602f913960400191505060405180910390fd5b601054600160b81b900460ff1615612dc95760005b8651811015612dc357612c6e87828151811061296957fe5b158015612c875750612c8586828151811061296957fe5b155b15612dbb57601054630100000090046001600160a01b031663041deaa8612cac613c4a565b898481518110612cb857fe5b6020026020010151898581518110612ccc57fe5b6020026020010151898681518110612ce057fe5b6020026020010151898781518110612cf457fe5b6020026020010151898881518110612d0857fe5b6020026020010151898981518110612d1c57fe5b60200260200101516040518863ffffffff1660e01b815260040180886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b031681526020018581526020018481526020018381526020018260ff168152602001975050505050505050600060405180830381600087803b158015612da257600080fd5b505af1158015612db6573d6000803e3d6000fd5b505050505b600101612c56565b506128e7565b60005b8651811015612e8a57612de487828151811061296957fe5b158015612dfd5750612dfb86828151811061296957fe5b155b15612e8257612e82878281518110612e1157fe5b6020026020010151878381518110612e2557fe5b6020026020010151878481518110612e3957fe5b6020026020010151878581518110612e4d57fe5b6020026020010151878681518110612e6157fe5b6020026020010151878781518110612e7557fe5b6020026020010151612867565b600101612dcc565b50505050505050565b600f602090815260009182526040918290208054600180830180548651600261010094831615949094026000190190911692909204601f810186900486028301860190965285825261ffff808416966201000085049091169564010000000090940460ff169493830182828015612f4b5780601f10612f2057610100808354040283529160200191612f4b565b820191906000526020600020905b815481529060010190602001808311612f2e57829003601f168201915b5050505050905084565b600d6000612f61613c4a565b6001600160a01b0316815260208101919091526040016000205460ff16612fcf576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a206f6e6c7920766f7465722063616e2063616c6c00000000604482015290519081900360640190fd5b61ffff8082166000818152600f602052604090205483921614613039576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2070726f706f73616c206e6f742065786973747300000000604482015290519081900360640190fd5b61ffff81166000908152600f6020526040902054640100000000900460ff16156130aa576040805162461bcd60e51b815260206004820152601960248201527f566f7461626c653a2070726f706f73616c20697320646f6e6500000000000000604482015290519081900360640190fd5b61ffff82166000908152600f602052604081209060028201906130cb613c4a565b6001600160a01b0316815260208101919091526040016000205460ff16156131245760405162461bcd60e51b8152600401808060200182810382526028815260200180614b976028913960400191505060405180910390fd5b6001816002016000613134613c4a565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055805463ffff0000198116620100009182900461ffff908116600101169091021781557f7313139463b6c2096b7200e02a3c6452f21ba9b1fc1a7893f8fea395f96fb1f5836131a8613c4a565b6040805161ffff90931683526001600160a01b0390911660208301528051918290030190a1611c9b81614759565b601054600090600160b81b900460ff161561329457601054604080517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301528581166024830152915163010000009093049091169163dd62ed3e91604480820192602092909190829003018186803b15801561326157600080fd5b505afa158015613275573d6000803e3d6000fd5b505050506040513d602081101561328b57600080fd5b50519050612bed565b61329e83836148d0565b9392505050565b60065481565b6132b3613c4a565b60055461010090046001600160a01b03908116911614613308576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b61331361268f611d62565b60085550565b613321613c4a565b60055461010090046001600160a01b03908116911614613376576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b604080516001600160a01b0383166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167ff4ab9adf000000000000000000000000000000000000000000000000000000001790526117b590613c4e565b61ffff8082166000818152600f602052604090205483921614613445576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2070726f706f73616c206e6f742065786973747300000000604482015290519081900360640190fd5b61ffff81166000908152600f6020526040902054640100000000900460ff16156134b6576040805162461bcd60e51b815260206004820152601960248201527f566f7461626c653a2070726f706f73616c20697320646f6e6500000000000000604482015290519081900360640190fd5b6134be613c4a565b60055461010090046001600160a01b03908116911614613513576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b61ffff82166000818152600f6020908152604091829020805464ff000000001916640100000000179055815192835290517f90e42b47bbe58e6e72598349aa50e83f3c8afe5dba12be98e47fac63c50d3b9f9281900390910190a15050565b60006001613581888888611802565b83868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156135d8573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6135f6613c4a565b60055461010090046001600160a01b0390811691161461364b576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020908152604091829020805460ff19169055815192835290517fd7e9ec6e6ecd65492dce6bf513cd6867560d49544421d0783ddf06e76c24470c9281900390910190a150565b6136ab613c4a565b6136b481612150565b156136f05760405162461bcd60e51b8152600401808060200182810382526027815260200180614c466027913960400191505060405180910390fd5b601054600160b81b900460ff16156137df5760005b83518110156137d95761371d84828151811061296957fe5b6137d157601060039054906101000a90046001600160a01b03166001600160a01b0316631e8a29a385838151811061375157fe5b602002602001015185848151811061376557fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156137b357600080fd5b505af11580156137c7573d6000803e3d6000fd5b5050505050611c9b565b600101613705565b50611c9b565b60005b83518110156117fc576137fa84828151811061296957fe5b61382e576137d984828151811061380d57fe5b602002602001015184838151811061382157fe5b60200260200101516117b8565b6001016137e2565b61383e613c4a565b60055461010090046001600160a01b03908116911614613893576040805162461bcd60e51b81526020600482018190526024820152600080516020614cdb833981519152604482015290519081900360640190fd5b6001600160a01b0381166138d85760405162461bcd60e51b8152600401808060200182810382526026815260200180614b4f6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b30613955613c4a565b6001600160a01b0316146139b0576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b601054600160b81b900460ff16156139f95760405162461bcd60e51b8152600401808060200182810382526022815260200180614da36022913960400191505060405180910390fd5b613a0281612150565b613a3d5760405162461bcd60e51b8152600401808060200182810382526038815260200180614c0e6038913960400191505060405180910390fd5b6000613a488261216e565b9050613a548282614404565b6040805182815290516001600160a01b038416917f61e6e66b0d6339b2980aecc6ccc0039736791f0ccde9ed512e789a7fbdd698c6919081900360200190a25050565b6001600160a01b03166000908152600b602052604090205460ff1690565b30613abe613c4a565b6001600160a01b031614613b19576040805162461bcd60e51b815260206004820152601b60248201527f566f7461626c653a206f6e6c792073656c662063616e2063616c6c0000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600d602052604090205460ff1615613b715760405162461bcd60e51b8152600401808060200182810382526028815260200180614c6d6028913960400191505060405180910390fd5b6001600160a01b0381166000818152600d60209081526040918290208054600160ff199091168117909155600e805461ffff19811661ffff91821690930116919091179055815192835290517f0ad2eca75347acd5160276fe4b5dad46987e4ff4af9e574195e3e9bc15d7e0ff9281900390910190a150565b60085481565b60008282018381101561329e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6010805461ffff8082166001818101831661ffff19948516179094556040805160808101825282815260006020808301828152838501838152606085018b8152878552600f845295909320845181549251945115156401000000000264ff0000000019958a16620100000263ffff00001992909a1693909a16929092179190911696909617919091169590951784559051805192959194613cf593928501929101906149f1565b50506040805161ffff8416815290517f51997f8715e3c335ae20eab683f42aa156edf3848416b9187dd726408a25d94392509081900360200190a15050565b6000613d48613d41613c4a565b848461412b565b50600192915050565b600080613d75612710613d6f600654866145b390919063ffffffff16565b906148fb565b9050600754811115612bed575060075492915050565b600061329e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614094565b6000613d48613dda613c4a565b8484613f39565b60025490565b60006001600160a01b038316613e2e5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d29602a913960400191505060405180910390fd5b613e378461216e565b821115613e755760405162461bcd60e51b815260040180806020018281038252602d815260200180614dea602d913960400191505060405180910390fd5b613e7f84336131d6565b821115613ebd5760405162461bcd60e51b815260040180806020018281038252602e815260200180614cfb602e913960400191505060405180910390fd5b6000613ec883613d51565b90506000613ed68483613d8b565b9050613ee3868683613f39565b8115613f0157600a54613f019087906001600160a01b031684613f39565b613f2d8633611c96876040518060600160405280602f8152602001614ad2602f9139611c8f8c336131d6565b50600195945050505050565b6001600160a01b038316613f7e5760405162461bcd60e51b8152600401808060200182810382526025815260200180614dc56025913960400191505060405180910390fd5b6001600160a01b038216613fc35760405162461bcd60e51b8152600401808060200182810382526023815260200180614a856023913960400191505060405180910390fd5b613fce83838361493d565b61400b81604051806060016040528060268152602001614be8602691396001600160a01b0386166000908152602081905260409020549190614094565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461403a9082613bf0565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156141235760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156140e85781810151838201526020016140d0565b50505050905090810190601f1680156141155780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0383166141705760405162461bcd60e51b8152600401808060200182810382526024815260200180614e176024913960400191505060405180910390fd5b6001600160a01b0382166141b55760405162461bcd60e51b8152600401808060200182810382526022815260200180614b756022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000613d48614224613c4a565b84611c968560016000614235613c4a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613bf0565b60105462010000900460ff166142c2576040805162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015290519081900360640190fd5b6010805462ff0000191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6142f7613c4a565b604080516001600160a01b039092168252519081900360200190a1565b6001600160a01b03821661436f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61437b6000838361493d565b6002546143889082613bf0565b6002556001600160a01b0382166000908152602081905260409020546143ae9082613bf0565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166144495760405162461bcd60e51b8152600401808060200182810382526021815260200180614d536021913960400191505060405180910390fd5b6144558260008361493d565b61449281604051806060016040528060228152602001614b2d602291396001600160a01b0385166000908152602081905260409020549190614094565b6001600160a01b0383166000908152602081905260409020556002546144b89082613d8b565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b031660009081526020819052604090205490565b60105462010000900460ff1615614579576040805162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6010805462ff00001916620100001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142f7613c4a565b6000826145c257506000612bed565b828202828482816145cf57fe5b041461329e5760405162461bcd60e51b8152600401808060200182810382526021815260200180614c956021913960400191505060405180910390fd5b6000613d48614619613c4a565b84611c9685604051806060016040528060258152602001614ea26025913960016000614643613c4a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614094565b60008061468083613d51565b9050600061468e8483613d8b565b905061469a8582613dcd565b5081156146b957600a546146b7906001600160a01b031683613dcd565b505b506001949350505050565b6001600160a01b038216158015906146e457506146e08361216e565b8111155b15611c9b5760006146f482613d51565b905060006147028383613d8b565b905061471960085482613d8b90919063ffffffff16565b9050614726858583613f39565b811561474457600a546147449086906001600160a01b031684613f39565b600854156117fa576117fa8532600854613f39565b600e548154600261ffff9283160482166201000090910490911611156117b5576000306001600160a01b03168260010160405180828054600181600116156101000203166002900480156147e45780601f106147c25761010080835404028352918201916147e4565b820191906000526020600020905b8154815290600101906020018083116147d0575b50509150506000604051808303816000865af19150503d8060008114614826576040519150601f19603f3d011682016040523d82523d6000602084013e61482b565b606091505b5050905080614881576040805162461bcd60e51b815260206004820152601c60248201527f566f7461626c653a2063616c6c207061796c6f6164206661696c656400000000604482015290519081900360640190fd5b815464ff000000001916640100000000178083556040805161ffff9092168252517f33fd8f5edaebafa8acc373f0bef6ca907a131bb5fdcc4d129b0512991f6335149181900360200190a15050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061329e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061498c565b614948838383611c9b565b614950612021565b15611c9b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614cb66025913960400191505060405180910390fd5b600081836149db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156140e85781810151838201526020016140d0565b5060008385816149e757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614a3257805160ff1916838001178555614a5f565b82800160010185558215614a5f579182015b82811115614a5f578251825591602001919060010190614a44565b50614a6b929150614a6f565b5090565b5b80821115614a6b5760008155600101614a7056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373426c61636b4c6973743a207370656e646572206164647265737320697320696e20626c61636b6c6973744552433230576974684665653a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365426c61636b4c6973743a20726563697069656e74206164647265737320697320696e20626c61636b6c69737445524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373566f7461626c653a206475706c696361746520766f74696e67206973206e6f7420616c6c6f776564426c61636b4c6973743a2073656e646572206164647265737320697320696e20626c61636b6c69737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365434e4843546f6b656e3a206f6e6c792066756e6420696e20626c61636b6c69737420616464726573732063616e2062652064657374726f79426c61636b4c6973743a2074686973206164647265737320697320696e20626c61636b6c697374566f7461626c653a2074686973206164647265737320697320616c7265616479206120766f746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775061757361626c653a20746f6b656e207472616e73666572207768696c65207061757365644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433230576974684665653a20616c6c6f77616e636520616d6f756e74206578636565647320616c6c6f7765644552433230576974684665653a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e2066726f6d20746865207a65726f2061646472657373455243323057697468466565416e64526f757465723a2063616c6c6572206973206e6f742074686520726f75746572434e4843546f6b656e3a20636f6e747261637420776173206465707265636174656445524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734552433230576974684665653a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373566f7461626c653a20746869732061646472657373206973206e6f74206120766f746572566f7461626c653a206f776e65722063616e206e6f742062652072656d6f766564434e4843546f6b656e3a20636f6e7472616374204e4f54206465707265636174656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122052793573cadc954e0e688d7134d6aabe155429cdad1e64832a076c75d9a34c2464736f6c634300060c0033

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

000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000006

-----Decoded View---------------
Arg [0] : _initialSupply (uint256): 1000000000000
Arg [1] : _decimals (uint8): 6

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000006


Deployed Bytecode Sourcemap

209:8312:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4386:178;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4386:178:1;;;;;;;;:::i;:::-;;2136:81:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5647:299:1;;;;;;;;;;;;;;;;-1:-1:-1;5647:299:1;-1:-1:-1;;;;;5647:299:1;;:::i;2797:418::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2797:418:1;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;327:22;;;:::i;287:132:0:-;;;;;;;;;;;;;;;;-1:-1:-1;287:132:0;-1:-1:-1;;;;;287:132:0;;:::i;4570:164:1:-;;;;;;;;;;;;;;;;-1:-1:-1;4570:164:1;-1:-1:-1;;;;;4570:164:1;;:::i;2578:257:4:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2578:257:4;;;;;;;;:::i;4419:206::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4419:206:4;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1009:220:1;;;:::i;2228:563::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2228:563:1;;;;;;;;;;;;;;;;;:::i;502:90:4:-;;;;;;;;;;;;;;;;-1:-1:-1;502:90:4;-1:-1:-1;;;;;502:90:4;;:::i;290:30:1:-;;;:::i;:::-;;;;-1:-1:-1;;;;;290:30:1;;;;;;;;;;;;;;2839:525:4;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2839:525:4;;;;;;;;;;;;;;;;;:::i;3791:153:10:-;;;;;;;;;;;;;;;;-1:-1:-1;3791:153:10;-1:-1:-1;;;;;3791:153:10;;:::i;3038:81:3:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;196:29:4;;;:::i;3221:459:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3221:459:1;;;;;;;;:::i;5487:137::-;;;:::i;4769:180::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4769:180:1;;;;;;;;:::i;4166:155::-;;;;;;;;;;;;;;;;-1:-1:-1;4166:155:1;;:::i;342:29:10:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;118:42:0;;;;;;;;;;;;;;;;-1:-1:-1;118:42:0;-1:-1:-1;;;;;118:42:0;;:::i;1035:76:7:-;;;:::i;2430:232:10:-;;;;;;;;;;;;;;;;-1:-1:-1;2430:232:10;;;;:::i;596:94:4:-;;;;;;;;;;;;;;;;-1:-1:-1;596:94:4;-1:-1:-1;;;;;596:94:4;;:::i;569:106:0:-;;;;;;;;;;;;;;;;-1:-1:-1;569:106:0;-1:-1:-1;;;;;569:106:0;;:::i;745:258:1:-;;;;;;;;;;;;;;;;-1:-1:-1;745:258:1;-1:-1:-1;;;;;745:258:1;;:::i;1648:145:6:-;;;:::i;268:57:4:-;;;:::i;5348:133:1:-;;;:::i;3297:296:10:-;;;;;;;;;;;;;;;;-1:-1:-1;3297:296:10;-1:-1:-1;;;;;3297:296:10;;:::i;1025:77:6:-;;;:::i;2330:85:3:-;;;:::i;200:29:10:-;;;:::i;2263:182:4:-;;;;;;;;;;;;;;;;-1:-1:-1;2263:182:4;;;;;;;:::i;329:34::-;;;:::i;135:38:10:-;;;;;;;;;;;;;;;;-1:-1:-1;135:38:10;-1:-1:-1;;;;;135:38:10;;:::i;3686:474:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3686:474:1;;;;;;;;:::i;1791:431::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1791:431:1;;;;;;;;:::i;3401:255:4:-;;;;;;;;;;;;;;;;-1:-1:-1;3401:255:4;;-1:-1:-1;;;;;3401:255:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6911:795:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6911:795:1;;;;;;;;-1:-1:-1;6911:795:1;;-1:-1:-1;;6911:795:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6911:795:1;;;;;;;;-1:-1:-1;6911:795:1;;-1:-1:-1;;6911:795:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6911:795:1;;-1:-1:-1;6911:795:1;;-1:-1:-1;;;;;6911:795:1:i;694:134:4:-;;;;;;;;;;;;;;;;-1:-1:-1;694:134:4;-1:-1:-1;;;;;694:134:4;;:::i;1577:184:1:-;;;;;;;;;;;;;;;;-1:-1:-1;1577:184:1;-1:-1:-1;;;;;1577:184:1;;:::i;7712:805::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:805:1;;;;;;;;-1:-1:-1;7712:805:1;;-1:-1:-1;;7712:805:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:805:1;;;;;;;;-1:-1:-1;7712:805:1;;-1:-1:-1;;7712:805:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:805:1;;;;;;;;-1:-1:-1;7712:805:1;;-1:-1:-1;;7712:805:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:805:1;;;;;;;;-1:-1:-1;7712:805:1;;-1:-1:-1;;7712:805:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:805:1;;;;;;;;-1:-1:-1;7712:805:1;;-1:-1:-1;;7712:805:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7712:805:1;;-1:-1:-1;7712:805:1;;-1:-1:-1;;;;;7712:805:1:i;257:44:10:-;;;;;;;;;;;;;;;;-1:-1:-1;257:44:10;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1679:397;;;;;;;;;;;;;;;;-1:-1:-1;1679:397:10;;;;:::i;1235:282:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1235:282:1;;;;;;;;;;:::i;158:34:4:-;;;:::i;2449:125::-;;;;;;;;;;;;;;;;-1:-1:-1;2449:125:4;;:::i;3638:147:10:-;;;;;;;;;;;;;;;;-1:-1:-1;3638:147:10;-1:-1:-1;;;;;3638:147:10;;:::i;3972:162::-;;;;;;;;;;;;;;;;-1:-1:-1;3972:162:10;;;;:::i;4180:207:4:-;;;;;;;;;;;;;;;;-1:-1:-1;4180:207:4;;-1:-1:-1;;;;;4180:207:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;425:138:0:-;;;;;;;;;;;;;;;;-1:-1:-1;425:138:0;-1:-1:-1;;;;;425:138:0;;:::i;6234:671:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6234:671:1;;;;;;;;-1:-1:-1;6234:671:1;;-1:-1:-1;;6234:671:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6234:671:1;;-1:-1:-1;6234:671:1;;-1:-1:-1;;;;;6234:671:1:i;1942:240:6:-;;;;;;;;;;;;;;;;-1:-1:-1;1942:240:6;-1:-1:-1;;;;;1942:240:6;;:::i;4955:374:1:-;;;;;;;;;;;;;;;;-1:-1:-1;4955:374:1;-1:-1:-1;;;;;4955:374:1;;:::i;832:99:4:-;;;;;;;;;;;;;;;;-1:-1:-1;832:99:4;-1:-1:-1;;;;;832:99:4;;:::i;3070:221:10:-;;;;;;;;;;;;;;;;-1:-1:-1;3070:221:10;-1:-1:-1;;;;;3070:221:10;;:::i;229:35:4:-;;;:::i;4386:178:1:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;4489::1::1;::::0;;-1:-1:-1;;;;;4489:67:1;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4489:67:1::1;;;::::0;;4475:82:::1;::::0;:13:::1;:82::i;:::-;4386:178:::0;;:::o;2136:81:3:-;2205:5;2198:12;;;;;;;;-1:-1:-1;;2198:12:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2173:13;;2198:12;;2205:5;;2198:12;;2205:5;2198:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2136:81;;:::o;5647:299:1:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;5728:10:1::1;::::0;-1:-1:-1;;;5728:10:1;::::1;;;5727:11;5719:58;;;;-1:-1:-1::0;;;5719:58:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5795:30:1;::::1;5787:39;;;::::0;::::1;;5836:10;:17:::0;;-1:-1:-1;;;5836:17:1;;;::::1;;5863:34:::0;::::1;::::0;-1:-1:-1;;;;;5863:34:1;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;5912:27:::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;5647:299:::0;:::o;2797:418::-;2901:4;2878:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2926:24:1::1;2942:7;2926:15;:24::i;:::-;2925:25;2917:80;;;;-1:-1:-1::0;;;2917:80:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3012:10;::::0;-1:-1:-1;;;3012:10:1;::::1;;;3008:201;;;3067:15;::::0;;;::::1;-1:-1:-1::0;;;;;3067:15:1::1;3045:54;3100:12;:10;:12::i;:::-;3114:7;3123:6;3045:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;3045:85:1::1;;;;;;-1:-1:-1::0;;;;;3045:85:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;3045:85:1;;-1:-1:-1;3038:92:1::1;;3008:201;3168:30;3182:7;3191:6;3168:13;:30::i;:::-;3161:37;;3008:201;2797:418:::0;;;;;:::o;327:22::-;;;-1:-1:-1;;;327:22:1;;;;;:::o;287:132:0:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;353:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;;:23;;-1:-1:-1;;353:23:0::1;372:4;353:23;::::0;;391:21;;;;;;;::::1;::::0;;;;;;;;::::1;287:132:::0;:::o;4570:164:1:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;4666:60:1::1;::::0;;-1:-1:-1;;;;;4666:60:1;::::1;;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4666:60:1::1;;;::::0;;4652:75:::1;::::0;:13:::1;:75::i;:::-;4570:164:::0;:::o;2578:257:4:-;2648:11;2662:16;2671:6;2662:8;:16::i;:::-;2648:30;-1:-1:-1;2684:18:4;2705:15;:6;2648:30;2705:10;:15::i;:::-;2684:36;;2726:31;2741:3;2746:10;2726:14;:31::i;:::-;-1:-1:-1;2767:7:4;;2763:68;;2799:19;;2784:40;;-1:-1:-1;;;;;2799:19:4;2820:3;2784:14;:40::i;:::-;;2763:68;2578:257;;;;:::o;4419:206::-;4504:7;4552:6;4586:5;4592:3;4596:6;4611:4;4569:48;;;;;;-1:-1:-1;;;;;4569:48:4;;;;;;;;-1:-1:-1;;;;;4569:48:4;;;;;;;;;;;;;-1:-1:-1;;;;;4569:48:4;;;;;;;;;;;;;;;;;;;;;;;;;4559:59;;;;;;4535:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4535:84:4;;;-1:-1:-1;4535:84:4;;;;;;;;;;;;;;;4525:95;;;;;;4419:206;-1:-1:-1;;;;;4419:206:4:o;1009:220:1:-;1085:10;;1062:7;;-1:-1:-1;;;1085:10:1;;;;1081:142;;;1125:15;;;;;;;;;-1:-1:-1;;;;;1125:15:1;-1:-1:-1;;;;;1118:35:1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1118:37:1;;-1:-1:-1;1111:44:1;;1081:142;1193:19;:17;:19::i;:::-;1186:26;;;;2228:563;2355:4;2332:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:23:1::1;2396:6;2380:15;:23::i;:::-;2379:24;2371:78;;;;-1:-1:-1::0;;;2371:78:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2468:26;2484:9;2468:15;:26::i;:::-;2467:27;2459:84;;;;-1:-1:-1::0;;;2459:84:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2558:10;::::0;-1:-1:-1;;;2558:10:1;::::1;;;2554:231;;;2613:15;::::0;;;::::1;-1:-1:-1::0;;;;;2613:15:1::1;2591:59;2651:12;:10;:12::i;:::-;2665:6;2673:9;2684:6;2591:100;;;;;;;;;;;;;-1:-1:-1::0;;;;;2591:100:1::1;;;;;;-1:-1:-1::0;;;;;2591:100:1::1;;;;;;-1:-1:-1::0;;;;;2591:100:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;2591:100:1;;-1:-1:-1;2584:107:1::1;;2554:231;2729:45;2748:6;2756:9;2767:6;2729:18;:45::i;:::-;2722:52;;2554:231;2228:563:::0;;;;;;:::o;502:90:4:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;563:17:4::1;;::::0;;;:8:::1;:17;::::0;;;;:24;;-1:-1:-1;;563:24:4::1;583:4;563:24;::::0;;502:90::o;290:30:1:-;;;;;;-1:-1:-1;;;;;290:30:1;;:::o;2839:525:4:-;-1:-1:-1;;;;;2931:17:4;;;;;;:47;;;2962:16;2972:5;2962:9;:16::i;:::-;2952:6;:26;;2931:47;:89;;;;;2992:28;3002:5;3009:10;2992:9;:28::i;:::-;2982:6;:38;;2931:89;2928:432;;;3029:11;3043:16;3052:6;3043:8;:16::i;:::-;3029:30;-1:-1:-1;3067:18:4;3088:15;:6;3029:30;3088:10;:15::i;:::-;3067:36;;3111:33;3121:5;3128:3;3133:10;3111:9;:33::i;:::-;3156:7;;3152:74;;3192:19;;3175:42;;3185:5;;-1:-1:-1;;;;;3192:19:4;3213:3;3175:9;:42::i;:::-;3233:120;3242:5;3249:10;3261:91;3294:6;3261:91;;;;;;;;;;;;;;;;;:28;3271:5;3278:10;3261:9;:28::i;:::-;:32;:91;:32;:91::i;:::-;3233:8;:120::i;2928:432::-;2839:525;;;:::o;3791:153:10:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;3882:54:10::1;::::0;;-1:-1:-1;;;;;3882:54:10;::::1;;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;3882:54:10::1;;;::::0;;3868:69:::1;::::0;:13:::1;:69::i;3038:81:3:-:0;3103:9;;;;3038:81;:::o;196:29:4:-;;;;:::o;3221:459:1:-;3339:4;3316:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3364:24:1::1;3380:7;3364:15;:24::i;:::-;3363:25;3355:80;;;;-1:-1:-1::0;;;3355:80:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3450:10;::::0;-1:-1:-1;;;3450:10:1;::::1;;;3446:228;;;3505:15;::::0;;;::::1;-1:-1:-1::0;;;;;3505:15:1::1;3483:63;3547:12;:10;:12::i;3446:228::-;3619:44;3643:7;3652:10;3619:23;:44::i;5487:137::-:0;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;5542:10:1::1;::::0;-1:-1:-1;;;5542:10:1;::::1;;;5541:11;5533:58;;;;-1:-1:-1::0;;;5533:58:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5601:16;:14;:16::i;:::-;5487:137::o:0;4769:180::-;1398:4:10;1374:12;:10;:12::i;:::-;-1:-1:-1;;;;;1374:29:10;;1366:69;;;;;-1:-1:-1;;;1366:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;4853:10:1::1;::::0;-1:-1:-1;;;4853:10:1;::::1;;;4852:11;4844:58;;;;-1:-1:-1::0;;;4844:58:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4912:30;4924:8;4934:7;4912:11;:30::i;4166:155::-:0;4222:10;;-1:-1:-1;;;4222:10:1;;;;4221:11;4213:58;;;;-1:-1:-1;;;4213:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4281:33;4293:12;:10;:12::i;:::-;4307:6;4281:11;:33::i;342:29:10:-;;;;;;:::o;118:42:0:-;;;;;;;;;;;;;;;:::o;1035:76:7:-;1097:7;;;;;;;;1035:76::o;2430:232:10:-;2524:15;;;;2481:4;2524:15;;;:9;:15;;;;;2557:12;;2481:4;;2524:15;;2557:12;;:20;2549:61;;;;;-1:-1:-1;;;2549:61:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;2627:8;:14;;:28;2642:12;:10;:12::i;:::-;-1:-1:-1;;;;;2627:28:10;;;;;;;;;;;;-1:-1:-1;2627:28:10;;;;;-1:-1:-1;;2430:232:10;;;;:::o;596:94:4:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;660:17:4::1;680:5;660:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;660:25:4::1;::::0;;596:94::o;569:106:0:-;-1:-1:-1;;;;;652:16:0;630:4;652:16;;;:9;:16;;;;;;;;;569:106::o;745:258:1:-;834:10;;811:7;;-1:-1:-1;;;834:10:1;;;;830:167;;;889:15;;;;;;;;;-1:-1:-1;;;;;889:15:1;-1:-1:-1;;;;;867:48:1;;916:7;867:57;;;;;;;;;;;;;-1:-1:-1;;;;;867:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;867:57:1;;-1:-1:-1;860:64:1;;830:167;962:24;978:7;962:15;:24::i;:::-;955:31;;;;1648:145:6;1239:12;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;1738:6:::1;::::0;1717:40:::1;::::0;1754:1:::1;::::0;1738:6:::1;::::0;::::1;-1:-1:-1::0;;;;;1738:6:6::1;::::0;1717:40:::1;::::0;1754:1;;1717:40:::1;1767:6;:19:::0;;-1:-1:-1;;1767:19:6::1;::::0;;1648:145::o;268:57:4:-;;;;;;;;;;;;;;;-1:-1:-1;;268:57:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5348:133:1:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;5401:10:1::1;::::0;-1:-1:-1;;;5401:10:1;::::1;;;5400:11;5392:58;;;;-1:-1:-1::0;;;5392:58:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5460:14;:12;:14::i;3297:296:10:-:0;1398:4;1374:12;:10;:12::i;:::-;-1:-1:-1;;;;;1374:29:10;;1366:69;;;;;-1:-1:-1;;;1366:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3369:14:10;::::1;;::::0;;;:6:::1;:14;::::0;;;;;::::1;;3361:63;;;;-1:-1:-1::0;;;3361:63:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3452:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;3442:17:10::1;:6;-1:-1:-1::0;;;;;3442:17:10::1;;;3434:63;;;;-1:-1:-1::0;;;3434:63:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3507:14:10;::::1;3524:5;3507:14:::0;;;:6:::1;:14;::::0;;;;;;;;:22;;-1:-1:-1;;3507:22:10::1;::::0;;3539:11:::1;:13:::0;;-1:-1:-1;;3539:13:10;::::1;;::::0;;::::1;-1:-1:-1::0;;3539:13:10;;;::::1;;::::0;;3567:19;;;;;;;::::1;::::0;;;;;;;;::::1;3297:296:::0;:::o;1025:77:6:-;1089:6;;;;;-1:-1:-1;;;;;1089:6:6;;1025:77::o;2330:85:3:-;2401:7;2394:14;;;;;;;;-1:-1:-1;;2394:14:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2369:13;;2394:14;;2401:7;;2394:14;;2401:7;2394:14;;;;;;;;;;;;;;;;;;;;;;;;200:29:10;;;;;;:::o;2263:182:4:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;2351:15:4::1;:32:::0;;;2402:38:::1;2429:10;:8;:10::i;:::-;2402:9:::0;;2416:23:::1;;2424:2;2416:23;2402:13;:38::i;:::-;2389:10;:51:::0;-1:-1:-1;;2263:182:4:o;329:34::-;;;-1:-1:-1;;;;;329:34:4;;:::o;135:38:10:-;;;;;;;;;;;;;;;:::o;3686:474:1:-;3809:4;3786:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3834:24:1::1;3850:7;3834:15;:24::i;:::-;3833:25;3825:80;;;;-1:-1:-1::0;;;3825:80:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3920:10;::::0;-1:-1:-1;;;3920:10:1;::::1;;;3916:238;;;3975:15;::::0;;;::::1;-1:-1:-1::0;;;;;3975:15:1::1;3953:63;4017:12;:10;:12::i;3916:238::-;4094:49;4118:7;4127:15;4094:23;:49::i;1791:431::-:0;1898:4;1875:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1923:26:1::1;1939:9;1923:15;:26::i;:::-;1922:27;1914:84;;;;-1:-1:-1::0;;;1914:84:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2013:10;::::0;-1:-1:-1;;;2013:10:1;::::1;;;2009:207;;;2068:15;::::0;;;::::1;-1:-1:-1::0;;;;;2068:15:1::1;2046:55;2102:12;:10;:12::i;2009:207::-;2172:33;2187:9;2198:6;2172:14;:33::i;3401:255:4:-:0;4673:10;4664:20;;;;:8;:20;;;;;;;;4656:80;;;;-1:-1:-1;;;4656:80:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3592:5:::1;-1:-1:-1::0;;;;;3534:63:4::1;:54;3559:5;3565:3;3569:6;3577:2;3581;3585;3534:24;:54::i;:::-;-1:-1:-1::0;;;;;3534:63:4::1;;3531:121;;;3606:39;3628:5;3634:3;3638:6;3606:21;:39::i;:::-;3401:255:::0;;;;;;:::o;6911:795:1:-;7046:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7073:10:1::1;::::0;-1:-1:-1;;;7073:10:1;::::1;;;7069:631;;;7103:9;7099:308;7118:8;:15;7116:1;:17;7099:308;;;7161:28;7177:8;7186:1;7177:11;;;;;;;;;;;;;;7161:15;:28::i;:::-;7160:29;:65;;;;;7194:31;7210:11;7222:1;7210:14;;;;;;;7194:31;7193:32;7160:65;7157:236;;;7270:15;::::0;;;::::1;-1:-1:-1::0;;;;;7270:15:1::1;7248:70;7319:12;:10;:12::i;:::-;7333:8;7342:1;7333:11;;;;;;;;;;;;;;7346;7358:1;7346:14;;;;;;;;;;;;;;7362:8;7371:1;7362:11;;;;;;;;;;;;;;7248:126;;;;;;;;;;;;;-1:-1:-1::0;;;;;7248:126:1::1;;;;;;-1:-1:-1::0;;;;;7248:126:1::1;;;;;;-1:-1:-1::0;;;;;7248:126:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7157:236;7135:3;;7099:308;;;;7069:631;;;7441:9;7437:253;7456:8;:15;7454:1;:17;7437:253;;;7499:28;7515:8;7524:1;7515:11;;;;;;;7499:28;7498:29;:65;;;;;7532:31;7548:11;7560:1;7548:14;;;;;;;7532:31;7531:32;7498:65;7495:181;;;7586:71;7616:8;7625:1;7616:11;;;;;;;;;;;;;;7629;7641:1;7629:14;;;;;;;;;;;;;;7645:8;7654:1;7645:11;;;;;;;;;;;;;;7586:29;:71::i;:::-;7473:3;;7437:253;;694:134:4::0;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;781:19:4::1;:42:::0;;;::::1;-1:-1:-1::0;;;;;781:42:4;;;::::1;::::0;;;::::1;::::0;;694:134::o;1577:184:1:-;1664:10;;1637:7;;-1:-1:-1;;;1664:10:1;;;;1656:57;;;;-1:-1:-1;;;1656:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1730:24;1746:7;1730:15;:24::i;:::-;1723:31;1577:184;-1:-1:-1;;1577:184:1:o;7712:805::-;4673:10:4;4664:20;;;;:8;:20;;;;;;;;4656:80;;;;-1:-1:-1;;;4656:80:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7900:10:1::1;::::0;-1:-1:-1;;;7900:10:1;::::1;;;7896:615;;;7930:9;7926:300;7945:5;:12;7943:1;:14;7926:300;;;7985:25;8001:5;8007:1;8001:8;;;;;;;7985:25;7984:26;:54;;;;;8015:23;8031:3;8035:1;8031:6;;;;;;;8015:23;8014:24;7984:54;7981:231;;;8083:15;::::0;;;::::1;-1:-1:-1::0;;;;;8083:15:1::1;8061:71;8133:12;:10;:12::i;:::-;8147:5;8153:1;8147:8;;;;;;;;;;;;;;8157:3;8161:1;8157:6;;;;;;;;;;;;;;8165;8172:1;8165:9;;;;;;;;;;;;;;8175:2;8178:1;8175:5;;;;;;;;;;;;;;8181:2;8184:1;8181:5;;;;;;;;;;;;;;8187:2;8190:1;8187:5;;;;;;;;;;;;;;8061:132;;;;;;;;;;;;;-1:-1:-1::0;;;;;8061:132:1::1;;;;;;-1:-1:-1::0;;;;;8061:132:1::1;;;;;;-1:-1:-1::0;;;;;8061:132:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7981:231;7959:3;;7926:300;;;;7896:615;;;8260:9;8256:245;8275:5;:12;8273:1;:14;8256:245;;;8315:25;8331:5;8337:1;8331:8;;;;;;;8315:25;8314:26;:54;;;;;8345:23;8361:3;8365:1;8361:6;;;;;;;8345:23;8344:24;8314:54;8311:176;;;8391:77;8422:5;8428:1;8422:8;;;;;;;;;;;;;;8432:3;8436:1;8432:6;;;;;;;;;;;;;;8440;8447:1;8440:9;;;;;;;;;;;;;;8450:2;8453:1;8450:5;;;;;;;;;;;;;;8456:2;8459:1;8456:5;;;;;;;;;;;;;;8462:2;8465:1;8462:5;;;;;;;;;;;;;;8391:30;:77::i;:::-;8289:3;;8256:245;;;;7712:805:::0;;;;;;:::o;257:44:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;257:44:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1679:397::-;1260:6;:20;1267:12;:10;:12::i;:::-;-1:-1:-1;;;;;1260:20:10;;;;;;;;;;;;-1:-1:-1;1260:20:10;;;;1252:61;;;;;-1:-1:-1;;;1252:61:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;1068:27:::1;::::0;;::::1;:15;::::0;;;:9:::1;:15;::::0;;;;:19;1756:4;;1068:19:::1;:27;1060:68;;;::::0;;-1:-1:-1;;;1060:68:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1147:15;::::0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:20;;;::::1;;;1146:21;1138:59;;;::::0;;-1:-1:-1;;;1138:59:10;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1799:15:::2;::::0;::::2;1771:25;1799:15:::0;;;:9:::2;:15;::::0;;;;;1833:14:::2;::::0;::::2;::::0;1848:12:::2;:10;:12::i;:::-;-1:-1:-1::0;;;;;1833:28:10::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;1833:28:10;;::::2;;1832:29;1824:82;;;;-1:-1:-1::0;;;1824:82:10::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1948:4;1917:8;:14;;:28;1932:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;1917:28:10::2;::::0;;::::2;::::0;::::2;::::0;;;;;;-1:-1:-1;1917:28:10;:35;;-1:-1:-1;;1917:35:10::2;::::0;::::2;;::::0;;;::::2;::::0;;1962:16;;-1:-1:-1;;1962:16:10;::::2;::::0;;;;::::2;;::::0;;::::2;-1:-1:-1::0;1962:16:10::2;;::::0;;::::2;;::::0;;1993:32:::2;2006:4:::0;2012:12:::2;:10;:12::i;:::-;1993:32;::::0;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;1993:32:10;;::::2;;::::0;::::2;::::0;;;;;;;;;::::2;2053:16;2060:8;2053:6;:16::i;1235:282:1:-:0;1349:10;;1316:17;;-1:-1:-1;;;1349:10:1;;;;1345:166;;;1389:15;;1382:49;;;;;;-1:-1:-1;;;;;1382:49:1;;;;;;;;;;;;;;;;1389:15;;;;;;;;1382:33;;:49;;;;;;;;;;;;;;;1389:15;1382:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1382:49:1;;-1:-1:-1;1375:56:1;;1345:166;1469:31;1485:5;1492:7;1469:15;:31::i;:::-;1462:38;1235:282;-1:-1:-1;;;1235:282:1:o;158:34:4:-;;;;:::o;2449:125::-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;2528:41:4::1;2558:10;:8;:10::i;2528:41::-;2516:9;:53:::0;-1:-1:-1;2449:125:4:o;3638:147:10:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;3726:51:10::1;::::0;;-1:-1:-1;;;;;3726:51:10;::::1;;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;3726:51:10::1;;;::::0;;3712:66:::1;::::0;:13:::1;:66::i;3972:162::-:0;1068:27;;;;:15;;;;:9;:15;;;;;:19;4041:4;;1068:19;:27;1060:68;;;;;-1:-1:-1;;;1060:68:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;1147:15;;;;;;;:9;:15;;;;;:20;;;;;;1146:21;1138:59;;;;;-1:-1:-1;;;1138:59:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;1239:12:6::1;:10;:12::i;:::-;1229:6;::::0;::::1;::::0;::::1;-1:-1:-1::0;;;;;1229:6:6;;::::1;:22:::0;::::1;;1221:67;;;::::0;;-1:-1:-1;;;1221:67:6;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;::::1;;4066:15:10::2;::::0;::::2;;::::0;;;:9:::2;:15;::::0;;;;;;;;:27;;-1:-1:-1;;4066:27:10::2;::::0;::::2;::::0;;4108:19;;;;;;;::::2;::::0;;;;;;;;::::2;3972:162:::0;;:::o;4180:207:4:-;4307:7;4328:54;4338:31;4352:5;4358:3;4362:6;4338:13;:31::i;:::-;4371:2;4375;4379;4328:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4328:54:4;;-1:-1:-1;;4328:54:4;;;4180:207;-1:-1:-1;;;;;;;;4180:207:4:o;425:138:0:-;1239:12:6;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;494:16:0;::::1;513:5;494:16:::0;;;:9:::1;:16;::::0;;;;;;;;:24;;-1:-1:-1;;494:24:0::1;::::0;;533:23;;;;;;;::::1;::::0;;;;;;;;::::1;425:138:::0;:::o;6234:671:1:-;6338:12;:10;:12::i;:::-;739:22:0;755:5;739:15;:22::i;:::-;738:23;730:75;;;;-1:-1:-1;;;730:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6366:10:1::1;::::0;-1:-1:-1;;;6366:10:1;::::1;;;6362:537;;;6396:9;6392:254;6411:11;:18;6409:1;:20;6392:254;;;6457:31;6473:11;6485:1;6473:14;;;;;;;6457:31;6453:179;;6540:15;;;;;;;;;-1:-1:-1::0;;;;;6540:15:1::1;-1:-1:-1::0;;;;;6518:66:1::1;;6585:11;6597:1;6585:14;;;;;;;;;;;;;;6601:8;6610:1;6601:11;;;;;;;;;;;;;;6518:95;;;;;;;;;;;;;-1:-1:-1::0;;;;;6518:95:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6511:102;;;6453:179;6431:3;;6392:254;;;;6362:537;;;6680:9;6676:213;6695:11;:18;6693:1;:20;6676:213;;;6741:31;6757:11;6769:1;6757:14;;;;;;;6741:31;6737:138;;6802:54;6828:11;6840:1;6828:14;;;;;;;;;;;;;;6844:8;6853:1;6844:11;;;;;;;;;;;;;;6802:25;:54::i;6737:138::-;6715:3;;6676:213;;1942:240:6::0;1239:12;:10;:12::i;:::-;1229:6;;;;;-1:-1:-1;;;;;1229:6:6;;;:22;;;1221:67;;;;;-1:-1:-1;;;1221:67:6;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1221:67:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;2030:22:6;::::1;2022:73;;;;-1:-1:-1::0;;;2022:73:6::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:6;::::0;2110:38:::1;::::0;-1:-1:-1;;;;;2110:38:6;;::::1;::::0;2131:6:::1;::::0;::::1;;::::0;2110:38:::1;::::0;;;::::1;2158:6;:17:::0;;-1:-1:-1;;;;;2158:17:6;;::::1;;;-1:-1:-1::0;;2158:17:6;;::::1;::::0;;;::::1;::::0;;1942:240::o;4955:374:1:-;1398:4:10;1374:12;:10;:12::i;:::-;-1:-1:-1;;;;;1374:29:10;;1366:69;;;;;-1:-1:-1;;;1366:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;5032:10:1::1;::::0;-1:-1:-1;;;5032:10:1;::::1;;;5031:11;5023:58;;;;-1:-1:-1::0;;;5023:58:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5099:22;5115:5;5099:15;:22::i;:::-;5091:91;;;;-1:-1:-1::0;;;5091:91:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5192:18;5213:16;5223:5;5213:9;:16::i;:::-;5192:37;;5239:30;5251:5;5258:10;5239:11;:30::i;:::-;5284:38;::::0;;;;;;;-1:-1:-1;;;;;5284:38:1;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;1445:1:10;4955:374:1::0;:::o;832:99:4:-;-1:-1:-1;;;;;909:17:4;888:4;909:17;;;:8;:17;;;;;;;;;832:99::o;3070:221:10:-;1398:4;1374:12;:10;:12::i;:::-;-1:-1:-1;;;;;1374:29:10;;1366:69;;;;;-1:-1:-1;;;1366:69:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3140:14:10;::::1;;::::0;;;:6:::1;:14;::::0;;;;;::::1;;3139:15;3131:68;;;;-1:-1:-1::0;;;3131:68:10::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;3209:14:10;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;;:21;;3226:4:::1;-1:-1:-1::0;;3209:21:10;;::::1;::::0;::::1;::::0;;;3240:11:::1;:13:::0;;-1:-1:-1;;3240:13:10;::::1;;::::0;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;3268:16;;;;;;;::::1;::::0;;;;;;;;::::1;3070:221:::0;:::o;229:35:4:-;;;;:::o;874:176:8:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:8;;;;;;;;;;;;;;;;;;;;;;;;;;;588:104:2;675:10;588:104;:::o;1481:180:10:-;1557:7;:9;;;;;;;;;;;;-1:-1:-1;;1557:9:10;;;;;;;1593:29;;;;;;;;;;;1544:10;1593:29;;;;;;;;;;;;;;;;;;;1576:14;;;:9;:14;;;;;;:46;;;;;;;;;;;;-1:-1:-1;;1576:46:10;;;;;-1:-1:-1;;1576:46:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1557:9;;1593:29;;1576:46;;;;;;;;;;:::i;:::-;-1:-1:-1;;1637:17:10;;;;;;;;;;;;-1:-1:-1;1637:17:10;;;;;;;;1481:180;;:::o;4188:166:3:-;4271:4;4287:39;4296:12;:10;:12::i;:::-;4310:7;4319:6;4287:8;:39::i;:::-;-1:-1:-1;4343:4:3;4188:166;;;;:::o;1031:207:4:-;1088:7;1103:11;1117:40;1151:5;1118:27;1129:15;;1118:6;:10;;:27;;;;:::i;:::-;1117:33;;:40::i;:::-;1103:54;;1173:10;;1167:3;:16;1163:55;;;-1:-1:-1;1201:10:4;;1230:3;1031:207;-1:-1:-1;;1031:207:4:o;1321:134:8:-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;3671:172:3:-;3757:4;3773:42;3783:12;:10;:12::i;:::-;3797:9;3808:6;3773:9;:42::i;3179:106::-;3266:12;;3179:106;:::o;1542:717:4:-;1641:4;-1:-1:-1;;;;;1661:17:4;;1653:72;;;;-1:-1:-1;;;1653:72:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1749:16;1759:5;1749:9;:16::i;:::-;1739:6;:26;;1731:84;;;;-1:-1:-1;;;1731:84:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1839:28;1849:5;1856:10;1839:9;:28::i;:::-;1829:6;:38;;1821:97;;;;-1:-1:-1;;;1821:97:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1924:11;1938:16;1947:6;1938:8;:16::i;:::-;1924:30;-1:-1:-1;1960:18:4;1981:15;:6;1924:30;1981:10;:15::i;:::-;1960:36;;2002:33;2012:5;2019:3;2024:10;2002:9;:33::i;:::-;2045:7;;2041:70;;2079:19;;2062:42;;2072:5;;-1:-1:-1;;;;;2079:19:4;2100:3;2062:9;:42::i;:::-;2116:120;2125:5;2132:10;2144:91;2177:6;2144:91;;;;;;;;;;;;;;;;;:28;2154:5;2161:10;2144:9;:28::i;2116:120::-;-1:-1:-1;2249:4:4;;1542:717;-1:-1:-1;;;;;1542:717:4:o;6968:530:3:-;-1:-1:-1;;;;;7073:20:3;;7065:70;;;;-1:-1:-1;;;7065:70:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7153:23:3;;7145:71;;;;-1:-1:-1;;;7145:71:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7227:47;7248:6;7256:9;7267:6;7227:20;:47::i;:::-;7305:71;7327:6;7305:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7305:17:3;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;7285:17:3;;;:9;:17;;;;;;;;;;;:91;;;;7409:20;;;;;;;:32;;7434:6;7409:24;:32::i;:::-;-1:-1:-1;;;;;7386:20:3;;;:9;:20;;;;;;;;;;;;:55;;;;7456:35;;;;;;;7386:20;;7456:35;;;;;;;;;;;;;6968:530;;;:::o;1746:187:8:-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:8;;;1746:187::o;9290:340:3:-;-1:-1:-1;;;;;9391:19:3;;9383:68;;;;-1:-1:-1;;;9383:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9469:21:3;;9461:68;;;;-1:-1:-1;;;9461:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9540:18:3;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9591:32;;;;;;;;;;;;;;;;;9290:340;;;:::o;5526:215::-;5614:4;5630:83;5639:12;:10;:12::i;:::-;5653:7;5662:50;5701:10;5662:11;:25;5674:12;:10;:12::i;:::-;-1:-1:-1;;;;;5662:25:3;;;;;;;;;;;;;;;;;-1:-1:-1;5662:25:3;;;:34;;;;;;;;;;;:38;:50::i;2037:117:7:-;1605:7;;;;;;;1597:40;;;;;-1:-1:-1;;;1597:40:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;2095:7:::1;:15:::0;;-1:-1:-1;;2095:15:7::1;::::0;;2125:22:::1;2134:12;:10;:12::i;:::-;2125:22;::::0;;-1:-1:-1;;;;;2125:22:7;;::::1;::::0;;;;;;;::::1;::::0;;::::1;2037:117::o:0;7768:370:3:-;-1:-1:-1;;;;;7851:21:3;;7843:65;;;;;-1:-1:-1;;;7843:65:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;7919:49;7948:1;7952:7;7961:6;7919:20;:49::i;:::-;7994:12;;:24;;8011:6;7994:16;:24::i;:::-;7979:12;:39;-1:-1:-1;;;;;8049:18:3;;:9;:18;;;;;;;;;;;:30;;8072:6;8049:22;:30::i;:::-;-1:-1:-1;;;;;8028:18:3;;:9;:18;;;;;;;;;;;:51;;;;8094:37;;;;;;;8028:18;;:9;;8094:37;;;;;;;;;;7768:370;;:::o;8457:410::-;-1:-1:-1;;;;;8540:21:3;;8532:67;;;;-1:-1:-1;;;8532:67:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8610:49;8631:7;8648:1;8652:6;8610:20;:49::i;:::-;8691:68;8714:6;8691:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8691:18:3;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;8670:18:3;;:9;:18;;;;;;;;;;:89;8784:12;;:24;;8801:6;8784:16;:24::i;:::-;8769:12;:39;8823:37;;;;;;;;8849:1;;-1:-1:-1;;;;;8823:37:3;;;;;;;;;;;;8457:410;;:::o;3343:125::-;-1:-1:-1;;;;;3443:18:3;3417:7;3443:18;;;;;;;;;;;;3343:125::o;1790:115:7:-;1341:7;;;;;;;1340:8;1332:37;;;;;-1:-1:-1;;;1332:37:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;1849:7:::1;:14:::0;;-1:-1:-1;;1849:14:7::1;::::0;::::1;::::0;;1878:20:::1;1885:12;:10;:12::i;2180:459:8:-:0;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:8;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6228:266:3;6321:4;6337:129;6346:12;:10;:12::i;:::-;6360:7;6369:96;6408:15;6369:96;;;;;;;;;;;;;;;;;:11;:25;6381:12;:10;:12::i;:::-;-1:-1:-1;;;;;6369:25:3;;;;;;;;;;;;;;;;;-1:-1:-1;6369:25:3;;;:34;;;;;;;;;;;:96;:38;:96::i;1242:296:4:-;1322:4;1334:11;1348:16;1357:6;1348:8;:16::i;:::-;1334:30;-1:-1:-1;1370:18:4;1391:15;:6;1334:30;1391:10;:15::i;:::-;1370:36;;1412:31;1427:3;1432:10;1412:14;:31::i;:::-;-1:-1:-1;1453:7:4;;1449:68;;1485:19;;1470:40;;-1:-1:-1;;;;;1485:19:4;1506:3;1470:14;:40::i;:::-;;1449:68;-1:-1:-1;1529:4:4;;1242:296;-1:-1:-1;;;;1242:296:4:o;3660:477::-;-1:-1:-1;;;;;3749:17:4;;;;;;:47;;;3780:16;3790:5;3780:9;:16::i;:::-;3770:6;:26;;3749:47;3746:387;;;3805:11;3819:16;3828:6;3819:8;:16::i;:::-;3805:30;-1:-1:-1;3843:18:4;3864:15;:6;3805:30;3864:10;:15::i;:::-;3843:36;;3900:25;3915:9;;3900:10;:14;;:25;;;;:::i;:::-;3887:38;;3933:33;3943:5;3950:3;3955:10;3933:9;:33::i;:::-;3978:7;;3974:74;;4014:19;;3997:42;;4007:5;;-1:-1:-1;;;;;4014:19:4;4035:3;3997:9;:42::i;:::-;4058:9;;:13;4055:72;;4082:36;4092:5;4098:9;4108;;4082;:36::i;2082:326:10:-;2164:11;;2146:15;;2176:1;2164:11;;;;:13;2146:31;;:15;;;;;;;:31;2143:259;;;2193:12;2219:4;-1:-1:-1;;;;;2211:18:10;2230:9;:17;;2211:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2192:56;;;2270:7;2262:48;;;;;-1:-1:-1;;;2262:48:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;2324:21;;-1:-1:-1;;2324:21:10;;;;;;2364:27;;;2377:13;;;;2364:27;;;;;;;;;;;;2143:259;2082:326;:::o;3901:149:3:-;-1:-1:-1;;;;;4016:18:3;;;3990:7;4016:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3901:149::o;3101:130:8:-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;5999:229:1:-;6107:44;6134:4;6140:2;6144:6;6107:26;:44::i;:::-;6171:8;:6;:8::i;:::-;6170:9;6162:59;;;;-1:-1:-1;;;6162:59:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3713:272:8;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:8:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

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