Contract 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x74c15d9cd5f2037f587efe21f349c1cd04d2025fc222cd419d11e7a82c8aa42785679722021-06-24 5:56:5724 mins ago0xa1b76c82a8448b3b5397311d1f718e5f6f7cc253 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.0032993991
0x64c28fb1dc092753d2a712aee855e67544e4496715f6175f20a008ee9d89a82285678532021-06-24 5:51:0030 mins ago0xcdc3c0ca6b0b318ae2f7bb3b350c0d9af0563c8f IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00278756
0xcf43128b4b8d8a9ac51f9704bb70fafbd7366b7d36dd64e1a54c83322545b9fc85678502021-06-24 5:50:5130 mins ago0x50f9c99caaf6cab4936beef274f6b622dd5dec45 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.013034835
0x3bf58f3b77ea4d3ddaacff24234f5f4f336177c240dc47ff7a10fd84165cedd985678452021-06-24 5:50:3630 mins ago0x50f9c99caaf6cab4936beef274f6b622dd5dec45 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00115934
0xa74c7f6148b0b1251cb6fa01e40f2e5357e1a719752ae0e87c9ebefce875279e85669332021-06-24 5:05:001 hr 16 mins ago0xa1b76c82a8448b3b5397311d1f718e5f6f7cc253 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.0011273856
0x24b8058b958d10f7f203741de24ca080e2ff56a88c7f437045b5e83c58c7414b85669082021-06-24 5:03:451 hr 17 mins ago0x591c9e3b990e4a03f60db484cf8b5a933ca5699d IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.000522755
0xb6439e36aa92bf814e196cd431e2bdfa6dbd756430f4e744fba9f3df3bee6da985668632021-06-24 5:01:301 hr 19 mins ago0x040e52371671ab0dfa86a8cf04d3abd7120cf966 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00271256
0x4f6963f4c5afe3bb1f4f7beac230a37273e2f371d11fe9b92aa474b199c1399a85666162021-06-24 4:49:091 hr 31 mins ago0xf4e6df8539c89d62ce98986ad5576d535cb4ae4c IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.003107995
0x493fa16a5ee42a036c17ac39fb9ec7bc395455697b90fb8b95201769e520a3f085662242021-06-24 4:29:301 hr 51 mins ago0x591c9e3b990e4a03f60db484cf8b5a933ca5699d IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00115934
0xc0edc847d583cb0b7c44f7884d9f9d482354c507a37c952a1df6650fec8accb485655022021-06-24 3:53:172 hrs 27 mins ago0xb454921e8b96d2e698e48b4a6a95d2a74377fb46 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.013034835
0x13c7dc82453d0f939bf97fc080ea50b799fef7baf1898343b3e27ca20461560385650462021-06-24 3:30:292 hrs 50 mins ago0x019bd6abccc407d39edadfd279effd4fc1298bdd IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00384978
0xa2c42afefffb2a9cd0ec6fdd6153739ac97c704d113fc43b357d4599845f771785650422021-06-24 3:30:172 hrs 50 mins ago0x019bd6abccc407d39edadfd279effd4fc1298bdd IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.012700405
0x8c56e6afdc61a30ad199a500fa71fbd0eec74d9737b8e47f43df0857ab0c33fe85648132021-06-24 3:18:503 hrs 2 mins ago0x1e83d4c1c14d8c049744234637b8c99ce2b44359 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00203262
0x2f8ac49a3cf4a80779123badbc58e9ecef39d648a1438c2a8a82b13d1d7d922b85648092021-06-24 3:18:383 hrs 2 mins ago0x1e83d4c1c14d8c049744234637b8c99ce2b44359 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00278756
0xe697d2f18e77b221d541f12964032f023165c7f5f79614d5e159ca92cc62a47a85635622021-06-24 2:15:244 hrs 5 mins ago0x9cd34e3bf21413017b47327bb6c399fe1c4c464d IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.003182575
0x112b93630cdf431f010b2dcc7a0b4a5efbb82107efa516072b3994217562c38b85631942021-06-24 1:57:004 hrs 24 mins ago0x182b336279294d625585842f1bd62a0002ce9fff IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.013055835
0x365fb385b6187ae8ad255ded401e12e5e3bd51ea31f0a12bfac437494fc75ad885628732021-06-24 1:40:574 hrs 40 mins ago0x55d81738e1e4dc745b5f9c797e622fad4202fed0 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00115934
0xea80c76a904355de30c8b8b248e5ab95493ec92cf49d20e6f9eb03291201216b85624092021-06-24 1:17:455 hrs 3 mins ago0x1be69cd7300ed140c03ac3b026d55e255c86b3b0 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.002882065
0x55c6d8103eeea74e991c22ea7ba3f0a6c37b1b5248dbc49fe847b4ca78e9ed9385620782021-06-24 1:01:125 hrs 19 mins ago0x97f910298ac38cbf7f4536f19a7f99724143df37 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.003314905
0xfa69ac1cf8182c0299a8406c31dc9457fc82c8767dc5ba45b3614d931910596385605562021-06-23 23:45:066 hrs 35 mins ago0x147ff5b0fed1a09d21f5ef7c8b822e5303243526 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.003255144
0xe7807ef857679ad6cf50974b720d135bb6c6c9050672b4f1442ae58d72c8ec1a85605552021-06-23 23:45:036 hrs 36 mins ago0x147ff5b0fed1a09d21f5ef7c8b822e5303243526 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.003345144
0x2a67b356a57cdf8a9e007225ef92334e665dbdaac8e6b478ac00fa5bf835431e85605372021-06-23 23:44:096 hrs 36 mins ago0x17139bb5625eace9dad51c01cfb26e9fca4fc631 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00278756
0x7c5c2227d97e7e172a68c1fe8e9b1eeb7354b0cff642bf883e3d78ac37ace40385594172021-06-23 22:48:087 hrs 32 mins ago0xf0cbe1604d8edc866ca777a296906adc0fac908b IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00392478
0xf4c6d437fbcaead19ccfbdfc2f6fc18df42c0bf42ec19c583a806b948ea2158185590852021-06-23 22:31:097 hrs 49 mins ago0xa6ef78880e94e4d447a5c462f0b654559ef86856 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.001343905
0xf883a00f290292ed29b759b750e26419d3555e292584e78545636260178d40fd85588082021-06-23 22:16:548 hrs 4 mins ago0x828971d21ddfe1c587ec4df623c3aee33f81aa91 IN  0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0 BNB0.00178152
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcf43128b4b8d8a9ac51f9704bb70fafbd7366b7d36dd64e1a54c83322545b9fc85678502021-06-24 5:50:5130 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0x50f9c99caaf6cab4936beef274f6b622dd5dec455 BNB
0xcf43128b4b8d8a9ac51f9704bb70fafbd7366b7d36dd64e1a54c83322545b9fc85678502021-06-24 5:50:5130 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e5 BNB
0xc0edc847d583cb0b7c44f7884d9f9d482354c507a37c952a1df6650fec8accb485655022021-06-24 3:53:172 hrs 27 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0xb454921e8b96d2e698e48b4a6a95d2a74377fb46128 BNB
0xc0edc847d583cb0b7c44f7884d9f9d482354c507a37c952a1df6650fec8accb485655022021-06-24 3:53:172 hrs 27 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e128 BNB
0x112b93630cdf431f010b2dcc7a0b4a5efbb82107efa516072b3994217562c38b85631942021-06-24 1:57:004 hrs 24 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0x182b336279294d625585842f1bd62a0002ce9fff2 BNB
0x112b93630cdf431f010b2dcc7a0b4a5efbb82107efa516072b3994217562c38b85631942021-06-24 1:57:004 hrs 24 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e2 BNB
0xbb080f15ea896364759015b0781ba5f0d0627e372bbedcc817013b35ed00891885595632021-06-23 22:55:267 hrs 25 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e 0xa8c9357dd25188f5e5954dc25509f92c44f387400.095343507244365779 BNB
0xbb080f15ea896364759015b0781ba5f0d0627e372bbedcc817013b35ed00891885595632021-06-23 22:55:267 hrs 25 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0.095343507244365779 BNB
0x1aeebab894288e12df25a9451ac9cd108f88e5c7d4e167da3b6ed4011f8c6a2e85572572021-06-23 20:59:219 hrs 21 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0xd73b79d4457634ee214c83cb89437a88c572573a7.731437754999999 BNB
0x1aeebab894288e12df25a9451ac9cd108f88e5c7d4e167da3b6ed4011f8c6a2e85572572021-06-23 20:59:219 hrs 21 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e7.731437754999999 BNB
0xb449c650caccdd3684b0af5ae678e1e3049a8c9cabad87f419fd119c6760a70785549642021-06-23 19:03:3311 hrs 17 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e Binance: WBNB Token7,000 BNB
0x3a91076caa9223898c8c87b4fca09f7b46007c8539d4d5d82bf98efb83e0ba8585545892021-06-23 18:44:4811 hrs 36 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0x5640f35db33d6444c0e42d19b1ba160db107af217,000 BNB
0x3a91076caa9223898c8c87b4fca09f7b46007c8539d4d5d82bf98efb83e0ba8585545892021-06-23 18:44:4811 hrs 36 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e7,000 BNB
0x5cee76d485e48b4d601698c3aa23a253f20c199114a796cc9a741264fd169c9985537412021-06-23 18:02:2412 hrs 18 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e Binance: WBNB Token3 BNB
0xfdf47379c9197d33e5e799d81c787845f761bbf02d285f8c74b45ad32c292a8d85533492021-06-23 17:42:4812 hrs 38 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0x9b4916af44b8046428843ed3c8f33063da3bb2895.5 BNB
0xfdf47379c9197d33e5e799d81c787845f761bbf02d285f8c74b45ad32c292a8d85533492021-06-23 17:42:4812 hrs 38 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e5.5 BNB
0x24f41fa1451017d99c9803690783b5cd826ebb00ed16036907ec2afafda8829685516182021-06-23 16:16:0414 hrs 4 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0xffdd3344e7a7e3e5e6cc60b117eece018a445a930.09660033750000001 BNB
0x24f41fa1451017d99c9803690783b5cd826ebb00ed16036907ec2afafda8829685516182021-06-23 16:16:0414 hrs 4 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0.09660033750000001 BNB
0x665840ebf484f2225556524a644081a266ba46a70b443d68de5ee0695118313f85465242021-06-23 12:00:5218 hrs 20 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0xaf464e8a9c29711c60b551f9e524170ef78c46990.25 BNB
0x665840ebf484f2225556524a644081a266ba46a70b443d68de5ee0695118313f85465242021-06-23 12:00:5218 hrs 20 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0.25 BNB
0x143fc94d6cde75c564f4b91b9ee53c39a6624491acf6feac846053762c713f2285446992021-06-23 10:29:0019 hrs 52 mins ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0x3b82efa6c05b8534172251e40784bd9e63a72d490.389195811508148475 BNB
0x143fc94d6cde75c564f4b91b9ee53c39a6624491acf6feac846053762c713f2285446992021-06-23 10:29:0019 hrs 52 mins ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0.389195811508148475 BNB
0xfa96f08c466ac9050a78917312783e663edca67e2c2a6a19007833b2cb25a67e85379742021-06-23 4:51:111 day 1 hr ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e0xa02ac3f169ace64fa1026e32b3e70a853cd72cd225 BNB
0xfa96f08c466ac9050a78917312783e663edca67e2c2a6a19007833b2cb25a67e85379742021-06-23 4:51:111 day 1 hr ago Binance: WBNB Token 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e25 BNB
0x909b67230e6c6981f1adcbe178bddb5226e86f61451ba9f8c80b97822dc5c33985338252021-06-23 1:23:071 day 4 hrs ago 0x07de034a0fc0da7a0bf703f6dca7025bcd61ba3e Binance: WBNB Token0.5 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DemaxShackChef

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-15
*/

// Dependency file: contracts/interfaces/IERC20.sol

// SPDX-License-Identifier: MIT
// pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}


// Dependency file: contracts/interfaces/IWETH.sol

// pragma solidity >=0.5.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}


// Dependency file: contracts/libraries/SafeMath.sol


// pragma solidity >=0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

// Dependency file: contracts/modules/Ownable.sol

// pragma solidity >=0.6.0;

contract Ownable {
    address public owner;

    event OwnerChanged(address indexed _oldOwner, address indexed _newOwner);

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

    modifier onlyOwner() {
        require(msg.sender == owner, 'Ownable: FORBIDDEN');
        _;
    }

    function changeOwner(address _newOwner) public onlyOwner {
        require(_newOwner != address(0), 'Ownable: INVALID_ADDRESS');
        emit OwnerChanged(owner, _newOwner);
        owner = _newOwner;
    }

}


// Dependency file: contracts/modules/ReentrancyGuard.sol


// pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () internal {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


// Root file: contracts/DemaxShackChef.sol


pragma solidity >=0.6.6;

// import "contracts/interfaces/IERC20.sol";
// import 'contracts/interfaces/IWETH.sol';
// import 'contracts/libraries/SafeMath.sol';
// import "contracts/modules/Ownable.sol";
// import "contracts/modules/ReentrancyGuard.sol";

interface IRewardToken {
    function mint(address to, uint value) external returns (bool);
}

interface IShackChef {

    /**
     * @dev Get Pool infos
     * If you want to get the pool's available quota, let "avail = depositCap - accShare"
     */
    function pools(uint256 pid) external view returns (
        address token,              // Address of token contract
        uint256 depositCap,         // Max deposit amount
        uint256 depositClosed,      // Deposit closed
        uint256 lastRewardBlock,    // Last block number that reward distributed
        uint256 accRewardPerShare,  // Accumulated rewards per share
        uint256 accShare,           // Accumulated Share
        uint256 apy,                // APY, times 10000
        uint256 used                // How many tokens used for farming
    );

    /**
    * @dev Get pid of given token
    */
    function pidOfToken(address token) external view returns (uint256 pid);

    /**
    * @dev Get User infos
    */
    function users(uint256 pid, address user) external view returns (
        uint256 amount,     // Deposited amount of user
        uint256 rewardDebt  // Ignore
    );

    /**
     * @dev Get user unclaimed reward
     */
    function unclaimedReward(uint256 pid, address user) external view returns (uint256 reward);

    /**
     * @dev Get user total claimed reward of all pools
     */
    function userStatistics(address user) external view returns (uint256 claimedReward);

    /**
     * @dev Deposit tokens and Claim rewards
     * If you just want to claim rewards, call function: "deposit(pid, 0)"
     */
    function deposit(uint256 pid, uint256 amount) external;

    /**
     * @dev Withdraw tokens
     */
    function withdraw(uint256 pid, uint256 amount) external;

}

interface ISwapRouter {
    function factory() external view returns (address);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface ISwapPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface ISwapFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}


