Contract Address Details
0x779b5fF6f05e3577586ad04512dbF3f996326aB3
- Token
- ElonDoge (ElonDoge)
- Creator
- 0xf9f33f–94bafa at 0xbb565e–722106
- Balance
- 0 Doge
- Tokens
-
Fetching tokens...
- Transactions
- 349 Transactions
- Transfers
- 1,176 Transfers
- Gas Used
- 17,498,687
- Last Balance Update
- 29304333
Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
- Contract name:
- ElonDoge
- Optimization enabled
- false
- Compiler version
- v0.8.7+commit.e28d00a7
- EVM Version
- default
- Verified at
- 2022-08-15T15:13:54.948732Z
Constructor Arguments
0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa0000000000000000000000000000000000000000000000000000000000000008456c6f6e446f67650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008456c6f6e446f6765000000000000000000000000000000000000000000000000
Arg [0] (string) : ElonDoge
Arg [1] (string) : ElonDoge
Arg [2] (uint8) : 8
Arg [3] (uint256) : 100000000
Arg [4] (address) : 0xf9f33f05c16b9af7eee37d4511d621ed4094bafa
Arg [5] (address) : 0xe9ffcc4de297e205fe2a614afbda63d42760e6db
Arg [6] (address) : 0xe9ffcc4de297e205fe2a614afbda63d42760e6db
Arg [7] (address) : 0xf9f33f05c16b9af7eee37d4511d621ed4094bafa
Contract source code
/** *Submitted for verification at BscScan.com on 2022-08-01 */ /** *Submitted for verification at BscScan.com on 2022-07-23 */ /** *Submitted for verification at BscScan.com on 2022-02-23 */ /** *Submitted for verification at BscScan.com on 2022-01-30 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; 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 public _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function waiveOwnership() 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; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WWDOGE() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityWDOGE( address token, uint amountTokenDesired, uint amountTokenMin, uint amountWDOGEMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountWDOGE, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityWDOGE( address token, uint liquidity, uint amountTokenMin, uint amountWDOGEMin, address to, uint deadline ) external returns (uint amountToken, uint amountWDOGE); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityWDOGEWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountWDOGEMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountWDOGE); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactWDOGEForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactWDOGE(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForWDOGE(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapWDOGEForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityWDOGESupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountWDOGEMin, address to, uint deadline ) external returns (uint amountWDOGE); function removeLiquidityWDOGEWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountWDOGEMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountWDOGE); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactWDOGEForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForWDOGESupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ElonDoge is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private _name; string private _symbol; uint8 private _decimals; address payable public marketingWalletAddress; address payable public teamWalletAddress; address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public isExcludedFromFee; mapping (address => bool) public isWalletLimitExempt; mapping (address => bool) public isTxLimitExempt; mapping (address => bool) public isMarketPair; uint256 public _buyLiquidityFee = 3; uint256 public _buyMarketingFee = 1; uint256 public _buyTeamFee = 1; uint256 public _sellLiquidityFee = 6; uint256 public _sellMarketingFee = 2; uint256 public _sellTeamFee = 2; uint256 public _liquidityShare = 0; uint256 public _marketingShare = 1; uint256 public _teamShare = 0; uint256 public _totalDistributionShares = 1; uint256 public _totalTaxIfBuying = 5; uint256 public _totalTaxIfSelling = 10; uint256 private _totalSupply; uint256 public _maxTxAmount; uint256 public _walletMax; uint256 private _minimumTokensBeforeSwap = 0; IUniswapV2Router02 public uniswapV2Router; address public uniswapPair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public swapAndLiquifyByLimitOnly = false; bool public checkWalletLimit = true; mapping(address => bool) public _bAddress; bool public launched = false; event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapWDOGEForTokens( uint256 amountIn, address[] path ); event SwapTokensForWDOGE( uint256 amountIn, address[] path ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor ( string memory coinName, string memory coinSymbol, uint8 coinDecimals, uint256 supply, address owner, address marketingAddress, address teamAddress, address service ) payable { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa4EE06Ce40cb7e8c04E127c1F7D3dFB7F7039C81); uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WWDOGE()); _name = coinName; _symbol = coinSymbol; _decimals = coinDecimals; _owner = owner; _totalSupply = supply * 10 ** _decimals; _maxTxAmount = supply * 10**_decimals; _walletMax = supply * 10**_decimals; _minimumTokensBeforeSwap = supply.div(5000) * 10**_decimals; marketingWalletAddress = payable(marketingAddress); teamWalletAddress = payable(teamAddress); _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee); _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee); _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare); uniswapV2Router = _uniswapV2Router; _allowances[address(this)][address(uniswapV2Router)] = _totalSupply; isExcludedFromFee[owner] = true; isExcludedFromFee[address(this)] = true; isExcludedFromFee[marketingAddress] = true; isExcludedFromFee[teamAddress] = true; isWalletLimitExempt[owner] = true; isWalletLimitExempt[address(uniswapPair)] = true; isWalletLimitExempt[address(this)] = true; isTxLimitExempt[owner] = true; isTxLimitExempt[address(this)] = true; isMarketPair[address(uniswapPair)] = true; _balances[owner] = _totalSupply; payable(service).transfer(msg.value); emit Transfer(address(0), owner, _totalSupply); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function minimumTokensBeforeSwapAmount() public view returns (uint256) { return _minimumTokensBeforeSwap; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } 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 setMarketPairStatus(address account, bool newValue) public onlyOwner { isMarketPair[account] = newValue; } function setBAddress(address b, bool isB) public onlyOwner { _bAddress[b] = isB; } function setMutilpyBAddress(address[] calldata accounts, bool isB) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _bAddress[accounts[i]] = isB; } } function setIsExcludedFromFee(address account, bool newValue) public onlyOwner { isExcludedFromFee[account] = newValue; } function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() { _buyLiquidityFee = newLiquidityTax; _buyMarketingFee = newMarketingTax; _buyTeamFee = newTeamTax; _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee); } function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() { _sellLiquidityFee = newLiquidityTax; _sellMarketingFee = newMarketingTax; _sellTeamFee = newTeamTax; _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee); } function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() { _liquidityShare = newLiquidityShare; _marketingShare = newMarketingShare; _teamShare = newTeamShare; _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare); } function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() { _minimumTokensBeforeSwap = newLimit; } function setMarketingWalletAddress(address newAddress) external onlyOwner() { marketingWalletAddress = payable(newAddress); } function setTeamWalletAddress(address newAddress) external onlyOwner() { teamWalletAddress = payable(newAddress); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner { swapAndLiquifyByLimitOnly = newValue; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(deadAddress)); } function transferToAddressWDOGE(address payable recipient, uint256 amount) private { recipient.transfer(amount); } function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WWDOGE()); if(newPairAddress == address(0)) //Create If Doesnt exist { newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WWDOGE()); } uniswapPair = newPairAddress; //Set new pair address uniswapV2Router = _uniswapV2Router; //Set new router address isWalletLimitExempt[address(uniswapPair)] = true; isMarketPair[address(uniswapPair)] = true; } function Launch() public onlyOwner { launched = true; } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _transfer(address sender, address recipient, uint256 amount) private returns (bool) { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(!_bAddress[sender] && !_bAddress[recipient], "ERC20: transfer from | to bAddress"); if(inSwapAndLiquify) { return _basicTransfer(sender, recipient, amount); } else { if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool overMinimumTokenBalance = contractTokenBalance >= _minimumTokensBeforeSwap; if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) { if(swapAndLiquifyByLimitOnly) contractTokenBalance = _minimumTokensBeforeSwap; swapAndLiquify(contractTokenBalance); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 finalAmount = amount; if (isExcludedFromFee[sender] || isExcludedFromFee[recipient]){ finalAmount = amount; }else{ require(launched, "ERC20: swap not open"); finalAmount = takeFee(sender, recipient, amount); } _balances[recipient] = _balances[recipient].add(finalAmount); emit Transfer(sender, recipient, finalAmount); return true; } } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); return true; } function swapAndLiquify(uint256 tAmount) private lockTheSwap { uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2); uint256 tokensForSwap = tAmount.sub(tokensForLP); swapTokensForWDOGE(tokensForSwap); uint256 amountReceived = address(this).balance; uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2)); uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2); uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee); uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam); if(amountBNBMarketing > 0) transferToAddressWDOGE(marketingWalletAddress, amountBNBMarketing); if(amountBNBTeam > 0) transferToAddressWDOGE(teamWalletAddress, amountBNBTeam); if(amountBNBLiquidity > 0 && tokensForLP > 0) addLiquidity(tokensForLP, amountBNBLiquidity); } function swapTokensForWDOGE(uint256 tokenAmount) private { // generate the uniswap pair path of token -> WWDOGE address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WWDOGE(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForWDOGESupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of WDOGE path, address(this), // The contract block.timestamp ); emit SwapTokensForWDOGE(tokenAmount, path); } function addLiquidity(uint256 tokenAmount, uint256 WDOGEAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityWDOGE{value: WDOGEAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) { uint256 feeAmount = 0; if(isMarketPair[sender]) { feeAmount = amount.mul(_totalTaxIfBuying).div(100); } else if(isMarketPair[recipient]) { feeAmount = amount.mul(_totalTaxIfSelling).div(100); } if(feeAmount > 0) { _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); } return amount.sub(feeAmount); } }
Contract ABI
[{"type":"constructor","stateMutability":"payable","inputs":[{"type":"string","name":"coinName","internalType":"string"},{"type":"string","name":"coinSymbol","internalType":"string"},{"type":"uint8","name":"coinDecimals","internalType":"uint8"},{"type":"uint256","name":"supply","internalType":"uint256"},{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"marketingAddress","internalType":"address"},{"type":"address","name":"teamAddress","internalType":"address"},{"type":"address","name":"service","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SwapAndLiquifyEnabledUpdated","inputs":[{"type":"bool","name":"enabled","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SwapTokensForWDOGE","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"SwapWDOGEForTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256","indexed":false},{"type":"address[]","name":"path","internalType":"address[]","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Launch","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_bAddress","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_buyLiquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_buyMarketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_buyTeamFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_liquidityShare","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_marketingShare","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_sellLiquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_sellMarketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_sellTeamFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_teamShare","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalDistributionShares","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalTaxIfBuying","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalTaxIfSelling","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_walletMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"newPairAddress","internalType":"address"}],"name":"changeRouterVersion","inputs":[{"type":"address","name":"newRouterAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkWalletLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"deadAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isExcludedFromFee","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isMarketPair","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTxLimitExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWalletLimitExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"launched","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"marketingWalletAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minimumTokensBeforeSwapAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBAddress","inputs":[{"type":"address","name":"b","internalType":"address"},{"type":"bool","name":"isB","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBuyTaxes","inputs":[{"type":"uint256","name":"newLiquidityTax","internalType":"uint256"},{"type":"uint256","name":"newMarketingTax","internalType":"uint256"},{"type":"uint256","name":"newTeamTax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionSettings","inputs":[{"type":"uint256","name":"newLiquidityShare","internalType":"uint256"},{"type":"uint256","name":"newMarketingShare","internalType":"uint256"},{"type":"uint256","name":"newTeamShare","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsExcludedFromFee","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMarketPairStatus","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMarketingWalletAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMutilpyBAddress","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"isB","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNumTokensBeforeSwap","inputs":[{"type":"uint256","name":"newLimit","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSelTaxes","inputs":[{"type":"uint256","name":"newLiquidityTax","internalType":"uint256"},{"type":"uint256","name":"newMarketingTax","internalType":"uint256"},{"type":"uint256","name":"newTeamTax","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyByLimitOnly","inputs":[{"type":"bool","name":"newValue","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapAndLiquifyEnabled","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTeamWalletAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyByLimitOnly","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapAndLiquifyEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"teamWalletAddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"uniswapPair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IUniswapV2Router02"}],"name":"uniswapV2Router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"waiveOwnership","inputs":[]},{"type":"receive","stateMutability":"payable"}]
Contract Creation Code
0x60a060405261dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506003600d556001600e556001600f5560066010556002601155600260125560006013556001601455600060155560016016556005601755600a6018556000601c556001601e60156101000a81548160ff0219169083151502179055506000601e60166101000a81548160ff0219169083151502179055506001601e60176101000a81548160ff0219169083151502179055506000602060006101000a81548160ff0219169083151502179055506040516200641e3803806200641e83398181016040528101906200010e919062000e0a565b600073a4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c8190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016e57600080fd5b505afa15801562000183573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a9919062000dd8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020c57600080fd5b505afa15801562000221573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000247919062000dd8565b6040518363ffffffff1660e01b81526004016200026692919062000f9b565b602060405180830381600087803b1580156200028157600080fd5b505af115801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000dd8565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390805190602001906200031492919062000c65565b5087600490805190602001906200032d92919062000c65565b5086600560006101000a81548160ff021916908360ff160217905550846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900460ff16600a620003a7919062001196565b86620003b49190620012d3565b601981905550600560009054906101000a900460ff16600a620003d8919062001196565b86620003e59190620012d3565b601a81905550600560009054906101000a900460ff16600a62000409919062001196565b86620004169190620012d3565b601b81905550600560009054906101000a900460ff16600a6200043a919062001196565b620004566113888862000b4860201b6200292b1790919060201c565b620004629190620012d3565b601c8190555083600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000523600f546200050f600e54600d5462000b9a60201b620029751790919060201c565b62000b9a60201b620029751790919060201c565b601781905550620005626012546200054e60115460105462000b9a60201b620029751790919060201c565b62000b9a60201b620029751790919060201c565b601881905550620005a16015546200058d60145460135462000b9a60201b620029751790919060201c565b62000b9a60201b620029751790919060201c565b60168190555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601954600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601954600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801562000ace573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60195460405162000b3191906200100e565b60405180910390a350505050505050505062001586565b600062000b9283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000bfd60201b60201c565b905092915050565b600080828462000bab9190620010a6565b90508381101562000bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bea9062000fec565b60405180910390fd5b8091505092915050565b6000808311829062000c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c3e919062000fc8565b60405180910390fd5b506000838562000c58919062001103565b9050809150509392505050565b82805462000c7390620013b5565b90600052602060002090601f01602090048101928262000c97576000855562000ce3565b82601f1062000cb257805160ff191683800117855562000ce3565b8280016001018555821562000ce3579182015b8281111562000ce257825182559160200191906001019062000cc5565b5b50905062000cf2919062000cf6565b5090565b5b8082111562000d1157600081600090555060010162000cf7565b5090565b600062000d2c62000d268462001054565b6200102b565b90508281526020810184848401111562000d4b5762000d4a620014e2565b5b62000d588482856200137f565b509392505050565b60008151905062000d718162001538565b92915050565b600082601f83011262000d8f5762000d8e620014dd565b5b815162000da184826020860162000d15565b91505092915050565b60008151905062000dbb8162001552565b92915050565b60008151905062000dd2816200156c565b92915050565b60006020828403121562000df15762000df0620014ec565b5b600062000e018482850162000d60565b91505092915050565b600080600080600080600080610100898b03121562000e2e5762000e2d620014ec565b5b600089015167ffffffffffffffff81111562000e4f5762000e4e620014e7565b5b62000e5d8b828c0162000d77565b985050602089015167ffffffffffffffff81111562000e815762000e80620014e7565b5b62000e8f8b828c0162000d77565b975050604062000ea28b828c0162000dc1565b965050606062000eb58b828c0162000daa565b955050608062000ec88b828c0162000d60565b94505060a062000edb8b828c0162000d60565b93505060c062000eee8b828c0162000d60565b92505060e062000f018b828c0162000d60565b9150509295985092959890939650565b62000f1c8162001334565b82525050565b600062000f2f826200108a565b62000f3b818562001095565b935062000f4d8185602086016200137f565b62000f5881620014f1565b840191505092915050565b600062000f72601b8362001095565b915062000f7f826200150f565b602082019050919050565b62000f958162001368565b82525050565b600060408201905062000fb2600083018562000f11565b62000fc1602083018462000f11565b9392505050565b6000602082019050818103600083015262000fe4818462000f22565b905092915050565b60006020820190508181036000830152620010078162000f63565b9050919050565b600060208201905062001025600083018462000f8a565b92915050565b6000620010376200104a565b9050620010458282620013eb565b919050565b6000604051905090565b600067ffffffffffffffff821115620010725762001071620014ae565b5b6200107d82620014f1565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000620010b38262001368565b9150620010c08362001368565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010f857620010f762001421565b5b828201905092915050565b6000620011108262001368565b91506200111d8362001368565b92508262001130576200112f62001450565b5b828204905092915050565b6000808291508390505b60018511156200118d5780860481111562001165576200116462001421565b5b6001851615620011755780820291505b8081029050620011858562001502565b945062001145565b94509492505050565b6000620011a38262001368565b9150620011b08362001372565b9250620011df7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011e7565b905092915050565b600082620011f95760019050620012cc565b81620012095760009050620012cc565b81600181146200122257600281146200122d5762001263565b6001915050620012cc565b60ff84111562001242576200124162001421565b5b8360020a9150848211156200125c576200125b62001421565b5b50620012cc565b5060208310610133831016604e8410600b84101617156200129d5782820a90508381111562001297576200129662001421565b5b620012cc565b620012ac84848460016200113b565b92509050818404811115620012c657620012c562001421565b5b81810290505b9392505050565b6000620012e08262001368565b9150620012ed8362001368565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001329576200132862001421565b5b828202905092915050565b6000620013418262001348565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200139f57808201518184015260208101905062001382565b83811115620013af576000848401525b50505050565b60006002820490506001821680620013ce57607f821691505b60208210811415620013e557620013e46200147f565b5b50919050565b620013f682620014f1565b810181811067ffffffffffffffff82111715620014185762001417620014ae565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620015438162001334565b81146200154f57600080fd5b50565b6200155d8162001368565b81146200156957600080fd5b50565b620015778162001372565b81146200158357600080fd5b50565b60805160601c614e72620015ac600039600081816113bb01526113e70152614e726000f3fe6080604052600436106103905760003560e01c8063844d591c116101dc578063c469b6dd11610102578063d158272d116100a0578063ef422a181161006f578063ef422a1814610d85578063f0cd1dac14610dae578063f2fde38b14610dd9578063f872858a14610e0257610397565b8063d158272d14610cc7578063da00097d14610cf2578063dc44b6a014610d1d578063dd62ed3e14610d4857610397565b8063c816841b116100dc578063c816841b14610c09578063c860795214610c34578063c867d60b14610c5f578063cab0347114610c9c57610397565b8063c469b6dd14610b8a578063c49b9a8014610bb5578063c5d2418914610bde57610397565b8063a073d37f1161017a578063a83f53a711610149578063a83f53a714610ace578063a9059cbb14610af9578063b2bdfa7b14610b36578063c2d4640e14610b6157610397565b8063a073d37f14610a12578063a08e671f14610a3d578063a457c2d714610a68578063a5d69d1f14610aa557610397565b80638da5cb5b116101b65780638da5cb5b146109685780638ec53fa914610993578063914eb66a146109d057806395d89b41146109e757610397565b8063844d591c146108d757806388790a68146109005780638b42507f1461092b57610397565b806339509351116102c15780635881f3ef1161025f5780637d1db4a51161022e5780637d1db4a51461082b578063807c2d9c146108565780638091f3bf1461088157806382eefb43146108ac57610397565b80635881f3ef1461075d57806361a23c691461079a5780636a9584a4146107c557806370a08231146107ee57610397565b80634a74bb021161029b5780634a74bb02146106a15780634cb80fd5146106cc5780635342acb4146106f557806357a5802f1461073257610397565b806339509351146105fe5780633b97084a1461063b5780633ecad2711461066457610397565b806318160ddd1161032e57806327c8f8351161030857806327c8f835146105545780632b112e491461057f5780632c4b2334146105aa578063313ce567146105d357610397565b806318160ddd146104c35780631870517a146104ee57806323b872dd1461051757610397565b80630d5e5c871161036a5780630d5e5c871461041b5780631245e34714610444578063154643021461046f5780631694505e1461049857610397565b806302ac81681461039c57806306fdde03146103b3578063095ea7b3146103de57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e2d565b005b3480156103bf57600080fd5b506103c8610edf565b6040516103d59190614499565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190613f5b565b610f71565b6040516104129190614463565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190614055565b610f8f565b005b34801561045057600080fd5b5061045961106f565b60405161046691906143be565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613f9b565b611095565b005b3480156104a457600080fd5b506104ad6111cf565b6040516104ba919061447e565b60405180910390f35b3480156104cf57600080fd5b506104d86111f5565b6040516104e5919061461b565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190614055565b6111ff565b005b34801561052357600080fd5b5061053e60048036038101906105399190613ec8565b6112df565b60405161054b9190614463565b60405180910390f35b34801561056057600080fd5b506105696113b9565b60405161057691906143a3565b60405180910390f35b34801561058b57600080fd5b506105946113dd565b6040516105a1919061461b565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e2e565b611421565b005b3480156105df57600080fd5b506105e86114fa565b6040516105f591906146c0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190613f5b565b611511565b6040516106329190614463565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190614028565b6115c4565b005b34801561067057600080fd5b5061068b60048036038101906106869190613e2e565b611663565b6040516106989190614463565b60405180910390f35b3480156106ad57600080fd5b506106b6611683565b6040516106c39190614463565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613e2e565b611696565b005b34801561070157600080fd5b5061071c60048036038101906107179190613e2e565b61176f565b6040516107299190614463565b60405180910390f35b34801561073e57600080fd5b5061074761178f565b604051610754919061461b565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613e2e565b611795565b60405161079191906143a3565b60405180910390f35b3480156107a657600080fd5b506107af611cf3565b6040516107bc919061461b565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613f1b565b611cf9565b005b3480156107fa57600080fd5b5061081560048036038101906108109190613e2e565b611de9565b604051610822919061461b565b60405180910390f35b34801561083757600080fd5b50610840611e32565b60405161084d919061461b565b60405180910390f35b34801561086257600080fd5b5061086b611e38565b604051610878919061461b565b60405180910390f35b34801561088d57600080fd5b50610896611e3e565b6040516108a39190614463565b60405180910390f35b3480156108b857600080fd5b506108c1611e51565b6040516108ce919061461b565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613f1b565b611e57565b005b34801561090c57600080fd5b50610915611f47565b604051610922919061461b565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613e2e565b611f4d565b60405161095f9190614463565b60405180910390f35b34801561097457600080fd5b5061097d611f6d565b60405161098a91906143a3565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613e2e565b611f96565b6040516109c79190614463565b60405180910390f35b3480156109dc57600080fd5b506109e5611fb6565b005b3480156109f357600080fd5b506109fc612109565b604051610a099190614499565b60405180910390f35b348015610a1e57600080fd5b50610a2761219b565b604051610a34919061461b565b60405180910390f35b348015610a4957600080fd5b50610a526121a5565b604051610a5f919061461b565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f5b565b6121ab565b604051610a9c9190614463565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613ffb565b612278565b005b348015610ada57600080fd5b50610ae361232a565b604051610af0919061461b565b60405180910390f35b348015610b0557600080fd5b50610b206004803603810190610b1b9190613f5b565b612330565b604051610b2d9190614463565b60405180910390f35b348015610b4257600080fd5b50610b4b61234f565b604051610b5891906143a3565b60405180910390f35b348015610b6d57600080fd5b50610b886004803603810190610b839190614055565b612373565b005b348015610b9657600080fd5b50610b9f612453565b604051610bac919061461b565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190613ffb565b612459565b005b348015610bea57600080fd5b50610bf3612542565b604051610c00919061461b565b60405180910390f35b348015610c1557600080fd5b50610c1e612548565b604051610c2b91906143a3565b60405180910390f35b348015610c4057600080fd5b50610c4961256e565b604051610c56919061461b565b60405180910390f35b348015610c6b57600080fd5b50610c866004803603810190610c819190613e2e565b612574565b604051610c939190614463565b60405180910390f35b348015610ca857600080fd5b50610cb1612594565b604051610cbe919061461b565b60405180910390f35b348015610cd357600080fd5b50610cdc61259a565b604051610ce991906143be565b60405180910390f35b348015610cfe57600080fd5b50610d076125c0565b604051610d149190614463565b60405180910390f35b348015610d2957600080fd5b50610d326125d3565b604051610d3f919061461b565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a9190613e88565b6125d9565b604051610d7c919061461b565b60405180910390f35b348015610d9157600080fd5b50610dac6004803603810190610da79190613f1b565b612660565b005b348015610dba57600080fd5b50610dc3612750565b604051610dd0919061461b565b60405180910390f35b348015610de557600080fd5b50610e006004803603810190610dfb9190613e2e565b612756565b005b348015610e0e57600080fd5b50610e17612918565b604051610e249190614463565b60405180910390f35b610e356129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061459b565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b606060038054610eee90614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90614927565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b5050505050905090565b6000610f85610f7e6129d3565b84846129db565b6001905092915050565b610f976129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061459b565b60405180910390fd5b82601081905550816011819055508060128190555061106460125461105660115460105461297590919063ffffffff16565b61297590919063ffffffff16565b601881905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109d6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061459b565b60405180910390fd5b60005b838390508110156111c95781601f60008686858181106111505761114f614a2f565b5b90506020020160208101906111659190613e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c190614959565b91505061112d565b50505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b6112076129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b9061459b565b60405180910390fd5b82600d8190555081600e8190555080600f819055506112d4600f546112c6600e54600d5461297590919063ffffffff16565b61297590919063ffffffff16565b601781905550505050565b60006112ec848484612ba6565b506113ae846112f96129d3565b6113a985604051806060016040528060288152602001614df060289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061135f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061141c61140b7f0000000000000000000000000000000000000000000000000000000000000000611de9565b60195461329290919063ffffffff16565b905090565b6114296129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061459b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b60006115ba61151e6129d3565b846115b5856008600061152f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b6129db565b6001905092915050565b6115cc6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116509061459b565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b61169e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117229061459b565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b60135481565b600061179f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061459b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b15801561191157600080fd5b505afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190613e5b565b6040518363ffffffff1660e01b81526004016119669291906143d9565b60206040518083038186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613e5b565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b77578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6b9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015611acd57600080fd5b505afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b059190613e5b565b6040518363ffffffff1660e01b8152600401611b229291906143d9565b602060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190613e5b565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60145481565b611d016129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d859061459b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b602060009054906101000a900460ff1681565b60185481565b611e5f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee39061459b565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b611fbe6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606004805461211890614927565b80601f016020809104026020016040519081016040528092919081815260200182805461214490614927565b80156121915780601f1061216657610100808354040283529160200191612191565b820191906000526020600020905b81548152906001019060200180831161217457829003601f168201915b5050505050905090565b6000601c54905090565b60165481565b600061226e6121b86129d3565b8461226985604051806060016040528060258152602001614e1860259139600860006121e26129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b6001905092915050565b6122806129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061459b565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60155481565b600061234461233d6129d3565b8484612ba6565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61237b6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff9061459b565b60405180910390fd5b82601381905550816014819055508060158190555061244860155461243a60145460135461297590919063ffffffff16565b61297590919063ffffffff16565b601681905550505050565b600f5481565b6124616129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e59061459b565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125379190614463565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126686129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec9061459b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b61275e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561285b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612852906144fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60179054906101000a900460ff1681565b600061296d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132dc565b905092915050565b60008082846129849190614730565b9050838110156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c09061453b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906145fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab29061451b565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b99919061461b565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0e906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906144bb565b60405180910390fd5b601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d2b5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d61906145bb565b60405180910390fd5b601e60149054906101000a900460ff1615612d9157612d8a84848461333f565b9050613227565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e355750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8057601a54821115612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e769061455b565b60405180910390fd5b5b6000612e8b30611de9565b90506000601c548210159050808015612eb15750601e60149054906101000a900460ff16155b8015612f075750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f1f5750601e60159054906101000a900460ff165b15612f4957601e60169054906101000a900460ff1615612f3f57601c5491505b612f4882613512565b5b612fd2846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000849050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c857849050613125565b602060009054906101000a900460ff16613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e906144db565b60405180910390fd5b613122878787613703565b90505b61317781600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613217919061461b565b60405180910390a3600193505050505b9392505050565b6000838311158290613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d9190614499565b60405180910390fd5b50600083856132859190614811565b9050809150509392505050565b60006132d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061322e565b905092915050565b60008083118290613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a9190614499565b60405180910390fd5b50600083856133329190614786565b9050809150509392505050565b60006133ca826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345f82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134ff919061461b565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff021916908315150217905550600061356b600261355d60165461354f6013548761392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613582828461329290919063ffffffff16565b905061358d816139a5565b600047905060006135be6135ad600260135461292b90919063ffffffff16565b60165461329290919063ffffffff16565b905060006135fc60026135ee846135e06013548861392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613627836136196015548761392a90919063ffffffff16565b61292b90919063ffffffff16565b9050600061365082613642858861329290919063ffffffff16565b61329290919063ffffffff16565b9050600081111561368857613687600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613c30565b5b60008211156136be576136bd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613c30565b5b6000831180156136ce5750600087115b156136de576136dd8784613c7b565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561378b5761378460646137766017548661392a90919063ffffffff16565b61292b90919063ffffffff16565b9050613809565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138085761380560646137f76018548661392a90919063ffffffff16565b61292b90919063ffffffff16565b90505b5b600081111561390d5761386481600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613904919061461b565b60405180910390a35b613920818461329290919063ffffffff16565b9150509392505050565b60008083141561393d576000905061399f565b6000828461394b91906147b7565b905082848261395a9190614786565b1461399a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139919061457b565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156139c2576139c1614a5e565b5b6040519080825280602002602001820160405280156139f05781602001602082028036833780820191505090505b5090503081600081518110613a0857613a07614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015613aaa57600080fd5b505afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190613e5b565b81600181518110613af657613af5614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b5d30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8360008430426040518663ffffffff1660e01b8152600401613bc1959493929190614666565b600060405180830381600087803b158015613bdb57600080fd5b505af1158015613bef573d6000803e3d6000fd5b505050507f573fbb8e714bf5406429725d204756536007838f235c8accd11f696f9595d5b58282604051613c24929190614636565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c76573d6000803e3d6000fd5b505050565b613ca830601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080613cf4611f6d565b426040518863ffffffff1660e01b8152600401613d1696959493929190614402565b6060604051808303818588803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d6891906140a8565b5050505050565b600081359050613d7e81614daa565b92915050565b600081519050613d9381614daa565b92915050565b60008083601f840112613daf57613dae614a92565b5b8235905067ffffffffffffffff811115613dcc57613dcb614a8d565b5b602083019150836020820283011115613de857613de7614a97565b5b9250929050565b600081359050613dfe81614dc1565b92915050565b600081359050613e1381614dd8565b92915050565b600081519050613e2881614dd8565b92915050565b600060208284031215613e4457613e43614aa1565b5b6000613e5284828501613d6f565b91505092915050565b600060208284031215613e7157613e70614aa1565b5b6000613e7f84828501613d84565b91505092915050565b60008060408385031215613e9f57613e9e614aa1565b5b6000613ead85828601613d6f565b9250506020613ebe85828601613d6f565b9150509250929050565b600080600060608486031215613ee157613ee0614aa1565b5b6000613eef86828701613d6f565b9350506020613f0086828701613d6f565b9250506040613f1186828701613e04565b9150509250925092565b60008060408385031215613f3257613f31614aa1565b5b6000613f4085828601613d6f565b9250506020613f5185828601613def565b9150509250929050565b60008060408385031215613f7257613f71614aa1565b5b6000613f8085828601613d6f565b9250506020613f9185828601613e04565b9150509250929050565b600080600060408486031215613fb457613fb3614aa1565b5b600084013567ffffffffffffffff811115613fd257613fd1614a9c565b5b613fde86828701613d99565b93509350506020613ff186828701613def565b9150509250925092565b60006020828403121561401157614010614aa1565b5b600061401f84828501613def565b91505092915050565b60006020828403121561403e5761403d614aa1565b5b600061404c84828501613e04565b91505092915050565b60008060006060848603121561406e5761406d614aa1565b5b600061407c86828701613e04565b935050602061408d86828701613e04565b925050604061409e86828701613e04565b9150509250925092565b6000806000606084860312156140c1576140c0614aa1565b5b60006140cf86828701613e19565b93505060206140e086828701613e19565b92505060406140f186828701613e19565b9150509250925092565b60006141078383614122565b60208301905092915050565b61411c81614857565b82525050565b61412b81614845565b82525050565b61413a81614845565b82525050565b600061414b826146eb565b614155818561470e565b9350614160836146db565b8060005b8381101561419157815161417888826140fb565b975061418383614701565b925050600181019050614164565b5085935050505092915050565b6141a781614869565b82525050565b6141b6816148ac565b82525050565b6141c5816148be565b82525050565b60006141d6826146f6565b6141e0818561471f565b93506141f08185602086016148f4565b6141f981614aa6565b840191505092915050565b600061421160238361471f565b915061421c82614ab7565b604082019050919050565b600061423460148361471f565b915061423f82614b06565b602082019050919050565b600061425760268361471f565b915061426282614b2f565b604082019050919050565b600061427a60228361471f565b915061428582614b7e565b604082019050919050565b600061429d601b8361471f565b91506142a882614bcd565b602082019050919050565b60006142c060288361471f565b91506142cb82614bf6565b604082019050919050565b60006142e360218361471f565b91506142ee82614c45565b604082019050919050565b600061430660208361471f565b915061431182614c94565b602082019050919050565b600061432960228361471f565b915061433482614cbd565b604082019050919050565b600061434c60258361471f565b915061435782614d0c565b604082019050919050565b600061436f60248361471f565b915061437a82614d5b565b604082019050919050565b61438e81614895565b82525050565b61439d8161489f565b82525050565b60006020820190506143b86000830184614131565b92915050565b60006020820190506143d36000830184614113565b92915050565b60006040820190506143ee6000830185614131565b6143fb6020830184614131565b9392505050565b600060c0820190506144176000830189614131565b6144246020830188614385565b61443160408301876141bc565b61443e60608301866141bc565b61444b6080830185614131565b61445860a0830184614385565b979650505050505050565b6000602082019050614478600083018461419e565b92915050565b600060208201905061449360008301846141ad565b92915050565b600060208201905081810360008301526144b381846141cb565b905092915050565b600060208201905081810360008301526144d481614204565b9050919050565b600060208201905081810360008301526144f481614227565b9050919050565b600060208201905081810360008301526145148161424a565b9050919050565b600060208201905081810360008301526145348161426d565b9050919050565b6000602082019050818103600083015261455481614290565b9050919050565b60006020820190508181036000830152614574816142b3565b9050919050565b60006020820190508181036000830152614594816142d6565b9050919050565b600060208201905081810360008301526145b4816142f9565b9050919050565b600060208201905081810360008301526145d48161431c565b9050919050565b600060208201905081810360008301526145f48161433f565b9050919050565b6000602082019050818103600083015261461481614362565b9050919050565b60006020820190506146306000830184614385565b92915050565b600060408201905061464b6000830185614385565b818103602083015261465d8184614140565b90509392505050565b600060a08201905061467b6000830188614385565b61468860208301876141bc565b818103604083015261469a8186614140565b90506146a96060830185614131565b6146b66080830184614385565b9695505050505050565b60006020820190506146d56000830184614394565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061473b82614895565b915061474683614895565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561477b5761477a6149a2565b5b828201905092915050565b600061479182614895565b915061479c83614895565b9250826147ac576147ab6149d1565b5b828204905092915050565b60006147c282614895565b91506147cd83614895565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614806576148056149a2565b5b828202905092915050565b600061481c82614895565b915061482783614895565b92508282101561483a576148396149a2565b5b828203905092915050565b600061485082614875565b9050919050565b600061486282614875565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006148b7826148d0565b9050919050565b60006148c982614895565b9050919050565b60006148db826148e2565b9050919050565b60006148ed82614875565b9050919050565b60005b838110156149125780820151818401526020810190506148f7565b83811115614921576000848401525b50505050565b6000600282049050600182168061493f57607f821691505b6020821081141561495357614952614a00565b5b50919050565b600061496482614895565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614997576149966149a2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2073776170206e6f74206f70656e000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d207c20746f2062416464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614db381614845565b8114614dbe57600080fd5b50565b614dca81614869565b8114614dd557600080fd5b50565b614de181614895565b8114614dec57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cf0bb58c4799af5c35721ad0f050933925f3741d7f3cde7f420f7fbb25162bc964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000e9ffcc4de297e205fe2a614afbda63d42760e6db000000000000000000000000f9f33f05c16b9af7eee37d4511d621ed4094bafa0000000000000000000000000000000000000000000000000000000000000008456c6f6e446f67650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008456c6f6e446f6765000000000000000000000000000000000000000000000000
Deployed ByteCode
0x6080604052600436106103905760003560e01c8063844d591c116101dc578063c469b6dd11610102578063d158272d116100a0578063ef422a181161006f578063ef422a1814610d85578063f0cd1dac14610dae578063f2fde38b14610dd9578063f872858a14610e0257610397565b8063d158272d14610cc7578063da00097d14610cf2578063dc44b6a014610d1d578063dd62ed3e14610d4857610397565b8063c816841b116100dc578063c816841b14610c09578063c860795214610c34578063c867d60b14610c5f578063cab0347114610c9c57610397565b8063c469b6dd14610b8a578063c49b9a8014610bb5578063c5d2418914610bde57610397565b8063a073d37f1161017a578063a83f53a711610149578063a83f53a714610ace578063a9059cbb14610af9578063b2bdfa7b14610b36578063c2d4640e14610b6157610397565b8063a073d37f14610a12578063a08e671f14610a3d578063a457c2d714610a68578063a5d69d1f14610aa557610397565b80638da5cb5b116101b65780638da5cb5b146109685780638ec53fa914610993578063914eb66a146109d057806395d89b41146109e757610397565b8063844d591c146108d757806388790a68146109005780638b42507f1461092b57610397565b806339509351116102c15780635881f3ef1161025f5780637d1db4a51161022e5780637d1db4a51461082b578063807c2d9c146108565780638091f3bf1461088157806382eefb43146108ac57610397565b80635881f3ef1461075d57806361a23c691461079a5780636a9584a4146107c557806370a08231146107ee57610397565b80634a74bb021161029b5780634a74bb02146106a15780634cb80fd5146106cc5780635342acb4146106f557806357a5802f1461073257610397565b806339509351146105fe5780633b97084a1461063b5780633ecad2711461066457610397565b806318160ddd1161032e57806327c8f8351161030857806327c8f835146105545780632b112e491461057f5780632c4b2334146105aa578063313ce567146105d357610397565b806318160ddd146104c35780631870517a146104ee57806323b872dd1461051757610397565b80630d5e5c871161036a5780630d5e5c871461041b5780631245e34714610444578063154643021461046f5780631694505e1461049857610397565b806302ac81681461039c57806306fdde03146103b3578063095ea7b3146103de57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e2d565b005b3480156103bf57600080fd5b506103c8610edf565b6040516103d59190614499565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190613f5b565b610f71565b6040516104129190614463565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190614055565b610f8f565b005b34801561045057600080fd5b5061045961106f565b60405161046691906143be565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613f9b565b611095565b005b3480156104a457600080fd5b506104ad6111cf565b6040516104ba919061447e565b60405180910390f35b3480156104cf57600080fd5b506104d86111f5565b6040516104e5919061461b565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190614055565b6111ff565b005b34801561052357600080fd5b5061053e60048036038101906105399190613ec8565b6112df565b60405161054b9190614463565b60405180910390f35b34801561056057600080fd5b506105696113b9565b60405161057691906143a3565b60405180910390f35b34801561058b57600080fd5b506105946113dd565b6040516105a1919061461b565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e2e565b611421565b005b3480156105df57600080fd5b506105e86114fa565b6040516105f591906146c0565b60405180910390f35b34801561060a57600080fd5b5061062560048036038101906106209190613f5b565b611511565b6040516106329190614463565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d9190614028565b6115c4565b005b34801561067057600080fd5b5061068b60048036038101906106869190613e2e565b611663565b6040516106989190614463565b60405180910390f35b3480156106ad57600080fd5b506106b6611683565b6040516106c39190614463565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613e2e565b611696565b005b34801561070157600080fd5b5061071c60048036038101906107179190613e2e565b61176f565b6040516107299190614463565b60405180910390f35b34801561073e57600080fd5b5061074761178f565b604051610754919061461b565b60405180910390f35b34801561076957600080fd5b50610784600480360381019061077f9190613e2e565b611795565b60405161079191906143a3565b60405180910390f35b3480156107a657600080fd5b506107af611cf3565b6040516107bc919061461b565b60405180910390f35b3480156107d157600080fd5b506107ec60048036038101906107e79190613f1b565b611cf9565b005b3480156107fa57600080fd5b5061081560048036038101906108109190613e2e565b611de9565b604051610822919061461b565b60405180910390f35b34801561083757600080fd5b50610840611e32565b60405161084d919061461b565b60405180910390f35b34801561086257600080fd5b5061086b611e38565b604051610878919061461b565b60405180910390f35b34801561088d57600080fd5b50610896611e3e565b6040516108a39190614463565b60405180910390f35b3480156108b857600080fd5b506108c1611e51565b6040516108ce919061461b565b60405180910390f35b3480156108e357600080fd5b506108fe60048036038101906108f99190613f1b565b611e57565b005b34801561090c57600080fd5b50610915611f47565b604051610922919061461b565b60405180910390f35b34801561093757600080fd5b50610952600480360381019061094d9190613e2e565b611f4d565b60405161095f9190614463565b60405180910390f35b34801561097457600080fd5b5061097d611f6d565b60405161098a91906143a3565b60405180910390f35b34801561099f57600080fd5b506109ba60048036038101906109b59190613e2e565b611f96565b6040516109c79190614463565b60405180910390f35b3480156109dc57600080fd5b506109e5611fb6565b005b3480156109f357600080fd5b506109fc612109565b604051610a099190614499565b60405180910390f35b348015610a1e57600080fd5b50610a2761219b565b604051610a34919061461b565b60405180910390f35b348015610a4957600080fd5b50610a526121a5565b604051610a5f919061461b565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f5b565b6121ab565b604051610a9c9190614463565b60405180910390f35b348015610ab157600080fd5b50610acc6004803603810190610ac79190613ffb565b612278565b005b348015610ada57600080fd5b50610ae361232a565b604051610af0919061461b565b60405180910390f35b348015610b0557600080fd5b50610b206004803603810190610b1b9190613f5b565b612330565b604051610b2d9190614463565b60405180910390f35b348015610b4257600080fd5b50610b4b61234f565b604051610b5891906143a3565b60405180910390f35b348015610b6d57600080fd5b50610b886004803603810190610b839190614055565b612373565b005b348015610b9657600080fd5b50610b9f612453565b604051610bac919061461b565b60405180910390f35b348015610bc157600080fd5b50610bdc6004803603810190610bd79190613ffb565b612459565b005b348015610bea57600080fd5b50610bf3612542565b604051610c00919061461b565b60405180910390f35b348015610c1557600080fd5b50610c1e612548565b604051610c2b91906143a3565b60405180910390f35b348015610c4057600080fd5b50610c4961256e565b604051610c56919061461b565b60405180910390f35b348015610c6b57600080fd5b50610c866004803603810190610c819190613e2e565b612574565b604051610c939190614463565b60405180910390f35b348015610ca857600080fd5b50610cb1612594565b604051610cbe919061461b565b60405180910390f35b348015610cd357600080fd5b50610cdc61259a565b604051610ce991906143be565b60405180910390f35b348015610cfe57600080fd5b50610d076125c0565b604051610d149190614463565b60405180910390f35b348015610d2957600080fd5b50610d326125d3565b604051610d3f919061461b565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a9190613e88565b6125d9565b604051610d7c919061461b565b60405180910390f35b348015610d9157600080fd5b50610dac6004803603810190610da79190613f1b565b612660565b005b348015610dba57600080fd5b50610dc3612750565b604051610dd0919061461b565b60405180910390f35b348015610de557600080fd5b50610e006004803603810190610dfb9190613e2e565b612756565b005b348015610e0e57600080fd5b50610e17612918565b604051610e249190614463565b60405180910390f35b610e356129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb99061459b565b60405180910390fd5b6001602060006101000a81548160ff021916908315150217905550565b606060038054610eee90614927565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1a90614927565b8015610f675780601f10610f3c57610100808354040283529160200191610f67565b820191906000526020600020905b815481529060010190602001808311610f4a57829003601f168201915b5050505050905090565b6000610f85610f7e6129d3565b84846129db565b6001905092915050565b610f976129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b9061459b565b60405180910390fd5b82601081905550816011819055508060128190555061106460125461105660115460105461297590919063ffffffff16565b61297590919063ffffffff16565b601881905550505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61109d6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111219061459b565b60405180910390fd5b60005b838390508110156111c95781601f60008686858181106111505761114f614a2f565b5b90506020020160208101906111659190613e2e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806111c190614959565b91505061112d565b50505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601954905090565b6112076129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b9061459b565b60405180910390fd5b82600d8190555081600e8190555080600f819055506112d4600f546112c6600e54600d5461297590919063ffffffff16565b61297590919063ffffffff16565b601781905550505050565b60006112ec848484612ba6565b506113ae846112f96129d3565b6113a985604051806060016040528060288152602001614df060289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061135f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600061141c61140b7f000000000000000000000000000000000000000000000000000000000000dead611de9565b60195461329290919063ffffffff16565b905090565b6114296129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad9061459b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b60006115ba61151e6129d3565b846115b5856008600061152f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b6129db565b6001905092915050565b6115cc6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611659576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116509061459b565b60405180910390fd5b80601c8190555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b601e60159054906101000a900460ff1681565b61169e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117229061459b565b60405180910390fd5b80600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096020528060005260406000206000915054906101000a900460ff1681565b60135481565b600061179f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061459b565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b15801561191157600080fd5b505afa158015611925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119499190613e5b565b6040518363ffffffff1660e01b81526004016119669291906143d9565b60206040518083038186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613e5b565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b77578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3357600080fd5b505afa158015611a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6b9190613e5b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015611acd57600080fd5b505afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b059190613e5b565b6040518363ffffffff1660e01b8152600401611b229291906143d9565b602060405180830381600087803b158015611b3c57600080fd5b505af1158015611b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b749190613e5b565b91505b81601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60145481565b611d016129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d859061459b565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b602060009054906101000a900460ff1681565b60185481565b611e5f6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee39061459b565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60105481565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601f6020528060005260406000206000915054906101000a900460ff1681565b611fbe6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461204b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120429061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606004805461211890614927565b80601f016020809104026020016040519081016040528092919081815260200182805461214490614927565b80156121915780601f1061216657610100808354040283529160200191612191565b820191906000526020600020905b81548152906001019060200180831161217457829003601f168201915b5050505050905090565b6000601c54905090565b60165481565b600061226e6121b86129d3565b8461226985604051806060016040528060258152602001614e1860259139600860006121e26129d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b6129db565b6001905092915050565b6122806129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461230d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123049061459b565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60155481565b600061234461233d6129d3565b8484612ba6565b506001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61237b6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff9061459b565b60405180910390fd5b82601381905550816014819055508060158190555061244860155461243a60145460135461297590919063ffffffff16565b61297590919063ffffffff16565b601681905550505050565b600f5481565b6124616129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e59061459b565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125379190614463565b60405180910390a150565b600e5481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60125481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e60169054906101000a900460ff1681565b600d5481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126686129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec9061459b565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b61275e6129d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061459b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561285b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612852906144fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e60179054906101000a900460ff1681565b600061296d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132dc565b905092915050565b60008082846129849190614730565b9050838110156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c09061453b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a42906145fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab29061451b565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b99919061461b565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0e906145db565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7e906144bb565b60405180910390fd5b601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d2b5750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d61906145bb565b60405180910390fd5b601e60149054906101000a900460ff1615612d9157612d8a84848461333f565b9050613227565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e355750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8057601a54821115612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e769061455b565b60405180910390fd5b5b6000612e8b30611de9565b90506000601c548210159050808015612eb15750601e60149054906101000a900460ff16155b8015612f075750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f1f5750601e60159054906101000a900460ff165b15612f4957601e60169054906101000a900460ff1615612f3f57601c5491505b612f4882613512565b5b612fd2846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000849050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c857849050613125565b602060009054906101000a900460ff16613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e906144db565b60405180910390fd5b613122878787613703565b90505b61317781600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613217919061461b565b60405180910390a3600193505050505b9392505050565b6000838311158290613276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326d9190614499565b60405180910390fd5b50600083856132859190614811565b9050809150509392505050565b60006132d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061322e565b905092915050565b60008083118290613323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331a9190614499565b60405180910390fd5b50600083856133329190614786565b9050809150509392505050565b60006133ca826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322e9092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345f82600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134ff919061461b565b60405180910390a3600190509392505050565b6001601e60146101000a81548160ff021916908315150217905550600061356b600261355d60165461354f6013548761392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613582828461329290919063ffffffff16565b905061358d816139a5565b600047905060006135be6135ad600260135461292b90919063ffffffff16565b60165461329290919063ffffffff16565b905060006135fc60026135ee846135e06013548861392a90919063ffffffff16565b61292b90919063ffffffff16565b61292b90919063ffffffff16565b90506000613627836136196015548761392a90919063ffffffff16565b61292b90919063ffffffff16565b9050600061365082613642858861329290919063ffffffff16565b61329290919063ffffffff16565b9050600081111561368857613687600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613c30565b5b60008211156136be576136bd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613c30565b5b6000831180156136ce5750600087115b156136de576136dd8784613c7b565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561378b5761378460646137766017548661392a90919063ffffffff16565b61292b90919063ffffffff16565b9050613809565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138085761380560646137f76018548661392a90919063ffffffff16565b61292b90919063ffffffff16565b90505b5b600081111561390d5761386481600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461297590919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613904919061461b565b60405180910390a35b613920818461329290919063ffffffff16565b9150509392505050565b60008083141561393d576000905061399f565b6000828461394b91906147b7565b905082848261395a9190614786565b1461399a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139919061457b565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156139c2576139c1614a5e565b5b6040519080825280602002602001820160405280156139f05781602001602082028036833780820191505090505b5090503081600081518110613a0857613a07614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634ed154606040518163ffffffff1660e01b815260040160206040518083038186803b158015613aaa57600080fd5b505afa158015613abe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae29190613e5b565b81600181518110613af657613af5614a2f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b5d30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8360008430426040518663ffffffff1660e01b8152600401613bc1959493929190614666565b600060405180830381600087803b158015613bdb57600080fd5b505af1158015613bef573d6000803e3d6000fd5b505050507f573fbb8e714bf5406429725d204756536007838f235c8accd11f696f9595d5b58282604051613c24929190614636565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c76573d6000803e3d6000fd5b505050565b613ca830601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129db565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080613cf4611f6d565b426040518863ffffffff1660e01b8152600401613d1696959493929190614402565b6060604051808303818588803b158015613d2f57600080fd5b505af1158015613d43573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d6891906140a8565b5050505050565b600081359050613d7e81614daa565b92915050565b600081519050613d9381614daa565b92915050565b60008083601f840112613daf57613dae614a92565b5b8235905067ffffffffffffffff811115613dcc57613dcb614a8d565b5b602083019150836020820283011115613de857613de7614a97565b5b9250929050565b600081359050613dfe81614dc1565b92915050565b600081359050613e1381614dd8565b92915050565b600081519050613e2881614dd8565b92915050565b600060208284031215613e4457613e43614aa1565b5b6000613e5284828501613d6f565b91505092915050565b600060208284031215613e7157613e70614aa1565b5b6000613e7f84828501613d84565b91505092915050565b60008060408385031215613e9f57613e9e614aa1565b5b6000613ead85828601613d6f565b9250506020613ebe85828601613d6f565b9150509250929050565b600080600060608486031215613ee157613ee0614aa1565b5b6000613eef86828701613d6f565b9350506020613f0086828701613d6f565b9250506040613f1186828701613e04565b9150509250925092565b60008060408385031215613f3257613f31614aa1565b5b6000613f4085828601613d6f565b9250506020613f5185828601613def565b9150509250929050565b60008060408385031215613f7257613f71614aa1565b5b6000613f8085828601613d6f565b9250506020613f9185828601613e04565b9150509250929050565b600080600060408486031215613fb457613fb3614aa1565b5b600084013567ffffffffffffffff811115613fd257613fd1614a9c565b5b613fde86828701613d99565b93509350506020613ff186828701613def565b9150509250925092565b60006020828403121561401157614010614aa1565b5b600061401f84828501613def565b91505092915050565b60006020828403121561403e5761403d614aa1565b5b600061404c84828501613e04565b91505092915050565b60008060006060848603121561406e5761406d614aa1565b5b600061407c86828701613e04565b935050602061408d86828701613e04565b925050604061409e86828701613e04565b9150509250925092565b6000806000606084860312156140c1576140c0614aa1565b5b60006140cf86828701613e19565b93505060206140e086828701613e19565b92505060406140f186828701613e19565b9150509250925092565b60006141078383614122565b60208301905092915050565b61411c81614857565b82525050565b61412b81614845565b82525050565b61413a81614845565b82525050565b600061414b826146eb565b614155818561470e565b9350614160836146db565b8060005b8381101561419157815161417888826140fb565b975061418383614701565b925050600181019050614164565b5085935050505092915050565b6141a781614869565b82525050565b6141b6816148ac565b82525050565b6141c5816148be565b82525050565b60006141d6826146f6565b6141e0818561471f565b93506141f08185602086016148f4565b6141f981614aa6565b840191505092915050565b600061421160238361471f565b915061421c82614ab7565b604082019050919050565b600061423460148361471f565b915061423f82614b06565b602082019050919050565b600061425760268361471f565b915061426282614b2f565b604082019050919050565b600061427a60228361471f565b915061428582614b7e565b604082019050919050565b600061429d601b8361471f565b91506142a882614bcd565b602082019050919050565b60006142c060288361471f565b91506142cb82614bf6565b604082019050919050565b60006142e360218361471f565b91506142ee82614c45565b604082019050919050565b600061430660208361471f565b915061431182614c94565b602082019050919050565b600061432960228361471f565b915061433482614cbd565b604082019050919050565b600061434c60258361471f565b915061435782614d0c565b604082019050919050565b600061436f60248361471f565b915061437a82614d5b565b604082019050919050565b61438e81614895565b82525050565b61439d8161489f565b82525050565b60006020820190506143b86000830184614131565b92915050565b60006020820190506143d36000830184614113565b92915050565b60006040820190506143ee6000830185614131565b6143fb6020830184614131565b9392505050565b600060c0820190506144176000830189614131565b6144246020830188614385565b61443160408301876141bc565b61443e60608301866141bc565b61444b6080830185614131565b61445860a0830184614385565b979650505050505050565b6000602082019050614478600083018461419e565b92915050565b600060208201905061449360008301846141ad565b92915050565b600060208201905081810360008301526144b381846141cb565b905092915050565b600060208201905081810360008301526144d481614204565b9050919050565b600060208201905081810360008301526144f481614227565b9050919050565b600060208201905081810360008301526145148161424a565b9050919050565b600060208201905081810360008301526145348161426d565b9050919050565b6000602082019050818103600083015261455481614290565b9050919050565b60006020820190508181036000830152614574816142b3565b9050919050565b60006020820190508181036000830152614594816142d6565b9050919050565b600060208201905081810360008301526145b4816142f9565b9050919050565b600060208201905081810360008301526145d48161431c565b9050919050565b600060208201905081810360008301526145f48161433f565b9050919050565b6000602082019050818103600083015261461481614362565b9050919050565b60006020820190506146306000830184614385565b92915050565b600060408201905061464b6000830185614385565b818103602083015261465d8184614140565b90509392505050565b600060a08201905061467b6000830188614385565b61468860208301876141bc565b818103604083015261469a8186614140565b90506146a96060830185614131565b6146b66080830184614385565b9695505050505050565b60006020820190506146d56000830184614394565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061473b82614895565b915061474683614895565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561477b5761477a6149a2565b5b828201905092915050565b600061479182614895565b915061479c83614895565b9250826147ac576147ab6149d1565b5b828204905092915050565b60006147c282614895565b91506147cd83614895565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614806576148056149a2565b5b828202905092915050565b600061481c82614895565b915061482783614895565b92508282101561483a576148396149a2565b5b828203905092915050565b600061485082614875565b9050919050565b600061486282614875565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006148b7826148d0565b9050919050565b60006148c982614895565b9050919050565b60006148db826148e2565b9050919050565b60006148ed82614875565b9050919050565b60005b838110156149125780820151818401526020810190506148f7565b83811115614921576000848401525b50505050565b6000600282049050600182168061493f57607f821691505b6020821081141561495357614952614a00565b5b50919050565b600061496482614895565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614997576149966149a2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2073776170206e6f74206f70656e000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d207c20746f2062416464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b614db381614845565b8114614dbe57600080fd5b50565b614dca81614869565b8114614dd557600080fd5b50565b614de181614895565b8114614dec57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220cf0bb58c4799af5c35721ad0f050933925f3741d7f3cde7f420f7fbb25162bc964736f6c63430008070033