Contract 0x7935F93EdedC53eF246E5F9C03F2cB323B1326e4 1

 
 
Txn Hash
Method
Block
From
To
Value
0xc904b1d60c4d53d717d9483721a265146ec19115c8b0866301363f3bd2fcbe2dWithdraw102659872020-06-14 20:23:19836 days 1 hr ago0x353e9796d62d2d6a104d063e3f0a39c33e2f2e02 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000093774
0x9abfa87680f6430336e8ae445e7503c35fa5e6ddba07ad5a4e3604fbf3a7134fWithdraw102659872020-06-14 20:23:19836 days 1 hr ago0x353e9796d62d2d6a104d063e3f0a39c33e2f2e02 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000101664
0xaa12a94f2b8829e21790faca1d324d3b5ea553fff8d1b4da5e10cd3e8a521d32Deposit Token100193142020-05-07 13:15:24874 days 8 hrs ago0x53ce4ffd1d6bfef9f17fb3403f145014d5b6641f IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.0009109616
0x02e64fc8c644c43d8808921a3380505fd169d3459038e5761aabb7322514400dDeposit Token100191002020-05-07 12:32:46874 days 9 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.0007546118
0x6afbf1c3fc26bc6439103c60b9a2ebb8cdb50872cf215644d70dc1c862c5c7deDeposit Token100189412020-05-07 11:59:00874 days 10 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.0008630712
0x53c304ffada0feef6061b6abf5a922bc57e63914c92260aa922005177febbf0fWithdraw Token100154312020-05-06 22:39:13874 days 23 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000162124
0x40a5a184dae250c5f58f6441be8cb92b5179faf42ecc9af04973be0dbd7ba150Deposit Token100151772020-05-06 21:43:27875 days 26 mins ago0x05ff591a6b5bdc7089d456848bd4853102c17907 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000220725.3
0x82d6eb14ef8f4b34ccb0489d53bf69ff1c4a4d98e18cf054096f83ab0163134dWithdraw Token100122812020-05-06 10:55:57875 days 11 hrs ago0x4f15271b3d260e42550b9279dcfc23a1799018ac IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000244394.4
0xe6105f30a35c36d309b1a72c1690490912bf5c5893a9aaade75eedcf6aaae8b0Withdraw99589552020-04-28 5:05:18883 days 17 hrs ago0xbbf44269895b05db9be91650e396a16bee2d2fd5 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000161664
0xd22bda88fcf0c10b1af26226acca1f60838076593842c36acc1ac0b42cc50f03Withdraw99468882020-04-26 7:55:50885 days 14 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000161614
0xd34432122a9653fe1b6fddf447d1a147d198dfec301cd8c8b2d60c4ba36cca1dTrade99405382020-04-25 8:25:25886 days 13 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000636736
0xbc8ed38485bb99e478913adca67eacd02c2055fbf1047fccc45b541406404a7bDeposit99404462020-04-25 8:02:32886 days 14 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40.05 Ether0.000184276
0xfa3a7f429257f563e10956916597bfd261f7a889760781d22ed391ba462b60adDeposit99387182020-04-25 1:33:31886 days 20 hrs ago0x4f15271b3d260e42550b9279dcfc23a1799018ac IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40.001 Ether0.000137133
0x33e816cf5a7ef605f5cb0a3ab239a9fce7365b3edae9036c9c5c2755aafeadd9Deposit Token99386272020-04-25 1:14:03886 days 20 hrs ago0x4f15271b3d260e42550b9279dcfc23a1799018ac IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000182123
0xa6dd91d828937b4bd6a15fb4b9ec1eb6239893fcb2cb0ac82c989f637484b806Deposit Token99385632020-04-25 0:58:58886 days 21 hrs ago0xbbf44269895b05db9be91650e396a16bee2d2fd5 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000095883
0xabd5666a0722e893e2823de2301d8ee4ce11b1709997ef3349d34066efce100aWithdraw99265542020-04-23 4:14:59888 days 17 hrs ago0x5b6a30123a1f57ab40037586b714c6a7aece37a3 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.0004042810
0x3a8d71b6723af1530ed915f956392e585e26978cdbb5f3c6b67ed84df339c3d4Deposit99245762020-04-22 21:04:08889 days 1 hr ago0x5b6a30123a1f57ab40037586b714c6a7aece37a3 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40.08 Ether0.000092133
0x9656a5d229c63076e94a89e658e911f8f5c1061a7a0116b20fefab06000b6f2dTrade99205272020-04-22 6:01:54889 days 16 hrs ago0x5b6a30123a1f57ab40037586b714c6a7aece37a3 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000364444
0x808271e5f77eba5872bf12f042f0e9c5a945cdd3342e1f78b1dd27f5e341c83bTrade99138892020-04-21 5:19:03890 days 16 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000424584
0x1c2db5b27bc6cff1cab5765bfd8bf53d31afc9a02b55a0cc487768e5a468e7c8Deposit99120692020-04-20 22:43:04890 days 23 hrs ago0x353e9796d62d2d6a104d063e3f0a39c33e2f2e02 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40.001 Ether0.000182854
0x37a00fa5635e772928d56b0c02c121d1809a269ac04695d73a7049481f582a85Deposit Token99120612020-04-20 22:41:18890 days 23 hrs ago0x353e9796d62d2d6a104d063e3f0a39c33e2f2e02 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000178774
0x204f8fabb179930d4e8449350f6807367af4923feca0041f564106c68c37a838Trade99053072020-04-19 21:39:28892 days 30 mins ago0xbbf44269895b05db9be91650e396a16bee2d2fd5 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000100261.1
0x91692a0ce728b1cd809a2f7658880f472a4c8ce2b2196807106c6dc06181c2afTrade99023082020-04-19 10:29:13892 days 11 hrs ago0xbbf44269895b05db9be91650e396a16bee2d2fd5 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000212292
0xb791d42b578c150fc51dc63df42d72620b3289bbc786d487926e93ac937582aaDeposit Token99022562020-04-19 10:16:39892 days 11 hrs ago0x05ff591a6b5bdc7089d456848bd4853102c17907 IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.00027544
0xc5520d94011e35f6e44f0f05f886fc9f95f92f0cea0df31842c21357ba58f9d5Trade99021452020-04-19 9:52:49892 days 12 hrs ago0x09a831d0bc8211e2f44763505ce32da3879bcb6a IN  0x7935f93ededc53ef246e5f9c03f2cb323b1326e40 Ether0.000227892.5
[ Download CSV Export 
Latest 15 internal transactions
Parent Txn Hash Block From To Value
0x9abfa87680f6430336e8ae445e7503c35fa5e6ddba07ad5a4e3604fbf3a7134f102659872020-06-14 20:23:19836 days 1 hr ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x353e9796d62d2d6a104d063e3f0a39c33e2f2e020.001 Ether
0xe6105f30a35c36d309b1a72c1690490912bf5c5893a9aaade75eedcf6aaae8b099589552020-04-28 5:05:18883 days 17 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40xbbf44269895b05db9be91650e396a16bee2d2fd50.005 Ether
0xd22bda88fcf0c10b1af26226acca1f60838076593842c36acc1ac0b42cc50f0399468882020-04-26 7:55:50885 days 14 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x09a831d0bc8211e2f44763505ce32da3879bcb6a0.03 Ether
0xabd5666a0722e893e2823de2301d8ee4ce11b1709997ef3349d34066efce100a99265542020-04-23 4:14:59888 days 17 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x5b6a30123a1f57ab40037586b714c6a7aece37a30.0847 Ether
0x2f14036fdbf91e2fe25edfcbdcf9a2d33c63ca738daec39426b3a7fd5e4dfd7b98670412020-04-13 23:34:37897 days 22 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40xbbf44269895b05db9be91650e396a16bee2d2fd50.009 Ether
0x0575b22c0a617665e64aec9499e3dec26ab06b79951566cd2dd598be320680b691321512019-12-19 19:52:171014 days 2 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x3b96577116d723bad4f703f6c512ef671712fe6e0.002 Ether
0xc49d8df7ce1f50437aff12a2dd8ad3eeeeb09e40c68abc7b043021f2a977a3d888976102019-11-08 17:52:201055 days 4 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e4Acash Corp: Deployer 30.009 Ether
0x502873e7771076c785b9b1e82cb54ca20697c3a97019e599e3b1c7a56d118ed388958722019-11-08 11:13:211055 days 10 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40xa26558718b3d736d4bd0ee88e889d1959bc2b6dc0.0614 Ether
0xec22f6b034b17fe63675bae5ed0267791f1fd39bcc652ffcb75ca4286e600c3b88701552019-11-04 7:48:581059 days 14 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x05ff591a6b5bdc7089d456848bd4853102c179070.004872 Ether
0x8c20bb36855471e9e58a2d7cbe301de2508c69115b39db2f1002ed27923dd3fb88216402019-10-27 12:46:271067 days 9 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x7be201531fa49bd992c9cc340cbcf74605d908b00.003 Ether
0xc23c9cc56d9e2f376632448d00e26344810d010058a5c08722d9bb801a5d366c87455572019-10-15 11:19:261079 days 10 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e4Abitshadow Token: Deployer0.035 Ether
0xbe99cf2142c1558c972971aa77e9de70953ab6d900bc58d64071bb995bbef28087260122019-10-12 9:49:241082 days 12 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x05ff591a6b5bdc7089d456848bd4853102c179070.003 Ether
0xb1878a8e074b0a422348faa367b15250104290e415100492ec7124f256bbfe2187259182019-10-12 9:26:481082 days 12 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x05ff591a6b5bdc7089d456848bd4853102c179070.005 Ether
0x289ab5c26ee40538589f6b63c8e0421ba1f9eec8e43f58e5ee951687b8fa851f87229292019-10-11 22:00:121083 days 9 mins ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x05ff591a6b5bdc7089d456848bd4853102c179070.002 Ether
0x2a24751bb9d50559bf6a545386ee272543fcb200a19131935f5839feb4c9db9386571602019-10-01 15:01:061093 days 7 hrs ago 0x7935f93ededc53ef246e5f9c03f2cb323b1326e40x05ff591a6b5bdc7089d456848bd4853102c179070.015 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokensDEX

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2019-09-25
*/

pragma solidity 0.5.11;   /*



    ___________________________________________________________________
      _      _                                        ______           
      |  |  /          /                                /              
    --|-/|-/-----__---/----__----__---_--_----__-------/-------__------
      |/ |/    /___) /   /   ' /   ) / /  ) /___)     /      /   )     
    __/__|____(___ _/___(___ _(___/_/_/__/_(___ _____/______(___/__o_o_


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

 
------------------------------------------------------------------------------------------------------
 Copyright (c) 2019 onwards TokensDEX Inc. ( https://TokensDEX.com )
 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;
    }
}


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


    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);
        emit OwnershipTransferred(now, owner, newOwner);
        owner = newOwner;
        newOwner = address(0);
    }
}

interface ERC20Essential 
{

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

}


contract TokensDEX is owned {
  using SafeMath for uint256;
  bool public safeGuard; // To hault all non owner functions in case of imergency - by default false
  address public admin; //the admin address
  address public feeAccount; //the account that will receive fees
  uint public tradingFee = 50; // 50 = 0.5%
  
  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)
  
  event Order(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user);
  event Cancel(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s);
  event Trade(uint256 curTime, address tokenGet, uint amountGet, address tokenGive, uint amountGive, address get, address give);
  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 OwnerWithdrawTradingFee(address indexed ownerAddress, uint256 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);
        uint256 c = PercentOf.mul(percentTo).div(factor);
        return c;
    }  



    
  // contract without fallback automatically reject incoming ether
  // function() external {  }


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

  function changetradingFee(uint tradingFee_) public onlyOwner{
    //require(tradingFee_ <= tradingFee);
    tradingFee = tradingFee_;
  }
  
  function availableTradingFeeOwner() public view returns(uint256){
      //it only holds ether as fee
      return tokens[address(0)][feeAccount];
  }
  
  function withdrawTradingFeeOwner() public onlyOwner returns (string memory){
      uint256 amount = availableTradingFeeOwner();
      require (amount > 0, 'Nothing to withdraw');
      
      tokens[address(0)][feeAccount] = 0;
      
      msg.sender.transfer(amount);
      
      emit OwnerWithdrawTradingFee(owner, amount);
      
  }

  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);
    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(this, amount) or this contract will not be able to do the transfer on your behalf.
    require(token!=address(0));
    require(ERC20Essential(token).transferFrom(msg.sender, address(this), amount));
    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!=address(0));
    require(tokens[token][msg.sender] >= amount);
    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, uint nonce) public {
    bytes32 hash = keccak256(abi.encodePacked(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce));
    orders[msg.sender][hash] = true;
    emit Order(now, tokenGet, amountGet, tokenGive, amountGive, expires, nonce, msg.sender);
  }

  function trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount) public {
    require(!safeGuard,"System Paused by Admin");
    //amount is in amountGet terms
    bytes32 hash = keccak256(abi.encodePacked(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce));
    require((
      (orders[user][hash] || ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)),v,r,s) == user) &&
      block.number <= expires &&
      orderFills[user][hash].add(amount) <= amountGet
    ));
    tradeBalances(tokenGet, amountGet, tokenGive, amountGive, user, amount);
    orderFills[user][hash] = orderFills[user][hash].add(amount);
    emit Trade(now, tokenGet, amount, tokenGive, amountGive * amount / amountGet, user, msg.sender);
  }

  function tradeBalances(address tokenGet, uint amountGet, address tokenGive, uint amountGive, address user, uint amount) internal {
    
    uint tradingFeeXfer = calculatePercentage(amount,tradingFee);

    tokens[tokenGet][msg.sender] = tokens[tokenGet][msg.sender].sub(amount.add(tradingFeeXfer));
    tokens[tokenGet][user] = tokens[tokenGet][user].add(amount.sub(tradingFeeXfer));
    tokens[address(0)][feeAccount] = tokens[address(0)][feeAccount].add(tradingFeeXfer);

    tokens[tokenGive][user] = tokens[tokenGive][user].sub(amountGive.mul(amount) / amountGet);
    tokens[tokenGive][msg.sender] = tokens[tokenGive][msg.sender].add(amountGive.mul(amount) / amountGet);
  }

  function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, 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, nonce, user, v, r, s) >= amount
    )) return false;
    return true;
  }

  function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) public view returns(uint) {
    bytes32 hash = keccak256(abi.encodePacked(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce));
    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, uint nonce, address user) public view returns(uint) {
    bytes32 hash = keccak256(abi.encodePacked(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce));
    return orderFills[user][hash];
  }

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

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"internalType":"uint256","name":"tradingFee_","type":"uint256"}],"name":"changetradingFee","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"},{"internalType":"uint256","name":"nonce","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"}],"name":"trade","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"},{"internalType":"uint256","name":"nonce","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":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":"uint256","name":"nonce","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":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":"uint256","name":"nonce","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"amountFilled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[],"name":"changeSafeguardStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[],"name":"tradingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"nonce","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":false,"inputs":[{"internalType":"address","name":"feeAccount_","type":"address"}],"name":"changeFeeAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"safeGuard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","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"},{"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":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"onlyOwnerTransferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"availableTradingFeeOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawTradingFeeOwner","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"nonce","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"},{"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":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Order","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":"uint256","name":"nonce","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":"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"}],"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":"Deposit","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"ownerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OwnerWithdrawTradingFee","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"}]

6080604052603260045534801561001557600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d72806100a66000396000f3fe60806040526004361061019c5760003560e01c806371ffcb16116100ec578063cc9c18071161008a578063f7888aec11610064578063f7888aec14610abb578063f851a44014610b40578063f95b132514610b97578063fb6e155f14610c275761019c565b8063cc9c180714610a2f578063d0e30db014610a5a578063d4ee1d9014610a645761019c565b80638da5cb5b116100c65780638da5cb5b146108b95780639e281a9814610910578063bb5f46291461096b578063c5d9a28f146109de5761019c565b806371ffcb161461082257806379279fd11461087357806379ba5097146108a25761019c565b80632e1a7d4d11610159578063508493bc11610133578063508493bc146105fe57806356f433521461068357806365e17c9d146106ae5780636c86888b146107055761019c565b80632e1a7d4d14610551578063338b5dea1461058c5780634bec8335146105e75761019c565b806303d19637146101a15780630a19b14a146101dc5780630b927666146102c157806319774d431461035a578063278b8c0e146103c95780632d804ca214610484575b600080fd5b3480156101ad57600080fd5b506101da600480360360208110156101c457600080fd5b8101908080359060200190929190505050610d16565b005b3480156101e857600080fd5b506102bf600480360361016081101561020057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190505050610d79565b005b3480156102cd57600080fd5b50610358600480360360c08110156102e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506112a4565b005b34801561036657600080fd5b506103b36004803603604081101561037d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114f1565b6040518082815260200191505060405180910390f35b3480156103d557600080fd5b5061048260048036036101208110156103ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611516565b005b34801561049057600080fd5b5061053b600480360360e08110156104a757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611944565b6040518082815260200191505060405180910390f35b34801561055d57600080fd5b5061058a6004803603602081101561057457600080fd5b8101908080359060200190929190505050611a8c565b005b34801561059857600080fd5b506105e5600480360360408110156105af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e1d565b005b3480156105f357600080fd5b506105fc612194565b005b34801561060a57600080fd5b5061066d6004803603604081101561062157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612246565b6040518082815260200191505060405180910390f35b34801561068f57600080fd5b5061069861226b565b6040518082815260200191505060405180910390f35b3480156106ba57600080fd5b506106c3612271565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561071157600080fd5b50610808600480360361018081101561072957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612297565b604051808215151515815260200191505060405180910390f35b34801561082e57600080fd5b506108716004803603602081101561084557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612358565b005b34801561087f57600080fd5b506108886123f5565b604051808215151515815260200191505060405180910390f35b3480156108ae57600080fd5b506108b7612408565b005b3480156108c557600080fd5b506108ce6125b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091c57600080fd5b506109696004803603604081101561093357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125d5565b005b34801561097757600080fd5b506109c46004803603604081101561098e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a1c565b604051808215151515815260200191505060405180910390f35b3480156109ea57600080fd5b50610a2d60048036036020811015610a0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a4b565b005b348015610a3b57600080fd5b50610a44612ae8565b6040518082815260200191505060405180910390f35b610a62612b8e565b005b348015610a7057600080fd5b50610a79612dcb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ac757600080fd5b50610b2a60048036036040811015610ade57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612df1565b6040518082815260200191505060405180910390f35b348015610b4c57600080fd5b50610b55612e78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ba357600080fd5b50610bac612e9e565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bec578082015181840152602081019050610bd1565b50505050905090810190601f168015610c195780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c3357600080fd5b50610d006004803603610140811015610c4b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506130d9565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6f57600080fd5b8060048190555050565b600160149054906101000a900460ff1615610dfc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308c8c8c8c8c8c604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401848152602001838152602001828152602001975050505050505050604051602081830303815290604052805190602001209050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff168061102c57508573ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012087878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561100a573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b80156110385750874311155b80156110a657508a6110a383600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546134ab90919063ffffffff16565b11155b6110af57600080fd5b6110bd8c8c8c8c8a87613533565b61112082600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020546134ab90919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507f9598611db52ec23f3adedee0592c31ca06b0c2935d64303cba9e0528215d02b6428d848d8f878f02816111a457fe5b048b33604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a1505050505050505050505050565b600030878787878787604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018481526020018381526020018281526020019750505050505050506040516020818303038152906040528051906020012090506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5d4e2e93cb30c11a5ef49975ca501a4adc79af355f3ae0ad88d0c4d27a27a6a94288888888888833604051808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019850505050505050505060405180910390a150505050505050565b6007602052816000526040600020602052806000526040600020600091509150505481565b600160149054906101000a900460ff1615611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b6000308a8a8a8a8a8a604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401848152602001838152602001828152602001975050505050505050604051602081830303815290604052805190602001209050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002060009054906101000a900460ff16806117c957503373ffffffffffffffffffffffffffffffffffffffff1660018260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156117a7573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b6117d257600080fd5b88600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055507fc46ed0e85bc35bcaec73fbbd1bc0bce5d9eef397e24db51ae1bffd9ed238a7c3428b8b8b8b8b8b338c8c8c604051808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff1681526020018381526020018281526020019b50505050505050505050505060405180910390a150505050505050505050565b60008030898989898989604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401848152602001838152602001828152602001975050505050505050604051602081830303815290604052805190602001209050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082815260200190815260200160002054915050979650505050505050565b600160149054906101000a900460ff1615611b0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b80600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611b9857600080fd5b611c2781600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b3590919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ced573d6000803e3d6000fd5b507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b684260003384600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a150565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e5757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611f1257600080fd5b505af1158015611f26573d6000803e3d6000fd5b505050506040513d6020811015611f3c57600080fd5b8101908080519060200190929190505050611f5657600080fd5b611fe581600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ab90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a242833384600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ed57600080fd5b60001515600160149054906101000a900460ff16151514156122285760018060146101000a81548160ff021916908315150217905550612244565b6000600160146101000a81548160ff0219169083151502179055505b565b6005602052816000526040600020602052806000526040600020600091509150505481565b60045481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156123365750826123338e8e8e8e8e8e8e8e8e8e6130d9565b10155b6123435760009050612348565b600190505b9c9b505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123b157600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461246257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec0426040518082815260200191505060405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff1615612658576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f53797374656d205061757365642062792041646d696e0000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269257600080fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561271b57600080fd5b6127aa81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b3590919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128b157600080fd5b505af11580156128c5573d6000803e3d6000fd5b505050506040513d60208110156128db57600080fd5b8101908080519060200190929190505050507ffe7813e2866053d5c3938554e517b554fce6666a6561bed9eaa7419b29fa9b6842833384600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a15050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612aa457600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b612c1d34600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ab90919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a24260003334600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef957600080fd5b6000612f03612ae8565b905060008111612f7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f4e6f7468696e6720746f2077697468647261770000000000000000000000000081525060200191505060405180910390fd5b6000600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613065573d6000803e3d6000fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fad8a10b8218c5c9db36608f71b7288c2041ebaee2aa86d946d6ea50c04755836826040518082815260200191505060405180910390a25090565b600080308c8c8c8c8c8c604051602001808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018481526020018381526020018281526020019750505050505050506040516020818303038152906040528051906020012090506000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff168061330c57508673ffffffffffffffffffffffffffffffffffffffff1660018360405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012088888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156132ea573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b80156133185750884311155b6133275760009250505061349d565b896133b78d600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bbe90919063ffffffff16565b816133be57fe5b04905080613425600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020548e613b3590919063ffffffff16565b10156134975761348e600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020548d613b3590919063ffffffff16565b9250505061349d565b80925050505b9a9950505050505050505050565b600080828401905083811015613529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600061354182600454613c44565b90506135e461355982846134ab90919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b3590919063ffffffff16565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061370561367a8284613b3590919063ffffffff16565b600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ab90919063ffffffff16565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061383681600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ab90919063ffffffff16565b600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613982866138ef8487613bbe90919063ffffffff16565b816138f657fe5b04600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b3590919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613aac86613a198487613bbe90919063ffffffff16565b81613a2057fe5b04600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ab90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050565b600082821115613bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b600080831415613bd15760009050613c3e565b6000828402905082848281613be257fe5b0414613c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d1d6021913960400191505060405180910390fd5b809150505b92915050565b600080612710905080831115613c5957600080fd5b6000613c8082613c728688613bbe90919063ffffffff16565b613c8d90919063ffffffff16565b9050809250505092915050565b6000808211613d04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b6000828481613d0f57fe5b049050809150509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820081f843cf3c0811085aadd99c17b8405012c62043181c1f8daec438fb1b13f4664736f6c634300050b0032

Deployed ByteCode Sourcemap

6663:8723:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9060:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9060:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9060:140:0;;;;;;;;;;;;;;;;;:::i;:::-;;11683:872;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11683:872:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11683:872:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11306:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11306:371:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;11306:371:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7329:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7329:64:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7329:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14759:624;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14759:624:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14759:624:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14438:315;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14438:315:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14438:315:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9944:356;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9944:356:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9944:356:0;;;;;;;;;;;;;;;;;:::i;:::-;;10306:461;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10306:461:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10306:461:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8296:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8296:221:0;;;:::i;:::-;;6990:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6990:60:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6990:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6941:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6941:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6874:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6874:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13257:432;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13257:432:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13257:432:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8953:101;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8953:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8953:101:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;6727:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6727:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6239:201;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6239:201:0;;;:::i;:::-;;5728:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5728:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10774:406;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10774:406:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10774:406:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7137:60;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7137:60:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7137:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6039:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6039:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6039:111:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;9208:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9208:152:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9722:216;;;:::i;:::-;;5755:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5755:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11186:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11186:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11186:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6829:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6829:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9368:348;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9368:348: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;9368:348:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13695:737;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13695:737:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13695:737:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9060:140;6003:5;;;;;;;;;;;5989:19;;:10;:19;;;5981:28;;;;;;9183:11;9170:10;:24;;;;9060:140;:::o;11683:872::-;11875:9;;;;;;;;;;;11874:10;11866:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11953:12;11995:4;12001:8;12011:9;12022;12033:10;12045:7;12054:5;11978:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11978:82:0;;;11968:93;;;;;;11953:108;;12086:6;:12;12093:4;12086:12;;;;;;;;;;;;;;;:18;12099:4;12086:18;;;;;;;;;;;;;;;;;;;;;:116;;;;12198:4;12108:94;;:86;12181:4;12128:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12128:58:0;;;12118:69;;;;;;12188:1;12190;12192;12108:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12108:86:0;;;;;;;;:94;;;12086:116;12085:152;;;;;12230:7;12214:12;:23;;12085:152;:210;;;;;12286:9;12248:34;12275:6;12248:10;:16;12259:4;12248:16;;;;;;;;;;;;;;;:22;12265:4;12248:22;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;:47;;12085:210;12068:235;;;;;;12310:71;12324:8;12334:9;12345;12356:10;12368:4;12374:6;12310:13;:71::i;:::-;12413:34;12440:6;12413:10;:16;12424:4;12413:16;;;;;;;;;;;;;;;:22;12430:4;12413:22;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;12388:10;:16;12399:4;12388:16;;;;;;;;;;;;;;;:22;12405:4;12388:22;;;;;;;;;;;:59;;;;12459:90;12465:3;12470:8;12480:6;12488:9;12521;12512:6;12499:10;:19;:31;;;;;;12532:4;12538:10;12459:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11683:872;;;;;;;;;;;;:::o;11306:371::-;11431:12;11473:4;11479:8;11489:9;11500;11511:10;11523:7;11532:5;11456:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11456:82:0;;;11446:93;;;;;;11431:108;;11573:4;11546:6;:18;11553:10;11546:18;;;;;;;;;;;;;;;:24;11565:4;11546:24;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;11589:82;11595:3;11600:8;11610:9;11621;11632:10;11644:7;11653:5;11660:10;11589:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11306:371;;;;;;;:::o;7329:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14759:624::-;14930:9;;;;;;;;;;;14929:10;14921:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14972:12;15014:4;15020:8;15030:9;15041;15052:10;15064:7;15073:5;14997:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14997:82:0;;;14987:93;;;;;;14972:108;;15096:6;:18;15103:10;15096:18;;;;;;;;;;;;;;;:24;15115:4;15096:24;;;;;;;;;;;;;;;;;;;;;:128;;;;15214:10;15124:100;;:86;15197:4;15144:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15144:58:0;;;15134:69;;;;;;15204:1;15206;15208;15124:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15124:86:0;;;;;;;;:100;;;15096:128;15087:139;;;;;;15264:9;15233:10;:22;15244:10;15233:22;;;;;;;;;;;;;;;:28;15256:4;15233:28;;;;;;;;;;;:40;;;;15285:92;15292:3;15297:8;15307:9;15318;15329:10;15341:7;15350:5;15357:10;15369:1;15372;15375;15285:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14759:624;;;;;;;;;;:::o;14438:315::-;14590:4;14603:12;14645:4;14651:8;14661:9;14672;14683:10;14695:7;14704:5;14628:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14628:82:0;;;14618:93;;;;;;14603:108;;14725:10;:16;14736:4;14725:16;;;;;;;;;;;;;;;:22;14742:4;14725:22;;;;;;;;;;;;14718:29;;;14438:315;;;;;;;;;:::o;9944:356::-;9998:9;;;;;;;;;;;9997:10;9989:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10082:6;10048;:18;10063:1;10048:18;;;;;;;;;;;;;;;:30;10067:10;10048:30;;;;;;;;;;;;;;;;:40;;10040:49;;;;;;10129:42;10164:6;10129;:18;10144:1;10129:18;;;;;;;;;;;;;;;:30;10148:10;10129:30;;;;;;;;;;;;;;;;:34;;:42;;;;:::i;:::-;10096:6;:18;10111:1;10096:18;;;;;;;;;;;;;;;:30;10115:10;10096:30;;;;;;;;;;;;;;;:75;;;;10178:10;:19;;:27;10198:6;10178:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10178:27:0;10217:77;10226:3;10239:1;10243:10;10255:6;10263;:18;10278:1;10263:18;;;;;;;;;;;;;;;:30;10282:10;10263:30;;;;;;;;;;;;;;;;10217:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9944:356;:::o;10306:461::-;10523:1;10508:17;;:5;:17;;;;10500:26;;;;;;10556:5;10541:34;;;10576:10;10596:4;10603:6;10541:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10541:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10541:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10541:69:0;;;;;;;;;;;;;;;;10533:78;;;;;;10646:37;10676:6;10646;:13;10653:5;10646:13;;;;;;;;;;;;;;;:25;10660:10;10646:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;10618:6;:13;10625:5;10618:13;;;;;;;;;;;;;;;:25;10632:10;10618:25;;;;;;;;;;;;;;;:65;;;;10695:66;10703:3;10708:5;10715:10;10727:6;10735;:13;10742:5;10735:13;;;;;;;;;;;;;;;:25;10749:10;10735:25;;;;;;;;;;;;;;;;10695:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10306:461;;:::o;8296:221::-;6003:5;;;;;;;;;;;5989:19;;:10;:19;;;5981:28;;;;;;8379:5;8366:18;;:9;;;;;;;;;;;:18;;;8362:148;;;8422:4;8410:9;;:16;;;;;;;;;;;;;;;;;;8362:148;;;8489:5;8477:9;;:17;;;;;;;;;;;;;;;;;;8362:148;8296:221::o;6990:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6941:27::-;;;;:::o;6874:25::-;;;;;;;;;;;;;:::o;13257:432::-;13466:4;13527:6;13499;:16;13506:8;13499:16;;;;;;;;;;;;;;;:24;13516:6;13499:24;;;;;;;;;;;;;;;;:34;;:145;;;;;13638:6;13544:90;13560:8;13570:9;13581;13592:10;13604:7;13613:5;13620:4;13626:1;13629;13632;13544:15;:90::i;:::-;:100;;13499:145;13485:180;;13660:5;13653:12;;;;13485:180;13679:4;13672:11;;13257:432;;;;;;;;;;;;;;;:::o;8953:101::-;6003:5;;;;;;;;;;;5989:19;;:10;:19;;;5981:28;;;;;;9037:11;9024:10;;:24;;;;;;;;;;;;;;;;;;8953:101;:::o;6727:21::-;;;;;;;;;;;;;:::o;6239:201::-;6306:8;;;;;;;;;;;6292:22;;:10;:22;;;6284:31;;;;;;6364:8;;;;;;;;;;;6331:42;;6357:5;;;;;;;;;;;6331:42;;;6352:3;6331:42;;;;;;;;;;;;;;;;;;6392:8;;;;;;;;;;;6384:5;;:16;;;;;;;;;;;;;;;;;;6430:1;6411:8;;:21;;;;;;;;;;;;;;;;;;6239:201::o;5728:20::-;;;;;;;;;;;;;:::o;10774:406::-;10848:9;;;;;;;;;;;10847:10;10839:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10913:1;10898:17;;:5;:17;;;;10890:26;;;;;;10960:6;10931;:13;10938:5;10931:13;;;;;;;;;;;;;;;:25;10945:10;10931:25;;;;;;;;;;;;;;;;:35;;10923:44;;;;;;11002:37;11032:6;11002;:13;11009:5;11002:13;;;;;;;;;;;;;;;:25;11016:10;11002:25;;;;;;;;;;;;;;;;:29;;:37;;;;:::i;:::-;10974:6;:13;10981:5;10974:13;;;;;;;;;;;;;;;:25;10988:10;10974:25;;;;;;;;;;;;;;;:65;;;;11060:5;11045:30;;;11076:10;11088:6;11045:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11045:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11045:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11045:50:0;;;;;;;;;;;;;;;;;11107:67;11116:3;11121:5;11128:10;11140:6;11148;:13;11155:5;11148:13;;;;;;;;;;;;;;;:25;11162:10;11148:25;;;;;;;;;;;;;;;;11107:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10774:406;;:::o;7137:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6039:111::-;6003:5;;;;;;;;;;;5989:19;;:10;:19;;;5981:28;;;;;;6133:9;6122:8;;:20;;;;;;;;;;;;;;;;;;6039:111;:::o;9208:152::-;9264:7;9324:6;:18;9339:1;9324:18;;;;;;;;;;;;;;;:30;9343:10;;;;;;;;;;;9324:30;;;;;;;;;;;;;;;;9317:37;;9208:152;:::o;9722:216::-;9796:45;9831:9;9796:6;:18;9811:1;9796:18;;;;;;;;;;;;;;;:30;9815:10;9796:30;;;;;;;;;;;;;;;;:34;;:45;;;;:::i;:::-;9763:6;:18;9778:1;9763:18;;;;;;;;;;;;;;;:30;9782:10;9763:30;;;;;;;;;;;;;;;:78;;;;9853:79;9861:3;9874:1;9878:10;9890:9;9901:6;:18;9916:1;9901:18;;;;;;;;;;;;;;;:30;9920:10;9901:30;;;;;;;;;;;;;;;;9853:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9722:216::o;5755:23::-;;;;;;;;;;;;;:::o;11186:114::-;11255:4;11275:6;:13;11282:5;11275:13;;;;;;;;;;;;;;;:19;11289:4;11275:19;;;;;;;;;;;;;;;;11268:26;;11186:114;;;;:::o;6829:20::-;;;;;;;;;;;;;:::o;9368:348::-;9429:13;6003:5;;;;;;;;;;;5989:19;;:10;:19;;;5981:28;;;;;;9452:14;9469:26;:24;:26::i;:::-;9452:43;;9522:1;9513:6;:10;9504:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9597:1;9564:6;:18;9579:1;9564:18;;;;;;;;;;;;;;;:30;9583:10;;;;;;;;;;;9564:30;;;;;;;;;;;;;;;:34;;;;9615:10;:19;;:27;9635:6;9615:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9615:27:0;9688:5;;;;;;;;;;;9664:38;;;9695:6;9664:38;;;;;;;;;;;;;;;;;;6020:1;9368:348;:::o;13695:737::-;13881:4;13894:12;13936:4;13942:8;13952:9;13963;13974:10;13986:7;13995:5;13919:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13919:82:0;;;13909:93;;;;;;13894:108;;14009:15;14046:6;:12;14053:4;14046:12;;;;;;;;;;;;;;;:18;14059:4;14046:18;;;;;;;;;;;;;;;;;;;;;:116;;;;14158:4;14068:94;;:86;14141:4;14088:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14088:58:0;;;14078:69;;;;;;14148:1;14150;14152;14068:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14068:86:0;;;;;;;;:94;;;14046:116;14045:152;;;;;14190:7;14174:12;:23;;14045:152;14031:183;;14213:1;14206:8;;;;;;14031:183;14275:10;14234:38;14262:9;14234:6;:17;14241:9;14234:17;;;;;;;;;;;;;;;:23;14252:4;14234:23;;;;;;;;;;;;;;;;:27;;:38;;;;:::i;:::-;:51;;;;;;14221:64;;14340:10;14302:37;14316:10;:16;14327:4;14316:16;;;;;;;;;;;;;;;:22;14333:4;14316:22;;;;;;;;;;;;14302:9;:13;;:37;;;;:::i;:::-;:48;14298:98;;;14359:37;14373:10;:16;14384:4;14373:16;;;;;;;;;;;;;;;:22;14390:4;14373:22;;;;;;;;;;;;14359:9;:13;;:37;;;;:::i;:::-;14352:44;;;;;;14298:98;14410:10;14403:17;;;;13695:737;;;;;;;;;;;;;:::o;2701:181::-;2759:7;2779:9;2795:1;2791;:5;2779:17;;2820:1;2815;:6;;2807:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:1;2866:8;;;2701:181;;;;:::o;12561:690::-;12703:19;12725:38;12745:6;12752:10;;12725:19;:38::i;:::-;12703:60;;12803;12836:26;12847:14;12836:6;:10;;:26;;;;:::i;:::-;12803:6;:16;12810:8;12803:16;;;;;;;;;;;;;;;:28;12820:10;12803:28;;;;;;;;;;;;;;;;:32;;:60;;;;:::i;:::-;12772:6;:16;12779:8;12772:16;;;;;;;;;;;;;;;:28;12789:10;12772:28;;;;;;;;;;;;;;;:91;;;;12895:54;12922:26;12933:14;12922:6;:10;;:26;;;;:::i;:::-;12895:6;:16;12902:8;12895:16;;;;;;;;;;;;;;;:22;12912:4;12895:22;;;;;;;;;;;;;;;;:26;;:54;;;;:::i;:::-;12870:6;:16;12877:8;12870:16;;;;;;;;;;;;;;;:22;12887:4;12870:22;;;;;;;;;;;;;;;:79;;;;12989:50;13024:14;12989:6;:18;13004:1;12989:18;;;;;;;;;;;;;;;:30;13008:10;;;;;;;;;;;12989:30;;;;;;;;;;;;;;;;:34;;:50;;;;:::i;:::-;12956:6;:18;12971:1;12956:18;;;;;;;;;;;;;;;:30;12975:10;;;;;;;;;;;12956:30;;;;;;;;;;;;;;;:83;;;;13074:63;13127:9;13102:22;13117:6;13102:10;:14;;:22;;;;:::i;:::-;:34;;;;;;13074:6;:17;13081:9;13074:17;;;;;;;;;;;;;;;:23;13092:4;13074:23;;;;;;;;;;;;;;;;:27;;:63;;;;:::i;:::-;13048:6;:17;13055:9;13048:17;;;;;;;;;;;;;;;:23;13066:4;13048:23;;;;;;;;;;;;;;;:89;;;;13176:69;13235:9;13210:22;13225:6;13210:10;:14;;:22;;;;:::i;:::-;:34;;;;;;13176:6;:17;13183:9;13176:17;;;;;;;;;;;;;;;:29;13194:10;13176:29;;;;;;;;;;;;;;;;:33;;:69;;;;:::i;:::-;13144:6;:17;13151:9;13144:17;;;;;;;;;;;;;;;:29;13162:10;13144:29;;;;;;;;;;;;;;;:101;;;;12561:690;;;;;;;:::o;3157:184::-;3215:7;3248:1;3243;:6;;3235:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3295:9;3311:1;3307;:5;3295:17;;3332:1;3325:8;;;3157:184;;;;:::o;3592:470::-;3650:7;3899:1;3894;:6;3890:47;;;3924:1;3917:8;;;;3890:47;3949:9;3965:1;3961;:5;3949:17;;3994:1;3989;3985;:5;;;;;;:10;3977:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4053:1;4046:8;;;3592:470;;;;;:::o;8568:264::-;8659:7;8685:14;8702:5;8685:22;;8739:6;8726:9;:19;;8718:28;;;;;;8757:9;8769:36;8798:6;8769:24;8783:9;8769;:13;;:24;;;;:::i;:::-;:28;;:36;;;;:::i;:::-;8757:48;;8823:1;8816:8;;;;8568:264;;;;:::o;4530:333::-;4588:7;4687:1;4683;:5;4675:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4730:9;4746:1;4742;:5;;;;;;4730:17;;4854:1;4847:8;;;4530:333;;;;:::o

Swarm Source

bzzr://081f843cf3c0811085aadd99c17b8405012c62043181c1f8daec438fb1b13f46
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.