ETH Price: $3,542.79 (-1.26%)
Gas: 25 Gwei

Contract

0x42d6493eC6A2fc98F5Af71d816F9826569a158cD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Deposit Token100567682020-05-13 8:32:451416 days ago1589358765IN
0x42d6493e...569a158cD
0 ETH0.0029428941
Withdraw Token100502382020-05-12 8:21:071417 days ago1589271667IN
0x42d6493e...569a158cD
0 ETH0.0007632332
Deposit Token100502312020-05-12 8:19:251417 days ago1589271565IN
0x42d6493e...569a158cD
0 ETH0.0023686733
Accept Ownership89646622019-11-19 21:33:101591 days ago1574199190IN
0x42d6493e...569a158cD
0 ETH0.000019891
Only Owner Trans...89625532019-11-19 12:59:301591 days ago1574168370IN
0x42d6493e...569a158cD
0 ETH0.000082721.9
Change Fee Accou...89625532019-11-19 12:59:301591 days ago1574168370IN
0x42d6493e...569a158cD
0 ETH0.000054221.9
0x6080604089624802019-11-19 12:44:281591 days ago1574167468IN
 Create: PlanetAgroDEX
0 ETH0.011060951.8

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PlanetAgroDEX

Compiler Version
v0.5.13+commit.5b0b510c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-11-19
*/

pragma solidity 0.5.13;  /*
 
 
 
    ___________________________________________________________________
      _      _                                        ______           
      |  |  /          /                                /              
    --|-/|-/-----__---/----__----__---_--_----__-------/-------__------
      |/ |/    /___) /   /   ' /   ) / /  ) /___)     /      /   )     
    __/__|____(___ _/___(___ _(___/_/_/__/_(___ _____/______(___/__o_o_


        
       
    ██████╗ ██╗      █████╗ ███╗   ██╗███████╗████████╗     █████╗  ██████╗ ██████╗  ██████╗     ██████╗ ███████╗██╗  ██╗
    ██╔══██╗██║     ██╔══██╗████╗  ██║██╔════╝╚══██╔══╝    ██╔══██╗██╔════╝ ██╔══██╗██╔═══██╗    ██╔══██╗██╔════╝╚██╗██╔╝
    ██████╔╝██║     ███████║██╔██╗ ██║█████╗     ██║       ███████║██║  ███╗██████╔╝██║   ██║    ██║  ██║█████╗   ╚███╔╝ 
    ██╔═══╝ ██║     ██╔══██║██║╚██╗██║██╔══╝     ██║       ██╔══██║██║   ██║██╔══██╗██║   ██║    ██║  ██║██╔══╝   ██╔██╗ 
    ██║     ███████╗██║  ██║██║ ╚████║███████╗   ██║       ██║  ██║╚██████╔╝██║  ██║╚██████╔╝    ██████╔╝███████╗██╔╝ ██╗
    ╚═╝     ╚══════╝╚═╝  ╚═╝╚═╝  ╚═══╝╚══════╝   ╚═╝       ╚═╝  ╚═╝ ╚═════╝ ╚═╝  ╚═╝ ╚═════╝     ╚═════╝ ╚══════╝╚═╝  ╚═╝
                                                                                                                         
    


------------------------------------------------------------------------------------------------------
 Copyright (c) 2019 Onwards Planet Agro Inc. ( https://planetagro-exchange.org )
 Contract designed with ❤ by EtherAuthority  ( https://EtherAuthority.io )
------------------------------------------------------------------------------------------------------
*/


//*******************************************************************
//------------------------ SafeMath Library -------------------------
//*******************************************************************
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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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-solidity/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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}


interface ERC20Essential 
{

    function transfer(address _to, uint256 _amount) external returns (bool);
    function transferFrom(address _from, address _to, uint256 _amount) external returns (bool);

}




//*******************************************************************//
//------------------ Contract to Manage Ownership -------------------//
//*******************************************************************//
    
