More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 63 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20728870 | 51 days ago | IN | 0 ETH | 0.00006562 | ||||
Approve | 20728869 | 51 days ago | IN | 0 ETH | 0.00011399 | ||||
Approve | 20125097 | 135 days ago | IN | 0 ETH | 0.00015329 | ||||
Approve | 20093285 | 140 days ago | IN | 0 ETH | 0.00021476 | ||||
Approve | 20092228 | 140 days ago | IN | 0 ETH | 0.00054752 | ||||
Transfer | 20091912 | 140 days ago | IN | 0 ETH | 0.00073342 | ||||
Approve | 20091128 | 140 days ago | IN | 0 ETH | 0.0006202 | ||||
Approve | 20090998 | 140 days ago | IN | 0 ETH | 0.00057335 | ||||
Approve | 20090684 | 140 days ago | IN | 0 ETH | 0.00102906 | ||||
Approve | 20090057 | 140 days ago | IN | 0 ETH | 0.00037264 | ||||
Approve | 20087766 | 141 days ago | IN | 0 ETH | 0.00041104 | ||||
Approve | 20085784 | 141 days ago | IN | 0 ETH | 0.00040971 | ||||
Approve | 20085433 | 141 days ago | IN | 0 ETH | 0.00042069 | ||||
Approve | 20085329 | 141 days ago | IN | 0 ETH | 0.00075134 | ||||
Approve | 20085292 | 141 days ago | IN | 0 ETH | 0.00061075 | ||||
Approve | 20085285 | 141 days ago | IN | 0 ETH | 0.00052259 | ||||
Approve | 20085185 | 141 days ago | IN | 0 ETH | 0.00081063 | ||||
Approve | 20085167 | 141 days ago | IN | 0 ETH | 0.00055153 | ||||
Approve | 20085103 | 141 days ago | IN | 0 ETH | 0.00074755 | ||||
Update Sell Tax | 20084967 | 141 days ago | IN | 0 ETH | 0.00036131 | ||||
Approve | 20084942 | 141 days ago | IN | 0 ETH | 0.00042469 | ||||
Update Sell Tax | 20084920 | 141 days ago | IN | 0 ETH | 0.00033628 | ||||
Approve | 20084880 | 141 days ago | IN | 0 ETH | 0.00067778 | ||||
Approve | 20084861 | 141 days ago | IN | 0 ETH | 0.00045177 | ||||
Transfer | 20084861 | 141 days ago | IN | 0 ETH | 0.00075255 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20125100 | 135 days ago | 0.00531283 ETH | ||||
20125100 | 135 days ago | 0.00531283 ETH | ||||
20098074 | 139 days ago | 0.00624667 ETH | ||||
20098074 | 139 days ago | 0.00624667 ETH | ||||
20093286 | 140 days ago | 0.00520687 ETH | ||||
20093286 | 140 days ago | 0.00520687 ETH | ||||
20091001 | 140 days ago | 0.00703679 ETH | ||||
20091001 | 140 days ago | 0.00703679 ETH | ||||
20090688 | 140 days ago | 0.05384731 ETH | ||||
20090688 | 140 days ago | 0.05384731 ETH | ||||
20090640 | 140 days ago | 0.09707294 ETH | ||||
20090640 | 140 days ago | 0.09707294 ETH | ||||
20090060 | 140 days ago | 0.10611508 ETH | ||||
20090060 | 140 days ago | 0.10611508 ETH | ||||
20089176 | 140 days ago | 0.11431884 ETH | ||||
20089176 | 140 days ago | 0.11431884 ETH | ||||
20087072 | 141 days ago | 0.12416359 ETH | ||||
20087072 | 141 days ago | 0.12416359 ETH | ||||
20085789 | 141 days ago | 0.13446779 ETH | ||||
20085789 | 141 days ago | 0.13446779 ETH | ||||
20085558 | 141 days ago | 0.14780637 ETH | ||||
20085558 | 141 days ago | 0.14780637 ETH | ||||
20085442 | 141 days ago | 0.1664194 ETH | ||||
20085442 | 141 days ago | 0.1664194 ETH | ||||
20085384 | 141 days ago | 0.19428567 ETH |
Loading...
Loading
Contract Name:
EBI
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-06-12 */ // SPDX-License-Identifier: MIT /************************************** X: https://x.com/EuroBetInu App: https://app.eurobetinu.com Telegram: https://t.me/EuroBetInu Website: https://eurobetinu.com/ **************************************/ pragma solidity 0.8.19; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IAccessControl { event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } library Math { enum Rounding { Down, Up, Zero } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { return a == 0 ? 0 : (a - 1) / b + 1; } function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { uint256 prod0; uint256 prod1; assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } if (prod1 == 0) { return prod0 / denominator; } require(denominator > prod1, "Math: mulDiv overflow"); uint256 remainder; assembly { remainder := mulmod(x, y, denominator) prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } uint256 twos = denominator & (~denominator + 1); assembly { denominator := div(denominator, twos) prod0 := div(prod0, twos) twos := add(div(sub(0, twos), twos), 1) } prod0 |= prod1 * twos; uint256 inverse = (3 * denominator) ^ 2; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; inverse *= 2 - denominator * inverse; result = prod0 * inverse; return result; } } function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 result = 1 << (log2(a) >> 1); unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } library SignedMath { function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } function average(int256 a, int256 b) internal pure returns (int256) { int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } function abs(int256 n) internal pure returns (uint256) { unchecked { return uint256(n >= 0 ? n : -n); } } } library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; modifier onlyRole(bytes32 role) { _checkRole(role); _; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } function hasRole(bytes32 role, address account) public view virtual override returns (bool) { return _roles[role].members[account]; } function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(account), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) { return _roles[role].adminRole; } function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } interface IERC20 { function totalSupply() external view returns (uint256); 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 ); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _createInitialSupply( address account, uint256 amount ) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function getAmountsOut( uint256 amountIn, address[] calldata path ) external view returns (uint256[] memory amounts); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IDexFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); } contract EBI is ERC20, AccessControl { uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWallet; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address public operationsAddress; uint256 public tradingActiveBlock = 0; mapping(address => bool) public markedAsSniper; bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); bytes32 public constant AUTHENTICATOR_ROLE = keccak256("AUTHENTICATOR_ROLE"); bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyOperationsFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public tokensForOperations; bool public oncePerBlockEnabled = true; uint256 public lastSwapBlock; uint256 public maxSwapsPerBlock = 1; uint256 public swapsThisBlock = 0; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedOperationsAddress(address indexed newWallet); event MaxTransactionExclusion(address _address, bool excluded); event OwnerForcedSwapBack(uint256 timestamp); event CaughtEarlyBuyer(address sniper); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TransferForeignToken(address token, uint256 amount); // Modifiers modifier onlyManager() { require(hasRole(MANAGER_ROLE, msg.sender), "Not a manager"); _; } modifier onlyAuthenticators() { require( hasRole(AUTHENTICATOR_ROLE, msg.sender), "Not an authenticator" ); _; } constructor() payable ERC20("Euro Bet Inu", "EBI") { address newOwner = msg.sender; _setupRole(MANAGER_ROLE, newOwner); // Assign the manager role to the contract deployer _setRoleAdmin(AUTHENTICATOR_ROLE, MANAGER_ROLE); // Assign manager as the administrator of the authenticator role grantRole(AUTHENTICATOR_ROLE, newOwner); // Grant the authenticator role to the contract deployer uint256 totalSupply = 1 * 1e12 * 1e18; buyOperationsFee = 20; buyTotalFees = buyOperationsFee; sellOperationsFee = 50; sellTotalFees = sellOperationsFee; maxBuyAmount = (totalSupply * 1) / 100; // 1% maxSellAmount = (totalSupply * 1) / 100; // 1% maxWallet = (totalSupply * 1) / 100; // 1% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 % operationsAddress = address(msg.sender); _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(operationsAddress), true); excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(operationsAddress), true); _createInitialSupply(address(this), totalSupply); } receive() external payable {} function addAuthenticator(address _authenticator) external onlyManager { require(_authenticator != address(0), "Invalid address"); grantRole(AUTHENTICATOR_ROLE, _authenticator); } function removeAuthenticator(address _authenticator) external onlyManager { require(_authenticator != address(0), "Invalid address"); revokeRole(AUTHENTICATOR_ROLE, _authenticator); } function _excludeFromMaxTransaction( address updAds, bool isExcluded ) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function excludeFromMaxTransaction( address updAds, bool isEx ) external onlyManager { if (!isEx) { require( updAds != lpPair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function setAutomatedMarketMakerPair( address pair, bool value ) external onlyManager { require( pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function updateBuyTax( uint256 _operationsFee ) external onlyAuthenticators { buyOperationsFee = _operationsFee; buyTotalFees = buyOperationsFee; require(buyTotalFees <= 12, "Must keep fees at 12% or less"); } function updateSellTax( uint256 _operationsFee ) external onlyAuthenticators { sellOperationsFee = _operationsFee; sellTotalFees = sellOperationsFee; require(sellTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSwapTokensAtAmount(uint256 newAmount) external onlyManager { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 1) / 100, "Swap amount cannot be higher than 1% total supply." ); swapTokensAtAmount = newAmount; } function excludeFromFees(address account, bool excluded) public onlyManager { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "amount must be greater than 0"); if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } else { require( !markedAsSniper[from], "Snipers cannot transfer tokens" ); } if (limitsInEffect) { if (to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to] ) { swapping = true; swapBack(false); swapping = false; } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForOperations += (fees * sellOperationsFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapBack(bool all) private { if (block.number != lastSwapBlock) { lastSwapBlock = block.number; swapsThisBlock = 0; } if (oncePerBlockEnabled && swapsThisBlock >= maxSwapsPerBlock) { return; } uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForOperations; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (!all && (contractBalance > swapTokensAtAmount * 15)) { contractBalance = swapTokensAtAmount * 15; } swapTokensForEth(contractBalance); tokensForOperations = 0; swapsThisBlock += 1; (bool success, ) = address(operationsAddress).call{ value: address(this).balance }(""); require(success, "Transfer to operations address failed"); } function transferForeignToken( address _token, address _to ) external onlyManager returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require( _token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active" ); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } function setOperationsAddress( address _operationsAddress ) external onlyManager { require( _operationsAddress != address(0), "_operationsAddress address cannot be 0" ); operationsAddress = payable(_operationsAddress); emit UpdatedOperationsAddress(_operationsAddress); } function removeLimits() external onlyManager { limitsInEffect = false; } function restoreLimits() external onlyManager { limitsInEffect = true; } function flagSniper(address wallet) external onlyAuthenticators { require(!markedAsSniper[wallet], "Wallet is already flagged."); markedAsSniper[wallet] = true; } function massFlagSnipers(address[] calldata wallets) external onlyAuthenticators { for (uint256 i = 0; i < wallets.length; i++) { markedAsSniper[wallets[i]] = true; } } function unflagSniper(address wallet) external onlyAuthenticators { require(markedAsSniper[wallet], "Wallet is already not marked."); markedAsSniper[wallet] = false; } function massUnflagSnipers(address[] calldata wallets) external onlyAuthenticators { for (uint256 i = 0; i < wallets.length; i++) { markedAsSniper[wallets[i]] = false; } } function recoverETH() external onlyManager { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function prepLaunch() external onlyManager { require(!tradingActive, "Trading is already active, cannot relaunch."); address _dexRouter; if (block.chainid == 1) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2 } else if (block.chainid == 11155111) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Sepolia } else if (block.chainid == 56) { _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2 } else if (block.chainid == 97) { _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2 } else if (block.chainid == 42161) { _dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap } else { revert("Chain not configured"); } // initialize router dexRouter = IDexRouter(_dexRouter); // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); _excludeFromMaxTransaction(address(dexRouter), true); excludeFromFees(address(dexRouter), true); require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable msg.sender, block.timestamp ); } function enableTrading() external onlyAuthenticators { require(!tradingActive, "Cannot reenable trading"); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; emit EnabledTrading(); } function setSwapRestrictions(bool _enabled, uint256 _maxSwaps) external onlyAuthenticators { require(_maxSwaps > 0, "Max swaps per block must be greater than 0"); oncePerBlockEnabled = _enabled; maxSwapsPerBlock = _maxSwaps; } function forceSwapBack(bool all) external onlyAuthenticators { require( balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction" ); swapping = true; swapBack(all); swapping = false; emit OwnerForcedSwapBack(block.timestamp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"AUTHENTICATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"addAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"all","type":"bool"}],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastSwapBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massFlagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massUnflagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oncePerBlockEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"removeAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_maxSwaps","type":"uint256"}],"name":"setSwapRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapsThisBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600d819055600f805462ffffff191660019081179091556015805460ff191682179055601755601855600c60809081526b4575726f2042657420496e7560a01b60a052610100604052600360c08181526245424960e81b60e0529062000068838262000850565b50600462000077828262000850565b503391506200009890506000805160206200438f8339815191528262000222565b620000c2600080516020620043af8339815191526000805160206200438f83398151915262000232565b620000dd600080516020620043af833981519152826200027d565b60146011819055601055603260138190556012556c0c9f2c9cd04674edea4000000060646200010e82600162000932565b6200011a91906200094c565b60065560646200012c82600162000932565b6200013891906200094c565b60075560646200014a82600162000932565b6200015691906200094c565b6008556127106200016982600562000932565b6200017591906200094c565b600b55600c80546001600160a01b0319163317905562000197826001620002ab565b620001a4306001620002ab565b620001b361dead6001620002ab565b600c54620001cc906001600160a01b03166001620002ab565b620001d98260016200030e565b620001e63060016200030e565b620001f561dead60016200030e565b600c546200020e906001600160a01b031660016200030e565b6200021a3082620003ca565b505062000a89565b6200022e8282620004af565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152600560205260409020600101546200029a8162000539565b620002a68383620004af565b505050565b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b620003296000805160206200438f8339815191523362000548565b6200036b5760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620004225760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000362565b80600260008282546200043691906200096f565b90915550506001600160a01b03821660009081526020819052604081208054839290620004659084906200096f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004bb828262000548565b6200022e5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620004f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000545813362000575565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b62000581828262000548565b6200022e576200059181620005d9565b6200059e836020620005ec565b604051602001620005b1929190620009ab565b60408051601f198184030181529082905262461bcd60e51b8252620003629160040162000a24565b60606200056f6001600160a01b03831660145b60606000620005fd83600262000932565b6200060a9060026200096f565b6001600160401b03811115620006245762000624620007ac565b6040519080825280601f01601f1916602001820160405280156200064f576020820181803683370190505b509050600360fc1b816000815181106200066d576200066d62000a59565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106200069f576200069f62000a59565b60200101906001600160f81b031916908160001a9053506000620006c584600262000932565b620006d29060016200096f565b90505b600181111562000754576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200070a576200070a62000a59565b1a60f81b82828151811062000723576200072362000a59565b60200101906001600160f81b031916908160001a90535060049490941c936200074c8162000a6f565b9050620006d5565b508315620007a55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000362565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d757607f821691505b602082108103620007f857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002a657600081815260208120601f850160051c81016020861015620008275750805b601f850160051c820191505b81811015620008485782815560010162000833565b505050505050565b81516001600160401b038111156200086c576200086c620007ac565b62000884816200087d8454620007c2565b84620007fe565b602080601f831160018114620008bc5760008415620008a35750858301515b600019600386901b1c1916600185901b17855562000848565b600085815260208120601f198616915b82811015620008ed57888601518255948401946001909101908401620008cc565b50858210156200090c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200056f576200056f6200091c565b6000826200096a57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200056f576200056f6200091c565b60005b83811015620009a257818101518382015260200162000988565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620009e581601785016020880162000985565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a1881602884016020880162000985565b01602801949350505050565b602081526000825180602084015262000a4581604085016020870162000985565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a815762000a816200091c565b506000190190565b6138f68062000a996000396000f3fe6080604052600436106103c75760003560e01c80637571336a116101f2578063c02466681161010d578063dd62ed3e116100a0578063ee40166e1161006f578063ee40166e14610b36578063f8b45b0514610b4c578063fb002c9714610b62578063ff5d380714610b7857600080fd5b8063dd62ed3e14610a98578063e2f4560514610ade578063ea4cfe1214610af4578063ec87621c14610b1457600080fd5b8063d257b34f116100dc578063d257b34f14610a22578063d547741f14610a42578063d85ba06314610a62578063d86c9fec14610a7857600080fd5b8063c0246668146109a2578063c44a24dd146109c2578063c4c6571b146109f2578063cef3f88614610a0857600080fd5b80639a7a23d611610185578063a9059cbb11610154578063a9059cbb14610911578063b62496f514610931578063b65c5e8d14610961578063bbc0c7421461098357600080fd5b80639a7a23d6146108a7578063a217fddf146108c7578063a28e86d3146108dc578063a457c2d7146108f157600080fd5b806391d14854116101c157806391d148541461083c57806395d89b411461085c57806396792669146108715780639699a82d1461088757600080fd5b80637571336a146107d15780638366e79a146107f157806388e765ff146108115780638a8c523c1461082757600080fd5b8063436d3340116102e25780635a139dd4116102755780636ddd1713116102445780636ddd17131461075c5780636e55c13f1461077c57806370a082311461079c578063751039fc146107bc57600080fd5b80635a139dd4146106fa57806366d602ae14610710578063672fc7be146107265780636a486a8e1461074657600080fd5b80634be813e6116102b15780634be813e61461068e5780634f77f6c0146106ae57806357bd8bb3146106c4578063591f09eb146106e457600080fd5b8063436d334014610614578063452ed4f114610634578063499b8394146106545780634a62bb651461067457600080fd5b80631b1b6f741161035a578063313ce56711610329578063313ce5671461059857806336568abe146105b457806339509351146105d4578063410b2724146105f457600080fd5b80631b1b6f741461050857806323b872dd14610528578063248a9ca3146105485780632f2ff15d1461057857600080fd5b8063095ea7b311610396578063095ea7b31461047957806310d5de531461049957806312185a39146104c957806318160ddd146104e957600080fd5b806301ffc9a7146103d35780630614117a1461040857806306fdde031461041f5780630758d9241461044157600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132ae565b610b8d565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610bc4565b005b34801561042b57600080fd5b50610434610c4e565b6040516103ff91906132fc565b34801561044d57600080fd5b50600954610461906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561048557600080fd5b506103f3610494366004613344565b610ce0565b3480156104a557600080fd5b506103f36104b4366004613370565b601a6020526000908152604090205460ff1681565b3480156104d557600080fd5b5061041d6104e436600461338d565b610cf6565b3480156104f557600080fd5b506002545b6040519081526020016103ff565b34801561051457600080fd5b5061041d6105233660046133b4565b610d88565b34801561053457600080fd5b506103f36105433660046133d1565b610e9d565b34801561055457600080fd5b506104fa61056336600461338d565b60009081526005602052604090206001015490565b34801561058457600080fd5b5061041d610593366004613412565b610f47565b3480156105a457600080fd5b50604051601281526020016103ff565b3480156105c057600080fd5b5061041d6105cf366004613412565b610f71565b3480156105e057600080fd5b506103f36105ef366004613344565b610fef565b34801561060057600080fd5b5061041d61060f366004613370565b61102b565b34801561062057600080fd5b5061041d61062f36600461338d565b6110bf565b34801561064057600080fd5b50600a54610461906001600160a01b031681565b34801561066057600080fd5b5061041d61066f366004613370565b61114e565b34801561068057600080fd5b50600f546103f39060ff1681565b34801561069a57600080fd5b5061041d6106a9366004613442565b611231565b3480156106ba57600080fd5b506104fa60135481565b3480156106d057600080fd5b5061041d6106df366004613370565b6112d7565b3480156106f057600080fd5b506104fa60165481565b34801561070657600080fd5b506104fa60115481565b34801561071c57600080fd5b506104fa60075481565b34801561073257600080fd5b5061041d6107413660046134b7565b611398565b34801561075257600080fd5b506104fa60125481565b34801561076857600080fd5b50600f546103f39062010000900460ff1681565b34801561078857600080fd5b5061041d610797366004613442565b611446565b3480156107a857600080fd5b506104fa6107b7366004613370565b6114ec565b3480156107c857600080fd5b5061041d611507565b3480156107dd57600080fd5b5061041d6107ec3660046134d5565b611547565b3480156107fd57600080fd5b506103f361080c366004613503565b611619565b34801561081d57600080fd5b506104fa60065481565b34801561083357600080fd5b5061041d61185c565b34801561084857600080fd5b506103f3610857366004613412565b611928565b34801561086857600080fd5b50610434611953565b34801561087d57600080fd5b506104fa60175481565b34801561089357600080fd5b5061041d6108a2366004613370565b611962565b3480156108b357600080fd5b5061041d6108c23660046134d5565b6119f6565b3480156108d357600080fd5b506104fa600081565b3480156108e857600080fd5b5061041d611af4565b3480156108fd57600080fd5b506103f361090c366004613344565b611b37565b34801561091d57600080fd5b506103f361092c366004613344565b611bd0565b34801561093d57600080fd5b506103f361094c366004613370565b601b6020526000908152604090205460ff1681565b34801561096d57600080fd5b506104fa6000805160206138a183398151915281565b34801561098f57600080fd5b50600f546103f390610100900460ff1681565b3480156109ae57600080fd5b5061041d6109bd3660046134d5565b611bdd565b3480156109ce57600080fd5b506103f36109dd366004613370565b600e6020526000908152604090205460ff1681565b3480156109fe57600080fd5b506104fa60185481565b348015610a1457600080fd5b506015546103f39060ff1681565b348015610a2e57600080fd5b5061041d610a3d36600461338d565b611c70565b348015610a4e57600080fd5b5061041d610a5d366004613412565b611dc2565b348015610a6e57600080fd5b506104fa60105481565b348015610a8457600080fd5b5061041d610a93366004613370565b611de7565b348015610aa457600080fd5b506104fa610ab3366004613503565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aea57600080fd5b506104fa600b5481565b348015610b0057600080fd5b50600c54610461906001600160a01b031681565b348015610b2057600080fd5b506104fa60008051602061388183398151915281565b348015610b4257600080fd5b506104fa600d5481565b348015610b5857600080fd5b506104fa60085481565b348015610b6e57600080fd5b506104fa60145481565b348015610b8457600080fd5b5061041d611ea4565b60006001600160e01b03198216637965db0b60e01b1480610bbe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610bdc60008051602061388183398151915233611928565b610c015760405162461bcd60e51b8152600401610bf890613531565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50505050565b606060038054610c5d90613558565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990613558565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b6000610ced33848461239d565b50600192915050565b610d0e6000805160206138a183398151915233611928565b610d2a5760405162461bcd60e51b8152600401610bf890613592565b60138190556012819055600f811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bf8565b50565b610da06000805160206138a183398151915233611928565b610dbc5760405162461bcd60e51b8152600401610bf890613592565b600b54610dc8306114ec565b1015610e3e576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610bf8565b600a805460ff60a01b1916600160a01b179055610e5a816124c1565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6000610eaa848484612622565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f2f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bf8565b610f3c853385840361239d565b506001949350505050565b600082815260056020526040902060010154610f6281612c6d565b610f6c8383612c77565b505050565b6001600160a01b0381163314610fe15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610bf8565b610feb8282612cfd565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ced9185906110269086906135d6565b61239d565b61104360008051602061388183398151915233611928565b61105f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166110a75760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282610f47565b6110d76000805160206138a183398151915233611928565b6110f35760405162461bcd60e51b8152600401610bf890613592565b60118190556010819055600c811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313225206f72206c6573730000006044820152606401610bf8565b61116660008051602061388183398151915233611928565b6111825760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bf8565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6112496000805160206138a183398151915233611928565b6112655760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576000600e6000858585818110611288576112886135e9565b905060200201602081019061129d9190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112cf816135ff565b915050611268565b6112ef6000805160206138a183398151915233611928565b61130b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16156113745760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b6113b06000805160206138a183398151915233611928565b6113cc5760405162461bcd60e51b8152600401610bf890613592565b6000811161142f5760405162461bcd60e51b815260206004820152602a60248201527f4d61782073776170732070657220626c6f636b206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608401610bf8565b6015805460ff191692151592909217909155601755565b61145e6000805160206138a183398151915233611928565b61147a5760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576001600e600085858581811061149d5761149d6135e9565b90506020020160208101906114b29190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114e4816135ff565b91505061147d565b6001600160a01b031660009081526020819052604090205490565b61151f60008051602061388183398151915233611928565b61153b5760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19169055565b61155f60008051602061388183398151915233611928565b61157b5760405162461bcd60e51b8152600401610bf890613531565b806115ee57600a546001600160a01b03908116908316036115ee5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bf8565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b600061163360008051602061388183398151915233611928565b61164f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0383166116a55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bf8565b6001600160a01b038316301415806116c55750600f54610100900460ff16155b61172e5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610bf8565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190613618565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613631565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6118746000805160206138a183398151915233611928565b6118905760405162461bcd60e51b8152600401610bf890613592565b600f54610100900460ff16156118e85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bf8565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610c5d90613558565b61197a60008051602061388183398151915233611928565b6119965760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166119de5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282611dc2565b611a0e60008051602061388183398151915233611928565b611a2a5760405162461bcd60e51b8152600401610bf890613531565b600a546001600160a01b0390811690831603611aae5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bf8565b611ab88282612d64565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611b0c60008051602061388183398151915233611928565b611b285760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bf8565b611bc6338585840361239d565b5060019392505050565b6000610ced338484612622565b611bf560008051602061388183398151915233611928565b611c115760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611c8860008051602061388183398151915233611928565b611ca45760405162461bcd60e51b8152600401610bf890613531565b620186a0611cb160025490565b611cbc90600161364e565b611cc69190613665565b811015611d335760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bf8565b6064611d3e60025490565b611d4990600161364e565b611d539190613665565b811115611dbd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610bf8565b600b55565b600082815260056020526040902060010154611ddd81612c6d565b610f6c8383612cfd565b611dff6000805160206138a183398151915233611928565b611e1b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16611e835760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b611ebc60008051602061388183398151915233611928565b611ed85760405162461bcd60e51b8152600401610bf890613531565b600f54610100900460ff1615611f445760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610bf8565b600046600103611f695750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b4662aa36a703611f8e5750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b46603803611fb157507310ed43c718714eb63d5aa57b78b54704e256024e612037565b46606103611fd4575073d99d1c33f9fc3444f8101754abc46c52416550d1612037565b4661a4b103611ff85750731b02da8cb0d097eb8d57a175b88c7d8b47997506612037565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610bf8565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613687565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a9190613687565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190613687565b600a80546001600160a01b0319166001600160a01b039290921691821790556121d5906001612d8e565b600a546121ec906001600160a01b03166001612d64565b600954612203906001600160a01b03166001612d8e565b60095461221a906001600160a01b03166001611bdd565b600047116122765760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610bf8565b6000612281306114ec565b116122dd5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bf8565b6009546122f89030906001600160a01b0316611026826114ec565b6009546001600160a01b031663f305d7194730612314816114ec565b6040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015612378573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c4891906136a4565b6001600160a01b0383166123ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bf8565b6001600160a01b0382166124605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bf8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60165443146124d4574360165560006018555b60155460ff1680156124ea575060175460185410155b156124f25750565b60006124fd306114ec565b60145490915081158061250e575080155b1561251857505050565b821580156125325750600b5461252f90600f61364e565b82115b1561254857600b5461254590600f61364e565b91505b61255182612df1565b600060148190555060016018600082825461256c91906135d6565b9091555050600c546040516000916001600160a01b03169047908381818185875af1925050503d80600081146125be576040519150601f19603f3d011682016040523d82523d6000602084013e6125c3565b606091505b5050905080610c485760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220746f206f7065726174696f6e7320616464726573732066604482015264185a5b195960da1b6064820152608401610bf8565b6001600160a01b0383166126485760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b03821661266e5760405162461bcd60e51b8152600401610bf890613717565b600081116126be5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bf8565b600f54610100900460ff16612756576001600160a01b03831660009081526019602052604090205460ff168061270c57506001600160a01b03821660009081526019602052604090205460ff165b6127515760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bf8565b6127bf565b6001600160a01b0383166000908152600e602052604090205460ff16156127bf5760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610bf8565b600f5460ff1615612a55576001600160a01b03821661dead148015906127fe57506001600160a01b03831660009081526019602052604090205460ff16155b801561282357506001600160a01b03821660009081526019602052604090205460ff16155b15612a55576001600160a01b0383166000908152601b602052604090205460ff16801561286957506001600160a01b0382166000908152601a602052604090205460ff16155b15612930576006548111156128d15760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bf8565b6008546128dd836114ec565b6128e790836135d6565b111561292b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b612a55565b6001600160a01b0382166000908152601b602052604090205460ff16801561297157506001600160a01b0383166000908152601a602052604090205460ff16155b156129db5760075481111561292b5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bf8565b6001600160a01b0382166000908152601a602052604090205460ff16612a5557600854612a07836114ec565b612a1190836135d6565b1115612a555760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b6000612a60306114ec565b600b5490915081108015908190612a7f5750600f5462010000900460ff165b8015612a955750600a54600160a01b900460ff16155b8015612ab957506001600160a01b0384166000908152601b602052604090205460ff165b15612ae957600a805460ff60a01b1916600160a01b179055612adb60006124c1565b600a805460ff60a01b191690555b6001600160a01b03851660009081526019602052604090205460019060ff1680612b2b57506001600160a01b03851660009081526019602052604090205460ff165b15612b34575060005b60008115612c59576001600160a01b0386166000908152601b602052604090205460ff168015612b6657506000601254115b15612bbe57606460125486612b7b919061364e565b612b859190613665565b905060125460135482612b98919061364e565b612ba29190613665565b60146000828254612bb391906135d6565b90915550612c3b9050565b6001600160a01b0387166000908152601b602052604090205460ff168015612be857506000601054115b15612c3b57606460105486612bfd919061364e565b612c079190613665565b905060105460115482612c1a919061364e565b612c249190613665565b60146000828254612c3591906135d6565b90915550505b8015612c4c57612c4c873083612f4b565b612c56818661375a565b94505b612c64878787612f4b565b50505050505050565b610d8581336130a0565b612c818282611928565b610feb5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612cb93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612d078282611928565b15610feb5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055611ab882825b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657612e266135e9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea39190613687565b81600181518110612eb657612eb66135e9565b6001600160a01b039283166020918202929092010152600954612edc913091168461239d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f15908590600090869030904290600401613783565b600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b505050505050565b6001600160a01b038316612f715760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b038216612f975760405162461bcd60e51b8152600401610bf890613717565b6001600160a01b0383166000908152602081905260409020548181101561300f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bf8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906130469084906135d6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161309291815260200190565b60405180910390a350505050565b6130aa8282611928565b610feb576130b7816130f9565b6130c283602061310b565b6040516020016130d39291906137f4565b60408051601f198184030181529082905262461bcd60e51b8252610bf8916004016132fc565b6060610bbe6001600160a01b03831660145b6060600061311a83600261364e565b6131259060026135d6565b67ffffffffffffffff81111561313d5761313d61376d565b6040519080825280601f01601f191660200182016040528015613167576020820181803683370190505b509050600360fc1b81600081518110613182576131826135e9565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131b1576131b16135e9565b60200101906001600160f81b031916908160001a90535060006131d584600261364e565b6131e09060016135d6565b90505b6001811115613258576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613214576132146135e9565b1a60f81b82828151811061322a5761322a6135e9565b60200101906001600160f81b031916908160001a90535060049490941c9361325181613869565b90506131e3565b5083156132a75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bf8565b9392505050565b6000602082840312156132c057600080fd5b81356001600160e01b0319811681146132a757600080fd5b60005b838110156132f35781810151838201526020016132db565b50506000910152565b602081526000825180602084015261331b8160408501602087016132d8565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d8557600080fd5b6000806040838503121561335757600080fd5b82356133628161332f565b946020939093013593505050565b60006020828403121561338257600080fd5b81356132a78161332f565b60006020828403121561339f57600080fd5b5035919050565b8015158114610d8557600080fd5b6000602082840312156133c657600080fd5b81356132a7816133a6565b6000806000606084860312156133e657600080fd5b83356133f18161332f565b925060208401356134018161332f565b929592945050506040919091013590565b6000806040838503121561342557600080fd5b8235915060208301356134378161332f565b809150509250929050565b6000806020838503121561345557600080fd5b823567ffffffffffffffff8082111561346d57600080fd5b818501915085601f83011261348157600080fd5b81358181111561349057600080fd5b8660208260051b85010111156134a557600080fd5b60209290920196919550909350505050565b600080604083850312156134ca57600080fd5b8235613362816133a6565b600080604083850312156134e857600080fd5b82356134f38161332f565b91506020830135613437816133a6565b6000806040838503121561351657600080fd5b82356135218161332f565b915060208301356134378161332f565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b600181811c9082168061356c57607f821691505b60208210810361358c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bbe57610bbe6135c0565b634e487b7160e01b600052603260045260246000fd5b600060018201613611576136116135c0565b5060010190565b60006020828403121561362a57600080fd5b5051919050565b60006020828403121561364357600080fd5b81516132a7816133a6565b8082028115828204841417610bbe57610bbe6135c0565b60008261368257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561369957600080fd5b81516132a78161332f565b6000806000606084860312156136b957600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bbe57610bbe6135c0565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d35784516001600160a01b0316835293830193918301916001016137ae565b50506001600160a01b03969096166060850152505050608001529392505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161382c8160178501602088016132d8565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161385d8160288401602088016132d8565b01602801949350505050565b600081613878576138786135c0565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a2646970667358221220f08f3486800e0f81aa4c7a85abcce8b50c6a80920c4398a4fc3d26c4b51b1a7064736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081
Deployed Bytecode
0x6080604052600436106103c75760003560e01c80637571336a116101f2578063c02466681161010d578063dd62ed3e116100a0578063ee40166e1161006f578063ee40166e14610b36578063f8b45b0514610b4c578063fb002c9714610b62578063ff5d380714610b7857600080fd5b8063dd62ed3e14610a98578063e2f4560514610ade578063ea4cfe1214610af4578063ec87621c14610b1457600080fd5b8063d257b34f116100dc578063d257b34f14610a22578063d547741f14610a42578063d85ba06314610a62578063d86c9fec14610a7857600080fd5b8063c0246668146109a2578063c44a24dd146109c2578063c4c6571b146109f2578063cef3f88614610a0857600080fd5b80639a7a23d611610185578063a9059cbb11610154578063a9059cbb14610911578063b62496f514610931578063b65c5e8d14610961578063bbc0c7421461098357600080fd5b80639a7a23d6146108a7578063a217fddf146108c7578063a28e86d3146108dc578063a457c2d7146108f157600080fd5b806391d14854116101c157806391d148541461083c57806395d89b411461085c57806396792669146108715780639699a82d1461088757600080fd5b80637571336a146107d15780638366e79a146107f157806388e765ff146108115780638a8c523c1461082757600080fd5b8063436d3340116102e25780635a139dd4116102755780636ddd1713116102445780636ddd17131461075c5780636e55c13f1461077c57806370a082311461079c578063751039fc146107bc57600080fd5b80635a139dd4146106fa57806366d602ae14610710578063672fc7be146107265780636a486a8e1461074657600080fd5b80634be813e6116102b15780634be813e61461068e5780634f77f6c0146106ae57806357bd8bb3146106c4578063591f09eb146106e457600080fd5b8063436d334014610614578063452ed4f114610634578063499b8394146106545780634a62bb651461067457600080fd5b80631b1b6f741161035a578063313ce56711610329578063313ce5671461059857806336568abe146105b457806339509351146105d4578063410b2724146105f457600080fd5b80631b1b6f741461050857806323b872dd14610528578063248a9ca3146105485780632f2ff15d1461057857600080fd5b8063095ea7b311610396578063095ea7b31461047957806310d5de531461049957806312185a39146104c957806318160ddd146104e957600080fd5b806301ffc9a7146103d35780630614117a1461040857806306fdde031461041f5780630758d9241461044157600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132ae565b610b8d565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610bc4565b005b34801561042b57600080fd5b50610434610c4e565b6040516103ff91906132fc565b34801561044d57600080fd5b50600954610461906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561048557600080fd5b506103f3610494366004613344565b610ce0565b3480156104a557600080fd5b506103f36104b4366004613370565b601a6020526000908152604090205460ff1681565b3480156104d557600080fd5b5061041d6104e436600461338d565b610cf6565b3480156104f557600080fd5b506002545b6040519081526020016103ff565b34801561051457600080fd5b5061041d6105233660046133b4565b610d88565b34801561053457600080fd5b506103f36105433660046133d1565b610e9d565b34801561055457600080fd5b506104fa61056336600461338d565b60009081526005602052604090206001015490565b34801561058457600080fd5b5061041d610593366004613412565b610f47565b3480156105a457600080fd5b50604051601281526020016103ff565b3480156105c057600080fd5b5061041d6105cf366004613412565b610f71565b3480156105e057600080fd5b506103f36105ef366004613344565b610fef565b34801561060057600080fd5b5061041d61060f366004613370565b61102b565b34801561062057600080fd5b5061041d61062f36600461338d565b6110bf565b34801561064057600080fd5b50600a54610461906001600160a01b031681565b34801561066057600080fd5b5061041d61066f366004613370565b61114e565b34801561068057600080fd5b50600f546103f39060ff1681565b34801561069a57600080fd5b5061041d6106a9366004613442565b611231565b3480156106ba57600080fd5b506104fa60135481565b3480156106d057600080fd5b5061041d6106df366004613370565b6112d7565b3480156106f057600080fd5b506104fa60165481565b34801561070657600080fd5b506104fa60115481565b34801561071c57600080fd5b506104fa60075481565b34801561073257600080fd5b5061041d6107413660046134b7565b611398565b34801561075257600080fd5b506104fa60125481565b34801561076857600080fd5b50600f546103f39062010000900460ff1681565b34801561078857600080fd5b5061041d610797366004613442565b611446565b3480156107a857600080fd5b506104fa6107b7366004613370565b6114ec565b3480156107c857600080fd5b5061041d611507565b3480156107dd57600080fd5b5061041d6107ec3660046134d5565b611547565b3480156107fd57600080fd5b506103f361080c366004613503565b611619565b34801561081d57600080fd5b506104fa60065481565b34801561083357600080fd5b5061041d61185c565b34801561084857600080fd5b506103f3610857366004613412565b611928565b34801561086857600080fd5b50610434611953565b34801561087d57600080fd5b506104fa60175481565b34801561089357600080fd5b5061041d6108a2366004613370565b611962565b3480156108b357600080fd5b5061041d6108c23660046134d5565b6119f6565b3480156108d357600080fd5b506104fa600081565b3480156108e857600080fd5b5061041d611af4565b3480156108fd57600080fd5b506103f361090c366004613344565b611b37565b34801561091d57600080fd5b506103f361092c366004613344565b611bd0565b34801561093d57600080fd5b506103f361094c366004613370565b601b6020526000908152604090205460ff1681565b34801561096d57600080fd5b506104fa6000805160206138a183398151915281565b34801561098f57600080fd5b50600f546103f390610100900460ff1681565b3480156109ae57600080fd5b5061041d6109bd3660046134d5565b611bdd565b3480156109ce57600080fd5b506103f36109dd366004613370565b600e6020526000908152604090205460ff1681565b3480156109fe57600080fd5b506104fa60185481565b348015610a1457600080fd5b506015546103f39060ff1681565b348015610a2e57600080fd5b5061041d610a3d36600461338d565b611c70565b348015610a4e57600080fd5b5061041d610a5d366004613412565b611dc2565b348015610a6e57600080fd5b506104fa60105481565b348015610a8457600080fd5b5061041d610a93366004613370565b611de7565b348015610aa457600080fd5b506104fa610ab3366004613503565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aea57600080fd5b506104fa600b5481565b348015610b0057600080fd5b50600c54610461906001600160a01b031681565b348015610b2057600080fd5b506104fa60008051602061388183398151915281565b348015610b4257600080fd5b506104fa600d5481565b348015610b5857600080fd5b506104fa60085481565b348015610b6e57600080fd5b506104fa60145481565b348015610b8457600080fd5b5061041d611ea4565b60006001600160e01b03198216637965db0b60e01b1480610bbe57506301ffc9a760e01b6001600160e01b03198316145b92915050565b610bdc60008051602061388183398151915233611928565b610c015760405162461bcd60e51b8152600401610bf890613531565b60405180910390fd5b604051600090339047908381818185875af1925050503d8060008114610c43576040519150601f19603f3d011682016040523d82523d6000602084013e610c48565b606091505b50505050565b606060038054610c5d90613558565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8990613558565b8015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b5050505050905090565b6000610ced33848461239d565b50600192915050565b610d0e6000805160206138a183398151915233611928565b610d2a5760405162461bcd60e51b8152600401610bf890613592565b60138190556012819055600f811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610bf8565b50565b610da06000805160206138a183398151915233611928565b610dbc5760405162461bcd60e51b8152600401610bf890613592565b600b54610dc8306114ec565b1015610e3e576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610bf8565b600a805460ff60a01b1916600160a01b179055610e5a816124c1565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a150565b6000610eaa848484612622565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f2f5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610bf8565b610f3c853385840361239d565b506001949350505050565b600082815260056020526040902060010154610f6281612c6d565b610f6c8383612c77565b505050565b6001600160a01b0381163314610fe15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610bf8565b610feb8282612cfd565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ced9185906110269086906135d6565b61239d565b61104360008051602061388183398151915233611928565b61105f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166110a75760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282610f47565b6110d76000805160206138a183398151915233611928565b6110f35760405162461bcd60e51b8152600401610bf890613592565b60118190556010819055600c811115610d855760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313225206f72206c6573730000006044820152606401610bf8565b61116660008051602061388183398151915233611928565b6111825760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166111e75760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610bf8565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6112496000805160206138a183398151915233611928565b6112655760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576000600e6000858585818110611288576112886135e9565b905060200201602081019061129d9190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112cf816135ff565b915050611268565b6112ef6000805160206138a183398151915233611928565b61130b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16156113745760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b6113b06000805160206138a183398151915233611928565b6113cc5760405162461bcd60e51b8152600401610bf890613592565b6000811161142f5760405162461bcd60e51b815260206004820152602a60248201527f4d61782073776170732070657220626c6f636b206d75737420626520677265616044820152690746572207468616e20360b41b6064820152608401610bf8565b6015805460ff191692151592909217909155601755565b61145e6000805160206138a183398151915233611928565b61147a5760405162461bcd60e51b8152600401610bf890613592565b60005b81811015610f6c576001600e600085858581811061149d5761149d6135e9565b90506020020160208101906114b29190613370565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114e4816135ff565b91505061147d565b6001600160a01b031660009081526020819052604090205490565b61151f60008051602061388183398151915233611928565b61153b5760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19169055565b61155f60008051602061388183398151915233611928565b61157b5760405162461bcd60e51b8152600401610bf890613531565b806115ee57600a546001600160a01b03908116908316036115ee5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610bf8565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b600061163360008051602061388183398151915233611928565b61164f5760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0383166116a55760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610bf8565b6001600160a01b038316301415806116c55750600f54610100900460ff16155b61172e5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610bf8565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117999190613618565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af11580156117ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118109190613631565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6118746000805160206138a183398151915233611928565b6118905760405162461bcd60e51b8152600401610bf890613592565b600f54610100900460ff16156118e85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610bf8565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610c5d90613558565b61197a60008051602061388183398151915233611928565b6119965760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b0381166119de5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610bf8565b610d856000805160206138a183398151915282611dc2565b611a0e60008051602061388183398151915233611928565b611a2a5760405162461bcd60e51b8152600401610bf890613531565b600a546001600160a01b0390811690831603611aae5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bf8565b611ab88282612d64565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611b0c60008051602061388183398151915233611928565b611b285760405162461bcd60e51b8152600401610bf890613531565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611bb95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bf8565b611bc6338585840361239d565b5060019392505050565b6000610ced338484612622565b611bf560008051602061388183398151915233611928565b611c115760405162461bcd60e51b8152600401610bf890613531565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611c8860008051602061388183398151915233611928565b611ca45760405162461bcd60e51b8152600401610bf890613531565b620186a0611cb160025490565b611cbc90600161364e565b611cc69190613665565b811015611d335760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610bf8565b6064611d3e60025490565b611d4990600161364e565b611d539190613665565b811115611dbd5760405162461bcd60e51b815260206004820152603260248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527137101892903a37ba30b61039bab838363c9760711b6064820152608401610bf8565b600b55565b600082815260056020526040902060010154611ddd81612c6d565b610f6c8383612cfd565b611dff6000805160206138a183398151915233611928565b611e1b5760405162461bcd60e51b8152600401610bf890613592565b6001600160a01b0381166000908152600e602052604090205460ff16611e835760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610bf8565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b611ebc60008051602061388183398151915233611928565b611ed85760405162461bcd60e51b8152600401610bf890613531565b600f54610100900460ff1615611f445760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610bf8565b600046600103611f695750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b4662aa36a703611f8e5750737a250d5630b4cf539739df2c5dacb4c659f2488d612037565b46603803611fb157507310ed43c718714eb63d5aa57b78b54704e256024e612037565b46606103611fd4575073d99d1c33f9fc3444f8101754abc46c52416550d1612037565b4661a4b103611ff85750731b02da8cb0d097eb8d57a175b88c7d8b47997506612037565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610bf8565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613687565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a9190613687565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190613687565b600a80546001600160a01b0319166001600160a01b039290921691821790556121d5906001612d8e565b600a546121ec906001600160a01b03166001612d64565b600954612203906001600160a01b03166001612d8e565b60095461221a906001600160a01b03166001611bdd565b600047116122765760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610bf8565b6000612281306114ec565b116122dd5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610bf8565b6009546122f89030906001600160a01b0316611026826114ec565b6009546001600160a01b031663f305d7194730612314816114ec565b6040516001600160e01b031960e086901b1681526001600160a01b039092166004830152602482015260006044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015612378573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c4891906136a4565b6001600160a01b0383166123ff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bf8565b6001600160a01b0382166124605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bf8565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60165443146124d4574360165560006018555b60155460ff1680156124ea575060175460185410155b156124f25750565b60006124fd306114ec565b60145490915081158061250e575080155b1561251857505050565b821580156125325750600b5461252f90600f61364e565b82115b1561254857600b5461254590600f61364e565b91505b61255182612df1565b600060148190555060016018600082825461256c91906135d6565b9091555050600c546040516000916001600160a01b03169047908381818185875af1925050503d80600081146125be576040519150601f19603f3d011682016040523d82523d6000602084013e6125c3565b606091505b5050905080610c485760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220746f206f7065726174696f6e7320616464726573732066604482015264185a5b195960da1b6064820152608401610bf8565b6001600160a01b0383166126485760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b03821661266e5760405162461bcd60e51b8152600401610bf890613717565b600081116126be5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bf8565b600f54610100900460ff16612756576001600160a01b03831660009081526019602052604090205460ff168061270c57506001600160a01b03821660009081526019602052604090205460ff165b6127515760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610bf8565b6127bf565b6001600160a01b0383166000908152600e602052604090205460ff16156127bf5760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610bf8565b600f5460ff1615612a55576001600160a01b03821661dead148015906127fe57506001600160a01b03831660009081526019602052604090205460ff16155b801561282357506001600160a01b03821660009081526019602052604090205460ff16155b15612a55576001600160a01b0383166000908152601b602052604090205460ff16801561286957506001600160a01b0382166000908152601a602052604090205460ff16155b15612930576006548111156128d15760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610bf8565b6008546128dd836114ec565b6128e790836135d6565b111561292b5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b612a55565b6001600160a01b0382166000908152601b602052604090205460ff16801561297157506001600160a01b0383166000908152601a602052604090205460ff16155b156129db5760075481111561292b5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610bf8565b6001600160a01b0382166000908152601a602052604090205460ff16612a5557600854612a07836114ec565b612a1190836135d6565b1115612a555760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610bf8565b6000612a60306114ec565b600b5490915081108015908190612a7f5750600f5462010000900460ff165b8015612a955750600a54600160a01b900460ff16155b8015612ab957506001600160a01b0384166000908152601b602052604090205460ff165b15612ae957600a805460ff60a01b1916600160a01b179055612adb60006124c1565b600a805460ff60a01b191690555b6001600160a01b03851660009081526019602052604090205460019060ff1680612b2b57506001600160a01b03851660009081526019602052604090205460ff165b15612b34575060005b60008115612c59576001600160a01b0386166000908152601b602052604090205460ff168015612b6657506000601254115b15612bbe57606460125486612b7b919061364e565b612b859190613665565b905060125460135482612b98919061364e565b612ba29190613665565b60146000828254612bb391906135d6565b90915550612c3b9050565b6001600160a01b0387166000908152601b602052604090205460ff168015612be857506000601054115b15612c3b57606460105486612bfd919061364e565b612c079190613665565b905060105460115482612c1a919061364e565b612c249190613665565b60146000828254612c3591906135d6565b90915550505b8015612c4c57612c4c873083612f4b565b612c56818661375a565b94505b612c64878787612f4b565b50505050505050565b610d8581336130a0565b612c818282611928565b610feb5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612cb93390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612d078282611928565b15610feb5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000908152601b60205260409020805460ff1916821515179055611ab882825b6001600160a01b0382166000818152601a6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612e2657612e266135e9565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612e7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea39190613687565b81600181518110612eb657612eb66135e9565b6001600160a01b039283166020918202929092010152600954612edc913091168461239d565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612f15908590600090869030904290600401613783565b600060405180830381600087803b158015612f2f57600080fd5b505af1158015612f43573d6000803e3d6000fd5b505050505050565b6001600160a01b038316612f715760405162461bcd60e51b8152600401610bf8906136d2565b6001600160a01b038216612f975760405162461bcd60e51b8152600401610bf890613717565b6001600160a01b0383166000908152602081905260409020548181101561300f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bf8565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906130469084906135d6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161309291815260200190565b60405180910390a350505050565b6130aa8282611928565b610feb576130b7816130f9565b6130c283602061310b565b6040516020016130d39291906137f4565b60408051601f198184030181529082905262461bcd60e51b8252610bf8916004016132fc565b6060610bbe6001600160a01b03831660145b6060600061311a83600261364e565b6131259060026135d6565b67ffffffffffffffff81111561313d5761313d61376d565b6040519080825280601f01601f191660200182016040528015613167576020820181803683370190505b509050600360fc1b81600081518110613182576131826135e9565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131b1576131b16135e9565b60200101906001600160f81b031916908160001a90535060006131d584600261364e565b6131e09060016135d6565b90505b6001811115613258576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613214576132146135e9565b1a60f81b82828151811061322a5761322a6135e9565b60200101906001600160f81b031916908160001a90535060049490941c9361325181613869565b90506131e3565b5083156132a75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610bf8565b9392505050565b6000602082840312156132c057600080fd5b81356001600160e01b0319811681146132a757600080fd5b60005b838110156132f35781810151838201526020016132db565b50506000910152565b602081526000825180602084015261331b8160408501602087016132d8565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610d8557600080fd5b6000806040838503121561335757600080fd5b82356133628161332f565b946020939093013593505050565b60006020828403121561338257600080fd5b81356132a78161332f565b60006020828403121561339f57600080fd5b5035919050565b8015158114610d8557600080fd5b6000602082840312156133c657600080fd5b81356132a7816133a6565b6000806000606084860312156133e657600080fd5b83356133f18161332f565b925060208401356134018161332f565b929592945050506040919091013590565b6000806040838503121561342557600080fd5b8235915060208301356134378161332f565b809150509250929050565b6000806020838503121561345557600080fd5b823567ffffffffffffffff8082111561346d57600080fd5b818501915085601f83011261348157600080fd5b81358181111561349057600080fd5b8660208260051b85010111156134a557600080fd5b60209290920196919550909350505050565b600080604083850312156134ca57600080fd5b8235613362816133a6565b600080604083850312156134e857600080fd5b82356134f38161332f565b91506020830135613437816133a6565b6000806040838503121561351657600080fd5b82356135218161332f565b915060208301356134378161332f565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b600181811c9082168061356c57607f821691505b60208210810361358c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bbe57610bbe6135c0565b634e487b7160e01b600052603260045260246000fd5b600060018201613611576136116135c0565b5060010190565b60006020828403121561362a57600080fd5b5051919050565b60006020828403121561364357600080fd5b81516132a7816133a6565b8082028115828204841417610bbe57610bbe6135c0565b60008261368257634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561369957600080fd5b81516132a78161332f565b6000806000606084860312156136b957600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bbe57610bbe6135c0565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137d35784516001600160a01b0316835293830193918301916001016137ae565b50506001600160a01b03969096166060850152505050608001529392505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161382c8160178501602088016132d8565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161385d8160288401602088016132d8565b01602801949350505050565b600081613878576138786135c0565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a2646970667358221220f08f3486800e0f81aa4c7a85abcce8b50c6a80920c4398a4fc3d26c4b51b1a7064736f6c63430008130033
Deployed Bytecode Sourcemap
20683:16661:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11330:204;;;;;;;;;;-1:-1:-1;11330:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11330:204:0;;;;;;;;34191:181;;;;;;;;;;;;;:::i;:::-;;15302:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20829:27::-;;;;;;;;;;-1:-1:-1;20829:27:0;;;;-1:-1:-1;;;;;20829:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20829:27:0;1153:222:1;16282:194:0;;;;;;;;;;-1:-1:-1;16282:194:0;;;;;:::i;:::-;;:::i;21811:63::-;;;;;;;;;;-1:-1:-1;21811:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26267:260;;;;;;;;;;-1:-1:-1;26267:260:0;;;;;:::i;:::-;;:::i;15623:108::-;;;;;;;;;;-1:-1:-1;15711:12:0;;15623:108;;;2419:25:1;;;2407:2;2392:18;15623:108:0;2273:177:1;36968:369:0;;;;;;;;;;-1:-1:-1;36968:369:0;;;;;:::i;:::-;;:::i;16484:529::-;;;;;;;;;;-1:-1:-1;16484:529:0;;;;;:::i;:::-;;:::i;12310:131::-;;;;;;;;;;-1:-1:-1;12310:131:0;;;;;:::i;:::-;12384:7;12411:12;;;:6;:12;;;;;:22;;;;12310:131;12449:147;;;;;;;;;;-1:-1:-1;12449:147:0;;;;;:::i;:::-;;:::i;15522:93::-;;;;;;;;;;-1:-1:-1;15522:93:0;;15605:2;4114:36:1;;4102:2;4087:18;15522:93:0;3972:184:1;12761:218:0;;;;;;;;;;-1:-1:-1;12761:218:0;;;;;:::i;:::-;;:::i;17021:290::-;;;;;;;;;;-1:-1:-1;17021:290:0;;;;;:::i;:::-;;:::i;24373:202::-;;;;;;;;;;-1:-1:-1;24373:202:0;;;;;:::i;:::-;;:::i;26004:255::-;;;;;;;;;;-1:-1:-1;26004:255:0;;;;;:::i;:::-;;:::i;20863:21::-;;;;;;;;;;-1:-1:-1;20863:21:0;;;;-1:-1:-1;;;;;20863:21:0;;;32781:352;;;;;;;;;;-1:-1:-1;32781:352:0;;;;;:::i;:::-;;:::i;21270:33::-;;;;;;;;;;-1:-1:-1;21270:33:0;;;;;;;;33956:221;;;;;;;;;;-1:-1:-1;33956:221:0;;;;;:::i;:::-;;:::i;21499:32::-;;;;;;;;;;;;;;;;33330:185;;;;;;;;;;-1:-1:-1;33330:185:0;;;;;:::i;:::-;;:::i;21628:28::-;;;;;;;;;;;;;;;;21424:31;;;;;;;;;;;;;;;;20761:28;;;;;;;;;;;;;;;;36702:258;;;;;;;;;;-1:-1:-1;36702:258:0;;;;;:::i;:::-;;:::i;21464:28::-;;;;;;;;;;;;;;;;21350:31;;;;;;;;;;-1:-1:-1;21350:31:0;;;;;;;;;;;33523:219;;;;;;;;;;-1:-1:-1;33523:219:0;;;;;:::i;:::-;;:::i;15739:143::-;;;;;;;;;;-1:-1:-1;15739:143:0;;;;;:::i;:::-;;:::i;33141:86::-;;;;;;;;;;;;;:::i;25041:338::-;;;;;;;;;;-1:-1:-1;25041:338:0;;;;;:::i;:::-;;:::i;32211:562::-;;;;;;;;;;-1:-1:-1;32211:562:0;;;;;:::i;:::-;;:::i;20727:27::-;;;;;;;;;;;;;;;;36430:258;;;;;;;;;;;;;:::i;11542:147::-;;;;;;;;;;-1:-1:-1;11542:147:0;;;;;:::i;:::-;;:::i;15410:104::-;;;;;;;;;;;;;:::i;21664:35::-;;;;;;;;;;;;;;;;24583:206;;;;;;;;;;-1:-1:-1;24583:206:0;;;;;:::i;:::-;;:::i;25631:357::-;;;;;;;;;;-1:-1:-1;25631:357:0;;;;;:::i;:::-;;:::i;11185:49::-;;;;;;;;;;-1:-1:-1;11185:49:0;11230:4;11185:49;;33235:87;;;;;;;;;;;;;:::i;17319:475::-;;;;;;;;;;-1:-1:-1;17319:475:0;;;;;:::i;:::-;;:::i;15890:200::-;;;;;;;;;;-1:-1:-1;15890:200:0;;;;;:::i;:::-;;:::i;21881:57::-;;;;;;;;;;-1:-1:-1;21881:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21172:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21172:85:0;;21310:33;;;;;;;;;;-1:-1:-1;21310:33:0;;;;;;;;;;;26978:184;;;;;;;;;;-1:-1:-1;26978:184:0;;;;;:::i;:::-;;:::i;21046:46::-;;;;;;;;;;-1:-1:-1;21046:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21707:33;;;;;;;;;;;;;;;;21583:38;;;;;;;;;;-1:-1:-1;21583:38:0;;;;;;;;26539:427;;;;;;;;;;-1:-1:-1;26539:427:0;;;;;:::i;:::-;;:::i;12604:149::-;;;;;;;;;;-1:-1:-1;12604:149:0;;;;;:::i;:::-;;:::i;21390:27::-;;;;;;;;;;;;;;;;33750:190;;;;;;;;;;-1:-1:-1;33750:190:0;;;;;:::i;:::-;;:::i;16098:176::-;;;;;;;;;;-1:-1:-1;16098:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16239:18:0;;;16212:7;16239:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16098:176;20921:33;;;;;;;;;;;;;;;;20961:32;;;;;;;;;;-1:-1:-1;20961:32:0;;;;-1:-1:-1;;;;;20961:32:0;;;21101:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21101:64:0;;21002:37;;;;;;;;;;;;;;;;20796:24;;;;;;;;;;;;;;;;21540:34;;;;;;;;;;;;;;;;34386:2036;;;;;;;;;;;;;:::i;11330:204::-;11415:4;-1:-1:-1;;;;;;11439:47:0;;-1:-1:-1;;;11439:47:0;;:87;;-1:-1:-1;;;;;;;;;;941:40:0;;;11490:36;11432:94;11330:204;-1:-1:-1;;11330:204:0:o;34191:181::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;;;;;;;;;34282:82:::1;::::0;34245:12:::1;::::0;34290:10:::1;::::0;34314:21:::1;::::0;34245:12;34282:82;34245:12;34282:82;34314:21;34290:10;34282:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;34191:181:0:o;15302:100::-;15356:13;15389:5;15382:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15302:100;:::o;16282:194::-;16390:4;16407:39;409:10;16430:7;16439:6;16407:8;:39::i;:::-;-1:-1:-1;16464:4:0;16282:194;;;;:::o;26267:260::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;26369:17:::1;:34:::0;;;26414:13:::1;:33:::0;;;26483:2:::1;26466:19:::0;::::1;;26458:61;;;::::0;-1:-1:-1;;;26458:61:0;;7571:2:1;26458:61:0::1;::::0;::::1;7553:21:1::0;7610:2;7590:18;;;7583:30;7649:31;7629:18;;;7622:59;7698:18;;26458:61:0::1;7369:353:1::0;26458:61:0::1;26267:260:::0;:::o;36968:369::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;37090:18:::1;;37062:24;37080:4;37062:9;:24::i;:::-;:46;;37040:160;;;::::0;;-1:-1:-1;;;37040:160:0;;7929:2:1;37040:160:0::1;::::0;::::1;7911:21:1::0;7948:18;;;7941:30;;;;8007:34;7987:18;;;7980:62;8078:34;8058:18;;;8051:62;8130:19;;37040:160:0::1;7727:428:1::0;37040:160:0::1;37211:8;:15:::0;;-1:-1:-1;;;;37211:15:0::1;-1:-1:-1::0;;;37211:15:0::1;::::0;;37237:13:::1;37246:3:::0;37237:8:::1;:13::i;:::-;37261:8;:16:::0;;-1:-1:-1;;;;37261:16:0::1;::::0;;37293:36:::1;::::0;37313:15:::1;2419:25:1::0;;37293:36:0::1;::::0;2407:2:1;2392:18;37293:36:0::1;;;;;;;36968:369:::0;:::o;16484:529::-;16624:4;16641:36;16651:6;16659:9;16670:6;16641:9;:36::i;:::-;-1:-1:-1;;;;;16717:19:0;;16690:24;16717:19;;;:11;:19;;;;;;;;409:10;16717:33;;;;;;;;16783:26;;;;16761:116;;;;-1:-1:-1;;;16761:116:0;;8362:2:1;16761:116:0;;;8344:21:1;8401:2;8381:18;;;8374:30;8440:34;8420:18;;;8413:62;-1:-1:-1;;;8491:18:1;;;8484:38;8539:19;;16761:116:0;8160:404:1;16761:116:0;16913:57;16922:6;409:10;16963:6;16944:16;:25;16913:8;:57::i;:::-;-1:-1:-1;17001:4:0;;16484:529;-1:-1:-1;;;;16484:529:0:o;12449:147::-;12384:7;12411:12;;;:6;:12;;;;;:22;;;11286:16;11297:4;11286:10;:16::i;:::-;12563:25:::1;12574:4;12580:7;12563:10;:25::i;:::-;12449:147:::0;;;:::o;12761:218::-;-1:-1:-1;;;;;12857:23:0;;409:10;12857:23;12849:83;;;;-1:-1:-1;;;12849:83:0;;8771:2:1;12849:83:0;;;8753:21:1;8810:2;8790:18;;;8783:30;8849:34;8829:18;;;8822:62;-1:-1:-1;;;8900:18:1;;;8893:45;8955:19;;12849:83:0;8569:411:1;12849:83:0;12945:26;12957:4;12963:7;12945:11;:26::i;:::-;12761:218;;:::o;17021:290::-;409:10;17134:4;17223:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17223:34:0;;;;;;;;;;17134:4;;17151:130;;17201:7;;17223:47;;17260:10;;17223:47;:::i;:::-;17151:8;:130::i;24373:202::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24463:28:0;::::1;24455:56;;;::::0;-1:-1:-1;;;24455:56:0;;9449:2:1;24455:56:0::1;::::0;::::1;9431:21:1::0;9488:2;9468:18;;;9461:30;-1:-1:-1;;;9507:18:1;;;9500:45;9562:18;;24455:56:0::1;9247:339:1::0;24455:56:0::1;24522:45;-1:-1:-1::0;;;;;;;;;;;24552:14:0::1;24522:9;:45::i;26004:255::-:0;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;26105:16:::1;:33:::0;;;26149:12:::1;:31:::0;;;26215:2:::1;26199:18:::0;::::1;;26191:60;;;::::0;-1:-1:-1;;;26191:60:0;;9793:2:1;26191:60:0::1;::::0;::::1;9775:21:1::0;9832:2;9812:18;;;9805:30;9871:31;9851:18;;;9844:59;9920:18;;26191:60:0::1;9591:353:1::0;32781:352:0;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32909:32:0;::::1;32887:120;;;::::0;-1:-1:-1;;;32887:120:0;;10151:2:1;32887:120:0::1;::::0;::::1;10133:21:1::0;10190:2;10170:18;;;10163:30;10229:34;10209:18;;;10202:62;-1:-1:-1;;;10280:18:1;;;10273:36;10326:19;;32887:120:0::1;9949:402:1::0;32887:120:0::1;33018:17;:47:::0;;-1:-1:-1;;;;;;33018:47:0::1;-1:-1:-1::0;;;;;33018:47:0;::::1;::::0;;::::1;::::0;;;33081:44:::1;::::0;::::1;::::0;-1:-1:-1;;33081:44:0::1;32781:352:::0;:::o;33956:221::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;34069:9:::1;34064:106;34084:18:::0;;::::1;34064:106;;;34153:5;34124:14;:26;34139:7;;34147:1;34139:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34124:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;34124:26:0;:34;;-1:-1:-1;;34124:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34104:3;::::1;::::0;::::1;:::i;:::-;;;;34064:106;;33330:185:::0;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33414:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;33413:23;33405:62;;;::::0;-1:-1:-1;;;33405:62:0;;10830:2:1;33405:62:0::1;::::0;::::1;10812:21:1::0;10869:2;10849:18;;;10842:30;10908:28;10888:18;;;10881:56;10954:18;;33405:62:0::1;10628:350:1::0;33405:62:0::1;-1:-1:-1::0;;;;;33478:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;33478:29:0::1;33503:4;33478:29;::::0;;33330:185::o;36702:258::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;36824:1:::1;36812:9;:13;36804:68;;;::::0;-1:-1:-1;;;36804:68:0;;11185:2:1;36804:68:0::1;::::0;::::1;11167:21:1::0;11224:2;11204:18;;;11197:30;11263:34;11243:18;;;11236:62;-1:-1:-1;;;11314:18:1;;;11307:40;11364:19;;36804:68:0::1;10983:406:1::0;36804:68:0::1;36883:19;:30:::0;;-1:-1:-1;;36883:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36924:16:::1;:28:::0;36702:258::o;33523:219::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;33635:9:::1;33630:105;33650:18:::0;;::::1;33630:105;;;33719:4;33690:14;:26;33705:7;;33713:1;33705:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33690:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33690:26:0;:33;;-1:-1:-1;;33690:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33670:3;::::1;::::0;::::1;:::i;:::-;;;;33630:105;;15739:143:::0;-1:-1:-1;;;;;15856:18:0;15829:7;15856:18;;;;;;;;;;;;15739:143::o;33141:86::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;33197:14:::1;:22:::0;;-1:-1:-1;;33197:22:0::1;::::0;;33141:86::o;25041:338::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;25165:4:::1;25160:155;;25222:6;::::0;-1:-1:-1;;;;;25222:6:0;;::::1;25212:16:::0;;::::1;::::0;25186:117:::1;;;::::0;-1:-1:-1;;;25186:117:0;;11596:2:1;25186:117:0::1;::::0;::::1;11578:21:1::0;11635:2;11615:18;;;11608:30;11674:34;11654:18;;;11647:62;-1:-1:-1;;;11725:18:1;;;11718:37;11772:19;;25186:117:0::1;11394:403:1::0;25186:117:0::1;-1:-1:-1::0;;;;;25325:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25325:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25041:338::o;32211:562::-;32325:10;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32356:20:0;::::1;32348:59;;;::::0;-1:-1:-1;;;32348:59:0;;12004:2:1;32348:59:0::1;::::0;::::1;11986:21:1::0;12043:2;12023:18;;;12016:30;12082:28;12062:18;;;12055:56;12128:18;;32348:59:0::1;11802:350:1::0;32348:59:0::1;-1:-1:-1::0;;;;;32440:23:0;::::1;32458:4;32440:23;;::::0;:41:::1;;-1:-1:-1::0;32468:13:0::1;::::0;::::1;::::0;::::1;;;32467:14;32440:41;32418:143;;;::::0;-1:-1:-1;;;32418:143:0;;12359:2:1;32418:143:0::1;::::0;::::1;12341:21:1::0;12398:2;12378:18;;;12371:30;12437:34;12417:18;;;12410:62;-1:-1:-1;;;12488:18:1;;;12481:50;12548:19;;32418:143:0::1;12157:416:1::0;32418:143:0::1;32599:39;::::0;-1:-1:-1;;;32599:39:0;;32632:4:::1;32599:39;::::0;::::1;1318:51:1::0;32572:24:0::1;::::0;-1:-1:-1;;;;;32599:24:0;::::1;::::0;::::1;::::0;1291:18:1;;32599:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32657:46;::::0;-1:-1:-1;;;32657:46:0;;-1:-1:-1;;;;;12959:32:1;;;32657:46:0::1;::::0;::::1;12941:51:1::0;13008:18;;;13001:34;;;32572:66:0;;-1:-1:-1;32657:23:0;;::::1;::::0;::::1;::::0;12914:18:1;;32657:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32719;::::0;;-1:-1:-1;;;;;12959:32:1;;12941:51;;13023:2;13008:18;;13001:34;;;32649:54:0;;-1:-1:-1;32719:46:0::1;::::0;12914:18:1;32719:46:0::1;;;;;;;32337:436;32211:562:::0;;;;:::o;36430:258::-;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;36503:13:::1;::::0;::::1;::::0;::::1;;;36502:14;36494:50;;;::::0;-1:-1:-1;;;36494:50:0;;13498:2:1;36494:50:0::1;::::0;::::1;13480:21:1::0;13537:2;13517:18;;;13510:30;13576:25;13556:18;;;13549:53;13619:18;;36494:50:0::1;13296:347:1::0;36494:50:0::1;36555:13;:20:::0;;-1:-1:-1;;36586:18:0;;;;;36636:12:::1;36615:18;:33:::0;36664:16:::1;::::0;::::1;::::0;-1:-1:-1;;36664:16:0::1;36430:258::o:0;11542:147::-;11628:4;11652:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11652:29:0;;;;;;;;;;;;;;;11542:147::o;15410:104::-;15466:13;15499:7;15492:14;;;;;:::i;24583:206::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24676:28:0;::::1;24668:56;;;::::0;-1:-1:-1;;;24668:56:0;;9449:2:1;24668:56:0::1;::::0;::::1;9431:21:1::0;9488:2;9468:18;;;9461:30;-1:-1:-1;;;9507:18:1;;;9500:45;9562:18;;24668:56:0::1;9247:339:1::0;24668:56:0::1;24735:46;-1:-1:-1::0;;;;;;;;;;;24766:14:0::1;24735:10;:46::i;25631:357::-:0;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;25781:6:::1;::::0;-1:-1:-1;;;;;25781:6:0;;::::1;25773:14:::0;;::::1;::::0;25751:121:::1;;;::::0;-1:-1:-1;;;25751:121:0;;13850:2:1;25751:121:0::1;::::0;::::1;13832:21:1::0;13889:2;13869:18;;;13862:30;13928:34;13908:18;;;13901:62;13999:27;13979:18;;;13972:55;14044:19;;25751:121:0::1;13648:421:1::0;25751:121:0::1;25883:41;25912:4;25918:5;25883:28;:41::i;:::-;25940:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;25940:40:0;::::1;::::0;::::1;::::0;;;::::1;25631:357:::0;;:::o;33235:87::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;33293:14:::1;:21:::0;;-1:-1:-1;;33293:21:0::1;33310:4;33293:21;::::0;;33235:87::o;17319:475::-;409:10;17437:4;17481:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17481:34:0;;;;;;;;;;17548:35;;;;17526:122;;;;-1:-1:-1;;;17526:122:0;;14276:2:1;17526:122:0;;;14258:21:1;14315:2;14295:18;;;14288:30;14354:34;14334:18;;;14327:62;-1:-1:-1;;;14405:18:1;;;14398:35;14450:19;;17526:122:0;14074:401:1;17526:122:0;17684:67;409:10;17707:7;17735:15;17716:16;:34;17684:8;:67::i;:::-;-1:-1:-1;17782:4:0;;17319:475;-1:-1:-1;;;17319:475:0:o;15890:200::-;16001:4;16018:42;409:10;16042:9;16053:6;16018:9;:42::i;26978:184::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27065:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27065:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27120:34;;445:41:1;;;27120:34:0::1;::::0;418:18:1;27120:34:0::1;;;;;;;26978:184:::0;;:::o;26539:427::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;26681:6:::1;26660:13;15711:12:::0;;;15623:108;26660:13:::1;:17;::::0;26676:1:::1;26660:17;:::i;:::-;26659:28;;;;:::i;:::-;26646:9;:41;;26624:144;;;::::0;-1:-1:-1;;;26624:144:0;;15077:2:1;26624:144:0::1;::::0;::::1;15059:21:1::0;15116:2;15096:18;;;15089:30;15155:34;15135:18;;;15128:62;-1:-1:-1;;;15206:18:1;;;15199:51;15267:19;;26624:144:0::1;14875:417:1::0;26624:144:0::1;26836:3;26815:13;15711:12:::0;;;15623:108;26815:13:::1;:17;::::0;26831:1:::1;26815:17;:::i;:::-;26814:25;;;;:::i;:::-;26801:9;:38;;26779:138;;;::::0;-1:-1:-1;;;26779:138:0;;15499:2:1;26779:138:0::1;::::0;::::1;15481:21:1::0;15538:2;15518:18;;;15511:30;15577:34;15557:18;;;15550:62;-1:-1:-1;;;15628:18:1;;;15621:48;15686:19;;26779:138:0::1;15297:414:1::0;26779:138:0::1;26928:18;:30:::0;26539:427::o;12604:149::-;12384:7;12411:12;;;:6;:12;;;;;:22;;;11286:16;11297:4;11286:10;:16::i;:::-;12719:26:::1;12731:4;12737:7;12719:11;:26::i;33750:190::-:0;22775:39;-1:-1:-1;;;;;;;;;;;22803:10:0;22775:7;:39::i;:::-;22753:109;;;;-1:-1:-1;;;22753:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33835:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;33827:64;;;::::0;-1:-1:-1;;;33827:64:0;;15918:2:1;33827:64:0::1;::::0;::::1;15900:21:1::0;15957:2;15937:18;;;15930:30;15996:31;15976:18;;;15969:59;16045:18;;33827:64:0::1;15716:353:1::0;33827:64:0::1;-1:-1:-1::0;;;;;33902:22:0::1;33927:5;33902:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;33902:30:0::1;::::0;;33750:190::o;34386:2036::-;22633:33;-1:-1:-1;;;;;;;;;;;22655:10:0;22633:7;:33::i;:::-;22625:59;;;;-1:-1:-1;;;22625:59:0;;;;;;;:::i;:::-;34449:13:::1;::::0;::::1;::::0;::::1;;;34448:14;34440:70;;;::::0;-1:-1:-1;;;34440:70:0;;16276:2:1;34440:70:0::1;::::0;::::1;16258:21:1::0;16315:2;16295:18;;;16288:30;16354:34;16334:18;;;16327:62;-1:-1:-1;;;16405:18:1;;;16398:41;16456:19;;34440:70:0::1;16074:407:1::0;34440:70:0::1;34528:18;34563:13;34580:1;34563:18:::0;34559:730:::1;;-1:-1:-1::0;34611:42:0::1;34559:730;;;34694:13;34711:8;34694:25:::0;34690:599:::1;;-1:-1:-1::0;34749:42:0::1;34690:599;;;34829:13;34846:2;34829:19:::0;34825:464:::1;;-1:-1:-1::0;34878:42:0::1;34825:464;;;34963:13;34980:2;34963:19:::0;34959:330:::1;;-1:-1:-1::0;35012:42:0::1;34959:330;;;35097:13;35114:5;35097:22:::0;35093:196:::1;;-1:-1:-1::0;35149:42:0::1;35093:196;;;35247:30;::::0;-1:-1:-1;;;35247:30:0;;16688:2:1;35247:30:0::1;::::0;::::1;16670:21:1::0;16727:2;16707:18;;;16700:30;-1:-1:-1;;;16746:18:1;;;16739:50;16806:18;;35247:30:0::1;16486:344:1::0;35093:196:0::1;35331:9;:34:::0;;-1:-1:-1;;;;;;35331:34:0::1;-1:-1:-1::0;;;;;35331:34:0;::::1;::::0;;::::1;::::0;;;35431:19:::1;::::0;;-1:-1:-1;;;35431:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;35331:34;35431:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35419:43:0::1;;35485:4;35505:9;;;;;;;;;-1:-1:-1::0;;;;;35505:9:0::1;-1:-1:-1::0;;;;;35505:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35419:113;::::0;-1:-1:-1;;;;;;35419:113:0::1;::::0;;;;;;-1:-1:-1;;;;;17321:15:1;;;35419:113:0::1;::::0;::::1;17303:34:1::0;17373:15;;17353:18;;;17346:43;17238:18;;35419:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35410:6;:122:::0;;-1:-1:-1;;;;;;35410:122:0::1;-1:-1:-1::0;;;;;35410:122:0;;;::::1;::::0;;::::1;::::0;;35545:49:::1;::::0;-1:-1:-1;35545:26:0::1;:49::i;:::-;35642:6;::::0;35605:51:::1;::::0;-1:-1:-1;;;;;35642:6:0::1;::::0;35605:28:::1;:51::i;:::-;35712:9;::::0;35677:52:::1;::::0;-1:-1:-1;;;;;35712:9:0::1;::::0;35677:26:::1;:52::i;:::-;35764:9;::::0;35740:41:::1;::::0;-1:-1:-1;;;;;35764:9:0::1;::::0;35740:15:::1;:41::i;:::-;35842:1;35818:21;:25;35796:110;;;::::0;-1:-1:-1;;;35796:110:0;;17602:2:1;35796:110:0::1;::::0;::::1;17584:21:1::0;17641:2;17621:18;;;17614:30;17680:34;17660:18;;;17653:62;-1:-1:-1;;;17731:18:1;;;17724:33;17774:19;;35796:110:0::1;17400:399:1::0;35796:110:0::1;35966:1;35939:24;35957:4;35939:9;:24::i;:::-;:28;35917:116;;;::::0;-1:-1:-1;;;35917:116:0;;18006:2:1;35917:116:0::1;::::0;::::1;17988:21:1::0;18045:2;18025:18;;;18018:30;18084:34;18064:18;;;18057:62;-1:-1:-1;;;18135:18:1;;;18128:36;18181:19;;35917:116:0::1;17804:402:1::0;35917:116:0::1;36089:9;::::0;36057:69:::1;::::0;36074:4:::1;::::0;-1:-1:-1;;;;;36089:9:0::1;36101:24;36074:4:::0;36101:9:::1;:24::i;36057:69::-;36139:9;::::0;-1:-1:-1;;;;;36139:9:0::1;:25;36172:21;36217:4;36237:24;36217:4:::0;36237:9:::1;:24::i;:::-;36139:274;::::0;-1:-1:-1;;;;;;36139:274:0::1;::::0;;;;;;-1:-1:-1;;;;;18570:15:1;;;36139:274:0::1;::::0;::::1;18552:34:1::0;18602:18;;;18595:34;36276:1:0::1;18645:18:1::0;;;18638:34;;;18688:18;;;18681:34;36362:10:0::1;18731:19:1::0;;;18724:44;36387:15:0::1;18784:19:1::0;;;18777:35;18486:19;;36139:274:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18785:380::-:0;-1:-1:-1;;;;;18921:19:0;;18913:68;;;;-1:-1:-1;;;18913:68:0;;19336:2:1;18913:68:0;;;19318:21:1;19375:2;19355:18;;;19348:30;19414:34;19394:18;;;19387:62;-1:-1:-1;;;19465:18:1;;;19458:34;19509:19;;18913:68:0;19134:400:1;18913:68:0;-1:-1:-1;;;;;19000:21:0;;18992:68;;;;-1:-1:-1;;;18992:68:0;;19741:2:1;18992:68:0;;;19723:21:1;19780:2;19760:18;;;19753:30;19819:34;19799:18;;;19792:62;-1:-1:-1;;;19870:18:1;;;19863:32;19912:19;;18992:68:0;19539:398:1;18992:68:0;-1:-1:-1;;;;;19073:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19125:32;;2419:25:1;;;19125:32:0;;2392:18:1;19125:32:0;;;;;;;18785:380;;;:::o;31244:959::-;31313:13;;31297:12;:29;31293:123;;31359:12;31343:13;:28;31403:1;31386:14;:18;31293:123;31432:19;;;;:57;;;;;31473:16;;31455:14;;:34;;31432:57;31428:96;;;31244:959;:::o;31428:96::-;31544:23;31570:24;31588:4;31570:9;:24::i;:::-;31633:19;;31544:50;;-1:-1:-1;31669:20:0;;;:46;;-1:-1:-1;31693:22:0;;31669:46;31665:85;;;31732:7;;31244:959;:::o;31665:85::-;31767:3;31766:4;:51;;;;-1:-1:-1;31793:18:0;;:23;;31814:2;31793:23;:::i;:::-;31775:15;:41;31766:51;31762:125;;;31852:18;;:23;;31873:2;31852:23;:::i;:::-;31834:41;;31762:125;31899:33;31916:15;31899:16;:33::i;:::-;31967:1;31945:19;:23;;;;31999:1;31981:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;32044:17:0;;32036:89;;32018:12;;-1:-1:-1;;;;;32044:17:0;;32089:21;;32018:12;32036:89;32018:12;32036:89;32089:21;32044:17;32036:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32017:108;;;32146:7;32138:57;;;;-1:-1:-1;;;32138:57:0;;20144:2:1;32138:57:0;;;20126:21:1;20183:2;20163:18;;;20156:30;20222:34;20202:18;;;20195:62;-1:-1:-1;;;20273:18:1;;;20266:35;20318:19;;32138:57:0;19942:401:1;27170:3487:0;-1:-1:-1;;;;;27302:18:0;;27294:68;;;;-1:-1:-1;;;27294:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27381:16:0;;27373:64;;;;-1:-1:-1;;;27373:64:0;;;;;;;:::i;:::-;27465:1;27456:6;:10;27448:52;;;;-1:-1:-1;;;27448:52:0;;21360:2:1;27448:52:0;;;21342:21:1;21399:2;21379:18;;;21372:30;21438:31;21418:18;;;21411:59;21487:18;;27448:52:0;21158:353:1;27448:52:0;27518:13;;;;;;;27513:329;;-1:-1:-1;;;;;27574:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27603:23:0;;;;;;:19;:23;;;;;;;;27574:52;27548:136;;;;-1:-1:-1;;;27548:136:0;;21718:2:1;27548:136:0;;;21700:21:1;21757:2;21737:18;;;21730:30;-1:-1:-1;;;21776:18:1;;;21769:52;21838:18;;27548:136:0;21516:346:1;27548:136:0;27513:329;;;-1:-1:-1;;;;;27744:20:0;;;;;;:14;:20;;;;;;;;27743:21;27717:113;;;;-1:-1:-1;;;27717:113:0;;22069:2:1;27717:113:0;;;22051:21:1;22108:2;22088:18;;;22081:30;22147:32;22127:18;;;22120:60;22197:18;;27717:113:0;21867:354:1;27717:113:0;27858:14;;;;27854:1348;;;-1:-1:-1;;;;;27893:21:0;;27907:6;27893:21;;;;:68;;-1:-1:-1;;;;;;27936:25:0;;;;;;:19;:25;;;;;;;;27935:26;27893:68;:113;;;;-1:-1:-1;;;;;;27983:23:0;;;;;;:19;:23;;;;;;;;27982:24;27893:113;27889:1302;;;-1:-1:-1;;;;;28095:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28152:35:0;;;;;;:31;:35;;;;;;;;28151:36;28095:92;28069:1107;;;28274:12;;28264:6;:22;;28230:148;;;;-1:-1:-1;;;28230:148:0;;22428:2:1;28230:148:0;;;22410:21:1;22467:2;22447:18;;;22440:30;22506:34;22486:18;;;22479:62;-1:-1:-1;;;22557:18:1;;;22550:38;22605:19;;28230:148:0;22226:404:1;28230:148:0;28461:9;;28444:13;28454:2;28444:9;:13::i;:::-;28435:22;;:6;:22;:::i;:::-;:35;;28401:140;;;;-1:-1:-1;;;28401:140:0;;22837:2:1;28401:140:0;;;22819:21:1;22876:2;22856:18;;;22849:30;-1:-1:-1;;;22895:18:1;;;22888:49;22954:18;;28401:140:0;22635:343:1;28401:140:0;28069:1107;;;-1:-1:-1;;;;;28639:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;28694:37:0;;;;;;:31;:37;;;;;;;;28693:38;28639:92;28613:563;;;28818:13;;28808:6;:23;;28774:151;;;;-1:-1:-1;;;28774:151:0;;23185:2:1;28774:151:0;;;23167:21:1;23224:2;23204:18;;;23197:30;23263:34;23243:18;;;23236:62;-1:-1:-1;;;23314:18:1;;;23307:40;23364:19;;28774:151:0;22983:406:1;28613:563:0;-1:-1:-1;;;;;28956:35:0;;;;;;:31;:35;;;;;;;;28951:225;;29076:9;;29059:13;29069:2;29059:9;:13::i;:::-;29050:22;;:6;:22;:::i;:::-;:35;;29016:140;;;;-1:-1:-1;;;29016:140:0;;22837:2:1;29016:140:0;;;22819:21:1;22876:2;22856:18;;;22849:30;-1:-1:-1;;;22895:18:1;;;22888:49;22954:18;;29016:140:0;22635:343:1;29016:140:0;29214:28;29245:24;29263:4;29245:9;:24::i;:::-;29321:18;;29214:55;;-1:-1:-1;29297:42:0;;;;;;;29370:22;;-1:-1:-1;29381:11:0;;;;;;;29370:22;:35;;;;-1:-1:-1;29397:8:0;;-1:-1:-1;;;29397:8:0;;;;29396:9;29370:35;:68;;;;-1:-1:-1;;;;;;29409:29:0;;;;;;:25;:29;;;;;;;;29370:68;29352:201;;;29465:8;:15;;-1:-1:-1;;;;29465:15:0;-1:-1:-1;;;29465:15:0;;;29495;29465;29495:8;:15::i;:::-;29525:8;:16;;-1:-1:-1;;;;29525:16:0;;;29352:201;-1:-1:-1;;;;;29684:25:0;;29565:12;29684:25;;;:19;:25;;;;;;29580:4;;29684:25;;;:52;;-1:-1:-1;;;;;;29713:23:0;;;;;;:19;:23;;;;;;;;29684:52;29680:100;;;-1:-1:-1;29763:5:0;29680:100;29792:12;29897:7;29893:711;;;-1:-1:-1;;;;;29953:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30002:1;29986:13;;:17;29953:50;29949:506;;;30058:3;30041:13;;30032:6;:22;;;;:::i;:::-;30031:30;;;;:::i;:::-;30024:37;;30174:13;;30132:17;;30125:4;:24;;;;:::i;:::-;30124:63;;;;:::i;:::-;30080:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;29949:506:0;;-1:-1:-1;29949:506:0;;-1:-1:-1;;;;;30249:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;30299:1;30284:12;;:16;30249:51;30245:210;;;30354:3;30338:12;;30329:6;:21;;;;:::i;:::-;30328:29;;;;:::i;:::-;30321:36;;30427:12;;30407:16;;30400:4;:23;;;;:::i;:::-;30399:40;;;;:::i;:::-;30376:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30245:210:0;30475:8;;30471:91;;30504:42;30520:4;30534;30541;30504:15;:42::i;:::-;30578:14;30588:4;30578:14;;:::i;:::-;;;29893:711;30616:33;30632:4;30638:2;30642:6;30616:15;:33::i;:::-;27283:3374;;;;27170:3487;;;:::o;11697:105::-;11764:30;11775:4;409:10;11764;:30::i;13366:238::-;13450:22;13458:4;13464:7;13450;:22::i;:::-;13445:152;;13489:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13489:29:0;;;;;;;;;:36;;-1:-1:-1;;13489:36:0;13521:4;13489:36;;;13572:12;409:10;;329:98;13572:12;-1:-1:-1;;;;;13545:40:0;13563:7;-1:-1:-1;;;;;13545:40:0;13557:4;13545:40;;;;;;;;;;13366:238;;:::o;13612:239::-;13696:22;13704:4;13710:7;13696;:22::i;:::-;13692:152;;;13767:5;13735:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13735:29:0;;;;;;;;;;:37;;-1:-1:-1;;13735:37:0;;;13792:40;409:10;;13735:12;;13792:40;;13767:5;13792:40;13612:239;;:::o;25387:236::-;-1:-1:-1;;;;;25470:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25470:39:0;;;;;;;25520;25470:31;:39;24801:232;-1:-1:-1;;;;;24914:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;24914:52:0;;;;;;;;;;24982:43;;23695:51:1;;;23762:18;;;23755:50;24982:43:0;;23668:18:1;24982:43:0;;;;;;;24801:232;;:::o;30665:571::-;30815:16;;;30829:1;30815:16;;;;;;;;30791:21;;30815:16;;;;;;;;;;-1:-1:-1;30815:16:0;30791:40;;30860:4;30842;30847:1;30842:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30842:23:0;;;:7;;;;;;;;;;:23;;;;30886:9;;:16;;;-1:-1:-1;;;30886:16:0;;;;:9;;;;;:14;;:16;;;;;30842:7;;30886:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30876:4;30881:1;30876:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30876:26:0;;;:7;;;;;;;;;:26;30947:9;;30915:56;;30932:4;;30947:9;30959:11;30915:8;:56::i;:::-;31010:9;;:218;;-1:-1:-1;;;31010:218:0;;-1:-1:-1;;;;;31010:9:0;;;;:60;;:218;;31085:11;;31010:9;;31155:4;;31182;;31202:15;;31010:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30720:516;30665:571;:::o;17802:651::-;-1:-1:-1;;;;;17942:20:0;;17934:70;;;;-1:-1:-1;;;17934:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18023:23:0;;18015:71;;;;-1:-1:-1;;;18015:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18123:17:0;;18099:21;18123:17;;;;;;;;;;;18173:23;;;;18151:111;;;;-1:-1:-1;;;18151:111:0;;25135:2:1;18151:111:0;;;25117:21:1;25174:2;25154:18;;;25147:30;25213:34;25193:18;;;25186:62;-1:-1:-1;;;25264:18:1;;;25257:36;25310:19;;18151:111:0;24933:402:1;18151:111:0;-1:-1:-1;;;;;18298:17:0;;;:9;:17;;;;;;;;;;;18318:22;;;18298:42;;18362:20;;;;;;;;:30;;18334:6;;18298:9;18362:30;;18334:6;;18362:30;:::i;:::-;;;;;;;;18427:9;-1:-1:-1;;;;;18410:35:0;18419:6;-1:-1:-1;;;;;18410:35:0;;18438:6;18410:35;;;;2419:25:1;;2407:2;2392:18;;2273:177;18410:35:0;;;;;;;;17923:530;17802:651;;;:::o;11810:492::-;11899:22;11907:4;11913:7;11899;:22::i;:::-;11894:401;;12087:28;12107:7;12087:19;:28::i;:::-;12188:38;12216:4;12223:2;12188:19;:38::i;:::-;11992:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11992:257:0;;;;;;;;;;-1:-1:-1;;;11938:345:0;;;;;;;:::i;10644:151::-;10702:13;10735:52;-1:-1:-1;;;;;10747:22:0;;9181:2;10189:447;10264:13;10290:19;10322:10;10326:6;10322:1;:10;:::i;:::-;:14;;10335:1;10322:14;:::i;:::-;10312:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10312:25:0;;10290:47;;-1:-1:-1;;;10348:6:0;10355:1;10348:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10348:15:0;;;;;;;;;-1:-1:-1;;;10374:6:0;10381:1;10374:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10374:15:0;;;;;;;;-1:-1:-1;10405:9:0;10417:10;10421:6;10417:1;:10;:::i;:::-;:14;;10430:1;10417:14;:::i;:::-;10405:26;;10400:131;10437:1;10433;:5;10400:131;;;-1:-1:-1;;;10481:5:0;10489:3;10481:11;10472:21;;;;;;;:::i;:::-;;;;10460:6;10467:1;10460:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10460:33:0;;;;;;;;-1:-1:-1;10518:1:0;10508:11;;;;;10440:3;;;:::i;:::-;;;10400:131;;;-1:-1:-1;10549:10:0;;10541:55;;;;-1:-1:-1;;;10541:55:0;;26500:2:1;10541:55:0;;;26482:21:1;;;26519:18;;;26512:30;26578:34;26558:18;;;26551:62;26630:18;;10541:55:0;26298:356:1;10541:55:0;10621:6;10189:447;-1:-1:-1;;;10189:447:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1380:131::-;-1:-1:-1;;;;;1455:31:1;;1445:42;;1435:70;;1501:1;1498;1491:12;1516:315;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1516:315:1:o;1836:247::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;2088:180::-;2147:6;2200:2;2188:9;2179:7;2175:23;2171:32;2168:52;;;2216:1;2213;2206:12;2168:52;-1:-1:-1;2239:23:1;;2088:180;-1:-1:-1;2088:180:1:o;2455:118::-;2541:5;2534:13;2527:21;2520:5;2517:32;2507:60;;2563:1;2560;2553:12;2578:241;2634:6;2687:2;2675:9;2666:7;2662:23;2658:32;2655:52;;;2703:1;2700;2693:12;2655:52;2742:9;2729:23;2761:28;2783:5;2761:28;:::i;2824:456::-;2901:6;2909;2917;2970:2;2958:9;2949:7;2945:23;2941:32;2938:52;;;2986:1;2983;2976:12;2938:52;3025:9;3012:23;3044:31;3069:5;3044:31;:::i;:::-;3094:5;-1:-1:-1;3151:2:1;3136:18;;3123:32;3164:33;3123:32;3164:33;:::i;:::-;2824:456;;3216:7;;-1:-1:-1;;;3270:2:1;3255:18;;;;3242:32;;2824:456::o;3652:315::-;3720:6;3728;3781:2;3769:9;3760:7;3756:23;3752:32;3749:52;;;3797:1;3794;3787:12;3749:52;3833:9;3820:23;3810:33;;3893:2;3882:9;3878:18;3865:32;3906:31;3931:5;3906:31;:::i;:::-;3956:5;3946:15;;;3652:315;;;;;:::o;4369:615::-;4455:6;4463;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;4572:9;4559:23;4601:18;4642:2;4634:6;4631:14;4628:34;;;4658:1;4655;4648:12;4628:34;4696:6;4685:9;4681:22;4671:32;;4741:7;4734:4;4730:2;4726:13;4722:27;4712:55;;4763:1;4760;4753:12;4712:55;4803:2;4790:16;4829:2;4821:6;4818:14;4815:34;;;4845:1;4842;4835:12;4815:34;4898:7;4893:2;4883:6;4880:1;4876:14;4872:2;4868:23;4864:32;4861:45;4858:65;;;4919:1;4916;4909:12;4858:65;4950:2;4942:11;;;;;4972:6;;-1:-1:-1;4369:615:1;;-1:-1:-1;;;;4369:615:1:o;4989:309::-;5054:6;5062;5115:2;5103:9;5094:7;5090:23;5086:32;5083:52;;;5131:1;5128;5121:12;5083:52;5170:9;5157:23;5189:28;5211:5;5189:28;:::i;5303:382::-;5368:6;5376;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;5484:9;5471:23;5503:31;5528:5;5503:31;:::i;:::-;5553:5;-1:-1:-1;5610:2:1;5595:18;;5582:32;5623:30;5582:32;5623:30;:::i;5690:388::-;5758:6;5766;5819:2;5807:9;5798:7;5794:23;5790:32;5787:52;;;5835:1;5832;5825:12;5787:52;5874:9;5861:23;5893:31;5918:5;5893:31;:::i;:::-;5943:5;-1:-1:-1;6000:2:1;5985:18;;5972:32;6013:33;5972:32;6013:33;:::i;6083:337::-;6285:2;6267:21;;;6324:2;6304:18;;;6297:30;-1:-1:-1;;;6358:2:1;6343:18;;6336:43;6411:2;6396:18;;6083:337::o;6635:380::-;6714:1;6710:12;;;;6757;;;6778:61;;6832:4;6824:6;6820:17;6810:27;;6778:61;6885:2;6877:6;6874:14;6854:18;6851:38;6848:161;;6931:10;6926:3;6922:20;6919:1;6912:31;6966:4;6963:1;6956:15;6994:4;6991:1;6984:15;6848:161;;6635:380;;;:::o;7020:344::-;7222:2;7204:21;;;7261:2;7241:18;;;7234:30;-1:-1:-1;;;7295:2:1;7280:18;;7273:50;7355:2;7340:18;;7020:344::o;8985:127::-;9046:10;9041:3;9037:20;9034:1;9027:31;9077:4;9074:1;9067:15;9101:4;9098:1;9091:15;9117:125;9182:9;;;9203:10;;;9200:36;;;9216:18;;:::i;10356:127::-;10417:10;10412:3;10408:20;10405:1;10398:31;10448:4;10445:1;10438:15;10472:4;10469:1;10462:15;10488:135;10527:3;10548:17;;;10545:43;;10568:18;;:::i;:::-;-1:-1:-1;10615:1:1;10604:13;;10488:135::o;12578:184::-;12648:6;12701:2;12689:9;12680:7;12676:23;12672:32;12669:52;;;12717:1;12714;12707:12;12669:52;-1:-1:-1;12740:16:1;;12578:184;-1:-1:-1;12578:184:1:o;13046:245::-;13113:6;13166:2;13154:9;13145:7;13141:23;13137:32;13134:52;;;13182:1;13179;13172:12;13134:52;13214:9;13208:16;13233:28;13255:5;13233:28;:::i;14480:168::-;14553:9;;;14584;;14601:15;;;14595:22;;14581:37;14571:71;;14622:18;;:::i;14653:217::-;14693:1;14719;14709:132;;14763:10;14758:3;14754:20;14751:1;14744:31;14798:4;14795:1;14788:15;14826:4;14823:1;14816:15;14709:132;-1:-1:-1;14855:9:1;;14653:217::o;16835:251::-;16905:6;16958:2;16946:9;16937:7;16933:23;16929:32;16926:52;;;16974:1;16971;16964:12;16926:52;17006:9;17000:16;17025:31;17050:5;17025:31;:::i;18823:306::-;18911:6;18919;18927;18980:2;18968:9;18959:7;18955:23;18951:32;18948:52;;;18996:1;18993;18986:12;18948:52;19025:9;19019:16;19009:26;;19075:2;19064:9;19060:18;19054:25;19044:35;;19119:2;19108:9;19104:18;19098:25;19088:35;;18823:306;;;;;:::o;20348:401::-;20550:2;20532:21;;;20589:2;20569:18;;;20562:30;20628:34;20623:2;20608:18;;20601:62;-1:-1:-1;;;20694:2:1;20679:18;;20672:35;20739:3;20724:19;;20348:401::o;20754:399::-;20956:2;20938:21;;;20995:2;20975:18;;;20968:30;21034:34;21029:2;21014:18;;21007:62;-1:-1:-1;;;21100:2:1;21085:18;;21078:33;21143:3;21128:19;;20754:399::o;23394:128::-;23461:9;;;23482:11;;;23479:37;;;23496:18;;:::i;23816:127::-;23877:10;23872:3;23868:20;23865:1;23858:31;23908:4;23905:1;23898:15;23932:4;23929:1;23922:15;23948:980;24210:4;24258:3;24247:9;24243:19;24289:6;24278:9;24271:25;24315:2;24353:6;24348:2;24337:9;24333:18;24326:34;24396:3;24391:2;24380:9;24376:18;24369:31;24420:6;24455;24449:13;24486:6;24478;24471:22;24524:3;24513:9;24509:19;24502:26;;24563:2;24555:6;24551:15;24537:29;;24584:1;24594:195;24608:6;24605:1;24602:13;24594:195;;;24673:13;;-1:-1:-1;;;;;24669:39:1;24657:52;;24764:15;;;;24729:12;;;;24705:1;24623:9;24594:195;;;-1:-1:-1;;;;;;;24845:32:1;;;;24840:2;24825:18;;24818:60;-1:-1:-1;;;24909:3:1;24894:19;24887:35;24806:3;23948:980;-1:-1:-1;;;23948:980:1:o;25340:812::-;25751:25;25746:3;25739:38;25721:3;25806:6;25800:13;25822:75;25890:6;25885:2;25880:3;25876:12;25869:4;25861:6;25857:17;25822:75;:::i;:::-;-1:-1:-1;;;25956:2:1;25916:16;;;25948:11;;;25941:40;26006:13;;26028:76;26006:13;26090:2;26082:11;;26075:4;26063:17;;26028:76;:::i;:::-;26124:17;26143:2;26120:26;;25340:812;-1:-1:-1;;;;25340:812:1:o;26157:136::-;26196:3;26224:5;26214:39;;26233:18;;:::i;:::-;-1:-1:-1;;;26269:18:1;;26157:136::o
Swarm Source
ipfs://f08f3486800e0f81aa4c7a85abcce8b50c6a80920c4398a4fc3d26c4b51b1a70
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.