Contract 0xad7D04c6c047E7475AAdf98A4D6481BD022658d2 4

 
 
Txn Hash
Method
Block
From
To
Value
0xb3c818d14a94a873abc7809ad8e1799540343ea0a9b7e3ac3d1dfea096b433f2Mint For Self(pending)2022-08-11 12:18:152 hrs 43 mins ago0x9ff0d08718968b1d7373989924b021cd0ae1b531 IN 0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether(Pending)(Pending)
0xf7c4ae911a23020a38dfcbf1c72bd023de3d7ac694fd8750df9ef18d4f9f4214Mint For Self(pending)2022-08-11 12:18:152 hrs 43 mins ago0x9ff0d08718968b1d7373989924b021cd0ae1b531 IN 0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether(Pending)(Pending)
0x261f99e9af536f2a218f885e1935849bb71b8f0e739195a25219601b4ffab65dSet Approval For...151333992022-07-13 9:08:3229 days 5 hrs ago0x0667640ab57cb909b343157d718651ea49141a75 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00098742 21.‍18073082
0x8f25a35669d9dbd55da2c2504ab3747e00523b6df6524b1a55d20fcbc7569c58Set Approval For...150730712022-07-04 1:23:3338 days 13 hrs ago0x96b9ddcb494eefb5c778e6183c1e833b76068e76 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00072114 15.‍44101716
0xee1d23ce4cfdc3ce6991022152d4409b7ce3dd1ad96967a88713ee9296366baaMint For Self149780922022-06-17 8:04:3255 days 6 hrs ago0x50eb6a72b673d464e6146bae561d569fb38e9238 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍01815085 35.‍75254919
0xc6a6376983e0d1c7b0bf49929c0b98d238f578fe1f36c819601fbf010aaf630aSet Approval For...146747902022-04-28 19:50:57104 days 19 hrs agoENS Name antoniowu.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00094072 37.‍94642059
0xb02a5ad3aed327e95761364e27302b716da9db937ad214d61d6a5ced5f43ff05Mint For Self146719952022-04-28 9:06:51105 days 5 hrs agoENS Name kingofnfts.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍01747361 28.‍01367805
0x236419a86d085f9eab9cfe34fbd20f5f27ba24194af79e78e8afa66b8e9715d8Safe Transfer Fr...146285922022-04-21 13:35:30112 days 1 hr agoENS Name ananthmadhavan.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00351068 39.‍96685598
0x2366a55b8d7f31da2c065483b870fefd75dbcd43247c32ab005ee53b7baca601Transfer From145711452022-04-12 14:06:01121 days 55 mins agoUkraine Crypto Donation IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00353765 41.‍6331281
0x05274ec395ce1b447d6cdd2373c18f966acc39baae92beea181db95fbd24e89dSet Approval For...145451132022-04-08 12:27:28125 days 2 hrs agoENS Name kingofnfts.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00301952 64.‍65377342
0xf72bbe32ac6ddd65adb9ddb2880cf7c95f3f7db5e776180bcfffc9fcc7b30269Mint For Self145389842022-04-07 13:21:09126 days 1 hr agoENS Name kingofnfts.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍0171075 44
0xa12641b6f3622cecdcec1826093efcd47414662de8d5fe894587361a6ef7bf17Set Approval For...143393722022-03-07 11:16:21157 days 3 hrs ago0x78fef9b2c75f4105776b219e4a6e66928235bc34 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00099607 21.‍32787767
0xa0c1a02de002946e9aff1e9dcd8ae8e08b378789eb7f8d65bee6cec1174975adMint For Self143086812022-03-02 16:27:48161 days 22 hrs agoENS Name floorcalls.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍0118161 75.‍42466878
0x25e9e372a3bb0dd93021a146c7d37fa27ef0bed93c5e71cfcc6710a38728f7afMint For Self143086652022-03-02 16:23:52161 days 22 hrs ago0x78fef9b2c75f4105776b219e4a6e66928235bc34 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍03731668 60.‍09582207
0x041436597efc19b60a7874dad93a350c19ba49a7b1c466ebfcd9e44eb3e4ca3eTransfer From143068642022-03-02 9:50:33162 days 5 hrs agoENS Name 0xqzh.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00216042 25.‍42512412
0x705b62605a4383c11667585ca8b1e810ce4ab81180f8ad63d8fa5ee764d06e48Set Approval For...142785072022-02-26 0:28:17166 days 14 hrs ago0x8cf885c100fcde9045e188e9ea0e7b24775d5581 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00266977 57.‍1648515
0xd939892f6ea54a2ea1b80d1d630b8921c931c2aa47f5fcc58bdb7dc02b730102Transfer From142592132022-02-23 0:47:52169 days 14 hrs ago0x7fad6ac16a5004fea4866961d4a1b55746de2e6f IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍0082229 86.‍18042841
0x77cfedde8fd993c84173f251c45f1565a551caf4c32d59c3dba8e4d520c7fd2fSet Approval For...142417172022-02-20 7:54:44172 days 7 hrs agoENS Name ajie.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00199353 42.‍68539735
0x68f905e853a8f4fc838094332d56cab8a33dff1659e247b2b5e3d3ed3f4ce0c2Set Approval For...142409842022-02-20 5:11:08172 days 9 hrs ago0xdc173a534db25b93b8fb662811ee0b30c63807e5 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00125583 50.‍656813
0x12fc4e7bfc5c35d643a550d1e7a6cdb2e9a9adb9a1af181f4132d4c16e3c90c9Set Approval For...142328142022-02-18 22:43:36173 days 16 hrs ago0xe5fa2f1c8df69b8dc830e342838fa60909caf164 IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍0038248 81.‍89625307
0xea460362c4175342558e8fc7e45d062dc8ff61eabaf130785b8fefd2162e2b83Set Approval For...142166582022-02-16 10:44:23176 days 4 hrs agoENS Name valin.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00294151 62.‍98343436
0xa443abb72eceac890c432311fabcf5f6096514858c181a6e749931be92b59e66Set Approval For...142166232022-02-16 10:36:42176 days 4 hrs agoENS Name sanj.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00216849 46.‍43157032
0xcc3c8f966e26597831335de736924df31c27b9ed19cab656d4921717228b3eddSet Approval For...142140962022-02-16 0:57:16176 days 14 hrs agoENS Name ghostpant.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00571718 122.‍41574222
0x4b5a32e18fb4b9d026260c687486c61c52e9c11a4140820f6c0c83d8463e1696Set Approval For...142140782022-02-16 0:52:16176 days 14 hrs agoENS Name l4m3r.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00511088 109.‍43366227
0x23e3d862ed720d74baf91a69f4eace0d3c93d64cc3682e964f84c5fae5221359Set Approval For...141832992022-02-11 7:04:32181 days 7 hrs agoENS Name ananthmadhavan.eth IN  0xad7d04c6c047e7475aadf98a4d6481bd022658d20 Ether0.‍00235305 50.‍38336384
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LarvaWolf

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-02
*/

/**
 *Submitted for verification at Etherscan.io on 2021-12-21
*/

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

interface IERC165 {

	function supportsInterface(bytes4 interfaceId) external view returns (bool);

}

interface IERC721 is IERC165 {

	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

	function balanceOf(address owner) external view returns (uint256 balance);
	function ownerOf(uint256 tokenId) external view returns (address owner);

	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId
	) external;

	function transferFrom(
		address from,
		address to,
		uint256 tokenId
	) external;

	function approve(address to, uint256 tokenId) external;
	function getApproved(uint256 tokenId) external view returns (address operator);
	function setApprovalForAll(address operator, bool _approved) external;
	function isApprovedForAll(address owner, address operator) external view returns (bool);

	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId,
		bytes calldata data
	) external;
}

library Strings {

	bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

	function toString(uint256 value) internal pure returns (string memory) {
		if (value == 0) {
			return "0";
		}
		uint256 temp = value;
		uint256 digits;
		while (temp != 0) {
			digits++;
			temp /= 10;
		}
		bytes memory buffer = new bytes(digits);
		while (value != 0) {
			digits -= 1;
			buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
			value /= 10;
		}
		return string(buffer);
	}

	function toHexString(uint256 value) internal pure returns (string memory) {
		if (value == 0) {
			return "0x00";
		}
		uint256 temp = value;
		uint256 length = 0;
		while (temp != 0) {
			length++;
			temp >>= 8;
		}
		return toHexString(value, length);
	}

	function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
		bytes memory buffer = new bytes(2 * length + 2);
		buffer[0] = "0";
		buffer[1] = "x";
		for (uint256 i = 2 * length + 1; i > 1; --i) {
			buffer[i] = _HEX_SYMBOLS[value & 0xf];
			value >>= 4;
		}
		require(value == 0, "Strings: hex length insufficient");
		return string(buffer);
	}

}

abstract contract Context {

	function _msgSender() internal view virtual returns (address) {
		return msg.sender;
	}

	function _msgData() internal view virtual returns (bytes calldata) {
		return msg.data;
	}

}

abstract contract Ownable is Context {

	address private _owner;

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor() {
		_setOwner(_msgSender());
	}

	function owner() public view virtual returns (address) {
		return _owner;
	}

	modifier onlyOwner() {
		require(owner() == _msgSender(), "Ownable: caller is not the owner");
		_;
	}

	function renounceOwnership() public virtual onlyOwner {
		_setOwner(address(0));
	}

	function transferOwnership(address newOwner) public virtual onlyOwner {
		require(newOwner != address(0), "Ownable: new owner is the zero address");
		_setOwner(newOwner);
	}

	function _setOwner(address newOwner) private {
		address oldOwner = _owner;
		_owner = newOwner;
		emit OwnershipTransferred(oldOwner, newOwner);
	}
}

abstract contract ReentrancyGuard {

	uint256 private constant _NOT_ENTERED = 1;
	uint256 private constant _ENTERED = 2;
	uint256 private _status;

	constructor() {
		_status = _NOT_ENTERED;
	}

	modifier nonReentrant() {

		require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

		_status = _ENTERED; _; _status = _NOT_ENTERED;

	}

}

interface IERC721Receiver {

	function onERC721Received(
		address operator,
		address from,
		uint256 tokenId,
		bytes calldata data
	) external returns (bytes4);

}

interface IERC721Metadata is IERC721 {

	function name() external view returns (string memory);
	function symbol() external view returns (string memory);
	function tokenURI(uint256 tokenId) external view returns (string memory);

}

library Address {

	function isContract(address account) internal view returns (bool) {

		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(address(this).balance >= amount, "Address: insufficient balance");

		(bool success, ) = recipient.call{value: amount}("");
		require(success, "Address: unable to send value, recipient may have reverted");
	}

	function functionCall(address target, bytes memory data) internal returns (bytes memory) {
		return functionCall(target, data, "Address: low-level call failed");
	}

	function functionCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value
	) internal returns (bytes memory) {
		return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
	}

	function functionCallWithValue(
		address target,
		bytes memory data,
		uint256 value,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(address(this).balance >= value, "Address: insufficient balance for call");
		require(isContract(target), "Address: call to non-contract");

		(bool success, bytes memory returndata) = target.call{value: value}(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
		return functionStaticCall(target, data, "Address: low-level static call failed");
	}

	function functionStaticCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal view returns (bytes memory) {
		require(isContract(target), "Address: static call to non-contract");

		(bool success, bytes memory returndata) = target.staticcall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
		return functionDelegateCall(target, data, "Address: low-level delegate call failed");
	}

	function functionDelegateCall(
		address target,
		bytes memory data,
		string memory errorMessage
	) internal returns (bytes memory) {
		require(isContract(target), "Address: delegate call to non-contract");

		(bool success, bytes memory returndata) = target.delegatecall(data);
		return _verifyCallResult(success, returndata, errorMessage);
	}

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

abstract contract ERC165 is IERC165 {

	function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
		return interfaceId == type(IERC165).interfaceId;
	}

}

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {

	using Address for address;
	using Strings for uint256;

	string private _name;
	string private _symbol;

	mapping(uint256 => address) private _owners;
	mapping(address => uint256) private _balances;
	mapping(uint256 => address) private _tokenApprovals;
	mapping(address => mapping(address => bool)) private _operatorApprovals;

	constructor(string memory name_, string memory symbol_) {
		_name = name_;
		_symbol = symbol_;
	}

	function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
		return
			interfaceId == type(IERC721).interfaceId ||
			interfaceId == type(IERC721Metadata).interfaceId ||
			super.supportsInterface(interfaceId);
	}

	function balanceOf(address owner) public view virtual override returns (uint256) {
		require(owner != address(0), "ERC721: balance query for the zero address");
		return _balances[owner];
	}

	function ownerOf(uint256 tokenId) public view virtual override returns (address) {
		address owner = _owners[tokenId];
		require(owner != address(0), "ERC721: owner query for nonexistent token");
		return owner;
	}

	function name() public view virtual override returns (string memory) {
		return _name;
	}

	function symbol() public view virtual override returns (string memory) {
		return _symbol;
	}

	function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
		require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

		string memory baseURI = _baseURI();
		return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
	}

	function _baseURI() internal view virtual returns (string memory) {
		return "";
	}

	function approve(address to, uint256 tokenId) public virtual override {
		address owner = ERC721.ownerOf(tokenId);
		require(to != owner, "ERC721: approval to current owner");

		require(
			_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
			"ERC721: approve caller is not owner nor approved for all"
		);

		_approve(to, tokenId);
	}

	function getApproved(uint256 tokenId) public view virtual override returns (address) {
		require(_exists(tokenId), "ERC721: approved query for nonexistent token");

		return _tokenApprovals[tokenId];
	}

	function setApprovalForAll(address operator, bool approved) public virtual override {
		require(operator != _msgSender(), "ERC721: approve to caller");

		_operatorApprovals[_msgSender()][operator] = approved;
		emit ApprovalForAll(_msgSender(), operator, approved);
	}

	function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
		return _operatorApprovals[owner][operator];
	}

	function transferFrom(
		address from,
		address to,
		uint256 tokenId
	) public virtual override {
		//solhint-disable-next-line max-line-length
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

		_transfer(from, to, tokenId);
	}

	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId
	) public virtual override {
		safeTransferFrom(from, to, tokenId, "");
	}

	function safeTransferFrom(
		address from,
		address to,
		uint256 tokenId,
		bytes memory _data
	) public virtual override {
		require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
		_safeTransfer(from, to, tokenId, _data);
	}

	function _safeTransfer(
		address from,
		address to,
		uint256 tokenId,
		bytes memory _data
	) internal virtual {
		_transfer(from, to, tokenId);
		require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
	}

	function _exists(uint256 tokenId) internal view virtual returns (bool) {
		return _owners[tokenId] != address(0);
	}

	function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
		require(_exists(tokenId), "ERC721: operator query for nonexistent token");
		address owner = ERC721.ownerOf(tokenId);
		return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
	}

	function _safeMint(address to, uint256 tokenId) internal virtual {
		_safeMint(to, tokenId, "");
	}

	function _safeMint(
		address to,
		uint256 tokenId,
		bytes memory _data
	) internal virtual {
		_mint(to, tokenId);
		require(
			_checkOnERC721Received(address(0), to, tokenId, _data),
			"ERC721: transfer to non ERC721Receiver implementer"
		);
	}

	function _mint(address to, uint256 tokenId) internal virtual {
		require(to != address(0), "ERC721: mint to the zero address");
		require(!_exists(tokenId), "ERC721: token already minted");

		_beforeTokenTransfer(address(0), to, tokenId);

		_balances[to] += 1;
		_owners[tokenId] = to;

		emit Transfer(address(0), to, tokenId);
	}

	function _burn(uint256 tokenId) internal virtual {
		address owner = ERC721.ownerOf(tokenId);

		_beforeTokenTransfer(owner, address(0), tokenId);

		// Clear approvals
		_approve(address(0), tokenId);

		_balances[owner] -= 1;
		delete _owners[tokenId];

		emit Transfer(owner, address(0), tokenId);
	}

	function _transfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual {
		require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
		require(to != address(0), "ERC721: transfer to the zero address");

		_beforeTokenTransfer(from, to, tokenId);

		_approve(address(0), tokenId);

		_balances[from] -= 1;
		_balances[to] += 1;
		_owners[tokenId] = to;

		emit Transfer(from, to, tokenId);
	}

	function _approve(address to, uint256 tokenId) internal virtual {
		_tokenApprovals[tokenId] = to;
		emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
	}

	function _checkOnERC721Received(
		address from,
		address to,
		uint256 tokenId,
		bytes memory _data
	) private returns (bool) {
		if (to.isContract()) {
			try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
				return retval == IERC721Receiver(to).onERC721Received.selector;
			} catch (bytes memory reason) {
				if (reason.length == 0) {
					revert("ERC721: transfer to non ERC721Receiver implementer");
				} else {
					assembly {
						revert(add(32, reason), mload(reason))
					}
				}
			}
		} else {
			return true;
		}
	}

	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual {}
}

interface IERC721Enumerable is IERC721 {

	function totalSupply() external view returns (uint256);
	function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
	function tokenByIndex(uint256 index) external view returns (uint256);

}

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {

	mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
	mapping(uint256 => uint256) private _ownedTokensIndex;

	uint256[] private _allTokens;

	mapping(uint256 => uint256) private _allTokensIndex;

	function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
		return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
	}

	function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
		require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
		return _ownedTokens[owner][index];
	}

	function totalSupply() public view virtual override returns (uint256) {
		return _allTokens.length;
	}

	function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
		require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
		return _allTokens[index];
	}

	function _beforeTokenTransfer(
		address from,
		address to,
		uint256 tokenId
	) internal virtual override {
		super._beforeTokenTransfer(from, to, tokenId);

		if (from == address(0)) {
			_addTokenToAllTokensEnumeration(tokenId);
		} else if (from != to) {
			_removeTokenFromOwnerEnumeration(from, tokenId);
		}
		if (to == address(0)) {
			_removeTokenFromAllTokensEnumeration(tokenId);
		} else if (to != from) {
			_addTokenToOwnerEnumeration(to, tokenId);
		}
	}

	function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
		uint256 length = ERC721.balanceOf(to);
		_ownedTokens[to][length] = tokenId;
		_ownedTokensIndex[tokenId] = length;
	}

	function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
		_allTokensIndex[tokenId] = _allTokens.length;
		_allTokens.push(tokenId);
	}

	function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {

		uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
		uint256 tokenIndex = _ownedTokensIndex[tokenId];

		if (tokenIndex != lastTokenIndex) {
			uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

			_ownedTokens[from][tokenIndex] = lastTokenId;
			_ownedTokensIndex[lastTokenId] = tokenIndex;
		}

		delete _ownedTokensIndex[tokenId];
		delete _ownedTokens[from][lastTokenIndex];
	}

	function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

		uint256 lastTokenIndex = _allTokens.length - 1;
		uint256 tokenIndex = _allTokensIndex[tokenId];
		uint256 lastTokenId = _allTokens[lastTokenIndex];

		_allTokens[tokenIndex] = lastTokenId;
		_allTokensIndex[lastTokenId] = tokenIndex;

		delete _allTokensIndex[tokenId];
		_allTokens.pop();
	}
}