contract owned {
    address public owner;
    address public newOwner;


    event OwnershipTransferred(uint256 curTime, address indexed _from, address indexed _to);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner, 'Only owner can call this function');
        _;
    }


    function onlyOwnerTransferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }

    //this flow is to prevent transferring ownership to wrong wallet by mistake
    function acceptOwnership() public {
        require(msg.sender == newOwner, 'Only new owner can call this function');
        emit OwnershipTransferred(now, owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}



contract PlanetAgroDEX is owned {
  using SafeMath for uint256;
  bool public safeGuard; // To hault all non owner functions in case of imergency - by default false
  address public feeAccount; //the account that will receive fees
  uint public tradingFee = 30; // 30 = 0.3%
  address public mxnAddress = 0x59A11e14514b15D5486b7fAa190Ab234DE04EdB4;
  
  //referrals
  uint256 public refPercent = 10;  // percent to calculate referal bonous - by default 10% of trading fee
  
  mapping (address => mapping (address => uint)) public tokens; //mapping of token addresses to mapping of account balances (token=0 means Ether)
  mapping (address => mapping (bytes32 => bool)) public orders; //mapping of user accounts to mapping of order hashes to booleans (true = submitted by user, equivalent to offchain signature)
  mapping (address => mapping (bytes32 => uint)) public orderFills; //mapping of user accounts to mapping of order hashes to uints (amount of order that has been filled)
  
  /* Mapping to track referrer. The second address is the address of referrer, the Up-line/ Sponsor */
  mapping (address => address) public referrers;
  /* Mapping to track referrer bonus for all the referrers */
  mapping (address => uint) public referrerBonusBalance;
  
  event Order(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires,  address user);
  event Cancel(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user, uint8 v, bytes32 r, bytes32 s);
  event Trade( uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, address get, address give, uint256 orderBookID);
  event Deposit(uint256 curTime, address token, address user, uint amount, uint balance);
  event Withdraw(uint256 curTime, address token, address user, uint amount, uint balance);
  event OwnerWithdrawCommission(address indexed owner, address indexed tokenAddress, uint256 amount);
  
  // Events to track ether transfer to referrers
  event ReferrerBonus(address indexed referer, address indexed trader, uint256 referralBonus, uint256 timestamp );
  event ReferrerBonusWithdrawn(address indexed referrer, uint256 indexed amount);

  

    constructor() public {
        feeAccount = msg.sender;
    }

    function changeSafeguardStatus() onlyOwner public
    {
        if (safeGuard == false)
        {
            safeGuard = true;
        }
        else
        {
            safeGuard = false;    
        }
    }

    //Calculate percent and return result
    function calculatePercentage(uint256 PercentOf, uint256 percentTo ) internal pure returns (uint256) 
    {
        uint256 factor = 10000;
        require(percentTo <= factor, 'percentTo must be less than factor');
        uint256 c = PercentOf.mul(percentTo).div(factor);
        return c;
    }  



    
  // contract accepts incoming ether -  this needed in case owner want to fund refPool
  function() payable external {  }


  function changeFeeAccount(address feeAccount_) public onlyOwner {
    feeAccount = feeAccount_;
  }

  function changetradingFee(uint tradingFee_) public onlyOwner{
    require(tradingFee_ <= 10000, 'trading fee can not be more than 100%');
    tradingFee = tradingFee_;
  }
  
  function availableOwnerCommissionEther() public view returns(uint256){
      //assress 0x0 only holds ether as fee
      return tokens[address(0)][feeAccount];
  }
  
  function availableOwnerCommissionToken(address tokenAddress) public view returns(uint256){
      //assress 0x0 only holds ether as fee
      return tokens[tokenAddress][feeAccount];
  }
  
  function withdrawOwnerCommissoinEther() public  returns (string memory){
      require(msg.sender == feeAccount, 'Invalid caller');
      uint256 amount = availableOwnerCommissionEther();
      require (amount > 0, 'Nothing to withdraw');
      tokens[address(0)][feeAccount] = 0;
      msg.sender.transfer(amount);
      emit OwnerWithdrawCommission(msg.sender, address(0), amount);
      return "Ether withdrawn successfully";
  }
  
  function withdrawOwnerCommissoinToken(address tokenAddress) public  returns (string memory){
      require(msg.sender == feeAccount, 'Invalid caller');
      uint256 amount = availableOwnerCommissionToken(tokenAddress);
      require (amount > 0, 'Nothing to withdraw');
      tokens[tokenAddress][feeAccount] = 0;
      ERC20Essential(tokenAddress).transfer(msg.sender, amount);
      emit OwnerWithdrawCommission(msg.sender, tokenAddress, amount);
      return "Token withdrawn successfully";
  }

  function deposit() public payable {
    tokens[address(0)][msg.sender] = tokens[address(0)][msg.sender].add(msg.value);
    emit Deposit(now, address(0), msg.sender, msg.value, tokens[address(0)][msg.sender]);
  }

  function withdraw(uint amount) public {
    require(!safeGuard,"System Paused by Admin");
    require(tokens[address(0)][msg.sender] >= amount, 'Not enough balance');
    tokens[address(0)][msg.sender] = tokens[address(0)][msg.sender].sub(amount);
    msg.sender.transfer(amount);
    emit Withdraw(now, address(0), msg.sender, amount, tokens[address(0)][msg.sender]);
  }

  function depositToken(address token, uint amount) public {
    //remember to call Token(address).approve(address(this), amount) or this contract will not be able to do the transfer on your behalf.
    require(token!=address(0), 'Invalid token address');
    require(ERC20Essential(token).transferFrom(msg.sender, address(this), amount), 'tokens could not be transferred');
    tokens[token][msg.sender] = tokens[token][msg.sender].add(amount);
    emit Deposit(now, token, msg.sender, amount, tokens[token][msg.sender]);
  }
	
  function withdrawToken(address token, uint amount) public {
    require(!safeGuard,"System Paused by Admin");
    require(token != mxnAddress, 'MXN token can not be withdrawn');
    require(token!=address(0), 'Invalid token address');
    require(tokens[token][msg.sender] >= amount, 'not enough token balance');
    tokens[token][msg.sender] = tokens[token][msg.sender].sub(amount);
	  ERC20Essential(token).transfer(msg.sender, amount);
    emit Withdraw(now, token, msg.sender, amount, tokens[token][msg.sender]);
  }

  function balanceOf(address token, address user) public view returns (uint) {
    return tokens[token][user];
  }

  function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires) public {
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    orders[msg.sender][hash] = true;
    emit Order(now, tokenGet, amountGet, tokenGive, amountGive, expires, msg.sender);
  }


    /* address[4] addressArray elements
        0 = tokenGet
        1 = tokenGive
        2 = tradeMaker
        3 = referrer
    */
  function trade(address[4] memory addressArray, uint amountGet, uint amountGive, uint expires, uint8 v, bytes32 r, bytes32 s, uint amount, uint orderBookID) public {
    require(!safeGuard,"System Paused by Admin");
    //amount is in amountGet terms
    bytes32 hash = keccak256(abi.encodePacked(address(this), addressArray[0], amountGet, addressArray[1], amountGive, expires));
    require(
      (orders[addressArray[2]][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == addressArray[2]) &&
      block.number <= expires &&
      orderFills[addressArray[2]][hash].add(amount) <= amountGet,
      'Invalid trade order');

    tradeBalances(addressArray, amountGet, amountGive, amount );
    orderFills[addressArray[2]][hash] = orderFills[addressArray[2]][hash].add(amount);
    
    
    emit Trade(now, addressArray[0], amount, addressArray[1], amountGive * amount / amountGet, addressArray[2], msg.sender, orderBookID);
  }
    
    /**
        addressArray array elements
        0 = tokenGet
        1 = tokenGive
        2 = user
        3 = referrer
    */
  function tradeBalances(address[4] memory addressArray, uint amountGet, uint amountGive, uint amount) internal {
    
    uint tradingFeeXfer = calculatePercentage(amount,tradingFee);
    
    //processing referrers bonus - which is % of the trading fee
    processReferrerBonus(addressArray[3], tradingFeeXfer);

    tokens[addressArray[0]][msg.sender] = tokens[addressArray[0]][msg.sender].sub(amount.add(tradingFeeXfer));
    tokens[addressArray[0]][addressArray[2]] = tokens[addressArray[0]][addressArray[2]].add(amount.sub(tradingFeeXfer));
    tokens[addressArray[0]][feeAccount] = tokens[addressArray[0]][feeAccount].add(tradingFeeXfer);

    tokens[addressArray[1]][addressArray[2]] = tokens[addressArray[1]][addressArray[2]].sub(amountGive.mul(amount) / amountGet);
    tokens[addressArray[1]][msg.sender] = tokens[addressArray[1]][msg.sender].add(amountGive.mul(amount) / amountGet);
  }
  
  

  function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user, uint8 v, bytes32 r, bytes32 s, uint amount, address sender) public view returns(bool) {
    
    if (!(
      tokens[tokenGet][sender] >= amount &&
      availableVolume(tokenGet, amountGet, tokenGive, amountGive, expires, user, v, r, s) >= amount
    )) return false;
    return true;
  }
  
  function testVRS(address tokenGet, uint256 amountGet, address tokenGive, uint256 amountGive, uint256 expires, uint8 v, bytes32 r, bytes32 s ) public view returns(address){
      
      bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
     
      return ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s);
    
  }

  function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user, uint8 v, bytes32 r, bytes32 s) public view returns(uint) {
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    uint available1;
    if (!(
      (orders[user][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == user) &&
      block.number <= expires
    )) return 0;
    available1 = tokens[tokenGive][user].mul(amountGet) / amountGive;
    
    if (amountGet.sub(orderFills[user][hash])<available1) return amountGet.sub(orderFills[user][hash]);
    return available1;
    
  }

  function amountFilled(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, address user) public view returns(uint) {
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    return orderFills[user][hash];
  }

  function cancelOrder(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint8 v, bytes32 r, bytes32 s) public {
    require(!safeGuard,"System Paused by Admin");
    bytes32 hash = keccak256(abi.encodePacked(address(this), tokenGet, amountGet, tokenGive, amountGive, expires));
    require(orders[msg.sender][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == msg.sender, 'Invalid trade order');
    orderFills[msg.sender][hash] = amountGet;
    emit Cancel(now, tokenGet, amountGet, tokenGive, amountGive, expires, msg.sender, v, r, s);
  }



//==================================================//
//              REFERRAL SECTION CODE               //
//==================================================//

function processReferrerBonus(address _referrer, uint256 _tradingFeeLocal) internal {
      
      address existingReferrer = referrers[msg.sender];
      
      if(_referrer != address(0) && existingReferrer != address(0) ){
        referrerBonusBalance[existingReferrer] += _tradingFeeLocal * refPercent / 100;
        emit ReferrerBonus(_referrer, msg.sender, _tradingFeeLocal * refPercent / 100, now );
      }
      else if(_referrer != address(0) && existingReferrer == address(0) ){
        //no referrer exist, but provided in trade function call
        referrerBonusBalance[_referrer] += _tradingFeeLocal * refPercent / 100;
        referrers[msg.sender] = _referrer;
        emit ReferrerBonus(_referrer, msg.sender, _tradingFeeLocal * refPercent / 100, now );
      }
  }
  
  function changeRefPercent(uint256 newRefPercent) public onlyOwner returns (string memory){
      require(newRefPercent <= 100, 'newRefPercent can not be more than 100');
      refPercent = newRefPercent;
      return "refPool fee updated successfully";
  }
  
  /**
        * Function will allow users to withdraw their referrer bonus  
    */
    function claimReferrerBonus() public returns(bool) {
        
        address payable msgSender = msg.sender;
        
        uint256 referralBonus = referrerBonusBalance[msgSender];
        
        require(referralBonus > 0, 'Insufficient referrer bonus');
        referrerBonusBalance[msgSender] = 0;
        
        
        //transfer the referrer bonus
        msgSender.transfer(referralBonus);
        
        //fire event
        emit ReferrerBonusWithdrawn(msgSender, referralBonus);
        
        return true;
    }


    function updateMXNaddress(address newMXNaddress) public onlyOwner returns(string memory){
        mxnAddress = newMXNaddress;
        return "MXN address updated successfully";
    }






}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGet","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGive","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"v","type":"uint8"},{"indexed":false,"internalType":"bytes32","name":"r","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"Cancel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGet","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGive","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGive","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Order","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OwnerWithdrawCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referer","type":"address"},{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"uint256","name":"referralBonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ReferrerBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferrerBonusWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGet","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGet","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenGive","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountGive","type":"uint256"},{"indexed":false,"internalType":"address","name":"get","type":"address"},{"indexed":false,"internalType":"address","name":"give","type":"address"},{"indexed":false,"internalType":"uint256","name":"orderBookID","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"curTime","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"amountFilled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"availableOwnerCommissionEther","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"availableOwnerCommissionToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"availableVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"feeAccount_","type":"address"}],"name":"changeFeeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newRefPercent","type":"uint256"}],"name":"changeRefPercent","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"changeSafeguardStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tradingFee_","type":"uint256"}],"name":"changetradingFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimReferrerBonus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mxnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"onlyOwnerTransferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"}],"name":"order","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orderFills","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"orders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrerBonusBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"safeGuard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"testTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"tokenGet","type":"address"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"address","name":"tokenGive","type":"address"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"testVRS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[4]","name":"addressArray","type":"address[4]"},{"internalType":"uint256","name":"amountGet","type":"uint256"},{"internalType":"uint256","name":"amountGive","type":"uint256"},{"internalType":"uint256","name":"expires","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"orderBookID","type":"uint256"}],"name":"trade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tradingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newMXNaddress","type":"address"}],"name":"updateMXNaddress","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawOwnerCommissoinEther","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawOwnerCommissoinToken","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052601e6003557359a11e14514b15d5486b7faa190ab234de04edb4600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60055534801561006f57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061587280620001016000396000f3fe60806040526004361061020f5760003560e01c8063865505a411610118578063bd916452116100a0578063d4ee1d901161006f578063d4ee1d9014610f27578063f70b83e914610f7e578063f7888aec14611044578063fd37503f146110c9578063fd5a3c45146111595761020f565b8063bd91645214610dda578063bf52f1cf14610e09578063c5d9a28f14610ecc578063d0e30db014610f1d5761020f565b8063982371b4116100e7578063982371b414610b1f5780639e281a9814610bd05780639ff67fd814610c2b578063a4cab25914610d10578063bb5f462914610d675761020f565b8063865505a414610859578063889126b21461090d57806389130700146109fe5780638da5cb5b14610ac85761020f565b806356f433521161019b57806365e17c9d1161016a57806365e17c9d14610706578063700f8e181461075d57806371ffcb16146107c257806379279fd11461081357806379ba5097146108425761020f565b806356f43352146105bc57806359d5335b146105e75780635ae11d5d146106125780635be07a45146106a15761020f565b8063338b5dea116101e2578063338b5dea146104095780633d3a02e3146104645780634a3b68cc1461048f5780634bec833514610520578063508493bc146105375761020f565b806303d196371461021157806319774d431461024c5780632e1a7d4d146102bb5780633176fb37146102f6575b005b34801561021d57600080fd5b5061024a6004803603602081101561023457600080fd5b8101908080359060200190929190505050611223565b005b34801561025857600080fd5b506102a56004803603604081101561026f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061132d565b6040518082815260200191505060405180910390f35b3480156102c757600080fd5b506102f4600480360360208110156102de57600080fd5b8101908080359060200190929190505050611352565b005b34801561030257600080fd5b506103ef600480360361016081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061174c565b604051808215151515815260200191505060405180910390f35b34801561041557600080fd5b506104626004803603604081101561042c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061180b565b005b34801561047057600080fd5b50610479611c54565b6040518082815260200191505060405180910390f35b34801561049b57600080fd5b506104de600480360360208110156104b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cfa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052c57600080fd5b50610535611d2d565b005b34801561054357600080fd5b506105a66004803603604081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e2b565b6040518082815260200191505060405180910390f35b3480156105c857600080fd5b506105d1611e50565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b506105fc611e56565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061069f600480360360a081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e5c565b005b3480156106ad57600080fd5b506106f0600480360360208110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612098565b6040518082815260200191505060405180910390f35b34801561071257600080fd5b5061071b6120b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076957600080fd5b506107ac6004803603602081101561078057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d6565b6040518082815260200191505060405180910390f35b3480156107ce57600080fd5b50610811600480360360208110156107e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061217e565b005b34801561081f57600080fd5b50610828612267565b604051808215151515815260200191505060405180910390f35b34801561084e57600080fd5b5061085761227a565b005b34801561086557600080fd5b506108926004803603602081101561087c57600080fd5b810190808035906020019092919050505061246e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561091957600080fd5b506109bc600480360361010081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506125b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0a57600080fd5b50610a4d60048036036020811015610a2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612758565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8d578082015181840152602081019050610a72565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad457600080fd5b50610add612aaa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2b57600080fd5b50610bce6004803603610100811015610b4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612acf565b005b348015610bdc57600080fd5b50610c2960048036036040811015610bf357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f55565b005b348015610c3757600080fd5b50610cfa6004803603610120811015610c4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613532565b6040518082815260200191505060405180910390f35b348015610d1c57600080fd5b50610d256138fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d7357600080fd5b50610dc060048036036040811015610d8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613921565b604051808215151515815260200191505060405180910390f35b348015610de657600080fd5b50610def613950565b604051808215151515815260200191505060405180910390f35b348015610e1557600080fd5b50610eb6600480360360c0811015610e2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ae9565b6040518082815260200191505060405180910390f35b348015610ed857600080fd5b50610f1b60048036036020811015610eef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c28565b005b610f25613d11565b005b348015610f3357600080fd5b50610f3c613f4e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f8a57600080fd5b506110426004803603610180811015610fa257600080fd5b8101908080608001906004806020026040519081016040528092919082600460200280828437600081840152601f19601f8201169050808301925050505050509192919290803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613f74565b005b34801561105057600080fd5b506110b36004803603604081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506145ae565b6040518082815260200191505060405180910390f35b3480156110d557600080fd5b506110de614635565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561111e578082015181840152602081019050611103565b50505050905090810190601f16801561114b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561116557600080fd5b506111a86004803603602081101561117c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614909565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111e85780820151818401526020810190506111cd565b50505050905090810190601f1680156112155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b612710811115611323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806158196025913960400191505060405180910390fd5b8060038190555050565b6008602052816000526040600020602052806000526040600020600091509150505481565b600160149054906101000a900460ff16156113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b80600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b61155681600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561161c573d6000803e3d6000fd5b507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b684260003384600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150565b600082600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156117ea5750826117e78d8d8d8d8d8d8d8d8d613532565b10155b6117f757600090506117fc565b600190505b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561196957600080fd5b505af115801561197d573d6000803e3d6000fd5b505050506040513d602081101561199357600080fd5b8101908080519060200190929190505050611a16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f746f6b656e7320636f756c64206e6f74206265207472616e736665727265640081525060200191505060405180910390fd5b611aa581600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a242833384600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b6000600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b60001515600160149054906101000a900460ff1615151415611e0d5760018060146101000a81548160ff021916908315150217905550611e29565b6000600160146101000a81548160ff0219169083151502179055505b565b6006602052816000526040600020602052806000526040600020600091509150505481565b60035481565b60055481565b6000308686868686604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2ae64188d341c174f829e49eb8d8afa1a3d0046543735b227b25c12248dd8cfe42878787878733604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a1505050505050565b600a6020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806157f46025913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec0426040518082815260200191505060405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b606482111561256f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806157ce6026913960400191505060405180910390fd5b816005819055506040518060400160405280602081526020017f726566506f6f6c206665652075706461746564207375636365737366756c6c798152509050919050565b600080308a8a8a8a8a604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401838152602001828152602001965050505050505060405160208183030381529060405280519060200120905060018160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561273f573d6000803e3d6000fd5b5050506020604051035191505098975050505050505050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b6000612828836120d6565b9050600081116128a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129cb57600080fd5b505af11580156129df573d6000803e3d6000fd5b505050506040513d60208110156129f557600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f546f6b656e2077697468647261776e207375636365737366756c6c7900000000815250915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff1615612b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308989898989604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1680612d7a57503373ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612d58573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b612dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964207472616465206f726465720000000000000000000000000081525060200191505060405180910390fd5b87600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f995eb7430c4fb84f593f4997dc830fb16d98063346a1a4bec4fc97a97d6c6a1f428a8a8a8a8a338b8b8b604051808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff1681526020018381526020018281526020019a505050505050505050505060405180910390a1505050505050505050565b600160149054906101000a900460ff1615612fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561309c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d584e20746f6b656e2063616e206e6f742062652077697468647261776e000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561313f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613231576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e6f7420656e6f75676820746f6b656e2062616c616e6365000000000000000081525060200191505060405180910390fd5b6132c081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b505050506040513d60208110156133f157600080fd5b8101908080519060200190929190505050507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b6842833384600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b600080308b8b8b8b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff168061375d57508673ffffffffffffffffffffffffffffffffffffffff1660018360405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561373b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b80156137695750874311155b613778576000925050506138ee565b886138088c600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b3f90919063ffffffff16565b8161380f57fe5b04905080613876600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020548d614a2e90919063ffffffff16565b10156138e8576138df600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548c614a2e90919063ffffffff16565b925050506138ee565b80925050505b9998505050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000803390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111613a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e7420726566657272657220626f6e7573000000000081525060200191505060405180910390fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a9b573d6000803e3d6000fd5b50808273ffffffffffffffffffffffffffffffffffffffff167ff4ffb88912befdda9584c7fa33955c025a821b46a044d73dd1314c656274f5ba60405160405180910390a360019250505090565b600080308888888888604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020549150509695505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613da034600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a24260003334600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff1615613ff7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308a60006004811061400757fe5b60200201518a8c60016004811061401a57fe5b60200201518b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600760008b60026004811061410a57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff168061426357508960026004811061417b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614241573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b801561426f5750864311155b80156142ee5750886142eb84600860008e60026004811061428c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002054614ab790919063ffffffff16565b11155b614360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964207472616465206f726465720000000000000000000000000081525060200191505060405180910390fd5b61436c8a8a8a86614bc5565b6143e083600860008d60026004811061438157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054614ab790919063ffffffff16565b600860008c6002600481106143f157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f35cc15ad16b95a9d45fadedd6ecbbd89858ec4bfedf144506f3f531d3eb63509428b60006004811061447457fe5b6020020151858d60016004811061448757fe5b60200201518d888e028161449757fe5b048f6002600481106144a557fe5b60200201513389604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390a150505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146146fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b6000614704611c54565b90506000811161477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614866573d6000803e3d6000fd5b50600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f45746865722077697468647261776e207375636365737366756c6c790000000081525091505090565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146149b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280602081526020017f4d584e20616464726573732075706461746564207375636365737366756c6c798152509050919050565b600082821115614aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080828401905083811015614b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415614b525760009050614bbf565b6000828402905082848281614b6357fe5b0414614bba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806157ad6021913960400191505060405180910390fd5b809150505b92915050565b6000614bd3826003546152ce565b9050614bf085600360048110614be557fe5b602002015182615363565b614ca2614c068284614ab790919063ffffffff16565b6006600088600060048110614c1757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b6006600087600060048110614cb357fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614df6614d498284614a2e90919063ffffffff16565b6006600088600060048110614d5a57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088600260048110614da857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b6006600087600060048110614e0757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087600260048110614e5557fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f5a816006600088600060048110614ead57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b6006600087600060048110614f6b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150d9846150248486614b3f90919063ffffffff16565b8161502b57fe5b04600660008860016004811061503d57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008860026004811061508b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b60066000876001600481106150ea57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008760026004811061513857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615236846151928486614b3f90919063ffffffff16565b8161519957fe5b0460066000886001600481106151ab57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b600660008760016004811061524757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b60008061271090508083111561532f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061578b6022913960400191505060405180910390fd5b6000615356826153488688614b3f90919063ffffffff16565b6156da90919063ffffffff16565b9050809250505092915050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156154315750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561551157606460055483028161544457fe5b04600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646005548602816154ee57fe5b0442604051808381526020018281526020019250505060405180910390a36156d5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561557a5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156156d457606460055483028161558d57fe5b04600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646005548602816156b557fe5b0442604051808381526020018281526020019250505060405180910390a35b5b505050565b6000808211615751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b600082848161575c57fe5b049050809150509291505056fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e70657263656e74546f206d757374206265206c657373207468616e20666163746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776e657752656650657263656e742063616e206e6f74206265206d6f7265207468616e203130304f6e6c79206e6577206f776e65722063616e2063616c6c20746869732066756e6374696f6e74726164696e67206665652063616e206e6f74206265206d6f7265207468616e2031303025a265627a7a723158207c0478d3215e0a30d72b4068c106431bf64970ce2a03573ef855cba642a6441864736f6c634300050d0032

