Contract 0x2efc737c7b21d4abb4babdad4d125e10f9c7e240

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x972f2260710e0095b68095e5c77782e519bc7e2b57050c5230b7eb1cce427b140x60c0604070584252021-08-04 9:24:0146 days 17 hrs ago0x894ab34c7f63f579aac05780304107362fcc5f7b IN  Contract Creation0 HT0.01481571675
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
token

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at hecoinfo.com on 2021-08-04
*/

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
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;
    }
}
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IMdexFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function getPair(address tokenA, address tokenB) external view returns (address pair);

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setFeeToRate(uint256) external;

    function setInitCodeHash(bytes32) external;

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;

    function sync() external;

    function price(address token, uint256 baseDecimal) external view returns (uint256);

    function initialize(address, address) external;
}

interface IMdexRouter {
    function factory() external pure returns (address);

    function WHT() external pure returns (address);

    function swapMining() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);

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

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

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

    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface ISwapMining {
    function swap(address account, address input, address output, uint256 amount) external returns (bool);
}


contract token is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping (address => bool) private _isExcludedFromFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 2100000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "The maxima";
    string private _symbol = "QLM";
    uint8 private _decimals = 18;

    uint256 public _taxFee = 5;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 3;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 2;
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 public _devFee = 0;
    uint256 private _previousDevFee = _devFee;
    
    address public burnAddress = address(0x000000000000000000000000000000000000dEaD);
    address public ownerAddres = address(0x894ab34C7f63F579AAC05780304107362fcC5F7B);
    address public devAddress = address(0x894ab34C7f63F579AAC05780304107362fcC5F7B);
    
    address public hbtcToken = 0x66a79D23E58475D2738179Ca52cd0b41d73f0BEa;
    address public husdtToken = 0xa71EdC38d189767582C38A3145b5873052c3e47a;

    IMdexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapDevEnabled = false;

    uint256 public _maxTxAmount = 2000000000000000 * 10 **18;
    uint256 private numTokensSellToAddToLiquidity = 1000000000000 * 10 **18;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () public {
        _rOwned[ownerAddres] = _rTotal;

        IMdexRouter _uniswapV2Router = IMdexRouter(0xED7d5F38C79115ca12fe6C0041abb22F0A06C300);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IMdexFactory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WHT());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[ownerAddres] = true;
        _isExcludedFromFee[burnAddress] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0),ownerAddres, _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee) {
            removeAllFee();
        }
        _transferStandard(sender, recipient, amount);
        if(!takeFee) {
            restoreAllFee();
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn, uint256 tDev) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _takeBurn(sender, tBurn);
        _takeDev(tDev);
        _reflectFee(rFee, tFee);
        
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function _takeBurn(address sender,uint256 tBurn) private {
        uint256 currentRate =  _getRate();
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[burnAddress] = _rOwned[burnAddress].add(rBurn);
        if(tBurn > 0) {
            emit Transfer(sender, burnAddress, tBurn);
        }
    }
    
    function _takeDev(uint256 tDev) private {
        uint256 currentRate =  _getRate();
        uint256 rDev = tDev.mul(currentRate);
        if(!swapDevEnabled){
            _rOwned[devAddress] = _rOwned[devAddress].add(rDev);
        }
        
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setBurnFeePercent(uint256 burnFee) external onlyOwner() {
        _burnFee = burnFee;
    }
    
    function setDevFeePercent(uint256 devFee) external onlyOwner() {
        _devFee = devFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = maxTxPercent;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    function setSwapDevEnabled(bool _enabled) public onlyOwner {
        swapDevEnabled = _enabled;
    }
    

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    
    struct TData {
        uint256 tAmount;
        uint256 tFee;
        uint256 tLiquidity;
        uint256 tBurn;
        uint256 tDev;
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, TData memory data) = _getTValues(tAmount);
        data.tAmount = tAmount;
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(data, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, data.tFee, data.tLiquidity, data.tBurn, data.tDev);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, TData memory) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tDev = calculateDevFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity).sub(tBurn);
        tTransferAmount = tTransferAmount.sub(tDev);
        return (tTransferAmount, TData(0,tFee, tLiquidity, tBurn, tDev));
    }

    function _getRValues(TData memory _data, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = _data.tAmount.mul(currentRate);
        uint256 rFee = _data.tFee.mul(currentRate);
        uint256 rLiquidity = _data.tLiquidity.mul(currentRate);
        uint256 rBurn = _data.tBurn.mul(currentRate);
        uint256 rDev = _data.tDev.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity).sub(rBurn);
        rTransferAmount = rTransferAmount.sub(rDev);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(
            10**2
        );
    }
    
    function calculateDevFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_devFee).div(
            10**2
        );
    }
    

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _burnFee == 0 && _devFee ==0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousDevFee = _devFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
        _devFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _burnFee = _previousBurnFee;
        _devFee = _previousDevFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != ownerAddres && to != ownerAddres) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            to == uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 addHl = uint256(100).mul(_liquidityFee).div(_liquidityFee.add(_devFee));
        uint256 addNumber = contractTokenBalance.mul(addHl).div(100);
        uint256 devNumber = contractTokenBalance.sub(addNumber);
        uint256 half = addNumber.div(2);
        uint256 otherHalf = addNumber.sub(half);

        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        swapTokensForDividendToken(devNumber);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WHT();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function swapTokensForDividendToken(uint256 tokenAmount) private {
        if (tokenAmount > 0) {
            address[] memory path = new address[](3);
            path[0] = address(this);
            path[1] = uniswapV2Router.WHT();
            path[2] = husdtToken;
            
            _approve(address(this), address(uniswapV2Router), _tTotal);
    
            // make the swap
            uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of dividend token
                path,
                address(this),
                block.timestamp
            );
            uint256 dividends = IERC20(husdtToken).balanceOf(address(this));
            IERC20(husdtToken).transfer(address(devAddress), dividends);
        }  
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hbtcToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"husdtToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerAddres","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"setDevFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapDevEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapDevEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IMdexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526c1a8177494efa5bf39f20000000600755600754600019816200002357fe5b06600019036008556040518060400160405280600a81526020017f546865206d6178696d6100000000000000000000000000000000000000000000815250600a908051906020019062000078929190620008eb565b506040518060400160405280600381526020017f514c4d0000000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000c6929190620008eb565b506012600c60006101000a81548160ff021916908360ff1602179055506005600d55600d54600e556003600f55600f546010556002601155601154601255600060135560135460145561dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073894ab34c7f63f579aac05780304107362fcc5f7b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073894ab34c7f63f579aac05780304107362fcc5f7b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507366a79d23e58475d2738179ca52cd0b41d73f0bea601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a71edc38d189767582c38a3145b5873052c3e47a601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601960156101000a81548160ff0219169083151502179055506000601960166101000a81548160ff0219169083151502179055506d629b8c891b267182b61400000000601a556c0c9f2c9cd04674edea40000000601b553480156200030c57600080fd5b5060006200031f620008ba60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060085460036000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ed7d5f38c79115ca12fe6c0041abb22f0a06c30090508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200048557600080fd5b505afa1580156200049a573d6000803e3d6000fd5b505050506040513d6020811015620004b157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b1580156200052557600080fd5b505afa1580156200053a573d6000803e3d6000fd5b505050506040513d60208110156200055157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620005cc57600080fd5b505af1158015620005e1573d6000803e3d6000fd5b505050506040513d6020811015620005f857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660006200068c620008c260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a35062000991565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200092e57805160ff19168380011785556200095f565b828001600101855582156200095f579182015b828111156200095e57825182559160200191906001019062000941565b5b5090506200096e919062000972565b5090565b5b808211156200098d57600081600090555060010162000973565b5090565b60805160601c60a05160601c61461e620009e8600039806116805280612b7652508061114f52806134c052806135ac52806135d352806136de528061370552806138c85280613a1e5280613a47525061461e6000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063b6c52324116100b6578063dac92df01161007a578063dac92df014610cfc578063dd46706414610d29578063dd62ed3e14610d64578063e8aa607a14610de9578063ea2f0b3714610e2a578063f2fde38b14610e7b57610272565b8063b6c5232414610bf3578063c0b0fda214610c1e578063c49b9a8014610c49578063cea2695814610c86578063d543dbeb14610cc157610272565b80638ee88c53116101085780638ee88c5314610a0457806395d89b4114610a3f578063a457c2d714610acf578063a69df4b514610b40578063a9059cbb14610b57578063aa45026b14610bc857610272565b8063715018a6146108ff5780637d1db4a51461091657806389ff0dfa146109415780638b5825ca146109825780638da5cb5b146109c357610272565b806339509351116101dd57806349bd5a5e116101a157806349bd5a5e146107595780634a74bb021461079a5780635342acb4146107c75780636bc87c3a1461082e57806370a082311461085957806370d5ae05146108be57610272565b806339509351146105d05780633ad10ef6146106415780633b124fe714610682578063437823ec146106ad5780634549b039146106fe57610272565b80631694505e1161022f5780631694505e1461041b57806318160ddd1461045c57806323b872dd146104875780632d83811914610518578063313ce56714610567578063379e29191461059557610272565b8063033e67b114610277578063061c82d0146102b457806306fdde03146102ef578063095ea7b31461037f57806313114a9d146103f057610272565b3661027257005b600080fd5b34801561028357600080fd5b506102b26004803603602081101561029a57600080fd5b81019080803515159060200190929190505050610ecc565b005b3480156102c057600080fd5b506102ed600480360360208110156102d757600080fd5b8101908080359060200190929190505050610fb1565b005b3480156102fb57600080fd5b50610304611083565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610344578082015181840152602081019050610329565b50505050905090810190601f1680156103715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561038b57600080fd5b506103d8600480360360408110156103a257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611125565b60405180821515815260200191505060405180910390f35b3480156103fc57600080fd5b50610405611143565b6040518082815260200191505060405180910390f35b34801561042757600080fd5b5061043061114d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046857600080fd5b50610471611171565b6040518082815260200191505060405180910390f35b34801561049357600080fd5b50610500600480360360608110156104aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061117b565b60405180821515815260200191505060405180910390f35b34801561052457600080fd5b506105516004803603602081101561053b57600080fd5b8101908080359060200190929190505050611254565b6040518082815260200191505060405180910390f35b34801561057357600080fd5b5061057c6112d8565b604051808260ff16815260200191505060405180910390f35b3480156105a157600080fd5b506105ce600480360360208110156105b857600080fd5b81019080803590602001909291905050506112ef565b005b3480156105dc57600080fd5b50610629600480360360408110156105f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113c1565b60405180821515815260200191505060405180910390f35b34801561064d57600080fd5b50610656611474565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561068e57600080fd5b5061069761149a565b6040518082815260200191505060405180910390f35b3480156106b957600080fd5b506106fc600480360360208110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a0565b005b34801561070a57600080fd5b506107436004803603604081101561072157600080fd5b81019080803590602001909291908035151590602001909291905050506115c3565b6040518082815260200191505060405180910390f35b34801561076557600080fd5b5061076e61167e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107a657600080fd5b506107af6116a2565b60405180821515815260200191505060405180910390f35b3480156107d357600080fd5b50610816600480360360208110156107ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116b5565b60405180821515815260200191505060405180910390f35b34801561083a57600080fd5b5061084361170b565b6040518082815260200191505060405180910390f35b34801561086557600080fd5b506108a86004803603602081101561087c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611711565b6040518082815260200191505060405180910390f35b3480156108ca57600080fd5b506108d3611762565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561090b57600080fd5b50610914611788565b005b34801561092257600080fd5b5061092b61190e565b6040518082815260200191505060405180910390f35b34801561094d57600080fd5b50610956611914565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098e57600080fd5b5061099761193a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109cf57600080fd5b506109d8611960565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a1057600080fd5b50610a3d60048036036020811015610a2757600080fd5b8101908080359060200190929190505050611989565b005b348015610a4b57600080fd5b50610a54611a5b565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a94578082015181840152602081019050610a79565b50505050905090810190601f168015610ac15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610adb57600080fd5b50610b2860048036036040811015610af257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611afd565b60405180821515815260200191505060405180910390f35b348015610b4c57600080fd5b50610b55611bca565b005b348015610b6357600080fd5b50610bb060048036036040811015610b7a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611de7565b60405180821515815260200191505060405180910390f35b348015610bd457600080fd5b50610bdd611e05565b6040518082815260200191505060405180910390f35b348015610bff57600080fd5b50610c08611e0b565b6040518082815260200191505060405180910390f35b348015610c2a57600080fd5b50610c33611e15565b6040518082815260200191505060405180910390f35b348015610c5557600080fd5b50610c8460048036036020811015610c6c57600080fd5b81019080803515159060200190929190505050611e1b565b005b348015610c9257600080fd5b50610cbf60048036036020811015610ca957600080fd5b8101908080359060200190929190505050611f39565b005b348015610ccd57600080fd5b50610cfa60048036036020811015610ce457600080fd5b810190808035906020019092919050505061200b565b005b348015610d0857600080fd5b50610d116120dd565b60405180821515815260200191505060405180910390f35b348015610d3557600080fd5b50610d6260048036036020811015610d4c57600080fd5b81019080803590602001909291905050506120f0565b005b348015610d7057600080fd5b50610dd360048036036040811015610d8757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e1565b6040518082815260200191505060405180910390f35b348015610df557600080fd5b50610dfe612368565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e3657600080fd5b50610e7960048036036020811015610e4d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061238e565b005b348015610e8757600080fd5b50610eca60048036036020811015610e9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b1565b005b610ed46126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960166101000a81548160ff02191690831515021790555050565b610fb96126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d8190555050565b6060600a8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561111b5780601f106110f05761010080835404028352916020019161111b565b820191906000526020600020905b8154815290600101906020018083116110fe57829003601f168201915b5050505050905090565b60006111396111326126bc565b84846126c4565b6001905092915050565b6000600954905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600754905090565b60006111888484846128bb565b611249846111946126bc565b6112448560405180606001604052806028815260200161450760289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111fa6126bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb59092919063ffffffff16565b6126c4565b600190509392505050565b60006008548211156112b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061444c602a913960400191505060405180910390fd5b60006112bb612d75565b90506112d08184612da090919063ffffffff16565b915050919050565b6000600c60009054906101000a900460ff16905090565b6112f76126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b600061146a6113ce6126bc565b8461146585600560006113df6126bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea90919063ffffffff16565b6126c4565b6001905092915050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6114a86126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611568576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600060075483111561163d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161165f57600061164d84612e72565b50505050505050905080915050611678565b600061166a84612e72565b505050505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601960159054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600061175b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611254565b9050919050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117906126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611850576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119916126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600b8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611af35780601f10611ac857610100808354040283529160200191611af3565b820191906000526020600020905b815481529060010190602001808311611ad657829003601f168201915b5050505050905090565b6000611bc0611b0a6126bc565b84611bbb856040518060600160405280602581526020016145c46025913960056000611b346126bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb59092919063ffffffff16565b6126c4565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806145a16023913960400191505060405180910390fd5b6002544211611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611dfb611df46126bc565b84846128bb565b6001905092915050565b60135481565b6000600254905090565b60115481565b611e236126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b611f416126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612001576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6120136126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601a8190555050565b601960169054906101000a900460ff1681565b6120f86126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6123966126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612456576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6124b96126bc565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612579576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806144766026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061457d6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061449c6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806145586025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806144296023913960400191505060405180910390fd5b60008111612a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061452f6029913960400191505060405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612acc5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b2d57601a54811115612b2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806144be6028913960400191505060405180910390fd5b5b6000612b3830611711565b9050601a548110612b4957601a5490505b6000601b548210159050808015612b6d5750601960149054906101000a900460ff16155b8015612bc457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015612bdc5750601960159054906101000a900460ff165b15612bf057601b549150612bef82612ef3565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c975750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ca157600090505b612cad86868684613064565b505050505050565b6000838311158290612d62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d27578082015181840152602081019050612d0c565b50505050905090810190601f168015612d545780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612d82613091565b91509150612d998183612da090919063ffffffff16565b9250505090565b6000612de283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506130de565b905092915050565b600080828401905083811015612e68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612e886143f9565b612e918b6131a4565b915091508a8160000181815250506000806000612eb584612eb0612d75565b613269565b925092509250828282878760200151886040015189606001518a608001519c509c509c509c509c509c509c509c505050505050919395975091939597565b6001601960146101000a81548160ff0219169083151502179055506000612f4e612f2a601354600f54612dea90919063ffffffff16565b612f40600f54606461335a90919063ffffffff16565b612da090919063ffffffff16565b90506000612f786064612f6a848661335a90919063ffffffff16565b612da090919063ffffffff16565b90506000612f8f82856133e090919063ffffffff16565b90506000612fa7600284612da090919063ffffffff16565b90506000612fbe82856133e090919063ffffffff16565b90506000479050612fce8361342a565b6000612fe382476133e090919063ffffffff16565b9050612fef83826136d8565b612ff885613829565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050505050506000601960146101000a81548160ff02191690831515021790555050565b8061307257613071613d07565b5b61307d848484613d88565b8061308b5761308a613f6f565b5b50505050565b60008060006008549050600060075490506130b9600754600854612da090919063ffffffff16565b8210156130d1576008546007549350935050506130da565b81819350935050505b9091565b6000808311829061318a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561314f578082015181840152602081019050613134565b50505050905090810190601f16801561317c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161319657fe5b049050809150509392505050565b60006131ae6143f9565b60006131b984613f95565b905060006131c685613fc6565b905060006131d386613ff7565b905060006131e087614028565b9050600061321b8361320d866131ff898d6133e090919063ffffffff16565b6133e090919063ffffffff16565b6133e090919063ffffffff16565b905061323082826133e090919063ffffffff16565b9050806040518060a001604052806000815260200187815260200186815260200185815260200184815250965096505050505050915091565b60008060008061328685876000015161335a90919063ffffffff16565b905060006132a186886020015161335a90919063ffffffff16565b905060006132bc87896040015161335a90919063ffffffff16565b905060006132d7888a6060015161335a90919063ffffffff16565b905060006132f2898b6080015161335a90919063ffffffff16565b9050600061332d8361331f86613311898b6133e090919063ffffffff16565b6133e090919063ffffffff16565b6133e090919063ffffffff16565b905061334282826133e090919063ffffffff16565b90508581869850985098505050505050509250925092565b60008083141561336d57600090506133da565b600082840290508284828161337e57fe5b04146133d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806144e66021913960400191505060405180910390fd5b809150505b92915050565b600061342283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cb5565b905092915050565b6060600267ffffffffffffffff8111801561344457600080fd5b506040519080825280602002602001820160405280156134735781602001602082028036833780820191505090505b509050308160008151811061348457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b15801561352457600080fd5b505afa158015613538573d6000803e3d6000fd5b505050506040513d602081101561354e57600080fd5b81019080805190602001909291905050508160018151811061356c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135d1307f0000000000000000000000000000000000000000000000000000000000000000846126c4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613693578082015181840152602081019050613678565b505050509050019650505050505050600060405180830381600087803b1580156136bc57600080fd5b505af11580156136d0573d6000803e3d6000fd5b505050505050565b613703307f0000000000000000000000000000000000000000000000000000000000000000846126c4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061374d611960565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156137d257600080fd5b505af11580156137e6573d6000803e3d6000fd5b50505050506040513d60608110156137fd57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000811115613d04576060600367ffffffffffffffff8111801561384c57600080fd5b5060405190808252806020026020018201604052801561387b5781602001602082028036833780820191505090505b509050308160008151811061388c57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635cb485926040518163ffffffff1660e01b815260040160206040518083038186803b15801561392c57600080fd5b505afa158015613940573d6000803e3d6000fd5b505050506040513d602081101561395657600080fd5b81019080805190602001909291905050508160018151811061397457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816002815181106139de57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a45307f00000000000000000000000000000000000000000000000000000000000000006007546126c4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d7958360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613b07578082015181840152602081019050613aec565b505050509050019650505050505050600060405180830381600087803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b505050506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613bd357600080fd5b505afa158015613be7573d6000803e3d6000fd5b505050506040513d6020811015613bfd57600080fd5b81019080805190602001909291905050509050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613cc557600080fd5b505af1158015613cd9573d6000803e3d6000fd5b505050506040513d6020811015613cef57600080fd5b81019080805190602001909291905050505050505b50565b6000600d54148015613d1b57506000600f54145b8015613d2957506000601154145b8015613d3757506000601354145b15613d4157613d86565b600d54600e81905550600f546010819055506011546012819055506013546014819055506000600d819055506000600f81905550600060118190555060006013819055505b565b600080600080600080600080613d9d89612e72565b97509750975097509750975097509750613dff88600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e090919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9487600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ee083614059565b613eea8b83614116565b613ef3816142a9565b613efd86856143bf565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35050505050505050505050565b600e54600d81905550601054600f81905550601254601181905550601454601381905550565b6000613fbf6064613fb1600d548561335a90919063ffffffff16565b612da090919063ffffffff16565b9050919050565b6000613ff06064613fe2600f548561335a90919063ffffffff16565b612da090919063ffffffff16565b9050919050565b600061402160646140136011548561335a90919063ffffffff16565b612da090919063ffffffff16565b9050919050565b600061405260646140446013548561335a90919063ffffffff16565b612da090919063ffffffff16565b9050919050565b6000614063612d75565b9050600061407a828461335a90919063ffffffff16565b90506140ce81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6000614120612d75565b90506000614137828461335a90919063ffffffff16565b90506141ad8160036000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea90919063ffffffff16565b60036000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008311156142a357601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b50505050565b60006142b3612d75565b905060006142ca828461335a90919063ffffffff16565b9050601960169054906101000a900460ff166143ba576143548160036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea90919063ffffffff16565b60036000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6143d4826008546133e090919063ffffffff16565b6008819055506143ef81600954612dea90919063ffffffff16565b6009819055505050565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c8111a30fb358a0847188d04ac575296dbb8226f5921985ddaede77bea54e94364736f6c634300060c0033

