ETH Price: $2,528.03 (+0.67%)

Token

Error Cells (404CELL)
 

Overview

Max Total Supply

256 404CELL

Holders

76

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
kingofapes.eth
Balance
5 404CELL
0x35fa54663d7295e319a712850906b871dd1258a7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ErrorCells

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion
File 1 of 2 : bCell.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "./Metadata.sol";

/*

Error Cells ($404Cells)
An experimental hybrid of ERC404.

- 256 total supply
- 1 ETH + 128  $404CELLS initial liquidity
- 0.1 ETH mint from contract price
-- Inspired by the OG CellMates.

https://404cells.xyz/
https://twitter.com/404Cells
https://t.me/ErrorCells

*/

interface Receiver {
	function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes calldata _data) external returns (bytes4);
}

interface Router {
	function WETH() external pure returns (address);
	function factory() external pure returns (address);
	function addLiquidityETH(address, uint256, uint256, uint256, address, uint256) external payable returns (uint256, uint256, uint256);
}

interface Factory {
	function createPair(address, address) external returns (address);
}


contract ErrorCells {

	uint256 constant private UINT_MAX = type(uint256).max;
	uint256 constant private TOTAL_SUPPLY = 256;
	uint256 constant private LIQUIDITY_TOKENS = 128;
	Router constant private ROUTER = Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
	uint256 constant private M1 = 0x5555555555555555555555555555555555555555555555555555555555555555;
	uint256 constant private M2 = 0x3333333333333333333333333333333333333333333333333333333333333333;
	uint256 constant private M4 = 0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f;
	uint256 constant private H01 = 0x0101010101010101010101010101010101010101010101010101010101010101;
	bytes32 constant private TRANSFER_TOPIC = keccak256(bytes("Transfer(address,address,uint256)"));
	bytes32 constant private APPROVAL_TOPIC = keccak256(bytes("Approval(address,address,uint256)"));

	uint256 constant public MINT_COST = 0.1 ether;
	uint8 constant public decimals = 0;

	struct User {
		bytes32 mask;
		mapping(address => uint256) allowance;
		mapping(address => bool) approved;
	}

	struct Info {
		bytes32 salt;
		address pair;
		address owner;
		Metadata metadata;
		mapping(address => User) users;
		mapping(uint256 => address) approved;
		address[] holders;
	}
	Info private info;

	mapping(bytes4 => bool) public supportsInterface;


	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event ERC20Transfer(bytes32 indexed topic0, address indexed from, address indexed to, uint256 tokens) anonymous;
	event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId);
	event ERC20Approval(bytes32 indexed topic0, address indexed owner, address indexed spender, uint256 tokens) anonymous;
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);


	modifier _onlyOwner() {
		require(msg.sender == owner());
		_;
	}

	constructor() payable {
		require(msg.value > 0);
		info.owner = 0xa472a00fd615999e73C1e0dE240bc41C8C64730C;
		info.metadata = new Metadata();
		supportsInterface[0x01ffc9a7] = true; // ERC-165
		supportsInterface[0x80ac58cd] = true; // ERC-721
		supportsInterface[0x5b5e139f] = true; // Metadata
		info.salt = keccak256(abi.encodePacked("Salt:", blockhash(block.number - 1)));
	}

	function setOwner(address _owner) external _onlyOwner {
		info.owner = _owner;
	}

	function setMetadata(Metadata _metadata) external _onlyOwner {
		info.metadata = _metadata;
	}


	function initialize() external {
		require(pair() == address(0x0));
		address _this = address(this);
		address _weth = ROUTER.WETH();
		info.users[_this].mask = bytes32(UINT_MAX);
		info.holders.push(_this);
		emit ERC20Transfer(TRANSFER_TOPIC, address(0x0), _this, TOTAL_SUPPLY);
		for (uint256 i = 0; i < TOTAL_SUPPLY; i++) {
			emit Transfer(address(0x0), _this, TOTAL_SUPPLY + i + 1);
		}
		_approveERC20(_this, address(ROUTER), LIQUIDITY_TOKENS);
		info.pair = Factory(ROUTER.factory()).createPair(_weth, _this);
		ROUTER.addLiquidityETH{value:_this.balance}(_this, LIQUIDITY_TOKENS, 0, 0, owner(), block.timestamp);
		_transferERC20(_this, owner(), 10); // developer tokens
	}

	function mint(uint256 _tokens) external payable {
		address _this = address(this);
		uint256 _available = balanceOf(_this);
		require(_tokens <= _available);
		uint256 _cost = _tokens * MINT_COST;
		require(msg.value >= _cost);
		_transferERC20(_this, msg.sender, _tokens);
		payable(owner()).transfer(_cost);
		if (msg.value > _cost) {
			payable(msg.sender).transfer(msg.value - _cost);
		}
	}
	
	function approve(address _spender, uint256 _tokens) external returns (bool) {
		if (_tokens > TOTAL_SUPPLY && _tokens <= 2 * TOTAL_SUPPLY) {
			_approveNFT(_spender, _tokens);
		} else {
			_approveERC20(msg.sender, _spender, _tokens);
		}
		return true;
	}

	function setApprovalForAll(address _operator, bool _approved) external {
		info.users[msg.sender].approved[_operator] = _approved;
		emit ApprovalForAll(msg.sender, _operator, _approved);
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		_transferERC20(msg.sender, _to, _tokens);
		return true;
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		if (_tokens > TOTAL_SUPPLY && _tokens <= 2 * TOTAL_SUPPLY) {
			_transferNFT(_from, _to, _tokens);
		} else {
			uint256 _allowance = allowance(_from, msg.sender);
			require(_allowance >= _tokens);
			if (_allowance != UINT_MAX) {
				info.users[_from].allowance[msg.sender] -= _tokens;
			}
			_transferERC20(_from, _to, _tokens);
		}
		return true;
	}

	function safeTransferFrom(address _from, address _to, uint256 _tokenId) external {
		safeTransferFrom(_from, _to, _tokenId, "");
	}

	function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public {
		_transferNFT(_from, _to, _tokenId);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) == 0x150b7a02);
		}
	}

	function bulkTransfer(address _to, uint256[] memory _tokenIds) external {
		_transferNFTs(_to, _tokenIds);
	}
	

	function owner() public view returns (address) {
		return info.owner;
	}

	function pair() public view returns (address) {
		return info.pair;
	}

	function holders() public view returns (address[] memory) {
		return info.holders;
	}

	function salt() external view returns (bytes32) {
		return info.salt;
	}

	function metadata() external view returns (address) {
		return address(info.metadata);
	}

	function name() external view returns (string memory) {
		return info.metadata.name();
	}

	function symbol() external view returns (string memory) {
		return info.metadata.symbol();
	}

	function tokenURI(uint256 _tokenId) public view returns (string memory) {
		return info.metadata.tokenURI(_tokenId);
	}

	function totalSupply() public pure returns (uint256) {
		return TOTAL_SUPPLY;
	}

	function maskOf(address _user) public view returns (bytes32) {
		return info.users[_user].mask;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return _popcount(maskOf(_user));
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function ownerOf(uint256 _tokenId) public view returns (address) {
		unchecked {
			require(_tokenId > TOTAL_SUPPLY && _tokenId <= 2 * TOTAL_SUPPLY);
			bytes32 _mask = bytes32(1 << (_tokenId - TOTAL_SUPPLY - 1));
			address[] memory _holders = holders();
			for (uint256 i = 0; i < _holders.length; i++) {
				if (maskOf(_holders[i]) & _mask == _mask) {
					return _holders[i];
				}
			}
			return address(0x0);
		}
	}

	function getApproved(uint256 _tokenId) public view returns (address) {
		require(_tokenId > TOTAL_SUPPLY && _tokenId <= 2 * TOTAL_SUPPLY);
		return info.approved[_tokenId];
	}

	function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
		return info.users[_owner].approved[_operator];
	}

	function getToken(uint256 _tokenId) public view returns (address tokenOwner, address approved, string memory uri) {
		return (ownerOf(_tokenId), getApproved(_tokenId), tokenURI(_tokenId));
	}

	function getTokens(uint256[] memory _tokenIds) external view returns (address[] memory owners, address[] memory approveds, string[] memory uris) {
		uint256 _length = _tokenIds.length;
		owners = new address[](_length);
		approveds = new address[](_length);
		uris = new string[](_length);
		for (uint256 i = 0; i < _length; i++) {
			(owners[i], approveds[i], uris[i]) = getToken(_tokenIds[i]);
		}
	}


	function _approveERC20(address _owner, address _spender, uint256 _tokens) internal {
		info.users[_owner].allowance[_spender] = _tokens;
		emit ERC20Approval(APPROVAL_TOPIC, _owner, _spender, _tokens);
	}

	function _approveNFT(address _spender, uint256 _tokenId) internal {
		bytes32 _mask = bytes32(1 << (_tokenId - TOTAL_SUPPLY - 1));
		require(maskOf(msg.sender) & _mask == _mask);
		info.approved[_tokenId] = _spender;
		emit Approval(msg.sender, _spender, _tokenId);
	}
	
	function _transferERC20(address _from, address _to, uint256 _tokens) internal {
		unchecked {
			bytes32 _mask;
			uint256 _pos = 0;
			uint256 _count = 0;
			uint256 _n = uint256(maskOf(_from));
			uint256[] memory _tokenIds = new uint256[](_tokens);
			while (_n > 0 && _count < _tokens) {
				if (_n & 1 == 1) {
					_mask |= bytes32(1 << _pos);
					_tokenIds[_count++] = TOTAL_SUPPLY + _pos + 1;
				}
				_pos++;
				_n >>= 1;
			}
			require(_count == _tokens);
			require(maskOf(_from) & _mask == _mask);
			_transfer(_from, _to, _mask, _tokenIds);
		}
	}
	
	function _transferNFT(address _from, address _to, uint256 _tokenId) internal {
		unchecked {
			require(_tokenId > TOTAL_SUPPLY && _tokenId <= 2 * TOTAL_SUPPLY);
			bytes32 _mask = bytes32(1 << (_tokenId - TOTAL_SUPPLY - 1));
			require(maskOf(_from) & _mask == _mask);
			require(msg.sender == _from || msg.sender == getApproved(_tokenId) || isApprovedForAll(_from, msg.sender));
			uint256[] memory _tokenIds = new uint256[](1);
			_tokenIds[0] = _tokenId;
			_transfer(_from, _to, _mask, _tokenIds);
		}
	}
	
	function _transferNFTs(address _to, uint256[] memory _tokenIds) internal {
		unchecked {
			bytes32 _mask;
			for (uint256 i = 0; i < _tokenIds.length; i++) {
				_mask |= bytes32(1 << (_tokenIds[i] - TOTAL_SUPPLY - 1));
			}
			require(_popcount(_mask) == _tokenIds.length);
			require(maskOf(msg.sender) & _mask == _mask);
			_transfer(msg.sender, _to, _mask, _tokenIds);
		}
	}

	function _transfer(address _from, address _to, bytes32 _mask, uint256[] memory _tokenIds) internal {
		unchecked {
			require(_tokenIds.length > 0);
			for (uint256 i = 0; i < _tokenIds.length; i++) {
				if (getApproved(_tokenIds[i]) != address(0x0)) {
					info.approved[_tokenIds[i]] = address(0x0);
					emit Approval(address(0x0), address(0x0), _tokenIds[i]);
				}
				emit Transfer(_from, _to, _tokenIds[i]);
			}
			info.users[_from].mask ^= _mask;
			bool _from0 = maskOf(_from) == 0x0;
			bool _to0 = maskOf(_to) == 0x0;
			info.users[_to].mask |= _mask;
			if (_from0) {
				uint256 _index;
				address[] memory _holders = holders();
				for (uint256 i = 0; i < _holders.length; i++) {
					if (_holders[i] == _from) {
						_index = i;
						break;
					}
				}
				if (_to0) {
					info.holders[_index] = _to;
				} else {
					info.holders[_index] = _holders[_holders.length - 1];
					info.holders.pop();
				}
			} else if (_to0) {
				info.holders.push(_to);
			}
			require(maskOf(_from) & maskOf(_to) == 0x0);
			emit ERC20Transfer(TRANSFER_TOPIC, _from, _to, _tokenIds.length);
		}
	}


	function _popcount(bytes32 _b) internal pure returns (uint256) {
		uint256 _n = uint256(_b);
		if (_n == UINT_MAX) {
			return 256;
		}
		unchecked {
			_n -= (_n >> 1) & M1;
			_n = (_n & M2) + ((_n >> 2) & M2);
			_n = (_n + (_n >> 4)) & M4;
			_n = (_n * H01) >> 248;
		}
		return _n;
	}
}


