ETH Price: $3,459.75 (+1.21%)

Token

Etherwriter v1.1 (EWR1)
 

Overview

Max Total Supply

0 EWR1

Holders

21

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
shibboleth.eth
Balance
1 EWR1
0x2B0386bbDd314d8356C21f39BE2491F975BD6361
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Etherwriter

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-26
*/

// SPDX-License-Identifier: CC-BY-4.0
/*

░█▀▀░▀█▀░█░█░█▀▀░█▀▄░█░█░█▀▄░▀█▀░▀█▀░█▀▀░█▀▄
░█▀▀░░█░░█▀█░█▀▀░█▀▄░█▄█░█▀▄░░█░░░█░░█▀▀░█▀▄
░▀▀▀░░▀░░▀░▀░▀▀▀░▀░▀░▀░▀░▀░▀░▀▀▀░░▀░░▀▀▀░▀░▀

v1.0 - 2022

written by Ariel Sebastián Becker

NOTICE
======

This is a custom contract, tailored and pruned to fit Spurious Dragon's limit of 24,576 bytes.
Because of that, you will see some modifications made to third-party libraries such as OpenZeppelin's.
The reason behind that is I needed to accomodate a SVG generator complete with an embedded font and custom colors.

THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

THE AUTHOR WILL NOT BE LIABLE, UNDER ANY CIRCUMSTANCE, FOR THE CONTENT STORED BY THE OWNERS.

*/

pragma solidity ^0.8.17;
interface IERC165 {
	function supportsInterface(bytes4 interfaceId) external view returns(bool);
}

pragma solidity ^0.8.17;
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;
}

pragma solidity ^0.8.17;
interface IERC721Receiver {
	function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns(bytes4);
}

pragma solidity ^0.8.17;
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, "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, "Insufficient balance!");
		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) internal 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);
			}
		}
	}
}

pragma solidity ^0.8.17;
abstract contract Context {
	function _msgSender() internal view virtual returns(address) {
		return msg.sender;
	}

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

pragma solidity ^0.8.17;
library Strings {
	bytes16 private constant _SYMBOLS = "0123456789abcdef";
	uint8 private constant _ADDRESS_LENGTH = 20;

	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, 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] = _SYMBOLS[value & 0xf];
			value >>= 4;
		}

		return string(buffer);
	}

	function toHexString(address addr) internal pure returns(string memory) {
		return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
	}

	function stringLength(string memory s) internal pure returns(uint256) {
		return bytes(s).length;
	}
}

pragma solidity ^0.8.17;
abstract contract ERC165 is IERC165 {
	function supportsInterface(bytes4 interfaceId) public view virtual override returns(bool) {
		return interfaceId == type(IERC165).interfaceId;
	}
}

pragma solidity ^0.8.17;
contract ERC721 is Context, ERC165, IERC721 {
	using Address for address;
	using Strings for uint256;

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

	function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns(bool) {
		return
		interfaceId == type(IERC721).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), "Not minted yet!");
		return owner;
	}

	function approve(address to, uint256 tokenId) public virtual override {
		address owner = ERC721.ownerOf(tokenId);
		require(to != owner, "Not authorized!");
		require(
			_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
				"Not authorized!"
		);
		_approve(to, tokenId);
	}

	function getApproved(uint256 tokenId) public view virtual override returns(address) {
		require(_exists(tokenId), "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 {
		require(_isApprovedOrOwner(_msgSender(), tokenId), "Not authorized!");
		_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), "Not authorized!");
		_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), "Attempted 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), "Token does not exist!");
		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 {
		_balances[to] += 1;
		_owners[tokenId] = to;
		emit Transfer(address(0), to, tokenId);
	}

	function _transfer(address from, address to, uint256 tokenId) internal virtual {
		require(ERC721.ownerOf(tokenId) == from, "Not authorized!");
		require(to != address(0), "Cannot transfer to zero addy!");
		require(to != address(0), "Cannot transfer to zero addy!");
		require(tokenId > 0, "Cannot transfer token 0!");
		_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.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;
		}
	}
}

pragma solidity ^0.8.17;
contract Ownable {
	string public constant NOT_CURRENT_OWNER = "018001";
	string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002";
	address public owner;
	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor() {
		owner = msg.sender;
	}

	modifier onlyOwner() {
		require(msg.sender == owner, NOT_CURRENT_OWNER);
		_;
	}

	function transferOwnership(address _newOwner) public onlyOwner {
		require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS);
		emit OwnershipTransferred(owner, _newOwner);
		owner = _newOwner;
	}
}

pragma solidity ^0.8.17;
library Base64 {
	string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

	function encode(bytes memory data) internal pure returns(string memory) {
		if(data.length == 0) return "";
		string memory table = _TABLE;
		string memory result = new string(4 * ((data.length + 2) / 3));

		assembly {
			let tablePtr := add(table, 1)
			let resultPtr := add(result, 32)
			for {
				let dataPtr := data
				let endPtr := add(data, mload(data))
			} lt(dataPtr, endPtr) {

			} {
				dataPtr := add(dataPtr, 3)
				let input := mload(dataPtr)
				mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
				mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
				mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
				mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
			}

			switch mod(mload(data), 3)
			case 1 {
				mstore8(sub(resultPtr, 1), 0x3d)
				mstore8(sub(resultPtr, 2), 0x3d)
			}
			case 2 {
				mstore8(sub(resultPtr, 1), 0x3d)
			}
		}

		return result;
	}
}