Deployed Bytecode

0x60806040526004361061020f5760003560e01c8063865505a411610118578063bd916452116100a0578063d4ee1d901161006f578063d4ee1d9014610f27578063f70b83e914610f7e578063f7888aec14611044578063fd37503f146110c9578063fd5a3c45146111595761020f565b8063bd91645214610dda578063bf52f1cf14610e09578063c5d9a28f14610ecc578063d0e30db014610f1d5761020f565b8063982371b4116100e7578063982371b414610b1f5780639e281a9814610bd05780639ff67fd814610c2b578063a4cab25914610d10578063bb5f462914610d675761020f565b8063865505a414610859578063889126b21461090d57806389130700146109fe5780638da5cb5b14610ac85761020f565b806356f433521161019b57806365e17c9d1161016a57806365e17c9d14610706578063700f8e181461075d57806371ffcb16146107c257806379279fd11461081357806379ba5097146108425761020f565b806356f43352146105bc57806359d5335b146105e75780635ae11d5d146106125780635be07a45146106a15761020f565b8063338b5dea116101e2578063338b5dea146104095780633d3a02e3146104645780634a3b68cc1461048f5780634bec833514610520578063508493bc146105375761020f565b806303d196371461021157806319774d431461024c5780632e1a7d4d146102bb5780633176fb37146102f6575b005b34801561021d57600080fd5b5061024a6004803603602081101561023457600080fd5b8101908080359060200190929190505050611223565b005b34801561025857600080fd5b506102a56004803603604081101561026f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061132d565b6040518082815260200191505060405180910390f35b3480156102c757600080fd5b506102f4600480360360208110156102de57600080fd5b8101908080359060200190929190505050611352565b005b34801561030257600080fd5b506103ef600480360361016081101561031a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061174c565b604051808215151515815260200191505060405180910390f35b34801561041557600080fd5b506104626004803603604081101561042c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061180b565b005b34801561047057600080fd5b50610479611c54565b6040518082815260200191505060405180910390f35b34801561049b57600080fd5b506104de600480360360208110156104b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cfa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561052c57600080fd5b50610535611d2d565b005b34801561054357600080fd5b506105a66004803603604081101561055a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e2b565b6040518082815260200191505060405180910390f35b3480156105c857600080fd5b506105d1611e50565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b506105fc611e56565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061069f600480360360a081101561063557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e5c565b005b3480156106ad57600080fd5b506106f0600480360360208110156106c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612098565b6040518082815260200191505060405180910390f35b34801561071257600080fd5b5061071b6120b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561076957600080fd5b506107ac6004803603602081101561078057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d6565b6040518082815260200191505060405180910390f35b3480156107ce57600080fd5b50610811600480360360208110156107e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061217e565b005b34801561081f57600080fd5b50610828612267565b604051808215151515815260200191505060405180910390f35b34801561084e57600080fd5b5061085761227a565b005b34801561086557600080fd5b506108926004803603602081101561087c57600080fd5b810190808035906020019092919050505061246e565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561091957600080fd5b506109bc600480360361010081101561093157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506125b3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a0a57600080fd5b50610a4d60048036036020811015610a2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612758565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a8d578082015181840152602081019050610a72565b50505050905090810190601f168015610aba5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610ad457600080fd5b50610add612aaa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b2b57600080fd5b50610bce6004803603610100811015610b4357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612acf565b005b348015610bdc57600080fd5b50610c2960048036036040811015610bf357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f55565b005b348015610c3757600080fd5b50610cfa6004803603610120811015610c4f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613532565b6040518082815260200191505060405180910390f35b348015610d1c57600080fd5b50610d256138fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d7357600080fd5b50610dc060048036036040811015610d8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613921565b604051808215151515815260200191505060405180910390f35b348015610de657600080fd5b50610def613950565b604051808215151515815260200191505060405180910390f35b348015610e1557600080fd5b50610eb6600480360360c0811015610e2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ae9565b6040518082815260200191505060405180910390f35b348015610ed857600080fd5b50610f1b60048036036020811015610eef57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c28565b005b610f25613d11565b005b348015610f3357600080fd5b50610f3c613f4e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f8a57600080fd5b506110426004803603610180811015610fa257600080fd5b8101908080608001906004806020026040519081016040528092919082600460200280828437600081840152601f19601f8201169050808301925050505050509192919290803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050613f74565b005b34801561105057600080fd5b506110b36004803603604081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506145ae565b6040518082815260200191505060405180910390f35b3480156110d557600080fd5b506110de614635565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561111e578082015181840152602081019050611103565b50505050905090810190601f16801561114b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561116557600080fd5b506111a86004803603602081101561117c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614909565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156111e85780820151818401526020810190506111cd565b50505050905090810190601f1680156112155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b612710811115611323576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806158196025913960400191505060405180910390fd5b8060038190555050565b6008602052816000526040600020602052806000526040600020600091509150505481565b600160149054906101000a900460ff16156113d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b80600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f7420656e6f7567682062616c616e6365000000000000000000000000000081525060200191505060405180910390fd5b61155681600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561161c573d6000803e3d6000fd5b507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b684260003384600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150565b600082600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156117ea5750826117e78d8d8d8d8d8d8d8d8d613532565b10155b6117f757600090506117fc565b600190505b9b9a5050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561196957600080fd5b505af115801561197d573d6000803e3d6000fd5b505050506040513d602081101561199357600080fd5b8101908080519060200190929190505050611a16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f746f6b656e7320636f756c64206e6f74206265207472616e736665727265640081525060200191505060405180910390fd5b611aa581600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a242833384600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b6000600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b60001515600160149054906101000a900460ff1615151415611e0d5760018060146101000a81548160ff021916908315150217905550611e29565b6000600160146101000a81548160ff0219169083151502179055505b565b6006602052816000526040600020602052806000526040600020600091509150505481565b60035481565b60055481565b6000308686868686604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2ae64188d341c174f829e49eb8d8afa1a3d0046543735b227b25c12248dd8cfe42878787878733604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a1505050505050565b600a6020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806157f46025913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec0426040518082815260200191505060405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b606482111561256f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806157ce6026913960400191505060405180910390fd5b816005819055506040518060400160405280602081526020017f726566506f6f6c206665652075706461746564207375636365737366756c6c798152509050919050565b600080308a8a8a8a8a604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401838152602001828152602001965050505050505060405160208183030381529060405280519060200120905060018160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561273f573d6000803e3d6000fd5b5050506020604051035191505098975050505050505050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b6000612828836120d6565b9050600081116128a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129cb57600080fd5b505af11580156129df573d6000803e3d6000fd5b505050506040513d60208110156129f557600080fd5b8101908080519060200190929190505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f546f6b656e2077697468647261776e207375636365737366756c6c7900000000815250915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff1615612b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308989898989604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff1680612d7a57503373ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612d58573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b612dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964207472616465206f726465720000000000000000000000000081525060200191505060405180910390fd5b87600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f995eb7430c4fb84f593f4997dc830fb16d98063346a1a4bec4fc97a97d6c6a1f428a8a8a8a8a338b8b8b604051808b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff1681526020018381526020018281526020019a505050505050505050505060405180910390a1505050505050505050565b600160149054906101000a900460ff1615612fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561309c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4d584e20746f6b656e2063616e206e6f742062652077697468647261776e000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561313f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f496e76616c696420746f6b656e2061646472657373000000000000000000000081525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613231576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f6e6f7420656e6f75676820746f6b656e2062616c616e6365000000000000000081525060200191505060405180910390fd5b6132c081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156133c757600080fd5b505af11580156133db573d6000803e3d6000fd5b505050506040513d60208110156133f157600080fd5b8101908080519060200190929190505050507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b6842833384600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b600080308b8b8b8b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182815260200196505050505050506040516020818303038152906040528051906020012090506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff168061375d57508673ffffffffffffffffffffffffffffffffffffffff1660018360405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561373b573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b80156137695750874311155b613778576000925050506138ee565b886138088c600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614b3f90919063ffffffff16565b8161380f57fe5b04905080613876600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020548d614a2e90919063ffffffff16565b10156138e8576138df600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548c614a2e90919063ffffffff16565b925050506138ee565b80925050505b9998505050505050505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000803390506000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111613a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e7420726566657272657220626f6e7573000000000081525060200191505060405180910390fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613a9b573d6000803e3d6000fd5b50808273ffffffffffffffffffffffffffffffffffffffff167ff4ffb88912befdda9584c7fa33955c025a821b46a044d73dd1314c656274f5ba60405160405180910390a360019250505090565b600080308888888888604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828152602001908152602001600020549150509695505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613da034600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a24260003334600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff1615613ff7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308a60006004811061400757fe5b60200201518a8c60016004811061401a57fe5b60200201518b8b604051602001808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600760008b60026004811061410a57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff168061426357508960026004811061417b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614241573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b801561426f5750864311155b80156142ee5750886142eb84600860008e60026004811061428c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002054614ab790919063ffffffff16565b11155b614360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c6964207472616465206f726465720000000000000000000000000081525060200191505060405180910390fd5b61436c8a8a8a86614bc5565b6143e083600860008d60026004811061438157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054614ab790919063ffffffff16565b600860008c6002600481106143f157fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f35cc15ad16b95a9d45fadedd6ecbbd89858ec4bfedf144506f3f531d3eb63509428b60006004811061447457fe5b6020020151858d60016004811061448757fe5b60200201518d888e028161449757fe5b048f6002600481106144a557fe5b60200201513389604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390a150505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146146fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c69642063616c6c657200000000000000000000000000000000000081525060200191505060405180910390fd5b6000614704611c54565b90506000811161477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614866573d6000803e3d6000fd5b50600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0862681e23dc2f577ed5477b55458d921349e5f1e23f78314357f04e9fb6f1f3836040518082815260200191505060405180910390a36040518060400160405280601c81526020017f45746865722077697468647261776e207375636365737366756c6c790000000081525091505090565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146149b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061576a6021913960400191505060405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280602081526020017f4d584e20616464726573732075706461746564207375636365737366756c6c798152509050919050565b600082821115614aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080828401905083811015614b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080831415614b525760009050614bbf565b6000828402905082848281614b6357fe5b0414614bba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806157ad6021913960400191505060405180910390fd5b809150505b92915050565b6000614bd3826003546152ce565b9050614bf085600360048110614be557fe5b602002015182615363565b614ca2614c068284614ab790919063ffffffff16565b6006600088600060048110614c1757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b6006600087600060048110614cb357fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614df6614d498284614a2e90919063ffffffff16565b6006600088600060048110614d5a57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088600260048110614da857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b6006600087600060048110614e0757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087600260048110614e5557fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f5a816006600088600060048110614ead57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b6006600087600060048110614f6b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506150d9846150248486614b3f90919063ffffffff16565b8161502b57fe5b04600660008860016004811061503d57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008860026004811061508b57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614a2e90919063ffffffff16565b60066000876001600481106150ea57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008760026004811061513857fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615236846151928486614b3f90919063ffffffff16565b8161519957fe5b0460066000886001600481106151ab57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614ab790919063ffffffff16565b600660008760016004811061524757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505050565b60008061271090508083111561532f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061578b6022913960400191505060405180910390fd5b6000615356826153488688614b3f90919063ffffffff16565b6156da90919063ffffffff16565b9050809250505092915050565b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156154315750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561551157606460055483028161544457fe5b04600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646005548602816154ee57fe5b0442604051808381526020018281526020019250505060405180910390a36156d5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561557a5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156156d457606460055483028161558d57fe5b04600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f0e50d33f1f99eb3f5ddb660ffe45cef2202df73b122dc6b731b861cab348efa760646005548602816156b557fe5b0442604051808381526020018281526020019250505060405180910390a35b5b505050565b6000808211615751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b600082848161575c57fe5b049050809150509291505056fe4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6e70657263656e74546f206d757374206265206c657373207468616e20666163746f72536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776e657752656650657263656e742063616e206e6f74206265206d6f7265207468616e203130304f6e6c79206e6577206f776e65722063616e2063616c6c20746869732066756e6374696f6e74726164696e67206665652063616e206e6f74206265206d6f7265207468616e2031303025a265627a7a723158207c0478d3215e0a30d72b4068c106431bf64970ce2a03573ef855cba642a6441864736f6c634300050d0032

