More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 103 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20363746 | 135 days ago | IN | 0 ETH | 0.00207645 | ||||
Approve | 20264103 | 149 days ago | IN | 0 ETH | 0.00015035 | ||||
Approve | 20026342 | 182 days ago | IN | 0 ETH | 0.00509218 | ||||
Approve | 19860613 | 205 days ago | IN | 0 ETH | 0.00018738 | ||||
Approve | 19607095 | 241 days ago | IN | 0 ETH | 0.00050524 | ||||
Approve | 19479023 | 259 days ago | IN | 0 ETH | 0.00242459 | ||||
Transfer | 19478723 | 259 days ago | IN | 0 ETH | 0.00289478 | ||||
Transfer | 19478598 | 259 days ago | IN | 0 ETH | 0.00442671 | ||||
Transfer | 19467479 | 260 days ago | IN | 0 ETH | 0.00279263 | ||||
Transfer | 19463650 | 261 days ago | IN | 0 ETH | 0.00396838 | ||||
Lock | 19463545 | 261 days ago | IN | 0 ETH | 0.00122582 | ||||
Unlock | 19463536 | 261 days ago | IN | 0 ETH | 0.00177211 | ||||
Lock | 19463526 | 261 days ago | IN | 0 ETH | 0.00247683 | ||||
Set Max Wallet P... | 19463496 | 261 days ago | IN | 0 ETH | 0.00123711 | ||||
Set Max Tx Perce... | 19463495 | 261 days ago | IN | 0 ETH | 0.00109184 | ||||
Set Fee Receiver... | 19463479 | 261 days ago | IN | 0 ETH | 0.00156382 | ||||
Approve | 19462795 | 261 days ago | IN | 0 ETH | 0.00174723 | ||||
Set Swap Thresho... | 19456620 | 262 days ago | IN | 0 ETH | 0.00093775 | ||||
Set Swap Amount | 19456617 | 262 days ago | IN | 0 ETH | 0.00104016 | ||||
Set Buy Fees | 19456601 | 262 days ago | IN | 0 ETH | 0.00083132 | ||||
Set Swap Fees | 19456596 | 262 days ago | IN | 0 ETH | 0.00140752 | ||||
Set Fee Receiver... | 19456577 | 262 days ago | IN | 0 ETH | 0.00178258 | ||||
Clear Stuck Bala... | 19456534 | 262 days ago | IN | 0 ETH | 0.00112575 | ||||
Approve | 19455611 | 262 days ago | IN | 0 ETH | 0.00180288 | ||||
Approve | 19455524 | 262 days ago | IN | 0 ETH | 0.00177472 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20363747 | 135 days ago | 0.00103823 ETH | ||||
20363747 | 135 days ago | 0.00103823 ETH | ||||
20363747 | 135 days ago | 0.00259558 ETH | ||||
20192768 | 159 days ago | 0.00109413 ETH | ||||
20192768 | 159 days ago | 0.00109413 ETH | ||||
20192768 | 159 days ago | 0.00273532 ETH | ||||
20026372 | 182 days ago | 0.00127011 ETH | ||||
20026372 | 182 days ago | 0.00127011 ETH | ||||
20026372 | 182 days ago | 0.00317529 ETH | ||||
19891981 | 201 days ago | 0.00128851 ETH | ||||
19891981 | 201 days ago | 0.00128851 ETH | ||||
19891981 | 201 days ago | 0.00322127 ETH | ||||
19860617 | 205 days ago | 0.00131635 ETH | ||||
19860617 | 205 days ago | 0.00131635 ETH | ||||
19860617 | 205 days ago | 0.00329089 ETH | ||||
19604507 | 241 days ago | 0.00150946 ETH | ||||
19604507 | 241 days ago | 0.00150946 ETH | ||||
19604507 | 241 days ago | 0.00377365 ETH | ||||
19539144 | 250 days ago | 0.00165564 ETH | ||||
19539144 | 250 days ago | 0.00165564 ETH | ||||
19539144 | 250 days ago | 0.00413911 ETH | ||||
19471088 | 260 days ago | 0.00193164 ETH | ||||
19471088 | 260 days ago | 0.00193164 ETH | ||||
19471088 | 260 days ago | 0.00482912 ETH | ||||
19469666 | 260 days ago | 0.00223978 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Zetarakt
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-15 */ /** *Submitted for verification at Etherscan.io on 2024-03-15 */ /** * * [Website] : https://zetarakt.com * [X] [Twitter] : https://twitter.com/zetarakt * [Telegram] : https://t.me/zetarakt */ // SPDX-License-Identifier: MIT /** */ pragma solidity ^0.8.17; abstract contract Project { address public marketingWallet = 0x0bae09d62a64723C4E85394Bcf7254A44d1ce8f1; address public devWallet = 0xfb1DFcea80D65179e3B8bC2a5E96AE85F0bc7E47; string constant _name = "Zetarakt AI"; string constant _symbol = "ZKT"; uint8 constant _decimals = 18; uint256 _totalSupply = 1 * 10**9 * 10**_decimals; uint256 public _maxTxAmount = (_totalSupply * 25) / 1000; // (_totalSupply * 10) / 1000 [this equals 1%] uint256 public _maxWalletToken = (_totalSupply * 50) / 1000; // uint256 public buyFee = 5; uint256 public buyTotalFee = buyFee; uint256 public swapLpFee = 1; uint256 public swapMarketing = 2; uint256 public swapTreasuryFee = 2; uint256 public swapTotalFee = swapMarketing + swapLpFee + swapTreasuryFee; uint256 public transFee = 5; uint256 public feeDenominator = 100; } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } 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 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; } /** * MainContract */ contract Zetarakt is Project, IERC20, Ownable { using SafeMath for uint256; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isMaxExempt; mapping (address => bool) isTimelockExempt; address public autoLiquidityReceiver; uint256 targetLiquidity = 20; uint256 targetLiquidityDenominator = 100; IUniswapV2Router02 public immutable contractRouter; address public immutable uniswapV2Pair; bool public tradingOpen = false; bool public buyCooldownEnabled = true; uint8 public cooldownTimerInterval = 10; mapping (address => uint) private cooldownTimer; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply * 30 / 10000; uint256 public swapAmount = _totalSupply * 30 / 10000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () { 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 contractRouter = _uniswapV2Router; _allowances[address(this)][address(contractRouter)] = type(uint256).max; isFeeExempt[msg.sender] = true; isTxLimitExempt[msg.sender] = true; isMaxExempt[msg.sender] = true; isTimelockExempt[msg.sender] = true; isTimelockExempt[DEAD] = true; isTimelockExempt[address(this)] = true; isFeeExempt[marketingWallet] = true; isMaxExempt[marketingWallet] = true; isTxLimitExempt[marketingWallet] = true; autoLiquidityReceiver = msg.sender; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner(); } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != type(uint256).max){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() { _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000; } function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() { _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000; } function setTxLimit(uint256 amount) external onlyOwner() { _maxTxAmount = amount; } // *** // Functions for the burning mechanism // *** /** * Burn an amount of tokens for the current wallet (if they have enough) */ function burnTokens(uint256 amount) external { // does this user have enough tokens to perform the burn if(_balances[msg.sender] > amount) { _basicTransfer(msg.sender, DEAD, amount); } } // *** // End functions for the burning mechanism // *** function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } if(sender != owner() && recipient != owner()){ require(tradingOpen,"Trading not open yet"); } bool inSell = (recipient == uniswapV2Pair); bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair); if (recipient != address(this) && recipient != address(DEAD) && recipient != uniswapV2Pair && recipient != marketingWallet && recipient != devWallet && recipient != autoLiquidityReceiver ){ uint256 heldTokens = balanceOf(recipient); if(!isMaxExempt[recipient]) { require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much."); } } if (sender == uniswapV2Pair && buyCooldownEnabled && !isTimelockExempt[recipient] ){ require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys"); cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval; } // Checks max transaction limit // but no point if the recipient is exempt // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount if(!isTxLimitExempt[recipient]) { checkTxLimit(sender, amount); } //Exchange tokens _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = amount; // Do NOT take a fee if sender AND recipient are NOT the contract // i.e. you are doing a transfer if(inTransfer) { if(transFee > 0) { amountReceived = takeTransferFee(sender, amount); } } else { amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount; if(shouldSwapBack()){ swapBack(); } } _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } // *** // Handle Fees // *** function takeTransferFee(address sender, uint256 amount) internal returns (uint256) { uint256 feeToTake = transFee; uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) { uint256 feeToTake = isSell ? swapTotalFee : buyTotalFee; uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } // *** // End Handle Fees // *** function shouldSwapBack() internal view returns (bool) { return msg.sender != uniswapV2Pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function clearStuckBalance(uint256 amountPercentage) external onlyOwner() { uint256 amountETH = address(this).balance; payable(marketingWallet).transfer(amountETH * amountPercentage / 100); } function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() { uint256 amountETH = address(this).balance; payable(msg.sender).transfer(amountETH * amountPercentage / 100); } // switch Trading function tradingStatus(bool _status) public onlyOwner { tradingOpen = _status; } // enable cooldown between trades function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner { buyCooldownEnabled = _status; cooldownTimerInterval = _interval; } // runs if... function swapBack() internal swapping { uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee; uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2); uint256 amountToSwap = swapAmount.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = contractRouter.WETH(); uint256 balanceBefore = address(this).balance; contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2); uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee); uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee); (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}(""); (tmpSuccess,) = payable(devWallet).call{value: amountETHTreasury, gas: 30000}(""); tmpSuccess = false; if(amountToLiquify > 0){ contractRouter.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityReceiver, block.timestamp ); emit AutoLiquify(amountETHLiquidity, amountToLiquify); } } // *** // Various exempt functions // *** function setIsFeeExempt(address holder, bool exempt) external onlyOwner() { isFeeExempt[holder] = exempt; } function setIsMaxExempt(address holder, bool exempt) external onlyOwner() { isMaxExempt[holder] = exempt; } function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() { isTxLimitExempt[holder] = exempt; } function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() { isTimelockExempt[holder] = exempt; } // *** // End various exempt functions // *** // *** // Start fee things // *** function setTransFee(uint256 fee) external onlyOwner() { transFee = fee; } function setSwapFees(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() { swapLpFee = _newSwapLpFee; swapMarketing = _newSwapMarketingFee; swapTreasuryFee = _newSwapTreasuryFee; swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee); feeDenominator = _feeDenominator; require(swapTotalFee < 90, "Fees cannot be that high"); } function setBuyFees(uint256 buyTax) external onlyOwner() { buyTotalFee = buyTax; } // *** // end fee stuff§2e sw. // *** function setTreasuryFeeReceiver(address _newWallet) external onlyOwner() { isFeeExempt[devWallet] = false; isFeeExempt[_newWallet] = true; devWallet = _newWallet; } function setMarketingWallet(address _newWallet) external onlyOwner() { isFeeExempt[marketingWallet] = false; isFeeExempt[_newWallet] = true; isMaxExempt[_newWallet] = true; marketingWallet = _newWallet; } function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newdevWallet ) external onlyOwner() { isFeeExempt[devWallet] = false; isFeeExempt[_newdevWallet] = true; isFeeExempt[marketingWallet] = false; isFeeExempt[_newMarketingWallet] = true; isMaxExempt[_newMarketingWallet] = true; autoLiquidityReceiver = _autoLiquidityReceiver; marketingWallet = _newMarketingWallet; devWallet = _newdevWallet; } // *** // Swap settings // *** function setSwapThresholdAmount(uint256 _amount) external onlyOwner() { swapThreshold = _amount; } function setSwapAmount(uint256 _amount) external onlyOwner() { if(_amount > swapThreshold) { swapAmount = swapThreshold; } else { swapAmount = _amount; } } // *** // End Swap settings // *** function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } /* Airdrop */ function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner { require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses"); require(addresses.length == tokens.length,"Mismatch between Address and token count"); uint256 SCCC = 0; for(uint i=0; i < addresses.length; i++){ SCCC = SCCC + tokens[i]; } require(balanceOf(from) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _basicTransfer(from,addresses[i],tokens[i]); } } function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner { require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses"); uint256 SCCC = tokens * addresses.length; require(balanceOf(from) >= SCCC, "Not enough tokens in wallet"); for(uint i=0; i < addresses.length; i++){ _basicTransfer(from,addresses[i],tokens); } } event AutoLiquify(uint256 amountETH, uint256 amountBOG); }
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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airDropFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newdevWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTransFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setTreasuryFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040525f80546001600160a01b0319908116730bae09d62a64723c4e85394bcf7254a44d1ce8f1179091556001805490911673fb1dfcea80d65179e3b8bc2a5e96ae85f0bc7e47179055620000596012600a62000574565b6200006990633b9aca006200058b565b6002556103e860025460196200008091906200058b565b6200008c9190620005a5565b6003556103e86002546032620000a391906200058b565b620000af9190620005a5565b60045560058080556006556001600781905560026008819055600981905590620000da9082620005c5565b620000e69190620005c5565b600a556005600b556064600c8190556010805461dead6001600160a01b0319918216179091556011805490911690556014601955601a55601b805462ffffff1916620a0100179055601d805460ff19166001179055600254612710906200014f90601e6200058b565b6200015b9190620005a5565b601e55612710600254601e6200017291906200058b565b6200017e9190620005a5565b601f553480156200018d575f80fd5b50600d80546001600160a01b0319163390811790915560405181905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000225573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200024b9190620005db565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000297573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002bd9190620005db565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000308573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032e9190620005db565b6001600160a01b0390811660a0528181166080819052305f8181526013602090815260408083209483529381528382205f1990553380835260148083528584208054600160ff19918216811790925560158086528887208054831684179055601680875289882080548416851790556017875289882080548416851790556010548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601880546001600160a01b03191685179055600254848252601283528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000603565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620004b957815f19048211156200049d576200049d62000465565b80851615620004ab57918102915b93841c93908002906200047e565b509250929050565b5f82620004d1575060016200056e565b81620004df57505f6200056e565b8160018114620004f85760028114620005035762000523565b60019150506200056e565b60ff84111562000517576200051762000465565b50506001821b6200056e565b5060208310610133831016604e8410600b841016171562000548575081810a6200056e565b62000554838362000479565b805f19048211156200056a576200056a62000465565b0290505b92915050565b5f6200058460ff841683620004c1565b9392505050565b80820281158282048414176200056e576200056e62000465565b5f82620005c057634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200056e576200056e62000465565b5f60208284031215620005ec575f80fd5b81516001600160a01b038116811462000584575f80fd5b60805160a051612c43620006645f395f8181610698015281816116e901528181611b4a01528181611b8301528181611bea01528181611d22015261225f01525f818161079c0152818161237e0152818161243601526126260152612c435ff3fe6080604052600436106103b6575f3560e01c80636d1b229d116101e9578063b6c5232411610108578063dd62ed3e1161009d578063f2fde38b1161006d578063f2fde38b14610b00578063f53fd58414610b1f578063f84ba65d14610b34578063ffb54a9914610b53575f80fd5b8063dd62ed3e14610a69578063e53c30b014610aad578063e632313c14610ac2578063ee9ef29e14610ae1575f80fd5b8063d7c01032116100d8578063d7c01032146109ed578063dcf7aef314610a0c578063dd395c6314610a2b578063dd46706414610a4a575f80fd5b8063b6c523241461097c578063bd9ab53714610990578063ca33e64c146109af578063d51ed1c8146109ce575f80fd5b80637d1db4a51161017e5780638ea5220f1161014e5780638ea5220f146108ff57806395d89b411461091e578063a69df4b514610949578063a9059cbb1461095d575f80fd5b80637d1db4a51461089a5780638038cbd3146108af578063893d20e8146108ce5780638da5cb5b146108e2575f80fd5b8063715018a6116101b9578063715018a614610834578063722b62ad1461084857806375f0a8741461086757806378109e5414610885575f80fd5b80636d1b229d146107be5780636ddd1713146107dd57806370a08231146107f6578063713e4ae514610815575f80fd5b80632d594567116102d557806349bd5a5e1161026a5780635d098b381161023a5780635d098b381461072f578063617fe0ed1461074e578063658d4b7f1461076c57806367ac77b41461078b575f80fd5b806349bd5a5e1461068757806350db71fb146106d2578063571ac8b0146106f15780635c85974f14610710575f80fd5b8063442a583d116102a5578063442a583d1461061f57806344a33fd21461063e57806346e421a21461065d5780634706240214610672575f80fd5b80632d594567146105b55780632e8fa821146105d4578063313ce567146105e95780633705b3921461060a575f80fd5b806318160ddd1161034b578063201e79911161031b578063201e79911461054457806323b872dd1461056357806329e04b4a146105825780632b112e49146105a1575f80fd5b806318160ddd146104dd5780631ad017b9146104f15780631da1db5e146105105780631e25dc541461052f575f80fd5b8063095ea7b311610386578063095ea7b31461045b5780630d2959801461048a5780631161ae39146104a9578063180b0d7e146104c8575f80fd5b8063026f7d15146103c15780630445b667146103e957806306fdde03146103fe57806309302dc61461043a575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103d660085481565b6040519081526020015b60405180910390f35b3480156103f4575f80fd5b506103d6601e5481565b348015610409575f80fd5b5060408051808201909152600b81526a5a65746172616b7420414960a81b60208201525b6040516103e091906126e9565b348015610445575f80fd5b50610459610454366004612735565b610b6c565b005b348015610466575f80fd5b5061047a610475366004612760565b610bc0565b60405190151581526020016103e0565b348015610495575f80fd5b506104596104a436600461279e565b610c2c565b3480156104b4575f80fd5b5061047a6104c33660046127b7565b610c69565b3480156104d3575f80fd5b506103d6600c5481565b3480156104e8575f80fd5b506002546103d6565b3480156104fc575f80fd5b5061045961050b3660046127d7565b610c7c565b34801561051b575f80fd5b5061045961052a366004612735565b610cf5565b34801561053a575f80fd5b506103d6600b5481565b34801561054f575f80fd5b5061045961055e3660046127b7565b610d6f565b34801561056e575f80fd5b5061047a61057d3660046127f2565b610da4565b34801561058d575f80fd5b5061045961059c366004612735565b610e62565b3480156105ac575f80fd5b506103d6610e91565b3480156105c0575f80fd5b506104596105cf366004612830565b610ed9565b3480156105df575f80fd5b506103d6601f5481565b3480156105f4575f80fd5b5060125b60405160ff90911681526020016103e0565b348015610615575f80fd5b506103d660065481565b34801561062a575f80fd5b506104596106393660046128b2565b610f34565b348015610649575f80fd5b50610459610658366004612735565b611076565b348015610668575f80fd5b506103d660075481565b34801561067d575f80fd5b506103d660055481565b348015610692575f80fd5b506106ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103e0565b3480156106dd575f80fd5b506104596106ec36600461290a565b6110b1565b3480156106fc575f80fd5b5061047a61070b3660046127d7565b611105565b34801561071b575f80fd5b5061045961072a366004612735565b611111565b34801561073a575f80fd5b506104596107493660046127d7565b611140565b348015610759575f80fd5b50601b5461047a90610100900460ff1681565b348015610777575f80fd5b5061045961078636600461290a565b6111cb565b348015610796575f80fd5b506106ba7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107c9575f80fd5b506104596107d8366004612735565b61121f565b3480156107e8575f80fd5b50601d5461047a9060ff1681565b348015610801575f80fd5b506103d66108103660046127d7565b611252565b348015610820575f80fd5b5061045961082f36600461293d565b61126c565b34801561083f575f80fd5b50610459611454565b348015610853575f80fd5b50601b546105f89062010000900460ff1681565b348015610872575f80fd5b505f546106ba906001600160a01b031681565b348015610890575f80fd5b506103d660045481565b3480156108a5575f80fd5b506103d660035481565b3480156108ba575f80fd5b506104596108c93660046129ba565b6114b4565b3480156108d9575f80fd5b506106ba611560565b3480156108ed575f80fd5b50600d546001600160a01b03166106ba565b34801561090a575f80fd5b506001546106ba906001600160a01b031681565b348015610929575f80fd5b506040805180820190915260038152621692d560ea1b602082015261042d565b348015610954575f80fd5b50610459611573565b348015610968575f80fd5b5061047a610977366004612760565b611679565b348015610987575f80fd5b50600f546103d6565b34801561099b575f80fd5b506104596109aa366004612735565b611685565b3480156109ba575f80fd5b506018546106ba906001600160a01b031681565b3480156109d9575f80fd5b506103d66109e8366004612735565b6116d0565b3480156109f8575f80fd5b50610459610a073660046129e9565b611720565b348015610a17575f80fd5b50610459610a26366004612735565b6117e2565b348015610a36575f80fd5b50610459610a4536600461290a565b611811565b348015610a55575f80fd5b50610459610a64366004612735565b611865565b348015610a74575f80fd5b506103d6610a83366004612a31565b6001600160a01b039182165f90815260136020908152604080832093909416825291909152205490565b348015610ab8575f80fd5b506103d6600a5481565b348015610acd575f80fd5b50610459610adc366004612735565b6118e8565b348015610aec575f80fd5b50610459610afb366004612735565b61192a565b348015610b0b575f80fd5b50610459610b1a3660046127d7565b611959565b348015610b2a575f80fd5b506103d660095481565b348015610b3f575f80fd5b50610459610b4e36600461290a565b611a30565b348015610b5e575f80fd5b50601b5461047a9060ff1681565b600d546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610b9690612a5d565b60405180910390fd5b6103e881600254610bb09190612aa6565b610bba9190612abd565b60045550565b335f8181526013602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c1a9086815260200190565b60405180910390a35060015b92915050565b600d546001600160a01b03163314610c565760405162461bcd60e51b8152600401610b9690612a5d565b601b805460ff1916911515919091179055565b5f82610c74836116d0565b119392505050565b600d546001600160a01b03163314610ca65760405162461bcd60e51b8152600401610b9690612a5d565b600180546001600160a01b039081165f90815260146020526040808220805460ff19908116909155949092168082529190208054909316821790925580546001600160a01b0319169091179055565b600d546001600160a01b03163314610d1f5760405162461bcd60e51b8152600401610b9690612a5d565b5f5447906001600160a01b03166108fc6064610d3b8585612aa6565b610d459190612abd565b6040518115909202915f818181858888f19350505050158015610d6a573d5f803e3d5ffd5b505050565b600d546001600160a01b03163314610d995760405162461bcd60e51b8152600401610b9690612a5d565b601991909155601a55565b6001600160a01b0383165f9081526013602090815260408083203384529091528120545f1914610e4d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152601382528381203382529091529190912054610e29918490611a84565b6001600160a01b0385165f9081526013602090815260408083203384529091529020555b610e58848484611aaf565b90505b9392505050565b600d546001600160a01b03163314610e8c5760405162461bcd60e51b8152600401610b9690612a5d565b601e55565b6011545f90610ed490610eac906001600160a01b0316611252565b601054610ece90610ec5906001600160a01b0316611252565b60025490611fa6565b90611fa6565b905090565b600d546001600160a01b03163314610f035760405162461bcd60e51b8152600401610b9690612a5d565b601b805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600d546001600160a01b03163314610f5e5760405162461bcd60e51b8152600401610b9690612a5d565b6103218210610fc55760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610b96565b5f610fd08383612aa6565b905080610fdc86611252565b101561102a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b96565b5f5b8381101561106e576110658686868481811061104a5761104a612adc565b905060200201602081019061105f91906127d7565b85611fb1565b5060010161102c565b505050505050565b600d546001600160a01b031633146110a05760405162461bcd60e51b8152600401610b9690612a5d565b47336108fc6064610d3b8585612aa6565b600d546001600160a01b031633146110db5760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b5f610c26825f19610bc0565b600d546001600160a01b0316331461113b5760405162461bcd60e51b8152600401610b9690612a5d565b600355565b600d546001600160a01b0316331461116a5760405162461bcd60e51b8152600401610b9690612a5d565b5f80546001600160a01b039081168252601460209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601690925291832080549094161790925580546001600160a01b0319169091179055565b600d546001600160a01b031633146111f55760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b335f9081526012602052604090205481101561124f5760105461124d9033906001600160a01b031683611fb1565b505b50565b6001600160a01b03165f9081526012602052604090205490565b600d546001600160a01b031633146112965760405162461bcd60e51b8152600401610b9690612a5d565b6101f583106112fd5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b96565b82811461135d5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b96565b5f805b848110156113965783838281811061137a5761137a612adc565b905060200201358261138c9190612af0565b9150600101611360565b50806113a187611252565b10156113ef5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b96565b5f5b8481101561144b576114428787878481811061140f5761140f612adc565b905060200201602081019061142491906127d7565b86868581811061143657611436612adc565b90506020020135611fb1565b506001016113f1565b50505050505050565b600d546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610b9690612a5d565b600d546040515f916001600160a01b0316905f80516020612bce833981519152908390a3600d80546001600160a01b0319169055565b600d546001600160a01b031633146114de5760405162461bcd60e51b8152600401610b9690612a5d565b600784905560088390556009829055611501826114fb8686612081565b90612081565b600a819055600c829055605a1161155a5760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610b96565b50505050565b5f610ed4600d546001600160a01b031690565b600e546001600160a01b031633146115d95760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b96565b600f54421161162a5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b96565b600e54600d546040516001600160a01b0392831692909116905f80516020612bce833981519152905f90a3600e54600d80546001600160a01b0319166001600160a01b03909216919091179055565b5f610e5b338484611aaf565b600d546001600160a01b031633146116af5760405162461bcd60e51b8152600401610b9690612a5d565b6103e8816002546116c09190612aa6565b6116ca9190612abd565b60035550565b5f610c266116dc610e91565b61171a611713600261170d7f0000000000000000000000000000000000000000000000000000000000000000611252565b9061208c565b859061208c565b90612097565b600d546001600160a01b0316331461174a5760405162461bcd60e51b8152600401610b9690612a5d565b600180546001600160a01b039081165f908152601460209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601690925282208054909516841790945560188054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600d546001600160a01b0316331461180c5760405162461bcd60e51b8152600401610b9690612a5d565b600655565b600d546001600160a01b0316331461183b5760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b600d546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610b9690612a5d565b600d8054600e80546001600160a01b03199081166001600160a01b038416179091551690556118be8142612af0565b600f55600d546040515f916001600160a01b0316905f80516020612bce833981519152908390a350565b600d546001600160a01b031633146119125760405162461bcd60e51b8152600401610b9690612a5d565b601e5481111561192557601e54601f5550565b601f55565b600d546001600160a01b031633146119545760405162461bcd60e51b8152600401610b9690612a5d565b600b55565b600d546001600160a01b031633146119835760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b96565b600d546040516001600160a01b038084169216905f80516020612bce833981519152905f90a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b03163314611a5a5760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b5f8184841115611aa75760405162461bcd60e51b8152600401610b9691906126e9565b505050900390565b6020545f9060ff1615611ace57611ac7848484611fb1565b9050610e5b565b600d546001600160a01b03858116911614801590611afa5750600d546001600160a01b03848116911614155b15611b4857601b5460ff16611b485760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b96565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416145f811582611bb857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611be157506010546001600160a01b03868116911614155b8015611c1f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c3857505f546001600160a01b03868116911614155b8015611c5257506001546001600160a01b03868116911614155b8015611c6c57506018546001600160a01b03868116911614155b15611d20575f611c7b86611252565b6001600160a01b0387165f9081526016602052604090205490915060ff16611d1e57600454611caa8683612af0565b1115611d1e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b96565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611d685750601b54610100900460ff165b8015611d8c57506001600160a01b0385165f9081526017602052604090205460ff16155b15611e34576001600160a01b0385165f908152601c60205260409020544211611e055760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b96565b601b54611e1b9062010000900460ff1642612af0565b6001600160a01b0386165f908152601c60205260409020555b6001600160a01b0385165f9081526015602052604090205460ff16611e5d57611e5d86856120a2565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f90815260129091529190912054611eae918690611a84565b6001600160a01b0387165f90815260126020526040902055838115611ee757600b5415611ee257611edf878661210a565b90505b611f2f565b6001600160a01b0387165f9081526014602052604090205460ff1615611f0d5784611f18565b611f188786856121a7565b9050611f22612253565b15611f2f57611f2f6122bd565b6001600160a01b0386165f90815260126020526040902054611f519082612081565b6001600160a01b038088165f8181526012602052604090819020939093559151908916905f80516020612bee83398151915290611f919085815260200190565b60405180910390a35060019695505050505050565b5f610e5b8284612b03565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152601290915291822054612001918490611a84565b6001600160a01b038086165f90815260126020526040808220939093559085168152205461202f9083612081565b6001600160a01b038085165f8181526012602052604090819020939093559151908616905f80516020612bee8339815191529061206f9086815260200190565b60405180910390a35060019392505050565b5f610e5b8284612af0565b5f610e5b8284612aa6565b5f610e5b8284612abd565b600354811115806120ca57506001600160a01b0382165f9081526015602052604090205460ff165b61124d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b96565b5f80600b5490505f612133600c5460646121249190612aa6565b61171a606461170d888761208c565b305f9081526012602052604090205490915061214f9082612081565b305f81815260126020526040908190209290925590516001600160a01b038716905f80516020612bee8339815191529061218c9085815260200190565b60405180910390a361219e8482611fa6565b95945050505050565b5f80826121b6576006546121ba565b600a545b90505f6121de600c5460646121cf9190612aa6565b61171a606461170d898761208c565b305f908152601260205260409020549091506121fa9082612081565b305f81815260126020526040908190209290925590516001600160a01b038816905f80516020612bee833981519152906122379085815260200190565b60405180910390a36122498582611fa6565b9695505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590612290575060205460ff16155b801561229e5750601d5460ff165b8015610ed4575050601e54305f90815260126020526040902054101590565b6020805460ff19166001179055601954601a545f916122db91610c69565b6122e7576007546122e9565b5f5b90505f61230c600261171a600a5461171a86601f5461208c90919063ffffffff16565b90505f61232482601f54611fa690919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061235c5761235c612adc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123fc9190612b16565b8160018151811061240f5761240f612adc565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906124739086905f90879030904290600401612b31565b5f604051808303815f87803b15801561248a575f80fd5b505af115801561249c573d5f803e3d5ffd5b505050505f6124b48247611fa690919063ffffffff16565b90505f6124ce6124c5886002612097565b600a5490611fa6565b90505f6124ef600261171a8461171a6007548861208c90919063ffffffff16565b90505f61250b8361171a6008548761208c90919063ffffffff16565b90505f6125278461171a6009548861208c90919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f811461257b576040519150601f19603f3d011682016040523d82523d5f602084013e612580565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146125d2576040519150601f19603f3d011682016040523d82523d5f602084013e6125d7565b606091505b505f9250508a1590506126d25760185460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af1158015612670573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906126959190612ba2565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506020805460ff19169055505050505050505050565b5f602080835283518060208501525f5b81811015612715578581018301518582016040015282016126f9565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215612745575f80fd5b5035919050565b6001600160a01b038116811461124f575f80fd5b5f8060408385031215612771575f80fd5b823561277c8161274c565b946020939093013593505050565b80358015158114612799575f80fd5b919050565b5f602082840312156127ae575f80fd5b610e5b8261278a565b5f80604083850312156127c8575f80fd5b50508035926020909101359150565b5f602082840312156127e7575f80fd5b8135610e5b8161274c565b5f805f60608486031215612804575f80fd5b833561280f8161274c565b9250602084013561281f8161274c565b929592945050506040919091013590565b5f8060408385031215612841575f80fd5b61284a8361278a565b9150602083013560ff8116811461285f575f80fd5b809150509250929050565b5f8083601f84011261287a575f80fd5b50813567ffffffffffffffff811115612891575f80fd5b6020830191508360208260051b85010111156128ab575f80fd5b9250929050565b5f805f80606085870312156128c5575f80fd5b84356128d08161274c565b9350602085013567ffffffffffffffff8111156128eb575f80fd5b6128f78782880161286a565b9598909750949560400135949350505050565b5f806040838503121561291b575f80fd5b82356129268161274c565b91506129346020840161278a565b90509250929050565b5f805f805f60608688031215612951575f80fd5b853561295c8161274c565b9450602086013567ffffffffffffffff80821115612978575f80fd5b61298489838a0161286a565b9096509450604088013591508082111561299c575f80fd5b506129a98882890161286a565b969995985093965092949392505050565b5f805f80608085870312156129cd575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f606084860312156129fb575f80fd5b8335612a068161274c565b92506020840135612a168161274c565b91506040840135612a268161274c565b809150509250925092565b5f8060408385031215612a42575f80fd5b8235612a4d8161274c565b9150602083013561285f8161274c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c2657610c26612a92565b5f82612ad757634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c2657610c26612a92565b81810381811115610c2657610c26612a92565b5f60208284031215612b26575f80fd5b8151610e5b8161274c565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612b815784516001600160a01b031683529383019391830191600101612b5c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612bb4575f80fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208ea4920789459cd58fe7615fc5d5ba32018a0500678e2a852c53b9bd71156f1964736f6c63430008180033
Deployed Bytecode
0x6080604052600436106103b6575f3560e01c80636d1b229d116101e9578063b6c5232411610108578063dd62ed3e1161009d578063f2fde38b1161006d578063f2fde38b14610b00578063f53fd58414610b1f578063f84ba65d14610b34578063ffb54a9914610b53575f80fd5b8063dd62ed3e14610a69578063e53c30b014610aad578063e632313c14610ac2578063ee9ef29e14610ae1575f80fd5b8063d7c01032116100d8578063d7c01032146109ed578063dcf7aef314610a0c578063dd395c6314610a2b578063dd46706414610a4a575f80fd5b8063b6c523241461097c578063bd9ab53714610990578063ca33e64c146109af578063d51ed1c8146109ce575f80fd5b80637d1db4a51161017e5780638ea5220f1161014e5780638ea5220f146108ff57806395d89b411461091e578063a69df4b514610949578063a9059cbb1461095d575f80fd5b80637d1db4a51461089a5780638038cbd3146108af578063893d20e8146108ce5780638da5cb5b146108e2575f80fd5b8063715018a6116101b9578063715018a614610834578063722b62ad1461084857806375f0a8741461086757806378109e5414610885575f80fd5b80636d1b229d146107be5780636ddd1713146107dd57806370a08231146107f6578063713e4ae514610815575f80fd5b80632d594567116102d557806349bd5a5e1161026a5780635d098b381161023a5780635d098b381461072f578063617fe0ed1461074e578063658d4b7f1461076c57806367ac77b41461078b575f80fd5b806349bd5a5e1461068757806350db71fb146106d2578063571ac8b0146106f15780635c85974f14610710575f80fd5b8063442a583d116102a5578063442a583d1461061f57806344a33fd21461063e57806346e421a21461065d5780634706240214610672575f80fd5b80632d594567146105b55780632e8fa821146105d4578063313ce567146105e95780633705b3921461060a575f80fd5b806318160ddd1161034b578063201e79911161031b578063201e79911461054457806323b872dd1461056357806329e04b4a146105825780632b112e49146105a1575f80fd5b806318160ddd146104dd5780631ad017b9146104f15780631da1db5e146105105780631e25dc541461052f575f80fd5b8063095ea7b311610386578063095ea7b31461045b5780630d2959801461048a5780631161ae39146104a9578063180b0d7e146104c8575f80fd5b8063026f7d15146103c15780630445b667146103e957806306fdde03146103fe57806309302dc61461043a575f80fd5b366103bd57005b5f80fd5b3480156103cc575f80fd5b506103d660085481565b6040519081526020015b60405180910390f35b3480156103f4575f80fd5b506103d6601e5481565b348015610409575f80fd5b5060408051808201909152600b81526a5a65746172616b7420414960a81b60208201525b6040516103e091906126e9565b348015610445575f80fd5b50610459610454366004612735565b610b6c565b005b348015610466575f80fd5b5061047a610475366004612760565b610bc0565b60405190151581526020016103e0565b348015610495575f80fd5b506104596104a436600461279e565b610c2c565b3480156104b4575f80fd5b5061047a6104c33660046127b7565b610c69565b3480156104d3575f80fd5b506103d6600c5481565b3480156104e8575f80fd5b506002546103d6565b3480156104fc575f80fd5b5061045961050b3660046127d7565b610c7c565b34801561051b575f80fd5b5061045961052a366004612735565b610cf5565b34801561053a575f80fd5b506103d6600b5481565b34801561054f575f80fd5b5061045961055e3660046127b7565b610d6f565b34801561056e575f80fd5b5061047a61057d3660046127f2565b610da4565b34801561058d575f80fd5b5061045961059c366004612735565b610e62565b3480156105ac575f80fd5b506103d6610e91565b3480156105c0575f80fd5b506104596105cf366004612830565b610ed9565b3480156105df575f80fd5b506103d6601f5481565b3480156105f4575f80fd5b5060125b60405160ff90911681526020016103e0565b348015610615575f80fd5b506103d660065481565b34801561062a575f80fd5b506104596106393660046128b2565b610f34565b348015610649575f80fd5b50610459610658366004612735565b611076565b348015610668575f80fd5b506103d660075481565b34801561067d575f80fd5b506103d660055481565b348015610692575f80fd5b506106ba7f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea0081565b6040516001600160a01b0390911681526020016103e0565b3480156106dd575f80fd5b506104596106ec36600461290a565b6110b1565b3480156106fc575f80fd5b5061047a61070b3660046127d7565b611105565b34801561071b575f80fd5b5061045961072a366004612735565b611111565b34801561073a575f80fd5b506104596107493660046127d7565b611140565b348015610759575f80fd5b50601b5461047a90610100900460ff1681565b348015610777575f80fd5b5061045961078636600461290a565b6111cb565b348015610796575f80fd5b506106ba7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107c9575f80fd5b506104596107d8366004612735565b61121f565b3480156107e8575f80fd5b50601d5461047a9060ff1681565b348015610801575f80fd5b506103d66108103660046127d7565b611252565b348015610820575f80fd5b5061045961082f36600461293d565b61126c565b34801561083f575f80fd5b50610459611454565b348015610853575f80fd5b50601b546105f89062010000900460ff1681565b348015610872575f80fd5b505f546106ba906001600160a01b031681565b348015610890575f80fd5b506103d660045481565b3480156108a5575f80fd5b506103d660035481565b3480156108ba575f80fd5b506104596108c93660046129ba565b6114b4565b3480156108d9575f80fd5b506106ba611560565b3480156108ed575f80fd5b50600d546001600160a01b03166106ba565b34801561090a575f80fd5b506001546106ba906001600160a01b031681565b348015610929575f80fd5b506040805180820190915260038152621692d560ea1b602082015261042d565b348015610954575f80fd5b50610459611573565b348015610968575f80fd5b5061047a610977366004612760565b611679565b348015610987575f80fd5b50600f546103d6565b34801561099b575f80fd5b506104596109aa366004612735565b611685565b3480156109ba575f80fd5b506018546106ba906001600160a01b031681565b3480156109d9575f80fd5b506103d66109e8366004612735565b6116d0565b3480156109f8575f80fd5b50610459610a073660046129e9565b611720565b348015610a17575f80fd5b50610459610a26366004612735565b6117e2565b348015610a36575f80fd5b50610459610a4536600461290a565b611811565b348015610a55575f80fd5b50610459610a64366004612735565b611865565b348015610a74575f80fd5b506103d6610a83366004612a31565b6001600160a01b039182165f90815260136020908152604080832093909416825291909152205490565b348015610ab8575f80fd5b506103d6600a5481565b348015610acd575f80fd5b50610459610adc366004612735565b6118e8565b348015610aec575f80fd5b50610459610afb366004612735565b61192a565b348015610b0b575f80fd5b50610459610b1a3660046127d7565b611959565b348015610b2a575f80fd5b506103d660095481565b348015610b3f575f80fd5b50610459610b4e36600461290a565b611a30565b348015610b5e575f80fd5b50601b5461047a9060ff1681565b600d546001600160a01b03163314610b9f5760405162461bcd60e51b8152600401610b9690612a5d565b60405180910390fd5b6103e881600254610bb09190612aa6565b610bba9190612abd565b60045550565b335f8181526013602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c1a9086815260200190565b60405180910390a35060015b92915050565b600d546001600160a01b03163314610c565760405162461bcd60e51b8152600401610b9690612a5d565b601b805460ff1916911515919091179055565b5f82610c74836116d0565b119392505050565b600d546001600160a01b03163314610ca65760405162461bcd60e51b8152600401610b9690612a5d565b600180546001600160a01b039081165f90815260146020526040808220805460ff19908116909155949092168082529190208054909316821790925580546001600160a01b0319169091179055565b600d546001600160a01b03163314610d1f5760405162461bcd60e51b8152600401610b9690612a5d565b5f5447906001600160a01b03166108fc6064610d3b8585612aa6565b610d459190612abd565b6040518115909202915f818181858888f19350505050158015610d6a573d5f803e3d5ffd5b505050565b600d546001600160a01b03163314610d995760405162461bcd60e51b8152600401610b9690612a5d565b601991909155601a55565b6001600160a01b0383165f9081526013602090815260408083203384529091528120545f1914610e4d576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f908152601382528381203382529091529190912054610e29918490611a84565b6001600160a01b0385165f9081526013602090815260408083203384529091529020555b610e58848484611aaf565b90505b9392505050565b600d546001600160a01b03163314610e8c5760405162461bcd60e51b8152600401610b9690612a5d565b601e55565b6011545f90610ed490610eac906001600160a01b0316611252565b601054610ece90610ec5906001600160a01b0316611252565b60025490611fa6565b90611fa6565b905090565b600d546001600160a01b03163314610f035760405162461bcd60e51b8152600401610b9690612a5d565b601b805462ffff0019166101009315159390930262ff00001916929092176201000060ff9290921691909102179055565b600d546001600160a01b03163314610f5e5760405162461bcd60e51b8152600401610b9690612a5d565b6103218210610fc55760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610b96565b5f610fd08383612aa6565b905080610fdc86611252565b101561102a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b96565b5f5b8381101561106e576110658686868481811061104a5761104a612adc565b905060200201602081019061105f91906127d7565b85611fb1565b5060010161102c565b505050505050565b600d546001600160a01b031633146110a05760405162461bcd60e51b8152600401610b9690612a5d565b47336108fc6064610d3b8585612aa6565b600d546001600160a01b031633146110db5760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b5f610c26825f19610bc0565b600d546001600160a01b0316331461113b5760405162461bcd60e51b8152600401610b9690612a5d565b600355565b600d546001600160a01b0316331461116a5760405162461bcd60e51b8152600401610b9690612a5d565b5f80546001600160a01b039081168252601460209081526040808420805460ff1990811690915594909216808452828420805486166001908117909155601690925291832080549094161790925580546001600160a01b0319169091179055565b600d546001600160a01b031633146111f55760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b335f9081526012602052604090205481101561124f5760105461124d9033906001600160a01b031683611fb1565b505b50565b6001600160a01b03165f9081526012602052604090205490565b600d546001600160a01b031633146112965760405162461bcd60e51b8152600401610b9690612a5d565b6101f583106112fd5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b96565b82811461135d5760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b96565b5f805b848110156113965783838281811061137a5761137a612adc565b905060200201358261138c9190612af0565b9150600101611360565b50806113a187611252565b10156113ef5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b96565b5f5b8481101561144b576114428787878481811061140f5761140f612adc565b905060200201602081019061142491906127d7565b86868581811061143657611436612adc565b90506020020135611fb1565b506001016113f1565b50505050505050565b600d546001600160a01b0316331461147e5760405162461bcd60e51b8152600401610b9690612a5d565b600d546040515f916001600160a01b0316905f80516020612bce833981519152908390a3600d80546001600160a01b0319169055565b600d546001600160a01b031633146114de5760405162461bcd60e51b8152600401610b9690612a5d565b600784905560088390556009829055611501826114fb8686612081565b90612081565b600a819055600c829055605a1161155a5760405162461bcd60e51b815260206004820152601860248201527f466565732063616e6e6f742062652074686174206869676800000000000000006044820152606401610b96565b50505050565b5f610ed4600d546001600160a01b031690565b600e546001600160a01b031633146115d95760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b96565b600f54421161162a5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b96565b600e54600d546040516001600160a01b0392831692909116905f80516020612bce833981519152905f90a3600e54600d80546001600160a01b0319166001600160a01b03909216919091179055565b5f610e5b338484611aaf565b600d546001600160a01b031633146116af5760405162461bcd60e51b8152600401610b9690612a5d565b6103e8816002546116c09190612aa6565b6116ca9190612abd565b60035550565b5f610c266116dc610e91565b61171a611713600261170d7f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea00611252565b9061208c565b859061208c565b90612097565b600d546001600160a01b0316331461174a5760405162461bcd60e51b8152600401610b9690612a5d565b600180546001600160a01b039081165f908152601460209081526040808320805460ff1990811690915595841680845281842080548816871790558354851684528184208054881690559684168084528184208054881687179055601690925282208054909516841790945560188054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600d546001600160a01b0316331461180c5760405162461bcd60e51b8152600401610b9690612a5d565b600655565b600d546001600160a01b0316331461183b5760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601660205260409020805460ff1916911515919091179055565b600d546001600160a01b0316331461188f5760405162461bcd60e51b8152600401610b9690612a5d565b600d8054600e80546001600160a01b03199081166001600160a01b038416179091551690556118be8142612af0565b600f55600d546040515f916001600160a01b0316905f80516020612bce833981519152908390a350565b600d546001600160a01b031633146119125760405162461bcd60e51b8152600401610b9690612a5d565b601e5481111561192557601e54601f5550565b601f55565b600d546001600160a01b031633146119545760405162461bcd60e51b8152600401610b9690612a5d565b600b55565b600d546001600160a01b031633146119835760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b0381166119e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b96565b600d546040516001600160a01b038084169216905f80516020612bce833981519152905f90a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b03163314611a5a5760405162461bcd60e51b8152600401610b9690612a5d565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b5f8184841115611aa75760405162461bcd60e51b8152600401610b9691906126e9565b505050900390565b6020545f9060ff1615611ace57611ac7848484611fb1565b9050610e5b565b600d546001600160a01b03858116911614801590611afa5750600d546001600160a01b03848116911614155b15611b4857601b5460ff16611b485760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b96565b7f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea006001600160a01b03908116908416145f811582611bb857507f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611be157506010546001600160a01b03868116911614155b8015611c1f57507f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea006001600160a01b0316856001600160a01b031614155b8015611c3857505f546001600160a01b03868116911614155b8015611c5257506001546001600160a01b03868116911614155b8015611c6c57506018546001600160a01b03868116911614155b15611d20575f611c7b86611252565b6001600160a01b0387165f9081526016602052604090205490915060ff16611d1e57600454611caa8683612af0565b1115611d1e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b96565b505b7f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea006001600160a01b0316866001600160a01b0316148015611d685750601b54610100900460ff165b8015611d8c57506001600160a01b0385165f9081526017602052604090205460ff16155b15611e34576001600160a01b0385165f908152601c60205260409020544211611e055760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b96565b601b54611e1b9062010000900460ff1642612af0565b6001600160a01b0386165f908152601c60205260409020555b6001600160a01b0385165f9081526015602052604090205460ff16611e5d57611e5d86856120a2565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f90815260129091529190912054611eae918690611a84565b6001600160a01b0387165f90815260126020526040902055838115611ee757600b5415611ee257611edf878661210a565b90505b611f2f565b6001600160a01b0387165f9081526014602052604090205460ff1615611f0d5784611f18565b611f188786856121a7565b9050611f22612253565b15611f2f57611f2f6122bd565b6001600160a01b0386165f90815260126020526040902054611f519082612081565b6001600160a01b038088165f8181526012602052604090819020939093559151908916905f80516020612bee83398151915290611f919085815260200190565b60405180910390a35060019695505050505050565b5f610e5b8284612b03565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152601290915291822054612001918490611a84565b6001600160a01b038086165f90815260126020526040808220939093559085168152205461202f9083612081565b6001600160a01b038085165f8181526012602052604090819020939093559151908616905f80516020612bee8339815191529061206f9086815260200190565b60405180910390a35060019392505050565b5f610e5b8284612af0565b5f610e5b8284612aa6565b5f610e5b8284612abd565b600354811115806120ca57506001600160a01b0382165f9081526015602052604090205460ff165b61124d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b96565b5f80600b5490505f612133600c5460646121249190612aa6565b61171a606461170d888761208c565b305f9081526012602052604090205490915061214f9082612081565b305f81815260126020526040908190209290925590516001600160a01b038716905f80516020612bee8339815191529061218c9085815260200190565b60405180910390a361219e8482611fa6565b95945050505050565b5f80826121b6576006546121ba565b600a545b90505f6121de600c5460646121cf9190612aa6565b61171a606461170d898761208c565b305f908152601260205260409020549091506121fa9082612081565b305f81815260126020526040908190209290925590516001600160a01b038816905f80516020612bee833981519152906122379085815260200190565b60405180910390a36122498582611fa6565b9695505050505050565b5f336001600160a01b037f000000000000000000000000d1d424088d7edbdc42b9a0d83d4ef90bbe56ea001614801590612290575060205460ff16155b801561229e5750601d5460ff165b8015610ed4575050601e54305f90815260126020526040902054101590565b6020805460ff19166001179055601954601a545f916122db91610c69565b6122e7576007546122e9565b5f5b90505f61230c600261171a600a5461171a86601f5461208c90919063ffffffff16565b90505f61232482601f54611fa690919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061235c5761235c612adc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123fc9190612b16565b8160018151811061240f5761240f612adc565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906124739086905f90879030904290600401612b31565b5f604051808303815f87803b15801561248a575f80fd5b505af115801561249c573d5f803e3d5ffd5b505050505f6124b48247611fa690919063ffffffff16565b90505f6124ce6124c5886002612097565b600a5490611fa6565b90505f6124ef600261171a8461171a6007548861208c90919063ffffffff16565b90505f61250b8361171a6008548761208c90919063ffffffff16565b90505f6125278461171a6009548861208c90919063ffffffff16565b5f805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d805f811461257b576040519150601f19603f3d011682016040523d82523d5f602084013e612580565b606091505b50506001546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146125d2576040519150601f19603f3d011682016040523d82523d5f602084013e6125d7565b606091505b505f9250508a1590506126d25760185460405163f305d71960e01b8152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af1158015612670573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906126959190612ba2565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506020805460ff19169055505050505050505050565b5f602080835283518060208501525f5b81811015612715578581018301518582016040015282016126f9565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215612745575f80fd5b5035919050565b6001600160a01b038116811461124f575f80fd5b5f8060408385031215612771575f80fd5b823561277c8161274c565b946020939093013593505050565b80358015158114612799575f80fd5b919050565b5f602082840312156127ae575f80fd5b610e5b8261278a565b5f80604083850312156127c8575f80fd5b50508035926020909101359150565b5f602082840312156127e7575f80fd5b8135610e5b8161274c565b5f805f60608486031215612804575f80fd5b833561280f8161274c565b9250602084013561281f8161274c565b929592945050506040919091013590565b5f8060408385031215612841575f80fd5b61284a8361278a565b9150602083013560ff8116811461285f575f80fd5b809150509250929050565b5f8083601f84011261287a575f80fd5b50813567ffffffffffffffff811115612891575f80fd5b6020830191508360208260051b85010111156128ab575f80fd5b9250929050565b5f805f80606085870312156128c5575f80fd5b84356128d08161274c565b9350602085013567ffffffffffffffff8111156128eb575f80fd5b6128f78782880161286a565b9598909750949560400135949350505050565b5f806040838503121561291b575f80fd5b82356129268161274c565b91506129346020840161278a565b90509250929050565b5f805f805f60608688031215612951575f80fd5b853561295c8161274c565b9450602086013567ffffffffffffffff80821115612978575f80fd5b61298489838a0161286a565b9096509450604088013591508082111561299c575f80fd5b506129a98882890161286a565b969995985093965092949392505050565b5f805f80608085870312156129cd575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f606084860312156129fb575f80fd5b8335612a068161274c565b92506020840135612a168161274c565b91506040840135612a268161274c565b809150509250925092565b5f8060408385031215612a42575f80fd5b8235612a4d8161274c565b9150602083013561285f8161274c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c2657610c26612a92565b5f82612ad757634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c2657610c26612a92565b81810381811115610c2657610c26612a92565b5f60208284031215612b26575f80fd5b8151610e5b8161274c565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612b815784516001600160a01b031683529383019391830191600101612b5c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612bb4575f80fd5b835192506020840151915060408401519050925092509256fe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212208ea4920789459cd58fe7615fc5d5ba32018a0500678e2a852c53b9bd71156f1964736f6c63430008180033
Deployed Bytecode Sourcemap
18330:16313:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1001:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;1001:37:0;;;;;;;;19306:56;;;;;;;;;;;;;;;;20930:80;;;;;;;;;;-1:-1:-1;21002:5:0;;;;;;;;;;;;-1:-1:-1;;;21002:5:0;;;;20930:80;;;;;;;:::i;22250:177::-;;;;;;;;;;-1:-1:-1;22250:177:0;;;;;:::i;:::-;;:::i;:::-;;21354:216;;;;;;;;;;-1:-1:-1;21354:216:0;;;;;:::i;:::-;;:::i;:::-;;;1555:14:1;;1548:22;1530:41;;1518:2;1503:18;21354:216:0;1390:187:1;27820:94:0;;;;;;;;;;-1:-1:-1;27820:94:0;;;;;:::i;:::-;;:::i;33292:150::-;;;;;;;;;;-1:-1:-1;33292:150:0;;;;;:::i;:::-;;:::i;1223:39::-;;;;;;;;;;;;;;;;20660:88;;;;;;;;;;-1:-1:-1;20733:12:0;;20660:88;;31354:196;;;;;;;;;;-1:-1:-1;31354:196:0;;;;;:::i;:::-;;:::i;27351:214::-;;;;;;;;;;-1:-1:-1;27351:214:0;;;;;:::i;:::-;;:::i;1177:37::-;;;;;;;;;;;;;;;;32766:184;;;;;;;;;;-1:-1:-1;32766:184:0;;;;;:::i;:::-;;:::i;21872:370::-;;;;;;;;;;-1:-1:-1;21872:370:0;;;;;:::i;:::-;;:::i;32377:112::-;;;;;;;;;;-1:-1:-1;32377:112:0;;;;;:::i;:::-;;:::i;32958:142::-;;;;;;;;;;;;;:::i;27961:164::-;;;;;;;;;;-1:-1:-1;27961:164:0;;;;;:::i;:::-;;:::i;19369:53::-;;;;;;;;;;;;;;;;20754:80;;;;;;;;;;-1:-1:-1;613:2:0;20754:80;;;3412:4:1;3400:17;;;3382:36;;3370:2;3355:18;20754:80:0;3240:184:1;906:42:0;;;;;;;;;;;;;;;;34125:449;;;;;;;;;;-1:-1:-1;34125:449:0;;;;;:::i;:::-;;:::i;27573:216::-;;;;;;;;;;-1:-1:-1;27573:216:0;;;;;:::i;:::-;;:::i;957:37::-;;;;;;;;;;;;;;;;862;;;;;;;;;;;;;;;;19036:38;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4610:32:1;;;4592:51;;4580:2;4565:18;19036:38:0;4446:203:1;30378:131:0;;;;;;;;;;-1:-1:-1;30378:131:0;;;;;:::i;:::-;;:::i;21578:122::-;;;;;;;;;;-1:-1:-1;21578:122:0;;;;;:::i;:::-;;:::i;22613:97::-;;;;;;;;;;-1:-1:-1;22613:97:0;;;;;:::i;:::-;;:::i;31558:249::-;;;;;;;;;;-1:-1:-1;31558:249:0;;;;;:::i;:::-;;:::i;19123:37::-;;;;;;;;;;-1:-1:-1;19123:37:0;;;;;;;;;;;29983:121;;;;;;;;;;-1:-1:-1;29983:121:0;;;;;:::i;:::-;;:::i;18979:50::-;;;;;;;;;;;;;;;22873:231;;;;;;;;;;-1:-1:-1;22873:231:0;;;;;:::i;:::-;;:::i;19269:30::-;;;;;;;;;;-1:-1:-1;19269:30:0;;;;;;;;21102:105;;;;;;;;;;-1:-1:-1;21102:105:0;;;;;:::i;:::-;;:::i;33469:648::-;;;;;;;;;;-1:-1:-1;33469:648:0;;;;;:::i;:::-;;:::i;8990:148::-;;;;;;;;;;;;;:::i;19167:39::-;;;;;;;;;;-1:-1:-1;19167:39:0;;;;;;;;;;;344:75;;;;;;;;;;-1:-1:-1;344:75:0;;;;-1:-1:-1;;;;;344:75:0;;;791:59;;;;;;;;;;;;;;;;681:56;;;;;;;;;;;;;;;;30707:486;;;;;;;;;;-1:-1:-1;30707:486:0;;;;;:::i;:::-;;:::i;21016:80::-;;;;;;;;;;;;;:::i;8347:79::-;;;;;;;;;;-1:-1:-1;8412:6:0;;-1:-1:-1;;;;;8412:6:0;8347:79;;426:69;;;;;;;;;;-1:-1:-1;426:69:0;;;;-1:-1:-1;;;;;426:69:0;;;20840:84;;;;;;;;;;-1:-1:-1;20914:7:0;;;;;;;;;;;;-1:-1:-1;;;20914:7:0;;;;20840:84;;10012:305;;;;;;;;;;;;;:::i;21708:156::-;;;;;;;;;;-1:-1:-1;21708:156:0;;;;;:::i;:::-;;:::i;9545:89::-;;;;;;;;;;-1:-1:-1;9617:9:0;;9545:89;;22433:172;;;;;;;;;;-1:-1:-1;22433:172:0;;;;;:::i;:::-;;:::i;18850:36::-;;;;;;;;;;-1:-1:-1;18850:36:0;;;;-1:-1:-1;;;;;18850:36:0;;;33108:176;;;;;;;;;;-1:-1:-1;33108:176:0;;;;;:::i;:::-;;:::i;31815:518::-;;;;;;;;;;-1:-1:-1;31815:518:0;;;;;:::i;:::-;;:::i;31201:96::-;;;;;;;;;;-1:-1:-1;31201:96:0;;;;;:::i;:::-;;:::i;30112:121::-;;;;;;;;;;-1:-1:-1;30112:121:0;;;;;:::i;:::-;;:::i;9710:226::-;;;;;;;;;;-1:-1:-1;9710:226:0;;;;;:::i;:::-;;:::i;21213:133::-;;;;;;;;;;-1:-1:-1;21213:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;21315:19:0;;;21297:7;21315:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;21213:133;1089:79;;;;;;;;;;;;;;;;32497:221;;;;;;;;;;-1:-1:-1;32497:221:0;;;;;:::i;:::-;;:::i;30611:88::-;;;;;;;;;;-1:-1:-1;30611:88:0;;;;;:::i;:::-;;:::i;9293:244::-;;;;;;;;;;-1:-1:-1;9293:244:0;;;;;:::i;:::-;;:::i;1045:37::-;;;;;;;;;;;;;;;;30241:129;;;;;;;;;;-1:-1:-1;30241:129:0;;;;;:::i;:::-;;:::i;19083:31::-;;;;;;;;;;-1:-1:-1;19083:31:0;;;;;;;;22250:177;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;;;;;;;;;22415:4:::1;22387:23;22372:12;;:38;;;;:::i;:::-;22371:48;;;;:::i;:::-;22353:15;:66:::0;-1:-1:-1;22250:177:0:o;21354:216::-;21458:10;21429:4;21446:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21446:32:0;;;;;;;;;;:41;;;21503:37;21429:4;;21446:32;;21503:37;;;;21481:6;160:25:1;;148:2;133:18;;14:177;21503:37:0;;;;;;;;-1:-1:-1;21558:4:0;21354:216;;;;;:::o;27820:94::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;27885:11:::1;:21:::0;;-1:-1:-1;;27885:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27820:94::o;33292:150::-;33372:4;33428:6;33396:29;33416:8;33396:19;:29::i;:::-;:38;;33292:150;-1:-1:-1;;;33292:150:0:o;31354:196::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;31450:9:::1;::::0;;-1:-1:-1;;;;;31450:9:0;;::::1;31463:5;31438:22:::0;;;:11:::1;:22;::::0;;;;;:30;;-1:-1:-1;;31438:30:0;;::::1;::::0;;;31479:23;;;::::1;::::0;;;;;;:30;;;;::::1;::::0;::::1;::::0;;;31520:22;;-1:-1:-1;;;;;;31520:22:0::1;::::0;;::::1;::::0;;31354:196::o;27351:214::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;27436:17:::1;27496:15:::0;27456:21:::1;::::0;-1:-1:-1;;;;;27496:15:0::1;27488:69;27553:3;27522:28;27534:16:::0;27456:21;27522:28:::1;:::i;:::-;:34;;;;:::i;:::-;27488:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27425:140;27351:214:::0;:::o;32766:184::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;32865:15:::1;:25:::0;;;;32901:26:::1;:41:::0;32766:184::o;21872:370::-;-1:-1:-1;;;;;21992:19:0;;21972:4;21992:19;;;:11;:19;;;;;;;;22012:10;21992:31;;;;;;;;-1:-1:-1;;21992:52:0;21989:186;;22094:69;;;;;;;;;;;-1:-1:-1;;;22094:69:0;;;;;;;;-1:-1:-1;;;;;22094:19:0;;-1:-1:-1;22094:19:0;;;:11;:19;;;;;22114:10;22094:31;;;;;;;;;;:69;;22130:6;;22094:35;:69::i;:::-;-1:-1:-1;;;;;22060:19:0;;;;;;:11;:19;;;;;;;;22080:10;22060:31;;;;;;;:103;21989:186;22194:40;22208:6;22216:9;22227:6;22194:13;:40::i;:::-;22187:47;;21872:370;;;;;;:::o;32377:112::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;32458:13:::1;:23:::0;32377:112::o;32958:142::-;33086:4;;33011:7;;33038:54;;33076:15;;-1:-1:-1;;;;;33086:4:0;33076:9;:15::i;:::-;33065:4;;33038:33;;33055:15;;-1:-1:-1;;;;;33065:4:0;33055:9;:15::i;:::-;33038:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33031:61;;32958:142;:::o;27961:164::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;28045:18:::1;:28:::0;;-1:-1:-1;;28084:33:0;28045:28:::1;::::0;::::1;;::::0;;;::::1;-1:-1:-1::0;;28084:33:0;;;;;;28045:28:::1;28084:33:::0;;;::::1;::::0;;;::::1;;::::0;;27961:164::o;34125:449::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;34266:3:::1;34247:22:::0;::::1;34239:79;;;::::0;-1:-1:-1;;;34239:79:0;;8529:2:1;34239:79:0::1;::::0;::::1;8511:21:1::0;8568:2;8548:18;;;8541:30;8607:34;8587:18;;;8580:62;-1:-1:-1;;;8658:18:1;;;8651:43;8711:19;;34239:79:0::1;8327:409:1::0;34239:79:0::1;34331:12;34346:25;34355:9:::0;34346:6;:25:::1;:::i;:::-;34331:40;;34411:4;34392:15;34402:4;34392:9;:15::i;:::-;:23;;34384:63;;;::::0;-1:-1:-1;;;34384:63:0;;8943:2:1;34384:63:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;9021:29;9001:18;;;8994:57;9068:18;;34384:63:0::1;8741:351:1::0;34384:63:0::1;34464:6;34460:107;34474:20:::0;;::::1;34460:107;;;34515:40;34530:4;34535:9;;34545:1;34535:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34548:6;34515:14;:40::i;:::-;-1:-1:-1::0;34496:3:0::1;;34460:107;;;;34226:348;34125:449:::0;;;;:::o;27573:216::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;27685:21:::1;27725:10;27717:64;27777:3;27746:28;27758:16:::0;27685:21;27746:28:::1;:::i;30378:131::-:0;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30468:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;30468:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30378:131::o;21578:122::-;21633:4;21657:35;21665:7;-1:-1:-1;;21657:7:0;:35::i;22613:97::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;22681:12:::1;:21:::0;22613:97::o;31558:249::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;31669:5:::1;31650:15:::0;;-1:-1:-1;;;;;31650:15:0;;::::1;31638:28:::0;;:11:::1;:28;::::0;;;;;;;:36;;-1:-1:-1;;31638:36:0;;::::1;::::0;;;31685:23;;;::::1;::::0;;;;;;:30;;;::::1;31650:15:::0;31685:30;;::::1;::::0;;;31728:11:::1;:23:::0;;;;;;:30;;;;::::1;;::::0;;;31771:28;;-1:-1:-1;;;;;;31771:28:0::1;::::0;;::::1;::::0;;31558:249::o;29983:121::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30068:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30068:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29983:121::o;22873:231::-;23008:10;22998:21;;;;:9;:21;;;;;;:30;-1:-1:-1;22995:102:0;;;23072:4;;23045:40;;23060:10;;-1:-1:-1;;;;;23072:4:0;23078:6;23045:14;:40::i;:::-;;22995:102;22873:231;:::o;21102:105::-;-1:-1:-1;;;;;21186:18:0;21168:7;21186:18;;;:9;:18;;;;;;;21102:105::o;33469:648::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;33622:3:::1;33603:22:::0;::::1;33595:79;;;::::0;-1:-1:-1;;;33595:79:0;;9431:2:1;33595:79:0::1;::::0;::::1;9413:21:1::0;9470:2;9450:18;;;9443:30;9509:34;9489:18;;;9482:62;-1:-1:-1;;;9560:18:1;;;9553:43;9613:19;;33595:79:0::1;9229:409:1::0;33595:79:0::1;33693:33:::0;;::::1;33685:85;;;::::0;-1:-1:-1;;;33685:85:0;;9845:2:1;33685:85:0::1;::::0;::::1;9827:21:1::0;9884:2;9864:18;;;9857:30;9923:34;9903:18;;;9896:62;-1:-1:-1;;;9974:18:1;;;9967:38;10022:19;;33685:85:0::1;9643:404:1::0;33685:85:0::1;33783:12;33816:6:::0;33812:90:::1;33826:20:::0;;::::1;33812:90;;;33881:6;;33888:1;33881:9;;;;;;;:::i;:::-;;;;;;;33874:4;:16;;;;:::i;:::-;33867:23:::0;-1:-1:-1;33848:3:0::1;;33812:90;;;;33941:4;33922:15;33932:4;33922:9;:15::i;:::-;:23;;33914:63;;;::::0;-1:-1:-1;;;33914:63:0;;8943:2:1;33914:63:0::1;::::0;::::1;8925:21:1::0;8982:2;8962:18;;;8955:30;9021:29;9001:18;;;8994:57;9068:18;;33914:63:0::1;8741:351:1::0;33914:63:0::1;33994:6;33990:110;34004:20:::0;;::::1;33990:110;;;34045:43;34060:4;34065:9;;34075:1;34065:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;34078:6;;34085:1;34078:9;;;;;;;:::i;:::-;;;;;;;34045:14;:43::i;:::-;-1:-1:-1::0;34026:3:0::1;;33990:110;;;;33582:535;33469:648:::0;;;;;:::o;8990:148::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;9081:6:::1;::::0;9060:40:::1;::::0;9097:1:::1;::::0;-1:-1:-1;;;;;9081:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;9060:40:0;9097:1;;9060:40:::1;9111:6;:19:::0;;-1:-1:-1;;;;;;9111:19:0::1;::::0;;8990:148::o;30707:486::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;30867:9:::1;:25:::0;;;30903:13:::1;:36:::0;;;30950:15:::1;:37:::0;;;31013:64:::1;30968:19:::0;31013:39:::1;30879:13:::0;30919:20;31013:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;30998:12;:79:::0;;;31088:14:::1;:32:::0;;;31154:2:::1;-1:-1:-1::0;31131:54:0::1;;;::::0;-1:-1:-1;;;31131:54:0;;10384:2:1;31131:54:0::1;::::0;::::1;10366:21:1::0;10423:2;10403:18;;;10396:30;10462:26;10442:18;;;10435:54;10506:18;;31131:54:0::1;10182:348:1::0;31131:54:0::1;30707:486:::0;;;;:::o;21016:80::-;21068:7;21086;8412:6;;-1:-1:-1;;;;;8412:6:0;;8347:79;10012:305;10064:14;;-1:-1:-1;;;;;10064:14:0;10082:10;10064:28;10056:76;;;;-1:-1:-1;;;10056:76:0;;10737:2:1;10056:76:0;;;10719:21:1;10776:2;10756:18;;;10749:30;10815:34;10795:18;;;10788:62;-1:-1:-1;;;10866:18:1;;;10859:33;10909:19;;10056:76:0;10535:399:1;10056:76:0;10169:9;;10151:15;:27;10143:72;;;;-1:-1:-1;;;10143:72:0;;11141:2:1;10143:72:0;;;11123:21:1;11180:2;11160:18;;;11153:30;11219:33;11199:18;;;11192:61;11270:18;;10143:72:0;10939:355:1;10143:72:0;10260:14;;10252:6;;10231:44;;-1:-1:-1;;;;;10260:14:0;;;;10252:6;;;;-1:-1:-1;;;;;;;;;;;10231:44:0;10260:14;;10231:44;10295:14;;10286:6;:23;;-1:-1:-1;;;;;;10286:23:0;-1:-1:-1;;;;;10295:14:0;;;10286:23;;;;;;10012:305::o;21708:156::-;21788:4;21812:44;21826:10;21838:9;21849:6;21812:13;:44::i;22433:172::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;22593:4:::1;22564:24;22549:12;;:39;;;;:::i;:::-;22548:49;;;;:::i;:::-;22533:12;:64:::0;-1:-1:-1;22433:172:0:o;33108:176::-;33176:7;33203:73;33253:22;:20;:22::i;:::-;33203:45;33216:31;33245:1;33216:24;33226:13;33216:9;:24::i;:::-;:28;;:31::i;:::-;33203:8;;:12;:45::i;:::-;:49;;:73::i;31815:518::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;31971:9:::1;::::0;;-1:-1:-1;;;;;31971:9:0;;::::1;31984:5;31959:22:::0;;;:11:::1;:22;::::0;;;;;;;:30;;-1:-1:-1;;31959:30:0;;::::1;::::0;;;32000:26;;::::1;::::0;;;;;;:33;;;::::1;::::0;::::1;::::0;;32056:15;;;::::1;32044:28:::0;;;;;:36;;;::::1;::::0;;32091:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;32143:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;32195:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;32195:46:0;;::::1;;::::0;;;32252:37;;;::::1;::::0;;::::1;::::0;;;32300:25;;;;::::1;;::::0;;31815:518::o;31201:96::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;31269:11:::1;:20:::0;31201:96::o;30112:121::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30197:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30197:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30112:121::o;9710:226::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;9791:6:::1;::::0;;9774:14:::1;:23:::0;;-1:-1:-1;;;;;;9774:23:0;;::::1;-1:-1:-1::0;;;;;9791:6:0;::::1;9774:23;::::0;;;9808:19:::1;::::0;;9850:22:::1;9868:4:::0;9850:15:::1;:22;:::i;:::-;9838:9;:34:::0;9909:6:::1;::::0;9888:40:::1;::::0;9925:1:::1;::::0;-1:-1:-1;;;;;9909:6:0::1;::::0;-1:-1:-1;;;;;;;;;;;9888:40:0;9925:1;;9888:40:::1;9710:226:::0;:::o;32497:221::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;32582:13:::1;;32572:7;:23;32569:134;;;32625:13;::::0;32612:10:::1;:26:::0;22873:231;:::o;32569:134::-:1;32671:10;:20:::0;32497:221::o;30611:88::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;30677:8:::1;:14:::0;30611:88::o;9293:244::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9382:22:0;::::1;9374:73;;;::::0;-1:-1:-1;;;9374:73:0;;11501:2:1;9374:73:0::1;::::0;::::1;11483:21:1::0;11540:2;11520:18;;;11513:30;11579:34;11559:18;;;11552:62;-1:-1:-1;;;11630:18:1;;;11623:36;11676:19;;9374:73:0::1;11299:402:1::0;9374:73:0::1;9484:6;::::0;9463:38:::1;::::0;-1:-1:-1;;;;;9463:38:0;;::::1;::::0;9484:6:::1;::::0;-1:-1:-1;;;;;;;;;;;9463:38:0;9484:6:::1;::::0;9463:38:::1;9512:6;:17:::0;;-1:-1:-1;;;;;;9512:17:0::1;-1:-1:-1::0;;;;;9512:17:0;;;::::1;::::0;;;::::1;::::0;;9293:244::o;30241:129::-;8559:6;;-1:-1:-1;;;;;8559:6:0;7011:10;8559:22;8551:67;;;;-1:-1:-1;;;8551:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30330:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;30330:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30241:129::o;4019:240::-;4139:7;4200:12;4192:6;;;;4184:29;;;;-1:-1:-1;;;4184:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;4235:5:0;;;4019:240::o;23179:2380::-;23291:6;;23271:4;;23291:6;;23288:63;;;23307:41;23322:6;23330:9;23341:6;23307:14;:41::i;:::-;23300:48;;;;23288:63;8412:6;;-1:-1:-1;;;;;23366:17:0;;;8412:6;;23366:17;;;;:41;;-1:-1:-1;8412:6:0;;-1:-1:-1;;;;;23387:20:0;;;8412:6;;23387:20;;23366:41;23363:115;;;23431:11;;;;23423:43;;;;-1:-1:-1;;;23423:43:0;;11908:2:1;23423:43:0;;;11890:21:1;11947:2;11927:18;;;11920:30;-1:-1:-1;;;11966:18:1;;;11959:50;12026:18;;23423:43:0;11706:344:1;23423:43:0;23518:13;-1:-1:-1;;;;;23505:26:0;;;;;;;23490:11;23562:26;;23505;23562:53;;;23602:13;-1:-1:-1;;;;;23592:23:0;:6;-1:-1:-1;;;;;23592:23:0;;;23562:53;23543:73;-1:-1:-1;;;;;;23633:26:0;;23654:4;23633:26;;;;:70;;-1:-1:-1;23698:4:0;;-1:-1:-1;;;;;23677:26:0;;;23698:4;;23677:26;;23633:70;:114;;;;;23734:13;-1:-1:-1;;;;;23721:26:0;:9;-1:-1:-1;;;;;23721:26:0;;;23633:114;:160;;;;-1:-1:-1;23778:15:0;;-1:-1:-1;;;;;23765:28:0;;;23778:15;;23765:28;;23633:160;:200;;;;-1:-1:-1;23824:9:0;;-1:-1:-1;;;;;23811:22:0;;;23824:9;;23811:22;;23633:200;:252;;;;-1:-1:-1;23864:21:0;;-1:-1:-1;;;;;23851:34:0;;;23864:21;;23851:34;;23633:252;23629:526;;;23911:18;23932:20;23942:9;23932;:20::i;:::-;-1:-1:-1;;;;;23971:22:0;;;;;;:11;:22;;;;;;23911:41;;-1:-1:-1;23971:22:0;;23967:177;;24047:15;;24023:19;24036:6;24023:10;:19;:::i;:::-;24022:40;;24014:114;;;;-1:-1:-1;;;24014:114:0;;12257:2:1;24014:114:0;;;12239:21:1;12296:2;12276:18;;;12269:30;12335:34;12315:18;;;12308:62;12406:32;12386:18;;;12379:60;12456:19;;24014:114:0;12055:426:1;24014:114:0;23896:259;23629:526;24181:13;-1:-1:-1;;;;;24171:23:0;:6;-1:-1:-1;;;;;24171:23:0;;:58;;;;-1:-1:-1;24211:18:0;;;;;;;24171:58;:103;;;;-1:-1:-1;;;;;;24247:27:0;;;;;;:16;:27;;;;;;;;24246:28;24171:103;24167:317;;;-1:-1:-1;;;;;24308:24:0;;;;;;:13;:24;;;;;;24335:15;-1:-1:-1;24300:91:0;;;;-1:-1:-1;;;24300:91:0;;12688:2:1;24300:91:0;;;12670:21:1;12727:2;12707:18;;;12700:30;12766:34;12746:18;;;12739:62;-1:-1:-1;;;12817:18:1;;;12810:35;12862:19;;24300:91:0;12486:401:1;24300:91:0;24451:21;;24433:39;;24451:21;;;;;24433:15;:39;:::i;:::-;-1:-1:-1;;;;;24406:24:0;;;;;;:13;:24;;;;;:66;24167:317;-1:-1:-1;;;;;24706:26:0;;;;;;:15;:26;;;;;;;;24702:87;;24749:28;24762:6;24770;24749:12;:28::i;:::-;24848:53;;;;;;;;;;;-1:-1:-1;;;24848:53:0;;;;;;;;-1:-1:-1;;;;;24848:17:0;;-1:-1:-1;24848:17:0;;;:9;:17;;;;;;;;:53;;24870:6;;24848:21;:53::i;:::-;-1:-1:-1;;;;;24828:17:0;;;;;;:9;:17;;;;;:73;24939:6;25075:318;;;;25108:8;;:12;25105:100;;25158:31;25174:6;25182;25158:15;:31::i;:::-;25141:48;;25105:100;25075:318;;;-1:-1:-1;;;;;26166:19:0;;26141:4;26166:19;;;:11;:19;;;;;;;;26165:20;25254:64;;25312:6;25254:64;;;25278:31;25286:6;25294;25302;25278:7;:31::i;:::-;25237:81;;25350:16;:14;:16::i;:::-;25347:35;;;25369:10;:8;:10::i;:::-;-1:-1:-1;;;;;25428:20:0;;;;;;:9;:20;;;;;;:40;;25453:14;25428:24;:40::i;:::-;-1:-1:-1;;;;;25405:20:0;;;;;;;:9;:20;;;;;;;:63;;;;25486:43;;;;;;-1:-1:-1;;;;;;;;;;;25486:43:0;;;25514:14;160:25:1;;148:2;133:18;;14:177;25486:43:0;;;;;;;;-1:-1:-1;25547:4:0;;23179:2380;-1:-1:-1;;;;;;23179:2380:0:o;2121:98::-;2179:7;2206:5;2210:1;2206;:5;:::i;25567:330::-;25697:53;;;;;;;;;;;-1:-1:-1;;;25697:53:0;;;;;;;;-1:-1:-1;;;;;25697:17:0;;25660:4;25697:17;;;:9;:17;;;;;;;:53;;25719:6;;25697:21;:53::i;:::-;-1:-1:-1;;;;;25677:17:0;;;;;;;:9;:17;;;;;;:73;;;;25784:20;;;;;;;:32;;25809:6;25784:24;:32::i;:::-;-1:-1:-1;;;;;25761:20:0;;;;;;;:9;:20;;;;;;;:55;;;;25832:35;;;;;;-1:-1:-1;;;;;;;;;;;25832:35:0;;;25860:6;160:25:1;;148:2;133:18;;14:177;25832:35:0;;;;;;;;-1:-1:-1;25885:4:0;25567:330;;;;;:::o;1740:98::-;1798:7;1825:5;1829:1;1825;:5;:::i;2478:98::-;2536:7;2563:5;2567:1;2563;:5;:::i;2877:98::-;2935:7;2962:5;2966:1;2962;:5;:::i;25905:166::-;26002:12;;25992:6;:22;;:49;;;-1:-1:-1;;;;;;26018:23:0;;;;;;:15;:23;;;;;;;;25992:49;25984:79;;;;-1:-1:-1;;;25984:79:0;;13227:2:1;25984:79:0;;;13209:21:1;13266:2;13246:18;;;13239:30;-1:-1:-1;;;13285:18:1;;;13278:47;13342:18;;25984:79:0;13025:341:1;26237:406:0;26312:7;26334:17;26354:8;;26334:28;;26373:17;26393:56;26428:14;;26445:3;26428:20;;;;:::i;:::-;26393:30;26419:3;26393:21;:6;26404:9;26393:10;:21::i;:56::-;26515:4;26497:24;;;;:9;:24;;;;;;26373:76;;-1:-1:-1;26497:39:0;;26373:76;26497:28;:39::i;:::-;26488:4;26470:24;;;;:9;:24;;;;;;;:66;;;;26552:42;;-1:-1:-1;;;;;26552:42:0;;;-1:-1:-1;;;;;;;;;;;26552:42:0;;;26584:9;160:25:1;;148:2;133:18;;14:177;26552:42:0;;;;;;;;26614:21;:6;26625:9;26614:10;:21::i;:::-;26607:28;26237:406;-1:-1:-1;;;;;26237:406:0:o;26651:438::-;26731:7;26753:17;26773:6;:35;;26797:11;;26773:35;;;26782:12;;26773:35;26753:55;;26819:17;26839:56;26874:14;;26891:3;26874:20;;;;:::i;:::-;26839:30;26865:3;26839:21;:6;26850:9;26839:10;:21::i;:56::-;26961:4;26943:24;;;;:9;:24;;;;;;26819:76;;-1:-1:-1;26943:39:0;;26819:76;26943:28;:39::i;:::-;26934:4;26916:24;;;;:9;:24;;;;;;;:66;;;;26998:42;;-1:-1:-1;;;;;26998:42:0;;;-1:-1:-1;;;;;;;;;;;26998:42:0;;;27030:9;160:25:1;;148:2;133:18;;14:177;26998:42:0;;;;;;;;27060:21;:6;27071:9;27060:10;:21::i;:::-;27053:28;26651:438;-1:-1:-1;;;;;;26651:438:0:o;27137:206::-;27186:4;27210:10;-1:-1:-1;;;;;27224:13:0;27210:27;;;;;:47;;-1:-1:-1;27251:6:0;;;;27250:7;27210:47;:71;;;;-1:-1:-1;27270:11:0;;;;27210:71;:125;;;;-1:-1:-1;;27322:13:0;;27312:4;27294:24;;;;:9;:24;;;;;;:41;;;27137:206::o;28152:1774::-;19471:6;:13;;-1:-1:-1;;19471:13:0;19480:4;19471:13;;;28249:15:::1;::::0;28266:26:::1;::::0;19471:6;;28233:60:::1;::::0;:15:::1;:60::i;:::-;:76;;28300:9;;28233:76;;;28296:1;28233:76;28203:106;;28322:23;28348:60;28406:1;28348:53;28388:12;;28348:35;28363:19;28348:10;;:14;;:35;;;;:::i;:60::-;28322:86;;28421:20;28444:31;28459:15;28444:10;;:14;;:31;;;;:::i;:::-;28512:16;::::0;;28526:1:::1;28512:16:::0;;;;;::::1;::::0;;28421:54;;-1:-1:-1;28488:21:0::1;::::0;28512:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28512:16:0::1;28488:40;;28557:4;28539;28544:1;28539:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;28539:23:0::1;;;-1:-1:-1::0;;;;;28539:23:0::1;;;::::0;::::1;28583:14;-1:-1:-1::0;;;;;28583:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28573:4;28578:1;28573:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28573:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;28675:196:::1;::::0;-1:-1:-1;;;28675:196:0;;28641:21:::1;::::0;28675:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;28755:12;;28617:21:::1;::::0;28798:4;;28825::::1;::::0;28845:15:::1;::::0;28675:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28884:17;28904:40;28930:13;28904:21;:25;;:40;;;;:::i;:::-;28884:60:::0;-1:-1:-1;28967:19:0::1;28989:44;29006:26;:19:::0;29030:1:::1;29006:23;:26::i;:::-;28989:12;::::0;;:16:::1;:44::i;:::-;28967:66;;29055:26;29084:48;29130:1;29084:41;29113:11;29084:24;29098:9;;29084;:13;;:24;;;;:::i;:48::-;29055:77;;29145:26;29174:45;29207:11;29174:28;29188:13;;29174:9;:13;;:28;;;;:::i;:45::-;29145:74;;29232:25;29260:47;29295:11;29260:30;29274:15;;29260:9;:13;;:30;;;;:::i;:47::-;29321:15;29349::::0;;29341:72:::1;::::0;29232:75;;-1:-1:-1;29321:15:0;;-1:-1:-1;;;;;29349:15:0;;::::1;::::0;29403:5:::1;::::0;29378:18;;29321:15;29341:72;29321:15;29341:72;29378:18;29349:15;29403:5;29341:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29448:9:0::1;::::0;29440:65:::1;::::0;29320:93;;-1:-1:-1;;;;;;29448:9:0::1;::::0;29495:5:::1;::::0;29471:17;;29440:65:::1;::::0;;;29471:17;29448:9;29495:5;29440:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29531:5:0::1;::::0;-1:-1:-1;;29552:19:0;;;-1:-1:-1;29549:370:0::1;;29769:21;::::0;29587:252:::1;::::0;-1:-1:-1;;;29587:252:0;;29671:4:::1;29587:252;::::0;::::1;15295:34:1::0;15345:18;;;15338:34;;;-1:-1:-1;15388:18:1;;;15381:34;;;15431:18;;;15424:34;-1:-1:-1;;;;;29769:21:0;;::::1;15474:19:1::0;;;15467:44;29809:15:0::1;15527:19:1::0;;;15520:35;29587:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;29625:18;;15229:19:1;;29587:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29859:48:0::1;::::0;;16051:25:1;;;16107:2;16092:18;;16085:34;;;29859:48:0::1;::::0;-1:-1:-1;16024:18:1;29859:48:0::1;;;;;;;29549:370;-1:-1:-1::0;;19489:6:0;:14;;-1:-1:-1;;19489:14:0;;;-1:-1:-1;;;;;;;;;28152:1774:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:180::-;808:6;861:2;849:9;840:7;836:23;832:32;829:52;;;877:1;874;867:12;829:52;-1:-1:-1;900:23:1;;749:180;-1:-1:-1;749:180:1:o;934:131::-;-1:-1:-1;;;;;1009:31:1;;999:42;;989:70;;1055:1;1052;1045:12;1070:315;1138:6;1146;1199:2;1187:9;1178:7;1174:23;1170:32;1167:52;;;1215:1;1212;1205:12;1167:52;1254:9;1241:23;1273:31;1298:5;1273:31;:::i;:::-;1323:5;1375:2;1360:18;;;;1347:32;;-1:-1:-1;;;1070:315:1:o;1582:160::-;1647:20;;1703:13;;1696:21;1686:32;;1676:60;;1732:1;1729;1722:12;1676:60;1582:160;;;:::o;1747:180::-;1803:6;1856:2;1844:9;1835:7;1831:23;1827:32;1824:52;;;1872:1;1869;1862:12;1824:52;1895:26;1911:9;1895:26;:::i;1932:248::-;2000:6;2008;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;-1:-1:-1;;2100:23:1;;;2170:2;2155:18;;;2142:32;;-1:-1:-1;1932:248:1:o;2185:247::-;2244:6;2297:2;2285:9;2276:7;2272:23;2268:32;2265:52;;;2313:1;2310;2303:12;2265:52;2352:9;2339:23;2371:31;2396:5;2371:31;:::i;2437:456::-;2514:6;2522;2530;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2638:9;2625:23;2657:31;2682:5;2657:31;:::i;:::-;2707:5;-1:-1:-1;2764:2:1;2749:18;;2736:32;2777:33;2736:32;2777:33;:::i;:::-;2437:456;;2829:7;;-1:-1:-1;;;2883:2:1;2868:18;;;;2855:32;;2437:456::o;2898:337::-;2961:6;2969;3022:2;3010:9;3001:7;2997:23;2993:32;2990:52;;;3038:1;3035;3028:12;2990:52;3061:26;3077:9;3061:26;:::i;:::-;3051:36;;3137:2;3126:9;3122:18;3109:32;3181:4;3174:5;3170:16;3163:5;3160:27;3150:55;;3201:1;3198;3191:12;3150:55;3224:5;3214:15;;;2898:337;;;;;:::o;3429:367::-;3492:8;3502:6;3556:3;3549:4;3541:6;3537:17;3533:27;3523:55;;3574:1;3571;3564:12;3523:55;-1:-1:-1;3597:20:1;;3640:18;3629:30;;3626:50;;;3672:1;3669;3662:12;3626:50;3709:4;3701:6;3697:17;3685:29;;3769:3;3762:4;3752:6;3749:1;3745:14;3737:6;3733:27;3729:38;3726:47;3723:67;;;3786:1;3783;3776:12;3723:67;3429:367;;;;;:::o;3801:640::-;3905:6;3913;3921;3929;3982:2;3970:9;3961:7;3957:23;3953:32;3950:52;;;3998:1;3995;3988:12;3950:52;4037:9;4024:23;4056:31;4081:5;4056:31;:::i;:::-;4106:5;-1:-1:-1;4162:2:1;4147:18;;4134:32;4189:18;4178:30;;4175:50;;;4221:1;4218;4211:12;4175:50;4260:70;4322:7;4313:6;4302:9;4298:22;4260:70;:::i;:::-;3801:640;;4349:8;;-1:-1:-1;4234:96:1;;4431:2;4416:18;4403:32;;3801:640;-1:-1:-1;;;;3801:640:1:o;4654:315::-;4719:6;4727;4780:2;4768:9;4759:7;4755:23;4751:32;4748:52;;;4796:1;4793;4786:12;4748:52;4835:9;4822:23;4854:31;4879:5;4854:31;:::i;:::-;4904:5;-1:-1:-1;4928:35:1;4959:2;4944:18;;4928:35;:::i;:::-;4918:45;;4654:315;;;;;:::o;5209:908::-;5340:6;5348;5356;5364;5372;5425:2;5413:9;5404:7;5400:23;5396:32;5393:52;;;5441:1;5438;5431:12;5393:52;5480:9;5467:23;5499:31;5524:5;5499:31;:::i;:::-;5549:5;-1:-1:-1;5605:2:1;5590:18;;5577:32;5628:18;5658:14;;;5655:34;;;5685:1;5682;5675:12;5655:34;5724:70;5786:7;5777:6;5766:9;5762:22;5724:70;:::i;:::-;5813:8;;-1:-1:-1;5698:96:1;-1:-1:-1;5901:2:1;5886:18;;5873:32;;-1:-1:-1;5917:16:1;;;5914:36;;;5946:1;5943;5936:12;5914:36;;5985:72;6049:7;6038:8;6027:9;6023:24;5985:72;:::i;:::-;5209:908;;;;-1:-1:-1;5209:908:1;;-1:-1:-1;6076:8:1;;5959:98;5209:908;-1:-1:-1;;;5209:908:1:o;6122:385::-;6208:6;6216;6224;6232;6285:3;6273:9;6264:7;6260:23;6256:33;6253:53;;;6302:1;6299;6292:12;6253:53;-1:-1:-1;;6325:23:1;;;6395:2;6380:18;;6367:32;;-1:-1:-1;6446:2:1;6431:18;;6418:32;;6497:2;6482:18;6469:32;;-1:-1:-1;6122:385:1;-1:-1:-1;6122:385:1:o;6512:529::-;6589:6;6597;6605;6658:2;6646:9;6637:7;6633:23;6629:32;6626:52;;;6674:1;6671;6664:12;6626:52;6713:9;6700:23;6732:31;6757:5;6732:31;:::i;:::-;6782:5;-1:-1:-1;6839:2:1;6824:18;;6811:32;6852:33;6811:32;6852:33;:::i;:::-;6904:7;-1:-1:-1;6963:2:1;6948:18;;6935:32;6976:33;6935:32;6976:33;:::i;:::-;7028:7;7018:17;;;6512:529;;;;;:::o;7046:388::-;7114:6;7122;7175:2;7163:9;7154:7;7150:23;7146:32;7143:52;;;7191:1;7188;7181:12;7143:52;7230:9;7217:23;7249:31;7274:5;7249:31;:::i;:::-;7299:5;-1:-1:-1;7356:2:1;7341:18;;7328:32;7369:33;7328:32;7369:33;:::i;7439:356::-;7641:2;7623:21;;;7660:18;;;7653:30;7719:34;7714:2;7699:18;;7692:62;7786:2;7771:18;;7439:356::o;7800:127::-;7861:10;7856:3;7852:20;7849:1;7842:31;7892:4;7889:1;7882:15;7916:4;7913:1;7906:15;7932:168;8005:9;;;8036;;8053:15;;;8047:22;;8033:37;8023:71;;8074:18;;:::i;8105:217::-;8145:1;8171;8161:132;;8215:10;8210:3;8206:20;8203:1;8196:31;8250:4;8247:1;8240:15;8278:4;8275:1;8268:15;8161:132;-1:-1:-1;8307:9:1;;8105:217::o;9097:127::-;9158:10;9153:3;9149:20;9146:1;9139:31;9189:4;9186:1;9179:15;9213:4;9210:1;9203:15;10052:125;10117:9;;;10138:10;;;10135:36;;;10151:18;;:::i;12892:128::-;12959:9;;;12980:11;;;12977:37;;;12994:18;;:::i;13503:251::-;13573:6;13626:2;13614:9;13605:7;13601:23;13597:32;13594:52;;;13642:1;13639;13632:12;13594:52;13674:9;13668:16;13693:31;13718:5;13693:31;:::i;13759:980::-;14021:4;14069:3;14058:9;14054:19;14100:6;14089:9;14082:25;14126:2;14164:6;14159:2;14148:9;14144:18;14137:34;14207:3;14202:2;14191:9;14187:18;14180:31;14231:6;14266;14260:13;14297:6;14289;14282:22;14335:3;14324:9;14320:19;14313:26;;14374:2;14366:6;14362:15;14348:29;;14395:1;14405:195;14419:6;14416:1;14413:13;14405:195;;;14484:13;;-1:-1:-1;;;;;14480:39:1;14468:52;;14575:15;;;;14540:12;;;;14516:1;14434:9;14405:195;;;-1:-1:-1;;;;;;;14656:32:1;;;;14651:2;14636:18;;14629:60;-1:-1:-1;;;14720:3:1;14705:19;14698:35;14617:3;13759:980;-1:-1:-1;;;13759:980:1:o;15566:306::-;15654:6;15662;15670;15723:2;15711:9;15702:7;15698:23;15694:32;15691:52;;;15739:1;15736;15729:12;15691:52;15768:9;15762:16;15752:26;;15818:2;15807:9;15803:18;15797:25;15787:35;;15862:2;15851:9;15847:18;15841:25;15831:35;;15566:306;;;;;:::o
Swarm Source
ipfs://8ea4920789459cd58fe7615fc5d5ba32018a0500678e2a852c53b9bd71156f19
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,866.67 | 0.0108 | $41.64 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.