Token EthereumMax
Overview ERC20
Price
$0.00 @ 0.000000 ETH (-2.46%)
Fully Diluted Market Cap
Total Supply:
547,993,636,012,879.815783 EMAX
Holders:
2,542 addresses
Contract:
Decimals:
18
Official Site:
Balance
149,228,553,299.507168051154738757 EMAXValue
$89.54 ( ~0.0250034238146078 ETH) [0.0272%]
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
EthereumMax (EMAX) is a progressive ERC-20 token built on the secure Ethereum network and enhanced on the Arbtirum network.Market
Volume (24H) | : | $212.04 |
Market Capitalization | : | $0.00 |
Circulating Supply | : | 0.00 EMAX |
Market Data Source: Coinmarketcap |
Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EMAX
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2022-03-03 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.11; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { 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); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // pragma solidity >=0.5.0; interface IV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IV2Pair { event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; interface IRouterV2 is IV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( 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 swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract EMAX is Context, Ownable, IERC20 { using SafeMath for uint256; using Address for address; address payable private treasuryWallet = payable(0xfF23A7d437D1a36e47C91A6287F78D04E8D55506); // treasury Wallet uint256 public deadBlocks = 2; uint256 public launchedAt; mapping(address => uint256) private _balances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isMaxWalletExempt; mapping(address => bool) private _isTrusted; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isSniper; mapping(address => uint256) public wards; mapping(address => uint256) public nonces; address DEAD = 0x000000000000000000000000000000000000dEaD; uint8 private constant _decimals = 18; uint256 private constant MAX = ~uint256(0); uint256 public _totalSupply; string public constant _name = "EthereumMax"; string public constant _symbol = "EMAX"; string public constant version = "1"; uint256 public _buyLiquidityFee = 10; uint256 public _buytreasuryFee = 10; uint256 public _sellLiquidityFee = 30; uint256 public _selltreasuryFee = 30; uint256 public transferFee = 60; uint256 private _status; uint256 private sellTotalFee = _sellLiquidityFee.add(_selltreasuryFee); //0.1 uint256 public thresholdPercent = 40; uint256 public thresholdDivisor = 1000; IRouterV2 public RouterV2; address public Pair; bool inSwap; bool public tradingOpen = false; bool public zeroBuyTax = true; bool private antiBotmode = true; bool private autoLiquidate = true; bool private shouldManualSend = false; uint256 public immutable deploymentChainId; bytes32 private immutable _DOMAIN_SEPARATOR; bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); // eip-712 function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) { return keccak256( abi.encode( keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ), keccak256(bytes(_name)), keccak256(bytes(version)), chainId, address(this) ) ); } function DOMAIN_SEPARATOR() external view returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId); } modifier onlyL2Gateway() { require(wards[msg.sender] == 1, "NOT_GATEWAY"); _; } function rely(address usr) external onlyL2Gateway { _isExcludedFromFee[usr]; wards[usr] = 1; emit Rely(usr); } function deny(address usr) external onlyOwner { wards[usr] = 0; emit Deny(usr); } modifier lockTheSwap() { require(inSwap != true, "ReentrancyGuard: reentrant call"); inSwap = true; _; inSwap = false; } event Rely(address indexed usr); event Deny(address indexed usr); event SwapETHForTokens(uint256 indexed amountIn, address[] indexed path); event SwapTokensForETH(uint256 indexed amountIn, address[] indexed path); event OpenTrading(uint256 indexed _block, bool indexed _state); event SetZeroBuyTax(bool indexed _state); event SetAntiBotmode(bool indexed _state); event NewRouter(address indexed _newRouter); event ExcludeMultiple(address[] indexed _accounts, bool indexed _state); event ExcludeFromFee(address indexed _acount, bool indexed _state); event IncludeInFee(address indexed _acount, bool indexed _state); event SetWallet(address indexed _oldFeeWallet, address indexed _newFeeWallet); event Manage_Snipers(address[] indexed _accounts, bool indexed _state); event Manage_trusted(address[] indexed _accounts, bool indexed _state); event WithDrawLeftoverETH(address indexed _account, bool indexed _state); event WithdrawStuck(uint256 indexed _amount, address indexed _acount); event ToggelManualSend(bool indexed _state); event SetZeroBuyTaxmode(bool indexed _status); event SetMaxWallet(uint256 indexed _maxWallet); event SetNewRouter(address _newRouter); event SetSwapSettings(uint256 indexed _thresholdPercent, uint256 indexed thresholdDivisor); event SetTaxBuy( uint256 indexed _bLiquidity, uint256 indexed _btreasuryFee, uint256 indexed _transferFee ); event SetTaxSell( uint256 indexed _sLiquidiy, uint256 indexed _streasuryFee, uint256 indexed _transferFee ); constructor() public { wards[msg.sender] = 1; emit Rely(msg.sender); //arbitrum 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506 //l1 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D IRouterV2 _routerV2 = IRouterV2(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); Pair = IV2Factory(_routerV2.factory()).createPair(address(this), _routerV2.WETH()); RouterV2 = _routerV2; uint256 chainId; assembly { chainId := chainid() } deploymentChainId = chainId; _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId); _isExcludedFromFee[msg.sender] = true; _isExcludedFromFee[address(this)] = true; _isTrusted[msg.sender] = true; _isTrusted[Pair] = true; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance") ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "Emax/insufficient-allowance") ); return true; } function totalSupply() external view override returns (uint256) { return _totalSupply; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(!_isSniper[to], "No Snippers"); require(!_isSniper[from], "No Snippers"); if (from != owner() && to != owner()) require(tradingOpen, "Trading not enabled."); //transfers disabled before openTrading uint256 currenttotalFee; // transfer tax if (!(from == Pair || to == Pair) && !(_isExcludedFromFee[from] || _isExcludedFromFee[to])) { //transfer currenttotalFee = transferFee; } if (to == Pair) { //sell currenttotalFee = _sellLiquidityFee.add(_selltreasuryFee); } //antibot - first X blocks if (launchedAt > 0 && (launchedAt + deadBlocks) > block.number) { _isSniper[to] = true; } //high slippage bot txns if ( launchedAt > 0 && from != owner() && block.number <= (launchedAt + deadBlocks) && antiBotmode ) { currenttotalFee = 900; //90% } if (from == Pair) { //buy currenttotalFee = _buyLiquidityFee.add(_buytreasuryFee); } if (zeroBuyTax) { if (from == Pair) { //buys currenttotalFee = 0; } } if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || from == owner() || to == owner()) { //privileged currenttotalFee = 0; } //sell if ((!inSwap && tradingOpen && to == Pair)) { uint256 contractTokenBalance = balanceOf(address(this)); uint256 swapThreshold = curentSwapThreshold(); if ((contractTokenBalance >= swapThreshold) && autoLiquidate) { swapTokens(); } if ((contractTokenBalance >= swapThreshold) && !autoLiquidate) { IERC20(address(this)).transfer(treasuryWallet, contractTokenBalance); } } _transferStandard(from, to, amount, currenttotalFee); } function swapTokens() private lockTheSwap { uint256 amountToLiquify = 0; if (_sellLiquidityFee > 0) { amountToLiquify = curentSwapThreshold().mul(_sellLiquidityFee).div(sellTotalFee).div(2); } uint256 amountToSwap = curentSwapThreshold().sub(amountToLiquify); swapTokensForEth(amountToSwap); if (!shouldManualSend) { sendEth(amountToLiquify); } } function sendEth(uint256 amountToLiquify) private { uint256 amountETH = address(this).balance; uint256 totalETHFee = sellTotalFee.sub(_sellLiquidityFee.div(2)); if (sellTotalFee > 0) { uint256 amountETHLiquidity = amountETH.mul(_sellLiquidityFee).div(totalETHFee).div(2); uint256 amountETHtreasury = amountETH.mul(_selltreasuryFee).div(totalETHFee); //Send to treasury wallet and liquidity if (amountETH > 0) { treasuryWallet.transfer(amountETHtreasury); emit Transfer(address(this), treasuryWallet, amountETHtreasury); } if (amountToLiquify > 0) { addLiquidity(amountToLiquify, amountETHLiquidity); } } else { if (amountETH > 0) { treasuryWallet.transfer(amountETH); emit Transfer(address(this), treasuryWallet, amountETH); } } } function swapTokensForEth(uint256 tokenAmount) private { // generate the pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = RouterV2.WETH(); _approve(address(this), address(RouterV2), tokenAmount); uint256[] memory amount = RouterV2.getAmountsOut(tokenAmount, path); uint256 amountMin = amount[1].sub(amount[1].div(50)); // make the swap RouterV2.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, amountMin, // accept any amount of ETH path, address(this), // The contract block.timestamp ); emit SwapTokensForETH(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(RouterV2), tokenAmount); // add the liquidity RouterV2.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function _sendTransfer( 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"); _balances[sender] = senderBalance.sub(amount); _balances[recipient] += amount; emit Transfer(sender, recipient, amount); } function _transferStandard( address sender, address recipient, uint256 tAmount, uint256 curentTotalFee ) private { if (curentTotalFee == 0) { _sendTransfer(sender, recipient, tAmount); } else { uint256 calcualatedFee = tAmount.mul(curentTotalFee).div(10**3); uint256 amountForRecipient = tAmount.sub(calcualatedFee); _sendTransfer(sender, recipient, amountForRecipient); _sendTransfer(sender, address(this), calcualatedFee); } } function curentSwapThreshold() public view returns (uint256 swapThreshold) { if (_totalSupply == 0) { return 0; } return (balanceOf(Pair).mul(thresholdPercent).div(thresholdDivisor)); //swap % based off pooled emax in pair } function transferToAddressETH(address payable recipient, uint256 amount) private { recipient.transfer(amount); emit Transfer(address(this), recipient, amount); } function isSniper(address account) external view returns (bool) { return _isSniper[account]; } function mint(address to, uint256 value) external onlyL2Gateway { require(to != address(0) && to != address(this), "Emax/invalid-address"); _balances[to] = _balances[to] + value; // note: we don't need an overflow check here b/c balanceOf[to] <= _totalSupply and there is an overflow check below _totalSupply = _totalSupply.add(value); emit Transfer(address(0), to, value); } function burn(address from, uint256 value) external { uint256 balance = _balances[from]; require(balance >= value, "Emax/insufficient-balance"); if (from != msg.sender && wards[msg.sender] != 1) { uint256 allowed = _allowances[from][msg.sender]; if (allowed != type(uint256).max) { require(allowed >= value, "Emax/insufficient-allowance"); _allowances[from][msg.sender] = allowed - value; } } _balances[from] = balance - value; // note: we don't need overflow checks b/c require(balance >= value) and balance <= totalSupply _totalSupply = _totalSupply - value; emit Transfer(from, address(0), value); } function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external { require(block.timestamp <= deadline, "Emax/permit-expired"); uint256 chainId; assembly { chainId := chainid() } bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId), keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)) ) ); require(owner != address(0) && owner == ecrecover(digest, v, r, s), "Emax/invalid-permit"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } function openTrading(bool state, uint256 _deadBlocks) external onlyOwner { tradingOpen = state; if (tradingOpen && launchedAt == 0) { launchedAt = block.number; deadBlocks = _deadBlocks; } emit OpenTrading(launchedAt, tradingOpen); } function setZeroBuyTax(bool state) external onlyOwner { zeroBuyTax = state; emit SetZeroBuyTaxmode(zeroBuyTax); } function setAntiBotmode(bool state) external onlyOwner { antiBotmode = state; emit SetAntiBotmode(antiBotmode); } function setNewRouter(address newRouter) external onlyOwner { require(newRouter != address(0)); IRouterV2 _newRouter = IRouterV2(newRouter); address get_pair = IV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH()); if (get_pair == address(0)) { Pair = IV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH()); } else { Pair = get_pair; } RouterV2 = _newRouter; emit SetNewRouter(newRouter); } function excludeFromFee(address account) external onlyOwner { _isExcludedFromFee[account] = true; emit ExcludeFromFee(account, true); } function toggelManualSend(bool _state) external onlyOwner { shouldManualSend = _state; //if true eth stays on contract emit ToggelManualSend(shouldManualSend); } function excludeMultiple(address[] calldata addresses) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isExcludedFromFee[addresses[i]] = true; } emit ExcludeMultiple(addresses, true); } function includeInFee(address account) external onlyOwner { require(account != address(0)); _isExcludedFromFee[account] = false; emit IncludeInFee(account, false); } function settreasuryWallet(address _treasuryWallet) external onlyOwner { require(_treasuryWallet != address(0)); address oldWallet = treasuryWallet; treasuryWallet = payable(_treasuryWallet); emit SetWallet(oldWallet, treasuryWallet); } function manage_Snipers( address[] calldata addresses, bool status, bool _override ) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { require(!_isTrusted[addresses[i]] || _override, "account is already trusted use overide"); _isSniper[addresses[i]] = status; } emit Manage_Snipers(addresses, status); } function manage_trusted(address[] calldata addresses, bool status) external onlyOwner { for (uint256 i; i < addresses.length; ++i) { _isTrusted[addresses[i]] = status; } emit Manage_trusted(addresses, status); } function withDrawLeftoverETH(address payable receipient) external onlyOwner { (bool os, ) = payable(receipient).call{value: address(this).balance}(""); require(os); emit WithDrawLeftoverETH(receipient, os); } function withdrawStuckTokens(IERC20 token, address to) external onlyOwner { uint256 balance = token.balanceOf(address(this)); token.transfer(to, balance); emit Transfer(address(this), to, balance); } function setSwapSettings(uint256 _thresholdPercent, uint256 _thresholdDivisor) external onlyOwner { thresholdDivisor = _thresholdDivisor; thresholdPercent = _thresholdPercent; emit SetSwapSettings(thresholdPercent, thresholdDivisor); } function setTaxesBuy( uint256 _liquidityFee, uint256 _treasuryFee, uint256 _transferFee ) external onlyOwner { _buyLiquidityFee = _liquidityFee; _buytreasuryFee = _treasuryFee; transferFee = _transferFee; emit SetTaxBuy(_buyLiquidityFee, _buytreasuryFee, transferFee); } function setTaxesSell( uint256 _liquidityFee, uint256 _treasuryFee, uint256 _transferFee ) external onlyOwner { _sellLiquidityFee = _liquidityFee; _selltreasuryFee = _treasuryFee; transferFee = _transferFee; sellTotalFee = _sellLiquidityFee.add(_selltreasuryFee); emit SetTaxSell(_sellLiquidityFee, _selltreasuryFee, transferFee); } //to recieve ETH from RouterV2 when swaping receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_acount","type":"address"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"_accounts","type":"address[]"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"ExcludeMultiple","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_acount","type":"address"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"_accounts","type":"address[]"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"Manage_Snipers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address[]","name":"_accounts","type":"address[]"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"Manage_trusted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newRouter","type":"address"}],"name":"NewRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_block","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"OpenTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"SetAntiBotmode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"SetMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newRouter","type":"address"}],"name":"SetNewRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_thresholdPercent","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"thresholdDivisor","type":"uint256"}],"name":"SetSwapSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_bLiquidity","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_btreasuryFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"SetTaxBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_sLiquidiy","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_streasuryFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"SetTaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_oldFeeWallet","type":"address"},{"indexed":true,"internalType":"address","name":"_newFeeWallet","type":"address"}],"name":"SetWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"SetZeroBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"SetZeroBuyTaxmode","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":true,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":true,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"ToggelManualSend","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":true,"internalType":"address","name":"_account","type":"address"},{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"WithDrawLeftoverETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"_acount","type":"address"}],"name":"WithdrawStuck","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RouterV2","outputs":[{"internalType":"contract IRouterV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buytreasuryFee","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":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_selltreasuryFee","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":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"curentSwapThreshold","outputs":[{"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"},{"internalType":"bool","name":"_override","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"_thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setZeroBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"settreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thresholdDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thresholdPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"toggelManualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526003805473ff23a7d437d1a36e47c91a6287f78d04e8d555066001600160a01b0319918216179091556002600455600e805461dead9216919091179055600a6010819055601155601e60128190556013819055603c6014556200007490806200037f602090811b62002b2417901c565b60165560286017556103e8601855601a805460ff60c81b1960ff60c01b1960ff60b81b1961ffff60a81b19909316600160b01b1792909216600160b81b1791909116600160c01b17169055348015620000cc57600080fd5b506000620000d9620003e1565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336000818152600c602052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a26000731b02da8cb0d097eb8d57a175b88c7d8b479975069050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001af57600080fd5b505afa158015620001c4573d6000803e3d6000fd5b505050506040513d6020811015620001db57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200022c57600080fd5b505afa15801562000241573d6000803e3d6000fd5b505050506040513d60208110156200025857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620002ab57600080fd5b505af1158015620002c0573d6000803e3d6000fd5b505050506040513d6020811015620002d757600080fd5b5051601a80546001600160a01b03199081166001600160a01b0393841617909155601980549091169183169190911790554660808190526200031981620003e5565b60a05250503360008181526007602090815260408083208054600160ff199182168117909255308552828520805482168317905594845260099092528083208054851683179055601a546001600160a01b031683529091208054909216179055620004b9565b600082820183811015620003da576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b604080518082018252600b81526a08ae8d0cae4caeada9ac2f60ab1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f6032cdc46f1186a3a404899742d7a983136935fca579b37a7f206bb09d9a650f818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b60805160a051613ee6620004ec60003980611372528061229052508061133d52806121bc528061225b5250613ee66000f3fe6080604052600436106103905760003560e01c806388790a68116101dc578063bf353dbb11610102578063dd62ed3e116100a0578063eafb5a3c1161006f578063eafb5a3c14610db2578063f2fde38b14610de5578063fabb0b4f14610e18578063ffb54a9914610e2d57610397565b8063dd62ed3e14610cf9578063e7c281d614610d34578063ea2f0b3714610d6a578063ead88dbc14610d9d57610397565b8063cfc16cea116100dc578063cfc16cea14610c5c578063d28d885214610c71578063d505accf14610c86578063dc44b6a014610ce457610397565b8063bf353dbb14610bff578063bf56b37114610c32578063cd0d009614610c4757610397565b80639dc29fac1161017a578063acb2ad6f11610149578063acb2ad6f14610ad3578063b09f126614610ae8578063b8623f5614610afd578063bc60761f14610b8257610397565b80639dc29fac14610a13578063a457c2d714610a4c578063a525687b14610a85578063a9059cbb14610a9a57610397565b806394d79ce3116101b657806394d79ce31461093b57806395d89b41146109b65780639a76efb4146109cb5780639c52a7f1146109e057610397565b806388790a68146108e15780638da5cb5b146108f65780638f4590d21461090b57610397565b80633736421b116102c157806354fd4d501161025f57806370a082311161022e57806370a0823114610833578063715018a614610866578063743942b61461087b5780637ecebe00146108ae57610397565b806354fd4d50146107895780635d0b8d5e1461079e57806365fae35e146107ca5780636c6d9fa1146107fd57610397565b80633eaaf86b1161029b5780633eaaf86b146106f357806340c10f1914610708578063437823ec1461074157806344cbf0541461077457610397565b80633736421b1461065d578063395093511461068e5780633ddf65ab146106c757610397565b806325b86edf1161032e5780632fa327a8116103085780632fa327a8146105d557806330adf81f14610608578063313ce5671461061d5780633644e5151461064857610397565b806325b86edf146105535780632d4103d61461058e5780632e2c0145146105c057610397565b80630f3a325f1161036a5780630f3a325f1461048857806318160ddd146104bb57806318ee9ff9146104e257806323b872dd1461051057610397565b806302a6abd41461039c57806306fdde03146103c5578063095ea7b31461044f57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e42565b604080519115158252519081900360200190f35b3480156103d157600080fd5b506103da610e52565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104145781810151838201526020016103fc565b50505050905090810190601f1680156104415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045b57600080fd5b506103b16004803603604081101561047257600080fd5b506001600160a01b038135169060200135610e78565b34801561049457600080fd5b506103b1600480360360208110156104ab57600080fd5b50356001600160a01b0316610e96565b3480156104c757600080fd5b506104d0610eb4565b60408051918252519081900360200190f35b3480156104ee57600080fd5b5061050e6004803603602081101561050557600080fd5b50351515610eba565b005b34801561051c57600080fd5b506103b16004803603606081101561053357600080fd5b506001600160a01b03813581169160208101359091169060400135610f65565b34801561055f57600080fd5b5061050e6004803603604081101561057657600080fd5b506001600160a01b0381358116916020013516610fec565b34801561059a57600080fd5b5061050e600480360360408110156105b157600080fd5b50803515159060200135611174565b3480156105cc57600080fd5b506104d061124a565b3480156105e157600080fd5b5061050e600480360360208110156105f857600080fd5b50356001600160a01b0316611250565b34801561061457600080fd5b506104d061130f565b34801561062957600080fd5b50610632611333565b6040805160ff9092168252519081900360200190f35b34801561065457600080fd5b506104d0611338565b34801561066957600080fd5b50610672611398565b604080516001600160a01b039092168252519081900360200190f35b34801561069a57600080fd5b506103b1600480360360408110156106b157600080fd5b506001600160a01b0381351690602001356113a7565b3480156106d357600080fd5b5061050e600480360360208110156106ea57600080fd5b503515156113f5565b3480156106ff57600080fd5b506104d06114a0565b34801561071457600080fd5b5061050e6004803603604081101561072b57600080fd5b506001600160a01b0381351690602001356114a6565b34801561074d57600080fd5b5061050e6004803603602081101561076457600080fd5b50356001600160a01b03166115c2565b34801561078057600080fd5b506104d061166c565b34801561079557600080fd5b506103da611672565b3480156107aa57600080fd5b5061050e600480360360208110156107c157600080fd5b5035151561168f565b3480156107d657600080fd5b5061050e600480360360208110156107ed57600080fd5b50356001600160a01b031661173a565b34801561080957600080fd5b5061050e6004803603606081101561082057600080fd5b50803590602081013590604001356117d1565b34801561083f57600080fd5b506104d06004803603602081101561085657600080fd5b50356001600160a01b031661186c565b34801561087257600080fd5b5061050e611887565b34801561088757600080fd5b5061050e6004803603602081101561089e57600080fd5b50356001600160a01b0316611929565b3480156108ba57600080fd5b506104d0600480360360208110156108d157600080fd5b50356001600160a01b0316611a1b565b3480156108ed57600080fd5b506104d0611a2d565b34801561090257600080fd5b50610672611a33565b34801561091757600080fd5b5061050e6004803603604081101561092e57600080fd5b5080359060200135611a42565b34801561094757600080fd5b5061050e6004803603602081101561095e57600080fd5b810190602081018135600160201b81111561097857600080fd5b82018360208201111561098a57600080fd5b803590602001918460208302840111600160201b831117156109ab57600080fd5b509092509050611ad5565b3480156109c257600080fd5b506103da611bd0565b3480156109d757600080fd5b506104d0611bee565b3480156109ec57600080fd5b5061050e60048036036020811015610a0357600080fd5b50356001600160a01b0316611bf4565b348015610a1f57600080fd5b5061050e60048036036040811015610a3657600080fd5b506001600160a01b038135169060200135611c90565b348015610a5857600080fd5b506103b160048036036040811015610a6f57600080fd5b506001600160a01b038135169060200135611e2a565b348015610a9157600080fd5b506104d0611eaf565b348015610aa657600080fd5b506103b160048036036040811015610abd57600080fd5b506001600160a01b038135169060200135611ef9565b348015610adf57600080fd5b506104d0611f0d565b348015610af457600080fd5b506103da611f13565b348015610b0957600080fd5b5061050e60048036036060811015610b2057600080fd5b810190602081018135600160201b811115610b3a57600080fd5b820183602082011115610b4c57600080fd5b803590602001918460208302840111600160201b83111715610b6d57600080fd5b91935091508035151590602001351515611f33565b348015610b8e57600080fd5b5061050e60048036036040811015610ba557600080fd5b810190602081018135600160201b811115610bbf57600080fd5b820183602082011115610bd157600080fd5b803590602001918460208302840111600160201b83111715610bf257600080fd5b91935091503515156120a8565b348015610c0b57600080fd5b506104d060048036036020811015610c2257600080fd5b50356001600160a01b03166121a2565b348015610c3e57600080fd5b506104d06121b4565b348015610c5357600080fd5b506104d06121ba565b348015610c6857600080fd5b506104d06121de565b348015610c7d57600080fd5b506103da6121e4565b348015610c9257600080fd5b5061050e600480360360e0811015610ca957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561220b565b348015610cf057600080fd5b506104d06124a3565b348015610d0557600080fd5b506104d060048036036040811015610d1c57600080fd5b506001600160a01b03813581169160200135166124a9565b348015610d4057600080fd5b5061050e60048036036060811015610d5757600080fd5b50803590602081013590604001356124d4565b348015610d7657600080fd5b5061050e60048036036020811015610d8d57600080fd5b50356001600160a01b031661257f565b348015610da957600080fd5b50610672612637565b348015610dbe57600080fd5b5061050e60048036036020811015610dd557600080fd5b50356001600160a01b0316612646565b348015610df157600080fd5b5061050e60048036036020811015610e0857600080fd5b50356001600160a01b0316612a16565b348015610e2457600080fd5b506104d0612b0e565b348015610e3957600080fd5b506103b1612b14565b601a54600160b01b900460ff1681565b60408051808201909152600b81526a08ae8d0cae4caeada9ac2f60ab1b60208201525b90565b6000610e8c610e85612b85565b8484612b89565b5060015b92915050565b6001600160a01b03166000908152600b602052604090205460ff1690565b600f5490565b610ec2612b85565b6000546001600160a01b03908116911614610f12576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60b01b1916600160b01b8315158102919091179182905560405160ff91909204161515907fa0967cfa7785011d08a1d65eaa2d0bb0e0eaffd4b074914f521576fe487c66d490600090a250565b6000610f72848484612c75565b610fe284610f7e612b85565b610fdd85604051806060016040528060288152602001613dd7602891396001600160a01b038a166000908152600a6020526040812090610fbc612b85565b6001600160a01b0316815260208101919091526040016000205491906131ea565b612b89565b5060019392505050565b610ff4612b85565b6000546001600160a01b03908116911614611044576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d60208110156110bd57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291519293509085169163a9059cbb916044808201926020929091908290030181600087803b15801561111557600080fd5b505af1158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b50506040805182815290516001600160a01b038416913091600080516020613e488339815191529181900360200190a3505050565b61117c612b85565b6000546001600160a01b039081169116146111cc576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60a81b1916600160a81b8415158102919091179182905560ff91041680156111fa5750600554155b15611209574360055560048190555b601a54600554604051600160a81b90920460ff161515917f617c8606af468e56cf5bcb9e5b0c7fdaaf70ece355b61c0720bb21ddbb39b7ca90600090a35050565b60135481565b611258612b85565b6000546001600160a01b039081169116146112a8576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166112bb57600080fd5b600380546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f8595877311e370fe3ac87d4f6d12473603393f02ac660e68d2e5e3da5adb610c90600090a35050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601290565b6000467f000000000000000000000000000000000000000000000000000000000000000081146113705761136b81613281565b611392565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b601a546001600160a01b031681565b6000610e8c6113b4612b85565b84610fdd85600a60006113c5612b85565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612b24565b6113fd612b85565b6000546001600160a01b0390811691161461144d576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60b81b1916600160b81b8315158102919091179182905560405160ff91909204161515907fd85d42d146b50ac0dd8c12e07153c1d8c93cb56189685bc9ecb9c43548fea8bd90600090a250565b600f5481565b336000908152600c60205260409020546001146114f8576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b6001600160a01b0382161580159061151957506001600160a01b0382163014155b611561576040805162461bcd60e51b8152602060048201526014602482015273456d61782f696e76616c69642d6164647265737360601b604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020805482019055600f5461158c9082612b24565b600f556040805182815290516001600160a01b03841691600091600080516020613e488339815191529181900360200190a35050565b6115ca612b85565b6000546001600160a01b0390811691161461161a576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260076020526040808220805460ff1916600190811790915590519092917fd5144d2a6c8ff9b87b7a40852df5102cab2ce561c06b56cc6fe7ccf1fa7f8c2d91a350565b60185481565b604051806040016040528060018152602001603160f81b81525081565b611697612b85565b6000546001600160a01b039081169116146116e7576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60c81b1916600160c81b8315158102919091179182905560405160ff91909204161515907f9b7dde7c01fd980c907791362c2c5fcb96800e47451e8aa2bb65aad177f4fd9e90600090a250565b336000908152600c602052604090205460011461178c576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b6001600160a01b0381166000818152600c602052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6117d9612b85565b6000546001600160a01b03908116911614611829576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6010839055601182905560148190556040518190839085907ff012478f3651ec49cde414d7f150b6acd80444abf64cb3202480de73117fd30a90600090a4505050565b6001600160a01b031660009081526006602052604090205490565b61188f612b85565b6000546001600160a01b039081169116146118df576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b611931612b85565b6000546001600160a01b03908116911614611981576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6040516000906001600160a01b0383169047908381818185875af1925050503d80600081146119cc576040519150601f19603f3d011682016040523d82523d6000602084013e6119d1565b606091505b50509050806119df57600080fd5b604051811515906001600160a01b038416907f2ca43cabf6818452b93ffad63077adfe11e5835f1028aa131e203f0e7f88e06290600090a35050565b600d6020526000908152604090205481565b60125481565b6000546001600160a01b031690565b611a4a612b85565b6000546001600160a01b03908116911614611a9a576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60188190556017829055604051819083907f9690ae996ab3e30fe50be847f5695c406c1e341ddebe0df9c9c1be5bc38d01a390600090a35050565b611add612b85565b6000546001600160a01b03908116911614611b2d576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60005b81811015611b8357600160076000858585818110611b4a57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611b30565b50600115158282604051808383602002808284376040519201829003822094507f1ffd4ee2ef157b3e8fdc63884f36ac5c158dbf5eacd1861211adab947698a21693506000925050a35050565b60408051808201909152600481526308a9a82b60e31b602082015290565b60115481565b611bfc612b85565b6000546001600160a01b03908116911614611c4c576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b03821660009081526006602052604090205481811015611cfe576040805162461bcd60e51b815260206004820152601960248201527f456d61782f696e73756666696369656e742d62616c616e636500000000000000604482015290519081900360640190fd5b6001600160a01b0383163314801590611d275750336000908152600c6020526040902054600114155b15611dd9576001600160a01b0383166000908152600a602090815260408083203384529091529020546000198114611dd75782811015611dae576040805162461bcd60e51b815260206004820152601b60248201527f456d61782f696e73756666696369656e742d616c6c6f77616e63650000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600a60209081526040808320338452909152902083820390555b505b6001600160a01b03831660008181526006602090815260408083208686039055600f8054879003905580518681529051929392600080516020613e48833981519152929181900390910190a3505050565b6000610e8c611e37612b85565b84610fdd856040518060400160405280601b81526020017f456d61782f696e73756666696369656e742d616c6c6f77616e63650000000000815250600a6000611e7e612b85565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131ea565b6000600f5460001415611ec457506000610e75565b601854601754601a54611ef49291611eee91611ee8906001600160a01b031661186c565b90613355565b906133ae565b905090565b6000610e8c611f06612b85565b8484612c75565b60145481565b6040518060400160405280600481526020016308a9a82b60e31b81525081565b611f3b612b85565b6000546001600160a01b03908116911614611f8b576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60005b8381101561205a5760096000868684818110611fa657fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161580611fd55750815b6120105760405162461bcd60e51b8152600401808060200182810382526026815260200180613d906026913960400191505060405180910390fd5b82600b600087878581811061202157fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611f8e565b508115158484604051808383602002808284376040519201829003822094507f0eb384a4e9c884022b89c9ef21417552d3495076b7d8e219126e225ed85fd45c93506000925050a350505050565b6120b0612b85565b6000546001600160a01b03908116911614612100576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60005b8281101561215557816009600086868581811061211c57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101612103565b508015158383604051808383602002808284376040519201829003822094507f3bc9c399557156f9c00581110e7ee7803c88e555c081cd303556270b28d3ddbd93506000925050a3505050565b600c6020526000908152604090205481565b60055481565b7f000000000000000000000000000000000000000000000000000000000000000081565b60175481565b6040518060400160405280600b81526020016a08ae8d0cae4caeada9ac2f60ab1b81525081565b83421115612256576040805162461bcd60e51b8152602060048201526013602482015272115b585e0bdc195c9b5a5d0b595e1c1a5c9959606a1b604482015290519081900360640190fd5b4660007f0000000000000000000000000000000000000000000000000000000000000000821461228e5761228982613281565b6122b0565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03808b166000818152600d602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981840152808401859052948e166060860152608085018d905260a085015260c08085018c90528251808603909101815260e08501835280519082012061190160f01b61010086015261010285019590955261012280850195909552815180850390950185526101429093019052825192909101919091209150158015906123f4575060018186868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156123d5573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316145b61243b576040805162461bcd60e51b8152602060048201526013602482015272115b585e0bda5b9d985b1a590b5c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b03808a166000818152600a60209081526040808320948d16808452948252918290208b905581518b815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050505050505050565b60105481565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6124dc612b85565b6000546001600160a01b0390811691161461252c576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6012839055601382905560148190556125458383612b24565b6016556014546013546012546040517f197b5b51a8feaa54e0af6fad0ea487f9eec9d25be1385bf8d1e1391630c02fb590600090a4505050565b612587612b85565b6000546001600160a01b039081169116146125d7576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166125ea57600080fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055519091907f6c72613740de4fb19ba7c9292d5d1d22a973fbb4d6ff9548154bf47111129e58908390a350565b6019546001600160a01b031681565b61264e612b85565b6000546001600160a01b0390811691161461269e576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166126b157600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126f157600080fd5b505afa158015612705573d6000803e3d6000fd5b505050506040513d602081101561271b57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b15801561276b57600080fd5b505afa15801561277f573d6000803e3d6000fd5b505050506040513d602081101561279557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b1580156127e557600080fd5b505afa1580156127f9573d6000803e3d6000fd5b505050506040513d602081101561280f57600080fd5b505190506001600160a01b0381166129a057816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561285a57600080fd5b505afa15801561286e573d6000803e3d6000fd5b505050506040513d602081101561288457600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b1580156128d457600080fd5b505afa1580156128e8573d6000803e3d6000fd5b505050506040513d60208110156128fe57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561295057600080fd5b505af1158015612964573d6000803e3d6000fd5b505050506040513d602081101561297a57600080fd5b5051601a80546001600160a01b0319166001600160a01b039092169190911790556129bc565b601a80546001600160a01b0319166001600160a01b0383161790555b601980546001600160a01b0319166001600160a01b0384811691909117909155604080519185168252517f97e78f35fad9b724a4846abe5b7d49dd7526592da5a2568d2c86168e6d7818e4916020908290030190a1505050565b612a1e612b85565b6000546001600160a01b03908116911614612a6e576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b038116612ab35760405162461bcd60e51b8152600401808060200182810382526026815260200180613d226026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60045481565b601a54600160a81b900460ff1681565b600082820183811015612b7e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316612bce5760405162461bcd60e51b8152600401808060200182810382526024815260200180613e8d6024913960400191505060405180910390fd5b6001600160a01b038216612c135760405162461bcd60e51b8152600401808060200182810382526022815260200180613d486022913960400191505060405180910390fd5b6001600160a01b038084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612cba5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e686025913960400191505060405180910390fd5b6001600160a01b038216612cff5760405162461bcd60e51b8152600401808060200182810382526023815260200180613cff6023913960400191505060405180910390fd5b60008111612d3e5760405162461bcd60e51b8152600401808060200182810382526029815260200180613e1f6029913960400191505060405180910390fd5b6001600160a01b0382166000908152600b602052604090205460ff1615612d9a576040805162461bcd60e51b815260206004820152600b60248201526a4e6f20536e69707065727360a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600b602052604090205460ff1615612df6576040805162461bcd60e51b815260206004820152600b60248201526a4e6f20536e69707065727360a81b604482015290519081900360640190fd5b612dfe611a33565b6001600160a01b0316836001600160a01b031614158015612e385750612e22611a33565b6001600160a01b0316826001600160a01b031614155b15612e9257601a54600160a81b900460ff16612e92576040805162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba1032b730b13632b21760611b604482015290519081900360640190fd5b601a546000906001600160a01b0385811691161480612ebe5750601a546001600160a01b038481169116145b158015612f0757506001600160a01b03841660009081526007602052604090205460ff1680612f0557506001600160a01b03831660009081526007602052604090205460ff165b155b15612f1157506014545b601a546001600160a01b0384811691161415612f3957601354601254612f3691612b24565b90505b6000600554118015612f5057504360045460055401115b15612f79576001600160a01b0383166000908152600b60205260409020805460ff191660011790555b6000600554118015612fa45750612f8e611a33565b6001600160a01b0316846001600160a01b031614155b8015612fb65750600454600554014311155b8015612fcb5750601a54600160b81b900460ff165b15612fd557506103845b601a546001600160a01b0385811691161415612ffd57601154601054612ffa91612b24565b90505b601a54600160b01b900460ff161561302957601a546001600160a01b0385811691161415613029575060005b6001600160a01b03841660009081526007602052604090205460ff168061306857506001600160a01b03831660009081526007602052604090205460ff165b8061308b5750613076611a33565b6001600160a01b0316846001600160a01b0316145b806130ae5750613099611a33565b6001600160a01b0316836001600160a01b0316145b156130b7575060005b601a54600160a01b900460ff161580156130da5750601a54600160a81b900460ff165b80156130f35750601a546001600160a01b038481169116145b156131d85760006131033061186c565b9050600061310f611eaf565b905080821015801561312a5750601a54600160c01b900460ff165b15613137576131376133f0565b8082101580156131515750601a54600160c01b900460ff16155b156131d5576003546040805163a9059cbb60e01b81526001600160a01b0390921660048301526024820184905251309163a9059cbb9160448083019260209291908290030181600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b505050506040513d60208110156131d257600080fd5b50505b50505b6131e4848484846134d8565b50505050565b600081848411156132795760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561323e578181015183820152602001613226565b50505050905090810190601f16801561326b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b604080518082018252600b81526a08ae8d0cae4caeada9ac2f60ab1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f6032cdc46f1186a3a404899742d7a983136935fca579b37a7f206bb09d9a650f818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b60008261336457506000610e90565b8282028284828161337157fe5b0414612b7e5760405162461bcd60e51b8152600401808060200182810382526021815260200180613db66021913960400191505060405180910390fd5b6000612b7e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061352d565b601a54600160a01b900460ff16151560011415613454576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b601a805460ff60a01b1916600160a01b1790556012546000901561348e5761348b6002611eee601654611eee601254611ee8611eaf565b90505b60006134a28261349c611eaf565b90613592565b90506134ad816135d4565b601a54600160c81b900460ff166134c7576134c782613999565b5050601a805460ff60a01b19169055565b806134ed576134e8848484613b09565b6131e4565b60006134ff6103e8611eee8585613355565b9050600061350d8483613592565b905061351a868683613b09565b613525863084613b09565b505050505050565b6000818361357c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561323e578181015183820152602001613226565b50600083858161358857fe5b0495945050505050565b6000612b7e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131ea565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061360257fe5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561365657600080fd5b505afa15801561366a573d6000803e3d6000fd5b505050506040513d602081101561368057600080fd5b505181518290600190811061369157fe5b6001600160a01b0392831660209182029290920101526019546136b79130911684612b89565b6019546040805163d06ca61f60e01b815260048101858152602482019283528451604483015284516060946001600160a01b03169363d06ca61f9388938893909291606401906020808601910280838360005b8381101561372257818101518382015260200161370a565b50505050905001935050505060006040518083038186803b15801561374657600080fd5b505afa15801561375a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561378357600080fd5b8101908080516040519392919084600160201b8211156137a257600080fd5b9083019060208201858111156137b757600080fd5b82518660208202830111600160201b821117156137d357600080fd5b82525081516020918201928201910280838360005b838110156138005781810151838201526020016137e8565b505050509050016040525050509050600061385f61383c60328460018151811061382657fe5b60200260200101516133ae90919063ffffffff16565b8360018151811061384957fe5b602002602001015161359290919063ffffffff16565b60195460405163791ac94760e01b815260048101878152602482018490523060648301819052426084840181905260a060448501908152895160a486015289519697506001600160a01b039095169563791ac947958b9589958c95949390929160c401906020808801910280838360005b838110156138e85781810151838201526020016138d0565b505050509050019650505050505050600060405180830381600087803b15801561391157600080fd5b505af1158015613925573d6000803e3d6000fd5b505050508260405180828051906020019060200280838360005b8381101561395757818101518382015260200161393f565b505060405192909401829003822095508994507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a793506000925050a350505050565b60125447906000906139b9906139b09060026133ae565b60165490613592565b60165490915015613a8f5760006139e46002611eee84611eee6012548861335590919063ffffffff16565b90506000613a0183611eee6013548761335590919063ffffffff16565b90508315613a78576003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613a43573d6000803e3d6000fd5b506003546040805183815290516001600160a01b03909216913091600080516020613e48833981519152919081900360200190a35b8415613a8857613a888583613c4c565b5050613b04565b8115613b04576003546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613acf573d6000803e3d6000fd5b506003546040805184815290516001600160a01b03909216913091600080516020613e48833981519152919081900360200190a35b505050565b6001600160a01b038316613b4e5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e686025913960400191505060405180910390fd5b6001600160a01b038216613b935760405162461bcd60e51b8152600401808060200182810382526023815260200180613cff6023913960400191505060405180910390fd5b6001600160a01b03831660009081526006602052604090205481811015613beb5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d6a6026913960400191505060405180910390fd5b613bf58183613592565b6001600160a01b03808616600081815260066020908152604080832095909555928716808252908490208054870190558351868152935190939192600080516020613e48833981519152928290030190a350505050565b601954613c649030906001600160a01b031684612b89565b6019546040805163f305d71960e01b8152306004820181905260248201869052600060448301819052606483015260848201524260a482015290516001600160a01b039092169163f305d71991849160c480830192606092919082900301818588803b158015613cd357600080fd5b505af1158015613ce7573d6000803e3d6000fd5b50505050506040513d60608110156131e457600080fdfe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656163636f756e7420697320616c7265616479207472757374656420757365206f766572696465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220a3eee3ba3569150dad13daf7ec2ed2c6b6a39e7a2c2b7161f69289959bf7347e64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106103905760003560e01c806388790a68116101dc578063bf353dbb11610102578063dd62ed3e116100a0578063eafb5a3c1161006f578063eafb5a3c14610db2578063f2fde38b14610de5578063fabb0b4f14610e18578063ffb54a9914610e2d57610397565b8063dd62ed3e14610cf9578063e7c281d614610d34578063ea2f0b3714610d6a578063ead88dbc14610d9d57610397565b8063cfc16cea116100dc578063cfc16cea14610c5c578063d28d885214610c71578063d505accf14610c86578063dc44b6a014610ce457610397565b8063bf353dbb14610bff578063bf56b37114610c32578063cd0d009614610c4757610397565b80639dc29fac1161017a578063acb2ad6f11610149578063acb2ad6f14610ad3578063b09f126614610ae8578063b8623f5614610afd578063bc60761f14610b8257610397565b80639dc29fac14610a13578063a457c2d714610a4c578063a525687b14610a85578063a9059cbb14610a9a57610397565b806394d79ce3116101b657806394d79ce31461093b57806395d89b41146109b65780639a76efb4146109cb5780639c52a7f1146109e057610397565b806388790a68146108e15780638da5cb5b146108f65780638f4590d21461090b57610397565b80633736421b116102c157806354fd4d501161025f57806370a082311161022e57806370a0823114610833578063715018a614610866578063743942b61461087b5780637ecebe00146108ae57610397565b806354fd4d50146107895780635d0b8d5e1461079e57806365fae35e146107ca5780636c6d9fa1146107fd57610397565b80633eaaf86b1161029b5780633eaaf86b146106f357806340c10f1914610708578063437823ec1461074157806344cbf0541461077457610397565b80633736421b1461065d578063395093511461068e5780633ddf65ab146106c757610397565b806325b86edf1161032e5780632fa327a8116103085780632fa327a8146105d557806330adf81f14610608578063313ce5671461061d5780633644e5151461064857610397565b806325b86edf146105535780632d4103d61461058e5780632e2c0145146105c057610397565b80630f3a325f1161036a5780630f3a325f1461048857806318160ddd146104bb57806318ee9ff9146104e257806323b872dd1461051057610397565b806302a6abd41461039c57806306fdde03146103c5578063095ea7b31461044f57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e42565b604080519115158252519081900360200190f35b3480156103d157600080fd5b506103da610e52565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104145781810151838201526020016103fc565b50505050905090810190601f1680156104415780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561045b57600080fd5b506103b16004803603604081101561047257600080fd5b506001600160a01b038135169060200135610e78565b34801561049457600080fd5b506103b1600480360360208110156104ab57600080fd5b50356001600160a01b0316610e96565b3480156104c757600080fd5b506104d0610eb4565b60408051918252519081900360200190f35b3480156104ee57600080fd5b5061050e6004803603602081101561050557600080fd5b50351515610eba565b005b34801561051c57600080fd5b506103b16004803603606081101561053357600080fd5b506001600160a01b03813581169160208101359091169060400135610f65565b34801561055f57600080fd5b5061050e6004803603604081101561057657600080fd5b506001600160a01b0381358116916020013516610fec565b34801561059a57600080fd5b5061050e600480360360408110156105b157600080fd5b50803515159060200135611174565b3480156105cc57600080fd5b506104d061124a565b3480156105e157600080fd5b5061050e600480360360208110156105f857600080fd5b50356001600160a01b0316611250565b34801561061457600080fd5b506104d061130f565b34801561062957600080fd5b50610632611333565b6040805160ff9092168252519081900360200190f35b34801561065457600080fd5b506104d0611338565b34801561066957600080fd5b50610672611398565b604080516001600160a01b039092168252519081900360200190f35b34801561069a57600080fd5b506103b1600480360360408110156106b157600080fd5b506001600160a01b0381351690602001356113a7565b3480156106d357600080fd5b5061050e600480360360208110156106ea57600080fd5b503515156113f5565b3480156106ff57600080fd5b506104d06114a0565b34801561071457600080fd5b5061050e6004803603604081101561072b57600080fd5b506001600160a01b0381351690602001356114a6565b34801561074d57600080fd5b5061050e6004803603602081101561076457600080fd5b50356001600160a01b03166115c2565b34801561078057600080fd5b506104d061166c565b34801561079557600080fd5b506103da611672565b3480156107aa57600080fd5b5061050e600480360360208110156107c157600080fd5b5035151561168f565b3480156107d657600080fd5b5061050e600480360360208110156107ed57600080fd5b50356001600160a01b031661173a565b34801561080957600080fd5b5061050e6004803603606081101561082057600080fd5b50803590602081013590604001356117d1565b34801561083f57600080fd5b506104d06004803603602081101561085657600080fd5b50356001600160a01b031661186c565b34801561087257600080fd5b5061050e611887565b34801561088757600080fd5b5061050e6004803603602081101561089e57600080fd5b50356001600160a01b0316611929565b3480156108ba57600080fd5b506104d0600480360360208110156108d157600080fd5b50356001600160a01b0316611a1b565b3480156108ed57600080fd5b506104d0611a2d565b34801561090257600080fd5b50610672611a33565b34801561091757600080fd5b5061050e6004803603604081101561092e57600080fd5b5080359060200135611a42565b34801561094757600080fd5b5061050e6004803603602081101561095e57600080fd5b810190602081018135600160201b81111561097857600080fd5b82018360208201111561098a57600080fd5b803590602001918460208302840111600160201b831117156109ab57600080fd5b509092509050611ad5565b3480156109c257600080fd5b506103da611bd0565b3480156109d757600080fd5b506104d0611bee565b3480156109ec57600080fd5b5061050e60048036036020811015610a0357600080fd5b50356001600160a01b0316611bf4565b348015610a1f57600080fd5b5061050e60048036036040811015610a3657600080fd5b506001600160a01b038135169060200135611c90565b348015610a5857600080fd5b506103b160048036036040811015610a6f57600080fd5b506001600160a01b038135169060200135611e2a565b348015610a9157600080fd5b506104d0611eaf565b348015610aa657600080fd5b506103b160048036036040811015610abd57600080fd5b506001600160a01b038135169060200135611ef9565b348015610adf57600080fd5b506104d0611f0d565b348015610af457600080fd5b506103da611f13565b348015610b0957600080fd5b5061050e60048036036060811015610b2057600080fd5b810190602081018135600160201b811115610b3a57600080fd5b820183602082011115610b4c57600080fd5b803590602001918460208302840111600160201b83111715610b6d57600080fd5b91935091508035151590602001351515611f33565b348015610b8e57600080fd5b5061050e60048036036040811015610ba557600080fd5b810190602081018135600160201b811115610bbf57600080fd5b820183602082011115610bd157600080fd5b803590602001918460208302840111600160201b83111715610bf257600080fd5b91935091503515156120a8565b348015610c0b57600080fd5b506104d060048036036020811015610c2257600080fd5b50356001600160a01b03166121a2565b348015610c3e57600080fd5b506104d06121b4565b348015610c5357600080fd5b506104d06121ba565b348015610c6857600080fd5b506104d06121de565b348015610c7d57600080fd5b506103da6121e4565b348015610c9257600080fd5b5061050e600480360360e0811015610ca957600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561220b565b348015610cf057600080fd5b506104d06124a3565b348015610d0557600080fd5b506104d060048036036040811015610d1c57600080fd5b506001600160a01b03813581169160200135166124a9565b348015610d4057600080fd5b5061050e60048036036060811015610d5757600080fd5b50803590602081013590604001356124d4565b348015610d7657600080fd5b5061050e60048036036020811015610d8d57600080fd5b50356001600160a01b031661257f565b348015610da957600080fd5b50610672612637565b348015610dbe57600080fd5b5061050e60048036036020811015610dd557600080fd5b50356001600160a01b0316612646565b348015610df157600080fd5b5061050e60048036036020811015610e0857600080fd5b50356001600160a01b0316612a16565b348015610e2457600080fd5b506104d0612b0e565b348015610e3957600080fd5b506103b1612b14565b601a54600160b01b900460ff1681565b60408051808201909152600b81526a08ae8d0cae4caeada9ac2f60ab1b60208201525b90565b6000610e8c610e85612b85565b8484612b89565b5060015b92915050565b6001600160a01b03166000908152600b602052604090205460ff1690565b600f5490565b610ec2612b85565b6000546001600160a01b03908116911614610f12576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60b01b1916600160b01b8315158102919091179182905560405160ff91909204161515907fa0967cfa7785011d08a1d65eaa2d0bb0e0eaffd4b074914f521576fe487c66d490600090a250565b6000610f72848484612c75565b610fe284610f7e612b85565b610fdd85604051806060016040528060288152602001613dd7602891396001600160a01b038a166000908152600a6020526040812090610fbc612b85565b6001600160a01b0316815260208101919091526040016000205491906131ea565b612b89565b5060019392505050565b610ff4612b85565b6000546001600160a01b03908116911614611044576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561109357600080fd5b505afa1580156110a7573d6000803e3d6000fd5b505050506040513d60208110156110bd57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905291519293509085169163a9059cbb916044808201926020929091908290030181600087803b15801561111557600080fd5b505af1158015611129573d6000803e3d6000fd5b505050506040513d602081101561113f57600080fd5b50506040805182815290516001600160a01b038416913091600080516020613e488339815191529181900360200190a3505050565b61117c612b85565b6000546001600160a01b039081169116146111cc576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60a81b1916600160a81b8415158102919091179182905560ff91041680156111fa5750600554155b15611209574360055560048190555b601a54600554604051600160a81b90920460ff161515917f617c8606af468e56cf5bcb9e5b0c7fdaaf70ece355b61c0720bb21ddbb39b7ca90600090a35050565b60135481565b611258612b85565b6000546001600160a01b039081169116146112a8576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166112bb57600080fd5b600380546001600160a01b038381166001600160a01b03198316179283905560405191811692169082907f8595877311e370fe3ac87d4f6d12473603393f02ac660e68d2e5e3da5adb610c90600090a35050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601290565b6000467f000000000000000000000000000000000000000000000000000000000000a4b181146113705761136b81613281565b611392565b7f1d346217a4ba0e5dd83aa644de464c3fada2d9cc926384b3d072a0d6a2617f585b91505090565b601a546001600160a01b031681565b6000610e8c6113b4612b85565b84610fdd85600a60006113c5612b85565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612b24565b6113fd612b85565b6000546001600160a01b0390811691161461144d576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60b81b1916600160b81b8315158102919091179182905560405160ff91909204161515907fd85d42d146b50ac0dd8c12e07153c1d8c93cb56189685bc9ecb9c43548fea8bd90600090a250565b600f5481565b336000908152600c60205260409020546001146114f8576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b6001600160a01b0382161580159061151957506001600160a01b0382163014155b611561576040805162461bcd60e51b8152602060048201526014602482015273456d61782f696e76616c69642d6164647265737360601b604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020805482019055600f5461158c9082612b24565b600f556040805182815290516001600160a01b03841691600091600080516020613e488339815191529181900360200190a35050565b6115ca612b85565b6000546001600160a01b0390811691161461161a576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b038116600081815260076020526040808220805460ff1916600190811790915590519092917fd5144d2a6c8ff9b87b7a40852df5102cab2ce561c06b56cc6fe7ccf1fa7f8c2d91a350565b60185481565b604051806040016040528060018152602001603160f81b81525081565b611697612b85565b6000546001600160a01b039081169116146116e7576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b601a805460ff60c81b1916600160c81b8315158102919091179182905560405160ff91909204161515907f9b7dde7c01fd980c907791362c2c5fcb96800e47451e8aa2bb65aad177f4fd9e90600090a250565b336000908152600c602052604090205460011461178c576040805162461bcd60e51b815260206004820152600b60248201526a4e4f545f4741544557415960a81b604482015290519081900360640190fd5b6001600160a01b0381166000818152600c602052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b6117d9612b85565b6000546001600160a01b03908116911614611829576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6010839055601182905560148190556040518190839085907ff012478f3651ec49cde414d7f150b6acd80444abf64cb3202480de73117fd30a90600090a4505050565b6001600160a01b031660009081526006602052604090205490565b61188f612b85565b6000546001600160a01b039081169116146118df576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b611931612b85565b6000546001600160a01b03908116911614611981576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6040516000906001600160a01b0383169047908381818185875af1925050503d80600081146119cc576040519150601f19603f3d011682016040523d82523d6000602084013e6119d1565b606091505b50509050806119df57600080fd5b604051811515906001600160a01b038416907f2ca43cabf6818452b93ffad63077adfe11e5835f1028aa131e203f0e7f88e06290600090a35050565b600d6020526000908152604090205481565b60125481565b6000546001600160a01b031690565b611a4a612b85565b6000546001600160a01b03908116911614611a9a576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60188190556017829055604051819083907f9690ae996ab3e30fe50be847f5695c406c1e341ddebe0df9c9c1be5bc38d01a390600090a35050565b611add612b85565b6000546001600160a01b03908116911614611b2d576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60005b81811015611b8357600160076000858585818110611b4a57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611b30565b50600115158282604051808383602002808284376040519201829003822094507f1ffd4ee2ef157b3e8fdc63884f36ac5c158dbf5eacd1861211adab947698a21693506000925050a35050565b60408051808201909152600481526308a9a82b60e31b602082015290565b60115481565b611bfc612b85565b6000546001600160a01b03908116911614611c4c576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152600c6020526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b6001600160a01b03821660009081526006602052604090205481811015611cfe576040805162461bcd60e51b815260206004820152601960248201527f456d61782f696e73756666696369656e742d62616c616e636500000000000000604482015290519081900360640190fd5b6001600160a01b0383163314801590611d275750336000908152600c6020526040902054600114155b15611dd9576001600160a01b0383166000908152600a602090815260408083203384529091529020546000198114611dd75782811015611dae576040805162461bcd60e51b815260206004820152601b60248201527f456d61782f696e73756666696369656e742d616c6c6f77616e63650000000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600a60209081526040808320338452909152902083820390555b505b6001600160a01b03831660008181526006602090815260408083208686039055600f8054879003905580518681529051929392600080516020613e48833981519152929181900390910190a3505050565b6000610e8c611e37612b85565b84610fdd856040518060400160405280601b81526020017f456d61782f696e73756666696369656e742d616c6c6f77616e63650000000000815250600a6000611e7e612b85565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131ea565b6000600f5460001415611ec457506000610e75565b601854601754601a54611ef49291611eee91611ee8906001600160a01b031661186c565b90613355565b906133ae565b905090565b6000610e8c611f06612b85565b8484612c75565b60145481565b6040518060400160405280600481526020016308a9a82b60e31b81525081565b611f3b612b85565b6000546001600160a01b03908116911614611f8b576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60005b8381101561205a5760096000868684818110611fa657fe5b602090810292909201356001600160a01b03168352508101919091526040016000205460ff161580611fd55750815b6120105760405162461bcd60e51b8152600401808060200182810382526026815260200180613d906026913960400191505060405180910390fd5b82600b600087878581811061202157fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611f8e565b508115158484604051808383602002808284376040519201829003822094507f0eb384a4e9c884022b89c9ef21417552d3495076b7d8e219126e225ed85fd45c93506000925050a350505050565b6120b0612b85565b6000546001600160a01b03908116911614612100576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b60005b8281101561215557816009600086868581811061211c57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101612103565b508015158383604051808383602002808284376040519201829003822094507f3bc9c399557156f9c00581110e7ee7803c88e555c081cd303556270b28d3ddbd93506000925050a3505050565b600c6020526000908152604090205481565b60055481565b7f000000000000000000000000000000000000000000000000000000000000a4b181565b60175481565b6040518060400160405280600b81526020016a08ae8d0cae4caeada9ac2f60ab1b81525081565b83421115612256576040805162461bcd60e51b8152602060048201526013602482015272115b585e0bdc195c9b5a5d0b595e1c1a5c9959606a1b604482015290519081900360640190fd5b4660007f000000000000000000000000000000000000000000000000000000000000a4b1821461228e5761228982613281565b6122b0565b7f1d346217a4ba0e5dd83aa644de464c3fada2d9cc926384b3d072a0d6a2617f585b6001600160a01b03808b166000818152600d602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981840152808401859052948e166060860152608085018d905260a085015260c08085018c90528251808603909101815260e08501835280519082012061190160f01b61010086015261010285019590955261012280850195909552815180850390950185526101429093019052825192909101919091209150158015906123f4575060018186868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156123d5573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316145b61243b576040805162461bcd60e51b8152602060048201526013602482015272115b585e0bda5b9d985b1a590b5c195c9b5a5d606a1b604482015290519081900360640190fd5b6001600160a01b03808a166000818152600a60209081526040808320948d16808452948252918290208b905581518b815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050505050505050565b60105481565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6124dc612b85565b6000546001600160a01b0390811691161461252c576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6012839055601382905560148190556125458383612b24565b6016556014546013546012546040517f197b5b51a8feaa54e0af6fad0ea487f9eec9d25be1385bf8d1e1391630c02fb590600090a4505050565b612587612b85565b6000546001600160a01b039081169116146125d7576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166125ea57600080fd5b6001600160a01b038116600081815260076020526040808220805460ff19169055519091907f6c72613740de4fb19ba7c9292d5d1d22a973fbb4d6ff9548154bf47111129e58908390a350565b6019546001600160a01b031681565b61264e612b85565b6000546001600160a01b0390811691161461269e576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b0381166126b157600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126f157600080fd5b505afa158015612705573d6000803e3d6000fd5b505050506040513d602081101561271b57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263e6a439059230929187169163ad5c464891600480820192602092909190829003018186803b15801561276b57600080fd5b505afa15801561277f573d6000803e3d6000fd5b505050506040513d602081101561279557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b1580156127e557600080fd5b505afa1580156127f9573d6000803e3d6000fd5b505050506040513d602081101561280f57600080fd5b505190506001600160a01b0381166129a057816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561285a57600080fd5b505afa15801561286e573d6000803e3d6000fd5b505050506040513d602081101561288457600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b1580156128d457600080fd5b505afa1580156128e8573d6000803e3d6000fd5b505050506040513d60208110156128fe57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b15801561295057600080fd5b505af1158015612964573d6000803e3d6000fd5b505050506040513d602081101561297a57600080fd5b5051601a80546001600160a01b0319166001600160a01b039092169190911790556129bc565b601a80546001600160a01b0319166001600160a01b0383161790555b601980546001600160a01b0319166001600160a01b0384811691909117909155604080519185168252517f97e78f35fad9b724a4846abe5b7d49dd7526592da5a2568d2c86168e6d7818e4916020908290030190a1505050565b612a1e612b85565b6000546001600160a01b03908116911614612a6e576040805162461bcd60e51b81526020600482018190526024820152600080516020613dff833981519152604482015290519081900360640190fd5b6001600160a01b038116612ab35760405162461bcd60e51b8152600401808060200182810382526026815260200180613d226026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60045481565b601a54600160a81b900460ff1681565b600082820183811015612b7e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316612bce5760405162461bcd60e51b8152600401808060200182810382526024815260200180613e8d6024913960400191505060405180910390fd5b6001600160a01b038216612c135760405162461bcd60e51b8152600401808060200182810382526022815260200180613d486022913960400191505060405180910390fd5b6001600160a01b038084166000818152600a6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612cba5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e686025913960400191505060405180910390fd5b6001600160a01b038216612cff5760405162461bcd60e51b8152600401808060200182810382526023815260200180613cff6023913960400191505060405180910390fd5b60008111612d3e5760405162461bcd60e51b8152600401808060200182810382526029815260200180613e1f6029913960400191505060405180910390fd5b6001600160a01b0382166000908152600b602052604090205460ff1615612d9a576040805162461bcd60e51b815260206004820152600b60248201526a4e6f20536e69707065727360a81b604482015290519081900360640190fd5b6001600160a01b0383166000908152600b602052604090205460ff1615612df6576040805162461bcd60e51b815260206004820152600b60248201526a4e6f20536e69707065727360a81b604482015290519081900360640190fd5b612dfe611a33565b6001600160a01b0316836001600160a01b031614158015612e385750612e22611a33565b6001600160a01b0316826001600160a01b031614155b15612e9257601a54600160a81b900460ff16612e92576040805162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba1032b730b13632b21760611b604482015290519081900360640190fd5b601a546000906001600160a01b0385811691161480612ebe5750601a546001600160a01b038481169116145b158015612f0757506001600160a01b03841660009081526007602052604090205460ff1680612f0557506001600160a01b03831660009081526007602052604090205460ff165b155b15612f1157506014545b601a546001600160a01b0384811691161415612f3957601354601254612f3691612b24565b90505b6000600554118015612f5057504360045460055401115b15612f79576001600160a01b0383166000908152600b60205260409020805460ff191660011790555b6000600554118015612fa45750612f8e611a33565b6001600160a01b0316846001600160a01b031614155b8015612fb65750600454600554014311155b8015612fcb5750601a54600160b81b900460ff165b15612fd557506103845b601a546001600160a01b0385811691161415612ffd57601154601054612ffa91612b24565b90505b601a54600160b01b900460ff161561302957601a546001600160a01b0385811691161415613029575060005b6001600160a01b03841660009081526007602052604090205460ff168061306857506001600160a01b03831660009081526007602052604090205460ff165b8061308b5750613076611a33565b6001600160a01b0316846001600160a01b0316145b806130ae5750613099611a33565b6001600160a01b0316836001600160a01b0316145b156130b7575060005b601a54600160a01b900460ff161580156130da5750601a54600160a81b900460ff165b80156130f35750601a546001600160a01b038481169116145b156131d85760006131033061186c565b9050600061310f611eaf565b905080821015801561312a5750601a54600160c01b900460ff165b15613137576131376133f0565b8082101580156131515750601a54600160c01b900460ff16155b156131d5576003546040805163a9059cbb60e01b81526001600160a01b0390921660048301526024820184905251309163a9059cbb9160448083019260209291908290030181600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b505050506040513d60208110156131d257600080fd5b50505b50505b6131e4848484846134d8565b50505050565b600081848411156132795760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561323e578181015183820152602001613226565b50505050905090810190601f16801561326b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b604080518082018252600b81526a08ae8d0cae4caeada9ac2f60ab1b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f6032cdc46f1186a3a404899742d7a983136935fca579b37a7f206bb09d9a650f818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101939093523060a0808501919091528251808503909101815260c0909301909152815191012090565b60008261336457506000610e90565b8282028284828161337157fe5b0414612b7e5760405162461bcd60e51b8152600401808060200182810382526021815260200180613db66021913960400191505060405180910390fd5b6000612b7e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061352d565b601a54600160a01b900460ff16151560011415613454576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b601a805460ff60a01b1916600160a01b1790556012546000901561348e5761348b6002611eee601654611eee601254611ee8611eaf565b90505b60006134a28261349c611eaf565b90613592565b90506134ad816135d4565b601a54600160c81b900460ff166134c7576134c782613999565b5050601a805460ff60a01b19169055565b806134ed576134e8848484613b09565b6131e4565b60006134ff6103e8611eee8585613355565b9050600061350d8483613592565b905061351a868683613b09565b613525863084613b09565b505050505050565b6000818361357c5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561323e578181015183820152602001613226565b50600083858161358857fe5b0495945050505050565b6000612b7e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131ea565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061360257fe5b6001600160a01b03928316602091820292909201810191909152601954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561365657600080fd5b505afa15801561366a573d6000803e3d6000fd5b505050506040513d602081101561368057600080fd5b505181518290600190811061369157fe5b6001600160a01b0392831660209182029290920101526019546136b79130911684612b89565b6019546040805163d06ca61f60e01b815260048101858152602482019283528451604483015284516060946001600160a01b03169363d06ca61f9388938893909291606401906020808601910280838360005b8381101561372257818101518382015260200161370a565b50505050905001935050505060006040518083038186803b15801561374657600080fd5b505afa15801561375a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561378357600080fd5b8101908080516040519392919084600160201b8211156137a257600080fd5b9083019060208201858111156137b757600080fd5b82518660208202830111600160201b821117156137d357600080fd5b82525081516020918201928201910280838360005b838110156138005781810151838201526020016137e8565b505050509050016040525050509050600061385f61383c60328460018151811061382657fe5b60200260200101516133ae90919063ffffffff16565b8360018151811061384957fe5b602002602001015161359290919063ffffffff16565b60195460405163791ac94760e01b815260048101878152602482018490523060648301819052426084840181905260a060448501908152895160a486015289519697506001600160a01b039095169563791ac947958b9589958c95949390929160c401906020808801910280838360005b838110156138e85781810151838201526020016138d0565b505050509050019650505050505050600060405180830381600087803b15801561391157600080fd5b505af1158015613925573d6000803e3d6000fd5b505050508260405180828051906020019060200280838360005b8381101561395757818101518382015260200161393f565b505060405192909401829003822095508994507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a793506000925050a350505050565b60125447906000906139b9906139b09060026133ae565b60165490613592565b60165490915015613a8f5760006139e46002611eee84611eee6012548861335590919063ffffffff16565b90506000613a0183611eee6013548761335590919063ffffffff16565b90508315613a78576003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015613a43573d6000803e3d6000fd5b506003546040805183815290516001600160a01b03909216913091600080516020613e48833981519152919081900360200190a35b8415613a8857613a888583613c4c565b5050613b04565b8115613b04576003546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015613acf573d6000803e3d6000fd5b506003546040805184815290516001600160a01b03909216913091600080516020613e48833981519152919081900360200190a35b505050565b6001600160a01b038316613b4e5760405162461bcd60e51b8152600401808060200182810382526025815260200180613e686025913960400191505060405180910390fd5b6001600160a01b038216613b935760405162461bcd60e51b8152600401808060200182810382526023815260200180613cff6023913960400191505060405180910390fd5b6001600160a01b03831660009081526006602052604090205481811015613beb5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d6a6026913960400191505060405180910390fd5b613bf58183613592565b6001600160a01b03808616600081815260066020908152604080832095909555928716808252908490208054870190558351868152935190939192600080516020613e48833981519152928290030190a350505050565b601954613c649030906001600160a01b031684612b89565b6019546040805163f305d71960e01b8152306004820181905260248201869052600060448301819052606483015260848201524260a482015290516001600160a01b039092169163f305d71991849160c480830192606092919082900301818588803b158015613cd357600080fd5b505af1158015613ce7573d6000803e3d6000fd5b50505050506040513d60608110156131e457600080fdfe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63656163636f756e7420697320616c7265616479207472757374656420757365206f766572696465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220a3eee3ba3569150dad13daf7ec2ed2c6b6a39e7a2c2b7161f69289959bf7347e64736f6c634300060c0033
Deployed ByteCode Sourcemap
14417:19826:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19963:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20530:153;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20530:153:0;;;;;;;;:::i;28048:102::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28048:102:0;-1:-1:-1;;;;;28048:102:0;;:::i;21563:96::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;30321:126;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30321:126:0;;;;:::i;:::-;;20689:349;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20689:349:0;;;;;;;;;;;;;;;;;:::i;32958:219::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32958:219:0;;;;;;;;;;:::i;30045:270::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30045:270:0;;;;;;;;;:::i;15584:36::-;;;;;;;;;;;;;:::i;31842:259::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31842:259:0;-1:-1:-1;;;;;31842:259:0;;:::i;16224:142::-;;;;;;;;;;;;;:::i;20137:79::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16807:238;;;;;;;;;;;;;:::i;15897:19::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15897:19:0;;;;;;;;;;;;;;21044:210;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21044:210:0;;;;;;;;:::i;30453:126::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30453:126:0;;;;:::i;15289:27::-;;;;;;;;;;;;;:::i;28156:398::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28156:398:0;;;;;;;;:::i;31084:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31084:148:0;-1:-1:-1;;;;;31084:148:0;;:::i;15822:38::-;;;;;;;;;;;;;:::i;15416:36::-;;;;;;;;;;;;;:::i;31238:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31238:174:0;;;;:::i;17149:128::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17149:128:0;-1:-1:-1;;;;;17149:128:0;;:::i;33457:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33457:313:0;;;;;;;;;;;;:::i;19844:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19844:113:0;-1:-1:-1;;;;;19844:113:0;;:::i;5800:138::-;;;;;;;;;;;;;:::i;32724:228::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32724:228:0;-1:-1:-1;;;;;32724:228:0;;:::i;15086:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15086:41:0;-1:-1:-1;;;;;15086:41:0;;:::i;15542:37::-;;;;;;;;;;;;;:::i;5606:73::-;;;;;;;;;;;;;:::i;33183:268::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33183:268:0;;;;;;;:::i;31418:229::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31418:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31418:229:0;;;;;;;;;;-1:-1:-1;31418:229:0;;-1:-1:-1;31418:229:0;-1:-1:-1;31418:229:0;:::i;20048:83::-;;;;;;;;;;;;;:::i;15500:35::-;;;;;;;;;;;;;:::i;17283:94::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17283:94:0;-1:-1:-1;;;;;17283:94:0;;:::i;28560:687::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28560:687:0;;;;;;;;:::i;21260:297::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21260:297:0;;;;;;;;:::i;27613:249::-;;;;;;;;;;;;;:::i;20222:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20222:157:0;;;;;;;;:::i;15627:31::-;;;;;;;;;;;;;:::i;15372:39::-;;;;;;;;;;;;;:::i;32107:369::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32107:369:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32107:369:0;;;;;;;;;;;;-1:-1:-1;32107:369:0;-1:-1:-1;32107:369:0;;;;;;;;;;;:::i;32482:236::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32482:236:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32482:236:0;;;;;;;;;;;;-1:-1:-1;32482:236:0;-1:-1:-1;32482:236:0;;;;:::i;15041:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15041:40:0;-1:-1:-1;;;;;15041:40:0;;:::i;14680:25::-;;;;;;;;;;;;;:::i;16129:42::-;;;;;;;;;;;;;:::i;15781:36::-;;;;;;;;;;;;;:::i;15323:44::-;;;;;;;;;;;;;:::i;29253:786::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29253:786:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15459:36::-;;;;;;;;;;;;;:::i;20385:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20385:139:0;;;;;;;;;;:::i;33776:382::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33776:382:0;;;;;;;;;;;;:::i;31653:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31653:183:0;-1:-1:-1;;;;;31653:183:0;;:::i;15867:25::-;;;;;;;;;;;;;:::i;30585:493::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30585:493:0;-1:-1:-1;;;;;30585:493:0;;:::i;5944:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5944:230:0;-1:-1:-1;;;;;5944:230:0;;:::i;14646:29::-;;;;;;;;;;;;;:::i;15941:31::-;;;;;;;;;;;;;:::i;15977:29::-;;;-1:-1:-1;;;15977:29:0;;;;;:::o;19963:79::-;20031:5;;;;;;;;;;;;-1:-1:-1;;;20031:5:0;;;;19963:79;;:::o;20530:153::-;20607:4;20620:39;20629:12;:10;:12::i;:::-;20643:7;20652:6;20620:8;:39::i;:::-;-1:-1:-1;20673:4:0;20530:153;;;;;:::o;28048:102::-;-1:-1:-1;;;;;28126:18:0;28106:4;28126:18;;;:9;:18;;;;;;;;;28048:102::o;21563:96::-;21641:12;;21563:96;:::o;30321:126::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;30382:10:::1;:18:::0;;-1:-1:-1;;;;30382:18:0::1;-1:-1:-1::0;;;30382:18:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;30412:29:::1;::::0;30382:18:::1;30430:10:::0;;;::::1;;30412:29;;::::0;::::1;::::0;-1:-1:-1;;30412:29:0::1;30321:126:::0;:::o;20689:349::-;20809:4;20822:36;20832:6;20840:9;20851:6;20822:9;:36::i;:::-;20865:149;20882:6;20897:12;:10;:12::i;:::-;20918:89;20956:6;20918:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20918:19:0;;;;;;:11;:19;;;;;;20938:12;:10;:12::i;:::-;-1:-1:-1;;;;;20918:33:0;;;;;;;;;;;;-1:-1:-1;20918:33:0;;;:89;:37;:89::i;:::-;20865:8;:149::i;:::-;-1:-1:-1;21028:4:0;20689:349;;;;;:::o;32958:219::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;33039:15:::1;33057:5;-1:-1:-1::0;;;;;33057:15:0::1;;33081:4;33057:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;33057:30:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;33057:30:0;33094:27:::1;::::0;;-1:-1:-1;;;33094:27:0;;-1:-1:-1;;;;;33094:27:0;;::::1;;::::0;::::1;::::0;;;;;;;;;33057:30;;-1:-1:-1;33094:14:0;;::::1;::::0;::::1;::::0;:27;;;;;33057:30:::1;::::0;33094:27;;;;;;;;-1:-1:-1;33094:14:0;:27;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;33135:36:0::1;::::0;;;;;;;-1:-1:-1;;;;;33135:36:0;::::1;::::0;33152:4:::1;::::0;-1:-1:-1;;;;;;;;;;;33135:36:0;;;;33094:27:::1;33135:36:::0;;::::1;5787:1;32958:219:::0;;:::o;30045:270::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;30125:11:::1;:19:::0;;-1:-1:-1;;;;30125:19:0::1;-1:-1:-1::0;;;30125:19:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;30155:11:::0;::::1;;:30:::0;::::1;;;-1:-1:-1::0;30170:10:0::1;::::0;:15;30155:30:::1;30151:111;;;30209:12;30196:10;:25:::0;30230:10:::1;:24:::0;;;30151:111:::1;30297:11;::::0;30285:10:::1;::::0;30273:36:::1;::::0;-1:-1:-1;;;30297:11:0;;::::1;;;30273:36;;::::0;::::1;::::0;;;::::1;30045:270:::0;;:::o;15584:36::-;;;;:::o;31842:259::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31928:29:0;::::1;31920:38;;;::::0;::::1;;31985:14;::::0;;-1:-1:-1;;;;;32006:41:0;;::::1;-1:-1:-1::0;;;;;;32006:41:0;::::1;;::::0;;;;32059:36:::1;::::0;31985:14;;::::1;::::0;32080::::1;::::0;31985;;32059:36:::1;::::0;31965:17:::1;::::0;32059:36:::1;5787:1;31842:259:::0;:::o;16224:142::-;16271:95;16224:142;:::o;20137:79::-;15233:2;20137:79;:::o;16807:238::-;16858:7;16925:9;16965:17;16954:28;;:85;;17005:34;17031:7;17005:25;:34::i;:::-;16954:85;;;16985:17;16954:85;16947:92;;;16807:238;:::o;15897:19::-;;;-1:-1:-1;;;;;15897:19:0;;:::o;21044:210::-;21134:4;21147:83;21156:12;:10;:12::i;:::-;21170:7;21179:50;21218:10;21179:11;:25;21191:12;:10;:12::i;:::-;-1:-1:-1;;;;;21179:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21179:25:0;;;:34;;;;;;;;;;;:38;:50::i;30453:126::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;30515:11:::1;:19:::0;;-1:-1:-1;;;;30515:19:0::1;-1:-1:-1::0;;;30515:19:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;30546:27:::1;::::0;30515:19:::1;30561:11:::0;;;::::1;;30546:27;;::::0;::::1;::::0;-1:-1:-1;;30546:27:0::1;30453:126:::0;:::o;15289:27::-;;;;:::o;28156:398::-;17097:10;17091:17;;;;:5;:17;;;;;;17112:1;17091:22;17083:46;;;;;-1:-1:-1;;;17083:46:0;;;;;;;;;;;;-1:-1:-1;;;17083:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28235:16:0;::::1;::::0;;::::1;::::0;:39:::1;;-1:-1:-1::0;;;;;;28255:19:0;::::1;28269:4;28255:19;;28235:39;28227:72;;;::::0;;-1:-1:-1;;;28227:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28227:72:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;28322:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;;:21;::::1;28306:37:::0;;28482:12:::1;::::0;:23:::1;::::0;28338:5;28482:16:::1;:23::i;:::-;28467:12;:38:::0;28517:31:::1;::::0;;;;;;;-1:-1:-1;;;;;28517:31:0;::::1;::::0;28534:1:::1;::::0;-1:-1:-1;;;;;;;;;;;28517:31:0;;;;::::1;::::0;;::::1;28156:398:::0;;:::o;31084:148::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31151:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:34;;-1:-1:-1;;31151:34:0::1;31181:4;31151:34:::0;;::::1;::::0;;;31197:29;;31181:4;;31151:27;31197:29:::1;::::0;::::1;31084:148:::0;:::o;15822:38::-;;;;:::o;15416:36::-;;;;;;;;;;;;;;-1:-1:-1;;;15416:36:0;;;;:::o;31238:174::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;31303:16:::1;:25:::0;;-1:-1:-1;;;;31303:25:0::1;-1:-1:-1::0;;;31303:25:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;31372:34:::1;::::0;31303:25:::1;31389:16:::0;;;::::1;;31372:34;;::::0;::::1;::::0;-1:-1:-1;;31372:34:0::1;31238:174:::0;:::o;17149:128::-;17097:10;17091:17;;;;:5;:17;;;;;;17112:1;17091:22;17083:46;;;;;-1:-1:-1;;;17083:46:0;;;;;;;;;;;;-1:-1:-1;;;17083:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17206:23:0;::::1;;::::0;;;17236:5:::1;17206:23;17236:10:::0;17206:23;17236:10;;;17206:23;17236:14;;17262:9;::::1;::::0;17206:23;17262:9:::1;17149:128:::0;:::o;33457:313::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;33591:16:::1;:32:::0;;;33630:15:::1;:30:::0;;;33667:11:::1;:26:::0;;;33707:57:::1;::::0;33681:12;;33648;;33610:13;;33707:57:::1;::::0;-1:-1:-1;;33707:57:0::1;33457:313:::0;;;:::o;19844:113::-;-1:-1:-1;;;;;19933:18:0;19910:7;19933:18;;;:9;:18;;;;;;;19844:113::o;5800:138::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;5903:1:::1;5887:6:::0;;5866:40:::1;::::0;-1:-1:-1;;;;;5887:6:0;;::::1;::::0;5866:40:::1;::::0;5903:1;;5866:40:::1;5930:1;5913:19:::0;;-1:-1:-1;;;;;;5913:19:0::1;::::0;;5800:138::o;32724:228::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;32821:58:::1;::::0;32808:7:::1;::::0;-1:-1:-1;;;;;32821:24:0;::::1;::::0;32853:21:::1;::::0;32808:7;32821:58;32808:7;32821:58;32853:21;32821:24;:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32807:72;;;32894:2;32886:11;;;::::0;::::1;;32911:35;::::0;;::::1;;::::0;-1:-1:-1;;;;;32911:35:0;::::1;::::0;::::1;::::0;;;::::1;5787:1;32724:228:::0;:::o;15086:41::-;;;;;;;;;;;;;:::o;15542:37::-;;;;:::o;5606:73::-;5644:7;5667:6;-1:-1:-1;;;;;5667:6:0;5606:73;:::o;33183:268::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;33301:16:::1;:36:::0;;;33344:16:::1;:36:::0;;;33394:51:::1;::::0;33320:17;;33363;;33394:51:::1;::::0;-1:-1:-1;;33394:51:0::1;33183:268:::0;;:::o;31418:229::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;31504:9:::1;31499:99;31515:20:::0;;::::1;31499:99;;;31586:4;31551:18;:32;31570:9;;31580:1;31570:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;31570:12:0::1;31551:32:::0;;-1:-1:-1;31551:32:0;::::1;::::0;;;;;;-1:-1:-1;31551:32:0;:39;;-1:-1:-1;;31551:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;31537:3:0::1;31499:99;;;;31636:4;31609:32;;31625:9;;31609:32;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;31609:32:0::1;::::0;-1:-1:-1;31609:32:0;;-1:-1:-1;;31609:32:0::1;31418:229:::0;;:::o;20048:83::-;20118:7;;;;;;;;;;;;-1:-1:-1;;;20118:7:0;;;;20048:83;:::o;15500:35::-;;;;:::o;17283:94::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17336:10:0;::::1;17349:1;17336:10:::0;;;:5:::1;:10;::::0;;;;;:14;;;17362:9;::::1;::::0;17349:1;17362:9:::1;17283:94:::0;:::o;28560:687::-;-1:-1:-1;;;;;28637:15:0;;28619;28637;;;:9;:15;;;;;;28667:16;;;;28659:54;;;;;-1:-1:-1;;;28659:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28726:18:0;;28734:10;28726:18;;;;:44;;-1:-1:-1;28754:10:0;28748:17;;;;:5;:17;;;;;;28769:1;28748:22;;28726:44;28722:293;;;-1:-1:-1;;;;;28799:17:0;;28781:15;28799:17;;;:11;:17;;;;;;;;28817:10;28799:29;;;;;;;;-1:-1:-1;;28841:28:0;;28837:171;;28901:5;28890:7;:16;;28882:56;;;;;-1:-1:-1;;;28882:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28951:17:0;;;;;;:11;:17;;;;;;;;28969:10;28951:29;;;;;;;28983:15;;;28951:47;;28837:171;28722:293;;-1:-1:-1;;;;;29023:15:0;;;;;;:9;:15;;;;;;;;29041;;;29023:33;;29174:12;;;:20;;;29159:35;;29208:33;;;;;;;29023:15;;;-1:-1:-1;;;;;;;;;;;29208:33:0;;;;;;;;;;28560:687;;;:::o;21260:297::-;21370:4;21386:147;21403:12;:10;:12::i;:::-;21424:7;21440:86;21479:15;21440:86;;;;;;;;;;;;;;;;;:11;:25;21452:12;:10;:12::i;:::-;-1:-1:-1;;;;;21440:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21440:25:0;;;:34;;;;;;;;;;;:86;:38;:86::i;27613:249::-;27665:21;27699:12;;27715:1;27699:17;27695:48;;;-1:-1:-1;27734:1:0;27727:8;;27695:48;27799:16;;27777;;27767:4;;27757:59;;27799:16;27757:37;;:15;;-1:-1:-1;;;;;27767:4:0;27757:9;:15::i;:::-;:19;;:37::i;:::-;:41;;:59::i;:::-;27749:68;;27613:249;:::o;20222:157::-;20300:4;20313:42;20323:12;:10;:12::i;:::-;20337:9;20348:6;20313:9;:42::i;15627:31::-;;;;:::o;15372:39::-;;;;;;;;;;;;;;-1:-1:-1;;;15372:39:0;;;;:::o;32107:369::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;32241:9:::1;32236:190;32252:20:::0;;::::1;32236:190;;;32297:10;:24;32308:9;;32318:1;32308:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;32308:12:0::1;32297:24:::0;;-1:-1:-1;32297:24:0;::::1;::::0;;;;;;-1:-1:-1;32297:24:0;;::::1;;32296:25;::::0;:38:::1;;;32325:9;32296:38;32288:89;;;;-1:-1:-1::0;;;32288:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32412:6;32386:9;:23;32396:9;;32406:1;32396:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;32396:12:0::1;32386:23:::0;;-1:-1:-1;32386:23:0;::::1;::::0;;;;;;-1:-1:-1;32386:23:0;:32;;-1:-1:-1;;32386:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;32274:3:0::1;32236:190;;;;32463:6;32437:33;;32452:9;;32437:33;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;32437:33:0::1;::::0;-1:-1:-1;32437:33:0;;-1:-1:-1;;32437:33:0::1;32107:369:::0;;;;:::o;32482:236::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;32580:9:::1;32575:93;32591:20:::0;;::::1;32575:93;;;32654:6;32627:10;:24;32638:9;;32648:1;32638:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;32638:12:0::1;32627:24:::0;;-1:-1:-1;32627:24:0;::::1;::::0;;;;;;-1:-1:-1;32627:24:0;:33;;-1:-1:-1;;32627:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;32613:3:0::1;32575:93;;;;32705:6;32679:33;;32694:9;;32679:33;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;32679:33:0::1;::::0;-1:-1:-1;32679:33:0;;-1:-1:-1;;32679:33:0::1;32482:236:::0;;;:::o;15041:40::-;;;;;;;;;;;;;:::o;14680:25::-;;;;:::o;16129:42::-;;;:::o;15781:36::-;;;;:::o;15323:44::-;;;;;;;;;;;;;;-1:-1:-1;;;15323:44:0;;;;:::o;29253:786::-;29448:8;29429:15;:27;;29421:59;;;;;-1:-1:-1;;;29421:59:0;;;;;;;;;;;;-1:-1:-1;;;29421:59:0;;;;;;;;;;;;;;;29540:9;29489:15;29658:17;29647:28;;:85;;29698:34;29724:7;29698:25;:34::i;:::-;29647:85;;;29678:17;29647:85;-1:-1:-1;;;;;29804:13:0;;;;;;;:6;:13;;;;;;;;;:15;;;;;;;;29753:77;;16271:95;29753:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29743:88;;;;;;-1:-1:-1;;;29599:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29581:266;;;;;;;;;;;-1:-1:-1;29864:19:0;;;;:58;;;29896:26;29906:6;29914:1;29917;29920;29896:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29887:35:0;:5;-1:-1:-1;;;;;29887:35:0;;29864:58;29856:90;;;;;-1:-1:-1;;;29856:90:0;;;;;;;;;;;;-1:-1:-1;;;29856:90:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29955:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;30002:31;;;;;;;;;;;;;;;;;29253:786;;;;;;;;;:::o;15459:36::-;;;;:::o;20385:139::-;-1:-1:-1;;;;;20491:18:0;;;20468:7;20491:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20385:139::o;33776:382::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;33911:17:::1;:33:::0;;;33951:16:::1;:31:::0;;;33989:11:::1;:26:::0;;;34039:39:::1;33931:13:::0;33970:12;34039:21:::1;:39::i;:::-;34024:12;:54:::0;34140:11:::1;::::0;34122:16:::1;::::0;34103:17:::1;::::0;34092:60:::1;::::0;::::1;::::0;;;::::1;33776:382:::0;;;:::o;31653:183::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31726:21:0;::::1;31718:30;;;::::0;::::1;;-1:-1:-1::0;;;;;31755:27:0;::::1;31785:5;31755:27:::0;;;:18:::1;:27;::::0;;;;;:35;;-1:-1:-1;;31755:35:0::1;::::0;;31802:28;31785:5;;31755:27;31802:28:::1;::::0;31785:5;;31802:28:::1;31653:183:::0;:::o;15867:25::-;;;-1:-1:-1;;;;;15867:25:0;;:::o;30585:493::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30660:23:0;::::1;30652:32;;;::::0;::::1;;30691:20;30724:9;30691:43;;30741:16;30771:10;-1:-1:-1::0;;;;;30771:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30771:20:0;30816:17:::1;::::0;;-1:-1:-1;;;30816:17:0;;;;-1:-1:-1;;;;;30760:40:0;;::::1;::::0;::::1;::::0;30809:4:::1;::::0;30816:15;;::::1;::::0;::::1;::::0;:17:::1;::::0;;::::1;::::0;30771:20:::1;::::0;30816:17;;;;;;;;:15;:17;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30816:17:0;30760:74:::1;::::0;;-1:-1:-1;;;;;;30760:74:0::1;::::0;;;;;;-1:-1:-1;;;;;30760:74:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;30816:17:::1;::::0;30760:74;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30760:74:0;;-1:-1:-1;;;;;;30845:22:0;::::1;30841:167;;30896:10;-1:-1:-1::0;;;;;30896:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30896:20:0;30944:17:::1;::::0;;-1:-1:-1;;;30944:17:0;;;;-1:-1:-1;;;;;30885:43:0;;::::1;::::0;::::1;::::0;30937:4:::1;::::0;30944:15;;::::1;::::0;::::1;::::0;:17:::1;::::0;;::::1;::::0;30896:20:::1;::::0;30944:17;;;;;;;;:15;:17;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30944:17:0;30885:77:::1;::::0;;-1:-1:-1;;;;;;30885:77:0::1;::::0;;;;;;-1:-1:-1;;;;;30885:77:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;30944:17:::1;::::0;30885:77;;;;;;;-1:-1:-1;30885:77:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30885:77:0;30878:4:::1;:84:::0;;-1:-1:-1;;;;;;30878:84:0::1;-1:-1:-1::0;;;;;30878:84:0;;::::1;::::0;;;::::1;::::0;;30841:167:::1;;;30985:4;:15:::0;;-1:-1:-1;;;;;;30985:15:0::1;-1:-1:-1::0;;;;;30985:15:0;::::1;;::::0;;30841:167:::1;31014:8;:21:::0;;-1:-1:-1;;;;;;31014:21:0::1;-1:-1:-1::0;;;;;31014:21:0;;::::1;::::0;;;::::1;::::0;;;31049:23:::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;5787:1;;30585:493:::0;:::o;5944:230::-;5731:12;:10;:12::i;:::-;5721:6;;-1:-1:-1;;;;;5721:6:0;;;:22;;;5713:67;;;;;-1:-1:-1;;;5713:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5713:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6029:22:0;::::1;6021:73;;;;-1:-1:-1::0;;;6021:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6127:6;::::0;;6106:38:::1;::::0;-1:-1:-1;;;;;6106:38:0;;::::1;::::0;6127:6;::::1;::::0;6106:38:::1;::::0;::::1;6151:6;:17:::0;;-1:-1:-1;;;;;;6151:17:0::1;-1:-1:-1::0;;;;;6151:17:0;;;::::1;::::0;;;::::1;::::0;;5944:230::o;14646:29::-;;;;:::o;15941:31::-;;;-1:-1:-1;;;15941:31:0;;;;;:::o;1152:167::-;1210:7;1238:5;;;1258:6;;;;1250:46;;;;;-1:-1:-1;;;1250:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1312:1;1152:167;-1:-1:-1;;;1152:167:0:o;92:109::-;184:10;92:109;:::o;21665:339::-;-1:-1:-1;;;;;21774:19:0;;21766:68;;;;-1:-1:-1;;;21766:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21849:21:0;;21841:68;;;;-1:-1:-1;;;21841:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21918:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21966:32;;;;;;;;;;;;;;;;;21665:339;;;:::o;22010:2091::-;-1:-1:-1;;;;;22114:18:0;;22106:68;;;;-1:-1:-1;;;22106:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22189:16:0;;22181:64;;;;-1:-1:-1;;;22181:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22269:1;22260:6;:10;22252:64;;;;-1:-1:-1;;;22252:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22332:13:0;;;;;;:9;:13;;;;;;;;22331:14;22323:38;;;;;-1:-1:-1;;;22323:38:0;;;;;;;;;;;;-1:-1:-1;;;22323:38:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22377:15:0;;;;;;:9;:15;;;;;;;;22376:16;22368:40;;;;;-1:-1:-1;;;22368:40:0;;;;;;;;;;;;-1:-1:-1;;;22368:40:0;;;;;;;;;;;;;;;22427:7;:5;:7::i;:::-;-1:-1:-1;;;;;22419:15:0;:4;-1:-1:-1;;;;;22419:15:0;;;:32;;;;;22444:7;:5;:7::i;:::-;-1:-1:-1;;;;;22438:13:0;:2;-1:-1:-1;;;;;22438:13:0;;;22419:32;22415:82;;;22461:11;;-1:-1:-1;;;22461:11:0;;;;22453:44;;;;;-1:-1:-1;;;22453:44:0;;;;;;;;;;;;-1:-1:-1;;;22453:44:0;;;;;;;;;;;;;;;22611:4;;22546:23;;-1:-1:-1;;;;;22603:12:0;;;22611:4;;22603:12;;:26;;-1:-1:-1;22625:4:0;;-1:-1:-1;;;;;22619:10:0;;;22625:4;;22619:10;22603:26;22601:29;:86;;;;-1:-1:-1;;;;;;22636:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;22664:22:0;;;;;;:18;:22;;;;;;;;22636:50;22634:53;22601:86;22597:156;;;-1:-1:-1;22734:11:0;;22597:156;22771:4;;-1:-1:-1;;;;;22765:10:0;;;22771:4;;22765:10;22761:104;;;22840:16;;22818:17;;:39;;:21;:39::i;:::-;22800:57;;22761:104;22922:1;22909:10;;:14;:58;;;;;22955:12;22941:10;;22928;;:23;22927:40;22909:58;22905:101;;;-1:-1:-1;;;;;22978:13:0;;;;;;:9;:13;;;;;:20;;-1:-1:-1;;22978:20:0;22994:4;22978:20;;;22905:101;23069:1;23056:10;;:14;:33;;;;;23082:7;:5;:7::i;:::-;-1:-1:-1;;;;;23074:15:0;:4;-1:-1:-1;;;;;23074:15:0;;;23056:33;:78;;;;;23123:10;;23110;;:23;23093:12;:41;;23056:78;:93;;;;-1:-1:-1;23138:11:0;;-1:-1:-1;;;23138:11:0;;;;23056:93;23044:157;;;-1:-1:-1;23184:3:0;23044:157;23221:4;;-1:-1:-1;;;;;23213:12:0;;;23221:4;;23213:12;23209:103;;;23288:15;;23267:16;;:37;;:20;:37::i;:::-;23249:55;;23209:103;23324:10;;-1:-1:-1;;;23324:10:0;;;;23320:106;;;23357:4;;-1:-1:-1;;;;;23349:12:0;;;23357:4;;23349:12;23345:74;;;-1:-1:-1;23408:1:0;23345:74;-1:-1:-1;;;;;23438:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23466:22:0;;;;;;:18;:22;;;;;;;;23438:50;:69;;;;23500:7;:5;:7::i;:::-;-1:-1:-1;;;;;23492:15:0;:4;-1:-1:-1;;;;;23492:15:0;;23438:69;:86;;;;23517:7;:5;:7::i;:::-;-1:-1:-1;;;;;23511:13:0;:2;-1:-1:-1;;;;;23511:13:0;;23438:86;23434:148;;;-1:-1:-1;23573:1:0;23434:148;23608:6;;-1:-1:-1;;;23608:6:0;;;;23607:7;:22;;;;-1:-1:-1;23618:11:0;;-1:-1:-1;;;23618:11:0;;;;23607:22;:36;;;;-1:-1:-1;23639:4:0;;-1:-1:-1;;;;;23633:10:0;;;23639:4;;23633:10;23607:36;23602:433;;;23655:28;23686:24;23704:4;23686:9;:24::i;:::-;23655:55;;23719:21;23743;:19;:21::i;:::-;23719:45;;23802:13;23778:20;:37;;23777:56;;;;-1:-1:-1;23820:13:0;;-1:-1:-1;;;23820:13:0;;;;23777:56;23773:95;;;23846:12;:10;:12::i;:::-;23905:13;23881:20;:37;;23880:57;;;;-1:-1:-1;23924:13:0;;-1:-1:-1;;;23924:13:0;;;;23923:14;23880:57;23876:152;;;23981:14;;23950:68;;;-1:-1:-1;;;23950:68:0;;-1:-1:-1;;;;;23981:14:0;;;23950:68;;;;;;;;;;;23965:4;;23950:30;;:68;;;;;;;;;;;;;;-1:-1:-1;23965:4:0;23950:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23876:152:0;23602:433;;;24043:52;24061:4;24067:2;24071:6;24079:15;24043:17;:52::i;:::-;22010:2091;;;;:::o;1461:198::-;1567:7;1599:12;1591:6;;;;1583:29;;;;-1:-1:-1;;;1583:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1631:5:0;;;1461:198::o;16387:414::-;16684:5;;;;;;;;;;;-1:-1:-1;;;16684:5:0;;;;;16720:7;;;;;;;;;;-1:-1:-1;;;16720:7:0;;;;16511:275;;16534:121;16511:275;;;;16668:23;16511:275;;;;16704:25;16511:275;;;;;;;;;;;16770:4;16511:275;;;;;;;;;;;;;;;;;;;;;;;;;16491:304;;;;;;16387:414::o;1665:222::-;1723:7;1743:6;1739:37;;-1:-1:-1;1767:1:0;1760:8;;1739:37;1796:5;;;1800:1;1796;:5;:1;1816:5;;;;;:10;1808:56;;;;-1:-1:-1;;;1808:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1893:126;1951:7;1974:39;1978:1;1981;1974:39;;;;;;;;;;;;;;;;;:3;:39::i;24107:402::-;17421:6;;-1:-1:-1;;;17421:6:0;;;;:14;;17431:4;17421:14;;17413:58;;;;;-1:-1:-1;;;17413:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17478:6;:13;;-1:-1:-1;;;;17478:13:0;-1:-1:-1;;;17478:13:0;;;24194:17:::1;::::0;17478:13;;24194:21;24190:131:::1;;24244:69;24311:1;24244:62;24293:12;;24244:44;24270:17;;24244:21;:19;:21::i;:69::-;24226:87;;24190:131;24329:20;24352:42;24378:15;24352:21;:19;:21::i;:::-;:25:::0;::::1;:42::i;:::-;24329:65;;24403:30;24420:12;24403:16;:30::i;:::-;24445:16;::::0;-1:-1:-1;;;24445:16:0;::::1;;;24440:64;;24472:24;24480:15;24472:7;:24::i;:::-;-1:-1:-1::0;;17506:6:0;:14;;-1:-1:-1;;;;17506:14:0;;;24107:402::o;27103:504::-;27250:19;27246:356;;27280:41;27294:6;27302:9;27313:7;27280:13;:41::i;:::-;27246:356;;;27344:22;27369:38;27401:5;27369:27;:7;27381:14;27369:11;:27::i;:38::-;27344:63;-1:-1:-1;27416:26:0;27445:27;:7;27344:63;27445:11;:27::i;:::-;27416:56;;27481:52;27495:6;27503:9;27514:18;27481:13;:52::i;:::-;27542;27556:6;27572:4;27579:14;27542:13;:52::i;:::-;27246:356;;27103:504;;;;:::o;2025:280::-;2131:7;2162:12;2155:5;2147:28;;;;-1:-1:-1;;;2147:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2182:9;2198:1;2194;:5;;;;;;;2025:280;-1:-1:-1;;;;;2025:280:0:o;1325:130::-;1383:7;1406:43;1410:1;1413;1406:43;;;;;;;;;;;;;;;;;:3;:43::i;25393:702::-;25527:16;;;25541:1;25527:16;;;25503:21;25527:16;;;;;25503:21;25527:16;;;;;;;;;;-1:-1:-1;25527:16:0;25503:40;;25568:4;25550;25555:1;25550:7;;;;;;;;-1:-1:-1;;;;;25550:23:0;;;:7;;;;;;;;;;:23;;;;25590:8;;:15;;;-1:-1:-1;;;25590:15:0;;;;:8;;;;;:13;;:15;;;;;25550:7;;25590:15;;;;;:8;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25590:15:0;25580:7;;:4;;25585:1;;25580:7;;;;;;-1:-1:-1;;;;;25580:25:0;;;:7;;;;;;;;;:25;25646:8;;25614:55;;25631:4;;25646:8;25657:11;25614:8;:55::i;:::-;25702:8;;:41;;;-1:-1:-1;;;25702:41:0;;;;;;;;;;;;;;;;;;;;;;25676:23;;-1:-1:-1;;;;;25702:8:0;;:22;;25725:11;;25738:4;;25702:41;;;;;;;;;;;;;;;:8;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25702:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25702:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25702:41:0;;;;;;;;;;;;-1:-1:-1;25702:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25676:67;;25750:17;25770:32;25784:17;25798:2;25784:6;25791:1;25784:9;;;;;;;;;;;;;;:13;;:17;;;;:::i;:::-;25770:6;25777:1;25770:9;;;;;;;;;;;;;;:13;;:32;;;;:::i;:::-;25833:8;;:207;;-1:-1:-1;;;25833:207:0;;;;;;;;;;;;;;25988:4;25833:207;;;;;;26018:15;25833:207;;;;;;;;;;;;;;;;;;;;;25750:52;;-1:-1:-1;;;;;;25833:8:0;;;;:59;;25901:11;;25750:52;;25967:4;;25988;26018:15;25833:207;;;;;;;;;;;;;;;:8;:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26084:4;26054:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;26054:35:0;;;;;;;;;;;;-1:-1:-1;26071:11:0;;-1:-1:-1;26054:35:0;;-1:-1:-1;26054:35:0;;-1:-1:-1;;26054:35:0;25393:702;;;;:::o;24515:872::-;24661:17;;24592:21;;24572:17;;24644:42;;24661:24;;24683:1;24661:21;:24::i;:::-;24644:12;;;:16;:42::i;:::-;24699:12;;24622:64;;-1:-1:-1;24699:16:0;24695:687;;24726:26;24755:56;24809:1;24755:49;24792:11;24755:32;24769:17;;24755:9;:13;;:32;;;;:::i;:56::-;24726:85;;24822:25;24850:48;24886:11;24850:31;24864:16;;24850:9;:13;;:31;;;;:::i;:48::-;24822:76;-1:-1:-1;24958:13:0;;24954:156;;24984:14;;:42;;-1:-1:-1;;;;;24984:14:0;;;;:42;;;;;25008:17;;24984:14;:42;:14;:42;25008:17;24984:14;:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25066:14:0;;25042:58;;;;;;;;-1:-1:-1;;;;;25066:14:0;;;;25059:4;;-1:-1:-1;;;;;;;;;;;25042:58:0;;;;;;;;;24954:156;25122:19;;25118:95;;25154:49;25167:15;25184:18;25154:12;:49::i;:::-;24695:687;;;;;25239:13;;25235:140;;25265:14;;:34;;-1:-1:-1;;;;;25265:14:0;;;;:34;;;;;25289:9;;25265:14;:34;:14;:34;25289:9;25265:14;:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25339:14:0;;25315:50;;;;;;;;-1:-1:-1;;;;;25339:14:0;;;;25332:4;;-1:-1:-1;;;;;;;;;;;25315:50:0;;;;;;;;;25235:140;24515:872;;;:::o;26554:543::-;-1:-1:-1;;;;;26680:20:0;;26672:70;;;;-1:-1:-1;;;26672:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26757:23:0;;26749:71;;;;-1:-1:-1;;;26749:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26853:17:0;;26829:21;26853:17;;;:9;:17;;;;;;26885:23;;;;26877:74;;;;-1:-1:-1;;;26877:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26978:25;:13;26996:6;26978:17;:25::i;:::-;-1:-1:-1;;;;;26958:17:0;;;;;;;:9;:17;;;;;;;;:45;;;;27012:20;;;;;;;;;;:30;;;;;;27056:35;;;;;;;27012:20;;26958:17;;-1:-1:-1;;;;;;;;;;;27056:35:0;;;;;;;26554:543;;;;:::o;26101:447::-;26273:8;;26241:55;;26258:4;;-1:-1:-1;;;;;26273:8:0;26284:11;26241:8;:55::i;:::-;26331:8;;:211;;;-1:-1:-1;;;26331:211:0;;26390:4;26331:211;;;;;;;;;;;;:8;:211;;;;;;;;;;;;;;26520:15;26331:211;;;;;;-1:-1:-1;;;;;26331:8:0;;;;:24;;26363:9;;26331:211;;;;;;;;;;;;;;26363:9;26331:8;:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Metadata Hash
ipfs://a3eee3ba3569150dad13daf7ec2ed2c6b6a39e7a2c2b7161f69289959bf7347e