// Note that it's ownable and the owner wields tremendous power. The ownership
// will be transferred to a governance smart contract once mintToken is sufficiently
// distributed and the community can show to govern itself.
contract DemaxShackChef is Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    uint256 public version = 1;

    // Info of each user.
    struct UserInfo {
        uint256 amount;         // How many LP tokens the user has provided.
        uint256 rewardDebt;     // Reward debt. See explanation below.
        uint256 earnDebt;     // Earn debt. See explanation below.
        //
        // We do some fancy math here. Basically, any point in time, the amount of RewardTokens, the amount of EarnTokens
        // entitled to a user but is pending to be distributed is:
        //
        //   pending reward = (user.amount * pool.accRewardPerShare) - user.rewardDebt
        //   pending earn = (user.amount * pool.accEarnPerShare) - user.earnDebt
        //
        // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
        //   1. The pool's `accRewardPerShare` (and `lastUpdateBlock`) gets updated.
        //   2. User receives the pending reward and earn sent to his/her address.
        //   3. User's `amount` gets updated.
        //   4. User's `rewardDebt` gets updated.
        //   5. User's `earnDebt` gets updated.
    }

    // Info of each pool.
    struct PoolInfo {
        uint256 pid;
        IERC20 depositToken;           // Address of deposit token contract.
        IERC20 earnToken;           // Address of earn token contract.
        uint256 allocPoint;       // How many allocation points assigned to this pool. RewardTokens to distribute per block.
        uint256 lastUpdateBlock;  // Last block number that RewardTokens distribution occurs.
        uint256 lastRewardAmount; // Last RewardToken amunt that RewardTokens distribution occurs.
        uint256 lastEarnAmount; // Last EarnToken amunt that EarnTokens distribution occurs.
        uint256 accRewardPerShare;   // Accumulated RewardTokens per share, times 1e18. See below.
        uint256 accEarnPerShare;   // Accumulated EarnTokens per share, times 1e18. See below.
        uint16 tokenType;
        bool added;
    }

    address public weth;
    // The XBurger TOKEN!
    address public mintToken;
    // Dev address.
    address public devaddr;
    // mintToken tokens created per block.
    uint256 public mintPerBlock;
    // Bonus muliplier for early mintToken makers.
    uint256 public constant BONUS_MULTIPLIER = 1;
    // Shack Chef address
    address public shackAddress;

    uint256 public rewardTotal;
    uint256 public devRewardRate = 0;
    uint256 public devEarnRate = 0;
    mapping(IERC20 => uint256) public earnTokensTotal;

    // Info of each pool.
    mapping(uint256 => PoolInfo) public poolInfo;
    uint256[] public pids;
    // Info of each user that stakes LP tokens.
    mapping(uint256 => mapping(address => UserInfo)) public userInfo;
    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;
    // The block number when mintToken mining starts.
    uint256 public startBlock;
    uint256 public accRewardShare;

    mapping (address => address) public tokenRouters;
    mapping (address => address) public swapTokens;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event SetFeeAddress(address indexed user, address indexed newAddress);
    event SetDevAddress(address indexed user, address indexed newAddress);
    event UpdateEmissionRate(address indexed user, uint256 mintPerBlock);

    constructor(
        address _weth,
        address _shackAddress,
        address _mintToken,
        address _devaddr,
        uint256 _mintPerBlock,
        uint256 _startBlock
    ) public {
        weth = _weth;
        shackAddress = _shackAddress;
        mintToken = _mintToken;
        devaddr = _devaddr;
        mintPerBlock = _mintPerBlock;
        startBlock = _startBlock;
    }

    function poolLength() external view returns (uint256) {
        return pids.length;
    }

    mapping(IERC20 => mapping(IERC20 => bool)) public poolExistence;
    modifier nonDuplicated(IERC20 _depositToken, IERC20 _earnToken) {
        require(poolExistence[_depositToken][_earnToken] == false, "nonDuplicated: duplicated");
        _;
    }

    receive() external payable {
        assert(msg.sender == weth);
    }

    // Set a new lp to the pool. Can only be called by the owner.
    function add(bool _withUpdate, uint256 _pid, uint256 _allocPoint, IERC20 _depositToken, IERC20 _earnToken, uint16 _tokenType) public onlyOwner nonDuplicated(_depositToken, _earnToken) {
        if (_withUpdate) {
            massUpdatePools();
        }

        uint256 lastUpdateBlock = block.number > startBlock ? block.number : startBlock;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolExistence[_depositToken][_earnToken] = true;
        if(poolInfo[_pid].added == false) {
            pids.push(_pid);
        }
        poolInfo[_pid] = PoolInfo({
            pid: _pid,
            depositToken : _depositToken,
            earnToken: _earnToken,
            allocPoint : _allocPoint,
            lastUpdateBlock : lastUpdateBlock,
            lastRewardAmount : 0,
            lastEarnAmount : 0,
            accRewardPerShare : 0,
            accEarnPerShare: 0,
            tokenType: _tokenType,
            added: true
        });
    }

    function set(uint256 _pid, uint256 _allocPoint, IERC20 _depositToken, IERC20 _earnToken, uint16 _tokenType) public onlyOwner nonDuplicated(_depositToken, _earnToken) {
        add(true, _pid, _allocPoint, _depositToken, _earnToken, _tokenType);
    }

    function batchAdd(bool _withUpdate, uint256[] memory _pids, uint256[] memory _allocPoints, IERC20[] memory _depositTokens, IERC20[] memory _earnTokens, uint16[] memory _tokenTypes) public onlyOwner {
        require(_pids.length == _allocPoints.length && _allocPoints.length == _depositTokens.length && _depositTokens.length == _earnTokens.length, 'invalid params');
        for(uint256 i; i<_allocPoints.length; i++) {
            add(false, _pids[i], _allocPoints[i], _depositTokens[i], _earnTokens[i], _tokenTypes[i]);
        }
        if (_withUpdate) {
            massUpdatePools();
        }
    }

    function batchSet(uint256[] memory _pids, uint256[] memory _allocPoints, IERC20[] memory _depositTokens, IERC20[] memory _earnTokens, uint16[] memory _tokenTypes) public onlyOwner {
        require(_pids.length == _allocPoints.length && _allocPoints.length == _depositTokens.length && _depositTokens.length == _earnTokens.length, 'invalid params');
        batchAdd(true, _pids, _allocPoints, _depositTokens, _earnTokens, _tokenTypes);
    }

    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) {
        return _to.sub(_from).mul(BONUS_MULTIPLIER);
    }

    function getToBlock() public view returns (uint256) {
        return block.number;
    }

    function getDepositTokenSupply(uint256 _pid) public view returns (uint256) {
        PoolInfo memory pool = poolInfo[_pid];
        if(shackAddress != address(0)) {
            (uint256 balance, ) = IShackChef(shackAddress).users(_pid, address(this));
            return balance;
        }
        return pool.depositToken.balanceOf(address(this));
    }

    function pendingRewardInfo(uint256 _pid) public view returns (uint256, uint256, uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        if (getToBlock() > pool.lastUpdateBlock && totalAllocPoint > 0) {
            uint256 multiplier = getMultiplier(pool.lastUpdateBlock, getToBlock());
            uint256 reward = multiplier.mul(mintPerBlock).mul(pool.allocPoint).div(totalAllocPoint);
            uint256 devValue;
            if(devRewardRate > 0) {
                devValue = reward.div(devRewardRate);
            }
            return (reward, devValue, block.number);
        }
        return (0, 0, block.number);
    }

    function pendingEarnInfo(uint256 _pid) public view returns (uint256, uint256, uint256) {
        PoolInfo memory pool = poolInfo[_pid];
        if(shackAddress != address(0)) {
            uint256 earn = IShackChef(shackAddress).unclaimedReward(_pid, address(this));
            earn = getCurrentRate(address(pool.earnToken), earn);
            uint256 devValue;
            if(devEarnRate > 0) {
                devValue = earn.div(devEarnRate);
                earn = earn.sub(devValue);
            }
            return (earn, devValue, block.number);
        }
        return (0, 0, block.number);
    }

    // View function to see pending RewardTokens on frontend.
    function pendingReward(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accRewardPerShare = pool.accRewardPerShare;
        uint256 depositTokenSupply = getDepositTokenSupply(_pid);
        if (depositTokenSupply >0) {
            (uint256 reward, ,) = pendingRewardInfo(_pid);
            accRewardPerShare = accRewardPerShare.add(reward.mul(1e18).div(depositTokenSupply));
        }
        uint256 result = user.amount.mul(accRewardPerShare).div(1e18).sub(user.rewardDebt);
        return result;
    }

    function pendingEarn(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accEarnPerShare = pool.accEarnPerShare;
        uint256 depositTokenSupply = getDepositTokenSupply(_pid);
        if (depositTokenSupply != 0 && shackAddress != address(0)) {
            (uint256 earn, ,) = pendingEarnInfo(_pid);
            accEarnPerShare = accEarnPerShare.add(earn.mul(1e18).div(depositTokenSupply));
        }
        uint256 result = user.amount.mul(accEarnPerShare).div(1e18).sub(user.earnDebt);
        return result;
    }

    function canDeposit(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo memory pool = poolInfo[_pid];
        uint256 amount = pool.depositToken.balanceOf(_user);
        if(shackAddress != address(0)) {
            (,uint256 depositCap, , , , uint256 accShare, ,) = IShackChef(shackAddress).pools(_pid);
            if(depositCap > accShare) {
                amount = depositCap.sub(accShare);
            } else {
                amount = 0;
            }
        }
        return amount;
    }

    function shackPoolInfo(uint256 _pid) external view returns (
        address token,              // Address of token contract
        uint256 depositCap,         // Max deposit amount
        uint256 depositClosed,      // Deposit closed
        uint256 lastRewardBlock,    // Last block number that reward distributed
        uint256 accRewardPerShare,  // Accumulated rewards per share
        uint256 accShare,           // Accumulated Share
        uint256 apy,                // APY, times 10000
        uint256 used                // How many tokens used for farming
    ) {
        if(shackAddress != address(0)) {
            (token, depositCap, depositClosed, lastRewardBlock, accRewardPerShare, accShare, apy, used) = IShackChef(shackAddress).pools(_pid);
        }
    }

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() internal {
        uint256 length = pids.length;
        for (uint256 i = 0; i < length; ++i) {
            updatePool(pids[i]);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) internal {
        PoolInfo storage pool = poolInfo[_pid];
        uint256 toBlock = getToBlock();
        if (toBlock <= pool.lastUpdateBlock) {
            return;
        }
        uint256 depositTokenSupply = getDepositTokenSupply(_pid);
        if (depositTokenSupply == 0 || pool.allocPoint == 0) {
            pool.lastUpdateBlock = toBlock;
            return;
        }
        
        (uint256 reward, uint256 devReward,) = pendingRewardInfo(_pid);
        pool.lastRewardAmount = reward;
        IRewardToken(mintToken).mint(address(this), reward);
        rewardTotal = rewardTotal.add(reward);
        if(devReward > 0) {
            IRewardToken(mintToken).mint(devaddr, devReward);
            rewardTotal = rewardTotal.add(devReward);
        }
        pool.accRewardPerShare = pool.accRewardPerShare.add(reward.mul(1e18).div(depositTokenSupply));

        (uint256 earn, uint256 devEarn,) = _mintEarnToken(_pid);
        pool.lastEarnAmount = earn.add(devEarn);
        pool.accEarnPerShare = pool.accEarnPerShare.add(earn.mul(1e18).div(depositTokenSupply));

        pool.lastUpdateBlock = toBlock;
    }

    // Deposit LP tokens to MasterChef for mintToken allocation.
    function deposit(uint256 _pid, uint256 _amount) payable public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        updatePool(_pid);
        _harvestMintToken(_pid);
        _harvestEarnToken(_pid);
        if(address(pool.depositToken) == weth) {
            _amount = msg.value;
        }
        if (_amount > 0) {
            if(address(pool.depositToken) == weth) {
                IWETH(weth).deposit{value: _amount}();
            } else {
                pool.depositToken.transferFrom(address(msg.sender), address(this), _amount);
            }
            user.amount = user.amount.add(_amount);

            if(shackAddress != address(0)) {
                approveContract(address(pool.depositToken), shackAddress, _amount);
                IShackChef(shackAddress).deposit(_pid, _amount);
            }
        }
        user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e18);
        user.earnDebt = user.amount.mul(pool.accEarnPerShare).div(1e18);
        emit Deposit(msg.sender, _pid, _amount);
    }

    // Withdraw LP tokens from MasterChef.
    function withdraw(uint256 _pid, uint256 _amount) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        require(user.amount >= _amount, "withdraw: not good");
        updatePool(_pid);
        _harvestMintToken(_pid);
        _harvestEarnToken(_pid);
        if (_amount > 0) {
            if(shackAddress != address(0)) {
                IShackChef(shackAddress).withdraw(_pid, _amount);
            }
            user.amount = user.amount.sub(_amount);
            if(address(pool.depositToken) == weth) {
                IWETH(weth).withdraw(_amount);
                address(uint160(msg.sender)).transfer(_amount);
            } else {
                pool.depositToken.transfer(address(msg.sender), _amount);
            }
        }
        user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e18);
        user.earnDebt = user.amount.mul(pool.accEarnPerShare).div(1e18);
        emit Withdraw(msg.sender, _pid, _amount);
    }

    // Withdraw without caring about rewards. EMERGENCY ONLY.
    function emergencyWithdraw(uint256 _pid) public nonReentrant {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 amount = user.amount;
        user.amount = 0;
        user.rewardDebt = 0;
        user.earnDebt = 0;
        pool.depositToken.transfer(address(msg.sender), amount);
        emit EmergencyWithdraw(msg.sender, _pid, amount);
    }

    function _mintEarnToken(uint256 _pid) internal returns (uint256, uint256, uint256) {
        if(shackAddress == address(0)) {
            return (0, 0, block.number);
        }
        (uint256 earn, uint256 devValue,) = pendingEarnInfo(_pid);
        if(earn.add(devValue) == 0) {
            return (0, 0, block.number);
        }

        PoolInfo memory pool = poolInfo[_pid];
        uint256 beforeBalance = pool.earnToken.balanceOf(address(this));
        IShackChef(shackAddress).deposit(_pid, 0);
        uint256 afterBalance = pool.earnToken.balanceOf(address(this));
        earn = afterBalance.sub(beforeBalance);
        if(tokenRouters[address(pool.earnToken)] != address(0)) {
            earn = swap(address(pool.earnToken), earn);
        }
        earnTokensTotal[pool.earnToken] = earnTokensTotal[pool.earnToken].add(earn);
        devValue = 0;
        if(devEarnRate > 0) {
            devValue = earn.div(devEarnRate);
            if(tokenRouters[address(pool.earnToken)] != address(0)) {
                safeTokenTransfer(swapTokens[address(pool.earnToken)], devaddr, devValue);
            } else {
                safeTokenTransfer(address(pool.earnToken), devaddr, devValue);
            }
            earn = earn.sub(devValue);
        }
        return (earn, devValue, block.number);
    }

    function _harvestMintToken(uint256 _pid) internal returns(uint256 amount) {
        PoolInfo memory pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e18).sub(user.rewardDebt);
        amount = safeTokenTransfer(mintToken, msg.sender, pending);
        user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e18);
        return amount;
    }

    function _harvestEarnToken(uint256 _pid) internal returns(uint256 amount) {
        if(shackAddress == address(0)) {
            return 0;
        }
        PoolInfo memory pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];
        uint256 pending = user.amount.mul(pool.accEarnPerShare).div(1e18).sub(user.earnDebt);
        if(tokenRouters[address(pool.earnToken)] != address(0)) {
            amount = safeTokenTransfer(swapTokens[address(pool.earnToken)], msg.sender, pending);
        } else {
            amount = safeTokenTransfer(address(pool.earnToken), msg.sender, pending);
        }
        user.earnDebt = user.amount.mul(pool.accEarnPerShare).div(1e18);
        return amount;
    }

    function harvest(uint256 _pid) public nonReentrant {
        updatePool(_pid);
        _harvestMintToken(_pid);
        _harvestEarnToken(_pid);
    }

    // Safe Token transfer function, just in case if rounding error causes pool to not have enough tokens.
    function safeTokenTransfer(address _token, address _to, uint256 _amount) internal returns(uint256) {
        uint256 tokenBal = IERC20(_token).balanceOf(address(this));
        if(_amount > 0 && tokenBal > 0) {
            if (_amount > tokenBal) {
                _amount = tokenBal;
            }
            IERC20(_token).transfer(_to, _amount);
        }
        return _amount;
    }

    function emergencyExitShakChef(uint256 _pid) public onlyOwner {
        require(shackAddress != address(0), "emergencyExitShakChef: Invalid Address");
        (uint256 amount,) = IShackChef(shackAddress).users(_pid, address(this));
        IShackChef(shackAddress).withdraw(_pid, amount);
    }

    function emergencyExitAllShakChef() public {
        uint256 length = pids.length;
        for (uint256 i = 0; i < length; ++i) {
            emergencyExitShakChef(pids[i]);
        }
    }

    // Update dev address by the previous dev.
    function changeDev(address _devaddr) public {
        require(msg.sender == devaddr || msg.sender == owner, "changeDev: FORBIDDEN");
        devaddr = _devaddr;
        emit SetDevAddress(msg.sender, _devaddr);
    }

    function setDevRewardRate(uint256 _value) public onlyOwner {
        require(_value >=0 && _value <=10, 'invalid param');
        devRewardRate = _value;
    }

    function setDevEarnRate(uint256 _value) public onlyOwner {
        require(_value >=0 && _value <=10, 'invalid param');
        devEarnRate = _value;
    }

    function setRate(uint256 _devRewardRate, uint256 _devEarnRate) public onlyOwner {
        setDevRewardRate(_devRewardRate);
        setDevEarnRate(_devEarnRate);
    }

    function setStartBlock(uint256 _value) public onlyOwner {
        startBlock = _value;
    }

    //mintToken has to add hidden dummy pools inorder to alter the emission, here we make it simple and transparent to all.
    function updateEmissionRate(uint256 _mintPerBlock) public onlyOwner {
        massUpdatePools();
        mintPerBlock = _mintPerBlock;
        emit UpdateEmissionRate(msg.sender, _mintPerBlock);
    }

    function setRouter(address _token, address _router) external onlyOwner {
        tokenRouters[_token] = _router;
    }

    function setSwapToken(address _token, address _tokenOut) external onlyOwner {
        swapTokens[_token] = _tokenOut;
    }

    function setSwapTokenAndRouter(address _token, address _tokenOut, address _router) external onlyOwner {
        swapTokens[_token] = _tokenOut;
        tokenRouters[_token] = _router;
    }

    function approveContract(address _token, address _spender, uint _amount) internal {
        uint allowAmount = IERC20(_token).totalSupply();
        if(allowAmount < _amount) {
            allowAmount = _amount;
        }
        if(IERC20(_token).allowance(address(this), _spender) < _amount) {
            IERC20(_token).approve(_spender, allowAmount);
        }
    }

    function swap(address _tokenIn, uint256 _amount) public returns (uint256) {
        if(_amount == 0) {
            return 0;
        }
        address _tokenOut = swapTokens[_tokenIn];
        approveContract(_tokenIn, tokenRouters[_tokenIn], _amount);
        address[] memory path = new address[](2);
        path[0] = _tokenIn;
        path[1] = _tokenOut;
        uint256 beforeBalance = IERC20(_tokenOut).balanceOf(address(this));
        ISwapRouter(tokenRouters[_tokenIn]).swapExactTokensForTokens(_amount, 1, path, address(this), block.timestamp+600);
        uint256 afterBalance = IERC20(_tokenOut).balanceOf(address(this));
        return afterBalance.sub(beforeBalance);
    }

    function getCurrentRate(address _tokenIn, uint256 _amount) public view returns (uint256) {
        if(tokenRouters[_tokenIn] == address(0) || swapTokens[_tokenIn] == address(0)) {
            return _amount;
        }
        address factory = ISwapRouter(tokenRouters[_tokenIn]).factory();
        address pair = ISwapFactory(factory).getPair(_tokenIn, swapTokens[_tokenIn]);
        (uint112 reserve0, uint112 reserve1, ) = ISwapPair(pair).getReserves();
        if(reserve0 == 0 || reserve1 ==0) {
            return 0;
        }
        uint256 tokenInReserve = uint256(reserve0);
        uint256 tokenOutReserve = uint256(reserve1);
        uint256 tokenInDecimals = uint256(IERC20(_tokenIn).decimals());
        uint256 tokenOutDecimals = uint256(IERC20(swapTokens[_tokenIn]).decimals());
        if(ISwapPair(pair).token0() != _tokenIn) {
            tokenInDecimals = IERC20(swapTokens[_tokenIn]).decimals();
            tokenOutDecimals = IERC20(_tokenIn).decimals();
            tokenInReserve = uint256(reserve1);
            tokenOutReserve = uint256(reserve0);
        }
        if(tokenInDecimals > tokenOutDecimals) {
            tokenOutReserve = tokenOutReserve * 10** (tokenInDecimals - tokenOutDecimals);
        } else if(tokenInDecimals < tokenOutDecimals) {
            tokenInReserve = tokenInReserve * 10** (tokenOutDecimals - tokenInDecimals);
        }

        return _amount * tokenOutReserve / tokenInReserve;
    }

}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_shackAddress","type":"address"},{"internalType":"address","name":"_mintToken","type":"address"},{"internalType":"address","name":"_devaddr","type":"address"},{"internalType":"uint256","name":"_mintPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetDevAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"SetFeeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"mintPerBlock","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accRewardShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_depositToken","type":"address"},{"internalType":"contract IERC20","name":"_earnToken","type":"address"},{"internalType":"uint16","name":"_tokenType","type":"uint16"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_withUpdate","type":"bool"},{"internalType":"uint256[]","name":"_pids","type":"uint256[]"},{"internalType":"uint256[]","name":"_allocPoints","type":"uint256[]"},{"internalType":"contract IERC20[]","name":"_depositTokens","type":"address[]"},{"internalType":"contract IERC20[]","name":"_earnTokens","type":"address[]"},{"internalType":"uint16[]","name":"_tokenTypes","type":"uint16[]"}],"name":"batchAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"},{"internalType":"uint256[]","name":"_allocPoints","type":"uint256[]"},{"internalType":"contract IERC20[]","name":"_depositTokens","type":"address[]"},{"internalType":"contract IERC20[]","name":"_earnTokens","type":"address[]"},{"internalType":"uint16[]","name":"_tokenTypes","type":"uint16[]"}],"name":"batchSet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"canDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"changeDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"devEarnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"name":"earnTokensTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyExitAllShakChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyExitShakChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getCurrentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getDepositTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getToBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingEarn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"pendingEarnInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"pendingRewardInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pids","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"","type":"address"},{"internalType":"contract IERC20","name":"","type":"address"}],"name":"poolExistence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"contract IERC20","name":"depositToken","type":"address"},{"internalType":"contract IERC20","name":"earnToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastUpdateBlock","type":"uint256"},{"internalType":"uint256","name":"lastRewardAmount","type":"uint256"},{"internalType":"uint256","name":"lastEarnAmount","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"accEarnPerShare","type":"uint256"},{"internalType":"uint16","name":"tokenType","type":"uint16"},{"internalType":"bool","name":"added","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_depositToken","type":"address"},{"internalType":"contract IERC20","name":"_earnToken","type":"address"},{"internalType":"uint16","name":"_tokenType","type":"uint16"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setDevEarnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setDevRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devRewardRate","type":"uint256"},{"internalType":"uint256","name":"_devEarnRate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"}],"name":"setSwapToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"setSwapTokenAndRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"shackPoolInfo","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"depositCap","type":"uint256"},{"internalType":"uint256","name":"depositClosed","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"accShare","type":"uint256"},{"internalType":"uint256","name":"apy","type":"uint256"},{"internalType":"uint256","name":"used","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenIn","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"swapTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenRouters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"earnDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600160025560006009556000600a556000600f5534801561002457600080fd5b506040516200498a3803806200498a833981810160405260c081101561004957600080fd5b508051602082015160408301516060840151608085015160a09095015160008054336001600160a01b0319918216178255600180556003805482166001600160a01b0398891617905560078054821696881696909617909555600480548616948716949094179093556005805490941694909116939093179091556006929092556010556148ac908190620000de90396000f3fe60806040526004361061031d5760003560e01c80636cbe0e7f116101ab578063a7e03dcb116100f7578063ddc6326211610095578063ee9b32c51161006f578063ee9b32c514611148578063f35e4a6e1461115d578063f90668a714611187578063f959680b146111e357610338565b8063ddc63262146110d1578063e2bbb158146110fb578063ec5af49b1461111e57610338565b8063d004f0f7116100d1578063d004f0f714610d9a578063d49e77cd14610dd3578063d5d0afe714610de8578063da7fba4c14610e1b57610338565b8063a7e03dcb14610d31578063af304cfd14610d46578063b8bc83ee14610d7057610338565b80638eb70067116101645780639536930b1161013e5780639536930b14610c9b57806398969e8214610cb0578063a544d0da14610ce9578063a6f9dae114610cfe57610338565b80638eb7006714610c0557806393f1a40b14610c1a578063950f922414610c7157610338565b80636cbe0e7f1461087457806388a8c95c146108b95780638aa28550146108ec5780638b8236c3146109015780638da5cb5b14610bc05780638dbb1e3a14610bd557610338565b806341d68b8f1161026a5780635312ea8e11610223578063581f6f26116101fd578063581f6f26146107b75780636396f584146107cc5780636492c01a146107f657806365d934471461084a57610338565b80635312ea8e1461073d57806354fd4d501461076757806357acdbe01461077c57610338565b806341d68b8f1461063f578063441a3e701461067a57806346527640146106aa57806346df2ccb146106bf57806348cd4cb1146106ef57806352a5a33e1461070457610338565b8063167d19ac116102d757806322522293116102b1578063225222931461058e57806331ad6be5146105b85780633f33b71e146105f15780633fc8cef31461062a57610338565b8063167d19ac146104ef57806317caf6f1146105645780632004ffd91461057957610338565b8062c02d211461033d578063081e3eda1461038c5780630ba84cd2146103b35780630fcf41ae146103dd5780631526fe271461041057806315a960a9146104a057610338565b36610338576003546001600160a01b0316331461033657fe5b005b600080fd5b34801561034957600080fd5b506103706004803603602081101561036057600080fd5b50356001600160a01b03166111f8565b604080516001600160a01b039092168252519081900360200190f35b34801561039857600080fd5b506103a1611213565b60408051918252519081900360200190f35b3480156103bf57600080fd5b50610336600480360360208110156103d657600080fd5b5035611219565b3480156103e957600080fd5b506103706004803603602081101561040057600080fd5b50356001600160a01b03166112ac565b34801561041c57600080fd5b5061043a6004803603602081101561043357600080fd5b50356112c7565b604080519b8c526001600160a01b039a8b1660208d0152989099168a89015260608a0196909652608089019490945260a088019290925260c087015260e086015261010085015261ffff1661012084015290151561014083015251908190036101600190f35b3480156104ac57600080fd5b506104db600480360360408110156104c357600080fd5b506001600160a01b0381358116916020013516611335565b604080519115158252519081900360200190f35b3480156104fb57600080fd5b506105196004803603602081101561051257600080fd5b5035611355565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561057057600080fd5b506103a1611436565b34801561058557600080fd5b5061037061143c565b34801561059a57600080fd5b50610336600480360360208110156105b157600080fd5b503561144b565b3480156105c457600080fd5b506103a1600480360360408110156105db57600080fd5b50803590602001356001600160a01b03166114e3565b3480156105fd57600080fd5b506103a16004803603604081101561061457600080fd5b50803590602001356001600160a01b03166116cb565b34801561063657600080fd5b506103706117b5565b34801561064b57600080fd5b506103366004803603604081101561066257600080fd5b506001600160a01b03813581169160200135166117c4565b34801561068657600080fd5b506103366004803603604081101561069d57600080fd5b508035906020013561183f565b3480156106b657600080fd5b50610336611b74565b3480156106cb57600080fd5b50610336600480360360408110156106e257600080fd5b5080359060200135611bae565b3480156106fb57600080fd5b506103a1611c0d565b34801561071057600080fd5b506103a16004803603604081101561072757600080fd5b506001600160a01b038135169060200135611c13565b34801561074957600080fd5b506103366004803603602081101561076057600080fd5b50356120fa565b34801561077357600080fd5b506103a161223b565b34801561078857600080fd5b506103366004803603604081101561079f57600080fd5b506001600160a01b0381358116916020013516612241565b3480156107c357600080fd5b506103706122bc565b3480156107d857600080fd5b506103a1600480360360208110156107ef57600080fd5b50356122cb565b34801561080257600080fd5b50610336600480360360a081101561081957600080fd5b5080359060208101359060408101356001600160a01b03908116916060810135909116906080013561ffff16612482565b34801561085657600080fd5b506103a16004803603602081101561086d57600080fd5b5035612562565b34801561088057600080fd5b506103366004803603606081101561089757600080fd5b506001600160a01b038135811691602081013582169160409091013516612580565b3480156108c557600080fd5b50610336600480360360208110156108dc57600080fd5b50356001600160a01b0316612611565b3480156108f857600080fd5b506103a16126c8565b34801561090d57600080fd5b50610336600480360360c081101561092457600080fd5b813515159190810190604081016020820135600160201b81111561094757600080fd5b82018360208201111561095957600080fd5b803590602001918460208302840111600160201b8311171561097a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109c957600080fd5b8201836020820111156109db57600080fd5b803590602001918460208302840111600160201b831117156109fc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a4b57600080fd5b820183602082011115610a5d57600080fd5b803590602001918460208302840111600160201b83111715610a7e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610acd57600080fd5b820183602082011115610adf57600080fd5b803590602001918460208302840111600160201b83111715610b0057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610b4f57600080fd5b820183602082011115610b6157600080fd5b803590602001918460208302840111600160201b83111715610b8257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506126cd945050505050565b348015610bcc57600080fd5b50610370612814565b348015610be157600080fd5b506103a160048036036040811015610bf857600080fd5b5080359060200135612823565b348015610c1157600080fd5b506103a161284d565b348015610c2657600080fd5b50610c5360048036036040811015610c3d57600080fd5b50803590602001356001600160a01b0316612853565b60408051938452602084019290925282820152519081900360600190f35b348015610c7d57600080fd5b5061033660048036036020811015610c9457600080fd5b503561287f565b348015610ca757600080fd5b506103a16129f8565b348015610cbc57600080fd5b506103a160048036036040811015610cd357600080fd5b50803590602001356001600160a01b03166129fe565b348015610cf557600080fd5b506103a1612a9f565b348015610d0a57600080fd5b5061033660048036036020811015610d2157600080fd5b50356001600160a01b0316612aa5565b348015610d3d57600080fd5b506103a1612ba8565b348015610d5257600080fd5b50610c5360048036036020811015610d6957600080fd5b5035612bae565b348015610d7c57600080fd5b50610c5360048036036020811015610d9357600080fd5b5035612c67565b348015610da657600080fd5b506103a160048036036040811015610dbd57600080fd5b506001600160a01b038135169060200135612df6565b348015610ddf57600080fd5b50610370613141565b348015610df457600080fd5b506103a160048036036020811015610e0b57600080fd5b50356001600160a01b0316613150565b348015610e2757600080fd5b50610336600480360360a0811015610e3e57600080fd5b810190602081018135600160201b811115610e5857600080fd5b820183602082011115610e6a57600080fd5b803590602001918460208302840111600160201b83111715610e8b57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610eda57600080fd5b820183602082011115610eec57600080fd5b803590602001918460208302840111600160201b83111715610f0d57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f5c57600080fd5b820183602082011115610f6e57600080fd5b803590602001918460208302840111600160201b83111715610f8f57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610fde57600080fd5b820183602082011115610ff057600080fd5b803590602001918460208302840111600160201b8311171561101157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561106057600080fd5b82018360208201111561107257600080fd5b803590602001918460208302840111600160201b8311171561109357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613162945050505050565b3480156110dd57600080fd5b50610336600480360360208110156110f457600080fd5b5035613226565b6103366004803603604081101561111157600080fd5b5080359060200135613295565b34801561112a57600080fd5b506103366004803603602081101561114157600080fd5b5035613599565b34801561115457600080fd5b506103a1613631565b34801561116957600080fd5b506103366004803603602081101561118057600080fd5b5035613635565b34801561119357600080fd5b50610336600480360360c08110156111aa57600080fd5b50803515159060208101359060408101359060608101356001600160a01b039081169160808101359091169060a0013561ffff16613687565b3480156111ef57600080fd5b506103a161397c565b6012602052600090815260409020546001600160a01b031681565b600d5490565b6000546001600160a01b03163314611266576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b61126e613982565b600681905560408051828152905133917fe2492e003bbe8afa53088b406f0c1cb5d9e280370fc72a74cf116ffd343c4053919081900360200190a250565b6013602052600090815260409020546001600160a01b031681565b600c60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460099099015497986001600160a01b039788169896909716969495939492939192909161ffff81169060ff62010000909104168b565b601460209081526000928352604080842090915290825290205460ff1681565b60075460009081908190819081908190819081906001600160a01b03161561142b57600754604080516315895f4760e31b8152600481018c905290516001600160a01b039092169163ac4afa389160248082019261010092909190829003018186803b1580156113c457600080fd5b505afa1580156113d8573d6000803e3d6000fd5b505050506040513d6101008110156113ef57600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a5098509650945090925090505b919395975091939597565b600f5481565b6004546001600160a01b031681565b6000546001600160a01b03163314611498576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b600a8111156114de576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706172616d60981b604482015290519081900360640190fd5b600a55565b60006114ed61477d565b506000838152600c602090815260408083208151610160810183528154815260018201546001600160a01b039081168286018190526002840154821683860152600384015460608401526004808501546080850152600585015460a0850152600685015460c0850152600785015460e0850152600885015461010085015260099094015461ffff811661012085015262010000900460ff16151561014084015284516370a0823160e01b815291891693820193909352925190949391926370a08231926024808301939192829003018186803b1580156115cc57600080fd5b505afa1580156115e0573d6000803e3d6000fd5b505050506040513d60208110156115f657600080fd5b50516007549091506001600160a01b0316156116c157600754604080516315895f4760e31b815260048101889052905160009283926001600160a01b039091169163ac4afa389160248082019261010092909190829003018186803b15801561165e57600080fd5b505afa158015611672573d6000803e3d6000fd5b505050506040513d61010081101561168957600080fd5b50602081015160a0909101519092509050808211156116b9576116b2828263ffffffff6139b816565b92506116be565b600092505b50505b9150505b92915050565b6000828152600c60209081526040808320600e83528184206001600160a01b03861685529092528220600882015483611703876122cb565b9050801580159061171e57506007546001600160a01b031615155b1561177057600061172e88612c67565b5090915061176c905061175f8361175384670de0b6b3a764000063ffffffff6139fa16565b9063ffffffff613a5316565b849063ffffffff613a9516565b9250505b60006117a9846002015461179d670de0b6b3a76400006117538789600001546139fa90919063ffffffff16565b9063ffffffff6139b816565b98975050505050505050565b6003546001600160a01b031681565b6000546001600160a01b03163314611811576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260126020526040902080546001600160a01b03191691909216179055565b60026001541415611885576040805162461bcd60e51b815260206004820152601f60248201526000805160206147f0833981519152604482015290519081900360640190fd5b60026001556000828152600c60209081526040808320600e835281842033855290925290912080548311156118f6576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6118ff84613aef565b61190884613d3b565b5061191284613e72565b508215611ae1576007546001600160a01b0316156119975760075460408051630441a3e760e41b8152600481018790526024810186905290516001600160a01b039092169163441a3e709160448082019260009290919082900301818387803b15801561197e57600080fd5b505af1158015611992573d6000803e3d6000fd5b505050505b80546119a9908463ffffffff6139b816565b815560035460018301546001600160a01b0390811691161415611a5e5760035460408051632e1a7d4d60e01b81526004810186905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015611a1357600080fd5b505af1158015611a27573d6000803e3d6000fd5b505060405133925085156108fc02915085906000818181858888f19350505050158015611a58573d6000803e3d6000fd5b50611ae1565b60018201546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b505050506040513d6020811015611ade57600080fd5b50505b60078201548154611b0591670de0b6b3a7640000916117539163ffffffff6139fa16565b600182015560088201548154611b2e91670de0b6b3a7640000916117539163ffffffff6139fa16565b6002820155604080518481529051859133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050600180555050565b600d5460005b81811015611baa57611ba2600d8281548110611b9257fe5b906000526020600020015461287f565b600101611b7a565b5050565b6000546001600160a01b03163314611bfb576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b611c0482613599565b611baa8161144b565b60105481565b6001600160a01b038281166000908152601260205260408120549091161580611c5457506001600160a01b0383811660009081526013602052604090205416155b15611c605750806116c5565b6001600160a01b03808416600090815260126020908152604080832054815163c45a015560e01b815291519394169263c45a015592600480840193919291829003018186803b158015611cb257600080fd5b505afa158015611cc6573d6000803e3d6000fd5b505050506040513d6020811015611cdc57600080fd5b50516001600160a01b03858116600081815260136020908152604080832054815163e6a4390560e01b81526004810195909552851660248501525194955090939285169263e6a43905926044808201939291829003018186803b158015611d4257600080fd5b505afa158015611d56573d6000803e3d6000fd5b505050506040513d6020811015611d6c57600080fd5b505160408051630240bc6b60e21b8152905191925060009182916001600160a01b03851691630902f1ac91600480820192606092909190829003018186803b158015611db757600080fd5b505afa158015611dcb573d6000803e3d6000fd5b505050506040513d6060811015611de157600080fd5b50805160209091015190925090506001600160701b0382161580611e0c57506001600160701b038116155b15611e1e5760009450505050506116c5565b6000826001600160701b031690506000826001600160701b031690506000896001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b50516001600160a01b03808c16600090815260136020908152604080832054815163313ce56760e01b8152915160ff90961696509294929093169263313ce5679260048083019392829003018186803b158015611efb57600080fd5b505afa158015611f0f573d6000803e3d6000fd5b505050506040513d6020811015611f2557600080fd5b505160408051630dfe168160e01b8152905160ff90921692506001600160a01b03808e1692908a1691630dfe1681916004808301926020929190829003018186803b158015611f7357600080fd5b505afa158015611f87573d6000803e3d6000fd5b505050506040513d6020811015611f9d57600080fd5b50516001600160a01b0316146120b5576001600160a01b03808c1660009081526013602090815260409182902054825163313ce56760e01b8152925193169263313ce567926004808201939291829003018186803b158015611ffe57600080fd5b505afa158015612012573d6000803e3d6000fd5b505050506040513d602081101561202857600080fd5b50516040805163313ce56760e01b8152905160ff90921693506001600160a01b038d169163313ce56791600480820192602092909190829003018186803b15801561207257600080fd5b505afa158015612086573d6000803e3d6000fd5b505050506040513d602081101561209c57600080fd5b50516001600160701b0380871695508716935060ff1690505b808211156120cc57808203600a0a830292506120df565b808210156120df57818103600a0a840293505b83838b02816120ea57fe5b049b9a5050505050505050505050565b60026001541415612140576040805162461bcd60e51b815260206004820152601f60248201526000805160206147f0833981519152604482015290519081900360640190fd5b600260018181556000838152600c60209081526040808320600e835281842033808652908452828520805486825581880187905597810186905595820154835163a9059cbb60e01b815260048101929092526024820188905292519196946001600160a01b039093169363a9059cbb9360448084019492938390030190829087803b1580156121ce57600080fd5b505af11580156121e2573d6000803e3d6000fd5b505050506040513d60208110156121f857600080fd5b5050604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a35050600180555050565b60025481565b6000546001600160a01b0316331461228e576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6001600160a01b03918216600090815260136020526040902080546001600160a01b03191691909216179055565b6007546001600160a01b031681565b60006122d561477d565b506000828152600c60209081526040918290208251610160810184528154815260018201546001600160a01b039081169382019390935260028201548316938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078082015460e0850152600882015461010085015260099091015461ffff811661012085015262010000900460ff1615156101408401525416156124055760075460408051632e740b7d60e21b81526004810186905230602482015281516000936001600160a01b03169263b9d02df49260448082019391829003018186803b1580156123cf57600080fd5b505afa1580156123e3573d6000803e3d6000fd5b505050506040513d60408110156123f957600080fd5b5051925061247d915050565b602080820151604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d602081101561247757600080fd5b50519150505b919050565b6000546001600160a01b031633146124cf576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6001600160a01b038084166000908152601460209081526040808320938616835292905220548390839060ff161561254a576040805162461bcd60e51b81526020600482015260196024820152781b9bdb911d5c1b1a58d85d19590e88191d5c1b1a58d85d1959603a1b604482015290519081900360640190fd5b61255960018888888888613687565b50505050505050565b600d818154811061256f57fe5b600091825260209091200154905081565b6000546001600160a01b031633146125cd576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6001600160a01b03928316600090815260136020908152604080832080549587166001600160a01b0319968716179055601290915290208054919093169116179055565b6005546001600160a01b031633148061263457506000546001600160a01b031633145b61267c576040805162461bcd60e51b815260206004820152601460248201527331b430b733b2a232bb1d102327a92124a22222a760611b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f618c54559e94f1499a808aad71ee8729f8e74e8c48e979616328ce493a1a52e790600090a350565b600181565b6000546001600160a01b0316331461271a576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b8351855114801561272c575082518451145b8015612739575081518351145b61277b576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b604482015290519081900360640190fd5b60005b84518110156127fd576127f5600087838151811061279857fe5b60200260200101518784815181106127ac57fe5b60200260200101518785815181106127c057fe5b60200260200101518786815181106127d457fe5b60200260200101518787815181106127e857fe5b6020026020010151613687565b60010161277e565b50851561280c5761280c613982565b505050505050565b6000546001600160a01b031681565b6000612846600161283a848663ffffffff6139b816565b9063ffffffff6139fa16565b9392505050565b600a5481565b600e60209081526000928352604080842090915290825290208054600182015460029092015490919083565b6000546001600160a01b031633146128cc576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6007546001600160a01b03166129135760405162461bcd60e51b81526004018080602001828103825260268152602001806148516026913960400191505060405180910390fd5b60075460408051632e740b7d60e21b81526004810184905230602482015281516000936001600160a01b03169263b9d02df49260448082019391829003018186803b15801561296157600080fd5b505afa158015612975573d6000803e3d6000fd5b505050506040513d604081101561298b57600080fd5b505160075460408051630441a3e760e41b8152600481018690526024810184905290519293506001600160a01b039091169163441a3e709160448082019260009290919082900301818387803b1580156129e457600080fd5b505af115801561280c573d6000803e3d6000fd5b60115481565b6000828152600c60209081526040808320600e83528184206001600160a01b03861685529092528220600782015483612a36876122cb565b90508015612a72576000612a4988612bae565b50909150612a6e905061175f8361175384670de0b6b3a764000063ffffffff6139fa16565b9250505b60006117a9846001015461179d670de0b6b3a76400006117538789600001546139fa90919063ffffffff16565b60095481565b6000546001600160a01b03163314612af2576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6001600160a01b038116612b4d576040805162461bcd60e51b815260206004820152601860248201527f4f776e61626c653a20494e56414c49445f414444524553530000000000000000604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b6000818152600c60205260408120600481015482918291612bcd613631565b118015612bdc57506000600f54115b15612c54576000612bf88260040154612bf3613631565b612823565b90506000612c1f600f54611753856003015461283a600654876139fa90919063ffffffff16565b90506000806009541115612c4457600954612c4190839063ffffffff613a5316565b90505b9095509350439250612c60915050565b50600092508291504390505b9193909250565b6000806000612c7461477d565b506000848152600c60209081526040918290208251610160810184528154815260018201546001600160a01b039081169382019390935260028201548316938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c084015260078082015460e0850152600882015461010085015260099091015461ffff811661012085015262010000900460ff161515610140840152541615612c5457600754604080516338a8877960e11b81526004810188905230602482015290516000926001600160a01b0316916371510ef2916044808301926020929190829003018186803b158015612d7257600080fd5b505afa158015612d86573d6000803e3d6000fd5b505050506040513d6020811015612d9c57600080fd5b50516040830151909150612db09082611c13565b9050600080600a541115612de757600a54612dd290839063ffffffff613a5316565b9050612de4828263ffffffff6139b816565b91505b9094509250439150612c609050565b600081612e05575060006116c5565b6001600160a01b0380841660009081526013602090815260408083205460129092529091205490821691612e3c9186911685614014565b60408051600280825260608083018452926020830190803683370190505090508481600081518110612e6a57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508181600181518110612e9857fe5b6001600160a01b03928316602091820292909201810191909152604080516370a0823160e01b815230600482015290516000938616926370a082319260248082019391829003018186803b158015612eef57600080fd5b505afa158015612f03573d6000803e3d6000fd5b505050506040513d6020811015612f1957600080fd5b50516001600160a01b0380881660009081526012602090815260408083205490516338ed173960e01b8152600481018b8152600160248301819052306064840181905261025842016084850181905260a0604486019081528c5160a48701528c519a9b5095909816986338ed1739988f9893978d97939691959460c490920192888201929102908190849084905b83811015612fbf578181015183820152602001612fa7565b505050509050019650505050505050600060405180830381600087803b158015612fe857600080fd5b505af1158015612ffc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561302557600080fd5b8101908080516040519392919084600160201b82111561304457600080fd5b90830190602082018581111561305957600080fd5b82518660208202830111600160201b8211171561307557600080fd5b82525081516020918201928201910280838360005b838110156130a257818101518382015260200161308a565b505050509190910160408181526370a0823160e01b825230600483015251600096506001600160a01b038a1695506370a08231945060248083019450602093509091829003018186803b1580156130f857600080fd5b505afa15801561310c573d6000803e3d6000fd5b505050506040513d602081101561312257600080fd5b50519050613136818363ffffffff6139b816565b979650505050505050565b6005546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b031633146131af576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b835185511480156131c1575082518451145b80156131ce575081518351145b613210576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420706172616d7360901b604482015290519081900360640190fd5b61321f600186868686866126cd565b5050505050565b6002600154141561326c576040805162461bcd60e51b815260206004820152601f60248201526000805160206147f0833981519152604482015290519081900360640190fd5b600260015561327a81613aef565b61328381613d3b565b5061328d81613e72565b505060018055565b600260015414156132db576040805162461bcd60e51b815260206004820152601f60248201526000805160206147f0833981519152604482015290519081900360640190fd5b60026001556000828152600c60209081526040808320600e835281842033855290925290912061330a84613aef565b61331384613d3b565b5061331d84613e72565b5060035460018301546001600160a01b039081169116141561333d573492505b82156135065760035460018301546001600160a01b03908116911614156133cc57600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133ae57600080fd5b505af11580156133c2573d6000803e3d6000fd5b5050505050613455565b6001820154604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561342857600080fd5b505af115801561343c573d6000803e3d6000fd5b505050506040513d602081101561345257600080fd5b50505b8054613467908463ffffffff613a9516565b81556007546001600160a01b031615613506576001820154600754613499916001600160a01b03908116911685614014565b60075460408051631c57762b60e31b8152600481018790526024810186905290516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b1580156134ed57600080fd5b505af1158015613501573d6000803e3d6000fd5b505050505b6007820154815461352a91670de0b6b3a7640000916117539163ffffffff6139fa16565b60018201556008820154815461355391670de0b6b3a7640000916117539163ffffffff6139fa16565b6002820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050600180555050565b6000546001600160a01b031633146135e6576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b600a81111561362c576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420706172616d60981b604482015290519081900360640190fd5b600955565b4390565b6000546001600160a01b03163314613682576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b601055565b6000546001600160a01b031633146136d4576040805162461bcd60e51b81526020600482015260126024820152600080516020614810833981519152604482015290519081900360640190fd5b6001600160a01b038084166000908152601460209081526040808320938616835292905220548390839060ff161561374f576040805162461bcd60e51b81526020600482015260196024820152781b9bdb911d5c1b1a58d85d19590e88191d5c1b1a58d85d1959603a1b604482015290519081900360640190fd5b871561375d5761375d613982565b6000601054431161377057601054613772565b435b600f54909150613788908863ffffffff613a9516565b600f556001600160a01b0380871660009081526014602090815260408083209389168352928152828220805460ff191660011790558a8252600c9052206009015462010000900460ff1661380c57600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5018890555b604051806101600160405280898152602001876001600160a01b03168152602001866001600160a01b03168152602001888152602001828152602001600081526020016000815260200160008152602001600081526020018561ffff16815260200160011515815250600c60008a81526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e0820151816007015561010082015181600801556101208201518160090160006101000a81548161ffff021916908361ffff1602179055506101408201518160090160026101000a81548160ff021916908315150217905550905050505050505050505050565b60085481565b600d5460005b81811015611baa576139b0600d82815481106139a057fe5b9060005260206000200154613aef565b600101613988565b600061284683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061419a565b600082613a09575060006116c5565b82820282848281613a1657fe5b04146128465760405162461bcd60e51b81526004018080602001828103825260218152602001806148306021913960400191505060405180910390fd5b600061284683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614231565b600082820183811015612846576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818152600c6020526040812090613b06613631565b905081600401548111613b1a575050613d38565b6000613b25846122cb565b9050801580613b3657506003830154155b15613b475750600490910155613d38565b600080613b5386612bae565b506005870182905560048054604080516340c10f1960e01b8152309381019390935260248301859052519395509193506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b158015613bb757600080fd5b505af1158015613bcb573d6000803e3d6000fd5b505050506040513d6020811015613be157600080fd5b5050600854613bf6908363ffffffff613a9516565b6008558015613c9b5760048054600554604080516340c10f1960e01b81526001600160a01b039283169481019490945260248401859052519116916340c10f199160448083019260209291908290030181600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b505050506040513d6020811015613c8257600080fd5b5050600854613c97908263ffffffff613a9516565b6008555b613ccb613cba8461175385670de0b6b3a764000063ffffffff6139fa16565b60078701549063ffffffff613a9516565b6007860155600080613cdc88614296565b509092509050613cf2828263ffffffff613a9516565b6006880155613d27613d168661175385670de0b6b3a764000063ffffffff6139fa16565b60088901549063ffffffff613a9516565b600888015550505050600490920155505b50565b6000613d4561477d565b506000828152600c60209081526040808320815161016081018352815481526001808301546001600160a01b0390811683870152600284015416828501526003830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e08301908152600884015461010084015260099093015461ffff811661012084015262010000900460ff161515610140830152878652600e85528386203387529094529184209283015490518354929492613e1f929161179d91670de0b6b3a76400009161175391906139fa565b600454909150613e39906001600160a01b0316338361464e565b9350613e62670de0b6b3a76400006117538560e0015185600001546139fa90919063ffffffff16565b6001909201919091555050919050565b6007546000906001600160a01b0316613e8d5750600061247d565b613e9561477d565b506000828152600c602090815260408083208151610160810183528154815260018201546001600160a01b0390811682860152600280840154909116828501526003830154606083015260048301546080830152600583015460a0830152600683015460c0830152600783015460e08301526008830154610100830190815260099093015461ffff811661012084015262010000900460ff161515610140830152878652600e85528386203387529094529184209283015490518354929492613f71929161179d91670de0b6b3a76400009161175391906139fa565b6040808501516001600160a01b039081166000908152601260205291909120549192501615613fcd576040808401516001600160a01b03908116600090815260136020529190912054613fc69116338361464e565b9350613fdf565b613fdc8360400151338361464e565b93505b610100830151825461400491670de0b6b3a7640000916117539163ffffffff6139fa16565b6002909201919091555050919050565b6000836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561404f57600080fd5b505afa158015614063573d6000803e3d6000fd5b505050506040513d602081101561407957600080fd5b50519050818110156140885750805b60408051636eb1769f60e11b81523060048201526001600160a01b0385811660248301529151849287169163dd62ed3e916044808301926020929190829003018186803b1580156140d857600080fd5b505afa1580156140ec573d6000803e3d6000fd5b505050506040513d602081101561410257600080fd5b5051101561419457836001600160a01b031663095ea7b384836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561416a57600080fd5b505af115801561417e573d6000803e3d6000fd5b505050506040513d602081101561280c57600080fd5b50505050565b600081848411156142295760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141ee5781810151838201526020016141d6565b50505050905090810190601f16801561421b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836142805760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156141ee5781810151838201526020016141d6565b50600083858161428c57fe5b0495945050505050565b600754600090819081906001600160a01b03166142bb57506000915081905043612c60565b6000806142c786612c67565b5090925090506142dd828263ffffffff613a9516565b6142f3575060009350839250439150612c609050565b6142fb61477d565b506000868152600c602090815260408083208151610160810183528154815260018201546001600160a01b0390811682860152600283015416818401819052600383015460608301526004808401546080840152600584015460a0840152600684015460c0840152600784015460e0840152600884015461010084015260099093015461ffff811661012084015262010000900460ff16151561014083015283516370a0823160e01b8152309381019390935292519094936370a082319260248082019391829003018186803b1580156143d457600080fd5b505afa1580156143e8573d6000803e3d6000fd5b505050506040513d60208110156143fe57600080fd5b505160075460408051631c57762b60e31b8152600481018c905260006024820181905291519394506001600160a01b039092169263e2bbb15892604480820193929182900301818387803b15801561445557600080fd5b505af1158015614469573d6000803e3d6000fd5b50505050600082604001516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156144c957600080fd5b505afa1580156144dd573d6000803e3d6000fd5b505050506040513d60208110156144f357600080fd5b50519050614507818363ffffffff6139b816565b6040808501516001600160a01b0390811660009081526012602052919091205491965016156145415761453e836040015186612df6565b94505b6040808401516001600160a01b03166000908152600b602052205461456c908663ffffffff613a9516565b6040808501516001600160a01b03166000908152600b60205290812091909155600a549094501561463d57600a546145ab90869063ffffffff613a5316565b6040808501516001600160a01b03908116600090815260126020529190912054919550161561460c576040808401516001600160a01b039081166000908152601360205291909120546005546146069291821691168661464e565b5061462a565b604083015160055461462891906001600160a01b03168661464e565b505b61463a858563ffffffff6139b816565b94505b509297919650439550909350505050565b604080516370a0823160e01b8152306004820152905160009182916001600160a01b038716916370a08231916024808301926020929190829003018186803b15801561469957600080fd5b505afa1580156146ad573d6000803e3d6000fd5b505050506040513d60208110156146c357600080fd5b5051905082158015906146d65750600081115b1561477457808311156146e7578092505b846001600160a01b031663a9059cbb85856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561474757600080fd5b505af115801561475b573d6000803e3d6000fd5b505050506040513d602081101561477157600080fd5b50505b50909392505050565b6040518061016001604052806000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600061ffff168152602001600015158152509056fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a20464f5242494444454e0000000000000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77656d657267656e6379457869745368616b436865663a20496e76616c69642041646472657373a2646970667358221220f0bc5f3fc1c7c3fdf4617761fe363269c7eb5cb87d47e94638a1abdee05680f764736f6c63430006060033000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000007033a512639119c759a51b250bfa461ae100894b000000000000000000000000afe24e29da7e9b3e8a25c9478376b6ad6ad788dd000000000000000000000000afe24e29da7e9b3e8a25c9478376b6ad6ad788dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

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

000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c0000000000000000000000007033a512639119c759a51b250bfa461ae100894b000000000000000000000000afe24e29da7e9b3e8a25c9478376b6ad6ad788dd000000000000000000000000afe24e29da7e9b3e8a25c9478376b6ad6ad788dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c
Arg [1] : 0000000000000000000000007033a512639119c759a51b250bfa461ae100894b
Arg [2] : 000000000000000000000000afe24e29da7e9b3e8a25c9478376b6ad6ad788dd
Arg [3] : 000000000000000000000000afe24e29da7e9b3e8a25c9478376b6ad6ad788dd
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed ByteCode Sourcemap

12982:24019:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:4;;-1:-1:-1;;;;;17526:4:0;17512:10;:18;17505:26;;;;12982:24019;;12:1:-1;9;2:12;16107:48:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16107:48:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16107:48:0;-1:-1:-1;;;;;16107:48:0;;:::i;:::-;;;;-1:-1:-1;;;;;16107:48:0;;;;;;;;;;;;;;17108:91;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17108:91:0;;;:::i;:::-;;;;;;;;;;;;;;;;33757:204;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33757:204:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33757:204:0;;:::i;16162:46::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16162:46:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16162:46:0;-1:-1:-1;;;;;16162:46:0;;:::i;15654:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15654:44:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15654:44:0;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15654:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17207:63;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17207:63:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;17207:63:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;23858:794;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23858:794:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23858:794:0;;:::i;:::-;;;;-1:-1:-1;;;;;23858:794:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15941:34;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15941:34:0;;;:::i;15135:24::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15135:24:0;;;:::i;33186:158::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33186:158:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33186:158:0;;:::i;23313:537::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23313:537:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23313:537:0;;;;;;-1:-1:-1;;;;;23313:537:0;;:::i;22644:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22644:661:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22644:661:0;;;;;;-1:-1:-1;;;;;22644:661:0;;:::i;15082:19::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15082:19:0;;;:::i;33969:120::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33969:120:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;33969:120:0;;;;;;;;;;:::i;27430:1048::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27430:1048:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27430:1048:0;;;;;;;:::i;32538:194::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32538:194:0;;;:::i;33352:170::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33352:170:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33352:170:0;;;;;;;:::i;16037:25::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16037:25:0;;;:::i;35525:1471::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35525:1471:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;35525:1471:0;;;;;;;;:::i;28549:427::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28549:427:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28549:427:0;;:::i;13074:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13074:26:0;;;:::i;34097:125::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34097:125:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34097:125:0;;;;;;;;;;:::i;15424:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15424:27:0;;;:::i;20270:361::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20270:361:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20270:361:0;;:::i;18620:252::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18620:252:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18620:252:0;;;;;;;;;;;;-1:-1:-1;;;;;18620:252:0;;;;;;;;;;;;;;;;;;:::i;15705:21::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15705:21:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15705:21:0;;:::i;34230:192::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34230:192:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34230:192:0;;;;;;;;;;;;;;;;;;;:::i;32788:220::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32788:220:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32788:220:0;-1:-1:-1;;;;;32788:220:0;;:::i;15346:44::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15346:44:0;;;:::i;18880:613::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18880:613:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;18880:613:0;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;18880:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18880:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18880:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18880:613:0;;;;;;;;-1:-1:-1;18880:613:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;18880:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18880:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18880:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18880:613:0;;;;;;;;-1:-1:-1;18880:613:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;18880:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18880:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18880:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18880:613:0;;;;;;;;-1:-1:-1;18880:613:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;18880:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18880:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18880:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18880:613:0;;;;;;;;-1:-1:-1;18880:613:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;18880:613:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;18880:613:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;18880:613:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18880:613:0;;-1:-1:-1;18880:613:0;;-1:-1:-1;;;;;18880:613:0:i;6696:20::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6696:20:0;;;:::i;20021:143::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20021:143:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20021:143:0;;;;;;;:::i;15532:30::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15532:30:0;;;:::i;15782:64::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15782:64:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15782:64:0;;;;;;-1:-1:-1;;;;;15782:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;32232:298;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32232:298:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32232:298:0;;:::i;16069:29::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16069:29:0;;;:::i;21987:649::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21987:649:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21987:649:0;;;;;;-1:-1:-1;;;;;21987:649:0;;:::i;15493:32::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15493:32:0;;;:::i;6983:210::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;6983:210:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6983:210:0;-1:-1:-1;;;;;6983:210:0;;:::i;15260:27::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15260:27:0;;;:::i;20639:649::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20639:649:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20639:649:0;;:::i;21296:620::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21296:620:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21296:620:0;;:::i;34816:701::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34816:701:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;34816:701:0;;;;;;;;:::i;15187:22::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15187:22:0;;;:::i;15569:49::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15569:49:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15569:49:0;-1:-1:-1;;;;;15569:49:0;;:::i;19501:444::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19501:444:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;19501:444:0;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;19501:444:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19501:444:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19501:444:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19501:444:0;;;;;;;;-1:-1:-1;19501:444:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;19501:444:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19501:444:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19501:444:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19501:444:0;;;;;;;;-1:-1:-1;19501:444:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;19501:444:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19501:444:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19501:444:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19501:444:0;;;;;;;;-1:-1:-1;19501:444:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;19501:444:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19501:444:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19501:444:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19501:444:0;;;;;;;;-1:-1:-1;19501:444:0;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;19501:444:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;19501:444:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19501:444:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19501:444:0;;-1:-1:-1;19501:444:0;;-1:-1:-1;;;;;19501:444:0:i;31556:154::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31556:154:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31556:154:0;;:::i;26245:1133::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26245:1133:0;;;;;;;:::i;33016:162::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33016:162:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33016:162:0;;:::i;20172:90::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20172:90:0;;;:::i;33530:94::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33530:94:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33530:94:0;;:::i;17614:998::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17614:998:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;17614:998:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17614:998:0;;;;;;;;;;;;;;;;;;:::i;15460:26::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15460:26:0;;;:::i;16107:48::-;;;;;;;;;;;;-1:-1:-1;;;;;16107:48:0;;:::o;17108:91::-;17180:4;:11;17108:91;:::o;33757:204::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;33836:17:::1;:15;:17::i;:::-;33864:12;:28:::0;;;33908:45:::1;::::0;;;;;;;33927:10:::1;::::0;33908:45:::1;::::0;;;;;::::1;::::0;;::::1;33757:204:::0;:::o;16162:46::-;;;;;;;;;;;;-1:-1:-1;;;;;16162:46:0;;:::o;15654:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15654:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17207:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23858:794::-;24460:12;;23928:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24460:12:0;:26;24457:188;;24608:12;;24597:36;;;-1:-1:-1;;;24597:36:0;;;;;;;;;;-1:-1:-1;;;;;24608:12:0;;;;24597:30;;:36;;;;;24608:12;;24597:36;;;;;;;;24608:12;24597:36;;;2:2:-1;;;;27:1;24;17:12;2:2;24597:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24597:36:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24597:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24597:36:0;;-1:-1:-1;24597:36:0;;-1:-1:-1;24597:36:0;-1:-1:-1;24597:36:0;-1:-1:-1;24597:36:0;-1:-1:-1;24597:36:0;;-1:-1:-1;24597:36:0;-1:-1:-1;24457:188:0;23858:794;;;;;;;;;:::o;15941:34::-;;;;:::o;15135:24::-;;;-1:-1:-1;;;;;15135:24:0;;:::o;33186:158::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;33285:2:::1;33276:6;:11;;33254:51;;;::::0;;-1:-1:-1;;;33254:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33254:51:0;;;;;;;;;;;;;::::1;;33316:11;:20:::0;33186:158::o;23313:537::-;23385:7;23405:20;;:::i;:::-;-1:-1:-1;23428:14:0;;;;:8;:14;;;;;;;;23405:37;;;;;;;;;;;;;;;-1:-1:-1;;;;;23405:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23470:34;;-1:-1:-1;;;23470:34:0;;;;;;;;;;;;;;23405:37;;23428:14;23405:37;;23470:27;;:34;;;;;23428:14;;23470:34;;;;;23405:37;23470:34;;;2:2:-1;;;;27:1;24;17:12;2:2;23470:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23470:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23470:34:0;23518:12;;23470:34;;-1:-1:-1;;;;;;23518:12:0;:26;23515:304;;23623:12;;23612:36;;;-1:-1:-1;;;23612:36:0;;;;;;;;;;23563:18;;;;-1:-1:-1;;;;;23623:12:0;;;;23612:30;;:36;;;;;23623:12;;23612:36;;;;;;;;23623:12;23612:36;;;2:2:-1;;;;27:1;24;17:12;2:2;23612:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23612:36:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23612:36:0;;;;;;;;;;;-1:-1:-1;23612:36:0;-1:-1:-1;23666:21:0;;;23663:145;;;23717:24;:10;23732:8;23717:24;:14;:24;:::i;:::-;23708:33;;23663:145;;;23791:1;23782:10;;23663:145;23515:304;;;23836:6;-1:-1:-1;;23313:537:0;;;;;:::o;22644:661::-;22717:7;22761:14;;;:8;:14;;;;;;;;22810:8;:14;;;;;-1:-1:-1;;;;;22810:21:0;;;;;;;;;22868:20;;;;22717:7;22928:27;22770:4;22928:21;:27::i;:::-;22899:56;-1:-1:-1;22970:23:0;;;;;:53;;-1:-1:-1;22997:12:0;;-1:-1:-1;;;;;22997:12:0;:26;;22970:53;22966:219;;;23041:12;23060:21;23076:4;23060:15;:21::i;:::-;-1:-1:-1;23040:41:0;;-1:-1:-1;23114:59:0;;-1:-1:-1;23134:38:0;23153:18;23134:14;23040:41;23143:4;23134:14;:8;:14;:::i;:::-;:18;:38;:18;:38;:::i;:::-;23114:15;;:59;:19;:59;:::i;:::-;23096:77;;22966:219;;23195:14;23212:61;23259:4;:13;;;23212:42;23249:4;23212:32;23228:15;23212:4;:11;;;:15;;:32;;;;:::i;:42::-;:46;:61;:46;:61;:::i;:::-;23195:78;22644:661;-1:-1:-1;;;;;;;;22644:661:0:o;15082:19::-;;;-1:-1:-1;;;;;15082:19:0;;:::o;33969:120::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34051:20:0;;::::1;;::::0;;;:12:::1;:20;::::0;;;;:30;;-1:-1:-1;;;;;;34051:30:0::1;::::0;;;::::1;;::::0;;33969:120::o;27430:1048::-;8956:1;9562:7;;:19;;9554:63;;;;;-1:-1:-1;;;9554:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9554:63:0;;;;;;;;;;;;;;;8956:1;9695:7;:18;27510:21:::1;27534:14:::0;;;:8:::1;:14;::::0;;;;;;;27583:8:::1;:14:::0;;;;;27598:10:::1;27583:26:::0;;;;;;;;27628:11;;:22;-1:-1:-1;27628:22:0::1;27620:53;;;::::0;;-1:-1:-1;;;27620:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27620:53:0;;;;;;;;;;;;;::::1;;27684:16;27695:4;27684:10;:16::i;:::-;27711:23;27729:4;27711:17;:23::i;:::-;;27745;27763:4;27745:17;:23::i;:::-;-1:-1:-1::0;27783:11:0;;27779:489:::1;;27814:12;::::0;-1:-1:-1;;;;;27814:12:0::1;:26:::0;27811:114:::1;;27872:12;::::0;27861:48:::1;::::0;;-1:-1:-1;;;27861:48:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;27872:12:0;;::::1;::::0;27861:33:::1;::::0;:48;;;;;27872:12:::1;::::0;27861:48;;;;;;;;27872:12;;27861:48;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27861:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27861:48:0;;;;27811:114;27953:11:::0;;:24:::1;::::0;27969:7;27953:24:::1;:15;:24;:::i;:::-;27939:38:::0;;28025:4:::1;::::0;;28003:17;::::1;::::0;-1:-1:-1;;;;;28003:17:0;;::::1;28025:4:::0;::::1;27995:34;27992:265;;;28056:4;::::0;28050:29:::1;::::0;;-1:-1:-1;;;28050:29:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;28056:4:0;;::::1;::::0;28050:20:::1;::::0;:29;;;;;28056:4:::1;::::0;28050:29;;;;;;;;28056:4;;28050:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28050:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;28098:46:0::1;::::0;28114:10:::1;::::0;-1:-1:-1;28098:46:0;::::1;;;::::0;-1:-1:-1;28136:7:0;;28098:46:::1;::::0;;;28136:7;28114:10;28098:46;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28098:46:0;27992:265;;;28185:17;::::0;::::1;::::0;:56:::1;::::0;;-1:-1:-1;;;28185:56:0;;28220:10:::1;28185:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;28185:17:0;;::::1;::::0;:26:::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;:17:::1;::::0;:56;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28185:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28185:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;27992:265:0::1;28312:22;::::0;::::1;::::0;28296:11;;:49:::1;::::0;28340:4:::1;::::0;28296:39:::1;::::0;::::1;:15;:39;:::i;:49::-;28278:15;::::0;::::1;:67:::0;28388:20:::1;::::0;::::1;::::0;28372:11;;:47:::1;::::0;28414:4:::1;::::0;28372:37:::1;::::0;::::1;:15;:37;:::i;:47::-;28356:13;::::0;::::1;:63:::0;28435:35:::1;::::0;;;;;;;28456:4;;28444:10:::1;::::0;28435:35:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;8912:1:0;9874:22;;-1:-1:-1;;27430:1048:0:o;32538:194::-;32609:4;:11;32592:14;32631:94;32655:6;32651:1;:10;32631:94;;;32683:30;32705:4;32710:1;32705:7;;;;;;;;;;;;;;;;32683:21;:30::i;:::-;32663:3;;32631:94;;;;32538:194;:::o;33352:170::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;33443:32:::1;33460:14;33443:16;:32::i;:::-;33486:28;33501:12;33486:14;:28::i;16037:25::-:0;;;;:::o;35525:1471::-;-1:-1:-1;;;;;35628:22:0;;;35605:7;35628:22;;;:12;:22;;;;;;35605:7;;35628:22;:36;;:74;;-1:-1:-1;;;;;;35668:20:0;;;35700:1;35668:20;;;:10;:20;;;;;;;:34;35628:74;35625:120;;;-1:-1:-1;35726:7:0;35719:14;;35625:120;-1:-1:-1;;;;;35785:22:0;;;35755:15;35785:22;;;:12;:22;;;;;;;;;35773:45;;-1:-1:-1;;;35773:45:0;;;;35755:15;;35785:22;;35773:43;;:45;;;;;35785:22;;35773:45;;;;;;35785:22;35773:45;;;2:2:-1;;;;27:1;24;17:12;2:2;35773:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35773:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35773:45:0;-1:-1:-1;;;;;35884:20:0;;;35829:12;35884:20;;;:10;35773:45;35884:20;;;;;;;;35844:61;;-1:-1:-1;;;35844:61:0;;;;;;;;;35884:20;;35844:61;;;;;35773:45;;-1:-1:-1;35829:12:0;;35844:29;;;;;;:61;;;;;35773:45;35844:61;;;;;;:29;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;35844:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35844:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35844:61:0;35957:29;;;-1:-1:-1;;;35957:29:0;;;;35844:61;;-1:-1:-1;35917:16:0;;;;-1:-1:-1;;;;;35957:27:0;;;;;:29;;;;;;;;;;;;;;;:27;:29;;;2:2:-1;;;;27:1;24;17:12;2:2;35957:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35957:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35957:29:0;;;;;;;;;-1:-1:-1;35957:29:0;-1:-1:-1;;;;;;36000:13:0;;;;:29;;-1:-1:-1;;;;;;36017:12:0;;;36000:29;35997:69;;;36053:1;36046:8;;;;;;;;35997:69;36076:22;36109:8;-1:-1:-1;;;;;36101:17:0;36076:42;;36129:23;36163:8;-1:-1:-1;;;;;36155:17:0;36129:43;;36183:23;36224:8;-1:-1:-1;;;;;36217:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36217:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36217:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36217:27:0;-1:-1:-1;;;;;36298:20:0;;;36256:24;36298:20;;;:10;36217:27;36298:20;;;;;;;;36291:39;;-1:-1:-1;;;36291:39:0;;;;36209:36;;;;;-1:-1:-1;36256:24:0;;36298:20;;;;;36291:37;;:39;;;;;36217:27;36291:39;;;;;36298:20;36291:39;;;2:2:-1;;;;27:1;24;17:12;2:2;36291:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36291:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36291:39:0;36345:24;;;-1:-1:-1;;;36345:24:0;;;;36283:48;;;;;-1:-1:-1;;;;;;36345:36:0;;;;:22;;;;;;:24;;;;;36291:39;;36345:24;;;;;;;:22;:24;;;2:2:-1;;;;27:1;24;17:12;2:2;36345:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36345:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36345:24:0;-1:-1:-1;;;;;36345:36:0;;36342:285;;-1:-1:-1;;;;;36423:20:0;;;;;;;:10;:20;;;;;;;;;;36416:39;;-1:-1:-1;;;36416:39:0;;;;36423:20;;;36416:37;;:39;;;;;36423:20;36416:39;;;;;;36423:20;36416:39;;;2:2:-1;;;;27:1;24;17:12;2:2;36416:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36416:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36416:39:0;36489:27;;;-1:-1:-1;;;36489:27:0;;;;36398:57;;;;;-1:-1:-1;;;;;;36489:25:0;;;;;:27;;;;;36416:39;;36489:27;;;;;;;;:25;:27;;;2:2:-1;;;;27:1;24;17:12;2:2;36489:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36489:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36489:27:0;-1:-1:-1;;;;;36548:17:0;;;;-1:-1:-1;36598:17:0;;;-1:-1:-1;36470:46:0;;;-1:-1:-1;36342:285:0;36658:16;36640:15;:34;36637:290;;;36751:16;36733:15;:34;36727:2;:41;36709:15;:59;36691:77;;36637:290;;;36807:16;36789:15;:34;36786:141;;;36899:15;36880:16;:34;36874:2;:41;36857:14;:58;36840:75;;36786:141;36974:14;36956:15;36946:7;:25;:42;;;;;;;35525:1471;-1:-1:-1;;;;;;;;;;;35525:1471:0:o;28549:427::-;8956:1;9562:7;;:19;;9554:63;;;;;-1:-1:-1;;;9554:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9554:63:0;;;;;;;;;;;;;;;8956:1;9695:7;:18;;;28621:21:::1;28645:14:::0;;;:8:::1;:14;::::0;;;;;;;28694:8:::1;:14:::0;;;;;28709:10:::1;28694:26:::0;;;;;;;;;28748:11;;28770:15;;;28796;;::::1;:19:::0;;;28826:13;;::::1;:17:::0;;;28854;;::::1;::::0;:55;;-1:-1:-1;;;28854:55:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;28645:14;;28748:11;-1:-1:-1;;;;;28854:17:0;;::::1;::::0;:26:::1;::::0;:55;;;;;28645:14;;28854:55;;;;;;;:17;:55;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;28854:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28854:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;28925:43:0::1;::::0;;;;;;;28955:4;;28943:10:::1;::::0;28925:43:::1;::::0;;;;28854:55:::1;28925:43:::0;;::::1;-1:-1:-1::0;;8912:1:0;9874:22;;-1:-1:-1;;28549:427:0:o;13074:26::-;;;;:::o;34097:125::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34184:18:0;;::::1;;::::0;;;:10:::1;:18;::::0;;;;:30;;-1:-1:-1;;;;;;34184:30:0::1;::::0;;;::::1;;::::0;;34097:125::o;15424:27::-;;;-1:-1:-1;;;;;15424:27:0;;:::o;20270:361::-;20336:7;20356:20;;:::i;:::-;-1:-1:-1;20379:14:0;;;;:8;:14;;;;;;;;;20356:37;;;;;;;;;;;;;;;-1:-1:-1;;;;;20356:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20407:12;;:26;20404:160;;20483:12;;20472:51;;;-1:-1:-1;;;20472:51:0;;;;;;;;20517:4;20472:51;;;;;;20451:15;;-1:-1:-1;;;;;20483:12:0;;20472:30;;:51;;;;;;;;;;;20483:12;20472:51;;;2:2:-1;;;;27:1;24;17:12;2:2;20472:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20472:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20472:51:0;;-1:-1:-1;20538:14:0;;-1:-1:-1;;20538:14:0;20404:160;20581:17;;;;;:42;;;-1:-1:-1;;;20581:42:0;;20617:4;20581:42;;;;;;-1:-1:-1;;;;;20581:27:0;;;;;;:42;;;;;;;;;;:27;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;20581:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20581:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20581:42:0;;-1:-1:-1;;20270:361:0;;;;:::o;18620:252::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17360:28:0;;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;;:40;;::::1;::::0;;;;;;;18759:13;;18774:10;;17360:40:::1;;:49;17352:87;;;::::0;;-1:-1:-1;;;17352:87:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17352:87:0;;;;;;;;;;;;;::::1;;18797:67:::2;18801:4;18807;18813:11;18826:13;18841:10;18853;18797:3;:67::i;:::-;6966:1:::1;;18620:252:::0;;;;;:::o;15705:21::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15705:21:0;:::o;34230:192::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34343:18:0;;::::1;;::::0;;;:10:::1;:18;::::0;;;;;;;:30;;;;::::1;-1:-1:-1::0;;;;;;34343:30:0;;::::1;;::::0;;34384:12:::1;:20:::0;;;;;:30;;;;;::::1;::::0;::::1;;::::0;;34230:192::o;32788:220::-;32865:7;;-1:-1:-1;;;;;32865:7:0;32851:10;:21;;:44;;-1:-1:-1;32890:5:0;;-1:-1:-1;;;;;32890:5:0;32876:10;:19;32851:44;32843:77;;;;;-1:-1:-1;;;32843:77:0;;;;;;;;;;;;-1:-1:-1;;;32843:77:0;;;;;;;;;;;;;;;32931:7;:18;;-1:-1:-1;;;;;;32931:18:0;-1:-1:-1;;;;;32931:18:0;;;;;;;;32965:35;;32979:10;;32965:35;;-1:-1:-1;;32965:35:0;32788:220;:::o;15346:44::-;15389:1;15346:44;:::o;18880:613::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;19113:12:::1;:19;19097:5;:12;:35;:83;;;;;19159:14;:21;19136:12;:19;:44;19097:83;:130;;;;;19209:11;:18;19184:14;:21;:43;19097:130;19089:157;;;::::0;;-1:-1:-1;;;19089:157:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19089:157:0;;;;;;;;;;;;;::::1;;19261:9;19257:158;19274:12;:19;19272:1;:21;19257:158;;;19315:88;19319:5;19326;19332:1;19326:8;;;;;;;;;;;;;;19336:12;19349:1;19336:15;;;;;;;;;;;;;;19353:14;19368:1;19353:17;;;;;;;;;;;;;;19372:11;19384:1;19372:14;;;;;;;;;;;;;;19388:11;19400:1;19388:14;;;;;;;;;;;;;;19315:3;:88::i;:::-;19295:3;;19257:158;;;;19429:11;19425:61;;;19457:17;:15;:17::i;:::-;18880:613:::0;;;;;;:::o;6696:20::-;;;-1:-1:-1;;;;;6696:20:0;;:::o;20021:143::-;20093:7;20120:36;15389:1;20120:14;:3;20128:5;20120:14;:7;:14;:::i;:::-;:18;:36;:18;:36;:::i;:::-;20113:43;20021:143;-1:-1:-1;;;20021:143:0:o;15532:30::-;;;;:::o;15782:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32232:298::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;32313:12:::1;::::0;-1:-1:-1;;;;;32313:12:0::1;32305:77;;;;-1:-1:-1::0;;;32305:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32424:12;::::0;32413:51:::1;::::0;;-1:-1:-1;;;32413:51:0;;::::1;::::0;::::1;::::0;;;32458:4:::1;32413:51:::0;;;;;;32394:14:::1;::::0;-1:-1:-1;;;;;32424:12:0::1;::::0;32413:30:::1;::::0;:51;;;;;;;;;;;32424:12;32413:51;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32413:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32413:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32413:51:0;32486:12:::1;::::0;32413:51;32475:47;;-1:-1:-1;;;32475:47:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;32413:51;;-1:-1:-1;;;;;;32486:12:0;;::::1;::::0;32475:33:::1;::::0;:47;;;;;32486:12:::1;::::0;32475:47;;;;;;;;32486:12;;32475:47;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32475:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;16069:29:0::0;;;;:::o;21987:649::-;22062:7;22106:14;;;:8;:14;;;;;;;;22155:8;:14;;;;;-1:-1:-1;;;;;22155:21:0;;;;;;;;;22215:22;;;;22062:7;22277:27;22115:4;22277:21;:27::i;:::-;22248:56;-1:-1:-1;22319:21:0;;22315:197;;22358:14;22379:23;22397:4;22379:17;:23::i;:::-;-1:-1:-1;22357:45:0;;-1:-1:-1;22437:63:0;;-1:-1:-1;22459:40:0;22480:18;22459:16;22357:45;22470:4;22459:16;:10;:16;:::i;22437:63::-;22417:83;;22315:197;;22522:14;22539:65;22588:4;:15;;;22539:44;22578:4;22539:34;22555:17;22539:4;:11;;;:15;;:34;;;;:::i;15493:32::-;;;;:::o;6983:210::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;7059:23:0;::::1;7051:60;;;::::0;;-1:-1:-1;;;7051:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7140:5;::::0;;7127:30:::1;::::0;-1:-1:-1;;;;;7127:30:0;;::::1;::::0;7140:5;::::1;::::0;7127:30:::1;::::0;::::1;7168:5;:17:::0;;-1:-1:-1;;;;;;7168:17:0::1;-1:-1:-1::0;;;;;7168:17:0;;;::::1;::::0;;;::::1;::::0;;6983:210::o;15260:27::-;;;;:::o;20639:649::-;20701:7;20763:14;;;:8;:14;;;;;20807:20;;;;20701:7;;;;20792:12;:10;:12::i;:::-;:35;:58;;;;;20849:1;20831:15;;:19;20792:58;20788:455;;;20867:18;20888:49;20902:4;:20;;;20924:12;:10;:12::i;:::-;20888:13;:49::i;:::-;20867:70;;20952:14;20969:70;21023:15;;20969:49;21002:4;:15;;;20969:28;20984:12;;20969:10;:14;;:28;;;;:::i;:70::-;20952:87;;21054:16;21104:1;21088:13;;:17;21085:93;;;21148:13;;21137:25;;:6;;:25;:10;:25;:::i;:::-;21126:36;;21085:93;21200:6;;-1:-1:-1;21208:8:0;-1:-1:-1;21218:12:0;;-1:-1:-1;21192:39:0;;-1:-1:-1;;21192:39:0;20788:455;-1:-1:-1;21261:1:0;;-1:-1:-1;21261:1:0;;-1:-1:-1;21267:12:0;;-1:-1:-1;20639:649:0;;;;;;:::o;21296:620::-;21356:7;21365;21374;21394:20;;:::i;:::-;-1:-1:-1;21417:14:0;;;;:8;:14;;;;;;;;;21394:37;;;;;;;;;;;;;;;-1:-1:-1;;;;;21394:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21445:12;;:26;21442:429;;21514:12;;21503:61;;;-1:-1:-1;;;21503:61:0;;;;;;;;21558:4;21503:61;;;;;;21488:12;;-1:-1:-1;;;;;21514:12:0;;21503:40;;:61;;;;;;;;;;;;;;21514:12;21503:61;;;2:2:-1;;;;27:1;24;17:12;2:2;21503:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21503:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21503:61:0;21609:14;;;;21503:61;;-1:-1:-1;21586:45:0;;21503:61;21586:14;:45::i;:::-;21579:52;;21646:16;21694:1;21680:11;;:15;21677:131;;;21736:11;;21727:21;;:4;;:21;:8;:21;:::i;:::-;21716:32;-1:-1:-1;21774:18:0;:4;21716:32;21774:18;:8;:18;:::i;:::-;21767:25;;21677:131;21830:4;;-1:-1:-1;21836:8:0;-1:-1:-1;21846:12:0;;-1:-1:-1;21822:37:0;;-1:-1:-1;21822:37:0;34816:701;34881:7;34904:12;34901:52;;-1:-1:-1;34940:1:0;34933:8;;34901:52;-1:-1:-1;;;;;34983:20:0;;;34963:17;34983:20;;;:10;:20;;;;;;;;;35040:12;:22;;;;;;;34983:20;;;;35014:58;;34994:8;;35040:22;35064:7;35014:15;:58::i;:::-;35107:16;;;35121:1;35107:16;;;35083:21;35107:16;;;;;35083:21;35107:16;;;;;109:14:-1;35107:16:0;88:42:-1;144:17;;-1:-1;35107:16:0;35083:40;;35144:8;35134:4;35139:1;35134:7;;;;;;;;;;;;;:18;-1:-1:-1;;;;;35134:18:0;;;-1:-1:-1;;;;;35134:18:0;;;;;35173:9;35163:4;35168:1;35163:7;;;;;;;;-1:-1:-1;;;;;35163:19:0;;;:7;;;;;;;;;;:19;;;;35217:42;;;-1:-1:-1;;;35217:42:0;;35253:4;35217:42;;;;;;35193:21;;35217:27;;;;;:42;;;;;;;;;;;:27;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;35217:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35217:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35217:42:0;-1:-1:-1;;;;;35282:22:0;;;;;;;:12;35217:42;35282:22;;;;;;;;35270:114;;-1:-1:-1;;;35270:114:0;;;;;;;;35282:22;35270:114;;;;;;35357:4;35270:114;;;;;;35380:3;35364:15;:19;35270:114;;;;;;;;;;;;;;;;;;;;;35217:42;;-1:-1:-1;35282:22:0;;;;;35270:60;;35331:7;;35282:22;;35343:4;;35357;;35364:19;;35270:114;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35270:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35270:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35270:114:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;35270:114:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;15:2;7:11;;4:2;;;31:1;28;21:12;4:2;35270:114:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;-1:-1;;;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;35270:114:0;;421:4:-1;412:14;;;;35270:114:0;;;;;412:14:-1;35270:114:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;35270:114:0;;;;;;;;-1:-1:-1;;;35418:42:0;;35454:4;35418:42;;;;;35395:20;;-1:-1:-1;;;;;;35418:27:0;;;-1:-1:-1;35418:27:0;;-1:-1:-1;35418:42:0;;;;;-1:-1:-1;35418:42:0;;-1:-1:-1;35418:42:0;;;;;;;:27;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;35418:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35418:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35418:42:0;;-1:-1:-1;35478:31:0;35418:42;35495:13;35478:31;:16;:31;:::i;:::-;35471:38;34816:701;-1:-1:-1;;;;;;;34816:701:0:o;15187:22::-;;;-1:-1:-1;;;;;15187:22:0;;:::o;15569:49::-;;;;;;;;;;;;;:::o;19501:444::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;19716:12:::1;:19;19700:5;:12;:35;:83;;;;;19762:14;:21;19739:12;:19;:44;19700:83;:130;;;;;19812:11;:18;19787:14;:21;:43;19700:130;19692:157;;;::::0;;-1:-1:-1;;;19692:157:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19692:157:0;;;;;;;;;;;;;::::1;;19860:77;19869:4;19875:5;19882:12;19896:14;19912:11;19925;19860:8;:77::i;:::-;19501:444:::0;;;;;:::o;31556:154::-;8956:1;9562:7;;:19;;9554:63;;;;;-1:-1:-1;;;9554:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9554:63:0;;;;;;;;;;;;;;;8956:1;9695:7;:18;31618:16:::1;31629:4:::0;31618:10:::1;:16::i;:::-;31645:23;31663:4;31645:17;:23::i;:::-;;31679;31697:4;31679:17;:23::i;:::-;-1:-1:-1::0;;8912:1:0;9874:22;;31556:154::o;26245:1133::-;8956:1;9562:7;;:19;;9554:63;;;;;-1:-1:-1;;;9554:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9554:63:0;;;;;;;;;;;;;;;8956:1;9695:7;:18;26332:21:::1;26356:14:::0;;;:8:::1;:14;::::0;;;;;;;26405:8:::1;:14:::0;;;;;26420:10:::1;26405:26:::0;;;;;;;;26442:16:::1;26365:4:::0;26442:10:::1;:16::i;:::-;26469:23;26487:4;26469:17;:23::i;:::-;;26503;26521:4;26503:17;:23::i;:::-;-1:-1:-1::0;26570:4:0::1;::::0;;26548:17;::::1;::::0;-1:-1:-1;;;;;26548:17:0;;::::1;26570:4:::0;::::1;26540:34;26537:85;;;26601:9;26591:19;;26537:85;26636:11:::0;;26632:537:::1;;26697:4;::::0;;26675:17;::::1;::::0;-1:-1:-1;;;;;26675:17:0;;::::1;26697:4:::0;::::1;26667:34;26664:227;;;26728:4;;;;;;;;;-1:-1:-1::0;;;;;26728:4:0::1;-1:-1:-1::0;;;;;26722:19:0::1;;26749:7;26722:37;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26722:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26722:37:0;;;;;26664:227;;;26800:17;::::0;::::1;::::0;:75:::1;::::0;;-1:-1:-1;;;26800:75:0;;26839:10:::1;26800:75;::::0;::::1;::::0;26860:4:::1;26800:75:::0;;;;;;;;;;;;-1:-1:-1;;;;;26800:17:0;;::::1;::::0;:30:::1;::::0;:75;;;;;::::1;::::0;;;;;;;;;:17:::1;::::0;:75;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;26800:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26800:75:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;26664:227:0::1;26919:11:::0;;:24:::1;::::0;26935:7;26919:24:::1;:15;:24;:::i;:::-;26905:38:::0;;26963:12:::1;::::0;-1:-1:-1;;;;;26963:12:0::1;:26:::0;26960:198:::1;;27034:17;::::0;::::1;::::0;27054:12:::1;::::0;27010:66:::1;::::0;-1:-1:-1;;;;;27034:17:0;;::::1;::::0;27054:12:::1;27068:7:::0;27010:15:::1;:66::i;:::-;27106:12;::::0;27095:47:::1;::::0;;-1:-1:-1;;;27095:47:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;27106:12:0;;::::1;::::0;27095:32:::1;::::0;:47;;;;;27106:12:::1;::::0;27095:47;;;;;;;;27106:12;;27095:47;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27095:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27095:47:0;;;;26960:198;27213:22;::::0;::::1;::::0;27197:11;;:49:::1;::::0;27241:4:::1;::::0;27197:39:::1;::::0;::::1;:15;:39;:::i;:49::-;27179:15;::::0;::::1;:67:::0;27289:20:::1;::::0;::::1;::::0;27273:11;;:47:::1;::::0;27315:4:::1;::::0;27273:37:::1;::::0;::::1;:15;:37;:::i;:47::-;27257:13;::::0;::::1;:63:::0;27336:34:::1;::::0;;;;;;;27356:4;;27344:10:::1;::::0;27336:34:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;8912:1:0;9874:22;;-1:-1:-1;;26245:1133:0:o;33016:162::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;33117:2:::1;33108:6;:11;;33086:51;;;::::0;;-1:-1:-1;;;33086:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;33086:51:0;;;;;;;;;;;;;::::1;;33148:13;:22:::0;33016:162::o;20172:90::-;20242:12;20172:90;:::o;33530:94::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;33597:10:::1;:19:::0;33530:94::o;17614:998::-;6927:5;;-1:-1:-1;;;;;6927:5:0;6913:10;:19;6905:50;;;;;-1:-1:-1;;;6905:50:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6905:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17360:28:0;;::::1;;::::0;;;:13:::1;:28;::::0;;;;;;;:40;;::::1;::::0;;;;;;;17771:13;;17786:10;;17360:40:::1;;:49;17352:87;;;::::0;;-1:-1:-1;;;17352:87:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17352:87:0;;;;;;;;;;;;;::::1;;17813:11:::2;17809:61;;;17841:17;:15;:17::i;:::-;17882:23;17923:10;;17908:12;:25;:53;;17951:10;;17908:53;;;17936:12;17908:53;17990:15;::::0;17882:79;;-1:-1:-1;17990:32:0::2;::::0;18010:11;17990:32:::2;:19;:32;:::i;:::-;17972:15;:50:::0;-1:-1:-1;;;;;18033:28:0;;::::2;;::::0;;;:13:::2;:28;::::0;;;;;;;:40;;::::2;::::0;;;;;;;;:47;;-1:-1:-1;;18033:47:0::2;18076:4;18033:47;::::0;;18094:14;;;:8:::2;:14:::0;;;:20:::2;;::::0;;;::::2;18033:47;18094:20;18091:76;;18140:4;27:10:-1::0;;39:1:::2;23:18:::0;::::2;45:23:::0;;-1:-1;18140:15:0;;;;;::::2;::::0;;;18091:76:::2;18194:410;;;;;;;;18223:4;18194:410;;;;18257:13;-1:-1:-1::0;;;;;18194:410:0::2;;;;;18296:10;-1:-1:-1::0;;;;;18194:410:0::2;;;;;18334:11;18194:410;;;;18378:15;18194:410;;;;18427:1;18194:410;;;;18460:1;18194:410;;;;18496:1;18194:410;;;;18529:1;18194:410;;;;18556:10;18194:410;;;;;;18588:4;18194:410;;;;::::0;18177:8:::2;:14;18186:4;18177:14;;;;;;;;;;;:427;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;18177:427:0::2;;;;;-1:-1:-1::0;;;;;18177:427:0::2;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;18177:427:0::2;;;;;-1:-1:-1::0;;;;;18177:427:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17450:1;6966::::1;;17614:998:::0;;;;;;:::o;15460:26::-;;;;:::o;24735:176::-;24799:4;:11;24782:14;24821:83;24845:6;24841:1;:10;24821:83;;;24873:19;24884:4;24889:1;24884:7;;;;;;;;;;;;;;;;24873:10;:19::i;:::-;24853:3;;24821:83;;2592:136;2650:7;2677:43;2681:1;2684;2677:43;;;;;;;;;;;;;;;;;:3;:43::i;3482:471::-;3540:7;3785:6;3781:47;;-1:-1:-1;3815:1:0;3808:8;;3781:47;3852:5;;;3856:1;3852;:5;:1;3876:5;;;;;:10;3868:56;;;;-1:-1:-1;;;3868:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4429:132;4487:7;4514:39;4518:1;4521;4514:39;;;;;;;;;;;;;;;;;:3;:39::i;2128:181::-;2186:7;2218:5;;;2242:6;;;;2234:46;;;;;-1:-1:-1;;;2234:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24987:1184;25041:21;25065:14;;;:8;:14;;;;;;25108:12;:10;:12::i;:::-;25090:30;;25146:4;:20;;;25135:7;:31;25131:70;;25183:7;;;;25131:70;25211:26;25240:27;25262:4;25240:21;:27::i;:::-;25211:56;-1:-1:-1;25282:23:0;;;:47;;-1:-1:-1;25309:15:0;;;;:20;25282:47;25278:131;;;-1:-1:-1;25346:20:0;;;;:30;25391:7;;25278:131;25430:14;25446:17;25468:23;25486:4;25468:17;:23::i;:::-;-1:-1:-1;25502:21:0;;;:30;;;25556:9;;;25543:51;;;-1:-1:-1;;;25543:51:0;;25580:4;25543:51;;;;;;;;;;;;;;25429:62;;-1:-1:-1;25429:62:0;;-1:-1:-1;;;;;;25556:9:0;;;;25543:28;;:51;;;;;;;;;;;;;;;25556:9;;25543:51;;;2:2:-1;;;;27:1;24;17:12;2:2;25543:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25543:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;25619:11:0;;:23;;25635:6;25619:23;:15;:23;:::i;:::-;25605:11;:37;25656:13;;25653:148;;25699:9;;;25715:7;;25686:48;;;-1:-1:-1;;;25686:48:0;;-1:-1:-1;;;;;25715:7:0;;;25686:48;;;;;;;;;;;;;;25699:9;;;25686:28;;:48;;;;;;;;;;;;;;25699:9;;25686:48;;;2:2:-1;;;;27:1;24;17:12;2:2;25686:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25686:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;25763:11:0;;:26;;25779:9;25763:26;:15;:26;:::i;:::-;25749:11;:40;25653:148;25836:68;25863:40;25884:18;25863:16;:6;25874:4;25863:16;:10;:16;:::i;:40::-;25836:22;;;;;:68;:26;:68;:::i;:::-;25811:22;;;:93;25918:12;;25952:20;25967:4;25952:14;:20::i;:::-;-1:-1:-1;25917:55:0;;-1:-1:-1;25917:55:0;-1:-1:-1;26005:17:0;25917:55;;26005:17;:8;:17;:::i;:::-;25983:19;;;:39;26056:64;26081:38;26100:18;26081:14;:4;26090;26081:14;:8;:14;:::i;:38::-;26056:20;;;;;:64;:24;:64;:::i;:::-;26033:20;;;:87;-1:-1:-1;;;;26133:20:0;;;;:30;-1:-1:-1;24987:1184:0;;:::o;30337:461::-;30395:14;30422:20;;:::i;:::-;-1:-1:-1;30445:14:0;;;;:8;:14;;;;;;;;30422:37;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30422:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30494:14;;;:8;:14;;;;;30509:10;30494:26;;;;;;;;30603:15;;;;30565:22;;30549:11;;30422:37;;30445:14;30549:70;;30603:15;30549:49;;30593:4;;30549:39;;:11;:15;:39::i;:70::-;30657:9;;30531:88;;-1:-1:-1;30639:49:0;;-1:-1:-1;;;;;30657:9:0;30668:10;30531:88;30639:17;:49::i;:::-;30630:58;;30717:49;30761:4;30717:39;30733:4;:22;;;30717:4;:11;;;:15;;:39;;;;:::i;:49::-;30699:15;;;;:67;;;;-1:-1:-1;;30337:461:0;;;:::o;30806:742::-;30894:12;;30864:14;;-1:-1:-1;;;;;30894:12:0;30891:66;;-1:-1:-1;30944:1:0;30937:8;;30891:66;30967:20;;:::i;:::-;-1:-1:-1;30990:14:0;;;;:8;:14;;;;;;;;30967:37;;;;;;;;;;;;;;;-1:-1:-1;;;;;30967:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31039:14;;;:8;:14;;;;;31054:10;31039:26;;;;;;;;31146:13;;;;31110:20;;31094:11;;30967:37;;30990:14;31094:66;;31146:13;31094:47;;31136:4;;31094:37;;:11;:15;:37::i;:66::-;31195:14;;;;;-1:-1:-1;;;;;31174:37:0;;;31223:1;31174:37;;;:12;:37;;;;;;;31076:84;;-1:-1:-1;31174:37:0;:51;31171:272;;31288:14;;;;;-1:-1:-1;;;;;31269:35:0;;;;;;;:10;:35;;;;;;;31251:75;;31269:35;31306:10;31318:7;31251:17;:75::i;:::-;31242:84;;31171:272;;;31368:63;31394:4;:14;;;31411:10;31423:7;31368:17;:63::i;:::-;31359:72;;31171:272;31485:20;;;;31469:11;;:47;;31511:4;;31469:37;;;:15;:37;:::i;:47::-;31453:13;;;;:63;;;;-1:-1:-1;;30806:742:0;;;:::o;34430:378::-;34523:16;34549:6;-1:-1:-1;;;;;34542:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34542:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34542:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34542:28:0;;-1:-1:-1;34584:21:0;;;34581:74;;;-1:-1:-1;34636:7:0;34581:74;34668:49;;;-1:-1:-1;;;34668:49:0;;34701:4;34668:49;;;;-1:-1:-1;;;;;34668:49:0;;;;;;;;;34720:7;;34668:24;;;;;:49;;;;;;;;;;;;;;:24;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;34668:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34668:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34668:49:0;:59;34665:136;;;34751:6;-1:-1:-1;;;;;34744:22:0;;34767:8;34777:11;34744:45;;;;;;;;;;;;;-1:-1:-1;;;;;34744:45:0;-1:-1:-1;;;;;34744:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34744:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34744:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;34665:136:0;34430:378;;;;:::o;3031:192::-;3117:7;3153:12;3145:6;;;;3137:29;;;;-1:-1:-1;;;3137:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3137:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3189:5:0;;;3031:192::o;5057:278::-;5143:7;5178:12;5171:5;5163:28;;;;-1:-1:-1;;;5163:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5163:28:0;;5202:9;5218:1;5214;:5;;;;;;;5057:278;-1:-1:-1;;;;;5057:278:0:o;28984:1345::-;29081:12;;29040:7;;;;;;-1:-1:-1;;;;;29081:12:0;29078:85;;-1:-1:-1;29132:1:0;;-1:-1:-1;29132:1:0;;-1:-1:-1;29138:12:0;29124:27;;29078:85;29174:12;29188:16;29209:21;29225:4;29209:15;:21::i;:::-;-1:-1:-1;29173:57:0;;-1:-1:-1;29173:57:0;-1:-1:-1;29244:18:0;29173:57;;29244:18;:8;:18;:::i;:::-;29241:82;;-1:-1:-1;29292:1:0;;-1:-1:-1;29292:1:0;;-1:-1:-1;29298:12:0;;-1:-1:-1;29284:27:0;;-1:-1:-1;29284:27:0;29241:82;29335:20;;:::i;:::-;-1:-1:-1;29358:14:0;;;;:8;:14;;;;;;;;29335:37;;;;;;;;;;;;;;;-1:-1:-1;;;;;29335:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29407:39;;-1:-1:-1;;;29407:39:0;;29440:4;29407:39;;;;;;;;;29335:37;;29358:14;29407:24;;:39;;;;;;;;;;;29335:37;29407:39;;;2:2:-1;;;;27:1;24;17:12;2:2;29407:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29407:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29407:39:0;29468:12;;29457:41;;;-1:-1:-1;;;29457:41:0;;;;;;;;29468:12;29457:41;;;;;;;;29407:39;;-1:-1:-1;;;;;;29468:12:0;;;;29457:32;;:41;;;;;29468:12;29457:41;;;;;;29468:12;;29457:41;;;2:2:-1;;;;27:1;24;17:12;2:2;29457:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29457:41:0;;;;29509:20;29532:4;:14;;;-1:-1:-1;;;;;29532:24:0;;29565:4;29532:39;;;;;;;;;;;;;-1:-1:-1;;;;;29532:39:0;-1:-1:-1;;;;;29532:39:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29532:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29532:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29532:39:0;;-1:-1:-1;29589:31:0;29532:39;29606:13;29589:31;:16;:31;:::i;:::-;29655:14;;;;;-1:-1:-1;;;;;29634:37:0;;;29683:1;29634:37;;;:12;:37;;;;;;;29582:38;;-1:-1:-1;29634:37:0;:51;29631:125;;29709:35;29722:4;:14;;;29739:4;29709;:35::i;:::-;29702:42;;29631:125;29816:14;;;;;-1:-1:-1;;;;;29800:31:0;;;;;:15;:31;;;;:41;;29836:4;29800:41;:35;:41;:::i;:::-;29782:14;;;;;-1:-1:-1;;;;;29766:31:0;;;;;:15;:31;;;;;:75;;;;29878:11;;29766:31;;-1:-1:-1;29878:15:0;29875:399;;29930:11;;29921:21;;:4;;:21;:8;:21;:::i;:::-;29981:14;;;;;-1:-1:-1;;;;;29960:37:0;;;30009:1;29960:37;;;:12;:37;;;;;;;29910:32;;-1:-1:-1;29960:37:0;:51;29957:266;;30069:14;;;;;-1:-1:-1;;;;;30050:35:0;;;;;;;:10;:35;;;;;;;30087:7;;30032:73;;30050:35;;;;30087:7;30096:8;30032:17;:73::i;:::-;;29957:266;;;30172:14;;;;30189:7;;30146:61;;30172:14;-1:-1:-1;;;;;30189:7:0;30198:8;30146:17;:61::i;:::-;;29957:266;30244:18;:4;30253:8;30244:18;:8;:18;:::i;:::-;30237:25;;29875:399;-1:-1:-1;30292:4:0;;30298:8;;-1:-1:-1;30308:12:0;;-1:-1:-1;28984:1345:0;;-1:-1:-1;;;;28984:1345:0:o;31826:398::-;31955:39;;;-1:-1:-1;;;31955:39:0;;31988:4;31955:39;;;;;;31916:7;;;;-1:-1:-1;;;;;31955:24:0;;;;;:39;;;;;;;;;;;;;;:24;:39;;;2:2:-1;;;;27:1;24;17:12;2:2;31955:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31955:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31955:39:0;;-1:-1:-1;32008:11:0;;;;;:27;;;32034:1;32023:8;:12;32008:27;32005:187;;;32066:8;32056:7;:18;32052:77;;;32105:8;32095:18;;32052:77;32150:6;-1:-1:-1;;;;;32143:23:0;;32167:3;32172:7;32143:37;;;;;;;;;;;;;-1:-1:-1;;;;;32143:37:0;-1:-1:-1;;;;;32143:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32143:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32143:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;32005:187:0;-1:-1:-1;32209:7:0;;31826:398;-1:-1:-1;;;31826:398:0:o;12982:24019::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;12982:24019:0;;;;;;-1:-1:-1;;;;;12982:24019:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://f0bc5f3fc1c7c3fdf4617761fe363269c7eb5cb87d47e94638a1abdee05680f7
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.