Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000,000 AZUKI
Holders
29
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
95,000,000 AZUKIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AzukiCoin
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-18 */ // https://www.azukicoin.org // https://t.me/AzukiCoinxyz // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * 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); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } 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 AzukiCoin 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; address[] private _excluded; mapping (address => bool) private botWallets; bool botscantrade = false; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 10000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address private feeaddress; string private _name = "AzukiCoin"; string private _symbol = "AZUKI"; uint8 private _decimals = 9; uint256 private _taxFee; uint256 private buytaxfee = 0; uint256 private selltaxfee = 0; uint256 private _previousTaxFee = _taxFee; uint256 private _liquidityFee; uint256 private buyliquidityfee = 5; uint256 private sellliquidityfee = 5; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _totalBuyTax = buytaxfee + buyliquidityfee; uint256 public _totalSellTax = selltaxfee + sellliquidityfee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public depwallet; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 10000000000 * 10**9; uint256 public _maxWallet = 100000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 100000000 * 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 () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH // 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; depwallet = _msgSender(); //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _approve(_msgSender(), address(uniswapV2Router), _tTotal); 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 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) public 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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _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); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setfeeaddress(address walletAddress) public onlyOwner { feeaddress = walletAddress; } function _setmaxwalletamount(uint256 amount) external onlyOwner() { require(amount >= 50000000, "Please check the maxwallet amount, should exceed 0.5% of the supply"); _maxWallet = amount * 10**9; } function setmaxTxAmount(uint256 amount) external onlyOwner() { require(amount >= 50000000, "Please check MaxtxAmount amount, should exceed 0.5% of the supply"); _maxTxAmount = amount * 10**9; } function updateSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() { numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9; } function clearStuckBalance() public { payable(feeaddress).transfer(address(this).balance); } function claimERCtoknes(IERC20 tokenAddress) external { tokenAddress.transfer(feeaddress, tokenAddress.balanceOf(address(this))); } function addBotWallet(address botwallet) external onlyOwner() { require(botwallet != uniswapV2Pair,"Cannot add pair as a bot"); botWallets[botwallet] = true; } function removeBotWallet(address botwallet) external onlyOwner() { botWallets[botwallet] = false; } function getBotWalletStatus(address botwallet) public view returns (bool) { return botWallets[botwallet]; } function StartTrading(address _address)external onlyOwner() { canTrade = true; feeaddress = _address; } function setFees(uint256 _buytax, uint256 _selltax, uint256 _buyliquidity, uint256 _sellliquidity) public onlyOwner { require(_buytax + _buyliquidity <= 6, "buy tax cannot exceed 5%"); require(_selltax + _sellliquidity <= 6, "sell tax cannot exceed 5%"); buytaxfee = _buytax; selltaxfee = _selltax; buyliquidityfee = _buyliquidity; sellliquidityfee = _sellliquidity; _totalBuyTax = buytaxfee + buyliquidityfee; _totalSellTax = selltaxfee + sellliquidityfee; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); 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 _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if(from == uniswapV2Pair && to != depwallet) { require(balanceOf(to) + amount <= _maxWallet, "check max wallet"); } uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } if(from == uniswapV2Pair && to != address(uniswapV2Router)) { _taxFee = buytaxfee; _liquidityFee = buyliquidityfee; } if (to == uniswapV2Pair && from != address(uniswapV2Router)) { _taxFee = selltaxfee; _liquidityFee = sellliquidityfee; } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(contractTokenBalance); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); payable(feeaddress).transfer(newBalance); emit SwapAndLiquify(contractTokenBalance, newBalance, contractTokenBalance); } 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 ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!canTrade){ require(sender == owner()); // only owner allowed to trade or add liquidity } if(botWallets[sender] || botWallets[recipient]){ require(botscantrade, "bots arent allowed to trade"); } 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 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _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 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _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 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":[{"internalType":"address","name":"_address","type":"address"}],"name":"StartTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_setmaxwalletamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"claimERCtoknes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","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":[],"name":"depwallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buytax","type":"uint256"},{"internalType":"uint256","name":"_selltax","type":"uint256"},{"internalType":"uint256","name":"_buyliquidity","type":"uint256"},{"internalType":"uint256","name":"_sellliquidity","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setfeeaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setmaxTxAmount","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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"updateSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600a805461ffff19169055678ac7230489e80000600b8190556200002b9060001962000599565b6200003990600019620005d2565b600c556040805180820190915260098082526820bd3ab5b4a1b7b4b760b91b60209092019182526200006e91600f91620004f3565b5060408051808201909152600580825264415a554b4960d81b60209092019182526200009d91601091620004f3565b506011805460ff19166009179055600060138190556014819055601254601555600560178190556018819055601654601955620000da91620005ec565b601a55601854601454620000ef9190620005ec565b601b55601c805460ff60a81b1916600160a81b179055678ac7230489e80000601d5567016345785d8a0000601e819055601f553480156200012f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620001d357600080fd5b505afa158015620001e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020e919062000607565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025757600080fd5b505afa1580156200026c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000292919062000607565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002db57600080fd5b505af1158015620002f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000316919062000607565b6001600160a01b0390811660a052818116608052601c80546001600160a01b0319163390811790915560008054909216825260066020526040808320805460ff1990811660019081179092553085529190932080549091169092179091556200038590608051600b54620003c7565b600b5460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000676565b6001600160a01b0383166200042f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620004925760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000426565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620005019062000639565b90600052602060002090601f01602090048101928262000525576000855562000570565b82601f106200054057805160ff191683800117855562000570565b8280016001018555821562000570579182015b828111156200057057825182559160200191906001019062000553565b506200057e92915062000582565b5090565b5b808211156200057e576000815560010162000583565b600082620005b757634e487b7160e01b600052601260045260246000fd5b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620005e757620005e7620005bc565b500390565b60008219821115620006025762000602620005bc565b500190565b6000602082840312156200061a57600080fd5b81516001600160a01b03811681146200063257600080fd5b9392505050565b600181811c908216806200064e57607f821691505b602082108114156200067057634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516130c0620006e2600039600081816105a301528181610b5301528181611cf801528181611de401528181611e430152611ec801526000818161036c01528181611e7f01528181611f04015281816126c60152818161278e01526127ca01526130c06000f3fe6080604052600436106102b25760003560e01c80635342acb4116101755780639ad2817a116100dc578063c49b9a8011610095578063dd4670641161006f578063dd46706414610891578063dd62ed3e146108b1578063ea2f0b37146108f7578063f2fde38b1461091757600080fd5b8063c49b9a8014610845578063d12a768814610865578063d35a41901461087b57600080fd5b80639ad2817a146107a5578063a457c2d7146107bb578063a69df4b5146107db578063a9059cbb146107f0578063b6c5232414610810578063b86f92221461082557600080fd5b8063715018a61161012e578063715018a6146106f85780637d1db4a51461070d57806382247ec01461072357806388f82020146107395780638da5cb5b1461077257806395d89b411461079057600080fd5b80635342acb4146106065780635b63e2f01461063f57806360d484891461065f57806365e47de2146106985780636fcba377146106b857806370a08231146106d857600080fd5b8063313ce56711610219578063437823ec116101d2578063437823ec146105315780634549b03914610551578063495e180c1461057157806349bd5a5e146105915780634a74bb02146105c557806352390c02146105e657600080fd5b8063313ce5671461047a5780633277e3381461049c578063364333f4146104bc5780633685d419146104d157806339509351146104f15780633bd5d1731461051157600080fd5b80631f4e28481161026b5780631f4e2848146103bb5780631fc6a2dd146103db57806323b872dd146103fb5780632a3606311461041b5780632d8381191461043b5780632f05205c1461045b57600080fd5b80630305caff146102be57806306fdde03146102e0578063095ea7b31461030b57806313114a9d1461033b5780631694505e1461035a57806318160ddd146103a657600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004612c69565b610937565b005b3480156102ec57600080fd5b506102f561098b565b6040516103029190612c86565b60405180910390f35b34801561031757600080fd5b5061032b610326366004612cdb565b610a1d565b6040519015158152602001610302565b34801561034757600080fd5b50600d545b604051908152602001610302565b34801561036657600080fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610302565b3480156103b257600080fd5b50600b5461034c565b3480156103c757600080fd5b506102de6103d6366004612c69565b610a34565b3480156103e757600080fd5b506102de6103f6366004612d07565b610a80565b34801561040757600080fd5b5061032b610416366004612d20565b610abe565b34801561042757600080fd5b506102de610436366004612c69565b610b27565b34801561044757600080fd5b5061034c610456366004612d07565b610bf7565b34801561046757600080fd5b50600a5461032b90610100900460ff1681565b34801561048657600080fd5b5060115460405160ff9091168152602001610302565b3480156104a857600080fd5b506102de6104b7366004612c69565b610c7b565b3480156104c857600080fd5b506102de610d83565b3480156104dd57600080fd5b506102de6104ec366004612c69565b610dbf565b3480156104fd57600080fd5b5061032b61050c366004612cdb565b610f72565b34801561051d57600080fd5b506102de61052c366004612d07565b610fa8565b34801561053d57600080fd5b506102de61054c366004612c69565b611092565b34801561055d57600080fd5b5061034c61056c366004612d6f565b6110e0565b34801561057d57600080fd5b506102de61058c366004612d07565b61116d565b34801561059d57600080fd5b5061038e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105d157600080fd5b50601c5461032b90600160a81b900460ff1681565b3480156105f257600080fd5b506102de610601366004612c69565b611231565b34801561061257600080fd5b5061032b610621366004612c69565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561064b57600080fd5b506102de61065a366004612c69565b611384565b34801561066b57600080fd5b5061032b61067a366004612c69565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106a457600080fd5b506102de6106b3366004612d07565b6113e0565b3480156106c457600080fd5b506102de6106d3366004612d9f565b6114a2565b3480156106e457600080fd5b5061034c6106f3366004612c69565b6115ba565b34801561070457600080fd5b506102de611619565b34801561071957600080fd5b5061034c601d5481565b34801561072f57600080fd5b5061034c601e5481565b34801561074557600080fd5b5061032b610754366004612c69565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561077e57600080fd5b506000546001600160a01b031661038e565b34801561079c57600080fd5b506102f561167b565b3480156107b157600080fd5b5061034c601a5481565b3480156107c757600080fd5b5061032b6107d6366004612cdb565b61168a565b3480156107e757600080fd5b506102de6116d9565b3480156107fc57600080fd5b5061032b61080b366004612cdb565b6117df565b34801561081c57600080fd5b5060025461034c565b34801561083157600080fd5b50601c5461038e906001600160a01b031681565b34801561085157600080fd5b506102de610860366004612dd1565b6117ec565b34801561087157600080fd5b5061034c601f5481565b34801561088757600080fd5b5061034c601b5481565b34801561089d57600080fd5b506102de6108ac366004612d07565b61186e565b3480156108bd57600080fd5b5061034c6108cc366004612dee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561090357600080fd5b506102de610912366004612c69565b6118f3565b34801561092357600080fd5b506102de610932366004612c69565b61193e565b6000546001600160a01b0316331461096a5760405162461bcd60e51b815260040161096190612e1c565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f805461099a90612e51565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690612e51565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b5050505050905090565b6000610a2a338484611a16565b5060015b92915050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b815260040161096190612e1c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161096190612e1c565b610ab881633b9aca00612ea2565b601f5550565b6000610acb848484611b3a565b610b1d8433610b188560405180606001604052806028815260200161301e602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611faa565b611a16565b5060019392505050565b6000546001600160a01b03163314610b515760405162461bcd60e51b815260040161096190612e1c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610bd35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642070616972206173206120626f7400000000000000006044820152606401610961565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c5e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610961565b6000610c68611fe4565b9050610c748382612007565b9392505050565b600e546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612ec1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190612eda565b5050565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610dbc573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16610e515760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b60005b600854811015610d7f57816001600160a01b031660088281548110610e7b57610e7b612ef7565b6000918252602090912001546001600160a01b03161415610f605760088054610ea690600190612f0d565b81548110610eb657610eb6612ef7565b600091825260209091200154600880546001600160a01b039092169183908110610ee257610ee2612ef7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610f3a57610f3a612f24565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f6a81612f3a565b915050610e54565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a2a918590610b189086612049565b3360008181526007602052604090205460ff161561101d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610961565b6000611028836120a8565b505050506001600160a01b038416600090815260036020526040902054919250611054919050826120f7565b6001600160a01b038316600090815260036020526040902055600c5461107a90826120f7565b600c55600d5461108a9084612049565b600d55505050565b6000546001600160a01b031633146110bc5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156111345760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610961565b81611153576000611144846120a8565b50939550610a2e945050505050565b600061115e846120a8565b50929550610a2e945050505050565b6000546001600160a01b031633146111975760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561121d5760405162461bcd60e51b815260206004820152604360248201527f506c6561736520636865636b20746865206d617877616c6c657420616d6f756e60448201527f742c2073686f756c642065786365656420302e3525206f662074686520737570606482015262706c7960e81b608482015260a401610961565b61122b81633b9aca00612ea2565b601e5550565b6000546001600160a01b0316331461125b5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16156112c45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b6001600160a01b0381166000908152600360205260409020541561131e576001600160a01b03811660009081526003602052604090205461130490610bf7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260040161096190612e1c565b600a805461ff001916610100179055600e80546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b0316331461140a5760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561148e5760405162461bcd60e51b815260206004820152604160248201527f506c6561736520636865636b204d61787478416d6f756e7420616d6f756e742c60448201527f2073686f756c642065786365656420302e3525206f662074686520737570706c6064820152607960f81b608482015260a401610961565b61149c81633b9aca00612ea2565b601d5550565b6000546001600160a01b031633146114cc5760405162461bcd60e51b815260040161096190612e1c565b60066114d88386612f55565b11156115265760405162461bcd60e51b815260206004820152601860248201527f627579207461782063616e6e6f742065786365656420352500000000000000006044820152606401610961565b60066115328285612f55565b11156115805760405162461bcd60e51b815260206004820152601960248201527f73656c6c207461782063616e6e6f7420657863656564203525000000000000006044820152606401610961565b601384905560148390556017829055601881905561159e8285612f55565b601a556018546014546115b19190612f55565b601b5550505050565b6001600160a01b03811660009081526007602052604081205460ff16156115f757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a2e90610bf7565b6000546001600160a01b031633146116435760405162461bcd60e51b815260040161096190612e1c565b600080546040516001600160a01b0390911690600080516020613046833981519152908390a3600080546001600160a01b0319169055565b60606010805461099a90612e51565b6000610a2a3384610b1885604051806060016040528060258152602001613066602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611faa565b6001546001600160a01b0316331461173f5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610961565b60025442116117905760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610961565b600154600080546040516001600160a01b03938416939091169160008051602061304683398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a2a338484611b3a565b6000546001600160a01b031633146118165760405162461bcd60e51b815260040161096190612e1c565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061186390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118985760405162461bcd60e51b815260040161096190612e1c565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118c78142612f55565b600255600080546040516001600160a01b0390911690600080516020613046833981519152908390a350565b6000546001600160a01b0316331461191d5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119685760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b0381166119cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610961565b600080546040516001600160a01b038085169392169160008051602061304683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610961565b6001600160a01b038216611ad95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610961565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b9e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610961565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610961565b60008111611c625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610961565b6000546001600160a01b03848116911614801590611c8e57506000546001600160a01b03838116911614155b15611cf657601d54811115611cf65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610961565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316148015611d455750601c546001600160a01b03838116911614155b15611da257601e5481611d57846115ba565b611d619190612f55565b1115611da25760405162461bcd60e51b815260206004820152601060248201526f18da1958dac81b585e081dd85b1b195d60821b6044820152606401610961565b6000611dad306115ba565b9050601d548110611dbd5750601d545b601f5481108015908190611ddb5750601c54600160a01b900460ff16155b8015611e1957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611e2e5750601c54600160a81b900460ff165b15611e4157601f549150611e4182612139565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316148015611eb457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b15611ec6576013546012556017546016555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611f3957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b15611f4b576014546012556018546016555b6001600160a01b03851660009081526006602052604090205460019060ff1680611f8d57506001600160a01b03851660009081526006602052604090205460ff165b15611f96575060005b611fa2868686846121f1565b505050505050565b60008184841115611fce5760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f0d565b95945050505050565b6000806000611ff161242d565b90925090506120008282612007565b9250505090565b6000610c7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125af565b6000806120568385612f55565b905083811015610c745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610961565b60008060008060008060008060006120bf8a6125dd565b92509250925060008060006120dd8d86866120d8611fe4565b61261f565b919f909e50909c50959a5093985091965092945050505050565b6000610c7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611faa565b601c805460ff60a01b1916600160a01b179055476121568261266f565b600061216247836120f7565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561219d573d6000803e3d6000fd5b5060408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b1916905550565b600a54610100900460ff1661221a576000546001600160a01b0385811691161461221a57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061225957506001600160a01b03831660009081526009602052604090205460ff165b156122b057600a5460ff166122b05760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610961565b806122bd576122bd612836565b6001600160a01b03841660009081526007602052604090205460ff1680156122fe57506001600160a01b03831660009081526007602052604090205460ff16155b156123135761230e848484612864565b612411565b6001600160a01b03841660009081526007602052604090205460ff1615801561235457506001600160a01b03831660009081526007602052604090205460ff165b156123645761230e84848461298a565b6001600160a01b03841660009081526007602052604090205460ff161580156123a657506001600160a01b03831660009081526007602052604090205460ff16155b156123b65761230e848484612a33565b6001600160a01b03841660009081526007602052604090205460ff1680156123f657506001600160a01b03831660009081526007602052604090205460ff165b156124065761230e848484612a77565b612411848484612a33565b8061242757612427601554601255601954601655565b50505050565b600c54600b546000918291825b60085481101561257f5782600360006008848154811061245c5761245c612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124c757508160046000600884815481106124a0576124a0612ef7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156124dd57600c54600b54945094505050509091565b61252360036000600884815481106124f7576124f7612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f7565b925061256b600460006008848154811061253f5761253f612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f7565b91508061257781612f3a565b91505061243a565b50600b54600c5461258f91612007565b8210156125a657600c54600b549350935050509091565b90939092509050565b600081836125d05760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f6d565b6000806000806125ec85612aea565b905060006125f986612b0c565b905060006126118261260b89866120f7565b906120f7565b979296509094509092505050565b600080808061262e8886612b28565b9050600061263c8887612b28565b9050600061264a8888612b28565b9050600061265c8261260b86866120f7565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a4576126a4612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561271d57600080fd5b505afa158015612731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127559190612f8f565b8160018151811061276857612768612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250506127b3307f000000000000000000000000000000000000000000000000000000000000000084611a16565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612808908590600090869030904290600401612fac565b600060405180830381600087803b15801561282257600080fd5b505af1158015611fa2573d6000803e3d6000fd5b6012541580156128465750601654155b1561284d57565b601280546015556016805460195560009182905555565b600080600080600080612876876120a8565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128a890886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128d790876120f7565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129069086612049565b6001600160a01b03891660009081526003602052604090205561292881612ba7565b6129328483612c30565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161297791815260200190565b60405180910390a3505050505050505050565b60008060008060008061299c876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129ce90876120f7565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a049084612049565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129069086612049565b600080600080600080612a45876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128d790876120f7565b600080600080600080612a89876120a8565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612abb90886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129ce90876120f7565b6000610a2e6064612b0660125485612b2890919063ffffffff16565b90612007565b6000610a2e6064612b0660165485612b2890919063ffffffff16565b600082612b3757506000610a2e565b6000612b438385612ea2565b905082612b508583612f6d565b14610c745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610961565b6000612bb1611fe4565b90506000612bbf8383612b28565b30600090815260036020526040902054909150612bdc9082612049565b3060009081526003602090815260408083209390935560079052205460ff1615612c2b5730600090815260046020526040902054612c1a9084612049565b306000908152600460205260409020555b505050565b600c54612c3d90836120f7565b600c55600d54612c4d9082612049565b600d555050565b6001600160a01b0381168114610dbc57600080fd5b600060208284031215612c7b57600080fd5b8135610c7481612c54565b600060208083528351808285015260005b81811015612cb357858101830151858201604001528201612c97565b81811115612cc5576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612cee57600080fd5b8235612cf981612c54565b946020939093013593505050565b600060208284031215612d1957600080fd5b5035919050565b600080600060608486031215612d3557600080fd5b8335612d4081612c54565b92506020840135612d5081612c54565b929592945050506040919091013590565b8015158114610dbc57600080fd5b60008060408385031215612d8257600080fd5b823591506020830135612d9481612d61565b809150509250929050565b60008060008060808587031215612db557600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612de357600080fd5b8135610c7481612d61565b60008060408385031215612e0157600080fd5b8235612e0c81612c54565b91506020830135612d9481612c54565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612e6557607f821691505b60208210811415612e8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ebc57612ebc612e8c565b500290565b600060208284031215612ed357600080fd5b5051919050565b600060208284031215612eec57600080fd5b8151610c7481612d61565b634e487b7160e01b600052603260045260246000fd5b600082821015612f1f57612f1f612e8c565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612f4e57612f4e612e8c565b5060010190565b60008219821115612f6857612f68612e8c565b500190565b600082612f8a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fa157600080fd5b8151610c7481612c54565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ffc5784516001600160a01b031683529383019391830191600101612fd7565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb922dbf7abd42dea1455c3e163cdcee19133d88b240de8cb7e4e6788d64d664736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c80635342acb4116101755780639ad2817a116100dc578063c49b9a8011610095578063dd4670641161006f578063dd46706414610891578063dd62ed3e146108b1578063ea2f0b37146108f7578063f2fde38b1461091757600080fd5b8063c49b9a8014610845578063d12a768814610865578063d35a41901461087b57600080fd5b80639ad2817a146107a5578063a457c2d7146107bb578063a69df4b5146107db578063a9059cbb146107f0578063b6c5232414610810578063b86f92221461082557600080fd5b8063715018a61161012e578063715018a6146106f85780637d1db4a51461070d57806382247ec01461072357806388f82020146107395780638da5cb5b1461077257806395d89b411461079057600080fd5b80635342acb4146106065780635b63e2f01461063f57806360d484891461065f57806365e47de2146106985780636fcba377146106b857806370a08231146106d857600080fd5b8063313ce56711610219578063437823ec116101d2578063437823ec146105315780634549b03914610551578063495e180c1461057157806349bd5a5e146105915780634a74bb02146105c557806352390c02146105e657600080fd5b8063313ce5671461047a5780633277e3381461049c578063364333f4146104bc5780633685d419146104d157806339509351146104f15780633bd5d1731461051157600080fd5b80631f4e28481161026b5780631f4e2848146103bb5780631fc6a2dd146103db57806323b872dd146103fb5780632a3606311461041b5780632d8381191461043b5780632f05205c1461045b57600080fd5b80630305caff146102be57806306fdde03146102e0578063095ea7b31461030b57806313114a9d1461033b5780631694505e1461035a57806318160ddd146103a657600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004612c69565b610937565b005b3480156102ec57600080fd5b506102f561098b565b6040516103029190612c86565b60405180910390f35b34801561031757600080fd5b5061032b610326366004612cdb565b610a1d565b6040519015158152602001610302565b34801561034757600080fd5b50600d545b604051908152602001610302565b34801561036657600080fd5b5061038e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610302565b3480156103b257600080fd5b50600b5461034c565b3480156103c757600080fd5b506102de6103d6366004612c69565b610a34565b3480156103e757600080fd5b506102de6103f6366004612d07565b610a80565b34801561040757600080fd5b5061032b610416366004612d20565b610abe565b34801561042757600080fd5b506102de610436366004612c69565b610b27565b34801561044757600080fd5b5061034c610456366004612d07565b610bf7565b34801561046757600080fd5b50600a5461032b90610100900460ff1681565b34801561048657600080fd5b5060115460405160ff9091168152602001610302565b3480156104a857600080fd5b506102de6104b7366004612c69565b610c7b565b3480156104c857600080fd5b506102de610d83565b3480156104dd57600080fd5b506102de6104ec366004612c69565b610dbf565b3480156104fd57600080fd5b5061032b61050c366004612cdb565b610f72565b34801561051d57600080fd5b506102de61052c366004612d07565b610fa8565b34801561053d57600080fd5b506102de61054c366004612c69565b611092565b34801561055d57600080fd5b5061034c61056c366004612d6f565b6110e0565b34801561057d57600080fd5b506102de61058c366004612d07565b61116d565b34801561059d57600080fd5b5061038e7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e381565b3480156105d157600080fd5b50601c5461032b90600160a81b900460ff1681565b3480156105f257600080fd5b506102de610601366004612c69565b611231565b34801561061257600080fd5b5061032b610621366004612c69565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561064b57600080fd5b506102de61065a366004612c69565b611384565b34801561066b57600080fd5b5061032b61067a366004612c69565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106a457600080fd5b506102de6106b3366004612d07565b6113e0565b3480156106c457600080fd5b506102de6106d3366004612d9f565b6114a2565b3480156106e457600080fd5b5061034c6106f3366004612c69565b6115ba565b34801561070457600080fd5b506102de611619565b34801561071957600080fd5b5061034c601d5481565b34801561072f57600080fd5b5061034c601e5481565b34801561074557600080fd5b5061032b610754366004612c69565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561077e57600080fd5b506000546001600160a01b031661038e565b34801561079c57600080fd5b506102f561167b565b3480156107b157600080fd5b5061034c601a5481565b3480156107c757600080fd5b5061032b6107d6366004612cdb565b61168a565b3480156107e757600080fd5b506102de6116d9565b3480156107fc57600080fd5b5061032b61080b366004612cdb565b6117df565b34801561081c57600080fd5b5060025461034c565b34801561083157600080fd5b50601c5461038e906001600160a01b031681565b34801561085157600080fd5b506102de610860366004612dd1565b6117ec565b34801561087157600080fd5b5061034c601f5481565b34801561088757600080fd5b5061034c601b5481565b34801561089d57600080fd5b506102de6108ac366004612d07565b61186e565b3480156108bd57600080fd5b5061034c6108cc366004612dee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561090357600080fd5b506102de610912366004612c69565b6118f3565b34801561092357600080fd5b506102de610932366004612c69565b61193e565b6000546001600160a01b0316331461096a5760405162461bcd60e51b815260040161096190612e1c565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060600f805461099a90612e51565b80601f01602080910402602001604051908101604052809291908181526020018280546109c690612e51565b8015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b5050505050905090565b6000610a2a338484611a16565b5060015b92915050565b6000546001600160a01b03163314610a5e5760405162461bcd60e51b815260040161096190612e1c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161096190612e1c565b610ab881633b9aca00612ea2565b601f5550565b6000610acb848484611b3a565b610b1d8433610b188560405180606001604052806028815260200161301e602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611faa565b611a16565b5060019392505050565b6000546001600160a01b03163314610b515760405162461bcd60e51b815260040161096190612e1c565b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316816001600160a01b03161415610bd35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642070616972206173206120626f7400000000000000006044820152606401610961565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c5e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610961565b6000610c68611fe4565b9050610c748382612007565b9392505050565b600e546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190612ec1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610d4757600080fd5b505af1158015610d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7f9190612eda565b5050565b600e546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610dbc573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610de95760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16610e515760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b60005b600854811015610d7f57816001600160a01b031660088281548110610e7b57610e7b612ef7565b6000918252602090912001546001600160a01b03161415610f605760088054610ea690600190612f0d565b81548110610eb657610eb6612ef7565b600091825260209091200154600880546001600160a01b039092169183908110610ee257610ee2612ef7565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610f3a57610f3a612f24565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f6a81612f3a565b915050610e54565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a2a918590610b189086612049565b3360008181526007602052604090205460ff161561101d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610961565b6000611028836120a8565b505050506001600160a01b038416600090815260036020526040902054919250611054919050826120f7565b6001600160a01b038316600090815260036020526040902055600c5461107a90826120f7565b600c55600d5461108a9084612049565b600d55505050565b6000546001600160a01b031633146110bc5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156111345760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610961565b81611153576000611144846120a8565b50939550610a2e945050505050565b600061115e846120a8565b50929550610a2e945050505050565b6000546001600160a01b031633146111975760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561121d5760405162461bcd60e51b815260206004820152604360248201527f506c6561736520636865636b20746865206d617877616c6c657420616d6f756e60448201527f742c2073686f756c642065786365656420302e3525206f662074686520737570606482015262706c7960e81b608482015260a401610961565b61122b81633b9aca00612ea2565b601e5550565b6000546001600160a01b0316331461125b5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03811660009081526007602052604090205460ff16156112c45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610961565b6001600160a01b0381166000908152600360205260409020541561131e576001600160a01b03811660009081526003602052604090205461130490610bf7565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113ae5760405162461bcd60e51b815260040161096190612e1c565b600a805461ff001916610100179055600e80546001600160a01b039092166001600160a01b0319909216919091179055565b6000546001600160a01b0316331461140a5760405162461bcd60e51b815260040161096190612e1c565b6302faf08081101561148e5760405162461bcd60e51b815260206004820152604160248201527f506c6561736520636865636b204d61787478416d6f756e7420616d6f756e742c60448201527f2073686f756c642065786365656420302e3525206f662074686520737570706c6064820152607960f81b608482015260a401610961565b61149c81633b9aca00612ea2565b601d5550565b6000546001600160a01b031633146114cc5760405162461bcd60e51b815260040161096190612e1c565b60066114d88386612f55565b11156115265760405162461bcd60e51b815260206004820152601860248201527f627579207461782063616e6e6f742065786365656420352500000000000000006044820152606401610961565b60066115328285612f55565b11156115805760405162461bcd60e51b815260206004820152601960248201527f73656c6c207461782063616e6e6f7420657863656564203525000000000000006044820152606401610961565b601384905560148390556017829055601881905561159e8285612f55565b601a556018546014546115b19190612f55565b601b5550505050565b6001600160a01b03811660009081526007602052604081205460ff16156115f757506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a2e90610bf7565b6000546001600160a01b031633146116435760405162461bcd60e51b815260040161096190612e1c565b600080546040516001600160a01b0390911690600080516020613046833981519152908390a3600080546001600160a01b0319169055565b60606010805461099a90612e51565b6000610a2a3384610b1885604051806060016040528060258152602001613066602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611faa565b6001546001600160a01b0316331461173f5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610961565b60025442116117905760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610961565b600154600080546040516001600160a01b03938416939091169160008051602061304683398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a2a338484611b3a565b6000546001600160a01b031633146118165760405162461bcd60e51b815260040161096190612e1c565b601c8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061186390831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118985760405162461bcd60e51b815260040161096190612e1c565b60008054600180546001600160a01b03199081166001600160a01b038416179091551690556118c78142612f55565b600255600080546040516001600160a01b0390911690600080516020613046833981519152908390a350565b6000546001600160a01b0316331461191d5760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119685760405162461bcd60e51b815260040161096190612e1c565b6001600160a01b0381166119cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610961565b600080546040516001600160a01b038085169392169160008051602061304683398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611a785760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610961565b6001600160a01b038216611ad95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610961565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611b9e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610961565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610961565b60008111611c625760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610961565b6000546001600160a01b03848116911614801590611c8e57506000546001600160a01b03838116911614155b15611cf657601d54811115611cf65760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610961565b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316836001600160a01b0316148015611d455750601c546001600160a01b03838116911614155b15611da257601e5481611d57846115ba565b611d619190612f55565b1115611da25760405162461bcd60e51b815260206004820152601060248201526f18da1958dac81b585e081dd85b1b195d60821b6044820152606401610961565b6000611dad306115ba565b9050601d548110611dbd5750601d545b601f5481108015908190611ddb5750601c54600160a01b900460ff16155b8015611e1957507f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316856001600160a01b031614155b8015611e2e5750601c54600160a81b900460ff165b15611e4157601f549150611e4182612139565b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316856001600160a01b0316148015611eb457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614155b15611ec6576013546012556017546016555b7f0000000000000000000000002e4e335b27b6934a27449da2385cfbe2f044f7e36001600160a01b0316846001600160a01b0316148015611f3957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b031614155b15611f4b576014546012556018546016555b6001600160a01b03851660009081526006602052604090205460019060ff1680611f8d57506001600160a01b03851660009081526006602052604090205460ff165b15611f96575060005b611fa2868686846121f1565b505050505050565b60008184841115611fce5760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f0d565b95945050505050565b6000806000611ff161242d565b90925090506120008282612007565b9250505090565b6000610c7483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125af565b6000806120568385612f55565b905083811015610c745760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610961565b60008060008060008060008060006120bf8a6125dd565b92509250925060008060006120dd8d86866120d8611fe4565b61261f565b919f909e50909c50959a5093985091965092945050505050565b6000610c7483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611faa565b601c805460ff60a01b1916600160a01b179055476121568261266f565b600061216247836120f7565b600e546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561219d573d6000803e3d6000fd5b5060408051848152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601c805460ff60a01b1916905550565b600a54610100900460ff1661221a576000546001600160a01b0385811691161461221a57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061225957506001600160a01b03831660009081526009602052604090205460ff165b156122b057600a5460ff166122b05760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610961565b806122bd576122bd612836565b6001600160a01b03841660009081526007602052604090205460ff1680156122fe57506001600160a01b03831660009081526007602052604090205460ff16155b156123135761230e848484612864565b612411565b6001600160a01b03841660009081526007602052604090205460ff1615801561235457506001600160a01b03831660009081526007602052604090205460ff165b156123645761230e84848461298a565b6001600160a01b03841660009081526007602052604090205460ff161580156123a657506001600160a01b03831660009081526007602052604090205460ff16155b156123b65761230e848484612a33565b6001600160a01b03841660009081526007602052604090205460ff1680156123f657506001600160a01b03831660009081526007602052604090205460ff165b156124065761230e848484612a77565b612411848484612a33565b8061242757612427601554601255601954601655565b50505050565b600c54600b546000918291825b60085481101561257f5782600360006008848154811061245c5761245c612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124c757508160046000600884815481106124a0576124a0612ef7565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156124dd57600c54600b54945094505050509091565b61252360036000600884815481106124f7576124f7612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906120f7565b925061256b600460006008848154811061253f5761253f612ef7565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906120f7565b91508061257781612f3a565b91505061243a565b50600b54600c5461258f91612007565b8210156125a657600c54600b549350935050509091565b90939092509050565b600081836125d05760405162461bcd60e51b81526004016109619190612c86565b506000611fdb8486612f6d565b6000806000806125ec85612aea565b905060006125f986612b0c565b905060006126118261260b89866120f7565b906120f7565b979296509094509092505050565b600080808061262e8886612b28565b9050600061263c8887612b28565b9050600061264a8888612b28565b9050600061265c8261260b86866120f7565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106126a4576126a4612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561271d57600080fd5b505afa158015612731573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127559190612f8f565b8160018151811061276857612768612ef7565b60200260200101906001600160a01b031690816001600160a01b0316815250506127b3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a16565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612808908590600090869030904290600401612fac565b600060405180830381600087803b15801561282257600080fd5b505af1158015611fa2573d6000803e3d6000fd5b6012541580156128465750601654155b1561284d57565b601280546015556016805460195560009182905555565b600080600080600080612876876120a8565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128a890886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128d790876120f7565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129069086612049565b6001600160a01b03891660009081526003602052604090205561292881612ba7565b6129328483612c30565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161297791815260200190565b60405180910390a3505050505050505050565b60008060008060008061299c876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129ce90876120f7565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a049084612049565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129069086612049565b600080600080600080612a45876120a8565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128d790876120f7565b600080600080600080612a89876120a8565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612abb90886120f7565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129ce90876120f7565b6000610a2e6064612b0660125485612b2890919063ffffffff16565b90612007565b6000610a2e6064612b0660165485612b2890919063ffffffff16565b600082612b3757506000610a2e565b6000612b438385612ea2565b905082612b508583612f6d565b14610c745760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610961565b6000612bb1611fe4565b90506000612bbf8383612b28565b30600090815260036020526040902054909150612bdc9082612049565b3060009081526003602090815260408083209390935560079052205460ff1615612c2b5730600090815260046020526040902054612c1a9084612049565b306000908152600460205260409020555b505050565b600c54612c3d90836120f7565b600c55600d54612c4d9082612049565b600d555050565b6001600160a01b0381168114610dbc57600080fd5b600060208284031215612c7b57600080fd5b8135610c7481612c54565b600060208083528351808285015260005b81811015612cb357858101830151858201604001528201612c97565b81811115612cc5576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612cee57600080fd5b8235612cf981612c54565b946020939093013593505050565b600060208284031215612d1957600080fd5b5035919050565b600080600060608486031215612d3557600080fd5b8335612d4081612c54565b92506020840135612d5081612c54565b929592945050506040919091013590565b8015158114610dbc57600080fd5b60008060408385031215612d8257600080fd5b823591506020830135612d9481612d61565b809150509250929050565b60008060008060808587031215612db557600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612de357600080fd5b8135610c7481612d61565b60008060408385031215612e0157600080fd5b8235612e0c81612c54565b91506020830135612d9481612c54565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612e6557607f821691505b60208210811415612e8657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612ebc57612ebc612e8c565b500290565b600060208284031215612ed357600080fd5b5051919050565b600060208284031215612eec57600080fd5b8151610c7481612d61565b634e487b7160e01b600052603260045260246000fd5b600082821015612f1f57612f1f612e8c565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612f4e57612f4e612e8c565b5060010190565b60008219821115612f6857612f68612e8c565b500190565b600082612f8a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612fa157600080fd5b8151610c7481612c54565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612ffc5784516001600160a01b031683529383019391830191600101612fd7565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122026cb922dbf7abd42dea1455c3e163cdcee19133d88b240de8cb7e4e6788d64d664736f6c63430008090033
Deployed Bytecode Sourcemap
25646:20244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34949:113;;;;;;;;;;-1:-1:-1;34949:113:0;;;;;:::i;:::-;;:::i;:::-;;28671:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29583:161;;;;;;;;;;-1:-1:-1;29583:161:0;;;;;:::i;:::-;;:::i;:::-;;;1489:14:1;;1482:22;1464:41;;1452:2;1437:18;29583:161:0;1324:187:1;30704:87:0;;;;;;;;;;-1:-1:-1;30773:10:0;;30704:87;;;1662:25:1;;;1650:2;1635:18;30704:87:0;1516:177:1;27048:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;27048:51:0;1698:230:1;28948:95:0;;;;;;;;;;-1:-1:-1;29028:7:0;;28948:95;;33728:108;;;;;;;;;;-1:-1:-1;33728:108:0;;;;;:::i;:::-;;:::i;34304:163::-;;;;;;;;;;-1:-1:-1;34304:163:0;;;;;:::i;:::-;;:::i;29752:313::-;;;;;;;;;;-1:-1:-1;29752:313:0;;;;;:::i;:::-;;:::i;34755:182::-;;;;;;;;;;-1:-1:-1;34755:182:0;;;;;:::i;:::-;;:::i;31628:253::-;;;;;;;;;;-1:-1:-1;31628:253:0;;;;;:::i;:::-;;:::i;26189:28::-;;;;;;;;;;-1:-1:-1;26189:28:0;;;;;;;;;;;28857:83;;;;;;;;;;-1:-1:-1;28923:9:0;;28857:83;;28923:9;;;;2721:36:1;;2709:2;2694:18;28857:83:0;2579:184:1;34598:145:0;;;;;;;;;;-1:-1:-1;34598:145:0;;;;;:::i;:::-;;:::i;34479:107::-;;;;;;;;;;;;;:::i;32344:479::-;;;;;;;;;;-1:-1:-1;32344:479:0;;;;;:::i;:::-;;:::i;30073:218::-;;;;;;;;;;-1:-1:-1;30073:218:0;;;;;:::i;:::-;;:::i;30799:377::-;;;;;;;;;;-1:-1:-1;30799:377:0;;;;;:::i;:::-;;:::i;33487:111::-;;;;;;;;;;-1:-1:-1;33487:111:0;;;;;:::i;:::-;;:::i;31184:436::-;;;;;;;;;;-1:-1:-1;31184:436:0;;;;;:::i;:::-;;:::i;33851:221::-;;;;;;;;;;-1:-1:-1;33851:221:0;;;;;:::i;:::-;;:::i;27106:38::-;;;;;;;;;;;;;;;27216:40;;;;;;;;;;-1:-1:-1;27216:40:0;;;;-1:-1:-1;;;27216:40:0;;;;;;31889:447;;;;;;;;;;-1:-1:-1;31889:447:0;;;;;:::i;:::-;;:::i;39386:123::-;;;;;;;;;;-1:-1:-1;39386:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;39474:27:0;39450:4;39474:27;;;:18;:27;;;;;;;;;39386:123;35207:126;;;;;;;;;;-1:-1:-1;35207:126:0;;;;;:::i;:::-;;:::i;35074:121::-;;;;;;;;;;-1:-1:-1;35074:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;35166:21:0;35142:4;35166:21;;;:10;:21;;;;;;;;;35074:121;34080:216;;;;;;;;;;-1:-1:-1;34080:216:0;;;;;:::i;:::-;;:::i;35344:537::-;;;;;;;;;;-1:-1:-1;35344:537:0;;;;;:::i;:::-;;:::i;29051:198::-;;;;;;;;;;-1:-1:-1;29051:198:0;;;;;:::i;:::-;;:::i;16335:148::-;;;;;;;;;;;;;:::i;27269:49::-;;;;;;;;;;;;;;;;27325:45;;;;;;;;;;;;;;;;30576:120;;;;;;;;;;-1:-1:-1;30576:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30668:20:0;30644:4;30668:20;;;:11;:20;;;;;;;;;30576:120;15692:79;;;;;;;;;;-1:-1:-1;15730:7:0;15757:6;-1:-1:-1;;;;;15757:6:0;15692:79;;28762:87;;;;;;;;;;;;;:::i;26915:57::-;;;;;;;;;;;;;;;;30299:269;;;;;;;;;;-1:-1:-1;30299:269:0;;;;;:::i;:::-;;:::i;17357:305::-;;;;;;;;;;;;;:::i;29257:167::-;;;;;;;;;;-1:-1:-1;29257:167:0;;;;;:::i;:::-;;:::i;16890:89::-;;;;;;;;;;-1:-1:-1;16962:9:0;;16890:89;;27151:24;;;;;;;;;;-1:-1:-1;27151:24:0;;;;-1:-1:-1;;;;;27151:24:0;;;35902:171;;;;;;;;;;-1:-1:-1;35902:171:0;;;;;:::i;:::-;;:::i;27381:64::-;;;;;;;;;;;;;;;;26979:60;;;;;;;;;;;;;;;;17055:226;;;;;;;;;;-1:-1:-1;17055:226:0;;;;;:::i;:::-;;:::i;29432:143::-;;;;;;;;;;-1:-1:-1;29432:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29540:18:0;;;29513:7;29540:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29432:143;33610:110;;;;;;;;;;-1:-1:-1;33610:110:0;;;;;:::i;:::-;;:::i;16638:244::-;;;;;;;;;;-1:-1:-1;16638:244:0;;;;;:::i;:::-;;:::i;34949:113::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;35025:21:0::1;35049:5;35025:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;35025:29:0::1;::::0;;34949:113::o;28671:83::-;28708:13;28741:5;28734:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28671:83;:::o;29583:161::-;29658:4;29675:39;8197:10;29698:7;29707:6;29675:8;:39::i;:::-;-1:-1:-1;29732:4:0;29583:161;;;;;:::o;33728:108::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;33802:10:::1;:26:::0;;-1:-1:-1;;;;;;33802:26:0::1;-1:-1:-1::0;;;;;33802:26:0;;;::::1;::::0;;;::::1;::::0;;33728:108::o;34304:163::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;34432:27:::1;:19:::0;34454:5:::1;34432:27;:::i;:::-;34400:29;:59:::0;-1:-1:-1;34304:163:0:o;29752:313::-;29850:4;29867:36;29877:6;29885:9;29896:6;29867:9;:36::i;:::-;29914:121;29923:6;8197:10;29945:89;29983:6;29945:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29945:19:0;;;;;;:11;:19;;;;;;;;8197:10;29945:33;;;;;;;;;;:37;:89::i;:::-;29914:8;:121::i;:::-;-1:-1:-1;30053:4:0;29752:313;;;;;:::o;34755:182::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;34849:13:::1;-1:-1:-1::0;;;;;34836:26:0::1;:9;-1:-1:-1::0;;;;;34836:26:0::1;;;34828:62;;;::::0;-1:-1:-1;;;34828:62:0;;5960:2:1;34828:62:0::1;::::0;::::1;5942:21:1::0;5999:2;5979:18;;;5972:30;6038:26;6018:18;;;6011:54;6082:18;;34828:62:0::1;5758:348:1::0;34828:62:0::1;-1:-1:-1::0;;;;;34901:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;34901:28:0::1;34925:4;34901:28;::::0;;34755:182::o;31628:253::-;31694:7;31733;;31722;:18;;31714:73;;;;-1:-1:-1;;;31714:73:0;;6313:2:1;31714:73:0;;;6295:21:1;6352:2;6332:18;;;6325:30;6391:34;6371:18;;;6364:62;-1:-1:-1;;;6442:18:1;;;6435:40;6492:19;;31714:73:0;6111:406:1;31714:73:0;31798:19;31821:10;:8;:10::i;:::-;31798:33;-1:-1:-1;31849:24:0;:7;31798:33;31849:11;:24::i;:::-;31842:31;31628:253;-1:-1:-1;;;31628:253:0:o;34598:145::-;34685:10;;34697:37;;-1:-1:-1;;;34697:37:0;;34728:4;34697:37;;;1871:51:1;-1:-1:-1;;;;;34663:21:0;;;;;;34685:10;;;34663:21;;34697:22;;1844:18:1;;34697:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34663:72;;-1:-1:-1;;;;;;34663:72:0;;;;;;;-1:-1:-1;;;;;6903:32:1;;;34663:72:0;;;6885:51:1;6952:18;;;6945:34;6858:18;;34663:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34598:145;:::o;34479:107::-;34535:10;;34527:51;;-1:-1:-1;;;;;34535:10:0;;;;34556:21;34527:51;;;;;34535:10;34527:51;34535:10;34527:51;34556:21;34535:10;34527:51;;;;;;;;;;;;;;;;;;;;;34479:107::o;32344:479::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32426:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32418:60;;;::::0;-1:-1:-1;;;32418:60:0;;7442:2:1;32418:60:0::1;::::0;::::1;7424:21:1::0;7481:2;7461:18;;;7454:30;7520:29;7500:18;;;7493:57;7567:18;;32418:60:0::1;7240:351:1::0;32418:60:0::1;32494:9;32489:327;32513:9;:16:::0;32509:20;::::1;32489:327;;;32571:7;-1:-1:-1::0;;;;;32555:23:0::1;:9;32565:1;32555:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32555:12:0::1;:23;32551:254;;;32614:9;32624:16:::0;;:20:::1;::::0;32643:1:::1;::::0;32624:20:::1;:::i;:::-;32614:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32599:9:::1;:12:::0;;-1:-1:-1;;;;;32614:31:0;;::::1;::::0;32609:1;;32599:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32599:46:0::1;-1:-1:-1::0;;;;;32599:46:0;;::::1;;::::0;;32664:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32703:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32703:28:0::1;::::0;;32750:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32750:15:0;;;;;-1:-1:-1;;;;;;32750:15:0::1;::::0;;;;;34663:72;34598:145;:::o;32551:254::-:1;32531:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32489:327;;30073:218:::0;8197:10;30161:4;30210:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30210:34:0;;;;;;;;;;30161:4;;30178:83;;30201:7;;30210:50;;30249:10;30210:38;:50::i;30799:377::-;8197:10;30851:14;30900:19;;;:11;:19;;;;;;;;30899:20;30891:77;;;;-1:-1:-1;;;30891:77:0;;8332:2:1;30891:77:0;;;8314:21:1;8371:2;8351:18;;;8344:30;8410:34;8390:18;;;8383:62;-1:-1:-1;;;8461:18:1;;;8454:42;8513:19;;30891:77:0;8130:408:1;30891:77:0;30980:15;31004:19;31015:7;31004:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31052:15:0;;;;;;:7;:15;;;;;;30979:44;;-1:-1:-1;31052:28:0;;:15;-1:-1:-1;30979:44:0;31052:19;:28::i;:::-;-1:-1:-1;;;;;31034:15:0;;;;;;:7;:15;;;;;:46;31101:7;;:20;;31113:7;31101:11;:20::i;:::-;31091:7;:30;31145:10;;:23;;31160:7;31145:14;:23::i;:::-;31132:10;:36;-1:-1:-1;;;30799:377:0:o;33487:111::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33556:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33556:34:0::1;33586:4;33556:34;::::0;;33487:111::o;31184:436::-;31274:7;31313;;31302;:18;;31294:62;;;;-1:-1:-1;;;31294:62:0;;8745:2:1;31294:62:0;;;8727:21:1;8784:2;8764:18;;;8757:30;8823:33;8803:18;;;8796:61;8874:18;;31294:62:0;8543:355:1;31294:62:0;31372:17;31367:246;;31407:15;31431:19;31442:7;31431:10;:19::i;:::-;-1:-1:-1;31406:44:0;;-1:-1:-1;31465:14:0;;-1:-1:-1;;;;;31465:14:0;31367:246;31514:23;31545:19;31556:7;31545:10;:19::i;:::-;-1:-1:-1;31512:52:0;;-1:-1:-1;31579:22:0;;-1:-1:-1;;;;;31579:22:0;33851:221;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;33946:8:::1;33936:6;:18;;33928:98;;;::::0;-1:-1:-1;;;33928:98:0;;9105:2:1;33928:98:0::1;::::0;::::1;9087:21:1::0;9144:2;9124:18;;;9117:30;9183:34;9163:18;;;9156:62;9254:34;9234:18;;;9227:62;-1:-1:-1;;;9305:19:1;;;9298:34;9349:19;;33928:98:0::1;8903:471:1::0;33928:98:0::1;34050:14;:6:::0;34059:5:::1;34050:14;:::i;:::-;34037:10;:27:::0;-1:-1:-1;33851:221:0:o;31889:447::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32086:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32085:21;32077:61;;;::::0;-1:-1:-1;;;32077:61:0;;7442:2:1;32077:61:0::1;::::0;::::1;7424:21:1::0;7481:2;7461:18;;;7454:30;7520:29;7500:18;;;7493:57;7567:18;;32077:61:0::1;7240:351:1::0;32077:61:0::1;-1:-1:-1::0;;;;;32152:16:0;::::1;32171:1;32152:16:::0;;;:7:::1;:16;::::0;;;;;:20;32149:108:::1;;-1:-1:-1::0;;;;;32228:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32208:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32189:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32149:108:::1;-1:-1:-1::0;;;;;32267:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32267:27:0::1;32290:4;32267:27:::0;;::::1;::::0;;;32305:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32305:23:0::1;::::0;;::::1;::::0;;31889:447::o;35207:126::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;35278:8:::1;:15:::0;;-1:-1:-1;;35278:15:0::1;;;::::0;;35304:10:::1;:21:::0;;-1:-1:-1;;;;;35304:21:0;;::::1;-1:-1:-1::0;;;;;;35304:21:0;;::::1;::::0;;;::::1;::::0;;35207:126::o;34080:216::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;34170:8:::1;34160:6;:18;;34152:96;;;::::0;-1:-1:-1;;;34152:96:0;;9581:2:1;34152:96:0::1;::::0;::::1;9563:21:1::0;9620:2;9600:18;;;9593:30;9659:34;9639:18;;;9632:62;9730:34;9710:18;;;9703:62;-1:-1:-1;;;9781:19:1;;;9774:32;9823:19;;34152:96:0::1;9379:469:1::0;34152:96:0::1;34274:14;:6:::0;34283:5:::1;34274:14;:::i;:::-;34259:12;:29:::0;-1:-1:-1;34080:216:0:o;35344:537::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;35506:1:::1;35479:23;35489:13:::0;35479:7;:23:::1;:::i;:::-;:28;;35471:65;;;::::0;-1:-1:-1;;;35471:65:0;;10188:2:1;35471:65:0::1;::::0;::::1;10170:21:1::0;10227:2;10207:18;;;10200:30;10266:26;10246:18;;;10239:54;10310:18;;35471:65:0::1;9986:348:1::0;35471:65:0::1;35584:1;35555:25;35566:14:::0;35555:8;:25:::1;:::i;:::-;:30;;35547:68;;;::::0;-1:-1:-1;;;35547:68:0;;10541:2:1;35547:68:0::1;::::0;::::1;10523:21:1::0;10580:2;10560:18;;;10553:30;10619:27;10599:18;;;10592:55;10664:18;;35547:68:0::1;10339:349:1::0;35547:68:0::1;35626:9;:19:::0;;;35656:10:::1;:21:::0;;;35688:15:::1;:31:::0;;;35730:16:::1;:33:::0;;;35789:27:::1;35706:13:::0;35638:7;35789:27:::1;:::i;:::-;35774:12;:42:::0;35856:16:::1;::::0;35843:10:::1;::::0;:29:::1;::::0;35856:16;35843:29:::1;:::i;:::-;35827:13;:45:::0;-1:-1:-1;;;;35344:537:0:o;29051:198::-;-1:-1:-1;;;;;29141:20:0;;29117:7;29141:20;;;:11;:20;;;;;;;;29137:49;;;-1:-1:-1;;;;;;29170:16:0;;;;;:7;:16;;;;;;;29051:198::o;29137:49::-;-1:-1:-1;;;;;29224:16:0;;;;;;:7;:16;;;;;;29204:37;;:19;:37::i;16335:148::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;16442:1:::1;16426:6:::0;;16405:40:::1;::::0;-1:-1:-1;;;;;16426:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16405:40:0;16442:1;;16405:40:::1;16473:1;16456:19:::0;;-1:-1:-1;;;;;;16456:19:0::1;::::0;;16335:148::o;28762:87::-;28801:13;28834:7;28827:14;;;;;:::i;30299:269::-;30392:4;30409:129;8197:10;30432:7;30441:96;30480:15;30441:96;;;;;;;;;;;;;;;;;8197:10;30441:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30441:34:0;;;;;;;;;;;;:38;:96::i;17357:305::-;17409:14;;-1:-1:-1;;;;;17409:14:0;17427:10;17409:28;17401:76;;;;-1:-1:-1;;;17401:76:0;;10895:2:1;17401:76:0;;;10877:21:1;10934:2;10914:18;;;10907:30;10973:34;10953:18;;;10946:62;-1:-1:-1;;;11024:18:1;;;11017:33;11067:19;;17401:76:0;10693:399:1;17401:76:0;17514:9;;17496:15;:27;17488:72;;;;-1:-1:-1;;;17488:72:0;;11299:2:1;17488:72:0;;;11281:21:1;11338:2;11318:18;;;11311:30;11377:33;11357:18;;;11350:61;11428:18;;17488:72:0;11097:355:1;17488:72:0;17605:14;;;17597:6;;17576:44;;-1:-1:-1;;;;;17605:14:0;;;;17597:6;;;;-1:-1:-1;;;;;;;;;;;17576:44:0;;17640:14;;;17631:23;;-1:-1:-1;;;;;;17631:23:0;-1:-1:-1;;;;;17640:14:0;;;17631:23;;;;;;17357:305::o;29257:167::-;29335:4;29352:42;8197:10;29376:9;29387:6;29352:9;:42::i;35902:171::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;35979:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35979:32:0::1;-1:-1:-1::0;;;;35979:32:0;;::::1;;::::0;;36027:38:::1;::::0;::::1;::::0;::::1;::::0;36003:8;1489:14:1;1482:22;1464:41;;1452:2;1437:18;;1324:187;36027:38:0::1;;;;;;;;35902:171:::0;:::o;17055:226::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;17136:6:::1;::::0;;;17119:23;;-1:-1:-1;;;;;;17119:23:0;;::::1;-1:-1:-1::0;;;;;17136:6:0;::::1;17119:23;::::0;;;17153:19:::1;::::0;;17195:22:::1;17213:4:::0;17195:15:::1;:22;:::i;:::-;17183:9;:34:::0;17270:1:::1;17254:6:::0;;17233:40:::1;::::0;-1:-1:-1;;;;;17254:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17233:40:0;17270:1;;17233:40:::1;17055:226:::0;:::o;33610:110::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33677:27:0::1;33707:5;33677:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33677:35:0::1;::::0;;33610:110::o;16638:244::-;15904:6;;-1:-1:-1;;;;;15904:6:0;8197:10;15904:22;15896:67;;;;-1:-1:-1;;;15896:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16727:22:0;::::1;16719:73;;;::::0;-1:-1:-1;;;16719:73:0;;11659:2:1;16719:73:0::1;::::0;::::1;11641:21:1::0;11698:2;11678:18;;;11671:30;11737:34;11717:18;;;11710:62;-1:-1:-1;;;11788:18:1;;;11781:36;11834:19;;16719:73:0::1;11457:402:1::0;16719:73:0::1;16829:6;::::0;;16808:38:::1;::::0;-1:-1:-1;;;;;16808:38:0;;::::1;::::0;16829:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16808:38:0;::::1;16857:6;:17:::0;;-1:-1:-1;;;;;;16857:17:0::1;-1:-1:-1::0;;;;;16857:17:0;;;::::1;::::0;;;::::1;::::0;;16638:244::o;39517:337::-;-1:-1:-1;;;;;39610:19:0;;39602:68;;;;-1:-1:-1;;;39602:68:0;;12066:2:1;39602:68:0;;;12048:21:1;12105:2;12085:18;;;12078:30;12144:34;12124:18;;;12117:62;-1:-1:-1;;;12195:18:1;;;12188:34;12239:19;;39602:68:0;11864:400:1;39602:68:0;-1:-1:-1;;;;;39689:21:0;;39681:68;;;;-1:-1:-1;;;39681:68:0;;12471:2:1;39681:68:0;;;12453:21:1;12510:2;12490:18;;;12483:30;12549:34;12529:18;;;12522:62;-1:-1:-1;;;12600:18:1;;;12593:32;12642:19;;39681:68:0;12269:398:1;39681:68:0;-1:-1:-1;;;;;39762:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39814:32;;1662:25:1;;;39814:32:0;;1635:18:1;39814:32:0;;;;;;;39517:337;;;:::o;39862:2038::-;-1:-1:-1;;;;;39984:18:0;;39976:68;;;;-1:-1:-1;;;39976:68:0;;12874:2:1;39976:68:0;;;12856:21:1;12913:2;12893:18;;;12886:30;12952:34;12932:18;;;12925:62;-1:-1:-1;;;13003:18:1;;;12996:35;13048:19;;39976:68:0;12672:401:1;39976:68:0;-1:-1:-1;;;;;40063:16:0;;40055:64;;;;-1:-1:-1;;;40055:64:0;;13280:2:1;40055:64:0;;;13262:21:1;13319:2;13299:18;;;13292:30;13358:34;13338:18;;;13331:62;-1:-1:-1;;;13409:18:1;;;13402:33;13452:19;;40055:64:0;13078:399:1;40055:64:0;40147:1;40138:6;:10;40130:64;;;;-1:-1:-1;;;40130:64:0;;13684:2:1;40130:64:0;;;13666:21:1;13723:2;13703:18;;;13696:30;13762:34;13742:18;;;13735:62;-1:-1:-1;;;13813:18:1;;;13806:39;13862:19;;40130:64:0;13482:405:1;40130:64:0;15730:7;15757:6;-1:-1:-1;;;;;40208:15:0;;;15757:6;;40208:15;;;;:32;;-1:-1:-1;15730:7:0;15757:6;-1:-1:-1;;;;;40227:13:0;;;15757:6;;40227:13;;40208:32;40205:125;;;40273:12;;40263:6;:22;;40255:75;;;;-1:-1:-1;;;40255:75:0;;14094:2:1;40255:75:0;;;14076:21:1;14133:2;14113:18;;;14106:30;14172:34;14152:18;;;14145:62;-1:-1:-1;;;14223:18:1;;;14216:38;14271:19;;40255:75:0;13892:404:1;40255:75:0;40362:13;-1:-1:-1;;;;;40354:21:0;:4;-1:-1:-1;;;;;40354:21:0;;:40;;;;-1:-1:-1;40385:9:0;;-1:-1:-1;;;;;40379:15:0;;;40385:9;;40379:15;;40354:40;40351:137;;;40445:10;;40435:6;40419:13;40429:2;40419:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;40411:65;;;;-1:-1:-1;;;40411:65:0;;14503:2:1;40411:65:0;;;14485:21:1;14542:2;14522:18;;;14515:30;-1:-1:-1;;;14561:18:1;;;14554:46;14617:18;;40411:65:0;14301:340:1;40411:65:0;40509:28;40540:24;40558:4;40540:9;:24::i;:::-;40509:55;;40612:12;;40588:20;:36;40585:112;;-1:-1:-1;40673:12:0;;40585:112;40768:29;;40744:53;;;;;;;40826;;-1:-1:-1;40863:16:0;;-1:-1:-1;;;40863:16:0;;;;40862:17;40826:53;:91;;;;;40904:13;-1:-1:-1;;;;;40896:21:0;:4;-1:-1:-1;;;;;40896:21:0;;;40826:91;:129;;;;-1:-1:-1;40934:21:0;;-1:-1:-1;;;40934:21:0;;;;40826:129;40808:320;;;41005:29;;40982:52;;41078:36;41093:20;41078:14;:36::i;:::-;41159:13;-1:-1:-1;;;;;41151:21:0;:4;-1:-1:-1;;;;;41151:21:0;;:55;;;;;41190:15;-1:-1:-1;;;;;41176:30:0;:2;-1:-1:-1;;;;;41176:30:0;;;41151:55;41148:152;;;41233:9;;41223:7;:19;41273:15;;41257:13;:31;41148:152;41330:13;-1:-1:-1;;;;;41324:19:0;:2;-1:-1:-1;;;;;41324:19:0;;:55;;;;;41363:15;-1:-1:-1;;;;;41347:32:0;:4;-1:-1:-1;;;;;41347:32:0;;;41324:55;41320:155;;;41406:10;;41396:7;:20;41447:16;;41431:13;:32;41320:155;-1:-1:-1;;;;;41675:24:0;;41548:12;41675:24;;;:18;:24;;;;;;41563:4;;41675:24;;;:50;;-1:-1:-1;;;;;;41703:22:0;;;;;;:18;:22;;;;;;;;41675:50;41672:96;;;-1:-1:-1;41751:5:0;41672:96;41854:38;41869:4;41874:2;41877:6;41884:7;41854:14;:38::i;:::-;39965:1935;;;39862:2038;;;:::o;4448:192::-;4534:7;4570:12;4562:6;;;;4554:29;;;;-1:-1:-1;;;4554:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4594:9:0;4606:5;4610:1;4606;:5;:::i;:::-;4594:17;4448:192;-1:-1:-1;;;;;4448:192:0:o;37536:163::-;37577:7;37598:15;37615;37634:19;:17;:19::i;:::-;37597:56;;-1:-1:-1;37597:56:0;-1:-1:-1;37671:20:0;37597:56;;37671:11;:20::i;:::-;37664:27;;;;37536:163;:::o;5846:132::-;5904:7;5931:39;5935:1;5938;5931:39;;;;;;;;;;;;;;;;;:3;:39::i;3545:181::-;3603:7;;3635:5;3639:1;3635;:5;:::i;:::-;3623:17;;3664:1;3659;:6;;3651:46;;;;-1:-1:-1;;;3651:46:0;;14848:2:1;3651:46:0;;;14830:21:1;14887:2;14867:18;;;14860:30;14926:29;14906:18;;;14899:57;14973:18;;3651:46:0;14646:351:1;36334:419:0;36393:7;36402;36411;36420;36429;36438;36459:23;36484:12;36498:18;36520:20;36532:7;36520:11;:20::i;:::-;36458:82;;;;;;36552:15;36569:23;36594:12;36610:50;36622:7;36631:4;36637:10;36649;:8;:10::i;:::-;36610:11;:50::i;:::-;36551:109;;;;-1:-1:-1;36551:109:0;;-1:-1:-1;36711:15:0;;-1:-1:-1;36728:4:0;;-1:-1:-1;36734:10:0;;-1:-1:-1;36334:419:0;;-1:-1:-1;;;;;36334:419:0:o;4009:136::-;4067:7;4094:43;4098:1;4101;4094:43;;;;;;;;;;;;;;;;;:3;:43::i;41908:505::-;27752:16;:23;;-1:-1:-1;;;;27752:23:0;-1:-1:-1;;;27752:23:0;;;42028:21:::1;42094:38;42111:20:::0;42094:16:::1;:38::i;:::-;42194:18;42215:41;:21;42241:14:::0;42215:25:::1;:41::i;:::-;42277:10;::::0;42269:40:::1;::::0;42194:62;;-1:-1:-1;;;;;;42277:10:0::1;::::0;42269:40;::::1;;;::::0;42194:62;;42277:10:::1;42269:40:::0;42277:10;42269:40;42194:62;42277:10;42269:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;42335:70:0::1;::::0;;15204:25:1;;;15260:2;15245:18;;15238:34;;;15288:18;;;15281:34;;;42335:70:0::1;::::0;15192:2:1;15177:18;42335:70:0::1;;;;;;;-1:-1:-1::0;;27798:16:0;:24;;-1:-1:-1;;;;27798:24:0;;;-1:-1:-1;41908:505:0:o;43093:1114::-;43204:8;;;;;;;43200:114;;15730:7;15757:6;-1:-1:-1;;;;;43236:17:0;;;15757:6;;43236:17;43228:26;;;;;;-1:-1:-1;;;;;43337:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;43359:21:0;;;;;;:10;:21;;;;;;;;43337:43;43334:126;;;43404:12;;;;43396:52;;;;-1:-1:-1;;;43396:52:0;;15528:2:1;43396:52:0;;;15510:21:1;15567:2;15547:18;;;15540:30;15606:29;15586:18;;;15579:57;15653:18;;43396:52:0;15326:351:1;43396:52:0;43484:7;43480:40;;43506:14;:12;:14::i;:::-;-1:-1:-1;;;;;43545:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;43569:22:0;;;;;;:11;:22;;;;;;;;43568:23;43545:46;43541:597;;;43608:48;43630:6;43638:9;43649:6;43608:21;:48::i;:::-;43541:597;;;-1:-1:-1;;;;;43679:19:0;;;;;;:11;:19;;;;;;;;43678:20;:46;;;;-1:-1:-1;;;;;;43702:22:0;;;;;;:11;:22;;;;;;;;43678:46;43674:464;;;43741:46;43761:6;43769:9;43780:6;43741:19;:46::i;43674:464::-;-1:-1:-1;;;;;43810:19:0;;;;;;:11;:19;;;;;;;;43809:20;:47;;;;-1:-1:-1;;;;;;43834:22:0;;;;;;:11;:22;;;;;;;;43833:23;43809:47;43805:333;;;43873:44;43891:6;43899:9;43910:6;43873:17;:44::i;43805:333::-;-1:-1:-1;;;;;43939:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;43962:22:0;;;;;;:11;:22;;;;;;;;43939:45;43935:203;;;44001:48;44023:6;44031:9;44042:6;44001:21;:48::i;43935:203::-;44082:44;44100:6;44108:9;44119:6;44082:17;:44::i;:::-;44162:7;44158:41;;44184:15;39303;;39293:7;:25;39345:21;;39329:13;:37;39249:125;44184:15;43093:1114;;;;:::o;37707:561::-;37804:7;;37840;;37757;;;;;37864:289;37888:9;:16;37884:20;;37864:289;;;37954:7;37930;:21;37938:9;37948:1;37938:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37938:12:0;37930:21;;;;;;;;;;;;;:31;;:66;;;37989:7;37965;:21;37973:9;37983:1;37973:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37973:12:0;37965:21;;;;;;;;;;;;;:31;37930:66;37926:97;;;38006:7;;38015;;37998:25;;;;;;;37707:561;;:::o;37926:97::-;38048:34;38060:7;:21;38068:9;38078:1;38068:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38068:12:0;38060:21;;;;;;;;;;;;;38048:7;;:11;:34::i;:::-;38038:44;;38107:34;38119:7;:21;38127:9;38137:1;38127:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38127:12:0;38119:21;;;;;;;;;;;;;38107:7;;:11;:34::i;:::-;38097:44;-1:-1:-1;37906:3:0;;;;:::i;:::-;;;;37864:289;;;-1:-1:-1;38189:7:0;;38177;;:20;;:11;:20::i;:::-;38167:7;:30;38163:61;;;38207:7;;38216;;38199:25;;;;;;37707:561;;:::o;38163:61::-;38243:7;;38252;;-1:-1:-1;37707:561:0;-1:-1:-1;37707:561:0:o;6474:278::-;6560:7;6595:12;6588:5;6580:28;;;;-1:-1:-1;;;6580:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6619:9:0;6631:5;6635:1;6631;:5;:::i;36761:330::-;36821:7;36830;36839;36859:12;36874:24;36890:7;36874:15;:24::i;:::-;36859:39;;36909:18;36930:30;36952:7;36930:21;:30::i;:::-;36909:51;-1:-1:-1;36971:23:0;36997:33;36909:51;36997:17;:7;37009:4;36997:11;:17::i;:::-;:21;;:33::i;:::-;36971:59;37066:4;;-1:-1:-1;37072:10:0;;-1:-1:-1;36761:330:0;;-1:-1:-1;;;36761:330:0:o;37099:429::-;37214:7;;;;37270:24;:7;37282:11;37270;:24::i;:::-;37252:42;-1:-1:-1;37305:12:0;37320:21;:4;37329:11;37320:8;:21::i;:::-;37305:36;-1:-1:-1;37352:18:0;37373:27;:10;37388:11;37373:14;:27::i;:::-;37352:48;-1:-1:-1;37411:23:0;37437:33;37352:48;37437:17;:7;37449:4;37437:11;:17::i;:33::-;37489:7;;;;-1:-1:-1;37515:4:0;;-1:-1:-1;37099:429:0;;-1:-1:-1;;;;;;;37099:429:0:o;42421:589::-;42571:16;;;42585:1;42571:16;;;;;;;;42547:21;;42571:16;;;;;;;;;;-1:-1:-1;42571:16:0;42547:40;;42616:4;42598;42603:1;42598:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42598:23:0;;;-1:-1:-1;;;;;42598:23:0;;;;;42642:15;-1:-1:-1;;;;;42642:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42632:4;42637:1;42632:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;42632:32:0;;;-1:-1:-1;;;;;42632:32:0;;;;;42677:62;42694:4;42709:15;42727:11;42677:8;:62::i;:::-;42778:224;;-1:-1:-1;;;42778:224:0;;-1:-1:-1;;;;;42778:15:0;:66;;;;:224;;42859:11;;42885:1;;42929:4;;42956;;42976:15;;42778:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38987:250;39033:7;;:12;:34;;;;-1:-1:-1;39049:13:0;;:18;39033:34;39030:46;;;38987:250::o;39030:46::-;39114:7;;;39096:15;:25;39156:13;;;39132:21;:37;-1:-1:-1;39190:11:0;;;;39212:17;38987:250::o;45319:566::-;45422:15;45439:23;45464:12;45478:23;45503:12;45517:18;45539:19;45550:7;45539:10;:19::i;:::-;-1:-1:-1;;;;;45587:15:0;;;;;;:7;:15;;;;;;45421:137;;-1:-1:-1;45421:137:0;;-1:-1:-1;45421:137:0;;-1:-1:-1;45421:137:0;-1:-1:-1;45421:137:0;-1:-1:-1;45421:137:0;-1:-1:-1;45587:28:0;;45607:7;45587:19;:28::i;:::-;-1:-1:-1;;;;;45569:15:0;;;;;;:7;:15;;;;;;;;:46;;;;45644:7;:15;;;;:28;;45664:7;45644:19;:28::i;:::-;-1:-1:-1;;;;;45626:15:0;;;;;;;:7;:15;;;;;;:46;;;;45704:18;;;;;;;:39;;45727:15;45704:22;:39::i;:::-;-1:-1:-1;;;;;45683:18:0;;;;;;:7;:18;;;;;:60;45757:26;45772:10;45757:14;:26::i;:::-;45794:23;45806:4;45812;45794:11;:23::i;:::-;45850:9;-1:-1:-1;;;;;45833:44:0;45842:6;-1:-1:-1;;;;;45833:44:0;;45861:15;45833:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;45833:44:0;;;;;;;;45410:475;;;;;;45319:566;;;:::o;44725:586::-;44826:15;44843:23;44868:12;44882:23;44907:12;44921:18;44943:19;44954:7;44943:10;:19::i;:::-;-1:-1:-1;;;;;44991:15:0;;;;;;:7;:15;;;;;;44825:137;;-1:-1:-1;44825:137:0;;-1:-1:-1;44825:137:0;;-1:-1:-1;44825:137:0;-1:-1:-1;44825:137:0;-1:-1:-1;44825:137:0;-1:-1:-1;44991:28:0;;44825:137;44991:19;:28::i;:::-;-1:-1:-1;;;;;44973:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45051:18;;;;;:7;:18;;;;;:39;;45074:15;45051:22;:39::i;:::-;-1:-1:-1;;;;;45030:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45122:7;:18;;;;:39;;45145:15;45122:22;:39::i;44215:502::-;44314:15;44331:23;44356:12;44370:23;44395:12;44409:18;44431:19;44442:7;44431:10;:19::i;:::-;-1:-1:-1;;;;;44479:15:0;;;;;;:7;:15;;;;;;44313:137;;-1:-1:-1;44313:137:0;;-1:-1:-1;44313:137:0;;-1:-1:-1;44313:137:0;-1:-1:-1;44313:137:0;-1:-1:-1;44313:137:0;-1:-1:-1;44479:28:0;;44313:137;44479:19;:28::i;32833:642::-;32936:15;32953:23;32978:12;32992:23;33017:12;33031:18;33053:19;33064:7;33053:10;:19::i;:::-;-1:-1:-1;;;;;33101:15:0;;;;;;:7;:15;;;;;;32935:137;;-1:-1:-1;32935:137:0;;-1:-1:-1;32935:137:0;;-1:-1:-1;32935:137:0;-1:-1:-1;32935:137:0;-1:-1:-1;32935:137:0;-1:-1:-1;33101:28:0;;33121:7;33101:19;:28::i;:::-;-1:-1:-1;;;;;33083:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33158:7;:15;;;;:28;;33178:7;33158:19;:28::i;38647:154::-;38711:7;38738:55;38777:5;38738:20;38750:7;;38738;:11;;:20;;;;:::i;:::-;:24;;:55::i;38809:166::-;38879:7;38906:61;38951:5;38906:26;38918:13;;38906:7;:11;;:26;;;;:::i;4899:471::-;4957:7;5202:6;5198:47;;-1:-1:-1;5232:1:0;5225:8;;5198:47;5257:9;5269:5;5273:1;5269;:5;:::i;:::-;5257:17;-1:-1:-1;5302:1:0;5293:5;5297:1;5257:17;5293:5;:::i;:::-;:10;5285:56;;;;-1:-1:-1;;;5285:56:0;;17479:2:1;5285:56:0;;;17461:21:1;17518:2;17498:18;;;17491:30;17557:34;17537:18;;;17530:62;-1:-1:-1;;;17608:18:1;;;17601:31;17649:19;;5285:56:0;17277:397:1;38280:355:0;38343:19;38366:10;:8;:10::i;:::-;38343:33;-1:-1:-1;38387:18:0;38408:27;:10;38343:33;38408:14;:27::i;:::-;38487:4;38471:22;;;;:7;:22;;;;;;38387:48;;-1:-1:-1;38471:38:0;;38387:48;38471:26;:38::i;:::-;38462:4;38446:22;;;;:7;:22;;;;;;;;:63;;;;38523:11;:26;;;;;;38520:107;;;38605:4;38589:22;;;;:7;:22;;;;;;:38;;38616:10;38589:26;:38::i;:::-;38580:4;38564:22;;;;:7;:22;;;;;:63;38520:107;38332:303;;38280:355;:::o;36179:147::-;36257:7;;:17;;36269:4;36257:11;:17::i;:::-;36247:7;:27;36298:10;;:20;;36313:4;36298:14;:20::i;:::-;36285:10;:33;-1:-1:-1;;36179:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:597::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;840:6;837:1;834:13;831:91;;;910:1;905:2;896:6;885:9;881:22;877:31;870:42;831:91;-1:-1:-1;983:2:1;962:15;-1:-1:-1;;958:29:1;943:45;;;;990:2;939:54;;402:597;-1:-1:-1;;;402:597:1:o;1004:315::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;1309:2;1294:18;;;;1281:32;;-1:-1:-1;;;1004:315:1:o;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;3033:118::-;3119:5;3112:13;3105:21;3098:5;3095:32;3085:60;;3141:1;3138;3131:12;3156:309;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3334:9;3321:23;3311:33;;3394:2;3383:9;3379:18;3366:32;3407:28;3429:5;3407:28;:::i;:::-;3454:5;3444:15;;;3156:309;;;;;:::o;3678:385::-;3764:6;3772;3780;3788;3841:3;3829:9;3820:7;3816:23;3812:33;3809:53;;;3858:1;3855;3848:12;3809:53;-1:-1:-1;;3881:23:1;;;3951:2;3936:18;;3923:32;;-1:-1:-1;4002:2:1;3987:18;;3974:32;;4053:2;4038:18;4025:32;;-1:-1:-1;3678:385:1;-1:-1:-1;3678:385:1:o;4068:241::-;4124:6;4177:2;4165:9;4156:7;4152:23;4148:32;4145:52;;;4193:1;4190;4183:12;4145:52;4232:9;4219:23;4251:28;4273:5;4251:28;:::i;4314:388::-;4382:6;4390;4443:2;4431:9;4422:7;4418:23;4414:32;4411:52;;;4459:1;4456;4449:12;4411:52;4498:9;4485:23;4517:31;4542:5;4517:31;:::i;:::-;4567:5;-1:-1:-1;4624:2:1;4609:18;;4596:32;4637:33;4596:32;4637:33;:::i;4707:356::-;4909:2;4891:21;;;4928:18;;;4921:30;4987:34;4982:2;4967:18;;4960:62;5054:2;5039:18;;4707:356::o;5068:380::-;5147:1;5143:12;;;;5190;;;5211:61;;5265:4;5257:6;5253:17;5243:27;;5211:61;5318:2;5310:6;5307:14;5287:18;5284:38;5281:161;;;5364:10;5359:3;5355:20;5352:1;5345:31;5399:4;5396:1;5389:15;5427:4;5424:1;5417:15;5281:161;;5068:380;;;:::o;5453:127::-;5514:10;5509:3;5505:20;5502:1;5495:31;5545:4;5542:1;5535:15;5569:4;5566:1;5559:15;5585:168;5625:7;5691:1;5687;5683:6;5679:14;5676:1;5673:21;5668:1;5661:9;5654:17;5650:45;5647:71;;;5698:18;;:::i;:::-;-1:-1:-1;5738:9:1;;5585:168::o;6522:184::-;6592:6;6645:2;6633:9;6624:7;6620:23;6616:32;6613:52;;;6661:1;6658;6651:12;6613:52;-1:-1:-1;6684:16:1;;6522:184;-1:-1:-1;6522:184:1:o;6990:245::-;7057:6;7110:2;7098:9;7089:7;7085:23;7081:32;7078:52;;;7126:1;7123;7116:12;7078:52;7158:9;7152:16;7177:28;7199:5;7177:28;:::i;7596:127::-;7657:10;7652:3;7648:20;7645:1;7638:31;7688:4;7685:1;7678:15;7712:4;7709:1;7702:15;7728:125;7768:4;7796:1;7793;7790:8;7787:34;;;7801:18;;:::i;:::-;-1:-1:-1;7838:9:1;;7728:125::o;7858:127::-;7919:10;7914:3;7910:20;7907:1;7900:31;7950:4;7947:1;7940:15;7974:4;7971:1;7964:15;7990:135;8029:3;-1:-1:-1;;8050:17:1;;8047:43;;;8070:18;;:::i;:::-;-1:-1:-1;8117:1:1;8106:13;;7990:135::o;9853:128::-;9893:3;9924:1;9920:6;9917:1;9914:13;9911:39;;;9930:18;;:::i;:::-;-1:-1:-1;9966:9:1;;9853:128::o;15682:217::-;15722:1;15748;15738:132;;15792:10;15787:3;15783:20;15780:1;15773:31;15827:4;15824:1;15817:15;15855:4;15852:1;15845:15;15738:132;-1:-1:-1;15884:9:1;;15682:217::o;16036:251::-;16106:6;16159:2;16147:9;16138:7;16134:23;16130:32;16127:52;;;16175:1;16172;16165:12;16127:52;16207:9;16201:16;16226:31;16251:5;16226:31;:::i;16292:980::-;16554:4;16602:3;16591:9;16587:19;16633:6;16622:9;16615:25;16659:2;16697:6;16692:2;16681:9;16677:18;16670:34;16740:3;16735:2;16724:9;16720:18;16713:31;16764:6;16799;16793:13;16830:6;16822;16815:22;16868:3;16857:9;16853:19;16846:26;;16907:2;16899:6;16895:15;16881:29;;16928:1;16938:195;16952:6;16949:1;16946:13;16938:195;;;17017:13;;-1:-1:-1;;;;;17013:39:1;17001:52;;17108:15;;;;17073:12;;;;17049:1;16967:9;16938:195;;;-1:-1:-1;;;;;;;17189:32:1;;;;17184:2;17169:18;;17162:60;-1:-1:-1;;;17253:3:1;17238:19;17231:35;17150:3;16292:980;-1:-1:-1;;;16292:980:1:o
Swarm Source
ipfs://26cb922dbf7abd42dea1455c3e163cdcee19133d88b240de8cb7e4e6788d64d6
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.