pragma solidity ^0.8.17;
contract Etherwriter is Context, ERC721 {
	struct Texts {
		string texta;
		string textb;
		string textc;
		string textd;
		string color;
	}

	bool private _paused = true;

	uint256 private _mintFee = 10000000000000000; //10000000000000000, 0.01 ETH
	uint256 private _mintedTokens = 0;
	uint256 private _maxCap = 10000; // 0 to 9999.
	address private _smartContractOwner = 0x4DaE7E6c0Ca196643012cDc526bBc6b445A2ca59;

	mapping(uint256 => Texts) private tokenData;

	string private _name = 'Etherwriter v1.1';
	string private _symbol = 'EWR1';
	string private _description = '140 characters of pure freedom.';
	string private _strWebsite = 'https://arielbecker.com/etherwriter/';
	string private _strCoverImage = string(abi.encodePacked(_strWebsite, 'logo.png'));
	string private _strPaused = "Contract is paused.";
	string private _strNotAuthorized = 'Not authorized!';
	string private _strNotEnoughETH = 'Not enough ETH!';
	string private _strTransferFailed = 'Transfer failed.';
	string private _strOutOfBounds = 'Out of bounds!';
	string private _strTextTooLong = 'Text too long!';
	string private _strContractJSON = string(abi.encodePacked(
		'{',
			'"name": "', _name, '",',
			'"description": "', _description, '",',
			'"image": "', _strCoverImage, '",',
			'"external_link": "', _strWebsite, '",',
			'"seller_fee_basis_points": 500,',
			'"fee_recipient": "0x4DaE7E6c0Ca196643012cDc526bBc6b445A2ca59"',
		'}'
	));

	string private _font = '@font-face{font-family:"Xe";font-style:normal;font-weight:400;font-stretch:100%;src:url(data:font/woff2;base64,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) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC, U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}';

	event ChangedText(address indexed Owner, uint256 indexed tokenId, string firstLine, string secondLine, string thirdLine, string fourthLine);

	modifier onlyAdmin {
		require(_msgSender() == _smartContractOwner, _strNotAuthorized);
		_;
	}

	modifier onlyOwner(uint256 tokenId) {
		require(_msgSender() == ownerOf(tokenId), _strNotAuthorized);
		_;
	}

	constructor() ERC721() {
		_smartContractOwner = msg.sender;
	}

	// Aux internal functions

	function _createTextBlock(uint256 tokenId, uint256 level) private view returns(string memory) {
		string memory text = tokenData[tokenId].texta;
		if(level == 1) {
			text = tokenData[tokenId].textb;
		}
		if(level == 2) {
			text = tokenData[tokenId].textc;
		}
		else if(level == 3) {
			text = tokenData[tokenId].textd;
		}

		return string(
			abi.encodePacked(
				'<text visibility="hidden" x="100" y="', Strings.toString(level), '90" font-family="Xe" font-size="40" fill="', tokenData[tokenId].color, '">',
				text
			)
		);
	}

	function _determineColor(uint256 _tokenId) private pure returns(string memory) {
		string memory _color = '#888888';
		if(_tokenId == 0) {
			// 1, token 0, electric pink, 0.01%, non-transferrable.
			_color = '#F9016A';
		}
		else if(_tokenId > 0 && _tokenId < 11) {
			// 10, 1 to 10, phosphor cerulean, 0.1%.
			_color = '#01B3F9';
		}
		else if(_tokenId > 10 && _tokenId < 111) {
			//100, 11 to 110, phosphor red, 1%.
			_color = '#FF1900';
		}
		else if(_tokenId > 110 && _tokenId < 1111) {
			//1000, 111 to 1110, phosphor green, 10%.
			_color = '#19FF00';
		}
		// 8889, 1111 to 9999, light gray, 88.89%.

		return _color;
	}

	function modifyTokenData(uint256 tokenId, string memory a, string memory b, string memory c, string memory d) private {
		require(Strings.stringLength(a) < 41, _strTextTooLong);
		require(Strings.stringLength(b) < 41, _strTextTooLong);
		require(Strings.stringLength(c) < 41, _strTextTooLong);
		require(Strings.stringLength(d) < 41, _strTextTooLong);

		tokenData[tokenId].texta = a;
		tokenData[tokenId].textb = b;
		tokenData[tokenId].textc = c;
		tokenData[tokenId].textd = d;
	}

	// Main public functions

	/// @dev Use this function to change the token's text.
	///	 Note: Only token's owner can change this.
	/// @param tokenId token ID.
	/// @param firstLine First line of text. Must be 40 characters or less.
	/// @param secondLine Second line of text. Must be 40 characters or less.
	/// @param thirdLine Third line of text. Must be 40 characters or less.
	/// @param fourthLine Fourth line of text. Must be 40 characters or less.
	function changeTokenText(uint256 tokenId, string memory firstLine, string memory secondLine, string memory thirdLine, string memory fourthLine) onlyOwner(tokenId) public {
		require(tokenId < _mintedTokens, _strOutOfBounds);
		modifyTokenData(tokenId, firstLine, secondLine, thirdLine, fourthLine);
		emit ChangedText(_msgSender(), tokenId, firstLine, secondLine, thirdLine, fourthLine);
	}

	/// @dev Changes the website URI.
	///	 Note: Only contract's owner can change this.
	/// @param _newWebsite New URI.
	function changeWebURI(string memory _newWebsite) onlyAdmin public {
		_strWebsite = _newWebsite;
	}

	/// @dev Returns the URI to the contract's JSON.
	///	 Note: can be a URL or a base64-encoded JSON.
	function contractURI() public view returns(string memory) {
		string memory _retValue = string(
			abi.encodePacked(
				'data:application/json;base64,',
				Base64.encode(abi.encodePacked(_strContractJSON))
			)
		);

		return _retValue;
	}

	/// @dev Creates a dynamic base-64 representation of a SMIL SVG containing the token's text.
	/// @param tokenId Token ID.
	function generateAnimation(uint256 tokenId) public view returns(string memory) {
		require(tokenId < _mintedTokens, _strOutOfBounds);
		bytes memory svg = abi.encodePacked(
			'<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 1010 460" width="100%" height="100%" preserveAspectRatio="xMinYMin meet" style="background-color:#0A0A0A;"><style xmlns="http://www.w3.org/2000/svg" type="text/css">',
			_font,
			'</style>',
			_createTextBlock(tokenId, 0),
			'<set begin="1" to="visible" attributeType="auto" attributeName="visibility"></set></text>',
			_createTextBlock(tokenId, 1),
			'<set begin="mv2.end" to="visible" attributeType="auto" attributeName="visibility"></set><set begin="mv8.end" to="hidden" attributeType="auto" attributeName="visibility"></set></text>',
			_createTextBlock(tokenId, 2),
			'<set begin="mv4.end" to="visible" attributeType="auto" attributeName="visibility"></set><set begin="mv8.end" to="hidden" attributeType="auto" attributeName="visibility"></set></text>',
			_createTextBlock(tokenId, 3),
			'<set begin="mv6.end" to="visible" attributeType="auto" attributeName="visibility"></set><set begin="mv8.end" to="hidden" attributeType="auto" attributeName="visibility"></set></text><g><rect x="100" y="40" width="30" height="60" fill="', tokenData[tokenId].color, '"><animate id="bl1" begin="1; mv8.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl2" begin="mv1.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl3" begin="mv2.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl4" begin="mv3.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl5" begin="mv4.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl6" begin="mv5.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl7" begin="mv6.end" to="#0A0A0A" dur="0.5s" repeatCount="2" attributeType="auto" attributeName="fill"></animate><animate id="bl8" begin="mv7.end" to="#0A0A0A" dur="0.5s" repeatCount="10" attributeType="auto" attributeName="fill"></animate><set begin="mv2.begin" to="140" fill="freeze" attributeType="auto" attributeName="y"></set><set begin="mv4.begin" to="240" fill="freeze" attributeType="auto" attributeName="y"></set><set begin="mv6.begin" to="340" fill="freeze" attributeType="auto" attributeName="y"></set><set begin="mv8.begin" to="40" fill="freeze" attributeType="auto" attributeName="y"></set></rect><rect x="125" y="40" width="800" height="60" fill="#0A0A0A"><set begin="mv2.begin" to="140" fill="freeze" attributeType="auto" attributeName="y"></set><set begin="mv4.begin" to="240" fill="freeze" attributeType="auto" attributeName="y"></set><set begin="mv6.begin" to="340" fill="freeze" attributeType="auto" attributeName="y"></set><set begin="mv8.begin" to="40" fill="freeze" attributeType="auto" attributeName="y"></set></rect><animateTransform id="mv1" begin="bl1.end" attributeName="transform" type="translate" from="0,0" to="20,0" dur="0.05s" accumulate="sum" calcMode="discrete" repeatCount="',
			Strings.toString(Strings.stringLength(tokenData[tokenId].texta)),
			'" fill="freeze"></animateTransform><animateTransform id="mv2" begin="bl2.end" attributeName="transform" type="translate" from="456,0" to="0,0" dur="0.05s" fill="freeze"></animateTransform><animateTransform id="mv3" begin="bl3.end" attributeName="transform" type="translate" from="0,0" to="20,0" dur="0.05s" accumulate="sum" calcMode="discrete" repeatCount="',
			Strings.toString(Strings.stringLength(tokenData[tokenId].textb)),
			'" fill="freeze"></animateTransform><animateTransform id="mv4" begin="bl4.end" attributeName="transform" type="translate" from="456,0" to="0,0" dur="0.05s" fill="freeze"></animateTransform><animateTransform id="mv5" begin="bl5.end" attributeName="transform" type="translate" from="0,0" to="20,0" dur="0.05s" accumulate="sum" calcMode="discrete" repeatCount="',
			Strings.toString(Strings.stringLength(tokenData[tokenId].textc)),
			'" fill="freeze"></animateTransform><animateTransform id="mv6" begin="bl6.end" attributeName="transform" type="translate" from="456,0" to="0,0" dur="0.05s" fill="freeze"></animateTransform><animateTransform id="mv7" begin="bl7.end" attributeName="transform" type="translate" from="0,0" to="20,0" dur="0.05s" accumulate="sum" calcMode="discrete" repeatCount="',
			Strings.toString(Strings.stringLength(tokenData[tokenId].textd)),
			'" fill="freeze"></animateTransform><animateTransform id="mv8" begin="bl8.end" attributeName="transform" type="translate" from="456,0" to="0,0" dur="0.05s" fill="freeze"></animateTransform></g></svg>'
		);

		return string(
			abi.encodePacked(
				'data:image/svg+xml;base64,',
				Base64.encode(svg)
			)
		);
	}

	/// @dev Mints a new token with the specified lines of text.
	/// @param firstLine First line of text. Must be 40 characters or less.
	/// @param secondLine Second line of text. Must be 40 characters or less.
	/// @param thirdLine Third line of text. Must be 40 characters or less.
	/// @param fourthLine Fourth line of text. Must be 40 characters or less.
	function mint(string memory firstLine, string memory secondLine, string memory thirdLine, string memory fourthLine) public payable {
		uint256 index = _mintedTokens;
		require(!_paused, _strPaused);
		require(index >= 0, _strOutOfBounds);
		require(index < _maxCap, _strOutOfBounds);

		if(_msgSender() != _smartContractOwner) {
			require(msg.value >= _mintFee, _strNotEnoughETH);
		}

		modifyTokenData(index, firstLine, secondLine, thirdLine, fourthLine);
		tokenData[index].color = _determineColor(index);

		_mintedTokens++;
		_mint(_msgSender(), index);
	}

	/// @dev Returns the contract's name.
	function name() public view returns(string memory) {
		return _name;
	}

	/// @dev Pauses the contract.
	///	 Note: Only contract's owner can change this.
	function pause() onlyAdmin public {
		_paused = true;
	}

	/// @dev Returns the contract's symbol, or ticker.
	function symbol() public view returns(string memory) {
		return _symbol;
	}

	/// @dev Returns a base64-encoded JSON that describes the given tokenID
	/// @param tokenId Token ID.
	function tokenURI(uint256 tokenId) public view returns(string memory) {
		require(tokenId < _mintedTokens, _strOutOfBounds);
		return string(
			abi.encodePacked(
				'data:application/json;base64,',
				Base64.encode(abi.encodePacked(
					'{',
						'"name": "Etherwriter #', Strings.toString(tokenId), '",',
						'"description": "', _description, '",',
						'"attributes": [',
							'{',
								'"trait_type": "Color", ',
								'"value": "', tokenData[tokenId].color, '"',
							'}',
						'],',
						'"animation_url": "', generateAnimation(tokenId), '",',
						'"cover": "', _strCoverImage, '",',
						'"l1": "', tokenData[tokenId].texta, '",',
						'"l2": "', tokenData[tokenId].textb, '",',
						'"l3": "', tokenData[tokenId].textc, '",',
						'"l4": "', tokenData[tokenId].textd, '",',
						'"c": "', tokenData[tokenId].color, '"',
					'}'
				))
			)
		);
	}

	/// @dev Unpauses the contract.
	///	 Note: Only contract's owner can change this.
	function unpause() onlyAdmin public {
		_paused = false;
	}

	/// @dev Allows to withdraw any ETH available on this contract.
	///	 Note: Only contract's owner can withdraw.
	function withdraw() public onlyAdmin payable {
		uint balance = address(this).balance;
		require(balance > 0, _strNotEnoughETH);
		(bool success, ) = (_msgSender()).call{value: balance}("");
		require(success, _strTransferFailed);
	}
}

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":"Owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"firstLine","type":"string"},{"indexed":false,"internalType":"string","name":"secondLine","type":"string"},{"indexed":false,"internalType":"string","name":"thirdLine","type":"string"},{"indexed":false,"internalType":"string","name":"fourthLine","type":"string"}],"name":"ChangedText","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"},{"internalType":"string","name":"firstLine","type":"string"},{"internalType":"string","name":"secondLine","type":"string"},{"internalType":"string","name":"thirdLine","type":"string"},{"internalType":"string","name":"fourthLine","type":"string"}],"name":"changeTokenText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newWebsite","type":"string"}],"name":"changeWebURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"generateAnimation","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"string","name":"firstLine","type":"string"},{"internalType":"string","name":"secondLine","type":"string"},{"internalType":"string","name":"thirdLine","type":"string"},{"internalType":"string","name":"fourthLine","type":"string"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"pause","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":"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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526001600460006101000a81548160ff021916908315150217905550662386f26fc100006005556000600655612710600755734dae7e6c0ca196643012cdc526bbc6b445a2ca59600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601081526020017f45746865727772697465722076312e3100000000000000000000000000000000815250600a9081620000d09190620006a2565b506040518060400160405280600481526020017f4557523100000000000000000000000000000000000000000000000000000000815250600b9081620001179190620006a2565b506040518060400160405280601f81526020017f3134302063686172616374657273206f6620707572652066726565646f6d2e00815250600c90816200015e9190620006a2565b5060405180606001604052806024815260200162006c5660249139600d9081620001899190620006a2565b50600d6040516020016200019e919062000873565b604051602081830303815290604052600e9081620001bd9190620006a2565b506040518060400160405280601381526020017f436f6e7472616374206973207061757365642e00000000000000000000000000815250600f9081620002049190620006a2565b506040518060400160405280600f81526020017f4e6f7420617574686f72697a6564210000000000000000000000000000000000815250601090816200024b9190620006a2565b506040518060400160405280600f81526020017f4e6f7420656e6f7567682045544821000000000000000000000000000000000081525060119081620002929190620006a2565b506040518060400160405280601081526020017f5472616e73666572206661696c65642e0000000000000000000000000000000081525060129081620002d99190620006a2565b506040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525060139081620003209190620006a2565b506040518060400160405280600e81526020017f5465787420746f6f206c6f6e672100000000000000000000000000000000000081525060149081620003679190620006a2565b50600a600c600e600d60405160200162000385949392919062000b8f565b60405160208183030381529060405260159081620003a49190620006a2565b5060405180613660016040528061363c815260200162006c7a61363c913960169081620003d29190620006a2565b50348015620003e057600080fd5b5033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000c71565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004aa57607f821691505b602082108103620004c057620004bf62000462565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200052a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004eb565b620005368683620004eb565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005836200057d62000577846200054e565b62000558565b6200054e565b9050919050565b6000819050919050565b6200059f8362000562565b620005b7620005ae826200058a565b848454620004f8565b825550505050565b600090565b620005ce620005bf565b620005db81848462000594565b505050565b5b818110156200060357620005f7600082620005c4565b600181019050620005e1565b5050565b601f82111562000652576200061c81620004c6565b6200062784620004db565b8101602085101562000637578190505b6200064f6200064685620004db565b830182620005e0565b50505b505050565b600082821c905092915050565b6000620006776000198460080262000657565b1980831691505092915050565b600062000692838362000664565b9150826002028217905092915050565b620006ad8262000428565b67ffffffffffffffff811115620006c957620006c862000433565b5b620006d5825462000491565b620006e282828562000607565b600060209050601f8311600181146200071a576000841562000705578287015190505b62000711858262000684565b86555062000781565b601f1984166200072a86620004c6565b60005b8281101562000754578489015182556001820191506020850194506020810190506200072d565b8683101562000774578489015162000770601f89168262000664565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b60008154620007a38162000491565b620007af818662000789565b94506001821660008114620007cd5760018114620007e3576200081a565b60ff19831686528115158202860193506200081a565b620007ee85620004c6565b60005b838110156200081257815481890152600182019150602081019050620007f1565b838801955050505b50505092915050565b7f6c6f676f2e706e67000000000000000000000000000000000000000000000000600082015250565b60006200085b60088362000789565b9150620008688262000823565b600882019050919050565b600062000881828462000794565b91506200088e826200084c565b915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b6000620008d160018362000789565b9150620008de8262000899565b600182019050919050565b7f226e616d65223a20220000000000000000000000000000000000000000000000600082015250565b60006200092160098362000789565b91506200092e82620008e9565b600982019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006200097160028362000789565b91506200097e8262000939565b600282019050919050565b7f226465736372697074696f6e223a202200000000000000000000000000000000600082015250565b6000620009c160108362000789565b9150620009ce8262000989565b601082019050919050565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b600062000a11600a8362000789565b915062000a1e82620009d9565b600a82019050919050565b7f2265787465726e616c5f6c696e6b223a20220000000000000000000000000000600082015250565b600062000a6160128362000789565b915062000a6e8262000a29565b601282019050919050565b7f2273656c6c65725f6665655f62617369735f706f696e7473223a203530302c00600082015250565b600062000ab1601f8362000789565b915062000abe8262000a79565b601f82019050919050565b7f226665655f726563697069656e74223a2022307834446145374536633043613160008201527f3936363433303132634463353236624263366234343541326361353922000000602082015250565b600062000b27603d8362000789565b915062000b348262000ac9565b603d82019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b600062000b7760018362000789565b915062000b848262000b3f565b600182019050919050565b600062000b9c82620008c2565b915062000ba98262000912565b915062000bb7828762000794565b915062000bc48262000962565b915062000bd182620009b2565b915062000bdf828662000794565b915062000bec8262000962565b915062000bf98262000a02565b915062000c07828562000794565b915062000c148262000962565b915062000c218262000a52565b915062000c2f828462000794565b915062000c3c8262000962565b915062000c498262000aa2565b915062000c568262000b18565b915062000c638262000b68565b915081905095945050505050565b615fd58062000c816000396000f3fe60806040526004361061012a5760003560e01c80636352211e116100ab578063a2762a5d1161006f578063a2762a5d1461039a578063b88d4fde146103c3578063c87b56dd146103ec578063dde9d72614610429578063e8a3d48514610466578063e985e9c5146104915761012a565b80636352211e146102b557806370a08231146102f25780638456cb591461032f57806395d89b4114610346578063a22cb465146103715761012a565b806323b872dd116100f257806323b872dd146102195780633ccfd60b146102425780633f4ba83a1461024c57806342842e0e146102635780635ece5b5e1461028c5761012a565b806301ffc9a71461012f57806302341c711461016c57806306fdde0314610188578063081812fc146101b3578063095ea7b3146101f0575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612a90565b6104ce565b6040516101639190612ad8565b60405180910390f35b61018660048036038101906101819190612c39565b610548565b005b34801561019457600080fd5b5061019d610746565b6040516101aa9190612d8f565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190612de7565b6107d8565b6040516101e79190612e55565b60405180910390f35b3480156101fc57600080fd5b5061021760048036038101906102129190612e9c565b61085d565b005b34801561022557600080fd5b50610240600480360381019061023b9190612edc565b610974565b005b61024a6109d4565b005b34801561025857600080fd5b50610261610b79565b005b34801561026f57600080fd5b5061028a60048036038101906102859190612edc565b610c32565b005b34801561029857600080fd5b506102b360048036038101906102ae9190612f2f565b610c52565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190612de7565b610d01565b6040516102e99190612e55565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612f78565b610db1565b6040516103269190612fb4565b60405180910390f35b34801561033b57600080fd5b50610344610e68565b005b34801561035257600080fd5b5061035b610f21565b6040516103689190612d8f565b60405180910390f35b34801561037d57600080fd5b5061039860048036038101906103939190612ffb565b610fb3565b005b3480156103a657600080fd5b506103c160048036038101906103bc919061303b565b611133565b005b3480156103cf57600080fd5b506103ea60048036038101906103e591906131c7565b611270565b005b3480156103f857600080fd5b50610413600480360381019061040e9190612de7565b6112d2565b6040516104209190612d8f565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612de7565b61140d565b60405161045d9190612d8f565b60405180910390f35b34801561047257600080fd5b5061047b6117b4565b6040516104889190612d8f565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b3919061324a565b611809565b6040516104c59190612ad8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054157506105408261189d565b5b9050919050565b60006006549050600460009054906101000a900460ff1615600f906105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059a9190613383565b60405180910390fd5b5060008110156013906105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e39190613383565b60405180910390fd5b506007548110601390610635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062c9190613383565b60405180910390fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610677611907565b73ffffffffffffffffffffffffffffffffffffffff16146106dd576005543410156011906106db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d29190613383565b60405180910390fd5b505b6106ea818686868661190f565b6106f381611ae6565b600960008381526020019081526020016000206004019081610715919061353c565b50600660008154809291906107299061363d565b919050555061073f610739611907565b82611c66565b5050505050565b6060600a8054610755906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610781906132b9565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b5050505050905090565b60006107e382611d6d565b610822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610819906136d1565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086882610d01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf9061373d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f7611907565b73ffffffffffffffffffffffffffffffffffffffff161480610926575061092581610920611907565b611809565b5b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c9061373d565b60405180910390fd5b61096f8383611dd8565b505050565b61098561097f611907565b82611e91565b6109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb9061373d565b60405180910390fd5b6109cf838383611f6f565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a15611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a669190613383565b60405180910390fd5b50600047905060008111601190610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab39190613383565b60405180910390fd5b506000610ac7611907565b73ffffffffffffffffffffffffffffffffffffffff1682604051610aea9061378e565b60006040518083038185875af1925050503d8060008114610b27576040519150601f19603f3d011682016040523d82523d6000602084013e610b2c565b606091505b5050905080601290610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b9190613383565b60405180910390fd5b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bba611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9190613383565b60405180910390fd5b506000600460006101000a81548160ff021916908315150217905550565b610c4d83838360405180602001604052806000815250611270565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c93611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce49190613383565b60405180910390fd5b5080600d9081610cfd919061353c565b5050565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9f906137ef565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1890613881565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ea9611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9190613383565b60405180910390fd5b506001600460006101000a81548160ff021916908315150217905550565b6060600b8054610f30906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5c906132b9565b8015610fa95780601f10610f7e57610100808354040283529160200191610fa9565b820191906000526020600020905b815481529060010190602001808311610f8c57829003601f168201915b5050505050905090565b610fbb611907565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906138ed565b60405180910390fd5b8060036000611035611907565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110e2611907565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111279190612ad8565b60405180910390a35050565b8461113d81610d01565b73ffffffffffffffffffffffffffffffffffffffff1661115b611907565b73ffffffffffffffffffffffffffffffffffffffff16146010906111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac9190613383565b60405180910390fd5b5060065486106013906111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f59190613383565b60405180910390fd5b5061120c868686868661190f565b85611215611907565b73ffffffffffffffffffffffffffffffffffffffff167f09378ba74800f0d1fb4ca319ea017e68d477fe87daac66148c7369fd83fcd58787878787604051611260949392919061390d565b60405180910390a3505050505050565b61128161127b611907565b83611e91565b6112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b79061373d565b60405180910390fd5b6112cc8484848461226e565b50505050565b6060600654821060139061131c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113139190613383565b60405180910390fd5b506113e7611329836122ca565b600c6009600086815260200190815260200160002060040161134a8661140d565b600e60096000898152602001908152602001600020600001600960008a8152602001908152602001600020600101600960008b8152602001908152602001600020600201600960008c8152602001908152602001600020600301600960008d81526020019081526020016000206004016040516020016113d39a99989796959493929190613f39565b60405160208183030381529060405261242a565b6040516020016113f7919061413a565b6040516020818303038152906040529050919050565b60606006548210601390611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e9190613383565b60405180910390fd5b506000601661146784600061258d565b61147285600161258d565b61147d86600261258d565b61148887600361258d565b6009600089815260200190815260200160002060040161154d611548600960008c815260200190815260200160002060000180546114c5906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546114f1906132b9565b801561153e5780601f106115135761010080835404028352916020019161153e565b820191906000526020600020905b81548152906001019060200180831161152157829003601f168201915b505050505061287f565b6122ca565b6115fc6115f7600960008d81526020019081526020016000206001018054611574906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546115a0906132b9565b80156115ed5780601f106115c2576101008083540402835291602001916115ed565b820191906000526020600020905b8154815290600101906020018083116115d057829003601f168201915b505050505061287f565b6122ca565b6116ab6116a6600960008e81526020019081526020016000206002018054611623906132b9565b80601f016020809104026020016040519081016040528092919081815260200182805461164f906132b9565b801561169c5780601f106116715761010080835404028352916020019161169c565b820191906000526020600020905b81548152906001019060200180831161167f57829003601f168201915b505050505061287f565b6122ca565b61175a611755600960008f815260200190815260200160002060030180546116d2906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546116fe906132b9565b801561174b5780601f106117205761010080835404028352916020019161174b565b820191906000526020600020905b81548152906001019060200180831161172e57829003601f168201915b505050505061287f565b6122ca565b6040516020016117739a9998979695949392919061579e565b604051602081830303815290604052905061178d8161242a565b60405160200161179d91906158ef565b604051602081830303815290604052915050919050565b606060006117e160156040516020016117cd9190615911565b60405160208183030381529060405261242a565b6040516020016117f1919061413a565b60405160208183030381529060405290508091505090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b602961191a8561287f565b1060149061195e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119559190613383565b60405180910390fd5b50602961196a8461287f565b106014906119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a59190613383565b60405180910390fd5b5060296119ba8361287f565b106014906119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59190613383565b60405180910390fd5b506029611a0a8261287f565b10601490611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a459190613383565b60405180910390fd5b5083600960008781526020019081526020016000206000019081611a72919061353c565b5082600960008781526020019081526020016000206001019081611a96919061353c565b5081600960008781526020019081526020016000206002019081611aba919061353c565b5080600960008781526020019081526020016000206003019081611ade919061353c565b505050505050565b606060006040518060400160405280600781526020017f2338383838383800000000000000000000000000000000000000000000000000815250905060008303611b67576040518060400160405280600781526020017f23463930313641000000000000000000000000000000000000000000000000008152509050611c5d565b600083118015611b775750600b83105b15611bb9576040518060400160405280600781526020017f23303142334639000000000000000000000000000000000000000000000000008152509050611c5c565b600a83118015611bc95750606f83105b15611c0b576040518060400160405280600781526020017f23464631393030000000000000000000000000000000000000000000000000008152509050611c5b565b606e83118015611c1c575061045783105b15611c5a576040518060400160405280600781526020017f233139464630300000000000000000000000000000000000000000000000000081525090505b5b5b5b80915050919050565b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb59190615928565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4b83610d01565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e9c82611d6d565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed2906159a8565b60405180910390fd5b6000611ee683610d01565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f5557508373ffffffffffffffffffffffffffffffffffffffff16611f3d846107d8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f665750611f658185611809565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f8f82610d01565b73ffffffffffffffffffffffffffffffffffffffff1614611fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdc9061373d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90615a14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90615a14565b60405180910390fd5b60008111612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90615a80565b60405180910390fd5b612111600082611dd8565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121609190615aa0565b9250508190555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b69190615928565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612279848484611f6f565b6122858484848461288a565b6122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90615b46565b60405180910390fd5b50505050565b606060008203612311576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612425565b600082905060005b6000821461234357808061232c9061363d565b915050600a8261233c9190615b95565b9150612319565b60008167ffffffffffffffff81111561235f5761235e612b0e565b5b6040519080825280601f01601f1916602001820160405280156123915781602001600182028036833780820191505090505b5090505b6000851461241e576001826123aa9190615aa0565b9150600a856123b99190615bc6565b60306123c59190615928565b60f81b8183815181106123db576123da615bf7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124179190615b95565b9450612395565b8093505050505b919050565b6060600082510361244c57604051806020016040528060008152509050612588565b6000604051806060016040528060408152602001615f60604091399050600060036002855161247b9190615928565b6124859190615b95565b60046124919190615c26565b67ffffffffffffffff8111156124aa576124a9612b0e565b5b6040519080825280601f01601f1916602001820160405280156124dc5781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015612548576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453600184019350506124ed565b505060038651066001811461256457600281146125775761257f565b603d6001830353603d600283035361257f565b603d60018303535b50505080925050505b919050565b606060006009600085815260200190815260200160002060000180546125b2906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546125de906132b9565b801561262b5780601f106126005761010080835404028352916020019161262b565b820191906000526020600020905b81548152906001019060200180831161260e57829003601f168201915b50505050509050600183036126dc5760096000858152602001908152602001600020600101805461265b906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612687906132b9565b80156126d45780601f106126a9576101008083540402835291602001916126d4565b820191906000526020600020905b8154815290600101906020018083116126b757829003601f168201915b505050505090505b6002830361278a57600960008581526020019081526020016000206002018054612705906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612731906132b9565b801561277e5780601f106127535761010080835404028352916020019161277e565b820191906000526020600020905b81548152906001019060200180831161276157829003601f168201915b50505050509050612835565b60038303612834576009600085815260200190815260200160002060030180546127b3906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546127df906132b9565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505090505b5b61283e836122ca565b600960008681526020019081526020016000206004018260405160200161286793929190615d98565b60405160208183030381529060405291505092915050565b600081519050919050565b60006128ab8473ffffffffffffffffffffffffffffffffffffffff16612a11565b15612a04578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128d4611907565b8786866040518563ffffffff1660e01b81526004016128f69493929190615e3f565b6020604051808303816000875af192505050801561293257506040513d601f19601f8201168201806040525081019061292f9190615ea0565b60015b6129b4573d8060008114612962576040519150601f19603f3d011682016040523d82523d6000602084013e612967565b606091505b5060008151036129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390615f3f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a09565b600190505b949350505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a6d81612a38565b8114612a7857600080fd5b50565b600081359050612a8a81612a64565b92915050565b600060208284031215612aa657612aa5612a2e565b5b6000612ab484828501612a7b565b91505092915050565b60008115159050919050565b612ad281612abd565b82525050565b6000602082019050612aed6000830184612ac9565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b4682612afd565b810181811067ffffffffffffffff82111715612b6557612b64612b0e565b5b80604052505050565b6000612b78612a24565b9050612b848282612b3d565b919050565b600067ffffffffffffffff821115612ba457612ba3612b0e565b5b612bad82612afd565b9050602081019050919050565b82818337600083830152505050565b6000612bdc612bd784612b89565b612b6e565b905082815260208101848484011115612bf857612bf7612af8565b5b612c03848285612bba565b509392505050565b600082601f830112612c2057612c1f612af3565b5b8135612c30848260208601612bc9565b91505092915050565b60008060008060808587031215612c5357612c52612a2e565b5b600085013567ffffffffffffffff811115612c7157612c70612a33565b5b612c7d87828801612c0b565b945050602085013567ffffffffffffffff811115612c9e57612c9d612a33565b5b612caa87828801612c0b565b935050604085013567ffffffffffffffff811115612ccb57612cca612a33565b5b612cd787828801612c0b565b925050606085013567ffffffffffffffff811115612cf857612cf7612a33565b5b612d0487828801612c0b565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d4a578082015181840152602081019050612d2f565b60008484015250505050565b6000612d6182612d10565b612d6b8185612d1b565b9350612d7b818560208601612d2c565b612d8481612afd565b840191505092915050565b60006020820190508181036000830152612da98184612d56565b905092915050565b6000819050919050565b612dc481612db1565b8114612dcf57600080fd5b50565b600081359050612de181612dbb565b92915050565b600060208284031215612dfd57612dfc612a2e565b5b6000612e0b84828501612dd2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e3f82612e14565b9050919050565b612e4f81612e34565b82525050565b6000602082019050612e6a6000830184612e46565b92915050565b612e7981612e34565b8114612e8457600080fd5b50565b600081359050612e9681612e70565b92915050565b60008060408385031215612eb357612eb2612a2e565b5b6000612ec185828601612e87565b9250506020612ed285828601612dd2565b9150509250929050565b600080600060608486031215612ef557612ef4612a2e565b5b6000612f0386828701612e87565b9350506020612f1486828701612e87565b9250506040612f2586828701612dd2565b9150509250925092565b600060208284031215612f4557612f44612a2e565b5b600082013567ffffffffffffffff811115612f6357612f62612a33565b5b612f6f84828501612c0b565b91505092915050565b600060208284031215612f8e57612f8d612a2e565b5b6000612f9c84828501612e87565b91505092915050565b612fae81612db1565b82525050565b6000602082019050612fc96000830184612fa5565b92915050565b612fd881612abd565b8114612fe357600080fd5b50565b600081359050612ff581612fcf565b92915050565b6000806040838503121561301257613011612a2e565b5b600061302085828601612e87565b925050602061303185828601612fe6565b9150509250929050565b600080600080600060a0868803121561305757613056612a2e565b5b600061306588828901612dd2565b955050602086013567ffffffffffffffff81111561308657613085612a33565b5b61309288828901612c0b565b945050604086013567ffffffffffffffff8111156130b3576130b2612a33565b5b6130bf88828901612c0b565b935050606086013567ffffffffffffffff8111156130e0576130df612a33565b5b6130ec88828901612c0b565b925050608086013567ffffffffffffffff81111561310d5761310c612a33565b5b61311988828901612c0b565b9150509295509295909350565b600067ffffffffffffffff82111561314157613140612b0e565b5b61314a82612afd565b9050602081019050919050565b600061316a61316584613126565b612b6e565b90508281526020810184848401111561318657613185612af8565b5b613191848285612bba565b509392505050565b600082601f8301126131ae576131ad612af3565b5b81356131be848260208601613157565b91505092915050565b600080600080608085870312156131e1576131e0612a2e565b5b60006131ef87828801612e87565b945050602061320087828801612e87565b935050604061321187828801612dd2565b925050606085013567ffffffffffffffff81111561323257613231612a33565b5b61323e87828801613199565b91505092959194509250565b6000806040838503121561326157613260612a2e565b5b600061326f85828601612e87565b925050602061328085828601612e87565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132d157607f821691505b6020821081036132e4576132e361328a565b5b50919050565b60008190508160005260206000209050919050565b6000815461330c816132b9565b6133168186612d1b565b9450600182166000811461333157600181146133475761337a565b60ff19831686528115156020028601935061337a565b613350856132ea565b60005b8381101561337257815481890152600182019150602081019050613353565b808801955050505b50505092915050565b6000602082019050818103600083015261339d81846132ff565b905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133b5565b6133fc86836133b5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061343961343461342f84612db1565b613414565b612db1565b9050919050565b6000819050919050565b6134538361341e565b61346761345f82613440565b8484546133c2565b825550505050565b600090565b61347c61346f565b61348781848461344a565b505050565b5b818110156134ab576134a0600082613474565b60018101905061348d565b5050565b601f8211156134f0576134c1816132ea565b6134ca846133a5565b810160208510156134d9578190505b6134ed6134e5856133a5565b83018261348c565b50505b505050565b600082821c905092915050565b6000613513600019846008026134f5565b1980831691505092915050565b600061352c8383613502565b9150826002028217905092915050565b61354582612d10565b67ffffffffffffffff81111561355e5761355d612b0e565b5b61356882546132b9565b6135738282856134af565b600060209050601f8311600181146135a65760008415613594578287015190505b61359e8582613520565b865550613606565b601f1984166135b4866132ea565b60005b828110156135dc578489015182556001820191506020850194506020810190506135b7565b868310156135f957848901516135f5601f891682613502565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061364882612db1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361367a5761367961360e565b5b600182019050919050565b7f4e6f6e6578697374656e7420746f6b656e210000000000000000000000000000600082015250565b60006136bb601283612d1b565b91506136c682613685565b602082019050919050565b600060208201905081810360008301526136ea816136ae565b9050919050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b6000613727600f83612d1b565b9150613732826136f1565b602082019050919050565b600060208201905081810360008301526137568161371a565b9050919050565b600081905092915050565b50565b600061377860008361375d565b915061378382613768565b600082019050919050565b60006137998261376b565b9150819050919050565b7f4e6f74206d696e74656420796574210000000000000000000000000000000000600082015250565b60006137d9600f83612d1b565b91506137e4826137a3565b602082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061386b602a83612d1b565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006138d7601983612d1b565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060808201905081810360008301526139278187612d56565b9050818103602083015261393b8186612d56565b9050818103604083015261394f8185612d56565b905081810360608301526139638184612d56565b905095945050505050565b600081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b60006139af60018361396e565b91506139ba82613979565b600182019050919050565b7f226e616d65223a20224574686572777269746572202300000000000000000000600082015250565b60006139fb60168361396e565b9150613a06826139c5565b601682019050919050565b6000613a1c82612d10565b613a26818561396e565b9350613a36818560208601612d2c565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000613a7860028361396e565b9150613a8382613a42565b600282019050919050565b7f226465736372697074696f6e223a202200000000000000000000000000000000600082015250565b6000613ac460108361396e565b9150613acf82613a8e565b601082019050919050565b60008154613ae7816132b9565b613af1818661396e565b94506001821660008114613b0c5760018114613b2157613b54565b60ff1983168652811515820286019350613b54565b613b2a856132ea565b60005b83811015613b4c57815481890152600182019150602081019050613b2d565b838801955050505b50505092915050565b7f2261747472696275746573223a205b0000000000000000000000000000000000600082015250565b6000613b93600f8361396e565b9150613b9e82613b5d565b600f82019050919050565b7f2274726169745f74797065223a2022436f6c6f72222c20000000000000000000600082015250565b6000613bdf60178361396e565b9150613bea82613ba9565b601782019050919050565b7f2276616c7565223a202200000000000000000000000000000000000000000000600082015250565b6000613c2b600a8361396e565b9150613c3682613bf5565b600a82019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b6000613c7760018361396e565b9150613c8282613c41565b600182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613cc360018361396e565b9150613cce82613c8d565b600182019050919050565b7f5d2c000000000000000000000000000000000000000000000000000000000000600082015250565b6000613d0f60028361396e565b9150613d1a82613cd9565b600282019050919050565b7f22616e696d6174696f6e5f75726c223a20220000000000000000000000000000600082015250565b6000613d5b60128361396e565b9150613d6682613d25565b601282019050919050565b7f22636f766572223a202200000000000000000000000000000000000000000000600082015250565b6000613da7600a8361396e565b9150613db282613d71565b600a82019050919050565b7f226c31223a202200000000000000000000000000000000000000000000000000600082015250565b6000613df360078361396e565b9150613dfe82613dbd565b600782019050919050565b7f226c32223a202200000000000000000000000000000000000000000000000000600082015250565b6000613e3f60078361396e565b9150613e4a82613e09565b600782019050919050565b7f226c33223a202200000000000000000000000000000000000000000000000000600082015250565b6000613e8b60078361396e565b9150613e9682613e55565b600782019050919050565b7f226c34223a202200000000000000000000000000000000000000000000000000600082015250565b6000613ed760078361396e565b9150613ee282613ea1565b600782019050919050565b7f2263223a20220000000000000000000000000000000000000000000000000000600082015250565b6000613f2360068361396e565b9150613f2e82613eed565b600682019050919050565b6000613f44826139a2565b9150613f4f826139ee565b9150613f5b828d613a11565b9150613f6682613a6b565b9150613f7182613ab7565b9150613f7d828c613ada565b9150613f8882613a6b565b9150613f9382613b86565b9150613f9e826139a2565b9150613fa982613bd2565b9150613fb482613c1e565b9150613fc0828b613ada565b9150613fcb82613c6a565b9150613fd682613cb6565b9150613fe182613d02565b9150613fec82613d4e565b9150613ff8828a613a11565b915061400382613a6b565b915061400e82613d9a565b915061401a8289613ada565b915061402582613a6b565b915061403082613de6565b915061403c8288613ada565b915061404782613a6b565b915061405282613e32565b915061405e8287613ada565b915061406982613a6b565b915061407482613e7e565b91506140808286613ada565b915061408b82613a6b565b915061409682613eca565b91506140a28285613ada565b91506140ad82613a6b565b91506140b882613f16565b91506140c48284613ada565b91506140cf82613c6a565b91506140da82613cb6565b91508190509b9a5050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614124601d8361396e565b915061412f826140ee565b601d82019050919050565b600061414582614117565b91506141518284613a11565b915081905092915050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f737667222076657273696f6e3d22312e31222076696577426f783d223060208201527f2030203130313020343630222077696474683d2231303025222068656967687460408201527f3d223130302522207072657365727665417370656374526174696f3d22784d6960608201527f6e594d696e206d65657422207374796c653d226261636b67726f756e642d636f60808201527f6c6f723a233041304130413b223e3c7374796c6520786d6c6e733d226874747060a08201527f3a2f2f7777772e77332e6f72672f323030302f7376672220747970653d22746560c08201527f78742f637373223e00000000000000000000000000000000000000000000000060e082015250565b600061429c60e88361396e565b91506142a78261415c565b60e882019050919050565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000600082015250565b60006142e860088361396e565b91506142f3826142b2565b600882019050919050565b7f3c73657420626567696e3d22312220746f3d2276697369626c6522206174747260008201527f6962757465547970653d226175746f22206174747269627574654e616d653d2260208201527f7669736962696c697479223e3c2f7365743e3c2f746578743e00000000000000604082015250565b600061438060598361396e565b915061438b826142fe565b605982019050919050565b7f3c73657420626567696e3d226d76322e656e642220746f3d2276697369626c6560008201527f2220617474726962757465547970653d226175746f222061747472696275746560208201527f4e616d653d227669736962696c697479223e3c2f7365743e3c7365742062656760408201527f696e3d226d76382e656e642220746f3d2268696464656e22206174747269627560608201527f7465547970653d226175746f22206174747269627574654e616d653d2276697360808201527f6962696c697479223e3c2f7365743e3c2f746578743e0000000000000000000060a082015250565b600061448a60b68361396e565b915061449582614396565b60b682019050919050565b7f3c73657420626567696e3d226d76342e656e642220746f3d2276697369626c6560008201527f2220617474726962757465547970653d226175746f222061747472696275746560208201527f4e616d653d227669736962696c697479223e3c2f7365743e3c7365742062656760408201527f696e3d226d76382e656e642220746f3d2268696464656e22206174747269627560608201527f7465547970653d226175746f22206174747269627574654e616d653d2276697360808201527f6962696c697479223e3c2f7365743e3c2f746578743e0000000000000000000060a082015250565b600061459460b68361396e565b915061459f826144a0565b60b682019050919050565b7f3c73657420626567696e3d226d76362e656e642220746f3d2276697369626c6560008201527f2220617474726962757465547970653d226175746f222061747472696275746560208201527f4e616d653d227669736962696c697479223e3c2f7365743e3c7365742062656760408201527f696e3d226d76382e656e642220746f3d2268696464656e22206174747269627560608201527f7465547970653d226175746f22206174747269627574654e616d653d2276697360808201527f6962696c697479223e3c2f7365743e3c2f746578743e3c673e3c72656374207860a08201527f3d223130302220793d223430222077696474683d22333022206865696768743d60c08201527f223630222066696c6c3d2200000000000000000000000000000000000000000060e082015250565b60006146ea60eb8361396e565b91506146f5826145aa565b60eb82019050919050565b7f223e3c616e696d6174652069643d22626c312220626567696e3d22313b206d7660008201527f382e656e642220746f3d222330413041304122206475723d22302e357322207260208201527f6570656174436f756e743d22322220617474726962757465547970653d22617560408201527f746f22206174747269627574654e616d653d2266696c6c223e3c2f616e696d6160608201527f74653e3c616e696d6174652069643d22626c322220626567696e3d226d76312e60808201527f656e642220746f3d222330413041304122206475723d22302e3573222072657060a08201527f656174436f756e743d22322220617474726962757465547970653d226175746f60c08201527f22206174747269627574654e616d653d2266696c6c223e3c2f616e696d61746560e08201527f3e3c616e696d6174652069643d22626c332220626567696e3d226d76322e656e6101008201527f642220746f3d222330413041304122206475723d22302e3573222072657065616101208201527f74436f756e743d22322220617474726962757465547970653d226175746f22206101408201527f6174747269627574654e616d653d2266696c6c223e3c2f616e696d6174653e3c6101608201527f616e696d6174652069643d22626c342220626567696e3d226d76332e656e64226101808201527f20746f3d222330413041304122206475723d22302e35732220726570656174436101a08201527f6f756e743d22322220617474726962757465547970653d226175746f222061746101c08201527f747269627574654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e6101e08201527f696d6174652069643d22626c352220626567696e3d226d76342e656e642220746102008201527f6f3d222330413041304122206475723d22302e35732220726570656174436f756102208201527f6e743d22322220617474726962757465547970653d226175746f2220617474726102408201527f69627574654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e696d6102608201527f6174652069643d22626c362220626567696e3d226d76352e656e642220746f3d6102808201527f222330413041304122206475723d22302e35732220726570656174436f756e746102a08201527f3d22322220617474726962757465547970653d226175746f22206174747269626102c08201527f7574654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e696d61746102e08201527f652069643d22626c372220626567696e3d226d76362e656e642220746f3d22236103008201527f30413041304122206475723d22302e35732220726570656174436f756e743d226103208201527f322220617474726962757465547970653d226175746f222061747472696275746103408201527f654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e696d617465206103608201527f69643d22626c382220626567696e3d226d76372e656e642220746f3d222330416103808201527f3041304122206475723d22302e35732220726570656174436f756e743d2231306103a08201527f2220617474726962757465547970653d226175746f22206174747269627574656103c08201527f4e616d653d2266696c6c223e3c2f616e696d6174653e3c73657420626567696e6103e08201527f3d226d76322e626567696e2220746f3d22313430222066696c6c3d22667265656104008201527f7a652220617474726962757465547970653d226175746f2220617474726962756104208201527f74654e616d653d2279223e3c2f7365743e3c73657420626567696e3d226d76346104408201527f2e626567696e2220746f3d22323430222066696c6c3d22667265657a652220616104608201527f7474726962757465547970653d226175746f22206174747269627574654e616d6104808201527f653d2279223e3c2f7365743e3c73657420626567696e3d226d76362e626567696104a08201527f6e2220746f3d22333430222066696c6c3d22667265657a6522206174747269626104c08201527f757465547970653d226175746f22206174747269627574654e616d653d2279226104e08201527f3e3c2f7365743e3c73657420626567696e3d226d76382e626567696e2220746f6105008201527f3d223430222066696c6c3d22667265657a6522206174747269627574655479706105208201527f653d226175746f22206174747269627574654e616d653d2279223e3c2f7365746105408201527f3e3c2f726563743e3c7265637420783d223132352220793d22343022207769646105608201527f74683d2238303022206865696768743d223630222066696c6c3d2223304130416105808201527f3041223e3c73657420626567696e3d226d76322e626567696e2220746f3d22316105a08201527f3430222066696c6c3d22667265657a652220617474726962757465547970653d6105c08201527f226175746f22206174747269627574654e616d653d2279223e3c2f7365743e3c6105e08201527f73657420626567696e3d226d76342e626567696e2220746f3d223234302220666106008201527f696c6c3d22667265657a652220617474726962757465547970653d226175746f6106208201527f22206174747269627574654e616d653d2279223e3c2f7365743e3c73657420626106408201527f6567696e3d226d76362e626567696e2220746f3d22333430222066696c6c3d226106608201527f667265657a652220617474726962757465547970653d226175746f22206174746106808201527f7269627574654e616d653d2279223e3c2f7365743e3c73657420626567696e3d6106a08201527f226d76382e626567696e2220746f3d223430222066696c6c3d22667265657a656106c08201527f2220617474726962757465547970653d226175746f22206174747269627574656106e08201527f4e616d653d2279223e3c2f7365743e3c2f726563743e3c616e696d61746554726107008201527f616e73666f726d2069643d226d76312220626567696e3d22626c312e656e64226107208201527f206174747269627574654e616d653d227472616e73666f726d2220747970653d6107408201527f227472616e736c617465222066726f6d3d22302c302220746f3d2232302c30226107608201527f206475723d22302e3035732220616363756d756c6174653d2273756d222063616107808201527f6c634d6f64653d2264697363726574652220726570656174436f756e743d22006107a082015250565b600061507b6107bf8361396e565b915061508682614700565b6107bf82019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76322220626560208201527f67696e3d22626c322e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c616e6960a08201527f6d6174655472616e73666f726d2069643d226d76332220626567696e3d22626c60c08201527f332e656e6422206174747269627574654e616d653d227472616e73666f726d2260e08201527f20747970653d227472616e736c617465222066726f6d3d22302c302220746f3d6101008201527f2232302c3022206475723d22302e3035732220616363756d756c6174653d22736101208201527f756d222063616c634d6f64653d2264697363726574652220726570656174436f6101408201527f756e743d2200000000000000000000000000000000000000000000000000000061016082015250565b600061526f6101658361396e565b915061527a82615092565b61016582019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76342220626560208201527f67696e3d22626c342e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c616e6960a08201527f6d6174655472616e73666f726d2069643d226d76352220626567696e3d22626c60c08201527f352e656e6422206174747269627574654e616d653d227472616e73666f726d2260e08201527f20747970653d227472616e736c617465222066726f6d3d22302c302220746f3d6101008201527f2232302c3022206475723d22302e3035732220616363756d756c6174653d22736101208201527f756d222063616c634d6f64653d2264697363726574652220726570656174436f6101408201527f756e743d2200000000000000000000000000000000000000000000000000000061016082015250565b60006154636101658361396e565b915061546e82615286565b61016582019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76362220626560208201527f67696e3d22626c362e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c616e6960a08201527f6d6174655472616e73666f726d2069643d226d76372220626567696e3d22626c60c08201527f372e656e6422206174747269627574654e616d653d227472616e73666f726d2260e08201527f20747970653d227472616e736c617465222066726f6d3d22302c302220746f3d6101008201527f2232302c3022206475723d22302e3035732220616363756d756c6174653d22736101208201527f756d222063616c634d6f64653d2264697363726574652220726570656174436f6101408201527f756e743d2200000000000000000000000000000000000000000000000000000061016082015250565b60006156576101658361396e565b91506156628261547a565b61016582019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76382220626560208201527f67696e3d22626c382e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c2f673e60a08201527f3c2f7376673e000000000000000000000000000000000000000000000000000060c082015250565b600061578860c68361396e565b91506157938261566e565b60c682019050919050565b60006157a98261428f565b91506157b5828d613ada565b91506157c0826142db565b91506157cc828c613a11565b91506157d782614373565b91506157e3828b613a11565b91506157ee8261447d565b91506157fa828a613a11565b915061580582614587565b91506158118289613a11565b915061581c826146dd565b91506158288288613ada565b91506158338261506d565b915061583f8287613a11565b915061584a82615261565b91506158568286613a11565b915061586182615455565b915061586d8285613a11565b915061587882615649565b91506158848284613a11565b915061588f8261577b565b91508190509b9a5050505050505050505050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000600082015250565b60006158d9601a8361396e565b91506158e4826158a3565b601a82019050919050565b60006158fa826158cc565b91506159068284613a11565b915081905092915050565b600061591d8284613ada565b915081905092915050565b600061593382612db1565b915061593e83612db1565b92508282019050808211156159565761595561360e565b5b92915050565b7f546f6b656e20646f6573206e6f74206578697374210000000000000000000000600082015250565b6000615992601583612d1b565b915061599d8261595c565b602082019050919050565b600060208201905081810360008301526159c181615985565b9050919050565b7f43616e6e6f74207472616e7366657220746f207a65726f206164647921000000600082015250565b60006159fe601d83612d1b565b9150615a09826159c8565b602082019050919050565b60006020820190508181036000830152615a2d816159f1565b9050919050565b7f43616e6e6f74207472616e7366657220746f6b656e2030210000000000000000600082015250565b6000615a6a601883612d1b565b9150615a7582615a34565b602082019050919050565b60006020820190508181036000830152615a9981615a5d565b9050919050565b6000615aab82612db1565b9150615ab683612db1565b9250828203905081811115615ace57615acd61360e565b5b92915050565b7f417474656d70746564207472616e7366657220746f206e6f6e2045524337323160008201527f526563656976657220696d706c656d656e746572210000000000000000000000602082015250565b6000615b30603583612d1b565b9150615b3b82615ad4565b604082019050919050565b60006020820190508181036000830152615b5f81615b23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ba082612db1565b9150615bab83612db1565b925082615bbb57615bba615b66565b5b828204905092915050565b6000615bd182612db1565b9150615bdc83612db1565b925082615bec57615beb615b66565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615c3182612db1565b9150615c3c83612db1565b9250828202615c4a81612db1565b91508282048414831517615c6157615c6061360e565b5b5092915050565b7f3c74657874207669736962696c6974793d2268696464656e2220783d2231303060008201527f2220793d22000000000000000000000000000000000000000000000000000000602082015250565b6000615cc460258361396e565b9150615ccf82615c68565b602582019050919050565b7f39302220666f6e742d66616d696c793d2258652220666f6e742d73697a653d2260008201527f3430222066696c6c3d2200000000000000000000000000000000000000000000602082015250565b6000615d36602a8361396e565b9150615d4182615cda565b602a82019050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d8260028361396e565b9150615d8d82615d4c565b600282019050919050565b6000615da382615cb7565b9150615daf8286613a11565b9150615dba82615d29565b9150615dc68285613ada565b9150615dd182615d75565b9150615ddd8284613a11565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b6000615e1182615dea565b615e1b8185615df5565b9350615e2b818560208601612d2c565b615e3481612afd565b840191505092915050565b6000608082019050615e546000830187612e46565b615e616020830186612e46565b615e6e6040830185612fa5565b8181036060830152615e808184615e06565b905095945050505050565b600081519050615e9a81612a64565b92915050565b600060208284031215615eb657615eb5612a2e565b5b6000615ec484828501615e8b565b91505092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615f29603283612d1b565b9150615f3482615ecd565b604082019050919050565b60006020820190508181036000830152615f5881615f1c565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122073d4dcefb106cfdfff26f9b1a511b90ebb9d889ee1a14ed9dcca36c89fa9e5ba64736f6c6343000811003368747470733a2f2f617269656c6265636b65722e636f6d2f65746865727772697465722f40666f6e742d666163657b666f6e742d66616d696c793a225865223b666f6e742d7374796c653a6e6f726d616c3b666f6e742d7765696768743a3430303b666f6e742d737472657463683a313030253b7372633a75726c28646174613a666f6e742f776f6666323b6261736536342c643039474d67414241414141414366594142494141414141535567414143647a414145414141414141414141414141414141414141414141414141414141414150305a4756453063476b51624d42794445675a6741494a5343494630435a38554551674b3151544552417542534141424e67496b4134464f42434146686d4d4867586b4d68547362426a385663744e70755232517144663349786946394770772b6776342f2f72414e70593132693867446735433252724b5346494f5378506b6f72754e4c30596365666e7162542f746f2f76467752514d33776b3356487a576252673851656c7058506c31473039576b4867566f6547585230743747385174303151594c6750544d41484f484b477854354a6369334a7031614d524c466f68744f4b4e5a485057464544467374664143376b6f7546715a496545394942302b675a37354b6b4433756866526c7839504a413351715746496b534c784a58654a37774a6578417531706d314b6a4734377373502f642f614c77787664447859507a392b37632b2f2f6a553057384c53307259752b51594e4b4f557330662f2b334e50307a3832663674714a79576c3270752b633961653973793031794b736f4c4c42586754467046704b4b3851486561796e77424b437730675748704479637136704d365456366a41734c6179375139386254382f484f596a43444c6b4a5a7474797737792f524c4f6b3058654a4353725a2b70434842674b4d4b79324f74354c543043422f7a533174754d436563372b6c5579744b707448326a584d654573596d762b6762546b637041647871377179354b6e772f6e686b632f2f4e442f706b2b53693764332f374a6b7461595533464c6945425543392b393654587048734e374b396b54517555314a6d3743307a6e766e4f6548353141574e764c576a686e714441557632336c495a53616f56684f5745734843577741525a415542694e61696e5437585a6e32536e3859426c4f5430765869324552694c4770716976436b44354833566b4161416e666961715a2b746c6656534a5a2b2f3650465933654e784d48624d59686b744f6e436c614c41396763707a3043514858575432306543394d6a6839565179466d6c65724b494e383753444d2f706632384562304272436a695848664c382b48624f2b7774574744672f31615a4274447965745535436c326b72576f64706b5a734436616830392b465961486e734c3873495a336436447574764334364c376332734f345779565957774f5263756d7355524d4e524f585064704a387963647355622b5330665a4f646b2f59726a3636457462713174507571774b33563257567831484f357733477645592f3259556b74707179785150464462476f7958394a4c4461326d7a6369736a6a38385464496349374d4e47415054574a6457694d514267582b77357142576876507154484f3231777a716d322f417578467972356f496a794f4931665a6b48656e314b4150717961352b6b58335447322b3178476a327a4d644138535461675547344e65724d6c61446e616c617a38466c7a4535424d6e37556d6854564c6748673630436e684c6b6a6537634e734c6e77442f4c3268304c6f3876454d4b49534379527975514b7055714e617251367663466f4d6c75734e72764469626e6348712f50487769477770466f4c4a3549706761567073764b4b7a4b565664553174585852357030432f6732774e36536342663934712f67515951676536616631726941542f4d4e473970504848556978484a456e42527855506d2b746d737368595965724f6852786e4d714e4f2f37634965533365745179636f7836564c56783162365632376969696136644f37566d7462716c48636157557a7231334c6d446c486d5367636d784f316265355743473672444e4954374b4654504f683348774142546e6132785972543151686d5773384c384d5866456379764c775a387a517134573356732b644d3376577a426e5470335633586231792b644c46433673727930754c432f4e7a737a505455354d5434324f6a7a6f624466726664785044744e31392f64564a3557612b57692f6c304d68344e422f316574394e756658367675424b71795739477768612f32312b706257513377784858587130464c76516c432f4b725162386a6d464f782f5a6d553734323133724346436136583559666a5474314236544e556c706c43496e4e662f546e337035565171666c456f384f4c6e68426d3676473461475667317371526375767732327550386b346449474f64757a4942412b6f4e4a516736316a424e6f73596a693959764e7671645a7851635735593966303153454e3231434f2f4f73656875756459477336685755644258756d75754b6132704246722b3444735a4454416452632b38526e5069752f594c43744263496b67366279616975337a4b732b6b3761535a7348594d4d4a69783558776448514977764574746d497a4730704151394d356a4d2f4a6c4d4a62554b5833736d4b373879596c5a3436394e75504b6845383079584961504431665a6b33586e337a4657713374516d3353736133736c797736304a66353543546e3343434974565a7135425559654e38456b54772b456a796b6878744d4a52584c587246497a67662f422f61594a3248753331466447385a463432723745593235616f572f3361762b41374249514974364d554934675576566e31415256763871644e5453325a66547446394a4e692b487330772b484570433334346f64797139673356386c765563526f57343279394e742f6e36445a4b42507263327a61676337416449425150586a445855525131414a4b4f686634576a44574b2b7666353850436e69554a37773337744836397a70564a56642f31315a70573973622b65704e7a7751684f7a5137476c6e4878744b32426f48653333417130476f5072536e584432585a4658525979714c7445525574546c71486a5962487866636d436e6f6a722b64487336453169557451504a2f5a7645556d38485433315748624d6c59673842396f6f2b57397979535564663153584e3051774a2f4c424848794535734c6b434a353461784a486937582b4f4b3974554a6e5135393433472f31704d73647563694a5251684f6b586973746e5450694e6a3732656d384e5778322b5a364c31766365535a624f2b79565742355a65656b56514d4e4e7334306735644f775858436369776d31595658767569456f304f7362527a435433476133566f47773174765646374b2f58712b32596a567951624f682b68524e624d37334e39657a423661773246774a744f654f6947667a742b4f4e5342756535497563655331543171615265584f785a4b4763642b676a5554537a74764e696b475973635741642b564a4546475a3743673671476555614b64376e656a2f6d676548394f74636b384131782b786e4270452f42434c43594d703738434f464645736b476f71502b554b492b43305356754a546c4630593444536b7633526f4e50724a396b593638474e443079713151576478694a756438574d493373454a6c42574c4a692b704f4373446c44775367574544467072624563733642414e444b45336e7179706d465379386a78714a6c2f4469566f47636c624964732b5a327659624c31746f422b797a486b446642646a6d65516e504a7a75715776634151545167476430713351666d484d633974447850715258675532717345674c4670696e5a6570424f794250437139634d68636f7a647a5868454d34474231452f30725765646b42506e754a736b52487464675631733657435771527547303045677444645a50327a776f48396b4d356f734f495141394d756e62326f392f49304d2b73516a6c614d3151536b42514e67576a37774a2b656a4f6476306d41414231436c6469514b3046426b41597273686c3569704e525161424a59394576366a752b69783652576f534e722f633230345a79386947427570384b496b52425137343071514b6b4330764b53514c7471594f4d636a516a792f434a78676c39436f4b7961686f2b44362f6f64766956674574462b596b63733255776548452b4b6c675650514d41576a4d414d5749322f306755586a36356f56635741304b7479493769356a2f5a414a483061654e3862357372614c7767386c574b6d4477394a6a442f474230586c422f2b535a777666494d426d4c64356a4a6853696545323333436d326e7a7a6a7369587968787662694e734268765a4751636571754c2f346b3262675849616833454f55707a6c495138774132776b6569493639554d38326e5963486165443741767a4b516b6e6a38546b49724579505a703430427161323448765663566a4e6874316c3354675459762b30354449486f30416e3936705877314a57563839764f32575954524f4e567452716a427141775535522b59464b57706c6253754f4b544a5349524354576b6137364565547434436b4f696d45696851346c46704e74675850714f7a79717030674f76786d656f713537474162394f31517476525470377730767a71484745646435435748384357574f6d5444377943703569674c315265746c37757044464a4248566c6657726f437234356d2f7a706946484a704a5a68635248705137657a4a3168634548677742384b44684a53674958695548376f56716e437131744a65464e7931564e33696b5a2b77594b45554777414d4d554573646e48544658303245547473525a79627474354732474443676a3655356e576a4b752b484c4e366b485363624c67695951767152665941354f5654774d7965594e3474624f3338544f4371617a625555324b6a4f3134614d6463766f656d70574230447769575777685969316e4d59374538365a41523750594b6f2f2f782f334c6b5a726776484657384777736a434d5a545970384f524f6351664e636a49364e6a4735306b4c2b526e5379762b58714f31517751316261694d2b63475232506a76726e757a716e7a57734876736b616d2b70306363496275574a4e422f6175655a514274315a6f4d7656637741646d2f796c6a44776561582f3244486d5865535663554834344f777a43773856726a54596863463241775363656c4b2b446132444d5968756762706364433957303467674f374b363149416450696c694d472b345072486c49426954313644506a6562425977634131356e5850775931585a664c4b5546644739434c725672395344614b4a7869416f55574f4d76375079434c7a614f6637655168304d5466744b71425a344f6e7076652f553071524f7671475a5755674d41495a4c4545354d62465173345a4d64323769545250304a396375706744356977764d63664a6175734e616c6677587a766f7a43376c453758574446744c48786a76342f455a476859384f2f554d33714b4c5250307a6a38784a2f53524f4168675575364b7759784151534443763650647a482b50664c5a644b767743454774786f6d547a566370332b444e496975573147444467656d6679435073546571417670672f52696d6e2f5a7667687a5072787a534648436348314f424746396631522b6b4b49316b33786d7459596937366b6a324b58353947656f385067773868755a646d5634794c6353644f62467647742f4c575868335a774b457672546d4c727a4b4a305736554e6f6a674f625a50463571346179634470534b4753694e646e2b664675746d32626133476b6d736a4554576d364f6f3672764d366e7479613447785a7543364d4f7537486c4151706c535546556c6c746e6f5564586763473152376b2b39467a674f483855386d364661585163303865505355596c6a372b78424875552f437273796d626e72794a396e33314c336a48334d6c4848614f637663444a7a6f4163766a39747a75595664707464626743422b4377364a64674e376a45584b466579307043355948484234424c646f6655452f33714e6339596d38683776416b65347250625a4f7554556d70516356344653376e32464f3676543657616e554732356e462f715876484c2f425855535a39597658782b2b717066394b4d56352b2f51355a302f6b32584a353063307669674c484c596e664873616e73764d79416d33644c35645a73623456586b7050363147722f413979794a6e4b47703671745a4b464f4f473255554a5666496d4b4538474a4a775a4535666445674643345046675678504c3631616953536b6a693549792f4733617244426c4a41672b4749427176587a4b333143734a2b424e57754b484e776942453376647563477441725a5573787a6e4c344f616b4b35506547374e703142506f2f3074426e717067514455326934635447434f6c4e65746f4f7a4f6646426b566938436c516a6137727a6d2f534141686f5a50537273556a4f396e3569776836542f63705637475461755a46727a664a6d524f5a6258324e587065637334654344756f41686c6d49725a4676476355692b556d524d624c745877315337462b705a784e34724b5647657878432f4c4a7051692f2b473874444332757046375450525977683645436f443650707837557a45377746726d64355743546e4366324470525078323539454358457046574a6869435a634c6c66396237726b4b664b4249487563765975754b30764b6a2b37334356365965384869754c556b422f5a6c624561677a457974683062766446496f69714e32644b5a442f513943536350794b487a4a36505770474668334163525952764b386e4e764b43767277523730647274767063762b3673555441562f355a5a457377763642744e612f4c625252637551444b5658312f3155783938563165624c333970494965682b4d416f48327744484869776755524e77485a6c6275575072377a69763054506537464c39546b6a336b47724e63653556553849644c44346f683949692b41342f37424c4a49477a74454d5570433832497367507065762f6f6969424f7a6f2f64753669434d795639383244426d65455773327662364b2f726e49586d3768466a697058514747304c5536496848734957304c726f61684d30343054556a443755554b686945454a573833434e426e4943524f4635444e4d506e736d47324d686173587730763268563530704d65424677546e69474137413444386a5759412f65687245347943794f364a41514a444a336f446a35682f744d39336c767a3567765a345168496b55313762455664434d6c593434563043595168526b4579625274564136634f6d566c6a4a316236685631354765694d5345397272486b5952665834795236304973657444386b7168506c48675678726a33746c586662524b5138556c5762386e5a743939477a76635831336b5437575a736d377a6c6a4552336272456f6a682f566661496f38736c7867357231535245435665726c52617568523252633938696a594b61707738766d30636f4c626b77453762437a4f66456c666155664543706d4256444f6b31563976457330444c49746b676f4d6b79556e4a683131673259326e4c4f793966444553592b71495365686332686a59575156717739534b365a2f564c307a6930354a6f524f2f6a35677069743066542f6a6b71487239416b3379316b6443674a6d6a44675557666c4437447557396b75487230374b746264346e4d56427076596e6972494248556e66692f43754e7846306c363653357153496d784e4b65766343794c3739696c524e664e6f526745776a523538505869354c3559677a546e555a6430736c61742b354330364a4f72324b78545869373951437070684c5632457564444a2b53587276315a597264782b736344444c48656e4c337743684870483958614e695363414c4d416e2f323630764b4f4c4467677544416e426f644d33576b576f376231446650474a4b654f75305962755136625158386375713539343873625949767156696e765135364550703961676d343947567a315375503332486c72365375737263454348626644696e46335a6e7868353672524d34633974664755304565374d312b4948467661756930343963432f2f742f735737666e683539666a4e37575a426a63507673543431783033756d70496d584c59666a724d6d39424339624c73347253374e78362f31436b63436635635155726f7a7141436554586e734966316e675732794b62705079532f4666384b66496b6877326f2b4d4135597a437838737050685665386b41756b34326556722f70647644663166726946356d464c416d636b7459797a3476305266696b6550715a6858745959416f4a414452636535586f664a49457352526e6b352f656870456a387231553351492b3750674d442f55387a572b757a6532776e754a73723877734a315a34737563784c7450566c5478424536743848357444592b7a4437504a35386738326d7268704a46744e676557427133546f6e7137302b67454b5466656561593145364a2b6e6d4b3059384a336a3162794b43367545446f73724e72365350644b7247376164665341623348324b506a556d6b2b504c634f4e55715573426a734377566f716f4a63413952444535684830476e666b494c346b447449423856754f376c4d4c31542f6370494e386335484c6361776478534e6d2b75306952714a723273594947696b664466346241425649336667697361634e56787874353972557466385a50315a2f3745576e4f5045742f57336755443268705034624e6e4d4a38416541306745744d5039626d6f365353586e557a306154507a704d2b62444a316b4c65503149786d72542f4847582f4b4e4c75752b52644e585531354c30743056624b707973756a614c734734336456647064546c4a717768646f45542b37343354504f63776e4e517668785837784a5475575253776e4d78444a475851572f68434476504e56697a342b2f2b326d6b43516b6855582b434f7033546831775a776f4e635030664e6d634f6e5a2b486b556e59597065797674505333456e4a59364d766850427a445a764476794555336b442f4c42723546354e2b62427968634e6f3543487134345777704737304a773966644c41372f425979635541386f484845656f71373743386e48447a2f506773364e464f34714d47544d4578357946514778794376684d736b7666374d49346e776f306351484a66394b2b55432f58385974474c3378312f79332f49583979415358664d7662322f2f3056514d55594e4d53346653446c76757448354f7066793134672f6a6f50324939424e34366b4a6a44705a5a382b7a502f3335307057335951712b47676e42706e64696833525563704d6e57325a3264566c587672704f6b70324a4766694a687257554e4d4a745a5153304d7161734850375a425a556c467a41337549326351655971704e52504f554b586a7964506657716972507a73375a2b4557645132653963314448774c5a4769743950454e3766464e6933587a75746438727758637a7a4859632f7348397745447434774837674d506d6e50596f6671306e35392b4b5043686b454a6e4d3954503770717a48356f3967656c696633515437416f394735414a3141707850794f7956664f4437344454397358556c744e364679386c52485256692b764c3146336c4d52637a677159764c6c72653379355258685738677761477736435933545977696978364278795451306468683045353475664c4b39444f326d6859787456645742474f706c654741752f7365704e4f444c4264544644707832624d447762785355365a4e535264496f67574b3673432b63534f7935526269597a69327754364138796b657242666576746e6c776458754b2f754b496e627545777035625750354d6b2f6f69385173363965674569457965372b627335716441735461494948346c4e2f4d6a777a7a6c6a4179566c706169647369336a714c6c3737507553466c54612f463952345863312f6e6d4a765432676e4661334c4239657249512b475a6767432f777778644136686556393439515047344d6c2f63686a716b6c534c795141597970586272614447714338764d6346514835334f6f786872584e53592f4943353438327537424466392f484e57464c316d3032454170772f6364354445457278347a49307148756a36703153696f592f366d436848396735466b6f685733627a4e6147436a536336414e55495074432b777a666b324a70304d4542765539364372354b6e4b4539455a62792b544b71464c49647232642b485866664a5a4d3641744a6a4a6167694f2b573045377577495a38396b45684355525673544c35426c4830454a747546697236326a732f794b4f786a3437514751483869474d6b6f4f4a48486d39586745627666334d79343271654d675365504e546d7755333973532b5849743476694a6330614e4f4d3457315378705a4c2f586c73356430657571426b4a6a51674950777179526535475353475679706e686d6b75466d777439366f6d787164726439536c334e6e41417a5064525163774f74326c51756c65427264396277796763347373716b5a34666f41345067357a71684c4c4f597a7a7a49722b55373733576e3377597244782f5a627669664c466a6d324f7258385a7a614b6c7365627634332f66676f6375716f6d584c385075416568446a452f762f2f383641466b31635730557078392f71554552414642394570623531654a676e7574424e5666693458384845476c30726f704c70334e70386e7930486f6b6b3546504b30354c4a766e675a4c4964397a456d634d744d6447344c414c4f536f4665462f2f33595a615174532b4c6455364751706f555a33534e426838305734596c5a7977365a2b506b72784c58704f5262354c50545a434773714646346d4866584c317678397137752b34364c38784c3166395a7864697172732b4d43536f786f6b38567144332b7336444c374b5a496842626e774873513232543553356171517a4f39334d6337625a6d49776238416c4566506b2f414979422b6e6a596a394d546853656b774f45495676756b6c3858304e6e6f6b2f7a3053516f5a3039355a4449795a6437714131324b364e5236586643517362354756646335394e614f37652b6535556854505a4571686b2b664b6b6d4a38675a3430793253634e7541786171747368475a51314f4e4c374d34592b57574c766e4f54312f464c674b626d454f494e4539776f3738634e74783230526a356b5647784d334c36725053786d6a44546f6d72474954397a462b4c61525030754b6c377a7736737049484b4c666b6c61624f6231697a334f766e696f676658626e2f7939686a376838385031334255584c517a6c49394c4b7767586e7063304869595a555431546859464231713642453677323638754c6d32554276732b58682f6c2f7a47787a35336239694c66542b50744a507375774b5661427458456f794567502f4a644c3257576e356b6137496c532b51382f794a496c44762f2b4f5939346a5a58645539574f344f344d46754c5364514e6261756f6f6b58635a31686f31476662666e33507773382f577230777930303166516439777a676164726f6a3936374b57394d63475773485a35653475327079555744445848664e76617270394f637a686f55337473677248707047436342314f72764a68746b2b6e597630316557346d3136356441755571635149556a37675941335478475a7070797a58497570326539596a717464775842672b2b4252584256304c5367745534797a524f4d735158536c4e415245307a4a547675707735564a483371636576512b6c4f716637666e384a326277453261317077776139724943454f32436661534d4f676c5043586742553963586b57715a4a476b51735030724a2f57416955584156455a6d7176646e6c4c4e6c7357497139444c50336951716a78756271505637743373424f5854506974414951324763784f3443496861576d3639552b4d6f514b39394a4842317362687545532b795a5777387a756a3635527951734e706b7a493835664d70316c7961536c4e666f7737522f374239696e324f643255686175746b306174746b6e702f2b7378736373565a476f745371353062736869625a577135306c392f76317a516874756435377a666650644e4c45316b36335a33394c4e36313175756d67726157544f577a6a384932515a4a3933747a45362b2f374d2b34464e6876643979555576353730457a3730384e6a3231527274594733352f2b6b734746387658597774524b353544754a6a4746546832414c4d7238345332437a30587a66675a45756437587a6b2f774f2b70684d30586579375968506a6c74614b314136674c2b6e6330766b766a4a7832664f484c3744327964507a48394676362f2f45546162344c44546e476171694b6f7872686f78425247455037554e77366b3374786b6f496975486154346c44354f3543374b7734423337466d435368476d6c454c6c726d654a77412b4a6a66386978666c51796249426931533737504a582b4f366d323734464a4b6b506c44457a566a756e7473734c43584f64774a39427367645645447a674a52426578306b5a5245584f58352f787566783854567067642f4971644670657875354d4331425470667a376b363265334b37506d6a6863566d416433536b5330563062502b50543137586e624261553874576b4f336b434439544a71584667764d77434c30504131597a5a79584158584c3961575a57706f4345594e673473374a7574595233673354685536494b316a4e52534f66764a7931654947616f344b4f5653387a536c374d38356c57594c743370646a434d5465514559476d544b7a635a4651516132617977483643302f4f786468372f2b436c383374392f41394550684b73354b35375a3057637774696c38616a516c5157595339744c62654b483970586541627279676f35386f37356e56342f382b55426461796f387951626d7449352f68796a64522b5a4545356c2b4d6f5668366d3046334b6459507574683638707a444e7a704c324834336b6c4b363861394f34537a6e55476d4c775370555a6a6145434b684f52794a4243516f687266435a445161354b78547577486f62306e574b796639686e332f3752397a3546547a393964534f7931685862362f505537396749556a34636b54706958396f462b6872716a67303663616e6750447862366764633636703362464e71704250584f6d354c363673352b6e57566937536a4c5a2b384d7432534e6a732b66766c312f66655857585a46316a396734743377517a5944732b522b42366578686e53642f5673375a6233333268562b6469535071724f2f582b673646646f574a6e3858753633324a51372b667854472f2f766769726259666d4c5173304d79792f445a38766f57432f4f31576244787549354535585a715a72356452366479364e586c74376f6a30517a4f65785063776456366632636371364c4a387a7a514b51332f37423448416467377972574152443674364f48736c727842344978304e4e76307758304148746e47307a777a34395550626234702f35536631756c7239525377367461544f2b332b445571644a3174336434656f74613264784553395978633759624e7a614c68394c4348493244626a616451593431303778616f334d2b4f4347492f324855794c3672412f6c563275346b33632f507635684530766b347a75676a4e484d795853464f424a674d6d6e39444b2b762b36657a7a482f6b704b42475263436562475a437769717957796b6c754a5850754a502b6975624d5856393364684d484650624e7a7a5531307a7150502f7549774f432f33535637466d5a6d4863377a46662b2b512b5374614b49353936592f56634c6f59567278522b39396e52654c6937627a424d3052304d674e484b6e4b5874486d7759335950576f4c4b4e344c46556658785a663768486435694e6956526c774d395544356b6a753544646e75676d676b64396c41332f4353334448636754747a6f6f576c63526250664b7844484b534a7276326674436142632f6e676d33637669767a797245446641466e6873586f71384a34754b736e784c79514b52766e444268782b382b31304c33442b343739437137754c556c2f4d42657662665a4e354c5774474471514d7a7a70334c4477684870593368764356684c47354952366a324a73586f36316c39685a4866576c46557346556262323136564a793074367865384f727a2b2b35577a727467306b664d4b5966346737536e4b746f6f7655656e2b45714143732f504635427567315778554c445758556c59774a3054385341706d5a485638396d567a4b3433486f384e67526c4e7559532f6d37424654683667536e316f515a51476333783932755270325a4146424f5a4d36634f79513561784c455559734d73706370482b6d772f624a723063312f494c73744a4b31624e5557684e74464f394271386876377065614e4970786d39543945764c3742302f6e4a786b677250392b6b75715567746d54794c696d435537694e52745a35464e46476847537436764a6365766944614351464d78632b51485852486e39584f6d2b44486a38386b376f696d717637742f6e5062324e4434412b7742694166596c6f5044766158726b422f49682f656b65426632742b78492f2f6865394a2f68663531474d466e435044626b38494754696b2f39506c3377784e7871537846725069596532585834652f336d323244525a464c6d7961625232315853714642395479703338613841306f4234512b714664707174563379664432786635624c4535364f37657065377537643163724d505454667138496b30566c55333556636c4b35454a634334494c494137576c304d53336533364c65394f616257695974507a4c7a797a3234523033452b6479786e4477454f37374a664c48382b7141487a3642526c4f352b644e654566784630726d65363739466443775873364a64706c5771375a37456d4450705631376f465732614372315437654f504d776d6f6c79466c714852576753494c304741366753392b6b5279664861446e776e3638655577784a644633673835546a37317a443079776177394547422f4f35773359705330445033397964527844347a6c30792b5779564142514e4d4b35796c594977527830454958765a6f47646e6662567467522f38514e5967393656705a46636553754233352b394e566139554f364b6c6e4d374c36766f494857614a792f5a64765366695656546f484d4a2f6232707537303147614b586771417435674d51394f6f3230646e4649707a624b6d6a5a5336796c4e764436665331616e534f6344766d7a2b3941674b4d72617032754f5470617568767a585a5a304c6a394b6e665646636f5751566a7a4d782f427a49454c3837506545634d715143624742564f4d68636935467334523566344a7978704138364d5965484a7965486c7276526b524b71683972382b757a6f55695359695948594d63773334452b497a4e4e656f6e304253676f49554b79546a4a4370622b33306e535450324e6f7437666e632b67493953556f555763482b2f7555427a6a5750676e6a754c4a4d70585477732f786b6e446f5751795974726851677345335477797243515a5a3542704d336145394f7a4f375a43625868736754525338737367365251486f30474d345659357a33523347426f4c442b4963565074797a544e364242572b6859456249597378614e7a466d6f786679784e434f44382f53304d73776f6c702b386a6f58316a48535532504263596f597544753178564b2b5a6a795150305934664f516233577a4232485a396255664d6870776b6e772b54705a4d72316b484963686a4d6a4f5467562f714a306b6a64746f337a587337364d32576c444b75444264324c426d6e706f68426467464443686e42423838457377795246434565734f4f704b5943794132522f6335435550564e39306b61444a58796b6943447377454b316d4c523763706f4571326154326d64486a377941416d504f3549516f76615a58464469447173335267436c337671426a366c47456159676a415978747567586c432b4d64306f4653514a37726654445a414b574a784f594343584e4642654c4c6241614868316c7844305376444278653350336671663555576d6b50374c414f334e3263624854484273665166614a585763343852426f494b676832393647773047424730594c4738367541386c30536b664335386f35365844616c37667a7970765656634b3946313830764c772b336a37565a6c4c4a613966673154636330722b684b686c454b4c4c74544175426952754a735832725a4761384c4576726762446b30546834796769335a377a3244393059354f416c4957424d2f2f457a746d386e6b796a616c3949543462644c434a71497959597335316961777352426e6d7846646d594d74586f334f4c4f6f716d534f7a6564594e7765686d4731615257574a31664b646e596930574e6463575a41724245636d53347a53504b632b4b6e6a7144354e72347835766472507a4c73464e36344239775177555556395072706c7350486a322b4f6c6251334e736643486e6e575a686142616d46556e42514538794d56364161303349524d59675143784a6c7a767a644f4153683034516445654d4744483646714e35334f43303244724454615077307a4e45724c6531586d754e7159746a342b637544624e32504a76684157342b3339306c52656b5330653730614b347343683538725a564b49595731706d62476c78756f4b4d516f2f656d662b6162476f522f5272663855596463616d4c564431524c396d76664144465549384566684a503258367a754b6f36514d5334564c76695938344e6e4b42694c3048317931724972434c6773654946525535577a3531584d564e636a4e6665347a314736654574387454516c31567376414b6f47733152696b675a526e35687067365751783065464563675a435564444b35326a52366e794f576a2b566a61555539733872706c7a5969486f6567387146564c43526d7579676742615653716a51614f6964686e3243434f41365237525a446b616c314176736878594d41565466586f6e35552b364e6c30676b4b6b754d4847306c77633559574f4c57785a386c5553785a536249756a61323472546b6a38394a5568774463346278454e676168784d536a75535134484e45535a3854756b6d68725843354a6a437a35347351315a51535757584d75576a4275314a676c4770534b696835486164515a37677961345a71316e4d563869734e567a736f54466d4a71676d66637458504d73713347716c70674678725256756c5363354838494b577374426c66616e6c5a515a3155303468704f6f714a59593470366a747a313262506e6863725a5a466c42386d53395131536e2b326361526e626772506b77506f464965317446622f48614566486739504c425a6870366c364574774b754f72786e395674546952305059384639676252686f3561586d462b415a696f73413430556c342b4475695a736157316279547657626d6c46347a535a724438453978732b744d504a326831735a565076555474382f58477463734c775854486a32786a57446a624a6f7150424475463677514676667054682f65616d4d6f62375a4d6d3553583154647752717973627a6f5559356538656c39414156412f46666435584638536b38386d4a2f7175644c30676930304c7863473361304f3264564d4249675150442f3661514943597549696f6b726f5349674969476a6f4b4b68417a4177675341736242786350487743516a4345694a69456c49796367704b4b476b704453306650774d6a457a4d4c4b78733742366267576c6c5a7455747031364e536c5734396566666f4e474a53576b5a567a77694e4f7370317932686c6e6e584e656e744e5a6e686c504a704f7479756a5578626d786876304e5a72445356466136334e525275745130564c7259394c6546707342383077317a6a59485a78722f4e4e485355546a66634d4e55516d4b775054435144343373435933762b4e6c70337458536b376d2f44645945682f784a753362485351713131564a58705339544c6d746c31556c737235666731556c56743279704a745a57533270615237474258694774624f597979793053354e69327174685175646842632f4252696b346a646c6f434e374c6977747357457065796f674f64484243706362596966377766354e7343766c2f447a53396b2b587075587a574637754e573632626a76596975735743654859783263617532635047766a6348307236784957714a6c746871774a717459497866734d3448506e476259656e4c344f744b696162555677746b5667356865456d55796757736730736758394763366c2b4d436268706658347249646249344f636c34466e56724e6f6b7659454f314e41314a33734a6b61514642464e31506a565977786c2f59506a514a3471656e706e46725873446133706b484e726256564f3159585459745865533571633775456c3349486a2f50722f47332b4135644c68754b35794c4677576d365130705246626d7a5078696c735333614a6445794b532b656c36394c626b675237676e376e7665304845487431536c7134796e4b4b7a65776647483342714953564d67654c732b7673625361703644637a525870414c2f745a616663444f5568332b364742307a3439342b735a4330676d3630766e4d3062756450726b5461495837646b76764941646932372f35557a464c51477574477647724547437a7758725768526e6f7071556d7641776b47494f487871694c6b5243446774514839717058746642354933744e754965686450436a74344d2920666f726d61742822776f66663222293b756e69636f64652d72616e67653a552b303030302d303046462c552b303133312c552b303135322d303135332c552b303242422d303242432c20552b303243362c552b303244412c552b303244432c552b323030302d323036462c552b323037342c552b323041432c552b323132322c552b323139312c552b323139332c552b323231322c552b323231352c552b464546462c552b464646443b7d

Deployed Bytecode

0x60806040526004361061012a5760003560e01c80636352211e116100ab578063a2762a5d1161006f578063a2762a5d1461039a578063b88d4fde146103c3578063c87b56dd146103ec578063dde9d72614610429578063e8a3d48514610466578063e985e9c5146104915761012a565b80636352211e146102b557806370a08231146102f25780638456cb591461032f57806395d89b4114610346578063a22cb465146103715761012a565b806323b872dd116100f257806323b872dd146102195780633ccfd60b146102425780633f4ba83a1461024c57806342842e0e146102635780635ece5b5e1461028c5761012a565b806301ffc9a71461012f57806302341c711461016c57806306fdde0314610188578063081812fc146101b3578063095ea7b3146101f0575b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612a90565b6104ce565b6040516101639190612ad8565b60405180910390f35b61018660048036038101906101819190612c39565b610548565b005b34801561019457600080fd5b5061019d610746565b6040516101aa9190612d8f565b60405180910390f35b3480156101bf57600080fd5b506101da60048036038101906101d59190612de7565b6107d8565b6040516101e79190612e55565b60405180910390f35b3480156101fc57600080fd5b5061021760048036038101906102129190612e9c565b61085d565b005b34801561022557600080fd5b50610240600480360381019061023b9190612edc565b610974565b005b61024a6109d4565b005b34801561025857600080fd5b50610261610b79565b005b34801561026f57600080fd5b5061028a60048036038101906102859190612edc565b610c32565b005b34801561029857600080fd5b506102b360048036038101906102ae9190612f2f565b610c52565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190612de7565b610d01565b6040516102e99190612e55565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612f78565b610db1565b6040516103269190612fb4565b60405180910390f35b34801561033b57600080fd5b50610344610e68565b005b34801561035257600080fd5b5061035b610f21565b6040516103689190612d8f565b60405180910390f35b34801561037d57600080fd5b5061039860048036038101906103939190612ffb565b610fb3565b005b3480156103a657600080fd5b506103c160048036038101906103bc919061303b565b611133565b005b3480156103cf57600080fd5b506103ea60048036038101906103e591906131c7565b611270565b005b3480156103f857600080fd5b50610413600480360381019061040e9190612de7565b6112d2565b6040516104209190612d8f565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190612de7565b61140d565b60405161045d9190612d8f565b60405180910390f35b34801561047257600080fd5b5061047b6117b4565b6040516104889190612d8f565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b3919061324a565b611809565b6040516104c59190612ad8565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054157506105408261189d565b5b9050919050565b60006006549050600460009054906101000a900460ff1615600f906105a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059a9190613383565b60405180910390fd5b5060008110156013906105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e39190613383565b60405180910390fd5b506007548110601390610635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062c9190613383565b60405180910390fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610677611907565b73ffffffffffffffffffffffffffffffffffffffff16146106dd576005543410156011906106db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d29190613383565b60405180910390fd5b505b6106ea818686868661190f565b6106f381611ae6565b600960008381526020019081526020016000206004019081610715919061353c565b50600660008154809291906107299061363d565b919050555061073f610739611907565b82611c66565b5050505050565b6060600a8054610755906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610781906132b9565b80156107ce5780601f106107a3576101008083540402835291602001916107ce565b820191906000526020600020905b8154815290600101906020018083116107b157829003601f168201915b5050505050905090565b60006107e382611d6d565b610822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610819906136d1565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086882610d01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf9061373d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f7611907565b73ffffffffffffffffffffffffffffffffffffffff161480610926575061092581610920611907565b611809565b5b610965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095c9061373d565b60405180910390fd5b61096f8383611dd8565b505050565b61098561097f611907565b82611e91565b6109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb9061373d565b60405180910390fd5b6109cf838383611f6f565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a15611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a669190613383565b60405180910390fd5b50600047905060008111601190610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab39190613383565b60405180910390fd5b506000610ac7611907565b73ffffffffffffffffffffffffffffffffffffffff1682604051610aea9061378e565b60006040518083038185875af1925050503d8060008114610b27576040519150601f19603f3d011682016040523d82523d6000602084013e610b2c565b606091505b5050905080601290610b74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6b9190613383565b60405180910390fd5b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bba611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b9190613383565b60405180910390fd5b506000600460006101000a81548160ff021916908315150217905550565b610c4d83838360405180602001604052806000815250611270565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c93611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce49190613383565b60405180910390fd5b5080600d9081610cfd919061353c565b5050565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9f906137ef565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1890613881565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ea9611907565b73ffffffffffffffffffffffffffffffffffffffff1614601090610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa9190613383565b60405180910390fd5b506001600460006101000a81548160ff021916908315150217905550565b6060600b8054610f30906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5c906132b9565b8015610fa95780601f10610f7e57610100808354040283529160200191610fa9565b820191906000526020600020905b815481529060010190602001808311610f8c57829003601f168201915b5050505050905090565b610fbb611907565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906138ed565b60405180910390fd5b8060036000611035611907565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110e2611907565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111279190612ad8565b60405180910390a35050565b8461113d81610d01565b73ffffffffffffffffffffffffffffffffffffffff1661115b611907565b73ffffffffffffffffffffffffffffffffffffffff16146010906111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac9190613383565b60405180910390fd5b5060065486106013906111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f59190613383565b60405180910390fd5b5061120c868686868661190f565b85611215611907565b73ffffffffffffffffffffffffffffffffffffffff167f09378ba74800f0d1fb4ca319ea017e68d477fe87daac66148c7369fd83fcd58787878787604051611260949392919061390d565b60405180910390a3505050505050565b61128161127b611907565b83611e91565b6112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b79061373d565b60405180910390fd5b6112cc8484848461226e565b50505050565b6060600654821060139061131c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113139190613383565b60405180910390fd5b506113e7611329836122ca565b600c6009600086815260200190815260200160002060040161134a8661140d565b600e60096000898152602001908152602001600020600001600960008a8152602001908152602001600020600101600960008b8152602001908152602001600020600201600960008c8152602001908152602001600020600301600960008d81526020019081526020016000206004016040516020016113d39a99989796959493929190613f39565b60405160208183030381529060405261242a565b6040516020016113f7919061413a565b6040516020818303038152906040529050919050565b60606006548210601390611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e9190613383565b60405180910390fd5b506000601661146784600061258d565b61147285600161258d565b61147d86600261258d565b61148887600361258d565b6009600089815260200190815260200160002060040161154d611548600960008c815260200190815260200160002060000180546114c5906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546114f1906132b9565b801561153e5780601f106115135761010080835404028352916020019161153e565b820191906000526020600020905b81548152906001019060200180831161152157829003601f168201915b505050505061287f565b6122ca565b6115fc6115f7600960008d81526020019081526020016000206001018054611574906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546115a0906132b9565b80156115ed5780601f106115c2576101008083540402835291602001916115ed565b820191906000526020600020905b8154815290600101906020018083116115d057829003601f168201915b505050505061287f565b6122ca565b6116ab6116a6600960008e81526020019081526020016000206002018054611623906132b9565b80601f016020809104026020016040519081016040528092919081815260200182805461164f906132b9565b801561169c5780601f106116715761010080835404028352916020019161169c565b820191906000526020600020905b81548152906001019060200180831161167f57829003601f168201915b505050505061287f565b6122ca565b61175a611755600960008f815260200190815260200160002060030180546116d2906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546116fe906132b9565b801561174b5780601f106117205761010080835404028352916020019161174b565b820191906000526020600020905b81548152906001019060200180831161172e57829003601f168201915b505050505061287f565b6122ca565b6040516020016117739a9998979695949392919061579e565b604051602081830303815290604052905061178d8161242a565b60405160200161179d91906158ef565b604051602081830303815290604052915050919050565b606060006117e160156040516020016117cd9190615911565b60405160208183030381529060405261242a565b6040516020016117f1919061413a565b60405160208183030381529060405290508091505090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b602961191a8561287f565b1060149061195e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119559190613383565b60405180910390fd5b50602961196a8461287f565b106014906119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a59190613383565b60405180910390fd5b5060296119ba8361287f565b106014906119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f59190613383565b60405180910390fd5b506029611a0a8261287f565b10601490611a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a459190613383565b60405180910390fd5b5083600960008781526020019081526020016000206000019081611a72919061353c565b5082600960008781526020019081526020016000206001019081611a96919061353c565b5081600960008781526020019081526020016000206002019081611aba919061353c565b5080600960008781526020019081526020016000206003019081611ade919061353c565b505050505050565b606060006040518060400160405280600781526020017f2338383838383800000000000000000000000000000000000000000000000000815250905060008303611b67576040518060400160405280600781526020017f23463930313641000000000000000000000000000000000000000000000000008152509050611c5d565b600083118015611b775750600b83105b15611bb9576040518060400160405280600781526020017f23303142334639000000000000000000000000000000000000000000000000008152509050611c5c565b600a83118015611bc95750606f83105b15611c0b576040518060400160405280600781526020017f23464631393030000000000000000000000000000000000000000000000000008152509050611c5b565b606e83118015611c1c575061045783105b15611c5a576040518060400160405280600781526020017f233139464630300000000000000000000000000000000000000000000000000081525090505b5b5b5b80915050919050565b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb59190615928565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e4b83610d01565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e9c82611d6d565b611edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed2906159a8565b60405180910390fd5b6000611ee683610d01565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f5557508373ffffffffffffffffffffffffffffffffffffffff16611f3d846107d8565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f665750611f658185611809565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f8f82610d01565b73ffffffffffffffffffffffffffffffffffffffff1614611fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdc9061373d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b90615a14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90615a14565b60405180910390fd5b60008111612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90615a80565b60405180910390fd5b612111600082611dd8565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121609190615aa0565b9250508190555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121b69190615928565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612279848484611f6f565b6122858484848461288a565b6122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90615b46565b60405180910390fd5b50505050565b606060008203612311576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612425565b600082905060005b6000821461234357808061232c9061363d565b915050600a8261233c9190615b95565b9150612319565b60008167ffffffffffffffff81111561235f5761235e612b0e565b5b6040519080825280601f01601f1916602001820160405280156123915781602001600182028036833780820191505090505b5090505b6000851461241e576001826123aa9190615aa0565b9150600a856123b99190615bc6565b60306123c59190615928565b60f81b8183815181106123db576123da615bf7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124179190615b95565b9450612395565b8093505050505b919050565b6060600082510361244c57604051806020016040528060008152509050612588565b6000604051806060016040528060408152602001615f60604091399050600060036002855161247b9190615928565b6124859190615b95565b60046124919190615c26565b67ffffffffffffffff8111156124aa576124a9612b0e565b5b6040519080825280601f01601f1916602001820160405280156124dc5781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015612548576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453600184019350506124ed565b505060038651066001811461256457600281146125775761257f565b603d6001830353603d600283035361257f565b603d60018303535b50505080925050505b919050565b606060006009600085815260200190815260200160002060000180546125b2906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546125de906132b9565b801561262b5780601f106126005761010080835404028352916020019161262b565b820191906000526020600020905b81548152906001019060200180831161260e57829003601f168201915b50505050509050600183036126dc5760096000858152602001908152602001600020600101805461265b906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612687906132b9565b80156126d45780601f106126a9576101008083540402835291602001916126d4565b820191906000526020600020905b8154815290600101906020018083116126b757829003601f168201915b505050505090505b6002830361278a57600960008581526020019081526020016000206002018054612705906132b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612731906132b9565b801561277e5780601f106127535761010080835404028352916020019161277e565b820191906000526020600020905b81548152906001019060200180831161276157829003601f168201915b50505050509050612835565b60038303612834576009600085815260200190815260200160002060030180546127b3906132b9565b80601f01602080910402602001604051908101604052809291908181526020018280546127df906132b9565b801561282c5780601f106128015761010080835404028352916020019161282c565b820191906000526020600020905b81548152906001019060200180831161280f57829003601f168201915b505050505090505b5b61283e836122ca565b600960008681526020019081526020016000206004018260405160200161286793929190615d98565b60405160208183030381529060405291505092915050565b600081519050919050565b60006128ab8473ffffffffffffffffffffffffffffffffffffffff16612a11565b15612a04578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128d4611907565b8786866040518563ffffffff1660e01b81526004016128f69493929190615e3f565b6020604051808303816000875af192505050801561293257506040513d601f19601f8201168201806040525081019061292f9190615ea0565b60015b6129b4573d8060008114612962576040519150601f19603f3d011682016040523d82523d6000602084013e612967565b606091505b5060008151036129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390615f3f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a09565b600190505b949350505050565b600080823b905060008111915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a6d81612a38565b8114612a7857600080fd5b50565b600081359050612a8a81612a64565b92915050565b600060208284031215612aa657612aa5612a2e565b5b6000612ab484828501612a7b565b91505092915050565b60008115159050919050565b612ad281612abd565b82525050565b6000602082019050612aed6000830184612ac9565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b4682612afd565b810181811067ffffffffffffffff82111715612b6557612b64612b0e565b5b80604052505050565b6000612b78612a24565b9050612b848282612b3d565b919050565b600067ffffffffffffffff821115612ba457612ba3612b0e565b5b612bad82612afd565b9050602081019050919050565b82818337600083830152505050565b6000612bdc612bd784612b89565b612b6e565b905082815260208101848484011115612bf857612bf7612af8565b5b612c03848285612bba565b509392505050565b600082601f830112612c2057612c1f612af3565b5b8135612c30848260208601612bc9565b91505092915050565b60008060008060808587031215612c5357612c52612a2e565b5b600085013567ffffffffffffffff811115612c7157612c70612a33565b5b612c7d87828801612c0b565b945050602085013567ffffffffffffffff811115612c9e57612c9d612a33565b5b612caa87828801612c0b565b935050604085013567ffffffffffffffff811115612ccb57612cca612a33565b5b612cd787828801612c0b565b925050606085013567ffffffffffffffff811115612cf857612cf7612a33565b5b612d0487828801612c0b565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d4a578082015181840152602081019050612d2f565b60008484015250505050565b6000612d6182612d10565b612d6b8185612d1b565b9350612d7b818560208601612d2c565b612d8481612afd565b840191505092915050565b60006020820190508181036000830152612da98184612d56565b905092915050565b6000819050919050565b612dc481612db1565b8114612dcf57600080fd5b50565b600081359050612de181612dbb565b92915050565b600060208284031215612dfd57612dfc612a2e565b5b6000612e0b84828501612dd2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e3f82612e14565b9050919050565b612e4f81612e34565b82525050565b6000602082019050612e6a6000830184612e46565b92915050565b612e7981612e34565b8114612e8457600080fd5b50565b600081359050612e9681612e70565b92915050565b60008060408385031215612eb357612eb2612a2e565b5b6000612ec185828601612e87565b9250506020612ed285828601612dd2565b9150509250929050565b600080600060608486031215612ef557612ef4612a2e565b5b6000612f0386828701612e87565b9350506020612f1486828701612e87565b9250506040612f2586828701612dd2565b9150509250925092565b600060208284031215612f4557612f44612a2e565b5b600082013567ffffffffffffffff811115612f6357612f62612a33565b5b612f6f84828501612c0b565b91505092915050565b600060208284031215612f8e57612f8d612a2e565b5b6000612f9c84828501612e87565b91505092915050565b612fae81612db1565b82525050565b6000602082019050612fc96000830184612fa5565b92915050565b612fd881612abd565b8114612fe357600080fd5b50565b600081359050612ff581612fcf565b92915050565b6000806040838503121561301257613011612a2e565b5b600061302085828601612e87565b925050602061303185828601612fe6565b9150509250929050565b600080600080600060a0868803121561305757613056612a2e565b5b600061306588828901612dd2565b955050602086013567ffffffffffffffff81111561308657613085612a33565b5b61309288828901612c0b565b945050604086013567ffffffffffffffff8111156130b3576130b2612a33565b5b6130bf88828901612c0b565b935050606086013567ffffffffffffffff8111156130e0576130df612a33565b5b6130ec88828901612c0b565b925050608086013567ffffffffffffffff81111561310d5761310c612a33565b5b61311988828901612c0b565b9150509295509295909350565b600067ffffffffffffffff82111561314157613140612b0e565b5b61314a82612afd565b9050602081019050919050565b600061316a61316584613126565b612b6e565b90508281526020810184848401111561318657613185612af8565b5b613191848285612bba565b509392505050565b600082601f8301126131ae576131ad612af3565b5b81356131be848260208601613157565b91505092915050565b600080600080608085870312156131e1576131e0612a2e565b5b60006131ef87828801612e87565b945050602061320087828801612e87565b935050604061321187828801612dd2565b925050606085013567ffffffffffffffff81111561323257613231612a33565b5b61323e87828801613199565b91505092959194509250565b6000806040838503121561326157613260612a2e565b5b600061326f85828601612e87565b925050602061328085828601612e87565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132d157607f821691505b6020821081036132e4576132e361328a565b5b50919050565b60008190508160005260206000209050919050565b6000815461330c816132b9565b6133168186612d1b565b9450600182166000811461333157600181146133475761337a565b60ff19831686528115156020028601935061337a565b613350856132ea565b60005b8381101561337257815481890152600182019150602081019050613353565b808801955050505b50505092915050565b6000602082019050818103600083015261339d81846132ff565b905092915050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026133f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133b5565b6133fc86836133b5565b95508019841693508086168417925050509392505050565b6000819050919050565b600061343961343461342f84612db1565b613414565b612db1565b9050919050565b6000819050919050565b6134538361341e565b61346761345f82613440565b8484546133c2565b825550505050565b600090565b61347c61346f565b61348781848461344a565b505050565b5b818110156134ab576134a0600082613474565b60018101905061348d565b5050565b601f8211156134f0576134c1816132ea565b6134ca846133a5565b810160208510156134d9578190505b6134ed6134e5856133a5565b83018261348c565b50505b505050565b600082821c905092915050565b6000613513600019846008026134f5565b1980831691505092915050565b600061352c8383613502565b9150826002028217905092915050565b61354582612d10565b67ffffffffffffffff81111561355e5761355d612b0e565b5b61356882546132b9565b6135738282856134af565b600060209050601f8311600181146135a65760008415613594578287015190505b61359e8582613520565b865550613606565b601f1984166135b4866132ea565b60005b828110156135dc578489015182556001820191506020850194506020810190506135b7565b868310156135f957848901516135f5601f891682613502565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061364882612db1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361367a5761367961360e565b5b600182019050919050565b7f4e6f6e6578697374656e7420746f6b656e210000000000000000000000000000600082015250565b60006136bb601283612d1b565b91506136c682613685565b602082019050919050565b600060208201905081810360008301526136ea816136ae565b9050919050565b7f4e6f7420617574686f72697a6564210000000000000000000000000000000000600082015250565b6000613727600f83612d1b565b9150613732826136f1565b602082019050919050565b600060208201905081810360008301526137568161371a565b9050919050565b600081905092915050565b50565b600061377860008361375d565b915061378382613768565b600082019050919050565b60006137998261376b565b9150819050919050565b7f4e6f74206d696e74656420796574210000000000000000000000000000000000600082015250565b60006137d9600f83612d1b565b91506137e4826137a3565b602082019050919050565b60006020820190508181036000830152613808816137cc565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061386b602a83612d1b565b91506138768261380f565b604082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006138d7601983612d1b565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060808201905081810360008301526139278187612d56565b9050818103602083015261393b8186612d56565b9050818103604083015261394f8185612d56565b905081810360608301526139638184612d56565b905095945050505050565b600081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b60006139af60018361396e565b91506139ba82613979565b600182019050919050565b7f226e616d65223a20224574686572777269746572202300000000000000000000600082015250565b60006139fb60168361396e565b9150613a06826139c5565b601682019050919050565b6000613a1c82612d10565b613a26818561396e565b9350613a36818560208601612d2c565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000613a7860028361396e565b9150613a8382613a42565b600282019050919050565b7f226465736372697074696f6e223a202200000000000000000000000000000000600082015250565b6000613ac460108361396e565b9150613acf82613a8e565b601082019050919050565b60008154613ae7816132b9565b613af1818661396e565b94506001821660008114613b0c5760018114613b2157613b54565b60ff1983168652811515820286019350613b54565b613b2a856132ea565b60005b83811015613b4c57815481890152600182019150602081019050613b2d565b838801955050505b50505092915050565b7f2261747472696275746573223a205b0000000000000000000000000000000000600082015250565b6000613b93600f8361396e565b9150613b9e82613b5d565b600f82019050919050565b7f2274726169745f74797065223a2022436f6c6f72222c20000000000000000000600082015250565b6000613bdf60178361396e565b9150613bea82613ba9565b601782019050919050565b7f2276616c7565223a202200000000000000000000000000000000000000000000600082015250565b6000613c2b600a8361396e565b9150613c3682613bf5565b600a82019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b6000613c7760018361396e565b9150613c8282613c41565b600182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613cc360018361396e565b9150613cce82613c8d565b600182019050919050565b7f5d2c000000000000000000000000000000000000000000000000000000000000600082015250565b6000613d0f60028361396e565b9150613d1a82613cd9565b600282019050919050565b7f22616e696d6174696f6e5f75726c223a20220000000000000000000000000000600082015250565b6000613d5b60128361396e565b9150613d6682613d25565b601282019050919050565b7f22636f766572223a202200000000000000000000000000000000000000000000600082015250565b6000613da7600a8361396e565b9150613db282613d71565b600a82019050919050565b7f226c31223a202200000000000000000000000000000000000000000000000000600082015250565b6000613df360078361396e565b9150613dfe82613dbd565b600782019050919050565b7f226c32223a202200000000000000000000000000000000000000000000000000600082015250565b6000613e3f60078361396e565b9150613e4a82613e09565b600782019050919050565b7f226c33223a202200000000000000000000000000000000000000000000000000600082015250565b6000613e8b60078361396e565b9150613e9682613e55565b600782019050919050565b7f226c34223a202200000000000000000000000000000000000000000000000000600082015250565b6000613ed760078361396e565b9150613ee282613ea1565b600782019050919050565b7f2263223a20220000000000000000000000000000000000000000000000000000600082015250565b6000613f2360068361396e565b9150613f2e82613eed565b600682019050919050565b6000613f44826139a2565b9150613f4f826139ee565b9150613f5b828d613a11565b9150613f6682613a6b565b9150613f7182613ab7565b9150613f7d828c613ada565b9150613f8882613a6b565b9150613f9382613b86565b9150613f9e826139a2565b9150613fa982613bd2565b9150613fb482613c1e565b9150613fc0828b613ada565b9150613fcb82613c6a565b9150613fd682613cb6565b9150613fe182613d02565b9150613fec82613d4e565b9150613ff8828a613a11565b915061400382613a6b565b915061400e82613d9a565b915061401a8289613ada565b915061402582613a6b565b915061403082613de6565b915061403c8288613ada565b915061404782613a6b565b915061405282613e32565b915061405e8287613ada565b915061406982613a6b565b915061407482613e7e565b91506140808286613ada565b915061408b82613a6b565b915061409682613eca565b91506140a28285613ada565b91506140ad82613a6b565b91506140b882613f16565b91506140c48284613ada565b91506140cf82613c6a565b91506140da82613cb6565b91508190509b9a5050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614124601d8361396e565b915061412f826140ee565b601d82019050919050565b600061414582614117565b91506141518284613a11565b915081905092915050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f737667222076657273696f6e3d22312e31222076696577426f783d223060208201527f2030203130313020343630222077696474683d2231303025222068656967687460408201527f3d223130302522207072657365727665417370656374526174696f3d22784d6960608201527f6e594d696e206d65657422207374796c653d226261636b67726f756e642d636f60808201527f6c6f723a233041304130413b223e3c7374796c6520786d6c6e733d226874747060a08201527f3a2f2f7777772e77332e6f72672f323030302f7376672220747970653d22746560c08201527f78742f637373223e00000000000000000000000000000000000000000000000060e082015250565b600061429c60e88361396e565b91506142a78261415c565b60e882019050919050565b7f3c2f7374796c653e000000000000000000000000000000000000000000000000600082015250565b60006142e860088361396e565b91506142f3826142b2565b600882019050919050565b7f3c73657420626567696e3d22312220746f3d2276697369626c6522206174747260008201527f6962757465547970653d226175746f22206174747269627574654e616d653d2260208201527f7669736962696c697479223e3c2f7365743e3c2f746578743e00000000000000604082015250565b600061438060598361396e565b915061438b826142fe565b605982019050919050565b7f3c73657420626567696e3d226d76322e656e642220746f3d2276697369626c6560008201527f2220617474726962757465547970653d226175746f222061747472696275746560208201527f4e616d653d227669736962696c697479223e3c2f7365743e3c7365742062656760408201527f696e3d226d76382e656e642220746f3d2268696464656e22206174747269627560608201527f7465547970653d226175746f22206174747269627574654e616d653d2276697360808201527f6962696c697479223e3c2f7365743e3c2f746578743e0000000000000000000060a082015250565b600061448a60b68361396e565b915061449582614396565b60b682019050919050565b7f3c73657420626567696e3d226d76342e656e642220746f3d2276697369626c6560008201527f2220617474726962757465547970653d226175746f222061747472696275746560208201527f4e616d653d227669736962696c697479223e3c2f7365743e3c7365742062656760408201527f696e3d226d76382e656e642220746f3d2268696464656e22206174747269627560608201527f7465547970653d226175746f22206174747269627574654e616d653d2276697360808201527f6962696c697479223e3c2f7365743e3c2f746578743e0000000000000000000060a082015250565b600061459460b68361396e565b915061459f826144a0565b60b682019050919050565b7f3c73657420626567696e3d226d76362e656e642220746f3d2276697369626c6560008201527f2220617474726962757465547970653d226175746f222061747472696275746560208201527f4e616d653d227669736962696c697479223e3c2f7365743e3c7365742062656760408201527f696e3d226d76382e656e642220746f3d2268696464656e22206174747269627560608201527f7465547970653d226175746f22206174747269627574654e616d653d2276697360808201527f6962696c697479223e3c2f7365743e3c2f746578743e3c673e3c72656374207860a08201527f3d223130302220793d223430222077696474683d22333022206865696768743d60c08201527f223630222066696c6c3d2200000000000000000000000000000000000000000060e082015250565b60006146ea60eb8361396e565b91506146f5826145aa565b60eb82019050919050565b7f223e3c616e696d6174652069643d22626c312220626567696e3d22313b206d7660008201527f382e656e642220746f3d222330413041304122206475723d22302e357322207260208201527f6570656174436f756e743d22322220617474726962757465547970653d22617560408201527f746f22206174747269627574654e616d653d2266696c6c223e3c2f616e696d6160608201527f74653e3c616e696d6174652069643d22626c322220626567696e3d226d76312e60808201527f656e642220746f3d222330413041304122206475723d22302e3573222072657060a08201527f656174436f756e743d22322220617474726962757465547970653d226175746f60c08201527f22206174747269627574654e616d653d2266696c6c223e3c2f616e696d61746560e08201527f3e3c616e696d6174652069643d22626c332220626567696e3d226d76322e656e6101008201527f642220746f3d222330413041304122206475723d22302e3573222072657065616101208201527f74436f756e743d22322220617474726962757465547970653d226175746f22206101408201527f6174747269627574654e616d653d2266696c6c223e3c2f616e696d6174653e3c6101608201527f616e696d6174652069643d22626c342220626567696e3d226d76332e656e64226101808201527f20746f3d222330413041304122206475723d22302e35732220726570656174436101a08201527f6f756e743d22322220617474726962757465547970653d226175746f222061746101c08201527f747269627574654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e6101e08201527f696d6174652069643d22626c352220626567696e3d226d76342e656e642220746102008201527f6f3d222330413041304122206475723d22302e35732220726570656174436f756102208201527f6e743d22322220617474726962757465547970653d226175746f2220617474726102408201527f69627574654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e696d6102608201527f6174652069643d22626c362220626567696e3d226d76352e656e642220746f3d6102808201527f222330413041304122206475723d22302e35732220726570656174436f756e746102a08201527f3d22322220617474726962757465547970653d226175746f22206174747269626102c08201527f7574654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e696d61746102e08201527f652069643d22626c372220626567696e3d226d76362e656e642220746f3d22236103008201527f30413041304122206475723d22302e35732220726570656174436f756e743d226103208201527f322220617474726962757465547970653d226175746f222061747472696275746103408201527f654e616d653d2266696c6c223e3c2f616e696d6174653e3c616e696d617465206103608201527f69643d22626c382220626567696e3d226d76372e656e642220746f3d222330416103808201527f3041304122206475723d22302e35732220726570656174436f756e743d2231306103a08201527f2220617474726962757465547970653d226175746f22206174747269627574656103c08201527f4e616d653d2266696c6c223e3c2f616e696d6174653e3c73657420626567696e6103e08201527f3d226d76322e626567696e2220746f3d22313430222066696c6c3d22667265656104008201527f7a652220617474726962757465547970653d226175746f2220617474726962756104208201527f74654e616d653d2279223e3c2f7365743e3c73657420626567696e3d226d76346104408201527f2e626567696e2220746f3d22323430222066696c6c3d22667265657a652220616104608201527f7474726962757465547970653d226175746f22206174747269627574654e616d6104808201527f653d2279223e3c2f7365743e3c73657420626567696e3d226d76362e626567696104a08201527f6e2220746f3d22333430222066696c6c3d22667265657a6522206174747269626104c08201527f757465547970653d226175746f22206174747269627574654e616d653d2279226104e08201527f3e3c2f7365743e3c73657420626567696e3d226d76382e626567696e2220746f6105008201527f3d223430222066696c6c3d22667265657a6522206174747269627574655479706105208201527f653d226175746f22206174747269627574654e616d653d2279223e3c2f7365746105408201527f3e3c2f726563743e3c7265637420783d223132352220793d22343022207769646105608201527f74683d2238303022206865696768743d223630222066696c6c3d2223304130416105808201527f3041223e3c73657420626567696e3d226d76322e626567696e2220746f3d22316105a08201527f3430222066696c6c3d22667265657a652220617474726962757465547970653d6105c08201527f226175746f22206174747269627574654e616d653d2279223e3c2f7365743e3c6105e08201527f73657420626567696e3d226d76342e626567696e2220746f3d223234302220666106008201527f696c6c3d22667265657a652220617474726962757465547970653d226175746f6106208201527f22206174747269627574654e616d653d2279223e3c2f7365743e3c73657420626106408201527f6567696e3d226d76362e626567696e2220746f3d22333430222066696c6c3d226106608201527f667265657a652220617474726962757465547970653d226175746f22206174746106808201527f7269627574654e616d653d2279223e3c2f7365743e3c73657420626567696e3d6106a08201527f226d76382e626567696e2220746f3d223430222066696c6c3d22667265657a656106c08201527f2220617474726962757465547970653d226175746f22206174747269627574656106e08201527f4e616d653d2279223e3c2f7365743e3c2f726563743e3c616e696d61746554726107008201527f616e73666f726d2069643d226d76312220626567696e3d22626c312e656e64226107208201527f206174747269627574654e616d653d227472616e73666f726d2220747970653d6107408201527f227472616e736c617465222066726f6d3d22302c302220746f3d2232302c30226107608201527f206475723d22302e3035732220616363756d756c6174653d2273756d222063616107808201527f6c634d6f64653d2264697363726574652220726570656174436f756e743d22006107a082015250565b600061507b6107bf8361396e565b915061508682614700565b6107bf82019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76322220626560208201527f67696e3d22626c322e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c616e6960a08201527f6d6174655472616e73666f726d2069643d226d76332220626567696e3d22626c60c08201527f332e656e6422206174747269627574654e616d653d227472616e73666f726d2260e08201527f20747970653d227472616e736c617465222066726f6d3d22302c302220746f3d6101008201527f2232302c3022206475723d22302e3035732220616363756d756c6174653d22736101208201527f756d222063616c634d6f64653d2264697363726574652220726570656174436f6101408201527f756e743d2200000000000000000000000000000000000000000000000000000061016082015250565b600061526f6101658361396e565b915061527a82615092565b61016582019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76342220626560208201527f67696e3d22626c342e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c616e6960a08201527f6d6174655472616e73666f726d2069643d226d76352220626567696e3d22626c60c08201527f352e656e6422206174747269627574654e616d653d227472616e73666f726d2260e08201527f20747970653d227472616e736c617465222066726f6d3d22302c302220746f3d6101008201527f2232302c3022206475723d22302e3035732220616363756d756c6174653d22736101208201527f756d222063616c634d6f64653d2264697363726574652220726570656174436f6101408201527f756e743d2200000000000000000000000000000000000000000000000000000061016082015250565b60006154636101658361396e565b915061546e82615286565b61016582019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76362220626560208201527f67696e3d22626c362e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c616e6960a08201527f6d6174655472616e73666f726d2069643d226d76372220626567696e3d22626c60c08201527f372e656e6422206174747269627574654e616d653d227472616e73666f726d2260e08201527f20747970653d227472616e736c617465222066726f6d3d22302c302220746f3d6101008201527f2232302c3022206475723d22302e3035732220616363756d756c6174653d22736101208201527f756d222063616c634d6f64653d2264697363726574652220726570656174436f6101408201527f756e743d2200000000000000000000000000000000000000000000000000000061016082015250565b60006156576101658361396e565b91506156628261547a565b61016582019050919050565b7f222066696c6c3d22667265657a65223e3c2f616e696d6174655472616e73666f60008201527f726d3e3c616e696d6174655472616e73666f726d2069643d226d76382220626560208201527f67696e3d22626c382e656e6422206174747269627574654e616d653d2274726160408201527f6e73666f726d2220747970653d227472616e736c617465222066726f6d3d223460608201527f35362c302220746f3d22302c3022206475723d22302e303573222066696c6c3d60808201527f22667265657a65223e3c2f616e696d6174655472616e73666f726d3e3c2f673e60a08201527f3c2f7376673e000000000000000000000000000000000000000000000000000060c082015250565b600061578860c68361396e565b91506157938261566e565b60c682019050919050565b60006157a98261428f565b91506157b5828d613ada565b91506157c0826142db565b91506157cc828c613a11565b91506157d782614373565b91506157e3828b613a11565b91506157ee8261447d565b91506157fa828a613a11565b915061580582614587565b91506158118289613a11565b915061581c826146dd565b91506158288288613ada565b91506158338261506d565b915061583f8287613a11565b915061584a82615261565b91506158568286613a11565b915061586182615455565b915061586d8285613a11565b915061587882615649565b91506158848284613a11565b915061588f8261577b565b91508190509b9a5050505050505050505050565b7f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000600082015250565b60006158d9601a8361396e565b91506158e4826158a3565b601a82019050919050565b60006158fa826158cc565b91506159068284613a11565b915081905092915050565b600061591d8284613ada565b915081905092915050565b600061593382612db1565b915061593e83612db1565b92508282019050808211156159565761595561360e565b5b92915050565b7f546f6b656e20646f6573206e6f74206578697374210000000000000000000000600082015250565b6000615992601583612d1b565b915061599d8261595c565b602082019050919050565b600060208201905081810360008301526159c181615985565b9050919050565b7f43616e6e6f74207472616e7366657220746f207a65726f206164647921000000600082015250565b60006159fe601d83612d1b565b9150615a09826159c8565b602082019050919050565b60006020820190508181036000830152615a2d816159f1565b9050919050565b7f43616e6e6f74207472616e7366657220746f6b656e2030210000000000000000600082015250565b6000615a6a601883612d1b565b9150615a7582615a34565b602082019050919050565b60006020820190508181036000830152615a9981615a5d565b9050919050565b6000615aab82612db1565b9150615ab683612db1565b9250828203905081811115615ace57615acd61360e565b5b92915050565b7f417474656d70746564207472616e7366657220746f206e6f6e2045524337323160008201527f526563656976657220696d706c656d656e746572210000000000000000000000602082015250565b6000615b30603583612d1b565b9150615b3b82615ad4565b604082019050919050565b60006020820190508181036000830152615b5f81615b23565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ba082612db1565b9150615bab83612db1565b925082615bbb57615bba615b66565b5b828204905092915050565b6000615bd182612db1565b9150615bdc83612db1565b925082615bec57615beb615b66565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615c3182612db1565b9150615c3c83612db1565b9250828202615c4a81612db1565b91508282048414831517615c6157615c6061360e565b5b5092915050565b7f3c74657874207669736962696c6974793d2268696464656e2220783d2231303060008201527f2220793d22000000000000000000000000000000000000000000000000000000602082015250565b6000615cc460258361396e565b9150615ccf82615c68565b602582019050919050565b7f39302220666f6e742d66616d696c793d2258652220666f6e742d73697a653d2260008201527f3430222066696c6c3d2200000000000000000000000000000000000000000000602082015250565b6000615d36602a8361396e565b9150615d4182615cda565b602a82019050919050565b7f223e000000000000000000000000000000000000000000000000000000000000600082015250565b6000615d8260028361396e565b9150615d8d82615d4c565b600282019050919050565b6000615da382615cb7565b9150615daf8286613a11565b9150615dba82615d29565b9150615dc68285613ada565b9150615dd182615d75565b9150615ddd8284613a11565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b6000615e1182615dea565b615e1b8185615df5565b9350615e2b818560208601612d2c565b615e3481612afd565b840191505092915050565b6000608082019050615e546000830187612e46565b615e616020830186612e46565b615e6e6040830185612fa5565b8181036060830152615e808184615e06565b905095945050505050565b600081519050615e9a81612a64565b92915050565b600060208284031215615eb657615eb5612a2e565b5b6000615ec484828501615e8b565b91505092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615f29603283612d1b565b9150615f3482615ecd565b604082019050919050565b60006020820190508181036000830152615f5881615f1c565b905091905056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122073d4dcefb106cfdfff26f9b1a511b90ebb9d889ee1a14ed9dcca36c89fa9e5ba64736f6c63430008110033

Deployed Bytecode Sourcemap

14037:27027:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7477:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38557:577;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39179:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8388:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8085:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9006:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40823:238;;;:::i;:::-;;40642:61;;;;;;;;;;;;;:::i;:::-;;9212:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32586:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7889:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7692:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39341:58;;;;;;;;;;;;;:::i;:::-;;39457:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8570:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32065:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9359:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39644:907;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33176:5013;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32795:250;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8847:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7477:210;7578:4;7614:25;7599:40;;;:11;:40;;;;:83;;;;7646:36;7670:11;7646:23;:36::i;:::-;7599:83;7589:93;;7477:210;;;:::o;38557:577::-;38693:13;38709;;38693:29;;38736:7;;;;;;;;;;;38735:8;38745:10;38727:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38778:1;38769:5;:10;;38781:15;38761:36;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38818:7;;38810:5;:15;38827;38802:41;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38869:19;;;;;;;;;;;38853:35;;:12;:10;:12::i;:::-;:35;;;38850:100;;38917:8;;38904:9;:21;;38927:16;38896:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38850:100;38956:68;38972:5;38979:9;38990:10;39002:9;39013:10;38956:15;:68::i;:::-;39054:22;39070:5;39054:15;:22::i;:::-;39029:9;:16;39039:5;39029:16;;;;;;;;;;;:22;;:47;;;;;;:::i;:::-;;39083:13;;:15;;;;;;;;;:::i;:::-;;;;;;39103:26;39109:12;:10;:12::i;:::-;39123:5;39103;:26::i;:::-;38688:446;38557:577;;;;:::o;39179:73::-;39215:13;39242:5;39235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39179:73;:::o;8388:177::-;8463:7;8485:16;8493:7;8485;:16::i;:::-;8477:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8536:15;:24;8552:7;8536:24;;;;;;;;;;;;;;;;;;;;;8529:31;;8388:177;;;:::o;8085:298::-;8160:13;8176:23;8191:7;8176:14;:23::i;:::-;8160:39;;8218:5;8212:11;;:2;:11;;;8204:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;8277:5;8261:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;8286:37;8303:5;8310:12;:10;:12::i;:::-;8286:16;:37::i;:::-;8261:62;8248:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;8357:21;8366:2;8370:7;8357:8;:21::i;:::-;8155:228;8085:298;;:::o;9006:201::-;9108:41;9127:12;:10;:12::i;:::-;9141:7;9108:18;:41::i;:::-;9100:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9174:28;9184:4;9190:2;9194:7;9174:9;:28::i;:::-;9006:201;;;:::o;40823:238::-;29611:19;;;;;;;;;;;29595:35;;:12;:10;:12::i;:::-;:35;;;29632:17;29587:63;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;40873:12:::1;40888:21;40873:36;;40932:1;40922:7;:11;40935:16;40914:38;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;40958:12;40977;:10;:12::i;:::-;40976:19;;41003:7;40976:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40957:58;;;41028:7;41037:18;41020:36;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;40868:193;;40823:238::o:0;40642:61::-;29611:19;;;;;;;;;;;29595:35;;:12;:10;:12::i;:::-;:35;;;29632:17;29587:63;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;40693:5:::1;40683:7;;:15;;;;;;;;;;;;;;;;;;40642:61::o:0;9212:142::-;9310:39;9327:4;9333:2;9337:7;9310:39;;;;;;;;;;;;:16;:39::i;:::-;9212:142;;;:::o;32586:101::-;29611:19;;;;;;;;;;;29595:35;;:12;:10;:12::i;:::-;:35;;;29632:17;29587:63;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32671:11:::1;32657;:25;;;;;;:::i;:::-;;32586:101:::0;:::o;7889:191::-;7960:7;7974:13;7990:7;:16;7998:7;7990:16;;;;;;;;;;;;;;;;;;;;;7974:32;;8036:1;8019:19;;:5;:19;;;8011:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;8070:5;8063:12;;;7889:191;;;:::o;7692:192::-;7763:7;7802:1;7785:19;;:5;:19;;;7777:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7863:9;:16;7873:5;7863:16;;;;;;;;;;;;;;;;7856:23;;7692:192;;;:::o;39341:58::-;29611:19;;;;;;;;;;;29595:35;;:12;:10;:12::i;:::-;:35;;;29632:17;29587:63;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;39390:4:::1;39380:7;;:14;;;;;;;;;;;;;;;;;;39341:58::o:0;39457:77::-;39495:13;39522:7;39515:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39457:77;:::o;8570:272::-;8679:12;:10;:12::i;:::-;8667:24;;:8;:24;;;8659:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8771:8;8726:18;:32;8745:12;:10;:12::i;:::-;8726:32;;;;;;;;;;;;;;;:42;8759:8;8726:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;8818:8;8789:48;;8804:12;:10;:12::i;:::-;8789:48;;;8828:8;8789:48;;;;;;:::i;:::-;;;;;;;;8570:272;;:::o;32065:394::-;32219:7;29731:16;29739:7;29731;:16::i;:::-;29715:32;;:12;:10;:12::i;:::-;:32;;;29749:17;29707:60;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32258:13:::1;;32248:7;:23;32273:15;32240:49;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32294:70;32310:7;32319:9;32330:10;32342:9;32353:10;32294:15;:70::i;:::-;32400:7;32386:12;:10;:12::i;:::-;32374:80;;;32409:9;32420:10;32432:9;32443:10;32374:80;;;;;;;;;:::i;:::-;;;;;;;;32065:394:::0;;;;;;:::o;9359:236::-;9485:41;9504:12;:10;:12::i;:::-;9518:7;9485:18;:41::i;:::-;9477:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9551:39;9565:4;9571:2;9575:7;9584:5;9551:13;:39::i;:::-;9359:236;;;;:::o;39644:907::-;39699:13;39737;;39727:7;:23;39752:15;39719:49;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;39853:682;39929:25;39946:7;39929:16;:25::i;:::-;39989:12;40107:9;:18;40117:7;40107:18;;;;;;;;;;;:24;;40193:26;40211:7;40193:17;:26::i;:::-;40248:14;40288:9;:18;40298:7;40288:18;;;;;;;;;;;:24;;40338:9;:18;40348:7;40338:18;;;;;;;;;;;:24;;40388:9;:18;40398:7;40388:18;;;;;;;;;;;:24;;40438:9;:18;40448:7;40438:18;;;;;;;;;;;:24;;40487:9;:18;40497:7;40487:18;;;;;;;;;;;:24;;39867:667;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39853:13;:682::i;:::-;39792:749;;;;;;;;:::i;:::-;;;;;;;;;;;;;39773:773;;39644:907;;;:::o;33176:5013::-;33240:13;33278;;33268:7;:23;33293:15;33260:49;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;33314:16;33595:5;33622:28;33639:7;33648:1;33622:16;:28::i;:::-;33753;33770:7;33779:1;33753:16;:28::i;:::-;33977;33994:7;34003:1;33977:16;:28::i;:::-;34201;34218:7;34227:1;34201:16;:28::i;:::-;34474:9;:18;34484:7;34474:18;;;;;;;;;;;:24;;36491:64;36508:46;36529:9;:18;36539:7;36529:18;;;;;;;;;;;:24;;36508:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:46::i;:::-;36491:16;:64::i;:::-;36926;36943:46;36964:9;:18;36974:7;36964:18;;;;;;;;;;;:24;;36943:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:46::i;:::-;36926:16;:64::i;:::-;37361;37378:46;37399:9;:18;37409:7;37399:18;;;;;;;;;;;:24;;37378:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:46::i;:::-;37361:16;:64::i;:::-;37796;37813:46;37834:9;:18;37844:7;37834:18;;;;;;;;;;;:24;;37813:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:20;:46::i;:::-;37796:16;:64::i;:::-;33333:4738;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33314:4757;;38155:18;38169:3;38155:13;:18::i;:::-;38097:82;;;;;;;;:::i;:::-;;;;;;;;;;;;;38078:106;;;33176:5013;;;:::o;32795:250::-;32838:13;32858:23;32957:49;32988:16;32971:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;32957:13;:49::i;:::-;32896:116;;;;;;;;:::i;:::-;;;;;;;;;;;;;32858:159;;33031:9;33024:16;;;32795:250;:::o;8847:154::-;8943:4;8961:18;:25;8980:5;8961:25;;;;;;;;;;;;;;;:35;8987:8;8961:35;;;;;;;;;;;;;;;;;;;;;;;;;8954:42;;8847:154;;;;:::o;6961:147::-;7045:4;7078:25;7063:40;;;:11;:40;;;;7056:47;;6961:147;;;:::o;5548:88::-;5600:7;5621:10;5614:17;;5548:88;:::o;31101:493::-;31258:2;31232:23;31253:1;31232:20;:23::i;:::-;:28;31262:15;31224:54;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31317:2;31291:23;31312:1;31291:20;:23::i;:::-;:28;31321:15;31283:54;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31376:2;31350:23;31371:1;31350:20;:23::i;:::-;:28;31380:15;31342:54;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31435:2;31409:23;31430:1;31409:20;:23::i;:::-;:28;31439:15;31401:54;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31489:1;31462:9;:18;31472:7;31462:18;;;;;;;;;;;:24;;:28;;;;;;:::i;:::-;;31522:1;31495:9;:18;31505:7;31495:18;;;;;;;;;;;:24;;:28;;;;;;:::i;:::-;;31555:1;31528:9;:18;31538:7;31528:18;;;;;;;;;;;:24;;:28;;;;;;:::i;:::-;;31588:1;31561:9;:18;31571:7;31561:18;;;;;;;;;;;:24;;:28;;;;;;:::i;:::-;;31101:493;;;;;:::o;30441:655::-;30505:13;30525:20;:32;;;;;;;;;;;;;;;;;;;30577:1;30565:8;:13;30562:464;;30646:18;;;;;;;;;;;;;;;;;;;30562:464;;;30693:1;30682:8;:12;:29;;;;;30709:2;30698:8;:13;30682:29;30679:347;;;30764:18;;;;;;;;;;;;;;;;;;;30679:347;;;30811:2;30800:8;:13;:31;;;;;30828:3;30817:8;:14;30800:31;30797:229;;;30879:18;;;;;;;;;;;;;;;;;;;30797:229;;;30926:3;30915:8;:14;:33;;;;;30944:4;30933:8;:15;30915:33;30912:114;;;31002:18;;;;;;;;;;;;;;;;;;;30912:114;30797:229;30679:347;30562:464;31085:6;31078:13;;;30441:655;;;:::o;10655:158::-;10738:1;10721:9;:13;10731:2;10721:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10763:2;10744:7;:16;10752:7;10744:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10800:7;10796:2;10775:33;;10792:1;10775:33;;;;;;;;;;;;10655:158;;:::o;9865:117::-;9929:4;9975:1;9947:30;;:7;:16;9955:7;9947:16;;;;;;;;;;;;;;;;;;;;;:30;;;;9940:37;;9865:117;;;:::o;11295:159::-;11391:2;11364:15;:24;11380:7;11364:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11441:7;11437:2;11403:46;;11412:23;11427:7;11412:14;:23::i;:::-;11403:46;;;;;;;;;;;;11295:159;;:::o;9987:303::-;10079:4;10098:16;10106:7;10098;:16::i;:::-;10090:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;10145:13;10161:23;10176:7;10161:14;:23::i;:::-;10145:39;;10208:5;10197:16;;:7;:16;;;:51;;;;10241:7;10217:31;;:20;10229:7;10217:11;:20::i;:::-;:31;;;10197:51;:87;;;;10252:32;10269:5;10276:7;10252:16;:32::i;:::-;10197:87;10189:96;;;9987:303;;;;:::o;10818:472::-;10937:4;10910:31;;:23;10925:7;10910:14;:23::i;:::-;:31;;;10902:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;10988:1;10974:16;;:2;:16;;;10966:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;11051:1;11037:16;;:2;:16;;;11029:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;11110:1;11100:7;:11;11092:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;11145:29;11162:1;11166:7;11145:8;:29::i;:::-;11198:1;11179:9;:15;11189:4;11179:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11221:1;11204:9;:13;11214:2;11204:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11246:2;11227:7;:16;11235:7;11227:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11277:7;11273:2;11258:27;;11267:4;11258:27;;;;;;;;;;;;10818:472;;;:::o;9600:260::-;9708:28;9718:4;9724:2;9728:7;9708:9;:28::i;:::-;9749:48;9772:4;9778:2;9782:7;9791:5;9749:22;:48::i;:::-;9741:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;9600:260;;;;:::o;5892:413::-;5947:13;5979:1;5970:5;:10;5967:37;;5988:10;;;;;;;;;;;;;;;;;;;;;5967:37;6008:12;6023:5;6008:20;;6033:14;6052:54;6067:1;6059:4;:9;6052:54;;6076:8;;;;;:::i;:::-;;;;6098:2;6090:10;;;;;:::i;:::-;;;6052:54;;;6110:19;6142:6;6132:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6110:39;;6154:121;6170:1;6161:5;:10;6154:121;;6189:1;6179:11;;;;;:::i;:::-;;;6247:2;6239:5;:10;;;;:::i;:::-;6226:2;:24;;;;:::i;:::-;6213:39;;6196:6;6203;6196:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6267:2;6258:11;;;;;:::i;:::-;;;6154:121;;;6293:6;6279:21;;;;;5892:413;;;;:::o;12839:1165::-;12896:13;12934:1;12919:4;:11;:16;12916:30;;12937:9;;;;;;;;;;;;;;;;12916:30;12951:19;12973:6;;;;;;;;;;;;;;;;;12951:28;;12984:20;13043:1;13038;13024:4;:11;:15;;;;:::i;:::-;13023:21;;;;:::i;:::-;13018:1;:27;;;;:::i;:::-;13007:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12984:62;;13095:1;13088:5;13084:13;13131:2;13123:6;13119:15;13165:4;13205;13199:11;13193:4;13189:22;13139:651;13230:6;13221:7;13218:19;13139:651;;;13279:1;13270:7;13266:15;13255:26;;13306:7;13300:14;13379:4;13371:5;13367:2;13363:14;13359:25;13349:8;13345:40;13339:47;13328:9;13320:67;13421:1;13410:9;13406:17;13393:30;;13499:4;13491:5;13487:2;13483:14;13479:25;13469:8;13465:40;13459:47;13448:9;13440:67;13541:1;13530:9;13526:17;13513:30;;13618:4;13610:5;13607:1;13603:13;13599:24;13589:8;13585:39;13579:46;13568:9;13560:66;13660:1;13649:9;13645:17;13632:30;;13729:4;13722:5;13718:16;13708:8;13704:31;13698:38;13687:9;13679:58;13771:1;13760:9;13756:17;13743:30;;13248:542;13139:651;;;13143:74;;13821:1;13814:4;13808:11;13804:19;13833:1;13828:90;;;;13928:1;13923:52;;;;13797:178;;13828:90;13869:4;13865:1;13854:9;13850:17;13842:32;13907:4;13903:1;13892:9;13888:17;13880:32;13828:90;;13923:52;13964:4;13960:1;13949:9;13945:17;13937:32;13797:178;;13062:918;;13993:6;13986:13;;;;12839:1165;;;;:::o;29883:553::-;29962:13;29982:18;30003:9;:18;30013:7;30003:18;;;;;;;;;;;:24;;29982:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30044:1;30035:5;:10;30032:58;;30060:9;:18;30070:7;30060:18;;;;;;;;;;;:24;;30053:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30032:58;30106:1;30097:5;:10;30094:125;;30122:9;:18;30132:7;30122:18;;;;;;;;;;;:24;;30115:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30094:125;;;30173:1;30164:5;:10;30161:58;;30189:9;:18;30199:7;30189:18;;;;;;;;;;;:24;;30182:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30161:58;30094:125;30308:23;30325:5;30308:16;:23::i;:::-;30379:9;:18;30389:7;30379:18;;;;;;;;;;;:24;;30416:4;30244:182;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30225:206;;;29883:553;;;;:::o;6786:102::-;6847:7;6874:1;6868:15;6861:22;;6786:102;;;:::o;11459:587::-;11570:4;11584:15;:2;:13;;;:15::i;:::-;11581:461;;;11627:2;11611:36;;;11648:12;:10;:12::i;:::-;11662:4;11668:7;11677:5;11611:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11607:398;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11835:1;11818:6;:13;:18;11815:184;;11846:60;;;;;;;;;;:::i;:::-;;;;;;;;11815:184;11976:6;11970:13;11961:6;11957:2;11953:15;11946:38;11607:398;11731:41;;;11721:51;;;:6;:51;;;;11714:58;;;;;11581:461;12032:4;12025:11;;11459:587;;;;;;;:::o;2553:159::-;2612:4;2623:12;2675:7;2663:20;2655:28;;2706:1;2699:4;:8;2692:15;;;2553:159;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:117::-;1627:1;1624;1617:12;1641:117;1750:1;1747;1740:12;1764:102;1805:6;1856:2;1852:7;1847:2;1840:5;1836:14;1832:28;1822:38;;1764:102;;;:::o;1872:180::-;1920:77;1917:1;1910:88;2017:4;2014:1;2007:15;2041:4;2038:1;2031:15;2058:281;2141:27;2163:4;2141:27;:::i;:::-;2133:6;2129:40;2271:6;2259:10;2256:22;2235:18;2223:10;2220:34;2217:62;2214:88;;;2282:18;;:::i;:::-;2214:88;2322:10;2318:2;2311:22;2101:238;2058:281;;:::o;2345:129::-;2379:6;2406:20;;:::i;:::-;2396:30;;2435:33;2463:4;2455:6;2435:33;:::i;:::-;2345:129;;;:::o;2480:308::-;2542:4;2632:18;2624:6;2621:30;2618:56;;;2654:18;;:::i;:::-;2618:56;2692:29;2714:6;2692:29;:::i;:::-;2684:37;;2776:4;2770;2766:15;2758:23;;2480:308;;;:::o;2794:146::-;2891:6;2886:3;2881;2868:30;2932:1;2923:6;2918:3;2914:16;2907:27;2794:146;;;:::o;2946:425::-;3024:5;3049:66;3065:49;3107:6;3065:49;:::i;:::-;3049:66;:::i;:::-;3040:75;;3138:6;3131:5;3124:21;3176:4;3169:5;3165:16;3214:3;3205:6;3200:3;3196:16;3193:25;3190:112;;;3221:79;;:::i;:::-;3190:112;3311:54;3358:6;3353:3;3348;3311:54;:::i;:::-;3030:341;2946:425;;;;;:::o;3391:340::-;3447:5;3496:3;3489:4;3481:6;3477:17;3473:27;3463:122;;3504:79;;:::i;:::-;3463:122;3621:6;3608:20;3646:79;3721:3;3713:6;3706:4;3698:6;3694:17;3646:79;:::i;:::-;3637:88;;3453:278;3391:340;;;;:::o;3737:1485::-;3863:6;3871;3879;3887;3936:3;3924:9;3915:7;3911:23;3907:33;3904:120;;;3943:79;;:::i;:::-;3904:120;4091:1;4080:9;4076:17;4063:31;4121:18;4113:6;4110:30;4107:117;;;4143:79;;:::i;:::-;4107:117;4248:63;4303:7;4294:6;4283:9;4279:22;4248:63;:::i;:::-;4238:73;;4034:287;4388:2;4377:9;4373:18;4360:32;4419:18;4411:6;4408:30;4405:117;;;4441:79;;:::i;:::-;4405:117;4546:63;4601:7;4592:6;4581:9;4577:22;4546:63;:::i;:::-;4536:73;;4331:288;4686:2;4675:9;4671:18;4658:32;4717:18;4709:6;4706:30;4703:117;;;4739:79;;:::i;:::-;4703:117;4844:63;4899:7;4890:6;4879:9;4875:22;4844:63;:::i;:::-;4834:73;;4629:288;4984:2;4973:9;4969:18;4956:32;5015:18;5007:6;5004:30;5001:117;;;5037:79;;:::i;:::-;5001:117;5142:63;5197:7;5188:6;5177:9;5173:22;5142:63;:::i;:::-;5132:73;;4927:288;3737:1485;;;;;;;:::o;5228:99::-;5280:6;5314:5;5308:12;5298:22;;5228:99;;;:::o;5333:169::-;5417:11;5451:6;5446:3;5439:19;5491:4;5486:3;5482:14;5467:29;;5333:169;;;;:::o;5508:246::-;5589:1;5599:113;5613:6;5610:1;5607:13;5599:113;;;5698:1;5693:3;5689:11;5683:18;5679:1;5674:3;5670:11;5663:39;5635:2;5632:1;5628:10;5623:15;;5599:113;;;5746:1;5737:6;5732:3;5728:16;5721:27;5570:184;5508:246;;;:::o;5760:377::-;5848:3;5876:39;5909:5;5876:39;:::i;:::-;5931:71;5995:6;5990:3;5931:71;:::i;:::-;5924:78;;6011:65;6069:6;6064:3;6057:4;6050:5;6046:16;6011:65;:::i;:::-;6101:29;6123:6;6101:29;:::i;:::-;6096:3;6092:39;6085:46;;5852:285;5760:377;;;;:::o;6143:313::-;6256:4;6294:2;6283:9;6279:18;6271:26;;6343:9;6337:4;6333:20;6329:1;6318:9;6314:17;6307:47;6371:78;6444:4;6435:6;6371:78;:::i;:::-;6363:86;;6143:313;;;;:::o;6462:77::-;6499:7;6528:5;6517:16;;6462:77;;;:::o;6545:122::-;6618:24;6636:5;6618:24;:::i;:::-;6611:5;6608:35;6598:63;;6657:1;6654;6647:12;6598:63;6545:122;:::o;6673:139::-;6719:5;6757:6;6744:20;6735:29;;6773:33;6800:5;6773:33;:::i;:::-;6673:139;;;;:::o;6818:329::-;6877:6;6926:2;6914:9;6905:7;6901:23;6897:32;6894:119;;;6932:79;;:::i;:::-;6894:119;7052:1;7077:53;7122:7;7113:6;7102:9;7098:22;7077:53;:::i;:::-;7067:63;;7023:117;6818:329;;;;:::o;7153:126::-;7190:7;7230:42;7223:5;7219:54;7208:65;;7153:126;;;:::o;7285:96::-;7322:7;7351:24;7369:5;7351:24;:::i;:::-;7340:35;;7285:96;;;:::o;7387:118::-;7474:24;7492:5;7474:24;:::i;:::-;7469:3;7462:37;7387:118;;:::o;7511:222::-;7604:4;7642:2;7631:9;7627:18;7619:26;;7655:71;7723:1;7712:9;7708:17;7699:6;7655:71;:::i;:::-;7511:222;;;;:::o;7739:122::-;7812:24;7830:5;7812:24;:::i;:::-;7805:5;7802:35;7792:63;;7851:1;7848;7841:12;7792:63;7739:122;:::o;7867:139::-;7913:5;7951:6;7938:20;7929:29;;7967:33;7994:5;7967:33;:::i;:::-;7867:139;;;;:::o;8012:474::-;8080:6;8088;8137:2;8125:9;8116:7;8112:23;8108:32;8105:119;;;8143:79;;:::i;:::-;8105:119;8263:1;8288:53;8333:7;8324:6;8313:9;8309:22;8288:53;:::i;:::-;8278:63;;8234:117;8390:2;8416:53;8461:7;8452:6;8441:9;8437:22;8416:53;:::i;:::-;8406:63;;8361:118;8012:474;;;;;:::o;8492:619::-;8569:6;8577;8585;8634:2;8622:9;8613:7;8609:23;8605:32;8602:119;;;8640:79;;:::i;:::-;8602:119;8760:1;8785:53;8830:7;8821:6;8810:9;8806:22;8785:53;:::i;:::-;8775:63;;8731:117;8887:2;8913:53;8958:7;8949:6;8938:9;8934:22;8913:53;:::i;:::-;8903:63;;8858:118;9015:2;9041:53;9086:7;9077:6;9066:9;9062:22;9041:53;:::i;:::-;9031:63;;8986:118;8492:619;;;;;:::o;9117:509::-;9186:6;9235:2;9223:9;9214:7;9210:23;9206:32;9203:119;;;9241:79;;:::i;:::-;9203:119;9389:1;9378:9;9374:17;9361:31;9419:18;9411:6;9408:30;9405:117;;;9441:79;;:::i;:::-;9405:117;9546:63;9601:7;9592:6;9581:9;9577:22;9546:63;:::i;:::-;9536:73;;9332:287;9117:509;;;;:::o;9632:329::-;9691:6;9740:2;9728:9;9719:7;9715:23;9711:32;9708:119;;;9746:79;;:::i;:::-;9708:119;9866:1;9891:53;9936:7;9927:6;9916:9;9912:22;9891:53;:::i;:::-;9881:63;;9837:117;9632:329;;;;:::o;9967:118::-;10054:24;10072:5;10054:24;:::i;:::-;10049:3;10042:37;9967:118;;:::o;10091:222::-;10184:4;10222:2;10211:9;10207:18;10199:26;;10235:71;10303:1;10292:9;10288:17;10279:6;10235:71;:::i;:::-;10091:222;;;;:::o;10319:116::-;10389:21;10404:5;10389:21;:::i;:::-;10382:5;10379:32;10369:60;;10425:1;10422;10415:12;10369:60;10319:116;:::o;10441:133::-;10484:5;10522:6;10509:20;10500:29;;10538:30;10562:5;10538:30;:::i;:::-;10441:133;;;;:::o;10580:468::-;10645:6;10653;10702:2;10690:9;10681:7;10677:23;10673:32;10670:119;;;10708:79;;:::i;:::-;10670:119;10828:1;10853:53;10898:7;10889:6;10878:9;10874:22;10853:53;:::i;:::-;10843:63;;10799:117;10955:2;10981:50;11023:7;11014:6;11003:9;10999:22;10981:50;:::i;:::-;10971:60;;10926:115;10580:468;;;;;:::o;11054:1631::-;11189:6;11197;11205;11213;11221;11270:3;11258:9;11249:7;11245:23;11241:33;11238:120;;;11277:79;;:::i;:::-;11238:120;11397:1;11422:53;11467:7;11458:6;11447:9;11443:22;11422:53;:::i;:::-;11412:63;;11368:117;11552:2;11541:9;11537:18;11524:32;11583:18;11575:6;11572:30;11569:117;;;11605:79;;:::i;:::-;11569:117;11710:63;11765:7;11756:6;11745:9;11741:22;11710:63;:::i;:::-;11700:73;;11495:288;11850:2;11839:9;11835:18;11822:32;11881:18;11873:6;11870:30;11867:117;;;11903:79;;:::i;:::-;11867:117;12008:63;12063:7;12054:6;12043:9;12039:22;12008:63;:::i;:::-;11998:73;;11793:288;12148:2;12137:9;12133:18;12120:32;12179:18;12171:6;12168:30;12165:117;;;12201:79;;:::i;:::-;12165:117;12306:63;12361:7;12352:6;12341:9;12337:22;12306:63;:::i;:::-;12296:73;;12091:288;12446:3;12435:9;12431:19;12418:33;12478:18;12470:6;12467:30;12464:117;;;12500:79;;:::i;:::-;12464:117;12605:63;12660:7;12651:6;12640:9;12636:22;12605:63;:::i;:::-;12595:73;;12389:289;11054:1631;;;;;;;;:::o;12691:307::-;12752:4;12842:18;12834:6;12831:30;12828:56;;;12864:18;;:::i;:::-;12828:56;12902:29;12924:6;12902:29;:::i;:::-;12894:37;;12986:4;12980;12976:15;12968:23;;12691:307;;;:::o;13004:423::-;13081:5;13106:65;13122:48;13163:6;13122:48;:::i;:::-;13106:65;:::i;:::-;13097:74;;13194:6;13187:5;13180:21;13232:4;13225:5;13221:16;13270:3;13261:6;13256:3;13252:16;13249:25;13246:112;;;13277:79;;:::i;:::-;13246:112;13367:54;13414:6;13409:3;13404;13367:54;:::i;:::-;13087:340;13004:423;;;;;:::o;13446:338::-;13501:5;13550:3;13543:4;13535:6;13531:17;13527:27;13517:122;;13558:79;;:::i;:::-;13517:122;13675:6;13662:20;13700:78;13774:3;13766:6;13759:4;13751:6;13747:17;13700:78;:::i;:::-;13691:87;;13507:277;13446:338;;;;:::o;13790:943::-;13885:6;13893;13901;13909;13958:3;13946:9;13937:7;13933:23;13929:33;13926:120;;;13965:79;;:::i;:::-;13926:120;14085:1;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14056:117;14212:2;14238:53;14283:7;14274:6;14263:9;14259:22;14238:53;:::i;:::-;14228:63;;14183:118;14340:2;14366:53;14411:7;14402:6;14391:9;14387:22;14366:53;:::i;:::-;14356:63;;14311:118;14496:2;14485:9;14481:18;14468:32;14527:18;14519:6;14516:30;14513:117;;;14549:79;;:::i;:::-;14513:117;14654:62;14708:7;14699:6;14688:9;14684:22;14654:62;:::i;:::-;14644:72;;14439:287;13790:943;;;;;;;:::o;14739:474::-;14807:6;14815;14864:2;14852:9;14843:7;14839:23;14835:32;14832:119;;;14870:79;;:::i;:::-;14832:119;14990:1;15015:53;15060:7;15051:6;15040:9;15036:22;15015:53;:::i;:::-;15005:63;;14961:117;15117:2;15143:53;15188:7;15179:6;15168:9;15164:22;15143:53;:::i;:::-;15133:63;;15088:118;14739:474;;;;;:::o;15219:180::-;15267:77;15264:1;15257:88;15364:4;15361:1;15354:15;15388:4;15385:1;15378:15;15405:320;15449:6;15486:1;15480:4;15476:12;15466:22;;15533:1;15527:4;15523:12;15554:18;15544:81;;15610:4;15602:6;15598:17;15588:27;;15544:81;15672:2;15664:6;15661:14;15641:18;15638:38;15635:84;;15691:18;;:::i;:::-;15635:84;15456:269;15405:320;;;:::o;15731:141::-;15780:4;15803:3;15795:11;;15826:3;15823:1;15816:14;15860:4;15857:1;15847:18;15839:26;;15731:141;;;:::o;15902:831::-;15987:3;16024:5;16018:12;16053:36;16079:9;16053:36;:::i;:::-;16105:71;16169:6;16164:3;16105:71;:::i;:::-;16098:78;;16207:1;16196:9;16192:17;16223:1;16218:164;;;;16396:1;16391:336;;;;16185:542;;16218:164;16302:4;16298:9;16287;16283:25;16278:3;16271:38;16362:6;16355:14;16348:22;16342:4;16338:33;16333:3;16329:43;16322:50;;16218:164;;16391:336;16458:38;16490:5;16458:38;:::i;:::-;16518:1;16532:154;16546:6;16543:1;16540:13;16532:154;;;16620:7;16614:14;16610:1;16605:3;16601:11;16594:35;16670:1;16661:7;16657:15;16646:26;;16568:4;16565:1;16561:12;16556:17;;16532:154;;;16715:1;16710:3;16706:11;16699:18;;16398:329;;16185:542;;15991:742;;15902:831;;;;:::o;16739:307::-;16849:4;16887:2;16876:9;16872:18;16864:26;;16936:9;16930:4;16926:20;16922:1;16911:9;16907:17;16900:47;16964:75;17034:4;17025:6;16964:75;:::i;:::-;16956:83;;16739:307;;;;:::o;17052:93::-;17089:6;17136:2;17131;17124:5;17120:14;17116:23;17106:33;;17052:93;;;:::o;17151:107::-;17195:8;17245:5;17239:4;17235:16;17214:37;;17151:107;;;;:::o;17264:393::-;17333:6;17383:1;17371:10;17367:18;17406:97;17436:66;17425:9;17406:97;:::i;:::-;17524:39;17554:8;17543:9;17524:39;:::i;:::-;17512:51;;17596:4;17592:9;17585:5;17581:21;17572:30;;17645:4;17635:8;17631:19;17624:5;17621:30;17611:40;;17340:317;;17264:393;;;;;:::o;17663:60::-;17691:3;17712:5;17705:12;;17663:60;;;:::o;17729:142::-;17779:9;17812:53;17830:34;17839:24;17857:5;17839:24;:::i;:::-;17830:34;:::i;:::-;17812:53;:::i;:::-;17799:66;;17729:142;;;:::o;17877:75::-;17920:3;17941:5;17934:12;;17877:75;;;:::o;17958:269::-;18068:39;18099:7;18068:39;:::i;:::-;18129:91;18178:41;18202:16;18178:41;:::i;:::-;18170:6;18163:4;18157:11;18129:91;:::i;:::-;18123:4;18116:105;18034:193;17958:269;;;:::o;18233:73::-;18278:3;18233:73;:::o;18312:189::-;18389:32;;:::i;:::-;18430:65;18488:6;18480;18474:4;18430:65;:::i;:::-;18365:136;18312:189;;:::o;18507:186::-;18567:120;18584:3;18577:5;18574:14;18567:120;;;18638:39;18675:1;18668:5;18638:39;:::i;:::-;18611:1;18604:5;18600:13;18591:22;;18567:120;;;18507:186;;:::o;18699:543::-;18800:2;18795:3;18792:11;18789:446;;;18834:38;18866:5;18834:38;:::i;:::-;18918:29;18936:10;18918:29;:::i;:::-;18908:8;18904:44;19101:2;19089:10;19086:18;19083:49;;;19122:8;19107:23;;19083:49;19145:80;19201:22;19219:3;19201:22;:::i;:::-;19191:8;19187:37;19174:11;19145:80;:::i;:::-;18804:431;;18789:446;18699:543;;;:::o;19248:117::-;19302:8;19352:5;19346:4;19342:16;19321:37;;19248:117;;;;:::o;19371:169::-;19415:6;19448:51;19496:1;19492:6;19484:5;19481:1;19477:13;19448:51;:::i;:::-;19444:56;19529:4;19523;19519:15;19509:25;;19422:118;19371:169;;;;:::o;19545:295::-;19621:4;19767:29;19792:3;19786:4;19767:29;:::i;:::-;19759:37;;19829:3;19826:1;19822:11;19816:4;19813:21;19805:29;;19545:295;;;;:::o;19845:1395::-;19962:37;19995:3;19962:37;:::i;:::-;20064:18;20056:6;20053:30;20050:56;;;20086:18;;:::i;:::-;20050:56;20130:38;20162:4;20156:11;20130:38;:::i;:::-;20215:67;20275:6;20267;20261:4;20215:67;:::i;:::-;20309:1;20333:4;20320:17;;20365:2;20357:6;20354:14;20382:1;20377:618;;;;21039:1;21056:6;21053:77;;;21105:9;21100:3;21096:19;21090:26;21081:35;;21053:77;21156:67;21216:6;21209:5;21156:67;:::i;:::-;21150:4;21143:81;21012:222;20347:887;;20377:618;20429:4;20425:9;20417:6;20413:22;20463:37;20495:4;20463:37;:::i;:::-;20522:1;20536:208;20550:7;20547:1;20544:14;20536:208;;;20629:9;20624:3;20620:19;20614:26;20606:6;20599:42;20680:1;20672:6;20668:14;20658:24;;20727:2;20716:9;20712:18;20699:31;;20573:4;20570:1;20566:12;20561:17;;20536:208;;;20772:6;20763:7;20760:19;20757:179;;;20830:9;20825:3;20821:19;20815:26;20873:48;20915:4;20907:6;20903:17;20892:9;20873:48;:::i;:::-;20865:6;20858:64;20780:156;20757:179;20982:1;20978;20970:6;20966:14;20962:22;20956:4;20949:36;20384:611;;;20347:887;;19937:1303;;;19845:1395;;:::o;21246:180::-;21294:77;21291:1;21284:88;21391:4;21388:1;21381:15;21415:4;21412:1;21405:15;21432:233;21471:3;21494:24;21512:5;21494:24;:::i;:::-;21485:33;;21540:66;21533:5;21530:77;21527:103;;21610:18;;:::i;:::-;21527:103;21657:1;21650:5;21646:13;21639:20;;21432:233;;;:::o;21671:168::-;21811:20;21807:1;21799:6;21795:14;21788:44;21671:168;:::o;21845:366::-;21987:3;22008:67;22072:2;22067:3;22008:67;:::i;:::-;22001:74;;22084:93;22173:3;22084:93;:::i;:::-;22202:2;22197:3;22193:12;22186:19;;21845:366;;;:::o;22217:419::-;22383:4;22421:2;22410:9;22406:18;22398:26;;22470:9;22464:4;22460:20;22456:1;22445:9;22441:17;22434:47;22498:131;22624:4;22498:131;:::i;:::-;22490:139;;22217:419;;;:::o;22642:165::-;22782:17;22778:1;22770:6;22766:14;22759:41;22642:165;:::o;22813:366::-;22955:3;22976:67;23040:2;23035:3;22976:67;:::i;:::-;22969:74;;23052:93;23141:3;23052:93;:::i;:::-;23170:2;23165:3;23161:12;23154:19;;22813:366;;;:::o;23185:419::-;23351:4;23389:2;23378:9;23374:18;23366:26;;23438:9;23432:4;23428:20;23424:1;23413:9;23409:17;23402:47;23466:131;23592:4;23466:131;:::i;:::-;23458:139;;23185:419;;;:::o;23610:147::-;23711:11;23748:3;23733:18;;23610:147;;;;:::o;23763:114::-;;:::o;23883:398::-;24042:3;24063:83;24144:1;24139:3;24063:83;:::i;:::-;24056:90;;24155:93;24244:3;24155:93;:::i;:::-;24273:1;24268:3;24264:11;24257:18;;23883:398;;;:::o;24287:379::-;24471:3;24493:147;24636:3;24493:147;:::i;:::-;24486:154;;24657:3;24650:10;;24287:379;;;:::o;24672:165::-;24812:17;24808:1;24800:6;24796:14;24789:41;24672:165;:::o;24843:366::-;24985:3;25006:67;25070:2;25065:3;25006:67;:::i;:::-;24999:74;;25082:93;25171:3;25082:93;:::i;:::-;25200:2;25195:3;25191:12;25184:19;;24843:366;;;:::o;25215:419::-;25381:4;25419:2;25408:9;25404:18;25396:26;;25468:9;25462:4;25458:20;25454:1;25443:9;25439:17;25432:47;25496:131;25622:4;25496:131;:::i;:::-;25488:139;;25215:419;;;:::o;25640:229::-;25780:34;25776:1;25768:6;25764:14;25757:58;25849:12;25844:2;25836:6;25832:15;25825:37;25640:229;:::o;25875:366::-;26017:3;26038:67;26102:2;26097:3;26038:67;:::i;:::-;26031:74;;26114:93;26203:3;26114:93;:::i;:::-;26232:2;26227:3;26223:12;26216:19;;25875:366;;;:::o;26247:419::-;26413:4;26451:2;26440:9;26436:18;26428:26;;26500:9;26494:4;26490:20;26486:1;26475:9;26471:17;26464:47;26528:131;26654:4;26528:131;:::i;:::-;26520:139;;26247:419;;;:::o;26672:175::-;26812:27;26808:1;26800:6;26796:14;26789:51;26672:175;:::o;26853:366::-;26995:3;27016:67;27080:2;27075:3;27016:67;:::i;:::-;27009:74;;27092:93;27181:3;27092:93;:::i;:::-;27210:2;27205:3;27201:12;27194:19;;26853:366;;;:::o;27225:419::-;27391:4;27429:2;27418:9;27414:18;27406:26;;27478:9;27472:4;27468:20;27464:1;27453:9;27449:17;27442:47;27506:131;27632:4;27506:131;:::i;:::-;27498:139;;27225:419;;;:::o;27650:917::-;27907:4;27945:3;27934:9;27930:19;27922:27;;27995:9;27989:4;27985:20;27981:1;27970:9;27966:17;27959:47;28023:78;28096:4;28087:6;28023:78;:::i;:::-;28015:86;;28148:9;28142:4;28138:20;28133:2;28122:9;28118:18;28111:48;28176:78;28249:4;28240:6;28176:78;:::i;:::-;28168:86;;28301:9;28295:4;28291:20;28286:2;28275:9;28271:18;28264:48;28329:78;28402:4;28393:6;28329:78;:::i;:::-;28321:86;;28454:9;28448:4;28444:20;28439:2;28428:9;28424:18;28417:48;28482:78;28555:4;28546:6;28482:78;:::i;:::-;28474:86;;27650:917;;;;;;;:::o;28573:148::-;28675:11;28712:3;28697:18;;28573:148;;;;:::o;28727:155::-;28867:3;28863:1;28855:6;28851:14;28844:27;28727:155;:::o;28892:416::-;29052:3;29077:84;29159:1;29154:3;29077:84;:::i;:::-;29070:91;;29174:93;29263:3;29174:93;:::i;:::-;29296:1;29291:3;29287:11;29280:18;;28892:416;;;:::o;29318:222::-;29462:66;29458:1;29450:6;29446:14;29439:90;29318:222;:::o;29550:418::-;29710:3;29735:85;29817:2;29812:3;29735:85;:::i;:::-;29728:92;;29833:93;29922:3;29833:93;:::i;:::-;29955:2;29950:3;29946:12;29939:19;;29550:418;;;:::o;29978:410::-;30084:3;30116:39;30149:5;30116:39;:::i;:::-;30175:89;30257:6;30252:3;30175:89;:::i;:::-;30168:96;;30277:65;30335:6;30330:3;30323:4;30316:5;30312:16;30277:65;:::i;:::-;30371:6;30366:3;30362:16;30355:23;;30088:300;29978:410;;;;:::o;30398:222::-;30542:66;30538:1;30530:6;30526:14;30519:90;30398:222;:::o;30630:416::-;30790:3;30815:84;30897:1;30892:3;30815:84;:::i;:::-;30808:91;;30912:93;31001:3;30912:93;:::i;:::-;31034:1;31029:3;31025:11;31018:18;;30630:416;;;:::o;31056:222::-;31200:66;31196:1;31188:6;31184:14;31177:90;31056:222;:::o;31288:418::-;31448:3;31473:85;31555:2;31550:3;31473:85;:::i;:::-;31466:92;;31571:93;31660:3;31571:93;:::i;:::-;31693:2;31688:3;31684:12;31677:19;;31288:418;;;:::o;31744:954::-;31847:3;31888:5;31882:12;31921:36;31947:9;31921:36;:::i;:::-;31977:89;32059:6;32054:3;31977:89;:::i;:::-;31970:96;;32101:1;32090:9;32086:17;32121:1;32116:182;;;;32316:1;32311:377;;;;32079:609;;32116:182;32208:4;32204:9;32193;32189:25;32184:3;32177:38;32274:6;32267:14;32260:22;32252:6;32248:35;32243:3;32239:45;32232:52;;32116:182;;32311:377;32386:38;32418:5;32386:38;:::i;:::-;32450:1;32468:166;32482:6;32479:1;32476:13;32468:166;;;32560:7;32554:14;32550:1;32545:3;32541:11;32534:35;32614:1;32605:7;32601:15;32590:26;;32504:4;32501:1;32497:12;32492:17;;32468:166;;;32667:6;32662:3;32658:16;32651:23;;32318:370;;32079:609;;31851:847;;31744:954;;;;:::o;32708:222::-;32852:66;32848:1;32840:6;32836:14;32829:90;32708:222;:::o;32940:418::-;33100:3;33125:85;33207:2;33202:3;33125:85;:::i;:::-;33118:92;;33223:93;33312:3;33223:93;:::i;:::-;33345:2;33340:3;33336:12;33329:19;;32940:418;;;:::o;33368:222::-;33512:66;33508:1;33500:6;33496:14;33489:90;33368:222;:::o;33600:418::-;33760:3;33785:85;33867:2;33862:3;33785:85;:::i;:::-;33778:92;;33883:93;33972:3;33883:93;:::i;:::-;34005:2;34000:3;33996:12;33989:19;;33600:418;;;:::o;34028:222::-;34172:66;34168:1;34160:6;34156:14;34149:90;34028:222;:::o;34260:418::-;34420:3;34445:85;34527:2;34522:3;34445:85;:::i;:::-;34438:92;;34543:93;34632:3;34543:93;:::i;:::-;34665:2;34660:3;34656:12;34649:19;;34260:418;;;:::o;34688:222::-;34832:66;34828:1;34820:6;34816:14;34809:90;34688:222;:::o;34920:416::-;35080:3;35105:84;35187:1;35182:3;35105:84;:::i;:::-;35098:91;;35202:93;35291:3;35202:93;:::i;:::-;35324:1;35319:3;35315:11;35308:18;;34920:416;;;:::o;35346:151::-;35486:3;35482:1;35474:6;35470:14;35463:27;35346:151;:::o;35503:400::-;35663:3;35684:84;35766:1;35761:3;35684:84;:::i;:::-;35677:91;;35777:93;35866:3;35777:93;:::i;:::-;35895:1;35890:3;35886:11;35879:18;;35503:400;;;:::o;35909:152::-;36049:4;36045:1;36037:6;36033:14;36026:28;35909:152;:::o;36067:400::-;36227:3;36248:84;36330:1;36325:3;36248:84;:::i;:::-;36241:91;;36341:93;36430:3;36341:93;:::i;:::-;36459:1;36454:3;36450:11;36443:18;;36067:400;;;:::o;36473:214::-;36613:66;36609:1;36601:6;36597:14;36590:90;36473:214;:::o;36693:402::-;36853:3;36874:85;36956:2;36951:3;36874:85;:::i;:::-;36867:92;;36968:93;37057:3;36968:93;:::i;:::-;37086:2;37081:3;37077:12;37070:19;;36693:402;;;:::o;37101:214::-;37241:66;37237:1;37229:6;37225:14;37218:90;37101:214;:::o;37321:402::-;37481:3;37502:85;37584:2;37579:3;37502:85;:::i;:::-;37495:92;;37596:93;37685:3;37596:93;:::i;:::-;37714:2;37709:3;37705:12;37698:19;;37321:402;;;:::o;37729:214::-;37869:66;37865:1;37857:6;37853:14;37846:90;37729:214;:::o;37949:400::-;38109:3;38130:84;38212:1;38207:3;38130:84;:::i;:::-;38123:91;;38223:93;38312:3;38223:93;:::i;:::-;38341:1;38336:3;38332:11;38325:18;;37949:400;;;:::o;38355:214::-;38495:66;38491:1;38483:6;38479:14;38472:90;38355:214;:::o;38575:400::-;38735:3;38756:84;38838:1;38833:3;38756:84;:::i;:::-;38749:91;;38849:93;38938:3;38849:93;:::i;:::-;38967:1;38962:3;38958:11;38951:18;;38575:400;;;:::o;38981:214::-;39121:66;39117:1;39109:6;39105:14;39098:90;38981:214;:::o;39201:400::-;39361:3;39382:84;39464:1;39459:3;39382:84;:::i;:::-;39375:91;;39475:93;39564:3;39475:93;:::i;:::-;39593:1;39588:3;39584:11;39577:18;;39201:400;;;:::o;39607:214::-;39747:66;39743:1;39735:6;39731:14;39724:90;39607:214;:::o;39827:400::-;39987:3;40008:84;40090:1;40085:3;40008:84;:::i;:::-;40001:91;;40101:93;40190:3;40101:93;:::i;:::-;40219:1;40214:3;40210:11;40203:18;;39827:400;;;:::o;40233:214::-;40373:66;40369:1;40361:6;40357:14;40350:90;40233:214;:::o;40453:400::-;40613:3;40634:84;40716:1;40711:3;40634:84;:::i;:::-;40627:91;;40727:93;40816:3;40727:93;:::i;:::-;40845:1;40840:3;40836:11;40829:18;;40453:400;;;:::o;40859:8849::-;44126:3;44148:148;44292:3;44148:148;:::i;:::-;44141:155;;44313:148;44457:3;44313:148;:::i;:::-;44306:155;;44478:95;44569:3;44560:6;44478:95;:::i;:::-;44471:102;;44590:148;44734:3;44590:148;:::i;:::-;44583:155;;44755:148;44899:3;44755:148;:::i;:::-;44748:155;;44920:92;45008:3;44999:6;44920:92;:::i;:::-;44913:99;;45029:148;45173:3;45029:148;:::i;:::-;45022:155;;45194:148;45338:3;45194:148;:::i;:::-;45187:155;;45359:148;45503:3;45359:148;:::i;:::-;45352:155;;45524:148;45668:3;45524:148;:::i;:::-;45517:155;;45689:148;45833:3;45689:148;:::i;:::-;45682:155;;45854:92;45942:3;45933:6;45854:92;:::i;:::-;45847:99;;45963:148;46107:3;45963:148;:::i;:::-;45956:155;;46128:148;46272:3;46128:148;:::i;:::-;46121:155;;46293:148;46437:3;46293:148;:::i;:::-;46286:155;;46458:148;46602:3;46458:148;:::i;:::-;46451:155;;46623:95;46714:3;46705:6;46623:95;:::i;:::-;46616:102;;46735:148;46879:3;46735:148;:::i;:::-;46728:155;;46900:148;47044:3;46900:148;:::i;:::-;46893:155;;47065:92;47153:3;47144:6;47065:92;:::i;:::-;47058:99;;47174:148;47318:3;47174:148;:::i;:::-;47167:155;;47339:148;47483:3;47339:148;:::i;:::-;47332:155;;47504:92;47592:3;47583:6;47504:92;:::i;:::-;47497:99;;47613:148;47757:3;47613:148;:::i;:::-;47606:155;;47778:148;47922:3;47778:148;:::i;:::-;47771:155;;47943:92;48031:3;48022:6;47943:92;:::i;:::-;47936:99;;48052:148;48196:3;48052:148;:::i;:::-;48045:155;;48217:148;48361:3;48217:148;:::i;:::-;48210:155;;48382:92;48470:3;48461:6;48382:92;:::i;:::-;48375:99;;48491:148;48635:3;48491:148;:::i;:::-;48484:155;;48656:148;48800:3;48656:148;:::i;:::-;48649:155;;48821:92;48909:3;48900:6;48821:92;:::i;:::-;48814:99;;48930:148;49074:3;48930:148;:::i;:::-;48923:155;;49095:148;49239:3;49095:148;:::i;:::-;49088:155;;49260:92;49348:3;49339:6;49260:92;:::i;:::-;49253:99;;49369:148;49513:3;49369:148;:::i;:::-;49362:155;;49534:148;49678:3;49534:148;:::i;:::-;49527:155;;49699:3;49692:10;;40859:8849;;;;;;;;;;;;;:::o;49714:179::-;49854:31;49850:1;49842:6;49838:14;49831:55;49714:179;:::o;49899:402::-;50059:3;50080:85;50162:2;50157:3;50080:85;:::i;:::-;50073:92;;50174:93;50263:3;50174:93;:::i;:::-;50292:2;50287:3;50283:12;50276:19;;49899:402;;;:::o;50307:541::-;50540:3;50562:148;50706:3;50562:148;:::i;:::-;50555:155;;50727:95;50818:3;50809:6;50727:95;:::i;:::-;50720:102;;50839:3;50832:10;;50307:541;;;;:::o;50854:925::-;50994:66;50990:1;50982:6;50978:14;50971:90;51095:66;51090:2;51082:6;51078:15;51071:91;51196:66;51191:2;51183:6;51179:15;51172:91;51297:66;51292:2;51284:6;51280:15;51273:91;51399:66;51393:3;51385:6;51381:16;51374:92;51501:66;51495:3;51487:6;51483:16;51476:92;51603:66;51597:3;51589:6;51585:16;51578:92;51705:66;51699:3;51691:6;51687:16;51680:92;50854:925;:::o;51785:404::-;51945:3;51966:86;52048:3;52043;51966:86;:::i;:::-;51959:93;;52061;52150:3;52061:93;:::i;:::-;52179:3;52174;52170:13;52163:20;;51785:404;;;:::o;52195:158::-;52335:10;52331:1;52323:6;52319:14;52312:34;52195:158;:::o;52359:400::-;52519:3;52540:84;52622:1;52617:3;52540:84;:::i;:::-;52533:91;;52633:93;52722:3;52633:93;:::i;:::-;52751:1;52746:3;52742:11;52735:18;;52359:400;;;:::o;52765:416::-;52905:66;52901:1;52893:6;52889:14;52882:90;53006:66;53001:2;52993:6;52989:15;52982:91;53107:66;53102:2;53094:6;53090:15;53083:91;52765:416;:::o;53187:402::-;53347:3;53368:85;53450:2;53445:3;53368:85;:::i;:::-;53361:92;;53462:93;53551:3;53462:93;:::i;:::-;53580:2;53575:3;53571:12;53564:19;;53187:402;;;:::o;53595:721::-;53735:66;53731:1;53723:6;53719:14;53712:90;53836:66;53831:2;53823:6;53819:15;53812:91;53937:66;53932:2;53924:6;53920:15;53913:91;54038:66;54033:2;54025:6;54021:15;54014:91;54140:66;54134:3;54126:6;54122:16;54115:92;54242:66;54236:3;54228:6;54224:16;54217:92;53595:721;:::o;54322:404::-;54482:3;54503:86;54585:3;54580;54503:86;:::i;:::-;54496:93;;54598;54687:3;54598:93;:::i;:::-;54716:3;54711;54707:13;54700:20;;54322:404;;;:::o;54732:721::-;54872:66;54868:1;54860:6;54856:14;54849:90;54973:66;54968:2;54960:6;54956:15;54949:91;55074:66;55069:2;55061:6;55057:15;55050:91;55175:66;55170:2;55162:6;55158:15;55151:91;55277:66;55271:3;55263:6;55259:16;55252:92;55379:66;55373:3;55365:6;55361:16;55354:92;54732:721;:::o;55459:404::-;55619:3;55640:86;55722:3;55717;55640:86;:::i;:::-;55633:93;;55735;55824:3;55735:93;:::i;:::-;55853:3;55848;55844:13;55837:20;;55459:404;;;:::o;55869:925::-;56009:66;56005:1;55997:6;55993:14;55986:90;56110:66;56105:2;56097:6;56093:15;56086:91;56211:66;56206:2;56198:6;56194:15;56187:91;56312:66;56307:2;56299:6;56295:15;56288:91;56414:66;56408:3;56400:6;56396:16;56389:92;56516:66;56510:3;56502:6;56498:16;56491:92;56618:66;56612:3;56604:6;56600:16;56593:92;56720:66;56714:3;56706:6;56702:16;56695:92;55869:925;:::o;56800:404::-;56960:3;56981:86;57063:3;57058;56981:86;:::i;:::-;56974:93;;57076;57165:3;57076:93;:::i;:::-;57194:3;57189;57185:13;57178:20;;56800:404;;;:::o;57210:6463::-;57350:66;57346:1;57338:6;57334:14;57327:90;57451:66;57446:2;57438:6;57434:15;57427:91;57552:66;57547:2;57539:6;57535:15;57528:91;57653:66;57648:2;57640:6;57636:15;57629:91;57755:66;57749:3;57741:6;57737:16;57730:92;57857:66;57851:3;57843:6;57839:16;57832:92;57959:66;57953:3;57945:6;57941:16;57934:92;58061:66;58055:3;58047:6;58043:16;58036:92;58163:66;58157:3;58149:6;58145:16;58138:92;58265:66;58259:3;58251:6;58247:16;58240:92;58367:66;58361:3;58353:6;58349:16;58342:92;58469:66;58463:3;58455:6;58451:16;58444:92;58571:66;58565:3;58557:6;58553:16;58546:92;58673:66;58667:3;58659:6;58655:16;58648:92;58775:66;58769:3;58761:6;58757:16;58750:92;58877:66;58871:3;58863:6;58859:16;58852:92;58979:66;58973:3;58965:6;58961:16;58954:92;59081:66;59075:3;59067:6;59063:16;59056:92;59183:66;59177:3;59169:6;59165:16;59158:92;59285:66;59279:3;59271:6;59267:16;59260:92;59387:66;59381:3;59373:6;59369:16;59362:92;59489:66;59483:3;59475:6;59471:16;59464:92;59591:66;59585:3;59577:6;59573:16;59566:92;59693:66;59687:3;59679:6;59675:16;59668:92;59795:66;59789:3;59781:6;59777:16;59770:92;59897:66;59891:3;59883:6;59879:16;59872:92;59999:66;59993:3;59985:6;59981:16;59974:92;60101:66;60095:3;60087:6;60083:16;60076:92;60203:66;60197:3;60189:6;60185:16;60178:92;60305:66;60299:3;60291:6;60287:16;60280:92;60407:66;60401:3;60393:6;60389:16;60382:92;60509:66;60503:3;60495:6;60491:16;60484:92;60612:66;60605:4;60597:6;60593:17;60586:93;60715:66;60708:4;60700:6;60696:17;60689:93;60818:66;60811:4;60803:6;60799:17;60792:93;60921:66;60914:4;60906:6;60902:17;60895:93;61024:66;61017:4;61009:6;61005:17;60998:93;61127:66;61120:4;61112:6;61108:17;61101:93;61230:66;61223:4;61215:6;61211:17;61204:93;61333:66;61326:4;61318:6;61314:17;61307:93;61436:66;61429:4;61421:6;61417:17;61410:93;61539:66;61532:4;61524:6;61520:17;61513:93;61642:66;61635:4;61627:6;61623:17;61616:93;61745:66;61738:4;61730:6;61726:17;61719:93;61848:66;61841:4;61833:6;61829:17;61822:93;61951:66;61944:4;61936:6;61932:17;61925:93;62054:66;62047:4;62039:6;62035:17;62028:93;62157:66;62150:4;62142:6;62138:17;62131:93;62260:66;62253:4;62245:6;62241:17;62234:93;62363:66;62356:4;62348:6;62344:17;62337:93;62466:66;62459:4;62451:6;62447:17;62440:93;62569:66;62562:4;62554:6;62550:17;62543:93;62672:66;62665:4;62657:6;62653:17;62646:93;62775:66;62768:4;62760:6;62756:17;62749:93;62878:66;62871:4;62863:6;62859:17;62852:93;62981:66;62974:4;62966:6;62962:17;62955:93;63084:66;63077:4;63069:6;63065:17;63058:93;63187:66;63180:4;63172:6;63168:17;63161:93;63290:66;63283:4;63275:6;63271:17;63264:93;63393:66;63386:4;63378:6;63374:17;63367:93;63496:66;63489:4;63481:6;63477:17;63470:93;63599:66;63592:4;63584:6;63580:17;63573:93;57210:6463;:::o;63679:406::-;63839:3;63860:87;63942:4;63937:3;63860:87;:::i;:::-;63853:94;;63956:93;64045:3;63956:93;:::i;:::-;64074:4;64069:3;64065:14;64058:21;;63679:406;;;:::o;64091:1333::-;64231:66;64227:1;64219:6;64215:14;64208:90;64332:66;64327:2;64319:6;64315:15;64308:91;64433:66;64428:2;64420:6;64416:15;64409:91;64534:66;64529:2;64521:6;64517:15;64510:91;64636:66;64630:3;64622:6;64618:16;64611:92;64738:66;64732:3;64724:6;64720:16;64713:92;64840:66;64834:3;64826:6;64822:16;64815:92;64942:66;64936:3;64928:6;64924:16;64917:92;65044:66;65038:3;65030:6;65026:16;65019:92;65146:66;65140:3;65132:6;65128:16;65121:92;65248:66;65242:3;65234:6;65230:16;65223:92;65350:66;65344:3;65336:6;65332:16;65325:92;64091:1333;:::o;65430:404::-;65590:3;65611:86;65693:3;65688;65611:86;:::i;:::-;65604:93;;65706;65795:3;65706:93;:::i;:::-;65824:3;65819;65815:13;65808:20;;65430:404;;;:::o;65840:1333::-;65980:66;65976:1;65968:6;65964:14;65957:90;66081:66;66076:2;66068:6;66064:15;66057:91;66182:66;66177:2;66169:6;66165:15;66158:91;66283:66;66278:2;66270:6;66266:15;66259:91;66385:66;66379:3;66371:6;66367:16;66360:92;66487:66;66481:3;66473:6;66469:16;66462:92;66589:66;66583:3;66575:6;66571:16;66564:92;66691:66;66685:3;66677:6;66673:16;66666:92;66793:66;66787:3;66779:6;66775:16;66768:92;66895:66;66889:3;66881:6;66877:16;66870:92;66997:66;66991:3;66983:6;66979:16;66972:92;67099:66;67093:3;67085:6;67081:16;67074:92;65840:1333;:::o;67179:404::-;67339:3;67360:86;67442:3;67437;67360:86;:::i;:::-;67353:93;;67455;67544:3;67455:93;:::i;:::-;67573:3;67568;67564:13;67557:20;;67179:404;;;:::o;67589:1333::-;67729:66;67725:1;67717:6;67713:14;67706:90;67830:66;67825:2;67817:6;67813:15;67806:91;67931:66;67926:2;67918:6;67914:15;67907:91;68032:66;68027:2;68019:6;68015:15;68008:91;68134:66;68128:3;68120:6;68116:16;68109:92;68236:66;68230:3;68222:6;68218:16;68211:92;68338:66;68332:3;68324:6;68320:16;68313:92;68440:66;68434:3;68426:6;68422:16;68415:92;68542:66;68536:3;68528:6;68524:16;68517:92;68644:66;68638:3;68630:6;68626:16;68619:92;68746:66;68740:3;68732:6;68728:16;68721:92;68848:66;68842:3;68834:6;68830:16;68823:92;67589:1333;:::o;68928:404::-;69088:3;69109:86;69191:3;69186;69109:86;:::i;:::-;69102:93;;69204;69293:3;69204:93;:::i;:::-;69322:3;69317;69313:13;69306:20;;68928:404;;;:::o;69338:765::-;69478:66;69474:1;69466:6;69462:14;69455:90;69579:66;69574:2;69566:6;69562:15;69555:91;69680:66;69675:2;69667:6;69663:15;69656:91;69781:66;69776:2;69768:6;69764:15;69757:91;69883:66;69877:3;69869:6;69865:16;69858:92;69985:66;69979:3;69971:6;69967:16;69960:92;70087:8;70081:3;70073:6;70069:16;70062:34;69338:765;:::o;70109:404::-;70269:3;70290:86;70372:3;70367;70290:86;:::i;:::-;70283:93;;70385;70474:3;70385:93;:::i;:::-;70503:3;70498;70494:13;70487:20;;70109:404;;;:::o;70519:4629::-;72188:3;72210:148;72354:3;72210:148;:::i;:::-;72203:155;;72375:92;72463:3;72454:6;72375:92;:::i;:::-;72368:99;;72484:148;72628:3;72484:148;:::i;:::-;72477:155;;72649:95;72740:3;72731:6;72649:95;:::i;:::-;72642:102;;72761:148;72905:3;72761:148;:::i;:::-;72754:155;;72926:95;73017:3;73008:6;72926:95;:::i;:::-;72919:102;;73038:148;73182:3;73038:148;:::i;:::-;73031:155;;73203:95;73294:3;73285:6;73203:95;:::i;:::-;73196:102;;73315:148;73459:3;73315:148;:::i;:::-;73308:155;;73480:95;73571:3;73562:6;73480:95;:::i;:::-;73473:102;;73592:148;73736:3;73592:148;:::i;:::-;73585:155;;73757:92;73845:3;73836:6;73757:92;:::i;:::-;73750:99;;73866:148;74010:3;73866:148;:::i;:::-;73859:155;;74031:95;74122:3;74113:6;74031:95;:::i;:::-;74024:102;;74143:148;74287:3;74143:148;:::i;:::-;74136:155;;74308:95;74399:3;74390:6;74308:95;:::i;:::-;74301:102;;74420:148;74564:3;74420:148;:::i;:::-;74413:155;;74585:95;74676:3;74667:6;74585:95;:::i;:::-;74578:102;;74697:148;74841:3;74697:148;:::i;:::-;74690:155;;74862:95;74953:3;74944:6;74862:95;:::i;:::-;74855:102;;74974:148;75118:3;74974:148;:::i;:::-;74967:155;;75139:3;75132:10;;70519:4629;;;;;;;;;;;;;:::o;75154:176::-;75294:28;75290:1;75282:6;75278:14;75271:52;75154:176;:::o;75336:402::-;75496:3;75517:85;75599:2;75594:3;75517:85;:::i;:::-;75510:92;;75611:93;75700:3;75611:93;:::i;:::-;75729:2;75724:3;75720:12;75713:19;;75336:402;;;:::o;75744:541::-;75977:3;75999:148;76143:3;75999:148;:::i;:::-;75992:155;;76164:95;76255:3;76246:6;76164:95;:::i;:::-;76157:102;;76276:3;76269:10;;75744:541;;;;:::o;76291:269::-;76420:3;76442:92;76530:3;76521:6;76442:92;:::i;:::-;76435:99;;76551:3;76544:10;;76291:269;;;;:::o;76566:191::-;76606:3;76625:20;76643:1;76625:20;:::i;:::-;76620:25;;76659:20;76677:1;76659:20;:::i;:::-;76654:25;;76702:1;76699;76695:9;76688:16;;76723:3;76720:1;76717:10;76714:36;;;76730:18;;:::i;:::-;76714:36;76566:191;;;;:::o;76763:171::-;76903:23;76899:1;76891:6;76887:14;76880:47;76763:171;:::o;76940:366::-;77082:3;77103:67;77167:2;77162:3;77103:67;:::i;:::-;77096:74;;77179:93;77268:3;77179:93;:::i;:::-;77297:2;77292:3;77288:12;77281:19;;76940:366;;;:::o;77312:419::-;77478:4;77516:2;77505:9;77501:18;77493:26;;77565:9;77559:4;77555:20;77551:1;77540:9;77536:17;77529:47;77593:131;77719:4;77593:131;:::i;:::-;77585:139;;77312:419;;;:::o;77737:179::-;77877:31;77873:1;77865:6;77861:14;77854:55;77737:179;:::o;77922:366::-;78064:3;78085:67;78149:2;78144:3;78085:67;:::i;:::-;78078:74;;78161:93;78250:3;78161:93;:::i;:::-;78279:2;78274:3;78270:12;78263:19;;77922:366;;;:::o;78294:419::-;78460:4;78498:2;78487:9;78483:18;78475:26;;78547:9;78541:4;78537:20;78533:1;78522:9;78518:17;78511:47;78575:131;78701:4;78575:131;:::i;:::-;78567:139;;78294:419;;;:::o;78719:174::-;78859:26;78855:1;78847:6;78843:14;78836:50;78719:174;:::o;78899:366::-;79041:3;79062:67;79126:2;79121:3;79062:67;:::i;:::-;79055:74;;79138:93;79227:3;79138:93;:::i;:::-;79256:2;79251:3;79247:12;79240:19;;78899:366;;;:::o;79271:419::-;79437:4;79475:2;79464:9;79460:18;79452:26;;79524:9;79518:4;79514:20;79510:1;79499:9;79495:17;79488:47;79552:131;79678:4;79552:131;:::i;:::-;79544:139;;79271:419;;;:::o;79696:194::-;79736:4;79756:20;79774:1;79756:20;:::i;:::-;79751:25;;79790:20;79808:1;79790:20;:::i;:::-;79785:25;;79834:1;79831;79827:9;79819:17;;79858:1;79852:4;79849:11;79846:37;;;79863:18;;:::i;:::-;79846:37;79696:194;;;;:::o;79896:240::-;80036:34;80032:1;80024:6;80020:14;80013:58;80105:23;80100:2;80092:6;80088:15;80081:48;79896:240;:::o;80142:366::-;80284:3;80305:67;80369:2;80364:3;80305:67;:::i;:::-;80298:74;;80381:93;80470:3;80381:93;:::i;:::-;80499:2;80494:3;80490:12;80483:19;;80142:366;;;:::o;80514:419::-;80680:4;80718:2;80707:9;80703:18;80695:26;;80767:9;80761:4;80757:20;80753:1;80742:9;80738:17;80731:47;80795:131;80921:4;80795:131;:::i;:::-;80787:139;;80514:419;;;:::o;80939:180::-;80987:77;80984:1;80977:88;81084:4;81081:1;81074:15;81108:4;81105:1;81098:15;81125:185;81165:1;81182:20;81200:1;81182:20;:::i;:::-;81177:25;;81216:20;81234:1;81216:20;:::i;:::-;81211:25;;81255:1;81245:35;;81260:18;;:::i;:::-;81245:35;81302:1;81299;81295:9;81290:14;;81125:185;;;;:::o;81316:176::-;81348:1;81365:20;81383:1;81365:20;:::i;:::-;81360:25;;81399:20;81417:1;81399:20;:::i;:::-;81394:25;;81438:1;81428:35;;81443:18;;:::i;:::-;81428:35;81484:1;81481;81477:9;81472:14;;81316:176;;;;:::o;81498:180::-;81546:77;81543:1;81536:88;81643:4;81640:1;81633:15;81667:4;81664:1;81657:15;81684:410;81724:7;81747:20;81765:1;81747:20;:::i;:::-;81742:25;;81781:20;81799:1;81781:20;:::i;:::-;81776:25;;81836:1;81833;81829:9;81858:30;81876:11;81858:30;:::i;:::-;81847:41;;82037:1;82028:7;82024:15;82021:1;82018:22;81998:1;81991:9;81971:83;81948:139;;82067:18;;:::i;:::-;81948:139;81732:362;81684:410;;;;:::o;82100:315::-;82240:66;82236:1;82228:6;82224:14;82217:90;82341:66;82336:2;82328:6;82324:15;82317:91;82100:315;:::o;82421:402::-;82581:3;82602:85;82684:2;82679:3;82602:85;:::i;:::-;82595:92;;82696:93;82785:3;82696:93;:::i;:::-;82814:2;82809:3;82805:12;82798:19;;82421:402;;;:::o;82829:315::-;82969:66;82965:1;82957:6;82953:14;82946:90;83070:66;83065:2;83057:6;83053:15;83046:91;82829:315;:::o;83150:402::-;83310:3;83331:85;83413:2;83408:3;83331:85;:::i;:::-;83324:92;;83425:93;83514:3;83425:93;:::i;:::-;83543:2;83538:3;83534:12;83527:19;;83150:402;;;:::o;83558:214::-;83698:66;83694:1;83686:6;83682:14;83675:90;83558:214;:::o;83778:400::-;83938:3;83959:84;84041:1;84036:3;83959:84;:::i;:::-;83952:91;;84052:93;84141:3;84052:93;:::i;:::-;84170:1;84165:3;84161:11;84154:18;;83778:400;;;:::o;84184:1387::-;84712:3;84734:148;84878:3;84734:148;:::i;:::-;84727:155;;84899:95;84990:3;84981:6;84899:95;:::i;:::-;84892:102;;85011:148;85155:3;85011:148;:::i;:::-;85004:155;;85176:92;85264:3;85255:6;85176:92;:::i;:::-;85169:99;;85285:148;85429:3;85285:148;:::i;:::-;85278:155;;85450:95;85541:3;85532:6;85450:95;:::i;:::-;85443:102;;85562:3;85555:10;;84184:1387;;;;;;:::o;85577:98::-;85628:6;85662:5;85656:12;85646:22;;85577:98;;;:::o;85681:168::-;85764:11;85798:6;85793:3;85786:19;85838:4;85833:3;85829:14;85814:29;;85681:168;;;;:::o;85855:373::-;85941:3;85969:38;86001:5;85969:38;:::i;:::-;86023:70;86086:6;86081:3;86023:70;:::i;:::-;86016:77;;86102:65;86160:6;86155:3;86148:4;86141:5;86137:16;86102:65;:::i;:::-;86192:29;86214:6;86192:29;:::i;:::-;86187:3;86183:39;86176:46;;85945:283;85855:373;;;;:::o;86234:640::-;86429:4;86467:3;86456:9;86452:19;86444:27;;86481:71;86549:1;86538:9;86534:17;86525:6;86481:71;:::i;:::-;86562:72;86630:2;86619:9;86615:18;86606:6;86562:72;:::i;:::-;86644;86712:2;86701:9;86697:18;86688:6;86644:72;:::i;:::-;86763:9;86757:4;86753:20;86748:2;86737:9;86733:18;86726:48;86791:76;86862:4;86853:6;86791:76;:::i;:::-;86783:84;;86234:640;;;;;;;:::o;86880:141::-;86936:5;86967:6;86961:13;86952:22;;86983:32;87009:5;86983:32;:::i;:::-;86880:141;;;;:::o;87027:349::-;87096:6;87145:2;87133:9;87124:7;87120:23;87116:32;87113:119;;;87151:79;;:::i;:::-;87113:119;87271:1;87296:63;87351:7;87342:6;87331:9;87327:22;87296:63;:::i;:::-;87286:73;;87242:127;87027:349;;;;:::o;87382:237::-;87522:34;87518:1;87510:6;87506:14;87499:58;87591:20;87586:2;87578:6;87574:15;87567:45;87382:237;:::o;87625:366::-;87767:3;87788:67;87852:2;87847:3;87788:67;:::i;:::-;87781:74;;87864:93;87953:3;87864:93;:::i;:::-;87982:2;87977:3;87973:12;87966:19;;87625:366;;;:::o;87997:419::-;88163:4;88201:2;88190:9;88186:18;88178:26;;88250:9;88244:4;88240:20;88236:1;88225:9;88221:17;88214:47;88278:131;88404:4;88278:131;:::i;:::-;88270:139;;87997:419;;;:::o

Swarm Source

ipfs://73d4dcefb106cfdfff26f9b1a511b90ebb9d889ee1a14ed9dcca36c89fa9e5ba
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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