Deployed Bytecode Sourcemap

7320:13663:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10494:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10494:174:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10494:174:0;;;;;;;;;;;;;;;;;:::i;:::-;;8146:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8146:64:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8146:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12228:378;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12228:378:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12228:378:0;;;;;;;;;;;;;;;;;:::i;:::-;;16367:413;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16367:413:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;16367:413:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12612:530;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12612:530:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12612:530:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10676:166;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10676:166:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8425:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8425:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8425:45:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9667:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9667:221:0;;;:::i;:::-;;7807:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7807:60:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7807:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7557:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7557:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7696:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7696:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13803:354;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13803:354:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13803:354:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8538:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8538:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8538:53:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7490:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7490:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10850:188;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10850:188:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10850:188:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10387:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10387:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10387:101:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7388:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7388:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7067:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7067:242:0;;;:::i;:::-;;19867:260;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19867:260:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19867:260:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19867:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16788:418;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16788:418:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;16788:418:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11494:506;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11494:506:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11494:506:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11494:506:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6519:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6519:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18256:628;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18256:628:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18256:628:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13149:528;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13149:528:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13149:528:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17212:727;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17212:727:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17212:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7602:70;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7602:70:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7954:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7954:60:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7954:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20224:549;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20224:549:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17945:305;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17945:305:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17945:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6867:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6867:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6867:111:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;12006:216;;;:::i;:::-;;6546:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6546:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14305:990;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14305:990:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14305:990:0;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;14305:990:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13683:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13683:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13683:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11046:440;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11046:440:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11046:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20783:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20783:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20783:185:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20783:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10494:174;6794:5;;;;;;;;;;;6780:19;;:10;:19;;;6772:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10584:5;10569:11;:20;;10561:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10651:11;10638:10;:24;;;;10494:174;:::o;8146:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12228:378::-;12282:9;;;;;;;;;;;12281:10;12273:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12366:6;12332;:18;12347:1;12332:18;;;;;;;;;;;;;;;:30;12351:10;12332:30;;;;;;;;;;;;;;;;:40;;12324:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12435:42;12470:6;12435;:18;12450:1;12435:18;;;;;;;;;;;;;;;:30;12454:10;12435:30;;;;;;;;;;;;;;;;:34;;:42;;;;:::i;:::-;12402:6;:18;12417:1;12402:18;;;;;;;;;;;;;;;:30;12421:10;12402:30;;;;;;;;;;;;;;;:75;;;;12484:10;:19;;:27;12504:6;12484:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12484:27:0;12523:77;12532:3;12545:1;12549:10;12561:6;12569;:18;12584:1;12569:18;;;;;;;;;;;;;;;:30;12588:10;12569:30;;;;;;;;;;;;;;;;12523:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12228:378;:::o;16367:413::-;16564:4;16625:6;16597;:16;16604:8;16597:16;;;;;;;;;;;;;;;:24;16614:6;16597:24;;;;;;;;;;;;;;;;:34;;:138;;;;;16729:6;16642:83;16658:8;16668:9;16679;16690:10;16702:7;16711:4;16717:1;16720;16723;16642:15;:83::i;:::-;:93;;16597:138;16583:173;;16751:5;16744:12;;;;16583:173;16770:4;16763:11;;16367:413;;;;;;;;;;;;;;:::o;12612:530::-;12838:1;12823:17;;:5;:17;;;;12815:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12896:5;12881:34;;;12916:10;12936:4;12943:6;12881:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12881:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12881:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12881:69:0;;;;;;;;;;;;;;;;12873:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13021:37;13051:6;13021;:13;13028:5;13021:13;;;;;;;;;;;;;;;:25;13035:10;13021:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;12993:6;:13;13000:5;12993:13;;;;;;;;;;;;;;;:25;13007:10;12993:25;;;;;;;;;;;;;;;:65;;;;13070:66;13078:3;13083:5;13090:10;13102:6;13110;:13;13117:5;13110:13;;;;;;;;;;;;;;;:25;13124:10;13110:25;;;;;;;;;;;;;;;;13070:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12612:530;;:::o;10676:166::-;10737:7;10806:6;:18;10821:1;10806:18;;;;;;;;;;;;;;;:30;10825:10;;;;;;;;;;;10806:30;;;;;;;;;;;;;;;;10799:37;;10676:166;:::o;8425:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;9667:221::-;6794:5;;;;;;;;;;;6780:19;;:10;:19;;;6772:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9750:5;9737:18;;:9;;;;;;;;;;;:18;;;9733:148;;;9793:4;9781:9;;:16;;;;;;;;;;;;;;;;;;9733:148;;;9860:5;9848:9;;:17;;;;;;;;;;;;;;;;;;9733:148;9667:221::o;7807:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7557:27::-;;;;:::o;7696:30::-;;;;:::o;13803:354::-;13916:12;13966:4;13973:8;13983:9;13994;14005:10;14017:7;13941:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13941:84:0;;;13931:95;;;;;;13916:110;;14060:4;14033:6;:18;14040:10;14033:18;;;;;;;;;;;;;;;:24;14052:4;14033:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14076:75;14082:3;14087:8;14097:9;14108;14119:10;14131:7;14140:10;14076:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13803:354;;;;;;:::o;8538:53::-;;;;;;;;;;;;;;;;;:::o;7490:25::-;;;;;;;;;;;;;:::o;10850:188::-;10931:7;11000:6;:20;11007:12;11000:20;;;;;;;;;;;;;;;:32;11021:10;;;;;;;;;;;11000:32;;;;;;;;;;;;;;;;10993:39;;10850:188;;;:::o;10387:101::-;6794:5;;;;;;;;;;;6780:19;;:10;:19;;;6772:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10471:11;10458:10;;:24;;;;;;;;;;;;;;;;;;10387:101;:::o;7388:21::-;;;;;;;;;;;;;:::o;7067:242::-;7134:8;;;;;;;;;;;7120:22;;:10;:22;;;7112:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:8;;;;;;;;;;;7200:42;;7226:5;;;;;;;;;;;7200:42;;;7221:3;7200:42;;;;;;;;;;;;;;;;;;7261:8;;;;;;;;;;;7253:5;;:16;;;;;;;;;;;;;;;;;;7299:1;7280:8;;:21;;;;;;;;;;;;;;;;;;7067:242::o;19867:260::-;19942:13;6794:5;;;;;;;;;;;6780:19;;:10;:19;;;6772:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19990:3;19973:13;:20;;19965:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20058:13;20045:10;:26;;;;20080:41;;;;;;;;;;;;;;;;;;;19867:260;;;:::o;16788:418::-;16950:7;16975:12;17025:4;17032:8;17042:9;17053;17064:10;17076:7;17000:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17000:84:0;;;16990:95;;;;;;16975:110;;17108:86;17181:4;17128:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17128:58:0;;;17118:69;;;;;;17188:1;17190;17192;17108:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17108:86:0;;;;;;;;17101:93;;;16788:418;;;;;;;;;;:::o;11494:506::-;11571:13;11616:10;;;;;;;;;;;11602:24;;:10;:24;;;11594:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11654:14;11671:43;11701:12;11671:29;:43::i;:::-;11654:60;;11741:1;11732:6;:10;11723:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11810:1;11775:6;:20;11782:12;11775:20;;;;;;;;;;;;;;;:32;11796:10;;;;;;;;;;;11775:32;;;;;;;;;;;;;;;:36;;;;11835:12;11820:37;;;11858:10;11870:6;11820:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11820:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11820:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11820:57:0;;;;;;;;;;;;;;;;;11927:12;11891:57;;11915:10;11891:57;;;11941:6;11891:57;;;;;;;;;;;;;;;;;;11957:37;;;;;;;;;;;;;;;;;;;;11494:506;;;:::o;6519:20::-;;;;;;;;;;;;;:::o;18256:628::-;18415:9;;;;;;;;;;;18414:10;18406:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18457:12;18507:4;18514:8;18524:9;18535;18546:10;18558:7;18482:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18482:84:0;;;18472:95;;;;;;18457:110;;18582:6;:18;18589:10;18582:18;;;;;;;;;;;;;;;:24;18601:4;18582:24;;;;;;;;;;;;;;;;;;;;;:128;;;;18700:10;18610:100;;:86;18683:4;18630:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18630:58:0;;;18620:69;;;;;;18690:1;18692;18694;18610:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18610:86:0;;;;;;;;:100;;;18582:128;18574:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18772:9;18741:10;:22;18752:10;18741:22;;;;;;;;;;;;;;;:28;18764:4;18741:28;;;;;;;;;;;:40;;;;18793:85;18800:3;18805:8;18815:9;18826;18837:10;18849:7;18858:10;18870:1;18873;18876;18793:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18256:628;;;;;;;;;:::o;13149:528::-;13223:9;;;;;;;;;;;13222:10;13214:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13282:10;;;;;;;;;;;13273:19;;:5;:19;;;;13265:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13357:1;13342:17;;:5;:17;;;;13334:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13429:6;13400;:13;13407:5;13400:13;;;;;;;;;;;;;;;:25;13414:10;13400:25;;;;;;;;;;;;;;;;:35;;13392:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13499:37;13529:6;13499;:13;13506:5;13499:13;;;;;;;;;;;;;;;:25;13513:10;13499:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;13471:6;:13;13478:5;13471:13;;;;;;;;;;;;;;;:25;13485:10;13471:25;;;;;;;;;;;;;;;:65;;;;13557:5;13542:30;;;13573:10;13585:6;13542:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13542:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13542:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13542:50:0;;;;;;;;;;;;;;;;;13604:67;13613:3;13618:5;13625:10;13637:6;13645;:13;13652:5;13645:13;;;;;;;;;;;;;;;:25;13659:10;13645:25;;;;;;;;;;;;;;;;13604:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13149:528;;:::o;17212:727::-;17386:4;17399:12;17449:4;17456:8;17466:9;17477;17488:10;17500:7;17424:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17424:84:0;;;17414:95;;;;;;17399:110;;17516:15;17553:6;:12;17560:4;17553:12;;;;;;;;;;;;;;;:18;17566:4;17553:18;;;;;;;;;;;;;;;;;;;;;:116;;;;17665:4;17575:94;;:86;17648:4;17595:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17595:58:0;;;17585:69;;;;;;17655:1;17657;17659;17575:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17575:86:0;;;;;;;;:94;;;17553:116;17552:152;;;;;17697:7;17681:12;:23;;17552:152;17538:183;;17720:1;17713:8;;;;;;17538:183;17782:10;17741:38;17769:9;17741:6;:17;17748:9;17741:17;;;;;;;;;;;;;;;:23;17759:4;17741:23;;;;;;;;;;;;;;;;:27;;:38;;;;:::i;:::-;:51;;;;;;17728:64;;17847:10;17809:37;17823:10;:16;17834:4;17823:16;;;;;;;;;;;;;;;:22;17840:4;17823:22;;;;;;;;;;;;17809:9;:13;;:37;;;;:::i;:::-;:48;17805:98;;;17866:37;17880:10;:16;17891:4;17880:16;;;;;;;;;;;;;;;:22;17897:4;17880:22;;;;;;;;;;;;17866:9;:13;;:37;;;;:::i;:::-;17859:44;;;;;;17805:98;17917:10;17910:17;;;;17212:727;;;;;;;;;;;;:::o;7602:70::-;;;;;;;;;;;;;:::o;7954:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20224:549::-;20269:4;20296:25;20324:10;20296:38;;20355:21;20379:20;:31;20400:9;20379:31;;;;;;;;;;;;;;;;20355:55;;20455:1;20439:13;:17;20431:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20533:1;20499:20;:31;20520:9;20499:31;;;;;;;;;;;;;;;:35;;;;20604:9;:18;;:33;20623:13;20604:33;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20604:33:0;20719:13;20708:9;20685:48;;;;;;;;;;;;20761:4;20754:11;;;;20224:549;:::o;17945:305::-;18085:4;18098:12;18148:4;18155:8;18165:9;18176;18187:10;18199:7;18123:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18123:84:0;;;18113:95;;;;;;18098:110;;18222:10;:16;18233:4;18222:16;;;;;;;;;;;;;;;:22;18239:4;18222:22;;;;;;;;;;;;18215:29;;;17945:305;;;;;;;;:::o;6867:111::-;6794:5;;;;;;;;;;;6780:19;;:10;:19;;;6772:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6961:9;6950:8;;:20;;;;;;;;;;;;;;;;;;6867:111;:::o;12006:216::-;12080:45;12115:9;12080:6;:18;12095:1;12080:18;;;;;;;;;;;;;;;:30;12099:10;12080:30;;;;;;;;;;;;;;;;:34;;:45;;;;:::i;:::-;12047:6;:18;12062:1;12047:18;;;;;;;;;;;;;;;:30;12066:10;12047:30;;;;;;;;;;;;;;;:78;;;;12137:79;12145:3;12158:1;12162:10;12174:9;12185:6;:18;12200:1;12185:18;;;;;;;;;;;;;;;:30;12204:10;12185:30;;;;;;;;;;;;;;;;12137:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12006:216::o;6546:23::-;;;;;;;;;;;;;:::o;14305:990::-;14484:9;;;;;;;;;;;14483:10;14475:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14562:12;14612:4;14619:12;14632:1;14619:15;;;;;;;;;;;14636:9;14647:12;14660:1;14647:15;;;;;;;;;;;14664:10;14676:7;14587:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14587:97:0;;;14577:108;;;;;;14562:123;;14709:6;:23;14716:12;14729:1;14716:15;;;;;;;;;;;14709:23;;;;;;;;;;;;;;;:29;14733:4;14709:29;;;;;;;;;;;;;;;;;;;;;:138;;;;14832:12;14845:1;14832:15;;;;;;;;;;;14742:105;;:86;14815:4;14762:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14762:58:0;;;14752:69;;;;;;14822:1;14824;14826;14742:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14742:86:0;;;;;;;;:105;;;14709:138;14708:174;;;;;14875:7;14859:12;:23;;14708:174;:243;;;;;14942:9;14893:45;14931:6;14893:10;:27;14904:12;14917:1;14904:15;;;;;;;;;;;14893:27;;;;;;;;;;;;;;;:33;14921:4;14893:33;;;;;;;;;;;;:37;;:45;;;;:::i;:::-;:58;;14708:243;14692:290;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14991:59;15005:12;15019:9;15030:10;15042:6;14991:13;:59::i;:::-;15093:45;15131:6;15093:10;:27;15104:12;15117:1;15104:15;;;;;;;;;;;15093:27;;;;;;;;;;;;;;;:33;15121:4;15093:33;;;;;;;;;;;;:37;;:45;;;;:::i;:::-;15057:10;:27;15068:12;15081:1;15068:15;;;;;;;;;;;15057:27;;;;;;;;;;;;;;;:33;15085:4;15057:33;;;;;;;;;;;:81;;;;15162:127;15168:3;15173:12;15186:1;15173:15;;;;;;;;;;;15190:6;15198:12;15211:1;15198:15;;;;;;;;;;;15237:9;15228:6;15215:10;:19;:31;;;;;;15248:12;15261:1;15248:15;;;;;;;;;;;15265:10;15277:11;15162:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14305:990;;;;;;;;;;:::o;13683:114::-;13752:4;13772:6;:13;13779:5;13772:13;;;;;;;;;;;;;;;:19;13786:4;13772:19;;;;;;;;;;;;;;;;13765:26;;13683:114;;;;:::o;11046:440::-;11103:13;11148:10;;;;;;;;;;;11134:24;;:10;:24;;;11126:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11186:14;11203:31;:29;:31::i;:::-;11186:48;;11261:1;11252:6;:10;11243:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11328:1;11295:6;:18;11310:1;11295:18;;;;;;;;;;;;;;;:30;11314:10;;;;;;;;;;;11295:30;;;;;;;;;;;;;;;:34;;;;11338:10;:19;;:27;11358:6;11338:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11338:27:0;11423:1;11379:55;;11403:10;11379:55;;;11427:6;11379:55;;;;;;;;;;;;;;;;;;11443:37;;;;;;;;;;;;;;;;;;;;11046:440;:::o;20783:185::-;20857:13;6794:5;;;;;;;;;;;6780:19;;:10;:19;;;6772:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20895:13;20882:10;;:26;;;;;;;;;;;;;;;;;;20919:41;;;;;;;;;;;;;;;;;;;20783:185;;;:::o;3728:184::-;3786:7;3819:1;3814;:6;;3806:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3866:9;3882:1;3878;:5;3866:17;;3903:1;3896:8;;;3728:184;;;;:::o;3272:181::-;3330:7;3350:9;3366:1;3362;:5;3350:17;;3391:1;3386;:6;;3378:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3444:1;3437:8;;;3272:181;;;;:::o;4163:470::-;4221:7;4470:1;4465;:6;4461:47;;;4495:1;4488:8;;;;4461:47;4520:9;4536:1;4532;:5;4520:17;;4565:1;4560;4556;:5;;;;;;:10;4548:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4624:1;4617:8;;;4163:470;;;;;:::o;15444:909::-;15567:19;15589:38;15609:6;15616:10;;15589:19;:38::i;:::-;15567:60;;15706:53;15727:12;15740:1;15727:15;;;;;;;;;;;15744:14;15706:20;:53::i;:::-;15806:67;15846:26;15857:14;15846:6;:10;;:26;;;;:::i;:::-;15806:6;:23;15813:12;15826:1;15813:15;;;;;;;;;;;15806:23;;;;;;;;;;;;;;;:35;15830:10;15806:35;;;;;;;;;;;;;;;;:39;;:67;;;;:::i;:::-;15768:6;:23;15775:12;15788:1;15775:15;;;;;;;;;;;15768:23;;;;;;;;;;;;;;;:35;15792:10;15768:35;;;;;;;;;;;;;;;:105;;;;15923:72;15968:26;15979:14;15968:6;:10;;:26;;;;:::i;:::-;15923:6;:23;15930:12;15943:1;15930:15;;;;;;;;;;;15923:23;;;;;;;;;;;;;;;:40;15947:12;15960:1;15947:15;;;;;;;;;;;15923:40;;;;;;;;;;;;;;;;:44;;:72;;;;:::i;:::-;15880:6;:23;15887:12;15900:1;15887:15;;;;;;;;;;;15880:23;;;;;;;;;;;;;;;:40;15904:12;15917:1;15904:15;;;;;;;;;;;15880:40;;;;;;;;;;;;;;;:115;;;;16040:55;16080:14;16040:6;:23;16047:12;16060:1;16047:15;;;;;;;;;;;16040:23;;;;;;;;;;;;;;;:35;16064:10;;;;;;;;;;;16040:35;;;;;;;;;;;;;;;;:39;;:55;;;;:::i;:::-;16002:6;:23;16009:12;16022:1;16009:15;;;;;;;;;;;16002:23;;;;;;;;;;;;;;;:35;16026:10;;;;;;;;;;;16002:35;;;;;;;;;;;;;;;:93;;;;16147:80;16217:9;16192:22;16207:6;16192:10;:14;;:22;;;;:::i;:::-;:34;;;;;;16147:6;:23;16154:12;16167:1;16154:15;;;;;;;;;;;16147:23;;;;;;;;;;;;;;;:40;16171:12;16184:1;16171:15;;;;;;;;;;;16147:40;;;;;;;;;;;;;;;;:44;;:80;;;;:::i;:::-;16104:6;:23;16111:12;16124:1;16111:15;;;;;;;;;;;16104:23;;;;;;;;;;;;;;;:40;16128:12;16141:1;16128:15;;;;;;;;;;;16104:40;;;;;;;;;;;;;;;:123;;;;16272:75;16337:9;16312:22;16327:6;16312:10;:14;;:22;;;;:::i;:::-;:34;;;;;;16272:6;:23;16279:12;16292:1;16279:15;;;;;;;;;;;16272:23;;;;;;;;;;;;;;;:35;16296:10;16272:35;;;;;;;;;;;;;;;;:39;;:75;;;;:::i;:::-;16234:6;:23;16241:12;16254:1;16241:15;;;;;;;;;;;16234:23;;;;;;;;;;;;;;;:35;16258:10;16234:35;;;;;;;;;;;;;;;:113;;;;15444:909;;;;;:::o;9939:302::-;10030:7;10056:14;10073:5;10056:22;;10110:6;10097:9;:19;;10089:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10166:9;10178:36;10207:6;10178:24;10192:9;10178;:13;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;10166:48;;10232:1;10225:8;;;;9939:302;;;;:::o;19062:797::-;19163:24;19190:9;:21;19200:10;19190:21;;;;;;;;;;;;;;;;;;;;;;;;;19163:48;;19252:1;19231:23;;:9;:23;;;;:57;;;;;19286:1;19258:30;;:16;:30;;;;19231:57;19228:626;;;19375:3;19362:10;;19343:16;:29;:35;;;;;;19301:20;:38;19322:16;19301:38;;;;;;;;;;;;;;;;:77;;;;;;;;;;;19419:10;19394:79;;19408:9;19394:79;;;19463:3;19450:10;;19431:16;:29;:35;;;;;;19468:3;19394:79;;;;;;;;;;;;;;;;;;;;;;;;19228:626;;;19520:1;19499:23;;:9;:23;;;;:57;;;;;19554:1;19526:30;;:16;:30;;;19499:57;19496:358;;;19702:3;19689:10;;19670:16;:29;:35;;;;;;19635:20;:31;19656:9;19635:31;;;;;;;;;;;;;;;;:70;;;;;;;;;;;19740:9;19716;:21;19726:10;19716:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19790:10;19765:79;;19779:9;19765:79;;;19834:3;19821:10;;19802:16;:29;:35;;;;;;19839:3;19765:79;;;;;;;;;;;;;;;;;;;;;;;;19496:358;19228:626;19062:797;;;:::o;5101:333::-;5159:7;5258:1;5254;:5;5246:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5301:9;5317:1;5313;:5;;;;;;5301:17;;5425:1;5418:8;;;5101:333;;;;:::o

Swarm Source

bzzr://7c0478d3215e0a30d72b4068c106431bf64970ce2a03573ef855cba642a64418

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.