contract LarvaWolf is ERC721Enumerable, ReentrancyGuard, Ownable {

	uint256 public maxSupply = 5000;
	uint256 public price = 0.05 ether;
	uint256 public maxMint = 10;
	uint256 public numTokensMinted;

	string[8] private baseColors = ['#AE8B61','#DBB181','#E8AA96','#FFC2C2','#EECFA0','#C9CDAF','#D5C6E1','#EAD9D9'];
	string[7] private thirdNames = ['Smile', 'GoldTooth', 'Handlebars', 'Zombie', 'Alien', 'Punk', 'Normal'];
	string[7] private thirdLayers = [
		'<path fill="#000" d="m20 18h1v1h-1v-1z"/>',
		'<path fill="#FFE600" d="m22 19h1v1h-1v-1z"/>',
		'<path fill="#A66E2C" d="m21 18h3v1h-3v-1zm-1 1h1v2h-1v-2zm4 0h1v2h-1v-2z" /><path fill="#C28946" d="m20 18h1v1h-1v-1zm4 0h1v1h-1v-1z" />',
		'<path fill="#7DA269" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z"/><path fill="#000" fill-opacity=".4" d="m3 27h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1zm0-13h2v1h-2v-1zm3 0h2v1h-2v-1zm-3 2h1v1h-1v-1zm3 0h1v1h-1v-1zm6 6h1v1h-1v-1z"/><path fill="red" d="m12 13h1v1h-1v-1zm3 0h1v1h-1v-1z"/><path fill="#000" d="m13 13h1v1h-1v-1zm3 0h1v1h-1v-1zm5 6h3v1h-3v-1z"/>',
		'<path fill="#C8FBFB" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z"/><path fill="#75BDBD" d="m12 12h1v1h-1v-1zm3 0h1v1h-1v-1z"/><path fill="#000" d="m12 13h1v1h-1v-1zm1-1h1v1h-1v-1zm2 1h1v1h-1v-1zm1-1h1v1h-1v-1zm5 7h3v1h-3v-1z"/> <path fill="#9BE0E0" d="m3 27h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1zm1-12h1v1h-1v-1zm3 0h1v1h-1v-1z"/>',
		'<path fill="#F8C8DC" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z" /><path fill="#FFC0CB" d="m12 12h2v1h-2v-1zm3 0h2v1h-2v-1zm-12 15h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1z"/><path fill="#000" d="m12 13h2v1h-2v-1zm3 0h2v1h-2v-1zm6 6h3v1h-3v-1z"/>',
		''];
	string[8] private fourthNames = ['3D Glasses','VR','Dizzy Eyes','Eye Patch','Classic Shades','Regular Shades','Cyclop','None'];
	string[8] private fourthLayers = [
		'<path fill="#F0F0F0" d="m10 12h8v1h-8v-1zm7 1h1v2h-1v-2zm-6 1h6v1h-6v-1zm0-1h1v1h-1v-1zm3 0h1v1h-1v-1z" /><path fill="#FD3232" d="m15 13h2v1h-2v-1z" /><path fill="#328DFD" d="m12 13h2v1h-2v-1z" />',
		'<path fill="#000" d="m12 12h5v1h-5v-1zm-1-2h7v1h-7v-1zm-1 1h1v3h-1v-3zm1 3h7v1h-7v-1zm7-3h1v3h-1v-3z" /><path fill="#8D8D8D" d="m11 11h1v1h-1v-1zm6 0h1v1h-1v-1zm-6 2h1v1h-1v-1zm6 0h1v1h-1v-1z" /><path fill="#B4B4B4" d="m12 11h5v1h-5v-1zm0 2h5v1h-5v-1zm-1-1h1v1h-1v-1zm6 0h1v1h-1v-1z" />',
		'<path fill="#FFFFFF" d="m12 12h1v1h-1v-1zm1 1h1v1h-1v-1zm2-1h1v1h-1v-1zm1 1h1v1h-1v-1z" /><path fill="#8D8D8D" d="m12 13h1v1h-1v-1zm1-1h1v1h-1v-1zm2 1h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m10 11h8v1h-8v-1zm2 1h2v2h-2v-2z" />',
		'<path fill="#000" d="m11 12h8v1h-8v-1zm0 1h3v1h-3v-1zm5 0h3v1h-3v-1z" />',
		'<path fill="#000" d="m10 12h8v1h-8v-1zm2 1h2v1h-2v-1zm3 0h2v1h-2v-1z" />',
		'<path fill="#000" d="m12 12h5v1h-5v-1zm-1-2h7v1h-7v-1zm-1 1h1v3h-1v-3zm1 3h7v1h-7v-1zm7-3h1v3h-1v-3z" /><path fill="#8D8D8D" d="m11 11h1v1h-1v-1zm6 0h1v1h-1v-1zm-6 2h1v1h-1v-1zm6 0h1v1h-1v-1z" /><path fill="#B4B4B4" d="m12 11h5v1h-5v-1zm0 2h5v1h-5v-1zm-1-1h1v1h-1v-1zm6 0h1v1h-1v-1z" /><path fill="#FF0000" d="m12 12h20v1h-20v-1z" />',
		''];
	string[14] private fifthNames = ['Beanie','Cowboy Hat','Fedora','Police Cap','Do-rag','Knitted Cap','Bandana','Frumpy Hair','Hood','Messy Hair','Cap Forward','Cap','Top Hat','None'];
	string[14] private fifthLayers = [
		 '<path fill="#3CC300" d="m11 9h6v1h-6v-1z" /><path fill="#0060C3" d="m10 7h1v2h-1v-2zm1-1h1v2h-1v-2z" /><path fill="#D60404" d="m17 7h1v2h-1v-2zm-1-1h1v2h-1v-2z" /><path fill="#E4EB17" d="m12 6h4v2h-4v-2zm-1 2h6v1h-6v-1z" /><path fill="#000" d="m13 5h1v1h-1v-1z" /><path fill="#0060C3" d="m12 4h3v1h-3v-1z" />',
		'<path fill="#794B11" d="m8 9h12v1h-12v-1zm-1-1h14v1h-14v-1zm-1-1h1v1h-1v-1zm15 0h1v1h-1v-1zm-12-3h10v3h-10v-3zm1-1h2v1h-2v-1zm6 0h2v1h-2v-1z" /><path fill="#502F05" d="m9 7h10v1h-10v-1z" />',
	   '<path fill="#3D2F1E" d="m7 9h14v1h-14v-1zm1-1h12v1h-12v-1zm3-2h6v1h-6v-1zm1-2h4v2h-4v-2zm1-1h2v1h-2v-1z" /><path fill="#000" d="m10 7h8v1h-8v-1z" />',
		'<path fill="#000" d="m13 10h6v1h-6v-1zm-3-1h3v1h-3v-1zm-1-3h1v2h-1v-2zm1-1h3v1h-3v-1zm3-1h2v1h-2v-1zm2 1h3v1h-3v-1zm3 1h1v2h-1v-2zm-1 2h1v1h-1v-1zm-2 0h1v1h-1v-1zm-2 0h1v1h-1v-1zm-2 0h1v1h-1v-1zm7 1h1v1h-1v-1z" /><path fill="#FFFFFF" d="m10 8h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1z" /><path fill="#26314A" d="m13 9h5v1h-5v-1zm-3-3h8v2h-8v-2zm3-1h2v1h-2v-1z" /><path fill="#FFD800" d="m13 6h2v1h-2v-1z" />',
	  '<path fill="#000" d="m10 8h1v3h-1v-3zm1-1h1v1h-1v-1zm6 1h1v3h-1v-3zm-1 0h1v1h-1v-1zm-4-1h4v1h-4v-1z" /><path fill="#4C4C4C" d="m11 8h5v3h-5v-3zm5 1h1v2h-1v-2z" /><path fill="#636363" d="m11 9h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m9 8h1v2h-1v-2zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm7 2h1v2h-1v-2zm-1-1h1v1h-1v-1zm-1-1h1v1h-1v-1zm-4-1h4v1h-4v-1z" /><path fill="#CA4E11" d="m10 8h8v2h-8v-2zm1-1h6v1h-6v-1zm1-1h4v1h-4v-1z" /><path fill="#933709" d="m10 8h8v1h-8v-1zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1z" />',
		'<path fill="#1637A4" d="m11 5h6v1h-6v-1zm6 1h1v2h-1v-2zm-1 2h1v1h-1v-1zm-3 1h3v1h-3v-1zm-2-1h2v1h-2v-1zm0-2h1v1h-1v-1zm-1 1h1v1h-1v-1zm-3 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1-1h1v1h-1v-1z" /><path fill="#142C7C" d="m8 10h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1z" /><path fill="#1A43C8" d="m12 6h5v1h-5v-1zm-1 1h6v1h-6v-1zm2 1h3v1h-3v-1zm-7 0h1v1h-1v-1zm2 0h1v1h-1v-1zm-1 1h1v3h-1v-3z" />',
		'<path fill="#000" d="m14 9h1v2h-1v-2zm-5-1h1v6h-1v-6zm1 0h8v1h-8v-1zm0-1h7v1h-7v-1zm1-1h6v1h-6v-1zm1-1h4v1h-4v-1zm-2 4h8v1h-8v-1z" /><path fill="#696969" d="m11 7h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m7 13h3v4h-3v-4zm1 4h2v2h-2v-2zm1 2h1v2h-1v-2zm-2 0h1v3h-1v-3zm1 2h1v1h-1v-1zm-3-8h1v5h-1v-5zm1 4h1v3h-1v-3zm0-5h1v1h-1v-1zm1-1h1v1h-1v-1zm1-3h1v3h-1v-3zm1 4h1v1h-1v-1zm1-1h1v1h-1v-1zm1-2h1v2h-1v-2zm1 0h6v1h-6v-1zm-3-2h2v1h-2v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h3v1h-3v-1zm3 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm-2 0h1v5h-1v-5zm1 1h1v3h-1v-3zm-2 4h1v1h-1v-1zm3-1h1v1h-1v-1zm1-3h1v3h-1v-3zm-2 4h1v1h-1v-1zm-1 1h1v1h-1v-1z" /><path fill="#808080" d="m8 19h1v2h-1v-2zm-1-2h1v2h-1v-2zm-1-4h1v4h-1v-4zm1-1h2v1h-2v-1zm1-1h2v1h-2v-1zm1-1h2v1h-2v-1zm0-2h2v2h-2v-2zm3-3h3v4h-3v-4zm-1 1h1v3h-1v-3zm4 0h1v3h-1v-3zm1 1h1v2h-1v-2zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v3h-1v-3zm-1 3h1v1h-1v-1zm-1 1h1v1h-1v-1z" /><path fill="#D3D3D3" d="m11 7h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#000" d="m14 9h1v2h-1v-2zm-2 0h1v1h-1v-1zm-2-2h6v2h-6v-2zm-1 3h3v1h-3v-1zm0-2h1v1h-1v-1zm2-2h8v1h-8v-1zm1-1h5v1h-5v-1zm5 2h2v2h-2v-2zm2 2h1v1h-1v-1zm0-4h1v2h-1v-2z" />',
		'<path fill="#000" d="m10 9h10v1h-10v-1zm3-1h1v1h-1v-1zm0-1h6v1h-6v-1zm6 1h1v2h-1v-2zm-9-1h1v3h-1v-3zm1-1h1v1h-1v-1zm6 0h1v1h-1v-1zm-5-1h5v1h-5v-1z" /><path fill="#515151" d="m11 7h2v2h-2v-2zm1-1h5v1h-5v-1zm2 2h5v1h-5v-1z" /><path fill="#353535" d="m11 7h1v1h-1v-1zm1-1h1v1h-1v-1z" />',
		'<path fill="#8119B7" d="m10 7h7v3h-7v-3zm1-1h6v1h-6v-1zm1-1h4v1h-4v-1zm5 4h4v1h-4v-1zm0-1h3v1h-3v-1z" /><path fill="#B261DC" d="m14 6h1v1h-1v-1zm1 1h1v1h-1v-1z" />',
		'<path fill="#000" d="m7 9h14v1h-14v-1zm1-1h12v1h-12v-1zm1-6h10v5h-10v-5zm1-1h8v1h-8v-1z" /><path fill="#DC1D1D" d="m9 7h10v1h-10v-1z" />',
		''];
	string[5] private sixthNames = ['Earring','Vape','Cigarette','Pipe','None'];
	string[5] private sixthLayers = [
		'<path fill="#FFD926" d="m9 5h1v1h-1v-1z"/>',
		'<path fill="#000" d="m24 18h6v1h-6v-1zm0 2h6v1h-6v-1zm6-1h1v1h-1v-1z" /><path fill="#595959" d="m24 19h5v1h-5v-1z" /><path fill="#0040FF" d="m29 19h1v1h-1v-1z" />',
		'<path fill="#000000" d="m24 18h6v1h-6v-1zm6 1h1v1h-1v-1zm-6 1h6v1h-6v-1z" /><path fill="#FFFFFF" d="m24 19h5v1h-5v-1z" /><path fill="#E7A600" d="m29 19h1v1h-1v-1z" /><path fill="#D7D1D1" d="m30 13h1v4h-1v-4z" />',
		'<path fill="#000" d="m22 20h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h1v1h-1v-1zm1 1h3v1h-3v-1zm3-1h1v1h-1v-1zm1-2h1v2h-1v-2zm-3 0h3v1h-3v-1zm-1 1h2v1h-2v-1zm-1-1h1v1h-1v-1zm-1-1h1v1h-1v-1z" /><path fill="#fff" fill-opacity=".4" d="m29 19h1v1h-1v-1zm0-2h1v1h-1v-1zm0-2h1v1h-1v-1zm-1-2h3v1h-3v-1zm1-1h1v1h-1v-1z" /><path fill="#855114" d="m25 22h1v1h-1v-1zm-1-1h1v1h-1v-1zm-1-1h1v1h-1v-1zm5 2h2v1h-2v-1zm-2 1h3v1h-3v-1z" />',
		''];

	struct LarvaObject {
		uint256 baseColor;
		uint256 layerThree;
		uint256 layerFour;
		uint256 layerFive;
		uint256 layerSix;
	}

	function randomLarvaLad(uint256 tokenId) internal view returns (LarvaObject memory) {
		
		LarvaObject memory larvaLad;

		larvaLad.baseColor = getBaseColor(tokenId);
		larvaLad.layerThree = getLayerThree(tokenId);
		larvaLad.layerFour = getLayerFour(tokenId);
		larvaLad.layerFive = getLayerFive(tokenId);
		larvaLad.layerSix = getLayerSix(tokenId);

		return larvaLad;
	}
	
	function getTraits(LarvaObject memory larvaLad) internal view returns (string memory) {
		
		string[20] memory parts;
		
		parts[0] = ', "attributes": [{"trait_type": "Type","value": "';
		if (larvaLad.layerThree == 3) {
			parts[1] = 'Zombie"}, {"trait_type": "Mouth","value": "Zombie"},'; 
		}
		if (larvaLad.layerThree == 4) {
			parts[2] = 'Alien"}, {"trait_type": "Mouth","value": "Alien"},'; 
		}
		if (larvaLad.layerThree == 5) {
			parts[3] = 'Ape"}, {"trait_type": "Mouth","value": "Ape"},'; 
		}
		if (larvaLad.layerThree < 3 || larvaLad.layerThree > 5) {
			parts[4] = 'Normal"}, {"trait_type": "Mouth","value": "';
			parts[5] = thirdNames[larvaLad.layerThree];
			parts[6] = '"},';
		}
		parts[7] = ' {"trait_type": "Eyewear","value": "';
		parts[8] = fourthNames[larvaLad.layerFour];
		parts[9] = '"}, {"trait_type": "Headwear","value": "';
		parts[10] = fifthNames[larvaLad.layerFive];
		parts[11] = '"}, {"trait_type": "Accessory","value": "';
		parts[12] = sixthNames[larvaLad.layerSix];
		parts[13] = '"}], ';
		
		string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7]));
					  output = string(abi.encodePacked(output, parts[8], parts[9], parts[10], parts[11], parts[12], parts[13]));
		return output;
	}

	function random(string memory input) internal pure returns (uint256) {
		return uint256(keccak256(abi.encodePacked(input)));
	}

	function getBaseColor(uint256 tokenId) internal pure returns (uint256) {
		uint256 rand = random(string(abi.encodePacked("BASE COLOR", toString(tokenId))));

		uint256 rn1 = rand % 79;
		uint256 bc = 0;

		if (rn1 >= 10 && rn1 < 20) { bc = 1; }
		if (rn1 >= 20 && rn1 < 30) { bc = 2; }
		if (rn1 >= 30 && rn1 < 40) { bc = 3; }
		if (rn1 >= 40 && rn1 < 50) { bc = 4; }
		if (rn1 >= 50 && rn1 < 60) { bc = 5; }
		if (rn1 >= 60 && rn1 < 70) { bc = 6; }
		if (rn1 >= 70) { bc = 7; }

		return bc;
	}

	function getLayerThree(uint256 tokenId) internal pure returns (uint256) {
		uint256 rand = random(string(abi.encodePacked("LAYER THREE", toString(tokenId))));

		uint256 rn3 = rand % 170;
		uint256 l3 = 0;

		if (rn3 >= 46 && rn3 < 64) { l3 = 1; }
		if (rn3 >= 64 && rn3 < 81) { l3 = 2; }
		if (rn3 >= 81 && rn3 < 85) { l3 = 3; }
		if (rn3 == 85) { l3 = 4; }
		if (rn3 >= 86 && rn3 < 88) { l3 = 5; }
		if (rn3 >= 88) { l3 = 6; }
		
		return l3;
	}

	function getLayerFour(uint256 tokenId) internal pure returns (uint256) {
		uint256 rand = random(string(abi.encodePacked("LAYER FOUR", toString(tokenId))));

		uint256 rn4 = rand % 500;
		uint256 l4 = 0;

		if (rn4 >= 41 && rn4 < 81) { l4 = 1; }
		if (rn4 >= 81 && rn4 < 121) { l4 = 2; }
		if (rn4 >= 121 && rn4 < 161) { l4 = 3; }
		if (rn4 >= 161 && rn4 < 201) { l4 = 4; }
		if (rn4 >= 201 && rn4 < 261) { l4 = 5; }
		if (rn4 >= 261 && rn4 < 281) { l4 = 6; }
		if (rn4 >= 281) { l4 = 7; }
		
		return l4;
	}

	function getLayerFive(uint256 tokenId) internal pure returns (uint256) {
		uint256 rand = random(string(abi.encodePacked("LAYER FIVE", toString(tokenId))));

		uint256 rn5 = rand % 240;
		uint256 l5 = 0;

		if (rn5 >= 10 && rn5 < 20) { l5 = 1; }
		if (rn5 >= 20 && rn5 < 30) { l5 = 2; }
		if (rn5 >= 30 && rn5 < 40) { l5 = 3; }
		if (rn5 >= 40 && rn5 < 50) { l5 = 4; }
		if (rn5 >= 50 && rn5 < 60) { l5 = 5; }
		if (rn5 >= 60 && rn5 < 70) { l5 = 6; }
		if (rn5 >= 70 && rn5 < 80) { l5 = 7; }
		if (rn5 >= 80 && rn5 < 90) { l5 = 8; }
		if (rn5 >= 90 && rn5 < 100) { l5 = 9; }
		if (rn5 >= 100 && rn5 < 110) { l5 = 10; }
		if (rn5 >= 110 && rn5 < 120) { l5 = 11; }
		if (rn5 >= 120 && rn5 < 130) { l5 = 12; }
		if (rn5 >= 130) { l5 = 13; }
		
		return l5;
	}

	function getLayerSix(uint256 tokenId) internal pure returns (uint256) {
		uint256 rand = random(string(abi.encodePacked("LAYER SIX", toString(tokenId))));

		uint256 rn6 = rand % 120;
		uint256 l6 = 0;

		if (rn6 >= 10 && rn6 < 20) { l6 = 1; }
		if (rn6 >= 20 && rn6 < 30) { l6 = 2; }
		if (rn6 >= 30 && rn6 < 40) { l6 = 3; }
		if (rn6 >= 40) { l6 = 4; }
		
		return l6;
	}

	function getSVG(LarvaObject memory larvaLad) internal view returns (string memory) {
		string[9] memory parts;

		parts[0] = '<svg id="x" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 32 32"><path fill="#638596" d="M0 0h32v32H0z"/>';
		parts[1] = '<path fill="';
		parts[2] = baseColors[larvaLad.baseColor];
		parts[3] = '" d="m3 27h13v1h-13v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm1-1h13v1h-13v-1zm1-1h12v1h-12v-1zm2-1h10v1h-10v-1zm2-1h8v1h-8v-1zm0-1h4v1h-4v-1zm0-1h3v1h-3v-1zm0-3h2v3h-2v-3zm0-2h5v2h-5v-2zm3 2h2v3h-2v-3zm1 3h6v1h-6v-1zm1-2h9v2h-9v-2zm4-1h2v1h-2v-1zm0 4h4v1h-4v-1zm4-1h1v1h-1v-1zm1-1h1v1h-1v-1zm0-1h2v1h-2v-1zm-14-8h6v5h-6v-5zm5 5h1v1h-1v-1zm-6-11h1v4h-1v-4zm1 4h1v2h-1v-2zm5-3h1v5h-1v-5z"/><path fill="#000" d="m2 27h1v2h-1v-2zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h1v1h-1v-1zm1-1h2v1h-2v-1zm2-1h2v1h-2v-1zm1-14h1v14h-1v-14zm-1-5h1v5h-1v-5zm1 0h1v1h-1v-1zm1 1h1v4h-1v-4zm1 4h1v2h-1v-2zm1 1h3v1h-3v-1zm2-6h1v6h-1v-6zm1 0h1v2h-1v-2zm1 1h1v12h-1v-12zm-14 25h14v1h-14v-1zm13-1h1v1h-1v-1zm1-2h1v2h-1v-2zm1 0h1v1h-1v-1zm1-5h1v5h-1v-5zm-4 0h4v1h-4v-1zm-1-1h1v1h-1v-1zm-1-3h1v3h-1v-3zm3-1h1v2h-1v-2zm1 1h3v1h-3v-1zm2-1h3v1h-3v-1zm3-1h3v3h-3v-3zm3 2h3v1h-3v-1zm2 1h1v2h-1v-2zm-1 1h1v2h-1v-2zm-1 1h1v2h-1v-2zm-1 1h1v2h-1v-2zm-4 1h4v1h-4v-1zm1-2h3v1h-3v-1zm-9-6h1v1h-1v-1zm3 0h1v1h-1v-1z" /><path fill="#000" fill-opacity=".2" d="m13 13h1v1h-1v-1zm3 0h1v1h-1v-1z"/><path fill="#000" fill-opacity=".4" d="m3 27h1v1h-1v-1zm2-2h1v3h-1v-3zm2-2h1v5h-1v-5zm2-1h1v6h-1v-6zm1 5h1v1h-1v-1zm1-3h8v1h-8v-1zm1 1h5v1h-5v-1zm0-13h2v1h-2v-1zm3 0h2v1h-2v-1z"/>';
		parts[4] = thirdLayers[larvaLad.layerThree];
		parts[5] = fourthLayers[larvaLad.layerFour];
		parts[6] = fifthLayers[larvaLad.layerFive];
		parts[7] = sixthLayers[larvaLad.layerSix];
		parts[8] = '<style>#x{shape-rendering: crispedges;}</style></svg>';

		string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8]));

		return output;
	}

	function tokenURI(uint256 tokenId) override public view returns (string memory) {
		LarvaObject memory larvaLad = randomLarvaLad(tokenId);
		string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Larva Wolf #', toString(tokenId), '", "description": "Larva Wolves are a FREE TO MINT collection brought to you by the founders of Wolf Club 86. They are a derivative of Larva Lads. The artwork and metadata are fully on-chain and are randomly generated"', getTraits(larvaLad), '"image": "data:image/svg+xml;base64,', Base64.encode(bytes(getSVG(larvaLad))), '"}'))));
		json = string(abi.encodePacked('data:application/json;base64,', json));
		return json;
	}

	function mint(address destination, uint256 amountOfTokens) private {
		require(totalSupply() < maxSupply, "All tokens have been minted");
		require(totalSupply() + amountOfTokens <= maxSupply, "Minting would exceed max supply");
		require(amountOfTokens <= maxMint, "Cannot purchase this many tokens in a transaction");
		require(amountOfTokens > 0, "Must mint at least one token");
		require(price * amountOfTokens == msg.value, "ETH amount is incorrect");

		for (uint256 i = 0; i < amountOfTokens; i++) {
			uint256 tokenId = numTokensMinted + 1;
			_safeMint(destination, tokenId);
			numTokensMinted += 1;
		}
	}

	function mintForSelf(uint256 amountOfTokens) public payable virtual {
		mint(_msgSender(),amountOfTokens);
	}

	function mintForFriend(address walletAddress, uint256 amountOfTokens) public payable virtual {
		mint(walletAddress,amountOfTokens);
	}

	function setPrice(uint256 newPrice) public onlyOwner {
		price = newPrice;
	}

	function setMaxMint(uint256 newMaxMint) public onlyOwner {
		maxMint = newMaxMint;
	}

	function withdrawAll() public payable onlyOwner {
		require(payable(_msgSender()).send(address(this).balance));
	}

	function toString(uint256 value) internal pure returns (string memory) {

		if (value == 0) {
			return "0";
		}
		uint256 temp = value;
		uint256 digits;
		while (temp != 0) {
			digits++;
			temp /= 10;
		}
		bytes memory buffer = new bytes(digits);
		while (value != 0) {
			digits -= 1;
			buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
			value /= 10;
		}
		return string(buffer);
	}
	
	constructor() ERC721("Larva Wolf", "LARVAWOLF") Ownable() {}
}