contract Deploy {
	ErrorCells immutable public errorCells;
	constructor() payable {
		errorCells = new ErrorCells{value:msg.value}();
		errorCells.initialize();
	}
}

File 2 of 2 : Metadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

interface CM {
	function salt() external view returns (bytes32);
}

contract Metadata {
	
	string public name = "Error Cells";
	string public symbol = "404CELL";

	string constant private TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	bytes3 constant private BG_COLOR = 0xd1d3dc;
	uint256 constant private PADDING = 2;

	struct Size {
		uint248 size;
		uint8 chance;
	}
	Size[] private sizes;

	struct Color {
		bytes3 primaryColor;
		bytes3 outlineColor;
		uint8 chance;
		string name;
	}
	Color[] private colors;

	CM immutable public errorCells;


	constructor() {
		errorCells = CM(msg.sender);

		// sizes
		sizes.push(Size(14, 120));
		sizes.push(Size(16, 80));
		sizes.push(Size(18, 50));
		sizes.push(Size(20, 20));
		sizes.push(Size(22, 10));
		sizes.push(Size(24, 5));
	
		colors.push(Color(0x3333d9, 0x212529, 100, "ERROR 404"));
	}

	function tokenURI(uint256 _tokenId) external view returns (string memory) {
		unchecked {
			( , uint256 _size, uint256 _colorIndex) = _getTokenInfo(_tokenId);
			string memory _json = string(abi.encodePacked('{"name":"ERROR #', _uint2str(_tokenId), '","description":"An experimental hybrid of ERC-20 & ERC-721.","external_url":"https://errorCells.io/#/token/', _uint2str(_tokenId), '",'));
			_json = string(abi.encodePacked(_json, '"image":"', svgURI(_tokenId), '","attributes":['));
			_json = string(abi.encodePacked(_json, '{"trait_type":"Size","value":', _uint2str(_size - 2 * PADDING), '},'));
			_json = string(abi.encodePacked(_json, '{"trait_type":"Color","value":"', colors[_colorIndex].name, '"}'));
			_json = string(abi.encodePacked(_json, ']}'));
			return string(abi.encodePacked('data:application/json;base64,', _encode(bytes(_json))));
		}
	}

	function svgURI(uint256 _tokenId) public view returns (string memory) {
		return string(abi.encodePacked('data:image/svg+xml;base64,', _encode(bytes(getSVG(_tokenId)))));
	}
	
	function bmpURI(uint256 _tokenId) public view returns (string memory) {
		return string(abi.encodePacked('data:image/bmp;base64,', _encode(getBMP(_tokenId))));
	}

	function getSVG(uint256 _tokenId) public view returns (string memory) {
		return string(abi.encodePacked('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512" width="100%" height="100%"><defs><style type="text/css">svg{image-rendering:optimizeSpeed;image-rendering:-moz-crisp-edges;image-rendering:-o-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:pixelated;image-rendering:optimize-contrast;-ms-interpolation-mode:nearest-neighbor;background-color:', _col2str(BG_COLOR), ';background-image:url(', bmpURI(_tokenId), ');background-repeat:no-repeat;background-size:contain;background-position:50% 50%;}</style></defs></svg>'));
	}
	
	function getBMP(uint256 _tokenId) public view returns (bytes memory) {
		(bytes32 _seed, uint256 _size, uint256 _colorIndex) = _getTokenInfo(_tokenId);
		return _getBMP(_makePalette(colors[_colorIndex].primaryColor, colors[_colorIndex].outlineColor), _convertToColors(_addOutline(_expandAndReflect(_step(_step(_getInitialState(_seed, _size)))))), _size);
	}
	
	
	function _getTokenInfo(uint256 _tokenId) internal view returns (bytes32 seed, uint256 size, uint256 colorIndex) {
		unchecked {
			seed = keccak256(abi.encodePacked("Seed:", _tokenId, errorCells.salt()));
			size = _sampleSize(seed);
			colorIndex = 0;
		}
	}

	function _sampleSize(bytes32 _seed) internal view returns (uint256 size) {
		unchecked {
			uint256 _total = 0;
			for (uint256 i = 0; i < sizes.length; i++) {
				_total += sizes[i].chance;
			}
			uint256 _target = uint256(keccak256(abi.encodePacked("Size:", _seed))) % _total;
			_total = 0;
			for (uint256 i = 0; i < sizes.length; i++) {
				_total += sizes[i].chance;
				if (_target < _total) {
					return sizes[i].size;
				}
			}
		}
	}


	function _getInitialState(bytes32 _seed, uint256 _size) internal pure returns (uint8[][] memory state) {
		unchecked {
			uint256 _rollingSeed = uint256(keccak256(abi.encodePacked("State:", _seed)));
			state = new uint8[][](_size - 2 * PADDING - 2);
			for (uint256 y = 0; y < state.length; y++) {
				state[y] = new uint8[](_size / 2 - PADDING - 1);
				for (uint256 x = 0; x < state[y].length; x++) {
					state[y][x] = uint8(_rollingSeed % 2);
					if (_rollingSeed < type(uint16).max) {
						_rollingSeed = uint256(keccak256(abi.encodePacked("Roll:", _seed, _rollingSeed)));
					} else {
						_rollingSeed /= 2;
					}
				}
			}
		}
	}

	function _getNeighborhood(uint8[][] memory _state) internal pure returns (uint8[][] memory neighborhood) {
		unchecked {
			neighborhood = new uint8[][](_state.length);
			for (uint256 y = 0; y < _state.length; y++) {
				neighborhood[y] = new uint8[](_state[y].length);
				for (uint256 x = 0; x < _state[y].length; x++) {
					uint8 _count = 0;
					if (y > 0) {
						_count += _state[y - 1][x];
					}
					if (y < _state.length - 1) {
						_count += _state[y + 1][x];
					}
					if (x > 0) {
						_count += _state[y][x - 1];
					}
					if (x < _state[y].length - 1) {
						_count += _state[y][x + 1];
					}
					neighborhood[y][x] = _count;
				}
			}
		}
	}

	function _step(uint8[][] memory _state) internal pure returns (uint8[][] memory newState) {
		unchecked {
			uint8[][] memory _neighborhood = _getNeighborhood(_state);
			newState = new uint8[][](_state.length);
			for (uint256 y = 0; y < _state.length; y++) {
				newState[y] = new uint8[](_state[y].length);
				for (uint256 x = 0; x < _state[y].length; x++) {
					newState[y][x] = ((_state[y][x] == 0 && _neighborhood[y][x] <= 1) || (_state[y][x] == 1 && (_neighborhood[y][x] == 2 || _neighborhood[y][x] == 3))) ? 1 : 0;
				}
			}
		}
	}

	function _expandAndReflect(uint8[][] memory _state) internal pure returns (uint8[][] memory newState) {
		unchecked {
			newState = new uint8[][](_state.length + 2 * PADDING + 2);
			for (uint256 y = 0; y < newState.length; y++) {
				newState[y] = new uint8[](_state.length + 2 * PADDING + 2);
				for (uint256 x = 0; x < newState[y].length; x++) {
					if (y > PADDING && y <= _state.length + PADDING && x > PADDING && x <= _state.length + PADDING) {
						newState[y][x] = _state[y - PADDING - 1][x > _state[y - PADDING - 1].length + PADDING ? _state.length + PADDING - x : x - PADDING - 1];
					} else {
						newState[y][x] = 0;
					}
				}
			}
		}
	}

	function _addOutline(uint8[][] memory _state) internal pure returns (uint8[][] memory newState) {
		unchecked {
			uint8[][] memory _neighborhood = _getNeighborhood(_state);
			newState = new uint8[][](_state.length);
			for (uint256 y = 0; y < _state.length; y++) {
				newState[y] = new uint8[](_state[y].length);
				for (uint256 x = 0; x < _state[y].length; x++) {
					newState[y][x] = _state[y][x] == 0 && _neighborhood[y][x] > 0 ? 2 : _state[y][x];
				}
			}
		}
	}

	function _convertToColors(uint8[][] memory _state) internal pure returns (bytes memory cols) {
		unchecked {
			uint256 _scanline = _state[0].length;
			if (_scanline % 4 != 0) {
				_scanline += 4 - (_scanline % 4);
			}
			cols = new bytes(_state.length * _scanline);
			for (uint256 y = 0; y < _state.length; y++) {
				for (uint256 x = 0; x < _state[y].length; x++) {
					cols[(_state.length - y - 1) * _scanline + x] = bytes1(_state[y][x]);
				}
			}
		}
	}
	
	function _makePalette(bytes3 _primaryColor, bytes3 _outlineColor) internal pure returns (bytes memory) {
		unchecked {
			return abi.encodePacked(BG_COLOR, bytes1(0), _primaryColor, bytes1(0), _outlineColor, bytes1(0));
		}
	}

	function _getBMP(bytes memory _palette, bytes memory _colors, uint256 _size) internal pure returns (bytes memory) {
		unchecked {
			uint32 _bufSize = 14 + 40 + uint32(_palette.length);
			bytes memory _buf = new bytes(_bufSize - _palette.length);
			_buf[0] = 0x42;
			_buf[1] = 0x4d;
			uint32 _tmp = _bufSize + uint32(_colors.length);
			uint32 b;
			for (uint i = 2; i < 6; i++) {
				assembly {
					b := and(_tmp, 0xff)
					_tmp := shr(8, _tmp)
				}
				_buf[i] = bytes1(uint8(b));
			}
			_tmp = _bufSize;
			for (uint i = 10; i < 14; i++) {
				assembly {
					b := and(_tmp, 0xff)
					_tmp := shr(8, _tmp)
				}
				_buf[i] = bytes1(uint8(b));
			}
			_buf[14] = 0x28;
			_tmp = uint32(_size);
			for (uint i = 18; i < 22; i++) {
				assembly {
					b := and(_tmp, 0xff)
					_tmp := shr(8, _tmp)
				}
				_buf[i] = bytes1(uint8(b));
				_buf[i + 4] = bytes1(uint8(b));
			}
			_buf[26] = 0x01;
			_buf[28] = 0x08;
			_tmp = uint32(_colors.length);
			for (uint i = 34; i < 38; i++) {
				assembly {
					b := and(_tmp, 0xff)
					_tmp := shr(8, _tmp)
				}
				_buf[i] = bytes1(uint8(b));
			}
			_tmp = uint32(_palette.length / 4);
			for (uint i = 46; i < 50; i++) {
				assembly {
					b := and(_tmp, 0xff)
					_tmp := shr(8, _tmp)
				}
				_buf[i] = bytes1(uint8(b));
				_buf[i + 4] = bytes1(uint8(b));
			}
			return abi.encodePacked(_buf, _palette, _colors);
		}
	}

	function _uint2str(uint256 _value) internal pure returns (string memory) {
		unchecked {
			uint256 _digits = 1;
			uint256 _n = _value;
			while (_n > 9) {
				_n /= 10;
				_digits++;
			}
			bytes memory _out = new bytes(_digits);
			for (uint256 i = 0; i < _out.length; i++) {
				uint256 _dec = (_value / (10**(_out.length - i - 1))) % 10;
				_out[i] = bytes1(uint8(_dec) + 48);
			}
			return string(_out);
		}
	}

	function _col2str(bytes3 _col) internal pure returns (string memory str) {
		unchecked {
			str = "#";
			for (uint256 i = 0; i < 6; i++) {
				uint256 _hex = (uint24(_col) >> (4 * (i + 1 - 2 * (i % 2)))) % 16;
				bytes memory _char = new bytes(1);
				_char[0] = bytes1(uint8(_hex) + (_hex > 9 ? 87 : 48));
				str = string(abi.encodePacked(str, string(_char)));
			}
		}
	}

	function _encode(bytes memory _data) internal pure returns (string memory result) {
		unchecked {
			if (_data.length == 0) return '';
			string memory _table = TABLE;
			uint256 _encodedLen = 4 * ((_data.length + 2) / 3);
			result = new string(_encodedLen + 32);

			assembly {
				mstore(result, _encodedLen)
				let tablePtr := add(_table, 1)
				let dataPtr := _data
				let endPtr := add(dataPtr, mload(_data))
				let resultPtr := add(result, 32)

				for {} lt(dataPtr, endPtr) {}
				{
					dataPtr := add(dataPtr, 3)
					let input := mload(dataPtr)
					mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F)))))
					resultPtr := add(resultPtr, 1)
					mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F)))))
					resultPtr := add(resultPtr, 1)
					mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F)))))
					resultPtr := add(resultPtr, 1)
					mstore(resultPtr, shl(248, mload(add(tablePtr, and(        input,  0x3F)))))
					resultPtr := add(resultPtr, 1)
				}
				switch mod(mload(_data), 3)
				case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
				case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
			}
			return result;
		}
	}
}

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes32","name":"topic0","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ERC20Approval","type":"event"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes32","name":"topic0","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","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":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"bulkTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getToken","outputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"approved","type":"address"},{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"getTokens","outputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"address[]","name":"approveds","type":"address[]"},{"internalType":"string[]","name":"uris","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"maskOf","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadata","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salt","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Metadata","name":"_metadata","type":"address"}],"name":"setMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

6080604052600034116200001257600080fd5b73a472a00fd615999e73c1e0de240bc41c8c64730c600060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620000789062000215565b604051809103906000f08015801562000095573d6000803e3d6000fd5b50600060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760006380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff021916908315150217905550600143620001de91906200025c565b40604051602001620001f1919062000321565b6040516020818303038152906040528051906020012060008001819055506200034b565b613bae806200389383390190565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620002698262000223565b9150620002768362000223565b92508282039050818111156200029157620002906200022d565b5b92915050565b600081905092915050565b7f53616c743a000000000000000000000000000000000000000000000000000000600082015250565b6000620002da60058362000297565b9150620002e782620002a2565b600582019050919050565b6000819050919050565b6000819050919050565b6200031b6200031582620002f2565b620002fc565b82525050565b60006200032e82620002cb565b91506200033c828462000306565b60208201915081905092915050565b613538806200035b6000396000f3fe6080604052600436106101d85760003560e01c80638188f71c11610102578063bfa0b13311610095578063dd62ed3e11610064578063dd62ed3e146106ef578063e4b50cb81461072c578063e985e9c51461076b578063f3cb8385146107a8576101d8565b8063bfa0b13314610633578063c662e4811461065e578063c87b56dd14610689578063d28a4761146106c6576101d8565b8063a22cb465116100d1578063a22cb46514610579578063a8aa1b31146105a2578063a9059cbb146105cd578063b88d4fde1461060a576101d8565b80638188f71c146104dc5780638da5cb5b1461050757806395d89b4114610532578063a0712d681461055d576101d8565b80632497ab151161017a57806342842e0e1161014957806342842e0e146104225780636352211e1461044b57806370a08231146104885780638129fc1c146104c5576101d8565b80632497ab1514610350578063313ce5671461038d57806332ba0a1e146103b8578063392f37e9146103f7576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806313af4035146102bf57806318160ddd146102e857806323b872dd14610313576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906125f4565b6107d1565b604051610211919061263c565b60405180910390f35b34801561022657600080fd5b5061022f6107f1565b60405161023c91906126e7565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061273f565b610891565b60405161027991906127ad565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906127f4565b6108f9565b6040516102b6919061263c565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190612834565b610944565b005b3480156102f457600080fd5b506102fd6109ca565b60405161030a9190612870565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061288b565b6109d4565b604051610347919061263c565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190612834565b610afe565b60405161038491906128f7565b60405180910390f35b34801561039957600080fd5b506103a2610b4c565b6040516103af919061292e565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612a91565b610b51565b6040516103ee93929190612ca4565b60405180910390f35b34801561040357600080fd5b5061040c610d40565b60405161041991906127ad565b60405180910390f35b34801561042e57600080fd5b506104496004803603810190610444919061288b565b610d6c565b005b34801561045757600080fd5b50610472600480360381019061046d919061273f565b610d8c565b60405161047f91906127ad565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612834565b610e42565b6040516104bc9190612870565b60405180910390f35b3480156104d157600080fd5b506104da610e5c565b005b3480156104e857600080fd5b506104f1611330565b6040516104fe9190612cf0565b60405180910390f35b34801561051357600080fd5b5061051c6113c1565b60405161052991906127ad565b60405180910390f35b34801561053e57600080fd5b506105476113ed565b60405161055491906126e7565b60405180910390f35b6105776004803603810190610572919061273f565b61148d565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612d3e565b61158b565b005b3480156105ae57600080fd5b506105b761168e565b6040516105c491906127ad565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906127f4565b6116ba565b604051610601919061263c565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612e33565b6116d1565b005b34801561063f57600080fd5b506106486117ac565b60405161065591906128f7565b60405180910390f35b34801561066a57600080fd5b506106736117b8565b6040516106809190612870565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab919061273f565b6117c4565b6040516106bd91906126e7565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612eb6565b611871565b005b3480156106fb57600080fd5b5061071660048036038101906107119190612f12565b61187f565b6040516107239190612870565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e919061273f565b61190b565b60405161076293929190612f52565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612f12565b611938565b60405161079f919061263c565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612fce565b6119d1565b005b60076020528060005260406000206000915054906101000a900460ff1681565b6060600060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610863573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061088c919061309c565b905090565b6000610100821180156108b2575061010060026108ae9190613114565b8211155b6108bb57600080fd5b6000600501600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006101008211801561091a575061010060026109169190613114565b8211155b1561092e576109298383611a57565b61093a565b610939338484611b47565b5b6001905092915050565b61094c6113c1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098357600080fd5b80600060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610100905090565b6000610100821180156109f5575061010060026109f19190613114565b8211155b15610a0a57610a05848484611c37565b610af3565b6000610a16853361187f565b905082811015610a2557600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ae65782600060040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ade9190613156565b925050819055505b610af1858585611d88565b505b600190509392505050565b60008060040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600081565b60608060606000845190508067ffffffffffffffff811115610b7657610b7561294e565b5b604051908082528060200260200182016040528015610ba45781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115610bc157610bc061294e565b5b604051908082528060200260200182016040528015610bef5781602001602082028036833780820191505090505b5092508067ffffffffffffffff811115610c0c57610c0b61294e565b5b604051908082528060200260200182016040528015610c3f57816020015b6060815260200190600190039081610c2a5790505b50915060005b81811015610d3757610c70868281518110610c6357610c6261318a565b5b602002602001015161190b565b878481518110610c8357610c8261318a565b5b60200260200101878581518110610c9d57610c9c61318a565b5b60200260200101878681518110610cb757610cb661318a565b5b602002602001018390528373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505050508080610d2f906131b9565b915050610c45565b50509193909250565b60008060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d87838383604051806020016040528060008152506116d1565b505050565b600061010082118015610da457506101006002028211155b610dad57600080fd5b600060016101008403036001901b60001b90506000610dca611330565b905060005b8151811015610e35578283610dfd848481518110610df057610def61318a565b5b6020026020010151610afe565b1603610e2857818181518110610e1657610e1561318a565b5b60200260200101519350505050610e3d565b8080600101915050610dcf565b506000925050505b919050565b6000610e55610e5083610afe565b611e92565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16610e7c61168e565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c57600080fd5b60003090506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f269190613216565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b600060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600601829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602181526020016134e2602191398051906020012061010060405161105a9190612870565b60405180910390a360005b6101008110156110f75760018161010061107f9190613243565b6110899190613243565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480806110ef906131b9565b915050611065565b5061111882737a250d5630b4cf539739df2c5dacb4c659f2488d6080611b47565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190613216565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539682846040518363ffffffff1660e01b81526004016111d5929190613277565b6020604051808303816000875af11580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190613216565b600060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198373ffffffffffffffffffffffffffffffffffffffff16318460806000806112b16113c1565b426040518863ffffffff1660e01b81526004016112d3969594939291906132e5565b60606040518083038185885af11580156112f1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611316919061335b565b50505061132c826113256113c1565b600a611d88565b5050565b606060006006018054806020026020016040519081016040528092919081815260200182805480156113b757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161136d575b5050505050905090565b60008060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561145f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611488919061309c565b905090565b6000309050600061149d82610e42565b9050808311156114ac57600080fd5b600067016345785d8a0000846114c29190613114565b9050803410156114d157600080fd5b6114dc833386611d88565b6114e46113c1565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611529573d6000803e3d6000fd5b5080341115611585573373ffffffffffffffffffffffffffffffffffffffff166108fc82346115589190613156565b9081150290604051600060405180830381858888f19350505050158015611583573d6000803e3d6000fd5b505b50505050565b80600060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611682919061263c565b60405180910390a35050565b60008060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006116c7338484611d88565b6001905092915050565b6116dc848484611c37565b6000833b905060008163ffffffff1611156117a55763150b7a0260e01b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b81526004016117389493929190613403565b6020604051808303816000875af1158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190613464565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146117a457600080fd5b5b5050505050565b60008060000154905090565b67016345785d8a000081565b6060600060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004016118249190612870565b600060405180830381865afa158015611841573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061186a919061309c565b9050919050565b61187b8282611fa3565b5050565b60008060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080606061191984610d8c565b61192285610891565b61192b866117c4565b9250925092509193909250565b60008060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d96113c1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1057600080fd5b80600060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600161010083611a699190613156565b611a739190613156565b6001901b60001b90508081611a8733610afe565b1614611a9257600080fd5b826000600501600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b80600060040160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602181526020016134c1602191398051906020012083604051611c2a9190612870565b60405180910390a3505050565b61010081118015611c4d57506101006002028111155b611c5657600080fd5b600060016101008303036001901b60001b90508081611c7486610afe565b1614611c7f57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cec5750611cbd82610891565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611cfd5750611cfc8433611938565b5b611d0657600080fd5b6000600167ffffffffffffffff811115611d2357611d2261294e565b5b604051908082528060200260200182016040528015611d515781602001602082028036833780820191505090505b5090508281600081518110611d6957611d6861318a565b5b602002602001018181525050611d818585848461202b565b5050505050565b60008060009050600080611d9b87610afe565b60001c905060008567ffffffffffffffff811115611dbc57611dbb61294e565b5b604051908082528060200260200182016040528015611dea5781602001602082028036833780820191505090505b5090505b600082118015611dfd57508583105b15611e5a57600180831603611e4657836001901b60001b851794506001846101000101818480600101955081518110611e3957611e3861318a565b5b6020026020010181815250505b8380600101945050600182901c9150611dee565b858314611e6657600080fd5b8485611e718a610afe565b1614611e7c57600080fd5b611e888888878461202b565b5050505050505050565b6000808260001c90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103611ecd57610100915050611f9e565b7f5555555555555555555555555555555555555555555555555555555555555555600182901c16810390507f3333333333333333333333333333333333333333333333333333333333333333600282901c167f333333333333333333333333333333333333333333333333333333333333333382160190507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f600482901c820116905060f87f01010101010101010101010101010101010101010101010101010101010101018202901c9050809150505b919050565b600080600090505b8251811015611fee576001610100848381518110611fcc57611fcb61318a565b5b602002602001015103036001901b60001b821791508080600101915050611fab565b508151611ffa82611e92565b1461200457600080fd5b808161200f33610afe565b161461201a57600080fd5b6120263384838561202b565b505050565b600081511161203957600080fd5b60005b815181101561220457600073ffffffffffffffffffffffffffffffffffffffff166120808383815181106120735761207261318a565b5b6020026020010151610891565b73ffffffffffffffffffffffffffffffffffffffff16146121825760008060050160008484815181106120b6576120b561318a565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081818151811061211d5761211c61318a565b5b6020026020010151600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b8181815181106121955761219461318a565b5b60200260200101518473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808060010191505061203c565b5081600060040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254189250508190555060008060001b61226786610afe565b14905060008060001b61227986610afe565b14905083600060040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282541792505081905550811561248c576000806122e0611330565b905060005b8151811015612350578873ffffffffffffffffffffffffffffffffffffffff168282815181106123185761231761318a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361234357809250612350565b80806001019150506122e5565b5082156123bc57866000600601838154811061236f5761236e61318a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612485565b806001825103815181106123d3576123d261318a565b5b6020026020010151600060060183815481106123f2576123f161318a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060060180548061244f5761244e613491565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b50506124fa565b80156124f9576000600601859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000801b61250786610afe565b61251088610afe565b161461251b57600080fd5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602181526020016134e2602191398051906020012085516040516125789190612870565b60405180910390a3505050505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125d18161259c565b81146125dc57600080fd5b50565b6000813590506125ee816125c8565b92915050565b60006020828403121561260a57612609612592565b5b6000612618848285016125df565b91505092915050565b60008115159050919050565b61263681612621565b82525050565b6000602082019050612651600083018461262d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612691578082015181840152602081019050612676565b60008484015250505050565b6000601f19601f8301169050919050565b60006126b982612657565b6126c38185612662565b93506126d3818560208601612673565b6126dc8161269d565b840191505092915050565b6000602082019050818103600083015261270181846126ae565b905092915050565b6000819050919050565b61271c81612709565b811461272757600080fd5b50565b60008135905061273981612713565b92915050565b60006020828403121561275557612754612592565b5b60006127638482850161272a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127978261276c565b9050919050565b6127a78161278c565b82525050565b60006020820190506127c2600083018461279e565b92915050565b6127d18161278c565b81146127dc57600080fd5b50565b6000813590506127ee816127c8565b92915050565b6000806040838503121561280b5761280a612592565b5b6000612819858286016127df565b925050602061282a8582860161272a565b9150509250929050565b60006020828403121561284a57612849612592565b5b6000612858848285016127df565b91505092915050565b61286a81612709565b82525050565b60006020820190506128856000830184612861565b92915050565b6000806000606084860312156128a4576128a3612592565b5b60006128b2868287016127df565b93505060206128c3868287016127df565b92505060406128d48682870161272a565b9150509250925092565b6000819050919050565b6128f1816128de565b82525050565b600060208201905061290c60008301846128e8565b92915050565b600060ff82169050919050565b61292881612912565b82525050565b6000602082019050612943600083018461291f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129868261269d565b810181811067ffffffffffffffff821117156129a5576129a461294e565b5b80604052505050565b60006129b8612588565b90506129c4828261297d565b919050565b600067ffffffffffffffff8211156129e4576129e361294e565b5b602082029050602081019050919050565b600080fd5b6000612a0d612a08846129c9565b6129ae565b90508083825260208201905060208402830185811115612a3057612a2f6129f5565b5b835b81811015612a595780612a45888261272a565b845260208401935050602081019050612a32565b5050509392505050565b600082601f830112612a7857612a77612949565b5b8135612a888482602086016129fa565b91505092915050565b600060208284031215612aa757612aa6612592565b5b600082013567ffffffffffffffff811115612ac557612ac4612597565b5b612ad184828501612a63565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b0f8161278c565b82525050565b6000612b218383612b06565b60208301905092915050565b6000602082019050919050565b6000612b4582612ada565b612b4f8185612ae5565b9350612b5a83612af6565b8060005b83811015612b8b578151612b728882612b15565b9750612b7d83612b2d565b925050600181019050612b5e565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000612be082612657565b612bea8185612bc4565b9350612bfa818560208601612673565b612c038161269d565b840191505092915050565b6000612c1a8383612bd5565b905092915050565b6000602082019050919050565b6000612c3a82612b98565b612c448185612ba3565b935083602082028501612c5685612bb4565b8060005b85811015612c925784840389528151612c738582612c0e565b9450612c7e83612c22565b925060208a01995050600181019050612c5a565b50829750879550505050505092915050565b60006060820190508181036000830152612cbe8186612b3a565b90508181036020830152612cd28185612b3a565b90508181036040830152612ce68184612c2f565b9050949350505050565b60006020820190508181036000830152612d0a8184612b3a565b905092915050565b612d1b81612621565b8114612d2657600080fd5b50565b600081359050612d3881612d12565b92915050565b60008060408385031215612d5557612d54612592565b5b6000612d63858286016127df565b9250506020612d7485828601612d29565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612d9e57612d9d61294e565b5b612da78261269d565b9050602081019050919050565b82818337600083830152505050565b6000612dd6612dd184612d83565b6129ae565b905082815260208101848484011115612df257612df1612d7e565b5b612dfd848285612db4565b509392505050565b600082601f830112612e1a57612e19612949565b5b8135612e2a848260208601612dc3565b91505092915050565b60008060008060808587031215612e4d57612e4c612592565b5b6000612e5b878288016127df565b9450506020612e6c878288016127df565b9350506040612e7d8782880161272a565b925050606085013567ffffffffffffffff811115612e9e57612e9d612597565b5b612eaa87828801612e05565b91505092959194509250565b60008060408385031215612ecd57612ecc612592565b5b6000612edb858286016127df565b925050602083013567ffffffffffffffff811115612efc57612efb612597565b5b612f0885828601612a63565b9150509250929050565b60008060408385031215612f2957612f28612592565b5b6000612f37858286016127df565b9250506020612f48858286016127df565b9150509250929050565b6000606082019050612f67600083018661279e565b612f74602083018561279e565b8181036040830152612f8681846126ae565b9050949350505050565b6000612f9b8261278c565b9050919050565b612fab81612f90565b8114612fb657600080fd5b50565b600081359050612fc881612fa2565b92915050565b600060208284031215612fe457612fe3612592565b5b6000612ff284828501612fb9565b91505092915050565b600067ffffffffffffffff8211156130165761301561294e565b5b61301f8261269d565b9050602081019050919050565b600061303f61303a84612ffb565b6129ae565b90508281526020810184848401111561305b5761305a612d7e565b5b613066848285612673565b509392505050565b600082601f83011261308357613082612949565b5b815161309384826020860161302c565b91505092915050565b6000602082840312156130b2576130b1612592565b5b600082015167ffffffffffffffff8111156130d0576130cf612597565b5b6130dc8482850161306e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061311f82612709565b915061312a83612709565b925082820261313881612709565b9150828204841483151761314f5761314e6130e5565b5b5092915050565b600061316182612709565b915061316c83612709565b9250828203905081811115613184576131836130e5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131c482612709565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131f6576131f56130e5565b5b600182019050919050565b600081519050613210816127c8565b92915050565b60006020828403121561322c5761322b612592565b5b600061323a84828501613201565b91505092915050565b600061324e82612709565b915061325983612709565b9250828201905080821115613271576132706130e5565b5b92915050565b600060408201905061328c600083018561279e565b613299602083018461279e565b9392505050565b6000819050919050565b6000819050919050565b60006132cf6132ca6132c5846132a0565b6132aa565b612709565b9050919050565b6132df816132b4565b82525050565b600060c0820190506132fa600083018961279e565b6133076020830188612861565b61331460408301876132d6565b61332160608301866132d6565b61332e608083018561279e565b61333b60a0830184612861565b979650505050505050565b60008151905061335581612713565b92915050565b60008060006060848603121561337457613373612592565b5b600061338286828701613346565b935050602061339386828701613346565b92505060406133a486828701613346565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60006133d5826133ae565b6133df81856133b9565b93506133ef818560208601612673565b6133f88161269d565b840191505092915050565b6000608082019050613418600083018761279e565b613425602083018661279e565b6134326040830185612861565b818103606083015261344481846133ca565b905095945050505050565b60008151905061345e816125c8565b92915050565b60006020828403121561347a57613479612592565b5b60006134888482850161344f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe417070726f76616c28616464726573732c616464726573732c75696e74323536295472616e7366657228616464726573732c616464726573732c75696e7432353629a264697066735822122040c6a36e4365318db7b490d1fd460f9b33550a69574a3ebe958bf08f01d99bae64736f6c6343000815003360a06040526040518060400160405280600b81526020017f4572726f722043656c6c73000000000000000000000000000000000000000000815250600090816200004a9190620009f2565b506040518060400160405280600781526020017f34303443454c4c0000000000000000000000000000000000000000000000000081525060019081620000919190620009f2565b503480156200009f57600080fd5b503373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060026040518060400160405280600e7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001607860ff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601f6101000a81548160ff021916908360ff16021790555050506002604051806040016040528060107effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001605060ff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601f6101000a81548160ff021916908360ff16021790555050506002604051806040016040528060127effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001603260ff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601f6101000a81548160ff021916908360ff16021790555050506002604051806040016040528060147effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001601460ff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601f6101000a81548160ff021916908360ff16021790555050506002604051806040016040528060167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001600a60ff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601f6101000a81548160ff021916908360ff16021790555050506002604051806040016040528060187effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001600560ff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550602082015181600001601f6101000a81548160ff021916908360ff160217905550505060036040518060800160405280623333d960e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020016221252960e81b7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001606460ff1681526020016040518060400160405280600981526020017f4552524f52203430340000000000000000000000000000000000000000000000815250815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548162ffffff021916908360e81c021790555060208201518160000160036101000a81548162ffffff021916908360e81c021790555060408201518160000160066101000a81548160ff021916908360ff16021790555060608201518160010190816200076f9190620009f2565b50505062000ad9565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007fa57607f821691505b60208210810362000810576200080f620007b2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200087a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200083b565b6200088686836200083b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008d3620008cd620008c7846200089e565b620008a8565b6200089e565b9050919050565b6000819050919050565b620008ef83620008b2565b62000907620008fe82620008da565b84845462000848565b825550505050565b600090565b6200091e6200090f565b6200092b818484620008e4565b505050565b5b8181101562000953576200094760008262000914565b60018101905062000931565b5050565b601f821115620009a2576200096c8162000816565b62000977846200082b565b8101602085101562000987578190505b6200099f62000996856200082b565b83018262000930565b50505b505050565b600082821c905092915050565b6000620009c760001984600802620009a7565b1980831691505092915050565b6000620009e28383620009b4565b9150826002028217905092915050565b620009fd8262000778565b67ffffffffffffffff81111562000a195762000a1862000783565b5b62000a258254620007e1565b62000a3282828562000957565b600060209050601f83116001811462000a6a576000841562000a55578287015190505b62000a618582620009d4565b86555062000ad1565b601f19841662000a7a8662000816565b60005b8281101562000aa45784890151825560018201915060208501945060208101905062000a7d565b8683101562000ac4578489015162000ac0601f891682620009b4565b8355505b6001600288020188555050505b505050505050565b6080516130b262000afc6000396000818161029f015261074401526130b26000f3fe608060405234801561001057600080fd5b50600436106100875760003560e01c806395d89b411161005b57806395d89b4114610128578063be985ac914610146578063c87b56dd14610176578063ca54cc3f146101a657610087565b8062b958f31461008c57806306fdde03146100bc57806319f4e672146100da57806348b62fe4146100f8575b600080fd5b6100a660048036038101906100a19190611f07565b6101d6565b6040516100b39190611fc4565b60405180910390f35b6100c461020f565b6040516100d19190611fc4565b60405180910390f35b6100e261029d565b6040516100ef9190612065565b60405180910390f35b610112600480360381019061010d9190611f07565b6102c1565b60405161011f91906120d5565b60405180910390f35b61013061038a565b60405161013d9190611fc4565b60405180910390f35b610160600480360381019061015b9190611f07565b610418565b60405161016d9190611fc4565b60405180910390f35b610190600480360381019061018b9190611f07565b610459565b60405161019d9190611fc4565b60405180910390f35b6101c060048036038101906101bb9190611f07565b61059b565b6040516101cd9190611fc4565b60405180910390f35b60606101e96101e4836102c1565b6105d4565b6040516020016101f9919061217f565b6040516020818303038152906040529050919050565b6000805461021c906121d0565b80601f0160208091040260200160405190810160405280929190818152602001828054610248906121d0565b80156102955780601f1061026a57610100808354040283529160200191610295565b820191906000526020600020905b81548152906001019060200180831161027857829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b606060008060006102d18561073c565b925092509250610380610348600383815481106102f1576102f0612201565b5b906000526020600020906002020160000160009054906101000a900460e81b6003848154811061032457610323612201565b5b906000526020600020906002020160000160039054906101000a900460e81b610810565b61037a61037561037061036b6103666103618a8a610856565b610a57565b610a57565b610d22565b610f78565b6111ae565b8461132e565b9350505050919050565b60018054610397906121d0565b80601f01602080910402602001604051908101604052809291908181526020018280546103c3906121d0565b80156104105780601f106103e557610100808354040283529160200191610410565b820191906000526020600020905b8154815290600101906020018083116103f357829003601f168201915b505050505081565b606061042962d1d3dc60e81b611816565b610432836101d6565b60405160200161044392919061257c565b6040516020818303038152906040529050919050565b60606000806104678461073c565b9250925050600061047785611988565b61048086611988565b604051602001610491929190612717565b6040516020818303038152906040529050806104ac8661059b565b6040516020016104bd9291906127f4565b6040516020818303038152906040529050806104dd600280028503611988565b6040516020016104ee9291906128c6565b6040516020818303038152906040529050806003838154811061051457610513612201565b5b9060005260206000209060020201600101604051602001610536929190612a30565b6040516020818303038152906040529050806040516020016105589190612ab6565b6040516020818303038152906040529050610572816105d4565b6040516020016105829190612b24565b6040516020818303038152906040529350505050919050565b60606105ae6105a983610418565b6105d4565b6040516020016105be9190612b92565b6040516020818303038152906040529050919050565b606060008251036105f657604051806020016040528060008152509050610737565b600060405180606001604052806040815260200161303d6040913990506000600360028551018161062a57610629612bb4565b5b0460040290506020810167ffffffffffffffff81111561064d5761064c612be3565b5b6040519080825280601f01601f19166020018201604052801561067f5781602001600182028036833780820191505090505b509250808352600182018485518101602086015b818310156106fa576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b825260018201915050610693565b60038851066001811461071457600281146107245761072f565b613d3d60f01b600283035261072f565b603d60f81b60018303525b505050505050505b919050565b6000806000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bfa0b1336040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d19190612c48565b6040516020016107e2929190612d03565b60405160208183030381529060405280519060200120925061080383611aaf565b9150600090509193909250565b606062d1d3dc60e81b600060f81b84600060f81b85600060f81b60405160200161083f96959493929190612dd4565b604051602081830303815290604052905092915050565b606060008360405160200161086b9190612e90565b6040516020818303038152906040528051906020012060001c905060028060020284030367ffffffffffffffff8111156108a8576108a7612be3565b5b6040519080825280602002602001820160405280156108db57816020015b60608152602001906001900390816108c65790505b50915060005b8251811015610a4f57600160028086816108fe576108fd612bb4565b5b04030367ffffffffffffffff81111561091a57610919612be3565b5b6040519080825280602002602001820160405280156109485781602001602082028036833780820191505090505b5083828151811061095c5761095b612201565b5b602002602001018190525060005b83828151811061097d5761097c612201565b5b602002602001015151811015610a41576002838161099e5761099d612bb4565b5b068483815181106109b2576109b1612201565b5b602002602001015182815181106109cc576109cb612201565b5b602002602001019060ff16908160ff168152505061ffff8016831015610a1f5785836040516020016109ff929190612f02565b6040516020818303038152906040528051906020012060001c9250610a34565b60028381610a3057610a2f612bb4565b5b0492505b808060010191505061096a565b5080806001019150506108e1565b505092915050565b60606000610a6483611c28565b9050825167ffffffffffffffff811115610a8157610a80612be3565b5b604051908082528060200260200182016040528015610ab457816020015b6060815260200190600190039081610a9f5790505b50915060005b8351811015610d1b57838181518110610ad657610ad5612201565b5b60200260200101515167ffffffffffffffff811115610af857610af7612be3565b5b604051908082528060200260200182016040528015610b265781602001602082028036833780820191505090505b50838281518110610b3a57610b39612201565b5b602002602001018190525060005b848281518110610b5b57610b5a612201565b5b602002602001015151811015610d0d576000858381518110610b8057610b7f612201565b5b60200260200101518281518110610b9a57610b99612201565b5b602002602001015160ff16148015610bea57506001838381518110610bc257610bc1612201565b5b60200260200101518281518110610bdc57610bdb612201565b5b602002602001015160ff1611155b80610cb157506001858381518110610c0557610c04612201565b5b60200260200101518281518110610c1f57610c1e612201565b5b602002602001015160ff16148015610cb057506002838381518110610c4757610c46612201565b5b60200260200101518281518110610c6157610c60612201565b5b602002602001015160ff161480610caf57506003838381518110610c8857610c87612201565b5b60200260200101518281518110610ca257610ca1612201565b5b602002602001015160ff16145b5b5b610cbc576000610cbf565b60015b848381518110610cd257610cd1612201565b5b60200260200101518281518110610cec57610ceb612201565b5b602002602001019060ff16908160ff16815250508080600101915050610b48565b508080600101915050610aba565b5050919050565b60606002806002028351010167ffffffffffffffff811115610d4757610d46612be3565b5b604051908082528060200260200182016040528015610d7a57816020015b6060815260200190600190039081610d655790505b50905060005b8151811015610f72576002806002028451010167ffffffffffffffff811115610dac57610dab612be3565b5b604051908082528060200260200182016040528015610dda5781602001602082028036833780820191505090505b50828281518110610dee57610ded612201565b5b602002602001018190525060005b828281518110610e0f57610e0e612201565b5b602002602001015151811015610f6457600282118015610e33575060028451018211155b8015610e3f5750600281115b8015610e4f575060028451018111155b15610f1357836001600284030381518110610e6d57610e6c612201565b5b60200260200101516002856001600286030381518110610e9057610e8f612201565b5b602002602001015151018211610eac5760016002830303610eb4565b816002865101035b81518110610ec557610ec4612201565b5b6020026020010151838381518110610ee057610edf612201565b5b60200260200101518281518110610efa57610ef9612201565b5b602002602001019060ff16908160ff1681525050610f57565b6000838381518110610f2857610f27612201565b5b60200260200101518281518110610f4257610f41612201565b5b602002602001019060ff16908160ff16815250505b8080600101915050610dfc565b508080600101915050610d80565b50919050565b60606000610f8583611c28565b9050825167ffffffffffffffff811115610fa257610fa1612be3565b5b604051908082528060200260200182016040528015610fd557816020015b6060815260200190600190039081610fc05790505b50915060005b83518110156111a757838181518110610ff757610ff6612201565b5b60200260200101515167ffffffffffffffff81111561101957611018612be3565b5b6040519080825280602002602001820160405280156110475781602001602082028036833780820191505090505b5083828151811061105b5761105a612201565b5b602002602001018190525060005b84828151811061107c5761107b612201565b5b6020026020010151518110156111995760008583815181106110a1576110a0612201565b5b602002602001015182815181106110bb576110ba612201565b5b602002602001015160ff1614801561110a575060008383815181106110e3576110e2612201565b5b602002602001015182815181106110fd576110fc612201565b5b602002602001015160ff16115b6111485784828151811061112157611120612201565b5b6020026020010151818151811061113b5761113a612201565b5b602002602001015161114b565b60025b84838151811061115e5761115d612201565b5b6020026020010151828151811061117857611177612201565b5b602002602001019060ff16908160ff16815250508080600101915050611069565b508080600101915050610fdb565b5050919050565b60606000826000815181106111c6576111c5612201565b5b60200260200101515190506000600482816111e4576111e3612bb4565b5b061461120457600481816111fb576111fa612bb4565b5b06600403810190505b8083510267ffffffffffffffff81111561122157611220612be3565b5b6040519080825280601f01601f1916602001820160405280156112535781602001600182028036833780820191505090505b50915060005b83518110156113275760005b84828151811061127857611277612201565b5b6020026020010151518110156113195784828151811061129b5761129a612201565b5b602002602001015181815181106112b5576112b4612201565b5b602002602001015160f81b8482856001868a5103030201815181106112dd576112dc612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611265565b508080600101915050611259565b5050919050565b6060600084516036019050600085518263ffffffff160367ffffffffffffffff81111561135e5761135d612be3565b5b6040519080825280601f01601f1916602001820160405280156113905781602001600182028036833780820191505090505b509050604260f81b816000815181106113ac576113ab612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350604d60f81b816001815181106113f4576113f3612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000855183019050600080600290505b600681101561149b5760ff831691508260081c92508160f81b84828151811061145f5761145e612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611433565b508391506000600a90505b600e81101561150e5760ff831691508260081c92508160f81b8482815181106114d2576114d1612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506114a6565b50602860f81b83600e8151811061152857611527612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508591506000601290505b60168110156116125760ff831691508260081c92508160f81b84828151811061158d5761158c612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508160f81b8460048301815181106115d6576115d5612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611561565b50600160f81b83601a8151811061162c5761162b612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600860f81b83601c8151811061167457611673612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350865191506000602290505b60268110156117165760ff831691508260081c92508160f81b8482815181106116da576116d9612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506116ae565b50600488518161172957611728612bb4565b5b0491506000602e90505b60328110156117e45760ff831691508260081c92508160f81b84828151811061175f5761175e612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508160f81b8460048301815181106117a8576117a7612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611733565b508288886040516020016117fa93929190612f75565b6040516020818303038152906040529450505050509392505050565b60606040518060400160405280600181526020017f2300000000000000000000000000000000000000000000000000000000000000815250905060005b600681101561198257600060106002838161187157611870612bb4565b5b0660020260018401036004028560e81c62ffffff16901c62ffffff168161189b5761189a612bb4565b5b0662ffffff1690506000600167ffffffffffffffff8111156118c0576118bf612be3565b5b6040519080825280601f01601f1916602001820160405280156118f25781602001600182028036833780820191505090505b50905060098211611904576030611907565b60575b820160f81b816000815181106119205761191f612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508381604051602001611962929190612fa6565b604051602081830303815290604052935050508080600101915050611853565b50919050565b606060006001905060008390505b60098111156119c057600a81816119b0576119af612bb4565b5b0490508180600101925050611996565b60008267ffffffffffffffff8111156119dc576119db612be3565b5b6040519080825280601f01601f191660200182016040528015611a0e5781602001600182028036833780820191505090505b50905060005b8151811015611aa3576000600a60018385510303600a0a8881611a3a57611a39612bb4565b5b0481611a4957611a48612bb4565b5b0690506030810160f81b838381518110611a6657611a65612201565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350508080600101915050611a14565b50809350505050919050565b6000806000905060005b600280549050811015611b095760028181548110611ada57611ad9612201565b5b90600052602060002001600001601f9054906101000a900460ff1660ff16820191508080600101915050611ab9565b5060008184604051602001611b1e9190613016565b6040516020818303038152906040528051906020012060001c81611b4557611b44612bb4565b5b0690506000915060005b600280549050811015611c1f5760028181548110611b7057611b6f612201565b5b90600052602060002001600001601f9054906101000a900460ff1660ff168301925082821015611c125760028181548110611bae57611bad612201565b5b9060005260206000200160000160009054906101000a90047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169350505050611c23565b8080600101915050611b4f565b5050505b919050565b6060815167ffffffffffffffff811115611c4557611c44612be3565b5b604051908082528060200260200182016040528015611c7857816020015b6060815260200190600190039081611c635790505b50905060005b8251811015611ec657828181518110611c9a57611c99612201565b5b60200260200101515167ffffffffffffffff811115611cbc57611cbb612be3565b5b604051908082528060200260200182016040528015611cea5781602001602082028036833780820191505090505b50828281518110611cfe57611cfd612201565b5b602002602001018190525060005b838281518110611d1f57611d1e612201565b5b602002602001015151811015611eb857600080831115611d7657846001840381518110611d4f57611d4e612201565b5b60200260200101518281518110611d6957611d68612201565b5b6020026020010151810190505b6001855103831015611dbf57846001840181518110611d9857611d97612201565b5b60200260200101518281518110611db257611db1612201565b5b6020026020010151810190505b6000821115611e0557848381518110611ddb57611dda612201565b5b60200260200101516001830381518110611df857611df7612201565b5b6020026020010151810190505b6001858481518110611e1a57611e19612201565b5b60200260200101515103821015611e6857848381518110611e3e57611e3d612201565b5b60200260200101516001830181518110611e5b57611e5a612201565b5b6020026020010151810190505b80848481518110611e7c57611e7b612201565b5b60200260200101518381518110611e9657611e95612201565b5b602002602001019060ff16908160ff1681525050508080600101915050611d0c565b508080600101915050611c7e565b50919050565b600080fd5b6000819050919050565b611ee481611ed1565b8114611eef57600080fd5b50565b600081359050611f0181611edb565b92915050565b600060208284031215611f1d57611f1c611ecc565b5b6000611f2b84828501611ef2565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f6e578082015181840152602081019050611f53565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f9682611f34565b611fa08185611f3f565b9350611fb0818560208601611f50565b611fb981611f7a565b840191505092915050565b60006020820190508181036000830152611fde8184611f8b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061202b61202661202184611fe6565b612006565b611fe6565b9050919050565b600061203d82612010565b9050919050565b600061204f82612032565b9050919050565b61205f81612044565b82525050565b600060208201905061207a6000830184612056565b92915050565b600081519050919050565b600082825260208201905092915050565b60006120a782612080565b6120b1818561208b565b93506120c1818560208601611f50565b6120ca81611f7a565b840191505092915050565b600060208201905081810360008301526120ef818461209c565b905092915050565b600081905092915050565b7f646174613a696d6167652f626d703b6261736536342c00000000000000000000600082015250565b60006121386016836120f7565b915061214382612102565b601682019050919050565b600061215982611f34565b61216381856120f7565b9350612173818560208601611f50565b80840191505092915050565b600061218a8261212b565b9150612196828461214e565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121e857607f821691505b6020821081036121fb576121fa6121a1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f737667222076657273696f6e3d22312e3122207072657365727665417360208201527f70656374526174696f3d22784d6964594d6964206d656574222076696577426f60408201527f783d223020302035313220353132222077696474683d2231303025222068656960608201527f6768743d2231303025223e3c646566733e3c7374796c6520747970653d22746560808201527f78742f637373223e7376677b696d6167652d72656e646572696e673a6f70746960a08201527f6d697a6553706565643b696d6167652d72656e646572696e673a2d6d6f7a2d6360c08201527f726973702d65646765733b696d6167652d72656e646572696e673a2d6f2d637260e08201527f6973702d65646765733b696d6167652d72656e646572696e673a2d7765626b696101008201527f742d6f7074696d697a652d636f6e74726173743b696d6167652d72656e6465726101208201527f696e673a706978656c617465643b696d6167652d72656e646572696e673a6f706101408201527f74696d697a652d636f6e74726173743b2d6d732d696e746572706f6c6174696f6101608201527f6e2d6d6f64653a6e6561726573742d6e65696768626f723b6261636b67726f756101808201527f6e642d636f6c6f723a00000000000000000000000000000000000000000000006101a082015250565b600061245b6101a9836120f7565b915061246682612230565b6101a982019050919050565b7f3b6261636b67726f756e642d696d6167653a75726c2800000000000000000000600082015250565b60006124a86016836120f7565b91506124b382612472565b601682019050919050565b7f293b6261636b67726f756e642d7265706561743a6e6f2d7265706561743b626160008201527f636b67726f756e642d73697a653a636f6e7461696e3b6261636b67726f756e6460208201527f2d706f736974696f6e3a353025203530253b7d3c2f7374796c653e3c2f64656660408201527f733e3c2f7376673e000000000000000000000000000000000000000000000000606082015250565b60006125666068836120f7565b9150612571826124be565b606882019050919050565b60006125878261244d565b9150612593828561214e565b915061259e8261249b565b91506125aa828461214e565b91506125b582612559565b91508190509392505050565b7f7b226e616d65223a224552524f52202300000000000000000000000000000000600082015250565b60006125f76010836120f7565b9150612602826125c1565b601082019050919050565b7f222c226465736372697074696f6e223a22416e206578706572696d656e74616c60008201527f20687962726964206f66204552432d32302026204552432d3732312e222c226560208201527f787465726e616c5f75726c223a2268747470733a2f2f6572726f7243656c6c7360408201527f2e696f2f232f746f6b656e2f0000000000000000000000000000000000000000606082015250565b60006126b5606c836120f7565b91506126c08261260d565b606c82019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006127016002836120f7565b915061270c826126cb565b600282019050919050565b6000612722826125ea565b915061272e828561214e565b9150612739826126a8565b9150612745828461214e565b9150612750826126f4565b91508190509392505050565b7f22696d616765223a220000000000000000000000000000000000000000000000600082015250565b60006127926009836120f7565b915061279d8261275c565b600982019050919050565b7f222c2261747472696275746573223a5b00000000000000000000000000000000600082015250565b60006127de6010836120f7565b91506127e9826127a8565b601082019050919050565b6000612800828561214e565b915061280b82612785565b9150612817828461214e565b9150612822826127d1565b91508190509392505050565b7f7b2274726169745f74797065223a2253697a65222c2276616c7565223a000000600082015250565b6000612864601d836120f7565b915061286f8261282e565b601d82019050919050565b7f7d2c000000000000000000000000000000000000000000000000000000000000600082015250565b60006128b06002836120f7565b91506128bb8261287a565b600282019050919050565b60006128d2828561214e565b91506128dd82612857565b91506128e9828461214e565b91506128f4826128a3565b91508190509392505050565b7f7b2274726169745f74797065223a22436f6c6f72222c2276616c7565223a2200600082015250565b6000612936601f836120f7565b915061294182612900565b601f82019050919050565b60008190508160005260206000209050919050565b6000815461296e816121d0565b61297881866120f7565b9450600182166000811461299357600181146129a8576129db565b60ff19831686528115158202860193506129db565b6129b18561294c565b60005b838110156129d3578154818901526001820191506020810190506129b4565b838801955050505b50505092915050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000612a1a6002836120f7565b9150612a25826129e4565b600282019050919050565b6000612a3c828561214e565b9150612a4782612929565b9150612a538284612961565b9150612a5e82612a0d565b91508190509392505050565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b6000612aa06002836120f7565b9150612aab82612a6a565b600282019050919050565b6000612ac2828461214e565b9150612acd82612a93565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000612b0e601d836120f7565b9150612b1982612ad8565b601d82019050919050565b6000612b2f82612b01565b9150612b3b828461214e565b915081905092915050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000600082015250565b6000612b7c601a836120f7565b9150612b8782612b46565b601a82019050919050565b6000612b9d82612b6f565b9150612ba9828461214e565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b612c2581612c12565b8114612c3057600080fd5b50565b600081519050612c4281612c1c565b92915050565b600060208284031215612c5e57612c5d611ecc565b5b6000612c6c84828501612c33565b91505092915050565b7f536565643a000000000000000000000000000000000000000000000000000000600082015250565b6000612cab6005836120f7565b9150612cb682612c75565b600582019050919050565b6000819050919050565b612cdc612cd782611ed1565b612cc1565b82525050565b6000819050919050565b612cfd612cf882612c12565b612ce2565b82525050565b6000612d0e82612c9e565b9150612d1a8285612ccb565b602082019150612d2a8284612cec565b6020820191508190509392505050565b60007fffffff000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b612d81612d7c82612d3a565b612d66565b82525050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b612dce612dc982612d87565b612db3565b82525050565b6000612de08289612d70565b600382019150612df08288612dbd565b600182019150612e008287612d70565b600382019150612e108286612dbd565b600182019150612e208285612d70565b600382019150612e308284612dbd565b600182019150819050979650505050505050565b7f53746174653a0000000000000000000000000000000000000000000000000000600082015250565b6000612e7a6006836120f7565b9150612e8582612e44565b600682019050919050565b6000612e9b82612e6d565b9150612ea78284612cec565b60208201915081905092915050565b7f526f6c6c3a000000000000000000000000000000000000000000000000000000600082015250565b6000612eec6005836120f7565b9150612ef782612eb6565b600582019050919050565b6000612f0d82612edf565b9150612f198285612cec565b602082019150612f298284612ccb565b6020820191508190509392505050565b600081905092915050565b6000612f4f82612080565b612f598185612f39565b9350612f69818560208601611f50565b80840191505092915050565b6000612f818286612f44565b9150612f8d8285612f44565b9150612f998284612f44565b9150819050949350505050565b6000612fb2828561214e565b9150612fbe828461214e565b91508190509392505050565b7f53697a653a000000000000000000000000000000000000000000000000000000600082015250565b60006130006005836120f7565b915061300b82612fca565b600582019050919050565b600061302182612ff3565b915061302d8284612cec565b6020820191508190509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212208630371015493c356bfbad3b1bd694a3f744a9d1f3c04638b6dcce21e7ae52df64736f6c63430008150033

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80638188f71c11610102578063bfa0b13311610095578063dd62ed3e11610064578063dd62ed3e146106ef578063e4b50cb81461072c578063e985e9c51461076b578063f3cb8385146107a8576101d8565b8063bfa0b13314610633578063c662e4811461065e578063c87b56dd14610689578063d28a4761146106c6576101d8565b8063a22cb465116100d1578063a22cb46514610579578063a8aa1b31146105a2578063a9059cbb146105cd578063b88d4fde1461060a576101d8565b80638188f71c146104dc5780638da5cb5b1461050757806395d89b4114610532578063a0712d681461055d576101d8565b80632497ab151161017a57806342842e0e1161014957806342842e0e146104225780636352211e1461044b57806370a08231146104885780638129fc1c146104c5576101d8565b80632497ab1514610350578063313ce5671461038d57806332ba0a1e146103b8578063392f37e9146103f7576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806313af4035146102bf57806318160ddd146102e857806323b872dd14610313576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff91906125f4565b6107d1565b604051610211919061263c565b60405180910390f35b34801561022657600080fd5b5061022f6107f1565b60405161023c91906126e7565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061273f565b610891565b60405161027991906127ad565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a491906127f4565b6108f9565b6040516102b6919061263c565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190612834565b610944565b005b3480156102f457600080fd5b506102fd6109ca565b60405161030a9190612870565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061288b565b6109d4565b604051610347919061263c565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190612834565b610afe565b60405161038491906128f7565b60405180910390f35b34801561039957600080fd5b506103a2610b4c565b6040516103af919061292e565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190612a91565b610b51565b6040516103ee93929190612ca4565b60405180910390f35b34801561040357600080fd5b5061040c610d40565b60405161041991906127ad565b60405180910390f35b34801561042e57600080fd5b506104496004803603810190610444919061288b565b610d6c565b005b34801561045757600080fd5b50610472600480360381019061046d919061273f565b610d8c565b60405161047f91906127ad565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190612834565b610e42565b6040516104bc9190612870565b60405180910390f35b3480156104d157600080fd5b506104da610e5c565b005b3480156104e857600080fd5b506104f1611330565b6040516104fe9190612cf0565b60405180910390f35b34801561051357600080fd5b5061051c6113c1565b60405161052991906127ad565b60405180910390f35b34801561053e57600080fd5b506105476113ed565b60405161055491906126e7565b60405180910390f35b6105776004803603810190610572919061273f565b61148d565b005b34801561058557600080fd5b506105a0600480360381019061059b9190612d3e565b61158b565b005b3480156105ae57600080fd5b506105b761168e565b6040516105c491906127ad565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906127f4565b6116ba565b604051610601919061263c565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612e33565b6116d1565b005b34801561063f57600080fd5b506106486117ac565b60405161065591906128f7565b60405180910390f35b34801561066a57600080fd5b506106736117b8565b6040516106809190612870565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab919061273f565b6117c4565b6040516106bd91906126e7565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612eb6565b611871565b005b3480156106fb57600080fd5b5061071660048036038101906107119190612f12565b61187f565b6040516107239190612870565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e919061273f565b61190b565b60405161076293929190612f52565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612f12565b611938565b60405161079f919061263c565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190612fce565b6119d1565b005b60076020528060005260406000206000915054906101000a900460ff1681565b6060600060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610863573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061088c919061309c565b905090565b6000610100821180156108b2575061010060026108ae9190613114565b8211155b6108bb57600080fd5b6000600501600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006101008211801561091a575061010060026109169190613114565b8211155b1561092e576109298383611a57565b61093a565b610939338484611b47565b5b6001905092915050565b61094c6113c1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098357600080fd5b80600060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610100905090565b6000610100821180156109f5575061010060026109f19190613114565b8211155b15610a0a57610a05848484611c37565b610af3565b6000610a16853361187f565b905082811015610a2557600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ae65782600060040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ade9190613156565b925050819055505b610af1858585611d88565b505b600190509392505050565b60008060040160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600081565b60608060606000845190508067ffffffffffffffff811115610b7657610b7561294e565b5b604051908082528060200260200182016040528015610ba45781602001602082028036833780820191505090505b5093508067ffffffffffffffff811115610bc157610bc061294e565b5b604051908082528060200260200182016040528015610bef5781602001602082028036833780820191505090505b5092508067ffffffffffffffff811115610c0c57610c0b61294e565b5b604051908082528060200260200182016040528015610c3f57816020015b6060815260200190600190039081610c2a5790505b50915060005b81811015610d3757610c70868281518110610c6357610c6261318a565b5b602002602001015161190b565b878481518110610c8357610c8261318a565b5b60200260200101878581518110610c9d57610c9c61318a565b5b60200260200101878681518110610cb757610cb661318a565b5b602002602001018390528373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505050508080610d2f906131b9565b915050610c45565b50509193909250565b60008060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d87838383604051806020016040528060008152506116d1565b505050565b600061010082118015610da457506101006002028211155b610dad57600080fd5b600060016101008403036001901b60001b90506000610dca611330565b905060005b8151811015610e35578283610dfd848481518110610df057610def61318a565b5b6020026020010151610afe565b1603610e2857818181518110610e1657610e1561318a565b5b60200260200101519350505050610e3d565b8080600101915050610dcf565b506000925050505b919050565b6000610e55610e5083610afe565b611e92565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff16610e7c61168e565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c57600080fd5b60003090506000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f269190613216565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b600060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600601829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602181526020016134e2602191398051906020012061010060405161105a9190612870565b60405180910390a360005b6101008110156110f75760018161010061107f9190613243565b6110899190613243565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480806110ef906131b9565b915050611065565b5061111882737a250d5630b4cf539739df2c5dacb4c659f2488d6080611b47565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190613216565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539682846040518363ffffffff1660e01b81526004016111d5929190613277565b6020604051808303816000875af11580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112189190613216565b600060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198373ffffffffffffffffffffffffffffffffffffffff16318460806000806112b16113c1565b426040518863ffffffff1660e01b81526004016112d3969594939291906132e5565b60606040518083038185885af11580156112f1573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611316919061335b565b50505061132c826113256113c1565b600a611d88565b5050565b606060006006018054806020026020016040519081016040528092919081815260200182805480156113b757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161136d575b5050505050905090565b60008060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561145f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611488919061309c565b905090565b6000309050600061149d82610e42565b9050808311156114ac57600080fd5b600067016345785d8a0000846114c29190613114565b9050803410156114d157600080fd5b6114dc833386611d88565b6114e46113c1565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611529573d6000803e3d6000fd5b5080341115611585573373ffffffffffffffffffffffffffffffffffffffff166108fc82346115589190613156565b9081150290604051600060405180830381858888f19350505050158015611583573d6000803e3d6000fd5b505b50505050565b80600060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611682919061263c565b60405180910390a35050565b60008060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006116c7338484611d88565b6001905092915050565b6116dc848484611c37565b6000833b905060008163ffffffff1611156117a55763150b7a0260e01b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b81526004016117389493929190613403565b6020604051808303816000875af1158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190613464565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146117a457600080fd5b5b5050505050565b60008060000154905090565b67016345785d8a000081565b6060600060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b81526004016118249190612870565b600060405180830381865afa158015611841573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061186a919061309c565b9050919050565b61187b8282611fa3565b5050565b60008060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600080606061191984610d8c565b61192285610891565b61192b866117c4565b9250925092509193909250565b60008060040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d96113c1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1057600080fd5b80600060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600161010083611a699190613156565b611a739190613156565b6001901b60001b90508081611a8733610afe565b1614611a9257600080fd5b826000600501600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b80600060040160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602181526020016134c1602191398051906020012083604051611c2a9190612870565b60405180910390a3505050565b61010081118015611c4d57506101006002028111155b611c5657600080fd5b600060016101008303036001901b60001b90508081611c7486610afe565b1614611c7f57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611cec5750611cbd82610891565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611cfd5750611cfc8433611938565b5b611d0657600080fd5b6000600167ffffffffffffffff811115611d2357611d2261294e565b5b604051908082528060200260200182016040528015611d515781602001602082028036833780820191505090505b5090508281600081518110611d6957611d6861318a565b5b602002602001018181525050611d818585848461202b565b5050505050565b60008060009050600080611d9b87610afe565b60001c905060008567ffffffffffffffff811115611dbc57611dbb61294e565b5b604051908082528060200260200182016040528015611dea5781602001602082028036833780820191505090505b5090505b600082118015611dfd57508583105b15611e5a57600180831603611e4657836001901b60001b851794506001846101000101818480600101955081518110611e3957611e3861318a565b5b6020026020010181815250505b8380600101945050600182901c9150611dee565b858314611e6657600080fd5b8485611e718a610afe565b1614611e7c57600080fd5b611e888888878461202b565b5050505050505050565b6000808260001c90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103611ecd57610100915050611f9e565b7f5555555555555555555555555555555555555555555555555555555555555555600182901c16810390507f3333333333333333333333333333333333333333333333333333333333333333600282901c167f333333333333333333333333333333333333333333333333333333333333333382160190507f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f600482901c820116905060f87f01010101010101010101010101010101010101010101010101010101010101018202901c9050809150505b919050565b600080600090505b8251811015611fee576001610100848381518110611fcc57611fcb61318a565b5b602002602001015103036001901b60001b821791508080600101915050611fab565b508151611ffa82611e92565b1461200457600080fd5b808161200f33610afe565b161461201a57600080fd5b6120263384838561202b565b505050565b600081511161203957600080fd5b60005b815181101561220457600073ffffffffffffffffffffffffffffffffffffffff166120808383815181106120735761207261318a565b5b6020026020010151610891565b73ffffffffffffffffffffffffffffffffffffffff16146121825760008060050160008484815181106120b6576120b561318a565b5b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081818151811061211d5761211c61318a565b5b6020026020010151600073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b8181815181106121955761219461318a565b5b60200260200101518473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808060010191505061203c565b5081600060040160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254189250508190555060008060001b61226786610afe565b14905060008060001b61227986610afe565b14905083600060040160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282541792505081905550811561248c576000806122e0611330565b905060005b8151811015612350578873ffffffffffffffffffffffffffffffffffffffff168282815181106123185761231761318a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361234357809250612350565b80806001019150506122e5565b5082156123bc57866000600601838154811061236f5761236e61318a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612485565b806001825103815181106123d3576123d261318a565b5b6020026020010151600060060183815481106123f2576123f161318a565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060060180548061244f5761244e613491565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b50506124fa565b80156124f9576000600601859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6000801b61250786610afe565b61251088610afe565b161461251b57600080fd5b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166040518060600160405280602181526020016134e2602191398051906020012085516040516125789190612870565b60405180910390a3505050505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6125d18161259c565b81146125dc57600080fd5b50565b6000813590506125ee816125c8565b92915050565b60006020828403121561260a57612609612592565b5b6000612618848285016125df565b91505092915050565b60008115159050919050565b61263681612621565b82525050565b6000602082019050612651600083018461262d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612691578082015181840152602081019050612676565b60008484015250505050565b6000601f19601f8301169050919050565b60006126b982612657565b6126c38185612662565b93506126d3818560208601612673565b6126dc8161269d565b840191505092915050565b6000602082019050818103600083015261270181846126ae565b905092915050565b6000819050919050565b61271c81612709565b811461272757600080fd5b50565b60008135905061273981612713565b92915050565b60006020828403121561275557612754612592565b5b60006127638482850161272a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127978261276c565b9050919050565b6127a78161278c565b82525050565b60006020820190506127c2600083018461279e565b92915050565b6127d18161278c565b81146127dc57600080fd5b50565b6000813590506127ee816127c8565b92915050565b6000806040838503121561280b5761280a612592565b5b6000612819858286016127df565b925050602061282a8582860161272a565b9150509250929050565b60006020828403121561284a57612849612592565b5b6000612858848285016127df565b91505092915050565b61286a81612709565b82525050565b60006020820190506128856000830184612861565b92915050565b6000806000606084860312156128a4576128a3612592565b5b60006128b2868287016127df565b93505060206128c3868287016127df565b92505060406128d48682870161272a565b9150509250925092565b6000819050919050565b6128f1816128de565b82525050565b600060208201905061290c60008301846128e8565b92915050565b600060ff82169050919050565b61292881612912565b82525050565b6000602082019050612943600083018461291f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129868261269d565b810181811067ffffffffffffffff821117156129a5576129a461294e565b5b80604052505050565b60006129b8612588565b90506129c4828261297d565b919050565b600067ffffffffffffffff8211156129e4576129e361294e565b5b602082029050602081019050919050565b600080fd5b6000612a0d612a08846129c9565b6129ae565b90508083825260208201905060208402830185811115612a3057612a2f6129f5565b5b835b81811015612a595780612a45888261272a565b845260208401935050602081019050612a32565b5050509392505050565b600082601f830112612a7857612a77612949565b5b8135612a888482602086016129fa565b91505092915050565b600060208284031215612aa757612aa6612592565b5b600082013567ffffffffffffffff811115612ac557612ac4612597565b5b612ad184828501612a63565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b0f8161278c565b82525050565b6000612b218383612b06565b60208301905092915050565b6000602082019050919050565b6000612b4582612ada565b612b4f8185612ae5565b9350612b5a83612af6565b8060005b83811015612b8b578151612b728882612b15565b9750612b7d83612b2d565b925050600181019050612b5e565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000612be082612657565b612bea8185612bc4565b9350612bfa818560208601612673565b612c038161269d565b840191505092915050565b6000612c1a8383612bd5565b905092915050565b6000602082019050919050565b6000612c3a82612b98565b612c448185612ba3565b935083602082028501612c5685612bb4565b8060005b85811015612c925784840389528151612c738582612c0e565b9450612c7e83612c22565b925060208a01995050600181019050612c5a565b50829750879550505050505092915050565b60006060820190508181036000830152612cbe8186612b3a565b90508181036020830152612cd28185612b3a565b90508181036040830152612ce68184612c2f565b9050949350505050565b60006020820190508181036000830152612d0a8184612b3a565b905092915050565b612d1b81612621565b8114612d2657600080fd5b50565b600081359050612d3881612d12565b92915050565b60008060408385031215612d5557612d54612592565b5b6000612d63858286016127df565b9250506020612d7485828601612d29565b9150509250929050565b600080fd5b600067ffffffffffffffff821115612d9e57612d9d61294e565b5b612da78261269d565b9050602081019050919050565b82818337600083830152505050565b6000612dd6612dd184612d83565b6129ae565b905082815260208101848484011115612df257612df1612d7e565b5b612dfd848285612db4565b509392505050565b600082601f830112612e1a57612e19612949565b5b8135612e2a848260208601612dc3565b91505092915050565b60008060008060808587031215612e4d57612e4c612592565b5b6000612e5b878288016127df565b9450506020612e6c878288016127df565b9350506040612e7d8782880161272a565b925050606085013567ffffffffffffffff811115612e9e57612e9d612597565b5b612eaa87828801612e05565b91505092959194509250565b60008060408385031215612ecd57612ecc612592565b5b6000612edb858286016127df565b925050602083013567ffffffffffffffff811115612efc57612efb612597565b5b612f0885828601612a63565b9150509250929050565b60008060408385031215612f2957612f28612592565b5b6000612f37858286016127df565b9250506020612f48858286016127df565b9150509250929050565b6000606082019050612f67600083018661279e565b612f74602083018561279e565b8181036040830152612f8681846126ae565b9050949350505050565b6000612f9b8261278c565b9050919050565b612fab81612f90565b8114612fb657600080fd5b50565b600081359050612fc881612fa2565b92915050565b600060208284031215612fe457612fe3612592565b5b6000612ff284828501612fb9565b91505092915050565b600067ffffffffffffffff8211156130165761301561294e565b5b61301f8261269d565b9050602081019050919050565b600061303f61303a84612ffb565b6129ae565b90508281526020810184848401111561305b5761305a612d7e565b5b613066848285612673565b509392505050565b600082601f83011261308357613082612949565b5b815161309384826020860161302c565b91505092915050565b6000602082840312156130b2576130b1612592565b5b600082015167ffffffffffffffff8111156130d0576130cf612597565b5b6130dc8482850161306e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061311f82612709565b915061312a83612709565b925082820261313881612709565b9150828204841483151761314f5761314e6130e5565b5b5092915050565b600061316182612709565b915061316c83612709565b9250828203905081811115613184576131836130e5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131c482612709565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131f6576131f56130e5565b5b600182019050919050565b600081519050613210816127c8565b92915050565b60006020828403121561322c5761322b612592565b5b600061323a84828501613201565b91505092915050565b600061324e82612709565b915061325983612709565b9250828201905080821115613271576132706130e5565b5b92915050565b600060408201905061328c600083018561279e565b613299602083018461279e565b9392505050565b6000819050919050565b6000819050919050565b60006132cf6132ca6132c5846132a0565b6132aa565b612709565b9050919050565b6132df816132b4565b82525050565b600060c0820190506132fa600083018961279e565b6133076020830188612861565b61331460408301876132d6565b61332160608301866132d6565b61332e608083018561279e565b61333b60a0830184612861565b979650505050505050565b60008151905061335581612713565b92915050565b60008060006060848603121561337457613373612592565b5b600061338286828701613346565b935050602061339386828701613346565b92505060406133a486828701613346565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b60006133d5826133ae565b6133df81856133b9565b93506133ef818560208601612673565b6133f88161269d565b840191505092915050565b6000608082019050613418600083018761279e565b613425602083018661279e565b6134326040830185612861565b818103606083015261344481846133ca565b905095945050505050565b60008151905061345e816125c8565b92915050565b60006020828403121561347a57613479612592565b5b60006134888482850161344f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe417070726f76616c28616464726573732c616464726573732c75696e74323536295472616e7366657228616464726573732c616464726573732c75696e7432353629a264697066735822122040c6a36e4365318db7b490d1fd460f9b33550a69574a3ebe958bf08f01d99bae64736f6c63430008150033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.