Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17596037 | 391 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
BlackErc20
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-01 */ // SPDX-License-Identifier: MIT // website:https://www.berc20.cash/ //'########::'########:'########:::'######:::'#######::::'#####::: //##.... ##: ##.....:: ##.... ##:'##... ##:'##.... ##::'##.. ##:: //##:::: ##: ##::::::: ##:::: ##: ##:::..::..::::: ##:'##:::: ##: //########:: ######::: ########:: ##::::::::'#######:: ##:::: ##: //##.... ##: ##...:::: ##.. ##::: ##:::::::'##:::::::: ##:::: ##: //##:::: ##: ##::::::: ##::. ##:: ##::: ##: ##::::::::. ##:: ##:: //########:: ########: ##:::. ##:. ######:: #########::. #####::: //........:::........::..:::::..:::......:::.........::::.....:::: pragma solidity ^0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount ) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } library MerkleProof { error MerkleProofInvalidMultiproof(); function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proof.length - 1 != totalHashes) { revert MerkleProofInvalidMultiproof(); } bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { uint256 leavesLen = leaves.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proof.length - 1 != totalHashes) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library Counters { struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface 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 IWETH { function deposit() external payable; function withdraw(uint256 amount) external; function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function balanceOf(address account) external view returns (uint256); } interface IERC721Enumerable { function totalSupply() external view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); function tokenByIndex(uint256 index) external view returns (uint256); } interface IERC721 { function balanceOf(address owner) external view returns (uint256); } interface IERC1155 { function balanceOf(address account, uint256 id) external view returns (uint256); } interface BercAirdrop { function createAirdrop(address depositContract,address airDropContract, uint256 _airDropNums, uint256 depositeCycle, uint256 claimCycle, uint256 _minDeposit) external; } interface Berc20Store { function createTokenInfo(address tokenAddress,string memory name,string memory symbol,uint256 totalSupply, uint256 maxMintCount, uint256 maxMintPerAddress, uint256 mintPrice, address creator, bytes32 wlRoot, uint256[] memory params, address[] memory authContracts ) external; } contract BlackErc20 is ERC20, Ownable { uint256 private constant DECIMAL_MULTIPLIER = 1e18; address private blackHole = 0x000000000000000000000000000000000000dEaD; uint256 public _maxMintCount; uint256 public _mintPrice; uint256 public _maxMintPerAddress; mapping(address => uint256) public _mintCounts; uint256 public _mintedCounts; address public wethAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //address public wethAddress = 0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6; address public lpContract; address public _devAddress; address public _deplyAddress; uint256 public _maxPro = 0; uint256 public deployReserveTokenPro = 0; uint256 public donateReserveTokenPro = 0; uint256 public airDropTokenPro = 0; uint256 public tokenLockDays = 0; uint256 public deployTime; uint256 public tokenUnlockCounts; uint256 public hadTokenUnlockCounts=0; uint256 public totalTokensLocked; uint public totalTokensClaimed; uint256 public deployReserveEthPro = 0; uint256 public donateEthPro = 0; uint256 public wlMintCounts = 0; uint256 public wlMintedCounts = 0; uint256 public wlMintedEndTime; uint256 public mintStartTime=0; uint256 public mintEndTime; uint256 public burnAddressPer=0; uint256 public burnBlockPer=0; uint256 public burnAirDropPer=0; address public burnAddress; address public airDropAddress; bytes32 public wlRoot; uint256 public validateNftNumber=0; bool public deployHadClaimEth; bool public devHadClaimEth; uint256 public remainBalance=0; mapping(uint256 => bool) public tokenExists; enum ContractType {ERC721,ERC20,ERC1155} struct ContractAuth { ContractType contractType; address contractAddress; uint256 tokenCount; } ContractAuth[] public contractAuths; constructor( string memory name, string memory symbol, uint256 totalSupply, uint256 maxMintCount, uint256 maxMintPerAddress, uint256 mintPrice, address factoryContract, address devAddress, address deplyAddress, address _airDropAddress, uint256[] memory params ) ERC20(symbol,name) { _maxMintCount = maxMintCount; _mintPrice = mintPrice; _devAddress = devAddress; _deplyAddress = deplyAddress; _maxMintPerAddress = maxMintPerAddress; deployReserveTokenPro = params[0]; donateReserveTokenPro = params[2]; wlMintCounts = params[3]; validateNftNumber = params[13]; tokenLockDays = params[7]; if (tokenLockDays>0){ require(params[6]>0&¶ms[6]<tokenLockDays,"tokenUnlockCounts error"); tokenUnlockCounts = params[6]; } totalTokensLocked = totalSupply*deployReserveTokenPro/1000; deployTime = block.timestamp; deployReserveEthPro = params[4]; donateEthPro = params[5]; burnAddressPer = params[15]; burnBlockPer = params[17]; burnAirDropPer = params[18]; if(params[1]>0){ airDropTokenPro = params[1]; _mint(_airDropAddress, totalSupply*airDropTokenPro/1000); } airDropAddress =_airDropAddress; _maxPro = 1000000-(10+params[0]*1000+params[1]*1000+params[2]*1000); _mint(factoryContract, totalSupply*1/100000); if(params[8]>0){ mintStartTime = params[8]; } if(params[9]>0){ mintEndTime = params[9]; } if(params[16]>0){ wlMintedEndTime = params[16]; } if(donateReserveTokenPro>0){ _mint(devAddress, totalSupply*donateReserveTokenPro*1000/1000000); } if(deployReserveTokenPro>0&¶ms[7]==0){ _mint(deplyAddress, totalSupply*deployReserveTokenPro*1000/1000000); } _mint(address(this), totalSupply*_maxPro/1000000); } function mintProof(uint256 mintCount,address receiveAds,bytes32[] memory proof) public payable { require(!isContract(msg.sender),"not supper contract mint"); require(mintCount > 0, "Invalid mint count"); require(mintCount <= _maxMintPerAddress, "Exceeded maximum mint count per address"); require(msg.value >= mintCount*_mintPrice, "illegal price"); require(_mintCounts[msg.sender]+mintCount <= _maxMintPerAddress, "over limit"); receiveAds = msg.sender; if(isZero(wlRoot)){ require(block.timestamp >= mintStartTime, "Minting has not started yet"); require(block.timestamp <= mintEndTime, "Minting has ended"); }else { if (block.timestamp<wlMintedEndTime){ require(wlMintedCounts+mintCount<=wlMintCounts,"over limit"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(proof, wlRoot, leaf),"Not In Wl"); wlMintedCounts += mintCount; } } if (block.timestamp<wlMintedEndTime){ require(_mintedCounts-wlMintedCounts+mintCount <= (_maxMintCount - wlMintedCounts), "illegal mintAmount"); } IWETH(wethAddress).deposit{value: msg.value*(1000-deployReserveEthPro-donateEthPro)/1000}(); IWETH(wethAddress).approve(lpContract, msg.value*(1000-deployReserveEthPro-donateEthPro)/1000); IWETH(wethAddress).transferFrom(address(this), lpContract, msg.value*(1000-deployReserveEthPro-donateEthPro)/1000); uint256 mintAmount = (totalSupply() * _maxPro * mintCount) / (_maxMintCount * 2000000); for (uint256 i = 0; i < contractAuths.length; i++) { if (contractAuths[i].contractType == ContractType.ERC721) { if(validateNftNumber==1){ IERC721Enumerable eRC721Enumerable = IERC721Enumerable(contractAuths[i].contractAddress); uint256 tokenId = eRC721Enumerable.tokenOfOwnerByIndex(msg.sender, 0); require(!tokenExists[tokenId],"had used!"); tokenExists[tokenId] = true; } uint256 tokenCount = getERC721TokenCount(contractAuths[i].contractAddress); require(tokenCount >= contractAuths[i].tokenCount, "Insufficient ERC721 tokens"); } else if (contractAuths[i].contractType == ContractType.ERC20) { uint256 tokenCount = getERC20TokenCount(contractAuths[i].contractAddress); require(tokenCount >= contractAuths[i].tokenCount, "Insufficient ERC20 tokens"); } else if (contractAuths[i].contractType == ContractType.ERC1155) { uint256 tokenCount = getERC1155TokenCount(contractAuths[i].contractAddress, 0); require(tokenCount >= contractAuths[i].tokenCount, "Insufficient ERC1155 tokens"); } } // Transfer minted tokens from contract to the sender and blackAddress _transfer(address(this), receiveAds, mintAmount); _transfer(address(this), lpContract, mintAmount); IUniswapV2Pair(lpContract).sync(); _mintCounts[msg.sender] += mintCount; _mintedCounts += mintCount; } function mint(uint256 mintCount,address receiveAds) external payable { bytes32[] memory proof = new bytes32[](0); mintProof(mintCount,receiveAds,proof); } function isContract(address addr) private view returns (bool) { uint256 codeSize; assembly { codeSize := extcodesize(addr) } return codeSize > 0; } function setContractAuth(uint256[] memory params, address[] memory authContracts) external onlyOwner { delete contractAuths; if (authContracts[0] != address(0)) { contractAuths.push(ContractAuth({ contractType: ContractType.ERC721, contractAddress: authContracts[0], tokenCount: 1 })); } if (authContracts[1] != address(0)) { contractAuths.push(ContractAuth({ contractType: ContractType.ERC20, contractAddress: authContracts[1], tokenCount: params[14] })); } if (authContracts[2] != address(0)) { contractAuths.push(ContractAuth({ contractType: ContractType.ERC1155, contractAddress: authContracts[2], tokenCount: 1 })); } if (authContracts[3] != address(0)) { burnAddress = authContracts[3]; } } function transfer(address recipient, uint256 amount) public override returns (bool) { uint256 burnAddressAmount = amount * burnAddressPer / 1000; uint256 burnBlockAmount = amount * burnBlockPer / 1000; uint256 burnAirDropAmount = amount * burnAirDropPer / 1000; uint256 transferAmount = amount - burnAddressAmount -burnBlockAmount-burnAirDropAmount; super._transfer(msg.sender, recipient, transferAmount); if(burnAddressAmount>0){ super._transfer(msg.sender, burnAddress, burnAddressAmount); } if(burnBlockAmount>0){ super._transfer(msg.sender, blackHole, burnBlockAmount); } if(burnAirDropAmount>0){ super._transfer(msg.sender, airDropAddress, burnAirDropAmount); } return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { uint256 burnAddressAmount = amount * burnAddressPer / 1000; uint256 burnBlockAmount = amount * burnBlockPer / 1000; uint256 burnAirDropAmount = amount * burnAirDropPer / 1000; uint256 transferAmount = amount - burnAddressAmount -burnBlockAmount-burnAirDropAmount; super._transfer(sender, recipient, transferAmount); if(burnAddressAmount>0){ super._transfer(sender, burnAddress, burnAddressAmount); } if(burnBlockAmount>0){ super._transfer(sender, blackHole, burnBlockAmount); } if(burnAirDropAmount>0){ super._transfer(sender, airDropAddress, burnAirDropAmount); } uint256 currentAllowance = allowance(sender, msg.sender); require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); super._approve(sender, msg.sender, currentAllowance - amount); return true; } function setLPContract(address lp) external onlyOwner { lpContract = lp; } function setWlRoot(bytes32 root) external onlyOwner { wlRoot = root; } function devAwardEth() external { require(_mintedCounts==_maxMintCount,"waiting mint finish"); require(!devHadClaimEth,"had claimed"); require(msg.sender==_devAddress,"only dev!"); uint256 balance = address(this).balance; require(balance > 0, "Contract has no ETH balance."); address payable sender = payable(_devAddress); uint256 devAmount = donateEthPro*balance/(deployReserveEthPro+donateEthPro); if(remainBalance==0){ sender.transfer(devAmount); remainBalance = balance-devAmount; }else{ sender.transfer(remainBalance); } devHadClaimEth = true; } function deployAwardEth() external { require(_mintedCounts==_maxMintCount,"waiting mint finish"); require(!deployHadClaimEth,"had claimed"); require(msg.sender==_deplyAddress,"only deply!"); uint256 balance = address(this).balance; require(balance > 0, "Contract has no ETH balance."); address payable sender = payable(_deplyAddress); uint256 deplyAmount = deployReserveEthPro*balance/(deployReserveEthPro+donateEthPro); if(remainBalance==0){ sender.transfer(deplyAmount); remainBalance = balance-deplyAmount; }else{ sender.transfer(remainBalance); } deployHadClaimEth = true; } function deployAwardToken() external { require(_mintedCounts==_maxMintCount,"waiting mint finish"); require(msg.sender==_deplyAddress,"not deplyer"); require(totalTokensClaimed <= totalTokensLocked, "All tokens have been claimed."); uint256 currentTimestamp = block.timestamp; uint256 lockEndTime = deployTime + (tokenLockDays * 86400); uint256 unlockTimes = (lockEndTime - currentTimestamp) / ((tokenLockDays / tokenUnlockCounts) * 86400) - hadTokenUnlockCounts; uint256 claimableTokens; IERC20 token2 = IERC20(address(this)); if (unlockTimes >= tokenUnlockCounts) { claimableTokens = token2.balanceOf(address(this)); hadTokenUnlockCounts = tokenUnlockCounts; } else { require(unlockTimes>0,"not have unlock times!"); claimableTokens = unlockTimes * (totalTokensLocked/tokenUnlockCounts); hadTokenUnlockCounts += unlockTimes; } token2.transfer(msg.sender, claimableTokens); } function getERC721TokenCount(address contractAddress) internal view returns (uint256) { IERC721 erc721Contract = IERC721(contractAddress); return erc721Contract.balanceOf(msg.sender); } function getERC20TokenCount(address contractAddress) internal view returns (uint256) { IERC20 erc20Contract = IERC20(contractAddress); return erc20Contract.balanceOf(msg.sender); } function getERC1155TokenCount(address contractAddress, uint256 tokenId) internal view returns (uint256) { IERC1155 erc1155Contract = IERC1155(contractAddress); return erc1155Contract.balanceOf(msg.sender, tokenId); } function getMintedCounts() external view returns (uint256) { return _mintedCounts; } function getContractAuthsLength() public view returns (uint256) { return contractAuths.length; } function getAllContractAuths() public view returns (ContractAuth[] memory) { return contractAuths; } function isZero(bytes32 value) private pure returns (bool) { return value == 0x0000000000000000000000000000000000000000000000000000000000000000; } function getAllContractTypes() public view returns (uint256[] memory) { uint256[] memory contractTypes = new uint256[](contractAuths.length); if (contractAuths.length==0){ return new uint256[](0); } for (uint256 i = 0; i < contractAuths.length; i++) { contractTypes[i] = uint256(contractAuths[i].contractType); } return contractTypes; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxMintCount","type":"uint256"},{"internalType":"uint256","name":"maxMintPerAddress","type":"uint256"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"address","name":"factoryContract","type":"address"},{"internalType":"address","name":"devAddress","type":"address"},{"internalType":"address","name":"deplyAddress","type":"address"},{"internalType":"address","name":"_airDropAddress","type":"address"},{"internalType":"uint256[]","name":"params","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_deplyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxPro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintedCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airDropAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airDropTokenPro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddressPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAirDropPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBlockPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractAuths","outputs":[{"internalType":"enum BlackErc20.ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployAwardEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployAwardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployHadClaimEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployReserveEthPro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployReserveTokenPro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devAwardEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devHadClaimEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donateEthPro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donateReserveTokenPro","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllContractAuths","outputs":[{"components":[{"internalType":"enum BlackErc20.ContractType","name":"contractType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenCount","type":"uint256"}],"internalType":"struct BlackErc20.ContractAuth[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllContractTypes","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractAuthsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintedCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hadTokenUnlockCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"address","name":"receiveAds","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintCount","type":"uint256"},{"internalType":"address","name":"receiveAds","type":"address"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintProof","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"params","type":"uint256[]"},{"internalType":"address[]","name":"authContracts","type":"address[]"}],"name":"setContractAuth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lp","type":"address"}],"name":"setLPContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setWlRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLockDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenUnlockCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"validateNftNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlMintCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlMintedCounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlMintedEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wlRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600680546001600160a01b031990811661dead17909155600c805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790555f601081905560118190556012819055601381905560148190556017819055601a819055601b819055601c819055601d819055601f819055602181905560228190556023819055602781905560295534801562000095575f80fd5b5060405162003c3338038062003c33833981016040819052620000b89162000903565b898b6003620000c8838262000a97565b506004620000d7828262000a97565b505050620000f4620000ee6200067860201b60201c565b6200067c565b60078890556008869055600e80546001600160a01b038087166001600160a01b031992831617909255600f8054928616929091169190911790556009879055805181905f9062000148576200014862000b5f565b6020026020010151601181905550806002815181106200016c576200016c62000b5f565b60200260200101516012819055508060038151811062000190576200019062000b5f565b6020026020010151601c8190555080600d81518110620001b457620001b462000b5f565b602002602001015160278190555080600781518110620001d857620001d862000b5f565b6020908102919091010151601481905515620002b0575f8160068151811062000205576200020562000b5f565b6020026020010151118015620002395750601454816006815181106200022f576200022f62000b5f565b6020026020010151105b6200028b5760405162461bcd60e51b815260206004820152601760248201527f746f6b656e556e6c6f636b436f756e7473206572726f7200000000000000000060448201526064015b60405180910390fd5b80600681518110620002a157620002a162000b5f565b60200260200101516016819055505b6103e86011548a620002c3919062000b87565b620002cf919062000ba7565b60185542601555805181906004908110620002ee57620002ee62000b5f565b6020026020010151601a819055508060058151811062000312576200031262000b5f565b6020026020010151601b8190555080600f8151811062000336576200033662000b5f565b6020026020010151602181905550806011815181106200035a576200035a62000b5f565b6020026020010151602281905550806012815181106200037e576200037e62000b5f565b60200260200101516023819055505f81600181518110620003a357620003a362000b5f565b60200260200101511115620004005780600181518110620003c857620003c862000b5f565b602002602001015160138190555062000400826103e86013548c620003ee919062000b87565b620003fa919062000ba7565b620006cd565b602580546001600160a01b0319166001600160a01b03841617905580518190600290811062000433576200043362000b5f565b60200260200101516103e86200044a919062000b87565b8160018151811062000460576200046062000b5f565b60200260200101516103e862000477919062000b87565b825f815181106200048c576200048c62000b5f565b60200260200101516103e8620004a3919062000b87565b620004b090600a62000bc7565b620004bc919062000bc7565b620004c8919062000bc7565b620004d790620f424062000bdd565b601055620004f085620186a0620003ee8c600162000b87565b5f8160088151811062000507576200050762000b5f565b602002602001015111156200053b57806008815181106200052c576200052c62000b5f565b6020026020010151601f819055505b5f8160098151811062000552576200055262000b5f565b6020026020010151111562000586578060098151811062000577576200057762000b5f565b60200260200101516020819055505b5f816010815181106200059d576200059d62000b5f565b60200260200101511115620005d15780601081518110620005c257620005c262000b5f565b6020026020010151601e819055505b6012541562000601576200060184620f42406012548c620005f3919062000b87565b620003ee906103e862000b87565b5f6011541180156200062f57508060078151811062000624576200062462000b5f565b60200260200101515f145b156200064e576200064e83620f42406011548c620005f3919062000b87565b6200066730620f42406010548c620003ee919062000b87565b505050505050505050505062000bf3565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620007255760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000282565b8060025f82825462000738919062000bc7565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715620007d257620007d262000793565b604052919050565b5f82601f830112620007ea575f80fd5b81516001600160401b0381111562000806576200080662000793565b60206200081c601f8301601f19168201620007a7565b828152858284870101111562000830575f80fd5b5f5b838110156200084f57858101830151828201840152820162000832565b505f928101909101919091529392505050565b80516001600160a01b038116811462000879575f80fd5b919050565b5f82601f8301126200088e575f80fd5b815160206001600160401b03821115620008ac57620008ac62000793565b8160051b620008bd828201620007a7565b9283528481018201928281019087851115620008d7575f80fd5b83870192505b84831015620008f857825182529183019190830190620008dd565b979650505050505050565b5f805f805f805f805f805f6101608c8e0312156200091f575f80fd5b8b516001600160401b0381111562000935575f80fd5b620009438e828f01620007da565b60208e0151909c5090506001600160401b0381111562000961575f80fd5b6200096f8e828f01620007da565b9a505060408c0151985060608c0151975060808c0151965060a08c015195506200099c60c08d0162000862565b9450620009ac60e08d0162000862565b9350620009bd6101008d0162000862565b9250620009ce6101208d0162000862565b6101408d01519092506001600160401b03811115620009eb575f80fd5b620009f98e828f016200087e565b9150509295989b509295989b9093969950565b600181811c9082168062000a2157607f821691505b60208210810362000a4057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200078e575f81815260208120601f850160051c8101602086101562000a6e5750805b601f850160051c820191505b8181101562000a8f5782815560010162000a7a565b505050505050565b81516001600160401b0381111562000ab35762000ab362000793565b62000acb8162000ac4845462000a0c565b8462000a46565b602080601f83116001811462000b01575f841562000ae95750858301515b5f19600386901b1c1916600185901b17855562000a8f565b5f85815260208120601f198616915b8281101562000b315788860151825594840194600190910190840162000b10565b508582101562000b4f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141762000ba15762000ba162000b73565b92915050565b5f8262000bc257634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111562000ba15762000ba162000b73565b8181038181111562000ba15762000ba162000b73565b6130328062000c015f395ff3fe6080604052600436106103b2575f3560e01c806374b527b0116101e9578063a457c2d711610108578063cfa69a531161009d578063dd62ed3e1161006d578063dd62ed3e14610a05578063ea18876014610a24578063ee68af4a14610a39578063f2fde38b14610a4e575f80fd5b8063cfa69a531461099c578063d3bfe4d3146109b1578063db0fcdf9146109dc578063dc5bf961146109f0575f80fd5b8063bc75cac8116100d8578063bc75cac81461093e578063bdd67fee1461095d578063c445d20014610972578063c6c2aaac14610987575f80fd5b8063a457c2d7146108cc578063a61c6d2a146108eb578063a9059cbb14610900578063ad8bd82c1461091f575f80fd5b80638acee3cf1161017e57806395d89b411161014e57806395d89b41146108635780639a7fdf13146108775780639bb907941461088c5780639f137861146108ab575f80fd5b80638acee3cf146107ff5780638da5cb5b1461081e578063931e2e491461083b57806394bf804d14610850575f80fd5b80637b6b419e116101b95780637b6b419e146107ac57806382c30987146107c057806387499774146107d557806387512b94146107ea575f80fd5b806374b527b01461074f578063785a5a6e146107635780637a40624b146107785780637a8cf66a1461078d575f80fd5b80634f0e0ef3116102d55780636af659291161026a57806370d5ae051161023a57806370d5ae05146106f2578063715018a614610711578063717a002b1461072557806373ccac701461073a575f80fd5b80636af65929146106775780636b48273414610696578063706e5636146106aa57806370a08231146106be575f80fd5b80635912c046116102a55780635912c046146106235780635b40394d146106385780636311d05f1461064d578063685511ba14610662575f80fd5b80634f0e0ef3146105a05780634f9d8f65146105bf578063510ea096146105d457806354e0793d14610602575f80fd5b8063288b19ce1161034b578063367d1ea21161031b578063367d1ea2146105205780633950935114610535578063429c48cc146105545780634dbc1d531461058b575f80fd5b8063288b19ce146104b95780632b9abeeb146104d75780632cc6b2ce146104f0578063313ce56714610505575f80fd5b8063095ea7b311610386578063095ea7b31461045257806318160ddd146104715780631b2afebe1461048557806323b872dd1461049a575f80fd5b8062923f9e146103b65780630387da42146103f957806306fdde031461041c5780630775d4691461043d575b5f80fd5b3480156103c1575f80fd5b506103e46103d0366004612a4a565b602a6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610404575f80fd5b5061040e60085481565b6040519081526020016103f0565b348015610427575f80fd5b50610430610a6d565b6040516103f09190612a61565b348015610448575f80fd5b5061040e60125481565b34801561045d575f80fd5b506103e461046c366004612ac7565b610afd565b34801561047c575f80fd5b5060025461040e565b348015610490575f80fd5b5061040e60275481565b3480156104a5575f80fd5b506103e46104b4366004612aef565b610b16565b3480156104c4575f80fd5b506028546103e490610100900460ff1681565b3480156104e2575f80fd5b506028546103e49060ff1681565b3480156104fb575f80fd5b5061040e60145481565b348015610510575f80fd5b50604051601281526020016103f0565b34801561052b575f80fd5b5061040e60105481565b348015610540575f80fd5b506103e461054f366004612ac7565b610c8f565b34801561055f575f80fd5b50602554610573906001600160a01b031681565b6040516001600160a01b0390911681526020016103f0565b348015610596575f80fd5b5061040e60215481565b3480156105ab575f80fd5b50600c54610573906001600160a01b031681565b3480156105ca575f80fd5b5061040e60115481565b3480156105df575f80fd5b506105f36105ee366004612a4a565b610cab565b6040516103f093929190612b5c565b34801561060d575f80fd5b50610616610cea565b6040516103f09190612b84565b34801561062e575f80fd5b5061040e60195481565b348015610643575f80fd5b5061040e60135481565b61066061065b366004612c2f565b610dca565b005b34801561066d575f80fd5b5061040e60295481565b348015610682575f80fd5b50600e54610573906001600160a01b031681565b3480156106a1575f80fd5b5061066061184b565b3480156106b5575f80fd5b50610660611ae0565b3480156106c9575f80fd5b5061040e6106d8366004612cdb565b6001600160a01b03165f9081526020819052604090205490565b3480156106fd575f80fd5b50602454610573906001600160a01b031681565b34801561071c575f80fd5b50610660611cab565b348015610730575f80fd5b5061040e60205481565b348015610745575f80fd5b5061040e60165481565b34801561075a575f80fd5b50600b5461040e565b34801561076e575f80fd5b5061040e60225481565b348015610783575f80fd5b5061040e60155481565b348015610798575f80fd5b50600f54610573906001600160a01b031681565b3480156107b7575f80fd5b50602b5461040e565b3480156107cb575f80fd5b5061040e60265481565b3480156107e0575f80fd5b5061040e601c5481565b3480156107f5575f80fd5b5061040e60075481565b34801561080a575f80fd5b50600d54610573906001600160a01b031681565b348015610829575f80fd5b506005546001600160a01b0316610573565b348015610846575f80fd5b5061040e601f5481565b61066061085e366004612cf4565b611cbe565b34801561086e575f80fd5b50610430611cdc565b348015610882575f80fd5b5061040e601e5481565b348015610897575f80fd5b506106606108a6366004612cdb565b611ceb565b3480156108b6575f80fd5b506108bf611d15565b6040516103f09190612d1e565b3480156108d7575f80fd5b506103e46108e6366004612ac7565b611dcd565b3480156108f6575f80fd5b5061040e600b5481565b34801561090b575f80fd5b506103e461091a366004612ac7565b611e52565b34801561092a575f80fd5b50610660610939366004612a4a565b611f42565b348015610949575f80fd5b50610660610958366004612df0565b611f4f565b348015610968575f80fd5b5061040e601b5481565b34801561097d575f80fd5b5061040e601d5481565b348015610992575f80fd5b5061040e601a5481565b3480156109a7575f80fd5b5061040e60095481565b3480156109bc575f80fd5b5061040e6109cb366004612cdb565b600a6020525f908152604090205481565b3480156109e7575f80fd5b506106606122b2565b3480156109fb575f80fd5b5061040e60185481565b348015610a10575f80fd5b5061040e610a1f366004612ea3565b612482565b348015610a2f575f80fd5b5061040e60175481565b348015610a44575f80fd5b5061040e60235481565b348015610a59575f80fd5b50610660610a68366004612cdb565b6124ac565b606060038054610a7c90612ecb565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa890612ecb565b8015610af35780601f10610aca57610100808354040283529160200191610af3565b820191905f5260205f20905b815481529060010190602001808311610ad657829003601f168201915b5050505050905090565b5f33610b0a818585612525565b60019150505b92915050565b5f806103e860215484610b299190612f11565b610b339190612f28565b90505f6103e860225485610b479190612f11565b610b519190612f28565b90505f6103e860235486610b659190612f11565b610b6f9190612f28565b90505f8183610b7e8689612f47565b610b889190612f47565b610b929190612f47565b9050610b9f888883612648565b8315610bbd57602454610bbd9089906001600160a01b031686612648565b8215610bdb57600654610bdb9089906001600160a01b031685612648565b8115610bf957602554610bf99089906001600160a01b031684612648565b5f610c048933612482565b905086811015610c6c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c808933610c7b8a85612f47565b612525565b50600198975050505050505050565b5f33610b0a818585610ca18383612482565b610c7b9190612f5a565b602b8181548110610cba575f80fd5b5f9182526020909120600290910201805460019091015460ff821692506101009091046001600160a01b03169083565b602b546060905f9067ffffffffffffffff811115610d0a57610d0a612bc7565b604051908082528060200260200182016040528015610d33578160200160208202803683370190505b50602b549091505f03610d53575050604080515f81526020810190915290565b5f5b602b54811015610dc457602b8181548110610d7257610d72612f6d565b5f91825260209091206002918202015460ff1690811115610d9557610d95612b28565b828281518110610da757610da7612f6d565b602090810291909101015280610dbc81612f81565b915050610d55565b50919050565b333b15610e195760405162461bcd60e51b815260206004820152601860248201527f6e6f742073757070657220636f6e7472616374206d696e7400000000000000006044820152606401610c63565b5f8311610e5d5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081b5a5b9d0818dbdd5b9d60721b6044820152606401610c63565b600954831115610ebf5760405162461bcd60e51b815260206004820152602760248201527f4578636565646564206d6178696d756d206d696e7420636f756e7420706572206044820152666164647265737360c81b6064820152608401610c63565b600854610ecc9084612f11565b341015610f0b5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c20707269636560981b6044820152606401610c63565b600954335f908152600a6020526040902054610f28908590612f5a565b1115610f635760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610c63565b60265433925061100a57601f54421015610fbf5760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e6720686173206e6f7420737461727465642079657400000000006044820152606401610c63565b6020544211156110055760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a185cc8195b991959607a1b6044820152606401610c63565b6110f5565b601e544210156110f557601c5483601d546110259190612f5a565b11156110605760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610c63565b6040516bffffffffffffffffffffffff193360601b1660208201525f906034016040516020818303038152906040528051906020012090506110a582602654836127eb565b6110dd5760405162461bcd60e51b8152602060048201526009602482015268139bdd08125b8815db60ba1b6044820152606401610c63565b83601d5f8282546110ee9190612f5a565b9091555050505b601e5442101561116d57601d5460075461110f9190612f47565b83601d54600b546111209190612f47565b61112a9190612f5a565b111561116d5760405162461bcd60e51b81526020600482015260126024820152711a5b1b1959d85b081b5a5b9d105b5bdd5b9d60721b6044820152606401610c63565b600c54601b54601a546001600160a01b039092169163d0e30db0916103e8916111969083612f47565b6111a09190612f47565b6111aa9034612f11565b6111b49190612f28565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b5050600c54600d54601b54601a546001600160a01b03938416965063095ea7b395509290911692506103e8916112259083612f47565b61122f9190612f47565b6112399034612f11565b6112439190612f28565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561128b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112af9190612f99565b50600c54600d54601b54601a546001600160a01b03938416936323b872dd9330939116916103e891906112e29083612f47565b6112ec9190612f47565b6112f69034612f11565b6113009190612f28565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015611351573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113759190612f99565b505f600754621e84806113889190612f11565b8460105461139560025490565b61139f9190612f11565b6113a99190612f11565b6113b39190612f28565b90505f5b602b54811015611783575f602b82815481106113d5576113d5612f6d565b5f91825260209091206002918202015460ff16908111156113f8576113f8612b28565b036115bb57602754600103611507575f602b828154811061141b5761141b612f6d565b5f918252602082206002919091020154604051632f745c5960e01b8152336004820152602481018390526101009091046001600160a01b031692508290632f745c5990604401602060405180830381865afa15801561147c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a09190612fb8565b5f818152602a602052604090205490915060ff16156114ed5760405162461bcd60e51b815260206004820152600960248201526868616420757365642160b81b6044820152606401610c63565b5f908152602a60205260409020805460ff19166001179055505b5f611541602b838154811061151e5761151e612f6d565b5f91825260209091206002909102015461010090046001600160a01b0316612800565b9050602b828154811061155657611556612f6d565b905f5260205f209060020201600101548110156115b55760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742045524337323120746f6b656e730000000000006044820152606401610c63565b50611771565b6001602b82815481106115d0576115d0612f6d565b5f91825260209091206002918202015460ff16908111156115f3576115f3612b28565b03611683575f61160f602b838154811061151e5761151e612f6d565b9050602b828154811061162457611624612f6d565b905f5260205f209060020201600101548110156115b55760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420455243323020746f6b656e73000000000000006044820152606401610c63565b6002602b828154811061169857611698612f6d565b5f91825260209091206002918202015460ff16908111156116bb576116bb612b28565b03611771575f6116fb602b83815481106116d7576116d7612f6d565b5f91825260208220600290910201546001600160a01b036101009091041690612871565b9050602b828154811061171057611710612f6d565b905f5260205f2090600202016001015481101561176f5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74204552433131353520746f6b656e7300000000006044820152606401610c63565b505b8061177b81612f81565b9150506113b7565b5061178f308483612648565b600d546117a79030906001600160a01b031683612648565b600d5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156117f3575f80fd5b505af1158015611805573d5f803e3d5ffd5b5050335f908152600a602052604081208054889450909250611828908490612f5a565b9250508190555083600b5f8282546118409190612f5a565b909155505050505050565b600754600b541461186e5760405162461bcd60e51b8152600401610c6390612fcf565b600f546001600160a01b031633146118b65760405162461bcd60e51b815260206004820152600b60248201526a3737ba103232b8363cb2b960a91b6044820152606401610c63565b601854601954111561190a5760405162461bcd60e51b815260206004820152601d60248201527f416c6c20746f6b656e732068617665206265656e20636c61696d65642e0000006044820152606401610c63565b60145442905f9061191e9062015180612f11565b60155461192b9190612f5a565b90505f6017546016546014546119419190612f28565b61194e9062015180612f11565b6119588585612f47565b6119629190612f28565b61196c9190612f47565b90505f8030905060165483106119ef576040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e29190612fb8565b6016546017559150611a6a565b5f8311611a375760405162461bcd60e51b81526020600482015260166024820152756e6f74206861766520756e6c6f636b2074696d65732160501b6044820152606401610c63565b601654601854611a479190612f28565b611a519084612f11565b91508260175f828254611a649190612f5a565b90915550505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015611ab4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad89190612f99565b505050505050565b600754600b5414611b035760405162461bcd60e51b8152600401610c6390612fcf565b60285460ff1615611b445760405162461bcd60e51b815260206004820152600b60248201526a1a18590818db185a5b595960aa1b6044820152606401610c63565b600f546001600160a01b03163314611b8c5760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79206465706c792160a81b6044820152606401610c63565b4780611bda5760405162461bcd60e51b815260206004820152601c60248201527f436f6e747261637420686173206e6f204554482062616c616e63652e000000006044820152606401610c63565b600f54601b54601a546001600160a01b03909216915f91611bfa91612f5a565b83601a54611c089190612f11565b611c129190612f28565b90506029545f03611c63576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611c50573d5f803e3d5ffd5b50611c5b8184612f47565b602955611c99565b6029546040516001600160a01b0384169180156108fc02915f818181858888f19350505050158015611c97573d5f803e3d5ffd5b505b50506028805460ff1916600117905550565b611cb36128e8565b611cbc5f612942565b565b604080515f815260208101909152611cd7838383610dca565b505050565b606060048054610a7c90612ecb565b611cf36128e8565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6060602b805480602002602001604051908101604052809291908181526020015f905b82821015611dc4578382905f5260205f2090600202016040518060600160405290815f82015f9054906101000a900460ff166002811115611d7b57611d7b612b28565b6002811115611d8c57611d8c612b28565b8152815461010090046001600160a01b0316602080830191909152600192830154604090920191909152918352929092019101611d38565b50505050905090565b5f3381611dda8286612482565b905083811015611e3a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c63565b611e478286868403612525565b506001949350505050565b5f806103e860215484611e659190612f11565b611e6f9190612f28565b90505f6103e860225485611e839190612f11565b611e8d9190612f28565b90505f6103e860235486611ea19190612f11565b611eab9190612f28565b90505f8183611eba8689612f47565b611ec49190612f47565b611ece9190612f47565b9050611edb338883612648565b8315611ef957602454611ef99033906001600160a01b031686612648565b8215611f1757600654611f179033906001600160a01b031685612648565b8115611f3557602554611f359033906001600160a01b031684612648565b5060019695505050505050565b611f4a6128e8565b602655565b611f576128e8565b611f62602b5f612a08565b5f6001600160a01b0316815f81518110611f7e57611f7e612f6d565b60200260200101516001600160a01b031614612049576040805160608101909152602b90805f8152602001835f81518110611fbb57611fbb612f6d565b6020908102919091018101516001600160a01b031682526001918101829052835480830185555f9485529320825160029485029091018054939490939192849260ff191691849081111561201157612011612b28565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b03199091161781556040909101516001909101555b5f6001600160a01b03168160018151811061206657612066612f6d565b60200260200101516001600160a01b031614612150576040805160608101909152602b908060018152602001836001815181106120a5576120a5612f6d565b60200260200101516001600160a01b0316815260200184600e815181106120ce576120ce612f6d565b6020908102919091018101519091528254600181810185555f94855291909320825160029485029091018054939490939192849260ff191691849081111561211857612118612b28565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b03199091161781556040909101516001909101555b5f6001600160a01b03168160028151811061216d5761216d612f6d565b60200260200101516001600160a01b03161461223a576040805160608101909152602b908060028152602001836002815181106121ac576121ac612f6d565b6020908102919091018101516001600160a01b031682526001918101829052835480830185555f9485529320825160029485029091018054939490939192849260ff191691849081111561220257612202612b28565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b03199091161781556040909101516001909101555b5f6001600160a01b03168160038151811061225757612257612f6d565b60200260200101516001600160a01b0316146122ae578060038151811061228057612280612f6d565b602002602001015160245f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5050565b600754600b54146122d55760405162461bcd60e51b8152600401610c6390612fcf565b602854610100900460ff161561231b5760405162461bcd60e51b815260206004820152600b60248201526a1a18590818db185a5b595960aa1b6044820152606401610c63565b600e546001600160a01b031633146123615760405162461bcd60e51b81526020600482015260096024820152686f6e6c79206465762160b81b6044820152606401610c63565b47806123af5760405162461bcd60e51b815260206004820152601c60248201527f436f6e747261637420686173206e6f204554482062616c616e63652e000000006044820152606401610c63565b600e54601b54601a546001600160a01b03909216915f916123cf91612f5a565b83601b546123dd9190612f11565b6123e79190612f28565b90506029545f03612438576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015612425573d5f803e3d5ffd5b506124308184612f47565b60295561246e565b6029546040516001600160a01b0384169180156108fc02915f818181858888f1935050505015801561246c573d5f803e3d5ffd5b505b50506028805461ff00191661010017905550565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6124b46128e8565b6001600160a01b0381166125195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c63565b61252281612942565b50565b6001600160a01b0383166125875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c63565b6001600160a01b0382166125e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c63565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c63565b6001600160a01b03821661270e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c63565b6001600160a01b0383165f90815260208190526040902054818110156127855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c63565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f826127f78584612993565b14949350505050565b6040516370a0823160e01b81523360048201525f9082906001600160a01b038216906370a0823190602401602060405180830381865afa158015612846573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286a9190612fb8565b9392505050565b604051627eeac760e11b8152336004820152602481018290525f9083906001600160a01b0382169062fdd58e90604401602060405180830381865afa1580156128bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e09190612fb8565b949350505050565b6005546001600160a01b03163314611cbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c63565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f81815b84518110156129d7576129c3828683815181106129b6576129b6612f6d565b60200260200101516129df565b9150806129cf81612f81565b915050612997565b509392505050565b5f8183106129f9575f82815260208490526040902061286a565b505f9182526020526040902090565b5080545f8255600202905f5260205f209081019061252291905b80821115612a465780546001600160a81b03191681555f6001820155600201612a22565b5090565b5f60208284031215612a5a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a8c57858101830151858201604001528201612a70565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612ac2575f80fd5b919050565b5f8060408385031215612ad8575f80fd5b612ae183612aac565b946020939093013593505050565b5f805f60608486031215612b01575f80fd5b612b0a84612aac565b9250612b1860208501612aac565b9150604084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b60038110612b5857634e487b7160e01b5f52602160045260245ffd5b9052565b60608101612b6a8286612b3c565b6001600160a01b0393909316602082015260400152919050565b602080825282518282018190525f9190848201906040850190845b81811015612bbb57835183529284019291840191600101612b9f565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c0457612c04612bc7565b604052919050565b5f67ffffffffffffffff821115612c2557612c25612bc7565b5060051b60200190565b5f805f60608486031215612c41575f80fd5b833592506020612c52818601612aac565b9250604085013567ffffffffffffffff811115612c6d575f80fd5b8501601f81018713612c7d575f80fd5b8035612c90612c8b82612c0c565b612bdb565b81815260059190911b82018301908381019089831115612cae575f80fd5b928401925b82841015612ccc57833582529284019290840190612cb3565b80955050505050509250925092565b5f60208284031215612ceb575f80fd5b61286a82612aac565b5f8060408385031215612d05575f80fd5b82359150612d1560208401612aac565b90509250929050565b602080825282518282018190525f919060409081850190868401855b82811015612d79578151612d4f858251612b3c565b808701516001600160a01b0316858801528501518585015260609093019290850190600101612d3a565b5091979650505050505050565b5f82601f830112612d95575f80fd5b81356020612da5612c8b83612c0c565b82815260059290921b84018101918181019086841115612dc3575f80fd5b8286015b84811015612de557612dd881612aac565b8352918301918301612dc7565b509695505050505050565b5f8060408385031215612e01575f80fd5b823567ffffffffffffffff80821115612e18575f80fd5b818501915085601f830112612e2b575f80fd5b81356020612e3b612c8b83612c0c565b82815260059290921b84018101918181019089841115612e59575f80fd5b948201945b83861015612e7757853582529482019490820190612e5e565b96505086013592505080821115612e8c575f80fd5b50612e9985828601612d86565b9150509250929050565b5f8060408385031215612eb4575f80fd5b612ebd83612aac565b9150612d1560208401612aac565b600181811c90821680612edf57607f821691505b602082108103610dc457634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b1057610b10612efd565b5f82612f4257634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610b1057610b10612efd565b80820180821115610b1057610b10612efd565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612f9257612f92612efd565b5060010190565b5f60208284031215612fa9575f80fd5b8151801515811461286a575f80fd5b5f60208284031215612fc8575f80fd5b5051919050565b6020808252601390820152720eec2d2e8d2dcce40dad2dce840ccd2dcd2e6d606b1b60408201526060019056fea2646970667358221220a41dfbf6e8087331afa4f1029281ed9f3f4b8689098f31ab40fcf7db21cbc88164736f6c63430008140033000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000115eec47f6cf7e350000000000000000000000000000000000000000000000000000000000000000004e2000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000006696f0eeff4af5409b99047053d6f714b7a2af3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e80e91f6fbdfcb7ee5fc4e0afe39a68306adc94000000000000000000000000ec2034230a3710a6eb34be818276b8c7ceb254bd00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000064265726332300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f466169722062657263323020706f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000649f851c000000000000000000000000000000000000000000000000000000006c25a49c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103b2575f3560e01c806374b527b0116101e9578063a457c2d711610108578063cfa69a531161009d578063dd62ed3e1161006d578063dd62ed3e14610a05578063ea18876014610a24578063ee68af4a14610a39578063f2fde38b14610a4e575f80fd5b8063cfa69a531461099c578063d3bfe4d3146109b1578063db0fcdf9146109dc578063dc5bf961146109f0575f80fd5b8063bc75cac8116100d8578063bc75cac81461093e578063bdd67fee1461095d578063c445d20014610972578063c6c2aaac14610987575f80fd5b8063a457c2d7146108cc578063a61c6d2a146108eb578063a9059cbb14610900578063ad8bd82c1461091f575f80fd5b80638acee3cf1161017e57806395d89b411161014e57806395d89b41146108635780639a7fdf13146108775780639bb907941461088c5780639f137861146108ab575f80fd5b80638acee3cf146107ff5780638da5cb5b1461081e578063931e2e491461083b57806394bf804d14610850575f80fd5b80637b6b419e116101b95780637b6b419e146107ac57806382c30987146107c057806387499774146107d557806387512b94146107ea575f80fd5b806374b527b01461074f578063785a5a6e146107635780637a40624b146107785780637a8cf66a1461078d575f80fd5b80634f0e0ef3116102d55780636af659291161026a57806370d5ae051161023a57806370d5ae05146106f2578063715018a614610711578063717a002b1461072557806373ccac701461073a575f80fd5b80636af65929146106775780636b48273414610696578063706e5636146106aa57806370a08231146106be575f80fd5b80635912c046116102a55780635912c046146106235780635b40394d146106385780636311d05f1461064d578063685511ba14610662575f80fd5b80634f0e0ef3146105a05780634f9d8f65146105bf578063510ea096146105d457806354e0793d14610602575f80fd5b8063288b19ce1161034b578063367d1ea21161031b578063367d1ea2146105205780633950935114610535578063429c48cc146105545780634dbc1d531461058b575f80fd5b8063288b19ce146104b95780632b9abeeb146104d75780632cc6b2ce146104f0578063313ce56714610505575f80fd5b8063095ea7b311610386578063095ea7b31461045257806318160ddd146104715780631b2afebe1461048557806323b872dd1461049a575f80fd5b8062923f9e146103b65780630387da42146103f957806306fdde031461041c5780630775d4691461043d575b5f80fd5b3480156103c1575f80fd5b506103e46103d0366004612a4a565b602a6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610404575f80fd5b5061040e60085481565b6040519081526020016103f0565b348015610427575f80fd5b50610430610a6d565b6040516103f09190612a61565b348015610448575f80fd5b5061040e60125481565b34801561045d575f80fd5b506103e461046c366004612ac7565b610afd565b34801561047c575f80fd5b5060025461040e565b348015610490575f80fd5b5061040e60275481565b3480156104a5575f80fd5b506103e46104b4366004612aef565b610b16565b3480156104c4575f80fd5b506028546103e490610100900460ff1681565b3480156104e2575f80fd5b506028546103e49060ff1681565b3480156104fb575f80fd5b5061040e60145481565b348015610510575f80fd5b50604051601281526020016103f0565b34801561052b575f80fd5b5061040e60105481565b348015610540575f80fd5b506103e461054f366004612ac7565b610c8f565b34801561055f575f80fd5b50602554610573906001600160a01b031681565b6040516001600160a01b0390911681526020016103f0565b348015610596575f80fd5b5061040e60215481565b3480156105ab575f80fd5b50600c54610573906001600160a01b031681565b3480156105ca575f80fd5b5061040e60115481565b3480156105df575f80fd5b506105f36105ee366004612a4a565b610cab565b6040516103f093929190612b5c565b34801561060d575f80fd5b50610616610cea565b6040516103f09190612b84565b34801561062e575f80fd5b5061040e60195481565b348015610643575f80fd5b5061040e60135481565b61066061065b366004612c2f565b610dca565b005b34801561066d575f80fd5b5061040e60295481565b348015610682575f80fd5b50600e54610573906001600160a01b031681565b3480156106a1575f80fd5b5061066061184b565b3480156106b5575f80fd5b50610660611ae0565b3480156106c9575f80fd5b5061040e6106d8366004612cdb565b6001600160a01b03165f9081526020819052604090205490565b3480156106fd575f80fd5b50602454610573906001600160a01b031681565b34801561071c575f80fd5b50610660611cab565b348015610730575f80fd5b5061040e60205481565b348015610745575f80fd5b5061040e60165481565b34801561075a575f80fd5b50600b5461040e565b34801561076e575f80fd5b5061040e60225481565b348015610783575f80fd5b5061040e60155481565b348015610798575f80fd5b50600f54610573906001600160a01b031681565b3480156107b7575f80fd5b50602b5461040e565b3480156107cb575f80fd5b5061040e60265481565b3480156107e0575f80fd5b5061040e601c5481565b3480156107f5575f80fd5b5061040e60075481565b34801561080a575f80fd5b50600d54610573906001600160a01b031681565b348015610829575f80fd5b506005546001600160a01b0316610573565b348015610846575f80fd5b5061040e601f5481565b61066061085e366004612cf4565b611cbe565b34801561086e575f80fd5b50610430611cdc565b348015610882575f80fd5b5061040e601e5481565b348015610897575f80fd5b506106606108a6366004612cdb565b611ceb565b3480156108b6575f80fd5b506108bf611d15565b6040516103f09190612d1e565b3480156108d7575f80fd5b506103e46108e6366004612ac7565b611dcd565b3480156108f6575f80fd5b5061040e600b5481565b34801561090b575f80fd5b506103e461091a366004612ac7565b611e52565b34801561092a575f80fd5b50610660610939366004612a4a565b611f42565b348015610949575f80fd5b50610660610958366004612df0565b611f4f565b348015610968575f80fd5b5061040e601b5481565b34801561097d575f80fd5b5061040e601d5481565b348015610992575f80fd5b5061040e601a5481565b3480156109a7575f80fd5b5061040e60095481565b3480156109bc575f80fd5b5061040e6109cb366004612cdb565b600a6020525f908152604090205481565b3480156109e7575f80fd5b506106606122b2565b3480156109fb575f80fd5b5061040e60185481565b348015610a10575f80fd5b5061040e610a1f366004612ea3565b612482565b348015610a2f575f80fd5b5061040e60175481565b348015610a44575f80fd5b5061040e60235481565b348015610a59575f80fd5b50610660610a68366004612cdb565b6124ac565b606060038054610a7c90612ecb565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa890612ecb565b8015610af35780601f10610aca57610100808354040283529160200191610af3565b820191905f5260205f20905b815481529060010190602001808311610ad657829003601f168201915b5050505050905090565b5f33610b0a818585612525565b60019150505b92915050565b5f806103e860215484610b299190612f11565b610b339190612f28565b90505f6103e860225485610b479190612f11565b610b519190612f28565b90505f6103e860235486610b659190612f11565b610b6f9190612f28565b90505f8183610b7e8689612f47565b610b889190612f47565b610b929190612f47565b9050610b9f888883612648565b8315610bbd57602454610bbd9089906001600160a01b031686612648565b8215610bdb57600654610bdb9089906001600160a01b031685612648565b8115610bf957602554610bf99089906001600160a01b031684612648565b5f610c048933612482565b905086811015610c6c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610c808933610c7b8a85612f47565b612525565b50600198975050505050505050565b5f33610b0a818585610ca18383612482565b610c7b9190612f5a565b602b8181548110610cba575f80fd5b5f9182526020909120600290910201805460019091015460ff821692506101009091046001600160a01b03169083565b602b546060905f9067ffffffffffffffff811115610d0a57610d0a612bc7565b604051908082528060200260200182016040528015610d33578160200160208202803683370190505b50602b549091505f03610d53575050604080515f81526020810190915290565b5f5b602b54811015610dc457602b8181548110610d7257610d72612f6d565b5f91825260209091206002918202015460ff1690811115610d9557610d95612b28565b828281518110610da757610da7612f6d565b602090810291909101015280610dbc81612f81565b915050610d55565b50919050565b333b15610e195760405162461bcd60e51b815260206004820152601860248201527f6e6f742073757070657220636f6e7472616374206d696e7400000000000000006044820152606401610c63565b5f8311610e5d5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081b5a5b9d0818dbdd5b9d60721b6044820152606401610c63565b600954831115610ebf5760405162461bcd60e51b815260206004820152602760248201527f4578636565646564206d6178696d756d206d696e7420636f756e7420706572206044820152666164647265737360c81b6064820152608401610c63565b600854610ecc9084612f11565b341015610f0b5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c20707269636560981b6044820152606401610c63565b600954335f908152600a6020526040902054610f28908590612f5a565b1115610f635760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610c63565b60265433925061100a57601f54421015610fbf5760405162461bcd60e51b815260206004820152601b60248201527f4d696e74696e6720686173206e6f7420737461727465642079657400000000006044820152606401610c63565b6020544211156110055760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a185cc8195b991959607a1b6044820152606401610c63565b6110f5565b601e544210156110f557601c5483601d546110259190612f5a565b11156110605760405162461bcd60e51b815260206004820152600a6024820152691bdd995c881b1a5b5a5d60b21b6044820152606401610c63565b6040516bffffffffffffffffffffffff193360601b1660208201525f906034016040516020818303038152906040528051906020012090506110a582602654836127eb565b6110dd5760405162461bcd60e51b8152602060048201526009602482015268139bdd08125b8815db60ba1b6044820152606401610c63565b83601d5f8282546110ee9190612f5a565b9091555050505b601e5442101561116d57601d5460075461110f9190612f47565b83601d54600b546111209190612f47565b61112a9190612f5a565b111561116d5760405162461bcd60e51b81526020600482015260126024820152711a5b1b1959d85b081b5a5b9d105b5bdd5b9d60721b6044820152606401610c63565b600c54601b54601a546001600160a01b039092169163d0e30db0916103e8916111969083612f47565b6111a09190612f47565b6111aa9034612f11565b6111b49190612f28565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156111dd575f80fd5b505af11580156111ef573d5f803e3d5ffd5b5050600c54600d54601b54601a546001600160a01b03938416965063095ea7b395509290911692506103e8916112259083612f47565b61122f9190612f47565b6112399034612f11565b6112439190612f28565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561128b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112af9190612f99565b50600c54600d54601b54601a546001600160a01b03938416936323b872dd9330939116916103e891906112e29083612f47565b6112ec9190612f47565b6112f69034612f11565b6113009190612f28565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015611351573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113759190612f99565b505f600754621e84806113889190612f11565b8460105461139560025490565b61139f9190612f11565b6113a99190612f11565b6113b39190612f28565b90505f5b602b54811015611783575f602b82815481106113d5576113d5612f6d565b5f91825260209091206002918202015460ff16908111156113f8576113f8612b28565b036115bb57602754600103611507575f602b828154811061141b5761141b612f6d565b5f918252602082206002919091020154604051632f745c5960e01b8152336004820152602481018390526101009091046001600160a01b031692508290632f745c5990604401602060405180830381865afa15801561147c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a09190612fb8565b5f818152602a602052604090205490915060ff16156114ed5760405162461bcd60e51b815260206004820152600960248201526868616420757365642160b81b6044820152606401610c63565b5f908152602a60205260409020805460ff19166001179055505b5f611541602b838154811061151e5761151e612f6d565b5f91825260209091206002909102015461010090046001600160a01b0316612800565b9050602b828154811061155657611556612f6d565b905f5260205f209060020201600101548110156115b55760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742045524337323120746f6b656e730000000000006044820152606401610c63565b50611771565b6001602b82815481106115d0576115d0612f6d565b5f91825260209091206002918202015460ff16908111156115f3576115f3612b28565b03611683575f61160f602b838154811061151e5761151e612f6d565b9050602b828154811061162457611624612f6d565b905f5260205f209060020201600101548110156115b55760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e7420455243323020746f6b656e73000000000000006044820152606401610c63565b6002602b828154811061169857611698612f6d565b5f91825260209091206002918202015460ff16908111156116bb576116bb612b28565b03611771575f6116fb602b83815481106116d7576116d7612f6d565b5f91825260208220600290910201546001600160a01b036101009091041690612871565b9050602b828154811061171057611710612f6d565b905f5260205f2090600202016001015481101561176f5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e74204552433131353520746f6b656e7300000000006044820152606401610c63565b505b8061177b81612f81565b9150506113b7565b5061178f308483612648565b600d546117a79030906001600160a01b031683612648565b600d5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156117f3575f80fd5b505af1158015611805573d5f803e3d5ffd5b5050335f908152600a602052604081208054889450909250611828908490612f5a565b9250508190555083600b5f8282546118409190612f5a565b909155505050505050565b600754600b541461186e5760405162461bcd60e51b8152600401610c6390612fcf565b600f546001600160a01b031633146118b65760405162461bcd60e51b815260206004820152600b60248201526a3737ba103232b8363cb2b960a91b6044820152606401610c63565b601854601954111561190a5760405162461bcd60e51b815260206004820152601d60248201527f416c6c20746f6b656e732068617665206265656e20636c61696d65642e0000006044820152606401610c63565b60145442905f9061191e9062015180612f11565b60155461192b9190612f5a565b90505f6017546016546014546119419190612f28565b61194e9062015180612f11565b6119588585612f47565b6119629190612f28565b61196c9190612f47565b90505f8030905060165483106119ef576040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e29190612fb8565b6016546017559150611a6a565b5f8311611a375760405162461bcd60e51b81526020600482015260166024820152756e6f74206861766520756e6c6f636b2074696d65732160501b6044820152606401610c63565b601654601854611a479190612f28565b611a519084612f11565b91508260175f828254611a649190612f5a565b90915550505b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015611ab4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad89190612f99565b505050505050565b600754600b5414611b035760405162461bcd60e51b8152600401610c6390612fcf565b60285460ff1615611b445760405162461bcd60e51b815260206004820152600b60248201526a1a18590818db185a5b595960aa1b6044820152606401610c63565b600f546001600160a01b03163314611b8c5760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79206465706c792160a81b6044820152606401610c63565b4780611bda5760405162461bcd60e51b815260206004820152601c60248201527f436f6e747261637420686173206e6f204554482062616c616e63652e000000006044820152606401610c63565b600f54601b54601a546001600160a01b03909216915f91611bfa91612f5a565b83601a54611c089190612f11565b611c129190612f28565b90506029545f03611c63576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611c50573d5f803e3d5ffd5b50611c5b8184612f47565b602955611c99565b6029546040516001600160a01b0384169180156108fc02915f818181858888f19350505050158015611c97573d5f803e3d5ffd5b505b50506028805460ff1916600117905550565b611cb36128e8565b611cbc5f612942565b565b604080515f815260208101909152611cd7838383610dca565b505050565b606060048054610a7c90612ecb565b611cf36128e8565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6060602b805480602002602001604051908101604052809291908181526020015f905b82821015611dc4578382905f5260205f2090600202016040518060600160405290815f82015f9054906101000a900460ff166002811115611d7b57611d7b612b28565b6002811115611d8c57611d8c612b28565b8152815461010090046001600160a01b0316602080830191909152600192830154604090920191909152918352929092019101611d38565b50505050905090565b5f3381611dda8286612482565b905083811015611e3a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c63565b611e478286868403612525565b506001949350505050565b5f806103e860215484611e659190612f11565b611e6f9190612f28565b90505f6103e860225485611e839190612f11565b611e8d9190612f28565b90505f6103e860235486611ea19190612f11565b611eab9190612f28565b90505f8183611eba8689612f47565b611ec49190612f47565b611ece9190612f47565b9050611edb338883612648565b8315611ef957602454611ef99033906001600160a01b031686612648565b8215611f1757600654611f179033906001600160a01b031685612648565b8115611f3557602554611f359033906001600160a01b031684612648565b5060019695505050505050565b611f4a6128e8565b602655565b611f576128e8565b611f62602b5f612a08565b5f6001600160a01b0316815f81518110611f7e57611f7e612f6d565b60200260200101516001600160a01b031614612049576040805160608101909152602b90805f8152602001835f81518110611fbb57611fbb612f6d565b6020908102919091018101516001600160a01b031682526001918101829052835480830185555f9485529320825160029485029091018054939490939192849260ff191691849081111561201157612011612b28565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b03199091161781556040909101516001909101555b5f6001600160a01b03168160018151811061206657612066612f6d565b60200260200101516001600160a01b031614612150576040805160608101909152602b908060018152602001836001815181106120a5576120a5612f6d565b60200260200101516001600160a01b0316815260200184600e815181106120ce576120ce612f6d565b6020908102919091018101519091528254600181810185555f94855291909320825160029485029091018054939490939192849260ff191691849081111561211857612118612b28565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b03199091161781556040909101516001909101555b5f6001600160a01b03168160028151811061216d5761216d612f6d565b60200260200101516001600160a01b03161461223a576040805160608101909152602b908060028152602001836002815181106121ac576121ac612f6d565b6020908102919091018101516001600160a01b031682526001918101829052835480830185555f9485529320825160029485029091018054939490939192849260ff191691849081111561220257612202612b28565b0217905550602082015181546001600160a01b0390911661010002610100600160a81b03199091161781556040909101516001909101555b5f6001600160a01b03168160038151811061225757612257612f6d565b60200260200101516001600160a01b0316146122ae578060038151811061228057612280612f6d565b602002602001015160245f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5050565b600754600b54146122d55760405162461bcd60e51b8152600401610c6390612fcf565b602854610100900460ff161561231b5760405162461bcd60e51b815260206004820152600b60248201526a1a18590818db185a5b595960aa1b6044820152606401610c63565b600e546001600160a01b031633146123615760405162461bcd60e51b81526020600482015260096024820152686f6e6c79206465762160b81b6044820152606401610c63565b47806123af5760405162461bcd60e51b815260206004820152601c60248201527f436f6e747261637420686173206e6f204554482062616c616e63652e000000006044820152606401610c63565b600e54601b54601a546001600160a01b03909216915f916123cf91612f5a565b83601b546123dd9190612f11565b6123e79190612f28565b90506029545f03612438576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015612425573d5f803e3d5ffd5b506124308184612f47565b60295561246e565b6029546040516001600160a01b0384169180156108fc02915f818181858888f1935050505015801561246c573d5f803e3d5ffd5b505b50506028805461ff00191661010017905550565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6124b46128e8565b6001600160a01b0381166125195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c63565b61252281612942565b50565b6001600160a01b0383166125875760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c63565b6001600160a01b0382166125e85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c63565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126ac5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c63565b6001600160a01b03821661270e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c63565b6001600160a01b0383165f90815260208190526040902054818110156127855760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c63565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505050565b5f826127f78584612993565b14949350505050565b6040516370a0823160e01b81523360048201525f9082906001600160a01b038216906370a0823190602401602060405180830381865afa158015612846573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061286a9190612fb8565b9392505050565b604051627eeac760e11b8152336004820152602481018290525f9083906001600160a01b0382169062fdd58e90604401602060405180830381865afa1580156128bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128e09190612fb8565b949350505050565b6005546001600160a01b03163314611cbc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c63565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f81815b84518110156129d7576129c3828683815181106129b6576129b6612f6d565b60200260200101516129df565b9150806129cf81612f81565b915050612997565b509392505050565b5f8183106129f9575f82815260208490526040902061286a565b505f9182526020526040902090565b5080545f8255600202905f5260205f209081019061252291905b80821115612a465780546001600160a81b03191681555f6001820155600201612a22565b5090565b5f60208284031215612a5a575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015612a8c57858101830151858201604001528201612a70565b505f604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114612ac2575f80fd5b919050565b5f8060408385031215612ad8575f80fd5b612ae183612aac565b946020939093013593505050565b5f805f60608486031215612b01575f80fd5b612b0a84612aac565b9250612b1860208501612aac565b9150604084013590509250925092565b634e487b7160e01b5f52602160045260245ffd5b60038110612b5857634e487b7160e01b5f52602160045260245ffd5b9052565b60608101612b6a8286612b3c565b6001600160a01b0393909316602082015260400152919050565b602080825282518282018190525f9190848201906040850190845b81811015612bbb57835183529284019291840191600101612b9f565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c0457612c04612bc7565b604052919050565b5f67ffffffffffffffff821115612c2557612c25612bc7565b5060051b60200190565b5f805f60608486031215612c41575f80fd5b833592506020612c52818601612aac565b9250604085013567ffffffffffffffff811115612c6d575f80fd5b8501601f81018713612c7d575f80fd5b8035612c90612c8b82612c0c565b612bdb565b81815260059190911b82018301908381019089831115612cae575f80fd5b928401925b82841015612ccc57833582529284019290840190612cb3565b80955050505050509250925092565b5f60208284031215612ceb575f80fd5b61286a82612aac565b5f8060408385031215612d05575f80fd5b82359150612d1560208401612aac565b90509250929050565b602080825282518282018190525f919060409081850190868401855b82811015612d79578151612d4f858251612b3c565b808701516001600160a01b0316858801528501518585015260609093019290850190600101612d3a565b5091979650505050505050565b5f82601f830112612d95575f80fd5b81356020612da5612c8b83612c0c565b82815260059290921b84018101918181019086841115612dc3575f80fd5b8286015b84811015612de557612dd881612aac565b8352918301918301612dc7565b509695505050505050565b5f8060408385031215612e01575f80fd5b823567ffffffffffffffff80821115612e18575f80fd5b818501915085601f830112612e2b575f80fd5b81356020612e3b612c8b83612c0c565b82815260059290921b84018101918181019089841115612e59575f80fd5b948201945b83861015612e7757853582529482019490820190612e5e565b96505086013592505080821115612e8c575f80fd5b50612e9985828601612d86565b9150509250929050565b5f8060408385031215612eb4575f80fd5b612ebd83612aac565b9150612d1560208401612aac565b600181811c90821680612edf57607f821691505b602082108103610dc457634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b1057610b10612efd565b5f82612f4257634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610b1057610b10612efd565b80820180821115610b1057610b10612efd565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612f9257612f92612efd565b5060010190565b5f60208284031215612fa9575f80fd5b8151801515811461286a575f80fd5b5f60208284031215612fc8575f80fd5b5051919050565b6020808252601390820152720eec2d2e8d2dcce40dad2dce840ccd2dcd2e6d606b1b60408201526060019056fea2646970667358221220a41dfbf6e8087331afa4f1029281ed9f3f4b8689098f31ab40fcf7db21cbc88164736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000115eec47f6cf7e350000000000000000000000000000000000000000000000000000000000000000004e2000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000006696f0eeff4af5409b99047053d6f714b7a2af3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e80e91f6fbdfcb7ee5fc4e0afe39a68306adc94000000000000000000000000ec2034230a3710a6eb34be818276b8c7ceb254bd00000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000064265726332300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f466169722062657263323020706f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000649f851c000000000000000000000000000000000000000000000000000000006c25a49c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Berc20
Arg [1] : symbol (string): Fair berc20 pow
Arg [2] : totalSupply (uint256): 21000000000000000000000000
Arg [3] : maxMintCount (uint256): 20000
Arg [4] : maxMintPerAddress (uint256): 100
Arg [5] : mintPrice (uint256): 5000000000000000
Arg [6] : factoryContract (address): 0x6696f0EEfF4aF5409B99047053D6F714B7a2AF30
Arg [7] : devAddress (address): 0x0000000000000000000000000000000000000000
Arg [8] : deplyAddress (address): 0x0E80E91f6fBDfCB7Ee5FC4E0afe39A68306aDc94
Arg [9] : _airDropAddress (address): 0xEc2034230a3710a6EB34be818276b8C7CeB254BD
Arg [10] : params (uint256[]): 60,0,0,0,60,0,0,0,1688175900,1814406300,0,0,0,0,0,50,0,0,0
-----Encoded View---------------
35 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 000000000000000000000000000000000000000000115eec47f6cf7e35000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000004e20
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 0000000000000000000000000000000000000000000000000011c37937e08000
Arg [6] : 0000000000000000000000006696f0eeff4af5409b99047053d6f714b7a2af30
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000e80e91f6fbdfcb7ee5fc4e0afe39a68306adc94
Arg [9] : 000000000000000000000000ec2034230a3710a6eb34be818276b8c7ceb254bd
Arg [10] : 00000000000000000000000000000000000000000000000000000000000001e0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [12] : 4265726332300000000000000000000000000000000000000000000000000000
Arg [13] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [14] : 466169722062657263323020706f770000000000000000000000000000000000
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [16] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [24] : 00000000000000000000000000000000000000000000000000000000649f851c
Arg [25] : 000000000000000000000000000000000000000000000000000000006c25a49c
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
23879:15126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25577:43;;;;;;;;;;-1:-1:-1;25577:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;364:14:1;;357:22;339:41;;327:2;312:18;25577:43:0;;;;;;;;24100:25;;;;;;;;;;;;;;;;;;;537::1;;;525:2;510:18;24100:25:0;391:177:1;8373:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24606:40::-;;;;;;;;;;;;;;;;9307:201;;;;;;;;;;-1:-1:-1;9307:201:0;;;;;:::i;:::-;;:::i;8694:108::-;;;;;;;;;;-1:-1:-1;8782:12:0;;8694:108;;25425:34;;;;;;;;;;;;;;;;33621:1075;;;;;;;;;;-1:-1:-1;33621:1075:0;;;;;:::i;:::-;;:::i;25504:26::-;;;;;;;;;;-1:-1:-1;25504:26:0;;;;;;;;;;;25468:29;;;;;;;;;;-1:-1:-1;25468:29:0;;;;;;;;24696:32;;;;;;;;;;;;;;;;8593:93;;;;;;;;;;-1:-1:-1;8593:93:0;;8676:2;2038:36:1;;2026:2;2011:18;8593:93:0;1896:184:1;24524:26:0;;;;;;;;;;;;;;;;9821:238;;;;;;;;;;-1:-1:-1;9821:238:0;;;;;:::i;:::-;;:::i;25354:30::-;;;;;;;;;;-1:-1:-1;25354:30:0;;;;-1:-1:-1;;;;;25354:30:0;;;;;;-1:-1:-1;;;;;2249:32:1;;;2231:51;;2219:2;2204:18;25354:30:0;2085:203:1;25206:31:0;;;;;;;;;;;;;;;;24264:71;;;;;;;;;;-1:-1:-1;24264:71:0;;;;-1:-1:-1;;;;;24264:71:0;;;24559:40;;;;;;;;;;;;;;;;25812:35;;;;;;;;;;-1:-1:-1;25812:35:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;38577:421::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24889:30::-;;;;;;;;;;;;;;;;24653:34;;;;;;;;;;;;;;;;28035:3306;;;;;;:::i;:::-;;:::i;:::-;;25537:31;;;;;;;;;;;;;;;;24454:26;;;;;;;;;;-1:-1:-1;24454:26:0;;;;-1:-1:-1;;;;;24454:26:0;;;36324:1054;;;;;;;;;;;;;:::i;35595:721::-;;;;;;;;;;;;;:::i;8810:127::-;;;;;;;;;;-1:-1:-1;8810:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8911:18:0;8884:7;8911:18;;;;;;;;;;;;8810:127;25320:27;;;;;;;;;;-1:-1:-1;25320:27:0;;;;-1:-1:-1;;;;;25320:27:0;;;7449:103;;;;;;;;;;;;;:::i;25171:26::-;;;;;;;;;;;;;;;;24767:32;;;;;;;;;;;;;;;;38062:98;;;;;;;;;;-1:-1:-1;38139:13:0;;38062:98;;25244:29;;;;;;;;;;;;;;;;24735:25;;;;;;;;;;;;;;;;24487:28;;;;;;;;;;-1:-1:-1;24487:28:0;;;;-1:-1:-1;;;;;24487:28:0;;;38168:110;;;;;;;;;;-1:-1:-1;38250:13:0;:20;38168:110;;25395:21;;;;;;;;;;;;;;;;25015:31;;;;;;;;;;;;;;;;24065:28;;;;;;;;;;;;;;;;24422:25;;;;;;;;;;-1:-1:-1;24422:25:0;;;;-1:-1:-1;;;;;24422:25:0;;;7214:87;;;;;;;;;;-1:-1:-1;7287:6:0;;-1:-1:-1;;;;;7287:6:0;7214:87;;25134:30;;;;;;;;;;;;;;;;31349:177;;;;;;:::i;:::-;;:::i;8481:104::-;;;;;;;;;;;;;:::i;25093:30::-;;;;;;;;;;;;;;;;34706:88;;;;;;;;;;-1:-1:-1;34706:88:0;;;;;:::i;:::-;;:::i;38286:114::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10067:436::-;;;;;;;;;;-1:-1:-1;10067:436:0;;;;;:::i;:::-;;:::i;24227:28::-;;;;;;;;;;;;;;;;32780:833;;;;;;;;;;-1:-1:-1;32780:833:0;;;;;:::i;:::-;;:::i;34802:84::-;;;;;;;;;;-1:-1:-1;34802:84:0;;;;;:::i;:::-;;:::i;31745:1027::-;;;;;;;;;;-1:-1:-1;31745:1027:0;;;;;:::i;:::-;;:::i;24975:31::-;;;;;;;;;;;;;;;;25053:33;;;;;;;;;;;;;;;;24930:38;;;;;;;;;;;;;;;;24132:33;;;;;;;;;;;;;;;;24174:46;;;;;;;;;;-1:-1:-1;24174:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;34894:693;;;;;;;;;;;;;:::i;24850:32::-;;;;;;;;;;;;;;;;9148:151;;;;;;;;;;-1:-1:-1;9148:151:0;;;;;:::i;:::-;;:::i;24806:37::-;;;;;;;;;;;;;;;;25280:31;;;;;;;;;;;;;;;;7560:201;;;;;;;;;;-1:-1:-1;7560:201:0;;;;;:::i;:::-;;:::i;8373:100::-;8427:13;8460:5;8453:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8373:100;:::o;9307:201::-;9390:4;754:10;9446:32;754:10;9462:7;9471:6;9446:8;:32::i;:::-;9496:4;9489:11;;;9307:201;;;;;:::o;33621:1075::-;33719:4;33736:25;33790:4;33773:14;;33764:6;:23;;;;:::i;:::-;:30;;;;:::i;:::-;33736:58;;33805:23;33855:4;33840:12;;33831:6;:21;;;;:::i;:::-;:28;;;;:::i;:::-;33805:54;;33870:25;33924:4;33907:14;;33898:6;:23;;;;:::i;:::-;:30;;;;:::i;:::-;33870:58;-1:-1:-1;33939:22:0;33870:58;33992:15;33964:26;33973:17;33964:6;:26;:::i;:::-;:43;;;;:::i;:::-;:61;;;;:::i;:::-;33939:86;;34044:50;34060:6;34068:9;34079:14;34044:15;:50::i;:::-;34108:19;;34105:105;;34167:11;;34143:55;;34159:6;;-1:-1:-1;;;;;34167:11:0;34180:17;34143:15;:55::i;:::-;34223:17;;34220:99;;34280:9;;34256:51;;34272:6;;-1:-1:-1;;;;;34280:9:0;34291:15;34256;:51::i;:::-;34332:19;;34329:108;;34391:14;;34367:58;;34383:6;;-1:-1:-1;;;;;34391:14:0;34407:17;34367:15;:58::i;:::-;34447:24;34474:29;34484:6;34492:10;34474:9;:29::i;:::-;34447:56;;34542:6;34522:16;:26;;34514:79;;;;-1:-1:-1;;;34514:79:0;;10385:2:1;34514:79:0;;;10367:21:1;10424:2;10404:18;;;10397:30;10463:34;10443:18;;;10436:62;-1:-1:-1;;;10514:18:1;;;10507:38;10562:19;;34514:79:0;;;;;;;;;34604:61;34619:6;34627:10;34639:25;34658:6;34639:16;:25;:::i;:::-;34604:14;:61::i;:::-;-1:-1:-1;34684:4:0;;33621:1075;-1:-1:-1;;;;;;;;33621:1075:0:o;9821:238::-;9909:4;754:10;9965:64;754:10;9981:7;10018:10;9990:25;754:10;9981:7;9990:9;:25::i;:::-;:38;;;;:::i;25812:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25812:35:0;;;;-1:-1:-1;;;;;25812:35:0;;;:::o;38577:421::-;38705:13;:20;38629:16;;38658:30;;38691:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38691:35:0;-1:-1:-1;38741:13:0;:20;38658:68;;-1:-1:-1;38763:1:0;38741:23;38737:78;;-1:-1:-1;;38787:16:0;;;38801:1;38787:16;;;;;;;;;38577:421::o;38737:78::-;38830:9;38825:135;38849:13;:20;38845:24;;38825:135;;;38918:13;38932:1;38918:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:29;;;;38910:38;;;;;;;:::i;:::-;38891:13;38905:1;38891:16;;;;;;;;:::i;:::-;;;;;;;;;;:57;38871:3;;;;:::i;:::-;;;;38825:135;;;-1:-1:-1;38977:13:0;38577:421;-1:-1:-1;38577:421:0:o;28035:3306::-;28162:10;31670:17;31715:12;28142:59;;;;-1:-1:-1;;;28142:59:0;;11196:2:1;28142:59:0;;;11178:21:1;11235:2;11215:18;;;11208:30;11274:26;11254:18;;;11247:54;11318:18;;28142:59:0;10994:348:1;28142:59:0;28232:1;28220:9;:13;28212:44;;;;-1:-1:-1;;;28212:44:0;;11549:2:1;28212:44:0;;;11531:21:1;11588:2;11568:18;;;11561:30;-1:-1:-1;;;11607:18:1;;;11600:48;11665:18;;28212:44:0;11347:342:1;28212:44:0;28288:18;;28275:9;:31;;28267:83;;;;-1:-1:-1;;;28267:83:0;;11896:2:1;28267:83:0;;;11878:21:1;11935:2;11915:18;;;11908:30;11974:34;11954:18;;;11947:62;-1:-1:-1;;;12025:18:1;;;12018:37;12072:19;;28267:83:0;11694:403:1;28267:83:0;28392:10;;28382:20;;:9;:20;:::i;:::-;28369:9;:33;;28361:59;;;;-1:-1:-1;;;28361:59:0;;12304:2:1;28361:59:0;;;12286:21:1;12343:2;12323:18;;;12316:30;-1:-1:-1;;;12362:18:1;;;12355:43;12415:18;;28361:59:0;12102:337:1;28361:59:0;28476:18;;28451:10;28439:23;;;;:11;:23;;;;;;:33;;28463:9;;28439:33;:::i;:::-;:55;;28431:78;;;;-1:-1:-1;;;28431:78:0;;12646:2:1;28431:78:0;;;12628:21:1;12685:2;12665:18;;;12658:30;-1:-1:-1;;;12704:18:1;;;12697:40;12754:18;;28431:78:0;12444:334:1;28431:78:0;28566:6;;28533:10;;-1:-1:-1;28556:552:0;;28616:13;;28597:15;:32;;28589:72;;;;-1:-1:-1;;;28589:72:0;;12985:2:1;28589:72:0;;;12967:21:1;13024:2;13004:18;;;12997:30;13063:29;13043:18;;;13036:57;13110:18;;28589:72:0;12783:351:1;28589:72:0;28703:11;;28684:15;:30;;28676:60;;;;-1:-1:-1;;;28676:60:0;;13341:2:1;28676:60:0;;;13323:21:1;13380:2;13360:18;;;13353:30;-1:-1:-1;;;13399:18:1;;;13392:47;13456:18;;28676:60:0;13139:341:1;28676:60:0;28556:552;;;28788:15;;28772;:31;28768:329;;;28857:12;;28846:9;28831:14;;:24;;;;:::i;:::-;:38;;28823:60;;;;-1:-1:-1;;;28823:60:0;;12646:2:1;28823:60:0;;;12628:21:1;12685:2;12665:18;;;12658:30;-1:-1:-1;;;12704:18:1;;;12697:40;12754:18;;28823:60:0;12444:334:1;28823:60:0;28927:28;;-1:-1:-1;;28944:10:0;13634:2:1;13630:15;13626:53;28927:28:0;;;13614:66:1;28902:12:0;;13696::1;;28927:28:0;;;;;;;;;;;;28917:39;;;;;;28902:54;;28983:39;29002:5;29009:6;;29017:4;28983:18;:39::i;:::-;28975:60;;;;-1:-1:-1;;;28975:60:0;;13921:2:1;28975:60:0;;;13903:21:1;13960:1;13940:18;;;13933:29;-1:-1:-1;;;13978:18:1;;;13971:39;14027:18;;28975:60:0;13719:332:1;28975:60:0;29072:9;29054:14;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;;28768:329:0;29140:15;;29124;:31;29120:168;;;29238:14;;29222:13;;:30;;;;:::i;:::-;29208:9;29193:14;;29179:13;;:28;;;;:::i;:::-;:38;;;;:::i;:::-;:74;;29171:105;;;;-1:-1:-1;;;29171:105:0;;14258:2:1;29171:105:0;;;14240:21:1;14297:2;14277:18;;;14270:30;-1:-1:-1;;;14316:18:1;;;14309:48;14374:18;;29171:105:0;14056:342:1;29171:105:0;29306:11;;29370:12;;29350:19;;-1:-1:-1;;;;;29306:11:0;;;;29300:26;;29384:4;;29345:24;;29384:4;29345:24;:::i;:::-;:37;;;;:::i;:::-;29334:49;;:9;:49;:::i;:::-;:54;;;;:::i;:::-;29300:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29408:11:0;;29429:10;;29477:12;;29457:19;;-1:-1:-1;;;;;29408:11:0;;;;-1:-1:-1;29402:26:0;;-1:-1:-1;29429:10:0;;;;;-1:-1:-1;29491:4:0;;29452:24;;29491:4;29452:24;:::i;:::-;:37;;;;:::i;:::-;29441:49;;:9;:49;:::i;:::-;:54;;;;:::i;:::-;29402:94;;-1:-1:-1;;;;;;29402:94:0;;;;;;;-1:-1:-1;;;;;14595:32:1;;;29402:94:0;;;14577:51:1;14644:18;;;14637:34;14550:18;;29402:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29513:11:0;;29554:10;;29602:12;;29582:19;;-1:-1:-1;;;;;29513:11:0;;;;29507:31;;29547:4;;29554:10;;;29616:4;;29602:12;29577:24;;29616:4;29577:24;:::i;:::-;:37;;;;:::i;:::-;29566:49;;:9;:49;:::i;:::-;:54;;;;:::i;:::-;29507:114;;-1:-1:-1;;;;;;29507:114:0;;;;;;;-1:-1:-1;;;;;15222:15:1;;;29507:114:0;;;15204:34:1;15274:15;;;;15254:18;;;15247:43;15306:18;;;15299:34;15139:18;;29507:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29635:18;29697:13;;29713:7;29697:23;;;;:::i;:::-;29683:9;29673:7;;29657:13;8782:12;;;8694:108;29657:13;:23;;;;:::i;:::-;:35;;;;:::i;:::-;29656:65;;;;:::i;:::-;29635:86;;29739:9;29734:1270;29758:13;:20;29754:24;;29734:1270;;;29837:19;29804:13;29818:1;29804:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:29;;;;:52;;;;;;;:::i;:::-;;29800:1193;;29880:17;;29899:1;29880:20;29877:362;;29924:34;29979:13;29993:1;29979:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:32;30053:51;;-1:-1:-1;;;30053:51:0;;30090:10;30053:51;;;14577::1;14644:18;;;14637:34;;;29979:32:0;;;;-1:-1:-1;;;;;29979:32:0;;-1:-1:-1;29979:32:0;;30053:36;;14550:18:1;;30053:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30136:20;;;;:11;:20;;;;;;30035:69;;-1:-1:-1;30136:20:0;;30135:21;30127:42;;;;-1:-1:-1;;;30127:42:0;;16022:2:1;30127:42:0;;;16004:21:1;16061:1;16041:18;;;16034:29;-1:-1:-1;;;16079:18:1;;;16072:39;16128:18;;30127:42:0;15820:332:1;30127:42:0;30192:20;;;;:11;:20;;;;;:27;;-1:-1:-1;;30192:27:0;30215:4;30192:27;;;-1:-1:-1;29877:362:0;30257:18;30278:53;30298:13;30312:1;30298:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:32;;;;-1:-1:-1;;;;;30298:32:0;30278:19;:53::i;:::-;30257:74;;30372:13;30386:1;30372:16;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;30358:10;:41;;30350:80;;;;-1:-1:-1;;;30350:80:0;;16359:2:1;30350:80:0;;;16341:21:1;16398:2;16378:18;;;16371:30;16437:28;16417:18;;;16410:56;16483:18;;30350:80:0;16157:350:1;30350:80:0;29858:588;29800:1193;;;30489:18;30456:13;30470:1;30456:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:29;;;;:51;;;;;;;:::i;:::-;;30452:541;;30528:18;30549:52;30568:13;30582:1;30568:16;;;;;;;;:::i;30549:52::-;30528:73;;30642:13;30656:1;30642:16;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;30628:10;:41;;30620:79;;;;-1:-1:-1;;;30620:79:0;;16714:2:1;30620:79:0;;;16696:21:1;16753:2;16733:18;;;16726:30;16792:27;16772:18;;;16765:55;16837:18;;30620:79:0;16512:349:1;30452:541:0;30758:20;30725:13;30739:1;30725:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:29;;;;:53;;;;;;;:::i;:::-;;30721:272;;30799:18;30820:57;30841:13;30855:1;30841:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;-1:-1:-1;;;;;30841:32:0;;;;;;30820:20;:57::i;:::-;30799:78;;30918:13;30932:1;30918:16;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;30904:10;:41;;30896:81;;;;-1:-1:-1;;;30896:81:0;;17068:2:1;30896:81:0;;;17050:21:1;17107:2;17087:18;;;17080:30;17146:29;17126:18;;;17119:57;17193:18;;30896:81:0;16866:351:1;30896:81:0;30780:213;30721:272;29780:3;;;;:::i;:::-;;;;29734:1270;;;;31096:48;31114:4;31121:10;31133;31096:9;:48::i;:::-;31180:10;;31155:48;;31173:4;;-1:-1:-1;;;;;31180:10:0;31192;31155:9;:48::i;:::-;31229:10;;;;;;;;;-1:-1:-1;;;;;31229:10:0;-1:-1:-1;;;;;31214:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31272:10:0;31260:23;;;;:11;:23;;;;;:36;;31287:9;;-1:-1:-1;31260:23:0;;-1:-1:-1;31260:36:0;;31287:9;;31260:36;:::i;:::-;;;;;;;;31324:9;31307:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;28035:3306:0:o;36324:1054::-;36395:13;;36380;;:28;36372:59;;;;-1:-1:-1;;;36372:59:0;;;;;;;:::i;:::-;36462:13;;-1:-1:-1;;;;;36462:13:0;36450:10;:25;36442:48;;;;-1:-1:-1;;;36442:48:0;;17772:2:1;36442:48:0;;;17754:21:1;17811:2;17791:18;;;17784:30;-1:-1:-1;;;17830:18:1;;;17823:41;17881:18;;36442:48:0;17570:335:1;36442:48:0;36531:17;;36509:18;;:39;;36501:81;;;;-1:-1:-1;;;36501:81:0;;18112:2:1;36501:81:0;;;18094:21:1;18151:2;18131:18;;;18124:30;18190:31;18170:18;;;18163:59;18239:18;;36501:81:0;17910:353:1;36501:81:0;36682:13;;36620:15;;36593:24;;36682:21;;36698:5;36682:21;:::i;:::-;36668:10;;:36;;;;:::i;:::-;36646:58;;36715:19;36820:20;;36790:17;;36774:13;;:33;;;;:::i;:::-;36773:43;;36811:5;36773:43;:::i;:::-;36738:30;36752:16;36738:11;:30;:::i;:::-;36737:80;;;;:::i;:::-;:103;;;;:::i;:::-;36715:125;;36851:23;36885:13;36916:4;36885:37;;36952:17;;36937:11;:32;36933:383;;37004:31;;-1:-1:-1;;;37004:31:0;;37029:4;37004:31;;;2231:51:1;-1:-1:-1;;;;;37004:16:0;;;;;2204:18:1;;37004:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37073:17;;37050:20;:40;36986:49;-1:-1:-1;36933:383:0;;;37143:1;37131:11;:13;37123:47;;;;-1:-1:-1;;;37123:47:0;;18470:2:1;37123:47:0;;;18452:21:1;18509:2;18489:18;;;18482:30;-1:-1:-1;;;18528:18:1;;;18521:52;18590:18;;37123:47:0;18268:346:1;37123:47:0;37236:17;;37218;;:35;;;;:::i;:::-;37203:51;;:11;:51;:::i;:::-;37185:69;;37293:11;37269:20;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;36933:383:0;37326:44;;-1:-1:-1;;;37326:44:0;;37342:10;37326:44;;;14577:51:1;14644:18;;;14637:34;;;-1:-1:-1;;;;;37326:15:0;;;;;14550:18:1;;37326:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36361:1017;;;;;36324:1054::o;35595:721::-;35664:13;;35649;;:28;35641:59;;;;-1:-1:-1;;;35641:59:0;;;;;;;:::i;:::-;35720:17;;;;35719:18;35711:41;;;;-1:-1:-1;;;35711:41:0;;18821:2:1;35711:41:0;;;18803:21:1;18860:2;18840:18;;;18833:30;-1:-1:-1;;;18879:18:1;;;18872:41;18930:18;;35711:41:0;18619:335:1;35711:41:0;35783:13;;-1:-1:-1;;;;;35783:13:0;35771:10;:25;35763:48;;;;-1:-1:-1;;;35763:48:0;;19161:2:1;35763:48:0;;;19143:21:1;19200:2;19180:18;;;19173:30;-1:-1:-1;;;19219:18:1;;;19212:41;19270:18;;35763:48:0;18959:335:1;35763:48:0;35840:21;35880:11;35872:52;;;;-1:-1:-1;;;35872:52:0;;19501:2:1;35872:52:0;;;19483:21:1;19540:2;19520:18;;;19513:30;19579;19559:18;;;19552:58;19627:18;;35872:52:0;19299:352:1;35872:52:0;35968:13;;36064:12;;36044:19;;-1:-1:-1;;;;;35968:13:0;;;;35935:22;;36044:32;;;:::i;:::-;36035:7;36015:19;;:27;;;;:::i;:::-;:62;;;;:::i;:::-;35993:84;;36091:13;;36106:1;36091:16;36088:186;;36123:28;;-1:-1:-1;;;;;36123:15:0;;;:28;;;;;36139:11;;36123:28;;;;36139:11;36123:15;:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36182:19:0;36190:11;36182:7;:19;:::i;:::-;36166:13;:35;36088:186;;;36248:13;;36232:30;;-1:-1:-1;;;;;36232:15:0;;;:30;;;;;;;;;36248:13;36232:15;:30;;;;;;;;;;;;;;;;;;;;;36088:186;-1:-1:-1;;36284:17:0;:24;;-1:-1:-1;;36284:24:0;36304:4;36284:24;;;-1:-1:-1;35595:721:0:o;7449:103::-;7173:13;:11;:13::i;:::-;7514:30:::1;7541:1;7514:18;:30::i;:::-;7449:103::o:0;31349:177::-;31454:16;;;31429:22;31454:16;;;;;;;;31481:37;31491:9;31501:10;31454:16;31481:9;:37::i;:::-;31418:108;31349:177;;:::o;8481:104::-;8537:13;8570:7;8563:14;;;;;:::i;34706:88::-;7173:13;:11;:13::i;:::-;34771:10:::1;:15:::0;;-1:-1:-1;;;;;;34771:15:0::1;-1:-1:-1::0;;;;;34771:15:0;;;::::1;::::0;;;::::1;::::0;;34706:88::o;38286:114::-;38338:21;38379:13;38372:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;38372:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38286:114;:::o;10067:436::-;10160:4;754:10;10160:4;10243:25;754:10;10260:7;10243:9;:25::i;:::-;10216:52;;10307:15;10287:16;:35;;10279:85;;;;-1:-1:-1;;;10279:85:0;;19858:2:1;10279:85:0;;;19840:21:1;19897:2;19877:18;;;19870:30;19936:34;19916:18;;;19909:62;-1:-1:-1;;;19987:18:1;;;19980:35;20032:19;;10279:85:0;19656:401:1;10279:85:0;10400:60;10409:5;10416:7;10444:15;10425:16;:34;10400:8;:60::i;:::-;-1:-1:-1;10491:4:0;;10067:436;-1:-1:-1;;;;10067:436:0:o;32780:833::-;32858:4;32875:25;32929:4;32912:14;;32903:6;:23;;;;:::i;:::-;:30;;;;:::i;:::-;32875:58;;32944:23;32994:4;32979:12;;32970:6;:21;;;;:::i;:::-;:28;;;;:::i;:::-;32944:54;;33009:25;33063:4;33046:14;;33037:6;:23;;;;:::i;:::-;:30;;;;:::i;:::-;33009:58;-1:-1:-1;33078:22:0;33009:58;33131:15;33103:26;33112:17;33103:6;:26;:::i;:::-;:43;;;;:::i;:::-;:61;;;;:::i;:::-;33078:86;;33175:54;33191:10;33203:9;33214:14;33175:15;:54::i;:::-;33243:19;;33240:109;;33306:11;;33278:59;;33294:10;;-1:-1:-1;;;;;33306:11:0;33319:17;33278:15;:59::i;:::-;33362:17;;33359:103;;33423:9;;33395:55;;33411:10;;-1:-1:-1;;;;;33423:9:0;33434:15;33395;:55::i;:::-;33475:19;;33472:112;;33538:14;;33510:62;;33526:10;;-1:-1:-1;;;;;33538:14:0;33554:17;33510:15;:62::i;:::-;-1:-1:-1;33601:4:0;;32780:833;-1:-1:-1;;;;;;32780:833:0:o;34802:84::-;7173:13;:11;:13::i;:::-;34865:6:::1;:13:::0;34802:84::o;31745:1027::-;7173:13;:11;:13::i;:::-;31857:20:::1;31864:13;;31857:20;:::i;:::-;31920:1;-1:-1:-1::0;;;;;31892:30:0::1;:13;31906:1;31892:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;31892:30:0::1;;31888:248;;31958:165;::::0;;::::1;::::0;::::1;::::0;;;31939:13:::1;::::0;31958:165;-1:-1:-1;31958:165:0::1;;;;32059:13;32073:1;32059:16;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;31958:165:0::1;::::0;;32106:1:::1;31958:165:::0;;::::1;::::0;;;31939:185;;;;::::1;::::0;;-1:-1:-1;31939:185:0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;-1:-1:-1;;31939:185:0::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;31939:185:0::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;31939:185:0;;::::1;;;-1:-1:-1::0;;;;;;31939:185:0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;31888:248:::1;32178:1;-1:-1:-1::0;;;;;32150:30:0::1;:13;32164:1;32150:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;32150:30:0::1;;32146:256;;32216:173;::::0;;::::1;::::0;::::1;::::0;;;32197:13:::1;::::0;32216:173;32262:18:::1;32216:173;;;;32316:13;32330:1;32316:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;32216:173:0::1;;;;;32363:6;32370:2;32363:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;32216:173;;;32197:193;;::::1;::::0;;::::1;::::0;;-1:-1:-1;32197:193:0;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;-1:-1:-1;;32197:193:0::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;32197:193:0::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;32197:193:0;;::::1;;;-1:-1:-1::0;;;;;;32197:193:0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;32146:256:::1;32446:1;-1:-1:-1::0;;;;;32418:30:0::1;:13;32432:1;32418:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;32418:30:0::1;;32414:249;;32484:166;::::0;;::::1;::::0;::::1;::::0;;;32465:13:::1;::::0;32484:166;32530:20:::1;32484:166;;;;32586:13;32600:1;32586:16;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32484:166:0::1;::::0;;32633:1:::1;32484:166:::0;;::::1;::::0;;;32465:186;;;;::::1;::::0;;-1:-1:-1;32465:186:0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;-1:-1:-1;;32465:186:0::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;32465:186:0::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;32465:186:0;;::::1;;;-1:-1:-1::0;;;;;;32465:186:0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;32414:249:::1;32705:1;-1:-1:-1::0;;;;;32677:30:0::1;:13;32691:1;32677:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;32677:30:0::1;;32673:92;;32737:13;32751:1;32737:16;;;;;;;;:::i;:::-;;;;;;;32723:11;;:30;;;;;-1:-1:-1::0;;;;;32723:30:0::1;;;;;-1:-1:-1::0;;;;;32723:30:0::1;;;;;;32673:92;31745:1027:::0;;:::o;34894:693::-;34960:13;;34945;;:28;34937:59;;;;-1:-1:-1;;;34937:59:0;;;;;;;:::i;:::-;35016:14;;;;;;;35015:15;35007:38;;;;-1:-1:-1;;;35007:38:0;;18821:2:1;35007:38:0;;;18803:21:1;18860:2;18840:18;;;18833:30;-1:-1:-1;;;18879:18:1;;;18872:41;18930:18;;35007:38:0;18619:335:1;35007:38:0;35076:11;;-1:-1:-1;;;;;35076:11:0;35064:10;:23;35056:44;;;;-1:-1:-1;;;35056:44:0;;20264:2:1;35056:44:0;;;20246:21:1;20303:1;20283:18;;;20276:29;-1:-1:-1;;;20321:18:1;;;20314:39;20370:18;;35056:44:0;20062:332:1;35056:44:0;35129:21;35169:11;35161:52;;;;-1:-1:-1;;;35161:52:0;;19501:2:1;35161:52:0;;;19483:21:1;19540:2;19520:18;;;19513:30;19579;19559:18;;;19552:58;19627:18;;35161:52:0;19299:352:1;35161:52:0;35257:11;;35342:12;;35322:19;;-1:-1:-1;;;;;35257:11:0;;;;35224:22;;35322:32;;;:::i;:::-;35313:7;35300:12;;:20;;;;:::i;:::-;:55;;;;:::i;:::-;35280:75;;35369:13;;35384:1;35369:16;35366:182;;35401:26;;-1:-1:-1;;;;;35401:15:0;;;:26;;;;;35417:9;;35401:26;;;;35417:9;35401:15;:26;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35458:17:0;35466:9;35458:7;:17;:::i;:::-;35442:13;:33;35366:182;;;35522:13;;35506:30;;-1:-1:-1;;;;;35506:15:0;;;:30;;;;;;;;;35522:13;35506:15;:30;;;;;;;;;;;;;;;;;;;;;35366:182;-1:-1:-1;;35558:14:0;:21;;-1:-1:-1;;35558:21:0;;;;;-1:-1:-1;34894:693:0:o;9148:151::-;-1:-1:-1;;;;;9264:18:0;;;9237:7;9264:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9148:151::o;7560:201::-;7173:13;:11;:13::i;:::-;-1:-1:-1;;;;;7649:22:0;::::1;7641:73;;;::::0;-1:-1:-1;;;7641:73:0;;20601:2:1;7641:73:0::1;::::0;::::1;20583:21:1::0;20640:2;20620:18;;;20613:30;20679:34;20659:18;;;20652:62;-1:-1:-1;;;20730:18:1;;;20723:36;20776:19;;7641:73:0::1;20399:402:1::0;7641:73:0::1;7725:28;7744:8;7725:18;:28::i;:::-;7560:201:::0;:::o;12598:380::-;-1:-1:-1;;;;;12734:19:0;;12726:68;;;;-1:-1:-1;;;12726:68:0;;21008:2:1;12726:68:0;;;20990:21:1;21047:2;21027:18;;;21020:30;21086:34;21066:18;;;21059:62;-1:-1:-1;;;21137:18:1;;;21130:34;21181:19;;12726:68:0;20806:400:1;12726:68:0;-1:-1:-1;;;;;12813:21:0;;12805:68;;;;-1:-1:-1;;;12805:68:0;;21413:2:1;12805:68:0;;;21395:21:1;21452:2;21432:18;;;21425:30;21491:34;21471:18;;;21464:62;-1:-1:-1;;;21542:18:1;;;21535:32;21584:19;;12805:68:0;21211:398:1;12805:68:0;-1:-1:-1;;;;;12886:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12938:32;;537:25:1;;;12938:32:0;;510:18:1;12938:32:0;;;;;;;12598:380;;;:::o;10511:840::-;-1:-1:-1;;;;;10642:18:0;;10634:68;;;;-1:-1:-1;;;10634:68:0;;21816:2:1;10634:68:0;;;21798:21:1;21855:2;21835:18;;;21828:30;21894:34;21874:18;;;21867:62;-1:-1:-1;;;21945:18:1;;;21938:35;21990:19;;10634:68:0;21614:401:1;10634:68:0;-1:-1:-1;;;;;10721:16:0;;10713:64;;;;-1:-1:-1;;;10713:64:0;;22222:2:1;10713:64:0;;;22204:21:1;22261:2;22241:18;;;22234:30;22300:34;22280:18;;;22273:62;-1:-1:-1;;;22351:18:1;;;22344:33;22394:19;;10713:64:0;22020:399:1;10713:64:0;-1:-1:-1;;;;;10863:15:0;;10841:19;10863:15;;;;;;;;;;;10897:21;;;;10889:72;;;;-1:-1:-1;;;10889:72:0;;22626:2:1;10889:72:0;;;22608:21:1;22665:2;22645:18;;;22638:30;22704:34;22684:18;;;22677:62;-1:-1:-1;;;22755:18:1;;;22748:36;22801:19;;10889:72:0;22424:402:1;10889:72:0;-1:-1:-1;;;;;10997:15:0;;;:9;:15;;;;;;;;;;;11015:20;;;10997:38;;11215:13;;;;;;;;;;:23;;;;;;11267:26;;537:25:1;;;11215:13:0;;11267:26;;510:18:1;11267:26:0;;;;;;;10623:728;10511:840;;;:::o;1900:156::-;1991:4;2044;2015:25;2028:5;2035:4;2015:12;:25::i;:::-;:33;;1900:156;-1:-1:-1;;;;1900:156:0:o;37388:208::-;37552:36;;-1:-1:-1;;;37552:36:0;;37577:10;37552:36;;;2231:51:1;37465:7:0;;37518:15;;-1:-1:-1;;;;;37552:24:0;;;;;2204:18:1;;37552:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37545:43;37388:208;-1:-1:-1;;;37388:208:0:o;37815:239::-;38000:46;;-1:-1:-1;;;38000:46:0;;38026:10;38000:46;;;14577:51:1;14644:18;;;14637:34;;;37910:7:0;;37966:15;;-1:-1:-1;;;;;38000:25:0;;;;;14550:18:1;;38000:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37993:53;37815:239;-1:-1:-1;;;;37815:239:0:o;7309:132::-;7287:6;;-1:-1:-1;;;;;7287:6:0;754:10;7373:23;7365:68;;;;-1:-1:-1;;;7365:68:0;;23033:2:1;7365:68:0;;;23015:21:1;;;23052:18;;;23045:30;23111:34;23091:18;;;23084:62;23163:18;;7365:68:0;22831:356:1;7769:191:0;7862:6;;;-1:-1:-1;;;;;7879:17:0;;;-1:-1:-1;;;;;;7879:17:0;;;;;;;7912:40;;7862:6;;;7879:17;7862:6;;7912:40;;7843:16;;7912:40;7832:128;7769:191;:::o;2246:296::-;2329:7;2372:4;2329:7;2387:118;2411:5;:12;2407:1;:16;2387:118;;;2460:33;2470:12;2484:5;2490:1;2484:8;;;;;;;;:::i;:::-;;;;;;;2460:9;:33::i;:::-;2445:48;-1:-1:-1;2425:3:0;;;;:::i;:::-;;;;2387:118;;;-1:-1:-1;2522:12:0;2246:296;-1:-1:-1;;;2246:296:0:o;6467:149::-;6530:7;6561:1;6557;:5;:51;;6692:13;6786:15;;;6822:4;6815:15;;;6869:4;6853:21;;6557:51;;;-1:-1:-1;6692:13:0;6786:15;;;6822:4;6815:15;6869:4;6853:21;;;6467:149::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;573:548::-;685:4;714:2;743;732:9;725:21;775:6;769:13;818:6;813:2;802:9;798:18;791:34;843:1;853:140;867:6;864:1;861:13;853:140;;;962:14;;;958:23;;952:30;928:17;;;947:2;924:26;917:66;882:10;;853:140;;;857:3;1042:1;1037:2;1028:6;1017:9;1013:22;1009:31;1002:42;1112:2;1105;1101:7;1096:2;1088:6;1084:15;1080:29;1069:9;1065:45;1061:54;1053:62;;;;573:548;;;;:::o;1126:173::-;1194:20;;-1:-1:-1;;;;;1243:31:1;;1233:42;;1223:70;;1289:1;1286;1279:12;1223:70;1126:173;;;:::o;1304:254::-;1372:6;1380;1433:2;1421:9;1412:7;1408:23;1404:32;1401:52;;;1449:1;1446;1439:12;1401:52;1472:29;1491:9;1472:29;:::i;:::-;1462:39;1548:2;1533:18;;;;1520:32;;-1:-1:-1;;;1304:254:1:o;1563:328::-;1640:6;1648;1656;1709:2;1697:9;1688:7;1684:23;1680:32;1677:52;;;1725:1;1722;1715:12;1677:52;1748:29;1767:9;1748:29;:::i;:::-;1738:39;;1796:38;1830:2;1819:9;1815:18;1796:38;:::i;:::-;1786:48;;1881:2;1870:9;1866:18;1853:32;1843:42;;1563:328;;;;;:::o;2293:127::-;2354:10;2349:3;2345:20;2342:1;2335:31;2385:4;2382:1;2375:15;2409:4;2406:1;2399:15;2425:240;2509:1;2502:5;2499:12;2489:143;;2554:10;2549:3;2545:20;2542:1;2535:31;2589:4;2586:1;2579:15;2617:4;2614:1;2607:15;2489:143;2641:18;;2425:240::o;2670:382::-;2875:2;2860:18;;2887:47;2864:9;2916:6;2887:47;:::i;:::-;-1:-1:-1;;;;;2970:32:1;;;;2965:2;2950:18;;2943:60;3034:2;3019:18;3012:34;2670:382;;-1:-1:-1;2670:382:1:o;3057:632::-;3228:2;3280:21;;;3350:13;;3253:18;;;3372:22;;;3199:4;;3228:2;3451:15;;;;3425:2;3410:18;;;3199:4;3494:169;3508:6;3505:1;3502:13;3494:169;;;3569:13;;3557:26;;3638:15;;;;3603:12;;;;3530:1;3523:9;3494:169;;;-1:-1:-1;3680:3:1;;3057:632;-1:-1:-1;;;;;;3057:632:1:o;3694:127::-;3755:10;3750:3;3746:20;3743:1;3736:31;3786:4;3783:1;3776:15;3810:4;3807:1;3800:15;3826:275;3897:2;3891:9;3962:2;3943:13;;-1:-1:-1;;3939:27:1;3927:40;;3997:18;3982:34;;4018:22;;;3979:62;3976:88;;;4044:18;;:::i;:::-;4080:2;4073:22;3826:275;;-1:-1:-1;3826:275:1:o;4106:183::-;4166:4;4199:18;4191:6;4188:30;4185:56;;;4221:18;;:::i;:::-;-1:-1:-1;4266:1:1;4262:14;4278:4;4258:25;;4106:183::o;4294:1033::-;4396:6;4404;4412;4465:2;4453:9;4444:7;4440:23;4436:32;4433:52;;;4481:1;4478;4471:12;4433:52;4517:9;4504:23;4494:33;;4546:2;4567:38;4601:2;4590:9;4586:18;4567:38;:::i;:::-;4557:48;;4656:2;4645:9;4641:18;4628:32;4683:18;4675:6;4672:30;4669:50;;;4715:1;4712;4705:12;4669:50;4738:22;;4791:4;4783:13;;4779:27;-1:-1:-1;4769:55:1;;4820:1;4817;4810:12;4769:55;4856:2;4843:16;4879:60;4895:43;4935:2;4895:43;:::i;:::-;4879:60;:::i;:::-;4973:15;;;5055:1;5051:10;;;;5043:19;;5039:28;;;5004:12;;;;5079:19;;;5076:39;;;5111:1;5108;5101:12;5076:39;5135:11;;;;5155:142;5171:6;5166:3;5163:15;5155:142;;;5237:17;;5225:30;;5188:12;;;;5275;;;;5155:142;;;5316:5;5306:15;;;;;;;4294:1033;;;;;:::o;5332:186::-;5391:6;5444:2;5432:9;5423:7;5419:23;5415:32;5412:52;;;5460:1;5457;5450:12;5412:52;5483:29;5502:9;5483:29;:::i;5705:254::-;5773:6;5781;5834:2;5822:9;5813:7;5809:23;5805:32;5802:52;;;5850:1;5847;5840:12;5802:52;5886:9;5873:23;5863:33;;5915:38;5949:2;5938:9;5934:18;5915:38;:::i;:::-;5905:48;;5705:254;;;;;:::o;5964:901::-;6195:2;6247:21;;;6317:13;;6220:18;;;6339:22;;;6166:4;;6195:2;6380;;6398:18;;;;6439:15;;;6166:4;6482:357;6496:6;6493:1;6490:13;6482:357;;;6561:6;6555:13;6581:44;6621:3;6616:2;6610:9;6581:44;:::i;:::-;6669:11;;;6663:18;-1:-1:-1;;;;;6659:44:1;6645:12;;;6638:66;6744:11;;6738:18;6724:12;;;6717:40;6786:4;6777:14;;;;6814:15;;;;6700:1;6511:9;6482:357;;;-1:-1:-1;6856:3:1;;5964:901;-1:-1:-1;;;;;;;5964:901:1:o;7055:668::-;7109:5;7162:3;7155:4;7147:6;7143:17;7139:27;7129:55;;7180:1;7177;7170:12;7129:55;7216:6;7203:20;7242:4;7266:60;7282:43;7322:2;7282:43;:::i;7266:60::-;7360:15;;;7446:1;7442:10;;;;7430:23;;7426:32;;;7391:12;;;;7470:15;;;7467:35;;;7498:1;7495;7488:12;7467:35;7534:2;7526:6;7522:15;7546:148;7562:6;7557:3;7554:15;7546:148;;;7628:23;7647:3;7628:23;:::i;:::-;7616:36;;7672:12;;;;7579;;7546:148;;;-1:-1:-1;7712:5:1;7055:668;-1:-1:-1;;;;;;7055:668:1:o;7728:1140::-;7846:6;7854;7907:2;7895:9;7886:7;7882:23;7878:32;7875:52;;;7923:1;7920;7913:12;7875:52;7963:9;7950:23;7992:18;8033:2;8025:6;8022:14;8019:34;;;8049:1;8046;8039:12;8019:34;8087:6;8076:9;8072:22;8062:32;;8132:7;8125:4;8121:2;8117:13;8113:27;8103:55;;8154:1;8151;8144:12;8103:55;8190:2;8177:16;8212:4;8236:60;8252:43;8292:2;8252:43;:::i;8236:60::-;8330:15;;;8412:1;8408:10;;;;8400:19;;8396:28;;;8361:12;;;;8436:19;;;8433:39;;;8468:1;8465;8458:12;8433:39;8492:11;;;;8512:142;8528:6;8523:3;8520:15;8512:142;;;8594:17;;8582:30;;8545:12;;;;8632;;;;8512:142;;;8673:5;-1:-1:-1;;8716:18:1;;8703:32;;-1:-1:-1;;8747:16:1;;;8744:36;;;8776:1;8773;8766:12;8744:36;;8799:63;8854:7;8843:8;8832:9;8828:24;8799:63;:::i;:::-;8789:73;;;7728:1140;;;;;:::o;8873:260::-;8941:6;8949;9002:2;8990:9;8981:7;8977:23;8973:32;8970:52;;;9018:1;9015;9008:12;8970:52;9041:29;9060:9;9041:29;:::i;:::-;9031:39;;9089:38;9123:2;9112:9;9108:18;9089:38;:::i;9138:380::-;9217:1;9213:12;;;;9260;;;9281:61;;9335:4;9327:6;9323:17;9313:27;;9281:61;9388:2;9380:6;9377:14;9357:18;9354:38;9351:161;;9434:10;9429:3;9425:20;9422:1;9415:31;9469:4;9466:1;9459:15;9497:4;9494:1;9487:15;9523:127;9584:10;9579:3;9575:20;9572:1;9565:31;9615:4;9612:1;9605:15;9639:4;9636:1;9629:15;9655:168;9728:9;;;9759;;9776:15;;;9770:22;;9756:37;9746:71;;9797:18;;:::i;9828:217::-;9868:1;9894;9884:132;;9938:10;9933:3;9929:20;9926:1;9919:31;9973:4;9970:1;9963:15;10001:4;9998:1;9991:15;9884:132;-1:-1:-1;10030:9:1;;9828:217::o;10050:128::-;10117:9;;;10138:11;;;10135:37;;;10152:18;;:::i;10592:125::-;10657:9;;;10678:10;;;10675:36;;;10691:18;;:::i;10722:127::-;10783:10;10778:3;10774:20;10771:1;10764:31;10814:4;10811:1;10804:15;10838:4;10835:1;10828:15;10854:135;10893:3;10914:17;;;10911:43;;10934:18;;:::i;:::-;-1:-1:-1;10981:1:1;10970:13;;10854:135::o;14682:277::-;14749:6;14802:2;14790:9;14781:7;14777:23;14773:32;14770:52;;;14818:1;14815;14808:12;14770:52;14850:9;14844:16;14903:5;14896:13;14889:21;14882:5;14879:32;14869:60;;14925:1;14922;14915:12;15631:184;15701:6;15754:2;15742:9;15733:7;15729:23;15725:32;15722:52;;;15770:1;15767;15760:12;15722:52;-1:-1:-1;15793:16:1;;15631:184;-1:-1:-1;15631:184:1:o;17222:343::-;17424:2;17406:21;;;17463:2;17443:18;;;17436:30;-1:-1:-1;;;17497:2:1;17482:18;;17475:49;17556:2;17541:18;;17222:343::o
Swarm Source
ipfs://a41dfbf6e8087331afa4f1029281ed9f3f4b8689098f31ab40fcf7db21cbc881
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.