Deployed ByteCode Sourcemap

26409:17213:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35105:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34340:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29358:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31709:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32704:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27860:44;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29635:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31878:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33247:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29544:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34694:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32199:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27613:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27078:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34103:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32799:440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27911:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27986:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39175:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27161:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29738:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27439:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15625:148;;;;;;;;;;;;;:::i;:::-;;28076:56;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27526:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27705:69;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14989:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34446:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29449:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32425:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16631:293;;;;;;;;;;;;;:::i;:::-;;29884:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27352:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16180:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27262:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34922:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34580:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34800:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28033:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16345:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30059:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27781:70;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34222:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15928:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35105:103;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35192:8:::1;35175:14;;:25;;;;;;;;;;;;;;;;;;35105:103:::0;:::o;34340:98::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34424:6:::1;34414:7;:16;;;;34340:98:::0;:::o;29358:83::-;29395:13;29428:5;29421:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29358:83;:::o;31709:161::-;31784:4;31801:39;31810:12;:10;:12::i;:::-;31824:7;31833:6;31801:8;:39::i;:::-;31858:4;31851:11;;31709:161;;;;:::o;32704:87::-;32746:7;32773:10;;32766:17;;32704:87;:::o;27860:44::-;;;:::o;29635:95::-;29688:7;29715;;29708:14;;29635:95;:::o;31878:313::-;31976:4;31993:36;32003:6;32011:9;32022:6;31993:9;:36::i;:::-;32040:121;32049:6;32057:12;:10;:12::i;:::-;32071:89;32109:6;32071:89;;;;;;;;;;;;;;;;;:11;:19;32083:6;32071:19;;;;;;;;;;;;;;;:33;32091:12;:10;:12::i;:::-;32071:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32040:8;:121::i;:::-;32179:4;32172:11;;31878:313;;;;;:::o;33247:253::-;33313:7;33352;;33341;:18;;33333:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33417:19;33440:10;:8;:10::i;:::-;33417:33;;33468:24;33480:11;33468:7;:11;;:24;;;;:::i;:::-;33461:31;;;33247:253;;;:::o;29544:83::-;29585:5;29610:9;;;;;;;;;;;29603:16;;29544:83;:::o;34694:98::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34778:6:::1;34768:7;:16;;;;34694:98:::0;:::o;32199:218::-;32287:4;32304:83;32313:12;:10;:12::i;:::-;32327:7;32336:50;32375:10;32336:11;:25;32348:12;:10;:12::i;:::-;32336:25;;;;;;;;;;;;;;;:34;32362:7;32336:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32304:8;:83::i;:::-;32405:4;32398:11;;32199:218;;;;:::o;27613:79::-;;;;;;;;;;;;;:::o;27078:26::-;;;;:::o;34103:111::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34202:4:::1;34172:18;:27;34191:7;34172:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34103:111:::0;:::o;32799:440::-;32889:7;32928;;32917;:18;;32909:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32987:17;32982:250;;33022:15;33048:19;33059:7;33048:10;:19::i;:::-;33021:46;;;;;;;;;33089:7;33082:14;;;;;32982:250;33131:23;33164:19;33175:7;33164:10;:19::i;:::-;33129:54;;;;;;;;;33205:15;33198:22;;;32799:440;;;;;:::o;27911:38::-;;;:::o;27986:40::-;;;;;;;;;;;;;:::o;39175:123::-;39239:4;39263:18;:27;39282:7;39263:27;;;;;;;;;;;;;;;;;;;;;;;;;39256:34;;39175:123;;;:::o;27161:32::-;;;;:::o;29738:138::-;29804:7;29831:37;29851:7;:16;29859:7;29851:16;;;;;;;;;;;;;;;;29831:19;:37::i;:::-;29824:44;;29738:138;;;:::o;27439:80::-;;;;;;;;;;;;;:::o;15625:148::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15732:1:::1;15695:40;;15716:6;::::0;::::1;;;;;;;;15695:40;;;;;;;;;;;;15763:1;15746:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15625:148::o:0;28076:56::-;;;;:::o;27526:80::-;;;;;;;;;;;;;:::o;27705:69::-;;;;;;;;;;;;;:::o;14989:79::-;15027:7;15054:6;;;;;;;;;;;15047:13;;14989:79;:::o;34446:122::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34548:12:::1;34532:13;:28;;;;34446:122:::0;:::o;29449:87::-;29488:13;29521:7;29514:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29449:87;:::o;32425:269::-;32518:4;32535:129;32544:12;:10;:12::i;:::-;32558:7;32567:96;32606:15;32567:96;;;;;;;;;;;;;;;;;:11;:25;32579:12;:10;:12::i;:::-;32567:25;;;;;;;;;;;;;;;:34;32593:7;32567:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32535:8;:129::i;:::-;32682:4;32675:11;;32425:269;;;;:::o;16631:293::-;16701:10;16683:28;;:14;;;;;;;;;;;:28;;;16675:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:9;;16770:3;:15;16762:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16867:14;;;;;;;;;;;16838:44;;16859:6;;;;;;;;;;16838:44;;;;;;;;;;;;16902:14;;;;;;;;;;;16893:6;;:23;;;;;;;;;;;;;;;;;;16631:293::o;29884:167::-;29962:4;29979:42;29989:12;:10;:12::i;:::-;30003:9;30014:6;29979:9;:42::i;:::-;30039:4;30032:11;;29884:167;;;;:::o;27352:26::-;;;;:::o;16180:89::-;16225:7;16252:9;;16245:16;;16180:89;:::o;27262:27::-;;;;:::o;34922:171::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35023:8:::1;34999:21;;:32;;;;;;;;;;;;;;;;;;35047:38;35076:8;35047:38;;;;;;;;;;;;;;;;;;;;34922:171:::0;:::o;34580:102::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34667:7:::1;34656:8;:18;;;;34580:102:::0;:::o;34800:114::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34894:12:::1;34879;:27;;;;34800:114:::0;:::o;28033:34::-;;;;;;;;;;;;;:::o;16345:214::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16426:6:::1;::::0;::::1;;;;;;;;16409:14;;:23;;;;;;;;;;;;;;;;;;16460:1;16443:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16491:4;16485:3;:10;16473:9;:22;;;;16548:1;16511:40;;16532:6;::::0;::::1;;;;;;;;16511:40;;;;;;;;;;;;16345:214:::0;:::o;30059:143::-;30140:7;30167:11;:18;30179:5;30167:18;;;;;;;;;;;;;;;:27;30186:7;30167:27;;;;;;;;;;;;;;;;30160:34;;30059:143;;;;:::o;27781:70::-;;;;;;;;;;;;;:::o;34222:110::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34319:5:::1;34289:18;:27;34308:7;34289:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34222:110:::0;:::o;15928:244::-;15211:12;:10;:12::i;:::-;15201:22;;:6;;;;;;;;;;:22;;;15193:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16037:1:::1;16017:22;;:8;:22;;;;16009:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16127:8;16098:38;;16119:6;::::0;::::1;;;;;;;;16098:38;;;;;;;;;;;;16156:8;16147:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;15928:244:::0;:::o;7395:106::-;7448:15;7483:10;7476:17;;7395:106;:::o;39306:337::-;39416:1;39399:19;;:5;:19;;;;39391:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39497:1;39478:21;;:7;:21;;;;39470:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39581:6;39551:11;:18;39563:5;39551:18;;;;;;;;;;;;;;;:27;39570:7;39551:27;;;;;;;;;;;;;;;:36;;;;39619:7;39603:32;;39612:5;39603:32;;;39628:6;39603:32;;;;;;;;;;;;;;;;;;39306:337;;;:::o;39651:1574::-;39789:1;39773:18;;:4;:18;;;;39765:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39866:1;39852:16;;:2;:16;;;;39844:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39936:1;39927:6;:10;39919:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40005:11;;;;;;;;;;;39997:19;;:4;:19;;;;:40;;;;;40026:11;;;;;;;;;;;40020:17;;:2;:17;;;;39997:40;39994:147;;;40072:12;;40062:6;:22;;40054:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39994:147;40217:28;40248:24;40266:4;40248:9;:24::i;:::-;40217:55;;40312:12;;40288:20;:36;40285:112;;40373:12;;40350:35;;40285:112;40409:24;40460:29;;40436:20;:53;;40409:80;;40518:19;:53;;;;;40555:16;;;;;;;;;;;40554:17;40518:53;:89;;;;;40594:13;40588:19;;:2;:19;;;40518:89;:127;;;;;40624:21;;;;;;;;;;;40518:127;40500:316;;;40695:29;;40672:52;;40768:36;40783:20;40768:14;:36::i;:::-;40500:316;40889:12;40904:4;40889:19;;41008:18;:24;41027:4;41008:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;41036:18;:22;41055:2;41036:22;;;;;;;;;;;;;;;;;;;;;;;;;41008:50;41005:96;;;41084:5;41074:15;;41005:96;41179:38;41194:4;41199:2;41202:6;41209:7;41179:14;:38::i;:::-;39651:1574;;;;;;:::o;1232:192::-;1318:7;1351:1;1346;:6;;1354:12;1338:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1378:9;1394:1;1390;:5;1378:17;;1415:1;1408:8;;;1232:192;;;;;:::o;37223:163::-;37264:7;37285:15;37302;37321:19;:17;:19::i;:::-;37284:56;;;;37358:20;37370:7;37358;:11;;:20;;;;:::i;:::-;37351:27;;;;37223:163;:::o;2630:132::-;2688:7;2715:39;2719:1;2722;2715:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2708:46;;2630:132;;;;:::o;329:181::-;387:7;407:9;423:1;419;:5;407:17;;448:1;443;:6;;435:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;501:1;494:8;;;329:181;;;;:::o;35628:467::-;35687:7;35696;35705;35714;35723;35732;35741;35750;35771:23;35796:17;;:::i;:::-;35817:20;35829:7;35817:11;:20::i;:::-;35770:67;;;;35863:7;35848:4;:12;;:22;;;;;35882:15;35899:23;35924:12;35940:29;35952:4;35958:10;:8;:10::i;:::-;35940:11;:29::i;:::-;35881:88;;;;;;35988:7;35997:15;36014:4;36020:15;36037:4;:9;;;36048:4;:15;;;36065:4;:10;;;36077:4;:9;;;35980:107;;;;;;;;;;;;;;;;;;;;;35628:467;;;;;;;;;:::o;41233:924::-;28528:4;28509:16;;:23;;;;;;;;;;;;;;;;;;41318:13:::1;41334:63;41370:26;41388:7;;41370:13;;:17;;:26;;;;:::i;:::-;41334:31;41351:13;;41342:3;41334:16;;:31;;;;:::i;:::-;:35;;:63;;;;:::i;:::-;41318:79;;41408:17;41428:40;41464:3;41428:31;41453:5;41428:20;:24;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;41408:60;;41479:17;41499:35;41524:9;41499:20;:24;;:35;;;;:::i;:::-;41479:55;;41545:12;41560:16;41574:1;41560:9;:13;;:16;;;;:::i;:::-;41545:31;;41587:17;41607:19;41621:4;41607:9;:13;;:19;;;;:::i;:::-;41587:39;;41639:22;41664:21;41639:46;;41730:22;41747:4;41730:16;:22::i;:::-;41883:18;41904:41;41930:14;41904:21;:25;;:41;;;;:::i;:::-;41883:62;;41995:35;42008:9;42019:10;41995:12;:35::i;:::-;42051:37;42078:9;42051:26;:37::i;:::-;42106:43;42121:4;42127:10;42139:9;42106:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28543:1;;;;;;;28574:5:::0;28555:16;;:24;;;;;;;;;;;;;;;;;;41233:924;:::o;30804:288::-;30915:7;30911:54;;30939:14;:12;:14::i;:::-;30911:54;30975:44;30993:6;31001:9;31012:6;30975:17;:44::i;:::-;31034:7;31030:55;;31058:15;:13;:15::i;:::-;31030:55;30804:288;;;;:::o;37394:256::-;37444:7;37453;37473:15;37491:7;;37473:25;;37509:15;37527:7;;37509:25;;37559:20;37571:7;;37559;;:11;;:20;;;;:::i;:::-;37549:7;:30;37545:61;;;37589:7;;37598;;37581:25;;;;;;;;37545:61;37625:7;37634;37617:25;;;;;;37394:256;;;:::o;3258:278::-;3344:7;3376:1;3372;:5;3379:12;3364:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3403:9;3419:1;3415;:5;;;;;;3403:17;;3527:1;3520:8;;;3258:278;;;;;:::o;36103:515::-;36163:7;36172:12;;:::i;:::-;36197;36212:24;36228:7;36212:15;:24::i;:::-;36197:39;;36247:18;36268:30;36290:7;36268:21;:30::i;:::-;36247:51;;36309:13;36325:25;36342:7;36325:16;:25::i;:::-;36309:41;;36361:12;36376:24;36392:7;36376:15;:24::i;:::-;36361:39;;36411:23;36437:44;36475:5;36437:33;36459:10;36437:17;36449:4;36437:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;36411:70;;36510:25;36530:4;36510:15;:19;;:25;;;;:::i;:::-;36492:43;;36554:15;36571:38;;;;;;;;36577:1;36571:38;;;;36579:4;36571:38;;;;36585:10;36571:38;;;;36597:5;36571:38;;;;36604:4;36571:38;;;36546:64;;;;;;;;;36103:515;;;:::o;36626:589::-;36710:7;36719;36728;36748:15;36766:30;36784:11;36766:5;:13;;;:17;;:30;;;;:::i;:::-;36748:48;;36807:12;36822:27;36837:11;36822:5;:10;;;:14;;:27;;;;:::i;:::-;36807:42;;36860:18;36881:33;36902:11;36881:5;:16;;;:20;;:33;;;;:::i;:::-;36860:54;;36925:13;36941:28;36957:11;36941:5;:11;;;:15;;:28;;;;:::i;:::-;36925:44;;36980:12;36995:27;37010:11;36995:5;:10;;;:14;;:27;;;;:::i;:::-;36980:42;;37033:23;37059:44;37097:5;37059:33;37081:10;37059:17;37071:4;37059:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;37033:70;;37132:25;37152:4;37132:15;:19;;:25;;;;:::i;:::-;37114:43;;37176:7;37185:15;37202:4;37168:39;;;;;;;;;;;;36626:589;;;;;:::o;1683:471::-;1741:7;1991:1;1986;:6;1982:47;;;2016:1;2009:8;;;;1982:47;2041:9;2057:1;2053;:5;2041:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2145:1;2138:8;;;1683:471;;;;;:::o;793:136::-;851:7;878:43;882:1;885;878:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;871:50;;793:136;;;;:::o;42165:598::-;42301:21;42339:1;42325:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42301:40;;42370:4;42352;42357:1;42352:7;;;;;;;;;;;;;:23;;;;;;;;;;;42396:15;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42386:4;42391:1;42386:7;;;;;;;;;;;;;:31;;;;;;;;;;;42430:62;42447:4;42462:15;42480:11;42430:8;:62::i;:::-;42531:15;:66;;;42612:11;42638:1;42682:4;42709;42729:15;42531:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42165:598;;:::o;30210:513::-;30358:62;30375:4;30390:15;30408:11;30358:8;:62::i;:::-;30463:15;:31;;;30502:9;30535:4;30555:11;30581:1;30624;30667:7;:5;:7::i;:::-;30689:15;30463:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30210:513;;:::o;42775:844::-;42869:1;42855:11;:15;42851:759;;;42887:21;42925:1;42911:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42887:40;;42960:4;42942;42947:1;42942:7;;;;;;;;;;;;;:23;;;;;;;;;;;42990:15;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42980:4;42985:1;42980:7;;;;;;;;;;;;;:31;;;;;;;;;;;43036:10;;;;;;;;;;;43026:4;43031:1;43026:7;;;;;;;;;;;;;:20;;;;;;;;;;;43075:58;43092:4;43107:15;43125:7;;43075:8;:58::i;:::-;43184:15;:69;;;43272:11;43302:1;43361:4;43392;43416:15;43184:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43461:17;43488:10;;;;;;;;;;;43481:28;;;43518:4;43481:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43461:63;;43546:10;;;;;;;;;;;43539:27;;;43575:10;;;;;;;;;;;43588:9;43539:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42851:759;;;42775:844;:::o;38575:385::-;38632:1;38621:7;;:12;:34;;;;;38654:1;38637:13;;:18;38621:34;:51;;;;;38671:1;38659:8;;:13;38621:51;:66;;;;;38686:1;38676:7;;:11;38621:66;38618:78;;;38689:7;;38618:78;38726:7;;38708:15;:25;;;;38768:13;;38744:21;:37;;;;38811:8;;38792:16;:27;;;;38848:7;;38830:15;:25;;;;38878:1;38868:7;:11;;;;38906:1;38890:13;:17;;;;38929:1;38918:8;:12;;;;38951:1;38941:7;:11;;;;38575:385;:::o;31100:601::-;31199:15;31216:23;31241:12;31255:23;31280:12;31294:18;31314:13;31329:12;31345:19;31356:7;31345:10;:19::i;:::-;31198:166;;;;;;;;;;;;;;;;31393:28;31413:7;31393;:15;31401:6;31393:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31375:7;:15;31383:6;31375:15;;;;;;;;;;;;;;;:46;;;;31453:39;31476:15;31453:7;:18;31461:9;31453:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31432:7;:18;31440:9;31432:18;;;;;;;;;;;;;;;:60;;;;31503:26;31518:10;31503:14;:26::i;:::-;31540:24;31550:6;31558:5;31540:9;:24::i;:::-;31575:14;31584:4;31575:8;:14::i;:::-;31600:23;31612:4;31618;31600:11;:23::i;:::-;31666:9;31649:44;;31658:6;31649:44;;;31677:15;31649:44;;;;;;;;;;;;;;;;;;31100:601;;;;;;;;;;;:::o;38968:199::-;39022:15;;39012:7;:25;;;;39064:21;;39048:13;:37;;;;39107:16;;39096:8;:27;;;;39144:15;;39134:7;:25;;;;38968:199::o;37903:154::-;37967:7;37994:55;38033:5;37994:20;38006:7;;37994;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;37987:62;;37903:154;;;:::o;38065:166::-;38135:7;38162:61;38207:5;38162:26;38174:13;;38162:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38155:68;;38065:166;;;:::o;38239:156::-;38304:7;38331:56;38371:5;38331:21;38343:8;;38331:7;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;38324:63;;38239:156;;;:::o;38407:154::-;38471:7;38498:55;38537:5;38498:20;38510:7;;38498;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;38491:62;;38407:154;;;:::o;37658:237::-;37721:19;37744:10;:8;:10::i;:::-;37721:33;;37765:18;37786:27;37801:11;37786:10;:14;;:27;;;;:::i;:::-;37765:48;;37849:38;37876:10;37849:7;:22;37865:4;37849:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37824:7;:22;37840:4;37824:22;;;;;;;;;;;;;;;:63;;;;37658:237;;;:::o;33508:315::-;33576:19;33599:10;:8;:10::i;:::-;33576:33;;33620:13;33636:22;33646:11;33636:5;:9;;:22;;;;:::i;:::-;33620:38;;33692:31;33717:5;33692:7;:20;33700:11;;;;;;;;;;;33692:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;33669:7;:20;33677:11;;;;;;;;;;;33669:20;;;;;;;;;;;;;;;:54;;;;33745:1;33737:5;:9;33734:82;;;33785:11;;;;;;;;;;;33768:36;;33777:6;33768:36;;;33798:5;33768:36;;;;;;;;;;;;;;;;;;33734:82;33508:315;;;;:::o;33835:256::-;33886:19;33909:10;:8;:10::i;:::-;33886:33;;33930:12;33945:21;33954:11;33945:4;:8;;:21;;;;:::i;:::-;33930:36;;33981:14;;;;;;;;;;;33977:97;;34033:29;34057:4;34033:7;:19;34041:10;;;;;;;;;;;34033:19;;;;;;;;;;;;;;;;:23;;:29;;;;:::i;:::-;34011:7;:19;34019:10;;;;;;;;;;;34011:19;;;;;;;;;;;;;;;:51;;;;33977:97;33835:256;;;:::o;35315:147::-;35393:17;35405:4;35393:7;;:11;;:17;;;;:::i;:::-;35383:7;:27;;;;35434:20;35449:4;35434:10;;:14;;:20;;;;:::i;:::-;35421:10;:33;;;;35315:147;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://c8111a30fb358a0847188d04ac575296dbb8226f5921985ddaede77bea54e943
Block Transaction Gas Used Reward
Age Block Fee Address Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading