Overview
Max Total Supply
100,000,000,000,000,000 WOOINU
Holders
446 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
89,837,129,005,989.615091149 WOOINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
wooInu
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-06-02 */ /* ███╗ ██╗ █████╗ ████████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗ ██╗███╗ ██╗██╗ ██╗ ████╗ ██║██╔══██╗╚══██╔══╝██║ ██║██╔══██╗██╔════╝ ██╔══██╗██╔═══██╗╚██╗ ██╔╝ ██║████╗ ██║██║ ██║ ██╔██╗ ██║███████║ ██║ ██║ ██║██████╔╝█████╗ ██████╔╝██║ ██║ ╚████╔╝ ██║██╔██╗ ██║██║ ██║ ██║╚██╗██║██╔══██║ ██║ ██║ ██║██╔══██╗██╔══╝ ██╔══██╗██║ ██║ ╚██╔╝ ██║██║╚██╗██║██║ ██║ ██║ ╚████║██║ ██║ ██║ ╚██████╔╝██║ ██║███████╗ ██████╔╝╚██████╔╝ ██║ ██║██║ ╚████║╚██████╔╝ ╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ Total Supply: 100,000,000,000,000 WOOINU Total fee: 7% ├ Reflected to holders: 3% of every transfer ├ Added to liquidity: 2% of every transfer ├ Marketing fee: 1% of every transfer └ Burned: 1% of every transfer */ //SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.12; 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; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } 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; } } 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); } } } } 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; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); 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; } interface IUniswapV2Pair { 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 initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() 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(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { 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; } // Contract implementation contract wooInu 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; mapping (address => bool) private _isExcluded; // excluded from reward address[] private _excluded; mapping (address => bool) private _isBlackListedBot; address[] private _blackListedBots; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100_000_000_000_000_000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = 'Nature Boy Inu'; string private _symbol = 'WOOINU'; uint8 private _decimals = 9; uint256 private _taxFee = 4; // 4% reflection fee for every holder (incl. burn address) uint256 private _marketingFee = 1; // 1% marketing uint256 private _liquidityFee = 2; // 2% into liquidity uint256 private _previousTaxFee = _taxFee; uint256 private _previousMarketingFee = _marketingFee; uint256 private _previousLiquidityFee = _liquidityFee; address payable private _marketingWalletAddress = payable(0x887E8c08376Fcc57bAD00af3906Bb3b8e3f5578a); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify = false; bool public swapAndLiquifyEnabled = true; // We will set a minimum amount of tokens to be swapped uint256 private _numTokensSellToAddToLiquidity = 1000000000000 * 10**9; 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[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // UniswapV2 for Ethereum network // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; // Exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_marketingWalletAddress] = true; // BLACKLIST _isBlackListedBot[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true; _blackListedBots.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)); _isBlackListedBot[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true; _blackListedBots.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)); _isBlackListedBot[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true; _blackListedBots.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)); _isBlackListedBot[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true; _blackListedBots.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)); _isBlackListedBot[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true; _blackListedBots.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)); _isBlackListedBot[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true; _blackListedBots.push(address(0xDC81a3450817A58D00f45C86d0368290088db848)); _isBlackListedBot[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true; _blackListedBots.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)); _isBlackListedBot[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true; _blackListedBots.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679)); emit Transfer(address(0), _msgSender(), _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) { if (_isExcluded[account]) return _tOwned[account]; 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 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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function setExcludeFromFee(address account, bool excluded) external onlyOwner() { _isExcludedFromFee[account] = excluded; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } 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 excludeFromReward(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function addBotToBlackList(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.'); require(!_isBlackListedBot[account], "Account is already blacklisted"); _isBlackListedBot[account] = true; _blackListedBots.push(account); } function removeBotFromBlackList(address account) external onlyOwner() { require(_isBlackListedBot[account], "Account is not blacklisted"); for (uint256 i = 0; i < _blackListedBots.length; i++) { if (_blackListedBots[i] == account) { _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1]; _isBlackListedBot[account] = false; _blackListedBots.pop(); break; } } } function removeAllFee() private { if(_taxFee == 0 && _marketingFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _marketingFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; _liquidityFee = _previousLiquidityFee; } 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 sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isBlackListedBot[sender], "You have no power here!"); require(!_isBlackListedBot[recipient], "You have no power here!"); require(!_isBlackListedBot[tx.origin], "You have no power here!"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= _numTokensSellToAddToLiquidity; if (!inSwapAndLiquify && swapAndLiquifyEnabled && overMinTokenBalance && sender != uniswapV2Pair) { 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[sender] || _isExcludedFromFee[recipient]){ takeFee = false; } //transfer amount, it will take tax and charity fee _tokenTransfer(sender, recipient, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 toMarketing = contractTokenBalance.mul(_marketingFee).div(_marketingFee.add(_liquidityFee)); uint256 toLiquify = contractTokenBalance.sub(toMarketing); // split the contract balance into halves uint256 half = toLiquify.div(2); uint256 otherHalf = toLiquify.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH uint256 toSwapForEth = half.add(toMarketing); swapTokensForEth(toSwapForEth); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 fromSwap = address(this).balance.sub(initialBalance); uint256 newBalance = fromSwap.mul(half).div(toSwapForEth); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); sendETHToMarketing(fromSwap.sub(newBalance)); } 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.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } 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 ); } function sendETHToMarketing(uint256 amount) private { _marketingWalletAddress.transfer(amount); } // We are exposing these functions to be able to manual swap and send // in case the token is highly valued and 5M becomes too much function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualSend() public onlyOwner() { uint256 contractETHBalance = address(this).balance; sendETHToMarketing(contractETHBalance); } function setSwapAndLiquifyEnabled(bool _swapAndLiquifyEnabled) external onlyOwner(){ swapAndLiquifyEnabled = _swapAndLiquifyEnabled; } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _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 tMarketingLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketingLiquidity(tMarketingLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeMarketingLiquidity(uint256 tMarketingLiquidity) private { uint256 currentRate = _getRate(); uint256 rMarketingLiquidity = tMarketingLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingLiquidity); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } //to recieve ETH from uniswapV2Router when swapping receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingLiquidityFee) = _getTValues(tAmount, _taxFee, _marketingFee.add(_liquidityFee)); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingLiquidityFee); } function _getTValues(uint256 tAmount, uint256 taxFee, uint256 marketingLiquidityFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tMarketingLiquidityFee = tAmount.mul(marketingLiquidityFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(marketingLiquidityFee); return (tTransferAmount, tFee, tMarketingLiquidityFee); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); 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; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _getTaxFee() private view returns(uint256) { return _taxFee; } function _getETHBalance() public view returns(uint256 balance) { return address(this).balance; } function _setTaxFee(uint256 taxFee) external onlyOwner() { require(taxFee >= 1 && taxFee <= 49, 'taxFee should be in 1 - 49'); _taxFee = taxFee; } function _setMarketingFee(uint256 marketingFee) external onlyOwner() { require(marketingFee >= 1 && marketingFee <= 49, 'marketingFee should be in 1 - 11'); _marketingFee = marketingFee; } function _setLiquidityFee(uint256 liquidityFee) external onlyOwner() { require(liquidityFee >= 1 && liquidityFee <= 49, 'liquidityFee should be in 1 - 11'); _liquidityFee = liquidityFee; } function _setNumTokensSellToAddToLiquidity(uint256 numTokensSellToAddToLiquidity) external onlyOwner() { require(numTokensSellToAddToLiquidity >= 10**9 , 'numTokensSellToAddToLiquidity should be greater than total 1e9'); _numTokensSellToAddToLiquidity = numTokensSellToAddToLiquidity; } function recoverTokens(uint256 tokenAmount) public virtual onlyOwner() { _approve(address(this), owner(), tokenAmount); _transfer(address(this), owner(), tokenAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"_setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"_setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokensSellToAddToLiquidity","type":"uint256"}],"name":"_setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","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":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapAndLiquifyEnabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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 IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526a52b7d2dcc80cd2e4000000600b55600b54600019816200002157fe5b0660001903600c556040518060400160405280600e81526020017f4e617475726520426f7920496e75000000000000000000000000000000000000815250600e90805190602001906200007692919062000dfe565b506040518060400160405280600681526020017f574f4f494e550000000000000000000000000000000000000000000000000000815250600f9080519060200190620000c492919062000dfe565b506009601060006101000a81548160ff021916908360ff16021790555060046011556001601255600260135560115460145560125460155560135460165573887e8c08376fcc57bad00af3906bb3b8e3f5578a601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601760146101000a81548160ff0219169083151502179055506001601760156101000a81548160ff021916908315150217905550683635c9adc5dea00000601855348015620001a757600080fd5b506000620001ba62000dcd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200026f62000dcd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030d57600080fd5b505afa15801562000322573d6000803e3d6000fd5b505050506040513d60208110156200033957600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ad57600080fd5b505afa158015620003c2573d6000803e3d6000fd5b505050506040513d6020811015620003d957600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200045457600080fd5b505af115801562000469573d6000803e3d6000fd5b505050506040513d60208110156200048057600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250506001600660006200051462000dd560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600073e031b36b53e53a292a20c5f08fd1658cddf74fce73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73e031b36b53e53a292a20c5f08fd1658cddf74fce9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073e516bdee55b0b4e9bacaf6285130de15589b134573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73e516bdee55b0b4e9bacaf6285130de15589b13459080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073a1cec245c456dd1bd9f2815a6955fef44eb4191b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73a1cec245c456dd1bd9f2815a6955fef44eb4191b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf959080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073fe76f05dc59fec04184fa0245ad0c3cf9a57b96473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73fe76f05dc59fec04184fa0245ad0c3cf9a57b9649080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016009600073dc81a3450817a58d00f45c86d0368290088db84873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a73dc81a3450817a58d00f45c86d0368290088db8489080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960007345fd07c63e5c316540f14b2002b085aee78e388173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a7345fd07c63e5c316540f14b2002b085aee78e38819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960007327f9adb26d532a41d97e00206114e429ad58c67973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a7327f9adb26d532a41d97e00206114e429ad58c6799080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000d5f62000dcd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a35062000ea4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000e4157805160ff191683800117855562000e72565b8280016001018555821562000e72579182015b8281111562000e7157825182559160200191906001019062000e54565b5b50905062000e81919062000e85565b5090565b5b8082111562000ea057600081600090555060010162000e86565b5090565b60805160601c60a05160601c61578362000eec60003980611b6652806137ba525080610e425280613bfa5280613ce65280613d0d52806147ff528061482652506157836000f3fe60806040526004361061021e5760003560e01c806352390c0211610123578063a457c2d7116100ab578063c49b9a801161006f578063c49b9a8014610c21578063dd62ed3e14610c5e578063f2fde38b14610ce3578063f429389014610d34578063f815a84214610d4b57610225565b8063a457c2d714610a6c578063a52fe9bb14610add578063a9059cbb14610b18578063af9549e014610b89578063bcd6d44614610be657610225565b8063715018a6116100f2578063715018a6146108cc5780637ded4d6a146108e357806388f82020146109345780638da5cb5b1461099b57806395d89b41146109dc57610225565b806352390c02146107745780635342acb4146107c55780635880b8731461082c57806370a082311461086757610225565b8063313ce567116101a65780634303443d116101755780634303443d146106435780634549b0391461069457806349bd5a5e146106ef5780634a74bb021461073057806351bc3c851461075d57610225565b8063313ce567146105185780633685d4191461054657806339509351146105975780633bd5d1731461060857610225565b806318160ddd116101ed57806318160ddd146103975780631decaadc146103c257806323b872dd146103fd5780632d8381191461048e57806330599fc5146104dd57610225565b806306fdde031461022a578063095ea7b3146102ba57806313114a9d1461032b5780631694505e1461035657610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610d76565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c657600080fd5b50610313600480360360408110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e18565b60405180821515815260200191505060405180910390f35b34801561033757600080fd5b50610340610e36565b6040518082815260200191505060405180910390f35b34801561036257600080fd5b5061036b610e40565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103a357600080fd5b506103ac610e64565b6040518082815260200191505060405180910390f35b3480156103ce57600080fd5b506103fb600480360360208110156103e557600080fd5b8101908080359060200190929190505050610e6e565b005b34801561040957600080fd5b506104766004803603606081101561042057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f9d565b60405180821515815260200191505060405180910390f35b34801561049a57600080fd5b506104c7600480360360208110156104b157600080fd5b8101908080359060200190929190505050611076565b6040518082815260200191505060405180910390f35b3480156104e957600080fd5b506105166004803603602081101561050057600080fd5b81019080803590602001909291905050506110fa565b005b34801561052457600080fd5b5061052d6111e9565b604051808260ff16815260200191505060405180910390f35b34801561055257600080fd5b506105956004803603602081101561056957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611200565b005b3480156105a357600080fd5b506105f0600480360360408110156105ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158a565b60405180821515815260200191505060405180910390f35b34801561061457600080fd5b506106416004803603602081101561062b57600080fd5b810190808035906020019092919050505061163d565b005b34801561064f57600080fd5b506106926004803603602081101561066657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117ce565b005b3480156106a057600080fd5b506106d9600480360360408110156106b757600080fd5b8101908080359060200190929190803515159060200190929190505050611aad565b6040518082815260200191505060405180910390f35b3480156106fb57600080fd5b50610704611b64565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561073c57600080fd5b50610745611b88565b60405180821515815260200191505060405180910390f35b34801561076957600080fd5b50610772611b9b565b005b34801561078057600080fd5b506107c36004803603602081101561079757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7c565b005b3480156107d157600080fd5b50610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061202f565b60405180821515815260200191505060405180910390f35b34801561083857600080fd5b506108656004803603602081101561084f57600080fd5b8101908080359060200190929190505050612085565b005b34801561087357600080fd5b506108b66004803603602081101561088a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121db565b6040518082815260200191505060405180910390f35b3480156108d857600080fd5b506108e16122c6565b005b3480156108ef57600080fd5b506109326004803603602081101561090657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061244c565b005b34801561094057600080fd5b506109836004803603602081101561095757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612791565b60405180821515815260200191505060405180910390f35b3480156109a757600080fd5b506109b06127e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e857600080fd5b506109f1612810565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a31578082015181840152602081019050610a16565b50505050905090810190601f168015610a5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a7857600080fd5b50610ac560048036036040811015610a8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128b2565b60405180821515815260200191505060405180910390f35b348015610ae957600080fd5b50610b1660048036036020811015610b0057600080fd5b810190808035906020019092919050505061297f565b005b348015610b2457600080fd5b50610b7160048036036040811015610b3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ad5565b60405180821515815260200191505060405180910390f35b348015610b9557600080fd5b50610be460048036036040811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612af3565b005b348015610bf257600080fd5b50610c1f60048036036020811015610c0957600080fd5b8101908080359060200190929190505050612c16565b005b348015610c2d57600080fd5b50610c5c60048036036020811015610c4457600080fd5b81019080803515159060200190929190505050612d6c565b005b348015610c6a57600080fd5b50610ccd60048036036040811015610c8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e51565b6040518082815260200191505060405180910390f35b348015610cef57600080fd5b50610d3260048036036020811015610d0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ed8565b005b348015610d4057600080fd5b50610d496130e3565b005b348015610d5757600080fd5b50610d606131bc565b6040518082815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b5050505050905090565b6000610e2c610e256131c4565b84846131cc565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b610e766131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061569d603e913960400191505060405180910390fd5b8060188190555050565b6000610faa8484846133c3565b61106b84610fb66131c4565b611066856040518060600160405280602881526020016155df60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061101c6131c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e29092919063ffffffff16565b6131cc565b600190509392505050565b6000600c548211156110d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061554c602a913960400191505060405180910390fd5b60006110dd6139a2565b90506110f281846139cd90919063ffffffff16565b915050919050565b6111026131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6111d4306111ce6127e7565b836131cc565b6111e6306111e06127e7565b836133c3565b50565b6000601060009054906101000a900460ff16905090565b6112086131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611586578173ffffffffffffffffffffffffffffffffffffffff16600882815481106113bb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115795760086001600880549050038154811061141757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061144f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061153f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611586565b808060010191505061138a565b5050565b60006116336115976131c4565b8461162e85600560006115a86131c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b6131cc565b6001905092915050565b60006116476131c4565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b60006116f783613a9f565b5050505050905061175081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117a881600c54613b1a90919063ffffffff16565b600c819055506117c383600d54613a1790919063ffffffff16565b600d81905550505050565b6117d66131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156306024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54831115611b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611b47576000611b3784613a9f565b5050505050905080915050611b5e565b6000611b5284613a9f565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601760159054906101000a900460ff1681565b611ba36131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611c6e306121db565b9050611c7981613b64565b50565b611c846131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156db6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f7157611f2d600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611076565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61208d6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561215f575060318111155b6121d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060118190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561227657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506122c1565b6122be600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611076565b90505b919050565b6122ce6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6124546131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612514576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a8054905081101561278d578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061260757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561278057600a6001600a80549050038154811061266357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061269b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061274657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561278d565b80806001019150506125d6565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128a85780601f1061287d576101008083540402835291602001916128a8565b820191906000526020600020905b81548152906001019060200180831161288b57829003601f168201915b5050505050905090565b60006129756128bf6131c4565b846129708560405180606001604052806025815260200161572960259139600560006128e96131c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e29092919063ffffffff16565b6131cc565b6001905092915050565b6129876131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612a59575060318111155b612acb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060128190555050565b6000612ae9612ae26131c4565b84846133c3565b6001905092915050565b612afb6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612c1e6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612cf0575060318111155b612d62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b612d746131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760156101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ee06131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155766026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6130eb6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506131b981613e12565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613252576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156796024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061559c6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806156546025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155296023913960400191505060405180910390fd5b60008111613528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806156076029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b6000613773306121db565b905060006018548210159050601760149054906101000a900460ff161580156137a85750601760159054906101000a900460ff165b80156137b15750805b801561380957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561381d57601854915061381c82613e7e565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138c45750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138ce57600090505b6138da86868684614017565b505050505050565b600083831115829061398f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613954578082015181840152602081019050613939565b50505050905090810190601f1680156139815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006139af614328565b915091506139c681836139cd90919063ffffffff16565b9250505090565b6000613a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145b9565b905092915050565b600080828401905083811015613a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613ad08a601154613acb601354601254613a1790919063ffffffff16565b61467f565b9250925092506000613ae06139a2565b90506000806000613af28e8786614715565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000613b5c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506138e2565b905092915050565b6060600267ffffffffffffffff81118015613b7e57600080fd5b50604051908082528060200260200182016040528015613bad5781602001602082028036833780820191505090505b5090503081600081518110613bbe57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5e57600080fd5b505afa158015613c72573d6000803e3d6000fd5b505050506040513d6020811015613c8857600080fd5b810190808051906020019092919050505081600181518110613ca657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d0b307f0000000000000000000000000000000000000000000000000000000000000000846131cc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613dcd578082015181840152602081019050613db2565b505050509050019650505050505050600060405180830381600087803b158015613df657600080fd5b505af1158015613e0a573d6000803e3d6000fd5b505050505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613e7a573d6000803e3d6000fd5b5050565b6001601760146101000a81548160ff0219169083151502179055506000613ed8613eb5601354601254613a1790919063ffffffff16565b613eca6012548561477390919063ffffffff16565b6139cd90919063ffffffff16565b90506000613eef8284613b1a90919063ffffffff16565b90506000613f076002836139cd90919063ffffffff16565b90506000613f1e8284613b1a90919063ffffffff16565b905060004790506000613f3a8685613a1790919063ffffffff16565b9050613f4581613b64565b6000613f5a8347613b1a90919063ffffffff16565b90506000613f8383613f75888561477390919063ffffffff16565b6139cd90919063ffffffff16565b9050613f8f85826147f9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a1613ff1613fec8284613b1a90919063ffffffff16565b613e12565b50505050505050506000601760146101000a81548160ff02191690831515021790555050565b806140255761402461494a565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156140c85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156140dd576140d88484846149ac565b614314565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156141805750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561419557614190848484614c0c565b614313565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156142395750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561424e57614249848484614e6c565b614312565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156142f05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561430557614300848484615037565b614311565b614310848484614e6c565b5b5b5b5b806143225761432161532c565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561457c5782600360006008848154811061435b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061444257508160046000600884815481106143da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561445957600c54600b54945094505050506145b5565b6144e2600360006008848154811061446d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613b1a90919063ffffffff16565b925061456d60046000600884815481106144f857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613b1a90919063ffffffff16565b9150808060010191505061433c565b50614594600b54600c546139cd90919063ffffffff16565b8210156145ac57600c54600b549350935050506145b5565b81819350935050505b9091565b60008083118290614665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561462a57808201518184015260208101905061460f565b50505050905090810190601f1680156146575780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161467157fe5b049050809150509392505050565b6000806000806146ab606461469d888a61477390919063ffffffff16565b6139cd90919063ffffffff16565b905060006146d560646146c7888b61477390919063ffffffff16565b6139cd90919063ffffffff16565b905060006146fe876146f0858c613b1a90919063ffffffff16565b613b1a90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061472e858861477390919063ffffffff16565b90506000614745868861477390919063ffffffff16565b9050600061475c8284613b1a90919063ffffffff16565b905082818395509550955050505093509350939050565b60008083141561478657600090506147f3565b600082840290508284828161479757fe5b04146147ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155be6021913960400191505060405180910390fd5b809150505b92915050565b614824307f0000000000000000000000000000000000000000000000000000000000000000846131cc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061486e6127e7565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156148f357600080fd5b505af1158015614907573d6000803e3d6000fd5b50505050506040513d606081101561491e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060115414801561495e57506000601254145b801561496c57506000601354145b15614976576149aa565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b6000806000806000806149be87613a9f565b955095509550955095509550614a1c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9281615349565b614b9c84836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614c1e87613a9f565b955095509550955095509550614c7c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d1183600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614da685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614df281615349565b614dfc84836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614e7e87613a9f565b955095509550955095509550614edc86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f7185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fbd81615349565b614fc784836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061504987613a9f565b9550955095509550955095506150a787600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061513c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151d183600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061526685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152b281615349565b6152bc84836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601454601181905550601554601281905550601654601381905550565b60006153536139a2565b9050600061536a828461477390919063ffffffff16565b90506153be81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156154e9576154a583600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61550382600c54613b1a90919063ffffffff16565b600c8190555061551e81600d54613a1790919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208bd5a2e93a9daef5f609a31e460e47c96944230e098fd1d976ba3c41cf39ed2364736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061021e5760003560e01c806352390c0211610123578063a457c2d7116100ab578063c49b9a801161006f578063c49b9a8014610c21578063dd62ed3e14610c5e578063f2fde38b14610ce3578063f429389014610d34578063f815a84214610d4b57610225565b8063a457c2d714610a6c578063a52fe9bb14610add578063a9059cbb14610b18578063af9549e014610b89578063bcd6d44614610be657610225565b8063715018a6116100f2578063715018a6146108cc5780637ded4d6a146108e357806388f82020146109345780638da5cb5b1461099b57806395d89b41146109dc57610225565b806352390c02146107745780635342acb4146107c55780635880b8731461082c57806370a082311461086757610225565b8063313ce567116101a65780634303443d116101755780634303443d146106435780634549b0391461069457806349bd5a5e146106ef5780634a74bb021461073057806351bc3c851461075d57610225565b8063313ce567146105185780633685d4191461054657806339509351146105975780633bd5d1731461060857610225565b806318160ddd116101ed57806318160ddd146103975780631decaadc146103c257806323b872dd146103fd5780632d8381191461048e57806330599fc5146104dd57610225565b806306fdde031461022a578063095ea7b3146102ba57806313114a9d1461032b5780631694505e1461035657610225565b3661022557005b600080fd5b34801561023657600080fd5b5061023f610d76565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c657600080fd5b50610313600480360360408110156102dd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e18565b60405180821515815260200191505060405180910390f35b34801561033757600080fd5b50610340610e36565b6040518082815260200191505060405180910390f35b34801561036257600080fd5b5061036b610e40565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103a357600080fd5b506103ac610e64565b6040518082815260200191505060405180910390f35b3480156103ce57600080fd5b506103fb600480360360208110156103e557600080fd5b8101908080359060200190929190505050610e6e565b005b34801561040957600080fd5b506104766004803603606081101561042057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f9d565b60405180821515815260200191505060405180910390f35b34801561049a57600080fd5b506104c7600480360360208110156104b157600080fd5b8101908080359060200190929190505050611076565b6040518082815260200191505060405180910390f35b3480156104e957600080fd5b506105166004803603602081101561050057600080fd5b81019080803590602001909291905050506110fa565b005b34801561052457600080fd5b5061052d6111e9565b604051808260ff16815260200191505060405180910390f35b34801561055257600080fd5b506105956004803603602081101561056957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611200565b005b3480156105a357600080fd5b506105f0600480360360408110156105ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061158a565b60405180821515815260200191505060405180910390f35b34801561061457600080fd5b506106416004803603602081101561062b57600080fd5b810190808035906020019092919050505061163d565b005b34801561064f57600080fd5b506106926004803603602081101561066657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117ce565b005b3480156106a057600080fd5b506106d9600480360360408110156106b757600080fd5b8101908080359060200190929190803515159060200190929190505050611aad565b6040518082815260200191505060405180910390f35b3480156106fb57600080fd5b50610704611b64565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561073c57600080fd5b50610745611b88565b60405180821515815260200191505060405180910390f35b34801561076957600080fd5b50610772611b9b565b005b34801561078057600080fd5b506107c36004803603602081101561079757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c7c565b005b3480156107d157600080fd5b50610814600480360360208110156107e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061202f565b60405180821515815260200191505060405180910390f35b34801561083857600080fd5b506108656004803603602081101561084f57600080fd5b8101908080359060200190929190505050612085565b005b34801561087357600080fd5b506108b66004803603602081101561088a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121db565b6040518082815260200191505060405180910390f35b3480156108d857600080fd5b506108e16122c6565b005b3480156108ef57600080fd5b506109326004803603602081101561090657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061244c565b005b34801561094057600080fd5b506109836004803603602081101561095757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612791565b60405180821515815260200191505060405180910390f35b3480156109a757600080fd5b506109b06127e7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e857600080fd5b506109f1612810565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a31578082015181840152602081019050610a16565b50505050905090810190601f168015610a5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a7857600080fd5b50610ac560048036036040811015610a8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128b2565b60405180821515815260200191505060405180910390f35b348015610ae957600080fd5b50610b1660048036036020811015610b0057600080fd5b810190808035906020019092919050505061297f565b005b348015610b2457600080fd5b50610b7160048036036040811015610b3b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ad5565b60405180821515815260200191505060405180910390f35b348015610b9557600080fd5b50610be460048036036040811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612af3565b005b348015610bf257600080fd5b50610c1f60048036036020811015610c0957600080fd5b8101908080359060200190929190505050612c16565b005b348015610c2d57600080fd5b50610c5c60048036036020811015610c4457600080fd5b81019080803515159060200190929190505050612d6c565b005b348015610c6a57600080fd5b50610ccd60048036036040811015610c8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e51565b6040518082815260200191505060405180910390f35b348015610cef57600080fd5b50610d3260048036036020811015610d0657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ed8565b005b348015610d4057600080fd5b50610d496130e3565b005b348015610d5757600080fd5b50610d606131bc565b6040518082815260200191505060405180910390f35b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b5050505050905090565b6000610e2c610e256131c4565b84846131cc565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b610e766131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b633b9aca00811015610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061569d603e913960400191505060405180910390fd5b8060188190555050565b6000610faa8484846133c3565b61106b84610fb66131c4565b611066856040518060600160405280602881526020016155df60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061101c6131c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e29092919063ffffffff16565b6131cc565b600190509392505050565b6000600c548211156110d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061554c602a913960400191505060405180910390fd5b60006110dd6139a2565b90506110f281846139cd90919063ffffffff16565b915050919050565b6111026131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6111d4306111ce6127e7565b836131cc565b6111e6306111e06127e7565b836133c3565b50565b6000601060009054906101000a900460ff16905090565b6112086131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b600880549050811015611586578173ffffffffffffffffffffffffffffffffffffffff16600882815481106113bb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115795760086001600880549050038154811061141757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061144f57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061153f57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611586565b808060010191505061138a565b5050565b60006116336115976131c4565b8461162e85600560006115a86131c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b6131cc565b6001905092915050565b60006116476131c4565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001806156fd602c913960400191505060405180910390fd5b60006116f783613a9f565b5050505050905061175081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117a881600c54613b1a90919063ffffffff16565b600c819055506117c383600d54613a1790919063ffffffff16565b600d81905550505050565b6117d66131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611896576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156306024913960400191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f4163636f756e7420697320616c726561647920626c61636b6c6973746564000081525060200191505060405180910390fd5b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600b54831115611b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611b47576000611b3784613a9f565b5050505050905080915050611b5e565b6000611b5284613a9f565b50505050915050809150505b92915050565b7f000000000000000000000000c049c2e62b8861b7f8842e41f4246b2e9ba1874181565b601760159054906101000a900460ff1681565b611ba36131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611c6e306121db565b9050611c7981613b64565b50565b611c846131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ddd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156db6022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611f7157611f2d600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611076565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61208d6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461214d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561215f575060318111155b6121d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20343900000000000081525060200191505060405180910390fd5b8060118190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561227657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506122c1565b6122be600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611076565b90505b919050565b6122ce6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461238e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6124546131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612514576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f4163636f756e74206973206e6f7420626c61636b6c697374656400000000000081525060200191505060405180910390fd5b60005b600a8054905081101561278d578173ffffffffffffffffffffffffffffffffffffffff16600a828154811061260757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561278057600a6001600a80549050038154811061266357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061269b57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600a80548061274657fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561278d565b80806001019150506125d6565b5050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156128a85780601f1061287d576101008083540402835291602001916128a8565b820191906000526020600020905b81548152906001019060200180831161288b57829003601f168201915b5050505050905090565b60006129756128bf6131c4565b846129708560405180606001604052806025815260200161572960259139600560006128e96131c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138e29092919063ffffffff16565b6131cc565b6001905092915050565b6129876131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612a59575060318111155b612acb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6d61726b6574696e674665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060128190555050565b6000612ae9612ae26131c4565b84846133c3565b6001905092915050565b612afb6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b612c1e6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cde576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60018110158015612cf0575060318111155b612d62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f6c69717569646974794665652073686f756c6420626520696e2031202d20313181525060200191505060405180910390fd5b8060138190555050565b612d746131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601760156101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612ee06131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fa0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613026576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806155766026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6130eb6131c4565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506131b981613e12565b50565b600047905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613252576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156796024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061559c6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806156546025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806155296023913960400191505060405180910390fd5b60008111613528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806156076029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156135e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b600960003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613768576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f596f752068617665206e6f20706f77657220686572652100000000000000000081525060200191505060405180910390fd5b6000613773306121db565b905060006018548210159050601760149054906101000a900460ff161580156137a85750601760159054906101000a900460ff165b80156137b15750805b801561380957507f000000000000000000000000c049c2e62b8861b7f8842e41f4246b2e9ba1874173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561381d57601854915061381c82613e7e565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138c45750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138ce57600090505b6138da86868684614017565b505050505050565b600083831115829061398f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613954578082015181840152602081019050613939565b50505050905090810190601f1680156139815780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006139af614328565b915091506139c681836139cd90919063ffffffff16565b9250505090565b6000613a0f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506145b9565b905092915050565b600080828401905083811015613a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000613ad08a601154613acb601354601254613a1790919063ffffffff16565b61467f565b9250925092506000613ae06139a2565b90506000806000613af28e8786614715565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000613b5c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506138e2565b905092915050565b6060600267ffffffffffffffff81118015613b7e57600080fd5b50604051908082528060200260200182016040528015613bad5781602001602082028036833780820191505090505b5090503081600081518110613bbe57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5e57600080fd5b505afa158015613c72573d6000803e3d6000fd5b505050506040513d6020811015613c8857600080fd5b810190808051906020019092919050505081600181518110613ca657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d0b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846131cc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613dcd578082015181840152602081019050613db2565b505050509050019650505050505050600060405180830381600087803b158015613df657600080fd5b505af1158015613e0a573d6000803e3d6000fd5b505050505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613e7a573d6000803e3d6000fd5b5050565b6001601760146101000a81548160ff0219169083151502179055506000613ed8613eb5601354601254613a1790919063ffffffff16565b613eca6012548561477390919063ffffffff16565b6139cd90919063ffffffff16565b90506000613eef8284613b1a90919063ffffffff16565b90506000613f076002836139cd90919063ffffffff16565b90506000613f1e8284613b1a90919063ffffffff16565b905060004790506000613f3a8685613a1790919063ffffffff16565b9050613f4581613b64565b6000613f5a8347613b1a90919063ffffffff16565b90506000613f8383613f75888561477390919063ffffffff16565b6139cd90919063ffffffff16565b9050613f8f85826147f9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186828760405180848152602001838152602001828152602001935050505060405180910390a1613ff1613fec8284613b1a90919063ffffffff16565b613e12565b50505050505050506000601760146101000a81548160ff02191690831515021790555050565b806140255761402461494a565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156140c85750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156140dd576140d88484846149ac565b614314565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156141805750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561419557614190848484614c0c565b614313565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156142395750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561424e57614249848484614e6c565b614312565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156142f05750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561430557614300848484615037565b614311565b614310848484614e6c565b5b5b5b5b806143225761432161532c565b5b50505050565b6000806000600c5490506000600b54905060005b60088054905081101561457c5782600360006008848154811061435b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061444257508160046000600884815481106143da57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561445957600c54600b54945094505050506145b5565b6144e2600360006008848154811061446d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613b1a90919063ffffffff16565b925061456d60046000600884815481106144f857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613b1a90919063ffffffff16565b9150808060010191505061433c565b50614594600b54600c546139cd90919063ffffffff16565b8210156145ac57600c54600b549350935050506145b5565b81819350935050505b9091565b60008083118290614665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561462a57808201518184015260208101905061460f565b50505050905090810190601f1680156146575780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161467157fe5b049050809150509392505050565b6000806000806146ab606461469d888a61477390919063ffffffff16565b6139cd90919063ffffffff16565b905060006146d560646146c7888b61477390919063ffffffff16565b6139cd90919063ffffffff16565b905060006146fe876146f0858c613b1a90919063ffffffff16565b613b1a90919063ffffffff16565b905080838395509550955050505093509350939050565b60008060008061472e858861477390919063ffffffff16565b90506000614745868861477390919063ffffffff16565b9050600061475c8284613b1a90919063ffffffff16565b905082818395509550955050505093509350939050565b60008083141561478657600090506147f3565b600082840290508284828161479757fe5b04146147ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155be6021913960400191505060405180910390fd5b809150505b92915050565b614824307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846131cc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061486e6127e7565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156148f357600080fd5b505af1158015614907573d6000803e3d6000fd5b50505050506040513d606081101561491e57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b600060115414801561495e57506000601254145b801561496c57506000601354145b15614976576149aa565b6011546014819055506012546015819055506013546016819055506000601181905550600060128190555060006013819055505b565b6000806000806000806149be87613a9f565b955095509550955095509550614a1c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ab186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b4685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9281615349565b614b9c84836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614c1e87613a9f565b955095509550955095509550614c7c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d1183600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614da685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614df281615349565b614dfc84836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614e7e87613a9f565b955095509550955095509550614edc86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f7185600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fbd81615349565b614fc784836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061504987613a9f565b9550955095509550955095506150a787600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061513c86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b1a90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506151d183600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061526685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152b281615349565b6152bc84836154ee565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601454601181905550601554601281905550601654601381905550565b60006153536139a2565b9050600061536a828461477390919063ffffffff16565b90506153be81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156154e9576154a583600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a1790919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61550382600c54613b1a90919063ffffffff16565b600c8190555061551e81600d54613a1790919063ffffffff16565b600d81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573736e756d546f6b656e7353656c6c546f416464546f4c69717569646974792073686f756c642062652067726561746572207468616e20746f74616c2031653957652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208bd5a2e93a9daef5f609a31e460e47c96944230e098fd1d976ba3c41cf39ed2364736f6c634300060c0033
Deployed Bytecode Sourcemap
25287:22636:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29589:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30501:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31767:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26677:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29866:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47411:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30670:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32691:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47728:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29775:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33406:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30991:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31862:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33893:352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32247:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26735:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26818:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40153:156;;;;;;;;;;;;;:::i;:::-;;32952:446;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35282:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46796:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29969:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16779:148;;;;;;;;;;;;;:::i;:::-;;34253:500;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31494:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16145:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29680:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31217:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46973:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30175:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31622:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47192:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40484:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30350:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17079:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40317:159;;;;;;;;;;;;;:::i;:::-;;46678:110;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29589:83;29626:13;29659:5;29652:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29589:83;:::o;30501:161::-;30576:4;30593:39;30602:12;:10;:12::i;:::-;30616:7;30625:6;30593:8;:39::i;:::-;30650:4;30643:11;;30501:161;;;;:::o;31767:87::-;31809:7;31836:10;;31829:17;;31767:87;:::o;26677:51::-;;;:::o;29866:95::-;29919:7;29946;;29939:14;;29866:95;:::o;47411:309::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47566:5:::1;47533:29;:38;;47525:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47683:29;47650:30;:62;;;;47411:309:::0;:::o;30670:313::-;30768:4;30785:36;30795:6;30803:9;30814:6;30785:9;:36::i;:::-;30832:121;30841:6;30849:12;:10;:12::i;:::-;30863:89;30901:6;30863:89;;;;;;;;;;;;;;;;;:11;:19;30875:6;30863:19;;;;;;;;;;;;;;;:33;30883:12;:10;:12::i;:::-;30863:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;30832:8;:121::i;:::-;30971:4;30964:11;;30670:313;;;;;:::o;32691:253::-;32757:7;32796;;32785;:18;;32777:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32861:19;32884:10;:8;:10::i;:::-;32861:33;;32912:24;32924:11;32912:7;:11;;:24;;;;:::i;:::-;32905:31;;;32691:253;;;:::o;47728:192::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47810:45:::1;47827:4;47834:7;:5;:7::i;:::-;47843:11;47810:8;:45::i;:::-;47866:46;47884:4;47891:7;:5;:7::i;:::-;47900:11;47866:9;:46::i;:::-;47728:192:::0;:::o;29775:83::-;29816:5;29841:9;;;;;;;;;;;29834:16;;29775:83;:::o;33406:479::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33488:11:::1;:20;33500:7;33488:20;;;;;;;;;;;;;;;;;;;;;;;;;33480:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33556:9;33551:327;33575:9;:16;;;;33571:1;:20;33551:327;;;33633:7;33617:23;;:9;33627:1;33617:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;33613:254;;;33676:9;33705:1;33686:9;:16;;;;:20;33676:31;;;;;;;;;;;;;;;;;;;;;;;;;33661:9;33671:1;33661:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33745:1;33726:7;:16;33734:7;33726:16;;;;;;;;;;;;;;;:20;;;;33788:5;33765:11;:20;33777:7;33765:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33812:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33846:5;;33613:254;33593:3;;;;;;;33551:327;;;;33406:479:::0;:::o;30991:218::-;31079:4;31096:83;31105:12;:10;:12::i;:::-;31119:7;31128:50;31167:10;31128:11;:25;31140:12;:10;:12::i;:::-;31128:25;;;;;;;;;;;;;;;:34;31154:7;31128:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;31096:8;:83::i;:::-;31197:4;31190:11;;30991:218;;;;:::o;31862:377::-;31914:14;31931:12;:10;:12::i;:::-;31914:29;;31963:11;:19;31975:6;31963:19;;;;;;;;;;;;;;;;;;;;;;;;;31962:20;31954:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32043:15;32067:19;32078:7;32067:10;:19::i;:::-;32042:44;;;;;;;32115:28;32135:7;32115;:15;32123:6;32115:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32097:7;:15;32105:6;32097:15;;;;;;;;;;;;;;;:46;;;;32164:20;32176:7;32164;;:11;;:20;;;;:::i;:::-;32154:7;:30;;;;32208:23;32223:7;32208:10;;:14;;:23;;;;:::i;:::-;32195:10;:36;;;;31862:377;;;:::o;33893:352::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33988:42:::1;33977:53;;:7;:53;;;;33969:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34091:17;:26;34109:7;34091:26;;;;;;;;;;;;;;;;;;;;;;;;;34090:27;34082:70;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34192:4;34163:17;:26;34181:7;34163:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;34207:16;34229:7;34207:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33893:352:::0;:::o;32247:436::-;32337:7;32376;;32365;:18;;32357:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32435:17;32430:246;;32470:15;32494:19;32505:7;32494:10;:19::i;:::-;32469:44;;;;;;;32535:7;32528:14;;;;;32430:246;32577:23;32608:19;32619:7;32608:10;:19::i;:::-;32575:52;;;;;;;32649:15;32642:22;;;32247:436;;;;;:::o;26735:38::-;;;:::o;26818:40::-;;;;;;;;;;;;;:::o;40153:156::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40207:23:::1;40233:24;40251:4;40233:9;:24::i;:::-;40207:50;;40268:33;40285:15;40268:16;:33::i;:::-;16425:1;40153:156::o:0;32952:446::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33047:42:::1;33036:53;;:7;:53;;;;33028:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33148:11;:20;33160:7;33148:20;;;;;;;;;;;;;;;;;;;;;;;;;33147:21;33139:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33233:1;33214:7;:16;33222:7;33214:16;;;;;;;;;;;;;;;;:20;33211:108;;;33270:37;33290:7;:16;33298:7;33290:16;;;;;;;;;;;;;;;;33270:19;:37::i;:::-;33251:7;:16;33259:7;33251:16;;;;;;;;;;;;;;;:56;;;;33211:108;33352:4;33329:11;:20;33341:7;33329:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;33367:9;33382:7;33367:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32952:446:::0;:::o;35282:123::-;35346:4;35370:18;:27;35389:7;35370:27;;;;;;;;;;;;;;;;;;;;;;;;;35363:34;;35282:123;;;:::o;46796:169::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46882:1:::1;46872:6;:11;;:27;;;;;46897:2;46887:6;:12;;46872:27;46864:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46951:6;46941:7;:16;;;;46796:169:::0;:::o;29969:198::-;30035:7;30059:11;:20;30071:7;30059:20;;;;;;;;;;;;;;;;;;;;;;;;;30055:49;;;30088:7;:16;30096:7;30088:16;;;;;;;;;;;;;;;;30081:23;;;;30055:49;30122:37;30142:7;:16;30150:7;30142:16;;;;;;;;;;;;;;;;30122:19;:37::i;:::-;30115:44;;29969:198;;;;:::o;16779:148::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16886:1:::1;16849:40;;16870:6;::::0;::::1;;;;;;;;16849:40;;;;;;;;;;;;16917:1;16900:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16779:148::o:0;34253:500::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34342:17:::1;:26;34360:7;34342:26;;;;;;;;;;;;;;;;;;;;;;;;;34334:65;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34415:9;34410:336;34434:16;:23;;;;34430:1;:27;34410:336;;;34506:7;34483:30;;:16;34500:1;34483:19;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;34479:256;;;34556:16;34599:1;34573:16;:23;;;;:27;34556:45;;;;;;;;;;;;;;;;;;;;;;;;;34534:16;34551:1;34534:19;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;34649:5;34620:17;:26;34638:7;34620:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34673:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34714:5;;34479:256;34459:3;;;;;;;34410:336;;;;34253:500:::0;:::o;31494:120::-;31562:4;31586:11;:20;31598:7;31586:20;;;;;;;;;;;;;;;;;;;;;;;;;31579:27;;31494:120;;;:::o;16145:79::-;16183:7;16210:6;;;;;;;;;;;16203:13;;16145:79;:::o;29680:87::-;29719:13;29752:7;29745:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29680:87;:::o;31217:269::-;31310:4;31327:129;31336:12;:10;:12::i;:::-;31350:7;31359:96;31398:15;31359:96;;;;;;;;;;;;;;;;;:11;:25;31371:12;:10;:12::i;:::-;31359:25;;;;;;;;;;;;;;;:34;31385:7;31359:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;31327:8;:129::i;:::-;31474:4;31467:11;;31217:269;;;;:::o;46973:211::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47077:1:::1;47061:12;:17;;:39;;;;;47098:2;47082:12;:18;;47061:39;47053:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;47164:12;47148:13;:28;;;;46973:211:::0;:::o;30175:167::-;30253:4;30270:42;30280:12;:10;:12::i;:::-;30294:9;30305:6;30270:9;:42::i;:::-;30330:4;30323:11;;30175:167;;;;:::o;31622:137::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31743:8:::1;31713:18;:27;31732:7;31713:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;31622:137:::0;;:::o;47192:211::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47296:1:::1;47280:12;:17;;:39;;;;;47317:2;47301:12;:18;;47280:39;47272:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;47383:12;47367:13;:28;;;;47192:211:::0;:::o;40484:148::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40602:22:::1;40578:21;;:46;;;;;;;;;;;;;;;;;;40484:148:::0;:::o;30350:143::-;30431:7;30458:11;:18;30470:5;30458:18;;;;;;;;;;;;;;;:27;30477:7;30458:27;;;;;;;;;;;;;;;;30451:34;;30350:143;;;;:::o;17079:244::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17188:1:::1;17168:22;;:8;:22;;;;17160:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17278:8;17249:38;;17270:6;::::0;::::1;;;;;;;;17249:38;;;;;;;;;;;;17307:8;17298:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;17079:244:::0;:::o;40317:159::-;16365:12;:10;:12::i;:::-;16355:22;;:6;;;;;;;;;;:22;;;16347:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40369:26:::1;40398:21;40369:50;;40430:38;40449:18;40430;:38::i;:::-;16425:1;40317:159::o:0;46678:110::-;46724:15;46759:21;46752:28;;46678:110;:::o;1966:106::-;2019:15;2054:10;2047:17;;1966:106;:::o;35413:337::-;35523:1;35506:19;;:5;:19;;;;35498:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35604:1;35585:21;;:7;:21;;;;35577:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35688:6;35658:11;:18;35670:5;35658:18;;;;;;;;;;;;;;;:27;35677:7;35658:27;;;;;;;;;;;;;;;:36;;;;35726:7;35710:32;;35719:5;35710:32;;;35735:6;35710:32;;;;;;;;;;;;;;;;;;35413:337;;;:::o;35758:1679::-;35873:1;35855:20;;:6;:20;;;;35847:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35957:1;35936:23;;:9;:23;;;;35928:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36027:1;36018:6;:10;36010:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36094:17;:25;36112:6;36094:25;;;;;;;;;;;;;;;;;;;;;;;;;36093:26;36085:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36167:17;:28;36185:9;36167:28;;;;;;;;;;;;;;;;;;;;;;;;;36166:29;36158:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36243:17;:28;36261:9;36243:28;;;;;;;;;;;;;;;;;;;;;;;;;36242:29;36234:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36594:28;36625:24;36643:4;36625:9;:24::i;:::-;36594:55;;36662:24;36713:30;;36689:20;:54;;36662:81;;36759:16;;;;;;;;;;;36758:17;:42;;;;;36779:21;;;;;;;;;;;36758:42;:65;;;;;36804:19;36758:65;:92;;;;;36837:13;36827:23;;:6;:23;;;;36758:92;36754:258;;;36890:30;;36867:53;;36964:36;36979:20;36964:14;:36::i;:::-;36754:258;37085:12;37100:4;37085:19;;37204:18;:26;37223:6;37204:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;37234:18;:29;37253:9;37234:29;;;;;;;;;;;;;;;;;;;;;;;;;37204:59;37201:105;;;37289:5;37279:15;;37201:105;37379:50;37394:6;37402:9;37413:6;37421:7;37379:14;:50::i;:::-;35758:1679;;;;;;:::o;6053:192::-;6139:7;6172:1;6167;:6;;6175:12;6159:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6199:9;6215:1;6211;:5;6199:17;;6236:1;6229:8;;;6053:192;;;;;:::o;45851:163::-;45892:7;45913:15;45930;45949:19;:17;:19::i;:::-;45912:56;;;;45986:20;45998:7;45986;:11;;:20;;;;:::i;:::-;45979:27;;;;45851:163;:::o;7431:132::-;7489:7;7516:39;7520:1;7523;7516:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7509:46;;7431:132;;;;:::o;5168:181::-;5226:7;5246:9;5262:1;5258;:5;5246:17;;5287:1;5282;:6;;5274:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5340:1;5333:8;;;5168:181;;;;:::o;44546:518::-;44605:7;44614;44623;44632;44641;44650;44671:23;44696:12;44710:30;44744:63;44756:7;44765;;44774:32;44792:13;;44774;;:17;;:32;;;;:::i;:::-;44744:11;:63::i;:::-;44670:137;;;;;;44818:19;44840:10;:8;:10::i;:::-;44818:32;;44862:15;44879:23;44904:12;44920:39;44932:7;44941:4;44947:11;44920;:39::i;:::-;44861:98;;;;;;44978:7;44987:15;45004:4;45010:15;45027:4;45033:22;44970:86;;;;;;;;;;;;;;;;;;;44546:518;;;;;;;:::o;5623:136::-;5681:7;5708:43;5712:1;5715;5708:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5701:50;;5623:136;;;;:::o;38774:589::-;38900:21;38938:1;38924:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38900:40;;38969:4;38951;38956:1;38951:7;;;;;;;;;;;;;:23;;;;;;;;;;;38995:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38985:4;38990:1;38985:7;;;;;;;;;;;;;:32;;;;;;;;;;;39030:62;39047:4;39062:15;39080:11;39030:8;:62::i;:::-;39131:15;:66;;;39212:11;39238:1;39282:4;39309;39329:15;39131:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38774:589;;:::o;39892:111::-;39955:23;;;;;;;;;;;:32;;:40;39988:6;39955:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39892:111;:::o;37445:1321::-;27316:4;27297:16;;:23;;;;;;;;;;;;;;;;;;37530:19:::1;37552:77;37596:32;37614:13;;37596;;:17;;:32;;;;:::i;:::-;37552:39;37577:13;;37552:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;37530:99;;37640:17;37660:37;37685:11;37660:20;:24;;:37;;;;:::i;:::-;37640:57;;37761:12;37776:16;37790:1;37776:9;:13;;:16;;;;:::i;:::-;37761:31;;37803:17;37823:19;37837:4;37823:9;:13;;:19;;;;:::i;:::-;37803:39;;38120:22;38145:21;38120:46;;38211:20;38234:21;38243:11;38234:4;:8;;:21;;;;:::i;:::-;38211:44;;38266:30;38283:12;38266:16;:30::i;:::-;38427:16;38446:41;38472:14;38446:21;:25;;:41;;;;:::i;:::-;38427:60;;38498:18;38519:36;38542:12;38519:18;38532:4;38519:8;:12;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;38498:57;;38605:35;38618:9;38629:10;38605:12;:35::i;:::-;38658:43;38673:4;38679:10;38691:9;38658:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38714:44;38733:24;38746:10;38733:8;:12;;:24;;;;:::i;:::-;38714:18;:44::i;:::-;27331:1;;;;;;;;27362:5:::0;27343:16;;:24;;;;;;;;;;;;;;;;;;37445:1321;:::o;40640:819::-;40752:7;40748:40;;40774:14;:12;:14::i;:::-;40748:40;40805:11;:19;40817:6;40805:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40829:11;:22;40841:9;40829:22;;;;;;;;;;;;;;;;;;;;;;;;;40828:23;40805:46;40801:597;;;40868:48;40890:6;40898:9;40909:6;40868:21;:48::i;:::-;40801:597;;;40939:11;:19;40951:6;40939:19;;;;;;;;;;;;;;;;;;;;;;;;;40938:20;:46;;;;;40962:11;:22;40974:9;40962:22;;;;;;;;;;;;;;;;;;;;;;;;;40938:46;40934:464;;;41001:46;41021:6;41029:9;41040:6;41001:19;:46::i;:::-;40934:464;;;41070:11;:19;41082:6;41070:19;;;;;;;;;;;;;;;;;;;;;;;;;41069:20;:47;;;;;41094:11;:22;41106:9;41094:22;;;;;;;;;;;;;;;;;;;;;;;;;41093:23;41069:47;41065:333;;;41133:44;41151:6;41159:9;41170:6;41133:17;:44::i;:::-;41065:333;;;41199:11;:19;41211:6;41199:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41222:11;:22;41234:9;41222:22;;;;;;;;;;;;;;;;;;;;;;;;;41199:45;41195:203;;;41261:48;41283:6;41291:9;41302:6;41261:21;:48::i;:::-;41195:203;;;41342:44;41360:6;41368:9;41379:6;41342:17;:44::i;:::-;41195:203;41065:333;40934:464;40801:597;41414:7;41410:41;;41436:15;:13;:15::i;:::-;41410:41;40640:819;;;;:::o;46022:555::-;46072:7;46081;46101:15;46119:7;;46101:25;;46137:15;46155:7;;46137:25;;46178:9;46173:289;46197:9;:16;;;;46193:1;:20;46173:289;;;46263:7;46239;:21;46247:9;46257:1;46247:12;;;;;;;;;;;;;;;;;;;;;;;;;46239:21;;;;;;;;;;;;;;;;:31;:66;;;;46298:7;46274;:21;46282:9;46292:1;46282:12;;;;;;;;;;;;;;;;;;;;;;;;;46274:21;;;;;;;;;;;;;;;;:31;46239:66;46235:97;;;46315:7;;46324;;46307:25;;;;;;;;;46235:97;46357:34;46369:7;:21;46377:9;46387:1;46377:12;;;;;;;;;;;;;;;;;;;;;;;;;46369:21;;;;;;;;;;;;;;;;46357:7;:11;;:34;;;;:::i;:::-;46347:44;;46416:34;46428:7;:21;46436:9;46446:1;46436:12;;;;;;;;;;;;;;;;;;;;;;;;;46428:21;;;;;;;;;;;;;;;;46416:7;:11;;:34;;;;:::i;:::-;46406:44;;46215:3;;;;;;;46173:289;;;;46486:20;46498:7;;46486;;:11;;:20;;;;:::i;:::-;46476:7;:30;46472:61;;;46516:7;;46525;;46508:25;;;;;;;;46472:61;46552:7;46561;46544:25;;;;;;46022:555;;;:::o;8048:278::-;8134:7;8166:1;8162;:5;8169:12;8154:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8193:9;8209:1;8205;:5;;;;;;8193:17;;8317:1;8310:8;;;8048:278;;;;;:::o;45072:429::-;45179:7;45188;45197;45217:12;45232:28;45256:3;45232:19;45244:6;45232:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;45217:43;;45271:30;45304:43;45343:3;45304:34;45316:21;45304:7;:11;;:34;;;;:::i;:::-;:38;;:43;;;;:::i;:::-;45271:76;;45358:23;45384:44;45406:21;45384:17;45396:4;45384:7;:11;;:17;;;;:::i;:::-;:21;;:44;;;;:::i;:::-;45358:70;;45447:15;45464:4;45470:22;45439:54;;;;;;;;;45072:429;;;;;;;:::o;45509:334::-;45604:7;45613;45622;45642:15;45660:24;45672:11;45660:7;:11;;:24;;;;:::i;:::-;45642:42;;45695:12;45710:21;45719:11;45710:4;:8;;:21;;;;:::i;:::-;45695:36;;45742:23;45768:17;45780:4;45768:7;:11;;:17;;;;:::i;:::-;45742:43;;45804:7;45813:15;45830:4;45796:39;;;;;;;;;45509:334;;;;;;;:::o;6495:471::-;6553:7;6803:1;6798;:6;6794:47;;;6828:1;6821:8;;;;6794:47;6853:9;6869:1;6865;:5;6853:17;;6898:1;6893;6889;:5;;;;;;:10;6881:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6957:1;6950:8;;;6495:471;;;;;:::o;39371:513::-;39519:62;39536:4;39551:15;39569:11;39519:8;:62::i;:::-;39624:15;:31;;;39663:9;39696:4;39716:11;39742:1;39785;39828:7;:5;:7::i;:::-;39850:15;39624:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39371:513;;:::o;34761:332::-;34818:1;34807:7;;:12;:34;;;;;34840:1;34823:13;;:18;34807:34;:56;;;;;34862:1;34845:13;;:18;34807:56;34804:68;;;34865:7;;34804:68;34902:7;;34884:15;:25;;;;34944:13;;34920:21;:37;;;;34992:13;;34968:21;:37;;;;35028:1;35018:7;:11;;;;35056:1;35040:13;:17;;;;35084:1;35068:13;:17;;;;34761:332;:::o;42614:590::-;42717:15;42734:23;42759:12;42773:23;42798:12;42812:27;42843:19;42854:7;42843:10;:19::i;:::-;42716:146;;;;;;;;;;;;42891:28;42911:7;42891;:15;42899:6;42891:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42873:7;:15;42881:6;42873:15;;;;;;;;;;;;;;;:46;;;;42948:28;42968:7;42948;:15;42956:6;42948:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42930:7;:15;42938:6;42930:15;;;;;;;;;;;;;;;:46;;;;43008:39;43031:15;43008:7;:18;43016:9;43008:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42987:7;:18;42995:9;42987:18;;;;;;;;;;;;;;;:60;;;;43058:44;43082:19;43058:23;:44::i;:::-;43113:23;43125:4;43131;43113:11;:23::i;:::-;43169:9;43152:44;;43161:6;43152:44;;;43180:15;43152:44;;;;;;;;;;;;;;;;;;42614:590;;;;;;;;;:::o;42004:602::-;42105:15;42122:23;42147:12;42161:23;42186:12;42200:27;42231:19;42242:7;42231:10;:19::i;:::-;42104:146;;;;;;;;;;;;42279:28;42299:7;42279;:15;42287:6;42279:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42261:7;:15;42269:6;42261:15;;;;;;;;;;;;;;;:46;;;;42339:39;42362:15;42339:7;:18;42347:9;42339:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42318:7;:18;42326:9;42318:18;;;;;;;;;;;;;;;:60;;;;42410:39;42433:15;42410:7;:18;42418:9;42410:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42389:7;:18;42397:9;42389:18;;;;;;;;;;;;;;;:60;;;;42460:44;42484:19;42460:23;:44::i;:::-;42515:23;42527:4;42533;42515:11;:23::i;:::-;42571:9;42554:44;;42563:6;42554:44;;;42582:15;42554:44;;;;;;;;;;;;;;;;;;42004:602;;;;;;;;;:::o;41467:529::-;41566:15;41583:23;41608:12;41622:23;41647:12;41661:27;41692:19;41703:7;41692:10;:19::i;:::-;41565:146;;;;;;;;;;;;41740:28;41760:7;41740;:15;41748:6;41740:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41722:7;:15;41730:6;41722:15;;;;;;;;;;;;;;;:46;;;;41800:39;41823:15;41800:7;:18;41808:9;41800:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;41779:7;:18;41787:9;41779:18;;;;;;;;;;;;;;;:60;;;;41850:44;41874:19;41850:23;:44::i;:::-;41905:23;41917:4;41923;41905:11;:23::i;:::-;41961:9;41944:44;;41953:6;41944:44;;;41972:15;41944:44;;;;;;;;;;;;;;;;;;41467:529;;;;;;;;;:::o;43212:661::-;43315:15;43332:23;43357:12;43371:23;43396:12;43410:27;43441:19;43452:7;43441:10;:19::i;:::-;43314:146;;;;;;;;;;;;43489:28;43509:7;43489;:15;43497:6;43489:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43471:7;:15;43479:6;43471:15;;;;;;;;;;;;;;;:46;;;;43546:28;43566:7;43546;:15;43554:6;43546:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43528:7;:15;43536:6;43528:15;;;;;;;;;;;;;;;:46;;;;43606:39;43629:15;43606:7;:18;43614:9;43606:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43585:7;:18;43593:9;43585:18;;;;;;;;;;;;;;;:60;;;;43677:39;43700:15;43677:7;:18;43685:9;43677:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43656:7;:18;43664:9;43656:18;;;;;;;;;;;;;;;:60;;;;43727:44;43751:19;43727:23;:44::i;:::-;43782:23;43794:4;43800;43782:11;:23::i;:::-;43838:9;43821:44;;43830:6;43821:44;;;43849:15;43821:44;;;;;;;;;;;;;;;;;;43212:661;;;;;;;;;:::o;35101:173::-;35155:15;;35145:7;:25;;;;35197:21;;35181:13;:37;;;;35245:21;;35229:13;:37;;;;35101:173::o;43881:408::-;43962:19;43984:10;:8;:10::i;:::-;43962:32;;44005:27;44035:36;44059:11;44035:19;:23;;:36;;;;:::i;:::-;44005:66;;44107:47;44134:19;44107:7;:22;44123:4;44107:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;44082:7;:22;44098:4;44082:22;;;;;;;;;;;;;;;:72;;;;44168:11;:26;44188:4;44168:26;;;;;;;;;;;;;;;;;;;;;;;;;44165:116;;;44234:47;44261:19;44234:7;:22;44250:4;44234:22;;;;;;;;;;;;;;;;:26;;:47;;;;:::i;:::-;44209:7;:22;44225:4;44209:22;;;;;;;;;;;;;;;:72;;;;44165:116;43881:408;;;:::o;44297:147::-;44375:17;44387:4;44375:7;;:11;;:17;;;;:::i;:::-;44365:7;:27;;;;44416:20;44431:4;44416:10;;:14;;:20;;;;:::i;:::-;44403:10;:33;;;;44297:147;;:::o
Swarm Source
ipfs://8bd5a2e93a9daef5f609a31e460e47c96944230e098fd1d976ba3c41cf39ed23
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.