library Base64 {
	bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

	function encode(bytes memory data) internal pure returns (string memory) {
		uint256 len = data.length;
		if (len == 0) return "";

		uint256 encodedLen = 4 * ((len + 2) / 3);

		bytes memory result = new bytes(encodedLen + 32);

		bytes memory table = TABLE;

		assembly {
			let tablePtr := add(table, 1)
			let resultPtr := add(result, 32)

			for {
				let i := 0
			} lt(i, len) {

			} {
				i := add(i, 3)
				let input := and(mload(add(data, i)), 0xffffff)

				let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
				out := shl(8, out)
				out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
				out := shl(8, out)
				out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
				out := shl(8, out)
				out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
				out := shl(224, out)

				mstore(resultPtr, out)

				resultPtr := add(resultPtr, 4)
			}

			switch mod(len, 3)
			case 1 {
				mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
			}
			case 2 {
				mstore(sub(resultPtr, 1), shl(248, 0x3d))
			}

			mstore(result, encodedLen)
		}

		return string(result);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","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":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"uint256","name":"amountOfTokens","type":"uint256"}],"name":"mintForFriend","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfTokens","type":"uint256"}],"name":"mintForSelf","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052611388600c5566b1a2bc2ec50000600d55600a600e556040518061010001604052806040518060400160405280600781526020017f234145384236310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234442423138310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234538414139360000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234646433243320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234545434641300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234339434441460000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234435433645310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f234541443944390000000000000000000000000000000000000000000000000081525081525060109060086200020e92919062001090565b506040518060e001604052806040518060400160405280600581526020017f536d696c6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f476f6c64546f6f7468000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f48616e646c65626172730000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f5a6f6d626965000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f416c69656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f50756e6b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4e6f726d616c00000000000000000000000000000000000000000000000000008152508152506018906007620003c7929190620010ea565b506040518060e0016040528060405180606001604052806029815260200162007e2a6029913981526020016040518060600160405280602c815260200162008da8602c913981526020016040518060c001604052806088815260200162007f6e6088913981526020016040518061032001604052806102f38152602001620080986102f3913981526020016040518061030001604052806102d98152602001620078036102d991398152602001604051806102c001604052806102838152602001620084a96102839139815260200160405180602001604052806000815250815250601f906007620004bb929190620010ea565b506040518061010001604052806040518060400160405280600a81526020017f334420476c61737365730000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f565200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f44697a7a7920457965730000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f457965205061746368000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f436c61737369632053686164657300000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f526567756c61722053686164657300000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4379636c6f70000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e65000000000000000000000000000000000000000000000000000000008152508152506026906008620006b092919062001090565b5060405180610100016040528060405180610100016040528060c481526020016200743460c49139815260200160405180610140016040528061011e81526020016200838b61011e913981526020016040518060e0016040528060b4815260200162008fde60b4913981526020016040518060600160405280603981526020016200899260399139815260200160405180608001604052806048815260200162008bbb6048913981526020016040518060800160405280604881526020016200714560489139815260200160405180610180016040528061014d8152602001620089cb61014d9139815260200160405180602001604052806000815250815250602e906008620007c292919062001090565b50604051806101c001604052806040518060400160405280600681526020017f4265616e6965000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f436f77626f79204861740000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4665646f7261000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f506f6c696365204361700000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f446f2d726167000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4b6e69747465642043617000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f42616e64616e610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4672756d7079204861697200000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486f6f640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4d6573737920486169720000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f43617020466f727761726400000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f436170000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f546f70204861740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e6500000000000000000000000000000000000000000000000000000000815250815250603690600e62000b1992919062001144565b50604051806101c0016040528060405180610160016040528061013481526020016200724d610134913981526020016040518060e0016040528060bd81526020016200872c60bd913981526020016040518060c001604052806094815260200162009092609491398152602001604051806101e001604052806101a5815260200162008c036101a59139815260200160405180610100016040528060dd8152602001620074f860dd91398152602001604051806101600160405280610137815260200162008dd461013791398152602001604051806101a0016040528061017c8152602001620075ff61017c913981526020016040518060e0016040528060c081526020016200718d60c09139815260200160405180610380016040528061034e815260200162007adc61034e913981526020016040518060e0016040528060b381526020016200738160b39139815260200160405180610140016040528061011b815260200162007e5361011b913981526020016040518060e0016040528060a3815260200162008b1860a3913981526020016040518060c00160405280608881526020016200777b60889139815260200160405180602001604052806000815250815250604490600e62000cf192919062001144565b506040518060a001604052806040518060400160405280600781526020017f45617272696e670000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f566170650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f436967617265747465000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f506970650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4e6f6e6500000000000000000000000000000000000000000000000000000000815250815250605290600562000e349291906200119e565b506040518060a001604052806040518060600160405280602a8152602001620075d5602a913981526020016040518060e0016040528060a2815260200162007ff660a29139815260200160405180610100016040528060d3815260200162008f0b60d391398152602001604051806101e001604052806101a98152602001620087e96101a99139815260200160405180602001604052806000815250815250605790600562000ee59291906200119e565b5034801562000ef357600080fd5b506040518060400160405280600a81526020017f4c6172766120576f6c66000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4c41525641574f4c460000000000000000000000000000000000000000000000815250816000908051906020019062000f78929190620011f8565b50806001908051906020019062000f91929190620011f8565b5050506001600a8190555062000fbc62000fb062000fc260201b60201c565b62000fca60201b60201c565b6200137b565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8260088101928215620010d7579160200282015b82811115620010d6578251829080519060200190620010c5929190620011f8565b5091602001919060010190620010a4565b5b509050620010e6919062001289565b5090565b826007810192821562001131579160200282015b82811115620011305782518290805190602001906200111f929190620011f8565b5091602001919060010190620010fe565b5b50905062001140919062001289565b5090565b82600e81019282156200118b579160200282015b828111156200118a57825182908051906020019062001179929190620011f8565b509160200191906001019062001158565b5b5090506200119a919062001289565b5090565b8260058101928215620011e5579160200282015b82811115620011e4578251829080519060200190620011d3929190620011f8565b5091602001919060010190620011b2565b5b509050620011f4919062001289565b5090565b828054620012069062001316565b90600052602060002090601f0160209004810192826200122a576000855562001276565b82601f106200124557805160ff191683800117855562001276565b8280016001018555821562001276579182015b828111156200127557825182559160200191906001019062001258565b5b509050620012859190620012b1565b5090565b5b80821115620012ad5760008181620012a39190620012d0565b506001016200128a565b5090565b5b80821115620012cc576000816000905550600101620012b2565b5090565b508054620012de9062001316565b6000825580601f10620012f2575062001313565b601f016020900490600052602060002090810190620013129190620012b1565b5b50565b600060028204905060018216806200132f57607f821691505b602082108114156200134657620013456200134c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615dba806200138b6000396000f3fe6080604052600436106101b75760003560e01c80637501f741116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146105cf578063d5abeb011461060c578063e985e9c514610637578063f2fde38b14610674576101b7565b8063a22cb46514610561578063b88d4fde1461058a578063c49b3d54146105b3576101b7565b806391b7f5ed116100c657806391b7f5ed146104c657806395d89b41146104ef578063a035b1fe1461051a578063a108f52914610545576101b7565b80637501f74114610466578063853828b6146104915780638da5cb5b1461049b576101b7565b80634230baee11610159578063547520fe11610133578063547520fe146103ac5780636352211e146103d557806370a0823114610412578063715018a61461044f576101b7565b80634230baee1461031b57806342842e0e146103465780634f6ccce71461036f576101b7565b8063095ea7b311610195578063095ea7b31461026157806318160ddd1461028a57806323b872dd146102b55780632f745c59146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063081812fc14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613d5e565b61069d565b6040516101f09190614612565b60405180910390f35b34801561020557600080fd5b5061020e610717565b60405161021b919061462d565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190613db8565b6107a9565b60405161025891906145ab565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613d1e565b61082e565b005b34801561029657600080fd5b5061029f610946565b6040516102ac919061490f565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190613c08565b610953565b005b3480156102ea57600080fd5b5061030560048036038101906103009190613d1e565b6109b3565b604051610312919061490f565b60405180910390f35b34801561032757600080fd5b50610330610a58565b60405161033d919061490f565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613c08565b610a5e565b005b34801561037b57600080fd5b5061039660048036038101906103919190613db8565b610a7e565b6040516103a3919061490f565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613db8565b610aef565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613db8565b610b75565b60405161040991906145ab565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190613b9b565b610c27565b604051610446919061490f565b60405180910390f35b34801561045b57600080fd5b50610464610cdf565b005b34801561047257600080fd5b5061047b610d67565b604051610488919061490f565b60405180910390f35b610499610d6d565b005b3480156104a757600080fd5b506104b0610e30565b6040516104bd91906145ab565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e89190613db8565b610e5a565b005b3480156104fb57600080fd5b50610504610ee0565b604051610511919061462d565b60405180910390f35b34801561052657600080fd5b5061052f610f72565b60405161053c919061490f565b60405180910390f35b61055f600480360381019061055a9190613d1e565b610f78565b005b34801561056d57600080fd5b5061058860048036038101906105839190613cde565b610f86565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613c5b565b611107565b005b6105cd60048036038101906105c89190613db8565b611169565b005b3480156105db57600080fd5b506105f660048036038101906105f19190613db8565b61117d565b604051610603919061462d565b60405180910390f35b34801561061857600080fd5b50610621611208565b60405161062e919061490f565b60405180910390f35b34801561064357600080fd5b5061065e60048036038101906106599190613bc8565b61120e565b60405161066b9190614612565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190613b9b565b6112a2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610710575061070f8261139a565b5b9050919050565b60606000805461072690614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461075290614b8e565b801561079f5780601f106107745761010080835404028352916020019161079f565b820191906000526020600020905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b60006107b48261147c565b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea9061480f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083982610b75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a19061488f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c96114e8565b73ffffffffffffffffffffffffffffffffffffffff1614806108f857506108f7816108f26114e8565b61120e565b5b610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092e9061472f565b60405180910390fd5b61094183836114f0565b505050565b6000600880549050905090565b61096461095e6114e8565b826115a9565b6109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a906148af565b60405180910390fd5b6109ae838383611687565b505050565b60006109be83610c27565b82106109ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f69061464f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600f5481565b610a7983838360405180602001604052806000815250611107565b505050565b6000610a88610946565b8210610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906148cf565b60405180910390fd5b60088281548110610add57610adc614d27565b5b90600052602060002001549050919050565b610af76114e8565b73ffffffffffffffffffffffffffffffffffffffff16610b15610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b629061482f565b60405180910390fd5b80600e8190555050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c159061476f565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f9061474f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ce76114e8565b73ffffffffffffffffffffffffffffffffffffffff16610d05610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d529061482f565b60405180910390fd5b610d6560006118e3565b565b600e5481565b610d756114e8565b73ffffffffffffffffffffffffffffffffffffffff16610d93610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de09061482f565b60405180910390fd5b610df16114e8565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e2e57600080fd5b565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e626114e8565b73ffffffffffffffffffffffffffffffffffffffff16610e80610e30565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd9061482f565b60405180910390fd5b80600d8190555050565b606060018054610eef90614b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1b90614b8e565b8015610f685780601f10610f3d57610100808354040283529160200191610f68565b820191906000526020600020905b815481529060010190602001808311610f4b57829003601f168201915b5050505050905090565b600d5481565b610f8282826119a9565b5050565b610f8e6114e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff3906146ef565b60405180910390fd5b80600560006110096114e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110b66114e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110fb9190614612565b60405180910390a35050565b6111186111126114e8565b836115a9565b611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906148af565b60405180910390fd5b61116384848484611b7d565b50505050565b61117a6111746114e8565b826119a9565b50565b6060600061118a83611bd9565b905060006111da61119a85611c4c565b6111a384611dad565b6111b46111af866124fc565b612ac6565b6040516020016111c69392919061450a565b604051602081830303815290604052612ac6565b9050806040516020016111ed9190614567565b60405160208183030381529060405290508092505050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112aa6114e8565b73ffffffffffffffffffffffffffffffffffffffff166112c8610e30565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113159061482f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061468f565b60405180910390fd5b611397816118e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061146557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611475575061147482612c5e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661156383610b75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115b48261147c565b6115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea9061470f565b60405180910390fd5b60006115fe83610b75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061166d57508373ffffffffffffffffffffffffffffffffffffffff16611655846107a9565b73ffffffffffffffffffffffffffffffffffffffff16145b8061167e575061167d818561120e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116a782610b75565b73ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f49061484f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561176d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611764906146cf565b60405180910390fd5b611778838383612cc8565b6117836000826114f0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117d39190614aa4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461182a91906149c3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c546119b4610946565b106119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb906148ef565b60405180910390fd5b600c5481611a00610946565b611a0a91906149c3565b1115611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a429061478f565b60405180910390fd5b600e54811115611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a87906147af565b60405180910390fd5b60008111611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca9061486f565b60405180910390fd5b3481600d54611ae29190614a4a565b14611b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b19906147ef565b60405180910390fd5b60005b81811015611b785760006001600f54611b3e91906149c3565b9050611b4a8482612ddc565b6001600f6000828254611b5d91906149c3565b92505081905550508080611b7090614bf1565b915050611b25565b505050565b611b88848484611687565b611b9484848484612dfa565b611bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bca9061466f565b60405180910390fd5b50505050565b611be1613a43565b611be9613a43565b611bf283612f91565b816000018181525050611c0483613093565b816020018181525050611c168361316d565b816040018181525050611c2883613274565b816060018181525050611c3a83613418565b81608001818152505080915050919050565b60606000821415611c94576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611da8565b600082905060005b60008214611cc6578080611caf90614bf1565b915050600a82611cbf9190614a19565b9150611c9c565b60008167ffffffffffffffff811115611ce257611ce1614d56565b5b6040519080825280601f01601f191660200182016040528015611d145781602001600182028036833780820191505090505b5090505b60008514611da157600182611d2d9190614aa4565b9150600a85611d3c9190614c3a565b6030611d4891906149c3565b60f81b818381518110611d5e57611d5d614d27565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611d9a9190614a19565b9450611d18565b8093505050505b919050565b6060611db7613a72565b60405180606001604052806031815260200161573b6031913981600060148110611de457611de3614d27565b5b6020020181905250600383602001511415611e2f576040518060600160405280603481526020016156926034913981600160148110611e2657611e25614d27565b5b60200201819052505b600483602001511415611e72576040518060600160405280603281526020016157fb6032913981600260148110611e6957611e68614d27565b5b60200201819052505b600583602001511415611eb5576040518060600160405280602e8152602001615880602e913981600360148110611eac57611eab614d27565b5b60200201819052505b600383602001511080611ecc575060058360200151115b15612017576040518060600160405280602b8152602001615855602b913981600460148110611efe57611efd614d27565b5b60200201819052506018836020015160078110611f1e57611f1d614d27565b5b018054611f2a90614b8e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5690614b8e565b8015611fa35780601f10611f7857610100808354040283529160200191611fa3565b820191906000526020600020905b815481529060010190602001808311611f8657829003601f168201915b505050505081600560148110611fbc57611fbb614d27565b5b60200201819052506040518060400160405280600381526020017f227d2c00000000000000000000000000000000000000000000000000000000008152508160066014811061200e5761200d614d27565b5b60200201819052505b60405180606001604052806024815260200161566e602491398160076014811061204457612043614d27565b5b6020020181905250602683604001516008811061206457612063614d27565b5b01805461207090614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461209c90614b8e565b80156120e95780601f106120be576101008083540402835291602001916120e9565b820191906000526020600020905b8154815290600101906020018083116120cc57829003601f168201915b50505050508160086014811061210257612101614d27565b5b602002018190525060405180606001604052806028815260200161582d602891398160096014811061213757612136614d27565b5b602002018190525060368360600151600e811061215757612156614d27565b5b01805461216390614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461218f90614b8e565b80156121dc5780601f106121b1576101008083540402835291602001916121dc565b820191906000526020600020905b8154815290600101906020018083116121bf57829003601f168201915b505050505081600a601481106121f5576121f4614d27565b5b60200201819052506040518060600160405280602981526020016156456029913981600b6014811061222a57612229614d27565b5b6020020181905250605283608001516005811061224a57612249614d27565b5b01805461225690614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461228290614b8e565b80156122cf5780601f106122a4576101008083540402835291602001916122cf565b820191906000526020600020905b8154815290600101906020018083116122b257829003601f168201915b505050505081600c601481106122e8576122e7614d27565b5b60200201819052506040518060400160405280600581526020017f227d5d2c2000000000000000000000000000000000000000000000000000000081525081600d6014811061233a57612339614d27565b5b602002018190525060008160006014811061235857612357614d27565b5b60200201518260016014811061237157612370614d27565b5b60200201518360026014811061238a57612389614d27565b5b6020020151846003601481106123a3576123a2614d27565b5b6020020151856004601481106123bc576123bb614d27565b5b6020020151866005601481106123d5576123d4614d27565b5b6020020151876006601481106123ee576123ed614d27565b5b60200201518860076014811061240757612406614d27565b5b6020020151604051602001612423989796959493929190614391565b6040516020818303038152906040529050808260086014811061244957612448614d27565b5b60200201518360096014811061246257612461614d27565b5b602002015184600a6014811061247b5761247a614d27565b5b602002015185600b6014811061249457612493614d27565b5b602002015186600c601481106124ad576124ac614d27565b5b602002015187600d601481106124c6576124c5614d27565b5b60200201516040516020016124e1979695949392919061432c565b60405160208183030381529060405290508092505050919050565b6060612506613a9a565b6040518060c00160405280608f815260200161576c608f91398160006009811061253357612532614d27565b5b60200201819052506040518060400160405280600c81526020017f3c706174682066696c6c3d2200000000000000000000000000000000000000008152508160016009811061258557612584614d27565b5b602002018190525060108360000151600881106125a5576125a4614d27565b5b0180546125b190614b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546125dd90614b8e565b801561262a5780601f106125ff5761010080835404028352916020019161262a565b820191906000526020600020905b81548152906001019060200180831161260d57829003601f168201915b50505050508160026009811061264357612642614d27565b5b60200201819052506040518061050001604052806104d781526020016158ae6104d791398160036009811061267b5761267a614d27565b5b6020020181905250601f83602001516007811061269b5761269a614d27565b5b0180546126a790614b8e565b80601f01602080910402602001604051908101604052809291908181526020018280546126d390614b8e565b80156127205780601f106126f557610100808354040283529160200191612720565b820191906000526020600020905b81548152906001019060200180831161270357829003601f168201915b50505050508160046009811061273957612738614d27565b5b6020020181905250602e83604001516008811061275957612758614d27565b5b01805461276590614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461279190614b8e565b80156127de5780601f106127b3576101008083540402835291602001916127de565b820191906000526020600020905b8154815290600101906020018083116127c157829003601f168201915b5050505050816005600981106127f7576127f6614d27565b5b602002018190525060448360600151600e811061281757612816614d27565b5b01805461282390614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461284f90614b8e565b801561289c5780601f106128715761010080835404028352916020019161289c565b820191906000526020600020905b81548152906001019060200180831161287f57829003601f168201915b5050505050816006600981106128b5576128b4614d27565b5b602002018190525060578360800151600581106128d5576128d4614d27565b5b0180546128e190614b8e565b80601f016020809104026020016040519081016040528092919081815260200182805461290d90614b8e565b801561295a5780601f1061292f5761010080835404028352916020019161295a565b820191906000526020600020905b81548152906001019060200180831161293d57829003601f168201915b50505050508160076009811061297357612972614d27565b5b60200201819052506040518060600160405280603581526020016156c660359139816008600981106129a8576129a7614d27565b5b60200201819052506000816000600981106129c6576129c5614d27565b5b6020020151826001600981106129df576129de614d27565b5b6020020151836002600981106129f8576129f7614d27565b5b602002015184600360098110612a1157612a10614d27565b5b602002015185600460098110612a2a57612a29614d27565b5b602002015186600560098110612a4357612a42614d27565b5b602002015187600660098110612a5c57612a5b614d27565b5b602002015188600760098110612a7557612a74614d27565b5b602002015189600860098110612a8e57612a8d614d27565b5b6020020151604051602001612aab99989796959493929190614403565b60405160208183030381529060405290508092505050919050565b60606000825190506000811415612aef5760405180602001604052806000815250915050612c59565b60006003600283612b0091906149c3565b612b0a9190614a19565b6004612b169190614a4a565b90506000602082612b2791906149c3565b67ffffffffffffffff811115612b4057612b3f614d56565b5b6040519080825280601f01601f191660200182016040528015612b725781602001600182028036833780820191505090505b50905060006040518060600160405280604081526020016156fb604091399050600181016020830160005b86811015612c165760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612b9d565b506003860660018114612c305760028114612c4057612c4b565b613d3d60f01b6002830352612c4b565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612cd38383836134c9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d1657612d11816134ce565b612d55565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5457612d538382613517565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9857612d9381613684565b612dd7565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612dd657612dd58282613755565b5b5b505050565b612df68282604051806020016040528060008152506137d4565b5050565b6000612e1b8473ffffffffffffffffffffffffffffffffffffffff1661382f565b15612f84578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e446114e8565b8786866040518563ffffffff1660e01b8152600401612e6694939291906145c6565b602060405180830381600087803b158015612e8057600080fd5b505af1925050508015612eb157506040513d601f19601f82011682018060405250810190612eae9190613d8b565b60015b612f34573d8060008114612ee1576040519150601f19603f3d011682016040523d82523d6000602084013e612ee6565b606091505b50600081511415612f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f239061466f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f89565b600190505b949350505050565b600080612fc4612fa084611c4c565b604051602001612fb091906144e8565b604051602081830303815290604052613842565b90506000604f82612fd59190614c3a565b90506000600a8210158015612fea5750601482105b15612ff457600190505b601482101580156130055750601e82105b1561300f57600290505b601e82101580156130205750602882105b1561302a57600390505b6028821015801561303b5750603282105b1561304557600490505b603282101580156130565750603c82105b1561306057600590505b603c82101580156130715750604682105b1561307b57600690505b6046821061308857600790505b809350505050919050565b6000806130c66130a284611c4c565b6040516020016130b29190614482565b604051602081830303815290604052613842565b9050600060aa826130d79190614c3a565b90506000602e82101580156130ec5750604082105b156130f657600190505b604082101580156131075750605182105b1561311157600290505b605182101580156131225750605582105b1561312c57600390505b605582141561313a57600490505b6056821015801561314b5750605882105b1561315557600590505b6058821061316257600690505b809350505050919050565b6000806131a061317c84611c4c565b60405160200161318c9190614589565b604051602081830303815290604052613842565b905060006101f4826131b29190614c3a565b90506000602982101580156131c75750605182105b156131d157600190505b605182101580156131e25750607982105b156131ec57600290505b607982101580156131fd575060a182105b1561320757600390505b60a18210158015613218575060c982105b1561322257600490505b60c98210158015613234575061010582105b1561323e57600590505b6101058210158015613251575061011982105b1561325b57600690505b610119821061326957600790505b809350505050919050565b6000806132a761328384611c4c565b60405160200161329391906144a4565b604051602081830303815290604052613842565b9050600060f0826132b89190614c3a565b90506000600a82101580156132cd5750601482105b156132d757600190505b601482101580156132e85750601e82105b156132f257600290505b601e82101580156133035750602882105b1561330d57600390505b6028821015801561331e5750603282105b1561332857600490505b603282101580156133395750603c82105b1561334357600590505b603c82101580156133545750604682105b1561335e57600690505b6046821015801561336f5750605082105b1561337957600790505b6050821015801561338a5750605a82105b1561339457600890505b605a82101580156133a55750606482105b156133af57600990505b606482101580156133c05750606e82105b156133ca57600a90505b606e82101580156133db5750607882105b156133e557600b90505b607882101580156133f65750608282105b1561340057600c90505b6082821061340d57600d90505b809350505050919050565b60008061344b61342784611c4c565b60405160200161343791906144c6565b604051602081830303815290604052613842565b9050600060788261345c9190614c3a565b90506000600a82101580156134715750601482105b1561347b57600190505b6014821015801561348c5750601e82105b1561349657600290505b601e82101580156134a75750602882105b156134b157600390505b602882106134be57600490505b809350505050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161352484610c27565b61352e9190614aa4565b9050600060076000848152602001908152602001600020549050818114613613576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136989190614aa4565b90506000600960008481526020019081526020016000205490506000600883815481106136c8576136c7614d27565b5b9060005260206000200154905080600883815481106136ea576136e9614d27565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061373957613738614cf8565b5b6001900381819060005260206000200160009055905550505050565b600061376083610c27565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6137de8383613875565b6137eb6000848484612dfa565b61382a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138219061466f565b60405180910390fd5b505050565b600080823b905060008111915050919050565b6000816040516020016138559190614315565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dc906147cf565b60405180910390fd5b6138ee8161147c565b1561392e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613925906146af565b60405180910390fd5b61393a60008383612cc8565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461398a91906149c3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518061028001604052806014905b6060815260200190600190039081613a825790505090565b6040518061012001604052806009905b6060815260200190600190039081613aaa5790505090565b6000613ad5613ad08461494f565b61492a565b905082815260208101848484011115613af157613af0614d8a565b5b613afc848285614b4c565b509392505050565b600081359050613b13816155e8565b92915050565b600081359050613b28816155ff565b92915050565b600081359050613b3d81615616565b92915050565b600081519050613b5281615616565b92915050565b600082601f830112613b6d57613b6c614d85565b5b8135613b7d848260208601613ac2565b91505092915050565b600081359050613b958161562d565b92915050565b600060208284031215613bb157613bb0614d94565b5b6000613bbf84828501613b04565b91505092915050565b60008060408385031215613bdf57613bde614d94565b5b6000613bed85828601613b04565b9250506020613bfe85828601613b04565b9150509250929050565b600080600060608486031215613c2157613c20614d94565b5b6000613c2f86828701613b04565b9350506020613c4086828701613b04565b9250506040613c5186828701613b86565b9150509250925092565b60008060008060808587031215613c7557613c74614d94565b5b6000613c8387828801613b04565b9450506020613c9487828801613b04565b9350506040613ca587828801613b86565b925050606085013567ffffffffffffffff811115613cc657613cc5614d8f565b5b613cd287828801613b58565b91505092959194509250565b60008060408385031215613cf557613cf4614d94565b5b6000613d0385828601613b04565b9250506020613d1485828601613b19565b9150509250929050565b60008060408385031215613d3557613d34614d94565b5b6000613d4385828601613b04565b9250506020613d5485828601613b86565b9150509250929050565b600060208284031215613d7457613d73614d94565b5b6000613d8284828501613b2e565b91505092915050565b600060208284031215613da157613da0614d94565b5b6000613daf84828501613b43565b91505092915050565b600060208284031215613dce57613dcd614d94565b5b6000613ddc84828501613b86565b91505092915050565b613dee81614ad8565b82525050565b613dfd81614aea565b82525050565b6000613e0e82614980565b613e188185614996565b9350613e28818560208601614b5b565b613e3181614d99565b840191505092915050565b6000613e478261498b565b613e5181856149a7565b9350613e61818560208601614b5b565b613e6a81614d99565b840191505092915050565b6000613e808261498b565b613e8a81856149b8565b9350613e9a818560208601614b5b565b80840191505092915050565b6000613eb3602b836149a7565b9150613ebe82614daa565b604082019050919050565b6000613ed66032836149a7565b9150613ee182614df9565b604082019050919050565b6000613ef96026836149a7565b9150613f0482614e48565b604082019050919050565b6000613f1c600b836149b8565b9150613f2782614e97565b600b82019050919050565b6000613f3f600a836149b8565b9150613f4a82614ec0565b600a82019050919050565b6000613f62601c836149a7565b9150613f6d82614ee9565b602082019050919050565b6000613f8560da836149b8565b9150613f9082614f12565b60da82019050919050565b6000613fa86009836149b8565b9150613fb38261501f565b600982019050919050565b6000613fcb6024836149a7565b9150613fd682615048565b604082019050919050565b6000613fee6019836149a7565b9150613ff982615097565b602082019050919050565b6000614011600a836149b8565b915061401c826150c0565b600a82019050919050565b6000614034602c836149a7565b915061403f826150e9565b604082019050919050565b60006140576038836149a7565b915061406282615138565b604082019050919050565b600061407a602a836149a7565b915061408582615187565b604082019050919050565b600061409d6029836149a7565b91506140a8826151d6565b604082019050919050565b60006140c0601f836149a7565b91506140cb82615225565b602082019050919050565b60006140e36024836149b8565b91506140ee8261524e565b602482019050919050565b60006141066031836149a7565b91506141118261529d565b604082019050919050565b60006141296002836149b8565b9150614134826152ec565b600282019050919050565b600061414c6020836149a7565b915061415782615315565b602082019050919050565b600061416f6017836149a7565b915061417a8261533e565b602082019050919050565b60006141926016836149b8565b915061419d82615367565b601682019050919050565b60006141b5602c836149a7565b91506141c082615390565b604082019050919050565b60006141d86020836149a7565b91506141e3826153df565b602082019050919050565b60006141fb6029836149a7565b915061420682615408565b604082019050919050565b600061421e601c836149a7565b915061422982615457565b602082019050919050565b60006142416021836149a7565b915061424c82615480565b604082019050919050565b6000614264601d836149b8565b915061426f826154cf565b601d82019050919050565b60006142876031836149a7565b9150614292826154f8565b604082019050919050565b60006142aa602c836149a7565b91506142b582615547565b604082019050919050565b60006142cd600a836149b8565b91506142d882615596565b600a82019050919050565b60006142f0601b836149a7565b91506142fb826155bf565b602082019050919050565b61430f81614b42565b82525050565b60006143218284613e75565b915081905092915050565b6000614338828a613e75565b91506143448289613e75565b91506143508288613e75565b915061435c8287613e75565b91506143688286613e75565b91506143748285613e75565b91506143808284613e75565b915081905098975050505050505050565b600061439d828b613e75565b91506143a9828a613e75565b91506143b58289613e75565b91506143c18288613e75565b91506143cd8287613e75565b91506143d98286613e75565b91506143e58285613e75565b91506143f18284613e75565b91508190509998505050505050505050565b600061440f828c613e75565b915061441b828b613e75565b9150614427828a613e75565b91506144338289613e75565b915061443f8288613e75565b915061444b8287613e75565b91506144578286613e75565b91506144638285613e75565b915061446f8284613e75565b91508190509a9950505050505050505050565b600061448d82613f0f565b91506144998284613e75565b915081905092915050565b60006144af82613f32565b91506144bb8284613e75565b915081905092915050565b60006144d182613f9b565b91506144dd8284613e75565b915081905092915050565b60006144f382614004565b91506144ff8284613e75565b915081905092915050565b600061451582614185565b91506145218286613e75565b915061452c82613f78565b91506145388285613e75565b9150614543826140d6565b915061454f8284613e75565b915061455a8261411c565b9150819050949350505050565b600061457282614257565b915061457e8284613e75565b915081905092915050565b6000614594826142c0565b91506145a08284613e75565b915081905092915050565b60006020820190506145c06000830184613de5565b92915050565b60006080820190506145db6000830187613de5565b6145e86020830186613de5565b6145f56040830185614306565b81810360608301526146078184613e03565b905095945050505050565b60006020820190506146276000830184613df4565b92915050565b600060208201905081810360008301526146478184613e3c565b905092915050565b6000602082019050818103600083015261466881613ea6565b9050919050565b6000602082019050818103600083015261468881613ec9565b9050919050565b600060208201905081810360008301526146a881613eec565b9050919050565b600060208201905081810360008301526146c881613f55565b9050919050565b600060208201905081810360008301526146e881613fbe565b9050919050565b6000602082019050818103600083015261470881613fe1565b9050919050565b6000602082019050818103600083015261472881614027565b9050919050565b600060208201905081810360008301526147488161404a565b9050919050565b600060208201905081810360008301526147688161406d565b9050919050565b6000602082019050818103600083015261478881614090565b9050919050565b600060208201905081810360008301526147a8816140b3565b9050919050565b600060208201905081810360008301526147c8816140f9565b9050919050565b600060208201905081810360008301526147e88161413f565b9050919050565b6000602082019050818103600083015261480881614162565b9050919050565b60006020820190508181036000830152614828816141a8565b9050919050565b60006020820190508181036000830152614848816141cb565b9050919050565b60006020820190508181036000830152614868816141ee565b9050919050565b6000602082019050818103600083015261488881614211565b9050919050565b600060208201905081810360008301526148a881614234565b9050919050565b600060208201905081810360008301526148c88161427a565b9050919050565b600060208201905081810360008301526148e88161429d565b9050919050565b60006020820190508181036000830152614908816142e3565b9050919050565b60006020820190506149246000830184614306565b92915050565b6000614934614945565b90506149408282614bc0565b919050565b6000604051905090565b600067ffffffffffffffff82111561496a57614969614d56565b5b61497382614d99565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006149ce82614b42565b91506149d983614b42565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a0e57614a0d614c6b565b5b828201905092915050565b6000614a2482614b42565b9150614a2f83614b42565b925082614a3f57614a3e614c9a565b5b828204905092915050565b6000614a5582614b42565b9150614a6083614b42565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a9957614a98614c6b565b5b828202905092915050565b6000614aaf82614b42565b9150614aba83614b42565b925082821015614acd57614acc614c6b565b5b828203905092915050565b6000614ae382614b22565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b79578082015181840152602081019050614b5e565b83811115614b88576000848401525b50505050565b60006002820490506001821680614ba657607f821691505b60208210811415614bba57614bb9614cc9565b5b50919050565b614bc982614d99565b810181811067ffffffffffffffff82111715614be857614be7614d56565b5b80604052505050565b6000614bfc82614b42565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2f57614c2e614c6b565b5b600182019050919050565b6000614c4582614b42565b9150614c5083614b42565b925082614c6057614c5f614c9a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4c41594552205448524545000000000000000000000000000000000000000000600082015250565b7f4c41594552204649564500000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f222c20226465736372697074696f6e223a20224c6172766120576f6c7665732060008201527f6172652061204652454520544f204d494e5420636f6c6c656374696f6e20627260208201527f6f7567687420746f20796f752062792074686520666f756e64657273206f662060408201527f576f6c6620436c75622038362e2054686579206172652061206465726976617460608201527f697665206f66204c61727661204c6164732e2054686520617274776f726b206160808201527f6e64206d65746164617461206172652066756c6c79206f6e2d636861696e206160a08201527f6e64206172652072616e646f6d6c792067656e6572617465642200000000000060c082015250565b7f4c41594552205349580000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4241534520434f4c4f5200000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008201527f6536342c00000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360008201527f20696e2061207472616e73616374696f6e000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45544820616d6f756e7420697320696e636f7272656374000000000000000000600082015250565b7f7b226e616d65223a20224c6172766120576f6c66202300000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e6520746f6b656e00000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4c4159455220464f555200000000000000000000000000000000000000000000600082015250565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6155f181614ad8565b81146155fc57600080fd5b50565b61560881614aea565b811461561357600080fd5b50565b61561f81614af6565b811461562a57600080fd5b50565b61563681614b42565b811461564157600080fd5b5056fe227d2c207b2274726169745f74797065223a20224163636573736f7279222c2276616c7565223a2022207b2274726169745f74797065223a202245796577656172222c2276616c7565223a20225a6f6d626965227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a20225a6f6d626965227d2c3c7374796c653e23787b73686170652d72656e646572696e673a20637269737065646765733b7d3c2f7374796c653e3c2f7376673e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f2c202261747472696275746573223a205b7b2274726169745f74797065223a202254797065222c2276616c7565223a20223c7376672069643d22782220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d22302030203332203332223e3c706174682066696c6c3d22233633383539362220643d224d30203068333276333248307a222f3e416c69656e227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022416c69656e227d2c227d2c207b2274726169745f74797065223a20224865616477656172222c2276616c7565223a20224e6f726d616c227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022417065227d2c207b2274726169745f74797065223a20224d6f757468222c2276616c7565223a2022417065227d2c2220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d22233030302220643d226d3220323768317632682d31762d327a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168327631682d32762d317a6d322d3168327631682d32762d317a6d312d31346831763134682d31762d31347a6d2d312d3568317635682d31762d357a6d31203068317631682d31762d317a6d31203168317634682d31762d347a6d31203468317632682d31762d327a6d31203168337631682d33762d317a6d322d3668317636682d31762d367a6d31203068317632682d31762d327a6d3120316831763132682d31762d31327a6d2d31342032356831347631682d3134762d317a6d31332d3168317631682d31762d317a6d312d3268317632682d31762d327a6d31203068317631682d31762d317a6d312d3568317635682d31762d357a6d2d34203068347631682d34762d317a6d2d312d3168317631682d31762d317a6d2d312d3368317633682d31762d337a6d332d3168317632682d31762d327a6d31203168337631682d33762d317a6d322d3168337631682d33762d317a6d332d3168337633682d33762d337a6d33203268337631682d33762d317a6d32203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d31203168317632682d31762d327a6d2d34203168347631682d34762d317a6d312d3268337631682d33762d317a6d2d392d3668317631682d31762d317a6d33203068317631682d31762d317a22202f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e322220643d226d313320313368317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e342220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d302d313368327631682d32762d317a6d33203068327631682d32762d317a222f3ea264697066735822122060ea47e9c05d32ad382f38078778bbc62187432af86d400309c8aeab12dfa21964736f6c634300080700333c706174682066696c6c3d22233030302220643d226d313020313268387631682d38762d317a6d32203168327631682d32762d317a6d33203068327631682d32762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3134203968317632682d31762d327a6d2d352d3168317636682d31762d367a6d31203068387631682d38762d317a6d302d3168377631682d37762d317a6d312d3168367631682d36762d317a6d312d3168347631682d34762d317a6d2d32203468387631682d38762d317a22202f3e3c706174682066696c6c3d22233639363936392220643d226d3131203768317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233343433330302220643d226d3131203968367631682d36762d317a22202f3e3c706174682066696c6c3d22233030363043332220643d226d3130203768317632682d31762d327a6d312d3168317632682d31762d327a22202f3e3c706174682066696c6c3d22234436303430342220643d226d3137203768317632682d31762d327a6d2d312d3168317632682d31762d327a22202f3e3c706174682066696c6c3d22234534454231372220643d226d3132203668347632682d34762d327a6d2d31203268367631682d36762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3133203568317631682d31762d317a22202f3e3c706174682066696c6c3d22233030363043332220643d226d3132203468337631682d33762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3134203968317632682d31762d327a6d2d32203068317631682d31762d317a6d2d322d3268367632682d36762d327a6d2d31203368337631682d33762d317a6d302d3268317631682d31762d317a6d322d3268387631682d38762d317a6d312d3168357631682d35762d317a6d35203268327632682d32762d327a6d32203268317631682d31762d317a6d302d3468317632682d31762d327a22202f3e3c706174682066696c6c3d22234630463046302220643d226d313020313268387631682d38762d317a6d37203168317632682d31762d327a6d2d36203168367631682d36762d317a6d302d3168317631682d31762d317a6d33203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234644333233322220643d226d313520313368327631682d32762d317a22202f3e3c706174682066696c6c3d22233332384446442220643d226d313220313368327631682d32762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3130203868317633682d31762d337a6d312d3168317631682d31762d317a6d36203168317633682d31762d337a6d2d31203068317631682d31762d317a6d2d342d3168347631682d34762d317a22202f3e3c706174682066696c6c3d22233443344334432220643d226d3131203868357633682d35762d337a6d35203168317632682d31762d327a22202f3e3c706174682066696c6c3d22233633363336332220643d226d3131203968317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22234646443932362220643d226d39203568317631682d31762d317a222f3e3c706174682066696c6c3d22233136333741342220643d226d3131203568367631682d36762d317a6d36203168317632682d31762d327a6d2d31203268317631682d31762d317a6d2d33203168337631682d33762d317a6d2d322d3168327631682d32762d317a6d302d3268317631682d31762d317a6d2d31203168317631682d31762d317a6d2d33203168317631682d31762d317a6d31203168317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233134324337432220643d226d3820313068317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233141343343382220643d226d3132203668357631682d35762d317a6d2d31203168367631682d36762d317a6d32203168337631682d33762d317a6d2d37203068317631682d31762d317a6d32203068317631682d31762d317a6d2d31203168317633682d31762d337a22202f3e3c706174682066696c6c3d22233030302220643d226d3720396831347631682d3134762d317a6d312d316831327631682d3132762d317a6d312d366831307635682d3130762d357a6d312d3168387631682d38762d317a22202f3e3c706174682066696c6c3d22234443314431442220643d226d3920376831307631682d3130762d317a22202f3e3c706174682066696c6c3d22234338464246422220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d22233735424442442220643d226d313220313268317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313220313368317631682d31762d317a6d312d3168317631682d31762d317a6d32203168317631682d31762d317a6d312d3168317631682d31762d317a6d35203768337631682d33762d317a222f3e203c706174682066696c6c3d22233942453045302220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d312d313268317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d3720313368337634682d33762d347a6d31203468327632682d32762d327a6d31203268317632682d31762d327a6d2d32203068317633682d31762d337a6d31203268317631682d31762d317a6d2d332d3868317635682d31762d357a6d31203468317633682d31762d337a6d302d3568317631682d31762d317a6d312d3168317631682d31762d317a6d312d3368317633682d31762d337a6d31203468317631682d31762d317a6d312d3168317631682d31762d317a6d312d3268317632682d31762d327a6d31203068367631682d36762d317a6d2d332d3268327631682d32762d317a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d312d3168337631682d33762d317a6d33203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d2d32203068317635682d31762d357a6d31203168317633682d31762d337a6d2d32203468317631682d31762d317a6d332d3168317631682d31762d317a6d312d3368317633682d31762d337a6d2d32203468317631682d31762d317a6d2d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22233830383038302220643d226d3820313968317632682d31762d327a6d2d312d3268317632682d31762d327a6d2d312d3468317634682d31762d347a6d312d3168327631682d32762d317a6d312d3168327631682d32762d317a6d312d3168327631682d32762d317a6d302d3268327632682d32762d327a6d332d3368337634682d33762d347a6d2d31203168317633682d31762d337a6d34203068317633682d31762d337a6d31203168317632682d31762d327a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317633682d31762d337a6d2d31203368317631682d31762d317a6d2d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22234433443344332220643d226d3131203768317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d323020313868317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313020396831307631682d3130762d317a6d332d3168317631682d31762d317a6d302d3168367631682d36762d317a6d36203168317632682d31762d327a6d2d392d3168317633682d31762d337a6d312d3168317631682d31762d317a6d36203068317631682d31762d317a6d2d352d3168357631682d35762d317a22202f3e3c706174682066696c6c3d22233531353135312220643d226d3131203768327632682d32762d327a6d312d3168357631682d35762d317a6d32203268357631682d35762d317a22202f3e3c706174682066696c6c3d22233335333533352220643d226d3131203768317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22234136364532432220643d226d323120313868337631682d33762d317a6d2d31203168317632682d31762d327a6d34203068317632682d31762d327a22202f3e3c706174682066696c6c3d22234332383934362220643d226d323020313868317631682d31762d317a6d34203068317631682d31762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d323420313868367631682d36762d317a6d30203268367631682d36762d317a6d362d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233539353935392220643d226d323420313968357631682d35762d317a22202f3e3c706174682066696c6c3d22233030343046462220643d226d323920313968317631682d31762d317a22202f3e3c706174682066696c6c3d22233744413236392220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a222f3e3c706174682066696c6c3d2223303030222066696c6c2d6f7061636974793d222e342220643d226d3320323768317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a6d302d313368327631682d32762d317a6d33203068327631682d32762d317a6d2d33203268317631682d31762d317a6d33203068317631682d31762d317a6d36203668317631682d31762d317a222f3e3c706174682066696c6c3d227265642220643d226d313220313368317631682d31762d317a6d33203068317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313320313368317631682d31762d317a6d33203068317631682d31762d317a6d35203668337631682d33762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313220313268357631682d35762d317a6d2d312d3268377631682d37762d317a6d2d31203168317633682d31762d337a6d31203368377631682d37762d317a6d372d3368317633682d31762d337a22202f3e3c706174682066696c6c3d22233844384438442220643d226d313120313168317631682d31762d317a6d36203068317631682d31762d317a6d2d36203268317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234234423442342220643d226d313220313168357631682d35762d317a6d30203268357631682d35762d317a6d2d312d3168317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234638433844432220643d226d332032376831337631682d3133762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d312d316831337631682d3133762d317a6d312d316831327631682d3132762d317a6d322d316831307631682d3130762d317a6d322d3168387631682d38762d317a6d302d3168347631682d34762d317a6d302d3168337631682d33762d317a6d302d3368327633682d32762d337a6d302d3268357632682d35762d327a6d33203268327633682d32762d337a6d31203368367631682d36762d317a6d312d3268397632682d39762d327a6d342d3168327631682d32762d317a6d30203468347631682d34762d317a6d342d3168317631682d31762d317a6d312d3168317631682d31762d317a6d302d3168327631682d32762d317a6d2d31342d3868367635682d36762d357a6d35203568317631682d31762d317a6d2d362d313168317634682d31762d347a6d31203468317632682d31762d327a6d352d3368317635682d31762d357a22202f3e3c706174682066696c6c3d22234646433043422220643d226d313220313268327631682d32762d317a6d33203068327631682d32762d317a6d2d313220313568317631682d31762d317a6d322d3268317633682d31762d337a6d322d3268317635682d31762d357a6d322d3168317636682d31762d367a6d31203568317631682d31762d317a6d312d3368387631682d38762d317a6d31203168357631682d35762d317a222f3e3c706174682066696c6c3d22233030302220643d226d313220313368327631682d32762d317a6d33203068327631682d32762d317a6d36203668337631682d33762d317a222f3e3c706174682066696c6c3d22233739344231312220643d226d3820396831327631682d3132762d317a6d2d312d316831347631682d3134762d317a6d2d312d3168317631682d31762d317a6d3135203068317631682d31762d317a6d2d31322d336831307633682d3130762d337a6d312d3168327631682d32762d317a6d36203068327631682d32762d317a22202f3e3c706174682066696c6c3d22233530324630352220643d226d3920376831307631682d3130762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d323220323068317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168317631682d31762d317a6d31203168337631682d33762d317a6d332d3168317631682d31762d317a6d312d3268317632682d31762d327a6d2d33203068337631682d33762d317a6d2d31203168327631682d32762d317a6d2d312d3168317631682d31762d317a6d2d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d2223666666222066696c6c2d6f7061636974793d222e342220643d226d323920313968317631682d31762d317a6d302d3268317631682d31762d317a6d302d3268317631682d31762d317a6d2d312d3268337631682d33762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233835353131342220643d226d323520323268317631682d31762d317a6d2d312d3168317631682d31762d317a6d2d312d3168317631682d31762d317a6d35203268327631682d32762d317a6d2d32203168337631682d33762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d313020313168387631682d38762d317a6d32203168327632682d32762d327a22202f3e3c706174682066696c6c3d22233030302220643d226d313220313268357631682d35762d317a6d2d312d3268377631682d37762d317a6d2d31203168317633682d31762d337a6d31203368377631682d37762d317a6d372d3368317633682d31762d337a22202f3e3c706174682066696c6c3d22233844384438442220643d226d313120313168317631682d31762d317a6d36203068317631682d31762d317a6d2d36203268317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234234423442342220643d226d313220313168357631682d35762d317a6d30203268357631682d35762d317a6d2d312d3168317631682d31762d317a6d36203068317631682d31762d317a22202f3e3c706174682066696c6c3d22234646303030302220643d226d31322031326832307631682d3230762d317a22202f3e3c706174682066696c6c3d22233831313942372220643d226d3130203768377633682d37762d337a6d312d3168367631682d36762d317a6d312d3168347631682d34762d317a6d35203468347631682d34762d317a6d302d3168337631682d33762d317a22202f3e3c706174682066696c6c3d22234232363144432220643d226d3134203668317631682d31762d317a6d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d313120313268387631682d38762d317a6d30203168337631682d33762d317a6d35203068337631682d33762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d313320313068367631682d36762d317a6d2d332d3168337631682d33762d317a6d2d312d3368317632682d31762d327a6d312d3168337631682d33762d317a6d332d3168327631682d32762d317a6d32203168337631682d33762d317a6d33203168317632682d31762d327a6d2d31203268317631682d31762d317a6d2d32203068317631682d31762d317a6d2d32203068317631682d31762d317a6d2d32203068317631682d31762d317a6d37203168317631682d31762d317a22202f3e3c706174682066696c6c3d22234646464646462220643d226d3130203868317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a22202f3e3c706174682066696c6c3d22233236333134412220643d226d3133203968357631682d35762d317a6d2d332d3368387632682d38762d327a6d332d3168327631682d32762d317a22202f3e3c706174682066696c6c3d22234646443830302220643d226d3133203668327631682d32762d317a22202f3e3c706174682066696c6c3d22234646453630302220643d226d323220313968317631682d31762d317a222f3e3c706174682066696c6c3d22233030302220643d226d39203868317632682d31762d327a6d312d3168317631682d31762d317a6d312d3168317631682d31762d317a6d37203268317632682d31762d327a6d2d312d3168317631682d31762d317a6d2d312d3168317631682d31762d317a6d2d342d3168347631682d34762d317a22202f3e3c706174682066696c6c3d22234341344531312220643d226d3130203868387632682d38762d327a6d312d3168367631682d36762d317a6d312d3168347631682d34762d317a22202f3e3c706174682066696c6c3d22233933333730392220643d226d3130203868387631682d38762d317a6d31203168317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a6d32203068317631682d31762d317a22202f3e3c706174682066696c6c3d22233030303030302220643d226d323420313868367631682d36762d317a6d36203168317631682d31762d317a6d2d36203168367631682d36762d317a22202f3e3c706174682066696c6c3d22234646464646462220643d226d323420313968357631682d35762d317a22202f3e3c706174682066696c6c3d22234537413630302220643d226d323920313968317631682d31762d317a22202f3e3c706174682066696c6c3d22234437443144312220643d226d333020313368317634682d31762d347a22202f3e3c706174682066696c6c3d22234646464646462220643d226d313220313268317631682d31762d317a6d31203168317631682d31762d317a6d322d3168317631682d31762d317a6d31203168317631682d31762d317a22202f3e3c706174682066696c6c3d22233844384438442220643d226d313220313368317631682d31762d317a6d312d3168317631682d31762d317a6d32203168317631682d31762d317a6d312d3168317631682d31762d317a22202f3e3c706174682066696c6c3d22233344324631452220643d226d3720396831347631682d3134762d317a6d312d316831327631682d3132762d317a6d332d3268367631682d36762d317a6d312d3268347632682d34762d327a6d312d3168327631682d32762d317a22202f3e3c706174682066696c6c3d22233030302220643d226d3130203768387631682d38762d317a22202f3e

Deployed ByteCode Sourcemap

17440:18457:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14904:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8836:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9805:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9440:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15370:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10455:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15124:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17614:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10757:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15479:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35198:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8613:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8415:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3125:85;;;;;;;;;;;;;:::i;:::-;;17583:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35290:116;;;:::i;:::-;;2932:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35114:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8932:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17546:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34972:137;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10016:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10917:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34856:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33537:680;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17511:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10295:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3215:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14904:215;15006:4;15039:35;15024:50;;;:11;:50;;;;:90;;;;15078:36;15102:11;15078:23;:36::i;:::-;15024:90;15017:97;;14904:215;;;:::o;8836:91::-;8890:13;8917:5;8910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8836:91;:::o;9805:206::-;9881:7;9903:16;9911:7;9903;:16::i;:::-;9895:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9982:15;:24;9998:7;9982:24;;;;;;;;;;;;;;;;;;;;;9975:31;;9805:206;;;:::o;9440:360::-;9515:13;9531:23;9546:7;9531:14;:23::i;:::-;9515:39;;9573:5;9567:11;;:2;:11;;;;9559:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;9652:5;9636:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;9661:37;9678:5;9685:12;:10;:12::i;:::-;9661:16;:37::i;:::-;9636:62;9623:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;9774:21;9783:2;9787:7;9774:8;:21::i;:::-;9510:290;9440:360;;:::o;15370:104::-;15431:7;15452:10;:17;;;;15445:24;;15370:104;:::o;10455:297::-;10617:41;10636:12;:10;:12::i;:::-;10650:7;10617:18;:41::i;:::-;10609:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;10719:28;10729:4;10735:2;10739:7;10719:9;:28::i;:::-;10455:297;;;:::o;15124:241::-;15221:7;15251:23;15268:5;15251:16;:23::i;:::-;15243:5;:31;15235:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;15334:12;:19;15347:5;15334:19;;;;;;;;;;;;;;;:26;15354:5;15334:26;;;;;;;;;;;;15327:33;;15124:241;;;;:::o;17614:30::-;;;;:::o;10757:155::-;10868:39;10885:4;10891:2;10895:7;10868:39;;;;;;;;;;;;:16;:39::i;:::-;10757:155;;;:::o;15479:218::-;15554:7;15584:30;:28;:30::i;:::-;15576:5;:38;15568:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;15675:10;15686:5;15675:17;;;;;;;;:::i;:::-;;;;;;;;;;15668:24;;15479:218;;;:::o;35198:87::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35270:10:::1;35260:7;:20;;;;35198:87:::0;:::o;8613:218::-;8685:7;8699:13;8715:7;:16;8723:7;8715:16;;;;;;;;;;;;;;;;;;;;;8699:32;;8761:1;8744:19;;:5;:19;;;;8736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8821:5;8814:12;;;8613:218;;;:::o;8415:193::-;8487:7;8526:1;8509:19;;:5;:19;;;;8501:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8587:9;:16;8597:5;8587:16;;;;;;;;;;;;;;;;8580:23;;8415:193;;;:::o;3125:85::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3184:21:::1;3202:1;3184:9;:21::i;:::-;3125:85::o:0;17583:27::-;;;;:::o;35290:116::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35359:12:::1;:10;:12::i;:::-;35351:26;;:49;35378:21;35351:49;;;;;;;;;;;;;;;;;;;;;;;35343:58;;;::::0;::::1;;35290:116::o:0;2932:78::-;2978:7;2999:6;;;;;;;;;;;2992:13;;2932:78;:::o;35114:79::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35180:8:::1;35172:5;:16;;;;35114:79:::0;:::o;8932:95::-;8988:13;9015:7;9008:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8932:95;:::o;17546:33::-;;;;:::o;34972:137::-;35070:34;35075:13;35089:14;35070:4;:34::i;:::-;34972:137;;:::o;10016:274::-;10125:12;:10;:12::i;:::-;10113:24;;:8;:24;;;;10105:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10219:8;10174:18;:32;10193:12;:10;:12::i;:::-;10174:32;;;;;;;;;;;;;;;:42;10207:8;10174:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;10266:8;10237:48;;10252:12;:10;:12::i;:::-;10237:48;;;10276:8;10237:48;;;;;;:::i;:::-;;;;;;;;10016:274;;:::o;10917:286::-;11059:41;11078:12;:10;:12::i;:::-;11092:7;11059:18;:41::i;:::-;11051:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;11159:39;11173:4;11179:2;11183:7;11192:5;11159:13;:39::i;:::-;10917:286;;;;:::o;34856:111::-;34929:33;34934:12;:10;:12::i;:::-;34947:14;34929:4;:33::i;:::-;34856:111;:::o;33537:680::-;33602:13;33622:27;33652:23;33667:7;33652:14;:23::i;:::-;33622:53;;33680:18;33701:420;33771:17;33780:7;33771:8;:17::i;:::-;34012:19;34022:8;34012:9;:19::i;:::-;34073:38;34093:16;34100:8;34093:6;:16::i;:::-;34073:13;:38::i;:::-;33728:390;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33701:13;:420::i;:::-;33680:441;;34190:4;34140:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;34126:70;;34208:4;34201:11;;;;33537:680;;;:::o;17511:31::-;;;;:::o;10295:155::-;10392:4;10410:18;:25;10429:5;10410:25;;;;;;;;;;;;;;;:35;10436:8;10410:35;;;;;;;;;;;;;;;;;;;;;;;;;10403:42;;10295:155;;;;:::o;3215:177::-;3060:12;:10;:12::i;:::-;3049:23;;:7;:5;:7::i;:::-;:23;;;3041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3318:1:::1;3298:22;;:8;:22;;;;3290:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:19;3378:8;3368:9;:19::i;:::-;3215:177:::0;:::o;8141:269::-;8243:4;8280:25;8265:40;;;:11;:40;;;;:96;;;;8328:33;8313:48;;;:11;:48;;;;8265:96;:140;;;;8369:36;8393:11;8369:23;:36::i;:::-;8265:140;8254:151;;8141:269;;;:::o;11486:118::-;11551:4;11597:1;11569:30;;:7;:16;11577:7;11569:16;;;;;;;;;;;;;;;;;;;;;:30;;;;11562:37;;11486:118;;;:::o;2525:89::-;2578:7;2599:10;2592:17;;2525:89;:::o;13440:159::-;13536:2;13509:15;:24;13525:7;13509:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13586:7;13582:2;13548:46;;13557:23;13572:7;13557:14;:23::i;:::-;13548:46;;;;;;;;;;;;13440:159;;:::o;11609:327::-;11702:4;11721:16;11729:7;11721;:16::i;:::-;11713:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11791:13;11807:23;11822:7;11807:14;:23::i;:::-;11791:39;;11854:5;11843:16;;:7;:16;;;:51;;;;11887:7;11863:31;;:20;11875:7;11863:11;:20::i;:::-;:31;;;11843:51;:87;;;;11898:32;11915:5;11922:7;11898:16;:32::i;:::-;11843:87;11835:96;;;11609:327;;;;:::o;12981:454::-;13113:4;13086:31;;:23;13101:7;13086:14;:23::i;:::-;:31;;;13078:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13190:1;13176:16;;:2;:16;;;;13168:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13240:39;13261:4;13267:2;13271:7;13240:20;:39::i;:::-;13286:29;13303:1;13307:7;13286:8;:29::i;:::-;13341:1;13322:9;:15;13332:4;13322:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;13364:1;13347:9;:13;13357:2;13347:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;13389:2;13370:7;:16;13378:7;13370:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;13422:7;13418:2;13403:27;;13412:4;13403:27;;;;;;;;;;;;12981:454;;;:::o;3397:152::-;3447:16;3466:6;;;;;;;;;;;3447:25;;3486:8;3477:6;;:17;;;;;;;;;;;;;;;;;;3535:8;3504:40;;3525:8;3504:40;;;;;;;;;;;;3442:107;3397:152;:::o;34222:629::-;34318:9;;34302:13;:11;:13::i;:::-;:25;34294:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34406:9;;34388:14;34372:13;:11;:13::i;:::-;:30;;;;:::i;:::-;:43;;34364:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34482:7;;34464:14;:25;;34456:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34573:1;34556:14;:18;34548:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34646:9;34628:14;34620:5;;:22;;;;:::i;:::-;:35;34612:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34695:9;34690:157;34714:14;34710:1;:18;34690:157;;;34741:15;34777:1;34759:15;;:19;;;;:::i;:::-;34741:37;;34784:31;34794:11;34807:7;34784:9;:31::i;:::-;34840:1;34821:15;;:20;;;;;;;:::i;:::-;;;;;;;;34735:112;34730:3;;;;;:::i;:::-;;;;34690:157;;;;34222:629;;:::o;11208:273::-;11332:28;11342:4;11348:2;11352:7;11332:9;:28::i;:::-;11373:48;11396:4;11402:2;11406:7;11415:5;11373:22;:48::i;:::-;11365:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;11208:273;;;;:::o;26962:384::-;27026:18;;:::i;:::-;27055:27;;:::i;:::-;27110:21;27123:7;27110:12;:21::i;:::-;27089:8;:18;;:42;;;;;27158:22;27172:7;27158:13;:22::i;:::-;27136:8;:19;;:44;;;;;27206:21;27219:7;27206:12;:21::i;:::-;27185:8;:18;;:42;;;;;27253:21;27266:7;27253:12;:21::i;:::-;27232:8;:18;;:42;;;;;27299:20;27311:7;27299:11;:20::i;:::-;27279:8;:17;;:40;;;;;27333:8;27326:15;;;26962:384;;;:::o;35411:417::-;35467:13;35502:1;35493:5;:10;35489:38;;;35511:10;;;;;;;;;;;;;;;;;;;;;35489:38;35531:12;35546:5;35531:20;;35556:14;35575:54;35590:1;35582:4;:9;35575:54;;35599:8;;;;;:::i;:::-;;;;35621:2;35613:10;;;;;:::i;:::-;;;35575:54;;;35633:19;35665:6;35655:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35633:39;;35677:121;35693:1;35684:5;:10;35677:121;;35712:1;35702:11;;;;;:::i;:::-;;;35770:2;35762:5;:10;;;;:::i;:::-;35749:2;:24;;;;:::i;:::-;35736:39;;35719:6;35726;35719:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;35790:2;35781:11;;;;;:::i;:::-;;;35677:121;;;35816:6;35802:21;;;;;35411:417;;;;:::o;27352:1325::-;27423:13;27447:23;;:::i;:::-;27479:62;;;;;;;;;;;;;;;;;:5;27485:1;27479:8;;;;;;;:::i;:::-;;;;;:62;;;;27573:1;27550:8;:19;;;:24;27546:108;;;27582:65;;;;;;;;;;;;;;;;;:5;27588:1;27582:8;;;;;;;:::i;:::-;;;;;:65;;;;27546:108;27685:1;27662:8;:19;;;:24;27658:106;;;27694:63;;;;;;;;;;;;;;;;;:5;27700:1;27694:8;;;;;;;:::i;:::-;;;;;:63;;;;27658:106;27795:1;27772:8;:19;;;:24;27768:102;;;27804:59;;;;;;;;;;;;;;;;;:5;27810:1;27804:8;;;;;;;:::i;:::-;;;;;:59;;;;27768:102;27900:1;27878:8;:19;;;:23;:50;;;;27927:1;27905:8;:19;;;:23;27878:50;27874:194;;;27936:56;;;;;;;;;;;;;;;;;:5;27942:1;27936:8;;;;;;;:::i;:::-;;;;;:56;;;;28009:10;28020:8;:19;;;28009:31;;;;;;;:::i;:::-;;;27998:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28004:1;27998:8;;;;;;;:::i;:::-;;;;;:42;;;;28046:16;;;;;;;;;;;;;;;;;:5;28052:1;28046:8;;;;;;;:::i;:::-;;;;;:16;;;;27874:194;28072:49;;;;;;;;;;;;;;;;;:5;28078:1;28072:8;;;;;;;:::i;:::-;;;;;:49;;;;28137:11;28149:8;:18;;;28137:31;;;;;;;:::i;:::-;;;28126:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28132:1;28126:8;;;;;;;:::i;:::-;;;;;:42;;;;28173:53;;;;;;;;;;;;;;;;;:5;28179:1;28173:8;;;;;;;:::i;:::-;;;;;:53;;;;28243:10;28254:8;:18;;;28243:30;;;;;;;:::i;:::-;;;28231:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28237:2;28231:9;;;;;;;:::i;:::-;;;;;:42;;;;28278:55;;;;;;;;;;;;;;;;;:5;28284:2;28278:9;;;;;;;:::i;:::-;;;;;:55;;;;28350:10;28361:8;:17;;;28350:29;;;;;;;:::i;:::-;;;28338:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;28344:2;28338:9;;;;;;;:::i;:::-;;;;;:41;;;;28384:19;;;;;;;;;;;;;;;;;:5;28390:2;28384:9;;;;;;;:::i;:::-;;;;;:19;;;;28412:20;28459:5;28465:1;28459:8;;;;;;;:::i;:::-;;;;;;28469:5;28475:1;28469:8;;;;;;;:::i;:::-;;;;;;28479:5;28485:1;28479:8;;;;;;;:::i;:::-;;;;;;28489:5;28495:1;28489:8;;;;;;;:::i;:::-;;;;;;28499:5;28505:1;28499:8;;;;;;;:::i;:::-;;;;;;28509:5;28515:1;28509:8;;;;;;;:::i;:::-;;;;;;28519:5;28525:1;28519:8;;;;;;;:::i;:::-;;;;;;28529:5;28535:1;28529:8;;;;;;;:::i;:::-;;;;;;28442:96;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28412:127;;28582:6;28590:5;28596:1;28590:8;;;;;;;:::i;:::-;;;;;;28600:5;28606:1;28600:8;;;;;;;:::i;:::-;;;;;;28610:5;28616:2;28610:9;;;;;;;:::i;:::-;;;;;;28621:5;28627:2;28621:9;;;;;;;:::i;:::-;;;;;;28632:5;28638:2;28632:9;;;;;;;:::i;:::-;;;;;;28643:5;28649:2;28643:9;;;;;;;:::i;:::-;;;;;;28565:88;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28549:105;;28666:6;28659:13;;;;27352:1325;;;:::o;31497:2035::-;31565:13;31585:22;;:::i;:::-;31614:156;;;;;;;;;;;;;;;;;:5;31620:1;31614:8;;;;;;;:::i;:::-;;;;;:156;;;;31775:25;;;;;;;;;;;;;;;;;:5;31781:1;31775:8;;;;;;;:::i;:::-;;;;;:25;;;;31816:10;31827:8;:18;;;31816:30;;;;;;;:::i;:::-;;;31805:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;31811:1;31805:8;;;;;;;:::i;:::-;;;;;:41;;;;31851:1252;;;;;;;;;;;;;;;;;:5;31857:1;31851:8;;;;;;;:::i;:::-;;;;;:1252;;;;33119:11;33131:8;:19;;;33119:32;;;;;;;:::i;:::-;;;33108:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33114:1;33108:8;;;;;;;:::i;:::-;;;;;:43;;;;33167:12;33180:8;:18;;;33167:32;;;;;;;:::i;:::-;;;33156:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33162:1;33156:8;;;;;;;:::i;:::-;;;;;:43;;;;33215:11;33227:8;:18;;;33215:31;;;;;;;:::i;:::-;;;33204:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33210:1;33204:8;;;;;;;:::i;:::-;;;;;:42;;;;33262:11;33274:8;:17;;;33262:30;;;;;;;:::i;:::-;;;33251:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;33257:1;33251:8;;;;;;;:::i;:::-;;;;;:41;;;;33297:66;;;;;;;;;;;;;;;;;:5;33303:1;33297:8;;;;;;;:::i;:::-;;;;;:66;;;;33370:20;33417:5;33423:1;33417:8;;;;;;;:::i;:::-;;;;;;33427:5;33433:1;33427:8;;;;;;;:::i;:::-;;;;;;33437:5;33443:1;33437:8;;;;;;;:::i;:::-;;;;;;33447:5;33453:1;33447:8;;;;;;;:::i;:::-;;;;;;33457:5;33463:1;33457:8;;;;;;;:::i;:::-;;;;;;33467:5;33473:1;33467:8;;;;;;;:::i;:::-;;;;;;33477:5;33483:1;33477:8;;;;;;;:::i;:::-;;;;;;33487:5;33493:1;33487:8;;;;;;;:::i;:::-;;;;;;33497:5;33503:1;33497:8;;;;;;;:::i;:::-;;;;;;33400:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33370:137;;33521:6;33514:13;;;;31497:2035;;;:::o;36024:1184::-;36082:13;36102:11;36116:4;:11;36102:25;;36143:1;36136:3;:8;36132:23;;;36146:9;;;;;;;;;;;;;;;;;36132:23;36162:18;36200:1;36195;36189:3;:7;;;;:::i;:::-;36188:13;;;;:::i;:::-;36183:1;:19;;;;:::i;:::-;36162:40;;36209:19;36254:2;36241:10;:15;;;;:::i;:::-;36231:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36209:48;;36264:18;36285:5;;;;;;;;;;;;;;;;;36264:26;;36339:1;36332:5;36328:13;36375:2;36367:6;36363:15;36405:1;36385:594;36419:3;36416:1;36413:10;36385:594;;;36453:1;36450;36446:9;36441:14;;36499:8;36494:1;36488:4;36484:12;36478:19;36474:34;36567:4;36559:5;36555:2;36551:14;36547:25;36537:8;36533:40;36527:47;36594:3;36591:1;36587:11;36580:18;;36673:4;36664;36656:5;36652:2;36648:14;36644:25;36634:8;36630:40;36624:47;36620:58;36615:3;36611:68;36604:75;;36699:3;36696:1;36692:11;36685:18;;36777:4;36768;36760:5;36757:1;36753:13;36749:24;36739:8;36735:39;36729:46;36725:57;36720:3;36716:67;36709:74;;36803:3;36800:1;36796:11;36789:18;;36873:4;36864;36857:5;36853:16;36843:8;36839:31;36833:38;36829:49;36824:3;36820:59;36813:66;;36901:3;36896;36892:13;36885:20;;36931:3;36920:9;36913:22;36971:1;36960:9;36956:17;36943:30;;36434:545;;36385:594;;;36389:23;37002:1;36997:3;36993:11;37014:1;37009:63;;;;37082:1;37077:61;;;;36986:152;;37009:63;37058:6;37053:3;37049:16;37045:1;37034:9;37030:17;37023:43;37009:63;;37077:61;37126:4;37121:3;37117:14;37113:1;37102:9;37098:17;37091:41;36986:152;;37160:10;37152:6;37145:26;36306:870;;37196:6;37182:21;;;;;;36024:1184;;;;:::o;7471:148::-;7556:4;7589:25;7574:40;;;:11;:40;;;;7567:47;;7471:148;;;:::o;15702:487::-;15819:45;15846:4;15852:2;15856:7;15819:26;:45::i;:::-;15891:1;15875:18;;:4;:18;;;15871:157;;;15901:40;15933:7;15901:31;:40::i;:::-;15871:157;;;15965:2;15957:10;;:4;:10;;;15953:75;;15975:47;16008:4;16014:7;15975:32;:47::i;:::-;15953:75;15871:157;16050:1;16036:16;;:2;:16;;;16032:153;;;16060:45;16097:7;16060:36;:45::i;:::-;16032:153;;;16127:4;16121:10;;:2;:10;;;16117:68;;16139:40;16167:2;16171:7;16139:27;:40::i;:::-;16117:68;16032:153;15702:487;;;:::o;11941:101::-;12011:26;12021:2;12025:7;12011:26;;;;;;;;;;;;:9;:26::i;:::-;11941:101;;:::o;13604:608::-;13732:4;13747:15;:2;:13;;;:15::i;:::-;13743:465;;;13790:2;13774:36;;;13811:12;:10;:12::i;:::-;13825:4;13831:7;13840:5;13774:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13770:404;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14004:1;13987:6;:13;:18;13983:185;;;14015:60;;;;;;;;;;:::i;:::-;;;;;;;;13983:185;14145:6;14139:13;14130:6;14126:2;14122:15;14115:38;13770:404;13895:45;;;13885:55;;;:6;:55;;;;13878:62;;;;;13743:465;14198:4;14191:11;;13604:608;;;;;;;:::o;28816:510::-;28878:7;28892:12;28907:65;28952:17;28961:7;28952:8;:17::i;:::-;28921:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;28907:6;:65::i;:::-;28892:80;;28979:11;29000:2;28993:4;:9;;;;:::i;:::-;28979:23;;29007:10;29039:2;29032:3;:9;;:21;;;;;29051:2;29045:3;:8;29032:21;29028:38;;;29062:1;29057:6;;29028:38;29081:2;29074:3;:9;;:21;;;;;29093:2;29087:3;:8;29074:21;29070:38;;;29104:1;29099:6;;29070:38;29123:2;29116:3;:9;;:21;;;;;29135:2;29129:3;:8;29116:21;29112:38;;;29146:1;29141:6;;29112:38;29165:2;29158:3;:9;;:21;;;;;29177:2;29171:3;:8;29158:21;29154:38;;;29188:1;29183:6;;29154:38;29207:2;29200:3;:9;;:21;;;;;29219:2;29213:3;:8;29200:21;29196:38;;;29230:1;29225:6;;29196:38;29249:2;29242:3;:9;;:21;;;;;29261:2;29255:3;:8;29242:21;29238:38;;;29272:1;29267:6;;29238:38;29291:2;29284:3;:9;29280:26;;29302:1;29297:6;;29280:26;29319:2;29312:9;;;;;28816:510;;;:::o;29331:461::-;29394:7;29408:12;29423:66;29469:17;29478:7;29469:8;:17::i;:::-;29437:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;29423:6;:66::i;:::-;29408:81;;29496:11;29517:3;29510:4;:10;;;;:::i;:::-;29496:24;;29525:10;29557:2;29550:3;:9;;:21;;;;;29569:2;29563:3;:8;29550:21;29546:38;;;29580:1;29575:6;;29546:38;29599:2;29592:3;:9;;:21;;;;;29611:2;29605:3;:8;29592:21;29588:38;;;29622:1;29617:6;;29588:38;29641:2;29634:3;:9;;:21;;;;;29653:2;29647:3;:8;29634:21;29630:38;;;29664:1;29659:6;;29630:38;29683:2;29676:3;:9;29672:26;;;29694:1;29689:6;;29672:26;29713:2;29706:3;:9;;:21;;;;;29725:2;29719:3;:8;29706:21;29702:38;;;29736:1;29731:6;;29702:38;29755:2;29748:3;:9;29744:26;;29766:1;29761:6;;29744:26;29785:2;29778:9;;;;;29331:461;;;:::o;29797:523::-;29859:7;29873:12;29888:65;29933:17;29942:7;29933:8;:17::i;:::-;29902:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;29888:6;:65::i;:::-;29873:80;;29960:11;29981:3;29974:4;:10;;;;:::i;:::-;29960:24;;29989:10;30021:2;30014:3;:9;;:21;;;;;30033:2;30027:3;:8;30014:21;30010:38;;;30044:1;30039:6;;30010:38;30063:2;30056:3;:9;;:22;;;;;30075:3;30069;:9;30056:22;30052:39;;;30087:1;30082:6;;30052:39;30106:3;30099;:10;;:23;;;;;30119:3;30113;:9;30099:23;30095:40;;;30131:1;30126:6;;30095:40;30150:3;30143;:10;;:23;;;;;30163:3;30157;:9;30143:23;30139:40;;;30175:1;30170:6;;30139:40;30194:3;30187;:10;;:23;;;;;30207:3;30201;:9;30187:23;30183:40;;;30219:1;30214:6;;30183:40;30238:3;30231;:10;;:23;;;;;30251:3;30245;:9;30231:23;30227:40;;;30263:1;30258:6;;30227:40;30282:3;30275;:10;30271:27;;30294:1;30289:6;;30271:27;30313:2;30306:9;;;;;29797:523;;;:::o;30325:777::-;30387:7;30401:12;30416:65;30461:17;30470:7;30461:8;:17::i;:::-;30430:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;30416:6;:65::i;:::-;30401:80;;30488:11;30509:3;30502:4;:10;;;;:::i;:::-;30488:24;;30517:10;30549:2;30542:3;:9;;:21;;;;;30561:2;30555:3;:8;30542:21;30538:38;;;30572:1;30567:6;;30538:38;30591:2;30584:3;:9;;:21;;;;;30603:2;30597:3;:8;30584:21;30580:38;;;30614:1;30609:6;;30580:38;30633:2;30626:3;:9;;:21;;;;;30645:2;30639:3;:8;30626:21;30622:38;;;30656:1;30651:6;;30622:38;30675:2;30668:3;:9;;:21;;;;;30687:2;30681:3;:8;30668:21;30664:38;;;30698:1;30693:6;;30664:38;30717:2;30710:3;:9;;:21;;;;;30729:2;30723:3;:8;30710:21;30706:38;;;30740:1;30735:6;;30706:38;30759:2;30752:3;:9;;:21;;;;;30771:2;30765:3;:8;30752:21;30748:38;;;30782:1;30777:6;;30748:38;30801:2;30794:3;:9;;:21;;;;;30813:2;30807:3;:8;30794:21;30790:38;;;30824:1;30819:6;;30790:38;30843:2;30836:3;:9;;:21;;;;;30855:2;30849:3;:8;30836:21;30832:38;;;30866:1;30861:6;;30832:38;30885:2;30878:3;:9;;:22;;;;;30897:3;30891;:9;30878:22;30874:39;;;30909:1;30904:6;;30874:39;30928:3;30921;:10;;:23;;;;;30941:3;30935;:9;30921:23;30917:41;;;30953:2;30948:7;;30917:41;30973:3;30966;:10;;:23;;;;;30986:3;30980;:9;30966:23;30962:41;;;30998:2;30993:7;;30962:41;31018:3;31011;:10;;:23;;;;;31031:3;31025;:9;31011:23;31007:41;;;31043:2;31038:7;;31007:41;31063:3;31056;:10;31052:28;;31075:2;31070:7;;31052:28;31095:2;31088:9;;;;;30325:777;;;:::o;31107:385::-;31168:7;31182:12;31197:64;31241:17;31250:7;31241:8;:17::i;:::-;31211:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;31197:6;:64::i;:::-;31182:79;;31268:11;31289:3;31282:4;:10;;;;:::i;:::-;31268:24;;31297:10;31329:2;31322:3;:9;;:21;;;;;31341:2;31335:3;:8;31322:21;31318:38;;;31352:1;31347:6;;31318:38;31371:2;31364:3;:9;;:21;;;;;31383:2;31377:3;:8;31364:21;31360:38;;;31394:1;31389:6;;31360:38;31413:2;31406:3;:9;;:21;;;;;31425:2;31419:3;:8;31406:21;31402:38;;;31436:1;31431:6;;31402:38;31455:2;31448:3;:9;31444:26;;31466:1;31461:6;;31444:26;31485:2;31478:9;;;;;31107:385;;;:::o;14217:105::-;;;;:::o;16399:149::-;16497:10;:17;;;;16470:15;:24;16486:7;16470:24;;;;;;;;;;;:44;;;;16519:10;16535:7;16519:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16399:149;:::o;16553:491::-;16641:22;16691:1;16666:22;16683:4;16666:16;:22::i;:::-;:26;;;;:::i;:::-;16641:51;;16697:18;16718:17;:26;16736:7;16718:26;;;;;;;;;;;;16697:47;;16769:14;16755:10;:28;16751:203;;16791:19;16813:12;:18;16826:4;16813:18;;;;;;;;;;;;;;;:34;16832:14;16813:34;;;;;;;;;;;;16791:56;;16888:11;16855:12;:18;16868:4;16855:18;;;;;;;;;;;;;;;:30;16874:10;16855:30;;;;;;;;;;;:44;;;;16938:10;16905:17;:30;16923:11;16905:30;;;;;;;;;;;:43;;;;16785:169;16751:203;16967:17;:26;16985:7;16967:26;;;;;;;;;;;16960:33;;;17005:12;:18;17018:4;17005:18;;;;;;;;;;;;;;;:34;17024:14;17005:34;;;;;;;;;;;16998:41;;;16634:410;;16553:491;;:::o;17049:380::-;17127:22;17172:1;17152:10;:17;;;;:21;;;;:::i;:::-;17127:46;;17178:18;17199:15;:24;17215:7;17199:24;;;;;;;;;;;;17178:45;;17228:19;17250:10;17261:14;17250:26;;;;;;;;:::i;:::-;;;;;;;;;;17228:48;;17308:11;17283:10;17294;17283:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;17355:10;17324:15;:28;17340:11;17324:28;;;;;;;;;;;:41;;;;17379:15;:24;17395:7;17379:24;;;;;;;;;;;17372:31;;;17408:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17120:309;;;17049:380;:::o;16194:200::-;16273:14;16290:20;16307:2;16290:16;:20::i;:::-;16273:37;;16342:7;16315:12;:16;16328:2;16315:16;;;;;;;;;;;;;;;:24;16332:6;16315:24;;;;;;;;;;;:34;;;;16383:6;16354:17;:26;16372:7;16354:26;;;;;;;;;;;:35;;;;16268:126;16194:200;;:::o;12047:261::-;12150:18;12156:2;12160:7;12150:5;:18::i;:::-;12186:54;12217:1;12221:2;12225:7;12234:5;12186:22;:54::i;:::-;12173:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;12047:261;;;:::o;4366:162::-;4426:4;4439:12;4491:7;4479:20;4471:28;;4522:1;4515:4;:8;4508:15;;;4366:162;;;:::o;28682:129::-;28742:7;28798:5;28781:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;28771:34;;;;;;28763:43;;28756:50;;28682:129;;;:::o;12313:343::-;12401:1;12387:16;;:2;:16;;;;12379:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;12454:16;12462:7;12454;:16::i;:::-;12453:17;12445:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;12510:45;12539:1;12543:2;12547:7;12510:20;:45::i;:::-;12579:1;12562:9;:13;12572:2;12562:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12604:2;12585:7;:16;12593:7;12585:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12643:7;12639:2;12618:33;;12635:1;12618:33;;;;;;;;;;;;12313:343;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:366::-;7365:3;7386:67;7450:2;7445:3;7386:67;:::i;:::-;7379:74;;7462:93;7551:3;7462:93;:::i;:::-;7580:2;7575:3;7571:12;7564:19;;7223:366;;;:::o;7595:::-;7737:3;7758:67;7822:2;7817:3;7758:67;:::i;:::-;7751:74;;7834:93;7923:3;7834:93;:::i;:::-;7952:2;7947:3;7943:12;7936:19;;7595:366;;;:::o;7967:::-;8109:3;8130:67;8194:2;8189:3;8130:67;:::i;:::-;8123:74;;8206:93;8295:3;8206:93;:::i;:::-;8324:2;8319:3;8315:12;8308:19;;7967:366;;;:::o;8339:402::-;8499:3;8520:85;8602:2;8597:3;8520:85;:::i;:::-;8513:92;;8614:93;8703:3;8614:93;:::i;:::-;8732:2;8727:3;8723:12;8716:19;;8339:402;;;:::o;8747:::-;8907:3;8928:85;9010:2;9005:3;8928:85;:::i;:::-;8921:92;;9022:93;9111:3;9022:93;:::i;:::-;9140:2;9135:3;9131:12;9124:19;;8747:402;;;:::o;9155:366::-;9297:3;9318:67;9382:2;9377:3;9318:67;:::i;:::-;9311:74;;9394:93;9483:3;9394:93;:::i;:::-;9512:2;9507:3;9503:12;9496:19;;9155:366;;;:::o;9527:404::-;9687:3;9708:86;9790:3;9785;9708:86;:::i;:::-;9701:93;;9803;9892:3;9803:93;:::i;:::-;9921:3;9916;9912:13;9905:20;;9527:404;;;:::o;9937:400::-;10097:3;10118:84;10200:1;10195:3;10118:84;:::i;:::-;10111:91;;10211:93;10300:3;10211:93;:::i;:::-;10329:1;10324:3;10320:11;10313:18;;9937:400;;;:::o;10343:366::-;10485:3;10506:67;10570:2;10565:3;10506:67;:::i;:::-;10499:74;;10582:93;10671:3;10582:93;:::i;:::-;10700:2;10695:3;10691:12;10684:19;;10343:366;;;:::o;10715:::-;10857:3;10878:67;10942:2;10937:3;10878:67;:::i;:::-;10871:74;;10954:93;11043:3;10954:93;:::i;:::-;11072:2;11067:3;11063:12;11056:19;;10715:366;;;:::o;11087:402::-;11247:3;11268:85;11350:2;11345:3;11268:85;:::i;:::-;11261:92;;11362:93;11451:3;11362:93;:::i;:::-;11480:2;11475:3;11471:12;11464:19;;11087:402;;;:::o;11495:366::-;11637:3;11658:67;11722:2;11717:3;11658:67;:::i;:::-;11651:74;;11734:93;11823:3;11734:93;:::i;:::-;11852:2;11847:3;11843:12;11836:19;;11495:366;;;:::o;11867:::-;12009:3;12030:67;12094:2;12089:3;12030:67;:::i;:::-;12023:74;;12106:93;12195:3;12106:93;:::i;:::-;12224:2;12219:3;12215:12;12208:19;;11867:366;;;:::o;12239:::-;12381:3;12402:67;12466:2;12461:3;12402:67;:::i;:::-;12395:74;;12478:93;12567:3;12478:93;:::i;:::-;12596:2;12591:3;12587:12;12580:19;;12239:366;;;:::o;12611:::-;12753:3;12774:67;12838:2;12833:3;12774:67;:::i;:::-;12767:74;;12850:93;12939:3;12850:93;:::i;:::-;12968:2;12963:3;12959:12;12952:19;;12611:366;;;:::o;12983:::-;13125:3;13146:67;13210:2;13205:3;13146:67;:::i;:::-;13139:74;;13222:93;13311:3;13222:93;:::i;:::-;13340:2;13335:3;13331:12;13324:19;;12983:366;;;:::o;13355:402::-;13515:3;13536:85;13618:2;13613:3;13536:85;:::i;:::-;13529:92;;13630:93;13719:3;13630:93;:::i;:::-;13748:2;13743:3;13739:12;13732:19;;13355:402;;;:::o;13763:366::-;13905:3;13926:67;13990:2;13985:3;13926:67;:::i;:::-;13919:74;;14002:93;14091:3;14002:93;:::i;:::-;14120:2;14115:3;14111:12;14104:19;;13763:366;;;:::o;14135:400::-;14295:3;14316:84;14398:1;14393:3;14316:84;:::i;:::-;14309:91;;14409:93;14498:3;14409:93;:::i;:::-;14527:1;14522:3;14518:11;14511:18;;14135:400;;;:::o;14541:366::-;14683:3;14704:67;14768:2;14763:3;14704:67;:::i;:::-;14697:74;;14780:93;14869:3;14780:93;:::i;:::-;14898:2;14893:3;14889:12;14882:19;;14541:366;;;:::o;14913:::-;15055:3;15076:67;15140:2;15135:3;15076:67;:::i;:::-;15069:74;;15152:93;15241:3;15152:93;:::i;:::-;15270:2;15265:3;15261:12;15254:19;;14913:366;;;:::o;15285:402::-;15445:3;15466:85;15548:2;15543:3;15466:85;:::i;:::-;15459:92;;15560:93;15649:3;15560:93;:::i;:::-;15678:2;15673:3;15669:12;15662:19;;15285:402;;;:::o;15693:366::-;15835:3;15856:67;15920:2;15915:3;15856:67;:::i;:::-;15849:74;;15932:93;16021:3;15932:93;:::i;:::-;16050:2;16045:3;16041:12;16034:19;;15693:366;;;:::o;16065:::-;16207:3;16228:67;16292:2;16287:3;16228:67;:::i;:::-;16221:74;;16304:93;16393:3;16304:93;:::i;:::-;16422:2;16417:3;16413:12;16406:19;;16065:366;;;:::o;16437:::-;16579:3;16600:67;16664:2;16659:3;16600:67;:::i;:::-;16593:74;;16676:93;16765:3;16676:93;:::i;:::-;16794:2;16789:3;16785:12;16778:19;;16437:366;;;:::o;16809:::-;16951:3;16972:67;17036:2;17031:3;16972:67;:::i;:::-;16965:74;;17048:93;17137:3;17048:93;:::i;:::-;17166:2;17161:3;17157:12;17150:19;;16809:366;;;:::o;17181:::-;17323:3;17344:67;17408:2;17403:3;17344:67;:::i;:::-;17337:74;;17420:93;17509:3;17420:93;:::i;:::-;17538:2;17533:3;17529:12;17522:19;;17181:366;;;:::o;17553:402::-;17713:3;17734:85;17816:2;17811:3;17734:85;:::i;:::-;17727:92;;17828:93;17917:3;17828:93;:::i;:::-;17946:2;17941:3;17937:12;17930:19;;17553:402;;;:::o;17961:366::-;18103:3;18124:67;18188:2;18183:3;18124:67;:::i;:::-;18117:74;;18200:93;18289:3;18200:93;:::i;:::-;18318:2;18313:3;18309:12;18302:19;;17961:366;;;:::o;18333:::-;18475:3;18496:67;18560:2;18555:3;18496:67;:::i;:::-;18489:74;;18572:93;18661:3;18572:93;:::i;:::-;18690:2;18685:3;18681:12;18674:19;;18333:366;;;:::o;18705:402::-;18865:3;18886:85;18968:2;18963:3;18886:85;:::i;:::-;18879:92;;18980:93;19069:3;18980:93;:::i;:::-;19098:2;19093:3;19089:12;19082:19;;18705:402;;;:::o;19113:366::-;19255:3;19276:67;19340:2;19335:3;19276:67;:::i;:::-;19269:74;;19352:93;19441:3;19352:93;:::i;:::-;19470:2;19465:3;19461:12;19454:19;;19113:366;;;:::o;19485:118::-;19572:24;19590:5;19572:24;:::i;:::-;19567:3;19560:37;19485:118;;:::o;19609:275::-;19741:3;19763:95;19854:3;19845:6;19763:95;:::i;:::-;19756:102;;19875:3;19868:10;;19609:275;;;;:::o;19890:1235::-;20310:3;20332:95;20423:3;20414:6;20332:95;:::i;:::-;20325:102;;20444:95;20535:3;20526:6;20444:95;:::i;:::-;20437:102;;20556:95;20647:3;20638:6;20556:95;:::i;:::-;20549:102;;20668:95;20759:3;20750:6;20668:95;:::i;:::-;20661:102;;20780:95;20871:3;20862:6;20780:95;:::i;:::-;20773:102;;20892:95;20983:3;20974:6;20892:95;:::i;:::-;20885:102;;21004:95;21095:3;21086:6;21004:95;:::i;:::-;20997:102;;21116:3;21109:10;;19890:1235;;;;;;;;;;:::o;21131:1395::-;21599:3;21621:95;21712:3;21703:6;21621:95;:::i;:::-;21614:102;;21733:95;21824:3;21815:6;21733:95;:::i;:::-;21726:102;;21845:95;21936:3;21927:6;21845:95;:::i;:::-;21838:102;;21957:95;22048:3;22039:6;21957:95;:::i;:::-;21950:102;;22069:95;22160:3;22151:6;22069:95;:::i;:::-;22062:102;;22181:95;22272:3;22263:6;22181:95;:::i;:::-;22174:102;;22293:95;22384:3;22375:6;22293:95;:::i;:::-;22286:102;;22405:95;22496:3;22487:6;22405:95;:::i;:::-;22398:102;;22517:3;22510:10;;21131:1395;;;;;;;;;;;:::o;22532:1555::-;23048:3;23070:95;23161:3;23152:6;23070:95;:::i;:::-;23063:102;;23182:95;23273:3;23264:6;23182:95;:::i;:::-;23175:102;;23294:95;23385:3;23376:6;23294:95;:::i;:::-;23287:102;;23406:95;23497:3;23488:6;23406:95;:::i;:::-;23399:102;;23518:95;23609:3;23600:6;23518:95;:::i;:::-;23511:102;;23630:95;23721:3;23712:6;23630:95;:::i;:::-;23623:102;;23742:95;23833:3;23824:6;23742:95;:::i;:::-;23735:102;;23854:95;23945:3;23936:6;23854:95;:::i;:::-;23847:102;;23966:95;24057:3;24048:6;23966:95;:::i;:::-;23959:102;;24078:3;24071:10;;22532:1555;;;;;;;;;;;;:::o;24093:541::-;24326:3;24348:148;24492:3;24348:148;:::i;:::-;24341:155;;24513:95;24604:3;24595:6;24513:95;:::i;:::-;24506:102;;24625:3;24618:10;;24093:541;;;;:::o;24640:::-;24873:3;24895:148;25039:3;24895:148;:::i;:::-;24888:155;;25060:95;25151:3;25142:6;25060:95;:::i;:::-;25053:102;;25172:3;25165:10;;24640:541;;;;:::o;25187:::-;25420:3;25442:148;25586:3;25442:148;:::i;:::-;25435:155;;25607:95;25698:3;25689:6;25607:95;:::i;:::-;25600:102;;25719:3;25712:10;;25187:541;;;;:::o;25734:::-;25967:3;25989:148;26133:3;25989:148;:::i;:::-;25982:155;;26154:95;26245:3;26236:6;26154:95;:::i;:::-;26147:102;;26266:3;26259:10;;25734:541;;;;:::o;26281:1659::-;26913:3;26935:148;27079:3;26935:148;:::i;:::-;26928:155;;27100:95;27191:3;27182:6;27100:95;:::i;:::-;27093:102;;27212:148;27356:3;27212:148;:::i;:::-;27205:155;;27377:95;27468:3;27459:6;27377:95;:::i;:::-;27370:102;;27489:148;27633:3;27489:148;:::i;:::-;27482:155;;27654:95;27745:3;27736:6;27654:95;:::i;:::-;27647:102;;27766:148;27910:3;27766:148;:::i;:::-;27759:155;;27931:3;27924:10;;26281:1659;;;;;;:::o;27946:541::-;28179:3;28201:148;28345:3;28201:148;:::i;:::-;28194:155;;28366:95;28457:3;28448:6;28366:95;:::i;:::-;28359:102;;28478:3;28471:10;;27946:541;;;;:::o;28493:::-;28726:3;28748:148;28892:3;28748:148;:::i;:::-;28741:155;;28913:95;29004:3;28995:6;28913:95;:::i;:::-;28906:102;;29025:3;29018:10;;28493:541;;;;:::o;29040:222::-;29133:4;29171:2;29160:9;29156:18;29148:26;;29184:71;29252:1;29241:9;29237:17;29228:6;29184:71;:::i;:::-;29040:222;;;;:::o;29268:640::-;29463:4;29501:3;29490:9;29486:19;29478:27;;29515:71;29583:1;29572:9;29568:17;29559:6;29515:71;:::i;:::-;29596:72;29664:2;29653:9;29649:18;29640:6;29596:72;:::i;:::-;29678;29746:2;29735:9;29731:18;29722:6;29678:72;:::i;:::-;29797:9;29791:4;29787:20;29782:2;29771:9;29767:18;29760:48;29825:76;29896:4;29887:6;29825:76;:::i;:::-;29817:84;;29268:640;;;;;;;:::o;29914:210::-;30001:4;30039:2;30028:9;30024:18;30016:26;;30052:65;30114:1;30103:9;30099:17;30090:6;30052:65;:::i;:::-;29914:210;;;;:::o;30130:313::-;30243:4;30281:2;30270:9;30266:18;30258:26;;30330:9;30324:4;30320:20;30316:1;30305:9;30301:17;30294:47;30358:78;30431:4;30422:6;30358:78;:::i;:::-;30350:86;;30130:313;;;;:::o;30449:419::-;30615:4;30653:2;30642:9;30638:18;30630:26;;30702:9;30696:4;30692:20;30688:1;30677:9;30673:17;30666:47;30730:131;30856:4;30730:131;:::i;:::-;30722:139;;30449:419;;;:::o;30874:::-;31040:4;31078:2;31067:9;31063:18;31055:26;;31127:9;31121:4;31117:20;31113:1;31102:9;31098:17;31091:47;31155:131;31281:4;31155:131;:::i;:::-;31147:139;;30874:419;;;:::o;31299:::-;31465:4;31503:2;31492:9;31488:18;31480:26;;31552:9;31546:4;31542:20;31538:1;31527:9;31523:17;31516:47;31580:131;31706:4;31580:131;:::i;:::-;31572:139;;31299:419;;;:::o;31724:::-;31890:4;31928:2;31917:9;31913:18;31905:26;;31977:9;31971:4;31967:20;31963:1;31952:9;31948:17;31941:47;32005:131;32131:4;32005:131;:::i;:::-;31997:139;;31724:419;;;:::o;32149:::-;32315:4;32353:2;32342:9;32338:18;32330:26;;32402:9;32396:4;32392:20;32388:1;32377:9;32373:17;32366:47;32430:131;32556:4;32430:131;:::i;:::-;32422:139;;32149:419;;;:::o;32574:::-;32740:4;32778:2;32767:9;32763:18;32755:26;;32827:9;32821:4;32817:20;32813:1;32802:9;32798:17;32791:47;32855:131;32981:4;32855:131;:::i;:::-;32847:139;;32574:419;;;:::o;32999:::-;33165:4;33203:2;33192:9;33188:18;33180:26;;33252:9;33246:4;33242:20;33238:1;33227:9;33223:17;33216:47;33280:131;33406:4;33280:131;:::i;:::-;33272:139;;32999:419;;;:::o;33424:::-;33590:4;33628:2;33617:9;33613:18;33605:26;;33677:9;33671:4;33667:20;33663:1;33652:9;33648:17;33641:47;33705:131;33831:4;33705:131;:::i;:::-;33697:139;;33424:419;;;:::o;33849:::-;34015:4;34053:2;34042:9;34038:18;34030:26;;34102:9;34096:4;34092:20;34088:1;34077:9;34073:17;34066:47;34130:131;34256:4;34130:131;:::i;:::-;34122:139;;33849:419;;;:::o;34274:::-;34440:4;34478:2;34467:9;34463:18;34455:26;;34527:9;34521:4;34517:20;34513:1;34502:9;34498:17;34491:47;34555:131;34681:4;34555:131;:::i;:::-;34547:139;;34274:419;;;:::o;34699:::-;34865:4;34903:2;34892:9;34888:18;34880:26;;34952:9;34946:4;34942:20;34938:1;34927:9;34923:17;34916:47;34980:131;35106:4;34980:131;:::i;:::-;34972:139;;34699:419;;;:::o;35124:::-;35290:4;35328:2;35317:9;35313:18;35305:26;;35377:9;35371:4;35367:20;35363:1;35352:9;35348:17;35341:47;35405:131;35531:4;35405:131;:::i;:::-;35397:139;;35124:419;;;:::o;35549:::-;35715:4;35753:2;35742:9;35738:18;35730:26;;35802:9;35796:4;35792:20;35788:1;35777:9;35773:17;35766:47;35830:131;35956:4;35830:131;:::i;:::-;35822:139;;35549:419;;;:::o;35974:::-;36140:4;36178:2;36167:9;36163:18;36155:26;;36227:9;36221:4;36217:20;36213:1;36202:9;36198:17;36191:47;36255:131;36381:4;36255:131;:::i;:::-;36247:139;;35974:419;;;:::o;36399:::-;36565:4;36603:2;36592:9;36588:18;36580:26;;36652:9;36646:4;36642:20;36638:1;36627:9;36623:17;36616:47;36680:131;36806:4;36680:131;:::i;:::-;36672:139;;36399:419;;;:::o;36824:::-;36990:4;37028:2;37017:9;37013:18;37005:26;;37077:9;37071:4;37067:20;37063:1;37052:9;37048:17;37041:47;37105:131;37231:4;37105:131;:::i;:::-;37097:139;;36824:419;;;:::o;37249:::-;37415:4;37453:2;37442:9;37438:18;37430:26;;37502:9;37496:4;37492:20;37488:1;37477:9;37473:17;37466:47;37530:131;37656:4;37530:131;:::i;:::-;37522:139;;37249:419;;;:::o;37674:::-;37840:4;37878:2;37867:9;37863:18;37855:26;;37927:9;37921:4;37917:20;37913:1;37902:9;37898:17;37891:47;37955:131;38081:4;37955:131;:::i;:::-;37947:139;;37674:419;;;:::o;38099:::-;38265:4;38303:2;38292:9;38288:18;38280:26;;38352:9;38346:4;38342:20;38338:1;38327:9;38323:17;38316:47;38380:131;38506:4;38380:131;:::i;:::-;38372:139;;38099:419;;;:::o;38524:::-;38690:4;38728:2;38717:9;38713:18;38705:26;;38777:9;38771:4;38767:20;38763:1;38752:9;38748:17;38741:47;38805:131;38931:4;38805:131;:::i;:::-;38797:139;;38524:419;;;:::o;38949:::-;39115:4;39153:2;39142:9;39138:18;39130:26;;39202:9;39196:4;39192:20;39188:1;39177:9;39173:17;39166:47;39230:131;39356:4;39230:131;:::i;:::-;39222:139;;38949:419;;;:::o;39374:::-;39540:4;39578:2;39567:9;39563:18;39555:26;;39627:9;39621:4;39617:20;39613:1;39602:9;39598:17;39591:47;39655:131;39781:4;39655:131;:::i;:::-;39647:139;;39374:419;;;:::o;39799:222::-;39892:4;39930:2;39919:9;39915:18;39907:26;;39943:71;40011:1;40000:9;39996:17;39987:6;39943:71;:::i;:::-;39799:222;;;;:::o;40027:129::-;40061:6;40088:20;;:::i;:::-;40078:30;;40117:33;40145:4;40137:6;40117:33;:::i;:::-;40027:129;;;:::o;40162:75::-;40195:6;40228:2;40222:9;40212:19;;40162:75;:::o;40243:307::-;40304:4;40394:18;40386:6;40383:30;40380:56;;;40416:18;;:::i;:::-;40380:56;40454:29;40476:6;40454:29;:::i;:::-;40446:37;;40538:4;40532;40528:15;40520:23;;40243:307;;;:::o;40556:98::-;40607:6;40641:5;40635:12;40625:22;;40556:98;;;:::o;40660:99::-;40712:6;40746:5;40740:12;40730:22;;40660:99;;;:::o;40765:168::-;40848:11;40882:6;40877:3;40870:19;40922:4;40917:3;40913:14;40898:29;;40765:168;;;;:::o;40939:169::-;41023:11;41057:6;41052:3;41045:19;41097:4;41092:3;41088:14;41073:29;;40939:169;;;;:::o;41114:148::-;41216:11;41253:3;41238:18;;41114:148;;;;:::o;41268:305::-;41308:3;41327:20;41345:1;41327:20;:::i;:::-;41322:25;;41361:20;41379:1;41361:20;:::i;:::-;41356:25;;41515:1;41447:66;41443:74;41440:1;41437:81;41434:107;;;41521:18;;:::i;:::-;41434:107;41565:1;41562;41558:9;41551:16;;41268:305;;;;:::o;41579:185::-;41619:1;41636:20;41654:1;41636:20;:::i;:::-;41631:25;;41670:20;41688:1;41670:20;:::i;:::-;41665:25;;41709:1;41699:35;;41714:18;;:::i;:::-;41699:35;41756:1;41753;41749:9;41744:14;;41579:185;;;;:::o;41770:348::-;41810:7;41833:20;41851:1;41833:20;:::i;:::-;41828:25;;41867:20;41885:1;41867:20;:::i;:::-;41862:25;;42055:1;41987:66;41983:74;41980:1;41977:81;41972:1;41965:9;41958:17;41954:105;41951:131;;;42062:18;;:::i;:::-;41951:131;42110:1;42107;42103:9;42092:20;;41770:348;;;;:::o;42124:191::-;42164:4;42184:20;42202:1;42184:20;:::i;:::-;42179:25;;42218:20;42236:1;42218:20;:::i;:::-;42213:25;;42257:1;42254;42251:8;42248:34;;;42262:18;;:::i;:::-;42248:34;42307:1;42304;42300:9;42292:17;;42124:191;;;;:::o;42321:96::-;42358:7;42387:24;42405:5;42387:24;:::i;:::-;42376:35;;42321:96;;;:::o;42423:90::-;42457:7;42500:5;42493:13;42486:21;42475:32;;42423:90;;;:::o;42519:149::-;42555:7;42595:66;42588:5;42584:78;42573:89;;42519:149;;;:::o;42674:126::-;42711:7;42751:42;42744:5;42740:54;42729:65;;42674:126;;;:::o;42806:77::-;42843:7;42872:5;42861:16;;42806:77;;;:::o;42889:154::-;42973:6;42968:3;42963;42950:30;43035:1;43026:6;43021:3;43017:16;43010:27;42889:154;;;:::o;43049:307::-;43117:1;43127:113;43141:6;43138:1;43135:13;43127:113;;;43226:1;43221:3;43217:11;43211:18;43207:1;43202:3;43198:11;43191:39;43163:2;43160:1;43156:10;43151:15;;43127:113;;;43258:6;43255:1;43252:13;43249:101;;;43338:1;43329:6;43324:3;43320:16;43313:27;43249:101;43098:258;43049:307;;;:::o;43362:320::-;43406:6;43443:1;43437:4;43433:12;43423:22;;43490:1;43484:4;43480:12;43511:18;43501:81;;43567:4;43559:6;43555:17;43545:27;;43501:81;43629:2;43621:6;43618:14;43598:18;43595:38;43592:84;;;43648:18;;:::i;:::-;43592:84;43413:269;43362:320;;;:::o;43688:281::-;43771:27;43793:4;43771:27;:::i;:::-;43763:6;43759:40;43901:6;43889:10;43886:22;43865:18;43853:10;43850:34;43847:62;43844:88;;;43912:18;;:::i;:::-;43844:88;43952:10;43948:2;43941:22;43731:238;43688:281;;:::o;43975:233::-;44014:3;44037:24;44055:5;44037:24;:::i;:::-;44028:33;;44083:66;44076:5;44073:77;44070:103;;;44153:18;;:::i;:::-;44070:103;44200:1;44193:5;44189:13;44182:20;;43975:233;;;:::o;44214:176::-;44246:1;44263:20;44281:1;44263:20;:::i;:::-;44258:25;;44297:20;44315:1;44297:20;:::i;:::-;44292:25;;44336:1;44326:35;;44341:18;;:::i;:::-;44326:35;44382:1;44379;44375:9;44370:14;;44214:176;;;;:::o;44396:180::-;44444:77;44441:1;44434:88;44541:4;44538:1;44531:15;44565:4;44562:1;44555:15;44582:180;44630:77;44627:1;44620:88;44727:4;44724:1;44717:15;44751:4;44748:1;44741:15;44768:180;44816:77;44813:1;44806:88;44913:4;44910:1;44903:15;44937:4;44934:1;44927:15;44954:180;45002:77;44999:1;44992:88;45099:4;45096:1;45089:15;45123:4;45120:1;45113:15;45140:180;45188:77;45185:1;45178:88;45285:4;45282:1;45275:15;45309:4;45306:1;45299:15;45326:180;45374:77;45371:1;45364:88;45471:4;45468:1;45461:15;45495:4;45492:1;45485:15;45512:117;45621:1;45618;45611:12;45635:117;45744:1;45741;45734:12;45758:117;45867:1;45864;45857:12;45881:117;45990:1;45987;45980:12;46004:102;46045:6;46096:2;46092:7;46087:2;46080:5;46076:14;46072:28;46062:38;;46004:102;;;:::o;46112:230::-;46252:34;46248:1;46240:6;46236:14;46229:58;46321:13;46316:2;46308:6;46304:15;46297:38;46112:230;:::o;46348:237::-;46488:34;46484:1;46476:6;46472:14;46465:58;46557:20;46552:2;46544:6;46540:15;46533:45;46348:237;:::o;46591:225::-;46731:34;46727:1;46719:6;46715:14;46708:58;46800:8;46795:2;46787:6;46783:15;46776:33;46591:225;:::o;46822:161::-;46962:13;46958:1;46950:6;46946:14;46939:37;46822:161;:::o;46989:160::-;47129:12;47125:1;47117:6;47113:14;47106:36;46989:160;:::o;47155:178::-;47295:30;47291:1;47283:6;47279:14;47272:54;47155:178;:::o;47339:663::-;47479:66;47475:1;47467:6;47463:14;47456:90;47580:34;47575:2;47567:6;47563:15;47556:59;47649:34;47644:2;47636:6;47632:15;47625:59;47718:34;47713:2;47705:6;47701:15;47694:59;47788:34;47782:3;47774:6;47770:16;47763:60;47858:34;47852:3;47844:6;47840:16;47833:60;47928:66;47922:3;47914:6;47910:16;47903:92;47339:663;:::o;48008:159::-;48148:11;48144:1;48136:6;48132:14;48125:35;48008:159;:::o;48173:223::-;48313:34;48309:1;48301:6;48297:14;48290:58;48382:6;48377:2;48369:6;48365:15;48358:31;48173:223;:::o;48402:175::-;48542:27;48538:1;48530:6;48526:14;48519:51;48402:175;:::o;48583:160::-;48723:12;48719:1;48711:6;48707:14;48700:36;48583:160;:::o;48749:231::-;48889:34;48885:1;48877:6;48873:14;48866:58;48958:14;48953:2;48945:6;48941:15;48934:39;48749:231;:::o;48986:243::-;49126:34;49122:1;49114:6;49110:14;49103:58;49195:26;49190:2;49182:6;49178:15;49171:51;48986:243;:::o;49235:229::-;49375:34;49371:1;49363:6;49359:14;49352:58;49444:12;49439:2;49431:6;49427:15;49420:37;49235:229;:::o;49470:228::-;49610:34;49606:1;49598:6;49594:14;49587:58;49679:11;49674:2;49666:6;49662:15;49655:36;49470:228;:::o;49704:181::-;49844:33;49840:1;49832:6;49828:14;49821:57;49704:181;:::o;49891:255::-;50031:66;50027:1;50019:6;50015:14;50008:90;50132:6;50127:2;50119:6;50115:15;50108:31;49891:255;:::o;50152:236::-;50292:34;50288:1;50280:6;50276:14;50269:58;50361:19;50356:2;50348:6;50344:15;50337:44;50152:236;:::o;50394:214::-;50534:66;50530:1;50522:6;50518:14;50511:90;50394:214;:::o;50614:182::-;50754:34;50750:1;50742:6;50738:14;50731:58;50614:182;:::o;50802:173::-;50942:25;50938:1;50930:6;50926:14;50919:49;50802:173;:::o;50981:214::-;51121:66;51117:1;51109:6;51105:14;51098:90;50981:214;:::o;51201:231::-;51341:34;51337:1;51329:6;51325:14;51318:58;51410:14;51405:2;51397:6;51393:15;51386:39;51201:231;:::o;51438:182::-;51578:34;51574:1;51566:6;51562:14;51555:58;51438:182;:::o;51626:228::-;51766:34;51762:1;51754:6;51750:14;51743:58;51835:11;51830:2;51822:6;51818:15;51811:36;51626:228;:::o;51860:178::-;52000:30;51996:1;51988:6;51984:14;51977:54;51860:178;:::o;52044:220::-;52184:34;52180:1;52172:6;52168:14;52161:58;52253:3;52248:2;52240:6;52236:15;52229:28;52044:220;:::o;52270:179::-;52410:31;52406:1;52398:6;52394:14;52387:55;52270:179;:::o;52455:236::-;52595:34;52591:1;52583:6;52579:14;52572:58;52664:19;52659:2;52651:6;52647:15;52640:44;52455:236;:::o;52697:231::-;52837:34;52833:1;52825:6;52821:14;52814:58;52906:14;52901:2;52893:6;52889:15;52882:39;52697:231;:::o;52934:160::-;53074:12;53070:1;53062:6;53058:14;53051:36;52934:160;:::o;53100:177::-;53240:29;53236:1;53228:6;53224:14;53217:53;53100:177;:::o;53283:122::-;53356:24;53374:5;53356:24;:::i;:::-;53349:5;53346:35;53336:63;;53395:1;53392;53385:12;53336:63;53283:122;:::o;53411:116::-;53481:21;53496:5;53481:21;:::i;:::-;53474:5;53471:32;53461:60;;53517:1;53514;53507:12;53461:60;53411:116;:::o;53533:120::-;53605:23;53622:5;53605:23;:::i;:::-;53598:5;53595:34;53585:62;;53643:1;53640;53633:12;53585:62;53533:120;:::o;53659:122::-;53732:24;53750:5;53732:24;:::i;:::-;53725:5;53722:35;53712:63;;53771:1;53768;53761:12;53712:63;53659:122;:::o

Swarm Source

ipfs://60ea47e9c05d32ad382f38078778bbc62187432af86d400309c8aeab12dfa219
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.